dsh-web
zhu1090093659/dsh-webDeepSeek Harness(DSH)Web 插件聚合生态包 · 一切皆插件,创意工坊分发(dsh-market.com)
按工作区开关插件、MCP 服务器与 Skills:工作区行菜单里的弹窗写入选择,宿主机在该工作区自己的 Agent 作用域内应用——关闭的 Skill 从模型目录中消失,MCP 服务器被拒绝其 mcp__<server>__ 工具,插件被拒绝其条目声明的工具名。
Per-workspace activation control for DeepSeek Harness: each workspace decides which plugins, MCP servers, and skills its sessions may use, and a dialog on the workspace row edits that decision.
English | 中文
Two halves, one plugin:
index.js, built to lib/index.js) reads the per-workspace
configuration when an Agent is created and applies it to that Agent's own
Cordis scope, so two Agents in two workspaces inside one harness process see
different capabilities:
mcp__<serverName>__* tool denied in
that scope;src/client/, built to lib/client.js) adds one row to a
workspace's ... menu. It opens a dialog listing what the running
composition offers under each category, with a switch per capability.A workspace with no entry inherits the deployment's composition unchanged, so the plugin changes nothing until a workspace is configured.
Two sources describe one workspace, in increasing precedence:
<DSH_HOME>/workspace-switch.json, whose workspaces map is keyed by
workspace directory;<workspace>/.dsh/workspace-switch.json, which replaces the shared entry
for that workspace when it exists.{
"workspaces": {
"E:\\my_project\\godot-game": {
"plugins": { "mcp-godot-ai": { "enabled": false, "tools": ["mcp__godot-ai__run"] } },
"mcp": { "godot-ai": { "enabled": false } },
"skills": { "godot-scene-authoring": { "enabled": false } }
}
}
}
enabled: false switches a capability off for that workspace; an absent entry
means enabled. A plugin entry also declares the tool names the plugin
registers — the gate denies tools by name, so a plugin without tools has
nothing to deny.
The dialog writes the document that currently answers for the workspace: the project file while one exists, the shared store otherwise. Output is published through a temp-file rename, so a reader never sees a half-written document.
The plugin is a DSH bundle: add it to a profile and select it.
dsh plugin add link:/path/to/dsh_workspace_switch
then add dsh-workspace-switch to the profile's dsh.profile.bundles. A new
bundle row loads at the next harness start.
The browser half is a DSH client bundle and must be built; the repository
toolchain is required (the plugin vendors its copy of the client build preset at
scripts/tsdown.client.ts, which resolves the harness sources from the checkout
it sits in).
# from a deepseek-harness checkout
pnpm exec tsdown --config dsh_workspace_switch/tsdown.config.ts # or, inside the plugin: pnpm build
pnpm exec tsc -p dsh_workspace_switch/tsconfig.typecheck.json # typecheck the browser half
node --test "tests/**/*.test.js" # unit tests
lib/ is committed. The package's main and ./client both point into it,
and a clone has neither the harness sources nor a build toolchain, so a
build-from-source install (dsh plugin add github:…) would otherwise install a
package with no entry points. Commit the rebuilt files with any change that
alters them.
A standalone clone cannot run the build: the vendored preset imports the harness
sources (../../packages/…, ../../scripts/…) that only exist inside a
checkout. Build inside the checkout, then commit lib/ here.
tools.MIT.