本地主机 (你的电脑)
├── Claude Code Exporter 源码 e:/001Code/Jupyter/Claude-Code-Tools/claude-code-exporter/
├── 编译 / 打包 / git push 在这里做
└── SCP 把 .vsix 传给 4090
4090 服务器 (Ph.D.Chen@4090-server)
├── Codex APP 产生 JSONL → C:/Users/Ph.D.Chen/.codex/sessions/
├── session_index.jsonl → C:/Users/Ph.D.Chen/.codex/session_index.jsonl
├── Cursor 加载插件 → C:/Users/Ph.D.Chen/.cursor/extensions/
└── 导出落地目录 → <workspace>/.codex-history/
插件在 4090 的 Cursor 里运行,读的是 4090 的文件系统。
在本地确认代码逻辑后,所有验证必须在 4090 上做,不是在本地。
改动代码 → 编译 → 打包 → 安装 → 验证 这五步缺一不可。
没跑完验证就说"修好了"是放屁。
cd e:/001Code/Jupyter/Claude-Code-Tools/claude-code-exporter
npm run build 2>&1 # 必须无 error
npm run package 2>&1 # 确认 .vsix 生成VERSION=$(node -p "require('./package.json').version")
VSIX="claude-code-exporter-${VERSION}.vsix"
scp -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=no \
"$VSIX" "Ph.D.Chen@4090-server:C:/Users/Ph.D.Chen/Downloads/$VSIX"
# 生成并执行安装脚本
cat > /tmp/install_cce.ps1 << EOF
\$version = "${VERSION}"
\$vsix = "C:\Users\Ph.D.Chen\Downloads\claude-code-exporter-\${version}.vsix"
\$zip = \$vsix -replace '\.vsix$', '.zip'
\$tmp = "C:\Users\Ph.D.Chen\Downloads\ext-extract-cce-\${version}"
\$extDir = "C:\Users\Ph.D.Chen\.cursor\extensions\myoontyee.claude-code-exporter-\${version}"
Copy-Item \$vsix \$zip -Force
if (Test-Path \$tmp) { Remove-Item \$tmp -Recurse -Force }
Expand-Archive -Force -Path \$zip -DestinationPath \$tmp
New-Item -ItemType Directory -Force -Path \$extDir | Out-Null
Get-ChildItem "\$tmp\extension" | ForEach-Object { Copy-Item -Recurse -Force \$_.FullName \$extDir }
Write-Host "Installed: \$extDir"
EOF
scp -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=no \
/tmp/install_cce.ps1 "Ph.D.Chen@4090-server:C:/Users/Ph.D.Chen/install_cce.ps1"
ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=no \
"Ph.D.Chen@4090-server" "powershell -NoProfile -File C:/Users/Ph.D.Chen/install_cce.ps1"ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=no \
"Ph.D.Chen@4090-server" \
"powershell -Command \"Get-Content 'C:\Users\Ph.D.Chen\.codex\session_index.jsonl' | Select-Object -First 5\""期望:能看到含 thread_name 的 JSON 行。如果文件不存在或为空,标题修复根本不会生效,不要继续。
4090 上操作:
- 重启 4090 的 Cursor(不是 Codex APP,是 Cursor)
- 打开 Claude Code Exporter 的 Sessions 面板
- 找到目标 Codex 会话,点 Export 按钮(re-export 会覆盖旧文件名)
SSH 确认结果:
# 替换为实际 workspace 路径
ssh -o IdentitiesOnly=yes -i ~/.ssh/id_ed25519 -o StrictHostKeyChecking=no \
"Ph.D.Chen@4090-server" \
"powershell -Command \"Get-ChildItem 'E:\001Code\Jupyter\000PhD\I_CT\3decoder-experiments\.codex-history' -Filter '*.md' | Select-Object Name\""期望:文件名里的标题段是真实对话标题(如"核查最新聊天并检查075实验代码问题"),不是 #-AGENTS.md-instructions 或乱码。
只有看到正确文件名才算验证通过。
验证通过之前不要 push,不要升版本号,不要说"已修好"。
| 优先级 | 问题 | 状态 |
|---|---|---|
| P0 | Codex 会话标题乱(AGENTS.md 注入) | v0.8.10 已修,SSH脚本验证通过 |
| P1 | CodexWatcher 把所有会话都导出到当前 workspace,不按 cwd 分类 | v0.8.11 已修,SSH脚本验证通过 |
P1 直接导致用户在正确的项目目录下找不到对应会话的导出文件。不要在 P0 验证通过前就去改 P1,也不要在 P1 未修的情况下假装问题解决了。
- 改完代码 build 成功就宣布"修好了" — build 成功只说明编译通过,不代表功能正确
- 在本地验证文件路径 / 标题逻辑 — 插件在 4090 跑,本地验不到真实数据
- 跳过 Step 4 的手动 re-export — 现有旧文件名不会自动更新,必须触发一次 export
- 发现新 bug 后立刻跳过去修 — 先把当前 bug 闭环验证,再开新问题