Skip to content

IDE 任务过程持久化与新会话交接方案

日期:2026-09-16

发布基线:CLI 0.166.59、Context/Memory Kernel 0.1.4、Agent Protocol 0.1.11、Agent SDK TypeScript/Python 0.2.11/0.2.9、VS Code 0.37.105、JetBrains 0.4.126。上述制品均由精确提交 a148ec7a575858cfd78f0325c728d80e6524b13c 构建并已从公开渠道回读。

目标

  1. 自动将任务过程保存为 Markdown,压缩、暂停、重启后可以找回目标、证据、失败尝试和下一步。
  2. 新任务使用独立的新会话;需要继续旧任务时,新会话通过 Markdown 交接,避免复制整份旧对话。

已有基础

  • CLI 已持久化会话与压缩事件,并提供结构化 handoff。
  • TaskProgressTracker 保存部分执行证据,ReadFileLoopGuard 保存单次运行的读取进度;这些内存记录不能替代跨会话工作记录。
  • VS Code 与 JetBrains 已支持多对话和独立 session;插件共享 CLI 执行入口。

设计

Markdown 工作记录

按工作区、会话隔离,保存在 .chainlesschain/sessions/<session-id>/WORKLOG.md。 记录由运行时根据真实事件更新,不依赖模型记得调用写文件工具,也不增加专用 LLM 总结请求。 统一使用 Context/Memory Kernel 的 checkpointTaskProgress;检查点写入现有 JSONL SessionContextPort,带会话身份、递增 revision、digest 与原子比较写入。 Markdown 由 CLI 的 context-memory-kernel/task-worklog-port.js 投影生成,读取历史时先验证 Kernel 检查点,再核对/重建 Markdown。Markdown 不成为第二个记忆数据库,不授予执行权限,也不自动晋升为长期记忆。 Kernel 保持无文件 IO;shadow 模式不写检查点,插件默认 canonical 模式继续遵守既有灰度配置。

记录包含:

  • 原始目标与最近补充要求。
  • 当前状态、更新时间、来源 session、工作区。
  • 已读取文件及范围、观察到的版本和证据摘录。
  • 已执行工具、改动、测试结果与错误;截断内容明确标注。
  • 模型给出的进度、计划和下一步(与实际工具结果区分)。
  • 压缩、暂停、失败和交接事件。

在用户输入、工具完成、助手回复、压缩前后、停止或异常时更新。使用有界记录和原子替换;过滤凭据,拒绝路径逃逸及符号链接重定向。写入失败应让用户看到,不得伪装为已保存。

恢复时只读取有限大小的任务记录,作为低信任历史资料注入。保留用户最新要求的优先级。文件可能已变化,修改前仍需验证目标内容;“以前读过”不能当作禁止重新验证的依据。

新会话入口

提供“新任务”和“带历史继续”两个清晰入口:

  • 新任务:创建新 session,用户可输入独立目标,不自动继续旧任务。
  • 带历史继续:先保存工作记录,停止旧任务,在新会话中读取指定工作记录并继续未完成目标。

新会话不设置旧 session 的 resume id,不复制完整旧对话,不继承临时权限。只传递已校验的历史记录引用。 历史加载失败时保留旧记录并显示错误,不静默从零开始执行。 首版窗口形态采用 IDE 内独立对话标签页:VS Code 按钮/命令面板入口,JetBrains Continue in new chat 按钮。新任务用现有 + / + New chat。完整 IDE 新进程窗口暂不实现。 交接请求排入会话输入队列,运行中的任务在完整工具批次之后让出执行权。CLI 回复 worklog_saved 成功后,插件停止旧会话并新建标签页;预填继续提示词供用户发送或改成新目标。 第一次发送携带 worklog_session_id;CLI 只允许新会话加载,加载失败则不调用模型。插件通过 init 能力声明检测旧 CLI,不能保存时保留原会话。

压缩与循环恢复

压缩前保存已观察证据,压缩后保存边界;恢复资料不能随着消息压缩被抹掉。 本次优先打通自动记录与显式新会话交接。上下文阈值自动迁移属于后续策略:必须先保证交接可靠,限制迁移次数并继承消耗预算,防止“无限开新窗口”。 继续保留现有重复读取检测;历史记录提供定位与结论,不将有损摘要当作源文件缓存。

实施步骤

  • [x] 实现有界 Markdown 工作记录及读回校验。
  • [x] 接入 IDE 共用 CLI 会话生命周期与压缩边界。
  • [x] 接入新任务/历史交接入口,确保创建独立 session。
  • [x] 补充记录、压缩、恢复、错误与新会话回归测试。
  • [x] 更新本方案的实际行为、验证结果和限制。

实际行为与限制

  • Context Memory Kernel 的 session checkpoint 是权威状态;WORKLOG.md 是可读、可重建的有界投影,手工修改不会提升权限或覆盖权威状态。
  • TaskCheckpoint 已作为加法协议类型同步到 Agent Protocol、TypeScript SDK、Python SDK 以及 Kotlin/Swift 生成投影,避免不同宿主使用各自定义的工作记录结构。
  • IDE 显式启用工作记录。历史交接要求旧会话仍在运行且 CLI 宣告支持 v1 协议;保存确认前不会停止旧会话,等待超过 60 秒会保留原会话并提示重试。
  • 新会话只继承指定工作记录,不继承旧对话、临时授权或执行中的工具调用;首次发送失败时可以重试加载。
  • 本地已通过 9 个 CLI/IDE 回归文件共 77 条测试,覆盖工作记录、真实 JSONL 检查点、流式交接、VS Code 标签页及图片消息、自动压缩/持久化和中断;Context Memory Kernel 全部 99 条测试及 writer inventory 校验通过。
  • 使用 IntelliJ 随附的 Java 21 完成 JetBrains compileJavaAgentChatSessionTest:13 条测试通过,包含历史引用、附件与非法来源 ID 校验;语法、格式和 git diff --check 检查通过。
  • 运行记录没有单独的模型总结调用,但读取摘要仍占用上下文;尚未量化 token 节省比例,也未完成超长会话的持久化 IO 基准测试。
  • 发布提交的三平台 CLI CI、Strict Sandbox、npm OIDC 发布、Context Memory Kernel CI 与 IDE 标签工作流均已通过;公开 npm、Open VSX、JetBrains Marketplace 和 PyPI 回读成功。Desktop 原生安装包仍是独立制品,不继承这些发布证据。

用户指南:IDE 任务记录与新会话接力

验收

  • 多轮读取、修改和失败之后能在 Markdown 中找到目标、工具证据和最近进展。
  • 压缩后、进程重启后记录依然可读,不依赖旧进程内存。
  • 新会话 ID 与旧会话不同;交接只加载指定历史记录,不恢复整份旧对话。
  • 文件变化后允许针对性复查,失败尝试不会被记作成功。
  • 保存或加载失败、非法路径、超大记录不会导致静默丢失或无界上下文膨胀。
  • 本地针对性测试与精确提交发布门均通过,公开制品已完成回读。
  • 精确发布提交、公开版本和文档站点保持一致;任一渠道升级失败时仍保留原会话与工作记录。

基于 MIT 许可发布