@deepseek-harness-tui/dsh-tui 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +235 -0
- package/bin/dsh-tui.js +95 -0
- package/cordis.patch.yml +218 -0
- package/cordis.yml +185 -0
- package/lib/invariant.js +28 -0
- package/lib/types/activityPrefs.d.ts +29 -0
- package/lib/types/activityPrefs.d.ts.map +1 -0
- package/lib/types/activityPrefs.js +60 -0
- package/lib/types/bootstrap/state.d.ts +13 -0
- package/lib/types/bootstrap/state.d.ts.map +1 -0
- package/lib/types/bootstrap/state.js +12 -0
- package/lib/types/cc/cliHighlight.d.ts +20 -0
- package/lib/types/cc/cliHighlight.d.ts.map +1 -0
- package/lib/types/cc/cliHighlight.js +53 -0
- package/lib/types/cc/figures.d.ts +59 -0
- package/lib/types/cc/figures.d.ts.map +1 -0
- package/lib/types/cc/figures.js +69 -0
- package/lib/types/cc/format.d.ts +26 -0
- package/lib/types/cc/format.d.ts.map +1 -0
- package/lib/types/cc/format.js +55 -0
- package/lib/types/cc/hash.d.ts +25 -0
- package/lib/types/cc/hash.d.ts.map +1 -0
- package/lib/types/cc/hash.js +41 -0
- package/lib/types/cc/hyperlink.d.ts +21 -0
- package/lib/types/cc/hyperlink.d.ts.map +1 -0
- package/lib/types/cc/hyperlink.js +31 -0
- package/lib/types/cc/markdown.d.ts +43 -0
- package/lib/types/cc/markdown.d.ts.map +1 -0
- package/lib/types/cc/markdown.js +345 -0
- package/lib/types/cc/spinnerVerbs.d.ts +3 -0
- package/lib/types/cc/spinnerVerbs.d.ts.map +1 -0
- package/lib/types/cc/spinnerVerbs.js +190 -0
- package/lib/types/cc/terminal.d.ts +15 -0
- package/lib/types/cc/terminal.d.ts.map +1 -0
- package/lib/types/cc/terminal.js +84 -0
- package/lib/types/channel.d.ts +672 -0
- package/lib/types/channel.d.ts.map +1 -0
- package/lib/types/channel.js +2427 -0
- package/lib/types/childStderr.d.ts +63 -0
- package/lib/types/childStderr.d.ts.map +1 -0
- package/lib/types/childStderr.js +161 -0
- package/lib/types/commands.d.ts +55 -0
- package/lib/types/commands.d.ts.map +1 -0
- package/lib/types/commands.js +101 -0
- package/lib/types/components/ActivityLine.d.ts +29 -0
- package/lib/types/components/ActivityLine.d.ts.map +1 -0
- package/lib/types/components/ActivityLine.js +47 -0
- package/lib/types/components/ActivityPicker.d.ts +13 -0
- package/lib/types/components/ActivityPicker.d.ts.map +1 -0
- package/lib/types/components/ActivityPicker.js +24 -0
- package/lib/types/components/CommandSuggestions.d.ts +14 -0
- package/lib/types/components/CommandSuggestions.d.ts.map +1 -0
- package/lib/types/components/CommandSuggestions.js +33 -0
- package/lib/types/components/FileSuggestions.d.ts +12 -0
- package/lib/types/components/FileSuggestions.d.ts.map +1 -0
- package/lib/types/components/FileSuggestions.js +26 -0
- package/lib/types/components/GoalTodoPanel.d.ts +13 -0
- package/lib/types/components/GoalTodoPanel.d.ts.map +1 -0
- package/lib/types/components/GoalTodoPanel.js +57 -0
- package/lib/types/components/HelpMenu.d.ts +12 -0
- package/lib/types/components/HelpMenu.d.ts.map +1 -0
- package/lib/types/components/HelpMenu.js +12 -0
- package/lib/types/components/HistorySearchDialog.d.ts +16 -0
- package/lib/types/components/HistorySearchDialog.d.ts.map +1 -0
- package/lib/types/components/HistorySearchDialog.js +31 -0
- package/lib/types/components/InterruptedByUser.d.ts +7 -0
- package/lib/types/components/InterruptedByUser.d.ts.map +1 -0
- package/lib/types/components/InterruptedByUser.js +9 -0
- package/lib/types/components/LoadedContextPanel.d.ts +20 -0
- package/lib/types/components/LoadedContextPanel.d.ts.map +1 -0
- package/lib/types/components/LoadedContextPanel.js +30 -0
- package/lib/types/components/LogoV2.d.ts +23 -0
- package/lib/types/components/LogoV2.d.ts.map +1 -0
- package/lib/types/components/LogoV2.js +95 -0
- package/lib/types/components/Markdown.d.ts +24 -0
- package/lib/types/components/Markdown.d.ts.map +1 -0
- package/lib/types/components/Markdown.js +106 -0
- package/lib/types/components/MarkdownTable.d.ts +17 -0
- package/lib/types/components/MarkdownTable.d.ts.map +1 -0
- package/lib/types/components/MarkdownTable.js +272 -0
- package/lib/types/components/MessageList.d.ts +41 -0
- package/lib/types/components/MessageList.d.ts.map +1 -0
- package/lib/types/components/MessageList.js +303 -0
- package/lib/types/components/ModelPicker.d.ts +14 -0
- package/lib/types/components/ModelPicker.d.ts.map +1 -0
- package/lib/types/components/ModelPicker.js +15 -0
- package/lib/types/components/PresetPicker.d.ts +17 -0
- package/lib/types/components/PresetPicker.d.ts.map +1 -0
- package/lib/types/components/PresetPicker.js +25 -0
- package/lib/types/components/PromptInput.d.ts +67 -0
- package/lib/types/components/PromptInput.d.ts.map +1 -0
- package/lib/types/components/PromptInput.js +778 -0
- package/lib/types/components/ResumePicker.d.ts +15 -0
- package/lib/types/components/ResumePicker.d.ts.map +1 -0
- package/lib/types/components/ResumePicker.js +34 -0
- package/lib/types/components/RewindPicker.d.ts +14 -0
- package/lib/types/components/RewindPicker.d.ts.map +1 -0
- package/lib/types/components/RewindPicker.js +23 -0
- package/lib/types/components/SearchBox.d.ts +20 -0
- package/lib/types/components/SearchBox.d.ts.map +1 -0
- package/lib/types/components/SearchBox.js +33 -0
- package/lib/types/components/Select.d.ts +22 -0
- package/lib/types/components/Select.d.ts.map +1 -0
- package/lib/types/components/Select.js +19 -0
- package/lib/types/components/Spinner/GlimmerMessage.d.ts +19 -0
- package/lib/types/components/Spinner/GlimmerMessage.d.ts.map +1 -0
- package/lib/types/components/Spinner/GlimmerMessage.js +78 -0
- package/lib/types/components/Spinner/SpinnerAnimationRow.d.ts +31 -0
- package/lib/types/components/Spinner/SpinnerAnimationRow.d.ts.map +1 -0
- package/lib/types/components/Spinner/SpinnerAnimationRow.js +162 -0
- package/lib/types/components/Spinner/SpinnerGlyph.d.ts +16 -0
- package/lib/types/components/Spinner/SpinnerGlyph.d.ts.map +1 -0
- package/lib/types/components/Spinner/SpinnerGlyph.js +36 -0
- package/lib/types/components/Spinner/spinnerMode.d.ts +6 -0
- package/lib/types/components/Spinner/spinnerMode.d.ts.map +1 -0
- package/lib/types/components/Spinner/spinnerMode.js +1 -0
- package/lib/types/components/Spinner/spinnerUtils.d.ts +41 -0
- package/lib/types/components/Spinner/spinnerUtils.d.ts.map +1 -0
- package/lib/types/components/Spinner/spinnerUtils.js +104 -0
- package/lib/types/components/Spinner/useStalledAnimation.d.ts +16 -0
- package/lib/types/components/Spinner/useStalledAnimation.d.ts.map +1 -0
- package/lib/types/components/Spinner/useStalledAnimation.js +71 -0
- package/lib/types/components/StreamingMarkdown.d.ts +12 -0
- package/lib/types/components/StreamingMarkdown.d.ts.map +1 -0
- package/lib/types/components/StreamingMarkdown.js +39 -0
- package/lib/types/components/ThemePicker.d.ts +22 -0
- package/lib/types/components/ThemePicker.d.ts.map +1 -0
- package/lib/types/components/ThemePicker.js +51 -0
- package/lib/types/components/ThinkingToggle.d.ts +17 -0
- package/lib/types/components/ThinkingToggle.d.ts.map +1 -0
- package/lib/types/components/ThinkingToggle.js +30 -0
- package/lib/types/components/ToolUseLoader.d.ts +13 -0
- package/lib/types/components/ToolUseLoader.d.ts.map +1 -0
- package/lib/types/components/ToolUseLoader.js +17 -0
- package/lib/types/components/Whale.d.ts +22 -0
- package/lib/types/components/Whale.d.ts.map +1 -0
- package/lib/types/components/Whale.js +78 -0
- package/lib/types/components/WorkingSpinner.d.ts +26 -0
- package/lib/types/components/WorkingSpinner.d.ts.map +1 -0
- package/lib/types/components/WorkingSpinner.js +68 -0
- package/lib/types/components/activityFrames.d.ts +31 -0
- package/lib/types/components/activityFrames.d.ts.map +1 -0
- package/lib/types/components/activityFrames.js +83 -0
- package/lib/types/components/bigfont.d.ts +28 -0
- package/lib/types/components/bigfont.d.ts.map +1 -0
- package/lib/types/components/bigfont.js +91 -0
- package/lib/types/components/design-system/Byline.d.ts +14 -0
- package/lib/types/components/design-system/Byline.d.ts.map +1 -0
- package/lib/types/components/design-system/Byline.js +17 -0
- package/lib/types/components/design-system/Divider.d.ts +40 -0
- package/lib/types/components/design-system/Divider.d.ts.map +1 -0
- package/lib/types/components/design-system/Divider.js +24 -0
- package/lib/types/components/design-system/KeyboardShortcutHint.d.ts +19 -0
- package/lib/types/components/design-system/KeyboardShortcutHint.d.ts.map +1 -0
- package/lib/types/components/design-system/KeyboardShortcutHint.js +14 -0
- package/lib/types/components/design-system/ListItem.d.ts +36 -0
- package/lib/types/components/design-system/ListItem.d.ts.map +1 -0
- package/lib/types/components/design-system/ListItem.js +48 -0
- package/lib/types/components/design-system/LoadingState.d.ts +19 -0
- package/lib/types/components/design-system/LoadingState.d.ts.map +1 -0
- package/lib/types/components/design-system/LoadingState.js +22 -0
- package/lib/types/components/design-system/Pane.d.ts +17 -0
- package/lib/types/components/design-system/Pane.d.ts.map +1 -0
- package/lib/types/components/design-system/Pane.js +15 -0
- package/lib/types/components/design-system/ProgressBar.d.ts +22 -0
- package/lib/types/components/design-system/ProgressBar.d.ts.map +1 -0
- package/lib/types/components/design-system/ProgressBar.js +27 -0
- package/lib/types/components/design-system/StatusIcon.d.ts +15 -0
- package/lib/types/components/design-system/StatusIcon.d.ts.map +1 -0
- package/lib/types/components/design-system/StatusIcon.js +20 -0
- package/lib/types/components/design-system/ThemeProvider.d.ts +11 -0
- package/lib/types/components/design-system/ThemeProvider.d.ts.map +1 -0
- package/lib/types/components/design-system/ThemeProvider.js +135 -0
- package/lib/types/components/design-system/ThemedBox.d.ts +37 -0
- package/lib/types/components/design-system/ThemedBox.d.ts.map +1 -0
- package/lib/types/components/design-system/ThemedBox.js +26 -0
- package/lib/types/components/design-system/ThemedText.d.ts +56 -0
- package/lib/types/components/design-system/ThemedText.d.ts.map +1 -0
- package/lib/types/components/design-system/ThemedText.js +45 -0
- package/lib/types/components/messages/AssistantTextMessage.d.ts +18 -0
- package/lib/types/components/messages/AssistantTextMessage.d.ts.map +1 -0
- package/lib/types/components/messages/AssistantTextMessage.js +15 -0
- package/lib/types/components/messages/AssistantThinkingMessage.d.ts +23 -0
- package/lib/types/components/messages/AssistantThinkingMessage.d.ts.map +1 -0
- package/lib/types/components/messages/AssistantThinkingMessage.js +23 -0
- package/lib/types/components/messages/AssistantToolUseMessage.d.ts +23 -0
- package/lib/types/components/messages/AssistantToolUseMessage.d.ts.map +1 -0
- package/lib/types/components/messages/AssistantToolUseMessage.js +220 -0
- package/lib/types/components/messages/MessageMetadata.d.ts +15 -0
- package/lib/types/components/messages/MessageMetadata.d.ts.map +1 -0
- package/lib/types/components/messages/MessageMetadata.js +20 -0
- package/lib/types/components/messages/UserPromptMessage.d.ts +19 -0
- package/lib/types/components/messages/UserPromptMessage.d.ts.map +1 -0
- package/lib/types/components/messages/UserPromptMessage.js +15 -0
- package/lib/types/components/questions/AskUserQuestionPanel.d.ts +39 -0
- package/lib/types/components/questions/AskUserQuestionPanel.d.ts.map +1 -0
- package/lib/types/components/questions/AskUserQuestionPanel.js +228 -0
- package/lib/types/components/shimmer.d.ts +35 -0
- package/lib/types/components/shimmer.d.ts.map +1 -0
- package/lib/types/components/shimmer.js +43 -0
- package/lib/types/components/whaleFrames.d.ts +25 -0
- package/lib/types/components/whaleFrames.d.ts.map +1 -0
- package/lib/types/components/whaleFrames.js +419 -0
- package/lib/types/customTheme.d.ts +104 -0
- package/lib/types/customTheme.d.ts.map +1 -0
- package/lib/types/customTheme.js +268 -0
- package/lib/types/effortPrefs.d.ts +22 -0
- package/lib/types/effortPrefs.d.ts.map +1 -0
- package/lib/types/effortPrefs.js +45 -0
- package/lib/types/history.d.ts +24 -0
- package/lib/types/history.d.ts.map +1 -0
- package/lib/types/history.js +75 -0
- package/lib/types/hooks/useBlink.d.ts +11 -0
- package/lib/types/hooks/useBlink.d.ts.map +1 -0
- package/lib/types/hooks/useBlink.js +20 -0
- package/lib/types/i18n.d.ts +926 -0
- package/lib/types/i18n.d.ts.map +1 -0
- package/lib/types/i18n.js +356 -0
- package/lib/types/index.d.ts +70 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/index.js +31 -0
- package/lib/types/ink/Ansi.d.ts +11 -0
- package/lib/types/ink/Ansi.d.ts.map +1 -0
- package/lib/types/ink/Ansi.js +269 -0
- package/lib/types/ink/bidi.d.ts +18 -0
- package/lib/types/ink/bidi.d.ts.map +1 -0
- package/lib/types/ink/bidi.js +119 -0
- package/lib/types/ink/clearTerminal.d.ts +22 -0
- package/lib/types/ink/clearTerminal.d.ts.map +1 -0
- package/lib/types/ink/clearTerminal.js +72 -0
- package/lib/types/ink/colorize.d.ts +33 -0
- package/lib/types/ink/colorize.d.ts.map +1 -0
- package/lib/types/ink/colorize.js +213 -0
- package/lib/types/ink/components/AlternateScreen.d.ts +22 -0
- package/lib/types/ink/components/AlternateScreen.d.ts.map +1 -0
- package/lib/types/ink/components/AlternateScreen.js +74 -0
- package/lib/types/ink/components/App.d.ts +73 -0
- package/lib/types/ink/components/App.d.ts.map +1 -0
- package/lib/types/ink/components/App.js +597 -0
- package/lib/types/ink/components/AppContext.d.ts +15 -0
- package/lib/types/ink/components/AppContext.d.ts.map +1 -0
- package/lib/types/ink/components/AppContext.js +11 -0
- package/lib/types/ink/components/Box.d.ts +49 -0
- package/lib/types/ink/components/Box.d.ts.map +1 -0
- package/lib/types/ink/components/Box.js +153 -0
- package/lib/types/ink/components/Button.d.ts +37 -0
- package/lib/types/ink/components/Button.d.ts.map +1 -0
- package/lib/types/ink/components/Button.js +166 -0
- package/lib/types/ink/components/ClockContext.d.ts +10 -0
- package/lib/types/ink/components/ClockContext.d.ts.map +1 -0
- package/lib/types/ink/components/ClockContext.js +108 -0
- package/lib/types/ink/components/CursorDeclarationContext.d.ts +30 -0
- package/lib/types/ink/components/CursorDeclarationContext.d.ts.map +1 -0
- package/lib/types/ink/components/CursorDeclarationContext.js +6 -0
- package/lib/types/ink/components/ErrorOverview.d.ts +7 -0
- package/lib/types/ink/components/ErrorOverview.d.ts.map +1 -0
- package/lib/types/ink/components/ErrorOverview.js +49 -0
- package/lib/types/ink/components/Link.d.ts +8 -0
- package/lib/types/ink/components/Link.d.ts.map +1 -0
- package/lib/types/ink/components/Link.js +33 -0
- package/lib/types/ink/components/Newline.d.ts +13 -0
- package/lib/types/ink/components/Newline.d.ts.map +1 -0
- package/lib/types/ink/components/Newline.js +29 -0
- package/lib/types/ink/components/NoSelect.d.ts +20 -0
- package/lib/types/ink/components/NoSelect.d.ts.map +1 -0
- package/lib/types/ink/components/NoSelect.js +56 -0
- package/lib/types/ink/components/RawAnsi.d.ts +17 -0
- package/lib/types/ink/components/RawAnsi.d.ts.map +1 -0
- package/lib/types/ink/components/RawAnsi.js +45 -0
- package/lib/types/ink/components/ScrollBox.d.ts +78 -0
- package/lib/types/ink/components/ScrollBox.d.ts.map +1 -0
- package/lib/types/ink/components/ScrollBox.js +174 -0
- package/lib/types/ink/components/Spacer.d.ts +6 -0
- package/lib/types/ink/components/Spacer.d.ts.map +1 -0
- package/lib/types/ink/components/Spacer.js +19 -0
- package/lib/types/ink/components/StdinContext.d.ts +32 -0
- package/lib/types/ink/components/StdinContext.d.ts.map +1 -0
- package/lib/types/ink/components/StdinContext.js +16 -0
- package/lib/types/ink/components/TerminalFocusContext.d.ts +11 -0
- package/lib/types/ink/components/TerminalFocusContext.d.ts.map +1 -0
- package/lib/types/ink/components/TerminalFocusContext.js +45 -0
- package/lib/types/ink/components/TerminalSizeContext.d.ts +6 -0
- package/lib/types/ink/components/TerminalSizeContext.d.ts.map +1 -0
- package/lib/types/ink/components/TerminalSizeContext.js +3 -0
- package/lib/types/ink/components/Text.d.ts +56 -0
- package/lib/types/ink/components/Text.d.ts.map +1 -0
- package/lib/types/ink/components/Text.js +194 -0
- package/lib/types/ink/constants.d.ts +3 -0
- package/lib/types/ink/constants.d.ts.map +1 -0
- package/lib/types/ink/constants.js +2 -0
- package/lib/types/ink/cursor.d.ts +11 -0
- package/lib/types/ink/cursor.d.ts.map +1 -0
- package/lib/types/ink/cursor.js +1 -0
- package/lib/types/ink/devtools.d.ts +7 -0
- package/lib/types/ink/devtools.d.ts.map +1 -0
- package/lib/types/ink/devtools.js +1 -0
- package/lib/types/ink/dom.d.ts +178 -0
- package/lib/types/ink/dom.d.ts.map +1 -0
- package/lib/types/ink/dom.js +424 -0
- package/lib/types/ink/events/click-event.d.ts +32 -0
- package/lib/types/ink/events/click-event.d.ts.map +1 -0
- package/lib/types/ink/events/click-event.js +36 -0
- package/lib/types/ink/events/dispatcher.d.ts +63 -0
- package/lib/types/ink/events/dispatcher.d.ts.map +1 -0
- package/lib/types/ink/events/dispatcher.js +194 -0
- package/lib/types/ink/events/emitter.d.ts +20 -0
- package/lib/types/ink/events/emitter.d.ts.map +1 -0
- package/lib/types/ink/events/emitter.js +43 -0
- package/lib/types/ink/events/event-handlers.d.ts +47 -0
- package/lib/types/ink/events/event-handlers.d.ts.map +1 -0
- package/lib/types/ink/events/event-handlers.js +30 -0
- package/lib/types/ink/events/event.d.ts +19 -0
- package/lib/types/ink/events/event.d.ts.map +1 -0
- package/lib/types/ink/events/event.js +22 -0
- package/lib/types/ink/events/focus-event.d.ts +19 -0
- package/lib/types/ink/events/focus-event.d.ts.map +1 -0
- package/lib/types/ink/events/focus-event.js +21 -0
- package/lib/types/ink/events/input-event.d.ts +53 -0
- package/lib/types/ink/events/input-event.d.ts.map +1 -0
- package/lib/types/ink/events/input-event.js +180 -0
- package/lib/types/ink/events/keyboard-event.d.ts +40 -0
- package/lib/types/ink/events/keyboard-event.d.ts.map +1 -0
- package/lib/types/ink/events/keyboard-event.js +65 -0
- package/lib/types/ink/events/paste-event.d.ts +11 -0
- package/lib/types/ink/events/paste-event.d.ts.map +1 -0
- package/lib/types/ink/events/paste-event.js +13 -0
- package/lib/types/ink/events/resize-event.d.ts +13 -0
- package/lib/types/ink/events/resize-event.d.ts.map +1 -0
- package/lib/types/ink/events/resize-event.js +16 -0
- package/lib/types/ink/events/terminal-event.d.ts +112 -0
- package/lib/types/ink/events/terminal-event.d.ts.map +1 -0
- package/lib/types/ink/events/terminal-event.js +131 -0
- package/lib/types/ink/events/terminal-focus-event.d.ts +21 -0
- package/lib/types/ink/events/terminal-focus-event.d.ts.map +1 -0
- package/lib/types/ink/events/terminal-focus-event.js +18 -0
- package/lib/types/ink/focus.d.ts +74 -0
- package/lib/types/ink/focus.d.ts.map +1 -0
- package/lib/types/ink/focus.js +188 -0
- package/lib/types/ink/frame.d.ts +119 -0
- package/lib/types/ink/frame.d.ts.map +1 -0
- package/lib/types/ink/frame.js +43 -0
- package/lib/types/ink/get-max-width.d.ts +20 -0
- package/lib/types/ink/get-max-width.d.ts.map +1 -0
- package/lib/types/ink/get-max-width.js +25 -0
- package/lib/types/ink/hit-test.d.ts +47 -0
- package/lib/types/ink/hit-test.d.ts.map +1 -0
- package/lib/types/ink/hit-test.js +126 -0
- package/lib/types/ink/hooks/use-animation-frame.d.ts +27 -0
- package/lib/types/ink/hooks/use-animation-frame.d.ts.map +1 -0
- package/lib/types/ink/hooks/use-animation-frame.js +48 -0
- package/lib/types/ink/hooks/use-app.d.ts +8 -0
- package/lib/types/ink/hooks/use-app.d.ts.map +1 -0
- package/lib/types/ink/hooks/use-app.js +8 -0
- package/lib/types/ink/hooks/use-copy-on-select.d.ts +22 -0
- package/lib/types/ink/hooks/use-copy-on-select.d.ts.map +1 -0
- package/lib/types/ink/hooks/use-copy-on-select.js +40 -0
- package/lib/types/ink/hooks/use-declared-cursor.d.ts +31 -0
- package/lib/types/ink/hooks/use-declared-cursor.d.ts.map +1 -0
- package/lib/types/ink/hooks/use-declared-cursor.js +65 -0
- package/lib/types/ink/hooks/use-input.d.ts +41 -0
- package/lib/types/ink/hooks/use-input.d.ts.map +1 -0
- package/lib/types/ink/hooks/use-input.js +73 -0
- package/lib/types/ink/hooks/use-interval.d.ts +23 -0
- package/lib/types/ink/hooks/use-interval.d.ts.map +1 -0
- package/lib/types/ink/hooks/use-interval.js +58 -0
- package/lib/types/ink/hooks/use-search-highlight.d.ts +34 -0
- package/lib/types/ink/hooks/use-search-highlight.d.ts.map +1 -0
- package/lib/types/ink/hooks/use-search-highlight.js +35 -0
- package/lib/types/ink/hooks/use-selection.d.ts +44 -0
- package/lib/types/ink/hooks/use-selection.d.ts.map +1 -0
- package/lib/types/ink/hooks/use-selection.js +64 -0
- package/lib/types/ink/hooks/use-stdin.d.ts +8 -0
- package/lib/types/ink/hooks/use-stdin.d.ts.map +1 -0
- package/lib/types/ink/hooks/use-stdin.js +8 -0
- package/lib/types/ink/hooks/use-tab-status.d.ts +18 -0
- package/lib/types/ink/hooks/use-tab-status.d.ts.map +1 -0
- package/lib/types/ink/hooks/use-tab-status.js +58 -0
- package/lib/types/ink/hooks/use-terminal-focus.d.ts +11 -0
- package/lib/types/ink/hooks/use-terminal-focus.d.ts.map +1 -0
- package/lib/types/ink/hooks/use-terminal-focus.js +15 -0
- package/lib/types/ink/hooks/use-terminal-size.d.ts +6 -0
- package/lib/types/ink/hooks/use-terminal-size.d.ts.map +1 -0
- package/lib/types/ink/hooks/use-terminal-size.js +12 -0
- package/lib/types/ink/hooks/use-terminal-title.d.ts +14 -0
- package/lib/types/ink/hooks/use-terminal-title.d.ts.map +1 -0
- package/lib/types/ink/hooks/use-terminal-title.js +30 -0
- package/lib/types/ink/hooks/use-terminal-viewport.d.ts +32 -0
- package/lib/types/ink/hooks/use-terminal-viewport.d.ts.map +1 -0
- package/lib/types/ink/hooks/use-terminal-viewport.js +79 -0
- package/lib/types/ink/ink.d.ts +370 -0
- package/lib/types/ink/ink.d.ts.map +1 -0
- package/lib/types/ink/ink.js +1665 -0
- package/lib/types/ink/instances.d.ts +10 -0
- package/lib/types/ink/instances.d.ts.map +1 -0
- package/lib/types/ink/instances.js +13 -0
- package/lib/types/ink/layout/engine.d.ts +7 -0
- package/lib/types/ink/layout/engine.d.ts.map +1 -0
- package/lib/types/ink/layout/engine.js +8 -0
- package/lib/types/ink/layout/geometry.d.ts +86 -0
- package/lib/types/ink/layout/geometry.d.ts.map +1 -0
- package/lib/types/ink/layout/geometry.js +95 -0
- package/lib/types/ink/layout/node.d.ts +151 -0
- package/lib/types/ink/layout/node.d.ts.map +1 -0
- package/lib/types/ink/layout/node.js +72 -0
- package/lib/types/ink/layout/yoga.d.ts +69 -0
- package/lib/types/ink/layout/yoga.d.ts.map +1 -0
- package/lib/types/ink/layout/yoga.js +249 -0
- package/lib/types/ink/line-width-cache.d.ts +9 -0
- package/lib/types/ink/line-width-cache.d.ts.map +1 -0
- package/lib/types/ink/line-width-cache.js +45 -0
- package/lib/types/ink/log-update.d.ts +57 -0
- package/lib/types/ink/log-update.d.ts.map +1 -0
- package/lib/types/ink/log-update.js +710 -0
- package/lib/types/ink/measure-element.d.ts +19 -0
- package/lib/types/ink/measure-element.d.ts.map +1 -0
- package/lib/types/ink/measure-element.js +10 -0
- package/lib/types/ink/measure-text.d.ts +13 -0
- package/lib/types/ink/measure-text.d.ts.map +1 -0
- package/lib/types/ink/measure-text.js +38 -0
- package/lib/types/ink/node-cache.d.ts +33 -0
- package/lib/types/ink/node-cache.d.ts.map +1 -0
- package/lib/types/ink/node-cache.js +42 -0
- package/lib/types/ink/optimizer.d.ts +18 -0
- package/lib/types/ink/optimizer.d.ts.map +1 -0
- package/lib/types/ink/optimizer.js +83 -0
- package/lib/types/ink/output.d.ts +200 -0
- package/lib/types/ink/output.d.ts.map +1 -0
- package/lib/types/ink/output.js +663 -0
- package/lib/types/ink/parse-keypress.d.ts +132 -0
- package/lib/types/ink/parse-keypress.d.ts.map +1 -0
- package/lib/types/ink/parse-keypress.js +707 -0
- package/lib/types/ink/reconciler.d.ts +43 -0
- package/lib/types/ink/reconciler.d.ts.map +1 -0
- package/lib/types/ink/reconciler.js +413 -0
- package/lib/types/ink/render-border.d.ts +36 -0
- package/lib/types/ink/render-border.d.ts.map +1 -0
- package/lib/types/ink/render-border.js +143 -0
- package/lib/types/ink/render-node-to-output.d.ts +93 -0
- package/lib/types/ink/render-node-to-output.d.ts.map +1 -0
- package/lib/types/ink/render-node-to-output.js +1290 -0
- package/lib/types/ink/render-to-screen.d.ts +65 -0
- package/lib/types/ink/render-to-screen.d.ts.map +1 -0
- package/lib/types/ink/render-to-screen.js +189 -0
- package/lib/types/ink/renderer.d.ts +24 -0
- package/lib/types/ink/renderer.d.ts.map +1 -0
- package/lib/types/ink/renderer.js +136 -0
- package/lib/types/ink/root.d.ts +91 -0
- package/lib/types/ink/root.d.ts.map +1 -0
- package/lib/types/ink/root.js +93 -0
- package/lib/types/ink/screen.d.ts +443 -0
- package/lib/types/ink/screen.d.ts.map +1 -0
- package/lib/types/ink/screen.js +1295 -0
- package/lib/types/ink/searchHighlight.d.ts +25 -0
- package/lib/types/ink/searchHighlight.d.ts.map +1 -0
- package/lib/types/ink/searchHighlight.js +82 -0
- package/lib/types/ink/selection.d.ts +323 -0
- package/lib/types/ink/selection.d.ts.map +1 -0
- package/lib/types/ink/selection.js +881 -0
- package/lib/types/ink/squash-text-nodes.d.ts +30 -0
- package/lib/types/ink/squash-text-nodes.d.ts.map +1 -0
- package/lib/types/ink/squash-text-nodes.js +63 -0
- package/lib/types/ink/stringWidth.d.ts +11 -0
- package/lib/types/ink/stringWidth.d.ts.map +1 -0
- package/lib/types/ink/stringWidth.js +209 -0
- package/lib/types/ink/styles.d.ts +324 -0
- package/lib/types/ink/styles.d.ts.map +1 -0
- package/lib/types/ink/styles.js +307 -0
- package/lib/types/ink/supports-hyperlinks.d.ts +20 -0
- package/lib/types/ink/supports-hyperlinks.d.ts.map +1 -0
- package/lib/types/ink/supports-hyperlinks.js +44 -0
- package/lib/types/ink/tabstops.d.ts +9 -0
- package/lib/types/ink/tabstops.d.ts.map +1 -0
- package/lib/types/ink/tabstops.js +46 -0
- package/lib/types/ink/terminal-focus-state.d.ts +35 -0
- package/lib/types/ink/terminal-focus-state.d.ts.map +1 -0
- package/lib/types/ink/terminal-focus-state.js +57 -0
- package/lib/types/ink/terminal-querier.d.ts +161 -0
- package/lib/types/ink/terminal-querier.d.ts.map +1 -0
- package/lib/types/ink/terminal-querier.js +204 -0
- package/lib/types/ink/terminal.d.ts +80 -0
- package/lib/types/ink/terminal.d.ts.map +1 -0
- package/lib/types/ink/terminal.js +268 -0
- package/lib/types/ink/termio/ansi.d.ts +75 -0
- package/lib/types/ink/termio/ansi.d.ts.map +1 -0
- package/lib/types/ink/termio/ansi.js +79 -0
- package/lib/types/ink/termio/csi.d.ts +253 -0
- package/lib/types/ink/termio/csi.d.ts.map +1 -0
- package/lib/types/ink/termio/csi.js +347 -0
- package/lib/types/ink/termio/dec.d.ts +61 -0
- package/lib/types/ink/termio/dec.d.ts.map +1 -0
- package/lib/types/ink/termio/dec.js +76 -0
- package/lib/types/ink/termio/esc.d.ts +15 -0
- package/lib/types/ink/termio/esc.d.ts.map +1 -0
- package/lib/types/ink/termio/esc.js +57 -0
- package/lib/types/ink/termio/osc.d.ts +208 -0
- package/lib/types/ink/termio/osc.d.ts.map +1 -0
- package/lib/types/ink/termio/osc.js +466 -0
- package/lib/types/ink/termio/parser.d.ts +46 -0
- package/lib/types/ink/termio/parser.d.ts.map +1 -0
- package/lib/types/ink/termio/parser.js +366 -0
- package/lib/types/ink/termio/sgr.d.ts +17 -0
- package/lib/types/ink/termio/sgr.d.ts.map +1 -0
- package/lib/types/ink/termio/sgr.js +300 -0
- package/lib/types/ink/termio/tokenize.d.ts +50 -0
- package/lib/types/ink/termio/tokenize.d.ts.map +1 -0
- package/lib/types/ink/termio/tokenize.js +266 -0
- package/lib/types/ink/termio/types.d.ts +211 -0
- package/lib/types/ink/termio/types.d.ts.map +1 -0
- package/lib/types/ink/termio/types.js +68 -0
- package/lib/types/ink/termio.d.ts +25 -0
- package/lib/types/ink/termio.d.ts.map +1 -0
- package/lib/types/ink/termio.js +24 -0
- package/lib/types/ink/truncateToWidth.d.ts +7 -0
- package/lib/types/ink/truncateToWidth.d.ts.map +1 -0
- package/lib/types/ink/truncateToWidth.js +18 -0
- package/lib/types/ink/useTerminalNotification.d.ts +45 -0
- package/lib/types/ink/useTerminalNotification.d.ts.map +1 -0
- package/lib/types/ink/useTerminalNotification.js +70 -0
- package/lib/types/ink/warn.d.ts +7 -0
- package/lib/types/ink/warn.d.ts.map +1 -0
- package/lib/types/ink/warn.js +15 -0
- package/lib/types/ink/widest-line.d.ts +7 -0
- package/lib/types/ink/widest-line.d.ts.map +1 -0
- package/lib/types/ink/widest-line.js +19 -0
- package/lib/types/ink/wrap-text.d.ts +10 -0
- package/lib/types/ink/wrap-text.d.ts.map +1 -0
- package/lib/types/ink/wrap-text.js +61 -0
- package/lib/types/ink/wrapAnsi.d.ts +18 -0
- package/lib/types/ink/wrapAnsi.d.ts.map +1 -0
- package/lib/types/ink/wrapAnsi.js +16 -0
- package/lib/types/invariant.d.ts +20 -0
- package/lib/types/invariant.d.ts.map +1 -0
- package/lib/types/invariant.js +26 -0
- package/lib/types/modelPrefs.d.ts +37 -0
- package/lib/types/modelPrefs.d.ts.map +1 -0
- package/lib/types/modelPrefs.js +66 -0
- package/lib/types/modelRoute.d.ts +79 -0
- package/lib/types/modelRoute.d.ts.map +1 -0
- package/lib/types/modelRoute.js +96 -0
- package/lib/types/native-ts/yoga-layout/enums.d.ts +183 -0
- package/lib/types/native-ts/yoga-layout/enums.d.ts.map +1 -0
- package/lib/types/native-ts/yoga-layout/enums.js +150 -0
- package/lib/types/native-ts/yoga-layout/index.d.ts +788 -0
- package/lib/types/native-ts/yoga-layout/index.d.ts.map +1 -0
- package/lib/types/native-ts/yoga-layout/index.js +2571 -0
- package/lib/types/packaged-skills.d.ts +10 -0
- package/lib/types/packaged-skills.d.ts.map +1 -0
- package/lib/types/packaged-skills.js +63 -0
- package/lib/types/plugin.d.ts +33 -0
- package/lib/types/plugin.d.ts.map +1 -0
- package/lib/types/plugin.js +454 -0
- package/lib/types/presetPrefs.d.ts +29 -0
- package/lib/types/presetPrefs.d.ts.map +1 -0
- package/lib/types/presetPrefs.js +61 -0
- package/lib/types/presets.d.ts +110 -0
- package/lib/types/presets.d.ts.map +1 -0
- package/lib/types/presets.js +114 -0
- package/lib/types/questions.d.ts +97 -0
- package/lib/types/questions.d.ts.map +1 -0
- package/lib/types/questions.js +201 -0
- package/lib/types/screens/Chat.d.ts +23 -0
- package/lib/types/screens/Chat.d.ts.map +1 -0
- package/lib/types/screens/Chat.js +1263 -0
- package/lib/types/screens/StatusLine.d.ts +16 -0
- package/lib/types/screens/StatusLine.d.ts.map +1 -0
- package/lib/types/screens/StatusLine.js +105 -0
- package/lib/types/screens/StatusMetrics.d.ts +87 -0
- package/lib/types/screens/StatusMetrics.d.ts.map +1 -0
- package/lib/types/screens/StatusMetrics.js +252 -0
- package/lib/types/sessionHistory.d.ts +32 -0
- package/lib/types/sessionHistory.d.ts.map +1 -0
- package/lib/types/sessionHistory.js +87 -0
- package/lib/types/theme.d.ts +115 -0
- package/lib/types/theme.d.ts.map +1 -0
- package/lib/types/theme.js +300 -0
- package/lib/types/themePrefs.d.ts +28 -0
- package/lib/types/themePrefs.d.ts.map +1 -0
- package/lib/types/themePrefs.js +59 -0
- package/lib/types/ui.d.ts +28 -0
- package/lib/types/ui.d.ts.map +1 -0
- package/lib/types/ui.js +25 -0
- package/lib/types/update.d.ts +76 -0
- package/lib/types/update.d.ts.map +1 -0
- package/lib/types/update.js +203 -0
- package/lib/types/utils/clipboard.d.ts +43 -0
- package/lib/types/utils/clipboard.d.ts.map +1 -0
- package/lib/types/utils/clipboard.js +82 -0
- package/lib/types/utils/debug.d.ts +8 -0
- package/lib/types/utils/debug.d.ts.map +1 -0
- package/lib/types/utils/debug.js +12 -0
- package/lib/types/utils/earlyInput.d.ts +7 -0
- package/lib/types/utils/earlyInput.d.ts.map +1 -0
- package/lib/types/utils/earlyInput.js +6 -0
- package/lib/types/utils/env.d.ts +10 -0
- package/lib/types/utils/env.d.ts.map +1 -0
- package/lib/types/utils/env.js +9 -0
- package/lib/types/utils/envUtils.d.ts +8 -0
- package/lib/types/utils/envUtils.d.ts.map +1 -0
- package/lib/types/utils/envUtils.js +13 -0
- package/lib/types/utils/execFileNoThrow.d.ts +34 -0
- package/lib/types/utils/execFileNoThrow.d.ts.map +1 -0
- package/lib/types/utils/execFileNoThrow.js +31 -0
- package/lib/types/utils/fullscreen.d.ts +8 -0
- package/lib/types/utils/fullscreen.d.ts.map +1 -0
- package/lib/types/utils/fullscreen.js +10 -0
- package/lib/types/utils/intl.d.ts +7 -0
- package/lib/types/utils/intl.d.ts.map +1 -0
- package/lib/types/utils/intl.js +9 -0
- package/lib/types/utils/loaded-context.d.ts +20 -0
- package/lib/types/utils/loaded-context.d.ts.map +1 -0
- package/lib/types/utils/loaded-context.js +36 -0
- package/lib/types/utils/log.d.ts +7 -0
- package/lib/types/utils/log.d.ts.map +1 -0
- package/lib/types/utils/log.js +9 -0
- package/lib/types/utils/mentions.d.ts +30 -0
- package/lib/types/utils/mentions.d.ts.map +1 -0
- package/lib/types/utils/mentions.js +72 -0
- package/lib/types/utils/narration.d.ts +11 -0
- package/lib/types/utils/narration.d.ts.map +1 -0
- package/lib/types/utils/narration.js +16 -0
- package/lib/types/utils/semver.d.ts +9 -0
- package/lib/types/utils/semver.d.ts.map +1 -0
- package/lib/types/utils/semver.js +24 -0
- package/lib/types/utils/sliceAnsi.d.ts +12 -0
- package/lib/types/utils/sliceAnsi.d.ts.map +1 -0
- package/lib/types/utils/sliceAnsi.js +79 -0
- package/lib/types/working-activity.d.ts +19 -0
- package/lib/types/working-activity.d.ts.map +1 -0
- package/lib/types/working-activity.js +18 -0
- package/package.json +141 -0
- package/skills/audit/SKILL.md +24 -0
- package/skills/bug/SKILL.md +27 -0
- package/skills/pr-comments/SKILL.md +20 -0
- package/skills/practice/SKILL.md +22 -0
- package/skills/release-notes/SKILL.md +25 -0
- package/skills/review/SKILL.md +25 -0
- package/skills/vuln-check/SKILL.md +25 -0
|
@@ -0,0 +1,926 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* dsh-tui localization — UI strings for Chinese (`zh`, the default) and
|
|
3
|
+
* English (`en`).
|
|
4
|
+
*
|
|
5
|
+
* Resolution order mirrors the `/theme` mechanism (see themePrefs.ts):
|
|
6
|
+
*
|
|
7
|
+
* 1. `CC_TUI_LANG` env var (`en` / `zh`) — pinned at process start
|
|
8
|
+
* 2. `lang` cordis.yml config key (see Config in index.ts)
|
|
9
|
+
* 3. the persisted `/lang` choice in `~/.dsh-cc/lang.json`
|
|
10
|
+
* 4. the OS locale guess (`LC_ALL` / `LC_MESSAGES` / `LANG`)
|
|
11
|
+
* 5. `zh` (the original hard-coded language)
|
|
12
|
+
*
|
|
13
|
+
* `/lang` switches at runtime and hot-swaps the whole UI. The dictionary is
|
|
14
|
+
* a flat key → per-language string map; `t(key, params)` substitutes
|
|
15
|
+
* `{{name}}` placeholders with the given params. Missing keys render the
|
|
16
|
+
* key itself so a typo is visible in the UI instead of silently blank.
|
|
17
|
+
*/
|
|
18
|
+
export type Lang = 'zh' | 'en';
|
|
19
|
+
/** The languages shipped with the plugin, in display order. */
|
|
20
|
+
export declare const LANGS: readonly ["zh", "en"];
|
|
21
|
+
declare const dict: {
|
|
22
|
+
readonly 'activity-indicator-already': {
|
|
23
|
+
readonly zh: "指示器已是:{{name}}";
|
|
24
|
+
readonly en: "Indicator already set: {{name}}";
|
|
25
|
+
};
|
|
26
|
+
readonly 'activity-indicator-switched': {
|
|
27
|
+
readonly zh: "指示器已切换:{{name}}(已保存)";
|
|
28
|
+
readonly en: "Indicator switched: {{name}} (saved)";
|
|
29
|
+
};
|
|
30
|
+
readonly 'activity-pref-write-failed': {
|
|
31
|
+
readonly zh: "无法写入 ~/.dsh-cc/working-activity.json,切换未保存";
|
|
32
|
+
readonly en: "Cannot write ~/.dsh-cc/working-activity.json, switch not saved";
|
|
33
|
+
};
|
|
34
|
+
readonly 'model-pref-write-failed': {
|
|
35
|
+
readonly zh: "无法写入 ~/.dsh-cc/model.json,模型选择不会保存到重启后";
|
|
36
|
+
readonly en: "Cannot write ~/.dsh-cc/model.json, the model choice will not survive a restart";
|
|
37
|
+
};
|
|
38
|
+
readonly 'model-route-invalid': {
|
|
39
|
+
readonly zh: "持久化的模型路由 {{provider}}/{{model}} 不在该 provider 的模型列表中,已整体回退到 {{fallback}}";
|
|
40
|
+
readonly en: "Persisted model route {{provider}}/{{model}} is not advertised by that provider; fell back to {{fallback}}";
|
|
41
|
+
};
|
|
42
|
+
readonly 'unknown-activity-preset': {
|
|
43
|
+
readonly zh: "未知预设「{{name}}」· /activity frames 查看全部";
|
|
44
|
+
readonly en: "Unknown preset \"{{name}}\" · /activity frames to view all";
|
|
45
|
+
};
|
|
46
|
+
readonly 'preset-unavailable': {
|
|
47
|
+
readonly zh: "Preset 不可用——当前组合未挂载 agent-presets 名册";
|
|
48
|
+
readonly en: "Preset unavailable — the agent-presets roster is not mounted";
|
|
49
|
+
};
|
|
50
|
+
readonly 'preset-agent-running': {
|
|
51
|
+
readonly zh: "Agent 运行中,无法切换 preset";
|
|
52
|
+
readonly en: "Agent is running, cannot switch preset";
|
|
53
|
+
};
|
|
54
|
+
readonly 'preset-not-found': {
|
|
55
|
+
readonly zh: "Preset「{{id}}」不存在 · {{err}}";
|
|
56
|
+
readonly en: "Preset \"{{id}}\" not found · {{err}}";
|
|
57
|
+
};
|
|
58
|
+
readonly 'preset-load-failed': {
|
|
59
|
+
readonly zh: "Preset「{{id}}」无法加载 · {{broken}}";
|
|
60
|
+
readonly en: "Preset \"{{id}}\" failed to load · {{broken}}";
|
|
61
|
+
};
|
|
62
|
+
readonly 'preset-already-current': {
|
|
63
|
+
readonly zh: "当前 preset 已是:{{id}}";
|
|
64
|
+
readonly en: "Current preset already: {{id}}";
|
|
65
|
+
};
|
|
66
|
+
readonly 'preset-pref-write-failed': {
|
|
67
|
+
readonly zh: "无法写入 ~/.dsh-cc/agent-preset.json,选择未保存";
|
|
68
|
+
readonly en: "Cannot write ~/.dsh-cc/agent-preset.json, selection not saved";
|
|
69
|
+
};
|
|
70
|
+
readonly 'preset-locked-saved-default': {
|
|
71
|
+
readonly zh: "会话已开始,preset 已锁定(当前:{{current}})· 已保存为默认:{{id}}(/new 或下次启动生效)";
|
|
72
|
+
readonly en: "Session already started, preset locked (current: {{current}}) · Saved as default: {{id}} (applies on /new or next start)";
|
|
73
|
+
};
|
|
74
|
+
readonly 'preset-switch-failed': {
|
|
75
|
+
readonly zh: "Preset 切换失败 · {{err}}";
|
|
76
|
+
readonly en: "Preset switch failed · {{err}}";
|
|
77
|
+
};
|
|
78
|
+
readonly 'preset-switched-pref-failed': {
|
|
79
|
+
readonly zh: "Preset 已切换:{{id}},但默认偏好写入失败(重启后不保留)";
|
|
80
|
+
readonly en: "Preset switched: {{id}}, but writing the default preference failed (won't persist after restart)";
|
|
81
|
+
};
|
|
82
|
+
readonly 'preset-switched-saved': {
|
|
83
|
+
readonly zh: "Preset 已切换:{{id}}(已保存为默认)";
|
|
84
|
+
readonly en: "Preset switched: {{id}} (saved as default)";
|
|
85
|
+
};
|
|
86
|
+
readonly 'mcp-none-configured': {
|
|
87
|
+
readonly zh: "未配置 MCP 服务器。";
|
|
88
|
+
readonly en: "No MCP servers configured.";
|
|
89
|
+
};
|
|
90
|
+
readonly 'mcp-insert-hint': {
|
|
91
|
+
readonly zh: "在 profile 补丁层(~/.dsh/profiles/dsh-tui/cordis.patch.yml)insert 一行即可,例:";
|
|
92
|
+
readonly en: "Insert one line in the profile patch layer (~/.dsh/profiles/dsh-tui/cordis.patch.yml), e.g.:";
|
|
93
|
+
};
|
|
94
|
+
readonly 'mcp-readme-hint': {
|
|
95
|
+
readonly zh: "详见仓库 README 的 MCP 章节。";
|
|
96
|
+
readonly en: "See the MCP section of the repo README.";
|
|
97
|
+
};
|
|
98
|
+
readonly 'mcp-server-tools': {
|
|
99
|
+
readonly zh: "{{server}}({{count}} 个工具): {{tools}}";
|
|
100
|
+
readonly en: "{{server}} ({{count}} tools): {{tools}}";
|
|
101
|
+
};
|
|
102
|
+
readonly 'child-stderr-line': {
|
|
103
|
+
readonly zh: "子进程 stderr: {{line}}";
|
|
104
|
+
readonly en: "Subprocess stderr: {{line}}";
|
|
105
|
+
};
|
|
106
|
+
readonly 'child-stderr-line-repeat': {
|
|
107
|
+
readonly zh: "子进程 stderr: {{line}}(重复 {{count}} 次)";
|
|
108
|
+
readonly en: "Subprocess stderr: {{line}} (repeated {{count}}×)";
|
|
109
|
+
};
|
|
110
|
+
readonly 'export-title': {
|
|
111
|
+
readonly zh: "# dsh-tui 会话导出";
|
|
112
|
+
readonly en: "# dsh-tui session export";
|
|
113
|
+
};
|
|
114
|
+
readonly 'export-time': {
|
|
115
|
+
readonly zh: "- 导出时间: {{time}}";
|
|
116
|
+
readonly en: "- Exported: {{time}}";
|
|
117
|
+
};
|
|
118
|
+
readonly 'export-model': {
|
|
119
|
+
readonly zh: "- 模型: {{model}}";
|
|
120
|
+
readonly en: "- Model: {{model}}";
|
|
121
|
+
};
|
|
122
|
+
readonly 'export-session': {
|
|
123
|
+
readonly zh: "- 会话: {{id}}";
|
|
124
|
+
readonly en: "- Session: {{id}}";
|
|
125
|
+
};
|
|
126
|
+
readonly 'export-dir': {
|
|
127
|
+
readonly zh: "- 目录: {{cwd}}";
|
|
128
|
+
readonly en: "- Directory: {{cwd}}";
|
|
129
|
+
};
|
|
130
|
+
readonly 'mentions-attached': {
|
|
131
|
+
readonly zh: "已附加 {{count}} 个文件引用";
|
|
132
|
+
readonly en: "Attached {{count}} file reference(s)";
|
|
133
|
+
};
|
|
134
|
+
readonly 'mentions-missing': {
|
|
135
|
+
readonly zh: "未找到引用: {{paths}}";
|
|
136
|
+
readonly en: "References not found: {{paths}}";
|
|
137
|
+
};
|
|
138
|
+
readonly 'send-failed': {
|
|
139
|
+
readonly zh: "发送失败 · {{err}}";
|
|
140
|
+
readonly en: "Send failed · {{err}}";
|
|
141
|
+
};
|
|
142
|
+
readonly 'export-user-section': {
|
|
143
|
+
readonly zh: "## 用户";
|
|
144
|
+
readonly en: "## User";
|
|
145
|
+
};
|
|
146
|
+
readonly 'export-thinking-section': {
|
|
147
|
+
readonly zh: "## 思考";
|
|
148
|
+
readonly en: "## Thinking";
|
|
149
|
+
};
|
|
150
|
+
readonly 'export-assistant-section': {
|
|
151
|
+
readonly zh: "## 助手";
|
|
152
|
+
readonly en: "## Assistant";
|
|
153
|
+
};
|
|
154
|
+
readonly 'export-tool-section': {
|
|
155
|
+
readonly zh: "## 工具 · {{name}}";
|
|
156
|
+
readonly en: "## Tool · {{name}}";
|
|
157
|
+
};
|
|
158
|
+
readonly 'export-result-section': {
|
|
159
|
+
readonly zh: "### 结果";
|
|
160
|
+
readonly en: "### Result";
|
|
161
|
+
};
|
|
162
|
+
readonly 'agentsmd-project': {
|
|
163
|
+
readonly zh: "## 项目";
|
|
164
|
+
readonly en: "## Project";
|
|
165
|
+
};
|
|
166
|
+
readonly 'agentsmd-project-body': {
|
|
167
|
+
readonly zh: "(在此描述项目的目标、结构与约定——这份文件会注入给每个 agent 作为工作区上下文。)";
|
|
168
|
+
readonly en: "(Describe the project's goals, structure and conventions here — this file is injected to every agent as workspace context.)";
|
|
169
|
+
};
|
|
170
|
+
readonly 'agentsmd-conventions': {
|
|
171
|
+
readonly zh: "## 约定";
|
|
172
|
+
readonly en: "## Conventions";
|
|
173
|
+
};
|
|
174
|
+
readonly 'agentsmd-convention-read': {
|
|
175
|
+
readonly zh: "- 改动前先阅读相关模块";
|
|
176
|
+
readonly en: "- Read the relevant modules before making changes";
|
|
177
|
+
};
|
|
178
|
+
readonly 'agentsmd-convention-style': {
|
|
179
|
+
readonly zh: "- 保持与现有代码风格一致";
|
|
180
|
+
readonly en: "- Keep consistent with the existing code style";
|
|
181
|
+
};
|
|
182
|
+
readonly 'doctor-api-key': {
|
|
183
|
+
readonly zh: "API key: {{state}}";
|
|
184
|
+
readonly en: "API key: {{state}}";
|
|
185
|
+
};
|
|
186
|
+
readonly 'doctor-key-configured': {
|
|
187
|
+
readonly zh: "已配置";
|
|
188
|
+
readonly en: "configured";
|
|
189
|
+
};
|
|
190
|
+
readonly 'doctor-key-missing': {
|
|
191
|
+
readonly zh: "未配置(DEEPSEEK_API_KEY)";
|
|
192
|
+
readonly en: "not configured (DEEPSEEK_API_KEY)";
|
|
193
|
+
};
|
|
194
|
+
readonly 'doctor-model': {
|
|
195
|
+
readonly zh: "模型: {{model}} · 提供方: {{provider}}";
|
|
196
|
+
readonly en: "Model: {{model}} · Provider: {{provider}}";
|
|
197
|
+
};
|
|
198
|
+
readonly 'doctor-cwd': {
|
|
199
|
+
readonly zh: "工作目录: {{cwd}}";
|
|
200
|
+
readonly en: "Working directory: {{cwd}}";
|
|
201
|
+
};
|
|
202
|
+
readonly 'doctor-context-window': {
|
|
203
|
+
readonly zh: "上下文窗口: {{window}} tokens";
|
|
204
|
+
readonly en: "Context window: {{window}} tokens";
|
|
205
|
+
};
|
|
206
|
+
readonly 'doctor-unknown': {
|
|
207
|
+
readonly zh: "未知";
|
|
208
|
+
readonly en: "unknown";
|
|
209
|
+
};
|
|
210
|
+
readonly 'doctor-session': {
|
|
211
|
+
readonly zh: "会话: {{id}}";
|
|
212
|
+
readonly en: "Session: {{id}}";
|
|
213
|
+
};
|
|
214
|
+
readonly 'doctor-config': {
|
|
215
|
+
readonly zh: "配置: {{candidate}} {{state}}";
|
|
216
|
+
readonly en: "Config: {{candidate}} {{state}}";
|
|
217
|
+
};
|
|
218
|
+
readonly 'doctor-config-missing': {
|
|
219
|
+
readonly zh: "(不存在)";
|
|
220
|
+
readonly en: "(missing)";
|
|
221
|
+
};
|
|
222
|
+
readonly 'doctor-storage': {
|
|
223
|
+
readonly zh: "会话存储: {{dir}} {{state}}";
|
|
224
|
+
readonly en: "Session storage: {{dir}} {{state}}";
|
|
225
|
+
};
|
|
226
|
+
readonly 'doctor-storage-uninit': {
|
|
227
|
+
readonly zh: "(未初始化)";
|
|
228
|
+
readonly en: "(not initialized)";
|
|
229
|
+
};
|
|
230
|
+
readonly 'subagent-not-mounted': {
|
|
231
|
+
readonly zh: "子代理服务未挂载(leaf 未启用 subagent)";
|
|
232
|
+
readonly en: "Subagent service not mounted (leaf has no subagent)";
|
|
233
|
+
};
|
|
234
|
+
readonly 'subagent-none': {
|
|
235
|
+
readonly zh: "当前会话暂无子代理";
|
|
236
|
+
readonly en: "No subagents in the current session";
|
|
237
|
+
};
|
|
238
|
+
readonly 'subagent-resumable': {
|
|
239
|
+
readonly zh: "可续";
|
|
240
|
+
readonly en: "resumable";
|
|
241
|
+
};
|
|
242
|
+
readonly 'subagent-oneshot': {
|
|
243
|
+
readonly zh: "一次性";
|
|
244
|
+
readonly en: "one-shot";
|
|
245
|
+
};
|
|
246
|
+
readonly 'subagent-row': {
|
|
247
|
+
readonly zh: "{{mode}} {{label}}{{activity}} · {{id}}";
|
|
248
|
+
readonly en: "{{mode}} {{label}}{{activity}} · {{id}}";
|
|
249
|
+
};
|
|
250
|
+
readonly 'subagent-running': {
|
|
251
|
+
readonly zh: " 运行中";
|
|
252
|
+
readonly en: " running";
|
|
253
|
+
};
|
|
254
|
+
readonly 'subagent-archived': {
|
|
255
|
+
readonly zh: " 已归档";
|
|
256
|
+
readonly en: " archived";
|
|
257
|
+
};
|
|
258
|
+
readonly 'subagent-query-failed': {
|
|
259
|
+
readonly zh: "查询失败 · {{err}}";
|
|
260
|
+
readonly en: "Query failed · {{err}}";
|
|
261
|
+
};
|
|
262
|
+
readonly 'agent-preset-switched': {
|
|
263
|
+
readonly zh: "Agent preset 已切换:{{preset}}";
|
|
264
|
+
readonly en: "Agent preset switched: {{preset}}";
|
|
265
|
+
};
|
|
266
|
+
readonly 'questionnaire-answered': {
|
|
267
|
+
readonly zh: "📋 问卷已答 · {{total}} 题";
|
|
268
|
+
readonly en: "📋 Questionnaire answered · {{total}} questions";
|
|
269
|
+
};
|
|
270
|
+
readonly 'theme-sakura-name': {
|
|
271
|
+
readonly zh: "樱花粉";
|
|
272
|
+
readonly en: "Sakura Pink";
|
|
273
|
+
};
|
|
274
|
+
readonly 'context-truncated': {
|
|
275
|
+
readonly zh: "…(已截断)";
|
|
276
|
+
readonly en: "… (truncated)";
|
|
277
|
+
};
|
|
278
|
+
readonly 'context-sections': {
|
|
279
|
+
readonly zh: "系统提示词 {{n}} 段";
|
|
280
|
+
readonly en: "System prompt {{n}} sections";
|
|
281
|
+
};
|
|
282
|
+
readonly 'context-files': {
|
|
283
|
+
readonly zh: "工作区指令 ×{{n}}";
|
|
284
|
+
readonly en: "Workspace instructions ×{{n}}";
|
|
285
|
+
};
|
|
286
|
+
readonly 'context-runtime': {
|
|
287
|
+
readonly zh: "运行时上下文 {{n}} 项";
|
|
288
|
+
readonly en: "Runtime context {{n}} items";
|
|
289
|
+
};
|
|
290
|
+
readonly 'context-skills': {
|
|
291
|
+
readonly zh: "技能 {{n}}";
|
|
292
|
+
readonly en: "Skills {{n}}";
|
|
293
|
+
};
|
|
294
|
+
readonly 'context-tools': {
|
|
295
|
+
readonly zh: "工具 {{n}}";
|
|
296
|
+
readonly en: "Tools {{n}}";
|
|
297
|
+
};
|
|
298
|
+
readonly 'skill-audit-prompt': {
|
|
299
|
+
readonly zh: "请使用 audit 技能对当前项目做一次全面的代码审计,找出安全、正确性与质量问题。";
|
|
300
|
+
readonly en: "Use the audit skill to do a thorough code audit of the current project, finding security, correctness and quality issues.";
|
|
301
|
+
};
|
|
302
|
+
readonly 'skill-bug-prompt': {
|
|
303
|
+
readonly zh: "请使用 bug 技能协助我记录一份完整的 bug 报告(现象、复现步骤、期望行为)。";
|
|
304
|
+
readonly en: "Use the bug skill to help me write a complete bug report (symptoms, reproduction steps, expected behavior).";
|
|
305
|
+
};
|
|
306
|
+
readonly 'skill-practice-prompt': {
|
|
307
|
+
readonly zh: "请使用 practice 技能陪我进行一轮编程练习。";
|
|
308
|
+
readonly en: "Use the practice skill to run a round of programming practice with me.";
|
|
309
|
+
};
|
|
310
|
+
readonly 'skill-review-prompt': {
|
|
311
|
+
readonly zh: "请使用 review 技能对当前项目做一次全面的代码评审。";
|
|
312
|
+
readonly en: "Use the review skill to do a thorough code review of the current project.";
|
|
313
|
+
};
|
|
314
|
+
readonly 'skill-pr-comments-prompt': {
|
|
315
|
+
readonly zh: "请使用 pr-comments 技能审查当前分支的拉取请求评论并给出改进建议。";
|
|
316
|
+
readonly en: "Use the pr-comments skill to review pull request comments on the current branch and suggest improvements.";
|
|
317
|
+
};
|
|
318
|
+
readonly 'skill-release-notes-prompt': {
|
|
319
|
+
readonly zh: "请使用 release-notes 技能为当前项目生成发布说明。";
|
|
320
|
+
readonly en: "Use the release-notes skill to generate release notes for the current project.";
|
|
321
|
+
};
|
|
322
|
+
readonly 'skill-vuln-check-prompt': {
|
|
323
|
+
readonly zh: "请使用 vuln-check 技能对当前项目做一次安全漏洞检查。";
|
|
324
|
+
readonly en: "Use the vuln-check skill to run a security vulnerability check on the current project.";
|
|
325
|
+
};
|
|
326
|
+
readonly 'context-loaded': {
|
|
327
|
+
readonly zh: "已加载上下文";
|
|
328
|
+
readonly en: "Context loaded";
|
|
329
|
+
};
|
|
330
|
+
readonly 'copied-chars': {
|
|
331
|
+
readonly zh: "已复制 {{n}} 个字符";
|
|
332
|
+
readonly en: "Copied {{n}} characters";
|
|
333
|
+
};
|
|
334
|
+
readonly 'activity-usage-name': {
|
|
335
|
+
readonly zh: "/activity frames <名>";
|
|
336
|
+
readonly en: "/activity frames <name>";
|
|
337
|
+
};
|
|
338
|
+
readonly 'activity-current-preset': {
|
|
339
|
+
readonly zh: "当前预设 {{name}}";
|
|
340
|
+
readonly en: "Current preset {{name}}";
|
|
341
|
+
};
|
|
342
|
+
readonly 'activity-switch-hint': {
|
|
343
|
+
readonly zh: "切换 /activity(选择器)或 /activity frames <名>";
|
|
344
|
+
readonly en: "Switch /activity (picker) or /activity frames <name>";
|
|
345
|
+
};
|
|
346
|
+
readonly 'activity-persist-hint': {
|
|
347
|
+
readonly zh: "持久化 ~/.dsh-cc/working-activity.json(重启后仍生效)";
|
|
348
|
+
readonly en: "Persisted ~/.dsh-cc/working-activity.json (survives restart)";
|
|
349
|
+
};
|
|
350
|
+
readonly 'activity-current-direct': {
|
|
351
|
+
readonly zh: "当前预设:{{name}} · /activity frames <名> 直接切换:";
|
|
352
|
+
readonly en: "Current preset: {{name}} · /activity frames <name> to switch directly:";
|
|
353
|
+
};
|
|
354
|
+
readonly 'activity-random-each': {
|
|
355
|
+
readonly zh: "每次随机";
|
|
356
|
+
readonly en: "random each time";
|
|
357
|
+
};
|
|
358
|
+
readonly 'activity-current-marker': {
|
|
359
|
+
readonly zh: " ← 当前";
|
|
360
|
+
readonly en: " ← current";
|
|
361
|
+
};
|
|
362
|
+
readonly 'activity-usage': {
|
|
363
|
+
readonly zh: "用法:/activity | /activity frames <名> | /activity status";
|
|
364
|
+
readonly en: "Usage: /activity | /activity frames <name> | /activity status";
|
|
365
|
+
};
|
|
366
|
+
readonly 'preset-current': {
|
|
367
|
+
readonly zh: "当前 preset {{name}}";
|
|
368
|
+
readonly en: "Current preset {{name}}";
|
|
369
|
+
};
|
|
370
|
+
readonly 'preset-roster-missing': {
|
|
371
|
+
readonly zh: "(未挂载名册)";
|
|
372
|
+
readonly en: "(roster not mounted)";
|
|
373
|
+
};
|
|
374
|
+
readonly 'preset-switch-hint': {
|
|
375
|
+
readonly zh: "切换 /preset(选择器)或 /preset <id>";
|
|
376
|
+
readonly en: "Switch /preset (picker) or /preset <id>";
|
|
377
|
+
};
|
|
378
|
+
readonly 'preset-persist-hint': {
|
|
379
|
+
readonly zh: "持久化 ~/.dsh-cc/agent-preset.json(重启后仍生效;cordis.yml preset 优先)";
|
|
380
|
+
readonly en: "Persisted ~/.dsh-cc/agent-preset.json (survives restart; cordis.yml preset wins)";
|
|
381
|
+
};
|
|
382
|
+
readonly 'preset-lock-hint': {
|
|
383
|
+
readonly zh: "锁定规则 已开始的会话不可切换(官方 blank-only 规则)";
|
|
384
|
+
readonly en: "Lock rule started sessions cannot switch (official blank-only rule)";
|
|
385
|
+
};
|
|
386
|
+
readonly 'preset-roster-unmounted': {
|
|
387
|
+
readonly zh: "当前组合未挂载 agent-presets 名册(preset 不可用)";
|
|
388
|
+
readonly en: "The agent-presets roster is not mounted (presets unavailable)";
|
|
389
|
+
};
|
|
390
|
+
readonly 'theme-name-arg': {
|
|
391
|
+
readonly zh: "/theme <名字>";
|
|
392
|
+
readonly en: "/theme <name>";
|
|
393
|
+
};
|
|
394
|
+
readonly 'theme-current': {
|
|
395
|
+
readonly zh: "当前主题 {{name}}";
|
|
396
|
+
readonly en: "Current theme {{name}}";
|
|
397
|
+
};
|
|
398
|
+
readonly 'theme-switch-hint': {
|
|
399
|
+
readonly zh: "切换 /theme(选择器)或 /theme <名字>";
|
|
400
|
+
readonly en: "Switch /theme (picker) or /theme <name>";
|
|
401
|
+
};
|
|
402
|
+
readonly 'theme-persist-hint': {
|
|
403
|
+
readonly zh: "持久化 ~/.dsh-cc/theme.json(重启后仍生效;CC_TUI_THEME 优先)";
|
|
404
|
+
readonly en: "Persisted ~/.dsh-cc/theme.json (survives restart; CC_TUI_THEME wins)";
|
|
405
|
+
};
|
|
406
|
+
readonly 'theme-custom-hint': {
|
|
407
|
+
readonly zh: "自定义 ~/.dsh-cc/themes/<名字>.json(见 README「自定义主题」)";
|
|
408
|
+
readonly en: "Custom ~/.dsh-cc/themes/<name>.json (see README \"Custom themes\")";
|
|
409
|
+
};
|
|
410
|
+
readonly 'theme-switched-saved': {
|
|
411
|
+
readonly zh: "主题已切换:{{name}}(已保存)";
|
|
412
|
+
readonly en: "Theme switched: {{name}} (saved)";
|
|
413
|
+
};
|
|
414
|
+
readonly 'theme-unknown': {
|
|
415
|
+
readonly zh: "未知主题「{{name}}」· /theme 查看全部";
|
|
416
|
+
readonly en: "Unknown theme \"{{name}}\" · /theme to view all";
|
|
417
|
+
};
|
|
418
|
+
readonly 'status-model': {
|
|
419
|
+
readonly zh: "模型 {{model}}";
|
|
420
|
+
readonly en: "Model {{model}}";
|
|
421
|
+
};
|
|
422
|
+
readonly 'status-working': {
|
|
423
|
+
readonly zh: "工作中";
|
|
424
|
+
readonly en: "working";
|
|
425
|
+
};
|
|
426
|
+
readonly 'status-idle': {
|
|
427
|
+
readonly zh: "空闲";
|
|
428
|
+
readonly en: "idle";
|
|
429
|
+
};
|
|
430
|
+
readonly 'status-state': {
|
|
431
|
+
readonly zh: "状态 {{state}}";
|
|
432
|
+
readonly en: "Status {{state}}";
|
|
433
|
+
};
|
|
434
|
+
readonly 'status-session': {
|
|
435
|
+
readonly zh: "会话 {{id}}";
|
|
436
|
+
readonly en: "Session {{id}}";
|
|
437
|
+
};
|
|
438
|
+
readonly 'status-dir': {
|
|
439
|
+
readonly zh: "目录 {{cwd}}";
|
|
440
|
+
readonly en: "Directory {{cwd}}";
|
|
441
|
+
};
|
|
442
|
+
readonly 'cost-cache-rate': {
|
|
443
|
+
readonly zh: "缓存率 {{rate}}% · {{read}} 读 / {{write}} 写";
|
|
444
|
+
readonly en: "Cache rate {{rate}}% · {{read}} read / {{write}} write";
|
|
445
|
+
};
|
|
446
|
+
readonly 'cost-context': {
|
|
447
|
+
readonly zh: "上下文 {{pct}}%";
|
|
448
|
+
readonly en: "Context {{pct}}%";
|
|
449
|
+
};
|
|
450
|
+
readonly 'status-title': {
|
|
451
|
+
readonly zh: "标题 {{title}}";
|
|
452
|
+
readonly en: "Title {{title}}";
|
|
453
|
+
};
|
|
454
|
+
readonly 'cost-cache-hit-rate': {
|
|
455
|
+
readonly zh: "缓存命中率 {{rate}}% · 缓存 {{read}} 读 / {{write}} 写";
|
|
456
|
+
readonly en: "Cache hit rate {{rate}}% · cache {{read}} read / {{write}} write";
|
|
457
|
+
};
|
|
458
|
+
readonly 'cost-note': {
|
|
459
|
+
readonly zh: "注:DSH 不提供 API 费用计量,以上为 token 用量(按 provider 账单计费)";
|
|
460
|
+
readonly en: "Note: DSH provides no API cost metering; the above is token usage (billed by your provider)";
|
|
461
|
+
};
|
|
462
|
+
readonly 'doctor-example-config': {
|
|
463
|
+
readonly zh: "示例配置 {{path}}";
|
|
464
|
+
readonly en: "Example config {{path}}";
|
|
465
|
+
};
|
|
466
|
+
readonly 'doctor-user-config': {
|
|
467
|
+
readonly zh: "用户配置 {{path}}";
|
|
468
|
+
readonly en: "User config {{path}}";
|
|
469
|
+
};
|
|
470
|
+
readonly 'doctor-launch-hint': {
|
|
471
|
+
readonly zh: "启动方式 dsh-tui.cmd / dsh --profile dsh-tui";
|
|
472
|
+
readonly en: "Launch dsh-tui.cmd / dsh --profile dsh-tui";
|
|
473
|
+
};
|
|
474
|
+
readonly 'doctor-route-hint': {
|
|
475
|
+
readonly zh: "模型路由 由 cordis.yml 的 llm-deepseek 段决定(/model 仅提示重启生效)";
|
|
476
|
+
readonly en: "Model route set by the llm-deepseek block in cordis.yml (/model only hints at restart)";
|
|
477
|
+
};
|
|
478
|
+
readonly 'export-failed': {
|
|
479
|
+
readonly zh: "导出失败(无法写入工作目录)";
|
|
480
|
+
readonly en: "Export failed (cannot write to working directory)";
|
|
481
|
+
};
|
|
482
|
+
readonly 'export-saved': {
|
|
483
|
+
readonly zh: "已导出: {{target}}";
|
|
484
|
+
readonly en: "Exported: {{target}}";
|
|
485
|
+
};
|
|
486
|
+
readonly 'agentsmd-create-failed': {
|
|
487
|
+
readonly zh: "创建 AGENTS.md 失败";
|
|
488
|
+
readonly en: "Failed to create AGENTS.md";
|
|
489
|
+
};
|
|
490
|
+
readonly 'agentsmd-exists': {
|
|
491
|
+
readonly zh: "AGENTS.md 已存在,未覆盖";
|
|
492
|
+
readonly en: "AGENTS.md already exists, not overwritten";
|
|
493
|
+
};
|
|
494
|
+
readonly 'agentsmd-created': {
|
|
495
|
+
readonly zh: "已创建 {{result}}";
|
|
496
|
+
readonly en: "Created {{result}}";
|
|
497
|
+
};
|
|
498
|
+
readonly 'login-api-key': {
|
|
499
|
+
readonly zh: "API key: {{key}}";
|
|
500
|
+
readonly en: "API key: {{key}}";
|
|
501
|
+
};
|
|
502
|
+
readonly 'login-key-missing': {
|
|
503
|
+
readonly zh: "未配置(DEEPSEEK_API_KEY)";
|
|
504
|
+
readonly en: "not configured (DEEPSEEK_API_KEY)";
|
|
505
|
+
};
|
|
506
|
+
readonly 'login-base-url': {
|
|
507
|
+
readonly zh: "Base URL: {{url}}";
|
|
508
|
+
readonly en: "Base URL: {{url}}";
|
|
509
|
+
};
|
|
510
|
+
readonly 'login-official-endpoint': {
|
|
511
|
+
readonly zh: "官方端点";
|
|
512
|
+
readonly en: "official endpoint";
|
|
513
|
+
};
|
|
514
|
+
readonly 'login-source-hint': {
|
|
515
|
+
readonly zh: "来源:环境变量 → 工作区 .env(run.ts 兜底读取)";
|
|
516
|
+
readonly en: "Source: env var → workspace .env (run.ts fallback)";
|
|
517
|
+
};
|
|
518
|
+
readonly 'login-logout-hint': {
|
|
519
|
+
readonly zh: "DSH 凭证来自环境变量 DEEPSEEK_API_KEY — 删除该环境变量后重启 dsh-tui 即登出";
|
|
520
|
+
readonly en: "DSH credentials come from the DEEPSEEK_API_KEY env var — remove it and restart dsh-tui to log out";
|
|
521
|
+
};
|
|
522
|
+
readonly 'permissions-policy-hint': {
|
|
523
|
+
readonly zh: "DSH 权限策略由 fs-policy / bash-sandbox 配置决定(当前 leaf:workspace 内读写、写入需已读文件)。";
|
|
524
|
+
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
|
+
};
|
|
526
|
+
readonly 'permissions-approval-hint': {
|
|
527
|
+
readonly zh: "DSH 的 /permission 预设切换需要 approval 服务 + 审批 UI,dsh-tui 未挂载。";
|
|
528
|
+
readonly en: "DSH /permission preset switching needs the approval service + approval UI, not mounted in dsh-tui.";
|
|
529
|
+
};
|
|
530
|
+
readonly 'permissions-root-hint': {
|
|
531
|
+
readonly zh: "当前文件系统策略以工作目录为根:{{cwd}}";
|
|
532
|
+
readonly en: "Current filesystem policy is rooted at the working directory: {{cwd}}";
|
|
533
|
+
};
|
|
534
|
+
readonly 'permissions-path-hint': {
|
|
535
|
+
readonly zh: "模型工具相对路径均解析自该目录;跨目录访问由 fs-policy 拦截。";
|
|
536
|
+
readonly en: "Relative paths of model tools resolve from this directory; cross-directory access is blocked by fs-policy.";
|
|
537
|
+
};
|
|
538
|
+
readonly 'hooks-not-mounted': {
|
|
539
|
+
readonly zh: "DSH hooks(dsh-hooks-claude / dsh-hooks-codex)未在本 leaf 挂载。";
|
|
540
|
+
readonly en: "DSH hooks (dsh-hooks-claude / dsh-hooks-codex) are not mounted in this leaf.";
|
|
541
|
+
};
|
|
542
|
+
readonly 'hooks-mount-hint': {
|
|
543
|
+
readonly zh: "需要时可在 cordis.yml 挂载对应 hooks 插件。";
|
|
544
|
+
readonly en: "Mount the matching hooks plugin in cordis.yml when needed.";
|
|
545
|
+
};
|
|
546
|
+
readonly 'memory-none': {
|
|
547
|
+
readonly zh: "DSH 暂无持久记忆服务。";
|
|
548
|
+
readonly en: "DSH has no persistent memory service yet.";
|
|
549
|
+
};
|
|
550
|
+
readonly 'memory-hint': {
|
|
551
|
+
readonly zh: "长期约定可写入 AGENTS.md(工作区上下文)或技能(~/.dsh/skills)。";
|
|
552
|
+
readonly en: "Long-term conventions can go into AGENTS.md (workspace context) or skills (~/.dsh/skills).";
|
|
553
|
+
};
|
|
554
|
+
readonly 'update-unavailable': {
|
|
555
|
+
readonly zh: "当前运行方式不支持自动更新(需经 dsh --profile 启动),请在终端执行 dsh plugin --profile <name> update @deepseek-harness-tui/dsh-tui";
|
|
556
|
+
readonly en: "Automatic update is unavailable in this launch mode (needs dsh --profile). Run dsh plugin --profile <name> update @deepseek-harness-tui/dsh-tui in a terminal.";
|
|
557
|
+
};
|
|
558
|
+
readonly 'update-working': {
|
|
559
|
+
readonly zh: "当前回合仍在运行,请等待完成后再更新 TUI。";
|
|
560
|
+
readonly en: "The current turn is still running. Wait for it to finish before updating the TUI.";
|
|
561
|
+
};
|
|
562
|
+
readonly 'update-starting': {
|
|
563
|
+
readonly zh: "正在更新 @deepseek-harness-tui/dsh-tui,完成后会自动重启并恢复当前会话……";
|
|
564
|
+
readonly en: "Updating @deepseek-harness-tui/dsh-tui. The TUI will restart and resume this session when finished…";
|
|
565
|
+
};
|
|
566
|
+
readonly 'update-available': {
|
|
567
|
+
readonly zh: "发现新版本:v{{latest}}(当前 v{{current}})· 输入 /update 更新 TUI";
|
|
568
|
+
readonly en: "New version available: v{{latest}} (current v{{current}}) · type /update to update the TUI";
|
|
569
|
+
};
|
|
570
|
+
readonly 'update-already-latest': {
|
|
571
|
+
readonly zh: "当前已是最新版本(v{{current}})。";
|
|
572
|
+
readonly en: "Already on the latest version (v{{current}}).";
|
|
573
|
+
};
|
|
574
|
+
readonly 'update-check-failed': {
|
|
575
|
+
readonly zh: "无法确认新版本(网络或 registry 不可达),已尝试直接更新……";
|
|
576
|
+
readonly en: "Could not confirm a newer version (network or registry unreachable); attempting the update anyway…";
|
|
577
|
+
};
|
|
578
|
+
readonly 'vim-not-implemented': {
|
|
579
|
+
readonly zh: "vim 模式暂未实现";
|
|
580
|
+
readonly en: "vim mode not implemented yet";
|
|
581
|
+
};
|
|
582
|
+
readonly 'terminal-setup-hint': {
|
|
583
|
+
readonly zh: "推荐 Windows Terminal(≥110 列、等宽字体、TrueColor)。";
|
|
584
|
+
readonly en: "Recommended: Windows Terminal (≥110 columns, monospace, TrueColor).";
|
|
585
|
+
};
|
|
586
|
+
readonly 'terminal-paste-hint': {
|
|
587
|
+
readonly zh: "Ctrl+V 粘贴文本/文件路径;Ctrl+Shift+V 终端原生粘贴;右键粘贴同样可用。";
|
|
588
|
+
readonly en: "Ctrl+V pastes text/file paths; Ctrl+Shift+V is native terminal paste; right-click paste also works.";
|
|
589
|
+
};
|
|
590
|
+
readonly 'connect-none': {
|
|
591
|
+
readonly zh: "DSH 暂无远程连接机制(CC 的 /connect 对应能力未适配)。";
|
|
592
|
+
readonly en: "DSH has no remote connection mechanism (CC's /connect equivalent is not adapted).";
|
|
593
|
+
};
|
|
594
|
+
readonly 'theme-switch-failed': {
|
|
595
|
+
readonly zh: "主题「{{name}}」切换失败(无法写入 ~/.dsh-cc/theme.json)";
|
|
596
|
+
readonly en: "Theme \"{{name}}\" switch failed (cannot write ~/.dsh-cc/theme.json)";
|
|
597
|
+
};
|
|
598
|
+
readonly 'interrupt-delivered': {
|
|
599
|
+
readonly zh: "已打断当前回合,{{n}} 条消息立即处理";
|
|
600
|
+
readonly en: "Interrupted current turn, {{n}} messages processed immediately";
|
|
601
|
+
};
|
|
602
|
+
readonly 'activity-ctx-warn': {
|
|
603
|
+
readonly zh: "⚠ 上下文";
|
|
604
|
+
readonly en: "⚠ ctx ";
|
|
605
|
+
};
|
|
606
|
+
readonly 'activity-random-each-preset': {
|
|
607
|
+
readonly zh: "每次随机一个预设";
|
|
608
|
+
readonly en: "random preset each time";
|
|
609
|
+
};
|
|
610
|
+
readonly 'preset-default-tag': {
|
|
611
|
+
readonly zh: "(默认)";
|
|
612
|
+
readonly en: " (default)";
|
|
613
|
+
};
|
|
614
|
+
readonly 'preset-broken-tag': {
|
|
615
|
+
readonly zh: "(无法加载)";
|
|
616
|
+
readonly en: " (failed to load)";
|
|
617
|
+
};
|
|
618
|
+
readonly 'effort-unavailable': {
|
|
619
|
+
readonly zh: "推理等级切换不可用(llm 服务未挂载)";
|
|
620
|
+
readonly en: "Reasoning effort switching unavailable (llm service not mounted)";
|
|
621
|
+
};
|
|
622
|
+
readonly 'effort-read-failed': {
|
|
623
|
+
readonly zh: "推理等级读取失败 · {{error}}";
|
|
624
|
+
readonly en: "Failed to read reasoning efforts · {{error}}";
|
|
625
|
+
};
|
|
626
|
+
readonly 'effort-single-tier': {
|
|
627
|
+
readonly zh: "当前模型只有一档推理等级({{name}})";
|
|
628
|
+
readonly en: "Current model has a single reasoning effort ({{name}})";
|
|
629
|
+
};
|
|
630
|
+
readonly 'effort-unsupported': {
|
|
631
|
+
readonly zh: "当前模型不支持推理等级切换";
|
|
632
|
+
readonly en: "Current model does not support reasoning effort switching";
|
|
633
|
+
};
|
|
634
|
+
readonly 'effort-switched': {
|
|
635
|
+
readonly zh: "推理强度 → {{name}}";
|
|
636
|
+
readonly en: "Reasoning effort → {{name}}";
|
|
637
|
+
};
|
|
638
|
+
readonly 'logo-tagline': {
|
|
639
|
+
readonly zh: "探索未至之境!";
|
|
640
|
+
readonly en: "Explore the uncharted!";
|
|
641
|
+
};
|
|
642
|
+
readonly 'logo-tip-model': {
|
|
643
|
+
readonly zh: "切换模型";
|
|
644
|
+
readonly en: "switch model";
|
|
645
|
+
};
|
|
646
|
+
readonly 'logo-tip-help': {
|
|
647
|
+
readonly zh: "查看命令";
|
|
648
|
+
readonly en: "view commands";
|
|
649
|
+
};
|
|
650
|
+
readonly 'logo-tip-tab': {
|
|
651
|
+
readonly zh: "自动补全";
|
|
652
|
+
readonly en: "autocomplete";
|
|
653
|
+
};
|
|
654
|
+
readonly 'input-sent-after-turn': {
|
|
655
|
+
readonly zh: "已发送,当前回合结束后处理";
|
|
656
|
+
readonly en: "Sent, processed after the current turn";
|
|
657
|
+
};
|
|
658
|
+
readonly 'input-interrupted-next': {
|
|
659
|
+
readonly zh: "已插话 · 下一步立即处理";
|
|
660
|
+
readonly en: "Interrupted · processed next";
|
|
661
|
+
};
|
|
662
|
+
readonly 'input-queued-after-turn': {
|
|
663
|
+
readonly zh: "已排队 · 回合结束后处理";
|
|
664
|
+
readonly en: "Queued · processed after the turn";
|
|
665
|
+
};
|
|
666
|
+
readonly 'input-cannot-retract': {
|
|
667
|
+
readonly zh: "无法撤回:消息可能已被处理,或当前版本不支持";
|
|
668
|
+
readonly en: "Cannot retract: the message may already be processed, or this version doesn't support it";
|
|
669
|
+
};
|
|
670
|
+
readonly 'input-retracted': {
|
|
671
|
+
readonly zh: "已撤回,可编辑后重新发送";
|
|
672
|
+
readonly en: "Retracted, editable and resendable";
|
|
673
|
+
};
|
|
674
|
+
readonly 'input-empty': {
|
|
675
|
+
readonly zh: "输入为空,没有可发送的内容";
|
|
676
|
+
readonly en: "Empty input, nothing to send";
|
|
677
|
+
};
|
|
678
|
+
readonly 'input-interrupt-immediate': {
|
|
679
|
+
readonly zh: "已打断当前回合,正在立即处理";
|
|
680
|
+
readonly en: "Interrupted current turn, processing immediately";
|
|
681
|
+
};
|
|
682
|
+
readonly 'input-clipboard-empty': {
|
|
683
|
+
readonly zh: "剪贴板为空";
|
|
684
|
+
readonly en: "Clipboard is empty";
|
|
685
|
+
};
|
|
686
|
+
readonly 'input-pending-steer-label': {
|
|
687
|
+
readonly zh: "插话 · 下一步送达";
|
|
688
|
+
readonly en: "Steer · delivered next";
|
|
689
|
+
};
|
|
690
|
+
readonly 'input-pending-queue-label': {
|
|
691
|
+
readonly zh: "排队 · 回合结束后送达";
|
|
692
|
+
readonly en: "Queued · delivered after the turn";
|
|
693
|
+
};
|
|
694
|
+
readonly 'input-pending-actions-hint': {
|
|
695
|
+
readonly zh: "撤回 · Esc 打断并立即发送";
|
|
696
|
+
readonly en: "Retract · Esc interrupts and sends immediately";
|
|
697
|
+
};
|
|
698
|
+
readonly 'frame-blink': {
|
|
699
|
+
readonly zh: "眨眼";
|
|
700
|
+
readonly en: "blink";
|
|
701
|
+
};
|
|
702
|
+
readonly 'frame-fin-1': {
|
|
703
|
+
readonly zh: "动腹鳍1";
|
|
704
|
+
readonly en: "fin1";
|
|
705
|
+
};
|
|
706
|
+
readonly 'frame-fin-2': {
|
|
707
|
+
readonly zh: "动腹鳍2";
|
|
708
|
+
readonly en: "fin2";
|
|
709
|
+
};
|
|
710
|
+
readonly 'frame-spout-1': {
|
|
711
|
+
readonly zh: "喷水花1";
|
|
712
|
+
readonly en: "spout1";
|
|
713
|
+
};
|
|
714
|
+
readonly 'frame-spout-2': {
|
|
715
|
+
readonly zh: "喷水花2";
|
|
716
|
+
readonly en: "spout2";
|
|
717
|
+
};
|
|
718
|
+
readonly 'frame-spout-3': {
|
|
719
|
+
readonly zh: "喷水花3";
|
|
720
|
+
readonly en: "spout3";
|
|
721
|
+
};
|
|
722
|
+
readonly 'frame-spout-4': {
|
|
723
|
+
readonly zh: "喷水花4";
|
|
724
|
+
readonly en: "spout4";
|
|
725
|
+
};
|
|
726
|
+
readonly 'frame-spout-5': {
|
|
727
|
+
readonly zh: "喷水花5";
|
|
728
|
+
readonly en: "spout5";
|
|
729
|
+
};
|
|
730
|
+
readonly 'frame-spout-6': {
|
|
731
|
+
readonly zh: "喷水花6";
|
|
732
|
+
readonly en: "spout6";
|
|
733
|
+
};
|
|
734
|
+
readonly 'frame-tail-1': {
|
|
735
|
+
readonly zh: "摆尾巴1";
|
|
736
|
+
readonly en: "tail1";
|
|
737
|
+
};
|
|
738
|
+
readonly 'frame-tail-2': {
|
|
739
|
+
readonly zh: "摆尾巴2";
|
|
740
|
+
readonly en: "tail2";
|
|
741
|
+
};
|
|
742
|
+
readonly 'frame-tail-3': {
|
|
743
|
+
readonly zh: "摆尾巴3";
|
|
744
|
+
readonly en: "tail3";
|
|
745
|
+
};
|
|
746
|
+
readonly 'load-earlier': {
|
|
747
|
+
readonly zh: " ↑ 加载更早消息(会话日志完整,/export 导出全文) ";
|
|
748
|
+
readonly en: " ↑ load earlier messages (full session log; /export for full text) ";
|
|
749
|
+
};
|
|
750
|
+
readonly 'resume-none-in-cwd': {
|
|
751
|
+
readonly zh: "当前目录没有可恢复的历史会话";
|
|
752
|
+
readonly en: "No resumable sessions in the current directory";
|
|
753
|
+
};
|
|
754
|
+
readonly 'compact-summary-folded': {
|
|
755
|
+
readonly zh: "摘要已折叠";
|
|
756
|
+
readonly en: "Summary folded";
|
|
757
|
+
};
|
|
758
|
+
readonly 'theme-builtin-base': {
|
|
759
|
+
readonly zh: "内置 · {{name}} 基底";
|
|
760
|
+
readonly en: "Built-in · {{name}} base";
|
|
761
|
+
};
|
|
762
|
+
readonly 'theme-user-base': {
|
|
763
|
+
readonly zh: "{{base}} 基底 · ~/.dsh-cc/themes/{{name}}.json";
|
|
764
|
+
readonly en: "{{base}} base · ~/.dsh-cc/themes/{{name}}.json";
|
|
765
|
+
};
|
|
766
|
+
readonly 'context-panel-collapse': {
|
|
767
|
+
readonly zh: "折叠";
|
|
768
|
+
readonly en: "Collapse";
|
|
769
|
+
};
|
|
770
|
+
readonly 'context-panel-expand': {
|
|
771
|
+
readonly zh: "展开";
|
|
772
|
+
readonly en: "Expand";
|
|
773
|
+
};
|
|
774
|
+
readonly 'context-panel-sections': {
|
|
775
|
+
readonly zh: "系统提示词 · {{n}} 段";
|
|
776
|
+
readonly en: "System prompt · {{n}} sections";
|
|
777
|
+
};
|
|
778
|
+
readonly 'context-panel-files': {
|
|
779
|
+
readonly zh: "工作区指令 · {{n}} 个文件";
|
|
780
|
+
readonly en: "Workspace instructions · {{n}} files";
|
|
781
|
+
};
|
|
782
|
+
readonly 'context-panel-runtime': {
|
|
783
|
+
readonly zh: "运行时上下文 · {{n}} 项";
|
|
784
|
+
readonly en: "Runtime context · {{n}} items";
|
|
785
|
+
};
|
|
786
|
+
readonly 'context-panel-skills': {
|
|
787
|
+
readonly zh: "技能 · {{n}}";
|
|
788
|
+
readonly en: "Skills · {{n}}";
|
|
789
|
+
};
|
|
790
|
+
readonly 'context-panel-tools': {
|
|
791
|
+
readonly zh: "工具 · {{n}}";
|
|
792
|
+
readonly en: "Tools · {{n}}";
|
|
793
|
+
};
|
|
794
|
+
readonly 'question-select-or-answer': {
|
|
795
|
+
readonly zh: "至少选择一个选项,或在最后一行输入回答";
|
|
796
|
+
readonly en: "Select at least one option, or type an answer on the last line";
|
|
797
|
+
};
|
|
798
|
+
readonly 'question-answer-or-check': {
|
|
799
|
+
readonly zh: "输入回答或勾选选项后再提交";
|
|
800
|
+
readonly en: "Type an answer or check options before submitting";
|
|
801
|
+
};
|
|
802
|
+
readonly 'question-type-answer-first': {
|
|
803
|
+
readonly zh: "先输入回答内容再提交";
|
|
804
|
+
readonly en: "Type your answer before submitting";
|
|
805
|
+
};
|
|
806
|
+
readonly 'question-header-progress': {
|
|
807
|
+
readonly zh: " 📋 提问 · 第 {{position}}/{{total}} 题{{remaining}} ";
|
|
808
|
+
readonly en: " 📋 Question {{position}}/{{total}} {{remaining}} ";
|
|
809
|
+
};
|
|
810
|
+
readonly 'question-remaining-more': {
|
|
811
|
+
readonly zh: " · 还剩 {{n}} 题";
|
|
812
|
+
readonly en: " · {{n}} left";
|
|
813
|
+
};
|
|
814
|
+
readonly 'question-hint-type': {
|
|
815
|
+
readonly zh: "输入回答";
|
|
816
|
+
readonly en: "Type answer";
|
|
817
|
+
};
|
|
818
|
+
readonly 'question-hint-enter': {
|
|
819
|
+
readonly zh: "Enter 提交";
|
|
820
|
+
readonly en: "Enter submit";
|
|
821
|
+
};
|
|
822
|
+
readonly 'question-hint-back': {
|
|
823
|
+
readonly zh: "↑ 返回选项";
|
|
824
|
+
readonly en: "↑ back to options";
|
|
825
|
+
};
|
|
826
|
+
readonly 'question-hint-esc': {
|
|
827
|
+
readonly zh: "Esc 中断";
|
|
828
|
+
readonly en: "Esc cancel";
|
|
829
|
+
};
|
|
830
|
+
readonly 'question-hint-selected': {
|
|
831
|
+
readonly zh: "已选 {{n}}";
|
|
832
|
+
readonly en: "Selected {{n}}";
|
|
833
|
+
};
|
|
834
|
+
readonly 'question-hint-select': {
|
|
835
|
+
readonly zh: "↑/↓ 选择";
|
|
836
|
+
readonly en: "↑/↓ select";
|
|
837
|
+
};
|
|
838
|
+
readonly 'question-hint-multi': {
|
|
839
|
+
readonly zh: "Space 多选";
|
|
840
|
+
readonly en: "Space multi-select";
|
|
841
|
+
};
|
|
842
|
+
readonly 'question-hint-attach': {
|
|
843
|
+
readonly zh: "输入文字附带回答";
|
|
844
|
+
readonly en: "Type text to attach an answer";
|
|
845
|
+
};
|
|
846
|
+
readonly 'question-custom-tab': {
|
|
847
|
+
readonly zh: "自定义回答";
|
|
848
|
+
readonly en: "Custom answer";
|
|
849
|
+
};
|
|
850
|
+
readonly 'question-attached-label': {
|
|
851
|
+
readonly zh: "(附加:{{label}})";
|
|
852
|
+
readonly en: "(attached: {{label}})";
|
|
853
|
+
};
|
|
854
|
+
readonly 'question-direct-input': {
|
|
855
|
+
readonly zh: "直接输入…";
|
|
856
|
+
readonly en: "Type directly…";
|
|
857
|
+
};
|
|
858
|
+
readonly 'lang-current': {
|
|
859
|
+
readonly zh: "当前语言 {{lang}}";
|
|
860
|
+
readonly en: "Current language {{lang}}";
|
|
861
|
+
};
|
|
862
|
+
readonly 'lang-switch-hint': {
|
|
863
|
+
readonly zh: "切换 /lang en | /lang zh";
|
|
864
|
+
readonly en: "Switch /lang en | /lang zh";
|
|
865
|
+
};
|
|
866
|
+
readonly 'lang-persist-hint': {
|
|
867
|
+
readonly zh: "持久化 ~/.dsh-cc/lang.json(重启后仍生效;CC_TUI_LANG 优先)";
|
|
868
|
+
readonly en: "Persisted ~/.dsh-cc/lang.json (survives restart; CC_TUI_LANG wins)";
|
|
869
|
+
};
|
|
870
|
+
readonly 'lang-switched': {
|
|
871
|
+
readonly zh: "语言已切换:{{lang}}(已保存)";
|
|
872
|
+
readonly en: "Language switched: {{lang}} (saved)";
|
|
873
|
+
};
|
|
874
|
+
readonly 'lang-unknown': {
|
|
875
|
+
readonly zh: "未知语言「{{lang}}」· /lang 查看全部(en / zh)";
|
|
876
|
+
readonly en: "Unknown language \"{{lang}}\" · /lang to view all (en / zh)";
|
|
877
|
+
};
|
|
878
|
+
readonly 'lang-switch-failed': {
|
|
879
|
+
readonly zh: "语言「{{lang}}」切换失败(无法写入 ~/.dsh-cc/lang.json)";
|
|
880
|
+
readonly en: "Language \"{{lang}}\" switch failed (cannot write ~/.dsh-cc/lang.json)";
|
|
881
|
+
};
|
|
882
|
+
};
|
|
883
|
+
export type I18nKey = keyof typeof dict;
|
|
884
|
+
export type I18nParams = Record<string, string | number>;
|
|
885
|
+
/** Emitted on every language switch so React screens can re-render. */
|
|
886
|
+
type Listener = () => void;
|
|
887
|
+
/** Subscribe to language switches (mirrors themePrefs subscription style). */
|
|
888
|
+
export declare function subscribeLang(listener: Listener): () => void;
|
|
889
|
+
/** The currently active language. */
|
|
890
|
+
export declare function getLang(): Lang;
|
|
891
|
+
/** Switch the active language and notify subscribers. */
|
|
892
|
+
export declare function setLang(lang: Lang): void;
|
|
893
|
+
/** Is a string a valid shipped language code? */
|
|
894
|
+
export declare function isLang(value: unknown): value is Lang;
|
|
895
|
+
/**
|
|
896
|
+
* Translate a dictionary key into the active language, substituting
|
|
897
|
+
* `{{name}}` placeholders with params. Missing keys render the key itself
|
|
898
|
+
* so a typo is visible instead of silently blank.
|
|
899
|
+
* @param key - Dictionary key (see dict).
|
|
900
|
+
* @param params - Placeholder values.
|
|
901
|
+
*/
|
|
902
|
+
export declare function t(key: I18nKey, params?: I18nParams): string;
|
|
903
|
+
/**
|
|
904
|
+
* Parse a persisted `{ lang }` value; anything else yields undefined.
|
|
905
|
+
* @param text - Raw file contents.
|
|
906
|
+
*/
|
|
907
|
+
export declare function parseLangPref(text: string): Lang | undefined;
|
|
908
|
+
/** The persisted `/lang` choice, or undefined when unset or invalid. */
|
|
909
|
+
export declare function readLangPref(dir?: string): Lang | undefined;
|
|
910
|
+
/** Persist the chosen language (best effort). */
|
|
911
|
+
export declare function writeLangPref(lang: Lang, dir?: string): boolean;
|
|
912
|
+
/**
|
|
913
|
+
* Guess the user's language from the OS locale (`LC_ALL`, `LC_MESSAGES`,
|
|
914
|
+
* `LANG`), defaulting to `zh`. Only consulted when nothing else (env var,
|
|
915
|
+
* cordis.yml `lang`, persisted `/lang` choice) pinned a language.
|
|
916
|
+
*/
|
|
917
|
+
export declare function detectLocaleLang(): Lang;
|
|
918
|
+
/**
|
|
919
|
+
* Resolve the startup language: the persisted `/lang` choice, else the OS
|
|
920
|
+
* locale guess, else `zh` (the original hard-coded language). The env var /
|
|
921
|
+
* config precedence lives in plugin.apply (see {@link resolveStartupLang}
|
|
922
|
+
* consumers).
|
|
923
|
+
*/
|
|
924
|
+
export declare function resolveStartupLang(): Lang;
|
|
925
|
+
export {};
|
|
926
|
+
//# sourceMappingURL=i18n.d.ts.map
|