@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 @@
|
|
|
1
|
+
{"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/i18n.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAMH,MAAM,MAAM,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;AAI9B,+DAA+D;AAC/D,eAAO,MAAM,KAAK,uBAAwB,CAAA;AAE1C,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyPA,CAAA;AAEV,MAAM,MAAM,OAAO,GAAG,MAAM,OAAO,IAAI,CAAA;AACvC,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAA;AAOxD,uEAAuE;AACvE,KAAK,QAAQ,GAAG,MAAM,IAAI,CAAA;AAG1B,8EAA8E;AAC9E,wBAAgB,aAAa,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,IAAI,CAG5D;AAED,qCAAqC;AACrC,wBAAgB,OAAO,IAAI,IAAI,CAE9B;AAED,yDAAyD;AACzD,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAGxC;AAED,iDAAiD;AACjD,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,IAAI,CAEpD;AAED;;;;;;GAMG;AACH,wBAAgB,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,GAAE,UAAe,GAAG,MAAM,CAM/D;AAID;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAS5D;AAED,wEAAwE;AACxE,wBAAgB,YAAY,CAAC,GAAG,GAAE,MAAkB,GAAG,IAAI,GAAG,SAAS,CAMtE;AAED,iDAAiD;AACjD,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,GAAE,MAAkB,GAAG,OAAO,CAQ1E;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAUvC;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC"}
|
|
@@ -0,0 +1,356 @@
|
|
|
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
|
+
import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
19
|
+
import { homedir } from 'node:os';
|
|
20
|
+
import { join } from 'node:path';
|
|
21
|
+
const PREFS_DIR = join(homedir(), '.dsh-cc');
|
|
22
|
+
/** The languages shipped with the plugin, in display order. */
|
|
23
|
+
export const LANGS = ['zh', 'en'];
|
|
24
|
+
const dict = {
|
|
25
|
+
// ── channel.ts ───────────────────────────────────────────────────────
|
|
26
|
+
'activity-indicator-already': { zh: '指示器已是:{{name}}', en: 'Indicator already set: {{name}}' },
|
|
27
|
+
'activity-indicator-switched': { zh: '指示器已切换:{{name}}(已保存)', en: 'Indicator switched: {{name}} (saved)' },
|
|
28
|
+
'activity-pref-write-failed': { zh: '无法写入 ~/.dsh-cc/working-activity.json,切换未保存', en: 'Cannot write ~/.dsh-cc/working-activity.json, switch not saved' },
|
|
29
|
+
'model-pref-write-failed': { zh: '无法写入 ~/.dsh-cc/model.json,模型选择不会保存到重启后', en: 'Cannot write ~/.dsh-cc/model.json, the model choice will not survive a restart' },
|
|
30
|
+
'model-route-invalid': { zh: '持久化的模型路由 {{provider}}/{{model}} 不在该 provider 的模型列表中,已整体回退到 {{fallback}}', en: 'Persisted model route {{provider}}/{{model}} is not advertised by that provider; fell back to {{fallback}}' },
|
|
31
|
+
'unknown-activity-preset': { zh: '未知预设「{{name}}」· /activity frames 查看全部', en: 'Unknown preset "{{name}}" · /activity frames to view all' },
|
|
32
|
+
'preset-unavailable': { zh: 'Preset 不可用——当前组合未挂载 agent-presets 名册', en: 'Preset unavailable — the agent-presets roster is not mounted' },
|
|
33
|
+
'preset-agent-running': { zh: 'Agent 运行中,无法切换 preset', en: 'Agent is running, cannot switch preset' },
|
|
34
|
+
'preset-not-found': { zh: 'Preset「{{id}}」不存在 · {{err}}', en: 'Preset "{{id}}" not found · {{err}}' },
|
|
35
|
+
'preset-load-failed': { zh: 'Preset「{{id}}」无法加载 · {{broken}}', en: 'Preset "{{id}}" failed to load · {{broken}}' },
|
|
36
|
+
'preset-already-current': { zh: '当前 preset 已是:{{id}}', en: 'Current preset already: {{id}}' },
|
|
37
|
+
'preset-pref-write-failed': { zh: '无法写入 ~/.dsh-cc/agent-preset.json,选择未保存', en: 'Cannot write ~/.dsh-cc/agent-preset.json, selection not saved' },
|
|
38
|
+
'preset-locked-saved-default': { zh: '会话已开始,preset 已锁定(当前:{{current}})· 已保存为默认:{{id}}(/new 或下次启动生效)', en: 'Session already started, preset locked (current: {{current}}) · Saved as default: {{id}} (applies on /new or next start)' },
|
|
39
|
+
'preset-switch-failed': { zh: 'Preset 切换失败 · {{err}}', en: 'Preset switch failed · {{err}}' },
|
|
40
|
+
'preset-switched-pref-failed': { zh: 'Preset 已切换:{{id}},但默认偏好写入失败(重启后不保留)', en: 'Preset switched: {{id}}, but writing the default preference failed (won\'t persist after restart)' },
|
|
41
|
+
'preset-switched-saved': { zh: 'Preset 已切换:{{id}}(已保存为默认)', en: 'Preset switched: {{id}} (saved as default)' },
|
|
42
|
+
'mcp-none-configured': { zh: '未配置 MCP 服务器。', en: 'No MCP servers configured.' },
|
|
43
|
+
'mcp-insert-hint': { zh: '在 profile 补丁层(~/.dsh/profiles/dsh-tui/cordis.patch.yml)insert 一行即可,例:', en: 'Insert one line in the profile patch layer (~/.dsh/profiles/dsh-tui/cordis.patch.yml), e.g.:' },
|
|
44
|
+
'mcp-readme-hint': { zh: '详见仓库 README 的 MCP 章节。', en: 'See the MCP section of the repo README.' },
|
|
45
|
+
'mcp-server-tools': { zh: '{{server}}({{count}} 个工具): {{tools}}', en: '{{server}} ({{count}} tools): {{tools}}' },
|
|
46
|
+
'child-stderr-line': { zh: '子进程 stderr: {{line}}', en: 'Subprocess stderr: {{line}}' },
|
|
47
|
+
'child-stderr-line-repeat': { zh: '子进程 stderr: {{line}}(重复 {{count}} 次)', en: 'Subprocess stderr: {{line}} (repeated {{count}}×)' },
|
|
48
|
+
'export-title': { zh: '# dsh-tui 会话导出', en: '# dsh-tui session export' },
|
|
49
|
+
'export-time': { zh: '- 导出时间: {{time}}', en: '- Exported: {{time}}' },
|
|
50
|
+
'export-model': { zh: '- 模型: {{model}}', en: '- Model: {{model}}' },
|
|
51
|
+
'export-session': { zh: '- 会话: {{id}}', en: '- Session: {{id}}' },
|
|
52
|
+
'export-dir': { zh: '- 目录: {{cwd}}', en: '- Directory: {{cwd}}' },
|
|
53
|
+
'mentions-attached': { zh: '已附加 {{count}} 个文件引用', en: 'Attached {{count}} file reference(s)' },
|
|
54
|
+
'mentions-missing': { zh: '未找到引用: {{paths}}', en: 'References not found: {{paths}}' },
|
|
55
|
+
'send-failed': { zh: '发送失败 · {{err}}', en: 'Send failed · {{err}}' },
|
|
56
|
+
'export-user-section': { zh: '## 用户', en: '## User' },
|
|
57
|
+
'export-thinking-section': { zh: '## 思考', en: '## Thinking' },
|
|
58
|
+
'export-assistant-section': { zh: '## 助手', en: '## Assistant' },
|
|
59
|
+
'export-tool-section': { zh: '## 工具 · {{name}}', en: '## Tool · {{name}}' },
|
|
60
|
+
'export-result-section': { zh: '### 结果', en: '### Result' },
|
|
61
|
+
'agentsmd-project': { zh: '## 项目', en: '## Project' },
|
|
62
|
+
'agentsmd-project-body': { zh: '(在此描述项目的目标、结构与约定——这份文件会注入给每个 agent 作为工作区上下文。)', en: '(Describe the project\'s goals, structure and conventions here — this file is injected to every agent as workspace context.)' },
|
|
63
|
+
'agentsmd-conventions': { zh: '## 约定', en: '## Conventions' },
|
|
64
|
+
'agentsmd-convention-read': { zh: '- 改动前先阅读相关模块', en: '- Read the relevant modules before making changes' },
|
|
65
|
+
'agentsmd-convention-style': { zh: '- 保持与现有代码风格一致', en: '- Keep consistent with the existing code style' },
|
|
66
|
+
'doctor-api-key': { zh: 'API key: {{state}}', en: 'API key: {{state}}' },
|
|
67
|
+
'doctor-key-configured': { zh: '已配置', en: 'configured' },
|
|
68
|
+
'doctor-key-missing': { zh: '未配置(DEEPSEEK_API_KEY)', en: 'not configured (DEEPSEEK_API_KEY)' },
|
|
69
|
+
'doctor-model': { zh: '模型: {{model}} · 提供方: {{provider}}', en: 'Model: {{model}} · Provider: {{provider}}' },
|
|
70
|
+
'doctor-cwd': { zh: '工作目录: {{cwd}}', en: 'Working directory: {{cwd}}' },
|
|
71
|
+
'doctor-context-window': { zh: '上下文窗口: {{window}} tokens', en: 'Context window: {{window}} tokens' },
|
|
72
|
+
'doctor-unknown': { zh: '未知', en: 'unknown' },
|
|
73
|
+
'doctor-session': { zh: '会话: {{id}}', en: 'Session: {{id}}' },
|
|
74
|
+
'doctor-config': { zh: '配置: {{candidate}} {{state}}', en: 'Config: {{candidate}} {{state}}' },
|
|
75
|
+
'doctor-config-missing': { zh: '(不存在)', en: '(missing)' },
|
|
76
|
+
'doctor-storage': { zh: '会话存储: {{dir}} {{state}}', en: 'Session storage: {{dir}} {{state}}' },
|
|
77
|
+
'doctor-storage-uninit': { zh: '(未初始化)', en: '(not initialized)' },
|
|
78
|
+
'subagent-not-mounted': { zh: '子代理服务未挂载(leaf 未启用 subagent)', en: 'Subagent service not mounted (leaf has no subagent)' },
|
|
79
|
+
'subagent-none': { zh: '当前会话暂无子代理', en: 'No subagents in the current session' },
|
|
80
|
+
'subagent-resumable': { zh: '可续', en: 'resumable' },
|
|
81
|
+
'subagent-oneshot': { zh: '一次性', en: 'one-shot' },
|
|
82
|
+
'subagent-row': { zh: '{{mode}} {{label}}{{activity}} · {{id}}', en: '{{mode}} {{label}}{{activity}} · {{id}}' },
|
|
83
|
+
'subagent-running': { zh: ' 运行中', en: ' running' },
|
|
84
|
+
'subagent-archived': { zh: ' 已归档', en: ' archived' },
|
|
85
|
+
'subagent-query-failed': { zh: '查询失败 · {{err}}', en: 'Query failed · {{err}}' },
|
|
86
|
+
'agent-preset-switched': { zh: 'Agent preset 已切换:{{preset}}', en: 'Agent preset switched: {{preset}}' },
|
|
87
|
+
// ── questions.ts ─────────────────────────────────────────────────────
|
|
88
|
+
'questionnaire-answered': { zh: '📋 问卷已答 · {{total}} 题', en: '📋 Questionnaire answered · {{total}} questions' },
|
|
89
|
+
// ── customTheme.ts (doc example only) ───────────────────────────────
|
|
90
|
+
'theme-sakura-name': { zh: '樱花粉', en: 'Sakura Pink' },
|
|
91
|
+
// ── utils/loaded-context.ts ─────────────────────────────────────────
|
|
92
|
+
'context-truncated': { zh: '…(已截断)', en: '… (truncated)' },
|
|
93
|
+
'context-sections': { zh: '系统提示词 {{n}} 段', en: 'System prompt {{n}} sections' },
|
|
94
|
+
'context-files': { zh: '工作区指令 ×{{n}}', en: 'Workspace instructions ×{{n}}' },
|
|
95
|
+
'context-runtime': { zh: '运行时上下文 {{n}} 项', en: 'Runtime context {{n}} items' },
|
|
96
|
+
'context-skills': { zh: '技能 {{n}}', en: 'Skills {{n}}' },
|
|
97
|
+
'context-tools': { zh: '工具 {{n}}', en: 'Tools {{n}}' },
|
|
98
|
+
// ── screens/Chat.tsx ────────────────────────────────────────────────
|
|
99
|
+
'skill-audit-prompt': { zh: '请使用 audit 技能对当前项目做一次全面的代码审计,找出安全、正确性与质量问题。', en: 'Use the audit skill to do a thorough code audit of the current project, finding security, correctness and quality issues.' },
|
|
100
|
+
'skill-bug-prompt': { zh: '请使用 bug 技能协助我记录一份完整的 bug 报告(现象、复现步骤、期望行为)。', en: 'Use the bug skill to help me write a complete bug report (symptoms, reproduction steps, expected behavior).' },
|
|
101
|
+
'skill-practice-prompt': { zh: '请使用 practice 技能陪我进行一轮编程练习。', en: 'Use the practice skill to run a round of programming practice with me.' },
|
|
102
|
+
'skill-review-prompt': { zh: '请使用 review 技能对当前项目做一次全面的代码评审。', en: 'Use the review skill to do a thorough code review of the current project.' },
|
|
103
|
+
'skill-pr-comments-prompt': { zh: '请使用 pr-comments 技能审查当前分支的拉取请求评论并给出改进建议。', en: 'Use the pr-comments skill to review pull request comments on the current branch and suggest improvements.' },
|
|
104
|
+
'skill-release-notes-prompt': { zh: '请使用 release-notes 技能为当前项目生成发布说明。', en: 'Use the release-notes skill to generate release notes for the current project.' },
|
|
105
|
+
'skill-vuln-check-prompt': { zh: '请使用 vuln-check 技能对当前项目做一次安全漏洞检查。', en: 'Use the vuln-check skill to run a security vulnerability check on the current project.' },
|
|
106
|
+
'context-loaded': { zh: '已加载上下文', en: 'Context loaded' },
|
|
107
|
+
'copied-chars': { zh: '已复制 {{n}} 个字符', en: 'Copied {{n}} characters' },
|
|
108
|
+
'activity-usage-name': { zh: '/activity frames <名>', en: '/activity frames <name>' },
|
|
109
|
+
'activity-current-preset': { zh: '当前预设 {{name}}', en: 'Current preset {{name}}' },
|
|
110
|
+
'activity-switch-hint': { zh: '切换 /activity(选择器)或 /activity frames <名>', en: 'Switch /activity (picker) or /activity frames <name>' },
|
|
111
|
+
'activity-persist-hint': { zh: '持久化 ~/.dsh-cc/working-activity.json(重启后仍生效)', en: 'Persisted ~/.dsh-cc/working-activity.json (survives restart)' },
|
|
112
|
+
'activity-current-direct': { zh: '当前预设:{{name}} · /activity frames <名> 直接切换:', en: 'Current preset: {{name}} · /activity frames <name> to switch directly:' },
|
|
113
|
+
'activity-random-each': { zh: '每次随机', en: 'random each time' },
|
|
114
|
+
'activity-current-marker': { zh: ' ← 当前', en: ' ← current' },
|
|
115
|
+
'activity-usage': { zh: '用法:/activity | /activity frames <名> | /activity status', en: 'Usage: /activity | /activity frames <name> | /activity status' },
|
|
116
|
+
'preset-current': { zh: '当前 preset {{name}}', en: 'Current preset {{name}}' },
|
|
117
|
+
'preset-roster-missing': { zh: '(未挂载名册)', en: '(roster not mounted)' },
|
|
118
|
+
'preset-switch-hint': { zh: '切换 /preset(选择器)或 /preset <id>', en: 'Switch /preset (picker) or /preset <id>' },
|
|
119
|
+
'preset-persist-hint': { zh: '持久化 ~/.dsh-cc/agent-preset.json(重启后仍生效;cordis.yml preset 优先)', en: 'Persisted ~/.dsh-cc/agent-preset.json (survives restart; cordis.yml preset wins)' },
|
|
120
|
+
'preset-lock-hint': { zh: '锁定规则 已开始的会话不可切换(官方 blank-only 规则)', en: 'Lock rule started sessions cannot switch (official blank-only rule)' },
|
|
121
|
+
'preset-roster-unmounted': { zh: '当前组合未挂载 agent-presets 名册(preset 不可用)', en: 'The agent-presets roster is not mounted (presets unavailable)' },
|
|
122
|
+
'theme-name-arg': { zh: '/theme <名字>', en: '/theme <name>' },
|
|
123
|
+
'theme-current': { zh: '当前主题 {{name}}', en: 'Current theme {{name}}' },
|
|
124
|
+
'theme-switch-hint': { zh: '切换 /theme(选择器)或 /theme <名字>', en: 'Switch /theme (picker) or /theme <name>' },
|
|
125
|
+
'theme-persist-hint': { zh: '持久化 ~/.dsh-cc/theme.json(重启后仍生效;CC_TUI_THEME 优先)', en: 'Persisted ~/.dsh-cc/theme.json (survives restart; CC_TUI_THEME wins)' },
|
|
126
|
+
'theme-custom-hint': { zh: '自定义 ~/.dsh-cc/themes/<名字>.json(见 README「自定义主题」)', en: 'Custom ~/.dsh-cc/themes/<name>.json (see README "Custom themes")' },
|
|
127
|
+
'theme-switched-saved': { zh: '主题已切换:{{name}}(已保存)', en: 'Theme switched: {{name}} (saved)' },
|
|
128
|
+
'theme-unknown': { zh: '未知主题「{{name}}」· /theme 查看全部', en: 'Unknown theme "{{name}}" · /theme to view all' },
|
|
129
|
+
'status-model': { zh: '模型 {{model}}', en: 'Model {{model}}' },
|
|
130
|
+
'status-working': { zh: '工作中', en: 'working' },
|
|
131
|
+
'status-idle': { zh: '空闲', en: 'idle' },
|
|
132
|
+
'status-state': { zh: '状态 {{state}}', en: 'Status {{state}}' },
|
|
133
|
+
'status-session': { zh: '会话 {{id}}', en: 'Session {{id}}' },
|
|
134
|
+
'status-dir': { zh: '目录 {{cwd}}', en: 'Directory {{cwd}}' },
|
|
135
|
+
'cost-cache-rate': { zh: '缓存率 {{rate}}% · {{read}} 读 / {{write}} 写', en: 'Cache rate {{rate}}% · {{read}} read / {{write}} write' },
|
|
136
|
+
'cost-context': { zh: '上下文 {{pct}}%', en: 'Context {{pct}}%' },
|
|
137
|
+
'status-title': { zh: '标题 {{title}}', en: 'Title {{title}}' },
|
|
138
|
+
'cost-cache-hit-rate': { zh: '缓存命中率 {{rate}}% · 缓存 {{read}} 读 / {{write}} 写', en: 'Cache hit rate {{rate}}% · cache {{read}} read / {{write}} write' },
|
|
139
|
+
'cost-note': { zh: '注:DSH 不提供 API 费用计量,以上为 token 用量(按 provider 账单计费)', en: 'Note: DSH provides no API cost metering; the above is token usage (billed by your provider)' },
|
|
140
|
+
'doctor-example-config': { zh: '示例配置 {{path}}', en: 'Example config {{path}}' },
|
|
141
|
+
'doctor-user-config': { zh: '用户配置 {{path}}', en: 'User config {{path}}' },
|
|
142
|
+
'doctor-launch-hint': { zh: '启动方式 dsh-tui.cmd / dsh --profile dsh-tui', en: 'Launch dsh-tui.cmd / dsh --profile dsh-tui' },
|
|
143
|
+
'doctor-route-hint': { zh: '模型路由 由 cordis.yml 的 llm-deepseek 段决定(/model 仅提示重启生效)', en: 'Model route set by the llm-deepseek block in cordis.yml (/model only hints at restart)' },
|
|
144
|
+
'export-failed': { zh: '导出失败(无法写入工作目录)', en: 'Export failed (cannot write to working directory)' },
|
|
145
|
+
'export-saved': { zh: '已导出: {{target}}', en: 'Exported: {{target}}' },
|
|
146
|
+
'agentsmd-create-failed': { zh: '创建 AGENTS.md 失败', en: 'Failed to create AGENTS.md' },
|
|
147
|
+
'agentsmd-exists': { zh: 'AGENTS.md 已存在,未覆盖', en: 'AGENTS.md already exists, not overwritten' },
|
|
148
|
+
'agentsmd-created': { zh: '已创建 {{result}}', en: 'Created {{result}}' },
|
|
149
|
+
'login-api-key': { zh: 'API key: {{key}}', en: 'API key: {{key}}' },
|
|
150
|
+
'login-key-missing': { zh: '未配置(DEEPSEEK_API_KEY)', en: 'not configured (DEEPSEEK_API_KEY)' },
|
|
151
|
+
'login-base-url': { zh: 'Base URL: {{url}}', en: 'Base URL: {{url}}' },
|
|
152
|
+
'login-official-endpoint': { zh: '官方端点', en: 'official endpoint' },
|
|
153
|
+
'login-source-hint': { zh: '来源:环境变量 → 工作区 .env(run.ts 兜底读取)', en: 'Source: env var → workspace .env (run.ts fallback)' },
|
|
154
|
+
'login-logout-hint': { zh: 'DSH 凭证来自环境变量 DEEPSEEK_API_KEY — 删除该环境变量后重启 dsh-tui 即登出', en: 'DSH credentials come from the DEEPSEEK_API_KEY env var — remove it and restart dsh-tui to log out' },
|
|
155
|
+
'permissions-policy-hint': { zh: 'DSH 权限策略由 fs-policy / bash-sandbox 配置决定(当前 leaf:workspace 内读写、写入需已读文件)。', en: 'DSH permission policy is set by fs-policy / bash-sandbox config (current leaf: read/write in workspace, writes need a prior read).' },
|
|
156
|
+
'permissions-approval-hint': { zh: 'DSH 的 /permission 预设切换需要 approval 服务 + 审批 UI,dsh-tui 未挂载。', en: 'DSH /permission preset switching needs the approval service + approval UI, not mounted in dsh-tui.' },
|
|
157
|
+
'permissions-root-hint': { zh: '当前文件系统策略以工作目录为根:{{cwd}}', en: 'Current filesystem policy is rooted at the working directory: {{cwd}}' },
|
|
158
|
+
'permissions-path-hint': { zh: '模型工具相对路径均解析自该目录;跨目录访问由 fs-policy 拦截。', en: 'Relative paths of model tools resolve from this directory; cross-directory access is blocked by fs-policy.' },
|
|
159
|
+
'hooks-not-mounted': { zh: 'DSH hooks(dsh-hooks-claude / dsh-hooks-codex)未在本 leaf 挂载。', en: 'DSH hooks (dsh-hooks-claude / dsh-hooks-codex) are not mounted in this leaf.' },
|
|
160
|
+
'hooks-mount-hint': { zh: '需要时可在 cordis.yml 挂载对应 hooks 插件。', en: 'Mount the matching hooks plugin in cordis.yml when needed.' },
|
|
161
|
+
'memory-none': { zh: 'DSH 暂无持久记忆服务。', en: 'DSH has no persistent memory service yet.' },
|
|
162
|
+
'memory-hint': { zh: '长期约定可写入 AGENTS.md(工作区上下文)或技能(~/.dsh/skills)。', en: 'Long-term conventions can go into AGENTS.md (workspace context) or skills (~/.dsh/skills).' },
|
|
163
|
+
'update-unavailable': { zh: '当前运行方式不支持自动更新(需经 dsh --profile 启动),请在终端执行 dsh plugin --profile <name> update @deepseek-harness-tui/dsh-tui', 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.' },
|
|
164
|
+
'update-working': { zh: '当前回合仍在运行,请等待完成后再更新 TUI。', en: 'The current turn is still running. Wait for it to finish before updating the TUI.' },
|
|
165
|
+
'update-starting': { zh: '正在更新 @deepseek-harness-tui/dsh-tui,完成后会自动重启并恢复当前会话……', en: 'Updating @deepseek-harness-tui/dsh-tui. The TUI will restart and resume this session when finished…' },
|
|
166
|
+
'update-available': { zh: '发现新版本:v{{latest}}(当前 v{{current}})· 输入 /update 更新 TUI', en: 'New version available: v{{latest}} (current v{{current}}) · type /update to update the TUI' },
|
|
167
|
+
'update-already-latest': { zh: '当前已是最新版本(v{{current}})。', en: 'Already on the latest version (v{{current}}).' },
|
|
168
|
+
'update-check-failed': { zh: '无法确认新版本(网络或 registry 不可达),已尝试直接更新……', en: 'Could not confirm a newer version (network or registry unreachable); attempting the update anyway…' },
|
|
169
|
+
'vim-not-implemented': { zh: 'vim 模式暂未实现', en: 'vim mode not implemented yet' },
|
|
170
|
+
'terminal-setup-hint': { zh: '推荐 Windows Terminal(≥110 列、等宽字体、TrueColor)。', en: 'Recommended: Windows Terminal (≥110 columns, monospace, TrueColor).' },
|
|
171
|
+
'terminal-paste-hint': { zh: 'Ctrl+V 粘贴文本/文件路径;Ctrl+Shift+V 终端原生粘贴;右键粘贴同样可用。', en: 'Ctrl+V pastes text/file paths; Ctrl+Shift+V is native terminal paste; right-click paste also works.' },
|
|
172
|
+
'connect-none': { zh: 'DSH 暂无远程连接机制(CC 的 /connect 对应能力未适配)。', en: 'DSH has no remote connection mechanism (CC\'s /connect equivalent is not adapted).' },
|
|
173
|
+
'theme-switch-failed': { zh: '主题「{{name}}」切换失败(无法写入 ~/.dsh-cc/theme.json)', en: 'Theme "{{name}}" switch failed (cannot write ~/.dsh-cc/theme.json)' },
|
|
174
|
+
'interrupt-delivered': { zh: '已打断当前回合,{{n}} 条消息立即处理', en: 'Interrupted current turn, {{n}} messages processed immediately' },
|
|
175
|
+
// ── components/ActivityLine.tsx ──────────────────────────────────────
|
|
176
|
+
'activity-ctx-warn': { zh: '⚠ 上下文', en: '⚠ ctx ' },
|
|
177
|
+
// ── components/ActivityPicker.tsx ─────────────────────────────────────
|
|
178
|
+
'activity-random-each-preset': { zh: '每次随机一个预设', en: 'random preset each time' },
|
|
179
|
+
// ── components/PresetPicker.tsx ──────────────────────────────────────
|
|
180
|
+
'preset-default-tag': { zh: '(默认)', en: ' (default)' },
|
|
181
|
+
'preset-broken-tag': { zh: '(无法加载)', en: ' (failed to load)' },
|
|
182
|
+
// ── channel.ts — reasoning-effort notifications ──────────────────────
|
|
183
|
+
'effort-unavailable': { zh: '推理等级切换不可用(llm 服务未挂载)', en: 'Reasoning effort switching unavailable (llm service not mounted)' },
|
|
184
|
+
'effort-read-failed': { zh: '推理等级读取失败 · {{error}}', en: 'Failed to read reasoning efforts · {{error}}' },
|
|
185
|
+
'effort-single-tier': { zh: '当前模型只有一档推理等级({{name}})', en: 'Current model has a single reasoning effort ({{name}})' },
|
|
186
|
+
'effort-unsupported': { zh: '当前模型不支持推理等级切换', en: 'Current model does not support reasoning effort switching' },
|
|
187
|
+
'effort-switched': { zh: '推理强度 → {{name}}', en: 'Reasoning effort → {{name}}' },
|
|
188
|
+
// ── components/LogoV2.tsx ───────────────────────────────────────────
|
|
189
|
+
'logo-tagline': { zh: '探索未至之境!', en: 'Explore the uncharted!' },
|
|
190
|
+
'logo-tip-model': { zh: '切换模型', en: 'switch model' },
|
|
191
|
+
'logo-tip-help': { zh: '查看命令', en: 'view commands' },
|
|
192
|
+
'logo-tip-tab': { zh: '自动补全', en: 'autocomplete' },
|
|
193
|
+
// ── components/PromptInput.tsx ──────────────────────────────────────
|
|
194
|
+
'input-sent-after-turn': { zh: '已发送,当前回合结束后处理', en: 'Sent, processed after the current turn' },
|
|
195
|
+
'input-interrupted-next': { zh: '已插话 · 下一步立即处理', en: 'Interrupted · processed next' },
|
|
196
|
+
'input-queued-after-turn': { zh: '已排队 · 回合结束后处理', en: 'Queued · processed after the turn' },
|
|
197
|
+
'input-cannot-retract': { zh: '无法撤回:消息可能已被处理,或当前版本不支持', en: 'Cannot retract: the message may already be processed, or this version doesn\'t support it' },
|
|
198
|
+
'input-retracted': { zh: '已撤回,可编辑后重新发送', en: 'Retracted, editable and resendable' },
|
|
199
|
+
'input-empty': { zh: '输入为空,没有可发送的内容', en: 'Empty input, nothing to send' },
|
|
200
|
+
'input-interrupt-immediate': { zh: '已打断当前回合,正在立即处理', en: 'Interrupted current turn, processing immediately' },
|
|
201
|
+
'input-clipboard-empty': { zh: '剪贴板为空', en: 'Clipboard is empty' },
|
|
202
|
+
'input-pending-steer-label': { zh: '插话 · 下一步送达', en: 'Steer · delivered next' },
|
|
203
|
+
'input-pending-queue-label': { zh: '排队 · 回合结束后送达', en: 'Queued · delivered after the turn' },
|
|
204
|
+
'input-pending-actions-hint': { zh: '撤回 · Esc 打断并立即发送', en: 'Retract · Esc interrupts and sends immediately' },
|
|
205
|
+
// ── components/whaleFrames.ts (frame labels) ────────────────────────
|
|
206
|
+
'frame-blink': { zh: '眨眼', en: 'blink' },
|
|
207
|
+
'frame-fin-1': { zh: '动腹鳍1', en: 'fin1' },
|
|
208
|
+
'frame-fin-2': { zh: '动腹鳍2', en: 'fin2' },
|
|
209
|
+
'frame-spout-1': { zh: '喷水花1', en: 'spout1' },
|
|
210
|
+
'frame-spout-2': { zh: '喷水花2', en: 'spout2' },
|
|
211
|
+
'frame-spout-3': { zh: '喷水花3', en: 'spout3' },
|
|
212
|
+
'frame-spout-4': { zh: '喷水花4', en: 'spout4' },
|
|
213
|
+
'frame-spout-5': { zh: '喷水花5', en: 'spout5' },
|
|
214
|
+
'frame-spout-6': { zh: '喷水花6', en: 'spout6' },
|
|
215
|
+
'frame-tail-1': { zh: '摆尾巴1', en: 'tail1' },
|
|
216
|
+
'frame-tail-2': { zh: '摆尾巴2', en: 'tail2' },
|
|
217
|
+
'frame-tail-3': { zh: '摆尾巴3', en: 'tail3' },
|
|
218
|
+
// ── components/MessageList.tsx ──────────────────────────────────────
|
|
219
|
+
'load-earlier': { zh: ' ↑ 加载更早消息(会话日志完整,/export 导出全文) ', en: ' ↑ load earlier messages (full session log; /export for full text) ' },
|
|
220
|
+
'resume-none-in-cwd': { zh: '当前目录没有可恢复的历史会话', en: 'No resumable sessions in the current directory' },
|
|
221
|
+
'compact-summary-folded': { zh: '摘要已折叠', en: 'Summary folded' },
|
|
222
|
+
// ── components/ThemePicker.tsx ──────────────────────────────────────
|
|
223
|
+
'theme-builtin-base': { zh: '内置 · {{name}} 基底', en: 'Built-in · {{name}} base' },
|
|
224
|
+
'theme-user-base': { zh: '{{base}} 基底 · ~/.dsh-cc/themes/{{name}}.json', en: '{{base}} base · ~/.dsh-cc/themes/{{name}}.json' },
|
|
225
|
+
// ── components/LoadedContextPanel.tsx ───────────────────────────────
|
|
226
|
+
'context-panel-collapse': { zh: '折叠', en: 'Collapse' },
|
|
227
|
+
'context-panel-expand': { zh: '展开', en: 'Expand' },
|
|
228
|
+
'context-panel-sections': { zh: '系统提示词 · {{n}} 段', en: 'System prompt · {{n}} sections' },
|
|
229
|
+
'context-panel-files': { zh: '工作区指令 · {{n}} 个文件', en: 'Workspace instructions · {{n}} files' },
|
|
230
|
+
'context-panel-runtime': { zh: '运行时上下文 · {{n}} 项', en: 'Runtime context · {{n}} items' },
|
|
231
|
+
'context-panel-skills': { zh: '技能 · {{n}}', en: 'Skills · {{n}}' },
|
|
232
|
+
'context-panel-tools': { zh: '工具 · {{n}}', en: 'Tools · {{n}}' },
|
|
233
|
+
// ── components/questions/AskUserQuestionPanel.tsx ───────────────────
|
|
234
|
+
'question-select-or-answer': { zh: '至少选择一个选项,或在最后一行输入回答', en: 'Select at least one option, or type an answer on the last line' },
|
|
235
|
+
'question-answer-or-check': { zh: '输入回答或勾选选项后再提交', en: 'Type an answer or check options before submitting' },
|
|
236
|
+
'question-type-answer-first': { zh: '先输入回答内容再提交', en: 'Type your answer before submitting' },
|
|
237
|
+
'question-header-progress': { zh: ' 📋 提问 · 第 {{position}}/{{total}} 题{{remaining}} ', en: ' 📋 Question {{position}}/{{total}} {{remaining}} ' },
|
|
238
|
+
'question-remaining-more': { zh: ' · 还剩 {{n}} 题', en: ' · {{n}} left' },
|
|
239
|
+
'question-hint-type': { zh: '输入回答', en: 'Type answer' },
|
|
240
|
+
'question-hint-enter': { zh: 'Enter 提交', en: 'Enter submit' },
|
|
241
|
+
'question-hint-back': { zh: '↑ 返回选项', en: '↑ back to options' },
|
|
242
|
+
'question-hint-esc': { zh: 'Esc 中断', en: 'Esc cancel' },
|
|
243
|
+
'question-hint-selected': { zh: '已选 {{n}}', en: 'Selected {{n}}' },
|
|
244
|
+
'question-hint-select': { zh: '↑/↓ 选择', en: '↑/↓ select' },
|
|
245
|
+
'question-hint-multi': { zh: 'Space 多选', en: 'Space multi-select' },
|
|
246
|
+
'question-hint-attach': { zh: '输入文字附带回答', en: 'Type text to attach an answer' },
|
|
247
|
+
'question-custom-tab': { zh: '自定义回答', en: 'Custom answer' },
|
|
248
|
+
'question-attached-label': { zh: '(附加:{{label}})', en: '(attached: {{label}})' },
|
|
249
|
+
'question-direct-input': { zh: '直接输入…', en: 'Type directly…' },
|
|
250
|
+
// ── /lang command ───────────────────────────────────────────────────
|
|
251
|
+
'lang-current': { zh: '当前语言 {{lang}}', en: 'Current language {{lang}}' },
|
|
252
|
+
'lang-switch-hint': { zh: '切换 /lang en | /lang zh', en: 'Switch /lang en | /lang zh' },
|
|
253
|
+
'lang-persist-hint': { zh: '持久化 ~/.dsh-cc/lang.json(重启后仍生效;CC_TUI_LANG 优先)', en: 'Persisted ~/.dsh-cc/lang.json (survives restart; CC_TUI_LANG wins)' },
|
|
254
|
+
'lang-switched': { zh: '语言已切换:{{lang}}(已保存)', en: 'Language switched: {{lang}} (saved)' },
|
|
255
|
+
'lang-unknown': { zh: '未知语言「{{lang}}」· /lang 查看全部(en / zh)', en: 'Unknown language "{{lang}}" · /lang to view all (en / zh)' },
|
|
256
|
+
'lang-switch-failed': { zh: '语言「{{lang}}」切换失败(无法写入 ~/.dsh-cc/lang.json)', en: 'Language "{{lang}}" switch failed (cannot write ~/.dsh-cc/lang.json)' },
|
|
257
|
+
};
|
|
258
|
+
/** The active language, module-level so non-React modules (channel.ts,
|
|
259
|
+
* loaded-context.ts) resolve strings without a context. Defaults to `zh`
|
|
260
|
+
* (the original hard-coded language). */
|
|
261
|
+
let activeLang = 'zh';
|
|
262
|
+
const listeners = new Set();
|
|
263
|
+
/** Subscribe to language switches (mirrors themePrefs subscription style). */
|
|
264
|
+
export function subscribeLang(listener) {
|
|
265
|
+
listeners.add(listener);
|
|
266
|
+
return () => listeners.delete(listener);
|
|
267
|
+
}
|
|
268
|
+
/** The currently active language. */
|
|
269
|
+
export function getLang() {
|
|
270
|
+
return activeLang;
|
|
271
|
+
}
|
|
272
|
+
/** Switch the active language and notify subscribers. */
|
|
273
|
+
export function setLang(lang) {
|
|
274
|
+
activeLang = lang;
|
|
275
|
+
for (const listener of listeners)
|
|
276
|
+
listener();
|
|
277
|
+
}
|
|
278
|
+
/** Is a string a valid shipped language code? */
|
|
279
|
+
export function isLang(value) {
|
|
280
|
+
return value === 'zh' || value === 'en';
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Translate a dictionary key into the active language, substituting
|
|
284
|
+
* `{{name}}` placeholders with params. Missing keys render the key itself
|
|
285
|
+
* so a typo is visible instead of silently blank.
|
|
286
|
+
* @param key - Dictionary key (see dict).
|
|
287
|
+
* @param params - Placeholder values.
|
|
288
|
+
*/
|
|
289
|
+
export function t(key, params = {}) {
|
|
290
|
+
const entry = dict[key];
|
|
291
|
+
const template = entry?.[activeLang] ?? key;
|
|
292
|
+
return template.replace(/\{\{(\w+)\}\}/g, (match, name) => name in params ? String(params[name]) : match);
|
|
293
|
+
}
|
|
294
|
+
// ── persistence (~/.dsh-cc/lang.json) ──────────────────────────────────
|
|
295
|
+
/**
|
|
296
|
+
* Parse a persisted `{ lang }` value; anything else yields undefined.
|
|
297
|
+
* @param text - Raw file contents.
|
|
298
|
+
*/
|
|
299
|
+
export function parseLangPref(text) {
|
|
300
|
+
try {
|
|
301
|
+
const parsed = JSON.parse(text);
|
|
302
|
+
if (parsed === null || typeof parsed !== 'object' || Array.isArray(parsed))
|
|
303
|
+
return undefined;
|
|
304
|
+
const lang = parsed.lang;
|
|
305
|
+
return isLang(lang) ? lang : undefined;
|
|
306
|
+
}
|
|
307
|
+
catch {
|
|
308
|
+
return undefined;
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
/** The persisted `/lang` choice, or undefined when unset or invalid. */
|
|
312
|
+
export function readLangPref(dir = PREFS_DIR) {
|
|
313
|
+
try {
|
|
314
|
+
return parseLangPref(readFileSync(join(dir, 'lang.json'), 'utf8'));
|
|
315
|
+
}
|
|
316
|
+
catch {
|
|
317
|
+
return undefined;
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
/** Persist the chosen language (best effort). */
|
|
321
|
+
export function writeLangPref(lang, dir = PREFS_DIR) {
|
|
322
|
+
try {
|
|
323
|
+
mkdirSync(dir, { recursive: true });
|
|
324
|
+
writeFileSync(join(dir, 'lang.json'), JSON.stringify({ lang }, null, 2));
|
|
325
|
+
return true;
|
|
326
|
+
}
|
|
327
|
+
catch {
|
|
328
|
+
return false;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Guess the user's language from the OS locale (`LC_ALL`, `LC_MESSAGES`,
|
|
333
|
+
* `LANG`), defaulting to `zh`. Only consulted when nothing else (env var,
|
|
334
|
+
* cordis.yml `lang`, persisted `/lang` choice) pinned a language.
|
|
335
|
+
*/
|
|
336
|
+
export function detectLocaleLang() {
|
|
337
|
+
const raw = process.env.LC_ALL ??
|
|
338
|
+
process.env.LC_MESSAGES ??
|
|
339
|
+
process.env.LANG ??
|
|
340
|
+
'';
|
|
341
|
+
const locale = raw.split('.')[0]?.toLowerCase() ?? '';
|
|
342
|
+
if (locale.startsWith('zh'))
|
|
343
|
+
return 'zh';
|
|
344
|
+
if (locale.startsWith('en'))
|
|
345
|
+
return 'en';
|
|
346
|
+
return 'zh';
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Resolve the startup language: the persisted `/lang` choice, else the OS
|
|
350
|
+
* locale guess, else `zh` (the original hard-coded language). The env var /
|
|
351
|
+
* config precedence lives in plugin.apply (see {@link resolveStartupLang}
|
|
352
|
+
* consumers).
|
|
353
|
+
*/
|
|
354
|
+
export function resolveStartupLang() {
|
|
355
|
+
return readLangPref() ?? detectLocaleLang();
|
|
356
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* dsh-tui plugin entry. The TUI implementation lives in `./plugin.tsx` (its
|
|
3
|
+
* render path is JSX); this module owns the plugin surface (`name`/`inject`/
|
|
4
|
+
* `Config`/`apply`) at the canonical `src/index.ts` location and delegates
|
|
5
|
+
* `apply` through a dynamic import so entry-scanning tooling and the Loader
|
|
6
|
+
* resolve a plain `.ts` module.
|
|
7
|
+
* @module @deepseek-harness-tui/dsh-tui
|
|
8
|
+
*/
|
|
9
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
10
|
+
import Schema from '@deepseek-ai/schemastery';
|
|
11
|
+
export declare const name = "dsh-tui";
|
|
12
|
+
export declare const inject: string[];
|
|
13
|
+
/**
|
|
14
|
+
* dsh-tui plugin configuration: session attachment, model route, working
|
|
15
|
+
* directory, and display preferences.
|
|
16
|
+
*/
|
|
17
|
+
export interface Config {
|
|
18
|
+
/** Existing session to attach; a fresh session is created when absent. */
|
|
19
|
+
sessionId?: string;
|
|
20
|
+
/** LLM provider route. The route resolves atomically (issue #67): when
|
|
21
|
+
* cordis.yml names BOTH `provider` and `model`, that pair wins; otherwise
|
|
22
|
+
* the `/model` choice persisted in `~/.dsh-cc/model.json` wins whole;
|
|
23
|
+
* otherwise the harness defaults (`deepseek-official`). A provider-only
|
|
24
|
+
* pin never half-overrides the persisted choice. */
|
|
25
|
+
provider?: string;
|
|
26
|
+
/** Model override passed to the agent; resolved together with `provider`
|
|
27
|
+
* as one atomic route (see `provider`). Harness default model:
|
|
28
|
+
* `deepseek-v4-flash`. */
|
|
29
|
+
model?: string;
|
|
30
|
+
/** Session working directory; defaults to the invoking directory. */
|
|
31
|
+
cwd?: string;
|
|
32
|
+
/** Reasoning effort applied to every request, validated against the live
|
|
33
|
+
* route's adapter levels (an unlisted level is ignored and the adapter
|
|
34
|
+
* default applies). Wins over the persisted Shift+Tab choice; also seeds
|
|
35
|
+
* the startup status line until the first request header reports the
|
|
36
|
+
* live value. */
|
|
37
|
+
effort?: string;
|
|
38
|
+
/** Show the dsh-working-activity live working line on the status bar
|
|
39
|
+
* (consumes its log-only `activity/status` events; off hides it). */
|
|
40
|
+
activity?: boolean;
|
|
41
|
+
/** Working-activity indicator preset: `claude`/`moon`/`comet`/`dots`/…
|
|
42
|
+
* or `random` (see activityFrames.ts). When absent, the `/activity`
|
|
43
|
+
* choice persisted in `~/.dsh-cc/working-activity.json` wins, then the
|
|
44
|
+
* `claude` default. */
|
|
45
|
+
activityFrames?: string;
|
|
46
|
+
/** Show the segmented context bar (the band under the input with the
|
|
47
|
+
* `ctx used/window` readout) in the status footer; off hides that row
|
|
48
|
+
* while the status/mode lines stay (issue #29). */
|
|
49
|
+
contextBar?: boolean;
|
|
50
|
+
/** Run in the terminal's alternate screen (Claude Code fullscreen layout). */
|
|
51
|
+
fullscreen?: boolean;
|
|
52
|
+
/** UI language: `en` / `zh`. When absent, the `CC_TUI_LANG` env var wins,
|
|
53
|
+
* then the `/lang` choice persisted in `~/.dsh-cc/lang.json`, then `zh`. */
|
|
54
|
+
lang?: string;
|
|
55
|
+
/** Agent preset id new sessions compose from (standard/code/minimal/
|
|
56
|
+
* cordis/… when the roster is mounted). When absent, the `/preset` choice
|
|
57
|
+
* persisted in `~/.dsh-cc/agent-preset.json` wins, then the roster
|
|
58
|
+
* default (`standard`). */
|
|
59
|
+
preset?: string;
|
|
60
|
+
}
|
|
61
|
+
export declare const Config: Schema<Config>;
|
|
62
|
+
/**
|
|
63
|
+
* Start the interactive TUI front door, delegating to the JSX implementation
|
|
64
|
+
* in `./plugin.tsx` (see its module doc for the full contract).
|
|
65
|
+
* @param ctx - the plugin context.
|
|
66
|
+
* @param config - the validated dsh-tui configuration.
|
|
67
|
+
* @returns a promise settling when the TUI teardown completes.
|
|
68
|
+
*/
|
|
69
|
+
export declare function apply(ctx: Context, config: Config): Promise<void>;
|
|
70
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,MAAM,MAAM,0BAA0B,CAAA;AAE7C,eAAO,MAAM,IAAI,YAAY,CAAA;AAC7B,eAAO,MAAM,MAAM,UAAa,CAAA;AAEhC;;;GAGG;AACH,MAAM,WAAW,MAAM;IACrB,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;yDAIqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;+BAE2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,qEAAqE;IACrE,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ;;;;sBAIkB;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf;0EACsE;IACtE,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB;;;4BAGwB;IACxB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;wDAEoD;IACpD,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;iFAC6E;IAC7E,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;gCAG4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,CAgBhC,CAAA;AAEF;;;;;;GAMG;AACH,wBAAsB,KAAK,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGvE"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import Schema from '@deepseek-ai/schemastery';
|
|
2
|
+
export const name = 'dsh-tui';
|
|
3
|
+
export const inject = ['agents'];
|
|
4
|
+
export const Config = Schema.object({
|
|
5
|
+
sessionId: Schema.string().required(false),
|
|
6
|
+
// No schema defaults on the route: a `.default()` here would make an
|
|
7
|
+
// unset key indistinguishable from an explicit cordis.yml choice and the
|
|
8
|
+
// persisted `/model` preference could never win (issue #30). The defaults
|
|
9
|
+
// live at the end of the fallback chain in modelRoute.ts instead.
|
|
10
|
+
provider: Schema.string().required(false),
|
|
11
|
+
model: Schema.string().required(false),
|
|
12
|
+
cwd: Schema.string().required(false),
|
|
13
|
+
effort: Schema.string().required(false),
|
|
14
|
+
activity: Schema.boolean().default(true),
|
|
15
|
+
activityFrames: Schema.string().required(false),
|
|
16
|
+
contextBar: Schema.boolean().default(true),
|
|
17
|
+
fullscreen: Schema.boolean().default(false),
|
|
18
|
+
lang: Schema.string().required(false),
|
|
19
|
+
preset: Schema.string().required(false),
|
|
20
|
+
});
|
|
21
|
+
/**
|
|
22
|
+
* Start the interactive TUI front door, delegating to the JSX implementation
|
|
23
|
+
* in `./plugin.tsx` (see its module doc for the full contract).
|
|
24
|
+
* @param ctx - the plugin context.
|
|
25
|
+
* @param config - the validated dsh-tui configuration.
|
|
26
|
+
* @returns a promise settling when the TUI teardown completes.
|
|
27
|
+
*/
|
|
28
|
+
export async function apply(ctx, config) {
|
|
29
|
+
const { apply: ccTuiApply } = await import('./plugin.js');
|
|
30
|
+
return ccTuiApply(ctx, config);
|
|
31
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Component that parses ANSI escape codes and renders them using Text components.
|
|
4
|
+
*
|
|
5
|
+
* Use this as an escape hatch when you have pre-formatted ANSI strings from
|
|
6
|
+
* external tools (like cli-highlight) that need to be rendered in Ink.
|
|
7
|
+
*
|
|
8
|
+
* Memoized to prevent re-renders when parent changes but children string is the same.
|
|
9
|
+
*/
|
|
10
|
+
export declare const Ansi: React.MemoExoticComponent<(t0: any) => any>;
|
|
11
|
+
//# sourceMappingURL=Ansi.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Ansi.d.ts","sourceRoot":"","sources":["../../../src/ink/Ansi.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAsB1B;;;;;;;GAOG;AACH,eAAO,MAAM,IAAI,iCAAgC,GAAG,SA6ElD,CAAC"}
|