ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Gajae-Code 会话管理实战:/tree 分支导航、会话恢复与存储安全完整指南

Gajae-Code 会话管理实战:/tree 分支导航、会话恢复与存储安全完整指南 Gajae-Code 会话管理实战/tree 分支导航、会话恢复与存储安全完整指南【免费下载链接】gajae-codeGajae Code MVP项目地址: https://gitcode.com/gh_mirrors/ga/gajae-codeGajae-Code 是一个终端里的 AI 编程助手它的会话管理是新手最容易忽略、却最影响日常效率的能力用/tree分支导航在历史对话中时光倒流用--continue/--resume快速恢复上次的工作现场并用严格的存储安全边界保护你的会话数据。这篇实战指南带你从零理解这三件事全部基于官方文档与源码整理无需任何前置经验。一、为什么会话是一棵树而不是一条线传统聊天工具的历史是一条直线而 Gajae-Code 的会话底层是一棵树。它的存储模型非常简单理解这一点后面全都会懂会话文件是追加式 JSONL每行一个 JSON 对象只追加、不重写每条记录都有id和parentId两个指针天然构成树形结构运行时用一根leafId指针标记当前对话停在哪分支导航只是移动指针绝不修改历史——你换条路走原来的路还完好无损。这就是为什么你可以大胆回退、反复尝试树上新长出的分支不会删掉旧分支。完整的数据模型与迁移机制见官方文档 docs/session.md架构设计详见 docs/session-tree-plan.md。二、/tree 分支导航一键回到任意历史节点/tree打开的是交互式会话树选择器让你跳到当前会话文件内的任意一条记录并从那里继续对话。如何打开会话树触发方式说明输入/tree最直接随时可用配置键位tree映射到你习惯的快捷键编辑器为空时双击 Esc默认行为即打开树可配置为分支选择器命令路由逻辑在 packages/coding-agent/src/modes/controllers/input-controller.ts树选择器的导航、过滤与搜索实现在 packages/coding-agent/src/modes/components/tree-selector.ts。树选择器怎么用方向键、搜索与过滤打开后是纯键盘操作上手成本极低↑/↓移动Enter选中Esc关闭直接敲字即搜索空格分词、不区分大小写、全部命中才保留CtrlO循环切换 5 种过滤模式AltD/T/U/L/A直达指定模式过滤模式显示内容default常规对话节点隐藏标签、模型切换等簿记记录no-tools在 default 基础上再隐藏工具调用结果user-only只看你发的消息labeled-only只看打了标签的节点all完整内部时间线适合排查问题选中不同节点会发生什么这是新手最容易迷惑的地方规则其实很直观选中一条用户消息指针回到该消息的上一节点且消息原文自动填入输入框——你可以改一改再重发等于重写历史选中助手/工具等节点指针直接停在该节点从它继续选中当前位置什么都不做直接关闭。两个进阶技巧 给关键节点打标签在树里用ShiftL给某条记录命名如milestone之后按AltL只显示打标签的节点实现书签式快速跳转。标签是追加式存储清空即删除。离开分支时留一张小抄开启branchSummary.enabled后切换前可选Summarize系统会把被放弃路径的对话压缩成一条branch_summary挂在新位置——旧路没白走精华被保留。一个标准工作流/tree→ 选中早期某条用户消息 → 选No summary→ 修改预填文本 → 重新发送。新分支就在同一会话文件里长出来当前分支一点不丢。完整参考见 docs/tree.md。三、会话恢复实战--continue、--resume 与 /resume 怎么选三个入口覆盖三种场景1.--continue接着刚才的聊启动时执行gjc --continue解析顺序很贴心先读终端面包屑每个终端窗口记住自己上次在聊哪个会话面包屑失效时回退到该目录下最近修改的会话一个都没有就新建会话。2.--resume精确恢复指定会话不带值弹出交互式会话选择器列表按修改时间倒序⭐ 收藏的排在最前支持模糊搜索、CtrlS星标带 ID 前缀或路径直接定位如果匹配到的是其他项目的会话会询问是否 fork 到当前项目绝不悄悄混用。3./resume会话中途切换正在对话时输入/resume打开选择器换到另一个会话文件。切换过程会先中止进行中的生成、冲刷未落盘写入再重建消息、模型与思考级别并发出session_before_switch/session_switch钩子事件供扩展拦截。选择器实现见 packages/coding-agent/src/cli/session-picker.ts运行时切换逻辑在 packages/coding-agent/src/session/agent-session.ts。恢复机制全细节参考 docs/session-switching-and-recent-listing.md。四、会话存储安全边界数据在哪谁能碰理解存储位置与保护机制才能放心把长期项目交给它管理。存储布局会话文件~/.gjc/agent/sessions/v2-项目标识摘要/时间戳_会话ID.jsonl——目录名由工作区的规范身份摘要派生同一项目的不同路径写法如符号链接别名会归到同一作用域大对象外置会话里超过 1KB 的 base64 图片会被移出正文以blob:sha256:hash引用实体存入~/.gjc/agent/blobs/正文超限还会截断并留痕终端面包屑~/.gjc/agent/terminal-sessions/下每终端一个指针文件支撑--continue。上图为项目内置的会话统计产出可以看到长期会话中read/search类工具消耗了绝大多数 token——正因如此截断与 blob 外置这类数据规模控制对存储可靠性很关键。安全边界到底保护什么 官方文档把边界讲得非常诚实受管目录与文件强制owner-only 权限目录 0700 / 文件 0600拒绝符号链接、拒绝畸形绑定校验失败一律失败关闭fail closed而不是猜测目录迁移采用copy-retain默认策略旧布局会话被复制进 v2 作用域并保留原件冲突、身份变化、不安全文件树时直接放弃迁移明确声明这是一道本地存储完整性边界不是认证、授权或加密也防不住恶意并发的本地攻击者——会话目录本身仍需由你自行保护。--session-dir是显式覆盖项属于操作者主动选择。完整安全说明见 docs/session.md 的 Security boundary 章节存储抽象实现在 packages/coding-agent/src/session/session-storage.ts 与 packages/coding-agent/src/session/blob-store.ts。五、一张表分清 /tree 与 /fork两者都从历史分叉但边界完全不同操作作用范围结果/tree当前会话文件内移动指针到新位置同一文件里长出新分支/fork选一条用户提示复制该提示之前的历史到独立新会话并切换过去原文自动回填输入框不会自动发送要求持久化会话且响应/压缩/前台命令执行期间会被拒绝/resume会话列表切换到另一个会话文件/fork不会修改工作区文件也不会创建 Git 分支或 worktree源会话保持原样。操作矩阵与事件钩子全览见 docs/session-operations-export-share-fork-resume.md。六、上手与关键模块索引想动手体验先获取代码仓库git clone https://gitcode.com/gh_mirrors/ga/gajae-code按 docs/install.md 完成安装后建议练习顺序--continue恢复昨天会话 →/tree回退重发一条早期提示 →ShiftL给当前节点打标签 →/fork从某条提示派生独立分支。模块路径树数据模型与叶子指针packages/coding-agent/src/session/session-manager.ts/tree导航与分支摘要packages/coding-agent/src/session/agent-session.ts树选择器 UIpackages/coding-agent/src/modes/components/tree-selector.ts/tree、/fork命令路由packages/coding-agent/src/modes/controllers/selector-controller.ts会话存储抽象packages/coding-agent/src/session/session-storage.ts会话格式与安全边界文档docs/session.md掌握/tree的指针语义、三种恢复方式和存储安全边界你就能把 Gajae-Code 当作一个可回退、可分叉、可长期保存的协作伙伴而不只是一个一次性聊天窗口。【免费下载链接】gajae-codeGajae Code MVP项目地址: https://gitcode.com/gh_mirrors/ga/gajae-code创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表