如何让AI代理的会话历史可查询?深入解析Atlas的会话捕获与Transcript导入

如何让AI代理的会话历史可查询?深入解析Atlas的会话捕获与Transcript导入 如何让AI代理的会话历史可查询?深入解析Atlas的会话捕获与Transcript导入【免费下载链接】atlasSource control for agents. Use multiple coding agents, track their changes and query them in one place项目地址: https://gitcode.com/GitHub_Trending/atlas115/atlasAtlas是一款面向 AI 编码代理的代理版源代码控制工具让多个 coding agent 协同工作并在一个地方追踪它们的改动与对话。它的核心能力之一是**会话捕获Session Capture**与Transcript 导入——把易逝的 AI 代理会话历史写入本地 SQLite 数据库并自动回填终端里留下的旧对话让你随时能查询这个提交是谁、为什么这么改的。 为什么 AI 代理的会话历史会消失AI 代理的会话天生是易逝的对话滚出侧边栏背后的推理就找不回来了六周后没人能回答这段代码为什么这么写——包括写它的人在团队中更糟两个开发者用同一仓库却看不到对方代理做了什么每次会话都从零开始。Atlas 的思路是会话是代理的一次对话它的消息就是转录本Transcript唯一的栖息地。为此Atlas 设计了一条写入即可信的持久化管线。整体设计思路写在 crates/atlas-checkpoint/src/lib.rs 的模块文档中。 会话捕获把对话写进可查询的数据库从易逝对话到持久记录每一次代理活动都会被记录进工作区下的.atlas/sessions.db——一个 SQLite 数据库目录自动加入 gitignore。超过 64 KB 的消息体会溢出到旁边的内容寻址文件blobs保证数据库本身保持轻量。关键设计有两条见 crates/atlas-checkpoint/src/store.rs一回合一个事务中途崩溃会回滚到上一个完整回合绝不会出现读起来像完成了、其实残缺的撕裂记录本地写入永远在关键路径上网络永远不在离线就是常态Workspace 可以永远保持 Local 模式而拥有完整时间线。捕获的入口是Capture结构体crates/atlas-checkpoint/src/capture.rs它负责记录四类事实记录内容说明用户提示词同时从第一条提示词派生会话标题完整回合聚合后的整回合文本而非流式碎片工具调用参数与结果都经过脱敏是最易泄露敏感内容的内容文件写入记录写入瞬间的文件哈希与此前是否存在这是后续把提交归因给会话的依据脱敏先于持久化 ⚠️这是 Atlas 最重要的一条保证redaction 发生在写入之前而不是上传之前。代理如果读了.env密钥会原样进入转录本——所以脱敏必须在落盘的瞬间完成否则本地库本身就是泄密风险。脱敏由独立的atlas-redactcrate 完成见 crates/atlas-redact/src/lib.rsJSON 形内容走遍历式脱敏既抓得住password: hunter2这类低熵凭据又不会误伤message_id这类高熵标识符失败即闭合fail closed脱敏失败的内容不会被写入而是把会话标记为需要关注让问题可见而不是留下没人发现的空洞。相关测试可参考 crates/atlas-checkpoint/src/capture.rs。宿主侧的接线见 src-tauri/src/commands/capture.rs捕获是一条独立的写入流水线拥有单独的 worker 线程——流式热路径从不阻塞回合也保证按发生顺序落盘。 Transcript 导入自动找回历史会话实时捕获只能记录从今天起的对话。Atlas 的 crates/atlas-checkpoint/src/import.rs 解决两个更大的问题冷启动你~/.claude/projects/里可能已经躺着几百个会话、几百 MB 的 JSONL 转录文件。导入它们让第一天看起来像第六个月。终端缺口有人在终端里直接跑claude这些会话在 Atlas 里不存在会读起来像个 bug、永久损害对记录的信任。同一个导入器会持续监听目录新会话出现即被拾取。导入的三个关键特性 幂等每一行都携带代理自己的消息 ID缺失时用行号内容哈希合成稳定键重读增长过的文件不会重复导入已取走的回合synthetic_line_id可断点续传逐文件持久化进度杀掉 Atlas 再启动从中断处继续而不是从头再来故障隔离坏行只损失那一行坏文件只损失那个文件只有存储层故障磁盘满、锁竞争才会中止整轮——因为导入器每 30 秒重跑一次一个自由传播的错误会让同一语料永远卡死见 is_fatal。导入器还很懂去噪跳过子代理的 sidechain 行、跳过 harness 自言自语的 meta 行、过滤命令包裹符——防止时间线被机器噪音淹没甚至被一个local-command-caveat污染成会话标题is_envelope。一个刻意的取舍导入的会话不生成 Checkpoint提交关联。因为文件此前是否存在只有在写入瞬间才能知道事后推断只会制造虚假归因——这份诚实正是记录可信的前提。 时间线查询把历史读回来写进去的数据必须能被看见。timeline模块crates/atlas-checkpoint/src/timeline.rs提供两种查询形态SessionSummary一个会话一行列出标题、代理、模型、消息数、工具调用数、提交数、增删行数、Token 消耗、所触达的分支……全部来自索引聚合不碰消息正文几百个会话也能瞬间列表SessionDetail单会话的完整时间线把提示词、回复、推理、工具调用、提交 Checkpoint 合并为一条有序列表。大正文不会拖累查询超过 64 KB 的正文只随时间线下发 2 KB 预览并标记truncated完整内容留在磁盘上按需取回。前端入口很简单Workspace 切换面板中的Timeline行src/features/capture/components/capture-control.tsx会打开跨组织的会话看板实时会话与导入的历史会话并列其中导入的历史还保留其真实日期backdate_session排序与按天分组都按原始时间。️ 延伸阅读相关模块路径模块路径职责记录设计总览crates/atlas-checkpoint/src/lib.rs捕获、检查点、同步的整体设计写入路径crates/atlas-checkpoint/src/capture.rs脱敏、回合/工具调用/文件写入记录本地存储crates/atlas-checkpoint/src/store.rsSQLite 事务、WAL、写者锁、blob 溢出Transcript 导入crates/atlas-checkpoint/src/import.rs旧会话回填、去重、断点续传提交关联crates/atlas-checkpoint/src/checkpoint.rs观察而非拦截git 提交并归因到会话查询读模型crates/atlas-checkpoint/src/timeline.rs会话摘要与时间线详情宿主接线src-tauri/src/commands/capture.rs把代理事件流接入捕获管线✅ 小结Atlas 让 AI 代理的会话历史可查询靠的不是一个功能而是一组克制的工程决策先脱敏后落盘保证记录安全一回合一事务保证记录完整观察而非拦截保证提交归因准确幂等续传导入保证历史不缺席。最终你得到的不只是一块会话看板而是一份六个月后还能回答为什么的项目记忆。【免费下载链接】atlasSource control for agents. Use multiple coding agents, track their changes and query them in one place项目地址: https://gitcode.com/GitHub_Trending/atlas115/atlas创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考