dsh-custom-mode 1.11.3 → 1.11.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.i18n.yaml CHANGED
@@ -1,5 +1,5 @@
1
1
  # 双语配对一致性记录:两侧在「上次确认一致」时的 git blob 哈希。
2
2
  # 两份文档权威相同——改完任意一侧,请把另一侧也改掉,然后重新记录:
3
3
  # node tools/verify-translation-pairing.mjs --write
4
- README.md: fbadaafe0eb03a398ee41f8edcd4b76c3eba89fd
5
- README.zh.md: 476ff7b04b4a1c2392bc04c022ba6d14de191235
4
+ README.md: 79a4231e72072657c3698a668d5ff40ecf1a2907
5
+ README.zh.md: 0f1e7133e72997845638dfcff6da99938fa2cd7d
package/README.md CHANGED
@@ -59,7 +59,7 @@ One command installs everything — the settings-page plugin, and the preset it
59
59
  activation:
60
60
 
61
61
  ```sh
62
- dsh plugin --profile web add dsh-custom-mode@1.11.3 # pin the version to get this one for sure
62
+ dsh plugin --profile web add dsh-custom-mode@1.11.5 # pin the version to get this one for sure
63
63
  # A bare `add dsh-custom-mode` is subject to pnpm's release cooldown (`minimumReleaseAge`, 1 day by
64
64
  # default): for hours after a release it can silently install an OLDER version — measured: a bare
65
65
  # install 38 minutes after 1.3.0 shipped landed on 1.0.3. Check what you got with `npm ls
@@ -118,7 +118,7 @@ Electron shell**, so this plugin's page renders there unchanged. One install pat
118
118
  too and points you at the app, so the two agree instead of one silently working around the other.
119
119
  (A lab simulation of the profile shape can override it with `DSH_ALLOW_DESKTOP_PROFILE=1`.)
120
120
  **The app's own bundled CLI is the exception** — `<install>\resources\runtime\cli\bin\dsh.cmd` is allowed
121
- to operate on that profile (measured on 1.11.1: `add dsh-custom-mode@1.11.3` → `+ dsh-custom-mode 1.11.1`).
121
+ to operate on that profile (measured on 1.11.1: `add dsh-custom-mode@1.11.5` → `+ dsh-custom-mode 1.11.1`).
122
122
  It is a launcher, not a dsh feature: it starts Electron with `ELECTRON_RUN_AS_NODE=1` and runs the
123
123
  desktop-host CLI, so it is the app talking to its own profile rather than something driving from outside.
124
124
  - **Nothing else to do on the preset side**: `$DSH_HOME/.agent-presets/` is product data shared by the
@@ -430,7 +430,7 @@ installing again — your data is not touched:
430
430
 
431
431
  ```sh
432
432
  # the pinned form: what you ask for is what you get
433
- dsh plugin --profile web add dsh-custom-mode@1.11.3
433
+ dsh plugin --profile web add dsh-custom-mode@1.11.5
434
434
  # then restart the DSH process that serves the web profile
435
435
  ```
436
436
 
package/README.zh.md CHANGED
@@ -48,7 +48,7 @@ base mode / plugin switches / multi-assistant / multi-persona。
48
48
  一条命令装完——设置页插件,以及它在首次激活时自动播种的 preset:
49
49
 
50
50
  ```sh
51
- dsh plugin --profile web add dsh-custom-mode@1.11.3 # 钉版本才能确定拿到这一版
51
+ dsh plugin --profile web add dsh-custom-mode@1.11.5 # 钉版本才能确定拿到这一版
52
52
  # 不带版本号会受 pnpm 的发布冷却期影响(`minimumReleaseAge`,默认一天):发布后数小时内按名安装
53
53
  # 可能**静默装到旧版** —— 实测 1.3.0 发布 38 分钟后按名安装装到了 1.0.3。用 profile 里的
54
54
  # `npm ls dsh-custom-mode` 核对实际装到的版本,或像上面那样钉版本。
@@ -98,7 +98,7 @@ dsh `0.1.6-alpha.2` 起有插件管理页:**侧边栏 → 插件 → 添加插
98
98
  `cordis.patch.yml`。所以 `install.sh` 也**拒绝** `--profile desktop` 并指向应用内安装 —— 两边一致,
99
99
  而不是某一方偷偷绕过去。(只想在本机模拟 profile 形状时可设 `DSH_ALLOW_DESKTOP_PROFILE=1`。)
100
100
  **应用自带的捆绑 CLI 是例外**:`<安装目录>\resources\runtime\cli\bin\dsh.cmd` 可以操作那个 profile
101
- (1.11.1 实测:`add dsh-custom-mode@1.11.3` → `+ dsh-custom-mode 1.11.1`)。它是启动器而不是 dsh 的
101
+ (1.11.1 实测:`add dsh-custom-mode@1.11.5` → `+ dsh-custom-mode 1.11.1`)。它是启动器而不是 dsh 的
102
102
  新功能 —— 它用 `ELECTRON_RUN_AS_NODE=1` 起 Electron 去跑 desktop-host 的 CLI,所以那是**应用在跟自己的
103
103
  profile 说话**,不是从外面驱动它。
104
104
  - **预设那一侧不用做任何事**:`$DSH_HOME/.agent-presets/` 是桌面端与 CLI 共享的产品数据,
@@ -330,7 +330,7 @@ MIT
330
330
 
331
331
  ```sh
332
332
  # 钉版本的写法:要哪版就是哪版
333
- dsh plugin --profile web add dsh-custom-mode@1.11.3
333
+ dsh plugin --profile web add dsh-custom-mode@1.11.5
334
334
  # 然后重启为该 profile 提供服务的 DSH 进程
335
335
  ```
336
336
 
package/client.js CHANGED
@@ -67,7 +67,9 @@ try {
67
67
  "assistant.newPlaceholder": "新助手的名字(例如:写作助手)",
68
68
  "assistant.meta": "标识",
69
69
  "assistant.copyName": "「{name}」副本",
70
- "assistant.broken": "组成文件有问题",
70
+ "assistant.broken": "本机无法启动",
71
+ "assistant.brokenRows": "{count} 行在本机不可用",
72
+ "assistant.brokenHint": "平台无法挂载这个模式,所以它不会出现在新会话的选择器里。点下面的「按本线修复」只关掉那几行,其它选择不动。",
71
73
  "assistant.switchHint": "切换助手保留各自的未保存草稿;列表中的「未保存」标记即为此。",
72
74
  "btn.create": "新增助手",
73
75
  "btn.creating": "创建中…",
@@ -110,6 +112,7 @@ try {
110
112
  "aria.expand": "展开详情",
111
113
  "aria.collapse": "收起详情",
112
114
  "detail.id": "行 id",
115
+ "detail.hostReason": "平台原始信息:",
113
116
  "detail.shipped": "出厂状态",
114
117
  "detail.shippedOn": "启用",
115
118
  "detail.shippedOff": "关闭",
@@ -156,12 +159,12 @@ try {
156
159
  "api.savedPromptOnly": "已保存系统提示词(本机取不到基础模式的出厂组成,插件开关与基础模式未改动)。",
157
160
  "api.baseCompositionUnavailable": "本机取不到基础模式「{mode}」的出厂组成,无法改动插件开关或基础模式(系统提示词可以单独保存)。",
158
161
  "warn.approvalGateMissing": "审批闸门未启用:本机这个 DSH 版本没有 tools/pre-execute 事件,会话内改写系统提示词不会弹审批。见「详情」。",
159
- "warn.unresolvableRows": "有行在本机这条 DSH 线上无法解析:平台会把整个模式判为 broken,并从新会话的选择器里**静默丢弃**。点右侧的「按本线修复」即可(只关掉那几行,其它选择不动)。",
160
- "warn.presetBroken": "平台把这个模式判为 broken,它会**从新会话的选择器里消失** —— 而上面的「无法解析」检查解释不了为什么(多半是某一行依赖的服务/引擎没起来)。点右侧的「按本线修复」把那几行关掉即可。宿主给的原因见「详情」。",
161
- "warn.exclusiveRowsActive": "两条互斥的壳同时开着(它们注册同名工具):平台会把整个模式判为 broken,并从新会话的选择器里**静默丢弃**。把其中一条关掉即可 —— 在设置页保存一次也会自动避让。",
162
+ "warn.unresolvableRows": "有行在本机这条 DSH 线上跑不起来。平台会因此判整个模式为 broken,把它从新会话的选择器里丢掉(不报错)。点下方「按本线修复」只关掉那几行,其它选择不动。",
163
+ "warn.presetBroken": "平台判这个模式为 broken,它会从新会话的选择器里消失 —— 而上面的「无法解析」检查解释不了原因(多半是某一行依赖的服务没起来)。点下方「按本线修复」把那几行关掉;平台自己给的原因见下面那行。",
164
+ "warn.exclusiveRowsActive": "两条互斥的壳同时开着(它们注册同名工具),平台会判整个模式为 broken 并从新会话的选择器里丢掉。关掉其中一条即可;在设置页保存一次也会自动避让。",
162
165
  "warn.baseCompositionUnavailable": "取不到本机这条 DSH 线的出厂组成:基础模式与插件开关暂时不能改(系统提示词不受影响,照常可保存)。已尝试的途径写在宿主日志里。",
163
166
  "warn.approvalGateMissing.label": "审批闸门未启用",
164
- "warn.approvalGateMissing.hint": "这个 DSH 版本没有 tools/pre-execute 事件,会话内改写系统提示词**不会**弹审批。设置页不受影响;要恢复保护请升级 DSH,或把「custom_prompt 工具」那一行关掉。",
167
+ "warn.approvalGateMissing.hint": "这个 DSH 版本没有 tools/pre-execute 事件,会话内改写系统提示词不会弹审批。设置页不受影响;要恢复保护请升级 DSH,或把「custom_prompt 工具」那一行关掉。",
165
168
  "warn.personaOffWithPrompt": "「身份(系统提示词)」这一行是关的,所以 prompt.md 不会被注入 —— 你写的提示词现在不起作用。要么打开这一行,要么清空提示词。",
166
169
  "warn.toolOff": "「custom_prompt 工具」这一行是关的:会话里无法让 agent 改提示词,只能在本页改。",
167
170
  "warn.noDescription": "没有描述:新建会话的模式选择器里会显示成「暂无描述」。",
@@ -286,7 +289,9 @@ try {
286
289
  "assistant.newPlaceholder": "Name of the new assistant (e.g. Writing assistant)",
287
290
  "assistant.meta": "ID",
288
291
  "assistant.copyName": "{name} (copy)",
289
- "assistant.broken": "Composition problem",
292
+ "assistant.broken": "Will not start here",
293
+ "assistant.brokenRows": "{count} row(s) unusable here",
294
+ "assistant.brokenHint": "The platform cannot mount this mode, so it will not appear in the new-session picker. Click Fix for this line below to turn off just those rows.",
290
295
  "assistant.switchHint": "Switching assistants keeps each draft; the \"Unsaved\" marker in the list is exactly that.",
291
296
  "btn.create": "New assistant",
292
297
  "btn.creating": "Creating…",
@@ -329,6 +334,7 @@ try {
329
334
  "aria.expand": "Show details",
330
335
  "aria.collapse": "Hide details",
331
336
  "detail.id": "Row id",
337
+ "detail.hostReason": "Host message: ",
332
338
  "detail.shipped": "Shipped",
333
339
  "detail.shippedOn": "enabled",
334
340
  "detail.shippedOff": "disabled",
@@ -379,7 +385,7 @@ try {
379
385
  "warn.noDescription": "No description: the new-session mode picker will show it as \"no description yet\".",
380
386
  "warn.approvalGateMissing": "The approval gate is off: this DSH build has no tools/pre-execute event, so in-session prompt rewrites do not ask for approval. See the details.",
381
387
  "warn.unresolvableRows": "Some rows cannot be resolved on this DSH line: the platform marks the whole mode broken and silently drops it from the new-session picker. Click Fix for this line — it only turns those rows off and leaves your other choices alone.",
382
- "warn.presetBroken": "The platform marks this mode broken, so it **disappears from the new-session picker** — and the \"unresolvable\" check above cannot explain why (usually a row whose service or engine never started). Click Fix for this line to turn those rows off. The host's own reason is in Details.",
388
+ "warn.presetBroken": "The platform marks this mode broken, so it disappears from the new-session picker — and the \"unresolvable\" check above cannot explain why (usually a row whose service or engine never started). Click Fix for this line to turn those rows off. The host's own reason is in Details.",
383
389
  "warn.exclusiveRowsActive": "Both shells are on, and they register the same tool names: the platform marks the whole mode broken and silently drops it from the new-session picker. Turn one of them off — saving from the settings page also resolves it automatically.",
384
390
  "warn.approvalGateMissing.label": "Approval gate is off",
385
391
  "warn.approvalGateMissing.hint": "This DSH build has no tools/pre-execute event, so in-session prompt rewrites do NOT ask for approval. The settings page is unaffected; upgrade DSH or turn the custom_prompt tool row off to restore the gate.",
@@ -1657,14 +1663,29 @@ try {
1657
1663
  ),
1658
1664
  dirtyIds.has(item.id) ? react.createElement(A.Tag, { tone: "warning" }, t("msg.unsaved")) : null,
1659
1665
  typeof item.broken === "string" && item.broken !== ""
1660
- ? react.createElement(A.Tag, { tone: "danger" }, t("assistant.broken"))
1666
+ ? react.createElement(
1667
+ A.Tag,
1668
+ { tone: "danger", title: t("assistant.brokenHint") },
1669
+ Array.isArray(item.brokenRows) && item.brokenRows.length > 0
1670
+ ? fillPlaceholders(t("assistant.brokenRows"), { count: item.brokenRows.length })
1671
+ : t("assistant.broken"),
1672
+ )
1661
1673
  : null,
1662
1674
  ),
1663
1675
  ),
1664
1676
  ),
1665
1677
  dirtyIds.has(selected) ? react.createElement(A.Tag, { tone: "warning" }, t("msg.unsaved")) : null,
1666
1678
  typeof (assistants.find((item) => item.id === selected) || {}).broken === "string"
1667
- ? react.createElement(A.Tag, { tone: "danger" }, t("assistant.broken"))
1679
+ ? react.createElement(
1680
+ A.Tag,
1681
+ { tone: "danger", title: t("assistant.brokenHint") },
1682
+ (() => {
1683
+ const current = assistants.find((item) => item.id === selected) || {}
1684
+ return Array.isArray(current.brokenRows) && current.brokenRows.length > 0
1685
+ ? fillPlaceholders(t("assistant.brokenRows"), { count: current.brokenRows.length })
1686
+ : t("assistant.broken")
1687
+ })(),
1688
+ )
1668
1689
  : null,
1669
1690
  ),
1670
1691
  react.createElement(
@@ -2033,6 +2054,19 @@ try {
2033
2054
  "div",
2034
2055
  { key: code, className: "cpfe-warn-row" },
2035
2056
  react.createElement("p", { className: "cpfe-warn" }, "⚠ " + t("warn." + code)),
2057
+ // 平台自己给的那句话(`state.broken`,形如
2058
+ // `tool-workflow (@deepseek-ai/dsh-tool-workflow): waiting for workflowEngine`)。
2059
+ //
2060
+ // ★ 以前它只在 API 载荷里,**页面上根本不渲染** —— 而 `warn.presetBroken` 的文案却写着
2061
+ // 「宿主给的原因见「详情」」,那个「详情」里从来没有它。文本在说谎,用户按提示去找也找不到。
2062
+ // 现在把它原样印在告警下面:那是平台的原始信息、不是我们的行文,所以用等宽体单独成行。
2063
+ code === "presetBroken" && typeof draft.broken === "string" && draft.broken !== ""
2064
+ ? react.createElement(
2065
+ "p",
2066
+ { className: "cpfe-note cpfe-mono", title: draft.broken },
2067
+ t("detail.hostReason") + draft.broken,
2068
+ )
2069
+ : null,
2036
2070
  // 本线起不来的行可以一键修(只关掉那几行;用户创建它的那个版本可能早于播种改为派生的版本)。
2037
2071
  //
2038
2072
  // ★ 两个 code 都要给按钮:`presetBroken` 说的是"平台判它 broken,而『无法解析』解释不了"
package/index.mjs CHANGED
@@ -414,7 +414,12 @@ export function readState(rows, id, options = {}) {
414
414
  * @param {Array<object>} rows - the current roster.
415
415
  */
416
416
  export function readList(rows) {
417
- return { ok: true, assistants: assistantsFromRoster(rows), root: userPresetRoot(rows) }
417
+ // `brokenRows` 是给**页面**用的:只说「这个模式有问题」既看不出严重程度、也看不出修完会怎样。
418
+ // 宿主那条 `broken` 里点名了是哪几行,抠出来交给页面,标签就能写成「N 行在本机不可用」。
419
+ const list = assistantsFromRoster(rows).map((item) =>
420
+ typeof item.broken === 'string' ? { ...item, brokenRows: brokenRowIds(item.broken) } : item,
421
+ )
422
+ return { ok: true, assistants: list, root: userPresetRoot(rows) }
418
423
  }
419
424
 
420
425
  /**
package/locales.mjs CHANGED
@@ -27,7 +27,11 @@ export const zh = {
27
27
  'assistant.newPlaceholder': '新助手的名字(例如:写作助手)',
28
28
  'assistant.meta': '标识',
29
29
  'assistant.copyName': '「{name}」副本',
30
- 'assistant.broken': '组成文件有问题',
30
+ 'assistant.broken': '本机无法启动',
31
+ // 带上具体行数:只说「有问题」用户不知道有多严重,也不知道修完会怎样。
32
+ 'assistant.brokenRows': '{count} 行在本机不可用',
33
+ // 悬停时给出的完整解释(Tag 的 title)。
34
+ 'assistant.brokenHint': '平台无法挂载这个模式,所以它不会出现在新会话的选择器里。点下面的「按本线修复」只关掉那几行,其它选择不动。',
31
35
  'assistant.switchHint': '切换助手保留各自的未保存草稿;列表中的「未保存」标记即为此。',
32
36
  'btn.create': '新增助手',
33
37
  'btn.creating': '创建中…',
@@ -70,6 +74,7 @@ export const zh = {
70
74
  'aria.expand': '展开详情',
71
75
  'aria.collapse': '收起详情',
72
76
  'detail.id': '行 id',
77
+ 'detail.hostReason': '平台原始信息:',
73
78
  'detail.shipped': '出厂状态',
74
79
  'detail.shippedOn': '启用',
75
80
  'detail.shippedOff': '关闭',
@@ -116,12 +121,12 @@ export const zh = {
116
121
  'api.savedPromptOnly': '已保存系统提示词(本机取不到基础模式的出厂组成,插件开关与基础模式未改动)。',
117
122
  'api.baseCompositionUnavailable': '本机取不到基础模式「{mode}」的出厂组成,无法改动插件开关或基础模式(系统提示词可以单独保存)。',
118
123
  'warn.approvalGateMissing': '审批闸门未启用:本机这个 DSH 版本没有 tools/pre-execute 事件,会话内改写系统提示词不会弹审批。见「详情」。',
119
- 'warn.unresolvableRows': '有行在本机这条 DSH 线上无法解析:平台会把整个模式判为 broken,并从新会话的选择器里**静默丢弃**。点右侧的「按本线修复」即可(只关掉那几行,其它选择不动)。',
120
- 'warn.presetBroken': '平台把这个模式判为 broken,它会**从新会话的选择器里消失** —— 而上面的「无法解析」检查解释不了为什么(多半是某一行依赖的服务/引擎没起来)。点右侧的「按本线修复」把那几行关掉即可。宿主给的原因见「详情」。',
121
- 'warn.exclusiveRowsActive': '两条互斥的壳同时开着(它们注册同名工具):平台会把整个模式判为 broken,并从新会话的选择器里**静默丢弃**。把其中一条关掉即可 —— 在设置页保存一次也会自动避让。',
124
+ 'warn.unresolvableRows': '有行在本机这条 DSH 线上跑不起来。平台会因此判整个模式为 broken,把它从新会话的选择器里丢掉(不报错)。点下方「按本线修复」只关掉那几行,其它选择不动。',
125
+ 'warn.presetBroken': '平台判这个模式为 broken,它会从新会话的选择器里消失 —— 而上面的「无法解析」检查解释不了原因(多半是某一行依赖的服务没起来)。点下方「按本线修复」把那几行关掉;平台自己给的原因见下面那行。',
126
+ 'warn.exclusiveRowsActive': '两条互斥的壳同时开着(它们注册同名工具),平台会判整个模式为 broken 并从新会话的选择器里丢掉。关掉其中一条即可;在设置页保存一次也会自动避让。',
122
127
  'warn.baseCompositionUnavailable': '取不到本机这条 DSH 线的出厂组成:基础模式与插件开关暂时不能改(系统提示词不受影响,照常可保存)。已尝试的途径写在宿主日志里。',
123
128
  'warn.approvalGateMissing.label': '审批闸门未启用',
124
- 'warn.approvalGateMissing.hint': '这个 DSH 版本没有 tools/pre-execute 事件,会话内改写系统提示词**不会**弹审批。设置页不受影响;要恢复保护请升级 DSH,或把「custom_prompt 工具」那一行关掉。',
129
+ 'warn.approvalGateMissing.hint': '这个 DSH 版本没有 tools/pre-execute 事件,会话内改写系统提示词不会弹审批。设置页不受影响;要恢复保护请升级 DSH,或把「custom_prompt 工具」那一行关掉。',
125
130
  'warn.personaOffWithPrompt': '「身份(系统提示词)」这一行是关的,所以 prompt.md 不会被注入 —— 你写的提示词现在不起作用。要么打开这一行,要么清空提示词。',
126
131
  'warn.toolOff': '「custom_prompt 工具」这一行是关的:会话里无法让 agent 改提示词,只能在本页改。',
127
132
  'warn.noDescription': '没有描述:新建会话的模式选择器里会显示成「暂无描述」。',
@@ -264,7 +269,9 @@ export const en = {
264
269
  'assistant.newPlaceholder': 'Name of the new assistant (e.g. Writing assistant)',
265
270
  'assistant.meta': 'ID',
266
271
  'assistant.copyName': '{name} (copy)',
267
- 'assistant.broken': 'Composition problem',
272
+ 'assistant.broken': 'Will not start here',
273
+ 'assistant.brokenRows': '{count} row(s) unusable here',
274
+ 'assistant.brokenHint': 'The platform cannot mount this mode, so it will not appear in the new-session picker. Click Fix for this line below to turn off just those rows.',
268
275
  'assistant.switchHint': 'Switching assistants keeps each draft; the "Unsaved" marker in the list is exactly that.',
269
276
  'btn.create': 'New assistant',
270
277
  'btn.creating': 'Creating…',
@@ -307,6 +314,7 @@ export const en = {
307
314
  'aria.expand': 'Show details',
308
315
  'aria.collapse': 'Hide details',
309
316
  'detail.id': 'Row id',
317
+ 'detail.hostReason': 'Host message: ',
310
318
  'detail.shipped': 'Shipped',
311
319
  'detail.shippedOn': 'enabled',
312
320
  'detail.shippedOff': 'disabled',
@@ -357,7 +365,7 @@ export const en = {
357
365
  'warn.noDescription': 'No description: the new-session mode picker will show it as "no description yet".',
358
366
  'warn.approvalGateMissing': 'The approval gate is off: this DSH build has no tools/pre-execute event, so in-session prompt rewrites do not ask for approval. See the details.',
359
367
  'warn.unresolvableRows': 'Some rows cannot be resolved on this DSH line: the platform marks the whole mode broken and silently drops it from the new-session picker. Click Fix for this line — it only turns those rows off and leaves your other choices alone.',
360
- 'warn.presetBroken': 'The platform marks this mode broken, so it **disappears from the new-session picker** — and the "unresolvable" check above cannot explain why (usually a row whose service or engine never started). Click Fix for this line to turn those rows off. The host\'s own reason is in Details.',
368
+ 'warn.presetBroken': 'The platform marks this mode broken, so it disappears from the new-session picker — and the "unresolvable" check above cannot explain why (usually a row whose service or engine never started). Click Fix for this line to turn those rows off. The host\'s own reason is in Details.',
361
369
  'warn.exclusiveRowsActive': 'Both shells are on, and they register the same tool names: the platform marks the whole mode broken and silently drops it from the new-session picker. Turn one of them off — saving from the settings page also resolves it automatically.',
362
370
  'warn.approvalGateMissing.label': 'Approval gate is off',
363
371
  'warn.approvalGateMissing.hint': 'This DSH build has no tools/pre-execute event, so in-session prompt rewrites do NOT ask for approval. The settings page is unaffected; upgrade DSH or turn the custom_prompt tool row off to restore the gate.',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-custom-mode",
3
- "version": "1.11.3",
3
+ "version": "1.11.5",
4
4
  "description": "Custom modes and custom prompts for DeepSeek Harness (dsh): edit a mode's system prompt on the settings page (it takes effect on the next model step), pick its base mode, switch plugin rows one by one, and keep several assistants side by side — coding, chat or roleplay (RP) personas (multi-mode / multi-agent).",
5
5
  "license": "MIT",
6
6
  "type": "module",