全部插件

DSH / BUNDLE / CLIENT-UI

dsh-modes

v0.9.1xiaohai-78 / dsh-modesc6d00b9da8

可安装组合包UI 与客户端插件社区 · Topic 自动分析Web UI

概览

dsh-modes

Mode manager for DeepSeek Harness (dsh): switch what each agent mode can do, edit its system prompt and tool descriptions, manage skills per mode with versions and imports from Codex and Claude Code, create modes from templates, and merge built-in updates after a dsh upgrade.

README / ZH

插件文档

目录摘要

Mode manager for DeepSeek Harness (dsh): switch what each agent mode can do, edit its system prompt and tool descriptions, manage skills per mode with versions and imports from Codex and Claude Code, create modes from templates, and merge built-in updates after a dsh upgrade.

dsh.pub 核对固定版本的组合包契约、运行时事实与分发语义;完整 README 请查看源仓库。

在 GitHub 阅读完整 README

LIMITATIONS

已知限制

- **同步依赖记录**:同步内置更新依赖上次保存时记下的内置插件列表。用 0.5.0 之前的版本改过的模式没有这份记录,第一次同步时,和官方不一致的地方都会按你的修改保留;之后每次保存都会补上记录。 - **为其他工具写的技能**:DSH 只读取 `name`、`description`、`whenToUse`、`metadata`、`disable-model-invocation` 和 `user-invocable`;其他字段(比如 Claude Code 的 `allowed-tools`、`model`)不起作用。依赖其他工具自带功能的技能(比如 Codex 的生图)可以导入,但在 DSH 里可能用不了。 - **导入扫描的位置**:`$CODEX_HOME/skills`(默认 `~/.codex/skills`)、`$CLAUDE_CONFIG_DIR/skills`(默认 `~/.claude/skills`),以及 `~/.claude/plugins` 往下六层以内的 `skills/<名字>/SKILL.md`;同一个插件缓存了多个版本时,只列最近改动的那份。项目里的技能(比如 `<项目>/.claude/skills`)请用「文件夹」导入。单文件形式的 `<名字>.md` 技能不会列出。 - **Windows 上覆盖**:文件是逐个覆盖的,中途出错会留下新旧混合的文件。可以在这个技能的版本列表里恢复导入前自动保存的版本。 - **刚写入的技能**:页面会等 0.8 秒让 DSH 的文件监听发现它,再读取列表。如果新技能仍显示「这个模式找不到它」,点「刷新」。 - **即时生效的范围**:只作用于提示词的开头和结尾两段文字;「完整提示词」「运行时上下文」两项仍然只对新会话生效。 - **对话改提示词的范围**:`mode_prompt` 只读写提示词的开头这段。 - **列出的技能**:页面列出的是不指定工作区时各模式能找到的技能:用户级、自定义目录和包里自带的技能。项目里的技能(`<项目>/.dsh/skills`、`<项目>/.agents/skills`)取决于会话的工作区,不会列出。 - **在所有模式里关闭的技能**:这需要每个模式里都有本插件的一行,所以每个内置模式都会被写入一份 profile 覆盖。 - **和其他技能插件的先后**:这一行的条目排序值是 -1000。如果别的插件在同一作用域里注册了排序值更小的条目,它会胜过本插件。 - **被隐藏技能的信息**:一个技能在所有模式里都被隐藏后,页面显示的是它最后一次可见时的描述和文件位置。 - **更新检查**:需要能连上仓库。连不上时页脚会显示检查失败。镜像可能比 npm 慢,最新版本可能晚一点才出现。 - **升级后的版本记录**:在页面里升级后,依赖在 `package.json` 里记成压缩包地址,而不是版本号。这不影响使用和以后的升级。 - **新版本启动失败**:DSH 不会继续运行旧版本。请在终端运行横幅里给出的退回命令。 - **代码模式(PTC)**:暂不支持工具描述。代码模式里,模型读到的工具描述是生成出来的 SDK 文本里的注释,修改不会改写它。 - **会话启动时才注册的工具**:列表来自每个模式注册的工具。只在会话启动时才注册的工具(例如 `subagent`),要等这个模式的会话发出第一次请求后才会出现。 - **会复述工具描述的插件**:把描述抄进提示词的插件(例如 tool-activator 的 `<available_tools>` 列表)仍然显示内置原文;发给模型的工具定义带的是你的修改。 - **手工修改文件**:插件读取 `tool-descriptions.json` 后会缓存,只有在页面保存后才会重新读取。手工改过这个文件后请重启 dsh。文件损坏时会报错,不会被覆盖。 - **会话统计**:删除前统计已保存的会话要读取每个会话的记录,会话很多时最多统计 8 秒,没统计完会显示「至少 N 个」。 - **权限**:写操作只依赖 dsh 自带的登录校验。 <details> <summary><b>开发者参考:工作原理</b></summary> ### 组成 | 文件 | 作用 | |---|---| | `index.js` | 宿主端插件。提供 `POST /api/dsh-modes`,以及给另外两个模块用的 `dshModes` 服务。修改内置模式时,用 `configEditor.edit()` 在 profile 里写入该模式行的覆盖;插件的显示信息来自 `pluginInventory.list()` | | `container.js` | 自定义模式容器:配置里保存 `presets` 列表,并对每一项调用 `agentPresets.register()` | | `rebase.js` | 同步内置更新用的三方合并:以上次保存时的内置插件列表为基准,把你的修改合并到最新的内置列表上。冲突时保留你的值 | | `tool-descriptions.js` | 应用工具描述修改的行:放进模式里,在 `system-prompt/assemble` 的监听链最前面,替换每次请求的工具列表里被修改工具的 `description` | | `tool-edit.js` | 工具描述修改的纯计划逻辑:校验、带冲突检查的批量修改、恢复、历史,以及每个模式的工具列表 | | `skill-policy.js` | 技能设置行:放进模式里,在模式的作用域注册一个技能来源;对每个被关闭的技能返回一个谁都不能调用的条目,对每个固定版本的技能返回保存的版本,排序值 -1000 | | `skill-store.js` | 技能设置的纯函数:把「所有模式」的设置并入单个模式、批量修改、版本编号、哪些模式需要这一行、读取 SKILL.md 的 frontmatter | | `skill-files.js` | 把技能复制成一个版本、把版本恢复到当前文件,以及透过链接写文件 | | `skill-import.js` | 在 Codex、Claude Code 和指定文件夹里找技能文件夹;读取候选技能的 frontmatter;给技能文件夹算指纹、复制、替换;生成新技能的 `SKILL.md` | | `update.js` | 不依赖 DSH 服务的版本检查和升级辅助函数:版本比较、profile 怎样依赖这个包、要询问的仓库,以及对仓库返回的压缩包地址的校验 | | `state.js` | profile 目录下的 `.dsh-modes/state.json`(同步基准,以及自定义模式基于哪个内置模式、用了哪个模板)、`history.json`(提示词历史)、`tool-descriptions.json`(工具描述修改及其历史)、`settings.json`(更新检查的开关,以及升级给新版本留下的记录)和 `skills.json`(技能设置、每个技能最后一次可见时的信息、版本索引;版本的文件在 `skill-versions/<技能>/<版本>/`)。写入时先写临时文件再替换 | | `install-guard.js` | 让改过的内置模式在卸载后仍能加载:本插件模块的每一行保存时都带一个 `!!js` 的 `disabled` 条件,找不到 `dsh-modes` 包时为真;即时生效的身份行后面再放一行同样提示词的官方身份行,条件相反。自建模式不加条件,因为它们会随插件一起消失 | | `live-persona.js` | 即时生效用的身份行:替换模式里的 `@deepseek-ai/dsh-persona` 行,注册同样的两个提示词分段,每次组装提示词时读取最新保存的文字 | | `prompt-tool.js` | `mode_prompt` 工具:作为一行插件放进模式里,所以只有这个模式的会话能看到它;写入前通过 `tools/pre-execute` 要求用户审批 | | `client.js` | Web 设置页(中英文) | | `cordis.patch.yml` | 插入 `index.js` 和 `container.js` 两个宿主端插件行 | `/api/dsh-modes` 的动作: - **读取**:`list`、`read`、`prompt`、`history`、`usage`、`tools`、`updateStatus`、`upgradeStatus`、`skills`、`readSkillFile`、`readSkillVersion`; - **技能**:`setSkillModes`(一批 `{ preset, skill, enabled?, pin? }`)、`setSkillGlobal`、`saveSkillVersion`、`restoreSkillVersion`、`deleteSkillVersion`、`writeSkillFile`; - **插件行**:`toggle`、`followPlatform`、`applyRows`、`resetRow`; - **整个模式**:`reset`、`sync`、`repair`、`create`、`update`、`remove`、`setDefault`; - **提示词**:`setPrompt`、`setLive`、`setPromptTool`; - **更新**:`setUpd