homily707/dsh-session-header ↗★ 0
dsh-session-header
Inject an x-session-id HTTP header onto every DeepSeek Harness LLM provider request, carrying the harness session id of that exact call.
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:homily707/dsh-session-header说明文档
阅读完整 README ↗dsh-session-header
English | 中文
DeepSeek Harness 插件:给 harness 发出的每一个 LLM 请求注入 x-session-id header,值为发起该次调用的 harness session id。
为什么需要它
harness 没有请求级 header 缝——GenerateOptions 没有 headers 字段,每个 adapter 都在自己内部构造线上 header。如果你的模型网关(或中间代理)按 session header 做路由、缓存或审计,harness 自身发不出这个 header。
本插件把两个官方拦截点组合起来补上这个缺口:
llm/streamwaterfall 标记出哪些调用是 LLM 调用,并携带options.sessionId;globalThis.fetch补丁 注入 header,所有基于 fetch 的 adapter(llm-deepseek、llm-pi-ai,以及任何传输层最终落在全局 fetch 上的 SDK)都被覆盖,无需改 adapter 代码。
上下文传播用 AsyncLocalStorage:只有发生在某次 LLM 调用流内部的 fetch 会被触碰,无关 fetch(web RPC、遥测、工具流量)原样通过。别人已设置的 header 绝不覆盖(按 HTTP 语义大小写不敏感)。插件卸载时还原原始 fetch。
取值语义:
- 默认:取当前调用
GenerateOptions.sessionId——主会话各轮次、压缩/起标题辅助调用、in-process 子 agent 各自上报自己的 session id(子 agent 拥有独立的 child session id); - 配置
value:所有调用使用固定值; - 两者皆无的调用不发这个 header。
安装
需要 dsh CLI 与 Node ≥ 22。
作为 bundle 安装(推荐)
dsh plugin --profile add github:homily707/dsh-session-header
本包是纯 JavaScript、无构建脚本,不需要 pnpm ≥ 10 的构建授权。验证层并启动:
dsh --profile --dump-config # 应能看到 "# == dsh-session-header" 层
dsh --profile
本地 checkout 用 --patch 覆盖层加载
# my-overlay.yml —— 此处插件行需要绝对模块路径
- insert:
- id: session-header
name: /absolute/path/to/dsh-session-header/index.js
config:
header: x-session-id
# value: my-fixed-session-id
dsh --patch ./my-overlay.yml
配置
| 字段 | 类型 | 默认 | 含义 |
|---|---|---|---|
header | string | x-session-id | 注入的 header 名;线上大小写不敏感 |
value | string | — |