@askdkc/dsh-cli 0.13.5 → 0.14.1
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/bin/{dsh-tui.js → dsh-cli.js} +27 -27
- package/cordis.patch.yml +32 -32
- package/cordis.yml +17 -17
- package/lib/types/activityPrefs.d.ts +2 -2
- package/lib/types/activityPrefs.js +2 -2
- package/lib/types/adapter/channel/actions.js +1 -1
- package/lib/types/adapter/channel/consumer.js +1 -1
- package/lib/types/adapter/channel/internal-token.js +1 -1
- package/lib/types/adapter/channel/plugins.js +1 -1
- package/lib/types/adapter/channel/session-projection.js +3 -3
- package/lib/types/adapter/channel/transcript.js +1 -1
- package/lib/types/adapter/channel/ui.js +3 -3
- package/lib/types/adapter/kernel/host-facade.d.ts +1 -1
- package/lib/types/adapter/kernel/host-facade.js +6 -6
- package/lib/types/adapter/kernel/host-probe-access.d.ts +1 -1
- package/lib/types/adapter/kernel/host-probe-access.js +6 -6
- package/lib/types/adapter/kernel/kernel-runtime.js +1 -1
- package/lib/types/adapter/kernel/legacy-facade.d.ts +1 -1
- package/lib/types/adapter/kernel/legacy-facade.js +1 -1
- package/lib/types/adapter/kernel/replay-isolation.js +1 -1
- package/lib/types/adapter/kernel/runtime.d.ts +1 -1
- package/lib/types/adapter/kernel/runtime.js +7 -7
- package/lib/types/adapter/ports/channel-display.d.ts +1 -1
- package/lib/types/adapter/ports/channel-ui.d.ts +15 -15
- package/lib/types/adapter/standard/descriptor.d.ts +1 -1
- package/lib/types/adapter/standard/descriptor.js +2 -2
- package/lib/types/adapter/standard/registry.d.ts +1 -1
- package/lib/types/adapter/standard/registry.js +2 -2
- package/lib/types/adapter/standard/tui-extension.d.ts +2 -2
- package/lib/types/adapter/standard/tui-extension.js +3 -3
- package/lib/types/adapter/upstream/channel-driver.js +10 -10
- package/lib/types/adapter/upstream/decisions-driver.js +3 -3
- package/lib/types/adapter/upstream/extensions-driver.js +18 -18
- package/lib/types/adapter/upstream/host-descriptor-driver.js +4 -4
- package/lib/types/adapter/upstream/presentation-driver.js +5 -5
- package/lib/types/adapter/upstream/scenes-driver.js +4 -4
- package/lib/types/adapter/upstream/settings-driver.js +4 -4
- package/lib/types/adapter/upstream/workspace-driver.js +2 -2
- package/lib/types/bootstrap/state.d.ts +4 -4
- package/lib/types/bootstrap/state.js +4 -4
- package/lib/types/{tuiDisplayPrefs.d.ts → cliDisplayPrefs.d.ts} +1 -1
- package/lib/types/{tuiDisplayPrefs.d.ts.map → cliDisplayPrefs.d.ts.map} +1 -1
- package/lib/types/{tuiDisplayPrefs.js → cliDisplayPrefs.js} +1 -1
- package/lib/types/commands.js +7 -7
- package/lib/types/components/AutoRecapRow.d.ts +1 -1
- package/lib/types/components/AutoRecapRow.js +1 -1
- package/lib/types/components/HelpMenu.d.ts +1 -1
- package/lib/types/components/HelpMenu.js +1 -1
- package/lib/types/components/LogoV2.d.ts +2 -2
- package/lib/types/components/LogoV2.d.ts.map +1 -1
- package/lib/types/components/LogoV2.js +5 -19
- package/lib/types/components/MermaidDiagram.js +1 -1
- package/lib/types/components/MessageList.d.ts +2 -2
- package/lib/types/components/MessageList.js +1 -1
- package/lib/types/components/PageMargin.d.ts +3 -3
- package/lib/types/components/PageMargin.js +1 -1
- package/lib/types/components/PluginSceneBoundary.d.ts +1 -1
- package/lib/types/components/PluginSceneBoundary.js +1 -1
- package/lib/types/components/PromptInput.d.ts +1 -1
- package/lib/types/components/PromptInput.js +3 -3
- package/lib/types/components/ScrollbarGutter.d.ts +1 -1
- package/lib/types/components/ScrollbarGutter.js +1 -1
- package/lib/types/components/Select.d.ts +1 -1
- package/lib/types/components/Select.js +1 -1
- package/lib/types/components/SplitDiffView.d.ts +1 -1
- package/lib/types/components/ThemePicker.d.ts +1 -1
- package/lib/types/components/ThemePicker.js +1 -1
- package/lib/types/components/activityFrames.d.ts +1 -1
- package/lib/types/components/activityFrames.js +1 -1
- package/lib/types/components/design-system/Byline.d.ts +1 -1
- package/lib/types/components/design-system/Byline.js +1 -1
- package/lib/types/components/design-system/Divider.d.ts +1 -1
- package/lib/types/components/design-system/Divider.js +1 -1
- package/lib/types/components/design-system/StatusIcon.d.ts +1 -1
- package/lib/types/components/design-system/StatusIcon.js +1 -1
- package/lib/types/components/design-system/ThemeProvider.d.ts +1 -1
- package/lib/types/components/design-system/ThemeProvider.js +11 -11
- package/lib/types/components/design-system/ThemedBox.d.ts +1 -1
- package/lib/types/components/design-system/ThemedBox.js +1 -1
- package/lib/types/components/design-system/ThemedText.d.ts +1 -1
- package/lib/types/components/design-system/ThemedText.js +1 -1
- package/lib/types/components/messages/AssistantThinkingMessage.d.ts +1 -1
- package/lib/types/components/messages/AssistantThinkingMessage.js +1 -1
- package/lib/types/components/messages/AssistantToolUseMessage.d.ts +3 -3
- package/lib/types/components/messages/AssistantToolUseMessage.js +1 -1
- package/lib/types/components/messages/originalImage.js +1 -1
- package/lib/types/components/questions/AskUserQuestionPanel.d.ts +1 -1
- package/lib/types/components/questions/AskUserQuestionPanel.js +1 -1
- package/lib/types/components/smoothReveal.d.ts +1 -1
- package/lib/types/components/smoothReveal.js +1 -1
- package/lib/types/customTheme.d.ts +5 -5
- package/lib/types/customTheme.js +7 -7
- package/lib/types/dsh-adapter/activity-store.d.ts +1 -1
- package/lib/types/dsh-adapter/activity-store.js +3 -3
- package/lib/types/dsh-adapter/bundled-presets.js +2 -2
- package/lib/types/dsh-adapter/channel/action-readiness.js +2 -2
- package/lib/types/dsh-adapter/channel/agent-view-projection.js +1 -1
- package/lib/types/dsh-adapter/channel/background-action.js +1 -1
- package/lib/types/dsh-adapter/channel/binding-events.js +1 -1
- package/lib/types/dsh-adapter/channel/binding.js +14 -14
- package/lib/types/dsh-adapter/channel/external-commands.js +3 -3
- package/lib/types/dsh-adapter/channel/input-delivery.js +1 -1
- package/lib/types/dsh-adapter/channel/job-projection.js +1 -1
- package/lib/types/dsh-adapter/channel/lifetime-resources.js +1 -1
- package/lib/types/dsh-adapter/channel/local-actions.js +1 -1
- package/lib/types/dsh-adapter/channel/mode-actions.js +1 -1
- package/lib/types/dsh-adapter/channel/mode-permission.js +6 -6
- package/lib/types/dsh-adapter/channel/mode-roster.js +1 -1
- package/lib/types/dsh-adapter/channel/owner.js +2 -2
- package/lib/types/dsh-adapter/channel/preferences.js +1 -1
- package/lib/types/dsh-adapter/channel/projection.js +1 -1
- package/lib/types/dsh-adapter/channel/reports.js +3 -3
- package/lib/types/dsh-adapter/channel/session-fork.js +1 -1
- package/lib/types/dsh-adapter/channel/session-metadata.d.ts +4 -4
- package/lib/types/dsh-adapter/channel/session-metadata.js +2 -2
- package/lib/types/dsh-adapter/channel/session-rewind.js +2 -2
- package/lib/types/dsh-adapter/channel/state.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/state.js +1 -1
- package/lib/types/dsh-adapter/channel/types.d.ts +1 -1
- package/lib/types/dsh-adapter/channel-ui.js +2 -2
- package/lib/types/dsh-adapter/channel.js +9 -9
- package/lib/types/dsh-adapter/cli-registration.d.ts.map +1 -1
- package/lib/types/dsh-adapter/cli-registration.js +5 -4
- package/lib/types/dsh-adapter/command-trees.d.ts +1 -1
- package/lib/types/dsh-adapter/command-trees.js +2 -2
- package/lib/types/dsh-adapter/compat/sessionLog.d.ts +3 -3
- package/lib/types/dsh-adapter/compat/sessionLog.js +5 -5
- package/lib/types/dsh-adapter/compat/settings.d.ts.map +1 -1
- package/lib/types/dsh-adapter/compat/settings.js +15 -7
- package/lib/types/dsh-adapter/contract.d.ts +1 -1
- package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
- package/lib/types/dsh-adapter/contract.js +0 -1
- package/lib/types/dsh-adapter/decision-guard.d.ts +3 -3
- package/lib/types/dsh-adapter/decision-guard.js +6 -6
- package/lib/types/dsh-adapter/dialogs.d.ts +1 -1
- package/lib/types/dsh-adapter/dialogs.js +7 -7
- package/lib/types/dsh-adapter/effect-ledger.d.ts +2 -2
- package/lib/types/dsh-adapter/effect-ledger.js +5 -5
- package/lib/types/dsh-adapter/extension-events.js +10 -10
- package/lib/types/dsh-adapter/extensions.d.ts +3 -3
- package/lib/types/dsh-adapter/extensions.js +3 -3
- package/lib/types/dsh-adapter/host-access.js +11 -11
- package/lib/types/dsh-adapter/ide-channel.d.ts +6 -6
- package/lib/types/dsh-adapter/ide-channel.js +6 -6
- package/lib/types/dsh-adapter/index.d.ts +18 -18
- package/lib/types/dsh-adapter/index.js +5 -5
- package/lib/types/dsh-adapter/inject-channel.d.ts +4 -4
- package/lib/types/dsh-adapter/inject-channel.js +5 -5
- package/lib/types/dsh-adapter/invariant.d.ts +9 -2
- package/lib/types/dsh-adapter/invariant.d.ts.map +1 -1
- package/lib/types/dsh-adapter/invariant.js +1 -1
- package/lib/types/dsh-adapter/message-observer.d.ts +2 -2
- package/lib/types/dsh-adapter/message-observer.js +23 -23
- package/lib/types/dsh-adapter/migrate/adapters/scan.js +1 -1
- package/lib/types/dsh-adapter/migrate/bin-path.d.ts +1 -1
- package/lib/types/dsh-adapter/migrate/bin-path.js +4 -4
- package/lib/types/dsh-adapter/migrate/picker.d.ts +1 -1
- package/lib/types/dsh-adapter/migrate/picker.js +1 -1
- package/lib/types/dsh-adapter/migrate/uuid.js +1 -1
- package/lib/types/dsh-adapter/packaged-presets.js +1 -1
- package/lib/types/dsh-adapter/plugin-host.d.ts +2 -2
- package/lib/types/dsh-adapter/plugin-host.js +32 -32
- package/lib/types/dsh-adapter/plugin-storage.d.ts +3 -3
- package/lib/types/dsh-adapter/plugin-storage.js +5 -5
- package/lib/types/dsh-adapter/plugin.d.ts +4 -4
- package/lib/types/dsh-adapter/plugin.js +89 -89
- package/lib/types/dsh-adapter/preset-resolution.d.ts +1 -1
- package/lib/types/dsh-adapter/presets.js +1 -1
- package/lib/types/dsh-adapter/promptDebug.js +1 -1
- package/lib/types/dsh-adapter/questions.d.ts +1 -1
- package/lib/types/dsh-adapter/questions.js +1 -1
- package/lib/types/dsh-adapter/renderers.js +7 -7
- package/lib/types/dsh-adapter/scenes.d.ts +1 -1
- package/lib/types/dsh-adapter/scenes.js +6 -6
- package/lib/types/dsh-adapter/settings-sections.d.ts +1 -1
- package/lib/types/dsh-adapter/settings-sections.js +5 -5
- package/lib/types/dsh-adapter/sharp.js +1 -1
- package/lib/types/dsh-adapter/shortcuts.js +9 -9
- package/lib/types/dsh-adapter/status.js +21 -21
- package/lib/types/dsh-adapter/themes.js +2 -2
- package/lib/types/dsh-adapter/toast.js +7 -7
- package/lib/types/dsh-adapter/types.d.ts +0 -1
- package/lib/types/dsh-adapter/types.d.ts.map +1 -1
- package/lib/types/dsh-adapter/workspaces.d.ts +1 -1
- package/lib/types/dsh-adapter/workspaces.js +6 -6
- package/lib/types/effortPrefs.d.ts +2 -2
- package/lib/types/effortPrefs.js +2 -2
- package/lib/types/force-production-react.js +1 -1
- package/lib/types/herdr.js +4 -4
- package/lib/types/homePrefs.js +1 -1
- package/lib/types/i18n.d.ts +54 -54
- package/lib/types/i18n.js +39 -39
- package/lib/types/ink/clearTerminal.d.ts +1 -1
- package/lib/types/ink/clearTerminal.js +1 -1
- package/lib/types/ink/colorize.js +1 -1
- package/lib/types/ink/components/App.d.ts +1 -1
- package/lib/types/ink/components/App.js +5 -5
- package/lib/types/ink/components/Text.d.ts +1 -1
- package/lib/types/ink/devtools.d.ts +1 -1
- package/lib/types/ink/dom.d.ts +1 -1
- package/lib/types/ink/dom.js +1 -1
- package/lib/types/ink/geometry-trace.js +4 -4
- package/lib/types/ink/ink.d.ts.map +1 -1
- package/lib/types/ink/ink.js +8 -19
- package/lib/types/ink/reconciler.d.ts +1 -1
- package/lib/types/ink/reconciler.d.ts.map +1 -1
- package/lib/types/ink/reconciler.js +6 -3
- package/lib/types/ink/render-to-screen.d.ts.map +1 -1
- package/lib/types/ink/render-to-screen.js +0 -5
- package/lib/types/ink/terminal.js +3 -3
- package/lib/types/ink/termio/osc.js +1 -1
- package/lib/types/ink/update-overflow-guard.js +2 -2
- package/lib/types/minimalMode.d.ts +2 -2
- package/lib/types/minimalMode.js +2 -2
- package/lib/types/modelGroups.d.ts +1 -1
- package/lib/types/modelGroups.js +1 -1
- package/lib/types/modelPrefs.d.ts +1 -1
- package/lib/types/modelPrefs.js +1 -1
- package/lib/types/modelRecents.d.ts +2 -2
- package/lib/types/modelRecents.js +2 -2
- package/lib/types/package-version.d.ts +3 -0
- package/lib/types/package-version.d.ts.map +1 -0
- package/lib/types/package-version.js +25 -0
- package/lib/types/presetPrefs.d.ts +1 -1
- package/lib/types/presetPrefs.js +1 -1
- package/lib/types/reload.d.ts +8 -8
- package/lib/types/reload.js +4 -4
- package/lib/types/screens/Chat.js +27 -27
- package/lib/types/screens/StatusLine.js +1 -1
- package/lib/types/screens/StatusMetrics.js +1 -1
- package/lib/types/sessionHistory.d.ts +3 -3
- package/lib/types/sessionHistory.js +7 -7
- package/lib/types/sessionModes.js +1 -1
- package/lib/types/sessionMounts.d.ts +1 -1
- package/lib/types/sessionMounts.js +1 -1
- package/lib/types/sessionPins.d.ts +1 -1
- package/lib/types/sessionPins.js +1 -1
- package/lib/types/terminal-utils/cliHighlight.d.ts +1 -1
- package/lib/types/terminal-utils/hash.d.ts +1 -1
- package/lib/types/terminal-utils/hash.js +1 -1
- package/lib/types/terminal-utils/mermaid.d.ts +1 -1
- package/lib/types/terminal-utils/syntaxTheme.js +1 -1
- package/lib/types/theme.d.ts +3 -3
- package/lib/types/theme.js +3 -3
- package/lib/types/themePrefs.d.ts +3 -3
- package/lib/types/themePrefs.js +3 -3
- package/lib/types/tips.js +4 -4
- package/lib/types/trajectory/effortIgnition.d.ts +1 -1
- package/lib/types/trajectoryPrefs.d.ts +1 -1
- package/lib/types/trajectoryPrefs.js +1 -1
- package/lib/types/ui.d.ts +1 -1
- package/lib/types/ui.js +1 -1
- package/lib/types/update.d.ts +25 -26
- package/lib/types/update.d.ts.map +1 -1
- package/lib/types/update.js +55 -73
- package/lib/types/utils/clipboard.js +1 -1
- package/lib/types/utils/credentials.js +2 -2
- package/lib/types/utils/debug.d.ts +3 -3
- package/lib/types/utils/debug.js +6 -6
- package/lib/types/utils/earlyInput.d.ts +1 -1
- package/lib/types/utils/earlyInput.js +1 -1
- package/lib/types/utils/externalEditor.js +1 -1
- package/lib/types/utils/fullscreen.d.ts +3 -3
- package/lib/types/utils/fullscreen.js +4 -4
- package/lib/types/utils/log.js +1 -1
- package/lib/types/utils/paths.d.ts +3 -3
- package/lib/types/utils/paths.js +4 -4
- package/lib/types/working-activity.js +1 -1
- package/node_modules/@askdkc/dsh-auth/dsh-plugin.json +1 -1
- package/node_modules/@askdkc/dsh-auth/lib/index.d.ts +2 -2
- package/node_modules/@askdkc/dsh-auth/lib/index.js +2 -2
- package/node_modules/@askdkc/dsh-auth/lib/pi-ai.d.ts +0 -2
- package/node_modules/@askdkc/dsh-auth/lib/pi-ai.js +0 -2
- package/node_modules/@askdkc/dsh-auth/lib/service.d.ts +1 -1
- package/node_modules/@askdkc/dsh-auth/lib/service.js +2 -2
- package/node_modules/dsh-working-activity/lib/client.js.map +1 -1
- package/node_modules/dsh-working-activity/lib/types/client/index.d.ts +1 -1
- package/node_modules/dsh-working-activity/lib/types/config.d.ts +2 -2
- package/node_modules/dsh-working-activity/lib/types/config.js +2 -2
- package/node_modules/dsh-working-activity/lib/types/frames.d.ts +1 -1
- package/node_modules/dsh-working-activity/lib/types/frames.js +1 -1
- package/node_modules/dsh-working-activity/lib/types/index.d.ts +1 -1
- package/node_modules/dsh-working-activity/lib/types/index.js +2 -2
- package/node_modules/dsh-working-activity/lib/types/invariant.d.ts +13 -1
- package/node_modules/dsh-working-activity/lib/types/lang.d.ts +5 -5
- package/node_modules/dsh-working-activity/lib/types/lang.js +8 -8
- package/node_modules/dsh-working-activity/lib/types/projection.d.ts +1 -1
- package/node_modules/dsh-working-activity/lib/types/projection.js +1 -1
- package/node_modules/dsh-working-activity/lib/types/status.d.ts +1 -1
- package/node_modules/dsh-working-activity/lib/types/status.js +1 -1
- package/node_modules/dsh-working-activity/package.json +0 -4
- package/node_modules/dsh-working-activity/src/client/index.ts +1 -1
- package/node_modules/dsh-working-activity/src/config.ts +2 -2
- package/node_modules/dsh-working-activity/src/frames.ts +1 -1
- package/node_modules/dsh-working-activity/src/index.ts +4 -4
- package/node_modules/dsh-working-activity/src/invariant.ts +10 -3
- package/node_modules/dsh-working-activity/src/lang.ts +8 -8
- package/node_modules/dsh-working-activity/src/projection.ts +1 -1
- package/node_modules/dsh-working-activity/src/status.ts +1 -1
- package/package.json +8 -13
- package/presets/liangshen/agent.cordis.yml +1 -1
- package/presets/liangshen/custom-bash.mjs +2 -2
package/lib/types/i18n.d.ts
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* dsh-
|
|
2
|
+
* dsh-cli localization — UI strings for Chinese (`zh`) and
|
|
3
3
|
* English (`en`).
|
|
4
4
|
*
|
|
5
5
|
* Resolution order mirrors the `/theme` mechanism (see themePrefs.ts):
|
|
6
6
|
*
|
|
7
|
-
* 1. `
|
|
7
|
+
* 1. `DSH_CLI_LANG` env var (`en` / `zh`) — pinned at process start
|
|
8
8
|
* 2. `lang` cordis.yml config key (see Config in index.ts)
|
|
9
|
-
* 3. the persisted `/lang` choice in `~/.dsh-
|
|
9
|
+
* 3. the persisted `/lang` choice in `~/.dsh-cli/lang.json`
|
|
10
10
|
* 4. the OS locale guess (`LC_ALL` / `LC_MESSAGES` / `LANG`)
|
|
11
11
|
* 5. `en` (the fallback language)
|
|
12
12
|
*
|
|
@@ -148,12 +148,12 @@ declare const dict: {
|
|
|
148
148
|
readonly en: "Indicator switched: {{name}} (saved)";
|
|
149
149
|
};
|
|
150
150
|
readonly 'activity-pref-write-failed': {
|
|
151
|
-
readonly zh: "无法写入 ~/.dsh-
|
|
152
|
-
readonly en: "Cannot write ~/.dsh-
|
|
151
|
+
readonly zh: "无法写入 ~/.dsh-cli/working-activity.json,切换未保存";
|
|
152
|
+
readonly en: "Cannot write ~/.dsh-cli/working-activity.json, switch not saved";
|
|
153
153
|
};
|
|
154
154
|
readonly 'model-pref-write-failed': {
|
|
155
|
-
readonly zh: "无法写入 ~/.dsh-
|
|
156
|
-
readonly en: "Cannot write ~/.dsh-
|
|
155
|
+
readonly zh: "无法写入 ~/.dsh-cli/model.json,模型选择不会保存到重启后";
|
|
156
|
+
readonly en: "Cannot write ~/.dsh-cli/model.json, the model choice will not survive a restart";
|
|
157
157
|
};
|
|
158
158
|
readonly 'model-route-invalid': {
|
|
159
159
|
readonly zh: "持久化的模型路由 {{provider}}/{{model}} 不在该 provider 的模型列表中,已整体回退到 {{fallback}}";
|
|
@@ -184,8 +184,8 @@ declare const dict: {
|
|
|
184
184
|
readonly en: "Current preset already: {{id}}";
|
|
185
185
|
};
|
|
186
186
|
readonly 'preset-pref-write-failed': {
|
|
187
|
-
readonly zh: "无法写入 ~/.dsh-
|
|
188
|
-
readonly en: "Cannot write ~/.dsh-
|
|
187
|
+
readonly zh: "无法写入 ~/.dsh-cli/agent-preset.json,选择未保存";
|
|
188
|
+
readonly en: "Cannot write ~/.dsh-cli/agent-preset.json, selection not saved";
|
|
189
189
|
};
|
|
190
190
|
readonly 'preset-locked-saved-default': {
|
|
191
191
|
readonly zh: "会话已开始,preset 已锁定(当前:{{current}})· 已保存为默认:{{id}}(/new 或下次启动生效)";
|
|
@@ -248,8 +248,8 @@ declare const dict: {
|
|
|
248
248
|
readonly en: "No MCP servers configured.";
|
|
249
249
|
};
|
|
250
250
|
readonly 'mcp-insert-hint': {
|
|
251
|
-
readonly zh: "在 profile 补丁层(~/.dsh/profiles/dsh-
|
|
252
|
-
readonly en: "Insert one line in the profile patch layer (~/.dsh/profiles/dsh-
|
|
251
|
+
readonly zh: "在 profile 补丁层(~/.dsh/profiles/dsh-cli/cordis.patch.yml)insert 一行即可,例:";
|
|
252
|
+
readonly en: "Insert one line in the profile patch layer (~/.dsh/profiles/dsh-cli/cordis.patch.yml), e.g.:";
|
|
253
253
|
};
|
|
254
254
|
readonly 'mcp-readme-hint': {
|
|
255
255
|
readonly zh: "详见仓库 README 的 MCP 章节。";
|
|
@@ -268,8 +268,8 @@ declare const dict: {
|
|
|
268
268
|
readonly en: "Subprocess stderr: {{line}} (repeated {{count}}×)";
|
|
269
269
|
};
|
|
270
270
|
readonly 'export-title': {
|
|
271
|
-
readonly zh: "# dsh-
|
|
272
|
-
readonly en: "# dsh-
|
|
271
|
+
readonly zh: "# dsh-cli 会话导出";
|
|
272
|
+
readonly en: "# dsh-cli session export";
|
|
273
273
|
};
|
|
274
274
|
readonly 'export-time': {
|
|
275
275
|
readonly zh: "- 导出时间: {{time}}";
|
|
@@ -1070,8 +1070,8 @@ declare const dict: {
|
|
|
1070
1070
|
readonly en: "Switch /activity (picker) or /activity frames <name>";
|
|
1071
1071
|
};
|
|
1072
1072
|
readonly 'activity-persist-hint': {
|
|
1073
|
-
readonly zh: "持久化 ~/.dsh-
|
|
1074
|
-
readonly en: "Persisted ~/.dsh-
|
|
1073
|
+
readonly zh: "持久化 ~/.dsh-cli/working-activity.json(重启后仍生效)";
|
|
1074
|
+
readonly en: "Persisted ~/.dsh-cli/working-activity.json (survives restart)";
|
|
1075
1075
|
};
|
|
1076
1076
|
readonly 'activity-current-direct': {
|
|
1077
1077
|
readonly zh: "当前预设:{{name}} · /activity frames <名> 直接切换:";
|
|
@@ -1102,8 +1102,8 @@ declare const dict: {
|
|
|
1102
1102
|
readonly en: "Switch /preset (picker) or /preset <id>";
|
|
1103
1103
|
};
|
|
1104
1104
|
readonly 'preset-persist-hint': {
|
|
1105
|
-
readonly zh: "持久化 ~/.dsh-
|
|
1106
|
-
readonly en: "Persisted ~/.dsh-
|
|
1105
|
+
readonly zh: "持久化 ~/.dsh-cli/agent-preset.json(重启后仍生效;cordis.yml preset 优先)";
|
|
1106
|
+
readonly en: "Persisted ~/.dsh-cli/agent-preset.json (survives restart; cordis.yml preset wins)";
|
|
1107
1107
|
};
|
|
1108
1108
|
readonly 'preset-lock-hint': {
|
|
1109
1109
|
readonly zh: "锁定规则 已开始的会话不可切换(官方 blank-only 规则)";
|
|
@@ -1122,12 +1122,12 @@ declare const dict: {
|
|
|
1122
1122
|
readonly en: "Switch /theme (picker) or /theme <name>";
|
|
1123
1123
|
};
|
|
1124
1124
|
readonly 'theme-persist-hint': {
|
|
1125
|
-
readonly zh: "持久化 ~/.dsh-
|
|
1126
|
-
readonly en: "Persisted ~/.dsh-
|
|
1125
|
+
readonly zh: "持久化 ~/.dsh-cli/theme.json(重启后仍生效;DSH_CLI_THEME 优先)";
|
|
1126
|
+
readonly en: "Persisted ~/.dsh-cli/theme.json (survives restart; DSH_CLI_THEME wins)";
|
|
1127
1127
|
};
|
|
1128
1128
|
readonly 'theme-custom-hint': {
|
|
1129
|
-
readonly zh: "自定义 静态 ~/.dsh-
|
|
1130
|
-
readonly en: "Custom static ~/.dsh-
|
|
1129
|
+
readonly zh: "自定义 静态 ~/.dsh-cli/themes/<名字>.json(插件也可提供运行时主题;见 README「自定义主题」)";
|
|
1130
|
+
readonly en: "Custom static ~/.dsh-cli/themes/<name>.json (plugins may also provide runtime themes; see README \"Custom themes\")";
|
|
1131
1131
|
};
|
|
1132
1132
|
readonly 'theme-auto-resolved': {
|
|
1133
1133
|
readonly zh: "自动解析 当前为 {{name}}(跟随终端背景)";
|
|
@@ -1294,8 +1294,8 @@ declare const dict: {
|
|
|
1294
1294
|
readonly en: "directory missing";
|
|
1295
1295
|
};
|
|
1296
1296
|
readonly 'home-no-workspaces': {
|
|
1297
|
-
readonly zh: "还没有工作区 · 在任意目录启动 dsh-
|
|
1298
|
-
readonly en: "No workspaces yet · start dsh-
|
|
1297
|
+
readonly zh: "还没有工作区 · 在任意目录启动 dsh-cli 即可自动加入";
|
|
1298
|
+
readonly en: "No workspaces yet · start dsh-cli in a directory to add it";
|
|
1299
1299
|
};
|
|
1300
1300
|
readonly 'home-sessions-title': {
|
|
1301
1301
|
readonly zh: "{{name}} 的会话";
|
|
@@ -1565,8 +1565,8 @@ declare const dict: {
|
|
|
1565
1565
|
readonly en: "User config {{path}}";
|
|
1566
1566
|
};
|
|
1567
1567
|
readonly 'doctor-launch-hint': {
|
|
1568
|
-
readonly zh: "启动方式 dsh-
|
|
1569
|
-
readonly en: "Launch dsh-
|
|
1568
|
+
readonly zh: "启动方式 dsh-cli.cmd / dsh --profile dsh-cli";
|
|
1569
|
+
readonly en: "Launch dsh-cli.cmd / dsh --profile dsh-cli";
|
|
1570
1570
|
};
|
|
1571
1571
|
readonly 'doctor-route-hint': {
|
|
1572
1572
|
readonly zh: "模型路由 由 cordis.yml 的 llm-deepseek 段决定(/model 仅提示重启生效)";
|
|
@@ -1637,8 +1637,8 @@ declare const dict: {
|
|
|
1637
1637
|
readonly en: "official endpoint";
|
|
1638
1638
|
};
|
|
1639
1639
|
readonly 'login-logout-hint': {
|
|
1640
|
-
readonly zh: "使用 /provider 管理 DSH 凭据;若来源为 env,请删除对应环境变量并重启 dsh-
|
|
1641
|
-
readonly en: "Manage DSH credentials with /provider; for env sources, remove the corresponding environment variable and restart dsh-
|
|
1640
|
+
readonly zh: "使用 /provider 管理 DSH 凭据;若来源为 env,请删除对应环境变量并重启 dsh-cli";
|
|
1641
|
+
readonly en: "Manage DSH credentials with /provider; for env sources, remove the corresponding environment variable and restart dsh-cli";
|
|
1642
1642
|
};
|
|
1643
1643
|
readonly 'login-oauth-heading': {
|
|
1644
1644
|
readonly zh: "提供商认证:";
|
|
@@ -1841,8 +1841,8 @@ declare const dict: {
|
|
|
1841
1841
|
readonly en: "activity";
|
|
1842
1842
|
};
|
|
1843
1843
|
readonly 'restart-starting': {
|
|
1844
|
-
readonly zh: "正在重启 dsh-
|
|
1845
|
-
readonly en: "Restarting dsh-
|
|
1844
|
+
readonly zh: "正在重启 dsh-cli,完成后自动恢复当前会话……";
|
|
1845
|
+
readonly en: "Restarting dsh-cli. The session resumes when it comes back…";
|
|
1846
1846
|
};
|
|
1847
1847
|
readonly 'restart-unavailable': {
|
|
1848
1848
|
readonly zh: "当前运行方式不支持进程内重启(未挂载重启通道)。";
|
|
@@ -1877,8 +1877,8 @@ declare const dict: {
|
|
|
1877
1877
|
readonly en: "No remote connection service is available in this environment.";
|
|
1878
1878
|
};
|
|
1879
1879
|
readonly 'theme-switch-failed': {
|
|
1880
|
-
readonly zh: "主题「{{name}}」切换失败(无法写入 ~/.dsh-
|
|
1881
|
-
readonly en: "Theme \"{{name}}\" switch failed (cannot write ~/.dsh-
|
|
1880
|
+
readonly zh: "主题「{{name}}」切换失败(无法写入 ~/.dsh-cli/theme.json)";
|
|
1881
|
+
readonly en: "Theme \"{{name}}\" switch failed (cannot write ~/.dsh-cli/theme.json)";
|
|
1882
1882
|
};
|
|
1883
1883
|
readonly 'interrupt-delivered': {
|
|
1884
1884
|
readonly zh: "已打断当前回合,{{n}} 条消息立即处理";
|
|
@@ -2045,12 +2045,12 @@ declare const dict: {
|
|
|
2045
2045
|
readonly en: "{{usage}} · {{percent}}% of context";
|
|
2046
2046
|
};
|
|
2047
2047
|
readonly 'update-aborted-no-profile': {
|
|
2048
|
-
readonly zh: "dsh-
|
|
2049
|
-
readonly en: "dsh-
|
|
2048
|
+
readonly zh: "dsh-cli 更新中止:未解析到 dsh profile。";
|
|
2049
|
+
readonly en: "dsh-cli update aborted: no dsh profile resolved.";
|
|
2050
2050
|
};
|
|
2051
2051
|
readonly 'update-launcher-align-unknown': {
|
|
2052
|
-
readonly zh: "Profile 已更新到 v{{version}}。如果你平时使用全局 dsh-
|
|
2053
|
-
readonly en: "The profile is now v{{version}}. If you normally launch with the global dsh-
|
|
2052
|
+
readonly zh: "Profile 已更新到 v{{version}}。如果你平时使用全局 dsh-cli 命令启动,请同步更新全局启动器:\n npm install -g --legacy-peer-deps dsh-cli@{{version}}\n(--legacy-peer-deps 可绕过 npm 12 的 peer 解析崩溃,全局启动器是瘦壳,跳过全局 peer 解析是安全的)";
|
|
2053
|
+
readonly en: "The profile is now v{{version}}. If you normally launch with the global dsh-cli command, align the global launcher too:\n npm install -g --legacy-peer-deps dsh-cli@{{version}}\n(--legacy-peer-deps works around an npm 12 peer-resolution crash; the global launcher is a thin shim, so skipping global peer resolution is safe.)";
|
|
2054
2054
|
};
|
|
2055
2055
|
readonly 'update-launcher-outdated': {
|
|
2056
2056
|
readonly zh: "Profile 已更新到 v{{profile}},但全局启动器仍是 v{{launcher}}。请同步更新:\n npm install -g --legacy-peer-deps dsh-cli@{{profile}}\n(--legacy-peer-deps 可绕过 npm 12 的 peer 解析崩溃,见 #459)";
|
|
@@ -2449,8 +2449,8 @@ declare const dict: {
|
|
|
2449
2449
|
readonly en: "Session accent color";
|
|
2450
2450
|
};
|
|
2451
2451
|
readonly 'settings-fullscreen-restart': {
|
|
2452
|
-
readonly zh: "全屏设置已保存,重启 dsh-
|
|
2453
|
-
readonly en: "Fullscreen preference saved — restart dsh-
|
|
2452
|
+
readonly zh: "全屏设置已保存,重启 dsh-cli 后生效";
|
|
2453
|
+
readonly en: "Fullscreen preference saved — restart dsh-cli to apply";
|
|
2454
2454
|
};
|
|
2455
2455
|
readonly 'settings-terminal-images-restart': {
|
|
2456
2456
|
readonly zh: "图片预览设置已保存,使用 /restart 重启 TUI 后生效";
|
|
@@ -3108,12 +3108,12 @@ declare const dict: {
|
|
|
3108
3108
|
readonly en: "Negotiation decision: {{state}}";
|
|
3109
3109
|
};
|
|
3110
3110
|
readonly 'plugins-grant-hint': {
|
|
3111
|
-
readonly zh: "授权方法:在 ~/.dsh-
|
|
3112
|
-
readonly en: "To grant: add a rule for the plugin id under \"grants\" in ~/.dsh-
|
|
3111
|
+
readonly zh: "授权方法:在 ~/.dsh-cli/extension-grants.json 的 \"grants\" 段为插件 id 添加规则(如 { \"name\": \"<权限>\", \"scope\": \"<范围>\" }),保存即生效、无需重启。";
|
|
3112
|
+
readonly en: "To grant: add a rule for the plugin id under \"grants\" in ~/.dsh-cli/extension-grants.json (e.g. { \"name\": \"<permission>\", \"scope\": \"<scope>\" }); saved changes apply immediately, no restart.";
|
|
3113
3113
|
};
|
|
3114
3114
|
readonly 'plugins-check-grant-hint': {
|
|
3115
|
-
readonly zh: "授权方法:在 ~/.dsh-
|
|
3116
|
-
readonly en: "To authorize: add \"{{id}}\": [{ \"name\": \"<permission>\", \"scope\": \"<scope>\" }] under \"grants\" in ~/.dsh-
|
|
3115
|
+
readonly zh: "授权方法:在 ~/.dsh-cli/extension-grants.json 的 \"grants\" 段加入 \"{{id}}\": [{ \"name\": \"<权限>\", \"scope\": \"<范围>\" }];待授权权限:{{perms}}。";
|
|
3116
|
+
readonly en: "To authorize: add \"{{id}}\": [{ \"name\": \"<permission>\", \"scope\": \"<scope>\" }] under \"grants\" in ~/.dsh-cli/extension-grants.json; pending permissions: {{perms}}.";
|
|
3117
3117
|
};
|
|
3118
3118
|
readonly 'plugins-check-dropped': {
|
|
3119
3119
|
readonly zh: "(宿主描述符已剔除漂移契约:{{dropped}})";
|
|
@@ -3240,8 +3240,8 @@ declare const dict: {
|
|
|
3240
3240
|
readonly en: "Built-in · follows the system/terminal background (light/dark)";
|
|
3241
3241
|
};
|
|
3242
3242
|
readonly 'theme-user-base': {
|
|
3243
|
-
readonly zh: "{{base}} 基底 · ~/.dsh-
|
|
3244
|
-
readonly en: "{{base}} base · ~/.dsh-
|
|
3243
|
+
readonly zh: "{{base}} 基底 · ~/.dsh-cli/themes/{{name}}.json";
|
|
3244
|
+
readonly en: "{{base}} base · ~/.dsh-cli/themes/{{name}}.json";
|
|
3245
3245
|
};
|
|
3246
3246
|
readonly 'theme-plugin-base': {
|
|
3247
3247
|
readonly zh: "插件 · {{base}} 基底 · {{name}}";
|
|
@@ -4067,10 +4067,10 @@ declare const dict: {
|
|
|
4067
4067
|
readonly zh: "生成最近会话活动摘要(可应用建议标题)";
|
|
4068
4068
|
};
|
|
4069
4069
|
readonly 'cmd-desc-quit': {
|
|
4070
|
-
readonly zh: "退出 dsh-
|
|
4070
|
+
readonly zh: "退出 dsh-cli";
|
|
4071
4071
|
};
|
|
4072
4072
|
readonly 'cmd-desc-q': {
|
|
4073
|
-
readonly zh: "退出 dsh-
|
|
4073
|
+
readonly zh: "退出 dsh-cli";
|
|
4074
4074
|
};
|
|
4075
4075
|
readonly 'cmd-desc-rewind': {
|
|
4076
4076
|
readonly zh: "回退会话到历史消息";
|
|
@@ -4097,7 +4097,7 @@ declare const dict: {
|
|
|
4097
4097
|
readonly zh: "查看 DeepSeek 账户余额";
|
|
4098
4098
|
};
|
|
4099
4099
|
readonly 'cmd-desc-config': {
|
|
4100
|
-
readonly zh: "查看 dsh-
|
|
4100
|
+
readonly zh: "查看 dsh-cli 配置来源";
|
|
4101
4101
|
};
|
|
4102
4102
|
readonly 'cmd-desc-reload': {
|
|
4103
4103
|
readonly zh: "重读偏好文件并立即生效";
|
|
@@ -4169,7 +4169,7 @@ declare const dict: {
|
|
|
4169
4169
|
readonly zh: "显示插件契约、授权与台账诊断";
|
|
4170
4170
|
};
|
|
4171
4171
|
readonly 'cmd-desc-update': {
|
|
4172
|
-
readonly zh: "更新 dsh-
|
|
4172
|
+
readonly zh: "更新 dsh-cli 并重启";
|
|
4173
4173
|
};
|
|
4174
4174
|
readonly 'cmd-desc-vim': {
|
|
4175
4175
|
readonly zh: "切换 vim 模式";
|
|
@@ -4199,10 +4199,10 @@ declare const dict: {
|
|
|
4199
4199
|
readonly zh: "查看快捷键与命令";
|
|
4200
4200
|
};
|
|
4201
4201
|
readonly 'cmd-desc-restart': {
|
|
4202
|
-
readonly zh: "重启 dsh-
|
|
4202
|
+
readonly zh: "重启 dsh-cli 并恢复当前会话";
|
|
4203
4203
|
};
|
|
4204
4204
|
readonly 'cmd-desc-exit': {
|
|
4205
|
-
readonly zh: "退出 dsh-
|
|
4205
|
+
readonly zh: "退出 dsh-cli";
|
|
4206
4206
|
};
|
|
4207
4207
|
readonly 'cmd-desc-plan': {
|
|
4208
4208
|
readonly zh: "切换计划模式(/plan off 退出)";
|
|
@@ -4222,8 +4222,8 @@ declare const dict: {
|
|
|
4222
4222
|
readonly en: "Switch /lang en | /lang zh";
|
|
4223
4223
|
};
|
|
4224
4224
|
readonly 'lang-persist-hint': {
|
|
4225
|
-
readonly zh: "持久化 ~/.dsh-
|
|
4226
|
-
readonly en: "Persisted ~/.dsh-
|
|
4225
|
+
readonly zh: "持久化 ~/.dsh-cli/lang.json(重启后仍生效;DSH_CLI_LANG 优先)";
|
|
4226
|
+
readonly en: "Persisted ~/.dsh-cli/lang.json (survives restart; DSH_CLI_LANG wins)";
|
|
4227
4227
|
};
|
|
4228
4228
|
readonly 'lang-switched': {
|
|
4229
4229
|
readonly zh: "语言已切换:{{lang}}(已保存)";
|
|
@@ -4234,8 +4234,8 @@ declare const dict: {
|
|
|
4234
4234
|
readonly en: "Unknown language \"{{lang}}\" · /lang to view all (en / zh)";
|
|
4235
4235
|
};
|
|
4236
4236
|
readonly 'lang-switch-failed': {
|
|
4237
|
-
readonly zh: "语言「{{lang}}」切换失败(无法写入 ~/.dsh-
|
|
4238
|
-
readonly en: "Language \"{{lang}}\" switch failed (cannot write ~/.dsh-
|
|
4237
|
+
readonly zh: "语言「{{lang}}」切换失败(无法写入 ~/.dsh-cli/lang.json)";
|
|
4238
|
+
readonly en: "Language \"{{lang}}\" switch failed (cannot write ~/.dsh-cli/lang.json)";
|
|
4239
4239
|
};
|
|
4240
4240
|
readonly 'lang-picker-title': {
|
|
4241
4241
|
readonly zh: "界面语言";
|
|
@@ -4423,7 +4423,7 @@ export declare function writeLangPref(lang: Lang, dir?: string): boolean;
|
|
|
4423
4423
|
*/
|
|
4424
4424
|
export declare function detectLocaleLang(): Lang;
|
|
4425
4425
|
/**
|
|
4426
|
-
* Resolve the startup language: `
|
|
4426
|
+
* Resolve the startup language: `DSH_CLI_LANG` when it holds a valid value
|
|
4427
4427
|
* (pinned at process start — the repro/verify scripts rely on this for
|
|
4428
4428
|
* deterministic UI copy), else the persisted `/lang` choice, else the OS
|
|
4429
4429
|
* locale guess, else `en` (the fallback language). The
|
package/lib/types/i18n.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* dsh-
|
|
2
|
+
* dsh-cli localization — UI strings for Chinese (`zh`) and
|
|
3
3
|
* English (`en`).
|
|
4
4
|
*
|
|
5
5
|
* Resolution order mirrors the `/theme` mechanism (see themePrefs.ts):
|
|
6
6
|
*
|
|
7
|
-
* 1. `
|
|
7
|
+
* 1. `DSH_CLI_LANG` env var (`en` / `zh`) — pinned at process start
|
|
8
8
|
* 2. `lang` cordis.yml config key (see Config in index.ts)
|
|
9
|
-
* 3. the persisted `/lang` choice in `~/.dsh-
|
|
9
|
+
* 3. the persisted `/lang` choice in `~/.dsh-cli/lang.json`
|
|
10
10
|
* 4. the OS locale guess (`LC_ALL` / `LC_MESSAGES` / `LANG`)
|
|
11
11
|
* 5. `en` (the fallback language)
|
|
12
12
|
*
|
|
@@ -84,8 +84,8 @@ const dict = {
|
|
|
84
84
|
'spinner-verb-responding': { zh: '回应中', en: 'Responding' },
|
|
85
85
|
'activity-indicator-already': { zh: '指示器已是:{{name}}', en: 'Indicator already set: {{name}}' },
|
|
86
86
|
'activity-indicator-switched': { zh: '指示器已切换:{{name}}(已保存)', en: 'Indicator switched: {{name}} (saved)' },
|
|
87
|
-
'activity-pref-write-failed': { zh: '无法写入 ~/.dsh-
|
|
88
|
-
'model-pref-write-failed': { zh: '无法写入 ~/.dsh-
|
|
87
|
+
'activity-pref-write-failed': { zh: '无法写入 ~/.dsh-cli/working-activity.json,切换未保存', en: 'Cannot write ~/.dsh-cli/working-activity.json, switch not saved' },
|
|
88
|
+
'model-pref-write-failed': { zh: '无法写入 ~/.dsh-cli/model.json,模型选择不会保存到重启后', en: 'Cannot write ~/.dsh-cli/model.json, the model choice will not survive a restart' },
|
|
89
89
|
'model-route-invalid': { zh: '持久化的模型路由 {{provider}}/{{model}} 不在该 provider 的模型列表中,已整体回退到 {{fallback}}', en: 'Persisted model route {{provider}}/{{model}} is not advertised by that provider; fell back to {{fallback}}' },
|
|
90
90
|
'unknown-activity-preset': { zh: '未知预设「{{name}}」· /activity frames 查看全部', en: 'Unknown preset "{{name}}" · /activity frames to view all' },
|
|
91
91
|
'preset-unavailable': { zh: 'Preset 不可用——当前组合未挂载 agent-presets 名册', en: 'Preset unavailable — the agent-presets roster is not mounted' },
|
|
@@ -93,7 +93,7 @@ const dict = {
|
|
|
93
93
|
'preset-not-found': { zh: 'Preset「{{id}}」不存在 · {{err}}', en: 'Preset "{{id}}" not found · {{err}}' },
|
|
94
94
|
'preset-load-failed': { zh: 'Preset「{{id}}」无法加载 · {{broken}}', en: 'Preset "{{id}}" failed to load · {{broken}}' },
|
|
95
95
|
'preset-already-current': { zh: '当前 preset 已是:{{id}}', en: 'Current preset already: {{id}}' },
|
|
96
|
-
'preset-pref-write-failed': { zh: '无法写入 ~/.dsh-
|
|
96
|
+
'preset-pref-write-failed': { zh: '无法写入 ~/.dsh-cli/agent-preset.json,选择未保存', en: 'Cannot write ~/.dsh-cli/agent-preset.json, selection not saved' },
|
|
97
97
|
'preset-locked-saved-default': { zh: '会话已开始,preset 已锁定(当前:{{current}})· 已保存为默认:{{id}}(/new 或下次启动生效)', en: 'Session already started, preset locked (current: {{current}}) · Saved as default: {{id}} (applies on /new or next start)' },
|
|
98
98
|
'preset-switch-failed': { zh: 'Preset 切换失败 · {{err}}', en: 'Preset switch failed · {{err}}' },
|
|
99
99
|
'preset-switched-pref-failed': { zh: 'Preset 已切换:{{id}},但默认偏好写入失败(重启后不保留)', en: 'Preset switched: {{id}}, but writing the default preference failed (won\'t persist after restart)' },
|
|
@@ -115,12 +115,12 @@ const dict = {
|
|
|
115
115
|
'preset-name-liangshen': { zh: '梁神模式', en: 'Liangshen mode' },
|
|
116
116
|
'preset-desc-liangshen': { zh: '主 Agent 与子 Agent 首轮均保持 Minimal 双工具,首次工具调用后开放完整目录,压缩后重新锚定。', en: 'Root and delegated agents keep the minimal two-tool pair on the first turn; the full catalog opens after the first tool call and re-anchors after compaction.' },
|
|
117
117
|
'mcp-none-configured': { zh: '未配置 MCP 服务器。', en: 'No MCP servers configured.' },
|
|
118
|
-
'mcp-insert-hint': { zh: '在 profile 补丁层(~/.dsh/profiles/dsh-
|
|
118
|
+
'mcp-insert-hint': { zh: '在 profile 补丁层(~/.dsh/profiles/dsh-cli/cordis.patch.yml)insert 一行即可,例:', en: 'Insert one line in the profile patch layer (~/.dsh/profiles/dsh-cli/cordis.patch.yml), e.g.:' },
|
|
119
119
|
'mcp-readme-hint': { zh: '详见仓库 README 的 MCP 章节。', en: 'See the MCP section of the repo README.' },
|
|
120
120
|
'mcp-server-tools': { zh: '{{server}}({{count}} 个工具): {{tools}}', en: '{{server}} ({{count}} tools): {{tools}}' },
|
|
121
121
|
'child-stderr-line': { zh: '子进程 stderr: {{line}}', en: 'Subprocess stderr: {{line}}' },
|
|
122
122
|
'child-stderr-line-repeat': { zh: '子进程 stderr: {{line}}(重复 {{count}} 次)', en: 'Subprocess stderr: {{line}} (repeated {{count}}×)' },
|
|
123
|
-
'export-title': { zh: '# dsh-
|
|
123
|
+
'export-title': { zh: '# dsh-cli 会话导出', en: '# dsh-cli session export' },
|
|
124
124
|
'export-time': { zh: '- 导出时间: {{time}}', en: '- Exported: {{time}}' },
|
|
125
125
|
'export-model': { zh: '- 模型: {{model}}', en: '- Model: {{model}}' },
|
|
126
126
|
'export-session': { zh: '- 会话: {{id}}', en: '- Session: {{id}}' },
|
|
@@ -345,7 +345,7 @@ const dict = {
|
|
|
345
345
|
'migrate-unknown-agent': { zh: '未知迁移源 {{agent}},可用源见 /migrate', en: 'Unknown migration source {{agent}}; see /migrate for the list' },
|
|
346
346
|
'activity-current-preset': { zh: '当前预设 {{name}}', en: 'Current preset {{name}}' },
|
|
347
347
|
'activity-switch-hint': { zh: '切换 /activity(选择器)或 /activity frames <名>', en: 'Switch /activity (picker) or /activity frames <name>' },
|
|
348
|
-
'activity-persist-hint': { zh: '持久化 ~/.dsh-
|
|
348
|
+
'activity-persist-hint': { zh: '持久化 ~/.dsh-cli/working-activity.json(重启后仍生效)', en: 'Persisted ~/.dsh-cli/working-activity.json (survives restart)' },
|
|
349
349
|
'activity-current-direct': { zh: '当前预设:{{name}} · /activity frames <名> 直接切换:', en: 'Current preset: {{name}} · /activity frames <name> to switch directly:' },
|
|
350
350
|
'activity-random-each': { zh: '每次随机', en: 'random each time' },
|
|
351
351
|
'activity-current-marker': { zh: ' ← 当前', en: ' ← current' },
|
|
@@ -353,13 +353,13 @@ const dict = {
|
|
|
353
353
|
'preset-current': { zh: '当前 preset {{name}}', en: 'Current preset {{name}}' },
|
|
354
354
|
'preset-roster-missing': { zh: '(未挂载名册)', en: '(roster not mounted)' },
|
|
355
355
|
'preset-switch-hint': { zh: '切换 /preset(选择器)或 /preset <id>', en: 'Switch /preset (picker) or /preset <id>' },
|
|
356
|
-
'preset-persist-hint': { zh: '持久化 ~/.dsh-
|
|
356
|
+
'preset-persist-hint': { zh: '持久化 ~/.dsh-cli/agent-preset.json(重启后仍生效;cordis.yml preset 优先)', en: 'Persisted ~/.dsh-cli/agent-preset.json (survives restart; cordis.yml preset wins)' },
|
|
357
357
|
'preset-lock-hint': { zh: '锁定规则 已开始的会话不可切换(官方 blank-only 规则)', en: 'Lock rule started sessions cannot switch (official blank-only rule)' },
|
|
358
358
|
'preset-roster-unmounted': { zh: '当前组合未挂载 agent-presets 名册(preset 不可用)', en: 'The agent-presets roster is not mounted (presets unavailable)' },
|
|
359
359
|
'theme-current': { zh: '当前主题 {{name}}', en: 'Current theme {{name}}' },
|
|
360
360
|
'theme-switch-hint': { zh: '切换 /theme(选择器)或 /theme <名字>', en: 'Switch /theme (picker) or /theme <name>' },
|
|
361
|
-
'theme-persist-hint': { zh: '持久化 ~/.dsh-
|
|
362
|
-
'theme-custom-hint': { zh: '自定义 静态 ~/.dsh-
|
|
361
|
+
'theme-persist-hint': { zh: '持久化 ~/.dsh-cli/theme.json(重启后仍生效;DSH_CLI_THEME 优先)', en: 'Persisted ~/.dsh-cli/theme.json (survives restart; DSH_CLI_THEME wins)' },
|
|
362
|
+
'theme-custom-hint': { zh: '自定义 静态 ~/.dsh-cli/themes/<名字>.json(插件也可提供运行时主题;见 README「自定义主题」)', en: 'Custom static ~/.dsh-cli/themes/<name>.json (plugins may also provide runtime themes; see README "Custom themes")' },
|
|
363
363
|
'theme-auto-resolved': { zh: '自动解析 当前为 {{name}}(跟随终端背景)', en: 'Auto-resolved currently {{name}} (follows terminal background)' },
|
|
364
364
|
'theme-switched-saved': { zh: '主题已切换:{{name}}(已保存)', en: 'Theme switched: {{name}} (saved)' },
|
|
365
365
|
'theme-unknown': { zh: '未知主题「{{name}}」· /theme 查看全部', en: 'Unknown theme "{{name}}" · /theme to view all' },
|
|
@@ -402,7 +402,7 @@ const dict = {
|
|
|
402
402
|
'home-add-workspace': { zh: '添加工作区', en: 'Add workspace' },
|
|
403
403
|
'home-add-hint': { zh: '选择目录并加入列表', en: 'Pick a directory and add it to the list' },
|
|
404
404
|
'home-workspace-missing': { zh: '目录不存在', en: 'directory missing' },
|
|
405
|
-
'home-no-workspaces': { zh: '还没有工作区 · 在任意目录启动 dsh-
|
|
405
|
+
'home-no-workspaces': { zh: '还没有工作区 · 在任意目录启动 dsh-cli 即可自动加入', en: 'No workspaces yet · start dsh-cli in a directory to add it' },
|
|
406
406
|
'home-sessions-title': { zh: '{{name}} 的会话', en: 'Sessions in {{name}}' },
|
|
407
407
|
'home-sessions-count': { zh: '{{n}} 个会话', en: { one: '{{n}} session', other: '{{n}} sessions' } },
|
|
408
408
|
'home-no-sessions': { zh: '这个工作区还没有会话 · Enter 新建一个', en: 'No sessions in this workspace yet · Enter starts one' },
|
|
@@ -473,7 +473,7 @@ const dict = {
|
|
|
473
473
|
'balance-hint': { zh: '余额查询免费 · 以 DeepSeek 平台为准', en: 'balance queries are free · authoritative on the DeepSeek platform' },
|
|
474
474
|
'doctor-example-config': { zh: '示例配置 {{path}}', en: 'Example config {{path}}' },
|
|
475
475
|
'doctor-user-config': { zh: '用户配置 {{path}}', en: 'User config {{path}}' },
|
|
476
|
-
'doctor-launch-hint': { zh: '启动方式 dsh-
|
|
476
|
+
'doctor-launch-hint': { zh: '启动方式 dsh-cli.cmd / dsh --profile dsh-cli', en: 'Launch dsh-cli.cmd / dsh --profile dsh-cli' },
|
|
477
477
|
'doctor-route-hint': { zh: '模型路由 由 cordis.yml 的 llm-deepseek 段决定(/model 仅提示重启生效)', en: 'Model route set by the llm-deepseek block in cordis.yml (/model only hints at restart)' },
|
|
478
478
|
'export-failed': { zh: '导出失败(无法写入工作目录)', en: 'Export failed (cannot write to working directory)' },
|
|
479
479
|
// 导出/调试快照都落在会话工作区根:同步盘(Dropbox/网盘)或共享目录
|
|
@@ -493,7 +493,7 @@ const dict = {
|
|
|
493
493
|
'login-storage-read-only': { zh: '只读', en: 'read-only' },
|
|
494
494
|
'login-base-url': { zh: 'Base URL: {{url}}', en: 'Base URL: {{url}}' },
|
|
495
495
|
'login-official-endpoint': { zh: '官方端点', en: 'official endpoint' },
|
|
496
|
-
'login-logout-hint': { zh: '使用 /provider 管理 DSH 凭据;若来源为 env,请删除对应环境变量并重启 dsh-
|
|
496
|
+
'login-logout-hint': { zh: '使用 /provider 管理 DSH 凭据;若来源为 env,请删除对应环境变量并重启 dsh-cli', en: 'Manage DSH credentials with /provider; for env sources, remove the corresponding environment variable and restart dsh-cli' },
|
|
497
497
|
// /login 的 OAuth 账号状态段(dsh-auth 类插件挂载时追加)
|
|
498
498
|
'login-oauth-heading': { zh: '提供商认证:', en: 'Provider authentication:' },
|
|
499
499
|
'login-oauth-row': { zh: ' {{provider}} — {{state}}', en: ' {{provider}} — {{state}}' },
|
|
@@ -547,7 +547,7 @@ const dict = {
|
|
|
547
547
|
'reload-kind-model': { zh: '模型', en: 'model' },
|
|
548
548
|
'reload-kind-activity': { zh: '活动指示', en: 'activity' },
|
|
549
549
|
// ── /restart (process restart with session resume) ────────────────────
|
|
550
|
-
'restart-starting': { zh: '正在重启 dsh-
|
|
550
|
+
'restart-starting': { zh: '正在重启 dsh-cli,完成后自动恢复当前会话……', en: 'Restarting dsh-cli. The session resumes when it comes back…' },
|
|
551
551
|
'restart-unavailable': { zh: '当前运行方式不支持进程内重启(未挂载重启通道)。', en: 'Restart is unavailable in this launch mode (no restart channel mounted).' },
|
|
552
552
|
'streaming-folded': { zh: '…(前 {{count}} 字符流式期间已折叠,落定后完整显示)', en: '…(first {{count}} chars folded while streaming; full text renders once the turn settles)' },
|
|
553
553
|
'mermaid-too-wide': { zh: '(图需要 {{width}} 列,当前宽度不足,显示源码)', en: '(diagram needs {{width}} columns; showing the source)' },
|
|
@@ -556,7 +556,7 @@ const dict = {
|
|
|
556
556
|
'terminal-setup-hint': { zh: '推荐 Windows Terminal(≥110 列、等宽字体、TrueColor)。', en: 'Recommended: Windows Terminal (≥110 columns, monospace, TrueColor).' },
|
|
557
557
|
'terminal-paste-hint': { zh: '{{mod}}V 或 Alt+V 粘贴文本、文件路径或图片;Ctrl+Shift+V 终端原生粘贴;右键粘贴同样可用;快捷键可在 /settings 修改。', en: '{{mod}}V or Alt+V pastes text, file paths, or images; Ctrl+Shift+V is native terminal paste; right-click paste also works; remappable via /settings.' },
|
|
558
558
|
'connect-none': { zh: '当前环境未提供远程连接服务。', en: 'No remote connection service is available in this environment.' },
|
|
559
|
-
'theme-switch-failed': { zh: '主题「{{name}}」切换失败(无法写入 ~/.dsh-
|
|
559
|
+
'theme-switch-failed': { zh: '主题「{{name}}」切换失败(无法写入 ~/.dsh-cli/theme.json)', en: 'Theme "{{name}}" switch failed (cannot write ~/.dsh-cli/theme.json)' },
|
|
560
560
|
'interrupt-delivered': { zh: '已打断当前回合,{{n}} 条消息立即处理', en: 'Interrupted current turn, {{n}} messages processed immediately' },
|
|
561
561
|
'btw-usage': { zh: '用法:/btw <问题> —— 不打断当前对话的快速侧问', en: 'Usage: /btw <question> — quick side question without interrupting the conversation' },
|
|
562
562
|
'btw-answering': { zh: '思考中…', en: 'Answering…' },
|
|
@@ -617,12 +617,12 @@ const dict = {
|
|
|
617
617
|
'tokens-usage': { zh: 'Tokens:{{in}} 输入 · {{out}} 输出', en: 'Tokens: {{in}} in · {{out}} out' },
|
|
618
618
|
'tokens-usage-context': { zh: '{{usage}} · 上下文 {{percent}}%', en: '{{usage}} · {{percent}}% of context' },
|
|
619
619
|
// ── plugin.ts — /update flow ───────────────────────────────────────
|
|
620
|
-
'update-aborted-no-profile': { zh: 'dsh-
|
|
620
|
+
'update-aborted-no-profile': { zh: 'dsh-cli 更新中止:未解析到 dsh profile。', en: 'dsh-cli update aborted: no dsh profile resolved.' },
|
|
621
621
|
// 0.8.3 launcher alignment bridge: /update only replaces the profile
|
|
622
|
-
// copy; the global `dsh-
|
|
622
|
+
// copy; the global `dsh-cli` launcher must be aligned separately.
|
|
623
623
|
'update-launcher-align-unknown': {
|
|
624
|
-
zh: 'Profile 已更新到 v{{version}}。如果你平时使用全局 dsh-
|
|
625
|
-
en: 'The profile is now v{{version}}. If you normally launch with the global dsh-
|
|
624
|
+
zh: 'Profile 已更新到 v{{version}}。如果你平时使用全局 dsh-cli 命令启动,请同步更新全局启动器:\n npm install -g --legacy-peer-deps dsh-cli@{{version}}\n(--legacy-peer-deps 可绕过 npm 12 的 peer 解析崩溃,全局启动器是瘦壳,跳过全局 peer 解析是安全的)',
|
|
625
|
+
en: 'The profile is now v{{version}}. If you normally launch with the global dsh-cli command, align the global launcher too:\n npm install -g --legacy-peer-deps dsh-cli@{{version}}\n(--legacy-peer-deps works around an npm 12 peer-resolution crash; the global launcher is a thin shim, so skipping global peer resolution is safe.)',
|
|
626
626
|
},
|
|
627
627
|
'update-launcher-outdated': {
|
|
628
628
|
zh: 'Profile 已更新到 v{{profile}},但全局启动器仍是 v{{launcher}}。请同步更新:\n npm install -g --legacy-peer-deps dsh-cli@{{profile}}\n(--legacy-peer-deps 可绕过 npm 12 的 peer 解析崩溃,见 #459)',
|
|
@@ -754,7 +754,7 @@ const dict = {
|
|
|
754
754
|
'sugg-color-reset-desc': { zh: '清除会话颜色,恢复主题默认', en: 'Clear the session color' },
|
|
755
755
|
'sugg-color-name-desc': { zh: '会话强调色', en: 'Session accent color' },
|
|
756
756
|
// ── dsh-adapter/plugin.ts(/settings 渲染设置)───────────────────────
|
|
757
|
-
'settings-fullscreen-restart': { zh: '全屏设置已保存,重启 dsh-
|
|
757
|
+
'settings-fullscreen-restart': { zh: '全屏设置已保存,重启 dsh-cli 后生效', en: 'Fullscreen preference saved — restart dsh-cli to apply' },
|
|
758
758
|
'settings-terminal-images-restart': { zh: '图片预览设置已保存,使用 /restart 重启 TUI 后生效', en: 'Image preview preference saved — use /restart to apply' },
|
|
759
759
|
// ── components/HelpMenu.tsx ─────────────────────────────────────────
|
|
760
760
|
'help-for-commands': { zh: '/ 查看命令', en: '/ for commands' },
|
|
@@ -914,7 +914,7 @@ const dict = {
|
|
|
914
914
|
'rewind-done': { zh: '已回退——编辑后按 Enter 重新发送', en: 'Rewound — edit and press Enter to resend' },
|
|
915
915
|
'rewind-mode-default': { zh: '仅回退会话', en: 'Conversation only' },
|
|
916
916
|
'rewind-waiting-plugins': { zh: '正在等待插件决定…(Esc 放弃等待)', en: 'Waiting for plugins… (Esc to stop waiting)' },
|
|
917
|
-
// ── 插件扩展缝(dsh-
|
|
917
|
+
// ── 插件扩展缝(dsh-cli-extensions:决策事件 + 托管对话框 + 快捷键)──
|
|
918
918
|
'ext-action-cancelled': { zh: '操作已被插件取消', en: 'Action cancelled by a plugin' },
|
|
919
919
|
'ext-action-handled': { zh: '输入已由插件处理', en: 'Input handled by a plugin' },
|
|
920
920
|
'ext-decision-pending': { zh: '正在等待插件决定({{event}})…', en: 'Waiting for a plugin decision ({{event}})…' },
|
|
@@ -948,12 +948,12 @@ const dict = {
|
|
|
948
948
|
'plugins-check-invalid': { zh: '语义校验失败:{{err}}', en: 'Semantic validation failed: {{err}}' },
|
|
949
949
|
'plugins-check-state': { zh: '协商结果:{{state}}', en: 'Negotiation decision: {{state}}' },
|
|
950
950
|
'plugins-grant-hint': {
|
|
951
|
-
zh: '授权方法:在 ~/.dsh-
|
|
952
|
-
en: 'To grant: add a rule for the plugin id under "grants" in ~/.dsh-
|
|
951
|
+
zh: '授权方法:在 ~/.dsh-cli/extension-grants.json 的 "grants" 段为插件 id 添加规则(如 { "name": "<权限>", "scope": "<范围>" }),保存即生效、无需重启。',
|
|
952
|
+
en: 'To grant: add a rule for the plugin id under "grants" in ~/.dsh-cli/extension-grants.json (e.g. { "name": "<permission>", "scope": "<scope>" }); saved changes apply immediately, no restart.',
|
|
953
953
|
},
|
|
954
954
|
'plugins-check-grant-hint': {
|
|
955
|
-
zh: '授权方法:在 ~/.dsh-
|
|
956
|
-
en: 'To authorize: add "{{id}}": [{ "name": "<permission>", "scope": "<scope>" }] under "grants" in ~/.dsh-
|
|
955
|
+
zh: '授权方法:在 ~/.dsh-cli/extension-grants.json 的 "grants" 段加入 "{{id}}": [{ "name": "<权限>", "scope": "<范围>" }];待授权权限:{{perms}}。',
|
|
956
|
+
en: 'To authorize: add "{{id}}": [{ "name": "<permission>", "scope": "<scope>" }] under "grants" in ~/.dsh-cli/extension-grants.json; pending permissions: {{perms}}.',
|
|
957
957
|
},
|
|
958
958
|
'plugins-check-dropped': { zh: '(宿主描述符已剔除漂移契约:{{dropped}})', en: '(host descriptor dropped drifted contracts: {{dropped}})' },
|
|
959
959
|
'plugins-check-host-unavailable': { zh: '当前没有 live Host Descriptor;只做静态 manifest 校验,不进行协议支持声明/协商。', en: 'No live Host Descriptor is available; only static manifest validation was performed, no protocol support declaration/negotiation.' },
|
|
@@ -990,7 +990,7 @@ const dict = {
|
|
|
990
990
|
// ── components/ThemePicker.tsx ──────────────────────────────────────
|
|
991
991
|
'theme-builtin-base': { zh: '内置 · {{name}} 基底', en: 'Built-in · {{name}} base' },
|
|
992
992
|
'theme-auto-base': { zh: '内置 · 跟随系统/终端背景自动选择 light/dark', en: 'Built-in · follows the system/terminal background (light/dark)' },
|
|
993
|
-
'theme-user-base': { zh: '{{base}} 基底 · ~/.dsh-
|
|
993
|
+
'theme-user-base': { zh: '{{base}} 基底 · ~/.dsh-cli/themes/{{name}}.json', en: '{{base}} base · ~/.dsh-cli/themes/{{name}}.json' },
|
|
994
994
|
'theme-plugin-base': { zh: '插件 · {{base}} 基底 · {{name}}', en: 'Plugin · {{base}} base · {{name}}' },
|
|
995
995
|
// ── components/LoadedContextPanel.tsx ───────────────────────────────
|
|
996
996
|
'context-unavailable': { zh: '当前会话没有已加载的上下文', en: 'No loaded context is available for this session' },
|
|
@@ -1217,8 +1217,8 @@ const dict = {
|
|
|
1217
1217
|
'cmd-desc-background': { zh: '当前会话转入后台并打开总览' },
|
|
1218
1218
|
'cmd-desc-rename': { zh: '重命名当前会话' },
|
|
1219
1219
|
'cmd-desc-recap': { zh: '生成最近会话活动摘要(可应用建议标题)' },
|
|
1220
|
-
'cmd-desc-quit': { zh: '退出 dsh-
|
|
1221
|
-
'cmd-desc-q': { zh: '退出 dsh-
|
|
1220
|
+
'cmd-desc-quit': { zh: '退出 dsh-cli' },
|
|
1221
|
+
'cmd-desc-q': { zh: '退出 dsh-cli' },
|
|
1222
1222
|
'cmd-desc-rewind': { zh: '回退会话到历史消息' },
|
|
1223
1223
|
'cmd-desc-tree': { zh: '浏览会话分叉树(回退/分叉/切分支)' },
|
|
1224
1224
|
'cmd-desc-fork': { zh: '把当前会话分叉为可恢复副本' },
|
|
@@ -1228,7 +1228,7 @@ const dict = {
|
|
|
1228
1228
|
'cmd-desc-status': { zh: '查看会话状态' },
|
|
1229
1229
|
'cmd-desc-cost': { zh: '查看会话 token 用量' },
|
|
1230
1230
|
'cmd-desc-balance': { zh: '查看 DeepSeek 账户余额' },
|
|
1231
|
-
'cmd-desc-config': { zh: '查看 dsh-
|
|
1231
|
+
'cmd-desc-config': { zh: '查看 dsh-cli 配置来源' },
|
|
1232
1232
|
'cmd-desc-reload': { zh: '重读偏好文件并立即生效' },
|
|
1233
1233
|
'cmd-desc-settings': { zh: '查看和编辑插件设置' },
|
|
1234
1234
|
'cmd-desc-doctor': { zh: '运行环境检查' },
|
|
@@ -1254,7 +1254,7 @@ const dict = {
|
|
|
1254
1254
|
'cmd-desc-mcp': { zh: '查看 MCP 状态' },
|
|
1255
1255
|
'cmd-desc-skills': { zh: '列出所有可用技能' },
|
|
1256
1256
|
'cmd-desc-plugins': { zh: '显示插件契约、授权与台账诊断' },
|
|
1257
|
-
'cmd-desc-update': { zh: '更新 dsh-
|
|
1257
|
+
'cmd-desc-update': { zh: '更新 dsh-cli 并重启' },
|
|
1258
1258
|
// Misc
|
|
1259
1259
|
'cmd-desc-vim': { zh: '切换 vim 模式' },
|
|
1260
1260
|
'cmd-desc-terminal-setup': { zh: '查看终端配置建议' },
|
|
@@ -1265,8 +1265,8 @@ const dict = {
|
|
|
1265
1265
|
'cmd-desc-workspace-open': { zh: '打开路径或工作区 URI', en: 'Open a path or workspace URI' },
|
|
1266
1266
|
// Help / exit
|
|
1267
1267
|
'cmd-desc-help': { zh: '查看快捷键与命令' },
|
|
1268
|
-
'cmd-desc-restart': { zh: '重启 dsh-
|
|
1269
|
-
'cmd-desc-exit': { zh: '退出 dsh-
|
|
1268
|
+
'cmd-desc-restart': { zh: '重启 dsh-cli 并恢复当前会话' },
|
|
1269
|
+
'cmd-desc-exit': { zh: '退出 dsh-cli' },
|
|
1270
1270
|
// Registry-injected (external) commands — zh only; en falls back to the
|
|
1271
1271
|
// registry's own description, and unlisted externals always fall back.
|
|
1272
1272
|
'cmd-desc-plan': { zh: '切换计划模式(/plan off 退出)' },
|
|
@@ -1275,10 +1275,10 @@ const dict = {
|
|
|
1275
1275
|
// ── /lang command ───────────────────────────────────────────────────
|
|
1276
1276
|
'lang-current': { zh: '当前语言 {{lang}}', en: 'Current language {{lang}}' },
|
|
1277
1277
|
'lang-switch-hint': { zh: '切换 /lang en | /lang zh', en: 'Switch /lang en | /lang zh' },
|
|
1278
|
-
'lang-persist-hint': { zh: '持久化 ~/.dsh-
|
|
1278
|
+
'lang-persist-hint': { zh: '持久化 ~/.dsh-cli/lang.json(重启后仍生效;DSH_CLI_LANG 优先)', en: 'Persisted ~/.dsh-cli/lang.json (survives restart; DSH_CLI_LANG wins)' },
|
|
1279
1279
|
'lang-switched': { zh: '语言已切换:{{lang}}(已保存)', en: 'Language switched: {{lang}} (saved)' },
|
|
1280
1280
|
'lang-unknown': { zh: '未知语言「{{lang}}」· /lang 查看全部(en / zh)', en: 'Unknown language "{{lang}}" · /lang to view all (en / zh)' },
|
|
1281
|
-
'lang-switch-failed': { zh: '语言「{{lang}}」切换失败(无法写入 ~/.dsh-
|
|
1281
|
+
'lang-switch-failed': { zh: '语言「{{lang}}」切换失败(无法写入 ~/.dsh-cli/lang.json)', en: 'Language "{{lang}}" switch failed (cannot write ~/.dsh-cli/lang.json)' },
|
|
1282
1282
|
'lang-picker-title': { zh: '界面语言', en: 'UI language' },
|
|
1283
1283
|
'lang-zh-desc': { zh: '简体中文(默认)', en: 'Simplified Chinese (default)' },
|
|
1284
1284
|
'lang-en-desc': { zh: 'English(英文)', en: 'English' },
|
|
@@ -1408,7 +1408,7 @@ export function progressSpinnerVerb(language, verb) {
|
|
|
1408
1408
|
}
|
|
1409
1409
|
/** Read-only view of the dictionary for audits (scripts/verify-i18n.ts). */
|
|
1410
1410
|
export const i18nDict = dict;
|
|
1411
|
-
// ── persistence (~/.dsh-
|
|
1411
|
+
// ── persistence (~/.dsh-cli/lang.json) ─────────────────────────────────
|
|
1412
1412
|
/**
|
|
1413
1413
|
* Parse a persisted `{ lang }` value; anything else yields undefined.
|
|
1414
1414
|
* @param text - Raw file contents.
|
|
@@ -1472,14 +1472,14 @@ export function detectLocaleLang() {
|
|
|
1472
1472
|
return locale.startsWith('zh') ? 'zh' : 'en';
|
|
1473
1473
|
}
|
|
1474
1474
|
/**
|
|
1475
|
-
* Resolve the startup language: `
|
|
1475
|
+
* Resolve the startup language: `DSH_CLI_LANG` when it holds a valid value
|
|
1476
1476
|
* (pinned at process start — the repro/verify scripts rely on this for
|
|
1477
1477
|
* deterministic UI copy), else the persisted `/lang` choice, else the OS
|
|
1478
1478
|
* locale guess, else `en` (the fallback language). The
|
|
1479
1479
|
* cordis.yml `lang` precedence lives in plugin.apply.
|
|
1480
1480
|
*/
|
|
1481
1481
|
export function resolveStartupLang() {
|
|
1482
|
-
const envLang = process.env.
|
|
1482
|
+
const envLang = process.env.DSH_CLI_LANG;
|
|
1483
1483
|
if (isLang(envLang))
|
|
1484
1484
|
return envLang;
|
|
1485
1485
|
return readLangPref() ?? detectLocaleLang();
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
*
|
|
9
9
|
* NOT using ESC[2J / ESC[3J: inside a DEC 2026 sync-output block (BSU/ESU)
|
|
10
10
|
* Windows Terminal snaps the viewport back to the top on those sequences
|
|
11
|
-
* and dsh-
|
|
11
|
+
* and dsh-cli's full resets run inside sync blocks.
|
|
12
12
|
* Scrolling the content far above the viewport (CSI <n> S) blanks the
|
|
13
13
|
* screen the same way — everything is pushed into the scrollback, the
|
|
14
14
|
* viewport shows empty rows — without moving the viewport.
|
|
@@ -42,7 +42,7 @@ function isModernWindowsTerminal() {
|
|
|
42
42
|
*
|
|
43
43
|
* NOT using ESC[2J / ESC[3J: inside a DEC 2026 sync-output block (BSU/ESU)
|
|
44
44
|
* Windows Terminal snaps the viewport back to the top on those sequences
|
|
45
|
-
* and dsh-
|
|
45
|
+
* and dsh-cli's full resets run inside sync blocks.
|
|
46
46
|
* Scrolling the content far above the viewport (CSI <n> S) blanks the
|
|
47
47
|
* screen the same way — everything is pushed into the scrollback, the
|
|
48
48
|
* viewport shows empty rows — without moving the viewport.
|
|
@@ -44,7 +44,7 @@ function clampChalkLevelForTmux() {
|
|
|
44
44
|
// A terminal wrapper may set terminal-overrides :Tc so truecolor passes
|
|
45
45
|
// through — skip the clamp. General escape hatch for anyone who's
|
|
46
46
|
// configured their tmux correctly.
|
|
47
|
-
if (process.env.
|
|
47
|
+
if (process.env.DSH_CLI_TMUX_TRUECOLOR)
|
|
48
48
|
return false;
|
|
49
49
|
if (process.env.TMUX && chalk.level > 2) {
|
|
50
50
|
chalk.level = 2;
|
|
@@ -64,7 +64,7 @@ export default class App extends PureComponent<Props, State> {
|
|
|
64
64
|
/**
|
|
65
65
|
* Bitmask of currently held mouse buttons (bit 0 = left, 1 = middle,
|
|
66
66
|
* 2 = right). Updated in the transport layer of handleMouseEvent BEFORE
|
|
67
|
-
* the click-disabled gate, so
|
|
67
|
+
* the click-disabled gate, so DSH_CLI_DISABLE_MOUSE=1 still maintains
|
|
68
68
|
* the physical latch. X10's generic release (low bits 3) cannot identify
|
|
69
69
|
* which button ended and conservatively clears the entire set — a
|
|
70
70
|
* no-button motion or focus-out is the reliable termination signal.
|