@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
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026, chimney (ccch1mneyyy)
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
|
|
2
|
+
<p align="center">
|
|
3
|
+
<img src="docs/assets/logo.svg" alt="dsh-TUI - DeepSeek Harness terminal interface" width="560">
|
|
4
|
+
</p>
|
|
5
|
+
<p align="center">
|
|
6
|
+
<strong>简体中文</strong> | <a href="README_EN.md">English</a>
|
|
7
|
+
</p>
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
<p align="center">
|
|
11
|
+
<a href="https://www.npmjs.com/package/@deepseek-harness-tui/dsh-tui"><img alt="npm" src="https://img.shields.io/npm/v/@deepseek-harness-tui/dsh-tui?style=flat-square&color=4b6fff"></a>
|
|
12
|
+
<a href="https://github.com/ccch1mneyyy/dsh-TUI/actions/workflows/ci.yml"><img alt="CI" src="https://github.com/ccch1mneyyy/dsh-TUI/actions/workflows/ci.yml/badge.svg"></a>
|
|
13
|
+
<a href="LICENSE"><img alt="MIT License" src="https://img.shields.io/badge/license-MIT-263146?style=flat-square"></a>
|
|
14
|
+
<img alt="Public beta" src="https://img.shields.io/badge/status-public%20beta-7da1de?style=flat-square">
|
|
15
|
+
<img alt="官方收录" src="https://img.shields.io/badge/DeepSeek%20Harness%20官方公众号-收录-brightgreen">
|
|
16
|
+
</p>
|
|
17
|
+
|
|
18
|
+
# dsh-TUI
|
|
19
|
+
|
|
20
|
+
> 一个美观且实用的 Claude Code 风格 TUI 插件:像素鲸鱼顶栏、双流光大字、实时工作状态行、思考流式展开、双击 Esc 时间回溯、蓝白上下文进度条 + TPS 仪表。
|
|
21
|
+
> 零核心改动,纯插件挂载。安装插件即可启用,卸载后不会留下核心补丁。
|
|
22
|
+
|
|
23
|
+
## 🎉 官方收录
|
|
24
|
+
|
|
25
|
+
本插件被 **DeepSeek Harness 官方公众号** 推文收录,作为"内测用户精选插件"展示:
|
|
26
|
+
|
|
27
|
+
<p align="center">
|
|
28
|
+
<img src="screenshots/wechat-official.png" alt="DeepSeek Harness 官方公众号推文收录 dsh-TUI" width="560">
|
|
29
|
+
</p>
|
|
30
|
+
|
|
31
|
+
## 核心能力
|
|
32
|
+
|
|
33
|
+
- **终端原生交互**:流式 Markdown、结构化工具卡、命令与文件补全、`@` 文件引用
|
|
34
|
+
(消息任意位置补全,发送时自动附加文件内容/目录列表)、历史搜索、消息选择、
|
|
35
|
+
inline/alternate-screen 两种渲染模式,以及 `/lang` 中英界面语言切换。
|
|
36
|
+
- **可观察的 Agent 状态**:实时工作状态、上下文分段进度、TPS、缓存命中率、
|
|
37
|
+
推理等级、输入/输出 token 与 Git/会话信息。
|
|
38
|
+
- **完整会话工作流**:`/resume`、`/new`、`/compact`、`/export`、模型切换,
|
|
39
|
+
以及双击 `Esc` 发起的会话 rewind/fork。
|
|
40
|
+
- **DSH 官方能力接入**:Agent preset、Skills、MCP、Goals、Todos、子代理、
|
|
41
|
+
`ask_user_question` 问卷都通过现有服务或注册表连接。
|
|
42
|
+
- **为长会话设计**:事件驱动投影、差分终端输出、消息虚拟化、回放合并与有界缓存,
|
|
43
|
+
避免渲染成本和内存随会话无限增长。
|
|
44
|
+
|
|
45
|
+
## 界面预览
|
|
46
|
+
|
|
47
|
+

|
|
48
|
+
|
|
49
|
+

|
|
50
|
+
|
|
51
|
+
## 快速开始
|
|
52
|
+
|
|
53
|
+
前置条件:可用的终端 TTY、官方 `dsh` CLI,以及 `pnpm` 10+。运行模型还需要
|
|
54
|
+
`DEEPSEEK_API_KEY`。
|
|
55
|
+
|
|
56
|
+
```sh
|
|
57
|
+
# 1. 全局安装 CLI + 本插件(本插件自带 dsh-tui 直达命令)
|
|
58
|
+
npm install -g @deepseek-ai/dsh @deepseek-harness-tui/dsh-tui
|
|
59
|
+
|
|
60
|
+
# 2. 启动(首次运行会自动初始化 dsh-tui profile,需 pnpm)
|
|
61
|
+
dsh-tui
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
备选——手工安装 profile(仓库根目录 `install.sh` 已封装,含 pnpm 预检):
|
|
65
|
+
|
|
66
|
+
```sh
|
|
67
|
+
sh install.sh
|
|
68
|
+
# 或:dsh plugin --profile dsh-tui add @deepseek-harness-tui/dsh-tui
|
|
69
|
+
# 之后 dsh-tui 与 dsh --profile dsh-tui 等价
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
`dsh-tui --resume` 恢复上次会话;Windows 也可用仓库里的 `dsh-tui.cmd`(等价)。
|
|
73
|
+
|
|
74
|
+
TUI 启动后会在后台检查 npm 是否有新版本;发现更新时会提示,输入 `/update`
|
|
75
|
+
即可自动更新并重启恢复当前会话。
|
|
76
|
+
|
|
77
|
+
旧版 `dsh-cc-tui` / `cc-tui` profile 的迁移命令与兼容数据说明见
|
|
78
|
+
[安装与快速开始](docs/getting-started.md#从旧包迁移)。
|
|
79
|
+
|
|
80
|
+
安装流程、profile 叠加机制、源码构建与常见问题见
|
|
81
|
+
[安装与快速开始](docs/getting-started.md)。
|
|
82
|
+
|
|
83
|
+
## 快捷键
|
|
84
|
+
|
|
85
|
+
| 键 | 功能 |
|
|
86
|
+
|---|---|
|
|
87
|
+
| `Enter` | 发送(`Shift+Enter` 换行);命令菜单打开时执行选中项 |
|
|
88
|
+
| `Ctrl+C` | 中断当前回合;空闲时连按两次退出 |
|
|
89
|
+
| `Esc` | 关闭命令/文件菜单;空闲双击清空输入;**空输入双击 = 时间回溯** |
|
|
90
|
+
| `Ctrl+O` | 展开/收起详情(思考全文、工具参数与输出) |
|
|
91
|
+
| `Ctrl+R` | 历史消息搜索 |
|
|
92
|
+
| `/` | 会话内全文搜索(`n`/`N` 跳转) |
|
|
93
|
+
| `Tab` / `Enter` | 命令 / `@` 文件补全(目录可继续深入) |
|
|
94
|
+
| `Ctrl+V` | 粘贴:文本直接插入光标处;**Explorer 复制的文件/图片 → 插入文件路径** |
|
|
95
|
+
| `?` | 快捷键菜单 |
|
|
96
|
+
| `Shift+↑` | 消息选择模式(Enter 展开单条) |
|
|
97
|
+
|
|
98
|
+
**鼠标(`fullscreen: true` 全屏模式;默认关,profile 补丁层覆盖开启)**
|
|
99
|
+
|
|
100
|
+
| 操作 | 功能 |
|
|
101
|
+
|---|---|
|
|
102
|
+
| 拖拽选择 | 应用内文本选区,**松开即复制**(OSC 52 + `wl-copy`/`xclip`/`xsel` 原生兜底;tmux 内走 `load-buffer -w`),复制后自动取消选区并弹出「已复制 N 个字符」提示 |
|
|
103
|
+
| 双击 / 三击 | 选词 / 选行,同样即选即复制 |
|
|
104
|
+
| 滚轮 | 滚动消息列表 |
|
|
105
|
+
| `Esc` | 拖拽进行中取消选区(不复制) |
|
|
106
|
+
|
|
107
|
+
**问卷(模型发起 `ask_user_question` 时)**
|
|
108
|
+
|
|
109
|
+
| 键 | 功能 |
|
|
110
|
+
|---|---|
|
|
111
|
+
| `↑/↓` | 选择选项 |
|
|
112
|
+
| `Space` | 多选题勾选/取消 |
|
|
113
|
+
| `Tab` | 切到自定义回答(不选选项直接打字) |
|
|
114
|
+
| `Enter` | 提交当前选择 |
|
|
115
|
+
| `Esc` | 中断提问(模型收到 ASK_ABORTED,可继续对话) |
|
|
116
|
+
|
|
117
|
+
**本地命令(CC 指令全集复刻,均走 DSH 官方链路)**
|
|
118
|
+
|
|
119
|
+
| 分组 | 命令 |
|
|
120
|
+
|---|---|
|
|
121
|
+
| 会话 | `/new` 新会话 · `/resume` 恢复 · `/clear` 清屏 · `/compact` 压缩 · `/export` 导出 Markdown |
|
|
122
|
+
| 状态 | `/status` 会话信息 · `/cost` token 用量 · `/doctor` 环境自检 · `/config` 配置来源 · `/init` 创建 AGENTS.md |
|
|
123
|
+
| 模型 | `/model` 选择器 · `/thinking` 思考显示 · `/tokens` token 明细 · `/theme` 主题选择器 · `/lang` 中英界面切换 |
|
|
124
|
+
| 账号/策略 | `/login` 凭证状态 · `/logout` 登出说明 · `/permissions` 权限说明 · `/add-dir` 文件策略范围 · `/hooks` · `/mcp` · `/memory` |
|
|
125
|
+
| 技能 | `/audit` 代码审计 · `/bug` bug 报告 · `/review` 代码评审 · `/practice` 编程练习 · `/pr_comments` PR 评论 · `/release-notes` 发布说明 · `/vuln-check` 漏洞检查 |
|
|
126
|
+
| 其它 | `/agents` 子代理列表 · `/update` 自动更新并重启 · `/vim` · `/terminal-setup` · `/connect` · `/help` · `/exit` |
|
|
127
|
+
| 注册表 | `/plan` `/goal`(DSH 命令注册表插件,随插件自动并入 `/` 菜单) |
|
|
128
|
+
|
|
129
|
+
## 文档
|
|
130
|
+
|
|
131
|
+
| 主题 | 内容 |
|
|
132
|
+
| --- | --- |
|
|
133
|
+
| [安装与快速开始](docs/getting-started.md) | 前置条件、安装、启动、profile 生命周期、源码开发 |
|
|
134
|
+
| [配置参考](docs/configuration.md) | Cordis 覆盖、配置字段、Agent preset、MCP、环境变量 |
|
|
135
|
+
| [主题系统](docs/themes.md) | 内置主题、自动检测、自定义 JSON 主题与校验规则 |
|
|
136
|
+
| [交互与命令](docs/interaction.md) | 快捷键、鼠标、问卷、slash command 与会话工作流 |
|
|
137
|
+
| [架构与限制](docs/architecture.md) | 运行链路、渲染与持久化设计、安全边界、已知限制 |
|
|
138
|
+
| [贡献与开发约定](docs/contributing.md) | 贡献流程、仓库地图、构建产物、验证矩阵与修改规则 |
|
|
139
|
+
|
|
140
|
+
完整的中英文索引见 [`docs/README.md`](docs/README.md)。
|
|
141
|
+
|
|
142
|
+
## 配置与扩展
|
|
143
|
+
|
|
144
|
+
- **Agent preset**:四种官方 Agent 模式(`standard` / `code` / `minimal` / `cordis`),
|
|
145
|
+
`/preset` 切换;已产生对话的会话不可切换,空白会话立即生效。默认 preset 持久化
|
|
146
|
+
在 `~/.dsh-cc/agent-preset.json`;`/model` 的选择持久化在 `~/.dsh-cc/model.json`。
|
|
147
|
+
详见[配置参考](docs/configuration.md#agent-preset)。
|
|
148
|
+
- **自定义主题**:`/theme` 选择器(内置 `light` / `dark` / `dark-ansi`),也支持
|
|
149
|
+
`~/.dsh-cc/themes/<名字>.json` 自定义主题,选中即热切换并持久化;
|
|
150
|
+
`CC_TUI_THEME` 环境变量 > 持久化选择 > OSC 11 终端背景自动检测。
|
|
151
|
+
详见[主题系统](docs/themes.md)。
|
|
152
|
+
- **MCP**:通过 `@deepseek-ai/dsh-mcp-client` 挂载服务器,工具以
|
|
153
|
+
`mcp__<服务器>__<工具>` 注册;`/mcp` 查看连接状态。
|
|
154
|
+
详见[配置参考](docs/configuration.md#mcp)。
|
|
155
|
+
|
|
156
|
+
## 工作方式
|
|
157
|
+
|
|
158
|
+
```text
|
|
159
|
+
dsh profile
|
|
160
|
+
-> dsh-base
|
|
161
|
+
-> dsh-TUI Cordis patch
|
|
162
|
+
-> Agent preset + DSH services
|
|
163
|
+
-> session/event
|
|
164
|
+
-> Channel projection
|
|
165
|
+
-> React components
|
|
166
|
+
-> ported Ink/Yoga renderer
|
|
167
|
+
-> terminal
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
TUI 只负责交互与呈现。会话日志是对话真源,模型调用、工具执行、fork/resume、
|
|
171
|
+
compaction 和持久化继续由 DSH 服务拥有。更详细的模块边界与性能设计见
|
|
172
|
+
[架构文档](docs/architecture.md)。
|
|
173
|
+
|
|
174
|
+
## 技术要点
|
|
175
|
+
|
|
176
|
+
- **Gentle Mist Blue 配色**:雾蓝只承担品牌、焦点、交互与高亮,正文保持中性灰;
|
|
177
|
+
启动时查询终端背景色(OSC 11)自动选浅色/深色调色板,终端不响应时回退深色。
|
|
178
|
+
- **事件驱动渲染**:`session/event` 事件流 → 增量差分渲染,滚动状态独立维护。
|
|
179
|
+
- **布局级虚拟化**:长会话的每帧成本从 O(全会话) 降到 O(可视窗口)——屏幕外的
|
|
180
|
+
消息行渲染为"量高占位符",其子树完全不参与布局。
|
|
181
|
+
- **上下文进度条**:参考 pi-nano-context 算法(最大余数法分段着色 + 多级缩略读数)。
|
|
182
|
+
- **TPS 仪表**:参考 pi-tps-meter——流式 1/8 格 gauge、历史 min-max sparkline、
|
|
183
|
+
速度语义色(≥50 绿 / ≥20 黄 / <20 红)。
|
|
184
|
+
- **working-activity 生态**:工作状态行消费
|
|
185
|
+
[dsh-working-activity](https://github.com/ccch1mneyyy/dsh-working-activity)
|
|
186
|
+
的 log-only `activity/status` 事件(与 Web UI 同一数据源)。
|
|
187
|
+
- **终端粘贴**:raw 模式下 Ctrl+V 由应用接管——PowerShell `Get-Clipboard` 读取,
|
|
188
|
+
Explorer 复制的文件/图片插入文件路径,纯文本原样插入光标处。
|
|
189
|
+
|
|
190
|
+
## 已知限制
|
|
191
|
+
|
|
192
|
+
- 注入上下文(plugin source 内容)未做独立展示,随系统提示词并入进度条统计。
|
|
193
|
+
- `/model` 实时切换走"会话 fork 续聊"(DSH 无原位换模型 API):历史原样保留,
|
|
194
|
+
新会话路由到新模型,旧会话仍留在 `/resume` 列表里;选择写入
|
|
195
|
+
`~/.dsh-cc/model.json`,重启与 `/new` 均沿用。
|
|
196
|
+
- `Ctrl+V` 读剪贴板依赖 PowerShell `Get-Clipboard`:剪贴板被其他进程短暂锁定
|
|
197
|
+
时自动重试,持续锁定时静默放弃。
|
|
198
|
+
- 退出时以进程退出收尾,不等待 agent 异步落盘(持久化由 persistence 插件兜底)。
|
|
199
|
+
- DSH 的 `/permission`(沙箱模式切换)未适配:需要 approval 服务 + 审批 UI,
|
|
200
|
+
当前 TUI 不消费审批流,刻意不挂。
|
|
201
|
+
- `/vim` `/connect` `/hooks` `/memory` 为 CC 同名占位:对应能力在 DSH 侧无等价
|
|
202
|
+
机制,命令会给出明确说明而非静默。
|
|
203
|
+
|
|
204
|
+
完整已知限制与安全边界见[架构与限制](docs/architecture.md)。
|
|
205
|
+
|
|
206
|
+
## 开发
|
|
207
|
+
|
|
208
|
+
CI 使用 Node 24 与 pnpm 11;包声明支持 Node `^22.19 || >=24`。
|
|
209
|
+
|
|
210
|
+
```sh
|
|
211
|
+
pnpm install --frozen-lockfile
|
|
212
|
+
pnpm build
|
|
213
|
+
pnpm smoke
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
`pnpm build` 会把 `src/` 编译到已提交的 `lib/types/`。修改源码时必须同步生成产物;
|
|
217
|
+
渲染、问卷和工具卡还需运行对应回归脚本。
|
|
218
|
+
|
|
219
|
+
## 权限与安全边界
|
|
220
|
+
|
|
221
|
+
`dsh-TUI` 不实现独立沙箱,而是使用当前 DSH profile 的文件、Shell、sandbox 与
|
|
222
|
+
approval 策略。仓库提供的 profile 在非 Windows 平台默认采用工作区约束与审批;
|
|
223
|
+
Windows 当前没有对应的沙箱后端,组合会退回到 `danger-full-access` 且不弹审批。
|
|
224
|
+
在包含敏感凭证或不可信仓库的环境中启动前,请先检查 profile 配置。
|
|
225
|
+
|
|
226
|
+
详见[权限边界与已知限制](docs/architecture.md#权限与安全边界)。
|
|
227
|
+
|
|
228
|
+
### 友情链接
|
|
229
|
+
|
|
230
|
+
朋友们开发的[社区、相关项目与周边工具](docs/links.md)
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
## License
|
|
234
|
+
|
|
235
|
+
[MIT](LICENSE)
|
package/bin/dsh-tui.js
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* dsh-tui — dsh-tui profile 的一键直达启动器。
|
|
4
|
+
*
|
|
5
|
+
* 全局安装 @deepseek-harness-tui/dsh-tui 后获得 `dsh-tui` 命令,免去手工
|
|
6
|
+
* 输入 `dsh --profile dsh-tui`:
|
|
7
|
+
*
|
|
8
|
+
* 1. 检测 dsh CLI(缺失时提示安装 @deepseek-ai/dsh);
|
|
9
|
+
* 2. 检测 $DSH_HOME/profiles/dsh-tui 是否已初始化,未初始化则自动执行
|
|
10
|
+
* `dsh plugin --profile dsh-tui add @deepseek-harness-tui/dsh-tui@<本包版本>`
|
|
11
|
+
* 自举——版本号与本包对齐,避免 pnpm store 缓存带来的旧版漂移;
|
|
12
|
+
* 3. 透传全部参数启动 `dsh --profile dsh-tui`。
|
|
13
|
+
*
|
|
14
|
+
* `--resume` 由本启动器拦截:读取 TUI 保留的兼容路径 ~/.dsh-cc/resume.txt,
|
|
15
|
+
* 以 DSH_CC_RESUME_SESSION 环境变量喂回(见 src/sessionHistory.ts 的
|
|
16
|
+
* 启动器契约),该 flag 本身不再传给 dsh。
|
|
17
|
+
*/
|
|
18
|
+
import { spawn, spawnSync } from 'node:child_process'
|
|
19
|
+
import { existsSync, readFileSync } from 'node:fs'
|
|
20
|
+
import { homedir } from 'node:os'
|
|
21
|
+
import { join } from 'node:path'
|
|
22
|
+
import { fileURLToPath } from 'node:url'
|
|
23
|
+
|
|
24
|
+
const here = fileURLToPath(new URL('.', import.meta.url))
|
|
25
|
+
const ownVersion = JSON.parse(readFileSync(join(here, '..', 'package.json'), 'utf8')).version
|
|
26
|
+
const PACKAGE = '@deepseek-harness-tui/dsh-tui'
|
|
27
|
+
const PROFILE = 'dsh-tui'
|
|
28
|
+
|
|
29
|
+
// React 开发构建会把每次渲染的 performance.measure() 堆进无界缓冲区导致
|
|
30
|
+
// 长会话 OOM——与仓库根 dsh-tui.cmd 保持一致,强制 production。
|
|
31
|
+
process.env.NODE_ENV ??= 'production'
|
|
32
|
+
|
|
33
|
+
const isWin = process.platform === 'win32'
|
|
34
|
+
// Windows 上 .cmd shim 必须经 shell 启动(Node ≥18.20.2 的安全限制);
|
|
35
|
+
// 其余平台直接 spawn 无后缀的 dsh。
|
|
36
|
+
const shellOpt = isWin ? { shell: true } : {}
|
|
37
|
+
|
|
38
|
+
// --- 1. dsh CLI 预检 ---------------------------------------------------------
|
|
39
|
+
const probe = spawnSync('dsh', ['--version'], { stdio: 'pipe', ...shellOpt })
|
|
40
|
+
if (probe.error || probe.status !== 0) {
|
|
41
|
+
console.error('[dsh-tui] 未检测到 dsh CLI。请先安装官方客户端:')
|
|
42
|
+
console.error(' npm install -g @deepseek-ai/dsh')
|
|
43
|
+
process.exit(1)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// --- 2. profile 自举 ----------------------------------------------------------
|
|
47
|
+
const dshHome = process.env.DSH_HOME || join(homedir(), '.dsh')
|
|
48
|
+
const profileDir = join(dshHome, 'profiles', PROFILE)
|
|
49
|
+
if (!existsSync(join(profileDir, 'node_modules', '@deepseek-harness-tui', 'dsh-tui'))) {
|
|
50
|
+
const pnpmProbe = spawnSync('pnpm', ['--version'], { stdio: 'pipe', ...shellOpt })
|
|
51
|
+
if (pnpmProbe.error || pnpmProbe.status !== 0) {
|
|
52
|
+
console.error('[dsh-tui] 首次安装需要 pnpm(dsh plugin 会把安装转发给它):')
|
|
53
|
+
console.error(' npm install -g pnpm (或启用 corepack:corepack enable pnpm)')
|
|
54
|
+
process.exit(1)
|
|
55
|
+
}
|
|
56
|
+
console.log(`[dsh-tui] 首次运行,正在初始化 ${PROFILE} profile(${PACKAGE}@${ownVersion})…`)
|
|
57
|
+
const add = spawnSync('dsh', ['plugin', '--profile', PROFILE, 'add', `${PACKAGE}@${ownVersion}`], { stdio: 'inherit', ...shellOpt })
|
|
58
|
+
if (add.status !== 0) {
|
|
59
|
+
console.error('[dsh-tui] 插件安装失败。可稍后手工重试:')
|
|
60
|
+
console.error(` dsh plugin --profile ${PROFILE} add ${PACKAGE}@${ownVersion}`)
|
|
61
|
+
process.exit(add.status ?? 1)
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
// --- 3. --resume 拦截 ---------------------------------------------------------
|
|
66
|
+
const args = []
|
|
67
|
+
for (const a of process.argv.slice(2)) {
|
|
68
|
+
if (a === '--resume') {
|
|
69
|
+
try {
|
|
70
|
+
process.env.DSH_CC_RESUME_SESSION = readFileSync(join(homedir(), '.dsh-cc', 'resume.txt'), 'utf8').trim()
|
|
71
|
+
} catch {
|
|
72
|
+
// 没有历史会话可恢复——静默忽略,正常冷启动。
|
|
73
|
+
}
|
|
74
|
+
} else {
|
|
75
|
+
args.push(a)
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// --- 4. 启动 ------------------------------------------------------------------
|
|
80
|
+
const child = spawn('dsh', ['--profile', PROFILE, ...args], {
|
|
81
|
+
stdio: 'inherit',
|
|
82
|
+
env: process.env,
|
|
83
|
+
...shellOpt,
|
|
84
|
+
})
|
|
85
|
+
child.on('error', (err) => {
|
|
86
|
+
console.error(`[dsh-tui] 启动失败:${err.message}`)
|
|
87
|
+
process.exit(1)
|
|
88
|
+
})
|
|
89
|
+
child.on('exit', (code, signal) => {
|
|
90
|
+
if (signal) {
|
|
91
|
+
process.kill(process.pid, signal)
|
|
92
|
+
} else {
|
|
93
|
+
process.exit(code ?? 0)
|
|
94
|
+
}
|
|
95
|
+
})
|
package/cordis.patch.yml
ADDED
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
# The dsh-tui bundle patch: the interactive terminal front door over the
|
|
2
|
+
# dsh-base layer. Applied after dsh-base's insert; rows here override base
|
|
3
|
+
# rows by id, with the profile's own cordis.patch.yml and any --patch
|
|
4
|
+
# overlays still to come.
|
|
5
|
+
#
|
|
6
|
+
# A patch replaces the targeted row's whole `config`, so each row below
|
|
7
|
+
# restates every key it owns (see the dsh-base patch for the shared
|
|
8
|
+
# defaults). The dsh-base core rows that need no dsh-tui value — tools,
|
|
9
|
+
# sandbox/approval policy, skills, goal, plan mode, workspace context,
|
|
10
|
+
# telemetry — are inherited unchanged.
|
|
11
|
+
|
|
12
|
+
# ── surface-specific values over the dsh-base layer ─────────────────────────
|
|
13
|
+
|
|
14
|
+
# The dsh-tui deployment persona; CC_TUI_PERSONA overrides the coding-agent
|
|
15
|
+
# default (the base persona is empty).
|
|
16
|
+
- id: system-prompt
|
|
17
|
+
config:
|
|
18
|
+
persona: !!js process.env.CC_TUI_PERSONA ?? 'You are a coding agent.'
|
|
19
|
+
|
|
20
|
+
# The native DeepSeek adapter, pinned to the harness defaults: full thinking
|
|
21
|
+
# at max effort, key and base URL from the launching environment. The base
|
|
22
|
+
# entry defers both to the `llm-deepseek:` settings section; the settings
|
|
23
|
+
# document still overrides these entries per request when it carries one.
|
|
24
|
+
# rc.6 schema key is `apiKeyEnv` (credential-ref env var NAME, default
|
|
25
|
+
# DEEPSEEK_API_KEY); the old snapshot's `apiKey` key no longer exists.
|
|
26
|
+
- id: llm-deepseek
|
|
27
|
+
config:
|
|
28
|
+
apiKeyEnv: 'DEEPSEEK_API_KEY'
|
|
29
|
+
baseURL: !!js process.env.DEEPSEEK_BASE_URL
|
|
30
|
+
thinking: enabled
|
|
31
|
+
reasoningEffort: max
|
|
32
|
+
|
|
33
|
+
# The TUI creates (or resumes) its agent at runtime through the agent
|
|
34
|
+
# factory; no declarative agents are started at boot, and the configured
|
|
35
|
+
# agent list stays the base's empty default.
|
|
36
|
+
- id: agent-loop
|
|
37
|
+
config:
|
|
38
|
+
agents: []
|
|
39
|
+
|
|
40
|
+
# ── agent presets (issue #8) ────────────────────────────────────────────────
|
|
41
|
+
#
|
|
42
|
+
# The model-facing plugin set moves INTO the agent-presets roster: every
|
|
43
|
+
# session composes its tools/prompt sections from one preset directory
|
|
44
|
+
# (standard/code/minimal/cordis) instead of the host rows below. The dsh CLI's
|
|
45
|
+
# profile-boot sees this composition's `agent-presets` row and overlays the
|
|
46
|
+
# shipped `config/agent-presets/` root onto it automatically, so the row here
|
|
47
|
+
# carries no roots; `$DSH_HOME/.agent-presets` (user-authored presets) is
|
|
48
|
+
# appended by the roster itself (`includeUserRoot` default). Mirroring the
|
|
49
|
+
# official dsh-web-app patch: every dsh-base row a preset now owns is
|
|
50
|
+
# disabled here, so a minimal agent does not leak host-layer tools (an agent's
|
|
51
|
+
# registry view resolves agent → preset → global).
|
|
52
|
+
|
|
53
|
+
- id: agent-instructions
|
|
54
|
+
disabled: true
|
|
55
|
+
|
|
56
|
+
- id: command-compact
|
|
57
|
+
disabled: true
|
|
58
|
+
|
|
59
|
+
# compaction lives in the preset's own isolate realm (standard/code/cordis
|
|
60
|
+
# carry `compaction-basic` with package defaults; minimal has none). The
|
|
61
|
+
# CC_TUI_COMPACT_RATIO/CC_TUI_COMPACT_RETAIN tunables retired with this host
|
|
62
|
+
# row — preset compositions own their compaction config.
|
|
63
|
+
- id: compaction-basic
|
|
64
|
+
disabled: true
|
|
65
|
+
|
|
66
|
+
- id: plan-mode
|
|
67
|
+
disabled: true
|
|
68
|
+
|
|
69
|
+
- id: skill-filesystem
|
|
70
|
+
disabled: true
|
|
71
|
+
|
|
72
|
+
- id: tool-bash
|
|
73
|
+
disabled: true
|
|
74
|
+
|
|
75
|
+
- id: tool-fs
|
|
76
|
+
disabled: true
|
|
77
|
+
|
|
78
|
+
- id: tool-fs-search
|
|
79
|
+
disabled: true
|
|
80
|
+
|
|
81
|
+
- id: tool-goal
|
|
82
|
+
disabled: true
|
|
83
|
+
|
|
84
|
+
- id: tool-jobs
|
|
85
|
+
disabled: true
|
|
86
|
+
|
|
87
|
+
- id: tool-pwsh
|
|
88
|
+
disabled: true
|
|
89
|
+
|
|
90
|
+
- id: tool-ralph
|
|
91
|
+
disabled: true
|
|
92
|
+
|
|
93
|
+
- id: tool-result-pruner
|
|
94
|
+
disabled: true
|
|
95
|
+
|
|
96
|
+
- id: tool-skill
|
|
97
|
+
disabled: true
|
|
98
|
+
|
|
99
|
+
- id: tool-str-replace-editor
|
|
100
|
+
disabled: true
|
|
101
|
+
|
|
102
|
+
# Delegation tools (subagent spawn/fork, controls, workflows) are preset rows
|
|
103
|
+
# now; the preset's `delegation` group re-adds them with package defaults, so
|
|
104
|
+
# the former TUI's depth-1 cap no longer applies.
|
|
105
|
+
- id: tool-subagent
|
|
106
|
+
disabled: true
|
|
107
|
+
|
|
108
|
+
- id: tool-subagent-control
|
|
109
|
+
disabled: true
|
|
110
|
+
|
|
111
|
+
- id: tool-subagent-fork
|
|
112
|
+
disabled: true
|
|
113
|
+
|
|
114
|
+
- id: tool-subagent-list-agents
|
|
115
|
+
disabled: true
|
|
116
|
+
|
|
117
|
+
- id: tool-todo
|
|
118
|
+
disabled: true
|
|
119
|
+
|
|
120
|
+
- id: tool-web
|
|
121
|
+
disabled: true
|
|
122
|
+
|
|
123
|
+
- id: tool-workflow
|
|
124
|
+
disabled: true
|
|
125
|
+
|
|
126
|
+
- id: workflow-worker-thread
|
|
127
|
+
disabled: true
|
|
128
|
+
|
|
129
|
+
# Windows has no sandbox confinement backend yet (sandbox-local's win32
|
|
130
|
+
# chain is empty); use danger-full-access on Windows so bash commands can
|
|
131
|
+
# run. Other platforms keep the base workspace-write default.
|
|
132
|
+
- id: sandbox-policy
|
|
133
|
+
config:
|
|
134
|
+
mode: !!js "process.platform === 'win32' ? 'danger-full-access' : (process.env.DSH_PERMISSION_MODE ?? 'workspace-write')"
|
|
135
|
+
workspaceRoot: !!js process.cwd()
|
|
136
|
+
|
|
137
|
+
# On Windows, skip approval prompts (no sandbox = the user's terminal trust
|
|
138
|
+
# model, matching every other terminal coding agent).
|
|
139
|
+
- id: approval
|
|
140
|
+
config:
|
|
141
|
+
policy: !!js "process.platform === 'win32' ? 'never' : ((process.env.DSH_PERMISSION_MODE ?? 'workspace-write') === 'danger-full-access' ? 'never' : 'ask')"
|
|
142
|
+
|
|
143
|
+
# Sessions live in the shared JSONL store (~/.dsh/sessions) — the same
|
|
144
|
+
# backend dsh web writes — so /resume here and the web session list see each
|
|
145
|
+
# other (#24). The row itself comes from the dsh-base layer; this override
|
|
146
|
+
# only re-points the root when DSH_CC_SESSION_ROOT is set (test isolation).
|
|
147
|
+
- id: session-persistence-jsonl
|
|
148
|
+
config:
|
|
149
|
+
root: !!js process.env.DSH_CC_SESSION_ROOT ?? dshHomePath('sessions')
|
|
150
|
+
|
|
151
|
+
# ── dsh-tui rows ────────────────────────────────────────────────────────────
|
|
152
|
+
|
|
153
|
+
# The `user-interaction` service row comes from the dsh-base bundle layer
|
|
154
|
+
# (mounted before this layer); do not insert it again — the include patch
|
|
155
|
+
# semantics would create a duplicate row. dsh-tui defensively creates the
|
|
156
|
+
# service on its own context when no composition provides it (bare
|
|
157
|
+
# `dsh --config cordis.yml` boots), then mounts the model-facing
|
|
158
|
+
# ask_user_question tool and registers the questionnaire provider on
|
|
159
|
+
# `ctx.userQuestions`.
|
|
160
|
+
|
|
161
|
+
- insert:
|
|
162
|
+
# The agent-preset roster (issue #8): `ctx.agentPresets`, the service the
|
|
163
|
+
# TUI composes every session's model-facing world from. No `roots` here —
|
|
164
|
+
# the dsh CLI's profile-boot overlays its shipped `config/agent-presets/`
|
|
165
|
+
# directory (standard/code/minimal/cordis, system trust) onto this row
|
|
166
|
+
# whenever a composition carries it, and the roster itself appends the
|
|
167
|
+
# user-authored `$DSH_HOME/.agent-presets` root. A boot that never reached
|
|
168
|
+
# profile-boot (bare `dsh --config cordis.yml`) leaves the roster empty;
|
|
169
|
+
# the TUI then keeps its pre-presets behavior (see presets.ts).
|
|
170
|
+
- id: agent-presets
|
|
171
|
+
name: '@deepseek-ai/dsh-agent-presets'
|
|
172
|
+
config:
|
|
173
|
+
default: standard
|
|
174
|
+
|
|
175
|
+
# Host-plane services the `cordis` preset's plugin-experimentation tool
|
|
176
|
+
# waits on (dynamicCordisRunner/cordisInspect); dsh-base carries no such
|
|
177
|
+
# row — the official web app inserts it the same way.
|
|
178
|
+
- id: cordis-host-runner
|
|
179
|
+
name: '@deepseek-ai/dsh-cordis-host-runner'
|
|
180
|
+
|
|
181
|
+
# The interactive front door. The plugin creates/resumes its agent at
|
|
182
|
+
# runtime, seeds the startup status line, and disposes the whole app tree
|
|
183
|
+
# (exiting the process) when the TUI unmounts. `dsh-tui.cmd --resume`
|
|
184
|
+
# feeds the session id through DSH_CC_RESUME_SESSION.
|
|
185
|
+
- id: dsh-tui
|
|
186
|
+
name: '@deepseek-harness-tui/dsh-tui'
|
|
187
|
+
config:
|
|
188
|
+
provider: deepseek-official
|
|
189
|
+
# Alt-screen fullscreen(CC 同款):应用内鼠标选区(选择即复制, OSC 52 +
|
|
190
|
+
# wl-copy/xclip/xsel 兜底)、滚轮滚动、双击选词/三击选行。默认关闭——
|
|
191
|
+
# inline 模式下由终端原生选择/复制/scrollback 接管;想用 fullscreen 在
|
|
192
|
+
# profile 用户层 cordis.patch.yml 同 id 覆盖整行 config(fullscreen: true)。
|
|
193
|
+
fullscreen: false
|
|
194
|
+
# 每个请求实际生效的推理强度,按当前路由的 adapter 档位校验
|
|
195
|
+
# (deepseek: off/high/max)——不在档位表里的值被忽略,回落 adapter
|
|
196
|
+
# 默认值。优先于持久化的 Shift+Tab 选择(~/.dsh-cc/effort.json);
|
|
197
|
+
# 同时作为顶栏/状态栏的启动显示,首个请求头回来后以实际值为准。
|
|
198
|
+
effort: max
|
|
199
|
+
# Static preset choice (CC_TUI_PRESET overrides): wins over the
|
|
200
|
+
# persisted `/preset` preference (~/.dsh-cc/agent-preset.json), which
|
|
201
|
+
# wins over the roster default (standard).
|
|
202
|
+
preset: !!js process.env.CC_TUI_PRESET ?? undefined
|
|
203
|
+
sessionId: !!js process.env.DSH_CC_RESUME_SESSION ?? undefined
|
|
204
|
+
|
|
205
|
+
# Live working-line data source (thinking copy / running tool / turn
|
|
206
|
+
# summary). Mounted through @deepseek-harness-tui/dsh-tui's own
|
|
207
|
+
# `./working-activity` re-export, NOT the bare `dsh-working-activity`
|
|
208
|
+
# name: the dsh Loader resolves row names from the profile directory,
|
|
209
|
+
# and pnpm's isolated node_modules layout never links a transitive
|
|
210
|
+
# dependency into the profile root (npm's flat layout hid this), so the
|
|
211
|
+
# bare name died with ERR_MODULE_NOT_FOUND and disposed the whole app at
|
|
212
|
+
# boot (#60).
|
|
213
|
+
# publishIntervalMs 500 keeps the status-line timers ticking smoothly
|
|
214
|
+
# (default 2000ms).
|
|
215
|
+
- id: working-activity
|
|
216
|
+
name: '@deepseek-harness-tui/dsh-tui/working-activity'
|
|
217
|
+
config:
|
|
218
|
+
publishIntervalMs: 500
|