@deepseek-harness-tui/dsh-tui 0.14.0 → 0.15.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 +73 -14
- 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 +34 -7
- package/guide/dsh-tui-guide/codex-backend.md +17 -2
- package/guide/dsh-tui-guide/configuration.en.md +129 -16
- package/guide/dsh-tui-guide/configuration.md +110 -14
- package/guide/dsh-tui-guide/interaction.en.md +57 -24
- package/guide/dsh-tui-guide/interaction.md +42 -19
- package/guide/dsh-tui-guide/plugins.en.md +36 -3
- package/guide/dsh-tui-guide/plugins.md +21 -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 +51 -20
- package/guide/dsh-tui-guide/user-guide.md +41 -21
- package/lib/settings.json +103 -9
- 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 +3 -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-settings.d.ts +9 -0
- package/lib/types/adapter/ports/channel-settings.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-ui.d.ts +50 -12
- package/lib/types/adapter/ports/channel-ui.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-view.d.ts +21 -0
- package/lib/types/adapter/ports/channel-view.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/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/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/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 +66 -34
- 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.js +4 -4
- 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/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/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 +5 -0
- package/lib/types/commands.d.ts.map +1 -1
- package/lib/types/commands.js +47 -8
- 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 +20 -6
- 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.map +1 -1
- package/lib/types/components/LogoV2.js +9 -6
- 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 +18 -5
- 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/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 +58 -118
- 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/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.map +1 -1
- package/lib/types/components/launchpadLayout.js +2 -2
- 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/SidePanelColumn.d.ts +1 -1
- package/lib/types/components/sidePanel/SidePanelColumn.d.ts.map +1 -1
- package/lib/types/components/sidePanel/SidePanelColumn.js +2 -1
- 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/btw/BtwComposer.d.ts +4 -2
- package/lib/types/components/sidePanel/btw/BtwComposer.d.ts.map +1 -1
- package/lib/types/components/sidePanel/btw/BtwComposer.js +12 -4
- package/lib/types/components/sidePanel/btw/BtwPanelAdapter.d.ts.map +1 -1
- package/lib/types/components/sidePanel/btw/BtwPanelAdapter.js +59 -15
- package/lib/types/components/sidePanel/btw/BtwThreadScene.d.ts.map +1 -1
- package/lib/types/components/sidePanel/btw/BtwThreadScene.js +4 -2
- package/lib/types/components/sidePanel/btw/BtwThreadView.d.ts +1 -1
- package/lib/types/components/sidePanel/btw/BtwThreadView.d.ts.map +1 -1
- package/lib/types/components/sidePanel/btw/BtwThreadView.js +12 -6
- package/lib/types/components/sidePanel/companion/CompanionPanel.js +2 -2
- package/lib/types/components/sidePanel/types.d.ts +1 -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/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/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 +20 -0
- package/lib/types/dsh-adapter/admission-loader.d.ts.map +1 -0
- package/lib/types/dsh-adapter/admission-loader.js +256 -0
- package/lib/types/dsh-adapter/backend/translate.d.ts.map +1 -1
- package/lib/types/dsh-adapter/backend/translate.js +3 -0
- 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-contribution.d.ts +26 -0
- package/lib/types/dsh-adapter/backend-contribution.d.ts.map +1 -0
- package/lib/types/dsh-adapter/backend-contribution.js +37 -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 +285 -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 +92 -46
- 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 +16 -3
- package/lib/types/dsh-adapter/channel/binding-events.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/binding-events.js +18 -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 +16 -0
- 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 +7 -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 +3 -0
- 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 +318 -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 +41 -22
- 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 +1 -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 +138 -8
- 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 +40 -28
- 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/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 +56 -27
- package/lib/types/dsh-adapter/channel/session-resume.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-resume.js +15 -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 +2 -2
- package/lib/types/dsh-adapter/channel/settings-host.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/settings-host.js +1 -0
- package/lib/types/dsh-adapter/channel/state.d.ts +37 -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 +66 -6
- 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 +1 -1
- package/lib/types/dsh-adapter/channel/transcript.js +1 -1
- 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/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 +1 -1
- package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
- package/lib/types/dsh-adapter/contract.js +15 -0
- package/lib/types/dsh-adapter/entry-slot.d.ts +36 -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 +221 -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 +53 -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 +76 -0
- package/lib/types/dsh-adapter/host-dsh.d.ts +106 -0
- package/lib/types/dsh-adapter/host-dsh.d.ts.map +1 -0
- package/lib/types/dsh-adapter/host-dsh.js +466 -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 +228 -0
- package/lib/types/dsh-adapter/index.d.ts +55 -18
- package/lib/types/dsh-adapter/index.d.ts.map +1 -1
- package/lib/types/dsh-adapter/index.js +59 -7
- 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/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/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 +35 -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 +21 -0
- package/lib/types/dsh-adapter/plugin-declaration.d.ts.map +1 -0
- package/lib/types/dsh-adapter/plugin-declaration.js +53 -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-manager.d.ts +68 -0
- package/lib/types/dsh-adapter/plugin-manager.d.ts.map +1 -0
- package/lib/types/dsh-adapter/plugin-manager.js +51 -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 +870 -233
- package/lib/types/dsh-adapter/plugins-info.d.ts +44 -8
- package/lib/types/dsh-adapter/plugins-info.d.ts.map +1 -1
- package/lib/types/dsh-adapter/plugins-info.js +354 -34
- 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-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/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 +110 -8
- 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/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 +363 -1432
- package/lib/types/i18n.d.ts.map +1 -1
- package/lib/types/i18n.js +155 -385
- 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/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 +129 -16
- 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/permissionPrefs.d.ts +34 -0
- package/lib/types/permissionPrefs.d.ts.map +1 -0
- package/lib/types/permissionPrefs.js +61 -0
- package/lib/types/plugin-host.d.ts +1 -0
- package/lib/types/plugin-host.d.ts.map +1 -1
- 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 +22 -15
- package/lib/types/screens/Chat.d.ts.map +1 -1
- package/lib/types/screens/Chat.js +442 -272
- package/lib/types/screens/Launchpad.d.ts +27 -17
- package/lib/types/screens/Launchpad.d.ts.map +1 -1
- package/lib/types/screens/Launchpad.js +241 -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 +6 -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/chatOverlay.d.ts +11 -4
- 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/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/package.json +36 -6
- package/presets/winbash.mjs +716 -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
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
import { isBackendIdSyntax } from '../agent/backend-manifest.js';
|
|
2
|
+
import { BACKEND_CAPABILITY_NAMES } from '../adapter/spec/backend-capabilities.js';
|
|
3
|
+
import { EXPECTED_PERMISSIONS } from '../adapter/spec/protocol-constants.js';
|
|
4
|
+
import { validateBackendSpec } from '../adapter/spec/tui-contributions.js';
|
|
5
|
+
import { cleanRenderText } from '../channel/sanitize.js';
|
|
6
|
+
import { BUILTIN_BACKEND_IDS } from '../kernelPrefs.js';
|
|
7
|
+
import { logForDebugging } from '../utils/debug.js';
|
|
8
|
+
import { backendAdmission } from './backend-admission.js';
|
|
9
|
+
import { backendContributionOf } from './backend-contribution.js';
|
|
10
|
+
import { GENERATED_BACKENDS } from './backends.generated.js';
|
|
11
|
+
import { installExecutor } from './install/executors.js';
|
|
12
|
+
export { isBackendIdSyntax };
|
|
13
|
+
/**
|
|
14
|
+
* The DSH kernel. In-tree and always available, but **not** an `AgentBackend`:
|
|
15
|
+
* its session is built by `createDshSession()` from the DSH agent, and P0 does
|
|
16
|
+
* not force it into the backend contract just for symmetry (roadmap §7.3).
|
|
17
|
+
* Seeded first, so the picker order stays `dsh, claude, codex, …`.
|
|
18
|
+
*/
|
|
19
|
+
const DSH_MANIFEST = {
|
|
20
|
+
id: 'dsh',
|
|
21
|
+
label: { kind: 'key', key: 'kernel-label-dsh' },
|
|
22
|
+
shortLabel: 'DSH',
|
|
23
|
+
product: 'dsh-core',
|
|
24
|
+
inTree: true,
|
|
25
|
+
alwaysAvailable: true,
|
|
26
|
+
// Not an `AgentBackend`, so it has no optional session surface to declare —
|
|
27
|
+
// stated explicitly rather than left to the projection's default (B-2).
|
|
28
|
+
capabilities: [],
|
|
29
|
+
grants: [],
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* What replaced Stage A's `HOST_INSTALLABLE_BACKEND_ID = 'claude'`: a manifest
|
|
33
|
+
* now *names an executor* (`BackendManifest.install.executor`) and the registry
|
|
34
|
+
* looks the name up in the host's table (`src/dsh-adapter/install/`). An entry is
|
|
35
|
+
* installable exactly when that lookup finds something, so the row that opens a
|
|
36
|
+
* wizard is the row whose own recipe names an executor this host runs — not the
|
|
37
|
+
* row that happens to wear the privileged id.
|
|
38
|
+
*
|
|
39
|
+
* A table rather than a static import of one backend's installer, because the
|
|
40
|
+
* discovery this has to survive is the post-mount one: Stage C reads a bundle's
|
|
41
|
+
* contribution after the plugin is mounted (§4.4), and a link-time constant could
|
|
42
|
+
* not be consulted then.
|
|
43
|
+
*
|
|
44
|
+
* An unknown executor is **not** a registration error (§6 item 12): the entry
|
|
45
|
+
* registers with no install surface, and its "not installed" row degrades to
|
|
46
|
+
* detection's own hint instead of growing a button that cannot work. The recipe
|
|
47
|
+
* is therefore validated for *shape* here, never for whether this host likes its
|
|
48
|
+
* value. The strings a plugin declares are also the wizard's render path and (on
|
|
49
|
+
* Windows) a `pnpm add` argument, so admitting a third-party recipe is Stage C/D
|
|
50
|
+
* work — until then a plugin may name only a value of this closed table.
|
|
51
|
+
*/
|
|
52
|
+
const installableOf = (manifest) => manifest.install !== undefined && installExecutor(manifest.install.executor) !== undefined;
|
|
53
|
+
/** Registration order = picker order (`listBackends`). */
|
|
54
|
+
const entries = new Map();
|
|
55
|
+
/**
|
|
56
|
+
* Cell budget for a plugin-declared name. The picker pane is at most ~72 cells
|
|
57
|
+
* wide and the launchpad plate far narrower, so this only bounds what a
|
|
58
|
+
* misbehaving manifest can put on the render path (and in the notices written to
|
|
59
|
+
* stdout) — layout truncation stays the renderer's job.
|
|
60
|
+
*/
|
|
61
|
+
const LABEL_MAX_CELLS = 48;
|
|
62
|
+
/** Close hooks of the entries whose module was actually imported (D4). */
|
|
63
|
+
const loadedUnloads = new Map();
|
|
64
|
+
/**
|
|
65
|
+
* What this host knows when admitting a backend declaration (B-2). The
|
|
66
|
+
* vocabularies come from the spec plane (`src/adapter/spec/**`), the granted set
|
|
67
|
+
* is empty until a backend grant flow exists (C stage) — which is why every
|
|
68
|
+
* in-tree manifest declares `grants: []` rather than a permission nobody could
|
|
69
|
+
* grant (D-3).
|
|
70
|
+
*/
|
|
71
|
+
const HOST_ADMISSION_FACTS = {
|
|
72
|
+
reservedIds: new Set(BUILTIN_BACKEND_IDS),
|
|
73
|
+
capabilityNames: new Set(BACKEND_CAPABILITY_NAMES),
|
|
74
|
+
permissionNames: new Set(EXPECTED_PERMISSIONS.map(permission => permission.name)),
|
|
75
|
+
granted: new Set(),
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* The same facts for **this host's own seed**: a built-in manifest legitimately
|
|
79
|
+
* wears a built-in id, so the reserved set is the one rule that flips. Everything
|
|
80
|
+
* else (the capability and permission vocabularies) applies to a seed exactly as
|
|
81
|
+
* it does to a contribution — and the admission verdict is still recorded, which
|
|
82
|
+
* is what makes the dogfood check in `verify-backend-contribution.ts` meaningful.
|
|
83
|
+
*/
|
|
84
|
+
const SEED_ADMISSION_FACTS = { ...HOST_ADMISSION_FACTS, reservedIds: new Set() };
|
|
85
|
+
const admissionFactsFor = (manifest) => manifest.inTree ? SEED_ADMISSION_FACTS : HOST_ADMISSION_FACTS;
|
|
86
|
+
/**
|
|
87
|
+
* Add one entry. The built-in seeds register themselves below; the plugin
|
|
88
|
+
* discovery of Stage C is the intended second caller, which is why the checks
|
|
89
|
+
* are loud rather than lenient: a bad manifest must fail at registration, not
|
|
90
|
+
* paint a wrong row.
|
|
91
|
+
*/
|
|
92
|
+
export function registerBackend(entry) {
|
|
93
|
+
const { manifest } = entry;
|
|
94
|
+
const where = `dsh-tui: backend "${manifest.id}"`;
|
|
95
|
+
if (!isBackendIdSyntax(manifest.id)) {
|
|
96
|
+
throw new Error(`${where} has an invalid id (lowercase letters, digits and dashes, at most 32 characters)`);
|
|
97
|
+
}
|
|
98
|
+
if (entries.has(manifest.id))
|
|
99
|
+
throw new Error(`${where} is already registered`);
|
|
100
|
+
if (!manifest.inTree && BUILTIN_BACKEND_IDS.includes(manifest.id)) {
|
|
101
|
+
// `dsh` refs serialize without a prefix (`formatSessionRef`), so a plugin
|
|
102
|
+
// wearing that id would collide with first-party references.
|
|
103
|
+
throw new Error(`${where} is a reserved built-in id`);
|
|
104
|
+
}
|
|
105
|
+
if (!manifest.inTree && manifest.label.kind === 'key') {
|
|
106
|
+
// Otherwise a plugin could claim a first-party name: `t()` returns the text
|
|
107
|
+
// of an existing key (`src/i18n.ts`), so the row would read "DeepSeek Harness".
|
|
108
|
+
throw new Error(`${where} is not in-tree and may not use a host label key; declare { kind: 'literal', text }`);
|
|
109
|
+
}
|
|
110
|
+
if (!manifest.inTree && manifest.alwaysAvailable === true) {
|
|
111
|
+
throw new Error(`${where} is not in-tree and may not be always-available`);
|
|
112
|
+
}
|
|
113
|
+
if (!manifest.inTree && manifest.nativeKey !== undefined) {
|
|
114
|
+
throw new Error(`${where} is not in-tree and may not declare a native channel`);
|
|
115
|
+
}
|
|
116
|
+
if (manifest.alwaysAvailable === true && entry.load !== undefined) {
|
|
117
|
+
throw new Error(`${where} is always-available and must not have a loader (it is not an AgentBackend)`);
|
|
118
|
+
}
|
|
119
|
+
// Shape only: what the recipe names is the host's business, and a value it does
|
|
120
|
+
// not implement means "no install surface", never a refused registration.
|
|
121
|
+
const install = manifest.install;
|
|
122
|
+
if (install !== undefined && ![install.executor, install.specifier, install.version].every(field => typeof field === 'string' && field !== '')) {
|
|
123
|
+
throw new Error(`${where} declares an install recipe without a non-empty executor, specifier and version`);
|
|
124
|
+
}
|
|
125
|
+
// The contribution family gate (B-2). Order matters: project the in-tree
|
|
126
|
+
// superset down to the public declaration, validate that declaration against the
|
|
127
|
+
// family's own definition (the same validator every other host of this protocol
|
|
128
|
+
// runs), then decide the half only this host can answer — capability and
|
|
129
|
+
// permission vocabularies. A refusal here is a build-time error and must be
|
|
130
|
+
// loud; a `waiting_authorization` entry registers, because the id does exist and
|
|
131
|
+
// the boot, the warnings and the session refs must know it, but it is not
|
|
132
|
+
// offered (see {@link listOfferedBackends}).
|
|
133
|
+
const contribution = validateBackendSpec(backendContributionOf(manifest));
|
|
134
|
+
const verdict = backendAdmission(contribution, admissionFactsFor(manifest));
|
|
135
|
+
if (verdict.decision === 'rejected' || verdict.decision === 'unknown') {
|
|
136
|
+
throw new Error(`${where} was refused at admission: ${verdict.reasonCode}`);
|
|
137
|
+
}
|
|
138
|
+
const admission = verdict;
|
|
139
|
+
// Plugin-declared names are external input: flatten control/escape sequences
|
|
140
|
+
// and cap the width here, once, so the picker, the launchpad plate and the
|
|
141
|
+
// handoff notices all render the same sanitized text (in-tree names are this
|
|
142
|
+
// package's own strings and stay verbatim; `label.key` must stay a raw key).
|
|
143
|
+
const registered = {
|
|
144
|
+
// The one place that may mint a KernelBackendId: the syntax gate above has
|
|
145
|
+
// already run, and membership is this very map.
|
|
146
|
+
id: manifest.id,
|
|
147
|
+
manifest: manifest.inTree ? manifest : {
|
|
148
|
+
...manifest,
|
|
149
|
+
label: manifest.label.kind === 'literal' ? { kind: 'literal', text: cleanRenderText(manifest.label.text, LABEL_MAX_CELLS) } : manifest.label,
|
|
150
|
+
shortLabel: cleanRenderText(manifest.shortLabel, LABEL_MAX_CELLS),
|
|
151
|
+
},
|
|
152
|
+
installable: installableOf(manifest),
|
|
153
|
+
admission,
|
|
154
|
+
...(entry.load === undefined ? {} : { load: entry.load }),
|
|
155
|
+
};
|
|
156
|
+
entries.set(manifest.id, registered);
|
|
157
|
+
}
|
|
158
|
+
// The built-in seed: dsh first, then the generated index in directory-name
|
|
159
|
+
// order (claude, codex, …).
|
|
160
|
+
registerBackend({ manifest: DSH_MANIFEST });
|
|
161
|
+
for (const entry of GENERATED_BACKENDS)
|
|
162
|
+
registerBackend(entry);
|
|
163
|
+
/** Every registered backend, in declaration order (= picker order). */
|
|
164
|
+
export function listBackends() {
|
|
165
|
+
return [...entries.values()];
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* The entries a picker may offer (B-2). A `waiting_authorization` entry is
|
|
169
|
+
* registered — its id exists, the boot's two-stage parse must find it, and its
|
|
170
|
+
* session refs must resolve — but it is not offered: nothing has granted what it
|
|
171
|
+
* declares, so selecting it would open a backend the host cannot describe. Today
|
|
172
|
+
* no entry is in that state (every in-tree manifest declares `grants: []`); the
|
|
173
|
+
* shape exists so the C stage's grant flow has somewhere to land.
|
|
174
|
+
*/
|
|
175
|
+
export function listOfferedBackends() {
|
|
176
|
+
return listBackends().filter(entry => entry.admission.decision !== 'waiting_authorization');
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Read-only probe behind the host descriptor's `Backend` contract (W-2): is the
|
|
180
|
+
* backend admission machine mounted, and does it answer for a *contribution*?
|
|
181
|
+
*
|
|
182
|
+
* The descriptor publishes `tui.dsh/v1alpha1#Backend` only on real probe evidence
|
|
183
|
+
* (`hasVerificationEvidence`, descriptor publication barrier), and "a service row
|
|
184
|
+
* exists" is deliberately not evidence. So this probe walks the same path a
|
|
185
|
+
* third-party declaration takes — build a declaration no host owns, run it
|
|
186
|
+
* through the family validator, then through the host's admission facts — and
|
|
187
|
+
* reports what came back. It registers nothing, imports nothing and writes
|
|
188
|
+
* nothing: an entry that was never loaded is still never loaded.
|
|
189
|
+
*/
|
|
190
|
+
export function probeBackendAdmission() {
|
|
191
|
+
const entries = listBackends();
|
|
192
|
+
const offered = listOfferedBackends().length;
|
|
193
|
+
// A declaration with no reserved id, no capabilities and no grants — the shape
|
|
194
|
+
// the profile's own CLI-shaped fixture uses, so the verdict cannot depend on
|
|
195
|
+
// anything this host happens to have registered.
|
|
196
|
+
const declaration = validateBackendSpec({
|
|
197
|
+
id: 'admission-probe',
|
|
198
|
+
label: { text: 'Admission probe' },
|
|
199
|
+
shortLabel: 'Admission probe',
|
|
200
|
+
capabilities: [],
|
|
201
|
+
grants: [],
|
|
202
|
+
});
|
|
203
|
+
const verdict = backendAdmission(declaration, HOST_ADMISSION_FACTS);
|
|
204
|
+
if (verdict.decision !== 'compatible') {
|
|
205
|
+
throw new Error(`dsh-tui: backend admission machine answered ${verdict.decision}; it cannot admit a contribution`);
|
|
206
|
+
}
|
|
207
|
+
return Object.freeze({ registered: entries.length, offered, verdict: 'compatible' });
|
|
208
|
+
}
|
|
209
|
+
/** One backend, or undefined when no such backend is registered. */
|
|
210
|
+
export function getBackend(id) {
|
|
211
|
+
return entries.get(id);
|
|
212
|
+
}
|
|
213
|
+
/** Whether an untrusted value names a backend this process can actually run.
|
|
214
|
+
* This is the second half of the parse (D1) and the only way to obtain a
|
|
215
|
+
* {@link KernelBackendId} outside `kernelPrefs`' own syntax gate. */
|
|
216
|
+
export function isRegisteredBackend(value) {
|
|
217
|
+
return isBackendIdSyntax(value) && entries.has(value);
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* The backend a configured / remembered value names: trimmed, lowercased, and
|
|
221
|
+
* **registered**. Anything else is undefined, which every caller already treats
|
|
222
|
+
* as "no choice made" (dsh + a warning) — the semantics an unknown value had
|
|
223
|
+
* before the set was open (D1).
|
|
224
|
+
*/
|
|
225
|
+
export function parseBackendChoice(value) {
|
|
226
|
+
if (typeof value !== 'string')
|
|
227
|
+
return undefined;
|
|
228
|
+
const id = value.trim().toLowerCase();
|
|
229
|
+
return isRegisteredBackend(id) ? id : undefined;
|
|
230
|
+
}
|
|
231
|
+
/** The display name of a backend id: its manifest's short brand name, else the
|
|
232
|
+
* id itself (a session from an uninstalled plugin must still render as
|
|
233
|
+
* something). */
|
|
234
|
+
export function backendLabel(id) {
|
|
235
|
+
return getBackend(id)?.manifest.shortLabel ?? id;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Import one registered backend's implementation and book its pool hook.
|
|
239
|
+
*
|
|
240
|
+
* The two failure messages stay distinct (D1): "not registered" means the id was
|
|
241
|
+
* never a choice, "has no loader" means the id names the host's own kernel.
|
|
242
|
+
*/
|
|
243
|
+
export async function loadBackend(id) {
|
|
244
|
+
const entry = entries.get(id);
|
|
245
|
+
if (entry === undefined)
|
|
246
|
+
throw new Error(`dsh-tui: backend "${id}" is not registered`);
|
|
247
|
+
if (entry.load === undefined)
|
|
248
|
+
throw new Error(`dsh-tui: backend "${id}" has no loader (only the DSH kernel is not an AgentBackend)`);
|
|
249
|
+
const module = await entry.load();
|
|
250
|
+
const { backendExport, unloadExport } = entry.manifest;
|
|
251
|
+
if (unloadExport !== undefined) {
|
|
252
|
+
const unload = module[unloadExport];
|
|
253
|
+
if (typeof unload !== 'function') {
|
|
254
|
+
throw new Error(`dsh-tui: backend "${id}" declares unloadExport "${unloadExport}", but its module does not export it`);
|
|
255
|
+
}
|
|
256
|
+
// Overwriting is fine: the same module instance hands back the same hook.
|
|
257
|
+
loadedUnloads.set(id, unload);
|
|
258
|
+
}
|
|
259
|
+
const exportName = backendExport ?? 'backend';
|
|
260
|
+
const backend = module[exportName];
|
|
261
|
+
if (backend === undefined)
|
|
262
|
+
throw new Error(`dsh-tui: backend "${id}" does not export "${exportName}"`);
|
|
263
|
+
return backend;
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Close the pooled, process-wide resources of every backend this process
|
|
267
|
+
* actually loaded, in load order, then forget them (idempotent).
|
|
268
|
+
*
|
|
269
|
+
* Called once from the exit funnel *after* `ctx.root.fiber.dispose()`: closing a
|
|
270
|
+
* pool first would break the in-flight sessions whose calls still hold it
|
|
271
|
+
* (D4-P3). A failing or hanging hook must not block the exit — failures only
|
|
272
|
+
* reach the debug log, and a stuck one is caught by the funnel's existing 5s
|
|
273
|
+
* bound (P4).
|
|
274
|
+
*/
|
|
275
|
+
export async function unloadBackends() {
|
|
276
|
+
for (const [id, unload] of loadedUnloads) {
|
|
277
|
+
try {
|
|
278
|
+
await unload();
|
|
279
|
+
}
|
|
280
|
+
catch (error) {
|
|
281
|
+
logForDebugging(`dsh-tui: backend "${id}" unload failed (${error instanceof Error ? error.message : String(error)})`);
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
loadedUnloads.clear();
|
|
285
|
+
}
|
|
@@ -1,41 +1,78 @@
|
|
|
1
1
|
/** Non-DSH backend loading, detection and startup session ownership. */
|
|
2
2
|
import type { Context } from '@deepseek-ai/cordis';
|
|
3
|
-
import type { AgentBackend, BackendHost, OpenTarget,
|
|
3
|
+
import type { AgentBackend, BackendHost, OpenTarget, SdkInstallSurface } from '../agent/backend.js';
|
|
4
4
|
import type { AgentEvent } from '../agent/events.js';
|
|
5
5
|
import type { AgentSession } from '../agent/session.js';
|
|
6
6
|
import type { KernelStatus } from '../components/kernelCatalog.js';
|
|
7
|
-
/**
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
*
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
7
|
+
/**
|
|
8
|
+
* The install surface of one registered backend (Stage B / B-1): the manifest's
|
|
9
|
+
* recipe with the actions of the executor that recipe names. Undefined when the
|
|
10
|
+
* entry declares no recipe, is not registered, or names an executor this host
|
|
11
|
+
* does not implement — all three are "no install surface", which the picker
|
|
12
|
+
* renders as the dim row's dead-end reason.
|
|
13
|
+
*
|
|
14
|
+
* The manifest says **what** (specifier + pin) and **which executor**; nothing
|
|
15
|
+
* here imports a backend, and nothing is resolved before the user picks a row:
|
|
16
|
+
* the entry behind that row is the one whose recipe gets run (§6 item 12).
|
|
17
|
+
*
|
|
18
|
+
* The id is a plain `string` on purpose, exactly like `getBackend`: membership is
|
|
19
|
+
* half of what this answers, so asking about an id that was never registered is a
|
|
20
|
+
* question with an answer, not a type error.
|
|
21
|
+
*/
|
|
22
|
+
export declare function installSurfaceFor(id: string): SdkInstallSurface | undefined;
|
|
23
|
+
/**
|
|
24
|
+
* The host services of one backend. Built per backend (not once for all of
|
|
25
|
+
* them) because `dataDir` is backend-scoped: `<DATA_DIR>/backends/<id>` is the
|
|
26
|
+
* only place a backend has any business writing, and the id is what names it.
|
|
27
|
+
*
|
|
28
|
+
* `locale` is a live read, not a snapshot: `/lang` switches the whole UI at
|
|
29
|
+
* runtime, and a backend's own text follows it string by string (B-3). The
|
|
30
|
+
* language union is restated by `getLang()`'s own return type, so a new
|
|
31
|
+
* shipped language fails to compile here until the domain contract knows it.
|
|
32
|
+
*/
|
|
33
|
+
export declare function createBackendHost(ctx: Context, backendId: string, cwd: string, stderr: (line: string) => void): Promise<BackendHost>;
|
|
34
|
+
/**
|
|
35
|
+
* What the channel needs about the startup backend before its session exists,
|
|
36
|
+
* plus `start()`, which opens it (mount claim, open, history); the screen
|
|
37
|
+
* mounts in between.
|
|
38
|
+
* A resume failure rejects `start()`; no fresh session is started instead.
|
|
39
|
+
*/
|
|
40
|
+
export declare function prepareBackendStartup(ctx: Context, backend: AgentBackend, input: {
|
|
28
41
|
readonly cwd: string;
|
|
29
42
|
readonly stderr: (line: string) => void;
|
|
30
43
|
readonly configuredSessionId?: string;
|
|
31
44
|
readonly argv: readonly string[];
|
|
32
45
|
}): Promise<{
|
|
33
|
-
|
|
46
|
+
resumedSessionId: string | undefined;
|
|
34
47
|
label: string;
|
|
35
48
|
backendId: string;
|
|
49
|
+
catalog: import("../agent/backend.js").SessionCatalog | undefined;
|
|
50
|
+
sessionPrefs: import("../agent/backend.js").BackendSessionPrefs;
|
|
51
|
+
start: () => Promise<{
|
|
52
|
+
session: AgentSession;
|
|
53
|
+
initialHistory: readonly AgentEvent[];
|
|
54
|
+
}>;
|
|
55
|
+
persisted: (_sessionId: string, rows: readonly {
|
|
56
|
+
readonly kind: string;
|
|
57
|
+
}[]) => boolean;
|
|
58
|
+
resumeCommand: (sessionId: string) => string;
|
|
59
|
+
open: (target: Extract<OpenTarget, {
|
|
60
|
+
readonly kind: "create" | "resume";
|
|
61
|
+
}>) => Promise<AgentSession>;
|
|
62
|
+
}>;
|
|
63
|
+
/** Resume failures abort boot; history is read before the channel's first paint. */
|
|
64
|
+
export declare function openBackendStartup(ctx: Context, backend: AgentBackend, input: Parameters<typeof prepareBackendStartup>[2]): Promise<{
|
|
65
|
+
session: AgentSession;
|
|
36
66
|
initialHistory: readonly AgentEvent[];
|
|
67
|
+
resumedSessionId: string | undefined;
|
|
68
|
+
label: string;
|
|
69
|
+
backendId: string;
|
|
37
70
|
catalog: import("../agent/backend.js").SessionCatalog | undefined;
|
|
38
71
|
sessionPrefs: import("../agent/backend.js").BackendSessionPrefs;
|
|
72
|
+
start: () => Promise<{
|
|
73
|
+
session: AgentSession;
|
|
74
|
+
initialHistory: readonly AgentEvent[];
|
|
75
|
+
}>;
|
|
39
76
|
persisted: (_sessionId: string, rows: readonly {
|
|
40
77
|
readonly kind: string;
|
|
41
78
|
}[]) => boolean;
|
|
@@ -44,6 +81,12 @@ export declare function openBackendStartup(ctx: Context, backend: AgentBackend,
|
|
|
44
81
|
readonly kind: "create" | "resume";
|
|
45
82
|
}>) => Promise<AgentSession>;
|
|
46
83
|
}>;
|
|
47
|
-
/**
|
|
84
|
+
/**
|
|
85
|
+
* Probe every optional backend once (`dsh` is always available and has no
|
|
86
|
+
* loader). Loading goes through the registry, so a probed backend's pool hook is
|
|
87
|
+
* booked just like an opened one's — a backend that builds its pool in `detect()`
|
|
88
|
+
* (the contract does not forbid it) is then still closed at exit. Failures leave
|
|
89
|
+
* their row unavailable instead of failing the probe.
|
|
90
|
+
*/
|
|
48
91
|
export declare function probeKernels(ctx: Context, cwd: string): Promise<Record<string, KernelStatus>>;
|
|
49
92
|
//# sourceMappingURL=backends.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backends.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/backends.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"backends.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/backends.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAElD,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAyB,UAAU,EAAE,iBAAiB,EAAkC,MAAM,qBAAqB,CAAA;AAC1J,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAGvD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAA;AAWlE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAW3E;AAID;;;;;;;;;GASG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,WAAW,CAAC,CAqB1I;AAED;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE;IACtF,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACvC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,MAAM,CAAA;IACrC,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAA;CACjC;;;;;;iBASyB,OAAO,CAAC;QAAE,OAAO,EAAE,YAAY,CAAC;QAAC,cAAc,EAAE,SAAS,UAAU,EAAE,CAAA;KAAE,CAAC;4BA2CvE,MAAM,QAAQ,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE;+BAC/C,MAAM;mBAClB,OAAO,CAAC,UAAU,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAA;KAAE,CAAC;GAG7E;AAED,oFAAoF;AACpF,wBAAsB,kBAAkB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,CAAC,OAAO,qBAAqB,CAAC,CAAC,CAAC,CAAC;aAnDnF,YAAY;oBAAkB,SAAS,UAAU,EAAE;;;;;;iBAAtE,OAAO,CAAC;QAAE,OAAO,EAAE,YAAY,CAAC;QAAC,cAAc,EAAE,SAAS,UAAU,EAAE,CAAA;KAAE,CAAC;4BA2CvE,MAAM,QAAQ,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE;+BAC/C,MAAM;mBAClB,OAAO,CAAC,UAAU,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAA;KAAE,CAAC;GAS7E;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAenG"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GENERATED by scripts/gen-backend-index.mjs — do not edit.
|
|
3
|
+
* 2 backend manifest(s) in directory-name order (picker order):
|
|
4
|
+
* claude, codex.
|
|
5
|
+
*
|
|
6
|
+
* `pnpm compile` refreshes this file: commit the result. It is checked in
|
|
7
|
+
* because the CI test groups restore the build artifact instead of compiling, and
|
|
8
|
+
* the registry imports it from `src/` (see the generator for the whole story).
|
|
9
|
+
*/
|
|
10
|
+
import type { BackendEntry } from '../agent/backend-manifest.js';
|
|
11
|
+
export declare const GENERATED_BACKENDS: readonly BackendEntry[];
|
|
12
|
+
//# sourceMappingURL=backends.generated.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backends.generated.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/backends.generated.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAIhE,eAAO,MAAM,kBAAkB,EAAE,SAAS,YAAY,EAGrD,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { manifest as claudeManifest } from '../backends/claude/manifest.js';
|
|
2
|
+
import { manifest as codexManifest } from '../backends/codex/manifest.js';
|
|
3
|
+
export const GENERATED_BACKENDS = [
|
|
4
|
+
{ manifest: claudeManifest, load: () => import('../backends/claude/index.js') },
|
|
5
|
+
{ manifest: codexManifest, load: () => import('../backends/codex/index.js') },
|
|
6
|
+
];
|
|
@@ -1,40 +1,63 @@
|
|
|
1
|
+
import { join } from 'node:path';
|
|
1
2
|
import { formatSessionRef } from '../agent/refs.js';
|
|
3
|
+
import { getBackend, listBackends, loadBackend } from './backend-registry.js';
|
|
2
4
|
import { reserveMount, reserveNewSession } from '../sessionMounts.js';
|
|
3
5
|
import { resumeTargetFromArgv } from '../sessionHistory.js';
|
|
4
6
|
import { mountFailureText } from '../sessions/resumeFailure.js';
|
|
7
|
+
import { getLang } from '../i18n.js';
|
|
8
|
+
import { installedTuiVersion } from '../update.js';
|
|
5
9
|
import { logForDebugging } from '../utils/debug.js';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
// boot pays nothing for having the wizard's surface at hand.
|
|
9
|
-
import { checkPnpmAvailable, CLAUDE_SDK_SPECIFIER, resolveSdkInstallTarget, startClaudeSdkInstall } from '../backends/claude/install.js';
|
|
10
|
-
import { VALIDATED_SDK_VERSION } from '../backends/claude/contract.js';
|
|
10
|
+
import { DATA_DIR } from '../utils/paths.js';
|
|
11
|
+
import { installExecutor } from './install/executors.js';
|
|
11
12
|
import { fileChannelTokens } from '../backends/shared/channel-tokens.js';
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
/**
|
|
14
|
+
* The install surface of one registered backend (Stage B / B-1): the manifest's
|
|
15
|
+
* recipe with the actions of the executor that recipe names. Undefined when the
|
|
16
|
+
* entry declares no recipe, is not registered, or names an executor this host
|
|
17
|
+
* does not implement — all three are "no install surface", which the picker
|
|
18
|
+
* renders as the dim row's dead-end reason.
|
|
19
|
+
*
|
|
20
|
+
* The manifest says **what** (specifier + pin) and **which executor**; nothing
|
|
21
|
+
* here imports a backend, and nothing is resolved before the user picks a row:
|
|
22
|
+
* the entry behind that row is the one whose recipe gets run (§6 item 12).
|
|
23
|
+
*
|
|
24
|
+
* The id is a plain `string` on purpose, exactly like `getBackend`: membership is
|
|
25
|
+
* half of what this answers, so asking about an id that was never registered is a
|
|
26
|
+
* question with an answer, not a type error.
|
|
27
|
+
*/
|
|
28
|
+
export function installSurfaceFor(id) {
|
|
29
|
+
const recipe = getBackend(id)?.manifest.install;
|
|
30
|
+
if (recipe === undefined)
|
|
31
|
+
return undefined;
|
|
32
|
+
const executor = installExecutor(recipe.executor);
|
|
33
|
+
if (executor === undefined)
|
|
34
|
+
return undefined;
|
|
35
|
+
return {
|
|
36
|
+
...recipe,
|
|
37
|
+
resolveTarget: () => executor.resolveTarget(),
|
|
38
|
+
start: (dir) => executor.start(recipe.specifier, dir),
|
|
39
|
+
preflight: () => executor.preflight(),
|
|
40
|
+
};
|
|
16
41
|
}
|
|
17
|
-
export const BACKEND_LOADERS = {
|
|
18
|
-
claude: () => import('../backends/claude/index.js').then(m => m.claudeBackend),
|
|
19
|
-
codex: () => import('../backends/codex/index.js').then(m => {
|
|
20
|
-
closeCodexHubs = m.closeAllCodexHubs;
|
|
21
|
-
return m.codexBackend;
|
|
22
|
-
}),
|
|
23
|
-
};
|
|
24
|
-
/** The kernel picker's one-click SDK install surface (Chat consumes it as
|
|
25
|
-
* props; the types are the neutral ones from agent/backend.js). */
|
|
26
|
-
export const sdkInstall = {
|
|
27
|
-
resolveTarget: () => resolveSdkInstallTarget(),
|
|
28
|
-
start: (dir) => startClaudeSdkInstall(dir),
|
|
29
|
-
checkPnpm: () => checkPnpmAvailable(),
|
|
30
|
-
pinned: { specifier: CLAUDE_SDK_SPECIFIER, version: VALIDATED_SDK_VERSION },
|
|
31
|
-
};
|
|
32
42
|
const credentialSources = new Map();
|
|
33
|
-
/**
|
|
34
|
-
|
|
43
|
+
/**
|
|
44
|
+
* The host services of one backend. Built per backend (not once for all of
|
|
45
|
+
* them) because `dataDir` is backend-scoped: `<DATA_DIR>/backends/<id>` is the
|
|
46
|
+
* only place a backend has any business writing, and the id is what names it.
|
|
47
|
+
*
|
|
48
|
+
* `locale` is a live read, not a snapshot: `/lang` switches the whole UI at
|
|
49
|
+
* runtime, and a backend's own text follows it string by string (B-3). The
|
|
50
|
+
* language union is restated by `getLang()`'s own return type, so a new
|
|
51
|
+
* shipped language fails to compile here until the domain contract knows it.
|
|
52
|
+
*/
|
|
53
|
+
export async function createBackendHost(ctx, backendId, cwd, stderr) {
|
|
35
54
|
const { createOAuthCredentialSource } = await import('./oauth-credential-source.js');
|
|
55
|
+
const appVersion = installedTuiVersion();
|
|
36
56
|
return {
|
|
37
57
|
cwd,
|
|
58
|
+
dataDir: join(DATA_DIR, 'backends', backendId),
|
|
59
|
+
locale: () => getLang(),
|
|
60
|
+
...(appVersion === undefined ? {} : { appVersion }),
|
|
38
61
|
debug: message => logForDebugging(message),
|
|
39
62
|
warn: message => ctx.logger.warn(message),
|
|
40
63
|
stderr,
|
|
@@ -49,26 +72,37 @@ export async function createBackendHost(ctx, cwd, stderr) {
|
|
|
49
72
|
},
|
|
50
73
|
};
|
|
51
74
|
}
|
|
52
|
-
/**
|
|
53
|
-
|
|
75
|
+
/**
|
|
76
|
+
* What the channel needs about the startup backend before its session exists,
|
|
77
|
+
* plus `start()`, which opens it (mount claim, open, history); the screen
|
|
78
|
+
* mounts in between.
|
|
79
|
+
* A resume failure rejects `start()`; no fresh session is started instead.
|
|
80
|
+
*/
|
|
81
|
+
export async function prepareBackendStartup(ctx, backend, input) {
|
|
54
82
|
const launch = backend.launch;
|
|
55
83
|
if (launch === undefined)
|
|
56
84
|
throw new Error(`dsh-tui: backend "${backend.id}" does not support startup`);
|
|
57
|
-
const host = await createBackendHost(ctx, input.cwd, input.stderr);
|
|
58
|
-
const prefs = launch.sessionPrefs(host
|
|
85
|
+
const host = await createBackendHost(ctx, backend.id, input.cwd, input.stderr);
|
|
86
|
+
const prefs = launch.sessionPrefs(host);
|
|
59
87
|
const requested = (input.configuredSessionId ?? resumeTargetFromArgv(input.argv, () => prefs.lastSession()))?.trim();
|
|
60
88
|
const resumeId = requested === undefined || requested === ''
|
|
61
89
|
? undefined
|
|
62
90
|
: requested.startsWith(`${backend.id}:`) ? requested.slice(backend.id.length + 1) : requested;
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
91
|
+
const start = async () => {
|
|
92
|
+
if (resumeId === undefined) {
|
|
93
|
+
const session = await backend.open({ kind: 'create', cwd: input.cwd }, host);
|
|
94
|
+
const { reservation } = await reserveNewSession(formatSessionRef(session.ref));
|
|
95
|
+
reservation.settle();
|
|
96
|
+
return { session, initialHistory: [] };
|
|
97
|
+
}
|
|
66
98
|
const key = formatSessionRef({ backendId: backend.id, sessionId: resumeId });
|
|
67
99
|
const reserved = await reserveMount(key);
|
|
68
100
|
if (!reserved.ok) {
|
|
69
101
|
throw new Error(`dsh-tui: cannot resume ${backend.descriptor.label} session "${resumeId}": ${mountFailureText(reserved)} — ` +
|
|
70
102
|
'two processes driving one session would interleave its transcript. Close that terminal, or drop --resume to start a fresh session.');
|
|
71
103
|
}
|
|
104
|
+
let session;
|
|
105
|
+
let initialHistory;
|
|
72
106
|
try {
|
|
73
107
|
session = await backend.open({ kind: 'resume', sessionId: resumeId }, host);
|
|
74
108
|
try {
|
|
@@ -88,36 +122,48 @@ export async function openBackendStartup(ctx, backend, input) {
|
|
|
88
122
|
reserved.reservation.settle();
|
|
89
123
|
prefs.setLastSession(resumeId);
|
|
90
124
|
prefs.touch(resumeId);
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
session = await backend.open({ kind: 'create', cwd: input.cwd }, host);
|
|
94
|
-
const { reservation } = await reserveNewSession(formatSessionRef(session.ref));
|
|
95
|
-
reservation.settle();
|
|
96
|
-
}
|
|
125
|
+
return { session, initialHistory };
|
|
126
|
+
};
|
|
97
127
|
return {
|
|
98
|
-
|
|
128
|
+
// Boot and landing-page state use the target this backend actually opened.
|
|
129
|
+
resumedSessionId: resumeId,
|
|
99
130
|
label: backend.descriptor.label,
|
|
100
131
|
backendId: backend.id,
|
|
101
|
-
initialHistory,
|
|
102
132
|
catalog: backend.catalog,
|
|
103
133
|
sessionPrefs: prefs,
|
|
134
|
+
start,
|
|
104
135
|
// A submitted user row means the backend has persisted a resumable transcript.
|
|
105
136
|
persisted: (_sessionId, rows) => rows.some(row => row.kind === 'user'),
|
|
106
137
|
resumeCommand: (sessionId) => launch.resumeCommand(sessionId),
|
|
107
138
|
open: (target) => backend.open(target, target.kind === 'create' ? { ...host, cwd: target.cwd } : host),
|
|
108
139
|
};
|
|
109
140
|
}
|
|
110
|
-
/**
|
|
141
|
+
/** Resume failures abort boot; history is read before the channel's first paint. */
|
|
142
|
+
export async function openBackendStartup(ctx, backend, input) {
|
|
143
|
+
const prepared = await prepareBackendStartup(ctx, backend, input);
|
|
144
|
+
return { ...prepared, ...await prepared.start() };
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Probe every optional backend once (`dsh` is always available and has no
|
|
148
|
+
* loader). Loading goes through the registry, so a probed backend's pool hook is
|
|
149
|
+
* booked just like an opened one's — a backend that builds its pool in `detect()`
|
|
150
|
+
* (the contract does not forbid it) is then still closed at exit. Failures leave
|
|
151
|
+
* their row unavailable instead of failing the probe.
|
|
152
|
+
*/
|
|
111
153
|
export async function probeKernels(ctx, cwd) {
|
|
112
|
-
const host = await createBackendHost(ctx, cwd, () => undefined);
|
|
113
154
|
const statuses = {};
|
|
114
|
-
for (const
|
|
155
|
+
for (const entry of listBackends()) {
|
|
156
|
+
if (entry.load === undefined)
|
|
157
|
+
continue;
|
|
158
|
+
// One host per entry: `dataDir` is backend-scoped, and a probe must not
|
|
159
|
+
// hand a backend a directory that is not its own.
|
|
160
|
+
const host = await createBackendHost(ctx, entry.id, cwd, () => undefined);
|
|
115
161
|
try {
|
|
116
|
-
statuses[id] = await (await
|
|
162
|
+
statuses[entry.id] = await (await loadBackend(entry.id)).detect(host);
|
|
117
163
|
}
|
|
118
164
|
catch (error) {
|
|
119
165
|
host.debug('dsh-tui: kernel probe failed (' + (error instanceof Error ? error.message : String(error)) + ')');
|
|
120
|
-
statuses[id] = { installed: false };
|
|
166
|
+
statuses[entry.id] = { installed: false };
|
|
121
167
|
}
|
|
122
168
|
}
|
|
123
169
|
return statuses;
|
|
@@ -14,6 +14,8 @@ export type ChannelActionMethods = Pick<ChannelState, ChannelActionMethodName>;
|
|
|
14
14
|
export declare function createChannelActionMethods(getReadyActions: () => ChannelActionDelegates): ChannelActionMethods;
|
|
15
15
|
export declare function createChannelActionReadiness(): {
|
|
16
16
|
install(next: ChannelActionDelegates): void;
|
|
17
|
+
/** Replace the installed table (the adoption-window extension, core/compose.ts). */
|
|
18
|
+
reinstall(next: ChannelActionDelegates): void;
|
|
17
19
|
getReadyActions(): ChannelActionDelegates;
|
|
18
20
|
};
|
|
19
21
|
/**
|