MaxHu-xuan/chat-archive-guard

Audit AI chat exports locally before sharing or migration. Find possible secrets, personal-data patterns, broken JSON/JSONL, SQLite issues, and scan gaps—without uploading the archive.

ChatArchiveGuardとは?

ChatArchiveGuardは、エクスポートされたチャットログを含むローカルディレクトリ(または単一ファイル)を監査する、小さな純Python製のコマンドラインユーティリティです。ファイルを変更したり、データをどこかに送信したりせずにスキャンし、以下を報告します:

  1. 潜在的なシークレットまたは個人データパターン – 例:APIキー、ベアラートークン、メールアドレス、電話番号、クレジットカードに似た番号。
  2. フォーマットの問題 – 不正なUTF-8、壊れたJSON/JSONLファイル。
  3. SQLiteの健全性 – データベースのプライベートコピー(WAL/SHMサイドカーを含む)に対してSQLiteのPRAGMA quick_check(1)を実行し、通常およびFTSテーブル内の読み取り可能なテキストを探します。
  4. カバレッジのギャップ – 検査可能なすべてのファイルが実際にスキャンされたかどうか、または権限の問題、リソース制限、サポートされていないファイルタイプのためにスキャンが切り詰められたかどうかを示します。

このツールは配信前のゲートとして意図されています:チャットエクスポートをアナリスト、バックアップパイプライン、またはサードパーティサービスに渡す前に、迅速なローカル監査を実行して、偶発的な資格情報の漏洩や破損ファイルを検出できます。


主な機能(READMEに記載されている通り)

機能 仕組み 出力で確認できるもの
シークレットおよびPII検出 秘密鍵、プロバイダートークン、JWT、メールアドレス、電話番号、IP、ID番号、Luhn検証済みカード番号などの正規表現ベースのパターン secret.provider_keypii.emailなどのカテゴリ数(実際の値は表示されません)。
フォーマット検証 UTF-8の有効性をチェックし、JSON/JSONLファイルを解析します。 format.invalid_jsonformat.invalid_jsonlなどのカテゴリ。
SQLiteの整合性 メインDBとWAL/SHMファイルをプライベートな一時ディレクトリにコピーし、コピーを開いてPRAGMA quick_check(1)を実行し、テキスト列(FTS仮想テーブルを含む)をスキャンします。 sqlite.*の下のカテゴリ(例:sqlite.quick_check_failed)。
ディレクトリカバレッジレポート files_seen(遭遇したすべてのファイル)とfiles_scanned(コンテンツチェックに入ったファイル)を追跡し、制限やエラーが完全なカバレッジを妨げる場合にcomplete/truncatedフラグを立てます。 JSON/テキストレポートのブールフラグと数値カウンタ。
サマリーのみモード --summary-onlyはファイルパスと個々の検出結果の詳細を削除し、集計数のみを残します – ファイル名やデータを公開したくないCIパイプラインに便利です。 同じ終了コードですが、details_omitted/findings_omittedがtrueに設定されます。
ハードリソース制限 ファイルサイズ、ファイル数、SQLite行、値サイズ、および総検出結果の上限により、スキャンを予測可能に保ちます。 制限に達すると特別な検出結果が追加され、truncatedがtrueになります。
クロスプラットフォームの安全性 Python標準ライブラリのみを使用します。シンボリックリンクをたどらずにSQLiteを安全に開けないプラットフォーム(Windows)では、ツールはそのファイルを中止し、データ漏洩のリスクを冒す代わりに安全でないとマークします。 Windowsではsqlite.sidecar_unsafeカテゴリ。

誰が使うのか?

  • データエンジニアまたはMLオペレーションチーム – Slack、Teams、Discordなどからチャットエクスポートダンプを受け取り、シークレットが下流パイプラインに誤って送信されないようにする必要がある場合。
  • セキュリティ監査人 – アーカイブまたは共有の前にオフラインプライバシーチェックを実行する場合。
  • CI/CDパイプライン – チャットエクスポートにフラグ付きのシークレットまたは不正なファイルが含まれている場合にビルドを自動的に拒否する場合。
  • 個人開発者 – チャットアーカイブをバージョン管理にコミットする前に、迅速なオフライン健全性チェックを希望する場合。

始め方

  1. インストール(Python 3.11以上が必要):
    python3 -m venv .venv && . .venv/bin/activate
    python -m pip install chat-archive-guard
    
  2. ディレクトリのスキャンを実行
    chat-archive-guard /path/to/export          # 人間が読めるテキストレポート
    chat-archive-guard /path/to/export --json   # JSONレポート
    chat-archive-guard /path/to/export --json --summary-only   # CIフレンドリーな集計のみ
    
  3. 終了コードを解釈
    • 0 – 検出結果がなく、スキャンがすべてをカバーしました。
    • 1 – 少なくとも1つの検出結果または不完全なカバレッジ。
    • 2 – 無効なパス/引数。

制限事項としないこと

  • チャットメッセージが完全、本物、または改ざんされていないことを検証しません
  • 圧縮アーカイブ、暗号化ファイル、画像、音声、または独自のバイナリ形式を読み取りません
  • 本格的なDLPまたはフォレンジックツールとして機能しません。検出結果はパターンベースであり、誤検出/誤検出を含む可能性があります。
  • データをアップロードしません。唯一のネットワークアクティビティはオプションのパッケージインストールです。

詳細情報の入手先

  • ソースコードと問題トラッカー:https://github.com/MaxHu-xuan/chat-archive-guard
  • ライセンス:Apache 2.0(LICENSEを参照)
  • 詳細な脅威モデル:THREAT_MODEL.md
  • リリースノートと変更ログ:RELEASE_NOTES.mdCHANGELOG.md

TL;DR

ChatArchiveGuardは、チャットエクスポートファイルをシークレット、個人データ、不正なJSON/UTF-8、SQLiteの整合性問題について安全にスキャンする軽量なオフラインPythonツールであり、明確な集計レポートとCI互換の終了コードを提供します。チャットログを共有または処理する前に、迅速なプライバシーファーストのゲートを必要とする人に役立ちます。

関連

  • プロジェクト
  • プロジェクト
  • プロジェクト
  • プロジェクト