@deepseek-harness-tui/dsh-tui 0.14.1 → 0.16.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/README.md +163 -17
- package/bin/dsh-tui.js +200 -34
- package/cordis.patch.yml +16 -52
- package/cordis.yml +6 -2
- package/guide/dsh-tui-guide/claude-backend.en.md +44 -7
- package/guide/dsh-tui-guide/claude-backend.md +28 -6
- package/guide/dsh-tui-guide/codex-backend.en.md +47 -10
- package/guide/dsh-tui-guide/codex-backend.md +26 -4
- package/guide/dsh-tui-guide/configuration.en.md +168 -18
- package/guide/dsh-tui-guide/configuration.md +144 -16
- package/guide/dsh-tui-guide/getting-started.en.md +15 -0
- package/guide/dsh-tui-guide/getting-started.md +15 -0
- package/guide/dsh-tui-guide/interaction.en.md +64 -24
- package/guide/dsh-tui-guide/interaction.md +49 -19
- package/guide/dsh-tui-guide/plugins.en.md +97 -3
- package/guide/dsh-tui-guide/plugins.md +55 -2
- package/guide/dsh-tui-guide/themes.en.md +23 -14
- package/guide/dsh-tui-guide/themes.md +19 -12
- package/guide/dsh-tui-guide/user-guide.en.md +53 -21
- package/guide/dsh-tui-guide/user-guide.md +43 -22
- package/lib/settings.json +103 -9
- package/lib/types/adapter/channel/projection.d.ts.map +1 -1
- package/lib/types/adapter/channel/projection.js +1 -0
- package/lib/types/adapter/channel/ui-policy.d.ts +1 -1
- package/lib/types/adapter/channel/ui-policy.d.ts.map +1 -1
- package/lib/types/adapter/channel/ui-policy.js +4 -0
- package/lib/types/adapter/channel/ui.d.ts +2 -0
- package/lib/types/adapter/channel/ui.d.ts.map +1 -1
- package/lib/types/adapter/channel/ui.js +6 -2
- package/lib/types/adapter/kernel/runtime.d.ts.map +1 -1
- package/lib/types/adapter/kernel/runtime.js +2 -0
- package/lib/types/adapter/ports/channel-catalog.d.ts +5 -1
- package/lib/types/adapter/ports/channel-catalog.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-settings.d.ts +14 -3
- package/lib/types/adapter/ports/channel-settings.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-ui.d.ts +56 -12
- package/lib/types/adapter/ports/channel-ui.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-view.d.ts +68 -0
- package/lib/types/adapter/ports/channel-view.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel.d.ts +2 -0
- package/lib/types/adapter/ports/channel.d.ts.map +1 -1
- package/lib/types/adapter/spec/backend-capabilities.d.ts +22 -0
- package/lib/types/adapter/spec/backend-capabilities.d.ts.map +1 -0
- package/lib/types/adapter/spec/backend-capabilities.js +49 -0
- package/lib/types/adapter/spec/protocol-constants.d.ts.map +1 -1
- package/lib/types/adapter/spec/protocol-constants.js +10 -3
- package/lib/types/adapter/spec/tui-contributions.d.ts +3 -0
- package/lib/types/adapter/spec/tui-contributions.d.ts.map +1 -1
- package/lib/types/adapter/spec/tui-contributions.js +7 -0
- package/lib/types/adapter/standard/registry.d.ts +6 -0
- package/lib/types/adapter/standard/registry.d.ts.map +1 -1
- package/lib/types/adapter/standard/registry.js +65 -15
- package/lib/types/adapter/standard/tui-extension.d.ts.map +1 -1
- package/lib/types/adapter/standard/tui-extension.js +7 -1
- package/lib/types/adapter/standard/types.d.ts +10 -1
- package/lib/types/adapter/standard/types.d.ts.map +1 -1
- package/lib/types/adapter/upstream/host-descriptor-driver.d.ts.map +1 -1
- package/lib/types/adapter/upstream/host-descriptor-driver.js +52 -0
- package/lib/types/agent/backend-manifest.d.ts +152 -0
- package/lib/types/agent/backend-manifest.d.ts.map +1 -0
- package/lib/types/agent/backend-manifest.js +14 -0
- package/lib/types/agent/backend.d.ts +71 -5
- package/lib/types/agent/backend.d.ts.map +1 -1
- package/lib/types/agent/capabilities.d.ts +6 -0
- package/lib/types/agent/capabilities.d.ts.map +1 -1
- package/lib/types/agent/events.d.ts +3 -2
- package/lib/types/agent/events.d.ts.map +1 -1
- package/lib/types/agent/index.d.ts +2 -0
- package/lib/types/agent/index.d.ts.map +1 -1
- package/lib/types/agent/refs.d.ts +11 -1
- package/lib/types/agent/refs.d.ts.map +1 -1
- package/lib/types/agent/starting-session.d.ts +4 -0
- package/lib/types/agent/starting-session.d.ts.map +1 -0
- package/lib/types/agent/starting-session.js +19 -0
- package/lib/types/backends/claude/activity.d.ts +1 -1
- package/lib/types/backends/claude/activity.d.ts.map +1 -1
- package/lib/types/backends/claude/activity.js +5 -5
- package/lib/types/backends/claude/auth.d.ts.map +1 -1
- package/lib/types/backends/claude/auth.js +10 -3
- package/lib/types/backends/claude/backend.d.ts.map +1 -1
- package/lib/types/backends/claude/backend.js +103 -29
- package/lib/types/backends/claude/catalog.d.ts +2 -1
- package/lib/types/backends/claude/catalog.d.ts.map +1 -1
- package/lib/types/backends/claude/catalog.js +15 -5
- package/lib/types/backends/claude/channels.d.ts +5 -3
- package/lib/types/backends/claude/channels.d.ts.map +1 -1
- package/lib/types/backends/claude/channels.js +5 -4
- package/lib/types/backends/claude/contract.d.ts +4 -0
- package/lib/types/backends/claude/contract.d.ts.map +1 -1
- package/lib/types/backends/claude/contract.js +4 -0
- package/lib/types/backends/claude/controls.d.ts +4 -0
- package/lib/types/backends/claude/controls.d.ts.map +1 -1
- package/lib/types/backends/claude/controls.js +34 -42
- package/lib/types/backends/claude/dialogs.d.ts +8 -2
- package/lib/types/backends/claude/dialogs.d.ts.map +1 -1
- package/lib/types/backends/claude/dialogs.js +24 -16
- package/lib/types/backends/claude/images.d.ts +1 -1
- package/lib/types/backends/claude/images.d.ts.map +1 -1
- package/lib/types/backends/claude/images.js +7 -7
- package/lib/types/backends/claude/manifest.d.ts +21 -0
- package/lib/types/backends/claude/manifest.d.ts.map +1 -0
- package/lib/types/backends/claude/manifest.js +29 -0
- package/lib/types/backends/claude/older-history.js +2 -2
- package/lib/types/backends/claude/permissions.js +11 -11
- package/lib/types/backends/claude/prefs.d.ts +4 -2
- package/lib/types/backends/claude/prefs.d.ts.map +1 -1
- package/lib/types/backends/claude/prefs.js +4 -3
- package/lib/types/backends/claude/process.d.ts +16 -4
- package/lib/types/backends/claude/process.d.ts.map +1 -1
- package/lib/types/backends/claude/process.js +100 -37
- package/lib/types/backends/claude/send-message.d.ts +1 -1
- package/lib/types/backends/claude/send-message.d.ts.map +1 -1
- package/lib/types/backends/claude/session/auth.js +22 -22
- package/lib/types/backends/claude/session/channels.d.ts +4 -0
- package/lib/types/backends/claude/session/channels.d.ts.map +1 -1
- package/lib/types/backends/claude/session/channels.js +5 -3
- package/lib/types/backends/claude/session/lifecycle.d.ts.map +1 -1
- package/lib/types/backends/claude/session/lifecycle.js +31 -23
- package/lib/types/backends/claude/session/store.js +8 -8
- package/lib/types/backends/claude/session/subagents.js +2 -2
- package/lib/types/backends/claude/session/types.d.ts +7 -0
- package/lib/types/backends/claude/session/types.d.ts.map +1 -1
- package/lib/types/backends/claude/side-query.js +3 -3
- package/lib/types/backends/claude/task-output.js +5 -5
- package/lib/types/backends/claude/text.d.ts +778 -0
- package/lib/types/backends/claude/text.d.ts.map +1 -0
- package/lib/types/backends/claude/text.js +298 -0
- package/lib/types/backends/claude/transcript-file.d.ts +1 -1
- package/lib/types/backends/claude/transcript-file.d.ts.map +1 -1
- package/lib/types/backends/claude/transcript-file.js +4 -4
- package/lib/types/backends/claude/translate/attempts.js +2 -2
- package/lib/types/backends/claude/translate/core.js +3 -3
- package/lib/types/backends/claude/translate/messages.js +4 -4
- package/lib/types/backends/claude/translate/system.js +14 -14
- package/lib/types/backends/claude/translate/tasks.js +2 -2
- package/lib/types/backends/claude/translate/types.d.ts +1 -1
- package/lib/types/backends/claude/translate/types.d.ts.map +1 -1
- package/lib/types/backends/codex/auth/external-tokens.js +16 -16
- package/lib/types/backends/codex/auth/status.js +14 -14
- package/lib/types/backends/codex/backend.d.ts +4 -19
- package/lib/types/backends/codex/backend.d.ts.map +1 -1
- package/lib/types/backends/codex/backend.js +118 -25
- package/lib/types/backends/codex/catalog.d.ts +2 -1
- package/lib/types/backends/codex/catalog.d.ts.map +1 -1
- package/lib/types/backends/codex/catalog.js +63 -18
- package/lib/types/backends/codex/channels.d.ts +6 -3
- package/lib/types/backends/codex/channels.d.ts.map +1 -1
- package/lib/types/backends/codex/channels.js +15 -13
- package/lib/types/backends/codex/contract.d.ts +3 -0
- package/lib/types/backends/codex/contract.d.ts.map +1 -1
- package/lib/types/backends/codex/contract.js +3 -0
- package/lib/types/backends/codex/detect.d.ts.map +1 -1
- package/lib/types/backends/codex/detect.js +9 -6
- package/lib/types/backends/codex/manifest.d.ts +30 -0
- package/lib/types/backends/codex/manifest.d.ts.map +1 -0
- package/lib/types/backends/codex/manifest.js +23 -0
- package/lib/types/backends/codex/prefs.d.ts +4 -2
- package/lib/types/backends/codex/prefs.d.ts.map +1 -1
- package/lib/types/backends/codex/prefs.js +4 -3
- package/lib/types/backends/codex/rpc/hub.js +2 -2
- package/lib/types/backends/codex/session/activity.d.ts +1 -1
- package/lib/types/backends/codex/session/activity.d.ts.map +1 -1
- package/lib/types/backends/codex/session/activity.js +13 -13
- package/lib/types/backends/codex/session/approvals.js +30 -30
- package/lib/types/backends/codex/session/async-questions.d.ts +17 -0
- package/lib/types/backends/codex/session/async-questions.d.ts.map +1 -0
- package/lib/types/backends/codex/session/async-questions.js +89 -0
- package/lib/types/backends/codex/session/commands.d.ts +8 -2
- package/lib/types/backends/codex/session/commands.d.ts.map +1 -1
- package/lib/types/backends/codex/session/commands.js +71 -23
- package/lib/types/backends/codex/session/controls.d.ts +1 -1
- package/lib/types/backends/codex/session/controls.d.ts.map +1 -1
- package/lib/types/backends/codex/session/controls.js +21 -16
- package/lib/types/backends/codex/session/goals.d.ts.map +1 -1
- package/lib/types/backends/codex/session/goals.js +3 -3
- package/lib/types/backends/codex/session/history.js +2 -2
- package/lib/types/backends/codex/session/images.js +8 -8
- package/lib/types/backends/codex/session/input.d.ts +6 -2
- package/lib/types/backends/codex/session/input.d.ts.map +1 -1
- package/lib/types/backends/codex/session/input.js +55 -13
- package/lib/types/backends/codex/session/plan-review.js +6 -6
- package/lib/types/backends/codex/session/session.d.ts.map +1 -1
- package/lib/types/backends/codex/session/session.js +100 -42
- package/lib/types/backends/codex/session/side-query.d.ts.map +1 -1
- package/lib/types/backends/codex/session/side-query.js +27 -9
- package/lib/types/backends/codex/session/state.d.ts +6 -1
- package/lib/types/backends/codex/session/state.d.ts.map +1 -1
- package/lib/types/backends/codex/session/subagents.js +5 -5
- package/lib/types/backends/codex/session/tasks.js +4 -4
- package/lib/types/backends/codex/text.d.ts +933 -0
- package/lib/types/backends/codex/text.d.ts.map +1 -0
- package/lib/types/backends/codex/text.js +313 -0
- package/lib/types/backends/codex/translate/items.d.ts.map +1 -1
- package/lib/types/backends/codex/translate/items.js +7 -5
- package/lib/types/backends/codex/translate/live.d.ts.map +1 -1
- package/lib/types/backends/codex/translate/live.js +11 -8
- package/lib/types/backends/codex/translate/notices.js +10 -10
- package/lib/types/backends/codex/translate/question-reply.d.ts +11 -0
- package/lib/types/backends/codex/translate/question-reply.d.ts.map +1 -0
- package/lib/types/backends/codex/translate/question-reply.js +53 -0
- package/lib/types/backends/shared/channel-slug.d.ts +4 -0
- package/lib/types/backends/shared/channel-slug.d.ts.map +1 -0
- package/lib/types/backends/shared/channel-slug.js +25 -0
- package/lib/types/backends/shared/channel-tokens.d.ts.map +1 -1
- package/lib/types/backends/shared/channel-tokens.js +30 -23
- package/lib/types/{channel → backends/shared}/elicitation.d.ts +78 -21
- package/lib/types/backends/shared/elicitation.d.ts.map +1 -0
- package/lib/types/{channel → backends/shared}/elicitation.js +64 -66
- package/lib/types/backends/shared/image-size.d.ts +33 -0
- package/lib/types/backends/shared/image-size.d.ts.map +1 -0
- package/lib/types/backends/shared/image-size.js +134 -0
- package/lib/types/{utils → backends/shared}/jsonl.d.ts +5 -1
- package/lib/types/backends/shared/jsonl.d.ts.map +1 -0
- package/lib/types/{utils → backends/shared}/jsonl.js +5 -1
- package/lib/types/backends/shared/localized-text.d.ts +30 -0
- package/lib/types/backends/shared/localized-text.d.ts.map +1 -0
- package/lib/types/backends/shared/localized-text.js +24 -0
- package/lib/types/backends/shared/platform-text.d.ts +88 -0
- package/lib/types/backends/shared/platform-text.d.ts.map +1 -0
- package/lib/types/backends/shared/platform-text.js +33 -0
- package/lib/types/branding.d.ts +13 -0
- package/lib/types/branding.d.ts.map +1 -1
- package/lib/types/branding.js +18 -0
- package/lib/types/channel/channel-slug.d.ts +3 -1
- package/lib/types/channel/channel-slug.d.ts.map +1 -1
- package/lib/types/channel/channel-slug.js +3 -1
- package/lib/types/channel/projection.d.ts.map +1 -1
- package/lib/types/channel/projection.js +10 -0
- package/lib/types/channel/sanitize.d.ts +7 -0
- package/lib/types/channel/sanitize.d.ts.map +1 -1
- package/lib/types/channel/sanitize.js +9 -0
- package/lib/types/channel/usage.d.ts.map +1 -1
- package/lib/types/channel/usage.js +5 -0
- package/lib/types/commands.d.ts +15 -0
- package/lib/types/commands.d.ts.map +1 -1
- package/lib/types/commands.js +58 -10
- package/lib/types/components/AgentMessageComposer.d.ts.map +1 -1
- package/lib/types/components/AgentMessageComposer.js +3 -2
- package/lib/types/components/BtwPanel.d.ts.map +1 -1
- package/lib/types/components/BtwPanel.js +4 -2
- package/lib/types/components/Chat/JobCard.js +3 -3
- package/lib/types/components/CommandSuggestions.d.ts.map +1 -1
- package/lib/types/components/CommandSuggestions.js +24 -7
- package/lib/types/components/ContextBarView.d.ts +5 -1
- package/lib/types/components/ContextBarView.d.ts.map +1 -1
- package/lib/types/components/ContextBarView.js +6 -3
- package/lib/types/components/ExtensionDialog.d.ts.map +1 -1
- package/lib/types/components/ExtensionDialog.js +2 -3
- package/lib/types/components/GoalTodoPanel.d.ts.map +1 -1
- package/lib/types/components/GoalTodoPanel.js +14 -3
- package/lib/types/components/InlineMathParagraph.js +1 -1
- package/lib/types/components/KernelPicker.d.ts.map +1 -1
- package/lib/types/components/KernelPicker.js +1 -1
- package/lib/types/components/LogoV2.d.ts +4 -1
- package/lib/types/components/LogoV2.d.ts.map +1 -1
- package/lib/types/components/LogoV2.js +14 -9
- package/lib/types/components/MarkdownTable.d.ts.map +1 -1
- package/lib/types/components/MarkdownTable.js +4 -3
- package/lib/types/components/MessageList.d.ts.map +1 -1
- package/lib/types/components/MessageList.js +109 -15
- package/lib/types/components/ModelPicker.d.ts +24 -31
- package/lib/types/components/ModelPicker.d.ts.map +1 -1
- package/lib/types/components/ModelPicker.js +115 -40
- package/lib/types/components/PermissionsPicker.d.ts +10 -1
- package/lib/types/components/PermissionsPicker.d.ts.map +1 -1
- package/lib/types/components/PermissionsPicker.js +24 -16
- package/lib/types/components/PluginInstallPane.d.ts +21 -0
- package/lib/types/components/PluginInstallPane.d.ts.map +1 -0
- package/lib/types/components/PluginInstallPane.js +84 -0
- package/lib/types/components/PluginManagePane.d.ts +21 -0
- package/lib/types/components/PluginManagePane.d.ts.map +1 -0
- package/lib/types/components/PluginManagePane.js +69 -0
- package/lib/types/components/PromptEditor.d.ts +3 -3
- package/lib/types/components/PromptInput.d.ts +21 -3
- package/lib/types/components/PromptInput.d.ts.map +1 -1
- package/lib/types/components/PromptInput.js +65 -121
- package/lib/types/components/SdkInstallWizard.d.ts +3 -1
- package/lib/types/components/SdkInstallWizard.d.ts.map +1 -1
- package/lib/types/components/SdkInstallWizard.js +8 -1
- package/lib/types/components/SearchBox.d.ts +13 -15
- package/lib/types/components/SearchBox.d.ts.map +1 -1
- package/lib/types/components/SearchBox.js +58 -27
- package/lib/types/components/SubagentCard.d.ts +13 -1
- package/lib/types/components/SubagentCard.d.ts.map +1 -1
- package/lib/types/components/SubagentCard.js +27 -12
- package/lib/types/components/SubagentDashboard.d.ts +8 -1
- package/lib/types/components/SubagentDashboard.d.ts.map +1 -1
- package/lib/types/components/SubagentDashboard.js +58 -16
- package/lib/types/components/ThemePicker.d.ts +1 -1
- package/lib/types/components/ThemePicker.d.ts.map +1 -1
- package/lib/types/components/ThemePicker.js +14 -11
- package/lib/types/components/Tooltip.js +1 -1
- package/lib/types/components/WorkingSpinner.js +1 -1
- package/lib/types/components/WorkspaceFlowPicker.d.ts.map +1 -1
- package/lib/types/components/WorkspaceFlowPicker.js +4 -3
- package/lib/types/components/composerImageTokens.d.ts +24 -0
- package/lib/types/components/composerImageTokens.d.ts.map +1 -0
- package/lib/types/components/composerImageTokens.js +37 -0
- package/lib/types/components/design-system/InputCaret.d.ts +7 -0
- package/lib/types/components/design-system/InputCaret.d.ts.map +1 -0
- package/lib/types/components/design-system/InputCaret.js +9 -0
- package/lib/types/components/design-system/ListItem.d.ts +13 -2
- package/lib/types/components/design-system/ListItem.d.ts.map +1 -1
- package/lib/types/components/design-system/ListItem.js +11 -5
- package/lib/types/components/design-system/ThemeProvider.d.ts.map +1 -1
- package/lib/types/components/design-system/ThemeProvider.js +6 -8
- package/lib/types/components/kernelCatalog.d.ts +55 -11
- package/lib/types/components/kernelCatalog.d.ts.map +1 -1
- package/lib/types/components/kernelCatalog.js +42 -23
- package/lib/types/components/launchpadActions.d.ts +4 -0
- package/lib/types/components/launchpadActions.d.ts.map +1 -1
- package/lib/types/components/launchpadActions.js +5 -4
- package/lib/types/components/launchpadLayout.d.ts +14 -1
- package/lib/types/components/launchpadLayout.d.ts.map +1 -1
- package/lib/types/components/launchpadLayout.js +38 -19
- package/lib/types/components/messages/TeamMessageBubble.d.ts +20 -0
- package/lib/types/components/messages/TeamMessageBubble.d.ts.map +1 -0
- package/lib/types/components/messages/TeamMessageBubble.js +15 -0
- package/lib/types/components/messages/UserPromptMessage.d.ts +4 -3
- package/lib/types/components/messages/UserPromptMessage.d.ts.map +1 -1
- package/lib/types/components/messages/UserPromptMessage.js +4 -3
- package/lib/types/components/questions/AskUserQuestionPanel.d.ts.map +1 -1
- package/lib/types/components/questions/AskUserQuestionPanel.js +8 -3
- package/lib/types/components/questions/PlanReviewPanel.d.ts.map +1 -1
- package/lib/types/components/questions/PlanReviewPanel.js +4 -3
- package/lib/types/components/questions/ProviderModelEditor.d.ts.map +1 -1
- package/lib/types/components/questions/ProviderModelEditor.js +3 -13
- package/lib/types/components/sessions/ForeignSessionRow.d.ts +3 -1
- package/lib/types/components/sessions/ForeignSessionRow.d.ts.map +1 -1
- package/lib/types/components/sessions/ForeignSessionRow.js +5 -2
- package/lib/types/components/sessions/SessionListRow.d.ts +3 -1
- package/lib/types/components/sessions/SessionListRow.d.ts.map +1 -1
- package/lib/types/components/sessions/SessionListRow.js +5 -2
- package/lib/types/components/sidePanel/PanelBar.d.ts +1 -0
- package/lib/types/components/sidePanel/PanelBar.d.ts.map +1 -1
- package/lib/types/components/sidePanel/PanelBar.js +21 -17
- package/lib/types/components/sidePanel/PanelHost.d.ts.map +1 -1
- package/lib/types/components/sidePanel/PanelHost.js +5 -1
- package/lib/types/components/sidePanel/PanelStore.d.ts +8 -0
- package/lib/types/components/sidePanel/PanelStore.d.ts.map +1 -1
- package/lib/types/components/sidePanel/PanelStore.js +11 -0
- package/lib/types/components/sidePanel/SidePanelColumn.d.ts +1 -1
- package/lib/types/components/sidePanel/SidePanelColumn.d.ts.map +1 -1
- package/lib/types/components/sidePanel/SidePanelColumn.js +15 -2
- package/lib/types/components/sidePanel/SidePanelLayout.d.ts +6 -4
- package/lib/types/components/sidePanel/SidePanelLayout.d.ts.map +1 -1
- package/lib/types/components/sidePanel/SidePanelLayout.js +33 -7
- package/lib/types/components/sidePanel/SidePanelRuntimeContext.d.ts +7 -0
- package/lib/types/components/sidePanel/SidePanelRuntimeContext.d.ts.map +1 -1
- package/lib/types/components/sidePanel/SidePanelRuntimeContext.js +4 -0
- package/lib/types/components/sidePanel/btw/BtwComposer.d.ts +7 -2
- package/lib/types/components/sidePanel/btw/BtwComposer.d.ts.map +1 -1
- package/lib/types/components/sidePanel/btw/BtwComposer.js +28 -8
- package/lib/types/components/sidePanel/btw/BtwPanelAdapter.d.ts +2 -1
- package/lib/types/components/sidePanel/btw/BtwPanelAdapter.d.ts.map +1 -1
- package/lib/types/components/sidePanel/btw/BtwPanelAdapter.js +156 -21
- package/lib/types/components/sidePanel/btw/BtwThreadScene.d.ts +6 -2
- package/lib/types/components/sidePanel/btw/BtwThreadScene.d.ts.map +1 -1
- package/lib/types/components/sidePanel/btw/BtwThreadScene.js +64 -16
- package/lib/types/components/sidePanel/btw/BtwThreadView.d.ts +15 -5
- package/lib/types/components/sidePanel/btw/BtwThreadView.d.ts.map +1 -1
- package/lib/types/components/sidePanel/btw/BtwThreadView.js +101 -10
- package/lib/types/components/sidePanel/btw/threads.d.ts +18 -0
- package/lib/types/components/sidePanel/btw/threads.d.ts.map +1 -1
- package/lib/types/components/sidePanel/btw/threads.js +51 -0
- package/lib/types/components/sidePanel/builtinPanels.d.ts.map +1 -1
- package/lib/types/components/sidePanel/builtinPanels.js +5 -1
- package/lib/types/components/sidePanel/companion/CompanionPanel.js +2 -2
- package/lib/types/components/sidePanel/companion/SplashMascot.d.ts +5 -1
- package/lib/types/components/sidePanel/companion/SplashMascot.d.ts.map +1 -1
- package/lib/types/components/sidePanel/companion/SplashMascot.js +19 -4
- package/lib/types/components/sidePanel/companion/skins.d.ts +8 -0
- package/lib/types/components/sidePanel/companion/skins.d.ts.map +1 -1
- package/lib/types/components/sidePanel/companion/skins.js +57 -12
- package/lib/types/components/sidePanel/types.d.ts +7 -1
- package/lib/types/components/sidePanel/types.d.ts.map +1 -1
- package/lib/types/components/sidePanel/useSidePanel.d.ts +2 -0
- package/lib/types/components/sidePanel/useSidePanel.d.ts.map +1 -1
- package/lib/types/components/sidePanel/useSidePanel.js +11 -1
- package/lib/types/components/splashArtRows.d.ts +29 -0
- package/lib/types/components/splashArtRows.d.ts.map +1 -0
- package/lib/types/components/splashArtRows.js +31 -0
- package/lib/types/components/splashFonts.d.ts +24 -1
- package/lib/types/components/splashFonts.d.ts.map +1 -1
- package/lib/types/components/splashFonts.js +40 -5
- package/lib/types/components/teamRoster.d.ts +70 -0
- package/lib/types/components/teamRoster.d.ts.map +1 -0
- package/lib/types/components/teamRoster.js +78 -0
- package/lib/types/components/workspaces/HomeWorkspaceRow.d.ts +3 -1
- package/lib/types/components/workspaces/HomeWorkspaceRow.d.ts.map +1 -1
- package/lib/types/components/workspaces/HomeWorkspaceRow.js +5 -2
- package/lib/types/dsh-adapter/admission-loader.d.ts +102 -0
- package/lib/types/dsh-adapter/admission-loader.d.ts.map +1 -0
- package/lib/types/dsh-adapter/admission-loader.js +301 -0
- package/lib/types/dsh-adapter/agent-view.d.ts.map +1 -1
- package/lib/types/dsh-adapter/agent-view.js +3 -1
- package/lib/types/dsh-adapter/approvals.d.ts +7 -0
- package/lib/types/dsh-adapter/approvals.d.ts.map +1 -1
- package/lib/types/dsh-adapter/approvals.js +45 -1
- package/lib/types/dsh-adapter/backend/translate.d.ts.map +1 -1
- package/lib/types/dsh-adapter/backend/translate.js +71 -8
- package/lib/types/dsh-adapter/backend-admission.d.ts +64 -0
- package/lib/types/dsh-adapter/backend-admission.d.ts.map +1 -0
- package/lib/types/dsh-adapter/backend-admission.js +34 -0
- package/lib/types/dsh-adapter/backend-assembly.d.ts +31 -0
- package/lib/types/dsh-adapter/backend-assembly.d.ts.map +1 -0
- package/lib/types/dsh-adapter/backend-assembly.js +225 -0
- package/lib/types/dsh-adapter/backend-contribution.d.ts +62 -0
- package/lib/types/dsh-adapter/backend-contribution.d.ts.map +1 -0
- package/lib/types/dsh-adapter/backend-contribution.js +78 -0
- package/lib/types/dsh-adapter/backend-registry.d.ts +136 -0
- package/lib/types/dsh-adapter/backend-registry.d.ts.map +1 -0
- package/lib/types/dsh-adapter/backend-registry.js +304 -0
- package/lib/types/dsh-adapter/backends.d.ts +67 -24
- package/lib/types/dsh-adapter/backends.d.ts.map +1 -1
- package/lib/types/dsh-adapter/backends.generated.d.ts +12 -0
- package/lib/types/dsh-adapter/backends.generated.d.ts.map +1 -0
- package/lib/types/dsh-adapter/backends.generated.js +6 -0
- package/lib/types/dsh-adapter/backends.js +91 -46
- package/lib/types/dsh-adapter/bundled-presets.d.ts.map +1 -1
- package/lib/types/dsh-adapter/bundled-presets.js +60 -3
- package/lib/types/dsh-adapter/channel/action-readiness.d.ts +2 -0
- package/lib/types/dsh-adapter/channel/action-readiness.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/action-readiness.js +9 -3
- package/lib/types/dsh-adapter/channel/agent-view-projection.js +2 -2
- package/lib/types/dsh-adapter/channel/background-action.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/background-action.js +8 -3
- package/lib/types/dsh-adapter/channel/binding-events.d.ts +17 -3
- package/lib/types/dsh-adapter/channel/binding-events.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/binding-events.js +19 -46
- package/lib/types/dsh-adapter/channel/channel-host.d.ts +45 -0
- package/lib/types/dsh-adapter/channel/channel-host.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/channel-host.js +1 -0
- package/lib/types/dsh-adapter/channel/command-completions.d.ts +5 -0
- package/lib/types/dsh-adapter/channel/command-completions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/command-completions.js +79 -6
- package/lib/types/dsh-adapter/channel/compaction.d.ts +7 -2
- package/lib/types/dsh-adapter/channel/compaction.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/compaction.js +100 -26
- package/lib/types/dsh-adapter/channel/composer-images.d.ts +4 -2
- package/lib/types/dsh-adapter/channel/composer-images.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/composer-images.js +36 -5
- package/lib/types/dsh-adapter/channel/cordis-host.d.ts +14 -0
- package/lib/types/dsh-adapter/channel/cordis-host.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/cordis-host.js +35 -0
- package/lib/types/dsh-adapter/channel/core/actions.d.ts +3 -3
- package/lib/types/dsh-adapter/channel/core/actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/core/actions.js +15 -6
- package/lib/types/dsh-adapter/channel/core/binding-feed.d.ts +10 -3
- package/lib/types/dsh-adapter/channel/core/binding-feed.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/core/binding-feed.js +5 -1
- package/lib/types/dsh-adapter/channel/core/compose.d.ts +12 -28
- package/lib/types/dsh-adapter/channel/core/compose.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/core/compose.js +330 -117
- package/lib/types/dsh-adapter/channel/core/files.d.ts +7 -2
- package/lib/types/dsh-adapter/channel/core/files.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/core/files.js +1 -0
- package/lib/types/dsh-adapter/channel/core/host.d.ts +12 -6
- package/lib/types/dsh-adapter/channel/core/host.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/core/host.js +69 -35
- package/lib/types/dsh-adapter/channel/core/local-actions.d.ts +5 -3
- package/lib/types/dsh-adapter/channel/core/local-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/core/local-actions.js +5 -2
- package/lib/types/dsh-adapter/channel/core/session-controls.js +2 -2
- package/lib/types/dsh-adapter/channel/core/session-switch.d.ts +7 -4
- package/lib/types/dsh-adapter/channel/core/session-switch.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/core/session-switch.js +8 -4
- package/lib/types/dsh-adapter/channel/core/sessions.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/core/sessions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/core/sessions.js +75 -16
- package/lib/types/dsh-adapter/channel/extensions.d.ts +4 -3
- package/lib/types/dsh-adapter/channel/extensions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/extensions.js +109 -30
- package/lib/types/dsh-adapter/channel/input-delivery.d.ts +2 -2
- package/lib/types/dsh-adapter/channel/input-delivery.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/input-delivery.js +14 -5
- package/lib/types/dsh-adapter/channel/job-projection.d.ts +4 -0
- package/lib/types/dsh-adapter/channel/job-projection.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/job-projection.js +205 -24
- package/lib/types/dsh-adapter/channel/mentions.d.ts +3 -3
- package/lib/types/dsh-adapter/channel/mentions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts +7 -0
- package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/mode-permission-actions.js +235 -13
- package/lib/types/dsh-adapter/channel/model-actions.d.ts +5 -1
- package/lib/types/dsh-adapter/channel/model-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/model-actions.js +48 -29
- package/lib/types/dsh-adapter/channel/model-selection.d.ts +17 -0
- package/lib/types/dsh-adapter/channel/model-selection.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/model-selection.js +109 -0
- package/lib/types/dsh-adapter/channel/model-switch.d.ts +12 -21
- package/lib/types/dsh-adapter/channel/model-switch.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/model-switch.js +39 -102
- package/lib/types/dsh-adapter/channel/permissions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/permissions.js +4 -1
- package/lib/types/dsh-adapter/channel/projection-helpers.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/projection-helpers.js +2 -0
- package/lib/types/dsh-adapter/channel/projection.js +1 -1
- package/lib/types/dsh-adapter/channel/reports.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/reports.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/reports.js +11 -3
- package/lib/types/dsh-adapter/channel/session-fork.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-fork.js +33 -20
- package/lib/types/dsh-adapter/channel/session-listing.d.ts +20 -0
- package/lib/types/dsh-adapter/channel/session-listing.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/session-listing.js +51 -0
- package/lib/types/dsh-adapter/channel/session-metadata.d.ts +3 -1
- package/lib/types/dsh-adapter/channel/session-metadata.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-metadata.js +60 -30
- package/lib/types/dsh-adapter/channel/session-reset.js +2 -2
- package/lib/types/dsh-adapter/channel/session-resume.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-resume.js +22 -8
- package/lib/types/dsh-adapter/channel/session-rewind.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-rewind.js +38 -24
- package/lib/types/dsh-adapter/channel/session-tree-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-tree-actions.js +38 -24
- package/lib/types/dsh-adapter/channel/settings-host.d.ts +5 -2
- package/lib/types/dsh-adapter/channel/settings-host.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/settings-host.js +136 -5
- package/lib/types/dsh-adapter/channel/state.d.ts +43 -1
- package/lib/types/dsh-adapter/channel/state.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/state.js +14 -1
- package/lib/types/dsh-adapter/channel/subagent-projection.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/subagent-projection.js +84 -12
- package/lib/types/dsh-adapter/channel/task-completion.d.ts +6 -0
- package/lib/types/dsh-adapter/channel/task-completion.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/task-completion.js +114 -0
- package/lib/types/dsh-adapter/channel/transcript.d.ts +8 -1
- package/lib/types/dsh-adapter/channel/transcript.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/transcript.js +20 -3
- package/lib/types/dsh-adapter/channel/upstream-retry.d.ts +81 -0
- package/lib/types/dsh-adapter/channel/upstream-retry.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/upstream-retry.js +138 -0
- package/lib/types/dsh-adapter/channel/workspace-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/workspace-actions.js +9 -8
- package/lib/types/dsh-adapter/channel-ui.d.ts +3 -1
- package/lib/types/dsh-adapter/channel-ui.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel-ui.js +4 -2
- package/lib/types/dsh-adapter/channel.d.ts +2 -2
- package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel.js +19 -5
- package/lib/types/dsh-adapter/compat/agent-team-0.2.0.d.ts +55 -0
- package/lib/types/dsh-adapter/compat/agent-team-0.2.0.d.ts.map +1 -0
- package/lib/types/dsh-adapter/compat/agent-team-0.2.0.js +96 -0
- package/lib/types/dsh-adapter/context-occupancy.d.ts +81 -4
- package/lib/types/dsh-adapter/context-occupancy.d.ts.map +1 -1
- package/lib/types/dsh-adapter/context-occupancy.js +108 -17
- package/lib/types/dsh-adapter/contract.d.ts +4 -4
- package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
- package/lib/types/dsh-adapter/contract.js +20 -5
- package/lib/types/dsh-adapter/effect-ledger.d.ts +7 -0
- package/lib/types/dsh-adapter/effect-ledger.d.ts.map +1 -1
- package/lib/types/dsh-adapter/effect-ledger.js +8 -1
- package/lib/types/dsh-adapter/entry-slot.d.ts +38 -0
- package/lib/types/dsh-adapter/entry-slot.d.ts.map +1 -0
- package/lib/types/dsh-adapter/entry-slot.js +28 -0
- package/lib/types/dsh-adapter/fresh-agent.d.ts +22 -0
- package/lib/types/dsh-adapter/fresh-agent.d.ts.map +1 -0
- package/lib/types/dsh-adapter/fresh-agent.js +226 -0
- package/lib/types/dsh-adapter/host-access.d.ts +16 -1
- package/lib/types/dsh-adapter/host-access.d.ts.map +1 -1
- package/lib/types/dsh-adapter/host-access.js +148 -2
- package/lib/types/dsh-adapter/host-contract.d.ts +103 -0
- package/lib/types/dsh-adapter/host-contract.d.ts.map +1 -0
- package/lib/types/dsh-adapter/host-contract.js +77 -0
- package/lib/types/dsh-adapter/host-dsh.d.ts +112 -0
- package/lib/types/dsh-adapter/host-dsh.d.ts.map +1 -0
- package/lib/types/dsh-adapter/host-dsh.js +481 -0
- package/lib/types/dsh-adapter/host-entry.d.ts +9 -0
- package/lib/types/dsh-adapter/host-entry.d.ts.map +1 -0
- package/lib/types/dsh-adapter/host-entry.js +253 -0
- package/lib/types/dsh-adapter/index.d.ts +53 -17
- package/lib/types/dsh-adapter/index.d.ts.map +1 -1
- package/lib/types/dsh-adapter/index.js +63 -9
- package/lib/types/dsh-adapter/install/executors.d.ts +44 -0
- package/lib/types/dsh-adapter/install/executors.d.ts.map +1 -0
- package/lib/types/dsh-adapter/install/executors.js +15 -0
- package/lib/types/dsh-adapter/install/pnpm-profile-add.d.ts +3 -0
- package/lib/types/dsh-adapter/install/pnpm-profile-add.d.ts.map +1 -0
- package/lib/types/dsh-adapter/install/pnpm-profile-add.js +150 -0
- package/lib/types/dsh-adapter/invariant.d.ts +7 -2
- package/lib/types/dsh-adapter/invariant.d.ts.map +1 -1
- package/lib/types/dsh-adapter/invariant.js +6 -3
- package/lib/types/dsh-adapter/jobs.d.ts +7 -0
- package/lib/types/dsh-adapter/jobs.d.ts.map +1 -1
- package/lib/types/dsh-adapter/jobs.js +13 -0
- package/lib/types/dsh-adapter/lite-profile.d.ts +50 -0
- package/lib/types/dsh-adapter/lite-profile.d.ts.map +1 -0
- package/lib/types/dsh-adapter/lite-profile.js +49 -0
- package/lib/types/dsh-adapter/migrate/index.js +2 -2
- package/lib/types/dsh-adapter/migrate/parse/jsonl.d.ts +1 -1
- package/lib/types/dsh-adapter/migrate/parse/jsonl.d.ts.map +1 -1
- package/lib/types/dsh-adapter/migrate/parse/jsonl.js +4 -3
- package/lib/types/dsh-adapter/oauth/profiles.d.ts.map +1 -1
- package/lib/types/dsh-adapter/oauth/profiles.js +5 -1
- package/lib/types/dsh-adapter/panels.d.ts +7 -0
- package/lib/types/dsh-adapter/panels.d.ts.map +1 -1
- package/lib/types/dsh-adapter/panels.js +41 -2
- package/lib/types/dsh-adapter/plugin-completions.d.ts +32 -0
- package/lib/types/dsh-adapter/plugin-completions.d.ts.map +1 -0
- package/lib/types/dsh-adapter/plugin-completions.js +80 -0
- package/lib/types/dsh-adapter/plugin-declaration.d.ts +119 -0
- package/lib/types/dsh-adapter/plugin-declaration.d.ts.map +1 -0
- package/lib/types/dsh-adapter/plugin-declaration.js +183 -0
- package/lib/types/dsh-adapter/plugin-feed.d.ts +94 -0
- package/lib/types/dsh-adapter/plugin-feed.d.ts.map +1 -0
- package/lib/types/dsh-adapter/plugin-feed.js +135 -0
- package/lib/types/dsh-adapter/plugin-guard.d.ts +115 -0
- package/lib/types/dsh-adapter/plugin-guard.d.ts.map +1 -0
- package/lib/types/dsh-adapter/plugin-guard.js +108 -0
- package/lib/types/dsh-adapter/plugin-host.d.ts +13 -2
- package/lib/types/dsh-adapter/plugin-host.d.ts.map +1 -1
- package/lib/types/dsh-adapter/plugin-host.js +34 -8
- package/lib/types/dsh-adapter/plugin-install.d.ts +160 -0
- package/lib/types/dsh-adapter/plugin-install.d.ts.map +1 -0
- package/lib/types/dsh-adapter/plugin-install.js +545 -0
- package/lib/types/dsh-adapter/plugin-manage.d.ts +178 -0
- package/lib/types/dsh-adapter/plugin-manage.d.ts.map +1 -0
- package/lib/types/dsh-adapter/plugin-manage.js +468 -0
- package/lib/types/dsh-adapter/plugin-manager.d.ts +144 -0
- package/lib/types/dsh-adapter/plugin-manager.d.ts.map +1 -0
- package/lib/types/dsh-adapter/plugin-manager.js +83 -0
- package/lib/types/dsh-adapter/plugin.d.ts +50 -1
- package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
- package/lib/types/dsh-adapter/plugin.js +918 -234
- package/lib/types/dsh-adapter/plugins-info.d.ts +130 -8
- package/lib/types/dsh-adapter/plugins-info.d.ts.map +1 -1
- package/lib/types/dsh-adapter/plugins-info.js +469 -44
- package/lib/types/dsh-adapter/process-exit.d.ts +43 -0
- package/lib/types/dsh-adapter/process-exit.d.ts.map +1 -0
- package/lib/types/dsh-adapter/process-exit.js +60 -0
- package/lib/types/dsh-adapter/root-dispose.d.ts +18 -0
- package/lib/types/dsh-adapter/root-dispose.d.ts.map +1 -0
- package/lib/types/dsh-adapter/root-dispose.js +28 -0
- package/lib/types/dsh-adapter/session-list-metadata.d.ts +20 -0
- package/lib/types/dsh-adapter/session-list-metadata.d.ts.map +1 -0
- package/lib/types/dsh-adapter/session-list-metadata.js +56 -0
- package/lib/types/dsh-adapter/session-projection-store.d.ts +66 -0
- package/lib/types/dsh-adapter/session-projection-store.d.ts.map +1 -0
- package/lib/types/dsh-adapter/session-projection-store.js +149 -0
- package/lib/types/dsh-adapter/session-seed.d.ts +11 -0
- package/lib/types/dsh-adapter/session-seed.d.ts.map +1 -0
- package/lib/types/dsh-adapter/session-seed.js +47 -0
- package/lib/types/dsh-adapter/sessions/list.d.ts +3 -1
- package/lib/types/dsh-adapter/sessions/list.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sessions/list.js +11 -5
- package/lib/types/dsh-adapter/sessions/snapshot.d.ts +0 -2
- package/lib/types/dsh-adapter/sessions/snapshot.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sessions/snapshot.js +7 -70
- package/lib/types/dsh-adapter/settingsEditor.js +2 -2
- package/lib/types/dsh-adapter/sideQuestion.d.ts +21 -0
- package/lib/types/dsh-adapter/sideQuestion.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sideQuestion.js +53 -0
- package/lib/types/dsh-adapter/startup-args.d.ts +2 -0
- package/lib/types/dsh-adapter/startup-args.d.ts.map +1 -1
- package/lib/types/dsh-adapter/startup-args.js +5 -0
- package/lib/types/dsh-adapter/subagents.d.ts +33 -1
- package/lib/types/dsh-adapter/subagents.d.ts.map +1 -1
- package/lib/types/dsh-adapter/subagents.js +112 -9
- package/lib/types/dsh-adapter/team-mode.d.ts +74 -0
- package/lib/types/dsh-adapter/team-mode.d.ts.map +1 -0
- package/lib/types/dsh-adapter/team-mode.js +188 -0
- package/lib/types/dsh-adapter/team-roster.d.ts +67 -0
- package/lib/types/dsh-adapter/team-roster.d.ts.map +1 -0
- package/lib/types/dsh-adapter/team-roster.js +136 -0
- package/lib/types/dsh-adapter/team-tools.d.ts +58 -0
- package/lib/types/dsh-adapter/team-tools.d.ts.map +1 -0
- package/lib/types/dsh-adapter/team-tools.js +208 -0
- package/lib/types/dsh-adapter/tui-settings.d.ts +57 -0
- package/lib/types/dsh-adapter/tui-settings.d.ts.map +1 -0
- package/lib/types/dsh-adapter/tui-settings.js +199 -0
- package/lib/types/dsh-adapter/types.d.ts +1 -1
- package/lib/types/dsh-adapter/types.d.ts.map +1 -1
- package/lib/types/effortPrefs.d.ts +6 -3
- package/lib/types/effortPrefs.d.ts.map +1 -1
- package/lib/types/effortPrefs.js +7 -4
- package/lib/types/hostEntryRoute.d.ts +18 -0
- package/lib/types/hostEntryRoute.d.ts.map +1 -0
- package/lib/types/hostEntryRoute.js +57 -0
- package/lib/types/i18n.d.ts +961 -1439
- package/lib/types/i18n.d.ts.map +1 -1
- package/lib/types/i18n.js +443 -387
- package/lib/types/ink/components/AlternateScreen.js +2 -2
- package/lib/types/ink/components/App.d.ts +1 -0
- package/lib/types/ink/components/App.d.ts.map +1 -1
- package/lib/types/ink/components/App.js +16 -4
- package/lib/types/ink/components/CursorDeclarationContext.d.ts +9 -0
- package/lib/types/ink/components/CursorDeclarationContext.d.ts.map +1 -1
- package/lib/types/ink/components/CursorDeclarationContext.js +2 -0
- package/lib/types/ink/components/ScrollBox.d.ts +9 -0
- package/lib/types/ink/components/ScrollBox.d.ts.map +1 -1
- package/lib/types/ink/components/ScrollBox.js +23 -0
- package/lib/types/ink/dom.d.ts.map +1 -1
- package/lib/types/ink/hooks/use-copy-on-select.d.ts +2 -2
- package/lib/types/ink/hooks/use-copy-on-select.d.ts.map +1 -1
- package/lib/types/ink/hooks/use-copy-on-select.js +13 -7
- package/lib/types/ink/hooks/use-declared-cursor.d.ts +11 -3
- package/lib/types/ink/hooks/use-declared-cursor.d.ts.map +1 -1
- package/lib/types/ink/hooks/use-declared-cursor.js +30 -10
- package/lib/types/ink/ink.d.ts +22 -17
- package/lib/types/ink/ink.d.ts.map +1 -1
- package/lib/types/ink/ink.js +151 -40
- package/lib/types/ink/kitty-graphics.d.ts +2 -0
- package/lib/types/ink/kitty-graphics.d.ts.map +1 -1
- package/lib/types/ink/kitty-graphics.js +6 -1
- package/lib/types/ink/node-cache.d.ts +2 -1
- package/lib/types/ink/node-cache.d.ts.map +1 -1
- package/lib/types/ink/output.d.ts +10 -4
- package/lib/types/ink/output.d.ts.map +1 -1
- package/lib/types/ink/output.js +14 -10
- package/lib/types/ink/render-node-to-output.d.ts +5 -2
- package/lib/types/ink/render-node-to-output.d.ts.map +1 -1
- package/lib/types/ink/render-node-to-output.js +27 -9
- package/lib/types/ink/renderer.d.ts +1 -0
- package/lib/types/ink/renderer.d.ts.map +1 -1
- package/lib/types/ink/renderer.js +4 -3
- package/lib/types/ink/root.d.ts +4 -1
- package/lib/types/ink/root.d.ts.map +1 -1
- package/lib/types/ink/screen.d.ts +4 -2
- package/lib/types/ink/screen.d.ts.map +1 -1
- package/lib/types/ink/selection.d.ts +10 -1
- package/lib/types/ink/selection.d.ts.map +1 -1
- package/lib/types/ink/selection.js +94 -25
- package/lib/types/ink/stdin-handoff.d.ts +11 -0
- package/lib/types/ink/stdin-handoff.d.ts.map +1 -0
- package/lib/types/ink/stdin-handoff.js +20 -0
- package/lib/types/ink/styles.d.ts +2 -1
- package/lib/types/ink/styles.d.ts.map +1 -1
- package/lib/types/ink/terminal-image.d.ts +6 -4
- package/lib/types/ink/terminal-image.d.ts.map +1 -1
- package/lib/types/ink/terminal-image.js +16 -39
- package/lib/types/ink/terminal-notification.d.ts +8 -0
- package/lib/types/ink/terminal-notification.d.ts.map +1 -0
- package/lib/types/ink/terminal-notification.js +83 -0
- package/lib/types/ink/terminal.d.ts +9 -0
- package/lib/types/ink/terminal.d.ts.map +1 -1
- package/lib/types/ink/terminal.js +34 -1
- package/lib/types/ink/termio/csi.d.ts +11 -0
- package/lib/types/ink/termio/csi.d.ts.map +1 -1
- package/lib/types/ink/termio/csi.js +13 -0
- package/lib/types/ink/update-overflow-guard.d.ts +6 -0
- package/lib/types/ink/update-overflow-guard.d.ts.map +1 -1
- package/lib/types/ink/update-overflow-guard.js +17 -0
- package/lib/types/ink/wrap-text.d.ts +6 -0
- package/lib/types/ink/wrap-text.d.ts.map +1 -1
- package/lib/types/ink/wrap-text.js +17 -0
- package/lib/types/kernelPrefs.d.ts +130 -17
- package/lib/types/kernelPrefs.d.ts.map +1 -1
- package/lib/types/kernelPrefs.js +98 -35
- package/lib/types/math/inline-layout.d.ts +2 -0
- package/lib/types/math/inline-layout.d.ts.map +1 -1
- package/lib/types/math/inline-layout.js +5 -27
- package/lib/types/modelGroups.d.ts +15 -27
- package/lib/types/modelGroups.d.ts.map +1 -1
- package/lib/types/modelGroups.js +17 -31
- package/lib/types/modelPrefs.d.ts +5 -4
- package/lib/types/modelPrefs.d.ts.map +1 -1
- package/lib/types/modelPrefs.js +5 -4
- package/lib/types/modelRoute.d.ts +23 -9
- package/lib/types/modelRoute.d.ts.map +1 -1
- package/lib/types/modelRoute.js +25 -11
- package/lib/types/native-ts/yoga-layout/index.d.ts.map +1 -1
- package/lib/types/native-ts/yoga-layout/index.js +8 -1
- package/lib/types/permissionPrefs.d.ts +34 -0
- package/lib/types/permissionPrefs.d.ts.map +1 -0
- package/lib/types/permissionPrefs.js +61 -0
- package/lib/types/permissionPresetLabels.d.ts +25 -0
- package/lib/types/permissionPresetLabels.d.ts.map +1 -0
- package/lib/types/permissionPresetLabels.js +33 -0
- package/lib/types/plugin-host.d.ts +1 -0
- package/lib/types/plugin-host.d.ts.map +1 -1
- package/lib/types/preset-patch.d.ts +22 -0
- package/lib/types/preset-patch.d.ts.map +1 -0
- package/lib/types/preset-patch.js +14 -0
- package/lib/types/presetPrefs.d.ts +17 -3
- package/lib/types/presetPrefs.d.ts.map +1 -1
- package/lib/types/presetPrefs.js +20 -3
- package/lib/types/reload.d.ts +6 -10
- package/lib/types/reload.d.ts.map +1 -1
- package/lib/types/reload.js +14 -14
- package/lib/types/screens/Chat.d.ts +55 -16
- package/lib/types/screens/Chat.d.ts.map +1 -1
- package/lib/types/screens/Chat.js +742 -280
- package/lib/types/screens/Launchpad.d.ts +33 -17
- package/lib/types/screens/Launchpad.d.ts.map +1 -1
- package/lib/types/screens/Launchpad.js +256 -78
- package/lib/types/screens/SessionSupervisor.d.ts.map +1 -1
- package/lib/types/screens/SessionSupervisor.js +53 -12
- package/lib/types/screens/Settings.d.ts.map +1 -1
- package/lib/types/screens/Settings.js +7 -0
- package/lib/types/screens/StatusLine.d.ts.map +1 -1
- package/lib/types/screens/StatusLine.js +24 -7
- package/lib/types/screens/StatusMetrics.d.ts +46 -1
- package/lib/types/screens/StatusMetrics.d.ts.map +1 -1
- package/lib/types/screens/StatusMetrics.js +72 -0
- package/lib/types/screens/chat/useKernelPicker.d.ts +8 -4
- package/lib/types/screens/chat/useKernelPicker.d.ts.map +1 -1
- package/lib/types/screens/chat/useKernelPicker.js +61 -21
- package/lib/types/screens/chat/useModelPicker.d.ts +42 -0
- package/lib/types/screens/chat/useModelPicker.d.ts.map +1 -0
- package/lib/types/screens/chat/useModelPicker.js +182 -0
- package/lib/types/screens/chat/usePluginWriteFlow.d.ts +68 -0
- package/lib/types/screens/chat/usePluginWriteFlow.d.ts.map +1 -0
- package/lib/types/screens/chat/usePluginWriteFlow.js +92 -0
- package/lib/types/screens/chatOverlay.d.ts +30 -5
- package/lib/types/screens/chatOverlay.d.ts.map +1 -1
- package/lib/types/screens/chatOverlay.js +0 -1
- package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.d.ts +4 -1
- package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.d.ts.map +1 -1
- package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.js +26 -5
- package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts +1 -1
- package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts.map +1 -1
- package/lib/types/screens/sessionSupervisor/useSessionSupervisor.js +51 -29
- package/lib/types/sessionHistory.d.ts +5 -0
- package/lib/types/sessionHistory.d.ts.map +1 -1
- package/lib/types/sessionHistory.js +5 -0
- package/lib/types/sessionModes.d.ts +5 -3
- package/lib/types/sessionModes.d.ts.map +1 -1
- package/lib/types/sessionModes.js +9 -3
- package/lib/types/sessions/listSnapshot.d.ts +6 -0
- package/lib/types/sessions/listSnapshot.d.ts.map +1 -0
- package/lib/types/sessions/listSnapshot.js +67 -0
- package/lib/types/settings/definitions.d.ts +50 -0
- package/lib/types/settings/definitions.d.ts.map +1 -1
- package/lib/types/settings/definitions.js +42 -8
- package/lib/types/terminal-utils/cjk-emphasis.d.ts +28 -0
- package/lib/types/terminal-utils/cjk-emphasis.d.ts.map +1 -0
- package/lib/types/terminal-utils/cjk-emphasis.js +31 -0
- package/lib/types/terminal-utils/markdown.d.ts +3 -1
- package/lib/types/terminal-utils/markdown.d.ts.map +1 -1
- package/lib/types/terminal-utils/markdown.js +7 -2
- package/lib/types/theme.d.ts +29 -12
- package/lib/types/theme.d.ts.map +1 -1
- package/lib/types/theme.js +310 -23
- package/lib/types/themeCatalog.d.ts.map +1 -1
- package/lib/types/themeCatalog.js +21 -2
- package/lib/types/tips.js +4 -4
- package/lib/types/tuiSettingsFile.d.ts +56 -0
- package/lib/types/tuiSettingsFile.d.ts.map +1 -0
- package/lib/types/tuiSettingsFile.js +206 -0
- package/lib/types/ui.d.ts +2 -0
- package/lib/types/ui.d.ts.map +1 -1
- package/lib/types/ui.js +2 -0
- package/lib/types/update.d.ts +72 -26
- package/lib/types/update.d.ts.map +1 -1
- package/lib/types/update.js +131 -43
- package/lib/types/utils/bmp.d.ts +7 -0
- package/lib/types/utils/bmp.d.ts.map +1 -1
- package/lib/types/utils/bmp.js +27 -0
- package/lib/types/utils/bootTrace.d.ts +2 -0
- package/lib/types/utils/bootTrace.d.ts.map +1 -0
- package/lib/types/utils/bootTrace.js +20 -0
- package/lib/types/utils/clipboard.d.ts.map +1 -1
- package/lib/types/utils/clipboard.js +11 -3
- package/lib/types/utils/credentials.d.ts +14 -2
- package/lib/types/utils/credentials.d.ts.map +1 -1
- package/lib/types/utils/credentials.js +34 -11
- package/lib/types/utils/imageResize.d.ts +10 -20
- package/lib/types/utils/imageResize.d.ts.map +1 -1
- package/lib/types/utils/imageResize.js +61 -134
- package/lib/types/utils/inputPaste.d.ts +2 -2
- package/lib/types/utils/inputPaste.js +2 -2
- package/lib/types/utils/pastedImagePath.d.ts +5 -0
- package/lib/types/utils/pastedImagePath.d.ts.map +1 -1
- package/lib/types/utils/pastedImagePath.js +33 -0
- package/lib/types/utils/paths.d.ts +11 -0
- package/lib/types/utils/paths.d.ts.map +1 -1
- package/lib/types/utils/paths.js +13 -0
- package/package.json +150 -114
- package/presets/winbash.mjs +716 -0
- package/tui-profile/feed/README.md +63 -0
- package/tui-profile/feed/first-party.json +10 -0
- package/tui-profile/protocols/profile-definitions.d.ts +1 -0
- package/tui-profile/protocols/profile-definitions.js +14 -0
- package/tui-profile/protocols/tui-contributions.d.ts +55 -0
- package/tui-profile/protocols/tui-contributions.js +141 -0
- package/tui-profile/registry/contracts/backend-v1alpha1.json +13 -0
- package/tui-profile/registry/registry-0.15.json +12 -0
- package/lib/types/backends/claude/install.d.ts +0 -15
- package/lib/types/backends/claude/install.d.ts.map +0 -1
- package/lib/types/backends/claude/install.js +0 -91
- package/lib/types/channel/elicitation.d.ts.map +0 -1
- package/lib/types/dsh-adapter/channel/session-lineage.d.ts +0 -42
- package/lib/types/dsh-adapter/channel/session-lineage.d.ts.map +0 -1
- package/lib/types/dsh-adapter/channel/session-lineage.js +0 -51
- package/lib/types/utils/jsonl.d.ts.map +0 -1
|
@@ -1,21 +1,29 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import React from 'react';
|
|
3
|
-
import {
|
|
3
|
+
import { unlink } from 'node:fs/promises';
|
|
4
|
+
import { basename, resolve } from 'node:path';
|
|
5
|
+
import { Box, Text, useInput, useTerminalSize, useNativeCursor } from '../ui.js';
|
|
4
6
|
import { SearchBox } from '../components/SearchBox.js';
|
|
5
7
|
import { OverlayAbove } from '../components/OverlayAbove.js';
|
|
6
8
|
import { CommandSuggestions } from '../components/CommandSuggestions.js';
|
|
7
9
|
import { LogoV2 } from '../components/LogoV2.js';
|
|
8
10
|
import { resolveLaunchpadLayout } from '../components/launchpadLayout.js';
|
|
9
|
-
import {
|
|
11
|
+
import { kernelSubtitle } from '../components/kernelCatalog.js';
|
|
10
12
|
import { fitParamParts, PARAM_SEPARATOR } from '../components/launchpadParams.js';
|
|
11
13
|
import { useTooltip } from '../components/Tooltip.js';
|
|
12
|
-
import { pickSplashFont, splashFontById } from '../components/splashFonts.js';
|
|
14
|
+
import { resolveSplashTitleFont, pickSplashFont, splashFontById } from '../components/splashFonts.js';
|
|
15
|
+
import { pickSplashEgg } from '../components/splashEggs.js';
|
|
16
|
+
import { resolveSplashArtForm, splashArtRows } from '../components/splashArtRows.js';
|
|
17
|
+
import { useSplashMascotSkin, useSplashMascotBox } from '../components/sidePanel/companion/SplashMascot.js';
|
|
13
18
|
import { t } from '../i18n.js';
|
|
14
19
|
import { isMinimalUiMode } from '../minimalUiMode.js';
|
|
15
20
|
import { stringWidth } from '../ink/stringWidth.js';
|
|
16
|
-
import { isPlainReturn } from '../utils/modifiers.js';
|
|
21
|
+
import { isMod, isPlainReturn } from '../utils/modifiers.js';
|
|
17
22
|
import { actionMatches } from '../utils/keymap.js';
|
|
18
23
|
import { formatClipboardInsert, readClipboard } from '../utils/clipboard.js';
|
|
24
|
+
import { imagePathMediaType, parsePastedImagePath, readBoundedRegularFile, stageClipboardFilePaths } from '../utils/pastedImagePath.js';
|
|
25
|
+
import { resolveBindingGeneration } from '../components/promptDraftCache.js';
|
|
26
|
+
import { imageTokenSpans, snapOffImageToken, expandImageTokenRange } from '../components/composerImageTokens.js';
|
|
19
27
|
import { collapseToSingleLine, insertSingleLineAt, matchesPasteShortcut, stripBracketedPasteMarkers, } from '../utils/inputPaste.js';
|
|
20
28
|
/** 光标闪烁一个相位的毫秒数(用户要求 500–600ms 一相位)。 */
|
|
21
29
|
const CARET_BLINK_MS = 550;
|
|
@@ -153,7 +161,7 @@ function CornerChip({ label, focused, onActivate, onHover, onHoverLeave, }) {
|
|
|
153
161
|
/**
|
|
154
162
|
* 右下角内核区(第八版):列出可选内核并标出记住的那个。第一行 TUI 版本不动,其后一行一个内核
|
|
155
163
|
* ——当前内核打 `▸ ` 前缀、保持主题蓝;其余行前缀两格空格、文字 dim(前缀等宽
|
|
156
|
-
* 让名字对齐)。行文本 = `短品牌名 · 副标题`(名字取
|
|
164
|
+
* 让名字对齐)。行文本 = `短品牌名 · 副标题`(名字取 manifest 的 shortLabel:DSH /
|
|
157
165
|
* Claude——全名 40 列会挤掉左下角的目录铭牌;副标题 = 版本 / 置灰原因,缺席就
|
|
158
166
|
* 只画名字,见 kernelCatalog 的 kernelSubtitle)。目标形状:
|
|
159
167
|
*
|
|
@@ -174,7 +182,7 @@ function KernelCorner({ rows, focused, onActivate, onHover, onHoverLeave, }) {
|
|
|
174
182
|
const [hovered, setHovered] = React.useState(false);
|
|
175
183
|
const interactive = onActivate !== undefined;
|
|
176
184
|
const active = interactive && (hovered || focused);
|
|
177
|
-
return (_jsx(Box, { flexShrink: 0, flexDirection: "row", justifyContent: "flex-end", children: _jsx(Box, { flexDirection: "column", alignItems: "flex-
|
|
185
|
+
return (_jsx(Box, { flexShrink: 0, flexDirection: "row", justifyContent: "flex-end", children: _jsx(Box, { flexDirection: "column", alignItems: "flex-end", ...(interactive
|
|
178
186
|
? {
|
|
179
187
|
onMouseEnter: () => { setHovered(true); onHover(); },
|
|
180
188
|
onMouseLeave: () => { setHovered(false); onHoverLeave(); },
|
|
@@ -213,15 +221,13 @@ function KernelCorner({ rows, focused, onActivate, onHover, onHoverLeave, }) {
|
|
|
213
221
|
* **输入框在这一屏是唯一有状态的部件**:用户敲进去的东西必须原样带进聊天页,
|
|
214
222
|
* 否则"第一屏输入的字"就被这一屏吞了。第六版起行首 `/` 会弹出**命令补全面板**
|
|
215
223
|
* (`commands`/`onCommandPick` 两缝,数据与组件都与聊天页 composer 同源),
|
|
216
|
-
*
|
|
224
|
+
* Tab 补全到输入框,Enter/点击执行并清空输入;面板收起时整行原样交给 `onSubmit`,由 `Chat`
|
|
217
225
|
* 走它既有的命令表判定(合并命令表,含 registry 命令)再决定 runCommand 或
|
|
218
226
|
* 发送。本地只读一点:行首是不是 `/`,用来把输入框左边的提示符从 `❯` 换成
|
|
219
227
|
* `⌘`。
|
|
220
228
|
*
|
|
221
|
-
*
|
|
222
|
-
*
|
|
223
|
-
* `SearchBox` 的 `caretBlink` 契约),不增删任何字符——无头回归读的是
|
|
224
|
-
* 视口纯文本,闪烁对它不可见,断言不随相位抖动。
|
|
229
|
+
* TTY 输入使用终端原生光标,闪烁与动画继承终端配置。无原生光标的
|
|
230
|
+
* 呈现环境保留约 550ms 的样式闪烁;相位不增删字符、不挪动文本。
|
|
225
231
|
*
|
|
226
232
|
* 居中与降级:宽度走 `resolveSplashLayout` 那一套(与开屏同源,阈值不会漂),
|
|
227
233
|
* 高度走 `resolveLaunchpadLayout`(整块撤:Tips → 键帽行 → 立绘 → 只留输入框)。
|
|
@@ -230,9 +236,9 @@ function KernelCorner({ rows, focused, onActivate, onHover, onHoverLeave, }) {
|
|
|
230
236
|
* 天然没有它们,所以每个可点目标都必须有一条键盘路径(这里全部有:焦点 +
|
|
231
237
|
* Enter)。
|
|
232
238
|
*/
|
|
233
|
-
export function Launchpad({ query, cursorOffset, focusIndex, isTerminalFocused, whale, whaleIdle, whaleGirl, brand, fontId, starred, onStarClick, firstRun, actions, overlayPanel, inputPaused = false, onParamPick, model, effort, preset, permission, commands, onCommandPick, clipboardReader = readClipboard,
|
|
239
|
+
export function Launchpad({ query, cursorOffset, focusIndex, isTerminalFocused, whale, whaleIdle, whaleGirl, brand, companionSkin, fontId, egg, starred, onStarClick, firstRun, actions, overlayPanel, inputPaused = false, onParamPick, model, effort, preset, permission, commands, onCommandPick, clipboardReader = readClipboard, imageComposer,
|
|
234
240
|
/** Tips 自动轮换间隔(第七版;测试缝:无头回归注入短间隔确定性驱动相位)。 */
|
|
235
|
-
tipRotateMs = TIP_ROTATE_MS,
|
|
241
|
+
tipRotateMs = TIP_ROTATE_MS, notice,
|
|
236
242
|
/** 左下角工作目录铭牌被点击/回车时交给 Chat(开既有的 /workspace 工作区菜单)。 */
|
|
237
243
|
onOpenWorkspace,
|
|
238
244
|
/** 右下角内核区的目录行(第八版:一行一个内核,当前那个打 ▸)。 */
|
|
@@ -245,16 +251,19 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
|
|
|
245
251
|
// 光标偏移只在"输入框有焦点"时才有意义;未给(或焦点在快捷入口行)时
|
|
246
252
|
// 一律按行尾算——这与 `SearchBox` 自己的 `cursorOffset ?? query.length`
|
|
247
253
|
// 同一条约定,两处必须一致,否则退格会从"看不见的位置"删字。
|
|
248
|
-
const
|
|
254
|
+
const boundImageSpans = (text) => imageTokenSpans(text).filter(span => imageComposer?.bindings.has(span.token) === true);
|
|
255
|
+
const imageSpans = boundImageSpans(query);
|
|
256
|
+
const caret = snapOffImageToken(imageSpans, focusIndex === -1 ? (cursorOffset ?? query.length) : query.length, 'nearest');
|
|
249
257
|
/** 焦点是否在输入框上(-1);参数段(≤-2)与动作入口(≥0)都不算。 */
|
|
250
258
|
const inputFocused = focusIndex === -1;
|
|
251
259
|
// ── 命令补全面板(第六版 BUG 1)──────────────────────────────────────────
|
|
252
260
|
// 与聊天页 composer 同一套契约:行首 / + 有候选 → 面板上屏;↑/↓ 移选中、
|
|
253
|
-
// Enter
|
|
261
|
+
// Tab 补全到输入框,Enter/点击执行并清空输入、Esc 只收面板(用户可能只是想
|
|
254
262
|
// 看一眼)。`dismissedFor` 记住"这条 query 被收过":Esc 之后继续打字
|
|
255
263
|
// (query 变了)面板自然回来,与 PromptInput 的补全行为同源。
|
|
256
264
|
const [paletteIndex, setPaletteIndex] = React.useState(0);
|
|
257
265
|
const [paletteDismissedFor, setPaletteDismissedFor] = React.useState('');
|
|
266
|
+
const paletteInput = query;
|
|
258
267
|
const paletteCommands = commands !== undefined && query.startsWith('/') && query !== paletteDismissedFor
|
|
259
268
|
? commands
|
|
260
269
|
: [];
|
|
@@ -262,9 +271,15 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
|
|
|
262
271
|
const paletteSelectedIndex = Math.min(paletteIndex, Math.max(0, paletteCommands.length - 1));
|
|
263
272
|
const paletteSelected = paletteCommands[paletteSelectedIndex];
|
|
264
273
|
const pickCommand = (commandLine) => {
|
|
265
|
-
setPaletteDismissedFor(
|
|
266
|
-
|
|
267
|
-
|
|
274
|
+
setPaletteDismissedFor('');
|
|
275
|
+
setPaletteIndex(0);
|
|
276
|
+
// Edits earlier in the same stdin batch update the mirror before props
|
|
277
|
+
// and completion rows can render again. A stale row must not replace them.
|
|
278
|
+
const notice = onCommandPick?.(queryRef.current === query ? commandLine : queryRef.current);
|
|
279
|
+
if (typeof notice === 'string')
|
|
280
|
+
showPasteNotice(notice);
|
|
281
|
+
else
|
|
282
|
+
pasteRevisionRef.current += 1;
|
|
268
283
|
};
|
|
269
284
|
// ── Tips 轮换(第六版设计 2)─────────────────────────────────────────────
|
|
270
285
|
// 轮换顺序(注释即契约):launchpad-tip → launchpad-tip-2 → launchpad-tip-3
|
|
@@ -281,7 +296,39 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
|
|
|
281
296
|
queryRef.current = query;
|
|
282
297
|
const caretRef = React.useRef(caret);
|
|
283
298
|
caretRef.current = caret;
|
|
299
|
+
const changeQuery = (text, offset) => {
|
|
300
|
+
const nextCaret = snapOffImageToken(boundImageSpans(text), offset, offset < caretRef.current ? 'start' : offset > caretRef.current ? 'end' : 'nearest');
|
|
301
|
+
queryRef.current = text;
|
|
302
|
+
caretRef.current = nextCaret;
|
|
303
|
+
onQueryChange(text, nextCaret);
|
|
304
|
+
};
|
|
305
|
+
const deleteRange = (start, end) => {
|
|
306
|
+
const text = queryRef.current;
|
|
307
|
+
const range = expandImageTokenRange(boundImageSpans(text), start, end);
|
|
308
|
+
changeQuery(text.slice(0, range.start) + text.slice(range.end), range.start);
|
|
309
|
+
};
|
|
284
310
|
const clipboardBusyRef = React.useRef(false);
|
|
311
|
+
const pasteRevisionRef = React.useRef(0);
|
|
312
|
+
const mountedRef = React.useRef(true);
|
|
313
|
+
const imageChainRef = React.useRef(Promise.resolve());
|
|
314
|
+
React.useEffect(() => {
|
|
315
|
+
mountedRef.current = true;
|
|
316
|
+
return () => { mountedRef.current = false; };
|
|
317
|
+
}, []);
|
|
318
|
+
const capturePasteLease = () => {
|
|
319
|
+
const revision = pasteRevisionRef.current;
|
|
320
|
+
const channel = imageComposer?.channel;
|
|
321
|
+
const agentId = channel?.agentId;
|
|
322
|
+
const generation = channel === undefined ? 0 : resolveBindingGeneration(channel);
|
|
323
|
+
const imageGeneration = channel?.stagedImageGeneration?.() ?? 0;
|
|
324
|
+
return {
|
|
325
|
+
imageGeneration,
|
|
326
|
+
isCurrent: () => mountedRef.current && revision === pasteRevisionRef.current
|
|
327
|
+
&& (channel === undefined || (channel.agentId === agentId
|
|
328
|
+
&& resolveBindingGeneration(channel) === generation
|
|
329
|
+
&& (channel.stagedImageGeneration?.() ?? 0) === imageGeneration)),
|
|
330
|
+
};
|
|
331
|
+
};
|
|
285
332
|
/** 粘贴提示:落地页没有 toast 基础设施,借 Tips 行显示 4 秒(失败不能静默)。 */
|
|
286
333
|
const [pasteNotice, setPasteNotice] = React.useState(undefined);
|
|
287
334
|
const noticeTimerRef = React.useRef(null);
|
|
@@ -300,6 +347,10 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
|
|
|
300
347
|
if (noticeTimerRef.current !== null)
|
|
301
348
|
clearTimeout(noticeTimerRef.current);
|
|
302
349
|
}, []);
|
|
350
|
+
/** Tips 行此刻被哪条提示占用(粘贴提示优先于 channel 通知)。 */
|
|
351
|
+
const rowNotice = pasteNotice !== undefined
|
|
352
|
+
? { text: pasteNotice, color: 'warning' }
|
|
353
|
+
: notice;
|
|
303
354
|
/** 单行插入(粘贴):换行折叠成空格、`\r` 去掉——落地页是单行编辑器,
|
|
304
355
|
* 多行内容不许拼出换行(Enter 才是提交)。落在当下光标处。 */
|
|
305
356
|
const insertSingleLine = (text) => {
|
|
@@ -308,16 +359,73 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
|
|
|
308
359
|
return;
|
|
309
360
|
// 异步落点守则:读回那一刻的 query/caret 才算数(refs 每次渲染刷新)。
|
|
310
361
|
const next = insertSingleLineAt(queryRef.current, caretRef.current, clean);
|
|
311
|
-
|
|
362
|
+
changeQuery(next.text, next.caret);
|
|
312
363
|
onFocusChange(-1);
|
|
313
364
|
};
|
|
365
|
+
const pasteImagePaths = (paths, lease, bitmap = false) => {
|
|
366
|
+
const work = async () => {
|
|
367
|
+
if (!lease.isCurrent())
|
|
368
|
+
return;
|
|
369
|
+
if (imageComposer === undefined) {
|
|
370
|
+
showPasteNotice(t('input-image-paste-failed', { err: 'image attachments are unavailable in this profile' }));
|
|
371
|
+
return;
|
|
372
|
+
}
|
|
373
|
+
const { channel, bindings } = imageComposer;
|
|
374
|
+
const limits = channel.stagedImageLimits?.();
|
|
375
|
+
const { parts, staged, failure, failureCode } = await stageClipboardFilePaths(paths, async (path) => {
|
|
376
|
+
if (!lease.isCurrent())
|
|
377
|
+
throw new Error('the draft changed while the image was being staged');
|
|
378
|
+
if (limits === undefined)
|
|
379
|
+
throw new Error('image attachments are unavailable in this profile');
|
|
380
|
+
const data = await readBoundedRegularFile(path, limits.maxImageBytes);
|
|
381
|
+
if (!lease.isCurrent())
|
|
382
|
+
throw new Error('the draft changed while the image was being staged');
|
|
383
|
+
return channel.stageComposerImage({
|
|
384
|
+
data,
|
|
385
|
+
mediaType: imagePathMediaType(path) ?? 'image/png',
|
|
386
|
+
name: basename(path),
|
|
387
|
+
path: resolve(path),
|
|
388
|
+
}, lease.imageGeneration);
|
|
389
|
+
}, path => formatClipboardInsert({ kind: 'files', paths: [path] }), Math.max(0, (limits?.maxImagesPerMessage ?? 0) - bindings.size));
|
|
390
|
+
if (!lease.isCurrent() || staged.some(handle => channel.hasStagedImage(handle.stageId) !== true)) {
|
|
391
|
+
for (const handle of staged)
|
|
392
|
+
channel.discardStagedImage(handle.stageId);
|
|
393
|
+
return;
|
|
394
|
+
}
|
|
395
|
+
let number = 1;
|
|
396
|
+
const reserved = new Set(queryRef.current.match(/\[Image #\d+\]/gu) ?? []);
|
|
397
|
+
const text = parts.map(part => {
|
|
398
|
+
if (part.kind === 'text')
|
|
399
|
+
return part.value;
|
|
400
|
+
while (reserved.has(`[Image #${number}]`))
|
|
401
|
+
number += 1;
|
|
402
|
+
const token = `[Image #${number++}]`;
|
|
403
|
+
bindings.set(token, part.value.stageId);
|
|
404
|
+
return token;
|
|
405
|
+
}).join(' ');
|
|
406
|
+
// A failed bitmap export is temporary and must never become a path reference.
|
|
407
|
+
if (!bitmap || staged.length > 0)
|
|
408
|
+
insertSingleLine(`${text} `);
|
|
409
|
+
if (failure !== '') {
|
|
410
|
+
showPasteNotice(t('input-image-paste-failed', { err: failureCode === 'image-limit' ? t('input-image-paste-limit') : failure }));
|
|
411
|
+
}
|
|
412
|
+
else if (staged.length > 0) {
|
|
413
|
+
const adapted = staged.filter(handle => handle.adjustment !== undefined).length;
|
|
414
|
+
showPasteNotice(adapted > 0
|
|
415
|
+
? t('input-images-staged-adapted', { count: staged.length, adapted })
|
|
416
|
+
: t('input-images-staged', { count: staged.length }));
|
|
417
|
+
}
|
|
418
|
+
};
|
|
419
|
+
const queued = imageChainRef.current.then(work, work);
|
|
420
|
+
imageChainRef.current = queued.catch(() => undefined);
|
|
421
|
+
return queued;
|
|
422
|
+
};
|
|
314
423
|
// 光标闪烁相位(第四版修订:**自动呼吸**,不要求终端 focus 事件)。开关只看
|
|
315
424
|
// 「输入框是这一屏的焦点目标」(focusIndex < 0)——`isTerminalFocused` 依赖
|
|
316
|
-
//
|
|
317
|
-
//
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
const inputActive = inputFocused;
|
|
425
|
+
// The native caret owns blinking in TTYs; only the painted fallback needs
|
|
426
|
+
// a timer. Do not gate it on terminal focus events, which can arrive late.
|
|
427
|
+
const nativeCursor = useNativeCursor();
|
|
428
|
+
const inputActive = inputFocused && !nativeCursor;
|
|
321
429
|
const [caretPhase, setCaretPhase] = React.useState(true);
|
|
322
430
|
React.useEffect(() => {
|
|
323
431
|
if (!inputActive) {
|
|
@@ -368,31 +476,50 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
|
|
|
368
476
|
const cornerLeft = [cwd, branch].filter(part => part !== undefined && part !== '').join(':');
|
|
369
477
|
// 右下角铭牌带(第八版):第一行 TUI 版本,其后一行一个内核。
|
|
370
478
|
// 行文本 = `名字 · 副标题`——副标题(版本 / 置灰原因)与选择器同源
|
|
371
|
-
// (kernelSubtitle
|
|
479
|
+
// (kernelSubtitle),读不到就只画名字,绝不编造。**登录状态不进铭牌**:
|
|
480
|
+
// 铭牌只报「有哪些内核、各自什么版本」,未登录在选择器里看(切换时才需要,
|
|
481
|
+
// noteKey 在那边走副标题),右下角保持只有名字与版号的干净两列。
|
|
372
482
|
const tuiPart = tuiVersion === undefined || tuiVersion === '' ? undefined : `dsh-tui v${tuiVersion}`;
|
|
373
|
-
// 名字用**短品牌名**(DSH / Claude
|
|
374
|
-
//
|
|
375
|
-
//
|
|
483
|
+
// 名字用**短品牌名**(option.shortLabel,来自 manifest:DSH / Claude,与启动页
|
|
484
|
+
// 「内核 · DSH」那个 chip 同源):这一格与左下角的 `工作目录:分支` 共用底边,
|
|
485
|
+
// 全名(DeepSeek Harness · … = 40 列)在窄终端里会把左边的目录铭牌挤掉。
|
|
486
|
+
// 选择器那一屏有地方,仍用全名(label)。
|
|
376
487
|
const kernelRows = (kernels ?? []).map(option => {
|
|
377
|
-
const
|
|
378
|
-
const
|
|
488
|
+
const { noteKey: _loginNote, ...rest } = option;
|
|
489
|
+
const subtitle = kernelSubtitle(rest, key => t(key));
|
|
490
|
+
const name = option.shortLabel;
|
|
379
491
|
return { id: option.id, current: option.current, label: subtitle === undefined ? name : name + ' \u00b7 ' + subtitle };
|
|
380
492
|
});
|
|
381
493
|
/** 内核区进不进焦点环:画得出来**且**接了回调(可点才需要键盘等价操作)。 */
|
|
382
494
|
const kernelCornerFocusable = kernelRows.length > 0 && onKernelPick !== undefined;
|
|
383
495
|
const cardWidth = Math.max(24, Math.min(columns - 4, 72));
|
|
496
|
+
// 当天字体与节日只在 mount 时选一次,并交给 Logo,避免预算与渲染各自读日期。
|
|
497
|
+
// 立绘槽的吉祥物皮肤(`companion.skin`)同理:这一层与 `LogoV2` 读同一个
|
|
498
|
+
// 源(同一份 `useSyncExternalStore` 订阅),预算与渲染不会各看各的。
|
|
499
|
+
const mascotSkin = useSplashMascotSkin(companionSkin);
|
|
500
|
+
const mascotBox = useSplashMascotBox(mascotSkin, (brand ?? 'deepseek') === 'deepseek' && (whale || whaleGirl));
|
|
501
|
+
const [dailyFont] = React.useState(() => pickSplashFont());
|
|
502
|
+
const [dailyEgg] = React.useState(() => egg === undefined ? pickSplashEgg() : egg);
|
|
503
|
+
const font = fontId === undefined ? dailyFont : splashFontById(fontId);
|
|
504
|
+
const titleFont = resolveSplashTitleFont(font, brand, dailyEgg);
|
|
505
|
+
// 预算与 LogoV2 共享形态、图片槽:紧凑图片已缩减占位时不能仍按侧栏的15行算。
|
|
506
|
+
const splashArtForm = resolveSplashArtForm({ brand, whaleGirl, mascotSkin });
|
|
507
|
+
const artRows = splashArtRows(splashArtForm, mascotBox);
|
|
384
508
|
const layout = resolveLaunchpadLayout(columns, rows, {
|
|
385
509
|
params: hasParams,
|
|
386
510
|
whale,
|
|
387
511
|
whaleGirl,
|
|
388
|
-
font:
|
|
512
|
+
font: titleFont,
|
|
513
|
+
artRows,
|
|
514
|
+
// 右下角铭牌自身行数:第一行(目录 + TUI 版号)+ 一行一个内核(第八版)。
|
|
515
|
+
cornerRows: 1 + kernelRows.length,
|
|
389
516
|
});
|
|
390
517
|
// Tips 自动轮换(第七版,用户要「呼吸感」):约 10s 一换,与点击/焦点+Enter
|
|
391
518
|
// 的手动切换**并存**——手动切换改 tipIndex,本 effect 以 tipIndex 为依赖,
|
|
392
519
|
// 重臂即计时重置(刚点完不会立刻被自动轮换跳走)。只在 Tips 行真的在画、
|
|
393
520
|
// 且不是首启句/粘贴提示时跑;本组件被整屏盖住时随之卸载,定时器自然停。
|
|
394
521
|
// 切换只改那一行文本(TIP_KEYS 查表),行高与居中位置不变——无布局抖动。
|
|
395
|
-
const tipsAutoRotatable = layout.showTip &&
|
|
522
|
+
const tipsAutoRotatable = layout.showTip && rowNotice === undefined && !firstRun;
|
|
396
523
|
React.useEffect(() => {
|
|
397
524
|
if (!tipsAutoRotatable)
|
|
398
525
|
return;
|
|
@@ -415,7 +542,7 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
|
|
|
415
542
|
*
|
|
416
543
|
* 编辑能力刻意只做单行编辑器该有的那几样:退格 / Delete / 左右移动 /
|
|
417
544
|
* Home / End / 粘贴。首屏不是编辑器,用户在上面打的第一句通常就一两个
|
|
418
|
-
*
|
|
545
|
+
* 词;多行与 `@` 补全属于聊天页,图片经同一 channel 暂存。
|
|
419
546
|
*
|
|
420
547
|
* `↑/↓` 与 `Tab` 在键帽行上移动焦点;焦点在 `-1` 时这两组键无操作
|
|
421
548
|
* (首屏没有可滚的东西)。
|
|
@@ -425,12 +552,24 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
|
|
|
425
552
|
// 选择器回到这里)。没有这道闸,选择器分支没消费的键会漏进草稿。
|
|
426
553
|
if (inputPaused)
|
|
427
554
|
return;
|
|
555
|
+
const query = queryRef.current;
|
|
556
|
+
const caret = caretRef.current;
|
|
428
557
|
const composing = key.ctrl || key.meta || key.super;
|
|
429
558
|
// 终端原生粘贴(bracketed paste:Ctrl+Shift+V / 右键 / Shift+Insert):
|
|
430
559
|
// ink 把载荷标成 isPasted 交给 useInput;标记字节(\x1b[200~ / 201~)在
|
|
431
560
|
// 解析层已被剥掉,这里的 input 就是纯载荷。换行折叠成单行(见上)。
|
|
432
561
|
if (event?.isPasted === true && input.length > 0) {
|
|
433
|
-
|
|
562
|
+
const text = stripBracketedPasteMarkers(input);
|
|
563
|
+
const path = parsePastedImagePath(text);
|
|
564
|
+
if (path !== null && imageComposer !== undefined) {
|
|
565
|
+
const lease = capturePasteLease();
|
|
566
|
+
void pasteImagePaths([path], lease).catch(error => {
|
|
567
|
+
if (lease.isCurrent())
|
|
568
|
+
showPasteNotice(t('input-image-paste-failed', { err: String(error) }));
|
|
569
|
+
});
|
|
570
|
+
}
|
|
571
|
+
else
|
|
572
|
+
insertSingleLine(text);
|
|
434
573
|
event.stopImmediatePropagation();
|
|
435
574
|
return;
|
|
436
575
|
}
|
|
@@ -439,27 +578,49 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
|
|
|
439
578
|
// 曾经的 bug:组合键兜底把 Ctrl+V 一口吞掉,粘贴永远是死的。
|
|
440
579
|
if (matchesPasteShortcut(input, key)) {
|
|
441
580
|
if (!clipboardBusyRef.current) {
|
|
581
|
+
const lease = capturePasteLease();
|
|
442
582
|
clipboardBusyRef.current = true;
|
|
443
583
|
void clipboardReader()
|
|
444
|
-
.then(content => {
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
584
|
+
.then(async (content) => {
|
|
585
|
+
const temporaryPath = content?.kind === 'image' ? content.path : undefined;
|
|
586
|
+
try {
|
|
587
|
+
if (!lease.isCurrent())
|
|
588
|
+
return;
|
|
589
|
+
if (content === null) {
|
|
590
|
+
showPasteNotice(t('input-clipboard-empty'));
|
|
591
|
+
return;
|
|
592
|
+
}
|
|
593
|
+
if (content.kind === 'unavailable') {
|
|
594
|
+
showPasteNotice(t(content.wsl === true ? 'input-clipboard-unavailable-wsl' : 'input-clipboard-unavailable'));
|
|
595
|
+
return;
|
|
596
|
+
}
|
|
597
|
+
if (content.kind === 'image') {
|
|
598
|
+
if (imagePathMediaType(content.path) === undefined) {
|
|
599
|
+
showPasteNotice(t('input-image-format-unsupported'));
|
|
600
|
+
return;
|
|
601
|
+
}
|
|
602
|
+
await pasteImagePaths([content.path], lease, true);
|
|
603
|
+
return;
|
|
604
|
+
}
|
|
605
|
+
if (content.kind === 'files' && imageComposer !== undefined) {
|
|
606
|
+
await pasteImagePaths(content.paths, lease);
|
|
607
|
+
return;
|
|
608
|
+
}
|
|
609
|
+
const text = formatClipboardInsert(content);
|
|
610
|
+
const path = parsePastedImagePath(text);
|
|
611
|
+
if (path !== null && imageComposer !== undefined)
|
|
612
|
+
await pasteImagePaths([path], lease);
|
|
613
|
+
else
|
|
614
|
+
insertSingleLine(text);
|
|
448
615
|
}
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
616
|
+
finally {
|
|
617
|
+
if (temporaryPath !== undefined)
|
|
618
|
+
await unlink(temporaryPath).catch(() => undefined);
|
|
452
619
|
}
|
|
453
|
-
if (content.kind === 'image') {
|
|
454
|
-
// 单行编辑器不能暂存图片(staged image 是聊天页的能力);
|
|
455
|
-
// 插入临时文件路径只会留一条谁也读不懂的路径——提示而不是插入。
|
|
456
|
-
showPasteNotice(t('input-clipboard-unavailable'));
|
|
457
|
-
return;
|
|
458
|
-
}
|
|
459
|
-
insertSingleLine(formatClipboardInsert(content));
|
|
460
620
|
})
|
|
461
621
|
.catch(() => {
|
|
462
|
-
|
|
622
|
+
if (lease.isCurrent())
|
|
623
|
+
showPasteNotice(t('input-clipboard-read-failed'));
|
|
463
624
|
})
|
|
464
625
|
.finally(() => {
|
|
465
626
|
clipboardBusyRef.current = false;
|
|
@@ -480,7 +641,7 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
|
|
|
480
641
|
}
|
|
481
642
|
}
|
|
482
643
|
// 命令补全面板(第六版 BUG 1):面板开着时 ↑/↓/Enter/Tab/Esc 全归面板——
|
|
483
|
-
// 与聊天页 composer 的补全菜单同一套键位。
|
|
644
|
+
// 与聊天页 composer 的补全菜单同一套键位。Tab 补全;Enter/点击执行选中命令
|
|
484
645
|
// (onCommandPick → Chat 的 runCommand,绝不 submit);Esc 只收面板,
|
|
485
646
|
// 草稿一字不动(用户可能只是想看一眼有什么命令)。
|
|
486
647
|
if (paletteOpen && paletteSelected !== undefined) {
|
|
@@ -490,8 +651,17 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
|
|
|
490
651
|
event.stopImmediatePropagation();
|
|
491
652
|
return;
|
|
492
653
|
}
|
|
493
|
-
if (key.tab
|
|
494
|
-
|
|
654
|
+
if (key.tab) {
|
|
655
|
+
if (!key.shift && query === paletteInput) {
|
|
656
|
+
const replacement = paletteSelected.replacement;
|
|
657
|
+
setPaletteIndex(0);
|
|
658
|
+
changeQuery(replacement, replacement.length);
|
|
659
|
+
}
|
|
660
|
+
event.stopImmediatePropagation();
|
|
661
|
+
return;
|
|
662
|
+
}
|
|
663
|
+
if (isPlainReturn(key)) {
|
|
664
|
+
pickCommand(paletteSelected.commandLine);
|
|
495
665
|
event.stopImmediatePropagation();
|
|
496
666
|
return;
|
|
497
667
|
}
|
|
@@ -502,18 +672,20 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
|
|
|
502
672
|
}
|
|
503
673
|
}
|
|
504
674
|
if (key.escape) {
|
|
675
|
+
pasteRevisionRef.current += 1;
|
|
505
676
|
// 空输入时 Esc 去看会话(首屏最常见的下一步);已经有字就只清空它,
|
|
506
677
|
// 免得辛苦打的半句话被一次性丢掉。
|
|
507
678
|
if (query !== '')
|
|
508
|
-
|
|
679
|
+
changeQuery('', 0);
|
|
509
680
|
else
|
|
510
681
|
onEscape('sessions');
|
|
511
682
|
event.stopImmediatePropagation();
|
|
512
683
|
return;
|
|
513
684
|
}
|
|
514
685
|
if (key.ctrl && (input === 'c' || input === 'd')) {
|
|
686
|
+
pasteRevisionRef.current += 1;
|
|
515
687
|
if (query !== '')
|
|
516
|
-
|
|
688
|
+
changeQuery('', 0);
|
|
517
689
|
else
|
|
518
690
|
onEscape('exit');
|
|
519
691
|
event.stopImmediatePropagation();
|
|
@@ -545,8 +717,13 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
|
|
|
545
717
|
}
|
|
546
718
|
else {
|
|
547
719
|
const focused = focusIndex >= 0 ? actions[focusIndex] : undefined;
|
|
548
|
-
if (focused === undefined)
|
|
549
|
-
onSubmit(query);
|
|
720
|
+
if (focused === undefined) {
|
|
721
|
+
const notice = onSubmit(query);
|
|
722
|
+
if (typeof notice === 'string')
|
|
723
|
+
showPasteNotice(notice);
|
|
724
|
+
else
|
|
725
|
+
pasteRevisionRef.current += 1;
|
|
726
|
+
}
|
|
550
727
|
else
|
|
551
728
|
onAction(focused);
|
|
552
729
|
}
|
|
@@ -564,7 +741,7 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
|
|
|
564
741
|
// 入口 + Tips 行(第六版设计 2,环的最后一格——它在版面上就在入口行下方)。
|
|
565
742
|
// 窄终端里 `fitChips`/参数行的宽度裁剪会丢掉放不下的那几个,按
|
|
566
743
|
// 整张表绕圈会让焦点指着一个看不见的目标、Enter 触发一个看不见的动作。
|
|
567
|
-
const tipsFocusable = layout.showTip &&
|
|
744
|
+
const tipsFocusable = layout.showTip && rowNotice === undefined && !firstRun;
|
|
568
745
|
// 左下角铭牌(第七版):画得出来且接了 onOpenWorkspace 才进环。
|
|
569
746
|
const cornerFocusable = layout.showCorners && cornerLeft !== '' && onOpenWorkspace !== undefined;
|
|
570
747
|
// 环的顺序 = 版面顺序(↓ 一路向下):…→ Tips → 左下目录铭牌 → 右下内核区。
|
|
@@ -590,7 +767,7 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
|
|
|
590
767
|
: key.end ? query.length
|
|
591
768
|
: key.leftArrow ? Math.max(0, prevBoundary(query, at))
|
|
592
769
|
: Math.min(query.length, nextBoundary(query, at));
|
|
593
|
-
|
|
770
|
+
changeQuery(query, next);
|
|
594
771
|
event.stopImmediatePropagation();
|
|
595
772
|
return;
|
|
596
773
|
}
|
|
@@ -601,17 +778,28 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
|
|
|
601
778
|
if (key.backspace) {
|
|
602
779
|
if (at === 0)
|
|
603
780
|
return;
|
|
604
|
-
|
|
605
|
-
onQueryChange(query.slice(0, cut) + query.slice(at), cut);
|
|
781
|
+
deleteRange(prevBoundary(query, at), at);
|
|
606
782
|
}
|
|
607
783
|
else {
|
|
608
784
|
if (at >= query.length)
|
|
609
785
|
return;
|
|
610
|
-
|
|
786
|
+
deleteRange(at, nextBoundary(query, at));
|
|
611
787
|
}
|
|
612
788
|
event.stopImmediatePropagation();
|
|
613
789
|
return;
|
|
614
790
|
}
|
|
791
|
+
if (isMod(key) && input === 'w') {
|
|
792
|
+
if (!inputFocused)
|
|
793
|
+
return;
|
|
794
|
+
let start = caret;
|
|
795
|
+
while (start > 0 && /\s/u.test(query[start - 1]))
|
|
796
|
+
start--;
|
|
797
|
+
while (start > 0 && !/\s/u.test(query[start - 1]))
|
|
798
|
+
start--;
|
|
799
|
+
deleteRange(start, caret);
|
|
800
|
+
event.stopImmediatePropagation();
|
|
801
|
+
return;
|
|
802
|
+
}
|
|
615
803
|
if (composing || key.return)
|
|
616
804
|
return;
|
|
617
805
|
// 可打印输入(含粘贴整段):接到光标处,交给 SearchBox 的窗口化去滚。
|
|
@@ -619,11 +807,11 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
|
|
|
619
807
|
if (typed === '')
|
|
620
808
|
return;
|
|
621
809
|
const at = caret;
|
|
622
|
-
|
|
810
|
+
changeQuery(query.slice(0, at) + typed + query.slice(at), at + typed.length);
|
|
623
811
|
onFocusChange(-1);
|
|
624
812
|
event.stopImmediatePropagation();
|
|
625
813
|
});
|
|
626
|
-
return (_jsxs(Box, { flexDirection: "column", width: columns, height: rows, onClick: onBlankClick, children: [_jsxs(Box, { flexDirection: "column", flexGrow: 1, alignItems: "center", justifyContent: "center", children: [layout.showHero && (_jsx(LogoV2, { fontId:
|
|
814
|
+
return (_jsxs(Box, { flexDirection: "column", width: columns, height: rows, onClick: onBlankClick, children: [_jsxs(Box, { flexDirection: "column", flexGrow: 1, alignItems: "center", justifyContent: "center", children: [layout.showHero && (_jsx(LogoV2, { fontId: font.id, egg: dailyEgg, whale: layout.showWhale && whale, whaleIdle: whaleIdle, whaleGirl: layout.showWhale && whaleGirl, brand: brand, companionSkin: companionSkin, mascotBox: mascotBox, starred: starred, onStarClick: onStarClick, skipIntro: true, align: "center", chrome: "minimal", arrangement: "column" })), _jsxs(Box, { flexDirection: "column", width: cardWidth, marginTop: layout.heroGapRows, children: [_jsx(Box, { flexDirection: "column", borderStyle: "round", borderColor: inputFocused ? 'suggestion' : 'inactive', paddingX: 1, width: cardWidth, children: _jsx(SearchBox, { query: query, placeholder: t('launchpad-placeholder'),
|
|
627
815
|
// 第七版(用户原话「光标永远不消失 哪怕焦点没了也不消失」):
|
|
628
816
|
// 只要这一屏在,输入光标**常在**——焦点挪到参数段/入口行只影响
|
|
629
817
|
// 外框提亮(inputFocused),不再当光标的开关。
|
|
@@ -631,20 +819,20 @@ onKernelPick, cwd, branch, tuiVersion, onFocusChange, onAction, onQueryChange, o
|
|
|
631
819
|
// 占位紧跟 ❯ 之后左对齐(用户实测要求;只影响落地页这一处)。
|
|
632
820
|
placeholderAlign: "left",
|
|
633
821
|
// 边框由外层卡片画——SearchBox 自己那圈收起来,否则就是框套框。
|
|
634
|
-
borderless: true, prefix: query.startsWith('/') ? '⌘' : '❯', width: cardWidth - 4, cursorOffset: caret, caretBlink: inputFocused ? caretPhase : true }) }), hasParams && (_jsx(Box, { paddingLeft: 2, height: 1, flexDirection: "row", children: fittedParams.map((part, index) => (_jsxs(React.Fragment, { children: [index > 0 && _jsx(Text, { dimColor: true, children: PARAM_SEPARATOR }), onParamPick === undefined ? (_jsx(Text, { color: part.colored === true ? 'autoAccept' : undefined, bold: part.colored === true, dimColor: part.colored !== true, children: part.value })) : (_jsx(ParamChip, { label: part.value, fullValue: part.fullValue, truncated: part.truncated, colored: part.colored, focused: focusIndex === paramFocusOf(part.segment), activationNonce: paramActivation?.segment === part.segment ? paramActivation.nonce : 0, onActivate: () => onParamPick(part.segment), onHover: () => onFocusChange(paramFocusOf(part.segment)), onHoverLeave: () => {
|
|
822
|
+
borderless: true, prefix: query.startsWith('/') ? '⌘' : '❯', width: cardWidth - 4, cursorOffset: caret, imageSpans: imageSpans, caretBlink: inputFocused ? caretPhase : true }) }), hasParams && (_jsx(Box, { paddingLeft: 2, height: 1, flexDirection: "row", children: fittedParams.map((part, index) => (_jsxs(React.Fragment, { children: [index > 0 && _jsx(Text, { dimColor: true, children: PARAM_SEPARATOR }), onParamPick === undefined ? (_jsx(Text, { color: part.colored === true ? 'autoAccept' : undefined, bold: part.colored === true, dimColor: part.colored !== true, children: part.value })) : (_jsx(ParamChip, { label: part.value, fullValue: part.fullValue, truncated: part.truncated, colored: part.colored, focused: focusIndex === paramFocusOf(part.segment), activationNonce: paramActivation?.segment === part.segment ? paramActivation.nonce : 0, onActivate: () => onParamPick(part.segment), onHover: () => onFocusChange(paramFocusOf(part.segment)), onHoverLeave: () => {
|
|
635
823
|
if (focusIndex === paramFocusOf(part.segment))
|
|
636
824
|
onFocusChange(-1);
|
|
637
|
-
} }))] }, part.segment))) })), overlayPanel !== undefined && (_jsx(OverlayAbove, { maxHeight: Math.max(rows - 8, 1), transparent: true, children: _jsx(Box, { onClick: (event) => { event.stopImmediatePropagation(); }, children: overlayPanel }) })), overlayPanel === undefined && paletteOpen && paletteSelected !== undefined && (_jsx(OverlayAbove, { maxHeight: Math.max(rows - 8, 1), transparent: true, children: _jsx(Box, { onClick: (event) => { event.stopImmediatePropagation(); }, children: _jsx(CommandSuggestions, { commands: paletteCommands, selectedIndex: paletteSelectedIndex, columns:
|
|
825
|
+
} }))] }, part.segment))) })), overlayPanel !== undefined && (_jsx(OverlayAbove, { maxHeight: Math.max(rows - 8, 1), transparent: true, children: _jsx(Box, { onClick: (event) => { event.stopImmediatePropagation(); }, children: overlayPanel }) })), overlayPanel === undefined && paletteOpen && paletteSelected !== undefined && (_jsx(OverlayAbove, { maxHeight: Math.max(rows - 8, 1), transparent: true, children: _jsx(Box, { onClick: (event) => { event.stopImmediatePropagation(); }, children: _jsx(CommandSuggestions, { commands: paletteCommands, selectedIndex: paletteSelectedIndex, columns: cardWidth, query: query, onPick: (index) => {
|
|
638
826
|
const command = paletteCommands[index];
|
|
639
827
|
if (command !== undefined) {
|
|
640
|
-
pickCommand(command.commandLine
|
|
828
|
+
pickCommand(command.commandLine);
|
|
641
829
|
}
|
|
642
830
|
} }) }) }))] }), hasParams && layout.showHints && hintsFit && layout.hintsGapRows > 0 && (_jsx(Box, { flexShrink: 0, height: 1 })), layout.showHints && hintsFit && (_jsx(Box, { flexShrink: 0, flexDirection: "row", gap: 2, alignSelf: "center", width: columns, justifyContent: "flex-end", paddingRight: Math.max(0, Math.floor((columns - cardWidth) / 2)), children: chips.map(({ index, label }) => (_jsx(ActionChip, { label: label, focused: focusIndex === index, onActivate: () => onAction(actions[index]), onHover: () => onFocusChange(index), onHoverLeave: () => {
|
|
643
831
|
if (focusIndex === index)
|
|
644
832
|
onFocusChange(-1);
|
|
645
|
-
} }, actions[index].id))) })), (layout.showTip ||
|
|
833
|
+
} }, actions[index].id))) })), (layout.showTip || rowNotice !== undefined) && (_jsx(Box, { flexShrink: 0, alignSelf: "center", marginTop: layout.tipGapRows, ...(rowNotice === undefined && !firstRun
|
|
646
834
|
? { onClick: (event) => { event.stopImmediatePropagation(); rotateTip(); } }
|
|
647
|
-
: {}), children:
|
|
835
|
+
: {}), children: rowNotice === undefined ? (_jsxs(_Fragment, { children: [_jsxs(Text, { color: "warning", children: ["\u25CF ", t('launchpad-tip-prefix')] }), _jsx(Text, { color: focusIndex === TIPS_FOCUS ? 'suggestion' : undefined, bold: focusIndex === TIPS_FOCUS, dimColor: focusIndex !== TIPS_FOCUS, children: firstRun ? t('launchpad-first-run') : t(TIP_KEYS[tipIndex]) })] })) : (_jsxs(Text, { color: rowNotice.color ?? 'warning', children: ["\u25CF ", rowNotice.text] })) }))] }), layout.showCorners && (_jsxs(Box, { flexShrink: 0, flexDirection: "column", children: [_jsxs(Box, { flexShrink: 0, flexDirection: "row", justifyContent: "space-between", height: 1, children: [cornerLeft !== '' && onOpenWorkspace !== undefined ? (_jsx(CornerChip, { label: cornerLeft, focused: focusIndex === CWD_CORNER_FOCUS, onActivate: onOpenWorkspace, onHover: () => onFocusChange(CWD_CORNER_FOCUS), onHoverLeave: () => {
|
|
648
836
|
if (focusIndex === CWD_CORNER_FOCUS)
|
|
649
837
|
onFocusChange(-1);
|
|
650
838
|
} })) : (_jsx(Text, { dimColor: true, wrap: "truncate-middle", children: cornerLeft })), _jsx(Text, { dimColor: true, wrap: "truncate-middle", children: tuiPart ?? '' })] }), kernelRows.length > 0 && (_jsx(KernelCorner, { rows: kernelRows, focused: focusIndex === KERNEL_CORNER_FOCUS, onActivate: onKernelPick, onHover: () => onFocusChange(KERNEL_CORNER_FOCUS), onHoverLeave: () => {
|
|
@@ -710,16 +898,6 @@ export function nextBoundary(text, at) {
|
|
|
710
898
|
const first = rest[0] ?? '';
|
|
711
899
|
return at + first.length;
|
|
712
900
|
}
|
|
713
|
-
/**
|
|
714
|
-
* 当天那款字体:设置项 pin 住就用它,否则按日期轮换。
|
|
715
|
-
* 与 `LogoV2` 同源——两边必须解出同一款,否则宽轴阈值会互相矛盾。
|
|
716
|
-
*
|
|
717
|
-
* @param fontId - 设置项 `dsh-tui.splashFont` 的值。
|
|
718
|
-
* @returns 那款字体。
|
|
719
|
-
*/
|
|
720
|
-
function launchpadFont(fontId) {
|
|
721
|
-
return fontId === undefined ? pickSplashFont() : splashFontById(fontId);
|
|
722
|
-
}
|
|
723
901
|
/** 最小模式这一屏整体不存在(与 `LogoHeader` 同规则):直接进会话。 */
|
|
724
902
|
export function launchpadVisible() {
|
|
725
903
|
return !isMinimalUiMode();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionSupervisor.d.ts","sourceRoot":"","sources":["../../../src/screens/SessionSupervisor.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiD,MAAM,OAAO,CAAA;AAarE,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAA;AAEpE,OAAO,KAAK,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"SessionSupervisor.d.ts","sourceRoot":"","sources":["../../../src/screens/SessionSupervisor.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiD,MAAM,OAAO,CAAA;AAarE,OAAO,EAAE,YAAY,EAAE,MAAM,uCAAuC,CAAA;AAEpE,OAAO,KAAK,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAA;AAUzH,OAAO,KAAK,EAAqB,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AAC7E,OAAO,KAAK,EAAE,SAAS,IAAI,OAAO,EAAE,MAAM,iCAAiC,CAAA;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kCAAkC,CAAA;AAMpE,OAAO,EAA2L,mBAAmB,EAAsD,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AACpU,OAAO,EAAE,mBAAmB,EAAE,CAAA;AAE9B;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,OAAO,EACP,IAAI,EACJ,OAAO,EACP,aAAa,EACb,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,SAAS,EACT,WAAW,GACZ,EAAE;IACD,OAAO,EAAE,OAAO,CAAA;IAChB,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAA;IACZ,kDAAkD;IAClD,OAAO,IAAI,IAAI,CAAA;IACf,qEAAqE;IACrE,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IACvD,wDAAwD;IACxD,YAAY,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC1D,6EAA6E;IAC7E,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAClD;;;;OAIG;IACH,QAAQ,EAAE,uBAAuB,GAAG,IAAI,CAAA;IACxC,SAAS,CAAC,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,uBAAuB,GAAG,IAAI,CAAA;IACnF;;;;OAIG;IACH,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAAA;CAChE,GAAG,KAAK,CAAC,SAAS,CAu2BlB;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOzF;AAED,+EAA+E;AAC/E,OAAO,EAAE,YAAY,EAAE,CAAA"}
|