@deepseek-harness-tui/dsh-tui 0.14.1 → 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
|
@@ -1,12 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The backend-neutral channel core: one composition for every
|
|
3
|
+
* `AgentSession`, whatever backend serves it.
|
|
4
|
+
*
|
|
5
|
+
* `createCoreChannel` acquires, in one owner transaction, the binding, the
|
|
6
|
+
* host seams and decision gate, the emitter, notifications, context
|
|
7
|
+
* bookkeeping, the IDE selection link, the composer and input pipeline (FIFO,
|
|
8
|
+
* `tui/input` decisions, `@` mentions, staged images, IDE selection) ending in
|
|
9
|
+
* `session.submit`, the shared projector feed, session switching (`/new`),
|
|
10
|
+
* local actions, files, reports and the capability-backed actions, and builds
|
|
11
|
+
* the common half of the `ChannelState`. Nothing is subscribed and no action
|
|
12
|
+
* is callable yet.
|
|
13
|
+
*
|
|
14
|
+
* An extension (the DSH extensions, `../extensions.ts`) then `extend`s the
|
|
15
|
+
* core: hooks into the feed and the emitter, state fields it serves, and its
|
|
16
|
+
* action delegates on top of the core's. `start()` installs the action table
|
|
17
|
+
* once, starts the runtime subscriptions, binds the session, and hands the
|
|
18
|
+
* channel lifetime to Cordis. A session no extension claims is served by the
|
|
19
|
+
* core alone: every action is backed by a capability, the core, or explicitly
|
|
20
|
+
* unavailable.
|
|
21
|
+
*/
|
|
1
22
|
import { markChannelReadDirty } from '../../../adapter/channel/read-view.js';
|
|
2
23
|
import { createActivityProjection } from '../../../channel/activity.js';
|
|
3
24
|
import { channelCapabilities } from '../../../channel/capabilities.js';
|
|
4
25
|
import { anchoredRow, prependHistoryRows, projectHistorySlice, restoreFoldedRows } from '../../../channel/history-restore.js';
|
|
5
26
|
import { t } from '../../../i18n.js';
|
|
6
27
|
import { WORKING_GATE_NOTICES } from '../../../commands.js';
|
|
28
|
+
import { markBoot } from '../../../utils/bootTrace.js';
|
|
7
29
|
import { logForDebugging } from '../../../utils/debug.js';
|
|
8
30
|
import { DEFAULT_SESSION_MODES } from '../../../sessionModes.js';
|
|
9
|
-
import { resolveContextOccupancy } from '../../context-occupancy.js';
|
|
31
|
+
import { resolveContextBreakdown, resolveContextOccupancy } from '../../context-occupancy.js';
|
|
10
32
|
import { IdeChannel, ideLockDir } from '../../ide-channel.js';
|
|
11
33
|
import { createChannelActionMethods, createChannelActionReadiness } from '../action-readiness.js';
|
|
12
34
|
import { createAttachedContextRegistry } from '../attached-context.js';
|
|
@@ -23,7 +45,7 @@ import { registerChannelOwner } from '../owner.js';
|
|
|
23
45
|
import { unavailablePermissionPresetSnapshot } from '../permissions.js';
|
|
24
46
|
import { createPreferences } from '../preferences.js';
|
|
25
47
|
import { createSettingsHosts } from '../settings-host.js';
|
|
26
|
-
import { createInitialChannelView } from '../state.js';
|
|
48
|
+
import { StartupOpenError, createInitialChannelView } from '../state.js';
|
|
27
49
|
import { createCapabilityDelegates, installChannelActions } from './actions.js';
|
|
28
50
|
import { createBindingFeed } from './binding-feed.js';
|
|
29
51
|
import { createCoreFiles, NO_COMPLETION_CATALOG } from './files.js';
|
|
@@ -53,6 +75,9 @@ export function createCoreChannel(ctx, initialSession, options, owner) {
|
|
|
53
75
|
const host = resolveCoreHost(ctx, owner);
|
|
54
76
|
let extension = {};
|
|
55
77
|
let started = false;
|
|
78
|
+
/** One hook may extend the core during the first adoption; extend throws otherwise. */
|
|
79
|
+
let adoptHook;
|
|
80
|
+
let adoptWindow = false;
|
|
56
81
|
const emitter = createChannelEmitter(() => state, () => extension.flushDeferred?.() ?? false, {
|
|
57
82
|
// Folding drops a row's full text on the promise that `loadOlder`
|
|
58
83
|
// restores it; without a history slicer every row stays whole. A
|
|
@@ -205,7 +230,11 @@ export function createCoreChannel(ctx, initialSession, options, owner) {
|
|
|
205
230
|
localImageStore ??= createLocalImageStore(() => binding.session.capabilities.images?.limits ?? NO_IMAGES);
|
|
206
231
|
return localImageStore;
|
|
207
232
|
};
|
|
208
|
-
const composer = createComposerImages(ctx, owner, {
|
|
233
|
+
const composer = createComposerImages(ctx, owner, {
|
|
234
|
+
generation: () => state.agentBindingGeneration,
|
|
235
|
+
sessionId: () => state.agentId,
|
|
236
|
+
localImages,
|
|
237
|
+
});
|
|
209
238
|
const files = createCoreFiles(ctx, {
|
|
210
239
|
owner,
|
|
211
240
|
binding,
|
|
@@ -227,7 +256,6 @@ export function createCoreChannel(ctx, initialSession, options, owner) {
|
|
|
227
256
|
* matched by its call id, not by this.
|
|
228
257
|
*/
|
|
229
258
|
let agentMessageIntents = 0;
|
|
230
|
-
const messaging = binding.session.capabilities.subagents?.messaging;
|
|
231
259
|
const actionReadiness = createChannelActionReadiness();
|
|
232
260
|
const getReadyActions = () => {
|
|
233
261
|
owner.assertActive();
|
|
@@ -267,6 +295,73 @@ export function createCoreChannel(ctx, initialSession, options, owner) {
|
|
|
267
295
|
// and never holding a non-DSH session's id): `read` is a cached lookup, so
|
|
268
296
|
// the accessor on the state below stays cheap.
|
|
269
297
|
const contextPressure = options.contextPressure;
|
|
298
|
+
/**
|
|
299
|
+
* The subagent control for `session`: interrupt always; the transcript read
|
|
300
|
+
* and messaging only while the session serves them. Rebuilt per adoption.
|
|
301
|
+
*/
|
|
302
|
+
const subagentControlFor = (session) => {
|
|
303
|
+
const messaging = session.capabilities.subagents?.messaging;
|
|
304
|
+
return {
|
|
305
|
+
interrupt: agentId => {
|
|
306
|
+
const control = binding.session.capabilities.subagents;
|
|
307
|
+
if (control === undefined) {
|
|
308
|
+
unavailable('agents');
|
|
309
|
+
return false;
|
|
310
|
+
}
|
|
311
|
+
const subagent = activity.subagent(agentId);
|
|
312
|
+
if (subagent === undefined || (subagent.status !== 'running' && subagent.status !== 'starting'))
|
|
313
|
+
return false;
|
|
314
|
+
void control.interrupt(subagent.agentId).then(stopped => {
|
|
315
|
+
if (!stopped && owner.current())
|
|
316
|
+
notify(t('subagent-interrupt-failed', { id: subagent.agentId.slice(0, 8) }), { color: 'warning', timeoutMs: 6000 });
|
|
317
|
+
}, (error) => {
|
|
318
|
+
if (owner.current())
|
|
319
|
+
notify(t('capability-failed', { name: 'agents', err: error instanceof Error ? error.message : String(error) }), { color: 'error', timeoutMs: 8000 });
|
|
320
|
+
});
|
|
321
|
+
return true;
|
|
322
|
+
},
|
|
323
|
+
// The child transcript source exists only while the bound session's
|
|
324
|
+
// `subagents.history` capability does (Claude's store read; the DSH
|
|
325
|
+
// extension replaces this whole control with one backed by its own
|
|
326
|
+
// child transcript reader). The detail scene renders a Transcript page
|
|
327
|
+
// only when this method exists. A failed read resolves null, so the
|
|
328
|
+
// scene shows "unavailable" rather than an empty transcript.
|
|
329
|
+
...(session.capabilities.subagents?.history === undefined ? {} : {
|
|
330
|
+
history: (agentId, window) => {
|
|
331
|
+
const history = binding.session.capabilities.subagents?.history;
|
|
332
|
+
if (history === undefined)
|
|
333
|
+
return Promise.resolve(null);
|
|
334
|
+
return history(agentId, window).catch(() => null);
|
|
335
|
+
},
|
|
336
|
+
}),
|
|
337
|
+
/** Parent-mediated messaging uses the session's submit pipeline. */
|
|
338
|
+
...(messaging === undefined ? {} : {
|
|
339
|
+
message: {
|
|
340
|
+
via: messaging,
|
|
341
|
+
steer: false,
|
|
342
|
+
listTargets: () => Promise.resolve(state.subagents.map(sub => ({
|
|
343
|
+
agentId: sub.agentId,
|
|
344
|
+
...(sub.sessionId === undefined ? {} : { sessionId: sub.sessionId }),
|
|
345
|
+
label: sub.description,
|
|
346
|
+
...(sub.mode === undefined ? {} : { mode: sub.mode }),
|
|
347
|
+
status: sub.status,
|
|
348
|
+
}))),
|
|
349
|
+
submit: (input) => {
|
|
350
|
+
const text = input.text.trim();
|
|
351
|
+
if (text === '')
|
|
352
|
+
return Promise.resolve({ ok: false, reason: 'failed', message: 'empty text' });
|
|
353
|
+
const name = input.targetName !== undefined && input.targetName.trim() !== '' ? input.targetName.trim() : input.targetId;
|
|
354
|
+
const tool = binding.session.capabilities.subagents?.messagingTool;
|
|
355
|
+
const envelope = tool === undefined ? t('agent-message-envelope', { name, id: input.targetId, text }) : t('agent-message-native-envelope', { tool, name, id: input.targetId, text });
|
|
356
|
+
const intentId = `agent-message-${(agentMessageIntents += 1)}`;
|
|
357
|
+
dispatchUserText(envelope, 'followup', [], undefined);
|
|
358
|
+
return Promise.resolve({ ok: true, intentId, state: 'issued' });
|
|
359
|
+
},
|
|
360
|
+
messages: () => activity.agentMessages(),
|
|
361
|
+
},
|
|
362
|
+
}),
|
|
363
|
+
};
|
|
364
|
+
};
|
|
270
365
|
const state = {
|
|
271
366
|
...createInputActions(() => state, () => binding.session, owner, inputConvergence, composer, (text, placement, images) => dispatchUserText(text, placement, images), (command, includeInContext) => getReadyActions().runLocalCommand(command, includeInContext), sessionId => { extension.touchSession?.(sessionId); }),
|
|
272
367
|
subscribe: emitter.subscribe,
|
|
@@ -303,6 +398,15 @@ export function createCoreChannel(ctx, initialSession, options, owner) {
|
|
|
303
398
|
get contextOccupancy() {
|
|
304
399
|
return resolveContextOccupancy(contextPressure?.read(state.sessionId), state.lastUsage, state.contextWindow, feed.projector.contextUsage());
|
|
305
400
|
},
|
|
401
|
+
/**
|
|
402
|
+
* The composition half of the same meter unit, derived on read for the same
|
|
403
|
+
* reason (and refreshed by the same change feed). `undefined` on a harness
|
|
404
|
+
* whose meter publishes no `contextBreakdown`: the bar then weights its
|
|
405
|
+
* fills with this channel's own per-content-type estimates alone.
|
|
406
|
+
*/
|
|
407
|
+
get contextBreakdown() {
|
|
408
|
+
return resolveContextBreakdown(contextPressure?.readBreakdown?.(state.sessionId));
|
|
409
|
+
},
|
|
306
410
|
commandList: localCommandsFor(initialCapabilities.commands),
|
|
307
411
|
backendCapabilities: initialCapabilities,
|
|
308
412
|
capabilities: () => extension.agentCapabilities?.() ?? sessionAgentCapabilities(),
|
|
@@ -507,66 +611,7 @@ export function createCoreChannel(ctx, initialSession, options, owner) {
|
|
|
507
611
|
};
|
|
508
612
|
},
|
|
509
613
|
...actionMethods,
|
|
510
|
-
subagentControl:
|
|
511
|
-
interrupt: agentId => {
|
|
512
|
-
const control = binding.session.capabilities.subagents;
|
|
513
|
-
if (control === undefined) {
|
|
514
|
-
unavailable('agents');
|
|
515
|
-
return false;
|
|
516
|
-
}
|
|
517
|
-
const subagent = activity.subagent(agentId);
|
|
518
|
-
if (subagent === undefined || (subagent.status !== 'running' && subagent.status !== 'starting'))
|
|
519
|
-
return false;
|
|
520
|
-
void control.interrupt(subagent.agentId).then(stopped => {
|
|
521
|
-
if (!stopped && owner.current())
|
|
522
|
-
notify(t('subagent-interrupt-failed', { id: subagent.agentId.slice(0, 8) }), { color: 'warning', timeoutMs: 6000 });
|
|
523
|
-
}, (error) => {
|
|
524
|
-
if (owner.current())
|
|
525
|
-
notify(t('capability-failed', { name: 'agents', err: error instanceof Error ? error.message : String(error) }), { color: 'error', timeoutMs: 8000 });
|
|
526
|
-
});
|
|
527
|
-
return true;
|
|
528
|
-
},
|
|
529
|
-
// The child transcript source exists only while the bound session's
|
|
530
|
-
// `subagents.history` capability does (Claude's store read; the DSH
|
|
531
|
-
// extension replaces this whole control with one backed by its own
|
|
532
|
-
// child transcript reader). The detail scene renders a Transcript page
|
|
533
|
-
// only when this method exists. A failed read resolves null, so the
|
|
534
|
-
// scene shows "unavailable" rather than an empty transcript.
|
|
535
|
-
...(binding.session.capabilities.subagents?.history === undefined ? {} : {
|
|
536
|
-
history: (agentId, window) => {
|
|
537
|
-
const history = binding.session.capabilities.subagents?.history;
|
|
538
|
-
if (history === undefined)
|
|
539
|
-
return Promise.resolve(null);
|
|
540
|
-
return history(agentId, window).catch(() => null);
|
|
541
|
-
},
|
|
542
|
-
}),
|
|
543
|
-
/** Parent-mediated messaging uses the session's submit pipeline. */
|
|
544
|
-
...(messaging === undefined ? {} : {
|
|
545
|
-
message: {
|
|
546
|
-
via: messaging,
|
|
547
|
-
steer: false,
|
|
548
|
-
listTargets: () => Promise.resolve(state.subagents.map(sub => ({
|
|
549
|
-
agentId: sub.agentId,
|
|
550
|
-
...(sub.sessionId === undefined ? {} : { sessionId: sub.sessionId }),
|
|
551
|
-
label: sub.description,
|
|
552
|
-
...(sub.mode === undefined ? {} : { mode: sub.mode }),
|
|
553
|
-
status: sub.status,
|
|
554
|
-
}))),
|
|
555
|
-
submit: (input) => {
|
|
556
|
-
const text = input.text.trim();
|
|
557
|
-
if (text === '')
|
|
558
|
-
return Promise.resolve({ ok: false, reason: 'failed', message: 'empty text' });
|
|
559
|
-
const name = input.targetName !== undefined && input.targetName.trim() !== '' ? input.targetName.trim() : input.targetId;
|
|
560
|
-
const tool = binding.session.capabilities.subagents?.messagingTool;
|
|
561
|
-
const envelope = tool === undefined ? t('agent-message-envelope', { name, id: input.targetId, text }) : t('agent-message-native-envelope', { tool, name, id: input.targetId, text });
|
|
562
|
-
const intentId = `agent-message-${(agentMessageIntents += 1)}`;
|
|
563
|
-
dispatchUserText(envelope, 'followup', [], undefined);
|
|
564
|
-
return Promise.resolve({ ok: true, intentId, state: 'issued' });
|
|
565
|
-
},
|
|
566
|
-
messages: () => activity.agentMessages(),
|
|
567
|
-
},
|
|
568
|
-
}),
|
|
569
|
-
},
|
|
614
|
+
subagentControl: subagentControlFor(initialSession),
|
|
570
615
|
jobControl: {
|
|
571
616
|
kill: id => {
|
|
572
617
|
const tasks = binding.session.capabilities.tasks;
|
|
@@ -683,7 +728,8 @@ export function createCoreChannel(ctx, initialSession, options, owner) {
|
|
|
683
728
|
trajectory: { observe: (event, replaying) => { if (trajectoryOwned())
|
|
684
729
|
agentTrajectory.observe(event, replaying); } },
|
|
685
730
|
checkContextWarning, notify: (...args) => notify(...args),
|
|
686
|
-
|
|
731
|
+
// Read per event (late row).
|
|
732
|
+
get renderer() { return host.rendererRuntime; },
|
|
687
733
|
selectionAttached: messageId => selectionAttachments.take(messageId),
|
|
688
734
|
},
|
|
689
735
|
resetTrajectory: () => { if (trajectoryOwned())
|
|
@@ -769,10 +815,15 @@ export function createCoreChannel(ctx, initialSession, options, owner) {
|
|
|
769
815
|
state,
|
|
770
816
|
rowIds,
|
|
771
817
|
resetProjection: feed.resetProjection,
|
|
772
|
-
resetActivity:
|
|
818
|
+
resetActivity: candidate => {
|
|
819
|
+
activity.reset();
|
|
820
|
+
if (activityOwned())
|
|
821
|
+
state.subagentControl = subagentControlFor(candidate);
|
|
822
|
+
},
|
|
773
823
|
snapshotOf,
|
|
774
824
|
resetControls: controls.reset,
|
|
775
825
|
bind: seed => feed.bind(seed),
|
|
826
|
+
attach: candidate => { attachOnAdopt(candidate); },
|
|
776
827
|
bound: () => binding.session,
|
|
777
828
|
mounts: SESSION_MOUNT_LEDGER,
|
|
778
829
|
...(options.sessionPrefs === undefined ? {} : { touch: (sessionId) => options.sessionPrefs?.touch(sessionId) }),
|
|
@@ -798,7 +849,7 @@ export function createCoreChannel(ctx, initialSession, options, owner) {
|
|
|
798
849
|
binding,
|
|
799
850
|
state,
|
|
800
851
|
rowIds,
|
|
801
|
-
workspace
|
|
852
|
+
get workspace() { return host.workspaceService; },
|
|
802
853
|
resetProjection: feed.resetProjection,
|
|
803
854
|
notify,
|
|
804
855
|
unavailable,
|
|
@@ -821,15 +872,196 @@ export function createCoreChannel(ctx, initialSession, options, owner) {
|
|
|
821
872
|
},
|
|
822
873
|
});
|
|
823
874
|
const reports = createCoreReports({ owner, binding, state: () => state });
|
|
875
|
+
/**
|
|
876
|
+
* Adopt the startup session once its open settles (`options.startup`). No
|
|
877
|
+
* switch: no veto, no switched notice, and the rows stay. A failed open
|
|
878
|
+
* leaves the placeholder bound and `ready` false, with a notice row
|
|
879
|
+
* pointing at `/new` (or a `StartupOpenError`'s own hint).
|
|
880
|
+
*/
|
|
881
|
+
const adoptStartup = (startup) => {
|
|
882
|
+
const adoption = binding.capture();
|
|
883
|
+
let history = [];
|
|
884
|
+
let route;
|
|
885
|
+
let agentPreset;
|
|
886
|
+
const backend = state.backendCapabilities.backendLabel;
|
|
887
|
+
// The shared open-failure funnel: also the tail segment's, so a throw
|
|
888
|
+
// after a successful open can never escape as an unhandled rejection.
|
|
889
|
+
const onOpenFailed = (error) => {
|
|
890
|
+
// Released, or a `/new` / `/resume` replaced the placeholder first.
|
|
891
|
+
// A tail throw released the channel (binding.adopt's rollback), so it
|
|
892
|
+
// takes this same early exit.
|
|
893
|
+
if (!owner.current() || binding.session !== adoption.session)
|
|
894
|
+
return;
|
|
895
|
+
logForDebugging(`channel: startup session failed to open (${error instanceof Error ? error.message : String(error)})`);
|
|
896
|
+
// A notice is one line: the reason's first line, and the way out on a
|
|
897
|
+
// row of its own so a long reason cannot crowd it out.
|
|
898
|
+
const reason = (error instanceof Error ? error.message : String(error)).split('\n')[0];
|
|
899
|
+
state.startupFailure = reason;
|
|
900
|
+
state.rows.push({ id: rowIds.value++, kind: 'notice', text: t('startup-open-failed', { backend, err: reason }) });
|
|
901
|
+
state.rows.push({ id: rowIds.value++, kind: 'notice', text: error instanceof StartupOpenError ? error.hint : t('startup-open-failed-hint') });
|
|
902
|
+
state.emit();
|
|
903
|
+
};
|
|
904
|
+
void binding.prepare(adoption, async () => {
|
|
905
|
+
const opened = await startup;
|
|
906
|
+
history = opened.history;
|
|
907
|
+
route = opened.route;
|
|
908
|
+
agentPreset = opened.agentPreset;
|
|
909
|
+
return opened.session;
|
|
910
|
+
}).then(async (candidate) => {
|
|
911
|
+
try {
|
|
912
|
+
const previousCwd = state.cwd;
|
|
913
|
+
binding.adopt(candidate, adoption, (_previous, disposePrevious) => {
|
|
914
|
+
feed.resetProjection();
|
|
915
|
+
if (activityOwned()) {
|
|
916
|
+
activity.reset();
|
|
917
|
+
state.subagentControl = subagentControlFor(candidate);
|
|
918
|
+
}
|
|
919
|
+
state.agentId = candidate.ref.sessionId;
|
|
920
|
+
state.sessionId = candidate.ref.sessionId;
|
|
921
|
+
// A resumed session runs where it was recorded, known only now.
|
|
922
|
+
state.cwd = candidate.cwd;
|
|
923
|
+
state.displayCwd = host.workspaceService.describe(candidate.cwd).description ?? candidate.cwd;
|
|
924
|
+
state.backendCapabilities = snapshotOf(candidate);
|
|
925
|
+
// Route and preset the opener resolved only now; written before the
|
|
926
|
+
// extensions attach, so theirs win.
|
|
927
|
+
if (route !== undefined) {
|
|
928
|
+
state.provider = route.provider;
|
|
929
|
+
state.model = route.model;
|
|
930
|
+
}
|
|
931
|
+
if (agentPreset !== undefined)
|
|
932
|
+
state.agentPreset = agentPreset;
|
|
933
|
+
controls.reset();
|
|
934
|
+
attachOnAdopt(candidate);
|
|
935
|
+
state.ready = true;
|
|
936
|
+
state.startupFailure = undefined;
|
|
937
|
+
feed.bind(history);
|
|
938
|
+
disposePrevious('dispose');
|
|
939
|
+
state.emit();
|
|
940
|
+
});
|
|
941
|
+
if (state.cwd !== previousCwd)
|
|
942
|
+
resetIdeSelection();
|
|
943
|
+
refreshGitBranch();
|
|
944
|
+
scheduleSessionPreload();
|
|
945
|
+
markBoot('startup-adopted');
|
|
946
|
+
}
|
|
947
|
+
catch (error) {
|
|
948
|
+
// The tail segment runs after the open succeeded; its throws take
|
|
949
|
+
// the open-failure funnel below instead of an unhandled rejection.
|
|
950
|
+
// binding.adopt() already revoked a failed transaction (the candidate
|
|
951
|
+
// is closed, the channel released); a throw from before that point
|
|
952
|
+
// still owns a prepared candidate, so hand it back for closing.
|
|
953
|
+
logForDebugging(`channel: startup adoption tail failed (${error instanceof Error ? error.message : String(error)})`);
|
|
954
|
+
try {
|
|
955
|
+
await binding.abandon(candidate);
|
|
956
|
+
}
|
|
957
|
+
catch { /* a failed close must not mask the setup error */ }
|
|
958
|
+
throw error;
|
|
959
|
+
}
|
|
960
|
+
}).catch(onOpenFailed);
|
|
961
|
+
};
|
|
824
962
|
/** A fresh session in another directory (the session browser's new-session
|
|
825
963
|
* card, `/workspace`'s handoff): the core `/new` with a target. */
|
|
826
964
|
const workspaces = createWorkspaceActions(state, {
|
|
827
965
|
owner,
|
|
828
|
-
service
|
|
966
|
+
get service() { return host.workspaceService; },
|
|
829
967
|
newSession: target => sessionSwitch.newSession(target),
|
|
830
968
|
refreshGitBranch: () => refreshGitBranch(),
|
|
831
969
|
notify,
|
|
832
970
|
});
|
|
971
|
+
/** The actions the core serves itself (read at install time: the
|
|
972
|
+
* completion catalog is the extension's). */
|
|
973
|
+
const coreDelegates = () => ({
|
|
974
|
+
commandCompletions: files.commandCompletions(extension.completions ?? NO_COMPLETION_CATALOG),
|
|
975
|
+
runLocalCommand: local.runLocalCommand,
|
|
976
|
+
loadOlder: local.loadOlder,
|
|
977
|
+
clear: () => {
|
|
978
|
+
local.clear();
|
|
979
|
+
clearedGeneration = state.agentBindingGeneration;
|
|
980
|
+
},
|
|
981
|
+
setActivityFrames: local.setActivityFrames,
|
|
982
|
+
pushLocal: local.pushLocal,
|
|
983
|
+
listFileCandidates: files.listFileCandidates,
|
|
984
|
+
listFiles: files.listFiles,
|
|
985
|
+
doctorInfo: reports.doctorInfo,
|
|
986
|
+
exportSession: reports.exportSession,
|
|
987
|
+
newSession: () => sessionSwitch.newSession(),
|
|
988
|
+
// `/agents` from the event-driven roster (the DSH extension serves its own).
|
|
989
|
+
mcpStatus: () => {
|
|
990
|
+
if (binding.session.capabilities.mcp === undefined)
|
|
991
|
+
return unavailableLines('mcp');
|
|
992
|
+
const fence = mcpFence();
|
|
993
|
+
return controls.mcpReport(fence.session, fence.current) ?? [t('backend-mcp-loading')];
|
|
994
|
+
},
|
|
995
|
+
listSubagents: () => Promise.resolve(binding.session.capabilities.subagents === undefined ? unavailableLines('agents') : activity.listLines()),
|
|
996
|
+
resolveWorkspace: workspaces.resolveWorkspace,
|
|
997
|
+
switchWorkspace: workspaces.switchWorkspace,
|
|
998
|
+
...sessionActions.delegates,
|
|
999
|
+
});
|
|
1000
|
+
let listedFrom;
|
|
1001
|
+
let listedCwd;
|
|
1002
|
+
const installActions = (replace) => {
|
|
1003
|
+
const listSessions = extension.delegates?.listSessions ?? sessionActions.delegates.listSessions;
|
|
1004
|
+
installChannelActions(actionReadiness, {
|
|
1005
|
+
unavailable,
|
|
1006
|
+
unavailableLines,
|
|
1007
|
+
capability: createCapabilityDelegates({
|
|
1008
|
+
owner,
|
|
1009
|
+
session: () => binding.session,
|
|
1010
|
+
state: () => state,
|
|
1011
|
+
notify,
|
|
1012
|
+
unavailable,
|
|
1013
|
+
unavailableLines,
|
|
1014
|
+
guarded,
|
|
1015
|
+
}),
|
|
1016
|
+
core: coreDelegates(),
|
|
1017
|
+
extension: {
|
|
1018
|
+
...extension.delegates,
|
|
1019
|
+
listSessions: (onEnriched, onPartial) => {
|
|
1020
|
+
listedFrom = listSessions;
|
|
1021
|
+
listedCwd = state.cwd;
|
|
1022
|
+
return listSessions(onEnriched, onPartial);
|
|
1023
|
+
},
|
|
1024
|
+
},
|
|
1025
|
+
}, replace);
|
|
1026
|
+
};
|
|
1027
|
+
/** The first adoption can install DSH listing actions or change cwd. */
|
|
1028
|
+
const scheduleSessionPreload = () => {
|
|
1029
|
+
if (options.sessionCatalog === undefined && extension.delegates?.listSessions === undefined)
|
|
1030
|
+
return;
|
|
1031
|
+
const preload = setImmediate(() => {
|
|
1032
|
+
releasePreload();
|
|
1033
|
+
const listSessions = extension.delegates?.listSessions ?? sessionActions.delegates.listSessions;
|
|
1034
|
+
if (!owner.current() || (listedFrom === listSessions && listedCwd === state.cwd))
|
|
1035
|
+
return;
|
|
1036
|
+
void state.listSessions().catch(error => {
|
|
1037
|
+
logForDebugging(`session list preload failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
1038
|
+
});
|
|
1039
|
+
});
|
|
1040
|
+
const releasePreload = owner.own(() => clearImmediate(preload));
|
|
1041
|
+
};
|
|
1042
|
+
/** Runs `adoptHook` after the core wrote the session's state, before the
|
|
1043
|
+
* bind; a throw fails the adoption transaction. */
|
|
1044
|
+
const attachOnAdopt = (candidate) => {
|
|
1045
|
+
const hook = adoptHook;
|
|
1046
|
+
if (hook === undefined)
|
|
1047
|
+
return;
|
|
1048
|
+
adoptHook = undefined;
|
|
1049
|
+
const before = extension;
|
|
1050
|
+
adoptWindow = true;
|
|
1051
|
+
try {
|
|
1052
|
+
hook(candidate);
|
|
1053
|
+
}
|
|
1054
|
+
finally {
|
|
1055
|
+
adoptWindow = false;
|
|
1056
|
+
}
|
|
1057
|
+
if (extension === before)
|
|
1058
|
+
return;
|
|
1059
|
+
installActions(true);
|
|
1060
|
+
if (extension.start !== before.start) {
|
|
1061
|
+
extension.start?.before?.();
|
|
1062
|
+
extension.start?.after?.();
|
|
1063
|
+
}
|
|
1064
|
+
};
|
|
833
1065
|
const refreshGitBranch = createGitBranchRefresher(ctx, {
|
|
834
1066
|
owner,
|
|
835
1067
|
state,
|
|
@@ -854,9 +1086,9 @@ export function createCoreChannel(ctx, initialSession, options, owner) {
|
|
|
854
1086
|
reports,
|
|
855
1087
|
resetIdeSelection,
|
|
856
1088
|
refreshGitBranch,
|
|
857
|
-
/** Merge an extension's contributions (before `start
|
|
1089
|
+
/** Merge an extension's contributions (before `start`, or in the adoption window). */
|
|
858
1090
|
extend(next) {
|
|
859
|
-
if (started)
|
|
1091
|
+
if (started && !adoptWindow)
|
|
860
1092
|
throw new Error('dsh-tui: Channel extensions must attach before the channel starts');
|
|
861
1093
|
extension = {
|
|
862
1094
|
...extension,
|
|
@@ -864,67 +1096,34 @@ export function createCoreChannel(ctx, initialSession, options, owner) {
|
|
|
864
1096
|
delegates: { ...extension.delegates, ...next.delegates },
|
|
865
1097
|
};
|
|
866
1098
|
},
|
|
1099
|
+
/** Register (before `start`) the adoption-window hook (see `adoptHook`). */
|
|
1100
|
+
extendOnAdopt(hook) {
|
|
1101
|
+
if (started)
|
|
1102
|
+
throw new Error('dsh-tui: Channel adoption extensions must register before the channel starts');
|
|
1103
|
+
if (adoptHook !== undefined)
|
|
1104
|
+
throw new Error('dsh-tui: Channel adoption extension already registered');
|
|
1105
|
+
adoptHook = hook;
|
|
1106
|
+
},
|
|
867
1107
|
/** Install the actions, start the runtime, bind the session. */
|
|
868
1108
|
start() {
|
|
869
1109
|
if (started)
|
|
870
1110
|
throw new Error('dsh-tui: Channel already started');
|
|
871
1111
|
started = true;
|
|
872
|
-
|
|
873
|
-
commandCompletions: files.commandCompletions(extension.completions ?? NO_COMPLETION_CATALOG),
|
|
874
|
-
runLocalCommand: local.runLocalCommand,
|
|
875
|
-
loadOlder: local.loadOlder,
|
|
876
|
-
clear: () => {
|
|
877
|
-
local.clear();
|
|
878
|
-
clearedGeneration = state.agentBindingGeneration;
|
|
879
|
-
},
|
|
880
|
-
setActivityFrames: local.setActivityFrames,
|
|
881
|
-
pushLocal: local.pushLocal,
|
|
882
|
-
listFileCandidates: files.listFileCandidates,
|
|
883
|
-
listFiles: files.listFiles,
|
|
884
|
-
doctorInfo: reports.doctorInfo,
|
|
885
|
-
exportSession: reports.exportSession,
|
|
886
|
-
newSession: () => sessionSwitch.newSession(),
|
|
887
|
-
// `/agents` from the event-driven roster (the DSH extension serves its own).
|
|
888
|
-
mcpStatus: () => {
|
|
889
|
-
if (binding.session.capabilities.mcp === undefined)
|
|
890
|
-
return unavailableLines('mcp');
|
|
891
|
-
const fence = mcpFence();
|
|
892
|
-
return controls.mcpReport(fence.session, fence.current) ?? [t('backend-mcp-loading')];
|
|
893
|
-
},
|
|
894
|
-
listSubagents: () => Promise.resolve(binding.session.capabilities.subagents === undefined ? unavailableLines('agents') : activity.listLines()),
|
|
895
|
-
resolveWorkspace: workspaces.resolveWorkspace,
|
|
896
|
-
switchWorkspace: workspaces.switchWorkspace,
|
|
897
|
-
...sessionActions.delegates,
|
|
898
|
-
};
|
|
899
|
-
installChannelActions(actionReadiness, {
|
|
900
|
-
unavailable,
|
|
901
|
-
unavailableLines,
|
|
902
|
-
capability: createCapabilityDelegates({
|
|
903
|
-
owner,
|
|
904
|
-
session: () => binding.session,
|
|
905
|
-
state: () => state,
|
|
906
|
-
notify,
|
|
907
|
-
unavailable,
|
|
908
|
-
unavailableLines,
|
|
909
|
-
guarded,
|
|
910
|
-
}),
|
|
911
|
-
core,
|
|
912
|
-
extension: extension.delegates,
|
|
913
|
-
});
|
|
1112
|
+
installActions(false);
|
|
914
1113
|
// Everything below can synchronously invoke external callbacks. It runs
|
|
915
1114
|
// only after the owner is registered and the complete delegate surface
|
|
916
1115
|
// is installed; the outer construction transaction rolls every step back.
|
|
917
1116
|
extension.start?.before?.();
|
|
918
|
-
startHostSubscriptions(host, owner, state);
|
|
1117
|
+
startHostSubscriptions(host, owner, state, ctx);
|
|
919
1118
|
extension.start?.after?.();
|
|
920
1119
|
// The startup session's history, read ahead of construction, paints
|
|
921
1120
|
// before any live event (an extension owning the facts replays its own).
|
|
922
1121
|
feed.bind(extension.bind?.ownsSessionFacts === true ? undefined : options.initialHistory);
|
|
923
|
-
|
|
1122
|
+
scheduleSessionPreload();
|
|
1123
|
+
// The host owns the Channel lifetime. Rebinding handles the common case;
|
|
924
1124
|
// this effect closes the final timer and releases the DecisionEvents
|
|
925
|
-
// dispatch-topology marker when the
|
|
926
|
-
|
|
927
|
-
effect?.call(ctx, () => () => {
|
|
1125
|
+
// dispatch-topology marker when the host unloads the Channel.
|
|
1126
|
+
ctx.effect?.(() => () => {
|
|
928
1127
|
// The context owns the complete Channel lifetime. Keep emitter and
|
|
929
1128
|
// IDE-link teardown in the same finally funnel.
|
|
930
1129
|
state.releaseContributions();
|
|
@@ -932,6 +1131,8 @@ export function createCoreChannel(ctx, initialSession, options, owner) {
|
|
|
932
1131
|
refreshGitBranch();
|
|
933
1132
|
if (extension.bind?.ownsSessionFacts !== true)
|
|
934
1133
|
state.emit();
|
|
1134
|
+
if (options.startup !== undefined)
|
|
1135
|
+
adoptStartup(options.startup);
|
|
935
1136
|
return state;
|
|
936
1137
|
},
|
|
937
1138
|
};
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* own commands join the command list itself (core/session-controls.ts), so
|
|
8
8
|
* completion lists them like any other entry.
|
|
9
9
|
*/
|
|
10
|
-
import type {
|
|
10
|
+
import type { ServiceLookup } from '../channel-host.js';
|
|
11
11
|
import type { CommandCompletionNode } from '../../../commands.js';
|
|
12
12
|
import type { ChannelBinding } from '../binding.js';
|
|
13
13
|
import type { ChannelOwner } from '../owner.js';
|
|
@@ -32,10 +32,15 @@ export interface CompletionCatalog {
|
|
|
32
32
|
}[];
|
|
33
33
|
warmEffortLevels(): void;
|
|
34
34
|
};
|
|
35
|
+
/** `/plugin info <name>`: the bundles the profile added (absent = no service). */
|
|
36
|
+
plugin?: {
|
|
37
|
+
warmPluginNames(): void;
|
|
38
|
+
pluginNames(): readonly CommandCompletionNode[];
|
|
39
|
+
};
|
|
35
40
|
}
|
|
36
41
|
/** No argument catalogs: the tree offers its static nodes only. */
|
|
37
42
|
export declare const NO_COMPLETION_CATALOG: CompletionCatalog;
|
|
38
|
-
export declare function createCoreFiles(ctx:
|
|
43
|
+
export declare function createCoreFiles(ctx: ServiceLookup, deps: {
|
|
39
44
|
owner: Pick<ChannelOwner, 'current' | 'signal'>;
|
|
40
45
|
binding: Pick<ChannelBinding, 'capture' | 'isCurrent'>;
|
|
41
46
|
state: () => ChannelState;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../../../src/dsh-adapter/channel/core/files.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../../../src/dsh-adapter/channel/core/files.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AACvD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAKnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAC1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAEzC,mEAAmE;AACnE,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,IAAI,SAAS;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IACnG,KAAK,EAAE;QACL,cAAc,IAAI,IAAI,CAAA;QACtB,UAAU,IAAI,SAAS,qBAAqB,EAAE,CAAA;QAC9C,iBAAiB,IAAI,IAAI,CAAA;QACzB,aAAa,IAAI,SAAS;YAAE,EAAE,EAAE,MAAM,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,SAAS,CAAC,EAAE,OAAO,CAAA;SAAE,EAAE,CAAA;QACpG,gBAAgB,IAAI,IAAI,CAAA;KACzB,CAAA;IACD,kFAAkF;IAClF,MAAM,CAAC,EAAE;QACP,eAAe,IAAI,IAAI,CAAA;QACvB,WAAW,IAAI,SAAS,qBAAqB,EAAE,CAAA;KAChD,CAAA;CACF;AAED,mEAAmE;AACnE,eAAO,MAAM,qBAAqB,EAAE,iBASnC,CAAA;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,aAAa,EAAE,IAAI,EAAE;IACxD,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,QAAQ,CAAC,CAAA;IAC/C,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,GAAG,WAAW,CAAC,CAAA;IACtD,KAAK,EAAE,MAAM,YAAY,CAAA;IACzB,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,GAAG,cAAc,CAAC,CAAA;IAClD,sEAAsE;IACtE,aAAa,IAAI,OAAO,CAAA;IACxB,gEAAgE;IAChE,UAAU,CAAC,IAAI,SAAS,MAAM,EAAE,GAAG,SAAS,CAAA;CAC7C;sBAIwB,SAAS,GAAG,SAAS;;cA5C9C,CAAA;YAAmB,CAAC;;;IAyDhB,qEAAqE;gCACzC,iBAAiB,GAAG,YAAY,CAAC,oBAAoB,CAAC;EAYrF"}
|
|
@@ -39,6 +39,7 @@ export function createCoreFiles(ctx, deps) {
|
|
|
39
39
|
workspaceCommands: catalog.workspaceCommands,
|
|
40
40
|
...(deps.mcpServers === undefined ? {} : { mcpServers: deps.mcpServers }),
|
|
41
41
|
model: catalog.model,
|
|
42
|
+
...(catalog.plugin === undefined ? {} : { plugin: catalog.plugin }),
|
|
42
43
|
});
|
|
43
44
|
},
|
|
44
45
|
};
|
|
@@ -6,7 +6,6 @@
|
|
|
6
6
|
* changes, and the git-branch breadcrumb. Each lookup degrades when its row
|
|
7
7
|
* is not mounted, whatever backend serves the session.
|
|
8
8
|
*/
|
|
9
|
-
import type { Context } from '@deepseek-ai/cordis';
|
|
10
9
|
import type { AdapterRuntimeOptions } from '../../../adapter/kernel/runtime.js';
|
|
11
10
|
import { readGrantStore } from '../../../adapter/standard/grants.js';
|
|
12
11
|
import { getHostCommandTrees } from '../../command-trees.js';
|
|
@@ -15,9 +14,13 @@ import { getHostSceneRuntime } from '../../scenes.js';
|
|
|
15
14
|
import { getHostSettingsSections } from '../../settings-sections.js';
|
|
16
15
|
import { getHostThemes } from '../../themes.js';
|
|
17
16
|
import { createLocalWorkspaceRuntime, getHostWorkspaceRuntime } from '../../workspaces.js';
|
|
17
|
+
import type { ChannelHost, ServiceLookup } from '../channel-host.js';
|
|
18
18
|
import type { ChannelOwner } from '../owner.js';
|
|
19
19
|
import type { ChannelState } from '../types.js';
|
|
20
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* The host services a channel composition reads, looked up per read: the
|
|
22
|
+
* profile's `tui*` rows can compose after the mount.
|
|
23
|
+
*/
|
|
21
24
|
export interface CoreHost {
|
|
22
25
|
readonly adapterRuntime: AdapterRuntimeOptions;
|
|
23
26
|
readonly themeHost: ReturnType<typeof getHostThemes>;
|
|
@@ -36,16 +39,19 @@ export interface CoreHost {
|
|
|
36
39
|
* is effectful state, so it is owned at acquisition: a later construction
|
|
37
40
|
* failure rolls it back.
|
|
38
41
|
*/
|
|
39
|
-
export declare function resolveCoreHost(ctx:
|
|
40
|
-
/**
|
|
41
|
-
|
|
42
|
+
export declare function resolveCoreHost(ctx: ChannelHost, owner: Pick<ChannelOwner, 'own'>): CoreHost;
|
|
43
|
+
/**
|
|
44
|
+
* Re-render on settings-section and plugin-scene changes (owner-scoped),
|
|
45
|
+
* re-binding when the host reports a service change.
|
|
46
|
+
*/
|
|
47
|
+
export declare function startHostSubscriptions(host: Pick<CoreHost, 'settingsSectionsRuntime' | 'sceneRuntime'>, owner: Pick<ChannelOwner, 'own' | 'current'>, state: Pick<ChannelState, 'pluginScene' | 'emit'>, services?: Pick<ChannelHost, 'watchServices'>): void;
|
|
42
48
|
/**
|
|
43
49
|
* Statusline breadcrumb: the current git branch of the session cwd
|
|
44
50
|
* (best-effort, through the host `shell` service). Re-run when an adoption
|
|
45
51
|
* lands on a different cwd (/resume, /workspace, issue #96) so the
|
|
46
52
|
* breadcrumb never shows the previous workspace's branch.
|
|
47
53
|
*/
|
|
48
|
-
export declare function createGitBranchRefresher(ctx:
|
|
54
|
+
export declare function createGitBranchRefresher(ctx: ServiceLookup, deps: {
|
|
49
55
|
owner: Pick<ChannelOwner, 'current'>;
|
|
50
56
|
state: Pick<ChannelState, 'cwd' | 'gitBranch' | 'emit'>;
|
|
51
57
|
/** Record the resolved branch against the bound session (the session
|