前言¶
在 DeepSeek Harness(dsh)里跑长任务时,工具调用会把检索结果、目录列表、文件片段不断写进主会话上下文。后续轮次要重复携带这些前缀,既占 token,也影响前缀缓存命中。常见做法是裁剪历史或单独开子会话,但子会话若与主会话提示词、工具面不一致,缓存往往对不齐。
下面介绍 Pasumao 维护的工作流插件 dsh-plugin-future-session:把单次会话拆成「现实会话」与「未来会话」两层——现实侧每次工具调用不本地执行,由继承全部已完成上下文的 fork 镜像在暗处代劳,主上下文只留下「一次调用 + 一份结论」(或按需并入完整过程)。插件零依赖、零构建,当前版本 0.5.3,许可证 MIT。
这是什么¶
dsh-plugin-future-session 面向 dsh 智能体/工作流开发者,解决「重工具过程污染主会话上下文」的问题。
与普通长链式会话不同,开启后模型照常发工具调用,但现实侧看到的是同名同描述同参数的影子工具:不跑真逻辑,会话就地停摆;插件用 FutureSessionRuntime 经核心 Agent 工厂(ctx.agents.create,可回退 ctx.agentLoop.createAgent)fork 镜像会话,不走原生 ctx.subagents 目录。未来侧用真工具完成搜索、读文件、分析等,再自主决定如何把结果送回现实侧。
社区目录页:SkillHub 插件页。源码与说明:GitHub — Pasumao/dsh-plugin-future-session(仓库星标数为 0,以目录登记为准)。
工作原理概要¶
- 开启「未来」模式后,当前会话标记为现实会话;可见工具被安装为影子工具(作用域遮蔽,wire 层无法区分)。
- 模型发出工具调用 → 影子工具停摆 → 在暗处 fork 未来会话,seed 为现实会话已完成轮次前缀,系统提示词与工具面同形,利于前缀缓存全程命中。
- 未来会话自由调用真工具完成工作。
- 收口由未来会话决定:
- 中间过程对主会话无用:调用future_return(summary),结论作为该次工具返回值(带[future-session]标记),未来会话封存。
- 过程对后续有用:调用future_promote(report)(0.5.0 起为 merge 语义),完整过程并入现实会话,现实会话继续推进。 - 身份判定不靠提示词分叉,而靠返回内容是否带
[future-session]标记。 - 保底:
future_peek(sessionId)可查看登记过的未来会话按步摘要(文档建议尽量别用);与折叠框/transcript共用登记校验与摘要管线。
用户界面始终停在现实会话;未来过程可在工具行折叠框中回放(Phase 2,0.4.0+)。插件在 loopback 提供 GET/PUT /mode、GET /tools、GET /calls、GET /transcript、POST /answer 等路由供客户端展示与中继提问。
核心功能¶
- 透明委派:现实侧每个工具调用可自动 fork 继承上下文的未来会话,不经原生 subagent 目录。
- 上下文蒸馏:默认路径下主会话只保留调用与结论,检索与文件噪音留在未来会话。
- 两种回传:摘要回传(
future_return)或原样/完整并入(future_promote)。 - 客户端增强:影子工具结果可带
presentationMeta,支持折叠框轮询转录、收口标签、ask_user_*中继作答。 - 配置项:
enabled、protocolSection、maxDepth(默认委派深度上限 1,防递归 fork)。 - 持久化:
$DSH_HOME/dsh-plugin-future-session.json记录模式、登记、callId 映射与可见工具目录。 - 策略:fork 出的未来会话将 approval 钉为
never(delegation 语义),现实会话在 ask 审批模式下开启插件后,未来侧工具不再弹审批。
依赖:@deepseek-ai/cordis ^4.0.1(peer);Node >= 18。
安装与启用¶
从 npm 安装后挂到指定 profile(命令来自项目 README,将 <dsh>、<profile> 换成本机路径):
npm install dsh-plugin-future-session
node <dsh>/lib/bin.js plugin --profile <profile> add <profile>\node_modules\dsh-plugin-future-session
重启 Desktop 客户端后生效;启动日志中不应出现 skipping profile bundle "dsh-plugin-future-session"。
插件在当前 dsh 进程权限下运行,安装前应自行审阅源码与 MIT 许可证,确认与自身环境策略一致。
典型用法¶
滑动开关(推荐):会话输入栏左下角「未来」开关,点按即可开启/关闭本会话的现实会话模式(悬停有说明,无需额外指令)。
等价指令:
/future on # 进入现实会话模式:工具由未来会话代执行,默认只回蒸馏结论
/future raw # 原文并入:未来会话调用与结果原样塞回主会话
/future off # 退出,工具恢复本地执行
/future status # 查看当前模式与累计未来会话
插件 Config 默认值:
| 字段 | 默认 | 说明 |
|---|---|---|
enabled |
true |
总开关 |
protocolSection |
true |
是否注入共享协议提示段 |
maxDepth |
1 |
未来会话委派深度上限 |
维护者本地自检(开发目录内):
cd <本插件目录>
npm run selfcheck
适用场景与注意¶
适合谁
- 长链路探索型任务(多轮搜索、反复读仓库),希望主会话上下文保持短、稳定,并尽量命中前缀缓存。
- 需要在 UI 上仍留在「主会话」,却想看到未来侧过程摘要或折叠回放的用户。
设计边界与限制(摘自 README)
- 同形原则:禁止按现实/未来分叉系统提示词,否则缓存失效。
- 委派串行:一次委派中现实会话整体等待,无并发 fork。
- 影子注册存在理论上的首个请求抢跑窗口;个别工具若 shadow 注册失败会降级为本地直接执行(
/future status、/mode会提示 degraded 名单)。 - 收口依赖模型主动调用
future_return/future_promote;未决策时回退用最终输出,仍符合「只回结论」语义。 - 折叠框依赖
presentationMeta或GET /calls索引;历史无映射的调用可能不显示折叠框。 - fork 未来会话 approval 为
never,需由核心策略与沙箱兜底风险。
DSH 生态理念是「一切皆插件」;SkillHub 等为社区目录,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-plugin-future-session 用现实/未来双层会话,把重工具过程隔离在 fork 镜像里,让主会话上下文保持「调用 + 结论」的紧凑形态,并在同形提示与工具面下争取前缀缓存命中。若你在 dsh 上被上下文膨胀拖慢或缓存效率不佳,可按上文 npm 路径安装,用输入栏「未来」开关或 /future on 试用。