dsh-custom-mode 1.12.1 → 1.13.0

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: 76fa2912ffb915b664b12346c9b1b2d5a9ca7637
5
- README.zh.md: cba5304f70adb125af94b2bd9f24b8b73af50fd8
4
+ README.md: 5502aa0133d2173b1bc0f9720d5844027bec74b8
5
+ README.zh.md: b53d01b732e0d8e48e0a7a959b80dd4c720b814a
package/README.md CHANGED
@@ -37,16 +37,18 @@ range, but they no longer get a CI leg of their own.
37
37
 
38
38
  The four official modes (`standard` / `ptc` / `minimal` / `cordis`) are untouched.
39
39
 
40
- | | |
41
- | --- | --- |
42
- | ![Mode name and base mode](https://raw.githubusercontent.com/BOWLUNA/dsh-custom-mode/main/docs/images/01-mode-switch.png) | ![Plugin switches](https://raw.githubusercontent.com/BOWLUNA/dsh-custom-mode/main/docs/images/02-plugin-switches.png) |
43
- | ![System prompt](https://raw.githubusercontent.com/BOWLUNA/dsh-custom-mode/main/docs/images/03-system-prompt.png) | ![Mode picker](https://raw.githubusercontent.com/BOWLUNA/dsh-custom-mode/main/docs/images/04-preset-picker.png) |
40
+ <p align="center">
41
+ <img src="https://raw.githubusercontent.com/BOWLUNA/dsh-custom-mode/main/docs/images/01-mode-switch.png" width="360" alt="Base mode and plugin switches">
42
+ <img src="https://raw.githubusercontent.com/BOWLUNA/dsh-custom-mode/main/docs/images/02-plugin-switches.png" width="360" alt="Plugin switches"><br>
43
+ <img src="https://raw.githubusercontent.com/BOWLUNA/dsh-custom-mode/main/docs/images/03-system-prompt.png" width="360" alt="System prompt">
44
+ <img src="https://raw.githubusercontent.com/BOWLUNA/dsh-custom-mode/main/docs/images/04-preset-picker.png" width="360" alt="Mode picker">
45
+ </p>
44
46
 
45
- The assistant manager, cropped to its own section. All five images are English, **all exactly 800x800**, and
46
- shot on a throwaway `DSH_HOME` with no sessions by `tools/screenshots/shoot-fresh.mjs` (the rendered page
47
- is what `tools/browser-verify.mjs` checks):
47
+ <p align="center">
48
+ <img src="https://raw.githubusercontent.com/BOWLUNA/dsh-custom-mode/main/docs/images/05-assistant-manager.png" width="360" alt="Assistants">
49
+ </p>
48
50
 
49
- ![Assistant manager](https://raw.githubusercontent.com/BOWLUNA/dsh-custom-mode/main/docs/images/05-assistant-manager.png)
51
+ The four views above are one 2×2 set. The assistant manager sits on its own, centered. Every file is English and exactly 800×800, shot on a throwaway `DSH_HOME` with no sessions.
50
52
 
51
53
  ## Install
52
54
 
@@ -54,7 +56,7 @@ One command installs everything — the settings-page plugin, and the preset it
54
56
  activation:
55
57
 
56
58
  ```sh
57
- dsh plugin --profile web add dsh-custom-mode@1.12.1 # pin the version to get this one for sure
59
+ dsh plugin --profile web add dsh-custom-mode@1.13.0 # pin the version to get this one for sure
58
60
  # A bare `add dsh-custom-mode` is subject to pnpm's release cooldown (`minimumReleaseAge`, 1 day by
59
61
  # default): for hours after a release it can silently install an OLDER version — measured: a bare
60
62
  # install 38 minutes after 1.3.0 shipped landed on 1.0.3. Check what you got with `npm ls
@@ -394,7 +396,7 @@ installing again — your data is not touched:
394
396
 
395
397
  ```sh
396
398
  # the pinned form: what you ask for is what you get
397
- dsh plugin --profile web add dsh-custom-mode@1.12.1
399
+ dsh plugin --profile web add dsh-custom-mode@1.13.0
398
400
  # then restart the DSH process that serves the web profile
399
401
  ```
400
402
 
package/README.zh.md CHANGED
@@ -31,22 +31,25 @@ base mode / plugin switches / multi-assistant / multi-persona。
31
31
 
32
32
  官方四个模式(`standard` / `ptc` / `minimal` / `cordis`)不受影响。
33
33
 
34
- | | |
35
- | --- | --- |
36
- | ![模式名称与基础模式](https://raw.githubusercontent.com/BOWLUNA/dsh-custom-mode/main/docs/images/01-mode-switch.png) | ![插件开关](https://raw.githubusercontent.com/BOWLUNA/dsh-custom-mode/main/docs/images/02-plugin-switches.png) |
37
- | ![系统提示词](https://raw.githubusercontent.com/BOWLUNA/dsh-custom-mode/main/docs/images/03-system-prompt.png) | ![模式选择器](https://raw.githubusercontent.com/BOWLUNA/dsh-custom-mode/main/docs/images/04-preset-picker.png) |
34
+ <p align="center">
35
+ <img src="https://raw.githubusercontent.com/BOWLUNA/dsh-custom-mode/main/docs/images/01-mode-switch.png" width="360" alt="基础模式与插件开关">
36
+ <img src="https://raw.githubusercontent.com/BOWLUNA/dsh-custom-mode/main/docs/images/02-plugin-switches.png" width="360" alt="插件开关"><br>
37
+ <img src="https://raw.githubusercontent.com/BOWLUNA/dsh-custom-mode/main/docs/images/03-system-prompt.png" width="360" alt="系统提示词">
38
+ <img src="https://raw.githubusercontent.com/BOWLUNA/dsh-custom-mode/main/docs/images/04-preset-picker.png" width="360" alt="模式选择器">
39
+ </p>
38
40
 
39
- 多助手管理器(裁到它自己那一段)。五张图都是英文、**统一 800x800**,由一个**没有会话记录的**一次性
40
- `DSH_HOME` 拍出,脚本是 `tools/screenshots/shoot-fresh.mjs`(渲染后的页面由 `tools/browser-verify.mjs` 校验):
41
+ <p align="center">
42
+ <img src="https://raw.githubusercontent.com/BOWLUNA/dsh-custom-mode/main/docs/images/05-assistant-manager.png" width="360" alt="助手">
43
+ </p>
41
44
 
42
- ![助手管理器](https://raw.githubusercontent.com/BOWLUNA/dsh-custom-mode/main/docs/images/05-assistant-manager.png)
45
+ 上面四张是一组 2×2。助手管理器单独居中。五张都是英文,文件都是 800×800,用一个没有会话记录的一次性 `DSH_HOME` 拍出。
43
46
 
44
47
  ## 安装
45
48
 
46
49
  一条命令装完——设置页插件,以及它在首次激活时自动播种的 preset:
47
50
 
48
51
  ```sh
49
- dsh plugin --profile web add dsh-custom-mode@1.12.1 # 钉版本才能确定拿到这一版
52
+ dsh plugin --profile web add dsh-custom-mode@1.13.0 # 钉版本才能确定拿到这一版
50
53
  # 不带版本号会受 pnpm 的发布冷却期影响(`minimumReleaseAge`,默认一天):发布后数小时内按名安装
51
54
  # 可能**静默装到旧版** —— 实测 1.3.0 发布 38 分钟后按名安装装到了 1.0.3。用 profile 里的
52
55
  # `npm ls dsh-custom-mode` 核对实际装到的版本,或像上面那样钉版本。
@@ -65,7 +68,7 @@ dsh `0.1.6-alpha.2` 起有插件管理页:**侧边栏 → 插件 → 添加插
65
68
 
66
69
  | 输入 | 填什么 | 说明 |
67
70
  | --- | --- | --- |
68
- | **包名** | `dsh-custom-mode` | 受 pnpm 发布冷却期影响,可能装到旧版。要这一版请钉 `@1.12.1` |
71
+ | **包名** | `dsh-custom-mode` | 受 pnpm 发布冷却期影响,可能装到旧版。要这一版请钉 `@1.13.0` |
69
72
  | **GitHub 仓库地址** | `https://github.com/BOWLUNA/dsh-custom-mode` | 指向**仓库根**即可 |
70
73
  | **本地插件目录** | `<你 clone 的路径>` | 就是仓库根 —— 仓库根**本身**就是发布包 |
71
74
 
@@ -297,7 +300,7 @@ MIT
297
300
 
298
301
  ```sh
299
302
  # 钉版本的写法:要哪版就是哪版
300
- dsh plugin --profile web add dsh-custom-mode@1.12.1
303
+ dsh plugin --profile web add dsh-custom-mode@1.13.0
301
304
  # 然后重启为该 profile 提供服务的 DSH 进程
302
305
  ```
303
306
 
package/client.js CHANGED
@@ -166,7 +166,7 @@ try {
166
166
  "history.label": "改动历史",
167
167
  "history.pick": "选择要载入的版本…",
168
168
  "history.load": "载入这一版",
169
- "history.hint": "每次保存、会话内工具改动或手工编辑都会在此留一版;载入只改草稿,保存前不落盘。",
169
+ "history.hint": "载入只改草稿,保存前不会写入。",
170
170
  "history.by.settings": "设置页保存",
171
171
  "history.by.external": "会话内/手工改动",
172
172
  "msg.loadFailed": "载入这一版失败",
@@ -181,20 +181,20 @@ try {
181
181
  "delete.close": "关闭",
182
182
  "delete.plainConfirm": "确定永久删除「{name}」吗?该操作无法撤销。",
183
183
  "name.heading": "模式名称",
184
- "name.hint": "仅影响显示名(模式选择器与助手列表);内部标识与已有会话不变,新建会话后生效。",
184
+ "name.hint": "显示在模式菜单里。内部标识不会变。",
185
185
  "name.placeholder": "自定义模式",
186
186
  "name.descriptionPlaceholder": "模式描述(显示在模式选择器里,可留空)",
187
187
  "mode.heading": "基础模式",
188
- "mode.hint": "基础模式只决定有哪些行、有哪些工具。本模式的身份始终用这一页的提示词,不继承基础模式的提示语。保存后新建会话生效,无需重启。",
188
+ "mode.hint": "选一套官方工具当底子。提示词仍以本页为准。",
189
189
  "rows.heading": "插件开关",
190
190
  "rows.filterPlaceholder": "筛选行(名称或 id)",
191
- "cap.heading": "能力",
192
- "cap.expand": "展开能力",
193
- "cap.collapse": "收起能力",
194
- "cap.hint": "基础模式决定有哪些工具。开关逐行生效。这两项从下一次新建会话开始。",
195
- "rows.hint": "逐行控制本模式挂载的插件。未改动的行保持官方默认(含平台判断);手动设置后以手动值为准。",
191
+ "cap.heading": "工具",
192
+ "cap.expand": "显示工具",
193
+ "cap.collapse": "隐藏工具",
194
+ "cap.hint": "不改的话,助手继续用现在这套工具。",
195
+ "rows.hint": "关掉某一行,这个助手就不会用它。",
196
196
  "prompt.heading": "系统提示词",
197
- "prompt.hint": "保存后,下一次模型调用就会用这段文字。导入只进编辑器;导出为 Markdown。恢复出厂后仍要点保存。",
197
+ "prompt.hint": "保存后,下一次模型调用就会用这段文字。",
198
198
  "status.enabled": "已启用",
199
199
  "status.disabled": "已停用",
200
200
  "status.changed": "已改",
@@ -395,7 +395,7 @@ try {
395
395
  "history.label": "Change history",
396
396
  "history.pick": "Pick a version to load…",
397
397
  "history.load": "Load this version",
398
- "history.hint": "Every save — plus changes made in a session or by hand — leaves a version here. Loading one only edits the draft; nothing is written until you save.",
398
+ "history.hint": "Loading a version only edits the draft. Nothing is written until you save.",
399
399
  "history.by.settings": "saved from this page",
400
400
  "history.by.external": "changed in a session / by hand",
401
401
  "msg.loadFailed": "Could not load that version",
@@ -410,20 +410,20 @@ try {
410
410
  "delete.close": "Close",
411
411
  "delete.plainConfirm": "Permanently delete \"{name}\"? This cannot be undone.",
412
412
  "name.heading": "Mode name",
413
- "name.hint": "Changes the display name only (mode picker and assistant list); the internal id and existing sessions are unaffected. Applies to the next new session.",
413
+ "name.hint": "Shown in the mode menu. The internal id does not change.",
414
414
  "name.placeholder": "Custom mode",
415
415
  "name.descriptionPlaceholder": "Mode description (shown in the mode picker, optional)",
416
416
  "mode.heading": "Base mode",
417
- "mode.hint": "The base decides which rows and tools this mode has. Its identity is always the prompt on this page, not the base mode's own wording. A save applies to the next new session; no restart is required.",
417
+ "mode.hint": "Pick a shipped tool set as the starting point. The prompt on this page still wins.",
418
418
  "rows.heading": "Plugin switches",
419
419
  "rows.filterPlaceholder": "Filter rows by name or id",
420
- "cap.heading": "Capabilities",
421
- "cap.expand": "Show capabilities",
422
- "cap.collapse": "Hide capabilities",
423
- "cap.hint": "The base mode chooses the tools. Each switch applies to one row. Both start on the next new session.",
424
- "rows.hint": "Control row by row which plugins this mode mounts. Untouched rows keep the official default (platform conditions included); an explicit choice wins.",
420
+ "cap.heading": "Tools",
421
+ "cap.expand": "Show tools",
422
+ "cap.collapse": "Hide tools",
423
+ "cap.hint": "Leave this closed to keep the tools this assistant already has.",
424
+ "rows.hint": "Turn a row off and this assistant will not use it.",
425
425
  "prompt.heading": "System prompt",
426
- "prompt.hint": "After you save, the next model step uses this text. Import only fills the editor. Export writes Markdown. Reset to factory still needs a save.",
426
+ "prompt.hint": "After you save, the next model step uses this text.",
427
427
  "status.enabled": "Enabled",
428
428
  "status.disabled": "Disabled",
429
429
  "status.changed": "changed",
@@ -735,7 +735,7 @@ try {
735
735
  ".cpfe-hint-line{font-size:12px;line-height:18px;color:var(--dsw-alias-label-tertiary)}",
736
736
  ".cpfe-hint-detail{margin:0;font-size:12px;line-height:18px;color:var(--dsw-alias-label-tertiary)}",
737
737
  // 描述:多行、自适应高度(没有多行输入组件,所以用 textarea + 同一批语义变量)
738
- ".cpfe-desc{box-sizing:border-box;min-height:56px;max-height:200px;resize:vertical;padding:8px 12px;border-radius:var(--dsw-radius-md);border:.5px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-primary);font:inherit;font-size:13px;line-height:20px;margin-bottom:8px}",
738
+ ".cpfe-desc{box-sizing:border-box;min-height:56px;max-height:160px;resize:vertical;padding:8px 12px;border-radius:var(--dsw-radius-md);border:.5px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-primary);font:inherit;font-size:13px;line-height:20px;margin-bottom:8px}",
739
739
  ".cpfe-base-pending{color:var(--dsw-alias-state-warn-primary)}",
740
740
  ".cpfe-note{display:block;margin:8px 0 0;font-size:12px;line-height:18px;color:var(--dsw-alias-label-tertiary)}",
741
741
  ".cpfe-mono{display:block;margin:0;font-family:var(--ds-font-family-code, ui-monospace, SFMono-Regular, Menlo, monospace);font-size:12px;line-height:18px;color:var(--dsw-alias-label-secondary);overflow-wrap:anywhere}",
@@ -762,7 +762,7 @@ try {
762
762
  ".cpfe-detail-line{display:flex;gap:8px;min-width:0}",
763
763
  ".cpfe-detail-key{flex:0 0 9.5em;color:var(--dsw-alias-label-secondary)}",
764
764
  ".cpfe-detail-value{min-width:0;overflow-wrap:anywhere}",
765
- ".cpfe-sec-head{display:flex;align-items:center;justify-content:space-between;gap:var(--g);flex-wrap:wrap}",
765
+ ".cpfe-sec-head{display:flex;flex-direction:column;align-items:flex-start;gap:8px}",
766
766
  ".cpfe-newinput{flex:1;min-width:200px}",
767
767
  // 单列、行高统一(对齐官方插件页的形态);之前的自适应多列网格会让行高参差不齐。
768
768
  // ★ 对齐官方设置行(实测 0.1.7-rc.2 的行:padding 16px 0、无背景、无圆角,行间只有一条 1px
@@ -775,11 +775,11 @@ try {
775
775
  ".cpfe-row{display:flex;gap:12px;align-items:center;box-sizing:border-box;min-height:0;padding:16px 0;border:0;border-radius:0;background:none}",
776
776
  ".cpfe-row-meta{display:flex;flex-direction:column;gap:4px;min-width:0;flex:1}",
777
777
  ".cpfe-row-badges{display:flex;align-items:center;gap:6px;flex-wrap:wrap;height:18px}",
778
- ".cpfe-editor{box-sizing:border-box;width:100%;min-height:240px;resize:vertical;padding:12px;border-radius:var(--dsw-radius-md);border:.5px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-primary);font-family:var(--ds-font-family-code, ui-monospace, SFMono-Regular, Menlo, monospace);font-size:13px;line-height:20px}",
779
- ".cpfe-bar{display:flex;align-items:center;gap:var(--g);flex-wrap:wrap}",
780
- ".cpfe-savebar{position:sticky;bottom:0;z-index:2;padding:8px 0;background:var(--dsw-alias-bg-base)}",
781
- ".cpfe-cap-toggle{appearance:none;cursor:pointer;border:0;background:transparent;padding:0;font:inherit;font-size:14px;line-height:22px;color:var(--dsw-alias-label-primary)}",
782
- ".cpfe-filter{box-sizing:border-box;width:100%;height:36px;margin:0 0 8px;padding:0 12px;border-radius:var(--dsw-radius-md);border:.5px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-base);color:var(--dsw-alias-label-primary);font:inherit;font-size:13px}",
778
+ ".cpfe-editor{box-sizing:border-box;width:100%;min-height:180px;resize:vertical;padding:12px;border-radius:var(--dsw-radius-md);border:.5px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-primary);font-family:var(--ds-font-family-code, ui-monospace, SFMono-Regular, Menlo, monospace);font-size:13px;line-height:20px}",
779
+ ".cpfe-bar{display:flex;align-items:center;gap:var(--g);flex-wrap:wrap;margin-top:8px}",
780
+ ".cpfe-disclosure{appearance:none;display:inline-flex;align-items:center;gap:6px;margin:8px 0 0;padding:0;border:0;background:transparent;color:var(--dsw-alias-label-primary);font:inherit;font-size:14px;line-height:22px;font-weight:400;cursor:pointer}",
781
+ ".cpfe-filter{box-sizing:border-box;width:100%;height:36px;margin:0 0 8px;padding:0 12px;border-radius:var(--dsw-radius-md);border:.5px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-module-platform);color:var(--dsw-alias-label-primary);font:inherit;font-size:13px}",
782
+ ".cpfe .cpfe-danger{margin-left:auto}",
783
783
  ".cpfe-status{font-size:13px;line-height:20px}",
784
784
  ".cpfe-ok{color:var(--dsw-alias-label-secondary)}",
785
785
  ".cpfe-err{color:var(--dsw-alias-state-error-primary)}",
@@ -1875,7 +1875,7 @@ try {
1875
1875
  typeof (assistants.find((item) => item.id === selected) || {}).broken === "string"
1876
1876
  ? react.createElement("p", { className: "cpfe-note" }, t("assistant.brokenHint"))
1877
1877
  : null,
1878
- react.createElement("p", { className: "cpfe-note" }, t("msg.readOnlyHint")),
1878
+ null,
1879
1879
  )
1880
1880
 
1881
1881
  // ── editor ────────────────────────────────────────────────────────────
@@ -2144,7 +2144,7 @@ try {
2144
2144
  // 逐个控件加 `disabled` 会漏(本轮就漏了行开关与描述框),一个根类 + 一条 CSS 反而漏不掉。
2145
2145
  { className: busy === true ? "cpfe cpfe-busy" : "cpfe" },
2146
2146
  assistantList,
2147
- react.createElement("p", { className: "cpfe-note" }, t("assistant.switchHint")),
2147
+ null,
2148
2148
  // 配了却不生效的项:主动点名,而不是让用户对着"我明明写了"发呆。
2149
2149
  // `draft` 在没选中任何助手时是 null(列表还没加载完 / 一个都没有)—— 这里必须先守卫,
2150
2150
  // 否则整块设置页崩掉(实测:浏览器验收当场报 Cannot read properties of null)。
@@ -2200,7 +2200,7 @@ try {
2200
2200
  ...(editorReady ? editorSections.filter((section) => section.key === "name" || section.key === "prompt") : []),
2201
2201
  react.createElement(
2202
2202
  "div",
2203
- { className: "cpfe-bar cpfe-savebar" },
2203
+ { className: "cpfe-bar" },
2204
2204
  react.createElement(
2205
2205
  A.Button,
2206
2206
  {
@@ -2235,12 +2235,14 @@ try {
2235
2235
  // (实测:干净机器上按名安装装到 1.0.1,而 latest 是 1.9.x)。
2236
2236
  react.createElement(
2237
2237
  "span",
2238
- { className: "cpfe-version", title: t("meta.versionHint") },
2239
- // payload 在"还没读到任何助手"时是 null —— 页脚仍然会渲染,所以必须判空
2240
- // (同一条错误这一轮被浏览器验收抓到过三次,单元测试一次都看不到)。
2241
- payload === null ? "" : t("meta.version") + " v" + String(payload.version ?? "?"),
2238
+ {
2239
+ className: "cpfe-version",
2240
+ title:
2241
+ (editorReady ? String(payload.compositionPath ?? "") + "\n" : "") + t("meta.versionHint"),
2242
+ },
2243
+ payload === null ? "" : "v" + String(payload.version ?? "?"),
2242
2244
  ),
2243
- react.createElement("span", { className: "cpfe-path" }, editorReady ? payload.compositionPath : ""),
2245
+ null,
2244
2246
  ),
2245
2247
  ),
2246
2248
  editorReady
@@ -2252,11 +2254,17 @@ try {
2252
2254
  {
2253
2255
  type: "button",
2254
2256
  "data-cap": "toggle",
2255
- className: "cpfe-h",
2257
+ className: "cpfe-disclosure",
2256
2258
  "aria-expanded": capOpen,
2259
+ "aria-label": capOpen ? t("cap.collapse") : t("cap.expand"),
2257
2260
  onClick: () => setCapOpen((open) => open !== true),
2258
2261
  },
2259
- (capOpen ? t("cap.collapse") : t("cap.expand")) + " · " + t("cap.heading"),
2262
+ renderable(capOpen ? A.IconChevronDownOutline14 : A.IconChevronRightOutline14)
2263
+ ? react.createElement(capOpen ? A.IconChevronDownOutline14 : A.IconChevronRightOutline14, { size: 14 })
2264
+ : capOpen
2265
+ ? "▾"
2266
+ : "▸",
2267
+ t("cap.heading"),
2260
2268
  ),
2261
2269
  react.createElement(SectionHint, { text: t("cap.hint") }),
2262
2270
  capOpen ? editorSections.filter((section) => section.key === "mode" || section.key === "rows") : null,
package/locales.mjs CHANGED
@@ -127,7 +127,7 @@ export const zh = {
127
127
  'history.label': '改动历史',
128
128
  'history.pick': '选择要载入的版本…',
129
129
  'history.load': '载入这一版',
130
- 'history.hint': '每次保存、会话内工具改动或手工编辑都会在此留一版;载入只改草稿,保存前不落盘。',
130
+ 'history.hint': '载入只改草稿,保存前不会写入。',
131
131
  'history.by.settings': '设置页保存',
132
132
  'history.by.external': '会话内/手工改动',
133
133
  'msg.loadFailed': '载入这一版失败',
@@ -143,23 +143,23 @@ export const zh = {
143
143
  'delete.plainConfirm': '确定永久删除「{name}」吗?该操作无法撤销。',
144
144
 
145
145
  'name.heading': '模式名称',
146
- 'name.hint': '仅影响显示名(模式选择器与助手列表);内部标识与已有会话不变,新建会话后生效。',
146
+ 'name.hint': '显示在模式菜单里。内部标识不会变。',
147
147
  'name.placeholder': '自定义模式',
148
148
  'name.descriptionPlaceholder': '模式描述(显示在模式选择器里,可留空)',
149
149
 
150
150
  'mode.heading': '基础模式',
151
- 'mode.hint': '基础模式只决定有哪些行、有哪些工具。本模式的身份始终用这一页的提示词,不继承基础模式的提示语。保存后新建会话生效,无需重启。',
151
+ 'mode.hint': '选一套官方工具当底子。提示词仍以本页为准。',
152
152
 
153
153
  'rows.heading': '插件开关',
154
154
  'rows.filterPlaceholder': '筛选行(名称或 id)',
155
- 'cap.heading': '能力',
156
- 'cap.expand': '展开能力',
157
- 'cap.collapse': '收起能力',
158
- 'cap.hint': '基础模式决定有哪些工具。开关逐行生效。这两项从下一次新建会话开始。',
159
- 'rows.hint': '逐行控制本模式挂载的插件。未改动的行保持官方默认(含平台判断);手动设置后以手动值为准。',
155
+ 'cap.heading': '工具',
156
+ 'cap.expand': '显示工具',
157
+ 'cap.collapse': '隐藏工具',
158
+ 'cap.hint': '不改的话,助手继续用现在这套工具。',
159
+ 'rows.hint': '关掉某一行,这个助手就不会用它。',
160
160
 
161
161
  'prompt.heading': '系统提示词',
162
- 'prompt.hint': '保存后,下一次模型调用就会用这段文字。导入只进编辑器;导出为 Markdown。恢复出厂后仍要点保存。',
162
+ 'prompt.hint': '保存后,下一次模型调用就会用这段文字。',
163
163
 
164
164
  'status.enabled': '已启用',
165
165
  'status.disabled': '已停用',
@@ -373,7 +373,7 @@ export const en = {
373
373
  'history.label': 'Change history',
374
374
  'history.pick': 'Pick a version to load…',
375
375
  'history.load': 'Load this version',
376
- 'history.hint': 'Every save — plus changes made in a session or by hand — leaves a version here. Loading one only edits the draft; nothing is written until you save.',
376
+ 'history.hint': 'Loading a version only edits the draft. Nothing is written until you save.',
377
377
  'history.by.settings': 'saved from this page',
378
378
  'history.by.external': 'changed in a session / by hand',
379
379
  'msg.loadFailed': 'Could not load that version',
@@ -389,27 +389,23 @@ export const en = {
389
389
  'delete.plainConfirm': 'Permanently delete "{name}"? This cannot be undone.',
390
390
 
391
391
  'name.heading': 'Mode name',
392
- 'name.hint':
393
- 'Changes the display name only (mode picker and assistant list); the internal id and existing sessions are unaffected. Applies to the next new session.',
392
+ 'name.hint': 'Shown in the mode menu. The internal id does not change.',
394
393
  'name.placeholder': 'Custom mode',
395
394
  'name.descriptionPlaceholder': 'Mode description (shown in the mode picker, optional)',
396
395
 
397
396
  'mode.heading': 'Base mode',
398
- 'mode.hint':
399
- 'The base decides which rows and tools this mode has. Its identity is always the prompt on this page, not the base mode\'s own wording. A save applies to the next new session; no restart is required.',
397
+ 'mode.hint': 'Pick a shipped tool set as the starting point. The prompt on this page still wins.',
400
398
 
401
399
  'rows.heading': 'Plugin switches',
402
400
  'rows.filterPlaceholder': 'Filter rows by name or id',
403
- 'cap.heading': 'Capabilities',
404
- 'cap.expand': 'Show capabilities',
405
- 'cap.collapse': 'Hide capabilities',
406
- 'cap.hint': 'The base mode chooses the tools. Each switch applies to one row. Both start on the next new session.',
407
- 'rows.hint':
408
- 'Control row by row which plugins this mode mounts. Untouched rows keep the official default (platform conditions included); an explicit choice wins.',
401
+ 'cap.heading': 'Tools',
402
+ 'cap.expand': 'Show tools',
403
+ 'cap.collapse': 'Hide tools',
404
+ 'cap.hint': 'Leave this closed to keep the tools this assistant already has.',
405
+ 'rows.hint': 'Turn a row off and this assistant will not use it.',
409
406
 
410
407
  'prompt.heading': 'System prompt',
411
- 'prompt.hint':
412
- 'After you save, the next model step uses this text. Import only fills the editor. Export writes Markdown. Reset to factory still needs a save.',
408
+ 'prompt.hint': 'After you save, the next model step uses this text.',
413
409
 
414
410
  'status.enabled': 'Enabled',
415
411
  'status.disabled': 'Disabled',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dsh-custom-mode",
3
- "version": "1.12.1",
3
+ "version": "1.13.0",
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",