🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

省流插件套件 ZhQkYu/dsh-token-saver-plugins

DeepSeek Harness
ZhQkYu26 天前有提交已提供中文文档扫描:未发现敏感能力

DeepSeek Harness 插件:工具门控、会话交接、免费网页 AI 桥接,还有可视化工作流引擎

30.7/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/9 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

自动兼容检查未通过:缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add ZhQkYu/dsh-token-saver-plugins
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · market
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
数据截至 2026/11/02·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 26 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安装兼容性检查需源码安装

缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包dsh-plugins-workspace(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/12 22:48:02

安全扫描自动 · 静态分析源码
v2.7.0
🟢 扫描:未发现敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描未发现敏感能力:最多只发网络请求、读取自身元数据或只读文件,未发现执行命令、文件写入或敏感信息读取。

扫描于 2026/11/4(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/schemastery@deepseek-ai/dsh-tools@deepseek-ai/dsh-agent@deepseek-ai/dsh-session@deepseek-ai/dsh-system-prompt@deepseek-ai/dsh-agent-default-model@deepseek-ai/dsh-llm@deepseek-ai/dsh-session-projection@deepseek-ai/dsh-session-title@deepseek-ai/dsh-workspace@deepseek-ai/dsh-agent-preset-registry
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 工具门控
  • 会话交接
  • 免费网页AI桥接

README

由 DeepSeek 最新模型翻译生成
DSH Token Saver 插件套件 一套为 DeepSeek Harness 设计的 Host + Client 插件,核心目标是把「免费 AI 干活、付费 AI 管流程」落地。 主智能体(付费模型)通过工具 + 提示词感知并操控这 4 个插件,从而在不修改 deepseek-harness 任何源码的前提下,显著降低 token 消耗、延长单会话生命周期,并让复杂多步任务变得可视化、可交接。 ⚠️ 风险提示:本仓库中的 web-ai-bridge 插件会自动化操作第三方网页产品(DeepSeek / 豆包 / 通义 / 智谱 / Kimi 网页版)。这可能违反其用户协议,存在账号受限风险。仅使用你本人的账号、低频使用;请勿发送密钥、隐私或受保密约束的代码。完整条款见 免责声明。 目录 - 核心思路 - 插件总览 - 环境要求 - 快速开始 - 仓库结构 - 插件 A:tool-gate(工具分组开关) - 插件 B:session-handoff(会话记忆与交接) - 插件 C:web-ai-bridge(免费网页 AI 桥) - 插件 D:flow(可视化工作流) - 前端 UI(flow-ui) - 安全与约定 - 测试 - 许可 核心思路 当你用 DeepSeek 这种按 token 计费的模型时,每个请求的 token 都花钱。
展开完整文档(README 剩余 1 节)
DSH Token Saver 插件套件

一套为 DeepSeek Harness 设计的 Host + Client 插件,核心目标是把「免费 AI 干活、付费 AI 管流程」落地。

主智能体(付费模型)通过工具 + 提示词感知并操控这 4 个插件,从而在不修改 deepseek-harness 任何源码的前提下,显著降低 token 消耗、延长单会话生命周期,并让复杂多步任务变得可视化、可交接。

⚠️ 风险提示:本仓库中的 web-ai-bridge 插件会自动化操作第三方网页产品(DeepSeek / 豆包 / 通义 / 智谱 / Kimi 网页版)。这可能违反其用户协议,存在账号受限风险。仅使用你本人的账号、低频使用;请勿发送密钥、隐私或受保密约束的代码。完整条款见 免责声明。

目录

- 核心思路
- 插件总览
- 环境要求
- 快速开始
- 仓库结构
- 插件 A:tool-gate(工具分组开关)
- 插件 B:session-handoff(会话记忆与交接)
- 插件 C:web-ai-bridge(免费网页 AI 桥)
- 插件 D:flow(可视化工作流)
- 前端 UI(flow-ui)
- 安全与约定
- 测试
- 许可

核心思路

当你用 DeepSeek 这种按 token 计费的模型时,每个请求的 token 都花钱。这套插件的核心策略是:

把「量大、琐碎、重复」的活丢给免费的网页 AI;付费模型只负责决策、调度、汇总。

具体拆解成 4 个能力:

| 能力 | 解决的问题 | 对应插件 |
| 工具开关 | 工具描述占上下文,不用时关掉 | tool-gate |
| 会话记忆 + 接力 | 上下文满了要开新会话,但不能「失忆」 | session-handoff |
| 免费 AI 桥 | 琐碎子任务不用付费模型,丢给网页 AI | web-ai-bridge |
| 可视化流程 | 多步任务光靠文字容易跑偏,画成流程图 | flow |

它们不是给模型加「新玩法」,而是给模型提供可感知、可操控的工具与上下文,让模型自己决定何时省 token、何时交接、何时分派。

插件总览

| 代号 | 插件 | 主智能体看到的工具 | 用户可见 UI | 作用一句话 |
| A | tool-gate 工具分组开关 | tool_gate | (可选)会话级开关面板 | 按需启停工具组,省上下文 |
| B | session-handoff 会话记忆与交接 | session_handoff + 记忆上下文 | 新会话出现在侧栏 | 记忆文件 + 会话接力,延长生命周期 |
| C | web-ai-bridge 免费网页 AI 桥 | web_ai_ask / web_ai_status / web_ai_open | 可见的浏览器窗口 | 把子任务丢给免费网页 AI |
| D | flow 可视化工作流 | flow_workflow(+ 可选发布的 flow_<name>) | 侧栏「工作流」页面(flow-ui) | 确定性流程由引擎执行;引导流程由模型照着做 |

配套前端 bundle:@dsh-plugins/flow-ui 渲染 flow 插件的列表页与画布编辑器。

环境要求

- Node.js:^22.19 || >=24(与 deepseek-harness 一致)
- pnpm:9.x 或 11.x(workspace 管理)
- deepseek-harness:本地已克隆的 Harness 仓库(插件通过 link: 引用其源码包)
- 浏览器:Edge 或 Chrome(web-ai-bridge 用 playwright-core 驱动)

所有 @deepseek-ai/ 依赖均通过 link: 指向本地的 deepseek-harness 源码,不会去 npm 拉取预发布包(pnpm-workspace.yaml 中 autoInstallPeers: false 即是为此)。

快速开始

本仓库是 workspace monorepo,三个可安装的插件包位于 plugins/ 下: @dsh-plugins/token-saver / @dsh-plugins/flow(Host bundle)和 @dsh-plugins/flow-ui(Client bundle)。
下面用 <HARNESS> 代表你本地 deepseek-harness 的路径,用 <PLUGINS> 代表本仓库的路径。

1. 构建插件

在 dsh-plugins 根目录:

pnpm install
pnpm run build # tsc 输出 lib/ + esbuild 打包 client.js

2. 安装到 Harness 的配置档(本地路径)

在 deepseek-harness 根目录:

cd <HARNESS>
pnpm dsh plugin --profile web add <PLUGINS>/plugins/token-saver
可视化工作流(flow)
pnpm dsh plugin --profile web add <PLUGINS>/plugins/flow
pnpm dsh plugin --profile web add <PLUGINS>/plugins/flow-ui

确认插件层已加载(应看到 "# == @dsh-plugins/token-saver" 层)
pnpm dsh --profile web --dump-config

本地路径必须写绝对路径(harness 的 plugin add 不接受相对路径,因为解析基准是配置档目录,而不是你输入命令的地方)。例如:
pnpm dsh plugin --profile web add /home/you/dsh-plugins/plugins/token-saver

3. 启动 DSH Web

pnpm dsh web --patch apps/web/tests/pin-browse-picker.overlay.yml

4. 从 GitHub 安装(可选)

Harness 的 dsh plugin add 支持直接从一个 git 主机(GitHub 等)安装,无需先构建或发布到 npm:

pnpm dsh --profile web add github:ZhQkYu/dsh-plugins

不过 git 安装拉取的是源码而非构建产物,需要满足两个条件,缺一不可:

1. 作者侧:仓库必须提供自包含的 prepare 脚本(pnpm 在 git 安装后运行它来生成 lib/)。本仓库当前用 link: 指向本地 deepseek-harness 的 @deepseek-ai/ 依赖,尚未做成自包含构建,因此从 GitHub 安装目前需要先按上面的本地方式构建。
2. 用户侧:pnpm ≥10 默认拒绝运行 git 依赖的 prepare 脚本,需在配置档的 pnpm-workspace.yaml 中显式授权:

allowBuilds:
token-saver: true
flow: true
flow-ui: true

把这项授权视为允许该包代码在安装时于你的机器上执行。只对可信源码授权,并建议锁定 commit(github:ZhQkYu/dsh-plugins#<sha>)。

若不想让用户做授权,可在发布时选择预构建产物(任一即可):

- 发布到 npm(pnpm publish 时构建好 lib/):pnpm dsh plugin add @dsh-plugins/token-saver
- 打 tarball(pnpm pack):pnpm dsh plugin add ./token-saver-0.1.0.tgz

- 改了插件 JS 后必须重启 dsh(Node 缓存模块代),浏览器强制刷新。
- 真实模型调用需要 harness 根 .env 中的 DEEPSEEK_API_KEY(或本仓库 .credentials.yaml)。

4. 验证

打开 DSH Web(默认 http://127.0.0.1:3080/),侧栏应出现 Plugins 与 工作流 两个入口;在 Plugins 页可看到已安装的插件 bundle(Token Saver、Flow)。

从旧版本升级:Workflow Canvas 已合并进 flow。先执行 pnpm dsh plugin --profile web remove @dsh-plugins/token-saver-ui(或在 Plugins 页移除该 bundle),再重新构建并重启 DSH。

仓库结构

dsh-plugins/
README.md # 本文件(仓库首页) package.json # 私有 workspace 根 pnpm-workspace.yaml # packages: [plugins/] tsconfig.base.json vitest.config.ts plugins/ token-saver/ # @dsh-plugins/token-saver(Host bundle) package.json cordis.patch.yml # Host 插件配置(工具分组、记忆、provider)
locale/<feature>/{zh,en}.json
src/
shared/ # session-launch, glob, message-source, projection
tool-gate/ # index + state + reconcile + groups
session-handoff/ # index + memory + handoff
web-ai-bridge/ # index + browser + driver + page
scripts/probe-web-ai.mjs # 网页 AI 选择器探测脚本(开发用) tests/.test.ts flow/ # @dsh-plugins/flow(Host bundle) package.jsontext cordis.patch.yml # Host 插件配置(存储、预算、并发、HTTP、code 沙箱、工具前缀) examples/ # 可导入的示例流(topic-outline / http-check / review-loop / read-summarize-confirm) src/ spec/ # 节点规格、类型、校验、coerce、run-view、guided(Host/Client 共享) host/ engine/ # scheduler + frames + budget + record + events + engine executors/ # 每种节点的执行器(llm / http / code / tool / loop / batch / end …)
services/ # guarded-fetch(SSRF)、run-agent store/ # flow-store / run-store / atomic routes/ # flows / runs / catalog limits.ts, config.ts, flow-tools.ts, workflow-tool.ts, known-tools.ts, schemas.ts tests/.test.ts flow-ui/ # @dsh-plugins/flow-ui(Client bundle) package.json cordis.patch.yml index.js # Host 半边 build.mjs # esbuild 打包 + ModuleLoader 包装 tsconfig.json src/client/index.tsx src/client/editor/ # Editor, NodeView, forms, convert, PublishDialog src/client/run/ # RunPanel, run-stream src/client/api.ts, locales.ts, styles.ts, FlowList.tsx, FlowPage.tsx lib/client.js # 构建产物

插件 A:tool-gate(工具分组开关)

作用:给 Agent 的工具「装开关」,按需启停,节省上下文。

按名字 glob 匹配把工具分组,可自动把每个 MCP server(mcp__<server>__)归为一组。每个 Agent 维护一份「已启用组」集合,未启用组的工具通过 agent.ctx.tools.restrict({ deny }) 从该 Agent 的可见与可执行工具中移除。主 Agent 用 tool_gate 查看/启用/禁用;状态跨重启从投影重建。

Config(cordis.patch.yml)

| 字段 | 默认 | 说明 |
| groups | [] | 显式工具组;name 唯一,tools 支持 通配 |
| autoMcpGroups | true | 为未被显式组覆盖的 MCP server 生成mcp-<server> 组 |
| mcpEnabledByDefault | false | 自动 MCP 组的默认状态 |
| gateSubagents | true | 子 Agent(origin === 'subagent')是否也受控 |

Model Experience

系统提示段列出所有组名 + 描述 + 工具数,说明「未启用组的工具不可见;需要时用 tool_gate 启用,用完禁用」。启用状态不写进提示段(避免破坏前缀缓存),模型通过可见工具与 tool_gate list 获知。

Known Limitations

- DeepSeek 适配器不支持 deferred tool loading 与 developer 消息;工具列表变化会让请求前缀变化,切换一次 = 一次缓存未命中。建议大工具组默认关闭、一次任务内少切换。
- PTC 模式下经 run_code 嵌套调用 tool_gate 不产生 presentationMeta,重启后该次变更不可重建。
- 从未改动过开关的会话始终跟随当前配置的默认值;tool_gate list 不会固化默认值。
- 开关失败(例如某个工具是 Agent 自身注册、无法屏蔽)只记录 warning,不会阻止会话创建。

插件 B:session-handoff(会话记忆与交接)

作用:给会话做「长期记忆」 + 「接力棒」,延长单会话生命周期。

1. 记忆文件:每个会话 cwd 下的 <memoryFile>(默认 .dsh/memory.md)通过 ctx.systemPrompt.context() 注入每次请求(DSH 会把它作为 durable user-role 快照记录)。文件不存在则不注入。
2. 交接工具 session_handoff:写交接文档 → 落盘 → 可选重写记忆 → 在同一 workspace 新建会话(继承原会话的 agent preset、模型与权限预设),首条消息为交接文档(自动开始执行)→ 旧会话空闲后自动归档。
3. 自动提醒:assistant/message.usage.inputTokens ≥ 阈值 时向该 Agent inject 一次提醒(每会话一次)。

配置(cordis.patch.yml)

| 字段 | 默认 | 说明 |
| memoryFile | .dsh/memory.md | 相对会话 cwd |
| memoryMaxBytes | 16384 | 超出截断并在末尾注明 |
| handoffDir | .dsh/handoffs | 相对会话 cwd |
| suggestAtInputTokens | 60000 | 输入 token 阈值,达到即提醒「该交接了」;0 关闭自动提醒 |
| archiveOldSession | true | 空闲后归档旧会话 |
| titleSuffix | (cont.) | 新会话标题后缀 |

阈值调整:suggestAtInputTokens 越小越早提醒,越大越晚提醒。0 表示完全禁用自动提醒。改完需重启 dsh。

模型体验

session_handoff 的参数:summary(交接文档,必填)、memory(可选,整体重写记忆)、title(可选,新会话标题)、nextPrompt(可选,追加首条指令)。子 Agent 拒绝;无 cwd 的会话拒绝。

已知限制

- 新会话由插件上下文持有;插件热重载会释放其运行中的 Agent(会话已落盘,可在 Web 重新打开恢复)。
- 归档依赖旧会话进入 idle。

插件 C:web-ai-bridge(免费网页 AI 桥)

作用:让 Agent 把子任务丢给免费网页 AI 干。

插件内自持浏览器(playwright-core),两种模式:

- launch:独立持久化 profile,需在自动化窗口里登录一次。
- cdp:连接用户用 --remote-debugging-port=9222 启动的 Edge/Chrome,复用日常已登录浏览器。

浏览器懒启动;每个 provider 一个标签页;同 provider 串行、不同 provider 可并行。

配置(cordis.patch.yml)

- browser: { mode: 'launch'|'cdp', channel: 'msedge'|'chrome', userDataDir?, headless, cdpUrl?, args };cdp 模式必须提供 cdpUrl。
- providers: 每个含 id(^[a-z0-9-]{1,32}$,唯一)、displayName、url(https)、strengths、enabled、selectors、minIntervalMs。启用的 provider 必须配置 selectors.input 与 selectors.message,否则插件加载失败;未探测选择器前请保持 enabled: false(默认)。
- inputTimeoutMs(默认 15000)、firstTokenTimeoutMs(默认 60000)、maxWaitMs(默认 300000,单次提问总上限)、stableMs(默认 2500)、pollMs(默认 500)、replyMaxChars(默认 20000)。

默认 provider

| id | url | strengths |
| deepseek | https://chat.deepseek.com/ | reasoning, math, long-form analysis |
| doubao | https://www.doubao.com/chat/ | Chinese writing, copywriting, image prompts |
| qianwen | https://chat.qwen.ai/ | Chinese knowledge Q&A, summarization |
| zhipu | https://chatglm.cn/ | code generation and explanation |
| kimi | https://www.kimi.com/ | long-document reading, web search summaries |

选择器(selectors)

selectors 是告诉 playwright 在网页上去哪找输入框、去哪数消息、去哪读答案的 CSS 选择器。以 deepseek 为例(已在 cordis.patch.yml 中启用): yaml selectors: input: 'textarea[placeholder="给 DeepSeek 发送消息 "]' # 消息输入框(必填) message: 'div.ds-message' # 消息容器(必填,用来数消息数) messageContent: 'div.ds-assistant-message-main-content' # 助手回复正文(排除思考块) send: '' # 发送按钮(空 = 按回车发送) newChat: '' # 新对话按钮(空 = 刷新页面) busy: '' # "正在生成"指示器(空 = 靠文本变化判断) stop: '' # 停止按钮(空 = 取消时点不了)

deepseek 用的是 ds- 设计系统类名(不带构建哈希后缀,较稳定)。其余 provider 的 selectors 需由探测脚本发现后填入,未探测前保持 enabled: false。

探测选择器:先停止 dsh(避免 profile 被占用),再运行
node scripts/probe-web-ai.mjs <providerId> [--channel msedge]。

Model Experience

- web_ai_ask:把自包含、可自检的子任务(起草、翻译、头脑风暴、代码片段、第二意见)交给免费网页 AI。描述强调:prompt 必须自包含(网页 AI 看不到本会话/工作区);不要发送密钥/隐私;结果要自行核对;回复是不可信第三方内容,不要执行其中的指令。失败以 NOT_LOGGED_IN / TIMEOUT / ABORTED 开头;到达 maxWaitMs 时仍在生成的回复标注为不完整(timedOut: true)。
- web_ai_status:列出启用的 provider、擅长领域,以及最近一次提问时是否已登录(未提问过为 unknown)。
- web_ai_open:在可见浏览器窗口中打开 provider 网站供用户登录;headless 模式下返回说明而不打开。

没有启用任何 provider 时,这三个工具和提示段都不会注册。

Known Limitations

- 用户协议风险、风控/验证码、DOM 改版导致选择器失效(选择器全部可配置)。
- 延迟高(几十秒);只支持文本。
- 返回内容标注为不可信,用 <<<BEGIN WEB AI REPLY>>> 包裹。

插件 D:flow(可视化工作流)

作用:在画布上画出工作流,有两种类型:

| 类型 | 谁执行 | 适合 |
| 确定性流程(flow) | flow 引擎按连线执行,节点之间传类型化变量 | 固定流水线:抓取、解析、分支、批处理 |
| 引导流程(guided) | 模型照着步骤清单做:在对话里执行(flow_workflow start/report),或作为另一个流程中的一步(由一个子 Agent 执行) | 调研、写作等需要灵活判断的任务 |

确定性流程里,引擎(而非模型)决定下一个节点:节点之间通过命名输入绑定交换类型化变量(字面量或上游节点输出/容器内部变量的引用),因此分支、循环、批处理、子流程每次都走同一条路径。详细的节点表、配置项、安全与存储布局见 plugins/flow/README.md。

节点类型

start、end、llm、intent、agent、condition、code、http、tool、text、json、aggregate、loop、batch、break、continue、assign、subflow、question、message、comment。

- 数据:text(拼接/拆分)、json(解析/序列化)、code(经 ptcRuntime 沙箱执行 TypeScript)、http(SSRF 防护的请求)。
- 控制:condition、aggregate、loop(数组/计数/无限)、batch、break、continue、assign、subflow。
- AI:llm、intent、agent(子 Agent)。
- 交互:question(画布或会话)、message、comment。

每个节点都有 onError 策略(fail / default / branch)、timeoutMs 与 retries(0–5)。

运行模型

- 先校验后运行:run.start 先编译校验、检查可选服务(ptcRuntime/subagents/userQuestions)、解析工作区、校验输入,失败直接返回 400。
- 终态唯一:每次运行恰好一个 run.finished(succeeded / failed / cancelled)。
- 预算为致命错误:节点数、LLM 调用数、Agent 节点数、总时长一旦超限直接失败,任何 onError 都无法吸收。
- 并发:独立分支输入就绪即启动;maxConcurrentNodes 只约束叶子节点(容器与子流程不占名额)。
- 事件流:run.events 以 NDJSON 推送,带 15 秒心跳,运行结束后关闭;事件值脱敏并截断,下游节点始终拿到完整值。

Config(cordis.patch.yml)

每个可调项都是 Config 字段(存储、预算、并发、超时、沙箱模式、工具前缀等),完整表格见 plugins/flow/README.md。

Host 路由

全部走 ctx.connection.fetch.register,前缀为 /api/dsh-flow:

- 流:flows(列表)、flow(读取)、flow.create、flow.save、flow.delete、flow.duplicate、flow.validate、flow.publish、flow.versions、flow.version、flow.export、flow.import。
- 运行:run.start、run.events、run.get、run.cancel、run.answer、runs、node.debug。
- 目录:catalog.models、catalog.tools、catalog.flows、catalog.workspaces、catalog.limits。

对话里通过固定工具 flow_workflow 使用所有工作流:list 列出、run 运行确定性流程、start / report / status 跟随引导流程;工具定义不随流程增减变化,不影响提示词缓存。发布时也可以把某个流程单独注册为 flow_<name> 工具;发布后的流程可以被其他流程的子流程节点引用。

已知限制

- question 等待只存在于 Host 进程;重启会把运行中的运行标记为 interrupted。
- Windows 上 read-only 沙箱的 code 节点可能触发 Win32 ACL 错误,需对工作区目录执行 icacls。
- 单独发布的 flow_<name> 工具会改变主智能体的工具列表,使提示词缓存失效;只用 flow_workflow 时不会。
- 引导流程由模型执行,不保证每次步骤、结果一致。
- LLM 结构化输出依赖提示词约束加一次修复重试,没有原生 JSON-schema 模式。

前端 UI(flow-ui)

@dsh-plugins/flow-ui 提供侧栏「工作流」页面:工作流列表(新建时选择确定性流程或引导流程)与画布编辑器。编辑器全程点选:从左侧点击节点类型会接在选中节点后面并自动连线,右侧按节点类型给出表单,变量用下拉选择上游结果,不需要写 JSON;引导流程提供「步骤预览」,并可「在新会话中运行」,画布上实时显示每一步的进度。详见 plugins/flow-ui/README.md。

安全与约定

- 所有 HTTP 路由只通过 ctx.connection.fetch.register;POST 体做 JSON 解析 + 校验 + 大小上限;路径参数只允许 ^[A-Za-z0-9_-]{1,64}$,禁止路径穿越。
- 写文件只写到解析出的受控目录(会话 cwd 下或 DSH home 下),用 path.resolve 后校验前缀,写文件原子化。
- 模型可见输入都经过已记录通道(工具结果、systemPrompt.context、inject/followup)。
- 不新增自定义 SessionEventMap 事件;持久化状态全部来自已知事件类型(tool/call、tool/result、user/message),自定义 MessageSource.kind 是安全的。
- 所有插件导出为命名导出(name / inject / Config / apply),无 default export。
- 仓库 .gitignore 排除 *.credentials.yaml / credentials.yaml / .env,请勿把任何 API key 提交到仓库。

测试

在 dsh-plugins 根目录:

pnpm run typecheck # tsc --noEmit
pnpm run test # vitest run
pnpm run build # 产出 lib/ + client.js

单测覆盖:glob、tool-gate 投影 fold、tool-gate reconcile、memory 路径逃逸/截断、handoff 文件、web-ai-bridge driver。flow 覆盖调度器(信号/预算/并发/取消/超时)、执行器(含 end、loop/batch、condition、aggregate)、存储(run/flow store、原子写、中断恢复)、flow 校验与示例流、引导流程(步骤编译、运行汇报、作为子流程执行)、flow_workflow 工具与工具目录;flow-ui 覆盖画布转换(convert)、表单辅助与运行事件流(run-stream)。

许可

本项目以 MIT 许可证 开源,Copyright (c) 2026 dsh-plugins contributors。

使用前请先阅读 免责声明。 特别是:web-ai-bridge 会自动化操作第三方网页 AI,可能违反其用户协议并导致账号受限,风险与责任由使用者自行承担;智能体模式与工作流插件具备真实的读写与执行能力,请谨慎授权。
预览分享卡片长什么样 ↓ZhQkYu/dsh-token-saver-plugins
分享 · DeepSeek Harness Hub
ZhQkYu/dsh-token-saver-plugins

DeepSeek Harness 插件:工具门控、会话交接、免费网页 AI 桥接,还有可视化工作流引擎

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部