背景
在 #39 讨论 magic-context 与 ACP 的区别时确认:
- ACP 的压缩(T1/T2/T3 summaries)本身就把单会话 context 控制在 45–55% band,session 能跑很久
- MC 的 cross-session memory 不是优势,是它单会话撑不住的 workaround(砍掉 compaction → context 压不小 → 必然撞墙 → 需要 cross-session 救场)
- ACP 不需要自动的 cross-session memory injection(违反"新会话 = 空白"的用户意图,且 LLM 自动提取的 memory 没经过 review,是更差的 AGENTS.md)
- 但用户主动导出摘要到文件是有价值的:让用户自己 review / edit / commit,作为 devlog / AGENTS.md 的补充
动机
场景:
- 用户完成一个长 session,觉得其中的关键决策、约束、发现值得保留
- 想在下个 session(或团队成员)中复用这些知识
- 现在没有简单的导出方式 —— 知识都锁在 session state JSON 里
现有方案不足:
- 直接读
~/.local/share/opencode/storage/plugin/acp/{sessionId}.json 不友好
- 手动从 chat 复制粘贴容易漏
/acp stats 只显示统计,不输出内容
提议:/acp export 命令
用户主动触发,把当前 session 的压缩摘要导出为 markdown 文件。
/acp export # 导出到默认路径
/acp export --output PATH # 指定输出路径
/acp export --tier t3 # 只导出 T3(最精炼)
/acp export --tier t2,t3 # 导出 T2+T3(默认)
输出格式(草案):
# Session Export — {sessionId}
# Generated {timestamp}
## T3 Blocks (distilled)
### b15 — Auth System Refactor
{summary text}
## T2 Blocks
### b8 — Bug Hunt: token counting
{summary text}
...
设计原则
- 用户主导 —— 不自动注入新 session,不自动 commit,用户自己决定怎么用
- 补足现有机制 —— 和 AGENTS.md / devlog / README / git 互补,不替代
- 零依赖 —— 纯文件 I/O,不引入 SQLite / embedding
- 轻量 —— 预估 ~20–100 行代码
待设计问题(留给设计阶段)
- 默认输出路径:项目根
.opencode/acp-export-{sessionId}.md?还是 devlog/?
- 导出哪些 tier:默认 T2+T3?还是让用户选?
- 是否包含 block metadata(blockId / generation / survivedCount / createdAt)?
- 是否支持导出到 stdout(方便管道和脚本组合)?
- 文件覆盖 vs 追加:重复导出怎么处理?
- 是否需要对应的
/acp import(从文件注入新 session)?还是靠用户自己 @ 引用就够?
- 消息模式(message-mode)的 block 是否同样适用?
Non-goals
- ❌ 自动跨 session memory injection(违反新会话空白意图)
- ❌ SQLite / embedding / semantic search(过重,当前不需要)
- ❌ Background memory curation / dreamer-style agent(过重)
- ❌ 替代 AGENTS.md / devlog(这些是人类策划的高质量载体,导出只是补充)
参考
背景
在 #39 讨论 magic-context 与 ACP 的区别时确认:
动机
场景:
现有方案不足:
~/.local/share/opencode/storage/plugin/acp/{sessionId}.json不友好/acp stats只显示统计,不输出内容提议:
/acp export命令用户主动触发,把当前 session 的压缩摘要导出为 markdown 文件。
输出格式(草案):
设计原则
待设计问题(留给设计阶段)
.opencode/acp-export-{sessionId}.md?还是devlog/?/acp import(从文件注入新 session)?还是靠用户自己@引用就够?Non-goals
参考
lib/commands/,lib/state/types.ts(CompressionBlock)