DeepSeek Harness 插件

dsh-in-convo-mode-change

Switch the agent preset (conversation mode: Standard / Code / Minimal / Creator) of a session mid-conversation, straight from the session header.(英文原文)

跳到安装方式

来源信息

GitHub 仓库
jiangr100/dsh-in-convo-mode-change
最近更新
2026年8月16日
分类
自动化与任务
GitHub stars
0
载体类型
plugin
目录证据
上游声明已找到 dsh.bundle
证据路径
package.json#dsh.bundle
核对版本
0.1.0-rc.8
上游核对日期
2026-08-20

该证据由上游目录提供。本站没有安装、运行或安全审核这个插件。

安装

默认先复制一段 Prompt,让 Agent 读 GitHub 仓库和源码;需要自己装时再切到命令。

复制这段 Prompt,发给 DSH、Codex 或其他 Agent,让它先读 GitHub 仓库和源码。

请先不要安装或执行任何命令。阅读这个插件的 GitHub 仓库、README 和关键源码,然后用清楚、直接的方式回答以下问题,帮助我判断它是否适合我的需求:

1. 这个插件是什么,解决什么问题;
2. 适合哪些用户和典型使用场景;
3. 安装后如何使用,并给出一个最小使用示例;
4. 有哪些已知限制,以及隐私、安全、兼容性或维护风险;
5. 给出“推荐 / 有条件推荐 / 不推荐”的明确建议和理由。

请区分仓库明确说明、根据源码推断和未知信息。证据不足时请明确说明,不要猜测或照抄 README。

GitHub:https://github.com/jiangr100/dsh-in-convo-mode-change
插件名:dsh-in-convo-mode-change
作者:jiangr100

检查来源文件

安装前先看这个插件目录里的 README 和其他文件。

文件资源管理器3 个文件
README.md来源说明 · 只读预览

dsh-in-convo-mode-change

Switch the agent preset of a conversation mid-session in the DeepSeek Harness web UI. The presets are the "conversation modes" shipped with the harness — Standard mode, Code mode (PTC), Minimal mode, and Creator mode, plus any custom presets you have authored.

By default the session header's preset icon is a read-only label: a session's composition is fixed when it starts, and the built-in picker only exists on the new-session hero screen. This plugin turns the header icon into a real mode switcher that works on a conversation that has already started.

How it works

  • Client half (lib/client.js) replaces the built-in agent-preset cell

in conversation.session.header.actions with a menu button. Picking a mode asks for confirmation, then POSTs { sessionId, agentPreset } to the host route.

  • Host half (lib/index.js) registers the POST /change-convo-mode/switch

route on the web server. It uses the host's own agentPresets.recompose() — the same machinery the built-in blank-session picker uses — without the "no turn has ever run" restriction, and records the switch in the session log as an agent-preset/selected event so the transcript stays honest.

  • Picking is disabled while the session is running a turn; the host refuses

anyway (defense in depth), because re-parenting the agent's scope chain mid-call could strand an in-flight tool invocation.

Caveats

Switching modes mid-conversation is deliberately not offered by the host, and this plugin bypasses that gate on purpose:

  • The switch applies from the next turn. The current transcript is

untouched, but tool calls made under the previous mode may render differently in the chat afterwards, because the UI resolves tool views through the session's current preset.

  • Don't switch while a turn is running — the menu is disabled during a run.

Install

From a local checkout:

dsh plugin --profile web add /path/to/dsh-in-convo-mode-change

Or straight from GitHub (the dsh.bundle.patch manifest field makes the dependency join the profile's plugin layers automatically):

dsh plugin --profile web add github:jiangr100/dsh-in-convo-mode-change

Then restart the web server (stop the dsh web process and run dsh web again) so the loader picks up the new plugin row and the client bundle.

After restart, the header of any conversation shows the mode switcher where the read-only preset label used to be.

Uninstall

dsh plugin --profile web remove dsh-in-convo-mode-change

and restart dsh web. Sessions that already switched modes keep running on the preset they switched to.

Development notes

  • The client bundle is a hand-written module-loader bundle (no build step),

following the same pattern as dsh-rewind.

  • The host row injects webServer, agentPresets, and agents; it imports

error classes from @deepseek-ai/dsh-agent-presets, resolved by the harness loader at mount time.

  • The client replaces the built-in label by registering the SAME id

(agent-preset) in conversation.session.header.actions at a lower priority (the built-in sits at the default 0). The slots registry keys list cells by (id, priority): a duplicate id at the same priority throws and fails the whole plugin entry at load; the lowest priority wins the cell. test/slots.test.mjs drives the real SlotCore to lock this in. Do not remove the priority: -10 option.