dsh-custom-mode 2.2.0 → 2.2.2

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: 3cd8af1d44fc5c7270a4cb7d4ff7eadb37f9e534
5
- README.zh.md: 8a2b8340cc30daab299f0255f88186eb8458ee4b
4
+ README.md: eea37666d29e8936957f2fd4290c325bf8e7be6c
5
+ README.zh.md: 7ad5b62f4f24842261ca30f2572f76810a808f98
package/README.md CHANGED
@@ -2,16 +2,29 @@
2
2
 
3
3
  English | [中文](README.zh.md)
4
4
 
5
- Edit a DeepSeek Harness (`dsh`) mode's system prompt, base mode, and plugin switches. Keep more than one assistant. Standard, PTC, Minimal, and Creator stay in the menu.
6
-
7
- ![Settings](https://raw.githubusercontent.com/BOWLUNA/dsh-custom-mode/main/docs/images/01-mode-switch.png)
5
+ Edit a DeepSeek Harness (`dsh`) custom mode: system prompt, base mode, and plugin switches. Keep more than one assistant. 自定义模式、系统提示词、提示词编辑。
6
+
7
+ <p align="center">
8
+ <img src="https://raw.githubusercontent.com/BOWLUNA/dsh-custom-mode/main/docs/images/header.png" width="820" alt="dsh-custom-mode">
9
+ </p>
10
+
11
+ <table align="center">
12
+ <tr>
13
+ <td align="center"><img src="https://raw.githubusercontent.com/BOWLUNA/dsh-custom-mode/main/docs/images/05-assistant-manager.png" width="360" alt="Assistants"></td>
14
+ <td align="center"><img src="https://raw.githubusercontent.com/BOWLUNA/dsh-custom-mode/main/docs/images/03-system-prompt.png" width="360" alt="System prompt"></td>
15
+ </tr>
16
+ <tr>
17
+ <td align="center"><img src="https://raw.githubusercontent.com/BOWLUNA/dsh-custom-mode/main/docs/images/01-mode-switch.png" width="360" alt="Base mode"></td>
18
+ <td align="center"><img src="https://raw.githubusercontent.com/BOWLUNA/dsh-custom-mode/main/docs/images/02-plugin-switches.png" width="360" alt="Plugin switches"></td>
19
+ </tr>
20
+ </table>
8
21
 
9
22
  ## Install
10
23
 
11
24
  Pin the version. A bare name can install an older build during pnpm's release cooldown. Details: [docs/TROUBLESHOOTING.md](docs/TROUBLESHOOTING.md).
12
25
 
13
26
  ```sh
14
- dsh plugin --profile web add dsh-custom-mode@2.2.0
27
+ dsh plugin --profile web add dsh-custom-mode@2.2.2
15
28
  ```
16
29
 
17
30
  Restart the process that serves the profile. The version on the settings page is the one that is running.
@@ -28,13 +41,13 @@ On Windows, `install.sh` is bash and it needs a `dsh` executable on `PATH`. Othe
28
41
 
29
42
  The prompt is `prompt.md`. The next time a model step is assembled, that file is read again. History can load an older draft into the editor; loading does not write. A save computed against an older copy is refused when the file changed underneath. The model can change the same file only through `custom_prompt`, which asks first.
30
43
 
31
- New assistants start as one posture. That choice applies only to the assistant you create next.
44
+ The page is two branches. This assistant edits the one you have open, and all five base modes can be chosen. New assistant writes only when you click New assistant: Coding, Writing, and Chat stay selectable, and only the official Standard mode is lit. The other four official modes are dim and cannot be chosen there.
32
45
 
33
46
  | Posture | After create |
34
47
  | --- | --- |
35
- | Develop | Built-in Standard tool set. |
36
- | Write | Terminal off. File tools on. |
37
- | Chat | Files and terminal off. |
48
+ | Develop | Official Standard mode, tools as shipped. |
49
+ | Write | Official Standard mode. Terminal off, file tools on. |
50
+ | Chat | Official Standard mode. Files and terminal off. |
38
51
 
39
52
  ## Boundaries
40
53
 
@@ -46,7 +59,7 @@ New assistants start as one posture. That choice applies only to the assistant y
46
59
 
47
60
  Declared range: `>=0.1.5-rc.2 <0.2.0-0 || >=0.1.6-alpha.1 <0.2.0-0 || >=0.1.7-alpha.1 <0.2.0-0 || >=0.2.0-0 <0.3.0-0 || >=0.2.1-alpha.1 <0.3.0-0`
48
61
 
49
- | dsh | Claim | Checked for 2.2.0 |
62
+ | dsh | Claim | Checked for 2.2.2 |
50
63
  | --- | --- | --- |
51
64
  | `0.2.0-rc.2` | declared | Windows web profile, before this release |
52
65
  | `0.2.1-alpha.1` | declared, in CI | not re-run for this release |
package/README.zh.md CHANGED
@@ -2,16 +2,29 @@
2
2
 
3
3
  [English](README.md) | 中文
4
4
 
5
- 在 DeepSeek Harness(`dsh`)里改一个模式的系统提示词、基础模式和插件开关。可以有多个助手。标准、PTC、极简、创造仍留在菜单里。
6
-
7
- ![设置页](https://raw.githubusercontent.com/BOWLUNA/dsh-custom-mode/main/docs/images/01-mode-switch.png)
5
+ 在 DeepSeek Harness(`dsh`)里改自定义模式的系统提示词、基础模式和插件开关。可以有多个助手。custom mode、system prompt、prompt editor。
6
+
7
+ <p align="center">
8
+ <img src="https://raw.githubusercontent.com/BOWLUNA/dsh-custom-mode/main/docs/images/header.png" width="820" alt="dsh-custom-mode">
9
+ </p>
10
+
11
+ <table align="center">
12
+ <tr>
13
+ <td align="center"><img src="https://raw.githubusercontent.com/BOWLUNA/dsh-custom-mode/main/docs/images/05-assistant-manager.png" width="360" alt="助手"></td>
14
+ <td align="center"><img src="https://raw.githubusercontent.com/BOWLUNA/dsh-custom-mode/main/docs/images/03-system-prompt.png" width="360" alt="系统提示词"></td>
15
+ </tr>
16
+ <tr>
17
+ <td align="center"><img src="https://raw.githubusercontent.com/BOWLUNA/dsh-custom-mode/main/docs/images/01-mode-switch.png" width="360" alt="基础模式"></td>
18
+ <td align="center"><img src="https://raw.githubusercontent.com/BOWLUNA/dsh-custom-mode/main/docs/images/02-plugin-switches.png" width="360" alt="插件开关"></td>
19
+ </tr>
20
+ </table>
8
21
 
9
22
  ## 安装
10
23
 
11
24
  钉版本。只写包名时,pnpm 的发布冷却期可能装到旧版。细节见 [docs/TROUBLESHOOTING.zh.md](docs/TROUBLESHOOTING.zh.md)。
12
25
 
13
26
  ```sh
14
- dsh plugin --profile web add dsh-custom-mode@2.2.0
27
+ dsh plugin --profile web add dsh-custom-mode@2.2.2
15
28
  ```
16
29
 
17
30
  重启为这个 profile 提供服务的进程。设置页上的版本号才是正在运行的版本。
@@ -28,13 +41,13 @@ dsh plugin --profile web add dsh-custom-mode@2.2.0
28
41
 
29
42
  提示词是 `prompt.md`。下一步组装模型输入时会重读这个文件。历史可以把旧稿载入编辑器;载入不落盘。打开页面之后文件被改过时,这一次保存会被拒绝。模型要改同一份文件,只能走 `custom_prompt`,并且先问过你。
30
43
 
31
- 新建助手时选一种姿态。它只影响下一次新建。
44
+ 页面分成两支。当前助手改的是已经打开的这一位,基础模式五档都可以点。新建助手只在点「新增助手」时写入:开发、写作、聊天可以点,工具底只有官方标准模式是亮的。其余四档是暗的,在这一支里点不了。
32
45
 
33
46
  | 姿态 | 新建之后 |
34
47
  | --- | --- |
35
- | 开发 | 内置标准模式的工具集。 |
36
- | 写作 | 终端关,文件工具开。 |
37
- | 聊天 | 文件和终端关。 |
48
+ | 开发 | 官方标准模式,工具按出厂。 |
49
+ | 写作 | 官方标准模式。终端关,文件工具开。 |
50
+ | 聊天 | 官方标准模式。文件和终端关。 |
38
51
 
39
52
  ## 边界
40
53
 
@@ -46,7 +59,7 @@ dsh plugin --profile web add dsh-custom-mode@2.2.0
46
59
 
47
60
  声明范围:`>=0.1.5-rc.2 <0.2.0-0 || >=0.1.6-alpha.1 <0.2.0-0 || >=0.1.7-alpha.1 <0.2.0-0 || >=0.2.0-0 <0.3.0-0 || >=0.2.1-alpha.1 <0.3.0-0`
48
61
 
49
- | dsh | 声明 | 2.2.0 核对 |
62
+ | dsh | 声明 | 2.2.2 核对 |
50
63
  | --- | --- | --- |
51
64
  | `0.2.0-rc.2` | 声明支持 | 本版发布前的 Windows web profile |
52
65
  | `0.2.1-alpha.1` | 声明支持,CI 有这条腿 | 本版没有重跑 |
package/client.js CHANGED
@@ -2,11 +2,10 @@
2
2
  * Browser half: 「自定义模式」settings page — the assistant manager.
3
3
  *
4
4
  * Blocks:
5
- * 0. 助手 — pick, create, duplicate, delete.
6
- * 1. 系统提示词 — the prompt, then Save directly under it.
7
- * 2. 模式名称 — display name and description.
8
- * 3. 基础模式 — standard / ptc / minimal / cordis / all.
9
- * 4. 插件开关 — collapsed until the user opens it.
5
+ * 0. 助手 — which assistant is selected.
6
+ * 1. 当前助手 — prompt, name, five live base modes, plugin switches.
7
+ * 2. 新建助手 — Coding / Writing / Chat stay selectable. The official
8
+ * modes are shown beside them, and only Standard is lit.
10
9
  *
11
10
  * Three decisions worth knowing before editing this file:
12
11
  *
@@ -62,13 +61,20 @@ try {
62
61
  "nav": "自定义模式",
63
62
  "assistant.heading": "助手",
64
63
  "assistant.hint": "每个助手单独保存系统提示词、基础模式和插件开关。",
65
- "posture.hint": "只用于新建,不改变当前助手。",
64
+ "posture.hint": "这一支只在点「新增助手」时写入。",
65
+ "tree.posture": "起步",
66
+ "tree.base": "工具底",
67
+ "tree.baseHold": "新建时固定用官方标准模式。",
68
+ "tree.baseSkip": "这一支点不了。建好后到「当前助手」里改。",
69
+ "tree.baseLocked": "只有官方标准模式是亮的。其余四档是暗的,新建时点不了。",
66
70
  "posture.develop.label": "开发",
67
- "posture.develop.note": "新建后:标准模式,工具按出厂。",
71
+ "posture.develop.note": "官方标准模式,工具按出厂。",
68
72
  "posture.write.label": "写作",
69
- "posture.write.note": "新建后:终端关闭,文件读写打开。",
73
+ "posture.write.note": "官方标准模式。终端关闭,文件读写打开。",
70
74
  "posture.chat.label": "聊天",
71
- "posture.chat.note": "新建后:文件和终端关闭。",
75
+ "posture.chat.note": "官方标准模式。文件和终端关闭。",
76
+ "editor.heading": "当前助手",
77
+ "editor.hint": "这一支改上面选中的助手。基础模式五档都可以点。",
72
78
  "assistant.empty": "还没有助手,用下面的输入框新建一个。",
73
79
  "assistant.loadingList": "正在读取助手列表…",
74
80
  "assistant.newPlaceholder": "新助手的名字(例如:写作助手)",
@@ -78,7 +84,7 @@ try {
78
84
  "assistant.brokenHint": "此模式在本机无法启动,不会出现在新会话菜单里。点「按本线修复」只关闭那些行。",
79
85
  "assistant.switchHint": "切换助手保留各自的未保存草稿;列表中的「未保存」标记即为此。",
80
86
  "btn.create": "新增助手",
81
- "create.heading": "新建",
87
+ "create.heading": "新建助手",
82
88
  "btn.creating": "创建中…",
83
89
  "btn.duplicate": "复制",
84
90
  "btn.moveUp": "上移",
@@ -196,7 +202,7 @@ try {
196
202
  "name.placeholder": "自定义模式",
197
203
  "name.descriptionPlaceholder": "描述,显示在模式菜单里,可留空",
198
204
  "mode.heading": "基础模式",
199
- "mode.hint": "选一套官方预设作为工具底。提示词以本页为准。",
205
+ "mode.hint": "五档都可以点。改的是当前这位助手。提示词仍以本页为准。",
200
206
  "rows.heading": "插件开关",
201
207
  "rows.filterPlaceholder": "按名称或 id 筛选",
202
208
  "cap.heading": "插件开关",
@@ -296,13 +302,20 @@ try {
296
302
  "nav": "Custom mode",
297
303
  "assistant.heading": "Assistants",
298
304
  "assistant.hint": "Each assistant keeps its own system prompt, base mode and plugin switches.",
299
- "posture.hint": "Applies only to the assistant you are about to create.",
305
+ "posture.hint": "This branch is written only when you click New assistant.",
306
+ "tree.posture": "Starter",
307
+ "tree.base": "Tool base",
308
+ "tree.baseHold": "A new assistant always starts on the official Standard mode.",
309
+ "tree.baseSkip": "Cannot be chosen on this branch. Change it later under This assistant.",
310
+ "tree.baseLocked": "Only the official Standard mode is lit. The other four are dim and cannot be chosen when creating.",
300
311
  "posture.develop.label": "Coding",
301
- "posture.develop.note": "After create: Standard, tools as shipped.",
312
+ "posture.develop.note": "Official Standard mode, tools as shipped.",
302
313
  "posture.write.label": "Writing",
303
- "posture.write.note": "After create: terminal off, file access on.",
314
+ "posture.write.note": "Official Standard mode. Terminal off, file access on.",
304
315
  "posture.chat.label": "Chat",
305
- "posture.chat.note": "After create: files and terminal off.",
316
+ "posture.chat.note": "Official Standard mode. Files and terminal off.",
317
+ "editor.heading": "This assistant",
318
+ "editor.hint": "This branch edits the assistant selected above. All five base modes can be chosen.",
306
319
  "assistant.empty": "No assistants yet — create one with the field below.",
307
320
  "assistant.loadingList": "Loading assistants…",
308
321
  "assistant.newPlaceholder": "Name of the new assistant (e.g. Writing assistant)",
@@ -430,7 +443,7 @@ try {
430
443
  "name.placeholder": "Custom mode",
431
444
  "name.descriptionPlaceholder": "Description, shown in the mode menu. Optional.",
432
445
  "mode.heading": "Base mode",
433
- "mode.hint": "Pick a shipped preset as the tool base. The prompt on this page still applies.",
446
+ "mode.hint": "All five can be chosen. This edits the assistant selected above. The prompt on this page still applies.",
434
447
  "rows.heading": "Plugin switches",
435
448
  "rows.filterPlaceholder": "Filter by name or id",
436
449
  "cap.heading": "Plugin switches",
@@ -767,7 +780,12 @@ try {
767
780
  ".cpfe-actions{display:flex;flex-wrap:wrap;gap:var(--g);align-items:center;margin-top:4px}",
768
781
  ".cpfe-newrow{display:flex;gap:var(--g);align-items:center;flex-wrap:wrap;margin-top:10px}",
769
782
  ".cpfe-postures{display:flex;flex-direction:column;gap:6px}",
770
- ".cpfe-create{display:flex;flex-direction:column;gap:6px;margin-top:8px}",
783
+ ".cpfe-create{display:flex;flex-direction:column;gap:6px}",
784
+ ".cpfe-branch{display:flex;flex-direction:column;gap:16px;margin-top:8px;padding-left:12px;border-left:1px solid var(--dsw-alias-border-l1)}",
785
+ ".cpfe-node{display:flex;flex-direction:column;gap:4px}",
786
+ ".cpfe-node-label{font-size:12px;line-height:18px;color:var(--dsw-alias-label-tertiary)}",
787
+ ".cpfe-locked button:disabled:not([aria-pressed=true]){opacity:.4;cursor:default}",
788
+ ".cpfe-locked button:disabled[aria-pressed=true]{opacity:1;cursor:default}",
771
789
  ".cpfe-field{display:flex;width:100%;margin-bottom:8px}",
772
790
  ".cpfe-row-head{font-size:14px;line-height:22px;color:var(--dsw-alias-label-primary)}",
773
791
  ".cpfe-row-switch{flex:0 0 auto}",
@@ -1717,38 +1735,70 @@ try {
1717
1735
  : "cpfe-status cpfe-ok"
1718
1736
  const shown = dirty && status === "" ? t("msg.unsaved") : status
1719
1737
 
1738
+ const lockedModes =
1739
+ payload !== null && Array.isArray(payload.modes) && payload.modes.length > 0
1740
+ ? payload.modes
1741
+ : [{ id: "standard" }, { id: "ptc" }, { id: "minimal" }, { id: "cordis" }, { id: "all" }]
1720
1742
  const createGroup = react.createElement(
1721
1743
  "section",
1722
1744
  { className: "cpfe-create" },
1723
1745
  react.createElement("h2", { className: "cpfe-h" }, t("create.heading")),
1724
1746
  react.createElement(SectionHint, { text: t("posture.hint") }),
1725
- postureChoices.length === 0
1726
- ? null
1727
- : react.createElement(
1728
- "div",
1729
- null,
1730
- react.createElement(
1747
+ react.createElement(
1748
+ "div",
1749
+ { className: "cpfe-branch" },
1750
+ postureChoices.length === 0
1751
+ ? null
1752
+ : react.createElement(
1731
1753
  "div",
1732
- { className: "cpfe-pills", role: "radiogroup", "aria-label": t("posture.hint") },
1733
- postureChoices.map((item) =>
1734
- react.createElement(
1735
- A.Pill,
1736
- {
1737
- key: item.id,
1738
- active: item.id === posture,
1739
- disabled: busy,
1740
- "aria-pressed": item.id === posture,
1741
- onClick: () => setPosture(item.id),
1742
- },
1743
- t("posture." + item.id + ".label", item.id),
1754
+ { className: "cpfe-node" },
1755
+ react.createElement("span", { className: "cpfe-node-label" }, t("tree.posture")),
1756
+ react.createElement(
1757
+ "div",
1758
+ { className: "cpfe-pills", role: "radiogroup", "aria-label": t("tree.posture") },
1759
+ postureChoices.map((item) =>
1760
+ react.createElement(
1761
+ A.Pill,
1762
+ {
1763
+ key: item.id,
1764
+ active: item.id === posture,
1765
+ disabled: busy,
1766
+ "aria-pressed": item.id === posture,
1767
+ onClick: () => setPosture(item.id),
1768
+ },
1769
+ t("posture." + item.id + ".label", item.id),
1770
+ ),
1744
1771
  ),
1745
1772
  ),
1773
+ react.createElement("p", { className: "cpfe-note" }, t("posture." + posture + ".note", "")),
1774
+ ),
1775
+ react.createElement(
1776
+ "div",
1777
+ { className: "cpfe-node" },
1778
+ react.createElement("span", { className: "cpfe-node-label" }, t("tree.base")),
1779
+ react.createElement(
1780
+ "div",
1781
+ { className: "cpfe-pills cpfe-locked", role: "radiogroup", "aria-disabled": "true", "aria-label": t("tree.base") },
1782
+ lockedModes.map((mode) =>
1783
+ react.createElement(
1784
+ A.Pill,
1785
+ {
1786
+ key: mode.id,
1787
+ active: mode.id === "standard",
1788
+ disabled: true,
1789
+ "aria-pressed": mode.id === "standard",
1790
+ title: mode.id === "standard" ? t("tree.baseHold") : t("tree.baseSkip"),
1791
+ onClick: () => {},
1792
+ },
1793
+ t("base." + mode.id + ".label", mode.label),
1794
+ ),
1746
1795
  ),
1747
- react.createElement("p", { className: "cpfe-note" }, t("posture." + posture + ".note", "")),
1748
1796
  ),
1749
- react.createElement(
1750
- "div",
1751
- { className: "cpfe-newrow" },
1797
+ react.createElement("p", { className: "cpfe-note" }, t("tree.baseLocked")),
1798
+ ),
1799
+ react.createElement(
1800
+ "div",
1801
+ { className: "cpfe-newrow" },
1752
1802
  react.createElement(A.Input, {
1753
1803
  className: "cpfe-newinput",
1754
1804
  value: newName,
@@ -1772,6 +1822,7 @@ try {
1772
1822
  },
1773
1823
  busy ? t("btn.creating") : t("btn.create"),
1774
1824
  ),
1825
+ ),
1775
1826
  ),
1776
1827
  )
1777
1828
 
@@ -1927,7 +1978,6 @@ try {
1927
1978
  ),
1928
1979
  )
1929
1980
  : null,
1930
- createGroup,
1931
1981
  typeof (assistants.find((item) => item.id === selected) || {}).broken === "string"
1932
1982
  ? react.createElement("p", { className: "cpfe-note" }, t("assistant.brokenHint"))
1933
1983
  : null,
@@ -1975,7 +2025,7 @@ try {
1975
2025
  ? react.createElement("p", { className: "cpfe-note" }, t("mode.unavailable"))
1976
2026
  : react.createElement(
1977
2027
  "div",
1978
- { className: "cpfe-pills" },
2028
+ { className: "cpfe-pills", "data-live": "base" },
1979
2029
  payload.modes.map((mode) =>
1980
2030
  react.createElement(
1981
2031
  A.Pill,
@@ -2251,8 +2301,17 @@ try {
2251
2301
  ),
2252
2302
  ),
2253
2303
  ),
2254
- ...(editorReady ? editorSections.filter((section) => section.key === "prompt") : []),
2255
- react.createElement(
2304
+ editorReady
2305
+ ? react.createElement(
2306
+ "section",
2307
+ null,
2308
+ react.createElement("h2", { className: "cpfe-h" }, t("editor.heading")),
2309
+ react.createElement(SectionHint, { text: t("editor.hint") }),
2310
+ react.createElement(
2311
+ "div",
2312
+ { className: "cpfe-branch" },
2313
+ editorSections.filter((section) => section.key === "prompt"),
2314
+ react.createElement(
2256
2315
  "div",
2257
2316
  { className: "cpfe-bar" },
2258
2317
  react.createElement(
@@ -2326,6 +2385,10 @@ try {
2326
2385
  : null,
2327
2386
  )
2328
2387
  : null,
2388
+ ),
2389
+ )
2390
+ : null,
2391
+ createGroup,
2329
2392
  // The confirmation is a portal: rendering it here keeps every piece of this page's
2330
2393
  // state in one component.
2331
2394
  renderable(A.RiskConfirmation) && editorReady
package/locales.mjs CHANGED
@@ -21,13 +21,20 @@ export const zh = {
21
21
  // ── 助手管理 ──────────────────────────────────────────────────────────────
22
22
  'assistant.heading': '助手',
23
23
  'assistant.hint': '每个助手单独保存系统提示词、基础模式和插件开关。',
24
- 'posture.hint': '只用于新建,不改变当前助手。',
24
+ 'posture.hint': '这一支只在点「新增助手」时写入。',
25
+ 'tree.posture': '起步',
26
+ 'tree.base': '工具底',
27
+ 'tree.baseHold': '新建时固定用官方标准模式。',
28
+ 'tree.baseSkip': '这一支点不了。建好后到「当前助手」里改。',
29
+ 'tree.baseLocked': '只有官方标准模式是亮的。其余四档是暗的,新建时点不了。',
25
30
  'posture.develop.label': '开发',
26
- 'posture.develop.note': '新建后:标准模式,工具按出厂。',
31
+ 'posture.develop.note': '官方标准模式,工具按出厂。',
27
32
  'posture.write.label': '写作',
28
- 'posture.write.note': '新建后:终端关闭,文件读写打开。',
33
+ 'posture.write.note': '官方标准模式。终端关闭,文件读写打开。',
29
34
  'posture.chat.label': '聊天',
30
- 'posture.chat.note': '新建后:文件和终端关闭。',
35
+ 'posture.chat.note': '官方标准模式。文件和终端关闭。',
36
+ 'editor.heading': '当前助手',
37
+ 'editor.hint': '这一支改上面选中的助手。基础模式五档都可以点。',
31
38
  'assistant.empty': '还没有助手,用下面的输入框新建一个。',
32
39
  'assistant.loadingList': '正在读取助手列表…',
33
40
  'assistant.newPlaceholder': '新助手的名字(例如:写作助手)',
@@ -39,7 +46,7 @@ export const zh = {
39
46
  'assistant.brokenHint': '此模式在本机无法启动,不会出现在新会话菜单里。点「按本线修复」只关闭那些行。',
40
47
  'assistant.switchHint': '切换助手保留各自的未保存草稿;列表中的「未保存」标记即为此。',
41
48
  'btn.create': '新增助手',
42
- 'create.heading': '新建',
49
+ 'create.heading': '新建助手',
43
50
  'btn.creating': '创建中…',
44
51
  'btn.duplicate': '复制',
45
52
  'btn.moveUp': '上移',
@@ -159,7 +166,7 @@ export const zh = {
159
166
  'name.descriptionPlaceholder': '描述,显示在模式菜单里,可留空',
160
167
 
161
168
  'mode.heading': '基础模式',
162
- 'mode.hint': '选一套官方预设作为工具底。提示词以本页为准。',
169
+ 'mode.hint': '五档都可以点。改的是当前这位助手。提示词仍以本页为准。',
163
170
 
164
171
  'rows.heading': '插件开关',
165
172
  'rows.filterPlaceholder': '按名称或 id 筛选',
@@ -279,13 +286,20 @@ export const en = {
279
286
  // ── assistant management ──────────────────────────────────────────────────
280
287
  'assistant.heading': 'Assistants',
281
288
  'assistant.hint': 'Each assistant keeps its own system prompt, base mode and plugin switches.',
282
- 'posture.hint': 'Applies only to the assistant you are about to create.',
289
+ 'posture.hint': 'This branch is written only when you click New assistant.',
290
+ 'tree.posture': 'Starter',
291
+ 'tree.base': 'Tool base',
292
+ 'tree.baseHold': 'A new assistant always starts on the official Standard mode.',
293
+ 'tree.baseSkip': 'Cannot be chosen on this branch. Change it later under This assistant.',
294
+ 'tree.baseLocked': 'Only the official Standard mode is lit. The other four are dim and cannot be chosen when creating.',
283
295
  'posture.develop.label': 'Coding',
284
- 'posture.develop.note': 'After create: Standard, tools as shipped.',
296
+ 'posture.develop.note': 'Official Standard mode, tools as shipped.',
285
297
  'posture.write.label': 'Writing',
286
- 'posture.write.note': 'After create: terminal off, file access on.',
298
+ 'posture.write.note': 'Official Standard mode. Terminal off, file access on.',
287
299
  'posture.chat.label': 'Chat',
288
- 'posture.chat.note': 'After create: files and terminal off.',
300
+ 'posture.chat.note': 'Official Standard mode. Files and terminal off.',
301
+ 'editor.heading': 'This assistant',
302
+ 'editor.hint': 'This branch edits the assistant selected above. All five base modes can be chosen.',
289
303
  'assistant.empty': 'No assistants yet — create one with the field below.',
290
304
  'assistant.loadingList': 'Loading assistants…',
291
305
  'assistant.newPlaceholder': 'Name of the new assistant (e.g. Writing assistant)',
@@ -415,7 +429,7 @@ export const en = {
415
429
  'name.descriptionPlaceholder': 'Description, shown in the mode menu. Optional.',
416
430
 
417
431
  'mode.heading': 'Base mode',
418
- 'mode.hint': 'Pick a shipped preset as the tool base. The prompt on this page still applies.',
432
+ 'mode.hint': 'All five can be chosen. This edits the assistant selected above. The prompt on this page still applies.',
419
433
 
420
434
  'rows.heading': 'Plugin switches',
421
435
  'rows.filterPlaceholder': 'Filter by name or id',
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "dsh-custom-mode",
3
- "version": "2.2.0",
4
- "description": "Edit a DeepSeek Harness (dsh) mode's system prompt, base mode, and plugin switches.",
3
+ "version": "2.2.2",
4
+ "description": "Edit a DeepSeek Harness (dsh) custom mode: system prompt, base mode, and plugin switches.",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "author": "bowluna <ai@bowluna.com>",
@@ -21,14 +21,21 @@
21
21
  },
22
22
  "keywords": [
23
23
  "dsh",
24
- "deepseek-harness",
25
24
  "deepseek",
25
+ "deepseek-harness",
26
+ "deepseek-ai",
26
27
  "dsh-plugin",
27
28
  "plugin",
28
- "agent-preset",
29
29
  "custom-mode",
30
30
  "system-prompt",
31
- "prompt-editor"
31
+ "prompt-editor",
32
+ "agent-preset",
33
+ "assistant",
34
+ "base-mode",
35
+ "自定义模式",
36
+ "系统提示词",
37
+ "提示词编辑",
38
+ "DeepSeek插件"
32
39
  ],
33
40
  "dsh": {
34
41
  "bundle": {