@deepseek-harness-tui/dsh-tui 0.14.1 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +163 -17
- package/bin/dsh-tui.js +200 -34
- package/cordis.patch.yml +16 -52
- package/cordis.yml +6 -2
- package/guide/dsh-tui-guide/claude-backend.en.md +44 -7
- package/guide/dsh-tui-guide/claude-backend.md +28 -6
- package/guide/dsh-tui-guide/codex-backend.en.md +47 -10
- package/guide/dsh-tui-guide/codex-backend.md +26 -4
- package/guide/dsh-tui-guide/configuration.en.md +168 -18
- package/guide/dsh-tui-guide/configuration.md +144 -16
- package/guide/dsh-tui-guide/getting-started.en.md +15 -0
- package/guide/dsh-tui-guide/getting-started.md +15 -0
- package/guide/dsh-tui-guide/interaction.en.md +64 -24
- package/guide/dsh-tui-guide/interaction.md +49 -19
- package/guide/dsh-tui-guide/plugins.en.md +97 -3
- package/guide/dsh-tui-guide/plugins.md +55 -2
- package/guide/dsh-tui-guide/themes.en.md +23 -14
- package/guide/dsh-tui-guide/themes.md +19 -12
- package/guide/dsh-tui-guide/user-guide.en.md +53 -21
- package/guide/dsh-tui-guide/user-guide.md +43 -22
- package/lib/settings.json +103 -9
- package/lib/types/adapter/channel/projection.d.ts.map +1 -1
- package/lib/types/adapter/channel/projection.js +1 -0
- package/lib/types/adapter/channel/ui-policy.d.ts +1 -1
- package/lib/types/adapter/channel/ui-policy.d.ts.map +1 -1
- package/lib/types/adapter/channel/ui-policy.js +4 -0
- package/lib/types/adapter/channel/ui.d.ts +2 -0
- package/lib/types/adapter/channel/ui.d.ts.map +1 -1
- package/lib/types/adapter/channel/ui.js +6 -2
- package/lib/types/adapter/kernel/runtime.d.ts.map +1 -1
- package/lib/types/adapter/kernel/runtime.js +2 -0
- package/lib/types/adapter/ports/channel-catalog.d.ts +5 -1
- package/lib/types/adapter/ports/channel-catalog.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-settings.d.ts +14 -3
- package/lib/types/adapter/ports/channel-settings.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-ui.d.ts +56 -12
- package/lib/types/adapter/ports/channel-ui.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-view.d.ts +68 -0
- package/lib/types/adapter/ports/channel-view.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel.d.ts +2 -0
- package/lib/types/adapter/ports/channel.d.ts.map +1 -1
- package/lib/types/adapter/spec/backend-capabilities.d.ts +22 -0
- package/lib/types/adapter/spec/backend-capabilities.d.ts.map +1 -0
- package/lib/types/adapter/spec/backend-capabilities.js +49 -0
- package/lib/types/adapter/spec/protocol-constants.d.ts.map +1 -1
- package/lib/types/adapter/spec/protocol-constants.js +10 -3
- package/lib/types/adapter/spec/tui-contributions.d.ts +3 -0
- package/lib/types/adapter/spec/tui-contributions.d.ts.map +1 -1
- package/lib/types/adapter/spec/tui-contributions.js +7 -0
- package/lib/types/adapter/standard/registry.d.ts +6 -0
- package/lib/types/adapter/standard/registry.d.ts.map +1 -1
- package/lib/types/adapter/standard/registry.js +65 -15
- package/lib/types/adapter/standard/tui-extension.d.ts.map +1 -1
- package/lib/types/adapter/standard/tui-extension.js +7 -1
- package/lib/types/adapter/standard/types.d.ts +10 -1
- package/lib/types/adapter/standard/types.d.ts.map +1 -1
- package/lib/types/adapter/upstream/host-descriptor-driver.d.ts.map +1 -1
- package/lib/types/adapter/upstream/host-descriptor-driver.js +52 -0
- package/lib/types/agent/backend-manifest.d.ts +152 -0
- package/lib/types/agent/backend-manifest.d.ts.map +1 -0
- package/lib/types/agent/backend-manifest.js +14 -0
- package/lib/types/agent/backend.d.ts +71 -5
- package/lib/types/agent/backend.d.ts.map +1 -1
- package/lib/types/agent/capabilities.d.ts +6 -0
- package/lib/types/agent/capabilities.d.ts.map +1 -1
- package/lib/types/agent/events.d.ts +3 -2
- package/lib/types/agent/events.d.ts.map +1 -1
- package/lib/types/agent/index.d.ts +2 -0
- package/lib/types/agent/index.d.ts.map +1 -1
- package/lib/types/agent/refs.d.ts +11 -1
- package/lib/types/agent/refs.d.ts.map +1 -1
- package/lib/types/agent/starting-session.d.ts +4 -0
- package/lib/types/agent/starting-session.d.ts.map +1 -0
- package/lib/types/agent/starting-session.js +19 -0
- package/lib/types/backends/claude/activity.d.ts +1 -1
- package/lib/types/backends/claude/activity.d.ts.map +1 -1
- package/lib/types/backends/claude/activity.js +5 -5
- package/lib/types/backends/claude/auth.d.ts.map +1 -1
- package/lib/types/backends/claude/auth.js +10 -3
- package/lib/types/backends/claude/backend.d.ts.map +1 -1
- package/lib/types/backends/claude/backend.js +103 -29
- package/lib/types/backends/claude/catalog.d.ts +2 -1
- package/lib/types/backends/claude/catalog.d.ts.map +1 -1
- package/lib/types/backends/claude/catalog.js +15 -5
- package/lib/types/backends/claude/channels.d.ts +5 -3
- package/lib/types/backends/claude/channels.d.ts.map +1 -1
- package/lib/types/backends/claude/channels.js +5 -4
- package/lib/types/backends/claude/contract.d.ts +4 -0
- package/lib/types/backends/claude/contract.d.ts.map +1 -1
- package/lib/types/backends/claude/contract.js +4 -0
- package/lib/types/backends/claude/controls.d.ts +4 -0
- package/lib/types/backends/claude/controls.d.ts.map +1 -1
- package/lib/types/backends/claude/controls.js +34 -42
- package/lib/types/backends/claude/dialogs.d.ts +8 -2
- package/lib/types/backends/claude/dialogs.d.ts.map +1 -1
- package/lib/types/backends/claude/dialogs.js +24 -16
- package/lib/types/backends/claude/images.d.ts +1 -1
- package/lib/types/backends/claude/images.d.ts.map +1 -1
- package/lib/types/backends/claude/images.js +7 -7
- package/lib/types/backends/claude/manifest.d.ts +21 -0
- package/lib/types/backends/claude/manifest.d.ts.map +1 -0
- package/lib/types/backends/claude/manifest.js +29 -0
- package/lib/types/backends/claude/older-history.js +2 -2
- package/lib/types/backends/claude/permissions.js +11 -11
- package/lib/types/backends/claude/prefs.d.ts +4 -2
- package/lib/types/backends/claude/prefs.d.ts.map +1 -1
- package/lib/types/backends/claude/prefs.js +4 -3
- package/lib/types/backends/claude/process.d.ts +16 -4
- package/lib/types/backends/claude/process.d.ts.map +1 -1
- package/lib/types/backends/claude/process.js +100 -37
- package/lib/types/backends/claude/send-message.d.ts +1 -1
- package/lib/types/backends/claude/send-message.d.ts.map +1 -1
- package/lib/types/backends/claude/session/auth.js +22 -22
- package/lib/types/backends/claude/session/channels.d.ts +4 -0
- package/lib/types/backends/claude/session/channels.d.ts.map +1 -1
- package/lib/types/backends/claude/session/channels.js +5 -3
- package/lib/types/backends/claude/session/lifecycle.d.ts.map +1 -1
- package/lib/types/backends/claude/session/lifecycle.js +31 -23
- package/lib/types/backends/claude/session/store.js +8 -8
- package/lib/types/backends/claude/session/subagents.js +2 -2
- package/lib/types/backends/claude/session/types.d.ts +7 -0
- package/lib/types/backends/claude/session/types.d.ts.map +1 -1
- package/lib/types/backends/claude/side-query.js +3 -3
- package/lib/types/backends/claude/task-output.js +5 -5
- package/lib/types/backends/claude/text.d.ts +778 -0
- package/lib/types/backends/claude/text.d.ts.map +1 -0
- package/lib/types/backends/claude/text.js +298 -0
- package/lib/types/backends/claude/transcript-file.d.ts +1 -1
- package/lib/types/backends/claude/transcript-file.d.ts.map +1 -1
- package/lib/types/backends/claude/transcript-file.js +4 -4
- package/lib/types/backends/claude/translate/attempts.js +2 -2
- package/lib/types/backends/claude/translate/core.js +3 -3
- package/lib/types/backends/claude/translate/messages.js +4 -4
- package/lib/types/backends/claude/translate/system.js +14 -14
- package/lib/types/backends/claude/translate/tasks.js +2 -2
- package/lib/types/backends/claude/translate/types.d.ts +1 -1
- package/lib/types/backends/claude/translate/types.d.ts.map +1 -1
- package/lib/types/backends/codex/auth/external-tokens.js +16 -16
- package/lib/types/backends/codex/auth/status.js +14 -14
- package/lib/types/backends/codex/backend.d.ts +4 -19
- package/lib/types/backends/codex/backend.d.ts.map +1 -1
- package/lib/types/backends/codex/backend.js +118 -25
- package/lib/types/backends/codex/catalog.d.ts +2 -1
- package/lib/types/backends/codex/catalog.d.ts.map +1 -1
- package/lib/types/backends/codex/catalog.js +63 -18
- package/lib/types/backends/codex/channels.d.ts +6 -3
- package/lib/types/backends/codex/channels.d.ts.map +1 -1
- package/lib/types/backends/codex/channels.js +15 -13
- package/lib/types/backends/codex/contract.d.ts +3 -0
- package/lib/types/backends/codex/contract.d.ts.map +1 -1
- package/lib/types/backends/codex/contract.js +3 -0
- package/lib/types/backends/codex/detect.d.ts.map +1 -1
- package/lib/types/backends/codex/detect.js +9 -6
- package/lib/types/backends/codex/manifest.d.ts +30 -0
- package/lib/types/backends/codex/manifest.d.ts.map +1 -0
- package/lib/types/backends/codex/manifest.js +23 -0
- package/lib/types/backends/codex/prefs.d.ts +4 -2
- package/lib/types/backends/codex/prefs.d.ts.map +1 -1
- package/lib/types/backends/codex/prefs.js +4 -3
- package/lib/types/backends/codex/rpc/hub.js +2 -2
- package/lib/types/backends/codex/session/activity.d.ts +1 -1
- package/lib/types/backends/codex/session/activity.d.ts.map +1 -1
- package/lib/types/backends/codex/session/activity.js +13 -13
- package/lib/types/backends/codex/session/approvals.js +30 -30
- package/lib/types/backends/codex/session/async-questions.d.ts +17 -0
- package/lib/types/backends/codex/session/async-questions.d.ts.map +1 -0
- package/lib/types/backends/codex/session/async-questions.js +89 -0
- package/lib/types/backends/codex/session/commands.d.ts +8 -2
- package/lib/types/backends/codex/session/commands.d.ts.map +1 -1
- package/lib/types/backends/codex/session/commands.js +71 -23
- package/lib/types/backends/codex/session/controls.d.ts +1 -1
- package/lib/types/backends/codex/session/controls.d.ts.map +1 -1
- package/lib/types/backends/codex/session/controls.js +21 -16
- package/lib/types/backends/codex/session/goals.d.ts.map +1 -1
- package/lib/types/backends/codex/session/goals.js +3 -3
- package/lib/types/backends/codex/session/history.js +2 -2
- package/lib/types/backends/codex/session/images.js +8 -8
- package/lib/types/backends/codex/session/input.d.ts +6 -2
- package/lib/types/backends/codex/session/input.d.ts.map +1 -1
- package/lib/types/backends/codex/session/input.js +55 -13
- package/lib/types/backends/codex/session/plan-review.js +6 -6
- package/lib/types/backends/codex/session/session.d.ts.map +1 -1
- package/lib/types/backends/codex/session/session.js +100 -42
- package/lib/types/backends/codex/session/side-query.d.ts.map +1 -1
- package/lib/types/backends/codex/session/side-query.js +27 -9
- package/lib/types/backends/codex/session/state.d.ts +6 -1
- package/lib/types/backends/codex/session/state.d.ts.map +1 -1
- package/lib/types/backends/codex/session/subagents.js +5 -5
- package/lib/types/backends/codex/session/tasks.js +4 -4
- package/lib/types/backends/codex/text.d.ts +933 -0
- package/lib/types/backends/codex/text.d.ts.map +1 -0
- package/lib/types/backends/codex/text.js +313 -0
- package/lib/types/backends/codex/translate/items.d.ts.map +1 -1
- package/lib/types/backends/codex/translate/items.js +7 -5
- package/lib/types/backends/codex/translate/live.d.ts.map +1 -1
- package/lib/types/backends/codex/translate/live.js +11 -8
- package/lib/types/backends/codex/translate/notices.js +10 -10
- package/lib/types/backends/codex/translate/question-reply.d.ts +11 -0
- package/lib/types/backends/codex/translate/question-reply.d.ts.map +1 -0
- package/lib/types/backends/codex/translate/question-reply.js +53 -0
- package/lib/types/backends/shared/channel-slug.d.ts +4 -0
- package/lib/types/backends/shared/channel-slug.d.ts.map +1 -0
- package/lib/types/backends/shared/channel-slug.js +25 -0
- package/lib/types/backends/shared/channel-tokens.d.ts.map +1 -1
- package/lib/types/backends/shared/channel-tokens.js +30 -23
- package/lib/types/{channel → backends/shared}/elicitation.d.ts +78 -21
- package/lib/types/backends/shared/elicitation.d.ts.map +1 -0
- package/lib/types/{channel → backends/shared}/elicitation.js +64 -66
- package/lib/types/backends/shared/image-size.d.ts +33 -0
- package/lib/types/backends/shared/image-size.d.ts.map +1 -0
- package/lib/types/backends/shared/image-size.js +134 -0
- package/lib/types/{utils → backends/shared}/jsonl.d.ts +5 -1
- package/lib/types/backends/shared/jsonl.d.ts.map +1 -0
- package/lib/types/{utils → backends/shared}/jsonl.js +5 -1
- package/lib/types/backends/shared/localized-text.d.ts +30 -0
- package/lib/types/backends/shared/localized-text.d.ts.map +1 -0
- package/lib/types/backends/shared/localized-text.js +24 -0
- package/lib/types/backends/shared/platform-text.d.ts +88 -0
- package/lib/types/backends/shared/platform-text.d.ts.map +1 -0
- package/lib/types/backends/shared/platform-text.js +33 -0
- package/lib/types/branding.d.ts +13 -0
- package/lib/types/branding.d.ts.map +1 -1
- package/lib/types/branding.js +18 -0
- package/lib/types/channel/channel-slug.d.ts +3 -1
- package/lib/types/channel/channel-slug.d.ts.map +1 -1
- package/lib/types/channel/channel-slug.js +3 -1
- package/lib/types/channel/projection.d.ts.map +1 -1
- package/lib/types/channel/projection.js +10 -0
- package/lib/types/channel/sanitize.d.ts +7 -0
- package/lib/types/channel/sanitize.d.ts.map +1 -1
- package/lib/types/channel/sanitize.js +9 -0
- package/lib/types/channel/usage.d.ts.map +1 -1
- package/lib/types/channel/usage.js +5 -0
- package/lib/types/commands.d.ts +15 -0
- package/lib/types/commands.d.ts.map +1 -1
- package/lib/types/commands.js +58 -10
- package/lib/types/components/AgentMessageComposer.d.ts.map +1 -1
- package/lib/types/components/AgentMessageComposer.js +3 -2
- package/lib/types/components/BtwPanel.d.ts.map +1 -1
- package/lib/types/components/BtwPanel.js +4 -2
- package/lib/types/components/Chat/JobCard.js +3 -3
- package/lib/types/components/CommandSuggestions.d.ts.map +1 -1
- package/lib/types/components/CommandSuggestions.js +24 -7
- package/lib/types/components/ContextBarView.d.ts +5 -1
- package/lib/types/components/ContextBarView.d.ts.map +1 -1
- package/lib/types/components/ContextBarView.js +6 -3
- package/lib/types/components/ExtensionDialog.d.ts.map +1 -1
- package/lib/types/components/ExtensionDialog.js +2 -3
- package/lib/types/components/GoalTodoPanel.d.ts.map +1 -1
- package/lib/types/components/GoalTodoPanel.js +14 -3
- package/lib/types/components/InlineMathParagraph.js +1 -1
- package/lib/types/components/KernelPicker.d.ts.map +1 -1
- package/lib/types/components/KernelPicker.js +1 -1
- package/lib/types/components/LogoV2.d.ts +4 -1
- package/lib/types/components/LogoV2.d.ts.map +1 -1
- package/lib/types/components/LogoV2.js +14 -9
- package/lib/types/components/MarkdownTable.d.ts.map +1 -1
- package/lib/types/components/MarkdownTable.js +4 -3
- package/lib/types/components/MessageList.d.ts.map +1 -1
- package/lib/types/components/MessageList.js +109 -15
- package/lib/types/components/ModelPicker.d.ts +24 -31
- package/lib/types/components/ModelPicker.d.ts.map +1 -1
- package/lib/types/components/ModelPicker.js +115 -40
- package/lib/types/components/PermissionsPicker.d.ts +10 -1
- package/lib/types/components/PermissionsPicker.d.ts.map +1 -1
- package/lib/types/components/PermissionsPicker.js +24 -16
- package/lib/types/components/PluginInstallPane.d.ts +21 -0
- package/lib/types/components/PluginInstallPane.d.ts.map +1 -0
- package/lib/types/components/PluginInstallPane.js +84 -0
- package/lib/types/components/PluginManagePane.d.ts +21 -0
- package/lib/types/components/PluginManagePane.d.ts.map +1 -0
- package/lib/types/components/PluginManagePane.js +69 -0
- package/lib/types/components/PromptEditor.d.ts +3 -3
- package/lib/types/components/PromptInput.d.ts +21 -3
- package/lib/types/components/PromptInput.d.ts.map +1 -1
- package/lib/types/components/PromptInput.js +65 -121
- package/lib/types/components/SdkInstallWizard.d.ts +3 -1
- package/lib/types/components/SdkInstallWizard.d.ts.map +1 -1
- package/lib/types/components/SdkInstallWizard.js +8 -1
- package/lib/types/components/SearchBox.d.ts +13 -15
- package/lib/types/components/SearchBox.d.ts.map +1 -1
- package/lib/types/components/SearchBox.js +58 -27
- package/lib/types/components/SubagentCard.d.ts +13 -1
- package/lib/types/components/SubagentCard.d.ts.map +1 -1
- package/lib/types/components/SubagentCard.js +27 -12
- package/lib/types/components/SubagentDashboard.d.ts +8 -1
- package/lib/types/components/SubagentDashboard.d.ts.map +1 -1
- package/lib/types/components/SubagentDashboard.js +58 -16
- package/lib/types/components/ThemePicker.d.ts +1 -1
- package/lib/types/components/ThemePicker.d.ts.map +1 -1
- package/lib/types/components/ThemePicker.js +14 -11
- package/lib/types/components/Tooltip.js +1 -1
- package/lib/types/components/WorkingSpinner.js +1 -1
- package/lib/types/components/WorkspaceFlowPicker.d.ts.map +1 -1
- package/lib/types/components/WorkspaceFlowPicker.js +4 -3
- package/lib/types/components/composerImageTokens.d.ts +24 -0
- package/lib/types/components/composerImageTokens.d.ts.map +1 -0
- package/lib/types/components/composerImageTokens.js +37 -0
- package/lib/types/components/design-system/InputCaret.d.ts +7 -0
- package/lib/types/components/design-system/InputCaret.d.ts.map +1 -0
- package/lib/types/components/design-system/InputCaret.js +9 -0
- package/lib/types/components/design-system/ListItem.d.ts +13 -2
- package/lib/types/components/design-system/ListItem.d.ts.map +1 -1
- package/lib/types/components/design-system/ListItem.js +11 -5
- package/lib/types/components/design-system/ThemeProvider.d.ts.map +1 -1
- package/lib/types/components/design-system/ThemeProvider.js +6 -8
- package/lib/types/components/kernelCatalog.d.ts +55 -11
- package/lib/types/components/kernelCatalog.d.ts.map +1 -1
- package/lib/types/components/kernelCatalog.js +42 -23
- package/lib/types/components/launchpadActions.d.ts +4 -0
- package/lib/types/components/launchpadActions.d.ts.map +1 -1
- package/lib/types/components/launchpadActions.js +5 -4
- package/lib/types/components/launchpadLayout.d.ts +14 -1
- package/lib/types/components/launchpadLayout.d.ts.map +1 -1
- package/lib/types/components/launchpadLayout.js +38 -19
- package/lib/types/components/messages/TeamMessageBubble.d.ts +20 -0
- package/lib/types/components/messages/TeamMessageBubble.d.ts.map +1 -0
- package/lib/types/components/messages/TeamMessageBubble.js +15 -0
- package/lib/types/components/messages/UserPromptMessage.d.ts +4 -3
- package/lib/types/components/messages/UserPromptMessage.d.ts.map +1 -1
- package/lib/types/components/messages/UserPromptMessage.js +4 -3
- package/lib/types/components/questions/AskUserQuestionPanel.d.ts.map +1 -1
- package/lib/types/components/questions/AskUserQuestionPanel.js +8 -3
- package/lib/types/components/questions/PlanReviewPanel.d.ts.map +1 -1
- package/lib/types/components/questions/PlanReviewPanel.js +4 -3
- package/lib/types/components/questions/ProviderModelEditor.d.ts.map +1 -1
- package/lib/types/components/questions/ProviderModelEditor.js +3 -13
- package/lib/types/components/sessions/ForeignSessionRow.d.ts +3 -1
- package/lib/types/components/sessions/ForeignSessionRow.d.ts.map +1 -1
- package/lib/types/components/sessions/ForeignSessionRow.js +5 -2
- package/lib/types/components/sessions/SessionListRow.d.ts +3 -1
- package/lib/types/components/sessions/SessionListRow.d.ts.map +1 -1
- package/lib/types/components/sessions/SessionListRow.js +5 -2
- package/lib/types/components/sidePanel/PanelBar.d.ts +1 -0
- package/lib/types/components/sidePanel/PanelBar.d.ts.map +1 -1
- package/lib/types/components/sidePanel/PanelBar.js +21 -17
- package/lib/types/components/sidePanel/PanelHost.d.ts.map +1 -1
- package/lib/types/components/sidePanel/PanelHost.js +5 -1
- package/lib/types/components/sidePanel/PanelStore.d.ts +8 -0
- package/lib/types/components/sidePanel/PanelStore.d.ts.map +1 -1
- package/lib/types/components/sidePanel/PanelStore.js +11 -0
- package/lib/types/components/sidePanel/SidePanelColumn.d.ts +1 -1
- package/lib/types/components/sidePanel/SidePanelColumn.d.ts.map +1 -1
- package/lib/types/components/sidePanel/SidePanelColumn.js +15 -2
- package/lib/types/components/sidePanel/SidePanelLayout.d.ts +6 -4
- package/lib/types/components/sidePanel/SidePanelLayout.d.ts.map +1 -1
- package/lib/types/components/sidePanel/SidePanelLayout.js +33 -7
- package/lib/types/components/sidePanel/SidePanelRuntimeContext.d.ts +7 -0
- package/lib/types/components/sidePanel/SidePanelRuntimeContext.d.ts.map +1 -1
- package/lib/types/components/sidePanel/SidePanelRuntimeContext.js +4 -0
- package/lib/types/components/sidePanel/btw/BtwComposer.d.ts +7 -2
- package/lib/types/components/sidePanel/btw/BtwComposer.d.ts.map +1 -1
- package/lib/types/components/sidePanel/btw/BtwComposer.js +28 -8
- package/lib/types/components/sidePanel/btw/BtwPanelAdapter.d.ts +2 -1
- package/lib/types/components/sidePanel/btw/BtwPanelAdapter.d.ts.map +1 -1
- package/lib/types/components/sidePanel/btw/BtwPanelAdapter.js +156 -21
- package/lib/types/components/sidePanel/btw/BtwThreadScene.d.ts +6 -2
- package/lib/types/components/sidePanel/btw/BtwThreadScene.d.ts.map +1 -1
- package/lib/types/components/sidePanel/btw/BtwThreadScene.js +64 -16
- package/lib/types/components/sidePanel/btw/BtwThreadView.d.ts +15 -5
- package/lib/types/components/sidePanel/btw/BtwThreadView.d.ts.map +1 -1
- package/lib/types/components/sidePanel/btw/BtwThreadView.js +101 -10
- package/lib/types/components/sidePanel/btw/threads.d.ts +18 -0
- package/lib/types/components/sidePanel/btw/threads.d.ts.map +1 -1
- package/lib/types/components/sidePanel/btw/threads.js +51 -0
- package/lib/types/components/sidePanel/builtinPanels.d.ts.map +1 -1
- package/lib/types/components/sidePanel/builtinPanels.js +5 -1
- package/lib/types/components/sidePanel/companion/CompanionPanel.js +2 -2
- package/lib/types/components/sidePanel/companion/SplashMascot.d.ts +5 -1
- package/lib/types/components/sidePanel/companion/SplashMascot.d.ts.map +1 -1
- package/lib/types/components/sidePanel/companion/SplashMascot.js +19 -4
- package/lib/types/components/sidePanel/companion/skins.d.ts +8 -0
- package/lib/types/components/sidePanel/companion/skins.d.ts.map +1 -1
- package/lib/types/components/sidePanel/companion/skins.js +57 -12
- package/lib/types/components/sidePanel/types.d.ts +7 -1
- package/lib/types/components/sidePanel/types.d.ts.map +1 -1
- package/lib/types/components/sidePanel/useSidePanel.d.ts +2 -0
- package/lib/types/components/sidePanel/useSidePanel.d.ts.map +1 -1
- package/lib/types/components/sidePanel/useSidePanel.js +11 -1
- package/lib/types/components/splashArtRows.d.ts +29 -0
- package/lib/types/components/splashArtRows.d.ts.map +1 -0
- package/lib/types/components/splashArtRows.js +31 -0
- package/lib/types/components/splashFonts.d.ts +24 -1
- package/lib/types/components/splashFonts.d.ts.map +1 -1
- package/lib/types/components/splashFonts.js +40 -5
- package/lib/types/components/teamRoster.d.ts +70 -0
- package/lib/types/components/teamRoster.d.ts.map +1 -0
- package/lib/types/components/teamRoster.js +78 -0
- package/lib/types/components/workspaces/HomeWorkspaceRow.d.ts +3 -1
- package/lib/types/components/workspaces/HomeWorkspaceRow.d.ts.map +1 -1
- package/lib/types/components/workspaces/HomeWorkspaceRow.js +5 -2
- package/lib/types/dsh-adapter/admission-loader.d.ts +102 -0
- package/lib/types/dsh-adapter/admission-loader.d.ts.map +1 -0
- package/lib/types/dsh-adapter/admission-loader.js +301 -0
- package/lib/types/dsh-adapter/agent-view.d.ts.map +1 -1
- package/lib/types/dsh-adapter/agent-view.js +3 -1
- package/lib/types/dsh-adapter/approvals.d.ts +7 -0
- package/lib/types/dsh-adapter/approvals.d.ts.map +1 -1
- package/lib/types/dsh-adapter/approvals.js +45 -1
- package/lib/types/dsh-adapter/backend/translate.d.ts.map +1 -1
- package/lib/types/dsh-adapter/backend/translate.js +71 -8
- package/lib/types/dsh-adapter/backend-admission.d.ts +64 -0
- package/lib/types/dsh-adapter/backend-admission.d.ts.map +1 -0
- package/lib/types/dsh-adapter/backend-admission.js +34 -0
- package/lib/types/dsh-adapter/backend-assembly.d.ts +31 -0
- package/lib/types/dsh-adapter/backend-assembly.d.ts.map +1 -0
- package/lib/types/dsh-adapter/backend-assembly.js +225 -0
- package/lib/types/dsh-adapter/backend-contribution.d.ts +62 -0
- package/lib/types/dsh-adapter/backend-contribution.d.ts.map +1 -0
- package/lib/types/dsh-adapter/backend-contribution.js +78 -0
- package/lib/types/dsh-adapter/backend-registry.d.ts +136 -0
- package/lib/types/dsh-adapter/backend-registry.d.ts.map +1 -0
- package/lib/types/dsh-adapter/backend-registry.js +304 -0
- package/lib/types/dsh-adapter/backends.d.ts +67 -24
- package/lib/types/dsh-adapter/backends.d.ts.map +1 -1
- package/lib/types/dsh-adapter/backends.generated.d.ts +12 -0
- package/lib/types/dsh-adapter/backends.generated.d.ts.map +1 -0
- package/lib/types/dsh-adapter/backends.generated.js +6 -0
- package/lib/types/dsh-adapter/backends.js +91 -46
- package/lib/types/dsh-adapter/bundled-presets.d.ts.map +1 -1
- package/lib/types/dsh-adapter/bundled-presets.js +60 -3
- package/lib/types/dsh-adapter/channel/action-readiness.d.ts +2 -0
- package/lib/types/dsh-adapter/channel/action-readiness.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/action-readiness.js +9 -3
- package/lib/types/dsh-adapter/channel/agent-view-projection.js +2 -2
- package/lib/types/dsh-adapter/channel/background-action.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/background-action.js +8 -3
- package/lib/types/dsh-adapter/channel/binding-events.d.ts +17 -3
- package/lib/types/dsh-adapter/channel/binding-events.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/binding-events.js +19 -46
- package/lib/types/dsh-adapter/channel/channel-host.d.ts +45 -0
- package/lib/types/dsh-adapter/channel/channel-host.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/channel-host.js +1 -0
- package/lib/types/dsh-adapter/channel/command-completions.d.ts +5 -0
- package/lib/types/dsh-adapter/channel/command-completions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/command-completions.js +79 -6
- package/lib/types/dsh-adapter/channel/compaction.d.ts +7 -2
- package/lib/types/dsh-adapter/channel/compaction.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/compaction.js +100 -26
- package/lib/types/dsh-adapter/channel/composer-images.d.ts +4 -2
- package/lib/types/dsh-adapter/channel/composer-images.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/composer-images.js +36 -5
- package/lib/types/dsh-adapter/channel/cordis-host.d.ts +14 -0
- package/lib/types/dsh-adapter/channel/cordis-host.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/cordis-host.js +35 -0
- package/lib/types/dsh-adapter/channel/core/actions.d.ts +3 -3
- package/lib/types/dsh-adapter/channel/core/actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/core/actions.js +15 -6
- package/lib/types/dsh-adapter/channel/core/binding-feed.d.ts +10 -3
- package/lib/types/dsh-adapter/channel/core/binding-feed.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/core/binding-feed.js +5 -1
- package/lib/types/dsh-adapter/channel/core/compose.d.ts +12 -28
- package/lib/types/dsh-adapter/channel/core/compose.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/core/compose.js +330 -117
- package/lib/types/dsh-adapter/channel/core/files.d.ts +7 -2
- package/lib/types/dsh-adapter/channel/core/files.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/core/files.js +1 -0
- package/lib/types/dsh-adapter/channel/core/host.d.ts +12 -6
- package/lib/types/dsh-adapter/channel/core/host.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/core/host.js +69 -35
- package/lib/types/dsh-adapter/channel/core/local-actions.d.ts +5 -3
- package/lib/types/dsh-adapter/channel/core/local-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/core/local-actions.js +5 -2
- package/lib/types/dsh-adapter/channel/core/session-controls.js +2 -2
- package/lib/types/dsh-adapter/channel/core/session-switch.d.ts +7 -4
- package/lib/types/dsh-adapter/channel/core/session-switch.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/core/session-switch.js +8 -4
- package/lib/types/dsh-adapter/channel/core/sessions.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/core/sessions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/core/sessions.js +75 -16
- package/lib/types/dsh-adapter/channel/extensions.d.ts +4 -3
- package/lib/types/dsh-adapter/channel/extensions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/extensions.js +109 -30
- package/lib/types/dsh-adapter/channel/input-delivery.d.ts +2 -2
- package/lib/types/dsh-adapter/channel/input-delivery.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/input-delivery.js +14 -5
- package/lib/types/dsh-adapter/channel/job-projection.d.ts +4 -0
- package/lib/types/dsh-adapter/channel/job-projection.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/job-projection.js +205 -24
- package/lib/types/dsh-adapter/channel/mentions.d.ts +3 -3
- package/lib/types/dsh-adapter/channel/mentions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts +7 -0
- package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/mode-permission-actions.js +235 -13
- package/lib/types/dsh-adapter/channel/model-actions.d.ts +5 -1
- package/lib/types/dsh-adapter/channel/model-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/model-actions.js +48 -29
- package/lib/types/dsh-adapter/channel/model-selection.d.ts +17 -0
- package/lib/types/dsh-adapter/channel/model-selection.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/model-selection.js +109 -0
- package/lib/types/dsh-adapter/channel/model-switch.d.ts +12 -21
- package/lib/types/dsh-adapter/channel/model-switch.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/model-switch.js +39 -102
- package/lib/types/dsh-adapter/channel/permissions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/permissions.js +4 -1
- package/lib/types/dsh-adapter/channel/projection-helpers.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/projection-helpers.js +2 -0
- package/lib/types/dsh-adapter/channel/projection.js +1 -1
- package/lib/types/dsh-adapter/channel/reports.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/reports.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/reports.js +11 -3
- package/lib/types/dsh-adapter/channel/session-fork.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-fork.js +33 -20
- package/lib/types/dsh-adapter/channel/session-listing.d.ts +20 -0
- package/lib/types/dsh-adapter/channel/session-listing.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/session-listing.js +51 -0
- package/lib/types/dsh-adapter/channel/session-metadata.d.ts +3 -1
- package/lib/types/dsh-adapter/channel/session-metadata.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-metadata.js +60 -30
- package/lib/types/dsh-adapter/channel/session-reset.js +2 -2
- package/lib/types/dsh-adapter/channel/session-resume.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-resume.js +22 -8
- package/lib/types/dsh-adapter/channel/session-rewind.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-rewind.js +38 -24
- package/lib/types/dsh-adapter/channel/session-tree-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-tree-actions.js +38 -24
- package/lib/types/dsh-adapter/channel/settings-host.d.ts +5 -2
- package/lib/types/dsh-adapter/channel/settings-host.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/settings-host.js +136 -5
- package/lib/types/dsh-adapter/channel/state.d.ts +43 -1
- package/lib/types/dsh-adapter/channel/state.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/state.js +14 -1
- package/lib/types/dsh-adapter/channel/subagent-projection.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/subagent-projection.js +84 -12
- package/lib/types/dsh-adapter/channel/task-completion.d.ts +6 -0
- package/lib/types/dsh-adapter/channel/task-completion.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/task-completion.js +114 -0
- package/lib/types/dsh-adapter/channel/transcript.d.ts +8 -1
- package/lib/types/dsh-adapter/channel/transcript.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/transcript.js +20 -3
- package/lib/types/dsh-adapter/channel/upstream-retry.d.ts +81 -0
- package/lib/types/dsh-adapter/channel/upstream-retry.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/upstream-retry.js +138 -0
- package/lib/types/dsh-adapter/channel/workspace-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/workspace-actions.js +9 -8
- package/lib/types/dsh-adapter/channel-ui.d.ts +3 -1
- package/lib/types/dsh-adapter/channel-ui.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel-ui.js +4 -2
- package/lib/types/dsh-adapter/channel.d.ts +2 -2
- package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel.js +19 -5
- package/lib/types/dsh-adapter/compat/agent-team-0.2.0.d.ts +55 -0
- package/lib/types/dsh-adapter/compat/agent-team-0.2.0.d.ts.map +1 -0
- package/lib/types/dsh-adapter/compat/agent-team-0.2.0.js +96 -0
- package/lib/types/dsh-adapter/context-occupancy.d.ts +81 -4
- package/lib/types/dsh-adapter/context-occupancy.d.ts.map +1 -1
- package/lib/types/dsh-adapter/context-occupancy.js +108 -17
- package/lib/types/dsh-adapter/contract.d.ts +4 -4
- package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
- package/lib/types/dsh-adapter/contract.js +20 -5
- package/lib/types/dsh-adapter/effect-ledger.d.ts +7 -0
- package/lib/types/dsh-adapter/effect-ledger.d.ts.map +1 -1
- package/lib/types/dsh-adapter/effect-ledger.js +8 -1
- package/lib/types/dsh-adapter/entry-slot.d.ts +38 -0
- package/lib/types/dsh-adapter/entry-slot.d.ts.map +1 -0
- package/lib/types/dsh-adapter/entry-slot.js +28 -0
- package/lib/types/dsh-adapter/fresh-agent.d.ts +22 -0
- package/lib/types/dsh-adapter/fresh-agent.d.ts.map +1 -0
- package/lib/types/dsh-adapter/fresh-agent.js +226 -0
- package/lib/types/dsh-adapter/host-access.d.ts +16 -1
- package/lib/types/dsh-adapter/host-access.d.ts.map +1 -1
- package/lib/types/dsh-adapter/host-access.js +148 -2
- package/lib/types/dsh-adapter/host-contract.d.ts +103 -0
- package/lib/types/dsh-adapter/host-contract.d.ts.map +1 -0
- package/lib/types/dsh-adapter/host-contract.js +77 -0
- package/lib/types/dsh-adapter/host-dsh.d.ts +112 -0
- package/lib/types/dsh-adapter/host-dsh.d.ts.map +1 -0
- package/lib/types/dsh-adapter/host-dsh.js +481 -0
- package/lib/types/dsh-adapter/host-entry.d.ts +9 -0
- package/lib/types/dsh-adapter/host-entry.d.ts.map +1 -0
- package/lib/types/dsh-adapter/host-entry.js +253 -0
- package/lib/types/dsh-adapter/index.d.ts +53 -17
- package/lib/types/dsh-adapter/index.d.ts.map +1 -1
- package/lib/types/dsh-adapter/index.js +63 -9
- package/lib/types/dsh-adapter/install/executors.d.ts +44 -0
- package/lib/types/dsh-adapter/install/executors.d.ts.map +1 -0
- package/lib/types/dsh-adapter/install/executors.js +15 -0
- package/lib/types/dsh-adapter/install/pnpm-profile-add.d.ts +3 -0
- package/lib/types/dsh-adapter/install/pnpm-profile-add.d.ts.map +1 -0
- package/lib/types/dsh-adapter/install/pnpm-profile-add.js +150 -0
- package/lib/types/dsh-adapter/invariant.d.ts +7 -2
- package/lib/types/dsh-adapter/invariant.d.ts.map +1 -1
- package/lib/types/dsh-adapter/invariant.js +6 -3
- package/lib/types/dsh-adapter/jobs.d.ts +7 -0
- package/lib/types/dsh-adapter/jobs.d.ts.map +1 -1
- package/lib/types/dsh-adapter/jobs.js +13 -0
- package/lib/types/dsh-adapter/lite-profile.d.ts +50 -0
- package/lib/types/dsh-adapter/lite-profile.d.ts.map +1 -0
- package/lib/types/dsh-adapter/lite-profile.js +49 -0
- package/lib/types/dsh-adapter/migrate/index.js +2 -2
- package/lib/types/dsh-adapter/migrate/parse/jsonl.d.ts +1 -1
- package/lib/types/dsh-adapter/migrate/parse/jsonl.d.ts.map +1 -1
- package/lib/types/dsh-adapter/migrate/parse/jsonl.js +4 -3
- package/lib/types/dsh-adapter/oauth/profiles.d.ts.map +1 -1
- package/lib/types/dsh-adapter/oauth/profiles.js +5 -1
- package/lib/types/dsh-adapter/panels.d.ts +7 -0
- package/lib/types/dsh-adapter/panels.d.ts.map +1 -1
- package/lib/types/dsh-adapter/panels.js +41 -2
- package/lib/types/dsh-adapter/plugin-completions.d.ts +32 -0
- package/lib/types/dsh-adapter/plugin-completions.d.ts.map +1 -0
- package/lib/types/dsh-adapter/plugin-completions.js +80 -0
- package/lib/types/dsh-adapter/plugin-declaration.d.ts +119 -0
- package/lib/types/dsh-adapter/plugin-declaration.d.ts.map +1 -0
- package/lib/types/dsh-adapter/plugin-declaration.js +183 -0
- package/lib/types/dsh-adapter/plugin-feed.d.ts +94 -0
- package/lib/types/dsh-adapter/plugin-feed.d.ts.map +1 -0
- package/lib/types/dsh-adapter/plugin-feed.js +135 -0
- package/lib/types/dsh-adapter/plugin-guard.d.ts +115 -0
- package/lib/types/dsh-adapter/plugin-guard.d.ts.map +1 -0
- package/lib/types/dsh-adapter/plugin-guard.js +108 -0
- package/lib/types/dsh-adapter/plugin-host.d.ts +13 -2
- package/lib/types/dsh-adapter/plugin-host.d.ts.map +1 -1
- package/lib/types/dsh-adapter/plugin-host.js +34 -8
- package/lib/types/dsh-adapter/plugin-install.d.ts +160 -0
- package/lib/types/dsh-adapter/plugin-install.d.ts.map +1 -0
- package/lib/types/dsh-adapter/plugin-install.js +545 -0
- package/lib/types/dsh-adapter/plugin-manage.d.ts +178 -0
- package/lib/types/dsh-adapter/plugin-manage.d.ts.map +1 -0
- package/lib/types/dsh-adapter/plugin-manage.js +468 -0
- package/lib/types/dsh-adapter/plugin-manager.d.ts +144 -0
- package/lib/types/dsh-adapter/plugin-manager.d.ts.map +1 -0
- package/lib/types/dsh-adapter/plugin-manager.js +83 -0
- package/lib/types/dsh-adapter/plugin.d.ts +50 -1
- package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
- package/lib/types/dsh-adapter/plugin.js +918 -234
- package/lib/types/dsh-adapter/plugins-info.d.ts +130 -8
- package/lib/types/dsh-adapter/plugins-info.d.ts.map +1 -1
- package/lib/types/dsh-adapter/plugins-info.js +469 -44
- package/lib/types/dsh-adapter/process-exit.d.ts +43 -0
- package/lib/types/dsh-adapter/process-exit.d.ts.map +1 -0
- package/lib/types/dsh-adapter/process-exit.js +60 -0
- package/lib/types/dsh-adapter/root-dispose.d.ts +18 -0
- package/lib/types/dsh-adapter/root-dispose.d.ts.map +1 -0
- package/lib/types/dsh-adapter/root-dispose.js +28 -0
- package/lib/types/dsh-adapter/session-list-metadata.d.ts +20 -0
- package/lib/types/dsh-adapter/session-list-metadata.d.ts.map +1 -0
- package/lib/types/dsh-adapter/session-list-metadata.js +56 -0
- package/lib/types/dsh-adapter/session-projection-store.d.ts +66 -0
- package/lib/types/dsh-adapter/session-projection-store.d.ts.map +1 -0
- package/lib/types/dsh-adapter/session-projection-store.js +149 -0
- package/lib/types/dsh-adapter/session-seed.d.ts +11 -0
- package/lib/types/dsh-adapter/session-seed.d.ts.map +1 -0
- package/lib/types/dsh-adapter/session-seed.js +47 -0
- package/lib/types/dsh-adapter/sessions/list.d.ts +3 -1
- package/lib/types/dsh-adapter/sessions/list.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sessions/list.js +11 -5
- package/lib/types/dsh-adapter/sessions/snapshot.d.ts +0 -2
- package/lib/types/dsh-adapter/sessions/snapshot.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sessions/snapshot.js +7 -70
- package/lib/types/dsh-adapter/settingsEditor.js +2 -2
- package/lib/types/dsh-adapter/sideQuestion.d.ts +21 -0
- package/lib/types/dsh-adapter/sideQuestion.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sideQuestion.js +53 -0
- package/lib/types/dsh-adapter/startup-args.d.ts +2 -0
- package/lib/types/dsh-adapter/startup-args.d.ts.map +1 -1
- package/lib/types/dsh-adapter/startup-args.js +5 -0
- package/lib/types/dsh-adapter/subagents.d.ts +33 -1
- package/lib/types/dsh-adapter/subagents.d.ts.map +1 -1
- package/lib/types/dsh-adapter/subagents.js +112 -9
- package/lib/types/dsh-adapter/team-mode.d.ts +74 -0
- package/lib/types/dsh-adapter/team-mode.d.ts.map +1 -0
- package/lib/types/dsh-adapter/team-mode.js +188 -0
- package/lib/types/dsh-adapter/team-roster.d.ts +67 -0
- package/lib/types/dsh-adapter/team-roster.d.ts.map +1 -0
- package/lib/types/dsh-adapter/team-roster.js +136 -0
- package/lib/types/dsh-adapter/team-tools.d.ts +58 -0
- package/lib/types/dsh-adapter/team-tools.d.ts.map +1 -0
- package/lib/types/dsh-adapter/team-tools.js +208 -0
- package/lib/types/dsh-adapter/tui-settings.d.ts +57 -0
- package/lib/types/dsh-adapter/tui-settings.d.ts.map +1 -0
- package/lib/types/dsh-adapter/tui-settings.js +199 -0
- package/lib/types/dsh-adapter/types.d.ts +1 -1
- package/lib/types/dsh-adapter/types.d.ts.map +1 -1
- package/lib/types/effortPrefs.d.ts +6 -3
- package/lib/types/effortPrefs.d.ts.map +1 -1
- package/lib/types/effortPrefs.js +7 -4
- package/lib/types/hostEntryRoute.d.ts +18 -0
- package/lib/types/hostEntryRoute.d.ts.map +1 -0
- package/lib/types/hostEntryRoute.js +57 -0
- package/lib/types/i18n.d.ts +961 -1439
- package/lib/types/i18n.d.ts.map +1 -1
- package/lib/types/i18n.js +443 -387
- package/lib/types/ink/components/AlternateScreen.js +2 -2
- package/lib/types/ink/components/App.d.ts +1 -0
- package/lib/types/ink/components/App.d.ts.map +1 -1
- package/lib/types/ink/components/App.js +16 -4
- package/lib/types/ink/components/CursorDeclarationContext.d.ts +9 -0
- package/lib/types/ink/components/CursorDeclarationContext.d.ts.map +1 -1
- package/lib/types/ink/components/CursorDeclarationContext.js +2 -0
- package/lib/types/ink/components/ScrollBox.d.ts +9 -0
- package/lib/types/ink/components/ScrollBox.d.ts.map +1 -1
- package/lib/types/ink/components/ScrollBox.js +23 -0
- package/lib/types/ink/dom.d.ts.map +1 -1
- package/lib/types/ink/hooks/use-copy-on-select.d.ts +2 -2
- package/lib/types/ink/hooks/use-copy-on-select.d.ts.map +1 -1
- package/lib/types/ink/hooks/use-copy-on-select.js +13 -7
- package/lib/types/ink/hooks/use-declared-cursor.d.ts +11 -3
- package/lib/types/ink/hooks/use-declared-cursor.d.ts.map +1 -1
- package/lib/types/ink/hooks/use-declared-cursor.js +30 -10
- package/lib/types/ink/ink.d.ts +22 -17
- package/lib/types/ink/ink.d.ts.map +1 -1
- package/lib/types/ink/ink.js +151 -40
- package/lib/types/ink/kitty-graphics.d.ts +2 -0
- package/lib/types/ink/kitty-graphics.d.ts.map +1 -1
- package/lib/types/ink/kitty-graphics.js +6 -1
- package/lib/types/ink/node-cache.d.ts +2 -1
- package/lib/types/ink/node-cache.d.ts.map +1 -1
- package/lib/types/ink/output.d.ts +10 -4
- package/lib/types/ink/output.d.ts.map +1 -1
- package/lib/types/ink/output.js +14 -10
- package/lib/types/ink/render-node-to-output.d.ts +5 -2
- package/lib/types/ink/render-node-to-output.d.ts.map +1 -1
- package/lib/types/ink/render-node-to-output.js +27 -9
- package/lib/types/ink/renderer.d.ts +1 -0
- package/lib/types/ink/renderer.d.ts.map +1 -1
- package/lib/types/ink/renderer.js +4 -3
- package/lib/types/ink/root.d.ts +4 -1
- package/lib/types/ink/root.d.ts.map +1 -1
- package/lib/types/ink/screen.d.ts +4 -2
- package/lib/types/ink/screen.d.ts.map +1 -1
- package/lib/types/ink/selection.d.ts +10 -1
- package/lib/types/ink/selection.d.ts.map +1 -1
- package/lib/types/ink/selection.js +94 -25
- package/lib/types/ink/stdin-handoff.d.ts +11 -0
- package/lib/types/ink/stdin-handoff.d.ts.map +1 -0
- package/lib/types/ink/stdin-handoff.js +20 -0
- package/lib/types/ink/styles.d.ts +2 -1
- package/lib/types/ink/styles.d.ts.map +1 -1
- package/lib/types/ink/terminal-image.d.ts +6 -4
- package/lib/types/ink/terminal-image.d.ts.map +1 -1
- package/lib/types/ink/terminal-image.js +16 -39
- package/lib/types/ink/terminal-notification.d.ts +8 -0
- package/lib/types/ink/terminal-notification.d.ts.map +1 -0
- package/lib/types/ink/terminal-notification.js +83 -0
- package/lib/types/ink/terminal.d.ts +9 -0
- package/lib/types/ink/terminal.d.ts.map +1 -1
- package/lib/types/ink/terminal.js +34 -1
- package/lib/types/ink/termio/csi.d.ts +11 -0
- package/lib/types/ink/termio/csi.d.ts.map +1 -1
- package/lib/types/ink/termio/csi.js +13 -0
- package/lib/types/ink/update-overflow-guard.d.ts +6 -0
- package/lib/types/ink/update-overflow-guard.d.ts.map +1 -1
- package/lib/types/ink/update-overflow-guard.js +17 -0
- package/lib/types/ink/wrap-text.d.ts +6 -0
- package/lib/types/ink/wrap-text.d.ts.map +1 -1
- package/lib/types/ink/wrap-text.js +17 -0
- package/lib/types/kernelPrefs.d.ts +130 -17
- package/lib/types/kernelPrefs.d.ts.map +1 -1
- package/lib/types/kernelPrefs.js +98 -35
- package/lib/types/math/inline-layout.d.ts +2 -0
- package/lib/types/math/inline-layout.d.ts.map +1 -1
- package/lib/types/math/inline-layout.js +5 -27
- package/lib/types/modelGroups.d.ts +15 -27
- package/lib/types/modelGroups.d.ts.map +1 -1
- package/lib/types/modelGroups.js +17 -31
- package/lib/types/modelPrefs.d.ts +5 -4
- package/lib/types/modelPrefs.d.ts.map +1 -1
- package/lib/types/modelPrefs.js +5 -4
- package/lib/types/modelRoute.d.ts +23 -9
- package/lib/types/modelRoute.d.ts.map +1 -1
- package/lib/types/modelRoute.js +25 -11
- package/lib/types/native-ts/yoga-layout/index.d.ts.map +1 -1
- package/lib/types/native-ts/yoga-layout/index.js +8 -1
- package/lib/types/permissionPrefs.d.ts +34 -0
- package/lib/types/permissionPrefs.d.ts.map +1 -0
- package/lib/types/permissionPrefs.js +61 -0
- package/lib/types/permissionPresetLabels.d.ts +25 -0
- package/lib/types/permissionPresetLabels.d.ts.map +1 -0
- package/lib/types/permissionPresetLabels.js +33 -0
- package/lib/types/plugin-host.d.ts +1 -0
- package/lib/types/plugin-host.d.ts.map +1 -1
- package/lib/types/preset-patch.d.ts +22 -0
- package/lib/types/preset-patch.d.ts.map +1 -0
- package/lib/types/preset-patch.js +14 -0
- package/lib/types/presetPrefs.d.ts +17 -3
- package/lib/types/presetPrefs.d.ts.map +1 -1
- package/lib/types/presetPrefs.js +20 -3
- package/lib/types/reload.d.ts +6 -10
- package/lib/types/reload.d.ts.map +1 -1
- package/lib/types/reload.js +14 -14
- package/lib/types/screens/Chat.d.ts +55 -16
- package/lib/types/screens/Chat.d.ts.map +1 -1
- package/lib/types/screens/Chat.js +742 -280
- package/lib/types/screens/Launchpad.d.ts +33 -17
- package/lib/types/screens/Launchpad.d.ts.map +1 -1
- package/lib/types/screens/Launchpad.js +256 -78
- package/lib/types/screens/SessionSupervisor.d.ts.map +1 -1
- package/lib/types/screens/SessionSupervisor.js +53 -12
- package/lib/types/screens/Settings.d.ts.map +1 -1
- package/lib/types/screens/Settings.js +7 -0
- package/lib/types/screens/StatusLine.d.ts.map +1 -1
- package/lib/types/screens/StatusLine.js +24 -7
- package/lib/types/screens/StatusMetrics.d.ts +46 -1
- package/lib/types/screens/StatusMetrics.d.ts.map +1 -1
- package/lib/types/screens/StatusMetrics.js +72 -0
- package/lib/types/screens/chat/useKernelPicker.d.ts +8 -4
- package/lib/types/screens/chat/useKernelPicker.d.ts.map +1 -1
- package/lib/types/screens/chat/useKernelPicker.js +61 -21
- package/lib/types/screens/chat/useModelPicker.d.ts +42 -0
- package/lib/types/screens/chat/useModelPicker.d.ts.map +1 -0
- package/lib/types/screens/chat/useModelPicker.js +182 -0
- package/lib/types/screens/chat/usePluginWriteFlow.d.ts +68 -0
- package/lib/types/screens/chat/usePluginWriteFlow.d.ts.map +1 -0
- package/lib/types/screens/chat/usePluginWriteFlow.js +92 -0
- package/lib/types/screens/chatOverlay.d.ts +30 -5
- package/lib/types/screens/chatOverlay.d.ts.map +1 -1
- package/lib/types/screens/chatOverlay.js +0 -1
- package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.d.ts +4 -1
- package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.d.ts.map +1 -1
- package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.js +26 -5
- package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts +1 -1
- package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts.map +1 -1
- package/lib/types/screens/sessionSupervisor/useSessionSupervisor.js +51 -29
- package/lib/types/sessionHistory.d.ts +5 -0
- package/lib/types/sessionHistory.d.ts.map +1 -1
- package/lib/types/sessionHistory.js +5 -0
- package/lib/types/sessionModes.d.ts +5 -3
- package/lib/types/sessionModes.d.ts.map +1 -1
- package/lib/types/sessionModes.js +9 -3
- package/lib/types/sessions/listSnapshot.d.ts +6 -0
- package/lib/types/sessions/listSnapshot.d.ts.map +1 -0
- package/lib/types/sessions/listSnapshot.js +67 -0
- package/lib/types/settings/definitions.d.ts +50 -0
- package/lib/types/settings/definitions.d.ts.map +1 -1
- package/lib/types/settings/definitions.js +42 -8
- package/lib/types/terminal-utils/cjk-emphasis.d.ts +28 -0
- package/lib/types/terminal-utils/cjk-emphasis.d.ts.map +1 -0
- package/lib/types/terminal-utils/cjk-emphasis.js +31 -0
- package/lib/types/terminal-utils/markdown.d.ts +3 -1
- package/lib/types/terminal-utils/markdown.d.ts.map +1 -1
- package/lib/types/terminal-utils/markdown.js +7 -2
- package/lib/types/theme.d.ts +29 -12
- package/lib/types/theme.d.ts.map +1 -1
- package/lib/types/theme.js +310 -23
- package/lib/types/themeCatalog.d.ts.map +1 -1
- package/lib/types/themeCatalog.js +21 -2
- package/lib/types/tips.js +4 -4
- package/lib/types/tuiSettingsFile.d.ts +56 -0
- package/lib/types/tuiSettingsFile.d.ts.map +1 -0
- package/lib/types/tuiSettingsFile.js +206 -0
- package/lib/types/ui.d.ts +2 -0
- package/lib/types/ui.d.ts.map +1 -1
- package/lib/types/ui.js +2 -0
- package/lib/types/update.d.ts +72 -26
- package/lib/types/update.d.ts.map +1 -1
- package/lib/types/update.js +131 -43
- package/lib/types/utils/bmp.d.ts +7 -0
- package/lib/types/utils/bmp.d.ts.map +1 -1
- package/lib/types/utils/bmp.js +27 -0
- package/lib/types/utils/bootTrace.d.ts +2 -0
- package/lib/types/utils/bootTrace.d.ts.map +1 -0
- package/lib/types/utils/bootTrace.js +20 -0
- package/lib/types/utils/clipboard.d.ts.map +1 -1
- package/lib/types/utils/clipboard.js +11 -3
- package/lib/types/utils/credentials.d.ts +14 -2
- package/lib/types/utils/credentials.d.ts.map +1 -1
- package/lib/types/utils/credentials.js +34 -11
- package/lib/types/utils/imageResize.d.ts +10 -20
- package/lib/types/utils/imageResize.d.ts.map +1 -1
- package/lib/types/utils/imageResize.js +61 -134
- package/lib/types/utils/inputPaste.d.ts +2 -2
- package/lib/types/utils/inputPaste.js +2 -2
- package/lib/types/utils/pastedImagePath.d.ts +5 -0
- package/lib/types/utils/pastedImagePath.d.ts.map +1 -1
- package/lib/types/utils/pastedImagePath.js +33 -0
- package/lib/types/utils/paths.d.ts +11 -0
- package/lib/types/utils/paths.d.ts.map +1 -1
- package/lib/types/utils/paths.js +13 -0
- package/package.json +150 -114
- package/presets/winbash.mjs +716 -0
- package/tui-profile/feed/README.md +63 -0
- package/tui-profile/feed/first-party.json +10 -0
- package/tui-profile/protocols/profile-definitions.d.ts +1 -0
- package/tui-profile/protocols/profile-definitions.js +14 -0
- package/tui-profile/protocols/tui-contributions.d.ts +55 -0
- package/tui-profile/protocols/tui-contributions.js +141 -0
- package/tui-profile/registry/contracts/backend-v1alpha1.json +13 -0
- package/tui-profile/registry/registry-0.15.json +12 -0
- package/lib/types/backends/claude/install.d.ts +0 -15
- package/lib/types/backends/claude/install.d.ts.map +0 -1
- package/lib/types/backends/claude/install.js +0 -91
- package/lib/types/channel/elicitation.d.ts.map +0 -1
- package/lib/types/dsh-adapter/channel/session-lineage.d.ts +0 -42
- package/lib/types/dsh-adapter/channel/session-lineage.d.ts.map +0 -1
- package/lib/types/dsh-adapter/channel/session-lineage.js +0 -51
- package/lib/types/utils/jsonl.d.ts.map +0 -1
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
import { assertShadowPolicy } from '../../adapter/kernel/runtime.js';
|
|
2
2
|
import { t } from '../../i18n.js';
|
|
3
|
+
import { readPermissionPref, writePermissionPref } from '../../permissionPrefs.js';
|
|
4
|
+
import { PERMISSION_PRESET_AUTO } from '../../permissionPresetLabels.js';
|
|
3
5
|
import { modeDisplayName } from '../../sessionModes.js';
|
|
4
6
|
import { snapshotLiveSessionEvents } from '../compat/liveSession.js';
|
|
5
7
|
import { createModeActions, reportModeSwitchFailure } from './mode-actions.js';
|
|
6
8
|
import { createPermissionIdentity, foldPermissionPreset } from './mode-permission.js';
|
|
9
|
+
import { PERMISSION_PRESET_CUSTOM } from './permissions.js';
|
|
7
10
|
// Atom folds mirrored from mode-actions.ts: `createModeActions` does not
|
|
8
11
|
// export them, and the permission-aware derive below must reproduce its
|
|
9
12
|
// atom fallback exactly to stay the single source of the indicator.
|
|
@@ -61,6 +64,30 @@ function derivePermissionModeIndex(modes, events) {
|
|
|
61
64
|
&& (spec.approval === undefined || foldApprovalPolicy(events) === spec.approval));
|
|
62
65
|
return index >= 0 ? index : 0;
|
|
63
66
|
}
|
|
67
|
+
/** The durable identity held before the latest `permission/preset` event.
|
|
68
|
+
* Non-string presets are skipped exactly as {@link foldPermissionPreset}
|
|
69
|
+
* skips them, so both folds agree on what the session sat on. */
|
|
70
|
+
function previousPermissionPreset(events) {
|
|
71
|
+
let previous;
|
|
72
|
+
let latest;
|
|
73
|
+
for (const event of events) {
|
|
74
|
+
if (event.type !== 'permission/preset')
|
|
75
|
+
continue;
|
|
76
|
+
const preset = event.data.preset;
|
|
77
|
+
if (typeof preset !== 'string')
|
|
78
|
+
continue;
|
|
79
|
+
previous = latest;
|
|
80
|
+
latest = preset;
|
|
81
|
+
}
|
|
82
|
+
return previous;
|
|
83
|
+
}
|
|
84
|
+
/** Whether this session's log ever selected the experimental `auto` preset
|
|
85
|
+
* (picker confirmation, typed command, or a resumed Auto session). Only then
|
|
86
|
+
* may Shift+Tab land on it: a key press cannot await the risk confirmation. */
|
|
87
|
+
export function autoPresetConfirmed(events) {
|
|
88
|
+
return events.some(event => event.type === 'permission/preset'
|
|
89
|
+
&& event.data.preset === PERMISSION_PRESET_AUTO);
|
|
90
|
+
}
|
|
64
91
|
/**
|
|
65
92
|
* Permission-aware session-mode actions: main's mode transition (plan
|
|
66
93
|
* exclusivity, atom application, plan-exit restore) composed with the durable
|
|
@@ -90,6 +117,58 @@ export function createPermissionModeActions(ctx, state, deps) {
|
|
|
90
117
|
});
|
|
91
118
|
// An in-turn /plan off commits at pre-step, after the command has returned.
|
|
92
119
|
const explicitPlanExits = new WeakSet();
|
|
120
|
+
/** True while this composition is walking a session INTO plan mode — from
|
|
121
|
+
* the pre-plan identity capture until the plan atoms have been applied.
|
|
122
|
+
* The canonical preset the plan entry switches to is a transient working
|
|
123
|
+
* state (restored on exit), so the preference must not learn it. */
|
|
124
|
+
let planEntryInFlight = false;
|
|
125
|
+
/** Sessions the remembered permission was already seeded into (or decided
|
|
126
|
+
* against): one attempt per session object, rebinds stay quiet. */
|
|
127
|
+
const permissionPrefSeeded = new WeakSet();
|
|
128
|
+
/** Target presets of the permission switches this TUI is driving right now
|
|
129
|
+
* (the `/permission` command or the service write path). A switch AWAY
|
|
130
|
+
* from `auto` is learned only when it lands on one of them: the
|
|
131
|
+
* auto-review plugin migrates every Auto session to danger-full-access
|
|
132
|
+
* when it unloads, and that migration — even one racing a pending switch
|
|
133
|
+
* to another target — must not become the next session's default. */
|
|
134
|
+
const userPermissionTargets = [];
|
|
135
|
+
/** Per session, the identity a switch away from `auto` landed on without
|
|
136
|
+
* being learned (the plugin-unload migration). It stays unlearnable on
|
|
137
|
+
* the implicit paths — a plan entry's pre-plan seat and the plan exit's
|
|
138
|
+
* restore — until an explicit switch is learned on that session. */
|
|
139
|
+
const unlearnedIdentity = new WeakMap();
|
|
140
|
+
/** `input` is the raw `/permission` argument; its first token names the
|
|
141
|
+
* target preset, resolved case-insensitively against the mounted roster
|
|
142
|
+
* so it compares equal to the value the log records. */
|
|
143
|
+
const trackUserPermissionSwitch = async (input, run) => {
|
|
144
|
+
const typed = input.trim().split(/\s+/)[0] ?? '';
|
|
145
|
+
let options = [];
|
|
146
|
+
try {
|
|
147
|
+
options = roster.readSnapshot(binding.agent)?.options ?? [];
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
options = [];
|
|
151
|
+
}
|
|
152
|
+
const target = options.find(option => option.value.toLowerCase() === typed.toLowerCase())?.value ?? typed;
|
|
153
|
+
userPermissionTargets.push(target);
|
|
154
|
+
try {
|
|
155
|
+
return await run();
|
|
156
|
+
}
|
|
157
|
+
finally {
|
|
158
|
+
userPermissionTargets.splice(userPermissionTargets.indexOf(target), 1);
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
/** Remember one durable permission identity for the next session (see
|
|
162
|
+
* permissionPrefs.ts). Undefined and custom identities carry no preset
|
|
163
|
+
* to remember, and `auto` is session-only by contract; a failed write is a
|
|
164
|
+
* debug line, never user-facing. */
|
|
165
|
+
const persistPermissionPref = (value) => {
|
|
166
|
+
if (value === undefined || value === PERMISSION_PRESET_CUSTOM || value === PERMISSION_PRESET_AUTO)
|
|
167
|
+
return;
|
|
168
|
+
if (!writePermissionPref(value)) {
|
|
169
|
+
ctx.logger.debug(`dsh-tui: permission preference write failed for "${value}"`);
|
|
170
|
+
}
|
|
171
|
+
};
|
|
93
172
|
/** Re-derive the roster and the current mode. The roster rebuild rides on
|
|
94
173
|
* every refresh: a registry mount/unmount and a re-bind both land here. */
|
|
95
174
|
const refreshMode = () => {
|
|
@@ -131,6 +210,14 @@ export function createPermissionModeActions(ctx, state, deps) {
|
|
|
131
210
|
// canonicalization can append replacement events.
|
|
132
211
|
if (planChange && spec.plan === true && !planActive) {
|
|
133
212
|
permission.rememberPrePlanIdentity(session);
|
|
213
|
+
// The canonicalization below reseats the durable identity on the
|
|
214
|
+
// plan atoms (read-only/ask) until the exit restores it. Keep the
|
|
215
|
+
// preference on the identity the user actually sat on, and let the
|
|
216
|
+
// event observer below ignore the replacement while it is in flight.
|
|
217
|
+
const seat = foldPermissionPreset(snapshotLiveSessionEvents(session));
|
|
218
|
+
if (seat !== unlearnedIdentity.get(session))
|
|
219
|
+
persistPermissionPref(seat);
|
|
220
|
+
planEntryInFlight = true;
|
|
134
221
|
}
|
|
135
222
|
if (planChange && spec.plan === false) {
|
|
136
223
|
// An explicit switch away from plan owns its target mode; the
|
|
@@ -138,16 +225,29 @@ export function createPermissionModeActions(ctx, state, deps) {
|
|
|
138
225
|
explicitPlanExits.add(session);
|
|
139
226
|
permission.forgetPrePlanIdentity(session);
|
|
140
227
|
}
|
|
141
|
-
|
|
142
|
-
if (
|
|
228
|
+
try {
|
|
229
|
+
if (spec.permission !== undefined) {
|
|
230
|
+
if (!(await permission.applyPermissionIdentity(spec.permission)))
|
|
231
|
+
return;
|
|
232
|
+
unlearnedIdentity.delete(session);
|
|
233
|
+
persistPermissionPref(spec.permission);
|
|
234
|
+
}
|
|
235
|
+
else if (!(await permission.canonicalizeForMode(spec, session))) {
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
else if (spec.plan !== true) {
|
|
239
|
+
// A static mode the user cycled to owns its canonical preset
|
|
240
|
+
// identity (the plan spec's canonical form is transient instead).
|
|
241
|
+
unlearnedIdentity.delete(session);
|
|
242
|
+
persistPermissionPref(permission.canonicalPermissionForMode(spec, session));
|
|
243
|
+
}
|
|
244
|
+
if (!owner.current() || !binding.isCurrent(capture) || session !== agent.session)
|
|
143
245
|
return;
|
|
246
|
+
await base.applyMode(spec, capture);
|
|
144
247
|
}
|
|
145
|
-
|
|
146
|
-
|
|
248
|
+
finally {
|
|
249
|
+
planEntryInFlight = false;
|
|
147
250
|
}
|
|
148
|
-
if (!owner.current() || !binding.isCurrent(capture) || session !== agent.session)
|
|
149
|
-
return;
|
|
150
|
-
await base.applyMode(spec, capture);
|
|
151
251
|
if (!owner.current() || !binding.isCurrent(capture))
|
|
152
252
|
return;
|
|
153
253
|
const before = state.modeIndex;
|
|
@@ -156,15 +256,26 @@ export function createPermissionModeActions(ctx, state, deps) {
|
|
|
156
256
|
state.emit();
|
|
157
257
|
};
|
|
158
258
|
/** Shift+Tab: advance from the mode DERIVED from the session log (never a
|
|
159
|
-
* stored index), so manual `/plan` use can never desync the cycle
|
|
160
|
-
*
|
|
259
|
+
* stored index), so manual `/plan` use can never desync the cycle; `auto`
|
|
260
|
+
* is skipped unless {@link autoPresetConfirmed}. Never rejects — same
|
|
261
|
+
* fail-soft contract as {@link applyMode}. */
|
|
161
262
|
const cycleMode = async () => {
|
|
162
263
|
try {
|
|
163
264
|
const capture = binding.capture();
|
|
164
265
|
if (!owner.current() || !binding.isCurrent(capture))
|
|
165
266
|
return;
|
|
166
|
-
const
|
|
167
|
-
|
|
267
|
+
const events = snapshotLiveSessionEvents(capture.agent.session);
|
|
268
|
+
const index = derivePermissionModeIndex(sessionModes, events);
|
|
269
|
+
const autoConfirmed = autoPresetConfirmed(events);
|
|
270
|
+
// One full revolution, ending on the starting entry: a single-mode
|
|
271
|
+
// cycle re-applies it (the session's atoms may have drifted from it).
|
|
272
|
+
for (let step = 1; step <= sessionModes.length; step++) {
|
|
273
|
+
const next = sessionModes[(index + step) % sessionModes.length];
|
|
274
|
+
if (next.permission === PERMISSION_PRESET_AUTO && !autoConfirmed)
|
|
275
|
+
continue;
|
|
276
|
+
await applyMode(next, capture);
|
|
277
|
+
return;
|
|
278
|
+
}
|
|
168
279
|
}
|
|
169
280
|
catch (error) {
|
|
170
281
|
reportModeSwitchFailure(ctx, notify, refreshMode, error);
|
|
@@ -175,8 +286,34 @@ export function createPermissionModeActions(ctx, state, deps) {
|
|
|
175
286
|
const sessionEvent = event;
|
|
176
287
|
base.onSessionEvent(subject, sessionEvent);
|
|
177
288
|
const type = sessionEvent.type;
|
|
178
|
-
if (type === 'permission/preset')
|
|
289
|
+
if (type === 'permission/preset') {
|
|
179
290
|
refreshMode();
|
|
291
|
+
// Every durable identity change on the bound session teaches the
|
|
292
|
+
// preference — including switches the official /permission command
|
|
293
|
+
// performed on its own (typed input, other UIs over the same
|
|
294
|
+
// registry) — except the two plan-transition shapes: the canonical
|
|
295
|
+
// preset a plan entry reseats to (in flight below) and any identity
|
|
296
|
+
// switched to while plan is active (the exit restore re-seats the
|
|
297
|
+
// pre-plan one, and that restore event lands here again). Leaving
|
|
298
|
+
// `auto` is learned only when it lands on a target this TUI is driving
|
|
299
|
+
// (see trackUserPermissionSwitch), and an unlearned landing stays
|
|
300
|
+
// unlearned when a plan exit re-seats it; explicit mode switches
|
|
301
|
+
// persist on their own.
|
|
302
|
+
const events = snapshotLiveSessionEvents(subject);
|
|
303
|
+
const current = foldPermissionPreset(events);
|
|
304
|
+
const userDriven = current !== undefined && userPermissionTargets.includes(current);
|
|
305
|
+
if (planEntryInFlight || foldPlanActive(events)) {
|
|
306
|
+
// Plan transition shapes: never learned.
|
|
307
|
+
}
|
|
308
|
+
else if (previousPermissionPreset(events) === PERMISSION_PRESET_AUTO && !userDriven) {
|
|
309
|
+
if (current !== undefined)
|
|
310
|
+
unlearnedIdentity.set(subject, current);
|
|
311
|
+
}
|
|
312
|
+
else if (userDriven || current !== unlearnedIdentity.get(subject)) {
|
|
313
|
+
unlearnedIdentity.delete(subject);
|
|
314
|
+
persistPermissionPref(current);
|
|
315
|
+
}
|
|
316
|
+
}
|
|
180
317
|
if (type !== 'plan/mode' || sessionEvent.data.active !== false)
|
|
181
318
|
return;
|
|
182
319
|
const remembered = permission.prePlanPermissionIdentity(subject);
|
|
@@ -203,12 +340,97 @@ export function createPermissionModeActions(ctx, state, deps) {
|
|
|
203
340
|
});
|
|
204
341
|
});
|
|
205
342
|
};
|
|
343
|
+
/** The composition's default preset: the identity `dsh-permission-presets`
|
|
344
|
+
* pins into EVERY fresh session before it is published (`session/created` →
|
|
345
|
+
* `pinInitialPermission`), read fail-closed from the mounted service —
|
|
346
|
+
* undefined when it is absent or answers nothing usable. */
|
|
347
|
+
const compositionDefaultPreset = () => {
|
|
348
|
+
try {
|
|
349
|
+
const service = ctx.get('permissionPresets');
|
|
350
|
+
const value = service?.defaultPreset;
|
|
351
|
+
return typeof value === 'string' && value !== '' ? value : undefined;
|
|
352
|
+
}
|
|
353
|
+
catch {
|
|
354
|
+
return undefined;
|
|
355
|
+
}
|
|
356
|
+
};
|
|
357
|
+
/** Seed a session that never customized its permission planes with the
|
|
358
|
+
* persisted preference (permissionPrefs.ts): the last preset the user
|
|
359
|
+
* switched to, applied through the same official /permission path every
|
|
360
|
+
* manual switch takes. Never rejects.
|
|
361
|
+
*
|
|
362
|
+
* Holding permission-plane events is NOT evidence of a user choice: the
|
|
363
|
+
* composition pins `permission/preset` + `sandbox/mode` + `approval/policy`
|
|
364
|
+
* into every fresh session at creation. So a session only owns its planes
|
|
365
|
+
* when the log shows more than that pin — it ran a turn, or its durable
|
|
366
|
+
* identity is one the composition did not pin (`custom`, a preset a user
|
|
367
|
+
* switched to, a resumed log's own state). Everything else is untouched
|
|
368
|
+
* and seeds, which is what "starts where the last session ended" means.
|
|
369
|
+
*
|
|
370
|
+
* Yields to a DSH_PERMISSION_MODE launch pin (the composition's
|
|
371
|
+
* sandbox-policy/approval defaults came from it, so that invocation
|
|
372
|
+
* explicitly asked for that start state) and to shadow runtimes, which
|
|
373
|
+
* must not write durable session policy. */
|
|
374
|
+
const applyRememberedPermission = async () => {
|
|
375
|
+
try {
|
|
376
|
+
if (deps.runtime.mode === 'passive-shadow' || deps.runtime.mode === 'replay-shadow')
|
|
377
|
+
return;
|
|
378
|
+
const pinned = process.env.DSH_PERMISSION_MODE;
|
|
379
|
+
if (pinned !== undefined && pinned !== '')
|
|
380
|
+
return;
|
|
381
|
+
const pref = readPermissionPref();
|
|
382
|
+
// `auto` is session-only; a preference written before that rule never
|
|
383
|
+
// seeds a fresh session into it.
|
|
384
|
+
if (pref === undefined || pref === PERMISSION_PRESET_AUTO)
|
|
385
|
+
return;
|
|
386
|
+
const agent = binding.agent;
|
|
387
|
+
const session = agent.session;
|
|
388
|
+
if (permissionPrefSeeded.has(session))
|
|
389
|
+
return;
|
|
390
|
+
const events = snapshotLiveSessionEvents(session);
|
|
391
|
+
const pinnedIdentity = compositionDefaultPreset();
|
|
392
|
+
let touchesPlanes = false;
|
|
393
|
+
for (const event of events) {
|
|
394
|
+
const known = event.type;
|
|
395
|
+
if (known === 'permission/preset' || known === 'sandbox/mode' || known === 'approval/policy') {
|
|
396
|
+
touchesPlanes = true;
|
|
397
|
+
}
|
|
398
|
+
else if (known === 'turn/start') {
|
|
399
|
+
// The session has been used: its planes are the ones it ran with,
|
|
400
|
+
// never this boot's preference.
|
|
401
|
+
return;
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
if (touchesPlanes && (pinnedIdentity === undefined || foldPermissionPreset(events) !== pinnedIdentity))
|
|
405
|
+
return;
|
|
406
|
+
// Fail closed against the mounted roster: an identity this
|
|
407
|
+
// deployment does not offer must not be driven through /permission
|
|
408
|
+
// (it would surface as a boot-time switch failure).
|
|
409
|
+
const snapshot = roster.readSnapshot(agent);
|
|
410
|
+
if (snapshot === undefined || !snapshot.options.some(option => option.value === pref)) {
|
|
411
|
+
permissionPrefSeeded.add(session);
|
|
412
|
+
ctx.logger.debug(`dsh-tui: remembered permission preset "${pref}" is not on the mounted roster; skipped`);
|
|
413
|
+
return;
|
|
414
|
+
}
|
|
415
|
+
permissionPrefSeeded.add(session);
|
|
416
|
+
const ok = await permission.applyPermissionIdentity(pref);
|
|
417
|
+
if (ok && owner.current() && session === binding.agent.session) {
|
|
418
|
+
refreshMode();
|
|
419
|
+
state.emit();
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
catch (error) {
|
|
423
|
+
ctx.logger.warn(`dsh-tui: remembered permission could not be applied: ${error instanceof Error ? error.message : String(error)}`);
|
|
424
|
+
}
|
|
425
|
+
};
|
|
206
426
|
return {
|
|
207
427
|
refreshMode,
|
|
208
428
|
cycleMode,
|
|
209
429
|
applyMode,
|
|
210
430
|
onSessionEvent,
|
|
211
|
-
|
|
431
|
+
applyRememberedPermission,
|
|
432
|
+
runPermissionPreset: name => trackUserPermissionSwitch(name, () => permission.runPermissionPreset(name)),
|
|
433
|
+
trackUserPermissionSwitch,
|
|
212
434
|
permission,
|
|
213
435
|
};
|
|
214
436
|
}
|
|
@@ -25,9 +25,13 @@ export declare function createModelActions(ctx: Context, state: Pick<ChannelStat
|
|
|
25
25
|
selection: ModelSelectionRef;
|
|
26
26
|
applyPreferredEffort: () => Promise<void>;
|
|
27
27
|
refreshEffortLevels: () => void;
|
|
28
|
-
listEfforts: (
|
|
28
|
+
listEfforts: (route?: {
|
|
29
|
+
provider: string;
|
|
30
|
+
model: string;
|
|
31
|
+
}) => Promise<{
|
|
29
32
|
efforts: readonly EffortOption[];
|
|
30
33
|
defaultEffort: string | undefined;
|
|
34
|
+
levelsFallback?: true;
|
|
31
35
|
}>;
|
|
32
36
|
setEffort: (id: string) => Promise<boolean>;
|
|
33
37
|
setDefaultEffort: (id: string | undefined) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-actions.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/model-actions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAC3E,OAAO,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AACtE,OAAO,EAAwB,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"model-actions.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/model-actions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAC3E,OAAO,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AACtE,OAAO,EAAwB,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AAOpF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE1E,KAAK,OAAO,GAAG,iBAAiB,CAAA;AAEhC;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,OAAO,EACZ,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,UAAU,GAAG,OAAO,GAAG,iBAAiB,GAAG,cAAc,GAAG,aAAa,GAAG,SAAS,GAAG,eAAe,GAAG,MAAM,CAAC,EAC3I,IAAI,EAAE;IACJ,KAAK,EAAE,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC,CAAA;IACpC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,GAAG,WAAW,CAAC,CAAA;IAC/C,SAAS,EAAE,iBAAiB,CAAA;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,KAAK,IAAI,KAAK,CAAA;IACd,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAA;IAC9B;6EACyE;IACzE,mBAAmB,IAAI,IAAI,CAAA;CAC5B;;gCAiGsC,OAAO,CAAC,IAAI,CAAC;+BAuDpB,IAAI;0BAqBD;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAG,OAAO,CAAC;QAAE,OAAO,EAAE,SAAS,YAAY,EAAE,CAAC;QAAC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,cAAc,CAAC,EAAE,IAAI,CAAA;KAAE,CAAC;oBA0BnJ,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC;2BAqBxB,MAAM,GAAG,SAAS,KAAG,IAAI;4BAM1B,IAAI;sBAeV,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC;;YAxOnB,MAAM;cAAQ,MAAM;;8BAmPzB,IAAI;0BACR,IAAI;;6BASD,IAAI;;uBAOJ,OAAO,CAAC,SAAS,YAAY,EAAE,CAAC;6BAQxB,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC;EAkChE"}
|
|
@@ -5,6 +5,7 @@ import { snapshotLiveSessionEvents } from '../compat/liveSession.js';
|
|
|
5
5
|
import { getLang, t, tOr } from '../../i18n.js';
|
|
6
6
|
import { migratePresetPref, writePresetPref } from '../../presetPrefs.js';
|
|
7
7
|
import { presetDisplayId, resolveCompatiblePreset, rosterOf } from '../preset-resolution.js';
|
|
8
|
+
import { installedMeetsVersion } from '../contract.js';
|
|
8
9
|
/**
|
|
9
10
|
* Route metadata, effort preference and preset/model catalog actions.
|
|
10
11
|
* This owns the async catalog caches and their generation fences; callers only
|
|
@@ -13,7 +14,7 @@ import { presetDisplayId, resolveCompatiblePreset, rosterOf } from '../preset-re
|
|
|
13
14
|
export function createModelActions(ctx, state, deps) {
|
|
14
15
|
const { owner, selection, notify } = deps;
|
|
15
16
|
const llmRuntime = ctx.get('llm');
|
|
16
|
-
let preferredEffort = deps.initialEffort
|
|
17
|
+
let preferredEffort = readEffortPref() ?? deps.initialEffort;
|
|
17
18
|
// Last fallback notice shown for a (preferred → applied) pair: bind fires on
|
|
18
19
|
// every session switch, so an unchanged downgrade must not re-toast.
|
|
19
20
|
let lastEffortFallbackNotice;
|
|
@@ -47,14 +48,16 @@ export function createModelActions(ctx, state, deps) {
|
|
|
47
48
|
deps.checkContextWarning();
|
|
48
49
|
}
|
|
49
50
|
};
|
|
50
|
-
/** Localized label of a standard ladder tier
|
|
51
|
-
*
|
|
51
|
+
/** Localized label of a standard ladder tier. The five names are the
|
|
52
|
+
* host's own vocabulary (`effort-tier-*`): they label a *route* that
|
|
53
|
+
* declares reasoning support without a tier list, whichever backend serves
|
|
54
|
+
* it. A backend that shows its own ladder carries its own copy (B-3). */
|
|
52
55
|
const STANDARD_EFFORT_LABEL_KEYS = {
|
|
53
|
-
low: '
|
|
54
|
-
medium: '
|
|
55
|
-
high: '
|
|
56
|
-
xhigh: '
|
|
57
|
-
max: '
|
|
56
|
+
low: 'effort-tier-low',
|
|
57
|
+
medium: 'effort-tier-medium',
|
|
58
|
+
high: 'effort-tier-high',
|
|
59
|
+
xhigh: 'effort-tier-xhigh',
|
|
60
|
+
max: 'effort-tier-max',
|
|
58
61
|
};
|
|
59
62
|
const standardEffortLabel = (id) => {
|
|
60
63
|
const key = STANDARD_EFFORT_LABEL_KEYS[id];
|
|
@@ -134,26 +137,18 @@ export function createModelActions(ctx, state, deps) {
|
|
|
134
137
|
state.reasoningEffort = shipped;
|
|
135
138
|
state.emit();
|
|
136
139
|
}
|
|
137
|
-
//
|
|
138
|
-
//
|
|
139
|
-
//
|
|
140
|
-
//
|
|
141
|
-
//
|
|
142
|
-
// OLD tier back on the wire while the readout above announces the model
|
|
143
|
-
// default. Drop the effort only: the provider/model half of the pin is
|
|
144
|
-
// this route's, not the stale tier's. No emit — setDefaultEffort reaches
|
|
145
|
-
// here through that same non-bind path, and nothing UI-visible reads this
|
|
146
|
-
// ref (it is the router's ModelSelectionRef, not the IDE ChannelSelection
|
|
147
|
-
// the status line shows); the readout above already emits when it moves.
|
|
140
|
+
// Existing agents retain their pin across reattachment, and /settings
|
|
141
|
+
// reaches this path without a bind. Remove an unsupported old effort
|
|
142
|
+
// while keeping the selected route; otherwise the wire would retain the
|
|
143
|
+
// old tier while the readout announces the model default. The ref is not
|
|
144
|
+
// UI state; the readout above already emits when it moves.
|
|
148
145
|
if (selection.current?.reasoningEffort !== undefined) {
|
|
149
146
|
selection.current = { provider: capture.provider, model: capture.model };
|
|
150
147
|
}
|
|
151
148
|
return;
|
|
152
149
|
}
|
|
153
|
-
// Dedupe gates ONLY the toast:
|
|
154
|
-
//
|
|
155
|
-
// early return here would ship the model default from the second session
|
|
156
|
-
// on (review C1). The status line shows the tier that actually ships.
|
|
150
|
+
// Dedupe gates ONLY the toast: a new Agent has a fresh selection, so the
|
|
151
|
+
// preference must apply even when the previous Agent used the same tier.
|
|
157
152
|
const fresh = lastEffortFallbackNotice?.preferred !== preferredEffort || lastEffortFallbackNotice.applied !== applied;
|
|
158
153
|
if (applied !== preferredEffort && fresh) {
|
|
159
154
|
lastEffortFallbackNotice = { preferred: preferredEffort, applied };
|
|
@@ -190,7 +185,24 @@ export function createModelActions(ctx, state, deps) {
|
|
|
190
185
|
notify(t('effort-switched', { name: effort.name }));
|
|
191
186
|
state.emit();
|
|
192
187
|
};
|
|
193
|
-
const listEfforts = async () => {
|
|
188
|
+
const listEfforts = async (route) => {
|
|
189
|
+
if (route !== undefined) {
|
|
190
|
+
const binding = deps.binding.capture();
|
|
191
|
+
if (llmRuntime === undefined || typeof llmRuntime.resolveModelInfo !== 'function')
|
|
192
|
+
return { efforts: [], defaultEffort: undefined };
|
|
193
|
+
// Preview is independent of the live effort operation: browsing the
|
|
194
|
+
// picker must neither invalidate a pending preference nor publish the
|
|
195
|
+
// candidate's context window/tiers into the current session.
|
|
196
|
+
const info = await llmRuntime.resolveModelInfo(route.provider, route.model);
|
|
197
|
+
if (!owner.current() || !deps.binding.isCurrent(binding))
|
|
198
|
+
return { efforts: [], defaultEffort: undefined };
|
|
199
|
+
return {
|
|
200
|
+
efforts: tiersOf(info.reasoning),
|
|
201
|
+
defaultEffort: typeof info.reasoning === 'object' && info.reasoning !== null ? info.reasoning.defaultEffort : undefined,
|
|
202
|
+
...(info.reasoning === true || (typeof info.reasoning === 'object' && info.reasoning !== null && info.reasoning.efforts === undefined)
|
|
203
|
+
? { levelsFallback: true } : {}),
|
|
204
|
+
};
|
|
205
|
+
}
|
|
194
206
|
const capture = captureEffort();
|
|
195
207
|
const resolved = await resolveEfforts(capture);
|
|
196
208
|
if (resolved === 'stale')
|
|
@@ -236,10 +248,11 @@ export function createModelActions(ctx, state, deps) {
|
|
|
236
248
|
};
|
|
237
249
|
/**
|
|
238
250
|
* Re-seat the future-sessions default reasoning effort. `id` is the settings
|
|
239
|
-
* user layer (
|
|
240
|
-
* an absent level re-derives the boot chain (
|
|
241
|
-
*
|
|
242
|
-
*
|
|
251
|
+
* user layer (an explicit value there outranks the persisted `/effort`
|
|
252
|
+
* choice); an absent level re-derives the boot chain (the persisted
|
|
253
|
+
* `/effort` choice → the cordis.yml `effort` deployment default). Also
|
|
254
|
+
* re-pins the live agent when its route offers the level, so the change
|
|
255
|
+
* lands on the next request. No-op when unchanged.
|
|
243
256
|
*/
|
|
244
257
|
const setDefaultEffort = (id) => {
|
|
245
258
|
const resolved = resolveEffortDefault(id, deps.initialEffort, readEffortPref());
|
|
@@ -268,7 +281,13 @@ export function createModelActions(ctx, state, deps) {
|
|
|
268
281
|
const listModels = () => {
|
|
269
282
|
if (llmRuntime === undefined)
|
|
270
283
|
return Promise.resolve([]);
|
|
271
|
-
return Promise.all(llmRuntime.listProviders().map(provider => llmRuntime.listModels(provider.id).catch(() => []))).then(lists => lists.flat()
|
|
284
|
+
return Promise.all(llmRuntime.listProviders().map(provider => llmRuntime.listModels(provider.id).catch(() => []))).then(lists => lists.flat().map(model => {
|
|
285
|
+
// rc.2's official model-label plugin is display-only; keep route IDs intact.
|
|
286
|
+
const official = model.provider === 'deepseek-account' || model.provider === 'deepseek-official';
|
|
287
|
+
return official && model.id === 'deepseek-flash' && model.name === 'DeepSeek-V4.1-Flash' &&
|
|
288
|
+
installedMeetsVersion('@deepseek-ai/dsh-web-app', '0.2.1-rc.2')
|
|
289
|
+
? { ...model, name: `${model.name} 1017` } : model;
|
|
290
|
+
}));
|
|
272
291
|
};
|
|
273
292
|
const listProviders = () => Promise.resolve(llmRuntime === undefined ? [] : llmRuntime.listProviders().map(info => ({ ...info })));
|
|
274
293
|
const dropModelNodeCache = () => { modelNodeCache.generation += 1; modelNodeCache.nodes = undefined; modelNodeCache.load = undefined; };
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Context } from '@deepseek-ai/cordis';
|
|
2
|
+
import type { Agent, ModelSelectionRef } from '@deepseek-ai/dsh-agent';
|
|
3
|
+
import { type ChannelOwner } from './owner.js';
|
|
4
|
+
/** Routing belongs to the live agent, including turns running while parked.
|
|
5
|
+
* The foreground facade follows the binding; each waterfall captures its own
|
|
6
|
+
* agent's ref so a later binding can never supply its route. */
|
|
7
|
+
export declare function createModelSelection(ctx: Context, deps: {
|
|
8
|
+
owner: ChannelOwner;
|
|
9
|
+
agent(): Agent;
|
|
10
|
+
}): {
|
|
11
|
+
selection: ModelSelectionRef;
|
|
12
|
+
bind: (agent: Agent, route: {
|
|
13
|
+
provider: string;
|
|
14
|
+
model: string;
|
|
15
|
+
}) => void;
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=model-selection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-selection.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/model-selection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,KAAK,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAEtE,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,YAAY,CAAA;AAElE;;gEAEgE;AAChE,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE;IACvD,KAAK,EAAE,YAAY,CAAA;IACnB,KAAK,IAAI,KAAK,CAAA;CACf;;kBAesB,KAAK,SAAS;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAG,IAAI;EA2E9E"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { boundContextSummary, createUserMessage } from '@deepseek-ai/dsh-llm';
|
|
2
|
+
import { createChannelOwner } from './owner.js';
|
|
3
|
+
/** Routing belongs to the live agent, including turns running while parked.
|
|
4
|
+
* The foreground facade follows the binding; each waterfall captures its own
|
|
5
|
+
* agent's ref so a later binding can never supply its route. */
|
|
6
|
+
export function createModelSelection(ctx, deps) {
|
|
7
|
+
const entries = new Map();
|
|
8
|
+
const foreground = () => {
|
|
9
|
+
const entry = entries.get(deps.agent());
|
|
10
|
+
if (entry === undefined)
|
|
11
|
+
throw new Error('dsh-tui: model selection has not been bound');
|
|
12
|
+
return entry.ref;
|
|
13
|
+
};
|
|
14
|
+
const selection = {
|
|
15
|
+
get current() { return foreground().current; },
|
|
16
|
+
set current(value) { foreground().current = value; },
|
|
17
|
+
get assembled() { return foreground().assembled; },
|
|
18
|
+
set assembled(value) { foreground().assembled = value; },
|
|
19
|
+
};
|
|
20
|
+
deps.owner.own(ctx.on('agent/disposed', ({ agent }) => entries.get(agent)?.release()));
|
|
21
|
+
const bind = (agent, route) => {
|
|
22
|
+
deps.owner.assertActive();
|
|
23
|
+
if (entries.has(agent))
|
|
24
|
+
return;
|
|
25
|
+
const recorded = agent.session.requestHeader?.()?.config;
|
|
26
|
+
const hasCreatedRoute = agent.options?.provider !== undefined && agent.options.model !== undefined;
|
|
27
|
+
// Seeded children can deliberately replace the inherited header's route.
|
|
28
|
+
// Restore a recorded pin only when the caller actually adopted that route.
|
|
29
|
+
const usesRecordedRoute = recorded?.provider === route.provider && recorded?.model === route.model;
|
|
30
|
+
const ref = {
|
|
31
|
+
current: route.provider !== '' && route.model !== '' &&
|
|
32
|
+
(!hasCreatedRoute || (usesRecordedRoute &&
|
|
33
|
+
(route.provider !== agent.options.provider || route.model !== agent.options.model)))
|
|
34
|
+
? { ...route } : undefined,
|
|
35
|
+
assembled: undefined,
|
|
36
|
+
};
|
|
37
|
+
const lifetime = createChannelOwner();
|
|
38
|
+
lifetime.bind(deps.owner.current);
|
|
39
|
+
let assemblyOperation = 0;
|
|
40
|
+
const current = lifetime.current;
|
|
41
|
+
const release = deps.owner.own(() => {
|
|
42
|
+
entries.delete(agent);
|
|
43
|
+
lifetime.dispose();
|
|
44
|
+
});
|
|
45
|
+
entries.set(agent, { ref, release });
|
|
46
|
+
const own = (dispose) => {
|
|
47
|
+
lifetime.own(dispose);
|
|
48
|
+
lifetime.assertActive();
|
|
49
|
+
};
|
|
50
|
+
try {
|
|
51
|
+
own(agent.ctx.on('system-prompt/assemble', async (_assembly, _context, next) => {
|
|
52
|
+
const operation = ++assemblyOperation;
|
|
53
|
+
const selected = ref.current;
|
|
54
|
+
const assembled = await next();
|
|
55
|
+
if (!current())
|
|
56
|
+
return assembled;
|
|
57
|
+
// A slow context-panel inspection must not replace a newer turn's route.
|
|
58
|
+
if (operation === assemblyOperation)
|
|
59
|
+
ref.assembled = selected;
|
|
60
|
+
if (selected === undefined)
|
|
61
|
+
return assembled;
|
|
62
|
+
return { ...assembled, variables: { ...assembled.variables, provider: selected.provider, model: selected.model } };
|
|
63
|
+
}));
|
|
64
|
+
own(agent.ctx.on('agent/request', async (_payload, next) => {
|
|
65
|
+
const resolved = await next();
|
|
66
|
+
if (!current())
|
|
67
|
+
return resolved;
|
|
68
|
+
const selected = ref.assembled;
|
|
69
|
+
if (selected === undefined)
|
|
70
|
+
return resolved;
|
|
71
|
+
const { reasoningEffort: _inheritedEffort, ...withoutInheritedEffort } = resolved;
|
|
72
|
+
return {
|
|
73
|
+
...withoutInheritedEffort,
|
|
74
|
+
provider: selected.provider,
|
|
75
|
+
model: selected.model,
|
|
76
|
+
...(selected.reasoningEffort === undefined ? {} : { reasoningEffort: selected.reasoningEffort }),
|
|
77
|
+
};
|
|
78
|
+
}));
|
|
79
|
+
// Match upstream installModelSelection's admission-time provenance.
|
|
80
|
+
own(agent.ctx.on('agent/pre-step', async ({ agent: subject, messages, signal, step }, next) => {
|
|
81
|
+
const decision = await next();
|
|
82
|
+
if (!current() || decision.kind === 'reject' || signal.aborted)
|
|
83
|
+
return decision;
|
|
84
|
+
if (decision.messages.length === 0 && (step === 1 || messages.length > 0))
|
|
85
|
+
return decision;
|
|
86
|
+
const selected = ref.assembled;
|
|
87
|
+
const previous = subject.session.requestHeader()?.config;
|
|
88
|
+
if (selected === undefined || previous === undefined ||
|
|
89
|
+
(selected.provider === previous.provider && selected.model === previous.model))
|
|
90
|
+
return decision;
|
|
91
|
+
const from = selected.provider === previous.provider ? previous.model : `${previous.provider}/${previous.model}`;
|
|
92
|
+
const to = selected.provider === previous.provider ? selected.model : `${selected.provider}/${selected.model}`;
|
|
93
|
+
return { ...decision, messages: [...decision.messages, createUserMessage({
|
|
94
|
+
content: [{ type: 'text', text: `[model changed: assistant turns above this point were generated by ${from}; the session continues with ${to}]` }],
|
|
95
|
+
// Older source unions lack this kind; the runtime shape is unchanged.
|
|
96
|
+
source: { kind: 'model-selection', form: 'notice', summary: boundContextSummary(`${from} → ${to}`) },
|
|
97
|
+
})] };
|
|
98
|
+
}, { prepend: true }));
|
|
99
|
+
}
|
|
100
|
+
catch (error) {
|
|
101
|
+
try {
|
|
102
|
+
release();
|
|
103
|
+
}
|
|
104
|
+
catch { /* preserve the registration failure */ }
|
|
105
|
+
throw error;
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
return { selection, bind };
|
|
109
|
+
}
|