DeepSeek Harness 插件

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.(英文原文)

跳到安装方式

来源信息

GitHub 仓库
homily707/dsh-session-header
最近更新
2026年8月14日
分类
插件开发工具
GitHub stars
2
载体类型
plugin
目录证据
上游声明已找到 dsh.bundle
证据路径
package.json#dsh.bundle
核对版本
0.1.0-rc.8
上游核对日期
2026-08-20

该证据由上游目录提供。本站没有安装、运行或安全审核这个插件。

安装

默认先复制一段 Prompt,让 Agent 读 GitHub 仓库和源码;需要自己装时再切到命令。

复制这段 Prompt,发给 DSH、Codex 或其他 Agent,让它先读 GitHub 仓库和源码。

请先不要安装或执行任何命令。阅读这个插件的 GitHub 仓库、README 和关键源码,然后用清楚、直接的方式回答以下问题,帮助我判断它是否适合我的需求:

1. 这个插件是什么,解决什么问题;
2. 适合哪些用户和典型使用场景;
3. 安装后如何使用,并给出一个最小使用示例;
4. 有哪些已知限制,以及隐私、安全、兼容性或维护风险;
5. 给出“推荐 / 有条件推荐 / 不推荐”的明确建议和理由。

请区分仓库明确说明、根据源码推断和未知信息。证据不足时请明确说明,不要猜测或照抄 README。

GitHub:https://github.com/homily707/dsh-session-header
插件名:dsh-session-header
作者:homily707

检查来源文件

安装前先看这个插件目录里的 README 和其他文件。

文件资源管理器4 个文件
README.zh.md来源说明 · 只读预览
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/stream waterfall 标记出哪些调用是 LLM 调用,并携带 options.sessionId
  • globalThis.fetch 补丁 注入 header,所有基于 fetch 的 adapter(llm-deepseekllm-pi-ai,以及任何传输层最终落在全局 fetch 上的 SDK)都被覆盖,无需改 adapter 代码。

上下文传播用 AsyncLocalStorage:只有发生在某次 LLM 调用流内部的 fetch 会被触碰,无关 fetch(web RPC、遥测、工具流量)原样通过。别人已设置的 header 绝不覆盖(按 HTTP 语义大小写不敏感)。插件卸载时还原原始 fetch

取值语义:

  • 默认:取当前调用 GenerateOptions.sessionId,并剥掉 harness 的 session- 品牌前缀(发送纯 UUID)——主会话各轮次、压缩/起标题辅助调用、in-process 子 agent 各自上报自己的 session id(子 agent 拥有独立的 child session id);
  • 配置 value:所有调用使用固定值(按配置原样发送,不剥前缀);
  • 两者皆无的调用不发这个 header。

安装

需要 dsh CLI 与 Node ≥ 22。

作为 bundle 安装(推荐)

dsh plugin --profile <name> add github:homily707/dsh-session-header

本包是纯 JavaScript、无构建脚本,不需要 pnpm ≥ 10 的构建授权。验证层并启动:

dsh --profile <name> --dump-config   # 应能看到 "# == dsh-session-header" 层
dsh --profile <name>

本地 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

配置

字段类型默认含义
headerstringx-session-id注入的 header 名;线上大小写不敏感
valuestring固定值;不设 = 取当前调用的 harness session id

验证

把某个 provider 的 baseURL 指向会记录请求 header 的网关(或任何回显请求头的端点),开一个会话:

x-session-id: ba104306-a748-4052-a6e3-ab60be2e4c1f

同一会话的所有请求带同一 id;spawn 出的子 agent 的请求带 child session id。

说明

  • llm-deepseek adapter 自身每次请求已带 x-deepseek-harness-session-id;本插件是 provider 中立的,且刻意不覆盖已有 header。
  • 绝不触碰 attributionHeaders()(harness 的 User-Agent 归因契约)。
  • 并发会话正确处理:header 值按调用经由 AsyncLocalStorage 解析,不经过共享可变状态。

许可

[MIT](LICENSE)