Skip to content

v1.1.0 · 子代理档位与会话上下文继续

Choose a tag to compare

@JiamingShi-JsPhys JiamingShi-JsPhys released this 06 Nov 16:52
· 16 commits to main since this release

这一版解决两个真问题

1. 子代理该派谁:steward:subagent

DSH 的子代理默认继承父会话的路由——主代理用最强火力时子代理跟着烧钱,主代理用便宜档时子代理又扛不住真活。1.1.0 给子代理单开了一个档位(不是模式,不改全局档位):

  • agentic 质量 0.6 + 成本 0.4:够聪明,但不必每件事都用顶配;
  • 窗口每 100k +4 分(封顶 40):子代理带着父会话的已完成轮次,长前缀是常态;
  • 延迟最多 +20 分、burst 打散决定性(−20000):一批子代理同时开工时落到不同上游,不一起撞 429;
  • agentic 维度 B+ 硬门槛:弱模型会把工具调用写坏、把半截结果当完成;
  • 会话粘性 +300:同一子代理会话的后续轮次沿用同一模型。

接线(写进 profile,重启生效):

- id: tool-subagent
  name: "@deepseek-ai/dsh-tool-subagent"
  config:
    provider: spawn
    toolName: subagent
    agentOptions:
      provider: steward
      model: 管家·子代理

不想固定,也可以让 Agent 先问一句再派:token_steward_manage 新增 recommend_model(profile=subagent + task="一句话任务"),返回按真实意图推断排好序的 provider/model 与逐项理由。/v1/models 现在给 6 个虚拟 id 都带上 name / strengths / strength_tags,选择界面不再是看不懂的 id。

2. 换模型时的上下文

消息日志本身不会丢——DSH 会话层把完整历史原样发给新模型。会损失的是:

  • 上游前缀缓存:每换一次模型,新厂商从零读完整段前缀。对策是会话粘性(同一会话成功服务过的模型,下一轮小额加分:frugal +60 / balanced +300 / max_power +120;主会话与子代理按档位分开记,LRU 512 个会话)。
  • 上一家的私有字段:reasoning_content / reasoning_details / thinking 块 / cache_control。对策是跨厂商请求归一化:只在目标厂商 ≠ 上一轮服务的厂商时剥掉,系统提示与用户内容一字不动;同一厂商内换模型保持原样。
  • 窗口收缩:仍然硬拒绝(window-too-small),绝不悄悄截断历史。

关于「把 KV 状态直接搬给下一家」:公开 chat/completions 协议拿不到模型内部状态,这一层做不到,也不假装做到。README 里写清了边界。

升级

cd ~/.dsh/profiles/desktop && pnpm update dsh-token-steward

然后重启 DSH。已有配置无需改动;steward:subagent 与 recommend_model 是新增能力。

质量

  • 485 条断言全绿(新增子代理打分 / 粘性 / 只读预览 / 跨厂商归一化 / 虚拟 id 自述 / recommend_model);
  • tsc --noEmit 零错误;npm run build 正常产出;
  • README / CHANGELOG / docs/architecture.md 同步更新。

如果它帮到了你,去仓库点一颗 Star 吧 —— @JiamingShi-JsPhys


发布后并入 1.1.0 的两处修复

换过令牌后「API 密钥无效 AUTH」

系统用户环境变量 STEWARD_LOCAL_TOKEN 里留着旧令牌、网关持久化的是新令牌时,DSH 的 llm-pi-ai 可能在插件挂载前就把 apiKeyEnv 读进凭据缓存,之后每个请求都被网关 401。三道保障:网关优先采用继承来的合法令牌;启动时两把不一致则漂移窗口内两把都接住;每次启动把当前令牌写回 HKCU\Environment。仍是常量时间比较,认的钥匙最多两把、都在本机用户目录,范围仍只限回环。

DSH 打不开:desktop welcome: Web authentication failed

桌面版宿主每次启动下发一枚新名字的 dsh-auth-<随机> Cookie 且从不回收旧的,本机实测积了 71 枚;Cookie 头越过 Node 16 KB 上限后宿主回 431,桌面端拿不到 2xx 就判定认证失败——与插件、密钥、账号都无关。面板现在会数这个数(≥40 黄条 / ≥55 红条);完全退出 DSH 后跑 npm run repair:cookies 即可清理(先备份,只删本机 127.0.0.1 的 dsh-auth-*)。

测试: 505 条断言全绿,tsc --noEmit 零错误。