会话树
会话 涵盖日常Flag。本页向下一层:树的实际形状、每个导航命令对叶指针的作用以及如何导出、共享和恢复从中读取内容。
每个条目都有一个父条目
会话文件是仅附加的 JSONL。每个非标头条目都带有一个 id 和一个 parentId ——定义对话的是这些指针,而不是行顺序。运行时跟踪每个会话的一个额外状态: leafId,下一个追加将挂起的条目。追加总是创建当前叶子的子节点。分支永远不会重写旧条目;它只在下一个追加之前移动叶子。
这意味着单个文件可以容纳多个线程。 “主动路径”是你通过步行得到的任何东西 parentId 从叶回到根。其他所有内容仍然存在于文件中并且对 /tree.
root
├─ user: "Start task"
│ └─ assistant: "Plan"
│ ├─ • user: "Try approach A" ← leaf
│ │ └─ • assistant: "A result"
│ └─ user: "Try approach B"
│ └─ assistant: "B result"/tree — 将叶子移动到位
/tree 打开文件内导航器。它不会创建新文件或触摸历史记录;它只是重新指出 leafId.
选择器内的按键:
- ↑/↓ 移动; ←/→ 页。
- 输入内容以在呈现的文本、标签、角色和工具片段之间进行模糊搜索。
- Shift+L 设置或清除突出显示条目上的标签。标签作为自己的条目持续存在并成为书签。
- Ctrl+O 循环过滤器; Alt+D/T/U/L/A 跳转到默认、无工具、仅限用户、仅限标签或全部。
发生了什么 Enter 取决于条目类型:
- 用户或自定义消息 — 叶子移动到该条目的 家长,消息文本将复制到编辑器中进行编辑并重新提交。选择第一个用户提示会将叶重置为根。
- 还有什么吗 (助手、工具结果、摘要、簿记)— 叶子移动到所选条目。编辑器未预填充。
- 当前叶子 — 无操作;选择器以“此时已经”关闭。
如果 branchSummary.enabled 开启后,您在移动前会收到摘要提示;由此产生的 branch_summary 条目被附加到新位置,而不是被遗弃的尾部。
/branch 与 /fork
两者都创造了新的叶子。它们的不同之处在于是否创建新文件。
/branch 打开用户消息选择器并启动一个新线程 在同一个文件中 从选定的提示中。原始分支仍然可以通过 /tree。当您希望一个文件成为一项探索的规范记录时,请使用它。
/fork 将整个当前会话复制到全新的 JSONL 中,用新的 id 重写标头,设置 parentSession 到旧的 id,并将活动会话切换到副本。原始文件未受影响。当替代方案可能被放弃并且您不希望它弄乱父母的时候使用它 /tree 视图。工件目录与文件一起复制。 /fork Turn时被阻止并在以下情况下被禁用 --no-session.
的 parentSession 新标头中的字段是唯一的沿袭标记——它让工具可以回到源头,但Fork在其他方面是独立的。
简历摘一片叶子
恢复操作全部落在上次写入时文件的叶子上:
omp -c(--continue) 更喜欢每个终端的面包屑,然后按 cwd 中的 mtime 回退到最新文件。omp -r <prefix>匹配当前项目中的一个 id,然后全局匹配。跨项目匹配会提示Fork到当前 cwd,而不是默默地更改目录。omp --fork <id|path>总是落在一个新文件中parentSession设置,跳过提示。--resume <path.jsonl>直接打开文件。
会话期间, /resume 列出当前 cwd 中的会话(Tab 将选择器切换到所有项目范围)并使用 switchSession 就地交换状态 - 模型、思维水平、MCP 选择和待办事项均从新文件的活动路径重建。
导出、转储、共享
/dump 呈现 活动根→叶路径,而不是整个文件 - 你放弃的分支 /tree 不会出现。 /export 和 /share 嵌入整个文件并在活动路径上打开; HTML 查看器有自己的树导航器来完成其余部分。
/export [path]和omp --export <file>编写一个独立的 HTML 渲染。/dump将纯文本记录复制到剪贴板 - 系统提示、工具、消息、结果。/share导出到临时 HTML 并运行~/.omp/agent/share.{ts,js,mjs}如果存在;否则通过上传秘密要点gh.
要共享备用分支, /tree 首先到那片叶子,然后导出。分享 一切 在文件中,无论叶子如何,直接发送 JSONL — 接收者可以 omp --resume ./file.jsonl 并使用 /tree 步行它。