deepseek-harness-desktop-app/packages/dsh-product-bridge

606Star32Fork6Issue0Watching

通过 IPC 把 10 个项目/对话/Canvas/Office 工具与 ui_render 注册进 DSH Web Profile,身份由父进程统一管。

语言
JavaScript
License
MIT
分支
dev
agentic-workflowsai-agentai-workbenchdata-analysisdeepseek-harnessdesktop-appdshdsh-plugin

安装

$ dsh plugin --profile web add github:vibeinging/deepseek-harness-desktop-app/packages/dsh-product-bridge

在终端中运行以上命令,通过 dsh CLI 安装此插件。可在右上角切换 Profile。 第一次用 dsh?看这篇新手教程

一句话定位

DeepSeek Harness Desktop App 的产品桥接 Profile Bundle。它通过 IPC 把 10 个项目/对话/Canvas/Site/Office 工具和 ui_render 注册到当前 DSH Web Profile 的 Agent 工具目录,并把应用指令、项目记忆、模型目标等关键上下文以受控方式注入模型步,让 DSH 能在不修改官方源码的前提下访问桌面应用的本地数据。

核心能力

  • 暴露 2 个项目上下文工具:project_list(列出当前用户可见的项目)与 conversation_list(列出当前项目下对话,支持是否包含归档)
  • 暴露 4 个 Canvas/Site 工具:canvas_inspect / canvas_create / canvas_edit / canvas_suggest,全部基于不可变 base 版本,编辑和建议都要求先 inspect
  • 暴露 3 个 Office 产物工具:artifact_office_inspect / artifact_office_create / artifact_office_edit,覆盖 Markdown / DOCX / XLSX / PPTX / PDF 五种格式
  • 暴露 1 个结构化界面工具 ui_render:在父进程校验的有界 schema 内渲染可交互界面,按钮和表单只会发出可见的用户消息
  • 把 5 个工作台页面(结果与证据、浏览器、文件、产物、Site)通过 product.json 贡献到 agent.workbench.tool 产品位置,应用外壳从当前 Profile 目录读取
  • 拦截写入类工具:5 个写操作都会触发 DSH 内置审批流程;子进程侧不持有任何身份或权限,全部由父进程绑定已授权 Session、用户和项目后处理

技术实现

  • 语言: JavaScript (ESM, "type": "module")
  • 关键依赖: @deepseek-ai/cordis ^4.0.1、@deepseek-ai/dsh-agent ^0.1.0-rc.6、@deepseek-ai/dsh-invariants ^0.1.0-rc.6、@deepseek-ai/dsh-tools ^0.1.0-rc.6
  • 架构模式: Cordis 插件(inject: ["agents","tools","webServer"]),通过 cordis.patch.yml 声明为 product-bridge 行;通过 product.json 声明工作台产品位置贡献;运行时与父进程走 IPC,子进程只携带 Session id
  • 入口文件: packages/dsh-product-bridge/src/index.jsapply(ctx) 是 Cordis 启动钩子,内含 IPC 主机、工具注册、内存/指令注入、模型目标跟踪、生命周期收尾)

适用场景

想在 DeepSeek Harness Desktop App 里让 DSH 直接读写本地项目文件、Canvas、Office 产物和结构化界面时使用这个 Bundle。它把官方 DSH Web Profile 扩展为能调用桌面应用能力的形态,省去自行 fork 或维护本地 SDK 的成本。普通用户不需要单独安装它——它随桌面应用一起随 Profile 加载。

前置依赖与兼容性

依赖最低版本说明
DSH Agent0.1.0-rc.6通过 peerDependencies 显式钉到 ^0.1.0-rc.6,必须使用 next/rc.6 系列,latest 仍指向旧版本
DSH Tools0.1.0-rc.6同上,peerDependencies 锁定
DSH Invariants0.1.0-rc.6同上,peerDependencies 锁定
Cordis^4.0.1提供插件运行时
Node^22.19.0 或 >=24.0.0engines 字段声明
平台跨平台跟随宿主桌面应用(macOS / Windows / Linux)

安装方式

dsh plugin --profile web add github:vibeinging/deepseek-harness-desktop-app/packages/dsh-product-bridge

配置项

本插件无需额外配置。所有能力由 cordis.patch.yml(声明 Cordis 插件行 product-bridge)、product.json(声明工作台 5 个页面与显示信息)和 package.json#dshWork/#dsh(声明 Bundle 元数据)静态注入,运行时通过 IPC 与父进程协商上下文。

常见问题

Q: 装上这个包之后,DSH 会多出什么能力?

A: DSH Agent 工具目录里会多出 10 个工具:project_list / conversation_list 用于读取项目与对话,4 个 Canvas/Site 工具(inspect/create/edit/suggest),3 个 Office 产物工具(inspect/create/edit),以及一个用于渲染结构化交互界面的 ui_render

Q: 这些工具在模型看到之前会先被怎么拦一道?

A: 任何会改动桌面应用本地数据的写入类工具(canvas_create / canvas_edit / canvas_suggest / artifact_office_create / artifact_office_edit)都会触发 DSH 内置的审批流程,模型必须先拿到用户确认才能继续。

Q: 子进程只发一个 Session id,身份和权限谁来管?

A: 全由父进程(DeepSeek Harness Desktop App 的 Electron 主进程)管。子进程拿到 Session id 后发请求,父进程把它绑定到唯一已授权的 Session、用户与项目,再处理项目/对话/Canvas/Site/Office 请求;请求不能跨身份、跨项目。

Q: 上下文里的应用指令和项目记忆是怎么注入的?

A: 每个模型步进入前,桥接先读一次父进程快照,把允许的应用指令、项目指令、全局/项目记忆包装成不可变 user 消息附到 agent/pre-step 批次里,并打上 dsh-work-context / dsh-work-memory 来源;读取失败只跳过这一次补充,不会替换用户消息。

Q: 子 Agent 会沿用父 Agent 的模型配置吗?

A: 会。桥接会记录父 Agent 最终解析出的 provider/model,当 DSH 创建子 Agent 时在第一次请求前把目标固定下来,避免子 Agent 回退到进程启动默认模型;之后父 Agent 的请求仍然走自己的正常设置。

Q: 这个包跟同仓库的 dsh-work-shell、dsh-theme-pack 是什么关系?

A: 三者同属 DeepSeek Harness Desktop App 的私有 Profile Bundle 三件套:dsh-work-shell 替换默认壳,dsh-theme-pack 提供主题,dsh-product-bridge 注入产品工具;三件齐全桌面应用才完整。

Q: 父进程关掉了,子进程会不会留未处理错误?

A: 不会。运行时把就绪消息和产品 IPC 都走成回调式发送,父进程关闭会正常胜过晚到的 Loader,未发送成功的请求会被拒绝而不是变成 unhandled channel error。

Q: 第三方 Bundle 能绕过这套机制把 UI 塞进渲染进程吗?

A: 不能。包含 dsh.client 的社区 Bundle 会在预检阶段被拒绝,工作台页面只渲染本地白名单内的组件;用户安装的 Bundle 既无法跑 Client 代码,也无法只靠 JSON 名字进入 Renderer。

上手难度

进阶 — 需要理解 DSH Profile Bundle、Cordis 注入点和 IPC 工作机制才能修改,普通用户通常无需手动调整。

已知问题与限制

  • peerDependencies 强制锁到 0.1.0-rc.6,因为部分叶子包的 latest 仍指向旧版本;开发时若链接 DSH 源码或混装不同 RC 系列会破坏兼容性
  • 本包为私有包(package.jsonprivate: true),不发布到公共 registry;成品必须携带同一份审核版本和匹配的官方 NPM SDK 版本
  • rc.6 SDK 不再发布原来的 ProductHost 与项目工具包,工具与 IPC 桥接由本 Bundle 直接持有,升级 DSH SDK 时需同步调整
  • KV Cache:同一 Profile 内 Bundle 版本或顺序变化会重启 DSH 运行时,可复用的工具前缀可能改变
  • 普通请求 30 秒超时,写操作类审批后端到端 60 秒超时(PRODUCT_REQUEST_TIMEOUT_MS / PRODUCT_MCP_TIMEOUT_MS
  • 移除的"项目 Plugin 挂载、Skill、MCP 数据"目录方法返回空目录,由 DSH 原生注册表继续接管