@deepseek-harness-tui/dsh-tui 0.6.1 → 0.7.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/README.md +77 -23
- package/bin/dsh-tui.js +132 -25
- package/cordis.patch.yml +69 -17
- package/cordis.yml +50 -12
- package/lib/types/activityPrefs.d.ts +1 -1
- package/lib/types/activityPrefs.js +3 -3
- package/lib/types/cc/figures.d.ts +27 -20
- package/lib/types/cc/figures.d.ts.map +1 -1
- package/lib/types/cc/figures.js +43 -34
- package/lib/types/cc/format.d.ts +18 -9
- package/lib/types/cc/format.d.ts.map +1 -1
- package/lib/types/cc/format.js +26 -18
- package/lib/types/cc/markdown.d.ts +31 -16
- package/lib/types/cc/markdown.d.ts.map +1 -1
- package/lib/types/cc/markdown.js +283 -260
- package/lib/types/cc/terminal.d.ts +10 -7
- package/lib/types/cc/terminal.d.ts.map +1 -1
- package/lib/types/cc/terminal.js +62 -50
- package/lib/types/command-trees.d.ts +3 -0
- package/lib/types/command-trees.d.ts.map +1 -0
- package/lib/types/command-trees.js +4 -0
- package/lib/types/commands.d.ts +37 -1
- package/lib/types/commands.d.ts.map +1 -1
- package/lib/types/commands.js +68 -3
- package/lib/types/components/ActivityLine.d.ts +1 -1
- package/lib/types/components/ActivityLine.d.ts.map +1 -1
- package/lib/types/components/ActivityPicker.d.ts.map +1 -1
- package/lib/types/components/ActivityPicker.js +3 -4
- package/lib/types/components/BtwPanel.d.ts +16 -0
- package/lib/types/components/BtwPanel.d.ts.map +1 -0
- package/lib/types/components/BtwPanel.js +47 -0
- package/lib/types/components/CommandSuggestions.d.ts +4 -2
- package/lib/types/components/CommandSuggestions.d.ts.map +1 -1
- package/lib/types/components/CommandSuggestions.js +2 -2
- package/lib/types/components/EffortSlider.d.ts +15 -0
- package/lib/types/components/EffortSlider.d.ts.map +1 -0
- package/lib/types/components/EffortSlider.js +17 -0
- package/lib/types/components/GoalTodoPanel.d.ts +1 -1
- package/lib/types/components/GoalTodoPanel.d.ts.map +1 -1
- package/lib/types/components/HelpMenu.d.ts +5 -2
- package/lib/types/components/HelpMenu.d.ts.map +1 -1
- package/lib/types/components/HelpMenu.js +8 -3
- package/lib/types/components/HistorySearchDialog.d.ts +1 -1
- package/lib/types/components/HistorySearchDialog.d.ts.map +1 -1
- package/lib/types/components/HistorySearchDialog.js +21 -10
- package/lib/types/components/InterruptedByUser.d.ts +2 -2
- package/lib/types/components/InterruptedByUser.d.ts.map +1 -1
- package/lib/types/components/InterruptedByUser.js +4 -3
- package/lib/types/components/LoadedContextPanel.d.ts +1 -1
- package/lib/types/components/LoadedContextPanel.d.ts.map +1 -1
- package/lib/types/components/LogoV2.d.ts.map +1 -1
- package/lib/types/components/LogoV2.js +2 -1
- package/lib/types/components/Markdown.d.ts +11 -11
- package/lib/types/components/Markdown.d.ts.map +1 -1
- package/lib/types/components/Markdown.js +63 -57
- package/lib/types/components/MarkdownTable.d.ts +1 -1
- package/lib/types/components/MarkdownTable.js +2 -2
- package/lib/types/components/MessageList.d.ts +10 -2
- package/lib/types/components/MessageList.d.ts.map +1 -1
- package/lib/types/components/MessageList.js +17 -10
- package/lib/types/components/ModelPicker.d.ts +4 -1
- package/lib/types/components/ModelPicker.d.ts.map +1 -1
- package/lib/types/components/ModelPicker.js +16 -4
- package/lib/types/components/OverlayAbove.d.ts +20 -0
- package/lib/types/components/OverlayAbove.d.ts.map +1 -0
- package/lib/types/components/OverlayAbove.js +18 -0
- package/lib/types/components/PresetPicker.d.ts +1 -1
- package/lib/types/components/PresetPicker.d.ts.map +1 -1
- package/lib/types/components/PresetPicker.js +2 -3
- package/lib/types/components/PromptInput.d.ts +5 -4
- package/lib/types/components/PromptInput.d.ts.map +1 -1
- package/lib/types/components/PromptInput.js +186 -39
- package/lib/types/components/ResumePicker.d.ts +15 -4
- package/lib/types/components/ResumePicker.d.ts.map +1 -1
- package/lib/types/components/ResumePicker.js +25 -9
- package/lib/types/components/RewindPicker.d.ts +1 -1
- package/lib/types/components/RewindPicker.d.ts.map +1 -1
- package/lib/types/components/RewindPicker.js +14 -5
- package/lib/types/components/SearchBox.d.ts +1 -1
- package/lib/types/components/SearchBox.js +1 -1
- package/lib/types/components/Spinner/GlimmerMessage.d.ts +1 -2
- package/lib/types/components/Spinner/GlimmerMessage.d.ts.map +1 -1
- package/lib/types/components/Spinner/GlimmerMessage.js +1 -2
- package/lib/types/components/Spinner/SpinnerAnimationRow.d.ts +1 -1
- package/lib/types/components/Spinner/SpinnerAnimationRow.js +2 -2
- package/lib/types/components/Spinner/SpinnerGlyph.d.ts +1 -1
- package/lib/types/components/Spinner/SpinnerGlyph.js +1 -1
- package/lib/types/components/Spinner/spinnerUtils.d.ts +13 -18
- package/lib/types/components/Spinner/spinnerUtils.d.ts.map +1 -1
- package/lib/types/components/Spinner/spinnerUtils.js +67 -71
- package/lib/types/components/Spinner/useStalledAnimation.d.ts +1 -2
- package/lib/types/components/Spinner/useStalledAnimation.d.ts.map +1 -1
- package/lib/types/components/Spinner/useStalledAnimation.js +1 -2
- package/lib/types/components/StreamingMarkdown.d.ts +1 -1
- package/lib/types/components/StreamingMarkdown.js +1 -1
- package/lib/types/components/ThemePicker.d.ts +13 -9
- package/lib/types/components/ThemePicker.d.ts.map +1 -1
- package/lib/types/components/ThemePicker.js +21 -15
- package/lib/types/components/ThinkingToggle.d.ts +1 -1
- package/lib/types/components/ThinkingToggle.d.ts.map +1 -1
- package/lib/types/components/ThinkingToggle.js +8 -8
- package/lib/types/components/ToolUseLoader.d.ts +1 -1
- package/lib/types/components/ToolUseLoader.js +1 -1
- package/lib/types/components/WorkingSpinner.d.ts +2 -2
- package/lib/types/components/WorkingSpinner.js +2 -2
- package/lib/types/components/WorkspaceFlowPicker.d.ts +15 -0
- package/lib/types/components/WorkspaceFlowPicker.d.ts.map +1 -0
- package/lib/types/components/WorkspaceFlowPicker.js +19 -0
- package/lib/types/components/WorkspacePicker.d.ts +9 -0
- package/lib/types/components/WorkspacePicker.d.ts.map +1 -0
- package/lib/types/components/WorkspacePicker.js +13 -0
- package/lib/types/components/approvals/ApprovalPanel.d.ts +1 -1
- package/lib/types/components/approvals/ApprovalPanel.d.ts.map +1 -1
- package/lib/types/components/approvals/ApprovalPanel.js +2 -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/HintLine.d.ts +12 -0
- package/lib/types/components/design-system/HintLine.d.ts.map +1 -0
- package/lib/types/components/design-system/HintLine.js +15 -0
- package/lib/types/components/design-system/KeyboardShortcutHint.d.ts +1 -1
- package/lib/types/components/design-system/KeyboardShortcutHint.js +1 -1
- package/lib/types/components/design-system/ListItem.d.ts +2 -2
- package/lib/types/components/design-system/ListItem.d.ts.map +1 -1
- package/lib/types/components/design-system/ListItem.js +35 -3
- package/lib/types/components/design-system/LoadingState.d.ts +1 -2
- package/lib/types/components/design-system/LoadingState.d.ts.map +1 -1
- package/lib/types/components/design-system/LoadingState.js +1 -2
- package/lib/types/components/design-system/Pane.d.ts +2 -2
- package/lib/types/components/design-system/Pane.js +2 -2
- package/lib/types/components/design-system/ProgressBar.d.ts +1 -2
- package/lib/types/components/design-system/ProgressBar.d.ts.map +1 -1
- package/lib/types/components/design-system/ProgressBar.js +1 -2
- package/lib/types/components/design-system/StatusIcon.d.ts +2 -2
- package/lib/types/components/design-system/StatusIcon.js +2 -2
- package/lib/types/components/design-system/ThemeProvider.d.ts +1 -1
- package/lib/types/components/design-system/ThemeProvider.d.ts.map +1 -1
- package/lib/types/components/design-system/ThemeProvider.js +87 -26
- 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 +2 -2
- package/lib/types/components/design-system/ThemedText.js +2 -2
- package/lib/types/components/listWindow.d.ts +26 -0
- package/lib/types/components/listWindow.d.ts.map +1 -0
- package/lib/types/components/listWindow.js +47 -0
- package/lib/types/components/messages/AssistantTextMessage.d.ts +1 -2
- package/lib/types/components/messages/AssistantTextMessage.d.ts.map +1 -1
- package/lib/types/components/messages/AssistantTextMessage.js +1 -2
- package/lib/types/components/messages/AssistantThinkingMessage.d.ts +2 -2
- package/lib/types/components/messages/AssistantThinkingMessage.d.ts.map +1 -1
- package/lib/types/components/messages/AssistantThinkingMessage.js +6 -6
- package/lib/types/components/messages/AssistantToolUseMessage.d.ts +12 -4
- package/lib/types/components/messages/AssistantToolUseMessage.d.ts.map +1 -1
- package/lib/types/components/messages/AssistantToolUseMessage.js +9 -5
- package/lib/types/components/messages/MessageMetadata.d.ts +1 -1
- package/lib/types/components/messages/MessageMetadata.js +1 -1
- package/lib/types/components/messages/UserPromptMessage.d.ts +1 -1
- package/lib/types/components/messages/UserPromptMessage.js +1 -1
- package/lib/types/components/questions/AskUserQuestionPanel.d.ts +5 -1
- package/lib/types/components/questions/AskUserQuestionPanel.d.ts.map +1 -1
- package/lib/types/components/questions/AskUserQuestionPanel.js +11 -9
- package/lib/types/components/questions/PlanReviewPanel.d.ts +1 -1
- package/lib/types/components/questions/PlanReviewPanel.d.ts.map +1 -1
- package/lib/types/components/questions/PlanReviewPanel.js +3 -2
- package/lib/types/components/trajectory/HotspotView.d.ts +14 -0
- package/lib/types/components/trajectory/HotspotView.d.ts.map +1 -0
- package/lib/types/components/trajectory/HotspotView.js +83 -0
- package/lib/types/components/trajectory/Inspector.d.ts +31 -0
- package/lib/types/components/trajectory/Inspector.d.ts.map +1 -0
- package/lib/types/components/trajectory/Inspector.js +67 -0
- package/lib/types/components/trajectory/Ledger.d.ts +20 -0
- package/lib/types/components/trajectory/Ledger.d.ts.map +1 -0
- package/lib/types/components/trajectory/Ledger.js +112 -0
- package/lib/types/components/trajectory/MiniWake.d.ts +24 -0
- package/lib/types/components/trajectory/MiniWake.d.ts.map +1 -0
- package/lib/types/components/trajectory/MiniWake.js +99 -0
- package/lib/types/components/trajectory/WaveBand.d.ts +33 -0
- package/lib/types/components/trajectory/WaveBand.d.ts.map +1 -0
- package/lib/types/components/trajectory/WaveBand.js +145 -0
- package/lib/types/customTheme.d.ts +6 -6
- package/lib/types/customTheme.d.ts.map +1 -1
- package/lib/types/customTheme.js +15 -12
- package/lib/types/dsh-adapter/approvals.d.ts.map +1 -0
- package/lib/types/{channel.d.ts → dsh-adapter/channel.d.ts} +198 -43
- package/lib/types/dsh-adapter/channel.d.ts.map +1 -0
- package/lib/types/{channel.js → dsh-adapter/channel.js} +1129 -201
- package/lib/types/dsh-adapter/childStderr.d.ts.map +1 -0
- package/lib/types/{childStderr.js → dsh-adapter/childStderr.js} +1 -1
- package/lib/types/dsh-adapter/command-trees.d.ts +27 -0
- package/lib/types/dsh-adapter/command-trees.d.ts.map +1 -0
- package/lib/types/dsh-adapter/command-trees.js +42 -0
- package/lib/types/dsh-adapter/compat/index.d.ts +22 -0
- package/lib/types/dsh-adapter/compat/index.d.ts.map +1 -0
- package/lib/types/{compat → dsh-adapter/compat}/index.js +7 -4
- package/lib/types/dsh-adapter/compat/sessionLog.d.ts +86 -0
- package/lib/types/dsh-adapter/compat/sessionLog.d.ts.map +1 -0
- package/lib/types/dsh-adapter/compat/sessionLog.js +347 -0
- package/lib/types/dsh-adapter/contract.d.ts +20 -0
- package/lib/types/dsh-adapter/contract.d.ts.map +1 -0
- package/lib/types/dsh-adapter/contract.js +109 -0
- package/lib/types/dsh-adapter/index.d.ts +80 -0
- package/lib/types/dsh-adapter/index.d.ts.map +1 -0
- package/lib/types/dsh-adapter/index.js +45 -0
- package/lib/types/dsh-adapter/invariant.d.ts.map +1 -0
- package/lib/types/dsh-adapter/packaged-skills.d.ts.map +1 -0
- package/lib/types/{plugin.d.ts → dsh-adapter/plugin.d.ts} +17 -0
- package/lib/types/dsh-adapter/plugin.d.ts.map +1 -0
- package/lib/types/{plugin.js → dsh-adapter/plugin.js} +294 -80
- package/lib/types/dsh-adapter/presets.d.ts.map +1 -0
- package/lib/types/dsh-adapter/providerWizard.d.ts +91 -0
- package/lib/types/dsh-adapter/providerWizard.d.ts.map +1 -0
- package/lib/types/dsh-adapter/providerWizard.js +332 -0
- package/lib/types/{questions.d.ts → dsh-adapter/questions.d.ts} +7 -2
- package/lib/types/dsh-adapter/questions.d.ts.map +1 -0
- package/lib/types/{questions.js → dsh-adapter/questions.js} +15 -7
- package/lib/types/dsh-adapter/sideQuestion.d.ts +38 -0
- package/lib/types/dsh-adapter/sideQuestion.d.ts.map +1 -0
- package/lib/types/dsh-adapter/sideQuestion.js +69 -0
- package/lib/types/dsh-adapter/trajectory/aggregate.d.ts +46 -0
- package/lib/types/dsh-adapter/trajectory/aggregate.d.ts.map +1 -0
- package/lib/types/dsh-adapter/trajectory/aggregate.js +207 -0
- package/lib/types/dsh-adapter/trajectory/guards.d.ts +177 -0
- package/lib/types/dsh-adapter/trajectory/guards.d.ts.map +1 -0
- package/lib/types/dsh-adapter/trajectory/guards.js +235 -0
- package/lib/types/dsh-adapter/trajectory/index.d.ts +16 -0
- package/lib/types/dsh-adapter/trajectory/index.d.ts.map +1 -0
- package/lib/types/dsh-adapter/trajectory/index.js +15 -0
- package/lib/types/dsh-adapter/trajectory/inspect.d.ts +40 -0
- package/lib/types/dsh-adapter/trajectory/inspect.d.ts.map +1 -0
- package/lib/types/dsh-adapter/trajectory/inspect.js +160 -0
- package/lib/types/dsh-adapter/trajectory/projection.d.ts +128 -0
- package/lib/types/dsh-adapter/trajectory/projection.d.ts.map +1 -0
- package/lib/types/dsh-adapter/trajectory/projection.js +653 -0
- package/lib/types/dsh-adapter/trajectory/types.d.ts +232 -0
- package/lib/types/dsh-adapter/trajectory/types.d.ts.map +1 -0
- package/lib/types/dsh-adapter/trajectory/types.js +70 -0
- package/lib/types/dsh-adapter/trajectory/wave.d.ts +45 -0
- package/lib/types/dsh-adapter/trajectory/wave.d.ts.map +1 -0
- package/lib/types/dsh-adapter/trajectory/wave.js +210 -0
- package/lib/types/dsh-adapter/types.d.ts +23 -0
- package/lib/types/dsh-adapter/types.d.ts.map +1 -0
- package/lib/types/dsh-adapter/types.js +1 -0
- package/lib/types/dsh-adapter/workspace.d.ts +22 -0
- package/lib/types/dsh-adapter/workspace.d.ts.map +1 -0
- package/lib/types/dsh-adapter/workspace.js +16 -0
- package/lib/types/dsh-adapter/workspaces.d.ts +118 -0
- package/lib/types/dsh-adapter/workspaces.d.ts.map +1 -0
- package/lib/types/dsh-adapter/workspaces.js +290 -0
- package/lib/types/effortPrefs.d.ts +1 -1
- package/lib/types/effortPrefs.js +3 -3
- package/lib/types/history.js +2 -2
- package/lib/types/hooks/useBlink.d.ts +1 -1
- package/lib/types/hooks/useBlink.js +1 -1
- package/lib/types/i18n.d.ts +981 -36
- package/lib/types/i18n.d.ts.map +1 -1
- package/lib/types/i18n.js +308 -30
- package/lib/types/index.d.ts +1 -69
- package/lib/types/index.d.ts.map +1 -1
- package/lib/types/index.js +3 -31
- package/lib/types/ink/components/App.d.ts.map +1 -1
- package/lib/types/ink/components/App.js +33 -19
- package/lib/types/ink/dom.d.ts +15 -0
- package/lib/types/ink/dom.d.ts.map +1 -1
- package/lib/types/ink/dom.js +32 -0
- package/lib/types/ink/hooks/use-input.d.ts.map +1 -1
- package/lib/types/ink/hooks/use-input.js +8 -0
- package/lib/types/ink/hooks/use-terminal-size.d.ts +1 -1
- package/lib/types/ink/hooks/use-terminal-size.js +1 -1
- package/lib/types/ink/ink.d.ts.map +1 -1
- package/lib/types/ink/ink.js +109 -28
- package/lib/types/ink/input-suppression.d.ts +20 -0
- package/lib/types/ink/input-suppression.d.ts.map +1 -0
- package/lib/types/ink/input-suppression.js +26 -0
- package/lib/types/ink/log-update.js +21 -6
- package/lib/types/ink/parse-keypress.d.ts +31 -0
- package/lib/types/ink/parse-keypress.d.ts.map +1 -1
- package/lib/types/ink/parse-keypress.js +442 -8
- package/lib/types/ink/terminal-querier.d.ts +5 -1
- package/lib/types/ink/terminal-querier.d.ts.map +1 -1
- package/lib/types/ink/terminal-querier.js +27 -3
- package/lib/types/ink/terminal.d.ts +18 -0
- package/lib/types/ink/terminal.d.ts.map +1 -1
- package/lib/types/ink/terminal.js +32 -4
- package/lib/types/ink/termio/csi.d.ts +10 -0
- package/lib/types/ink/termio/csi.d.ts.map +1 -1
- package/lib/types/ink/termio/csi.js +20 -0
- package/lib/types/ink/termio/tokenize.js +10 -0
- package/lib/types/modelPrefs.d.ts +1 -1
- package/lib/types/modelPrefs.js +3 -3
- package/lib/types/presetPrefs.d.ts +1 -1
- package/lib/types/presetPrefs.js +3 -3
- package/lib/types/screens/Chat.d.ts +20 -4
- package/lib/types/screens/Chat.d.ts.map +1 -1
- package/lib/types/screens/Chat.js +655 -55
- package/lib/types/screens/StatusLine.d.ts +17 -2
- package/lib/types/screens/StatusLine.d.ts.map +1 -1
- package/lib/types/screens/StatusLine.js +12 -4
- package/lib/types/screens/TrajectoryScene.d.ts +16 -0
- package/lib/types/screens/TrajectoryScene.d.ts.map +1 -0
- package/lib/types/screens/TrajectoryScene.js +305 -0
- package/lib/types/sessionHistory.d.ts +9 -1
- package/lib/types/sessionHistory.d.ts.map +1 -1
- package/lib/types/sessionHistory.js +56 -16
- package/lib/types/sessionModes.d.ts +29 -0
- package/lib/types/sessionModes.d.ts.map +1 -0
- package/lib/types/sessionModes.js +45 -0
- package/lib/types/theme.d.ts +27 -3
- package/lib/types/theme.d.ts.map +1 -1
- package/lib/types/theme.js +48 -4
- package/lib/types/themePrefs.d.ts +3 -3
- package/lib/types/themePrefs.js +5 -5
- package/lib/types/trajectory/format.d.ts +100 -0
- package/lib/types/trajectory/format.d.ts.map +1 -0
- package/lib/types/trajectory/format.js +213 -0
- package/lib/types/trajectory/motion.d.ts +99 -0
- package/lib/types/trajectory/motion.d.ts.map +1 -0
- package/lib/types/trajectory/motion.js +143 -0
- package/lib/types/trajectory/query.d.ts +83 -0
- package/lib/types/trajectory/query.d.ts.map +1 -0
- package/lib/types/trajectory/query.js +187 -0
- package/lib/types/trajectoryPrefs.d.ts +36 -0
- package/lib/types/trajectoryPrefs.d.ts.map +1 -0
- package/lib/types/trajectoryPrefs.js +65 -0
- package/lib/types/update.d.ts +3 -3
- package/lib/types/update.d.ts.map +1 -1
- package/lib/types/update.js +18 -7
- package/lib/types/utils/clipboard.d.ts +101 -29
- package/lib/types/utils/clipboard.d.ts.map +1 -1
- package/lib/types/utils/clipboard.js +533 -55
- package/lib/types/utils/debug.d.ts +1 -1
- package/lib/types/utils/debug.js +2 -2
- package/lib/types/utils/execFileNoThrow.d.ts.map +1 -1
- package/lib/types/utils/execFileNoThrow.js +16 -6
- package/lib/types/utils/externalEditor.d.ts +115 -0
- package/lib/types/utils/externalEditor.d.ts.map +1 -0
- package/lib/types/utils/externalEditor.js +270 -0
- package/lib/types/utils/fullscreen.d.ts +2 -2
- package/lib/types/utils/fullscreen.js +3 -3
- package/lib/types/utils/loaded-context.d.ts +1 -1
- package/lib/types/utils/loaded-context.d.ts.map +1 -1
- package/lib/types/utils/modifiers.d.ts +24 -0
- package/lib/types/utils/modifiers.d.ts.map +1 -1
- package/lib/types/utils/modifiers.js +27 -0
- package/lib/types/utils/paths.d.ts +45 -0
- package/lib/types/utils/paths.d.ts.map +1 -0
- package/lib/types/utils/paths.js +69 -0
- package/lib/types/utils/shellQuote.d.ts +14 -0
- package/lib/types/utils/shellQuote.d.ts.map +1 -0
- package/lib/types/utils/shellQuote.js +39 -0
- package/lib/types/utils/workspaceRoot.d.ts +21 -0
- package/lib/types/utils/workspaceRoot.d.ts.map +1 -0
- package/lib/types/utils/workspaceRoot.js +47 -0
- package/lib/types/workspaces.d.ts +3 -0
- package/lib/types/workspaces.d.ts.map +1 -0
- package/lib/types/workspaces.js +4 -0
- package/package.json +31 -10
- package/lib/invariant.js +0 -28
- package/lib/types/approvals.d.ts.map +0 -1
- package/lib/types/channel.d.ts.map +0 -1
- package/lib/types/childStderr.d.ts.map +0 -1
- package/lib/types/compat/index.d.ts +0 -20
- package/lib/types/compat/index.d.ts.map +0 -1
- package/lib/types/compat/sessionLog.d.ts +0 -40
- package/lib/types/compat/sessionLog.d.ts.map +0 -1
- package/lib/types/compat/sessionLog.js +0 -226
- package/lib/types/invariant.d.ts.map +0 -1
- package/lib/types/packaged-skills.d.ts.map +0 -1
- package/lib/types/plugin.d.ts.map +0 -1
- package/lib/types/presets.d.ts.map +0 -1
- package/lib/types/questions.d.ts.map +0 -1
- /package/lib/types/{approvals.d.ts → dsh-adapter/approvals.d.ts} +0 -0
- /package/lib/types/{approvals.js → dsh-adapter/approvals.js} +0 -0
- /package/lib/types/{childStderr.d.ts → dsh-adapter/childStderr.d.ts} +0 -0
- /package/lib/types/{invariant.d.ts → dsh-adapter/invariant.d.ts} +0 -0
- /package/lib/types/{invariant.js → dsh-adapter/invariant.js} +0 -0
- /package/lib/types/{packaged-skills.d.ts → dsh-adapter/packaged-skills.d.ts} +0 -0
- /package/lib/types/{packaged-skills.js → dsh-adapter/packaged-skills.js} +0 -0
- /package/lib/types/{presets.d.ts → dsh-adapter/presets.d.ts} +0 -0
- /package/lib/types/{presets.js → dsh-adapter/presets.js} +0 -0
package/lib/types/i18n.d.ts
CHANGED
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Resolution order mirrors the `/theme` mechanism (see themePrefs.ts):
|
|
6
6
|
*
|
|
7
|
-
* 1. `
|
|
7
|
+
* 1. `DSH_TUI_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-tui/lang.json`
|
|
10
10
|
* 4. the OS locale guess (`LC_ALL` / `LC_MESSAGES` / `LANG`)
|
|
11
11
|
* 5. `zh` (the original hard-coded language)
|
|
12
12
|
*
|
|
@@ -28,12 +28,12 @@ declare const dict: {
|
|
|
28
28
|
readonly en: "Indicator switched: {{name}} (saved)";
|
|
29
29
|
};
|
|
30
30
|
readonly 'activity-pref-write-failed': {
|
|
31
|
-
readonly zh: "无法写入 ~/.dsh-
|
|
32
|
-
readonly en: "Cannot write ~/.dsh-
|
|
31
|
+
readonly zh: "无法写入 ~/.dsh-tui/working-activity.json,切换未保存";
|
|
32
|
+
readonly en: "Cannot write ~/.dsh-tui/working-activity.json, switch not saved";
|
|
33
33
|
};
|
|
34
34
|
readonly 'model-pref-write-failed': {
|
|
35
|
-
readonly zh: "无法写入 ~/.dsh-
|
|
36
|
-
readonly en: "Cannot write ~/.dsh-
|
|
35
|
+
readonly zh: "无法写入 ~/.dsh-tui/model.json,模型选择不会保存到重启后";
|
|
36
|
+
readonly en: "Cannot write ~/.dsh-tui/model.json, the model choice will not survive a restart";
|
|
37
37
|
};
|
|
38
38
|
readonly 'model-route-invalid': {
|
|
39
39
|
readonly zh: "持久化的模型路由 {{provider}}/{{model}} 不在该 provider 的模型列表中,已整体回退到 {{fallback}}";
|
|
@@ -64,8 +64,8 @@ declare const dict: {
|
|
|
64
64
|
readonly en: "Current preset already: {{id}}";
|
|
65
65
|
};
|
|
66
66
|
readonly 'preset-pref-write-failed': {
|
|
67
|
-
readonly zh: "无法写入 ~/.dsh-
|
|
68
|
-
readonly en: "Cannot write ~/.dsh-
|
|
67
|
+
readonly zh: "无法写入 ~/.dsh-tui/agent-preset.json,选择未保存";
|
|
68
|
+
readonly en: "Cannot write ~/.dsh-tui/agent-preset.json, selection not saved";
|
|
69
69
|
};
|
|
70
70
|
readonly 'preset-locked-saved-default': {
|
|
71
71
|
readonly zh: "会话已开始,preset 已锁定(当前:{{current}})· 已保存为默认:{{id}}(/new 或下次启动生效)";
|
|
@@ -227,6 +227,10 @@ declare const dict: {
|
|
|
227
227
|
readonly zh: "(未初始化)";
|
|
228
228
|
readonly en: "(not initialized)";
|
|
229
229
|
};
|
|
230
|
+
readonly 'doctor-legacy-dir': {
|
|
231
|
+
readonly zh: "旧数据目录: ~/.dsh-tui 仍存在(已迁移到 ~/.dsh-tui,确认无误后可自行删除)";
|
|
232
|
+
readonly en: "Legacy data directory: ~/.dsh-tui still exists (migrated to ~/.dsh-tui; delete it yourself once satisfied)";
|
|
233
|
+
};
|
|
230
234
|
readonly 'subagent-not-mounted': {
|
|
231
235
|
readonly zh: "子代理服务未挂载(leaf 未启用 subagent)";
|
|
232
236
|
readonly en: "Subagent service not mounted (leaf has no subagent)";
|
|
@@ -263,6 +267,110 @@ declare const dict: {
|
|
|
263
267
|
readonly zh: "Agent preset 已切换:{{preset}}";
|
|
264
268
|
readonly en: "Agent preset switched: {{preset}}";
|
|
265
269
|
};
|
|
270
|
+
readonly 'context-low-warning': {
|
|
271
|
+
readonly zh: "上下文即将耗尽(剩余 {{percent}}%)· 运行 /clear 或新建会话";
|
|
272
|
+
readonly en: "Context low ({{percent}}% remaining) · Run /clear or start a new session";
|
|
273
|
+
};
|
|
274
|
+
readonly 'rewind-unavailable': {
|
|
275
|
+
readonly zh: "回退不可用——会话服务未加载";
|
|
276
|
+
readonly en: "Rewind unavailable — session services not loaded";
|
|
277
|
+
};
|
|
278
|
+
readonly 'rewind-settling': {
|
|
279
|
+
readonly zh: "无法回退——回合仍在收尾,请稍候再试";
|
|
280
|
+
readonly en: "Cannot rewind — the turn is still settling, try again in a moment";
|
|
281
|
+
};
|
|
282
|
+
readonly 'rewind-fork-failed': {
|
|
283
|
+
readonly zh: "无法回退到该处 · {{err}}";
|
|
284
|
+
readonly en: "Cannot rewind to this point · {{err}}";
|
|
285
|
+
};
|
|
286
|
+
readonly 'rewind-create-failed': {
|
|
287
|
+
readonly zh: "回退失败——无法创建替代会话";
|
|
288
|
+
readonly en: "Rewind failed — could not create the replacement session";
|
|
289
|
+
};
|
|
290
|
+
readonly 'rewind-attach-failed': {
|
|
291
|
+
readonly zh: "已回退,但工作区挂载失败 · {{err}}";
|
|
292
|
+
readonly en: "Session rewound, but workspace attachment failed · {{err}}";
|
|
293
|
+
};
|
|
294
|
+
readonly 'resume-while-working': {
|
|
295
|
+
readonly zh: "回合运行中,无法恢复会话";
|
|
296
|
+
readonly en: "Cannot resume while a turn is running";
|
|
297
|
+
};
|
|
298
|
+
readonly 'resume-unavailable': {
|
|
299
|
+
readonly zh: "恢复不可用——agents 服务未加载";
|
|
300
|
+
readonly en: "Resume unavailable — agents service not loaded";
|
|
301
|
+
};
|
|
302
|
+
readonly 'resume-failed': {
|
|
303
|
+
readonly zh: "恢复失败 · {{err}}";
|
|
304
|
+
readonly en: "Resume failed · {{err}}";
|
|
305
|
+
};
|
|
306
|
+
readonly 'resume-attach-failed': {
|
|
307
|
+
readonly zh: "已恢复会话,但工作区挂载失败 · {{err}}";
|
|
308
|
+
readonly en: "Session resumed, but workspace attachment failed · {{err}}";
|
|
309
|
+
};
|
|
310
|
+
readonly 'new-session-while-working': {
|
|
311
|
+
readonly zh: "回合运行中,无法新建会话";
|
|
312
|
+
readonly en: "Cannot start a new session while a turn is running";
|
|
313
|
+
};
|
|
314
|
+
readonly 'new-session-unavailable': {
|
|
315
|
+
readonly zh: "新建会话不可用——agents 服务未加载";
|
|
316
|
+
readonly en: "New session unavailable — agents service not loaded";
|
|
317
|
+
};
|
|
318
|
+
readonly 'new-session-failed': {
|
|
319
|
+
readonly zh: "新建会话失败 · {{err}}";
|
|
320
|
+
readonly en: "New session failed · {{err}}";
|
|
321
|
+
};
|
|
322
|
+
readonly 'new-session-attach-failed': {
|
|
323
|
+
readonly zh: "会话已创建,但工作区挂载失败 · {{err}}";
|
|
324
|
+
readonly en: "Session created, but workspace attachment failed · {{err}}";
|
|
325
|
+
};
|
|
326
|
+
readonly 'model-switch-while-working': {
|
|
327
|
+
readonly zh: "回合运行中,无法切换模型";
|
|
328
|
+
readonly en: "Cannot switch models while a turn is running";
|
|
329
|
+
};
|
|
330
|
+
readonly 'model-switch-unavailable': {
|
|
331
|
+
readonly zh: "模型切换不可用——会话服务未加载";
|
|
332
|
+
readonly en: "Model switch unavailable — session services not loaded";
|
|
333
|
+
};
|
|
334
|
+
readonly 'model-switch-fork-failed': {
|
|
335
|
+
readonly zh: "无法切换模型 · {{err}}";
|
|
336
|
+
readonly en: "Cannot switch models · {{err}}";
|
|
337
|
+
};
|
|
338
|
+
readonly 'model-switch-failed': {
|
|
339
|
+
readonly zh: "模型切换失败 · {{err}}";
|
|
340
|
+
readonly en: "Model switch failed · {{err}}";
|
|
341
|
+
};
|
|
342
|
+
readonly 'model-switch-attach-failed': {
|
|
343
|
+
readonly zh: "模型已切换,但工作区挂载失败 · {{err}}";
|
|
344
|
+
readonly en: "Model switched, but workspace attachment failed · {{err}}";
|
|
345
|
+
};
|
|
346
|
+
readonly 'compact-unavailable': {
|
|
347
|
+
readonly zh: "压缩不可用——当前 leaf 没有压缩服务";
|
|
348
|
+
readonly en: "Compaction unavailable · no compaction service in this leaf";
|
|
349
|
+
};
|
|
350
|
+
readonly 'compact-while-working': {
|
|
351
|
+
readonly zh: "回合运行中,无法压缩会话";
|
|
352
|
+
readonly en: "Cannot compact while a turn is running";
|
|
353
|
+
};
|
|
354
|
+
readonly 'compact-working': {
|
|
355
|
+
readonly zh: "正在压缩会话…";
|
|
356
|
+
readonly en: "Compacting conversation…";
|
|
357
|
+
};
|
|
358
|
+
readonly 'compact-done': {
|
|
359
|
+
readonly zh: "会话已压缩";
|
|
360
|
+
readonly en: "Conversation compacted";
|
|
361
|
+
};
|
|
362
|
+
readonly 'compact-nothing': {
|
|
363
|
+
readonly zh: "没有可压缩的内容";
|
|
364
|
+
readonly en: "Nothing to compact";
|
|
365
|
+
};
|
|
366
|
+
readonly 'compact-failed': {
|
|
367
|
+
readonly zh: "压缩失败 · {{err}}";
|
|
368
|
+
readonly en: "Compaction failed · {{err}}";
|
|
369
|
+
};
|
|
370
|
+
readonly 'turn-failed': {
|
|
371
|
+
readonly zh: "回合出错{{detail}}";
|
|
372
|
+
readonly en: "Turn error{{detail}}";
|
|
373
|
+
};
|
|
266
374
|
readonly 'questionnaire-answered': {
|
|
267
375
|
readonly zh: "📋 问卷已答 · {{total}} 题";
|
|
268
376
|
readonly en: "📋 Questionnaire answered · {{total}} questions";
|
|
@@ -295,6 +403,10 @@ declare const dict: {
|
|
|
295
403
|
readonly zh: "工具 {{n}}";
|
|
296
404
|
readonly en: "Tools {{n}}";
|
|
297
405
|
};
|
|
406
|
+
readonly 'skill-unavailable': {
|
|
407
|
+
readonly zh: "技能 {{name}} 已不可用或未开放用户直调";
|
|
408
|
+
readonly en: "Skill {{name}} is gone or not user-invocable";
|
|
409
|
+
};
|
|
298
410
|
readonly 'skill-audit-prompt': {
|
|
299
411
|
readonly zh: "请使用 audit 技能对当前项目做一次全面的代码审计,找出安全、正确性与质量问题。";
|
|
300
412
|
readonly en: "Use the audit skill to do a thorough code audit of the current project, finding security, correctness and quality issues.";
|
|
@@ -344,8 +456,8 @@ declare const dict: {
|
|
|
344
456
|
readonly en: "Switch /activity (picker) or /activity frames <name>";
|
|
345
457
|
};
|
|
346
458
|
readonly 'activity-persist-hint': {
|
|
347
|
-
readonly zh: "持久化 ~/.dsh-
|
|
348
|
-
readonly en: "Persisted ~/.dsh-
|
|
459
|
+
readonly zh: "持久化 ~/.dsh-tui/working-activity.json(重启后仍生效)";
|
|
460
|
+
readonly en: "Persisted ~/.dsh-tui/working-activity.json (survives restart)";
|
|
349
461
|
};
|
|
350
462
|
readonly 'activity-current-direct': {
|
|
351
463
|
readonly zh: "当前预设:{{name}} · /activity frames <名> 直接切换:";
|
|
@@ -376,8 +488,8 @@ declare const dict: {
|
|
|
376
488
|
readonly en: "Switch /preset (picker) or /preset <id>";
|
|
377
489
|
};
|
|
378
490
|
readonly 'preset-persist-hint': {
|
|
379
|
-
readonly zh: "持久化 ~/.dsh-
|
|
380
|
-
readonly en: "Persisted ~/.dsh-
|
|
491
|
+
readonly zh: "持久化 ~/.dsh-tui/agent-preset.json(重启后仍生效;cordis.yml preset 优先)";
|
|
492
|
+
readonly en: "Persisted ~/.dsh-tui/agent-preset.json (survives restart; cordis.yml preset wins)";
|
|
381
493
|
};
|
|
382
494
|
readonly 'preset-lock-hint': {
|
|
383
495
|
readonly zh: "锁定规则 已开始的会话不可切换(官方 blank-only 规则)";
|
|
@@ -400,12 +512,16 @@ declare const dict: {
|
|
|
400
512
|
readonly en: "Switch /theme (picker) or /theme <name>";
|
|
401
513
|
};
|
|
402
514
|
readonly 'theme-persist-hint': {
|
|
403
|
-
readonly zh: "持久化 ~/.dsh-
|
|
404
|
-
readonly en: "Persisted ~/.dsh-
|
|
515
|
+
readonly zh: "持久化 ~/.dsh-tui/theme.json(重启后仍生效;DSH_TUI_THEME 优先)";
|
|
516
|
+
readonly en: "Persisted ~/.dsh-tui/theme.json (survives restart; DSH_TUI_THEME wins)";
|
|
405
517
|
};
|
|
406
518
|
readonly 'theme-custom-hint': {
|
|
407
|
-
readonly zh: "自定义 ~/.dsh-
|
|
408
|
-
readonly en: "Custom ~/.dsh-
|
|
519
|
+
readonly zh: "自定义 ~/.dsh-tui/themes/<名字>.json(见 README「自定义主题」)";
|
|
520
|
+
readonly en: "Custom ~/.dsh-tui/themes/<name>.json (see README \"Custom themes\")";
|
|
521
|
+
};
|
|
522
|
+
readonly 'theme-auto-resolved': {
|
|
523
|
+
readonly zh: "自动解析 当前为 {{name}}(跟随终端背景)";
|
|
524
|
+
readonly en: "Auto-resolved currently {{name}} (follows terminal background)";
|
|
409
525
|
};
|
|
410
526
|
readonly 'theme-switched-saved': {
|
|
411
527
|
readonly zh: "主题已切换:{{name}}(已保存)";
|
|
@@ -439,6 +555,94 @@ declare const dict: {
|
|
|
439
555
|
readonly zh: "目录 {{cwd}}";
|
|
440
556
|
readonly en: "Directory {{cwd}}";
|
|
441
557
|
};
|
|
558
|
+
readonly 'workspace-picker-title': {
|
|
559
|
+
readonly zh: "工作区";
|
|
560
|
+
readonly en: "Workspace";
|
|
561
|
+
};
|
|
562
|
+
readonly 'workspace-picker-hint': {
|
|
563
|
+
readonly zh: "**Enter** 切换并新建会话 · Esc 退出 · 也可输入 /workspace open <路径或 URI>";
|
|
564
|
+
readonly en: "**Enter** switch and start a new session · Esc to exit · or type /workspace open <path-or-URI>";
|
|
565
|
+
};
|
|
566
|
+
readonly 'workspace-none': {
|
|
567
|
+
readonly zh: "没有可用工作区";
|
|
568
|
+
readonly en: "No workspaces available";
|
|
569
|
+
};
|
|
570
|
+
readonly 'workspace-list-failed': {
|
|
571
|
+
readonly zh: "读取工作区失败 · {{err}}";
|
|
572
|
+
readonly en: "Failed to list workspaces · {{err}}";
|
|
573
|
+
};
|
|
574
|
+
readonly 'workspace-uri-invalid': {
|
|
575
|
+
readonly zh: "无法解析工作区目标:{{uri}}";
|
|
576
|
+
readonly en: "Cannot resolve workspace target: {{uri}}";
|
|
577
|
+
};
|
|
578
|
+
readonly 'workspace-uri-failed': {
|
|
579
|
+
readonly zh: "加载工作区失败 · {{err}}";
|
|
580
|
+
readonly en: "Failed to load workspace · {{err}}";
|
|
581
|
+
};
|
|
582
|
+
readonly 'workspace-switch-working': {
|
|
583
|
+
readonly zh: "Agent 运行中,无法切换工作区";
|
|
584
|
+
readonly en: "Cannot switch workspaces while the agent is running";
|
|
585
|
+
};
|
|
586
|
+
readonly 'workspace-open-invalid': {
|
|
587
|
+
readonly zh: "无法打开工作区:{target} 不是存在的目录";
|
|
588
|
+
readonly en: "Cannot open workspace: {target} is not an existing directory";
|
|
589
|
+
};
|
|
590
|
+
readonly 'workspace-switched': {
|
|
591
|
+
readonly zh: "已切换工作区:{{target}}";
|
|
592
|
+
readonly en: "Workspace switched: {{target}}";
|
|
593
|
+
};
|
|
594
|
+
readonly 'workspace-flow-hint': {
|
|
595
|
+
readonly zh: "**Enter** 选择 · Esc 退出";
|
|
596
|
+
readonly en: "**Enter** select · Esc to exit";
|
|
597
|
+
};
|
|
598
|
+
readonly 'workspace-flow-edit-hint': {
|
|
599
|
+
readonly zh: "**Enter** 选择当前目录 · Tab 手动输入路径 · Esc 退出";
|
|
600
|
+
readonly en: "**Enter** select current directory · Tab enter a path · Esc to exit";
|
|
601
|
+
};
|
|
602
|
+
readonly 'workspace-flow-input-hint': {
|
|
603
|
+
readonly zh: "输入绝对路径 · **Enter** 读取目录 · Esc 返回";
|
|
604
|
+
readonly en: "Enter an absolute path · **Enter** load directory · Esc back";
|
|
605
|
+
};
|
|
606
|
+
readonly 'workspace-flow-input-empty': {
|
|
607
|
+
readonly zh: "目录路径不能为空";
|
|
608
|
+
readonly en: "Directory path cannot be empty";
|
|
609
|
+
};
|
|
610
|
+
readonly 'workspace-flow-loading': {
|
|
611
|
+
readonly zh: "正在连接并读取目录… · Esc 关闭";
|
|
612
|
+
readonly en: "Connecting and loading directories… · Esc to close";
|
|
613
|
+
};
|
|
614
|
+
readonly 'workspace-command-usage': {
|
|
615
|
+
readonly zh: "用法:/workspace resume | rename <名称> | open <路径或 URI>{{commands}}";
|
|
616
|
+
readonly en: "Usage: /workspace resume | rename <name> | open <path-or-URI>{{commands}}";
|
|
617
|
+
};
|
|
618
|
+
readonly 'workspace-open-usage': {
|
|
619
|
+
readonly zh: "用法:/workspace open <路径或 URI>";
|
|
620
|
+
readonly en: "Usage: /workspace open <path-or-URI>";
|
|
621
|
+
};
|
|
622
|
+
readonly 'workspace-rename-usage': {
|
|
623
|
+
readonly zh: "用法:/workspace rename <名称>";
|
|
624
|
+
readonly en: "Usage: /workspace rename <name>";
|
|
625
|
+
};
|
|
626
|
+
readonly 'workspace-command-unknown': {
|
|
627
|
+
readonly zh: "未知的 workspace 子命令:{{command}}";
|
|
628
|
+
readonly en: "Unknown workspace subcommand: {{command}}";
|
|
629
|
+
};
|
|
630
|
+
readonly 'workspace-command-empty': {
|
|
631
|
+
readonly zh: "该 workspace 操作没有可选目标";
|
|
632
|
+
readonly en: "This workspace action has no available targets";
|
|
633
|
+
};
|
|
634
|
+
readonly 'workspace-command-failed': {
|
|
635
|
+
readonly zh: "workspace 操作失败 · {{err}}";
|
|
636
|
+
readonly en: "Workspace action failed · {{err}}";
|
|
637
|
+
};
|
|
638
|
+
readonly 'workspace-renamed': {
|
|
639
|
+
readonly zh: "工作区已重命名:{{title}}";
|
|
640
|
+
readonly en: "Workspace renamed: {{title}}";
|
|
641
|
+
};
|
|
642
|
+
readonly 'workspace-rename-failed': {
|
|
643
|
+
readonly zh: "工作区重命名失败 · {{err}}";
|
|
644
|
+
readonly en: "Failed to rename workspace · {{err}}";
|
|
645
|
+
};
|
|
442
646
|
readonly 'cost-cache-rate': {
|
|
443
647
|
readonly zh: "缓存率 {{rate}}% · {{read}} 读 / {{write}} 写";
|
|
444
648
|
readonly en: "Cache rate {{rate}}% · {{read}} read / {{write}} write";
|
|
@@ -524,8 +728,12 @@ declare const dict: {
|
|
|
524
728
|
readonly en: "DSH permission policy is set by fs-policy / bash-sandbox config (current leaf: read/write in workspace, writes need a prior read).";
|
|
525
729
|
};
|
|
526
730
|
readonly 'permissions-approval-hint': {
|
|
527
|
-
readonly zh: "
|
|
528
|
-
readonly en: "
|
|
731
|
+
readonly zh: "审批通道已挂载:命令申请权限提升(sandbox_permissions)时弹出审批条,Yes 放行一次、No / Esc 拒绝。";
|
|
732
|
+
readonly en: "The approval channel is mounted: sandbox escalations (sandbox_permissions) raise an approval bar — Yes allows once, No / Esc rejects.";
|
|
733
|
+
};
|
|
734
|
+
readonly 'permissions-preset-hint': {
|
|
735
|
+
readonly zh: "/permission 可查看与切换权限预设(read-only / workspace-write / danger-full-access)。";
|
|
736
|
+
readonly en: "/permission shows and switches permission presets (read-only / workspace-write / danger-full-access).";
|
|
529
737
|
};
|
|
530
738
|
readonly 'permissions-root-hint': {
|
|
531
739
|
readonly zh: "当前文件系统策略以工作目录为根:{{cwd}}";
|
|
@@ -584,21 +792,85 @@ declare const dict: {
|
|
|
584
792
|
readonly en: "Recommended: Windows Terminal (≥110 columns, monospace, TrueColor).";
|
|
585
793
|
};
|
|
586
794
|
readonly 'terminal-paste-hint': {
|
|
587
|
-
readonly zh: "{{mod}}V
|
|
588
|
-
readonly en: "{{mod}}V pastes text
|
|
795
|
+
readonly zh: "{{mod}}V 粘贴文本、文件路径或图片;Ctrl+Shift+V 终端原生粘贴;右键粘贴同样可用。";
|
|
796
|
+
readonly en: "{{mod}}V pastes text, file paths, or images; Ctrl+Shift+V is native terminal paste; right-click paste also works.";
|
|
589
797
|
};
|
|
590
798
|
readonly 'connect-none': {
|
|
591
799
|
readonly zh: "DSH 暂无远程连接机制(CC 的 /connect 对应能力未适配)。";
|
|
592
800
|
readonly en: "DSH has no remote connection mechanism (CC's /connect equivalent is not adapted).";
|
|
593
801
|
};
|
|
594
802
|
readonly 'theme-switch-failed': {
|
|
595
|
-
readonly zh: "主题「{{name}}」切换失败(无法写入 ~/.dsh-
|
|
596
|
-
readonly en: "Theme \"{{name}}\" switch failed (cannot write ~/.dsh-
|
|
803
|
+
readonly zh: "主题「{{name}}」切换失败(无法写入 ~/.dsh-tui/theme.json)";
|
|
804
|
+
readonly en: "Theme \"{{name}}\" switch failed (cannot write ~/.dsh-tui/theme.json)";
|
|
597
805
|
};
|
|
598
806
|
readonly 'interrupt-delivered': {
|
|
599
807
|
readonly zh: "已打断当前回合,{{n}} 条消息立即处理";
|
|
600
808
|
readonly en: "Interrupted current turn, {{n}} messages processed immediately";
|
|
601
809
|
};
|
|
810
|
+
readonly 'btw-usage': {
|
|
811
|
+
readonly zh: "用法:/btw <问题> —— 不打断当前对话的快速侧问";
|
|
812
|
+
readonly en: "Usage: /btw <question> — quick side question without interrupting the conversation";
|
|
813
|
+
};
|
|
814
|
+
readonly 'btw-answering': {
|
|
815
|
+
readonly zh: "思考中…";
|
|
816
|
+
readonly en: "Answering…";
|
|
817
|
+
};
|
|
818
|
+
readonly 'btw-hint-loading': {
|
|
819
|
+
readonly zh: "Esc 取消";
|
|
820
|
+
readonly en: "Esc cancel";
|
|
821
|
+
};
|
|
822
|
+
readonly 'btw-hint-done': {
|
|
823
|
+
readonly zh: "↑/↓ 滚动 · Space/Enter/Esc 关闭 · c 复制";
|
|
824
|
+
readonly en: "↑/↓ scroll · Space/Enter/Esc dismiss · c copy";
|
|
825
|
+
};
|
|
826
|
+
readonly 'btw-llm-unavailable': {
|
|
827
|
+
readonly zh: "侧问不可用(llm 服务未挂载)";
|
|
828
|
+
readonly en: "Side question unavailable (llm service not mounted)";
|
|
829
|
+
};
|
|
830
|
+
readonly 'exit-press-again': {
|
|
831
|
+
readonly zh: "再次按 Ctrl+C 退出";
|
|
832
|
+
readonly en: "Press Ctrl+C again to exit";
|
|
833
|
+
};
|
|
834
|
+
readonly 'new-session-started': {
|
|
835
|
+
readonly zh: "已新建会话";
|
|
836
|
+
readonly en: "New session started";
|
|
837
|
+
};
|
|
838
|
+
readonly 'command-not-found': {
|
|
839
|
+
readonly zh: "/{{name}}:没有这个命令";
|
|
840
|
+
readonly en: "/{{name}}: no such command";
|
|
841
|
+
};
|
|
842
|
+
readonly 'thinking-toggled': {
|
|
843
|
+
readonly zh: "思考模式:{{state}}";
|
|
844
|
+
readonly en: "Thinking {{state}}";
|
|
845
|
+
};
|
|
846
|
+
readonly 'thinking-on': {
|
|
847
|
+
readonly zh: "开启";
|
|
848
|
+
readonly en: "on";
|
|
849
|
+
};
|
|
850
|
+
readonly 'thinking-off': {
|
|
851
|
+
readonly zh: "关闭";
|
|
852
|
+
readonly en: "off";
|
|
853
|
+
};
|
|
854
|
+
readonly 'tokens-usage': {
|
|
855
|
+
readonly zh: "Tokens:{{in}} 输入 · {{out}} 输出";
|
|
856
|
+
readonly en: "Tokens: {{in}} in · {{out}} out";
|
|
857
|
+
};
|
|
858
|
+
readonly 'tokens-usage-context': {
|
|
859
|
+
readonly zh: "{{usage}} · 上下文 {{percent}}%";
|
|
860
|
+
readonly en: "{{usage}} · {{percent}}% of context";
|
|
861
|
+
};
|
|
862
|
+
readonly 'legacy-dir-migrated': {
|
|
863
|
+
readonly zh: "数据目录已从 ~/.dsh-tui 复制到 ~/.dsh-tui(旧目录保留,确认无误后可自行删除)";
|
|
864
|
+
readonly en: "Data directory copied from ~/.dsh-tui to ~/.dsh-tui (the old directory is kept; delete it yourself once satisfied)";
|
|
865
|
+
};
|
|
866
|
+
readonly 'legacy-env-renamed': {
|
|
867
|
+
readonly zh: "环境变量 {{old}} 已更名为 {{new}},旧名不再生效";
|
|
868
|
+
readonly en: "Environment variable {{old}} was renamed to {{new}}; the old name no longer takes effect";
|
|
869
|
+
};
|
|
870
|
+
readonly 'update-aborted-no-profile': {
|
|
871
|
+
readonly zh: "dsh-tui 更新中止:未解析到 dsh profile。";
|
|
872
|
+
readonly en: "dsh-tui update aborted: no dsh profile resolved.";
|
|
873
|
+
};
|
|
602
874
|
readonly 'activity-ctx-warn': {
|
|
603
875
|
readonly zh: "⚠ 上下文";
|
|
604
876
|
readonly en: "⚠ ctx ";
|
|
@@ -635,6 +907,38 @@ declare const dict: {
|
|
|
635
907
|
readonly zh: "推理强度 → {{name}}";
|
|
636
908
|
readonly en: "Reasoning effort → {{name}}";
|
|
637
909
|
};
|
|
910
|
+
readonly 'effort-invalid': {
|
|
911
|
+
readonly zh: "未知推理等级 {{id}}(当前模型可选:{{ids}})";
|
|
912
|
+
readonly en: "Unknown reasoning effort {{id}} (this model offers: {{ids}})";
|
|
913
|
+
};
|
|
914
|
+
readonly 'effort-current': {
|
|
915
|
+
readonly zh: "当前推理强度 {{name}}";
|
|
916
|
+
readonly en: "Current reasoning effort {{name}}";
|
|
917
|
+
};
|
|
918
|
+
readonly 'effort-usage': {
|
|
919
|
+
readonly zh: "用法:/effort(滑杆)| /effort <id> | /effort status";
|
|
920
|
+
readonly en: "Usage: /effort (slider) | /effort <id> | /effort status";
|
|
921
|
+
};
|
|
922
|
+
readonly 'mode-switched': {
|
|
923
|
+
readonly zh: "模式 → {{name}}";
|
|
924
|
+
readonly en: "Mode → {{name}}";
|
|
925
|
+
};
|
|
926
|
+
readonly 'mode-default': {
|
|
927
|
+
readonly zh: "默认";
|
|
928
|
+
readonly en: "default";
|
|
929
|
+
};
|
|
930
|
+
readonly 'mode-plan': {
|
|
931
|
+
readonly zh: "计划模式";
|
|
932
|
+
readonly en: "plan mode";
|
|
933
|
+
};
|
|
934
|
+
readonly 'mode-full': {
|
|
935
|
+
readonly zh: "完全访问";
|
|
936
|
+
readonly en: "full access";
|
|
937
|
+
};
|
|
938
|
+
readonly 'mode-plan-unavailable': {
|
|
939
|
+
readonly zh: "当前 preset 未注册 /plan 命令,无法切换计划模式";
|
|
940
|
+
readonly en: "The active preset does not register /plan; cannot toggle plan mode";
|
|
941
|
+
};
|
|
638
942
|
readonly 'logo-tagline': {
|
|
639
943
|
readonly zh: "探索未至之境!";
|
|
640
944
|
readonly en: "Explore the uncharted!";
|
|
@@ -651,6 +955,14 @@ declare const dict: {
|
|
|
651
955
|
readonly zh: "自动补全";
|
|
652
956
|
readonly en: "autocomplete";
|
|
653
957
|
};
|
|
958
|
+
readonly 'logo-tip-trace': {
|
|
959
|
+
readonly zh: "会话轨迹";
|
|
960
|
+
readonly en: "trajectory";
|
|
961
|
+
};
|
|
962
|
+
readonly 'logo-tip-prefix': {
|
|
963
|
+
readonly zh: "提示:";
|
|
964
|
+
readonly en: "Tip: ";
|
|
965
|
+
};
|
|
654
966
|
readonly 'input-sent-after-turn': {
|
|
655
967
|
readonly zh: "已发送,当前回合结束后处理";
|
|
656
968
|
readonly en: "Sent, processed after the current turn";
|
|
@@ -683,6 +995,34 @@ declare const dict: {
|
|
|
683
995
|
readonly zh: "剪贴板为空";
|
|
684
996
|
readonly en: "Clipboard is empty";
|
|
685
997
|
};
|
|
998
|
+
readonly 'input-editor-unavailable': {
|
|
999
|
+
readonly zh: "未找到可用编辑器,请设置 $EDITOR(或 $VISUAL)环境变量";
|
|
1000
|
+
readonly en: "No editor available — set the $EDITOR (or $VISUAL) environment variable";
|
|
1001
|
+
};
|
|
1002
|
+
readonly 'input-editor-failed': {
|
|
1003
|
+
readonly zh: "外部编辑器失败:{{name}}";
|
|
1004
|
+
readonly en: "External editor failed: {{name}}";
|
|
1005
|
+
};
|
|
1006
|
+
readonly 'input-clipboard-read-failed': {
|
|
1007
|
+
readonly zh: "读取剪贴板失败";
|
|
1008
|
+
readonly en: "Failed to read the clipboard";
|
|
1009
|
+
};
|
|
1010
|
+
readonly 'input-clipboard-unavailable': {
|
|
1011
|
+
readonly zh: "无法读取剪贴板:没有可用的 wl-paste / xclip / xsel(未安装或会话不可连接)";
|
|
1012
|
+
readonly en: "Cannot read clipboard: no usable wl-paste / xclip / xsel (not installed or session unreachable)";
|
|
1013
|
+
};
|
|
1014
|
+
readonly 'input-clipboard-image-saved': {
|
|
1015
|
+
readonly zh: "剪贴板图片已保存为临时文件,已插入路径";
|
|
1016
|
+
readonly en: "Clipboard image saved to a temp file; path inserted";
|
|
1017
|
+
};
|
|
1018
|
+
readonly 'input-image-pasted': {
|
|
1019
|
+
readonly zh: "已粘贴图片 {{token}}";
|
|
1020
|
+
readonly en: "Pasted image {{token}}";
|
|
1021
|
+
};
|
|
1022
|
+
readonly 'input-image-paste-failed': {
|
|
1023
|
+
readonly zh: "粘贴图片失败:{{err}}";
|
|
1024
|
+
readonly en: "Could not paste image: {{err}}";
|
|
1025
|
+
};
|
|
686
1026
|
readonly 'input-pending-steer-label': {
|
|
687
1027
|
readonly zh: "插话 · 下一步送达";
|
|
688
1028
|
readonly en: "Steer · delivered next";
|
|
@@ -743,14 +1083,298 @@ declare const dict: {
|
|
|
743
1083
|
readonly zh: "摆尾巴3";
|
|
744
1084
|
readonly en: "tail3";
|
|
745
1085
|
};
|
|
1086
|
+
readonly 'help-for-commands': {
|
|
1087
|
+
readonly zh: "/ 查看命令";
|
|
1088
|
+
readonly en: "/ for commands";
|
|
1089
|
+
};
|
|
1090
|
+
readonly 'help-this-help': {
|
|
1091
|
+
readonly zh: "? 查看本帮助";
|
|
1092
|
+
readonly en: "? for this help";
|
|
1093
|
+
};
|
|
1094
|
+
readonly 'help-verbose-output': {
|
|
1095
|
+
readonly zh: "{{mod}}o 详细输出";
|
|
1096
|
+
readonly en: "{{mod}}o for verbose output";
|
|
1097
|
+
};
|
|
1098
|
+
readonly 'help-toggle-context': {
|
|
1099
|
+
readonly zh: "{{mod}}t 切换上下文";
|
|
1100
|
+
readonly en: "{{mod}}t to toggle context";
|
|
1101
|
+
};
|
|
1102
|
+
readonly 'help-search-history': {
|
|
1103
|
+
readonly zh: "{{mod}}r 搜索历史";
|
|
1104
|
+
readonly en: "{{mod}}r to search history";
|
|
1105
|
+
};
|
|
1106
|
+
readonly 'help-interrupt': {
|
|
1107
|
+
readonly zh: "ctrl+c 打断";
|
|
1108
|
+
readonly en: "ctrl+c to interrupt";
|
|
1109
|
+
};
|
|
1110
|
+
readonly 'help-exit': {
|
|
1111
|
+
readonly zh: "ctrl+d 退出";
|
|
1112
|
+
readonly en: "ctrl+d to exit";
|
|
1113
|
+
};
|
|
1114
|
+
readonly 'help-redraw': {
|
|
1115
|
+
readonly zh: "{{mod}}l 重绘";
|
|
1116
|
+
readonly en: "{{mod}}l to redraw";
|
|
1117
|
+
};
|
|
1118
|
+
readonly 'help-clear-input': {
|
|
1119
|
+
readonly zh: "esc 清空输入";
|
|
1120
|
+
readonly en: "esc to clear input";
|
|
1121
|
+
};
|
|
1122
|
+
readonly 'help-history-nav': {
|
|
1123
|
+
readonly zh: "↑/↓ 历史";
|
|
1124
|
+
readonly en: "↑/↓ for history";
|
|
1125
|
+
};
|
|
1126
|
+
readonly 'help-move-cursor': {
|
|
1127
|
+
readonly zh: "←/→ 移动光标";
|
|
1128
|
+
readonly en: "←/→ to move cursor";
|
|
1129
|
+
};
|
|
1130
|
+
readonly 'help-word-jumps': {
|
|
1131
|
+
readonly zh: "{{mod}}←/→ 按词跳转";
|
|
1132
|
+
readonly en: "{{mod}}←/→ for word jumps";
|
|
1133
|
+
};
|
|
1134
|
+
readonly 'help-complete-command': {
|
|
1135
|
+
readonly zh: "tab 补全命令";
|
|
1136
|
+
readonly en: "tab to complete command";
|
|
1137
|
+
};
|
|
1138
|
+
readonly 'help-cycle-mode': {
|
|
1139
|
+
readonly zh: "shift+tab 切换模式";
|
|
1140
|
+
readonly en: "shift+tab to cycle mode";
|
|
1141
|
+
};
|
|
1142
|
+
readonly 'help-open-editor': {
|
|
1143
|
+
readonly zh: "ctrl+x 打开编辑器";
|
|
1144
|
+
readonly en: "ctrl+x to open editor";
|
|
1145
|
+
};
|
|
1146
|
+
readonly 'help-commands-title': {
|
|
1147
|
+
readonly zh: "命令:";
|
|
1148
|
+
readonly en: "commands:";
|
|
1149
|
+
};
|
|
1150
|
+
readonly 'interrupted-by-user': {
|
|
1151
|
+
readonly zh: "已打断 ";
|
|
1152
|
+
readonly en: "Interrupted ";
|
|
1153
|
+
};
|
|
1154
|
+
readonly 'interrupted-ask-next': {
|
|
1155
|
+
readonly zh: "· 接下来想让 DeepSeek 做什么?";
|
|
1156
|
+
readonly en: "· What should DeepSeek do instead?";
|
|
1157
|
+
};
|
|
746
1158
|
readonly 'load-earlier': {
|
|
747
1159
|
readonly zh: " ↑ 加载更早消息(会话日志完整,/export 导出全文) ";
|
|
748
1160
|
readonly en: " ↑ load earlier messages (full session log; /export for full text) ";
|
|
749
1161
|
};
|
|
1162
|
+
readonly 'show-previous-messages': {
|
|
1163
|
+
readonly zh: " ctrl+e 显示前 {{n}} 条消息 ";
|
|
1164
|
+
readonly en: " ctrl+e to show {{n}} previous messages ";
|
|
1165
|
+
};
|
|
750
1166
|
readonly 'resume-none-in-cwd': {
|
|
751
1167
|
readonly zh: "当前目录没有可恢复的历史会话";
|
|
752
1168
|
readonly en: "No resumable sessions in the current directory";
|
|
753
1169
|
};
|
|
1170
|
+
readonly 'resume-resumed': {
|
|
1171
|
+
readonly zh: "已恢复会话";
|
|
1172
|
+
readonly en: "Session resumed";
|
|
1173
|
+
};
|
|
1174
|
+
readonly 'resume-more-above': {
|
|
1175
|
+
readonly zh: "↑ 还有 {{n}} 条";
|
|
1176
|
+
readonly en: "↑ {{n}} more";
|
|
1177
|
+
};
|
|
1178
|
+
readonly 'resume-more-below': {
|
|
1179
|
+
readonly zh: "↓ 还有 {{n}} 条";
|
|
1180
|
+
readonly en: "↓ {{n}} more";
|
|
1181
|
+
};
|
|
1182
|
+
readonly 'resume-delete-confirm': {
|
|
1183
|
+
readonly zh: "删除「{{name}}」?会话日志将被永久移除。";
|
|
1184
|
+
readonly en: "Delete \"{{name}}\"? The session log is removed permanently.";
|
|
1185
|
+
};
|
|
1186
|
+
readonly 'resume-deleted': {
|
|
1187
|
+
readonly zh: "已删除会话「{{name}}」";
|
|
1188
|
+
readonly en: "Deleted session {{name}}";
|
|
1189
|
+
};
|
|
1190
|
+
readonly 'resume-delete-failed': {
|
|
1191
|
+
readonly zh: "无法删除会话「{{name}}」";
|
|
1192
|
+
readonly en: "Could not delete session {{name}}";
|
|
1193
|
+
};
|
|
1194
|
+
readonly 'resume-rename-placeholder': {
|
|
1195
|
+
readonly zh: "新的会话名称…";
|
|
1196
|
+
readonly en: "New session name…";
|
|
1197
|
+
};
|
|
1198
|
+
readonly 'resume-rename-failed': {
|
|
1199
|
+
readonly zh: "无法重命名会话「{{name}}」";
|
|
1200
|
+
readonly en: "Could not rename session {{name}}";
|
|
1201
|
+
};
|
|
1202
|
+
readonly 'resume-hint-list': {
|
|
1203
|
+
readonly zh: "**Enter** 恢复 · Esc 退出 · {{mod}}d 删除 · {{mod}}r 重命名";
|
|
1204
|
+
readonly en: "**Enter** to confirm · Esc to exit · {{mod}}d to delete · {{mod}}r to rename";
|
|
1205
|
+
};
|
|
1206
|
+
readonly 'resume-hint-delete': {
|
|
1207
|
+
readonly zh: "**Enter** 删除 · Esc 取消";
|
|
1208
|
+
readonly en: "**Enter** to delete · Esc to cancel";
|
|
1209
|
+
};
|
|
1210
|
+
readonly 'resume-hint-rename': {
|
|
1211
|
+
readonly zh: "**Enter** 保存 · Esc 取消";
|
|
1212
|
+
readonly en: "**Enter** to save · Esc to cancel";
|
|
1213
|
+
};
|
|
1214
|
+
readonly 'resume-title': {
|
|
1215
|
+
readonly zh: "恢复会话";
|
|
1216
|
+
readonly en: "Resume";
|
|
1217
|
+
};
|
|
1218
|
+
readonly 'hint-confirm-exit': {
|
|
1219
|
+
readonly zh: "**Enter** 确认 · Esc 退出";
|
|
1220
|
+
readonly en: "**Enter** to confirm · Esc to exit";
|
|
1221
|
+
};
|
|
1222
|
+
readonly 'hint-confirm-cancel': {
|
|
1223
|
+
readonly zh: "**Enter** 确认 · Esc 取消";
|
|
1224
|
+
readonly en: "**Enter** to confirm · Esc to cancel";
|
|
1225
|
+
};
|
|
1226
|
+
readonly 'hint-select-exit': {
|
|
1227
|
+
readonly zh: "**Enter** 选择 · Esc 退出";
|
|
1228
|
+
readonly en: "**Enter** to select · Esc to exit";
|
|
1229
|
+
};
|
|
1230
|
+
readonly 'hint-rewind-back': {
|
|
1231
|
+
readonly zh: "**Enter** 回退 · Esc 返回";
|
|
1232
|
+
readonly en: "**Enter** to rewind · Esc to back";
|
|
1233
|
+
};
|
|
1234
|
+
readonly 'hint-adjust-done': {
|
|
1235
|
+
readonly zh: "**←/→** 调整 · Enter/Esc 完成";
|
|
1236
|
+
readonly en: "**←/→** to adjust · Enter/Esc to done";
|
|
1237
|
+
};
|
|
1238
|
+
readonly 'hint-history-search': {
|
|
1239
|
+
readonly zh: "↑/↓ 选择 · **Enter** 确认 · Esc 取消";
|
|
1240
|
+
readonly en: "↑/↓ to navigate · **Enter** to select · Esc to cancel";
|
|
1241
|
+
};
|
|
1242
|
+
readonly 'hint-expand-ctrl-o': {
|
|
1243
|
+
readonly zh: "(ctrl+o 展开)";
|
|
1244
|
+
readonly en: "(ctrl+o to expand)";
|
|
1245
|
+
};
|
|
1246
|
+
readonly 'picker-title-model': {
|
|
1247
|
+
readonly zh: "模型";
|
|
1248
|
+
readonly en: "Model";
|
|
1249
|
+
};
|
|
1250
|
+
readonly 'picker-title-theme': {
|
|
1251
|
+
readonly zh: "颜色主题";
|
|
1252
|
+
readonly en: "Color theme";
|
|
1253
|
+
};
|
|
1254
|
+
readonly 'picker-title-activity': {
|
|
1255
|
+
readonly zh: "指示器预设";
|
|
1256
|
+
readonly en: "Indicator preset";
|
|
1257
|
+
};
|
|
1258
|
+
readonly 'picker-title-effort': {
|
|
1259
|
+
readonly zh: "推理强度";
|
|
1260
|
+
readonly en: "Reasoning effort";
|
|
1261
|
+
};
|
|
1262
|
+
readonly 'model-loading': {
|
|
1263
|
+
readonly zh: "正在加载模型";
|
|
1264
|
+
readonly en: "Loading models";
|
|
1265
|
+
};
|
|
1266
|
+
readonly 'model-loading-subtitle': {
|
|
1267
|
+
readonly zh: "正在查询 provider…";
|
|
1268
|
+
readonly en: "Querying the provider…";
|
|
1269
|
+
};
|
|
1270
|
+
readonly 'model-switching': {
|
|
1271
|
+
readonly zh: "正在切换模型到 {{name}}…";
|
|
1272
|
+
readonly en: "Switching model to {{name}}…";
|
|
1273
|
+
};
|
|
1274
|
+
readonly 'model-switched': {
|
|
1275
|
+
readonly zh: "模型已切换为 {{name}}";
|
|
1276
|
+
readonly en: "Model switched to {{name}}";
|
|
1277
|
+
};
|
|
1278
|
+
readonly 'rewind-title': {
|
|
1279
|
+
readonly zh: "回退";
|
|
1280
|
+
readonly en: "Rewind";
|
|
1281
|
+
};
|
|
1282
|
+
readonly 'rewind-subtitle': {
|
|
1283
|
+
readonly zh: "选择一条消息,将对话回退到该处";
|
|
1284
|
+
readonly en: "Pick a message to rewind the conversation to";
|
|
1285
|
+
};
|
|
1286
|
+
readonly 'rewind-confirm-title': {
|
|
1287
|
+
readonly zh: "将对话回退到这条消息?";
|
|
1288
|
+
readonly en: "Rewind conversation to this message?";
|
|
1289
|
+
};
|
|
1290
|
+
readonly 'rewind-confirm-desc': {
|
|
1291
|
+
readonly zh: "对话从此处重新开始";
|
|
1292
|
+
readonly en: "conversation restarts here";
|
|
1293
|
+
};
|
|
1294
|
+
readonly 'rewind-empty': {
|
|
1295
|
+
readonly zh: "没有可回退的消息";
|
|
1296
|
+
readonly en: "No messages to rewind to";
|
|
1297
|
+
};
|
|
1298
|
+
readonly 'rewind-last-message': {
|
|
1299
|
+
readonly zh: "最近一条消息";
|
|
1300
|
+
readonly en: "last message";
|
|
1301
|
+
};
|
|
1302
|
+
readonly 'rewind-none': {
|
|
1303
|
+
readonly zh: "还没有可回退的消息";
|
|
1304
|
+
readonly en: "Nothing to rewind yet";
|
|
1305
|
+
};
|
|
1306
|
+
readonly 'rewind-done': {
|
|
1307
|
+
readonly zh: "已回退——编辑后按 Enter 重新发送";
|
|
1308
|
+
readonly en: "Rewound — edit and press Enter to resend";
|
|
1309
|
+
};
|
|
1310
|
+
readonly 'thinking-title': {
|
|
1311
|
+
readonly zh: "切换思考模式";
|
|
1312
|
+
readonly en: "Toggle thinking mode";
|
|
1313
|
+
};
|
|
1314
|
+
readonly 'thinking-subtitle': {
|
|
1315
|
+
readonly zh: "为本会话启用或关闭思考。";
|
|
1316
|
+
readonly en: "Enable or disable thinking for this session.";
|
|
1317
|
+
};
|
|
1318
|
+
readonly 'thinking-enabled': {
|
|
1319
|
+
readonly zh: "启用";
|
|
1320
|
+
readonly en: "Enabled";
|
|
1321
|
+
};
|
|
1322
|
+
readonly 'thinking-enabled-desc': {
|
|
1323
|
+
readonly zh: "DeepSeek 会在回复前先思考";
|
|
1324
|
+
readonly en: "DeepSeek will think before responding";
|
|
1325
|
+
};
|
|
1326
|
+
readonly 'thinking-disabled': {
|
|
1327
|
+
readonly zh: "关闭";
|
|
1328
|
+
readonly en: "Disabled";
|
|
1329
|
+
};
|
|
1330
|
+
readonly 'thinking-disabled-desc': {
|
|
1331
|
+
readonly zh: "DeepSeek 不做扩展思考,直接回复";
|
|
1332
|
+
readonly en: "DeepSeek will respond without extended thinking";
|
|
1333
|
+
};
|
|
1334
|
+
readonly 'thinking-mid-warning': {
|
|
1335
|
+
readonly zh: "在对话中途切换思考模式会增加延迟,并可能降低质量。建议在会话开始时设置。";
|
|
1336
|
+
readonly en: "Changing thinking mode mid-conversation will increase latency and may reduce quality. For best results, set this at the start of a session.";
|
|
1337
|
+
};
|
|
1338
|
+
readonly 'thinking-proceed': {
|
|
1339
|
+
readonly zh: "要继续吗?";
|
|
1340
|
+
readonly en: "Do you want to proceed?";
|
|
1341
|
+
};
|
|
1342
|
+
readonly 'thinking-label': {
|
|
1343
|
+
readonly zh: "思考";
|
|
1344
|
+
readonly en: "Thinking";
|
|
1345
|
+
};
|
|
1346
|
+
readonly 'history-search-title': {
|
|
1347
|
+
readonly zh: "搜索历史";
|
|
1348
|
+
readonly en: "Search history";
|
|
1349
|
+
};
|
|
1350
|
+
readonly 'history-search-placeholder': {
|
|
1351
|
+
readonly zh: "输入以搜索…";
|
|
1352
|
+
readonly en: "Type to search…";
|
|
1353
|
+
};
|
|
1354
|
+
readonly 'history-search-empty': {
|
|
1355
|
+
readonly zh: "没有匹配的命令";
|
|
1356
|
+
readonly en: "No matching commands";
|
|
1357
|
+
};
|
|
1358
|
+
readonly 'time-now': {
|
|
1359
|
+
readonly zh: "刚刚";
|
|
1360
|
+
readonly en: "now";
|
|
1361
|
+
};
|
|
1362
|
+
readonly 'time-minutes-ago': {
|
|
1363
|
+
readonly zh: "{{n}} 分钟前";
|
|
1364
|
+
readonly en: "{{n}}m ago";
|
|
1365
|
+
};
|
|
1366
|
+
readonly 'time-hours-ago': {
|
|
1367
|
+
readonly zh: "{{n}} 小时前";
|
|
1368
|
+
readonly en: "{{n}}h ago";
|
|
1369
|
+
};
|
|
1370
|
+
readonly 'time-days-ago': {
|
|
1371
|
+
readonly zh: "{{n}} 天前";
|
|
1372
|
+
readonly en: "{{n}}d ago";
|
|
1373
|
+
};
|
|
1374
|
+
readonly 'search-no-matches': {
|
|
1375
|
+
readonly zh: "无匹配";
|
|
1376
|
+
readonly en: "no matches";
|
|
1377
|
+
};
|
|
754
1378
|
readonly 'rename-usage': {
|
|
755
1379
|
readonly zh: "用法 /rename <新名称>";
|
|
756
1380
|
readonly en: "Usage /rename <new title>";
|
|
@@ -767,13 +1391,25 @@ declare const dict: {
|
|
|
767
1391
|
readonly zh: "摘要已折叠";
|
|
768
1392
|
readonly en: "Summary folded";
|
|
769
1393
|
};
|
|
1394
|
+
readonly 'new-message': {
|
|
1395
|
+
readonly zh: "{{n}} 条新消息";
|
|
1396
|
+
readonly en: "1 new message";
|
|
1397
|
+
};
|
|
1398
|
+
readonly 'new-messages': {
|
|
1399
|
+
readonly zh: "{{n}} 条新消息";
|
|
1400
|
+
readonly en: "{{n}} new messages";
|
|
1401
|
+
};
|
|
770
1402
|
readonly 'theme-builtin-base': {
|
|
771
1403
|
readonly zh: "内置 · {{name}} 基底";
|
|
772
1404
|
readonly en: "Built-in · {{name}} base";
|
|
773
1405
|
};
|
|
1406
|
+
readonly 'theme-auto-base': {
|
|
1407
|
+
readonly zh: "内置 · 跟随系统/终端背景自动选择 light/dark";
|
|
1408
|
+
readonly en: "Built-in · follows the system/terminal background (light/dark)";
|
|
1409
|
+
};
|
|
774
1410
|
readonly 'theme-user-base': {
|
|
775
|
-
readonly zh: "{{base}} 基底 · ~/.dsh-
|
|
776
|
-
readonly en: "{{base}} base · ~/.dsh-
|
|
1411
|
+
readonly zh: "{{base}} 基底 · ~/.dsh-tui/themes/{{name}}.json";
|
|
1412
|
+
readonly en: "{{base}} base · ~/.dsh-tui/themes/{{name}}.json";
|
|
777
1413
|
};
|
|
778
1414
|
readonly 'context-panel-collapse': {
|
|
779
1415
|
readonly zh: "折叠";
|
|
@@ -903,6 +1539,194 @@ declare const dict: {
|
|
|
903
1539
|
readonly zh: "↑/↓ 选择 · 1/2 快选 · 打字输入反馈 · Enter 提交 · Esc 打断评审";
|
|
904
1540
|
readonly en: "↑/↓ select · 1/2 quick-pick · type feedback · Enter submit · Esc dismiss";
|
|
905
1541
|
};
|
|
1542
|
+
readonly 'provider-unavailable': {
|
|
1543
|
+
readonly zh: "/provider 需要经 dsh profile 启动(settings / credentials / llm-pi-ai 服务未挂载)";
|
|
1544
|
+
readonly en: "/provider requires starting through a dsh profile (settings / credentials / llm-pi-ai services not mounted)";
|
|
1545
|
+
};
|
|
1546
|
+
readonly 'provider-q-mode': {
|
|
1547
|
+
readonly zh: "要添加哪种模型提供方?";
|
|
1548
|
+
readonly en: "Which kind of model provider do you want to add?";
|
|
1549
|
+
};
|
|
1550
|
+
readonly 'provider-opt-catalog': {
|
|
1551
|
+
readonly zh: "内置 provider";
|
|
1552
|
+
readonly en: "Built-in provider";
|
|
1553
|
+
};
|
|
1554
|
+
readonly 'provider-opt-catalog-desc': {
|
|
1555
|
+
readonly zh: "openai、anthropic、deepseek 等内置目录,自动继承端点与协议";
|
|
1556
|
+
readonly en: "Built-in catalog such as openai, anthropic, deepseek — endpoint and protocol inherited";
|
|
1557
|
+
};
|
|
1558
|
+
readonly 'provider-opt-custom': {
|
|
1559
|
+
readonly zh: "自定义 API 端点";
|
|
1560
|
+
readonly en: "Custom API endpoint";
|
|
1561
|
+
};
|
|
1562
|
+
readonly 'provider-opt-custom-desc': {
|
|
1563
|
+
readonly zh: "OpenAI / Anthropic 兼容的网关或自建服务";
|
|
1564
|
+
readonly en: "An OpenAI/Anthropic-compatible gateway or self-hosted server";
|
|
1565
|
+
};
|
|
1566
|
+
readonly 'provider-q-catalog': {
|
|
1567
|
+
readonly zh: "选择 provider";
|
|
1568
|
+
readonly en: "Choose a provider";
|
|
1569
|
+
};
|
|
1570
|
+
readonly 'provider-opt-other-route': {
|
|
1571
|
+
readonly zh: "其他(手动输入路由名)";
|
|
1572
|
+
readonly en: "Other (enter a route name)";
|
|
1573
|
+
};
|
|
1574
|
+
readonly 'provider-opt-other-route-desc': {
|
|
1575
|
+
readonly zh: "目录里没列出的 catalog 路由";
|
|
1576
|
+
readonly en: "A catalog route not listed above";
|
|
1577
|
+
};
|
|
1578
|
+
readonly 'provider-q-route-id': {
|
|
1579
|
+
readonly zh: "输入路由名";
|
|
1580
|
+
readonly en: "Enter a route name";
|
|
1581
|
+
};
|
|
1582
|
+
readonly 'provider-q-route-id-detail': {
|
|
1583
|
+
readonly zh: "小写字母开头,可含数字与连字符,如 my-gateway";
|
|
1584
|
+
readonly en: "Lowercase letter first, digits and dashes allowed, e.g. my-gateway";
|
|
1585
|
+
};
|
|
1586
|
+
readonly 'provider-route-id-invalid': {
|
|
1587
|
+
readonly zh: "路由名不合法:须以小写字母开头,仅含小写字母 / 数字 / 连字符";
|
|
1588
|
+
readonly en: "Invalid route name: must start with a lowercase letter, only lowercase letters / digits / dashes";
|
|
1589
|
+
};
|
|
1590
|
+
readonly 'provider-q-apikey': {
|
|
1591
|
+
readonly zh: "输入 API key";
|
|
1592
|
+
readonly en: "Enter the API key";
|
|
1593
|
+
};
|
|
1594
|
+
readonly 'provider-q-apikey-detail': {
|
|
1595
|
+
readonly zh: "密钥将写入 ~/.dsh/.credentials.yaml(权限 0600),不会出现在会话记录中";
|
|
1596
|
+
readonly en: "The key is stored in ~/.dsh/.credentials.yaml (mode 0600) and never shown in the transcript";
|
|
1597
|
+
};
|
|
1598
|
+
readonly 'provider-q-baseurl-choice': {
|
|
1599
|
+
readonly zh: "是否覆盖默认 API 端点(baseURL)?";
|
|
1600
|
+
readonly en: "Override the default API endpoint (baseURL)?";
|
|
1601
|
+
};
|
|
1602
|
+
readonly 'provider-opt-baseurl-skip': {
|
|
1603
|
+
readonly zh: "跳过,使用默认端点";
|
|
1604
|
+
readonly en: "Skip — use the default endpoint";
|
|
1605
|
+
};
|
|
1606
|
+
readonly 'provider-opt-baseurl-input': {
|
|
1607
|
+
readonly zh: "现在输入 baseURL";
|
|
1608
|
+
readonly en: "Enter a baseURL now";
|
|
1609
|
+
};
|
|
1610
|
+
readonly 'provider-q-baseurl': {
|
|
1611
|
+
readonly zh: "输入 baseURL";
|
|
1612
|
+
readonly en: "Enter the baseURL";
|
|
1613
|
+
};
|
|
1614
|
+
readonly 'provider-q-protocol': {
|
|
1615
|
+
readonly zh: "选择 API 协议";
|
|
1616
|
+
readonly en: "Choose the wire protocol";
|
|
1617
|
+
};
|
|
1618
|
+
readonly 'provider-protocol-completions-desc': {
|
|
1619
|
+
readonly zh: "OpenAI Chat Completions 兼容(大多数网关)";
|
|
1620
|
+
readonly en: "OpenAI Chat Completions compatible (most gateways)";
|
|
1621
|
+
};
|
|
1622
|
+
readonly 'provider-protocol-responses-desc': {
|
|
1623
|
+
readonly zh: "OpenAI Responses API";
|
|
1624
|
+
readonly en: "OpenAI Responses API";
|
|
1625
|
+
};
|
|
1626
|
+
readonly 'provider-protocol-anthropic-desc': {
|
|
1627
|
+
readonly zh: "Anthropic Messages API";
|
|
1628
|
+
readonly en: "Anthropic Messages API";
|
|
1629
|
+
};
|
|
1630
|
+
readonly 'provider-discovery-running': {
|
|
1631
|
+
readonly zh: "正在探测该端点公布的模型…";
|
|
1632
|
+
readonly en: "Discovering the models this endpoint advertises…";
|
|
1633
|
+
};
|
|
1634
|
+
readonly 'provider-discovery-failed': {
|
|
1635
|
+
readonly zh: "模型探测失败,改为手动输入模型 id";
|
|
1636
|
+
readonly en: "Model discovery failed — enter model ids manually instead";
|
|
1637
|
+
};
|
|
1638
|
+
readonly 'provider-q-models': {
|
|
1639
|
+
readonly zh: "选择要启用的模型(可在输入行逗号分隔补充)";
|
|
1640
|
+
readonly en: "Select the models to enable (add more comma-separated on the input row)";
|
|
1641
|
+
};
|
|
1642
|
+
readonly 'provider-q-models-fallback': {
|
|
1643
|
+
readonly zh: "输入模型 id(逗号分隔)";
|
|
1644
|
+
readonly en: "Enter model ids (comma-separated)";
|
|
1645
|
+
};
|
|
1646
|
+
readonly 'provider-models-required': {
|
|
1647
|
+
readonly zh: "自定义端点至少需要一个模型 id";
|
|
1648
|
+
readonly en: "A custom endpoint needs at least one model id";
|
|
1649
|
+
};
|
|
1650
|
+
readonly 'provider-q-confirm': {
|
|
1651
|
+
readonly zh: "确认写入该 provider 配置?";
|
|
1652
|
+
readonly en: "Write this provider configuration?";
|
|
1653
|
+
};
|
|
1654
|
+
readonly 'provider-route-exists-warning': {
|
|
1655
|
+
readonly zh: "⚠ 该路由已有配置,写入将覆盖现有设置";
|
|
1656
|
+
readonly en: "⚠ This route is already configured — writing overwrites it";
|
|
1657
|
+
};
|
|
1658
|
+
readonly 'provider-opt-confirm-write': {
|
|
1659
|
+
readonly zh: "写入并启用";
|
|
1660
|
+
readonly en: "Write and enable";
|
|
1661
|
+
};
|
|
1662
|
+
readonly 'provider-opt-confirm-cancel': {
|
|
1663
|
+
readonly zh: "取消";
|
|
1664
|
+
readonly en: "Cancel";
|
|
1665
|
+
};
|
|
1666
|
+
readonly 'provider-line-route': {
|
|
1667
|
+
readonly zh: "路由:{{route}}";
|
|
1668
|
+
readonly en: "Route: {{route}}";
|
|
1669
|
+
};
|
|
1670
|
+
readonly 'provider-line-keyref': {
|
|
1671
|
+
readonly zh: "密钥引用:{{ref}}(已写入 ~/.dsh/.credentials.yaml)";
|
|
1672
|
+
readonly en: "Key ref: {{ref}} (stored in ~/.dsh/.credentials.yaml)";
|
|
1673
|
+
};
|
|
1674
|
+
readonly 'provider-line-keyref-env': {
|
|
1675
|
+
readonly zh: "密钥引用:{{ref}}(进程环境已提供同名变量,跳过写入)";
|
|
1676
|
+
readonly en: "Key ref: {{ref}} (already in the process environment, write skipped)";
|
|
1677
|
+
};
|
|
1678
|
+
readonly 'provider-line-baseurl': {
|
|
1679
|
+
readonly zh: "baseURL:{{url}}";
|
|
1680
|
+
readonly en: "baseURL: {{url}}";
|
|
1681
|
+
};
|
|
1682
|
+
readonly 'provider-line-protocol': {
|
|
1683
|
+
readonly zh: "协议:{{api}}";
|
|
1684
|
+
readonly en: "Protocol: {{api}}";
|
|
1685
|
+
};
|
|
1686
|
+
readonly 'provider-line-models': {
|
|
1687
|
+
readonly zh: "模型:{{models}}";
|
|
1688
|
+
readonly en: "Models: {{models}}";
|
|
1689
|
+
};
|
|
1690
|
+
readonly 'provider-line-models-catalog': {
|
|
1691
|
+
readonly zh: "模型:整个 catalog(未收窄)";
|
|
1692
|
+
readonly en: "Models: the whole catalog (not narrowed)";
|
|
1693
|
+
};
|
|
1694
|
+
readonly 'provider-rollback-ok': {
|
|
1695
|
+
readonly zh: "已回滚刚写入的密钥";
|
|
1696
|
+
readonly en: "Rolled back the just-written key";
|
|
1697
|
+
};
|
|
1698
|
+
readonly 'provider-rollback-failed': {
|
|
1699
|
+
readonly zh: "密钥回滚失败,请手动检查 ~/.dsh/.credentials.yaml";
|
|
1700
|
+
readonly en: "Key rollback failed — check ~/.dsh/.credentials.yaml manually";
|
|
1701
|
+
};
|
|
1702
|
+
readonly 'provider-write-failed': {
|
|
1703
|
+
readonly zh: "provider 配置写入失败 · {{err}}";
|
|
1704
|
+
readonly en: "Failed to write the provider configuration · {{err}}";
|
|
1705
|
+
};
|
|
1706
|
+
readonly 'provider-cancelled': {
|
|
1707
|
+
readonly zh: "已取消添加 provider";
|
|
1708
|
+
readonly en: "Provider setup cancelled";
|
|
1709
|
+
};
|
|
1710
|
+
readonly 'provider-success': {
|
|
1711
|
+
readonly zh: "provider {{route}} 已添加";
|
|
1712
|
+
readonly en: "Provider {{route}} added";
|
|
1713
|
+
};
|
|
1714
|
+
readonly 'provider-switch-hint': {
|
|
1715
|
+
readonly zh: "运行 /model 可切换到新 provider 的模型";
|
|
1716
|
+
readonly en: "Run /model to switch to the new provider’s models";
|
|
1717
|
+
};
|
|
1718
|
+
readonly 'provider-q-switch': {
|
|
1719
|
+
readonly zh: "立即切换到新 provider?";
|
|
1720
|
+
readonly en: "Switch to the new provider now?";
|
|
1721
|
+
};
|
|
1722
|
+
readonly 'provider-opt-switch-now': {
|
|
1723
|
+
readonly zh: "切换到 {{model}}";
|
|
1724
|
+
readonly en: "Switch to {{model}}";
|
|
1725
|
+
};
|
|
1726
|
+
readonly 'provider-opt-switch-keep': {
|
|
1727
|
+
readonly zh: "保持当前模型";
|
|
1728
|
+
readonly en: "Keep the current model";
|
|
1729
|
+
};
|
|
906
1730
|
readonly 'cmd-desc-new': {
|
|
907
1731
|
readonly zh: "新开会话";
|
|
908
1732
|
};
|
|
@@ -918,6 +1742,12 @@ declare const dict: {
|
|
|
918
1742
|
readonly 'cmd-desc-rename': {
|
|
919
1743
|
readonly zh: "重命名当前会话";
|
|
920
1744
|
};
|
|
1745
|
+
readonly 'cmd-desc-quit': {
|
|
1746
|
+
readonly zh: "退出 dsh-tui";
|
|
1747
|
+
};
|
|
1748
|
+
readonly 'cmd-desc-q': {
|
|
1749
|
+
readonly zh: "退出 dsh-tui";
|
|
1750
|
+
};
|
|
921
1751
|
readonly 'cmd-desc-rewind': {
|
|
922
1752
|
readonly zh: "回退会话到历史消息";
|
|
923
1753
|
};
|
|
@@ -931,7 +1761,7 @@ declare const dict: {
|
|
|
931
1761
|
readonly zh: "查看会话 token 用量";
|
|
932
1762
|
};
|
|
933
1763
|
readonly 'cmd-desc-config': {
|
|
934
|
-
readonly zh: "查看 dsh-
|
|
1764
|
+
readonly zh: "查看 dsh-tui 配置来源";
|
|
935
1765
|
};
|
|
936
1766
|
readonly 'cmd-desc-doctor': {
|
|
937
1767
|
readonly zh: "运行环境检查";
|
|
@@ -949,7 +1779,7 @@ declare const dict: {
|
|
|
949
1779
|
readonly zh: "切换 Agent 预设(standard/code/minimal/cordis)";
|
|
950
1780
|
};
|
|
951
1781
|
readonly 'cmd-desc-theme': {
|
|
952
|
-
readonly zh: "
|
|
1782
|
+
readonly zh: "切换配色主题(auto 跟随系统,或内置/自定义)";
|
|
953
1783
|
};
|
|
954
1784
|
readonly 'cmd-desc-lang': {
|
|
955
1785
|
readonly zh: "切换界面语言(en / zh)";
|
|
@@ -963,6 +1793,9 @@ declare const dict: {
|
|
|
963
1793
|
readonly 'cmd-desc-tokens': {
|
|
964
1794
|
readonly zh: "查看会话 token 用量";
|
|
965
1795
|
};
|
|
1796
|
+
readonly 'cmd-desc-provider': {
|
|
1797
|
+
readonly zh: "添加模型提供方(内置目录或自定义 API 端点)";
|
|
1798
|
+
};
|
|
966
1799
|
readonly 'cmd-desc-login': {
|
|
967
1800
|
readonly zh: "查看 API 凭证状态";
|
|
968
1801
|
};
|
|
@@ -985,7 +1818,7 @@ declare const dict: {
|
|
|
985
1818
|
readonly zh: "查看记忆状态";
|
|
986
1819
|
};
|
|
987
1820
|
readonly 'cmd-desc-update': {
|
|
988
|
-
readonly zh: "更新 dsh-
|
|
1821
|
+
readonly zh: "更新 dsh-tui 并重启";
|
|
989
1822
|
};
|
|
990
1823
|
readonly 'cmd-desc-audit': {
|
|
991
1824
|
readonly zh: "对当前项目做全面代码审计";
|
|
@@ -994,7 +1827,7 @@ declare const dict: {
|
|
|
994
1827
|
readonly zh: "记录一份 bug 报告";
|
|
995
1828
|
};
|
|
996
1829
|
readonly 'cmd-desc-practice': {
|
|
997
|
-
readonly zh: "与 dsh-
|
|
1830
|
+
readonly zh: "与 dsh-tui 进行编程练习";
|
|
998
1831
|
};
|
|
999
1832
|
readonly 'cmd-desc-review': {
|
|
1000
1833
|
readonly zh: "对当前项目做全面代码评审";
|
|
@@ -1017,6 +1850,21 @@ declare const dict: {
|
|
|
1017
1850
|
readonly 'cmd-desc-connect': {
|
|
1018
1851
|
readonly zh: "连接远程机器";
|
|
1019
1852
|
};
|
|
1853
|
+
readonly 'cmd-desc-workspace': {
|
|
1854
|
+
readonly zh: "切换、重命名或打开工作区";
|
|
1855
|
+
};
|
|
1856
|
+
readonly 'cmd-desc-workspace-resume': {
|
|
1857
|
+
readonly zh: "切换到另一个工作区";
|
|
1858
|
+
readonly en: "Switch to another workspace";
|
|
1859
|
+
};
|
|
1860
|
+
readonly 'cmd-desc-workspace-rename': {
|
|
1861
|
+
readonly zh: "重命名当前工作区";
|
|
1862
|
+
readonly en: "Rename the current workspace";
|
|
1863
|
+
};
|
|
1864
|
+
readonly 'cmd-desc-workspace-open': {
|
|
1865
|
+
readonly zh: "打开路径或工作区 URI";
|
|
1866
|
+
readonly en: "Open a path or workspace URI";
|
|
1867
|
+
};
|
|
1020
1868
|
readonly 'cmd-desc-help': {
|
|
1021
1869
|
readonly zh: "查看快捷键与命令";
|
|
1022
1870
|
};
|
|
@@ -1041,8 +1889,8 @@ declare const dict: {
|
|
|
1041
1889
|
readonly en: "Switch /lang en | /lang zh";
|
|
1042
1890
|
};
|
|
1043
1891
|
readonly 'lang-persist-hint': {
|
|
1044
|
-
readonly zh: "持久化 ~/.dsh-
|
|
1045
|
-
readonly en: "Persisted ~/.dsh-
|
|
1892
|
+
readonly zh: "持久化 ~/.dsh-tui/lang.json(重启后仍生效;DSH_TUI_LANG 优先)";
|
|
1893
|
+
readonly en: "Persisted ~/.dsh-tui/lang.json (survives restart; DSH_TUI_LANG wins)";
|
|
1046
1894
|
};
|
|
1047
1895
|
readonly 'lang-switched': {
|
|
1048
1896
|
readonly zh: "语言已切换:{{lang}}(已保存)";
|
|
@@ -1053,8 +1901,100 @@ declare const dict: {
|
|
|
1053
1901
|
readonly en: "Unknown language \"{{lang}}\" · /lang to view all (en / zh)";
|
|
1054
1902
|
};
|
|
1055
1903
|
readonly 'lang-switch-failed': {
|
|
1056
|
-
readonly zh: "语言「{{lang}}」切换失败(无法写入 ~/.dsh-
|
|
1057
|
-
readonly en: "Language \"{{lang}}\" switch failed (cannot write ~/.dsh-
|
|
1904
|
+
readonly zh: "语言「{{lang}}」切换失败(无法写入 ~/.dsh-tui/lang.json)";
|
|
1905
|
+
readonly en: "Language \"{{lang}}\" switch failed (cannot write ~/.dsh-tui/lang.json)";
|
|
1906
|
+
};
|
|
1907
|
+
readonly 'status-cache-label': {
|
|
1908
|
+
readonly zh: "缓存 ";
|
|
1909
|
+
readonly en: "cache ";
|
|
1910
|
+
};
|
|
1911
|
+
readonly 'traj-title': {
|
|
1912
|
+
readonly zh: "轨迹";
|
|
1913
|
+
readonly en: "Trajectory";
|
|
1914
|
+
};
|
|
1915
|
+
readonly 'traj-totals': {
|
|
1916
|
+
readonly zh: "{{turns}} 轮 · {{steps}} 步";
|
|
1917
|
+
readonly en: "{{turns}} turns · {{steps}} rows";
|
|
1918
|
+
};
|
|
1919
|
+
readonly 'traj-errors': {
|
|
1920
|
+
readonly zh: "{{n}} 错";
|
|
1921
|
+
readonly en: "{{n}} failed";
|
|
1922
|
+
};
|
|
1923
|
+
readonly 'traj-retries': {
|
|
1924
|
+
readonly zh: "{{n}} 重试";
|
|
1925
|
+
readonly en: "{{n}} retries";
|
|
1926
|
+
};
|
|
1927
|
+
readonly 'traj-matches': {
|
|
1928
|
+
readonly zh: "{{n}}/{{total}} 匹配";
|
|
1929
|
+
readonly en: "{{n}}/{{total}} matched";
|
|
1930
|
+
};
|
|
1931
|
+
readonly 'traj-tab-timeline': {
|
|
1932
|
+
readonly zh: "时序";
|
|
1933
|
+
readonly en: "Timeline";
|
|
1934
|
+
};
|
|
1935
|
+
readonly 'traj-tab-hotspot': {
|
|
1936
|
+
readonly zh: "热点";
|
|
1937
|
+
readonly en: "Hotspot";
|
|
1938
|
+
};
|
|
1939
|
+
readonly 'traj-hot-tools': {
|
|
1940
|
+
readonly zh: "工具";
|
|
1941
|
+
readonly en: "Tools";
|
|
1942
|
+
};
|
|
1943
|
+
readonly 'traj-hot-model': {
|
|
1944
|
+
readonly zh: "模型";
|
|
1945
|
+
readonly en: "Model";
|
|
1946
|
+
};
|
|
1947
|
+
readonly 'traj-hot-turns': {
|
|
1948
|
+
readonly zh: "轮次";
|
|
1949
|
+
readonly en: "Turns";
|
|
1950
|
+
};
|
|
1951
|
+
readonly 'traj-sort-duration': {
|
|
1952
|
+
readonly zh: "按耗时";
|
|
1953
|
+
readonly en: "by duration";
|
|
1954
|
+
};
|
|
1955
|
+
readonly 'traj-sort-count': {
|
|
1956
|
+
readonly zh: "按次数";
|
|
1957
|
+
readonly en: "by count";
|
|
1958
|
+
};
|
|
1959
|
+
readonly 'traj-sort-tokens': {
|
|
1960
|
+
readonly zh: "按 token";
|
|
1961
|
+
readonly en: "by tokens";
|
|
1962
|
+
};
|
|
1963
|
+
readonly 'traj-proj-sequence': {
|
|
1964
|
+
readonly zh: "序号等宽";
|
|
1965
|
+
readonly en: "even";
|
|
1966
|
+
};
|
|
1967
|
+
readonly 'traj-proj-time': {
|
|
1968
|
+
readonly zh: "真实墙钟";
|
|
1969
|
+
readonly en: "wall-clock";
|
|
1970
|
+
};
|
|
1971
|
+
readonly 'traj-proj-compressed': {
|
|
1972
|
+
readonly zh: "压缩空闲";
|
|
1973
|
+
readonly en: "compressed";
|
|
1974
|
+
};
|
|
1975
|
+
readonly 'traj-hint-timeline': {
|
|
1976
|
+
readonly zh: "**↑/↓** 移动 · **←/→** 视图 · **[ ]** 跳错 · **{ }** 跳轮 · **/** 查询 · **m** 投影 · **enter** 详情 · **q** 退出";
|
|
1977
|
+
readonly en: "**↑/↓** move · **←/→** view · **[ ]** failures · **{ }** turns · **/** query · **m** projection · **enter** detail · **q** exit";
|
|
1978
|
+
};
|
|
1979
|
+
readonly 'traj-hint-hotspot': {
|
|
1980
|
+
readonly zh: "**↑/↓** 移动 · **←/→** 视图 · **t** 排序 · **enter** 回时序定位 · **q** 退出";
|
|
1981
|
+
readonly en: "**↑/↓** move · **←/→** view · **t** sort · **enter** locate in timeline · **q** exit";
|
|
1982
|
+
};
|
|
1983
|
+
readonly 'traj-hint-query': {
|
|
1984
|
+
readonly zh: "**tool:** **kind:** **turn:** **err:** **run:** **>10s** **tok>1k** · 裸词全文 · **enter** 确认 · **esc** 清除";
|
|
1985
|
+
readonly en: "**tool:** **kind:** **turn:** **err:** **run:** **>10s** **tok>1k** · bare word = full text · **enter** apply · **esc** clear";
|
|
1986
|
+
};
|
|
1987
|
+
readonly 'traj-hint-expanded': {
|
|
1988
|
+
readonly zh: "**j/k** 翻页 · **enter/esc** 收起 · **q** 退出";
|
|
1989
|
+
readonly en: "**j/k** page · **enter/esc** collapse · **q** exit";
|
|
1990
|
+
};
|
|
1991
|
+
readonly 'traj-empty': {
|
|
1992
|
+
readonly zh: "暂无轨迹事件";
|
|
1993
|
+
readonly en: "No trajectory events yet";
|
|
1994
|
+
};
|
|
1995
|
+
readonly 'traj-hint-failure': {
|
|
1996
|
+
readonly zh: "{{key}} 看完整轨迹";
|
|
1997
|
+
readonly en: "{{key}} for the full trajectory";
|
|
1058
1998
|
};
|
|
1059
1999
|
};
|
|
1060
2000
|
export type I18nKey = keyof typeof dict;
|
|
@@ -1100,13 +2040,18 @@ export declare function writeLangPref(lang: Lang, dir?: string): boolean;
|
|
|
1100
2040
|
* Guess the user's language from the OS locale (`LC_ALL`, `LC_MESSAGES`,
|
|
1101
2041
|
* `LANG`), defaulting to `zh`. Only consulted when nothing else (env var,
|
|
1102
2042
|
* cordis.yml `lang`, persisted `/lang` choice) pinned a language.
|
|
2043
|
+
* The POSIX/C locale means "no locale selected" and conventionally maps to
|
|
2044
|
+
* English — importantly it is what CI runners (LANG=C.UTF-8) report, so
|
|
2045
|
+
* tests asserting English UI copy stay deterministic. An absent locale
|
|
2046
|
+
* variable (typical on Windows) still defaults to `zh`.
|
|
1103
2047
|
*/
|
|
1104
2048
|
export declare function detectLocaleLang(): Lang;
|
|
1105
2049
|
/**
|
|
1106
|
-
* Resolve the startup language:
|
|
1107
|
-
*
|
|
1108
|
-
*
|
|
1109
|
-
*
|
|
2050
|
+
* Resolve the startup language: `DSH_TUI_LANG` when it holds a valid value
|
|
2051
|
+
* (pinned at process start — the repro/verify scripts rely on this for
|
|
2052
|
+
* deterministic UI copy), else the persisted `/lang` choice, else the OS
|
|
2053
|
+
* locale guess, else `zh` (the original hard-coded language). The
|
|
2054
|
+
* cordis.yml `lang` precedence lives in plugin.apply.
|
|
1110
2055
|
*/
|
|
1111
2056
|
export declare function resolveStartupLang(): Lang;
|
|
1112
2057
|
export {};
|