分支命名
状态: 当前设计与实现参考
分支有名称时显示自身名称,否则显示短标识符。自动命名逐步完善,不得覆盖用户控制的名称。
规范实现位于openprogram/store/session/session_store.py,openprogram/agent/dispatcher/titles.py,openprogram/agent/dispatcher/finalize.py,以及apps/server/openprogram_server/_webui/ws_actions/branch.py.
1. 当前合同
- 主干没有自动合成的
main特殊名称。未命名分支使用短十六进制标识符;已命名分支使用自身名称。 - 手动分支命名由分支 WebSocket 动作处理。未存储名称时回退到短标识符。
- 自动命名是后台操作,在轮次结束时按配置阈值触发。它读取分支上下文,并在写入前重新检查锁。
- 自动命名不得替换用户锁定的名称。存储的分支元数据不再符合操作前置条件时,丢弃过期后台结果。
2. 已实现路径
| 关注点 | 当前源码 | 证据 |
|---|---|---|
| 存储的分支名与回退 | openprogram/store/session/session_store.py | 读取分支元数据时不合成 main 名称;未命名条目回退到短 id。 |
| 渐进式 LLM 命名 | openprogram/agent/dispatcher/titles.py | maybe_auto_name_branch 执行阈值检查、后台生成和写回保护。 |
| 轮次结束触发 | openprogram/agent/dispatcher/finalize.py | 轮次结束收尾调用自动分支命名。 |
| 手动与 WebSocket 动作 | apps/server/openprogram_server/_webui/ws_actions/branch.py | 当前分支动作提供重命名、短 id 回退、锁处理和按需命名。 |
| Composer 命令 | apps/web/components/chat/composer/slash/slash-commands.ts | /branch 和 auto_name_branch 已注册为当前命令。 |
3. 命名策略
| 来源 | 优先级 | 自动命名可以覆盖吗? |
|---|---|---|
| 用户重命名 | 最高 | 不可以;它会设置持久锁。 |
| 已有持久分支名 | 存储值 | 仅当本次自动操作通过锁检查和过期写入检查时可以。 |
| LLM 自动结果 | 后台完善 | 分支被锁定或前置条件变化时不可以。 |
| 短标识符 | 回退 | 仅在有效名称保存后替换。 |
4. 状态与生命周期
- 创建分支时同时建立元数据;不存在名称时可以立即使用短 id 展示。
- 轮次收尾时,按渐进命名阈值检查该分支自身上下文和轮次数量。
- LLM 在后台生成。写入前重新读取分支/会话状态;发现手动锁或过期前置条件时放弃结果。
- WebSocket 消费者通过当前分支/会话更新路径收到分支变更;生成期间 UI 必须保留短 id 回退。
5. 边界
- 本设计不增加第二套分支实体、命名存储或主干特殊名称。
- 分支命名不改变会话标题合同或 DAG 父子关系。
- 具体提示词和未来阈值变化属于实现细节;任何变化都必须同步更新规范 Markdown 与本可视化。
- 本页不宣称实现跨函数命名协调、跨会话命名策略或旧分支元数据历史迁移。
6. 验证说明
上述实现证据说明源码路径合同,不代表每种浏览器状态或竞态均已穷尽测试。验证应覆盖手动重命名与并发自动结果、未命名主干回退、分叉分支的渐进命名,以及后台命名后的 WebSocket 更新。
Last updated · 2026-10-10