dsh-custom-mode 1.11.2 → 1.11.4
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 +2 -2
- package/README.md +3 -3
- package/README.zh.md +3 -3
- package/assistants.mjs +17 -1
- package/client.js +43 -9
- package/index.mjs +6 -1
- package/locales.mjs +15 -7
- package/package.json +1 -1
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:
|
|
5
|
-
README.zh.md:
|
|
4
|
+
README.md: d8f40717eedc2d2270be9f6982b4f6d6f0ddd0ff
|
|
5
|
+
README.zh.md: a63ba3cef3b184b4c8d7cbb083aa4607d4dd8cdb
|
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.
|
|
62
|
+
dsh plugin --profile web add dsh-custom-mode@1.11.4 # 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.
|
|
121
|
+
to operate on that profile (measured on 1.11.1: `add dsh-custom-mode@1.11.4` → `+ 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.
|
|
433
|
+
dsh plugin --profile web add dsh-custom-mode@1.11.4
|
|
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.
|
|
51
|
+
dsh plugin --profile web add dsh-custom-mode@1.11.4 # 钉版本才能确定拿到这一版
|
|
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.
|
|
101
|
+
(1.11.1 实测:`add dsh-custom-mode@1.11.4` → `+ 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.
|
|
333
|
+
dsh plugin --profile web add dsh-custom-mode@1.11.4
|
|
334
334
|
# 然后重启为该 profile 提供服务的 DSH 进程
|
|
335
335
|
```
|
|
336
336
|
|
package/assistants.mjs
CHANGED
|
@@ -34,7 +34,7 @@ import { dshHome, PRESET_DIR } from './paths.mjs'
|
|
|
34
34
|
import { readPresetMeta, writePresetMeta, presetMetaPath } from './meta.mjs'
|
|
35
35
|
import { writeAtomic } from './atomic.mjs'
|
|
36
36
|
import { unresolvableRows } from './composition.mjs'
|
|
37
|
-
import { seedPreset, seedPresetWithLog } from './seed.mjs'
|
|
37
|
+
import { seedPreset, seedPresetWithLog, dropShippedDescription } from './seed.mjs'
|
|
38
38
|
|
|
39
39
|
/**
|
|
40
40
|
* Preset ids a directory may use, mirrored from
|
|
@@ -326,6 +326,22 @@ export function seedOnActivation({ root, templateDir, composition, log = console
|
|
|
326
326
|
for (const error of result.errors) log(`custom-mode: 补全 ${dir} 失败 —— ${error}`)
|
|
327
327
|
}
|
|
328
328
|
|
|
329
|
+
// 描述迁移:清掉我们早年播种的那条中英拼接(详见 seed.mjs 的 dropShippedDescription)。
|
|
330
|
+
//
|
|
331
|
+
// ★ 必须放在**这里**,不能只放在 `seedPresetWithLog` 里:下面第 348 行 `isSeeded(root)` 一旦为真就直接
|
|
332
|
+
// return,那条路永远不会走到 —— 而"已经装过插件"恰恰是这个迁移唯一要处理的场景(实测:装到 1.11.2
|
|
333
|
+
// 之后描述仍是旧的)。放在这个循环里,每次激活都会检查,且 `dropShippedDescription` 只认**逐字**
|
|
334
|
+
// 等于我们自己写过的那些串,用户自己写的描述一个字都不会动。
|
|
335
|
+
for (const dir of existing) {
|
|
336
|
+
try {
|
|
337
|
+
if (dropShippedDescription(dir).migrated === true) {
|
|
338
|
+
info(`custom-mode: 已清空 ${dir} 的描述 —— 它还是我们早年播种的那条中英拼接,壳无法按界面语言本地化产品数据`)
|
|
339
|
+
}
|
|
340
|
+
} catch (error) {
|
|
341
|
+
log(`custom-mode: 描述迁移失败(已忽略)—— ${describe(error)}`)
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
|
|
329
345
|
// 启动告警:组成文件里有本机这条线解析不到的行时,平台会把整个预设判为 broken 并从选择器里**静默丢弃**。
|
|
330
346
|
// 以前这件事只在设置页可见 —— 用户从不打开设置页就完全无感知(外部评审实测)。这里至少在宿主日志里喊一声。
|
|
331
347
|
for (const dir of [...existing, join(root, LEGACY_ID)]) {
|
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
|
|
160
|
-
"warn.presetBroken": "
|
|
161
|
-
"warn.exclusiveRowsActive": "
|
|
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
|
|
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": "
|
|
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
|
|
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(
|
|
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(
|
|
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
|
-
|
|
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
|
|
120
|
-
'warn.presetBroken': '
|
|
121
|
-
'warn.exclusiveRowsActive': '
|
|
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
|
|
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': '
|
|
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
|
|
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
|
+
"version": "1.11.4",
|
|
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",
|