chatlab-convert について
chatlab-convertは、未対応のローカルチャットエクスポートをChatLab形式に変換するスキルです。元ファイルを保持し、再現可能なスクリプトと厳密な検証で変換結果を確認します。
主な機能
- 01元ファイルを読み取り専用で保持
- 02JSONLと再現可能なスクリプトを優先
- 03構造を調査してフィールドを対応付け
- 04変換不能なレコードを保持または報告
- 05出力とインポート準備状況を検証
活用シーン
- 01ChatLab未対応のチャットエクスポートを変換
- 02複数の会話を個別の出力ファイルに作成
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ chatlab/ chatlab --skill chatlab-convertインストール後、Claude Code で/chatlab-convertを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
agents/openai.yamlreferences/chatlab-format.mdscripts/validate-chatlab.mjs詳細
ChatLab Convert
ソースを変更せずに、未対応のローカルエクスポートを変換します。一度限りの書き換え済みファイルより、再現可能なスクリプトと検証済みの JSONL 結果を優先してください。
ユーザーが指定した言語で応答してください。指定がない場合は会話の言語を使い、該当する場合はユーザーが使っている中国語の変種を維持してください。コマンド、フィールド名、ID、証拠マーカーは変更しないでください。
必須ルール
- すべてのソースファイルを読み取り専用にしてください。スクリプト、サンプル、展開したアーカイブ、出力は、ユーザーが出力先を指定している場合はその場所を使い、それ以外は別の作業ディレクトリに書き込んでください。
- チャットデータはローカルに保持してください。アップロードしたり、ネットワークサービスに送信したり、メッセージ本文をモデルから見える端末出力に表示したりしないでください。
- まず構造を調べてください。キー、列名、値の型、件数、タイムスタンプの形式、マスキングしたサンプルを確認してください。診断出力では、メッセージテキストをその型と長さに置き換えてください。
- 不正な形式または未対応のソースレコードを、黙ってスキップしないでください。ソースの行番号/インデックスを示してエラーにするか、メッセージタイプ
99として保持し、マッピング件数を明示してください。 - 承認なしにパッケージやシステムツールをインストールしないでください。インストール済みの Node.js/Python 標準ライブラリを優先し、シェルは調査とオーケストレーションにのみ使用してください。
- ユーザーがインポートを明示的に依頼しない限り、ChatLab データをインポートまたは変更しないでください。「変換してインポート」という依頼は、すべてのゲートを通過した後のインポート承認とみなします。
ワークフロー
1. ソースと CLI を確認する
依頼と会話の内容からソースを特定してください。曖昧さが残る場合に限り、ユーザーに確認してください。利用可能な機能は一度だけ確認し、タスク内ではその結果を再利用してください。
clb --help
clb validate --help
clb formats
clb import "/absolute/path/to/source" --dry-run --json
ドライランでソースが認識された場合は、変換が不要であることを報告してください。インポートを依頼された場合に限り、利用可能であれば chatlab-import を使い、そうでなければ以下のプレビュー/書き込み手順を使ってください。
clb validate を利用できない場合は、インストールを提案して変換を中断することなく、scripts/validate-chatlab.mjs で処理を続行してください。バンドルされたバリデーターには Node.js 22.19 以降が必要です。古い CLI でも formats とインポートのドライランに対応している場合があります。実際に利用できる機能を使ってください。CLI が利用できない場合は、ネイティブ形式のサポートとインポート準備状況を確認できなかったことを伝えてください。
厳密なバリデーターをどちらも実行できない場合は、可能な範囲でコンバーターを完成させ、出力が未検証であることを報告してください。厳密な検証を目視確認で代用しないでください。不足しているランタイムまたは CLI が依頼された結果を妨げる場合に限り、インストールの承認を求めてください。
2. 内容を露出させずに調査する
ファイルのメタデータ、エンコーディング、アーカイブ内のファイル、JSON キー、CSV ヘッダー、XML/HTML の要素名、またはデータベースのテーブルスキーマから調査を始めてください。cat、制限のない head、またはメッセージ列の生データを表示する SQL クエリは実行しないでください。
値のサンプルが必要な場合は、以下だけを出力する短いローカルインスペクターを作成してください。
- フィールド名と値の型
- レコード数と null 数
- タイムスタンプと識別子の形式
<TEXT length=42>のようなマスキング済みテキスト- 構造が異なるレコードを、上限数まで
アーカイブの場合は、別の作業ディレクトリに展開し、その外に出るエントリーを拒否してください。データベースは読み取り専用で開いてください。
3. マッピングを定義する
コンバーターを書く前に、references/chatlab-format.md でフィールドの仕様と選択した出力形式を確認してください。以下を含め、ソースフィールドから ChatLab フィールドへのマッピングを記録してください。
- 会話の境界とグループ/プライベートの種別
- 安定したメンバー識別情報と所有者の識別情報
- タイムスタンプの単位とタイムゾーン
- メッセージタイプ、内容、元のメッセージ ID、返信の関係
- ソースレコード数と、正確には表現できないレコード
曖昧さが識別情報、会話の境界、タイムスタンプの意味、または所有者の特定に影響する場合に限り、ユーザーに確認してください。これらのフィールドを推測しないでください。
1 つの ChatLab ファイルが表すのは 1 つの会話です。ソースに複数の会話が含まれている場合は、衝突を避けた決定論的な名前で、会話ごとに 1 つの出力を生成してください。誤って統合しないでください。
4. 決定論的なコンバーターを作成する
JSONL を優先してください。結果全体をメモリに保持しても明らかに安全な、小規模で自然な構造のエクスポートに限り、JSON を使用してください。
ソース形式によって特定の言語が必須とされていない場合は、インストール済みの Node.js または Python ランタイムから、最もシンプルで適切なものを使用してください。
コンバーターは次の要件を満たす必要があります。
- ローカルパスを埋め込まず、引数で入力パスと出力パスを受け取ること。
- ソースを変更せず、上書きを拒否すること。
- 一時出力に書き込み、成功した場合にのみ名前を変更すること。
- ソースの順序を保持するか、タイムスタンプと安定したソース順序番号で並べ替えること。
- ソース ID を保持すること。ID がない場合、返信に決定論的 ID が必要な場合を除き、任意のメッセージ ID は省略すること。
- 不足しているメンバー ID は、ランダムな値ではなく、安定した識別フィールドから決定論的に導出すること。
- 大きなファイルではレコードをストリーミングし、メッセージ本文を表示せずに進捗を出力すること。
- 解析に失敗した場合は 0 以外のステータスで終了し、ソース、出力、スキップ件数の最終サマリーを出力すること。
skipped の既定値は 0 にしてください。不明なメッセージを type 99 にマッピングすることは、データの保持であり、レコードのスキップではありません。
5. 小規模なサンプルで検証する
大きなファイルやマッピングに不確実な点がある場合は、まず件数を制限したローカルサンプルを実行してください。入力が小さければ、そのまま全件を変換して検証できます。CLI が利用可能な場合は、次のコマンドで出力を検証してください。
clb validate "/absolute/path/to/sample.jsonl" --json
CLI が利用できない場合は、この SKILL.md が含まれるディレクトリを探し、同梱のバリデーターを使用してください。
node "/absolute/path/to/chatlab-convert/scripts/validate-chatlab.mjs" "/absolute/path/to/sample.jsonl"
全件変換を実行する前に、検証エラーをすべて修正してください。警告を確認し、それぞれが許容できる理由を説明してください。自動的に無視してはいけません。
6. すべてを変換して検証する
コンバーターを全件に対して実行し、生成されたすべてのファイルを CLI または同梱のバリデーターで検証してください。CLI が利用可能な場合は、インポートのドライランも実行してください。
clb validate "/absolute/path/to/converted.jsonl" --json
clb import "/absolute/path/to/converted.jsonl" --dry-run --json
CLI が利用できない場合は、次を実行してください。
node "/absolute/path/to/chatlab-convert/scripts/validate-chatlab.mjs" "/absolute/path/to/converted.jsonl"
結果のレベルは明確に区別してください。
- 形式検証済み:CLI または同梱の厳格なバリデーターが
ok: trueを返し、コンバーターとバリデーターのメッセージ件数が一致し、ソースのメッセージ数が出力メッセージ数と明示的に許容されたスキップレコード数の合計に一致し、ソースの解析エラーが隠されていないこと。 - インポート検証済み:形式検証に合格し、さらに
clb import --dry-run --jsonもok: trueを返すこと。
CLI が利用できない場合は、「形式検証済み」とだけ報告してください。ユーザーには、後で CLI をインストールしてドライランを実行するか、結果を ChatLab にドラッグできることを伝えてください。インポート検証に合格したと主張してはいけません。
7. 要求された場合に限りインポートする
ユーザーが変換のみを依頼した場合は、現在の環境で可能な検証をすべて終えた時点で停止してください。メッセージを引用せずに、出力とスクリプトのパス、会話、メンバー、メッセージ、スキップレコード、警告、マッピングの制約、実際に到達した検証レベルを報告してください。
ユーザーが明示的にインポートを依頼した場合は、同じ検証済みファイルを --dry-run を付けずに実行してください。
clb import "/absolute/path/to/converted.jsonl" --json
CLI がまだ利用できない場合は、自動インポートには chatlab-cli が必要であることを説明し、インストールを勧めてください。インストールする前に、必ず許可を得てください。「形式検証済み」をインポート済みとして扱ってはいけません。
出力が複数ある場合は、それぞれを個別にプレビューしてインポートしてください。結果のセッション ID と件数をすべて報告し、コンバーターや変換済みファイルを削除してはいけません。