概要
Local runtimeの診断コードが、生成本文やreasoning本文の一部をAppLogへ直接記録しています。
根拠
- KizunaAI/AI/LocalAssistantRuntimeBridge.swift:472-479
- KizunaAI/AI/LocalAssistantRuntimeBridge.swift:3131-3138
- KizunaAI/AI/LocalAssistantRuntimeBridge.swift:4247-4252
- KizunaAI/AI/LocalAssistantRuntimeBridge.swift:4308-4323
問題
AppLogはprivate privacy指定ですが、Console.app等で機密データ表示を許可した利用者・診断収集経路では、会話本文、思考本文、Providerのエラー応答がログへ残ります。Persona/Storyの個人情報、system prompt、外部APIが返す本文が、会話履歴とは別の保持経路へ複製されます。
#494の移行パス/エラー詳細の問題とは異なり、本Issueは生成コンテンツそのもののログ出力を対象にします。
修正案
本文ではなく長さ、ハッシュ、enum化した状態だけを記録する。デバッグ時も明示的な開発ビルド限定フラグにし、既定ではcontent/reasoning/error bodyを出力しない。
テスト
秘密文字列を含む生成結果を流し、AppLogの診断メッセージに本文・reasoning・error bodyが存在しないことを確認する。
概要
Local runtimeの診断コードが、生成本文やreasoning本文の一部をAppLogへ直接記録しています。
根拠
問題
AppLogはprivate privacy指定ですが、Console.app等で機密データ表示を許可した利用者・診断収集経路では、会話本文、思考本文、Providerのエラー応答がログへ残ります。Persona/Storyの個人情報、system prompt、外部APIが返す本文が、会話履歴とは別の保持経路へ複製されます。
#494の移行パス/エラー詳細の問題とは異なり、本Issueは生成コンテンツそのもののログ出力を対象にします。
修正案
本文ではなく長さ、ハッシュ、enum化した状態だけを記録する。デバッグ時も明示的な開発ビルド限定フラグにし、既定ではcontent/reasoning/error bodyを出力しない。
テスト
秘密文字列を含む生成結果を流し、AppLogの診断メッセージに本文・reasoning・error bodyが存在しないことを確認する。