DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Blueprint — DeepSeek Harness 插件(DSH Plugin)
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins

dsh-blueprint

Blueprint

读取 harness 实际启动的配置,并在应用 overlay 前对其进行验证。适用于 DSH Web 客户端的 Blueprint 标签页。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add dsh-blueprint@0.6.0
README兼容性版本

兼容性与来源证明

Blueprint 以 dsh-blueprint 发布,当前版本为 0.6.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
web
发布来源
npm
Registry 更新时间
2026/9/21

版本

0.6.0stable
2026/8/20
0.5.2stable
2026/8/20
0.5.1stable
2026/8/20
查看其余 7 个版本收起版本
0.5.0stable
2026/8/19
0.4.0stable
2026/8/19
0.3.0stable
2026/8/19
0.2.2stable
2026/8/19
0.2.1stable
2026/8/19
0.2.0stable
2026/8/19
0.1.0stable
2026/8/19

相关插件

正在加载相关插件…

最新版
0.6.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
93.5 kB
文件数
7
Surface
web
许可证
MIT
发布源
npm
GitHub
★ 2
周下载
33
最近提交
2026/8/30
查看源码 ↗项目主页 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 developer-tools 分类下经过校验的插件。

DSCODE@toddzheng024/dscode-bundle完整的 DeepSeek 编码代理,支持持久化 shell、Ultra 协作和自动权限审查。Automation@michengai/dsh-automation在独立 DSH Session 中按计划执行编码任务,支持 Web 设置页与 Agent 双入口管理。Web App@deepseek-ai/dsh-web-appdsh 浏览器界面捆绑包:位于 dsh-base 之上的 Web 补丁层,加上运行时粘合插件(提供前端 dist、Web 界面提示符、bash 运行时变量和 URL 行)Sdk App@deepseek-ai/dsh-sdk-appdsh SDK 配置包:基于 dsh-base 提供 stdio JSON-RPC 服务和进程生命周期管理

README

dsh-blueprint

Adds a Blueprint tab to the DeepSeek Harness web client. It reads the config your harness actually booted — not a file you hand it — tells you what is broken in it, and checks an overlay before you apply it.

Install

npx @deepseek-ai/dsh plugin --profile web add dsh-blueprint

Then start the web profile and open the Blueprint tab in a conversation:

npx @deepseek-ai/dsh web

What it does

Reads the live loader tree. The host half projects ctx.loader.entries() onto a read-only JSON route, so the tab shows post-merge reality: every entry that booted, with its runtime phase. A file-based tool cannot show you that a plugin is configured, loaded, and crashed — that fact only exists at runtime.

Tells you what is wrong with it. Live checks, not YAML checks:

  • entry-failed — configured, not running. It is in your config and it threw.
  • entry-pending — still waiting for a service that never appeared, naming the services it waits on. A silent half-boot looks identical to a healthy one.
  • disabled-dependency — you disabled something another live entry requires.
  • duplicate-entry-id — rows are addressed by id, so a repeat is ambiguous rather than additive.

Checks an overlay before you apply it. Load a graph exported from mddl studio and the tab shows what changes, what stays, and the same lint pass — plus the exact cordis.patch.yml that would be written.

It refuses to brick your harness

A row naming a package the profile cannot load is not a degraded row — it is fatal. Cordis fails module resolution during boot, so the harness does not start at all, the Blueprint tab is gone with it, and the only way back is editing YAML by hand.

So the check runs before the write, not after: every inserted package is verified present in the profile, and a missing one blocks the apply with a 422 and the install command you need. This is the one situation where a config tool has to refuse rather than warn — there is no running harness left to warn in.

Snapshots

Every write snapshots the previous file under .dsh-blueprint/backups/, and the tab lists them newest first with a one-click restore. Restoring snapshots the current file first, so rolling back is itself undoable. Snapshot ids are validated as bare hex, so a crafted id cannot walk out of the backup directory.

Writing an overlay back

The tab can write the overlay into the profile's cordis.patch.yml for you, and the write is the careful part:

  • It owns one block and nothing else. Rows go between # >>> dsh-blueprint managed block markers. Everything outside them — hand-written rows, comments, !!js expressions — is preserved byte for byte, so the file stays yours to edit by hand. Delete the block, markers included, to take those rows back.
  • You review the exact bytes. Preview shows a real line diff, with unchanged lines still visible so scattered edits do not collapse into one wall of red and green. Applying requires a token issued by that preview and bound to those bytes, so a second tab or a hand edit in between cannot substitute content you never saw.
  • It refuses rather than guesses. A file that moved since the preview is a 409, not an overwrite. A block left open by hand is an error, not a repair.
  • The previous file is backed up under .dsh-blueprint/backups/, and the write goes through a temp file in the same directory then a rename, so a reader sees the old file or the new one and never half of either.
  • The bytes written are compiler output. The browser sends a graph, not text; the host compiles it. There is no path from the page to arbitrary YAML.

Safety

Credential-shaped values are withheld on the host and never reach the browser. Detection is by key (apiKey, token, secret, …) and by value shape (sk-…, bearer …, scheme://user:pass@…), and only strings can be credentials — so maxOutputTokens: 64 stays visible while apiKeyEnv does not. Values that merely nest are reported separately from secrets: calling a port number "redacted" trains people to ignore the word where it matters.

Reads answer same-origin loopback GET only. The socket peer is checked independently of the Host header, so a harness bound to a LAN address does not expose it, and a cross-site fetch is refused even from loopback. Writes add POST plus a per-process session token the page must echo, so another origin cannot post a config change even from the same machine.

Shape

Dual entry, matching the shipped ui-trajectory plugin:

  • lib/index.js — host half. inject = ['loader', 'webServer']; registers GET /dsh-blueprint/api/live plus POST .../preview and POST .../apply.
  • lib/client.js — browser half, a closure factory the shell's module loader executes. Registers one entry in the session-scoped conversation.view ring.

Plus cordis.patch.yml, declared as dsh.bundle.patch. A third-party plugin needs this to become a profile layer — dsh.client alone installs it as a plain dependency, and dsh plugin add says so:

warning: dsh-blueprint declares no dsh.bundle — installed as a plain
dependency, not a profile layer

The in-repo UI plugins do not need one, because the dsh-web-app bundle already inserts their rows. A package outside the repo inserts its own.

Verified against a real harness

On @deepseek-ai/dsh 0.1.0-rc.7 (client packages 0.1.0-rc.8), installed into a real web profile:

  • dsh plugin --profile web add appends the package to the profile's dsh.profile.bundles; --dump-config shows the composed row ui-blueprint.
  • dsh web serves /plugins/dsh-blueprint/client.js and lists the plugin in the browser boot roster beside ui-trajectory.
  • The live route returns the real tree — 140 entries on a stock web profile — with a credential audit showing nothing credential-shaped in the payload.
  • A foreign Host header, a cross-site fetch, and any non-GET method are each refused with 403.

DSH is a developer preview and its plugin API is still moving.

Build

pnpm --filter dsh-blueprint build
pnpm --filter dsh-blueprint test