From 4ba1af8807a068707ede93d60d444c715e13adb9 Mon Sep 17 00:00:00 2001 From: yororoIce <3364817735@qq.com> Date: Tue, 29 Sep 2026 16:46:27 +0800 Subject: [PATCH 1/2] =?UTF-8?q?docs(readme):=20=E4=BC=98=E5=8C=96=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E8=A7=86=E8=A7=89=E5=B1=82=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 118 ++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 87 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index 3e451da..381f1b4 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,71 @@ -# Trae2OpenCode + + +

+ + Trae2OpenCode + +

+ +

Trae2OpenCode

+ +

+ 把 TRAE 会话完整带到 OpenCode。 +
+ 自动导出、脱敏、映射与导入,并在写入后逐项回读核验。 +

+ +

+ Quality + GitHub Release + Node.js >= 18.18 + macOS and Windows + ISC License +

+ +

+ 项目网站 + · + 快速开始 + · + 操作手册 + · + 兼容性 + · + 故障排查 + · + 更新记录 +

+ + + +--- + +> [!IMPORTANT] +> 首次使用请先阅读[操作手册](docs/operation-manual.md)。macOS 必须从终端以调试参数启动 +> TRAE,否则工具无法读取完整消息正文。 + +## 一条命令,完成可信迁移 + +打开目标会话所在的 TRAE 项目窗口,然后在仓库根目录运行: -把可恢复的 TRAE 会话迁移到 OpenCode,并在写入后逐项回读核对。日常使用只需要: - -1. 打开要迁移会话所在的 TRAE 项目窗口。 -2. 在本仓库根目录运行 `npm run migrate:local`。 -3. 按编号选择窗口和一个或多个会话,等待批量迁移完成。 - -工具会自动导出、脱敏、检查兼容性、导入、回读核验,并在中断后安全续跑。不会要求输入 -workbench ID 或 session ID。 +```sh +npm run migrate:local +``` -支持在 **macOS 与 Windows** 上直接读取本机 TRAE 会话,并按目标版本自动选择 -OpenCode **v1 或 v2 协议**。 +按编号选择窗口和一个或多个会话即可。工具不会要求手动输入 workbench ID 或 session ID, +中断后也可以基于已生成的迁移记录安全续跑。 -项目网站:[Trae2OpenCode](https://trae2opencode.yororoice.top/) +| 交互式选择 | 安全处理 | 双协议适配 | 写入后验证 | +| :---: | :---: | :---: | :---: | +| 自动发现项目窗口与会话 | 凭据识别、脱敏与覆盖保护 | OpenCode v1 / v2 自动识别 | 消息、推理、工具记录与 Hash 对账 | -> **首次使用请按 [操作手册](docs/operation-manual.md) 完成准备。** -> 特别是 macOS 必须从终端以调试参数启动 TRAE,否则工具无法读取完整消息正文。 +```mermaid +flowchart LR + A["TRAE 会话
只读提取"] --> B["导出与脱敏
Migration Bundle"] + B --> C["协议映射
OpenCode v1 / v2"] + C --> D["原生导入"] + D --> E["回读核验
内容与 Hash 对账"] +``` ## 适用范围 @@ -32,13 +82,17 @@ OpenCode 根据实际协议 profile 和隔离往返结果决定能否迁移。v2 HTTP `SessionTransfer` 路径;v1 自动区分 legacy 与当前会话 schema,均通过 `opencode import` / `opencode export` 子命令。 -> **未收录的 OpenCode 稳定版本不再仅因版本号被拒绝。** -> CLI 与目标服务必须为同一版本,必要路由和 schema 必须完全匹配或仅有安全增量,然后在独立临时库中 -> 验证导入、导出、回读、冲突与删除保护。通过后才允许迁移;预发布版本、未知主版本、 -> 破坏性 schema 变化或行为验证失败仍会停止。无需增加跳过校验参数。 -> -> **旧版本也不是无条件放行。** `opencode-ai@1.15.x` 无法保留安全所有权 metadata, -> `1.14.x` 的 OpenAPI 不暴露完整会话 schema,因此仍拒绝写入;工具不会直写旧版数据库。 +> [!NOTE] +> 未收录的 OpenCode 稳定版本不会仅因版本号被拒绝。CLI 与目标服务必须为同一版本, +> 必要路由和 schema 必须完全匹配或仅有安全增量;工具还会在独立临时库中验证导入、 +> 导出、回读、冲突与删除保护,通过后才允许迁移。 + + + +> [!WARNING] +> 预发布版本、未知主版本、破坏性 schema 变化或行为验证失败仍会停止。 +> `opencode-ai@1.15.x` 无法保留安全所有权 metadata,`1.14.x` 的 OpenAPI 不暴露完整会话 +> schema,因此同样拒绝写入;工具不会直写旧版数据库。 ## 快速开始 @@ -223,7 +277,9 @@ TRAE 本身的历史被删除,源数据始终保持只读。 | `trae-export/` | 最新 bundle,用于重新映射和续跑 | 是 | | `migration-run/` | manifest、回读证据和迁移状态 | 否 | -这两个目录均为本地私人数据,已经在 `.gitignore` 中忽略,**不要提交、共享或上传**。 +> [!CAUTION] +> 这两个目录均为本地私人数据,已经在 `.gitignore` 中忽略。不要提交、共享或上传。 + 工具只自动清理由当前 verified 版本替代的旧终态目录;失败、进行中或无法确认安全性的记录 会保留,供续跑或排查使用。 @@ -241,16 +297,16 @@ TRAE 本身的历史被删除,源数据始终保持只读。 | `目标会话已存在,但缺少可验证的旧 manifest` | 目标归属无法证明,因此不会覆盖;恢复对应 manifest 或在 OpenCode 中人工确认处理。 | | `迁移 bundle 超过 1 GiB` | 选择更小的会话;不要修改 bundle 来绕过限制。 | -## 高级操作与文档 +## 文档索引 -- [操作手册:从准备到验证、续跑与回滚](docs/operation-manual.md) -- [OpenCode 协议兼容性检测](docs/opencode-compatibility.md) -- [产品与数据格式版本管理](docs/versioning.md)、[变更记录](CHANGELOG.md) -- [故障排查与错误码](docs/troubleshooting.md) -- [离线 CLI、dry-run、导入与回读](docs/m5-1-readonly-cli.md)、[迁移记录与续跑](docs/m5-3-manifest-resume.md) -- [凭据处理边界](docs/m5-6-sensitive-content.md)、[回滚与恢复](docs/m5-5-rollback.md) -- [实现规划与验收矩阵](docs/implementation-plan.md)、[真实来源验收报告](docs/m5-7-live-runtime-e2e.md) -- [开发环境故障排查](docs/development-troubleshooting.md) +| 主题 | 文档 | +| --- | --- | +| 开始使用 | [操作手册:准备、迁移、验证、续跑与回滚](docs/operation-manual.md) | +| 兼容性 | [OpenCode 协议兼容性检测](docs/opencode-compatibility.md) · [产品与数据格式版本管理](docs/versioning.md) · [变更记录](CHANGELOG.md) | +| 故障处理 | [常见故障与错误码](docs/troubleshooting.md) · [开发环境故障排查](docs/development-troubleshooting.md) | +| 迁移机制 | [离线 CLI、dry-run、导入与回读](docs/m5-1-readonly-cli.md) · [迁移记录与续跑](docs/m5-3-manifest-resume.md) | +| 安全与恢复 | [凭据处理边界](docs/m5-6-sensitive-content.md) · [回滚与恢复](docs/m5-5-rollback.md) | +| 设计与验收 | [实现规划与验收矩阵](docs/implementation-plan.md) · [真实来源验收报告](docs/m5-7-live-runtime-e2e.md) | ## 许可证 From 4b2d72488b3f0812e97f8bfc70679b7618d36449 Mon Sep 17 00:00:00 2001 From: yororoIce <3364817735@qq.com> Date: Tue, 29 Sep 2026 16:50:53 +0800 Subject: [PATCH 2/2] =?UTF-8?q?docs(readme):=20=E6=B7=BB=E5=8A=A0=E5=A4=9A?= =?UTF-8?q?=E8=AF=AD=E8=A8=80=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.de.md | 285 ++++++++++++++++++++++++++++++++++++++ README.en.md | 281 +++++++++++++++++++++++++++++++++++++ README.ja.md | 269 +++++++++++++++++++++++++++++++++++ README.md | 14 ++ README.ru.md | 279 +++++++++++++++++++++++++++++++++++++ README.zh-Hant.md | 267 +++++++++++++++++++++++++++++++++++ scripts/verify-package.ts | 10 +- 7 files changed, 1404 insertions(+), 1 deletion(-) create mode 100644 README.de.md create mode 100644 README.en.md create mode 100644 README.ja.md create mode 100644 README.ru.md create mode 100644 README.zh-Hant.md diff --git a/README.de.md b/README.de.md new file mode 100644 index 0000000..e6b8ead --- /dev/null +++ b/README.de.md @@ -0,0 +1,285 @@ + + +

+ + Trae2OpenCode + +

+ +

Trae2OpenCode

+ +

+ 简体中文 + · + English + · + 日本語 + · + Deutsch + · + Русский + · + 繁體中文 +

+ +

+ TRAE-Sitzungen vollständig zu OpenCode übertragen. +
+ Automatisch exportieren, bereinigen, abbilden und importieren und anschließend alle Daten erneut prüfen. +

+ +

+ Quality + GitHub Release + Node.js >= 18.18 + macOS and Windows + ISC License +

+ +

+ Website + · + Schnellstart + · + Bedienungsanleitung + · + Kompatibilität + · + Fehlerbehebung + · + Änderungen +

+ + + +--- + +> [!IMPORTANT] +> Lesen Sie vor der ersten Migration die [Bedienungsanleitung](docs/operation-manual.md). +> Unter macOS muss TRAE mit den unten gezeigten Debug-Optionen aus einem Terminal gestartet +> werden. Andernfalls kann das Tool die vollständigen Nachrichteninhalte nicht lesen. + +## Ein Befehl, überprüfbare Migration + +Öffnen Sie das TRAE-Projektfenster mit den gewünschten Sitzungen und führen Sie im +Stammverzeichnis des Repositorys Folgendes aus: + +```sh +npm run migrate:local +``` + +Wählen Sie das Fenster und eine oder mehrere Sitzungen per Nummer aus. Workbench-ID und +Session-ID müssen nie manuell eingegeben werden. Unterbrochene Läufe können anhand ihrer +Migrationsdaten sicher fortgesetzt werden. + +| Interaktive Auswahl | Sichere Verarbeitung | Zwei Protokolle | Prüfung nach dem Schreiben | +| :---: | :---: | :---: | :---: | +| Erkennt Projektfenster und Sitzungen | Bereinigt Zugangsdaten und schützt vor Überschreiben | Erkennt OpenCode v1 / v2 automatisch | Gleicht Nachrichten, Reasoning, Tools und Hashes ab | + +```mermaid +flowchart LR + A["TRAE-Sitzung
Schreibgeschützt lesen"] --> B["Export und Bereinigung
Migration Bundle"] + B --> C["Protokollabbildung
OpenCode v1 / v2"] + C --> D["Nativer Import"] + D --> E["Erneutes Lesen
Inhalt und Hash abgleichen"] +``` + +## Kompatibilität + +| Komponente | Anforderung | +| --- | --- | +| TRAE-Quelle | TRAE CN **3.3.104**, angemeldet und mit lokalem CDP-Port `9222` gestartet | +| OpenCode-v2-Ziel | Geprüfte Versionen: **2.0.0** (legacy), **2.0.12**, **2.0.16**; andere stabile 2.x-Versionen werden automatisch geprüft | +| OpenCode-v1-Ziel | Geprüfte Versionen: **1.16.0 / 1.17.0** (legacy), **1.17.9 / 1.18.32**; andere stabile 1.x-Versionen werden automatisch geprüft | +| Betriebssystem | macOS und Windows lesen lokale TRAE-Daten direkt; Linux importiert nur bereits exportierte Bundles | +| Node.js | `>=18.18`; Node.js 22 wird empfohlen | + +Anhänge, Skills und MCP-Ressourcen werden derzeit nicht migriert. Unbekannte TRAE-Versionen +werden abgelehnt. Die OpenCode-Kompatibilität wird anhand des tatsächlichen Protokollprofils +und eines isolierten Roundtrip-Tests entschieden, nicht allein anhand der Versionsnummer. + +> [!NOTE] +> Bei einer nicht aufgeführten stabilen OpenCode-Version müssen CLI und Zieldienst dieselbe +> Version verwenden. Erforderliche Routen und Schemas müssen exakt übereinstimmen oder dürfen +> nur sichere Ergänzungen enthalten. Import, Export, erneutes Lesen, Konflikte und Löschschutz +> werden vor der Freigabe in einer isolierten temporären Datenbank geprüft. + + + +> [!WARNING] +> Vorabversionen, unbekannte Hauptversionen, inkompatible Schemaänderungen und fehlgeschlagene +> Verhaltenstests werden abgelehnt. `opencode-ai@1.15.x` kann Eigentümer-Metadaten nicht +> erhalten; die OpenAPI von `1.14.x` stellt das vollständige Sitzungsschema nicht bereit. +> Das Tool schreibt niemals direkt in eine ältere Datenbank. + +## Schnellstart + +### 1. Repository klonen und Abhängigkeiten installieren + +Das Paket ist noch nicht auf npm veröffentlicht: + +```sh +git clone https://github.com/yororoA/Trae2OpenCode.git +cd Trae2OpenCode +npm ci +``` + +Prüfen Sie die lokale Umgebung: + +```sh +node --version +npm run check +``` + +### 2. Unterstützte OpenCode-Version installieren + +Für OpenCode v2: + +```sh +npm install -g @opencode/cli@2.0.16 +opencode --version +``` + +Für OpenCode v1: + +```sh +npm install -g opencode-ai@1.18.32 +opencode --version +``` + +Für unterstützte Versionen wird automatisch das aktuelle oder das Legacy-Profil ausgewählt. +Mit `npm run verify:opencode` lässt sich eine lokale Installation vorab prüfen. Der Befehl +unterstützt `--binary`, `--output` und `--json`; Einzelheiten stehen im +[Kompatibilitätsleitfaden](docs/opencode-compatibility.md#独立验证本机-opencode). + +`migrate:local` erkennt den aktiven OpenCode-Dienst und dessen dynamischen Port. Ist kein +geeigneter Dienst verfügbar, startet es einen temporären Prozess auf dem lokalen Port `4097`, +verwendet den aktuellen lokalen Sitzungsspeicher und beendet anschließend nur diesen Prozess. + +Unter Windows erstellt npm `.cmd`- und `.ps1`-Shims. Das Tool ermittelt die native +`opencode.exe` automatisch. Schlägt dies fehl, verwenden Sie `T2O_OPENCODE_BINARY` oder `--binary`. + +### 3. TRAE im Debug-Modus starten + +Speichern Sie Ihre Arbeit, beenden Sie TRAE vollständig und starten Sie es unter macOS aus +einem Terminal: + +```sh +"/Applications/Trae CN.app/Contents/MacOS/Electron" \ + --remote-debugging-address=127.0.0.1 \ + --remote-debugging-port=9222 +``` + +Verwenden Sie nicht `open -a ... --args`; aktuelle TRAE-Versionen können diese Optionen ignorieren. + +Unter Windows PowerShell: + +```powershell +& "$env:LOCALAPPDATA\Programs\Trae CN\Trae CN.exe" ` + --remote-debugging-address=127.0.0.1 ` + --remote-debugging-port=9222 +``` + +Passen Sie den Pfad an, falls TRAE an einem anderen Ort installiert ist. Melden Sie sich an, +öffnen Sie das Zielprojekt und prüfen Sie, ob die Sitzungen im Verlauf angezeigt werden. + +### 4. Migration starten + +```sh +npm run migrate:local +``` + +Die Überschreibstrategie kann vorab festgelegt werden: + +```sh +npm run migrate:local -y # OVERWRITE automatisch bestätigen +npm run migrate:local -n # Sitzungen überspringen, die OVERWRITE erfordern +``` + +Diese Optionen steuern nur die Ersetzung. Workbenches und Sitzungen werden weiterhin aus +einer interaktiven Liste ausgewählt. Ohne Option fordert das Programm zur Eingabe von +`OVERWRITE` auf. + +Für jede ausgewählte Sitzung: + +1. Erstellt das Tool ein eigenes Bundle und Manifest. +2. Entfernt es erkannte Zugangsdaten aus Texten, Titeln und Tool-Payloads. +3. Prüft es Vollständigkeit und OpenCode-Kompatibilität vor dem Schreiben. +4. Importiert es nach OpenCode und liest Nachrichten, Reasoning, Tool-Daten und Hashes zurück. +5. Behält es den neuesten verifizierten Datensatz und entfernt nur ersetzte Abschlussdatensätze. + +Ist dieselbe Quellsitzung bereits im Ziel vorhanden, wird ein vertrauenswürdiges Manifest +einer früheren erfolgreichen Migration benötigt. Vor dem Ersetzen wird geprüft, dass die +alte Zielsitzung nicht verändert wurde. Fremde oder bearbeitete Sitzungen und Ziele ohne +verlässlichen Eigentumsnachweis werden niemals gelöscht. + +### 5. Ergebnis prüfen + +Öffnen Sie das Projekt in OpenCode und prüfen Sie Sitzungstitel, Nachrichtenanzahl und den +letzten Dialogschritt. Der TRAE-Verlauf bleibt schreibgeschützt und wird nicht gelöscht. + +Ausführliche Informationen zu Fortsetzung und Rollback finden Sie in der +[Bedienungsanleitung](docs/operation-manual.md). + +## Wichtige Einschränkungen + +- Die TRAE-Workbench der Zielsitzung muss geöffnet bleiben. Hintergrund und Minimierung werden + unterstützt, geschlossene Projektfenster liefern jedoch keine vollständigen Nachrichten. +- Ein Bundle darf höchstens `1 GiB`, die runtime-/transfer-Daten einer Sitzung höchstens + `384 MiB` groß sein. +- Sicher erkennbare Zugangsdaten werden durch `[REDACTED_SECRET]` ersetzt und die Sitzung als + `partial` markiert. Stehen Zugangsdaten in IDs, Pfaden oder nicht sicher änderbaren Feldern, + wird die Migration beendet. +- Gespeicherter Assistant-Fortschritt wird zu nativem OpenCode-Reasoning. Abschließende + Antworten bleiben normaler Text. +- TRAE-`exec_command`-Aufrufe werden zu aufklappbaren nativen OpenCode-Shell-Tools samt + gespeicherter Ausgabe. +- Große v2-Verläufe können wenige native Compaction-Checkpoints erhalten. OpenCode v1 besitzt + keine Carry-Summary-Nachrichten; große v1-Verläufe werden unverändert importiert. +- Nicht gespeicherte Tool-Ausgaben oder Antworten werden niemals erfunden. Fehlende Daten + werden ausdrücklich gekennzeichnet. + +## Migrationsdaten und Datenschutz + +Jede erfolgreiche Migration erzeugt: + +| Verzeichnis | Zweck | Enthält Sitzungstext | +| --- | --- | --- | +| `trae-export/` | Aktuelles Bundle für erneute Abbildung und Fortsetzung | Ja | +| `migration-run/` | Manifest, Readback-Nachweise und Migrationsstatus | Nein | + +> [!CAUTION] +> Diese Verzeichnisse enthalten private lokale Migrationsdaten. Sie stehen in `.gitignore`; +> sie dürfen nicht committet, geteilt oder hochgeladen werden. + +Automatisch entfernt werden nur alte Abschlussdatensätze, die durch die aktuelle verifizierte +Version ersetzt wurden. Fehlgeschlagene, laufende oder unsichere Datensätze bleiben für +Fortsetzung und Diagnose erhalten. + +## Häufige Probleme + +| Meldung | Maßnahme | +| --- | --- | +| `无法发现 TRAE workbench` | TRAE vollständig beenden, mit dem obigen Terminalbefehl neu starten und das Zielprojekt geöffnet lassen. | +| `所选 workbench 没有可迁移的本地会话` | Das richtige Projektfenster auswählen und dieses Projekt in TRAE öffnen. | +| `无法自动启动 OpenCode` | Prüfen, ob `opencode --version` funktioniert, dann `npm run verify:opencode` ausführen. | +| `OpenCode 版本或协议不受支持` | Eine stabile 1.x- oder 2.x-Version verwenden, die alle Sicherheitsprüfungen besteht. | +| `未收录的 OpenCode 版本需要同版本 CLI` | Dieselbe CLI-Version wie der Zieldienst installieren oder `T2O_OPENCODE_BINARY` setzen. | +| `所选会话包含当前无法无损映射的内容` | Es wurde nichts nach OpenCode geschrieben. Artefakte behalten und die [Fehlerbehebung](docs/troubleshooting.md) lesen. | + +## Dokumentation + +Die ausführliche Projektdokumentation ist derzeit auf vereinfachtem Chinesisch verfügbar. + +| Thema | Dokument | +| --- | --- | +| Erste Schritte | [Bedienungsanleitung](docs/operation-manual.md) | +| Kompatibilität | [OpenCode-Kompatibilität](docs/opencode-compatibility.md) · [Versionierung](docs/versioning.md) · [Änderungen](CHANGELOG.md) | +| Fehlerbehebung | [Fehler und häufige Probleme](docs/troubleshooting.md) · [Entwicklungsumgebung](docs/development-troubleshooting.md) | +| Migration | [Offline-CLI, Dry-run, Import und Readback](docs/m5-1-readonly-cli.md) · [Manifest und Fortsetzung](docs/m5-3-manifest-resume.md) | +| Sicherheit | [Umgang mit Zugangsdaten](docs/m5-6-sensitive-content.md) · [Rollback](docs/m5-5-rollback.md) | +| Entwurf und Abnahme | [Implementierungsplan](docs/implementation-plan.md) · [Live-Runtime-Bericht](docs/m5-7-live-runtime-e2e.md) | + +## Lizenz + +Copyright © 2026 yororoA. Veröffentlicht unter der [ISC License](LICENSE). diff --git a/README.en.md b/README.en.md new file mode 100644 index 0000000..432484a --- /dev/null +++ b/README.en.md @@ -0,0 +1,281 @@ + + +

+ + Trae2OpenCode + +

+ +

Trae2OpenCode

+ +

+ 简体中文 + · + English + · + 日本語 + · + Deutsch + · + Русский + · + 繁體中文 +

+ +

+ Bring your TRAE sessions to OpenCode, intact. +
+ Export, redact, map, and import automatically, then verify every item by reading it back. +

+ +

+ Quality + GitHub Release + Node.js >= 18.18 + macOS and Windows + ISC License +

+ +

+ Website + · + Quick start + · + Operation manual + · + Compatibility + · + Troubleshooting + · + Changelog +

+ + + +--- + +> [!IMPORTANT] +> Before your first migration, follow the [operation manual](docs/operation-manual.md). +> On macOS, TRAE must be launched from a terminal with the debugging flags shown below, +> or the tool cannot read complete message bodies. + +## One Command, Verifiable Migration + +Open the TRAE project window that contains the sessions you want, then run this command +from the repository root: + +```sh +npm run migrate:local +``` + +Select a window and one or more sessions by number. You never need to enter a workbench ID +or session ID manually, and interrupted runs can resume safely from their migration records. + +| Interactive selection | Safe handling | Dual-protocol support | Post-write verification | +| :---: | :---: | :---: | :---: | +| Discovers project windows and sessions | Credential redaction and overwrite protection | Detects OpenCode v1 / v2 automatically | Reconciles messages, reasoning, tools, and hashes | + +```mermaid +flowchart LR + A["TRAE session
Read-only extraction"] --> B["Export and redact
Migration Bundle"] + B --> C["Protocol mapping
OpenCode v1 / v2"] + C --> D["Native import"] + D --> E["Readback verification
Content and hash reconciliation"] +``` + +## Compatibility + +| Component | Requirement | +| --- | --- | +| TRAE source | TRAE CN **3.3.104**, signed in and started on local CDP port `9222` | +| OpenCode v2 target | Verified baselines: **2.0.0** (legacy), **2.0.12**, **2.0.16**; other stable 2.x releases are checked automatically | +| OpenCode v1 target | Verified baselines: **1.16.0 / 1.17.0** (legacy), **1.17.9 / 1.18.32**; other stable 1.x releases are checked automatically | +| Operating system | macOS and Windows can read local TRAE data; Linux can only import an exported bundle | +| Node.js | `>=18.18`; Node.js 22 is recommended | + +Attachments, Skills, and MCP resources are currently out of scope. Unknown TRAE source +versions are rejected. OpenCode support is decided by the detected protocol profile and an +isolated round-trip test rather than by the version number alone. + +> [!NOTE] +> For an unlisted stable OpenCode release, the CLI and target service must use the same +> version. Required routes and schemas must match exactly or contain only safe additions. +> Import, export, readback, conflict, and deletion protection are verified in an isolated +> temporary database before migration is allowed. + + + +> [!WARNING] +> Prereleases, unknown major versions, breaking schema changes, and failed behavioral checks +> are rejected. `opencode-ai@1.15.x` cannot preserve ownership metadata, and the `1.14.x` +> OpenAPI does not expose the complete session schema, so these releases are also rejected. +> The tool never writes directly to a legacy database. + +## Quick Start + +### 1. Clone and install + +The package is not published to npm yet: + +```sh +git clone https://github.com/yororoA/Trae2OpenCode.git +cd Trae2OpenCode +npm ci +``` + +Verify the local environment: + +```sh +node --version +npm run check +``` + +### 2. Install a supported OpenCode release + +For OpenCode v2: + +```sh +npm install -g @opencode/cli@2.0.16 +opencode --version +``` + +For OpenCode v1: + +```sh +npm install -g opencode-ai@1.18.32 +opencode --version +``` + +The tool automatically selects current or legacy profiles for supported releases. You can +also run `npm run verify:opencode` to check a local installation independently. It supports +`--binary`, `--output`, and `--json`; see the +[compatibility guide](docs/opencode-compatibility.md#独立验证本机-opencode). + +`migrate:local` discovers the active OpenCode service and its dynamic port. If no suitable +service is available, it starts a temporary process on local port `4097`, reuses the current +local session store, and stops only that process when migration finishes. + +On Windows, npm creates `.cmd` and `.ps1` shims. The tool resolves the native +`opencode.exe` automatically. If resolution fails, use `T2O_OPENCODE_BINARY` or `--binary`. + +### 3. Start TRAE in debug mode + +Save your work and quit TRAE completely. On macOS, launch it from a terminal: + +```sh +"/Applications/Trae CN.app/Contents/MacOS/Electron" \ + --remote-debugging-address=127.0.0.1 \ + --remote-debugging-port=9222 +``` + +Do not use `open -a ... --args`; current TRAE releases may ignore the debugging flags. + +On Windows PowerShell: + +```powershell +& "$env:LOCALAPPDATA\Programs\Trae CN\Trae CN.exe" ` + --remote-debugging-address=127.0.0.1 ` + --remote-debugging-port=9222 +``` + +If TRAE is installed elsewhere, update the executable path. Sign in, open the target project, +and make sure its sessions appear in the history panel. + +### 4. Run the migration + +```sh +npm run migrate:local +``` + +You can preselect the overwrite policy: + +```sh +npm run migrate:local -y # Confirm OVERWRITE automatically +npm run migrate:local -n # Skip sessions that require OVERWRITE +``` + +These flags only control replacement. Workbenches and sessions are still selected from an +interactive list. Without a flag, the program asks you to type `OVERWRITE`. + +For each selected session, the tool: + +1. Creates an independent bundle and manifest. +2. Redacts recognized credentials from text, titles, and tool payloads. +3. Checks migration completeness and OpenCode compatibility before writing. +4. Imports into OpenCode and reads back messages, reasoning, tool records, and hashes. +5. Keeps the latest verified migration record and removes only superseded terminal records. + +If the target already contains the same source session, the tool requires a trusted manifest +from a previous successful run. Before replacement, it verifies that the old target was not +modified. Foreign sessions, edited sessions, and targets without trusted ownership evidence +are never deleted. + +### 5. Verify the result + +Open the corresponding project in OpenCode and check the session title, message count, and +latest turn. The source TRAE history remains read-only and is never deleted. + +For detailed recovery, resume, and rollback procedures, see the +[operation manual](docs/operation-manual.md). + +## Important Limitations + +- The TRAE workbench for the target session must remain open. Minimized or background windows + are supported, but closed project windows cannot provide complete message bodies. +- A bundle can be at most `1 GiB`; per-session runtime or transfer data can be at most + `384 MiB`. +- Safely locatable credentials are replaced with `[REDACTED_SECRET]` and the session is marked + `partial`. Migration stops if a credential appears in an ID, path, or another field that + cannot be rewritten safely. +- Persisted assistant progress becomes native OpenCode reasoning. Final responses remain + normal text, and private `reasoning_content` remains a separate reasoning part. +- TRAE `exec_command` calls become native, expandable OpenCode shell tools with persisted + output. Original tool fields remain in metadata. +- Large v2 histories may receive a small number of native compaction checkpoints. OpenCode v1 + has no carry-summary compaction messages, so large v1 histories are imported unchanged. +- Missing tool output or final assistant text is never invented. Missing data is marked + explicitly, and internal tool JSON is not shown as chat text. + +## Migration Data and Privacy + +Each successful migration creates: + +| Directory | Purpose | Contains session text | +| --- | --- | --- | +| `trae-export/` | Latest bundle for remapping and resume | Yes | +| `migration-run/` | Manifest, readback evidence, and migration state | No | + +> [!CAUTION] +> These directories contain private local migration data. They are ignored by `.gitignore`; +> do not commit, share, or upload them. + +Only obsolete terminal records that were replaced by the current verified version are removed +automatically. Failed, active, or uncertain records are retained for resume and diagnostics. + +## Common Issues + +| Message | Action | +| --- | --- | +| `无法发现 TRAE workbench` | Quit TRAE completely and relaunch it with the terminal command above; keep the target project window open. | +| `所选 workbench 没有可迁移的本地会话` | Select the correct project window and open that project in TRAE. | +| `无法自动启动 OpenCode` | Confirm that `opencode --version` works, then run `npm run verify:opencode`. | +| `OpenCode 版本或协议不受支持` | Use a stable 1.x or 2.x release whose protocol profile and safety checks pass. | +| `未收录的 OpenCode 版本需要同版本 CLI` | Install the same CLI version as the target service, or set `T2O_OPENCODE_BINARY`. | +| `所选会话包含当前无法无损映射的内容` | Nothing was written to OpenCode. Keep the artifacts and review the [troubleshooting guide](docs/troubleshooting.md). | + +## Documentation + +The detailed project documentation is currently written in Simplified Chinese. + +| Topic | Document | +| --- | --- | +| Getting started | [Operation manual](docs/operation-manual.md) | +| Compatibility | [OpenCode compatibility](docs/opencode-compatibility.md) · [Versioning](docs/versioning.md) · [Changelog](CHANGELOG.md) | +| Troubleshooting | [Errors and common issues](docs/troubleshooting.md) · [Development troubleshooting](docs/development-troubleshooting.md) | +| Migration internals | [Offline CLI, dry-run, import, and readback](docs/m5-1-readonly-cli.md) · [Manifest and resume](docs/m5-3-manifest-resume.md) | +| Safety and recovery | [Credential handling](docs/m5-6-sensitive-content.md) · [Rollback](docs/m5-5-rollback.md) | +| Design and acceptance | [Implementation plan](docs/implementation-plan.md) · [Live runtime report](docs/m5-7-live-runtime-e2e.md) | + +## License + +Copyright © 2026 yororoA. Distributed under the [ISC License](LICENSE). diff --git a/README.ja.md b/README.ja.md new file mode 100644 index 0000000..13fdbff --- /dev/null +++ b/README.ja.md @@ -0,0 +1,269 @@ + + +

+ + Trae2OpenCode + +

+ +

Trae2OpenCode

+ +

+ 简体中文 + · + English + · + 日本語 + · + Deutsch + · + Русский + · + 繁體中文 +

+ +

+ TRAE のセッションを、そのまま OpenCode へ。 +
+ エクスポート、機密情報の除去、マッピング、インポートを自動化し、書き込み後に全項目を再検証します。 +

+ +

+ Quality + GitHub Release + Node.js >= 18.18 + macOS and Windows + ISC License +

+ +

+ Web サイト + · + クイックスタート + · + 操作マニュアル + · + 互換性 + · + トラブルシューティング + · + 変更履歴 +

+ + + +--- + +> [!IMPORTANT] +> 初回移行の前に[操作マニュアル](docs/operation-manual.md)を確認してください。 +> macOS では、以下のデバッグ引数を付けてターミナルから TRAE を起動する必要があります。 +> そうしないと、完全なメッセージ本文を読み取れません。 + +## 1 コマンドで検証可能な移行 + +移行対象のセッションがある TRAE プロジェクトウィンドウを開き、リポジトリのルートで実行します。 + +```sh +npm run migrate:local +``` + +ウィンドウと 1 つ以上のセッションを番号で選択するだけです。workbench ID や session ID を +手入力する必要はなく、中断した処理も保存済みの移行記録から安全に再開できます。 + +| 対話式選択 | 安全な処理 | 2 種類のプロトコル | 書き込み後の検証 | +| :---: | :---: | :---: | :---: | +| プロジェクトとセッションを自動検出 | 認証情報の除去と上書き保護 | OpenCode v1 / v2 を自動判定 | メッセージ、推論、ツール記録、Hash を照合 | + +```mermaid +flowchart LR + A["TRAE セッション
読み取り専用で抽出"] --> B["エクスポートと機密除去
Migration Bundle"] + B --> C["プロトコル変換
OpenCode v1 / v2"] + C --> D["ネイティブインポート"] + D --> E["再読み取り検証
内容と Hash の照合"] +``` + +## 対応環境 + +| コンポーネント | 要件 | +| --- | --- | +| TRAE ソース | TRAE CN **3.3.104**。ログイン済みで、ローカル CDP ポート `9222` を指定して起動 | +| OpenCode v2 | 検証済み:**2.0.0**(legacy)、**2.0.12**、**2.0.16**。その他の安定版 2.x は自動検証 | +| OpenCode v1 | 検証済み:**1.16.0 / 1.17.0**(legacy)、**1.17.9 / 1.18.32**。その他の安定版 1.x は自動検証 | +| OS | macOS と Windows はローカル TRAE を直接読み取り可能。Linux はエクスポート済み bundle のインポートのみ | +| Node.js | `>=18.18`。Node.js 22 推奨 | + +添付ファイル、Skill、MCP リソースは現在の移行対象外です。未確認の TRAE バージョンは拒否されます。 +OpenCode の可否はバージョン番号だけでなく、実際のプロトコルプロファイルと隔離された往復テストで決まります。 + +> [!NOTE] +> 一覧にない安定版 OpenCode では、CLI と対象サービスが同じバージョンである必要があります。 +> 必須ルートと schema が完全一致するか、安全な追加のみであることを確認し、独立した一時データベースで +> インポート、エクスポート、再読み取り、競合、削除保護を検証してから移行を許可します。 + + + +> [!WARNING] +> プレリリース、未知のメジャーバージョン、破壊的な schema 変更、動作検証の失敗は拒否されます。 +> `opencode-ai@1.15.x` は所有権 metadata を保持できず、`1.14.x` の OpenAPI は完全な +> セッション schema を公開しないため、これらも対象外です。旧版データベースへ直接書き込むことはありません。 + +## クイックスタート + +### 1. クローンと依存関係のインストール + +このパッケージはまだ npm に公開されていません。 + +```sh +git clone https://github.com/yororoA/Trae2OpenCode.git +cd Trae2OpenCode +npm ci +``` + +ローカル環境を確認します。 + +```sh +node --version +npm run check +``` + +### 2. 対応する OpenCode をインストール + +OpenCode v2: + +```sh +npm install -g @opencode/cli@2.0.16 +opencode --version +``` + +OpenCode v1: + +```sh +npm install -g opencode-ai@1.18.32 +opencode --version +``` + +対応バージョンでは current または legacy プロファイルが自動選択されます。 +`npm run verify:opencode` を使えば、ローカル環境だけを事前検証できます。 +`--binary`、`--output`、`--json` に対応しています。詳細は +[互換性ガイド](docs/opencode-compatibility.md#独立验证本机-opencode)を参照してください。 + +`migrate:local` は起動中の OpenCode サービスと動的ポートを検出します。利用可能なサービスがない場合は、 +ローカルポート `4097` で一時プロセスを起動し、現在のローカルセッションストアを使用します。 +移行終了時に停止するのは、この一時プロセスだけです。 + +Windows では npm が `.cmd` / `.ps1` shim を作成します。ツールはネイティブの +`opencode.exe` を自動解決します。失敗した場合は `T2O_OPENCODE_BINARY` または `--binary` を指定してください。 + +### 3. TRAE をデバッグモードで起動 + +作業を保存して TRAE を完全に終了し、macOS ではターミナルから起動します。 + +```sh +"/Applications/Trae CN.app/Contents/MacOS/Electron" \ + --remote-debugging-address=127.0.0.1 \ + --remote-debugging-port=9222 +``` + +`open -a ... --args` は使用しないでください。現在の TRAE ではデバッグ引数が無視される場合があります。 + +Windows PowerShell: + +```powershell +& "$env:LOCALAPPDATA\Programs\Trae CN\Trae CN.exe" ` + --remote-debugging-address=127.0.0.1 ` + --remote-debugging-port=9222 +``` + +別の場所にインストールしている場合は実行ファイルのパスを変更してください。TRAE にログインし、 +対象プロジェクトを開いて、履歴パネルにセッションが表示されることを確認します。 + +### 4. 移行を実行 + +```sh +npm run migrate:local +``` + +上書き方針を事前に指定できます。 + +```sh +npm run migrate:local -y # OVERWRITE を自動承認 +npm run migrate:local -n # OVERWRITE が必要なセッションをスキップ +``` + +これらの引数は置換方針だけを制御します。workbench とセッションは引き続き一覧から選択します。 +引数を付けない場合は `OVERWRITE` の入力を求められます。 + +選択したセッションごとに、ツールは次を実行します。 + +1. 独立した bundle と manifest を作成します。 +2. 本文、タイトル、ツール payload から認識済みの認証情報を除去します。 +3. 書き込み前に移行の完全性と OpenCode の互換性を確認します。 +4. OpenCode へインポートし、メッセージ、推論、ツール記録、Hash を再読み取りします。 +5. 最新の検証済み記録を保持し、置換済みの古い完了記録だけを削除します。 + +対象に同じソースセッションがある場合は、以前の成功した移行で作成された信頼できる manifest が必要です。 +置換前に既存セッションが変更されていないことを確認します。外部セッション、編集済みセッション、 +所有権を証明できない対象は削除されません。 + +### 5. 結果を確認 + +OpenCode で該当プロジェクトを開き、セッションタイトル、メッセージ数、最新ターンを確認します。 +元の TRAE 履歴は読み取り専用のままで、削除されません。 + +再開やロールバックを含む詳細な手順は[操作マニュアル](docs/operation-manual.md)を参照してください。 + +## 重要な制限 + +- 対象セッションの TRAE workbench を開いたままにする必要があります。バックグラウンドや最小化は可能ですが、 + 閉じたプロジェクトウィンドウから完全な本文を取得することはできません。 +- bundle の上限は `1 GiB`、1 セッションの runtime / transfer データの上限は `384 MiB` です。 +- 安全に特定できる認証情報は `[REDACTED_SECRET]` に置換され、セッションは `partial` になります。 + ID、パスなど安全に変更できないフィールドに認証情報がある場合、移行は停止します。 +- 保存済みの assistant 進捗は OpenCode のネイティブ reasoning になります。最終回答は通常の本文として保持されます。 +- TRAE の `exec_command` は OpenCode の展開可能なネイティブ shell ツールへ変換され、保存済み出力も保持されます。 +- 大きな v2 履歴には少数のネイティブ compaction checkpoint が追加される場合があります。 + OpenCode v1 には carry-summary がないため、大きな履歴はそのままインポートされます。 +- 保存されていないツール出力や最終回答を推測して補うことはありません。欠落は明示的に記録されます。 + +## 移行データとプライバシー + +成功した移行では次のディレクトリが作成されます。 + +| ディレクトリ | 用途 | セッション本文 | +| --- | --- | --- | +| `trae-export/` | 再マッピングと再開に使う最新 bundle | 含む | +| `migration-run/` | manifest、再読み取り証拠、移行状態 | 含まない | + +> [!CAUTION] +> これらはローカルの非公開データです。`.gitignore` の対象ですが、コミット、共有、アップロードしないでください。 + +現在の検証済みバージョンで置換された古い完了記録だけが自動削除されます。失敗中、実行中、 +または安全性を確認できない記録は、再開や調査のため保持されます。 + +## よくある問題 + +| 表示されるメッセージ | 対処 | +| --- | --- | +| `无法发现 TRAE workbench` | TRAE を完全に終了し、上記のターミナルコマンドで再起動して対象プロジェクトを開きます。 | +| `所选 workbench 没有可迁移的本地会话` | 正しいプロジェクトウィンドウを選び、そのプロジェクトを TRAE で開きます。 | +| `无法自动启动 OpenCode` | `opencode --version` を確認し、`npm run verify:opencode` を実行します。 | +| `OpenCode 版本或协议不受支持` | 安全性検証を通過する安定版 1.x または 2.x を使用します。 | +| `未收录的 OpenCode 版本需要同版本 CLI` | 対象サービスと同じバージョンの CLI をインストールするか、`T2O_OPENCODE_BINARY` を指定します。 | +| `所选会话包含当前无法无损映射的内容` | OpenCode への書き込みは行われていません。生成物を保持して[トラブルシューティング](docs/troubleshooting.md)を確認します。 | + +## ドキュメント + +詳細ドキュメントは現在、簡体字中国語で提供されています。 + +| トピック | ドキュメント | +| --- | --- | +| はじめに | [操作マニュアル](docs/operation-manual.md) | +| 互換性 | [OpenCode 互換性](docs/opencode-compatibility.md) · [バージョン管理](docs/versioning.md) · [変更履歴](CHANGELOG.md) | +| 問題解決 | [エラーと一般的な問題](docs/troubleshooting.md) · [開発環境の問題](docs/development-troubleshooting.md) | +| 移行の仕組み | [オフライン CLI、dry-run、インポート、再読み取り](docs/m5-1-readonly-cli.md) · [manifest と再開](docs/m5-3-manifest-resume.md) | +| 安全と復旧 | [認証情報の処理](docs/m5-6-sensitive-content.md) · [ロールバック](docs/m5-5-rollback.md) | +| 設計と検証 | [実装計画](docs/implementation-plan.md) · [実環境レポート](docs/m5-7-live-runtime-e2e.md) | + +## ライセンス + +Copyright © 2026 yororoA. [ISC License](LICENSE) の下で提供されます。 diff --git a/README.md b/README.md index 381f1b4..e612046 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,20 @@

Trae2OpenCode

+

+ 简体中文 + · + English + · + 日本語 + · + Deutsch + · + Русский + · + 繁體中文 +

+

把 TRAE 会话完整带到 OpenCode。
diff --git a/README.ru.md b/README.ru.md new file mode 100644 index 0000000..cc6586f --- /dev/null +++ b/README.ru.md @@ -0,0 +1,279 @@ + + +

+ + Trae2OpenCode + +

+ +

Trae2OpenCode

+ +

+ 简体中文 + · + English + · + 日本語 + · + Deutsch + · + Русский + · + 繁體中文 +

+ +

+ Перенесите сеансы TRAE в OpenCode без потери данных. +
+ Автоматический экспорт, удаление секретов, преобразование и импорт с последующей полной проверкой. +

+ +

+ Quality + GitHub Release + Node.js >= 18.18 + macOS and Windows + ISC License +

+ +

+ Сайт + · + Быстрый старт + · + Руководство + · + Совместимость + · + Решение проблем + · + История изменений +

+ + + +--- + +> [!IMPORTANT] +> Перед первой миграцией прочитайте [руководство](docs/operation-manual.md). +> В macOS TRAE необходимо запускать из терминала с указанными ниже параметрами отладки, +> иначе инструмент не сможет прочитать сообщения полностью. + +## Один запуск, проверяемая миграция + +Откройте окно проекта TRAE с нужными сеансами и выполните в корне репозитория: + +```sh +npm run migrate:local +``` + +Выберите окно и один или несколько сеансов по номеру. Вводить workbench ID или session ID +вручную не требуется. Прерванный процесс можно безопасно продолжить по сохранённым данным. + +| Интерактивный выбор | Безопасная обработка | Два протокола | Проверка после записи | +| :---: | :---: | :---: | :---: | +| Находит окна проектов и сеансы | Удаляет секреты и защищает от перезаписи | Автоматически определяет OpenCode v1 / v2 | Сверяет сообщения, рассуждения, инструменты и хеши | + +```mermaid +flowchart LR + A["Сеанс TRAE
Чтение без изменений"] --> B["Экспорт и очистка
Migration Bundle"] + B --> C["Преобразование протокола
OpenCode v1 / v2"] + C --> D["Нативный импорт"] + D --> E["Повторное чтение
Сверка содержимого и хеша"] +``` + +## Совместимость + +| Компонент | Требование | +| --- | --- | +| Источник TRAE | TRAE CN **3.3.104**, выполнен вход, запуск с локальным CDP-портом `9222` | +| Цель OpenCode v2 | Проверенные версии: **2.0.0** (legacy), **2.0.12**, **2.0.16**; другие стабильные версии 2.x проверяются автоматически | +| Цель OpenCode v1 | Проверенные версии: **1.16.0 / 1.17.0** (legacy), **1.17.9 / 1.18.32**; другие стабильные версии 1.x проверяются автоматически | +| Операционная система | macOS и Windows читают локальные данные TRAE; Linux поддерживает только импорт готового bundle | +| Node.js | `>=18.18`; рекомендуется Node.js 22 | + +Вложения, Skills и ресурсы MCP пока не переносятся. Неизвестные версии TRAE отклоняются. +Совместимость OpenCode определяется фактическим профилем протокола и изолированной проверкой +полного цикла, а не только номером версии. + +> [!NOTE] +> Для стабильной версии OpenCode, которой нет в списке, CLI и целевой сервис должны иметь +> одинаковую версию. Обязательные маршруты и схемы должны совпадать либо содержать только +> безопасные дополнения. Перед миграцией импорт, экспорт, повторное чтение, конфликты и защита +> удаления проверяются в отдельной временной базе данных. + + + +> [!WARNING] +> Предварительные версии, неизвестные основные версии, несовместимые изменения схемы и ошибки +> поведенческой проверки отклоняются. `opencode-ai@1.15.x` не сохраняет metadata владельца, +> а OpenAPI версии `1.14.x` не раскрывает полную схему сеанса. Инструмент никогда не записывает +> данные напрямую в устаревшую базу. + +## Быстрый старт + +### 1. Клонирование и установка зависимостей + +Пакет пока не опубликован в npm: + +```sh +git clone https://github.com/yororoA/Trae2OpenCode.git +cd Trae2OpenCode +npm ci +``` + +Проверьте локальное окружение: + +```sh +node --version +npm run check +``` + +### 2. Установка поддерживаемой версии OpenCode + +Для OpenCode v2: + +```sh +npm install -g @opencode/cli@2.0.16 +opencode --version +``` + +Для OpenCode v1: + +```sh +npm install -g opencode-ai@1.18.32 +opencode --version +``` + +Для поддерживаемых версий автоматически выбирается текущий или legacy-профиль. +Команда `npm run verify:opencode` отдельно проверяет локальную установку и поддерживает +`--binary`, `--output` и `--json`. Подробнее см. +[руководство по совместимости](docs/opencode-compatibility.md#独立验证本机-opencode). + +`migrate:local` находит активный сервис OpenCode и его динамический порт. Если подходящего +сервиса нет, запускается временный процесс на локальном порту `4097`, использующий текущее +локальное хранилище сеансов. После миграции завершается только этот временный процесс. + +В Windows npm создаёт оболочки `.cmd` и `.ps1`. Инструмент автоматически находит нативный +`opencode.exe`. Если это не удалось, задайте `T2O_OPENCODE_BINARY` или `--binary`. + +### 3. Запуск TRAE в режиме отладки + +Сохраните работу, полностью закройте TRAE и запустите его из терминала macOS: + +```sh +"/Applications/Trae CN.app/Contents/MacOS/Electron" \ + --remote-debugging-address=127.0.0.1 \ + --remote-debugging-port=9222 +``` + +Не используйте `open -a ... --args`: текущие версии TRAE могут игнорировать параметры отладки. + +В Windows PowerShell: + +```powershell +& "$env:LOCALAPPDATA\Programs\Trae CN\Trae CN.exe" ` + --remote-debugging-address=127.0.0.1 ` + --remote-debugging-port=9222 +``` + +Если TRAE установлен в другом месте, измените путь к исполняемому файлу. Выполните вход, +откройте целевой проект и убедитесь, что сеансы видны в панели истории. + +### 4. Запуск миграции + +```sh +npm run migrate:local +``` + +Политику перезаписи можно указать заранее: + +```sh +npm run migrate:local -y # Автоматически подтвердить OVERWRITE +npm run migrate:local -n # Пропустить сеансы, требующие OVERWRITE +``` + +Эти параметры управляют только заменой. Workbench и сеансы по-прежнему выбираются из +интерактивного списка. Без параметра программа запросит ввод `OVERWRITE`. + +Для каждого выбранного сеанса инструмент: + +1. Создаёт отдельные bundle и manifest. +2. Удаляет распознанные секреты из текста, заголовков и payload инструментов. +3. Проверяет полноту миграции и совместимость OpenCode до записи. +4. Импортирует данные в OpenCode и повторно читает сообщения, рассуждения, инструменты и хеши. +5. Сохраняет последнюю проверенную запись и удаляет только заменённые завершённые записи. + +Если в целевой системе уже есть тот же исходный сеанс, потребуется доверенный manifest от +предыдущей успешной миграции. Перед заменой проверяется, что старый сеанс не изменён. +Чужие и отредактированные сеансы, а также данные без подтверждённого владельца не удаляются. + +### 5. Проверка результата + +Откройте соответствующий проект в OpenCode и проверьте название сеанса, число сообщений и +последний ответ. Исходная история TRAE остаётся доступной только для чтения и не удаляется. + +Подробные инструкции по продолжению и откату приведены в +[руководстве](docs/operation-manual.md). + +## Важные ограничения + +- Workbench TRAE с целевым сеансом должен оставаться открытым. Окно можно свернуть или оставить + в фоне, но закрытый проект не предоставляет полные тексты сообщений. +- Максимальный размер bundle равен `1 GiB`, а runtime-/transfer-данных одного сеанса — + `384 MiB`. +- Безопасно определяемые секреты заменяются на `[REDACTED_SECRET]`, а сеанс помечается как + `partial`. Если секрет находится в ID, пути или другом поле, которое нельзя безопасно + изменить, миграция останавливается. +- Сохранённый прогресс assistant преобразуется в нативный reasoning OpenCode. Финальный ответ + остаётся обычным текстом. +- Вызовы TRAE `exec_command` становятся раскрываемыми нативными shell-инструментами OpenCode + с сохранённым выводом. +- В большие истории v2 может быть добавлено несколько нативных compaction checkpoint. + В OpenCode v1 нет carry-summary, поэтому большие истории v1 импортируются без изменений. +- Отсутствующий вывод инструментов и финальный текст никогда не создаются искусственно. + Пропуски отмечаются явно. + +## Данные миграции и конфиденциальность + +Каждая успешная миграция создаёт: + +| Каталог | Назначение | Содержит текст сеанса | +| --- | --- | --- | +| `trae-export/` | Последний bundle для повторного преобразования и продолжения | Да | +| `migration-run/` | Manifest, данные повторной проверки и состояние миграции | Нет | + +> [!CAUTION] +> Эти каталоги содержат локальные конфиденциальные данные. Они добавлены в `.gitignore`; +> не коммитьте, не публикуйте и не передавайте их. + +Автоматически удаляются только устаревшие завершённые записи, заменённые текущей проверенной +версией. Неудачные, активные или сомнительные записи сохраняются для продолжения и диагностики. + +## Частые проблемы + +| Сообщение | Действие | +| --- | --- | +| `无法发现 TRAE workbench` | Полностью закройте TRAE, запустите его указанной выше командой и оставьте целевой проект открытым. | +| `所选 workbench 没有可迁移的本地会话` | Выберите правильное окно и откройте соответствующий проект в TRAE. | +| `无法自动启动 OpenCode` | Проверьте `opencode --version`, затем выполните `npm run verify:opencode`. | +| `OpenCode 版本或协议不受支持` | Используйте стабильную версию 1.x или 2.x, прошедшую проверки безопасности. | +| `未收录的 OpenCode 版本需要同版本 CLI` | Установите ту же версию CLI, что и у целевого сервиса, либо задайте `T2O_OPENCODE_BINARY`. | +| `所选会话包含当前无法无损映射的内容` | В OpenCode ничего не записано. Сохраните артефакты и изучите [руководство по устранению проблем](docs/troubleshooting.md). | + +## Документация + +Подробная документация проекта пока доступна на упрощённом китайском языке. + +| Тема | Документ | +| --- | --- | +| Начало работы | [Руководство](docs/operation-manual.md) | +| Совместимость | [Совместимость OpenCode](docs/opencode-compatibility.md) · [Версионирование](docs/versioning.md) · [История изменений](CHANGELOG.md) | +| Решение проблем | [Ошибки и частые проблемы](docs/troubleshooting.md) · [Среда разработки](docs/development-troubleshooting.md) | +| Механизм миграции | [Offline CLI, dry-run, импорт и readback](docs/m5-1-readonly-cli.md) · [Manifest и продолжение](docs/m5-3-manifest-resume.md) | +| Безопасность | [Обработка секретов](docs/m5-6-sensitive-content.md) · [Откат](docs/m5-5-rollback.md) | +| Проектирование и приёмка | [План реализации](docs/implementation-plan.md) · [Отчёт live runtime](docs/m5-7-live-runtime-e2e.md) | + +## Лицензия + +Copyright © 2026 yororoA. Распространяется по [лицензии ISC](LICENSE). diff --git a/README.zh-Hant.md b/README.zh-Hant.md new file mode 100644 index 0000000..d9d5e1c --- /dev/null +++ b/README.zh-Hant.md @@ -0,0 +1,267 @@ + + +

+ + Trae2OpenCode + +

+ +

Trae2OpenCode

+ +

+ 简体中文 + · + English + · + 日本語 + · + Deutsch + · + Русский + · + 繁體中文 +

+ +

+ 把 TRAE 工作階段完整帶到 OpenCode。 +
+ 自動匯出、脫敏、映射與匯入,並在寫入後逐項回讀核驗。 +

+ +

+ Quality + GitHub Release + Node.js >= 18.18 + macOS and Windows + ISC License +

+ +

+ 專案網站 + · + 快速開始 + · + 操作手冊 + · + 相容性 + · + 疑難排解 + · + 更新記錄 +

+ + + +--- + +> [!IMPORTANT] +> 首次遷移前請先閱讀[操作手冊](docs/operation-manual.md)。macOS 必須從終端機以如下偵錯參數 +> 啟動 TRAE,否則工具無法讀取完整的訊息內容。 + +## 一條指令,完成可信遷移 + +開啟目標工作階段所在的 TRAE 專案視窗,然後在儲存庫根目錄執行: + +```sh +npm run migrate:local +``` + +依編號選擇視窗與一個或多個工作階段即可。工具不會要求手動輸入 workbench ID 或 session ID, +中斷後也能依據已產生的遷移記錄安全續跑。 + +| 互動式選擇 | 安全處理 | 雙協定支援 | 寫入後驗證 | +| :---: | :---: | :---: | :---: | +| 自動探索專案視窗與工作階段 | 憑證辨識、脫敏與覆寫保護 | 自動辨識 OpenCode v1 / v2 | 核對訊息、推理、工具記錄與 Hash | + +```mermaid +flowchart LR + A["TRAE 工作階段
唯讀擷取"] --> B["匯出與脫敏
Migration Bundle"] + B --> C["協定映射
OpenCode v1 / v2"] + C --> D["原生匯入"] + D --> E["回讀核驗
內容與 Hash 核對"] +``` + +## 相容性 + +| 元件 | 要求 | +| --- | --- | +| TRAE 來源 | TRAE CN **3.3.104**,已登入,並以本機 CDP 連接埠 `9222` 啟動 | +| OpenCode v2 目標 | 已驗證基線:**2.0.0**(legacy)、**2.0.12**、**2.0.16**;其他穩定版 2.x 會自動檢測 | +| OpenCode v1 目標 | 已驗證基線:**1.16.0 / 1.17.0**(legacy)、**1.17.9 / 1.18.32**;其他穩定版 1.x 會自動檢測 | +| 作業系統 | macOS、Windows 可直接讀取本機 TRAE;Linux 僅支援匯入已匯出的 bundle | +| Node.js | `>=18.18`,建議使用 Node.js 22 | + +附件、Skill 與 MCP 資源目前不在遷移範圍內。未知的 TRAE 來源版本會被拒絕。 +OpenCode 是否可遷移取決於實際協定 profile 與隔離往返測試,而不是只依賴版本號。 + +> [!NOTE] +> 對於未列出的 OpenCode 穩定版本,CLI 與目標服務必須使用相同版本。必要路由與 schema +> 必須完全相符或僅包含安全的新增內容。工具會先在獨立的暫存資料庫中驗證匯入、匯出、 +> 回讀、衝突與刪除保護,通過後才允許遷移。 + + + +> [!WARNING] +> 預發佈版本、未知主要版本、破壞性 schema 變更或行為驗證失敗都會被拒絕。 +> `opencode-ai@1.15.x` 無法保留安全擁有權 metadata,`1.14.x` 的 OpenAPI 不會公開完整的 +> 工作階段 schema,因此這些版本也無法寫入。工具不會直接寫入舊版資料庫。 + +## 快速開始 + +### 1. 取得專案並安裝相依套件 + +本專案尚未發佈至 npm: + +```sh +git clone https://github.com/yororoA/Trae2OpenCode.git +cd Trae2OpenCode +npm ci +``` + +確認本機環境可用: + +```sh +node --version +npm run check +``` + +### 2. 安裝支援的 OpenCode 版本 + +OpenCode v2: + +```sh +npm install -g @opencode/cli@2.0.16 +opencode --version +``` + +OpenCode v1: + +```sh +npm install -g opencode-ai@1.18.32 +opencode --version +``` + +工具會為支援的版本自動選擇 current 或 legacy profile。也可以執行 +`npm run verify:opencode`,單獨檢查本機安裝,支援 `--binary`、`--output` 與 `--json`; +詳見[相容性說明](docs/opencode-compatibility.md#独立验证本机-opencode)。 + +`migrate:local` 會探索正在執行的 OpenCode 服務與動態連接埠。若沒有可用服務,工具會在 +本機連接埠 `4097` 啟動暫存程序,沿用目前的本機工作階段資料庫,並在遷移結束時只關閉 +該暫存程序。 + +Windows 上的 npm 僅會產生 `.cmd` / `.ps1` 包裝程式,工具會自動解析原生 +`opencode.exe`。若解析失敗,可使用 `T2O_OPENCODE_BINARY` 或 `--binary` 指定。 + +### 3. 以偵錯模式啟動 TRAE + +儲存工作並完全結束 TRAE,然後在 macOS 終端機中執行: + +```sh +"/Applications/Trae CN.app/Contents/MacOS/Electron" \ + --remote-debugging-address=127.0.0.1 \ + --remote-debugging-port=9222 +``` + +請勿使用 `open -a ... --args`;目前的 TRAE 版本可能會忽略其中的偵錯參數。 + +Windows PowerShell: + +```powershell +& "$env:LOCALAPPDATA\Programs\Trae CN\Trae CN.exe" ` + --remote-debugging-address=127.0.0.1 ` + --remote-debugging-port=9222 +``` + +若 TRAE 安裝於其他位置,請替換執行檔路徑。登入 TRAE、開啟目標專案,並確認歷史記錄面板 +中可看到所需工作階段。 + +### 4. 執行遷移 + +```sh +npm run migrate:local +``` + +可以預先指定覆寫策略: + +```sh +npm run migrate:local -y # 自動確認 OVERWRITE +npm run migrate:local -n # 略過需要 OVERWRITE 的工作階段 +``` + +這些參數只控制替換策略,workbench 與工作階段仍從互動式清單中選擇。未附加參數時, +程式會要求輸入 `OVERWRITE`。 + +工具會為每個選取的工作階段: + +1. 建立獨立的 bundle 與 manifest。 +2. 從內文、標題與工具 payload 中移除已辨識的憑證。 +3. 在寫入前檢查遷移完整性與 OpenCode 相容性。 +4. 匯入 OpenCode,再回讀訊息、推理、工具記錄與 Hash。 +5. 保留最新的已驗證遷移記錄,僅清除已被取代的舊終態記錄。 + +若目標中已有相同來源工作階段,工具會要求先前成功遷移所留下的可信 manifest。 +替換前會確認舊工作階段未被修改。外部工作階段、已編輯的工作階段,以及缺少可信擁有權 +證據的目標都不會被刪除。 + +### 5. 確認結果 + +在 OpenCode 中開啟對應專案,檢查工作階段標題、訊息數量與最近一輪內容。 +來源 TRAE 歷史始終保持唯讀,不會被刪除。 + +詳細的續跑與復原流程請參閱[操作手冊](docs/operation-manual.md)。 + +## 重要限制 + +- 必須保持目標工作階段所屬的 TRAE workbench 開啟。視窗可以置於背景或最小化, + 但已關閉的專案視窗無法提供完整訊息內容。 +- 單一 bundle 上限為 `1 GiB`,單一工作階段 runtime / transfer 資料上限為 `384 MiB`。 +- 可安全定位的憑證會替換為 `[REDACTED_SECRET]`,工作階段會標記為 `partial`。 + 若憑證位於 ID、路徑或其他無法安全改寫的欄位,遷移會停止。 +- 已儲存的 assistant 進度會轉換成 OpenCode 原生 reasoning,最終回覆維持一般文字。 +- TRAE 的 `exec_command` 會轉換為可展開的 OpenCode 原生 shell 工具,並保留已儲存輸出。 +- 大型 v2 歷史可能加入少量原生 compaction checkpoint。OpenCode v1 沒有 carry-summary, + 因此大型 v1 歷史會維持原樣匯入。 +- 不會虛構 TRAE 未儲存的工具輸出或最終 assistant 文字。缺失內容會有明確標記。 + +## 遷移資料與隱私 + +每次成功遷移會建立: + +| 目錄 | 用途 | 是否包含工作階段內文 | +| --- | --- | --- | +| `trae-export/` | 用於重新映射與續跑的最新 bundle | 是 | +| `migration-run/` | manifest、回讀證據與遷移狀態 | 否 | + +> [!CAUTION] +> 這些目錄包含本機私人遷移資料,已列入 `.gitignore`。請勿提交、分享或上傳。 + +工具只會自動清理由目前 verified 版本取代的舊終態記錄。失敗、進行中或無法確認安全性的 +記錄會保留,以便續跑或疑難排解。 + +## 常見問題 + +| 終端機訊息 | 處理方式 | +| --- | --- | +| `无法发现 TRAE workbench` | 完全結束 TRAE,以前述終端機指令重新啟動,並保持目標專案視窗開啟。 | +| `所选 workbench 没有可迁移的本地会话` | 選擇正確的專案視窗,並在 TRAE 中開啟該專案。 | +| `无法自动启动 OpenCode` | 確認 `opencode --version` 可執行,再執行 `npm run verify:opencode`。 | +| `OpenCode 版本或协议不受支持` | 使用能通過協定與安全檢查的穩定版 1.x 或 2.x。 | +| `未收录的 OpenCode 版本需要同版本 CLI` | 安裝與目標服務相同版本的 CLI,或設定 `T2O_OPENCODE_BINARY`。 | +| `所选会话包含当前无法无损映射的内容` | 尚未寫入 OpenCode。保留產物並查看[疑難排解](docs/troubleshooting.md)。 | + +## 文件 + +詳細專案文件目前以簡體中文撰寫。 + +| 主題 | 文件 | +| --- | --- | +| 開始使用 | [操作手冊](docs/operation-manual.md) | +| 相容性 | [OpenCode 相容性](docs/opencode-compatibility.md) · [版本管理](docs/versioning.md) · [更新記錄](CHANGELOG.md) | +| 疑難排解 | [錯誤與常見問題](docs/troubleshooting.md) · [開發環境疑難排解](docs/development-troubleshooting.md) | +| 遷移機制 | [離線 CLI、dry-run、匯入與回讀](docs/m5-1-readonly-cli.md) · [manifest 與續跑](docs/m5-3-manifest-resume.md) | +| 安全與復原 | [憑證處理](docs/m5-6-sensitive-content.md) · [回復](docs/m5-5-rollback.md) | +| 設計與驗收 | [實作規劃](docs/implementation-plan.md) · [真實執行環境報告](docs/m5-7-live-runtime-e2e.md) | + +## 授權條款 + +Copyright © 2026 yororoA。本專案採用 [ISC License](LICENSE)。 diff --git a/scripts/verify-package.ts b/scripts/verify-package.ts index b10ee2b..f69af6d 100644 --- a/scripts/verify-package.ts +++ b/scripts/verify-package.ts @@ -17,6 +17,13 @@ const legacySchema = "fixtures/opencode/2.0.0/evidence/transfer.schema.json"; const v1Schema = "fixtures/opencode/1.18.32/evidence/session.schema.json"; const legacyV1Schema = "fixtures/opencode/1.16.0/evidence/session.schema.json"; const sample = "fixtures/ir/v1/valid-trae-assembled.json"; +const localizedReadmes = [ + "README.de.md", + "README.en.md", + "README.ja.md", + "README.ru.md", + "README.zh-Hant.md", +]; const npm = async (args: string[], cwd: string) => { const result = await exec(process.execPath, [npmCli, ...args], { cwd, timeout: 180_000, maxBuffer: 2 * 1024 * 1024, @@ -36,12 +43,13 @@ try { const files = artifact.files.map((file) => file.path); for (const required of [ "package.json", "README.md", "CHANGELOG.md", "LICENSE", "dist/cli/index.js", - schema, legacySchema, v1Schema, legacyV1Schema, sample, + ...localizedReadmes, schema, legacySchema, v1Schema, legacyV1Schema, sample, ]) { assert.ok(files.includes(required), `Missing package file: ${required}`); } for (const file of files) { const allowed = file === "package.json" || file === "README.md" || + localizedReadmes.includes(file) || file === "CHANGELOG.md" || file === "LICENSE" || (file.startsWith("dist/") && file.endsWith(".js") && !file.includes("/__tests__/")) || (file.startsWith("docs/") && file.endsWith(".md")) ||