@deepseek-harness-tui/dsh-tui 0.14.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +73 -14
- package/bin/dsh-tui.js +200 -34
- package/cordis.patch.yml +16 -52
- package/cordis.yml +6 -2
- package/guide/dsh-tui-guide/claude-backend.en.md +44 -7
- package/guide/dsh-tui-guide/claude-backend.md +28 -6
- package/guide/dsh-tui-guide/codex-backend.en.md +34 -7
- package/guide/dsh-tui-guide/codex-backend.md +17 -2
- package/guide/dsh-tui-guide/configuration.en.md +129 -16
- package/guide/dsh-tui-guide/configuration.md +110 -14
- package/guide/dsh-tui-guide/interaction.en.md +57 -24
- package/guide/dsh-tui-guide/interaction.md +42 -19
- package/guide/dsh-tui-guide/plugins.en.md +36 -3
- package/guide/dsh-tui-guide/plugins.md +21 -2
- package/guide/dsh-tui-guide/themes.en.md +23 -14
- package/guide/dsh-tui-guide/themes.md +19 -12
- package/guide/dsh-tui-guide/user-guide.en.md +51 -20
- package/guide/dsh-tui-guide/user-guide.md +41 -21
- package/lib/settings.json +103 -9
- package/lib/types/adapter/channel/ui-policy.d.ts +1 -1
- package/lib/types/adapter/channel/ui-policy.d.ts.map +1 -1
- package/lib/types/adapter/channel/ui-policy.js +3 -0
- package/lib/types/adapter/channel/ui.d.ts +2 -0
- package/lib/types/adapter/channel/ui.d.ts.map +1 -1
- package/lib/types/adapter/channel/ui.js +6 -2
- package/lib/types/adapter/kernel/runtime.d.ts.map +1 -1
- package/lib/types/adapter/kernel/runtime.js +2 -0
- package/lib/types/adapter/ports/channel-settings.d.ts +9 -0
- package/lib/types/adapter/ports/channel-settings.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-ui.d.ts +50 -12
- package/lib/types/adapter/ports/channel-ui.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-view.d.ts +21 -0
- package/lib/types/adapter/ports/channel-view.d.ts.map +1 -1
- package/lib/types/adapter/spec/backend-capabilities.d.ts +22 -0
- package/lib/types/adapter/spec/backend-capabilities.d.ts.map +1 -0
- package/lib/types/adapter/spec/backend-capabilities.js +49 -0
- package/lib/types/adapter/spec/protocol-constants.d.ts.map +1 -1
- package/lib/types/adapter/spec/protocol-constants.js +10 -3
- package/lib/types/adapter/spec/tui-contributions.d.ts +3 -0
- package/lib/types/adapter/spec/tui-contributions.d.ts.map +1 -1
- package/lib/types/adapter/spec/tui-contributions.js +7 -0
- package/lib/types/adapter/standard/registry.d.ts +6 -0
- package/lib/types/adapter/standard/registry.d.ts.map +1 -1
- package/lib/types/adapter/standard/registry.js +65 -15
- package/lib/types/adapter/standard/tui-extension.d.ts.map +1 -1
- package/lib/types/adapter/standard/tui-extension.js +7 -1
- package/lib/types/adapter/standard/types.d.ts +10 -1
- package/lib/types/adapter/standard/types.d.ts.map +1 -1
- package/lib/types/adapter/upstream/host-descriptor-driver.d.ts.map +1 -1
- package/lib/types/adapter/upstream/host-descriptor-driver.js +52 -0
- package/lib/types/agent/backend-manifest.d.ts +152 -0
- package/lib/types/agent/backend-manifest.d.ts.map +1 -0
- package/lib/types/agent/backend-manifest.js +14 -0
- package/lib/types/agent/backend.d.ts +71 -5
- package/lib/types/agent/backend.d.ts.map +1 -1
- package/lib/types/agent/capabilities.d.ts +6 -0
- package/lib/types/agent/capabilities.d.ts.map +1 -1
- package/lib/types/agent/index.d.ts +2 -0
- package/lib/types/agent/index.d.ts.map +1 -1
- package/lib/types/agent/refs.d.ts +11 -1
- package/lib/types/agent/refs.d.ts.map +1 -1
- package/lib/types/agent/starting-session.d.ts +4 -0
- package/lib/types/agent/starting-session.d.ts.map +1 -0
- package/lib/types/agent/starting-session.js +19 -0
- package/lib/types/backends/claude/activity.d.ts +1 -1
- package/lib/types/backends/claude/activity.d.ts.map +1 -1
- package/lib/types/backends/claude/activity.js +5 -5
- package/lib/types/backends/claude/auth.d.ts.map +1 -1
- package/lib/types/backends/claude/auth.js +10 -3
- package/lib/types/backends/claude/backend.d.ts.map +1 -1
- package/lib/types/backends/claude/backend.js +103 -29
- package/lib/types/backends/claude/catalog.d.ts +2 -1
- package/lib/types/backends/claude/catalog.d.ts.map +1 -1
- package/lib/types/backends/claude/catalog.js +15 -5
- package/lib/types/backends/claude/channels.d.ts +5 -3
- package/lib/types/backends/claude/channels.d.ts.map +1 -1
- package/lib/types/backends/claude/channels.js +5 -4
- package/lib/types/backends/claude/contract.d.ts +4 -0
- package/lib/types/backends/claude/contract.d.ts.map +1 -1
- package/lib/types/backends/claude/contract.js +4 -0
- package/lib/types/backends/claude/controls.d.ts +4 -0
- package/lib/types/backends/claude/controls.d.ts.map +1 -1
- package/lib/types/backends/claude/controls.js +34 -42
- package/lib/types/backends/claude/dialogs.d.ts +8 -2
- package/lib/types/backends/claude/dialogs.d.ts.map +1 -1
- package/lib/types/backends/claude/dialogs.js +24 -16
- package/lib/types/backends/claude/images.d.ts +1 -1
- package/lib/types/backends/claude/images.d.ts.map +1 -1
- package/lib/types/backends/claude/images.js +7 -7
- package/lib/types/backends/claude/manifest.d.ts +21 -0
- package/lib/types/backends/claude/manifest.d.ts.map +1 -0
- package/lib/types/backends/claude/manifest.js +29 -0
- package/lib/types/backends/claude/older-history.js +2 -2
- package/lib/types/backends/claude/permissions.js +11 -11
- package/lib/types/backends/claude/prefs.d.ts +4 -2
- package/lib/types/backends/claude/prefs.d.ts.map +1 -1
- package/lib/types/backends/claude/prefs.js +4 -3
- package/lib/types/backends/claude/process.d.ts +16 -4
- package/lib/types/backends/claude/process.d.ts.map +1 -1
- package/lib/types/backends/claude/process.js +100 -37
- package/lib/types/backends/claude/send-message.d.ts +1 -1
- package/lib/types/backends/claude/send-message.d.ts.map +1 -1
- package/lib/types/backends/claude/session/auth.js +22 -22
- package/lib/types/backends/claude/session/channels.d.ts +4 -0
- package/lib/types/backends/claude/session/channels.d.ts.map +1 -1
- package/lib/types/backends/claude/session/channels.js +5 -3
- package/lib/types/backends/claude/session/lifecycle.d.ts.map +1 -1
- package/lib/types/backends/claude/session/lifecycle.js +31 -23
- package/lib/types/backends/claude/session/store.js +8 -8
- package/lib/types/backends/claude/session/subagents.js +2 -2
- package/lib/types/backends/claude/session/types.d.ts +7 -0
- package/lib/types/backends/claude/session/types.d.ts.map +1 -1
- package/lib/types/backends/claude/side-query.js +3 -3
- package/lib/types/backends/claude/task-output.js +5 -5
- package/lib/types/backends/claude/text.d.ts +778 -0
- package/lib/types/backends/claude/text.d.ts.map +1 -0
- package/lib/types/backends/claude/text.js +298 -0
- package/lib/types/backends/claude/transcript-file.d.ts +1 -1
- package/lib/types/backends/claude/transcript-file.d.ts.map +1 -1
- package/lib/types/backends/claude/transcript-file.js +4 -4
- package/lib/types/backends/claude/translate/attempts.js +2 -2
- package/lib/types/backends/claude/translate/core.js +3 -3
- package/lib/types/backends/claude/translate/messages.js +4 -4
- package/lib/types/backends/claude/translate/system.js +14 -14
- package/lib/types/backends/claude/translate/tasks.js +2 -2
- package/lib/types/backends/claude/translate/types.d.ts +1 -1
- package/lib/types/backends/claude/translate/types.d.ts.map +1 -1
- package/lib/types/backends/codex/auth/external-tokens.js +16 -16
- package/lib/types/backends/codex/auth/status.js +14 -14
- package/lib/types/backends/codex/backend.d.ts +4 -19
- package/lib/types/backends/codex/backend.d.ts.map +1 -1
- package/lib/types/backends/codex/backend.js +118 -25
- package/lib/types/backends/codex/catalog.d.ts +2 -1
- package/lib/types/backends/codex/catalog.d.ts.map +1 -1
- package/lib/types/backends/codex/catalog.js +63 -18
- package/lib/types/backends/codex/channels.d.ts +6 -3
- package/lib/types/backends/codex/channels.d.ts.map +1 -1
- package/lib/types/backends/codex/channels.js +15 -13
- package/lib/types/backends/codex/detect.d.ts.map +1 -1
- package/lib/types/backends/codex/detect.js +9 -6
- package/lib/types/backends/codex/manifest.d.ts +30 -0
- package/lib/types/backends/codex/manifest.d.ts.map +1 -0
- package/lib/types/backends/codex/manifest.js +23 -0
- package/lib/types/backends/codex/prefs.d.ts +4 -2
- package/lib/types/backends/codex/prefs.d.ts.map +1 -1
- package/lib/types/backends/codex/prefs.js +4 -3
- package/lib/types/backends/codex/rpc/hub.js +2 -2
- package/lib/types/backends/codex/session/activity.d.ts +1 -1
- package/lib/types/backends/codex/session/activity.d.ts.map +1 -1
- package/lib/types/backends/codex/session/activity.js +13 -13
- package/lib/types/backends/codex/session/approvals.js +30 -30
- package/lib/types/backends/codex/session/commands.d.ts +8 -2
- package/lib/types/backends/codex/session/commands.d.ts.map +1 -1
- package/lib/types/backends/codex/session/commands.js +71 -23
- package/lib/types/backends/codex/session/controls.d.ts +1 -1
- package/lib/types/backends/codex/session/controls.d.ts.map +1 -1
- package/lib/types/backends/codex/session/controls.js +21 -16
- package/lib/types/backends/codex/session/goals.d.ts.map +1 -1
- package/lib/types/backends/codex/session/goals.js +3 -3
- package/lib/types/backends/codex/session/history.js +2 -2
- package/lib/types/backends/codex/session/images.js +8 -8
- package/lib/types/backends/codex/session/input.d.ts +6 -2
- package/lib/types/backends/codex/session/input.d.ts.map +1 -1
- package/lib/types/backends/codex/session/input.js +55 -13
- package/lib/types/backends/codex/session/plan-review.js +6 -6
- package/lib/types/backends/codex/session/session.d.ts.map +1 -1
- package/lib/types/backends/codex/session/session.js +66 -34
- package/lib/types/backends/codex/session/side-query.d.ts.map +1 -1
- package/lib/types/backends/codex/session/side-query.js +27 -9
- package/lib/types/backends/codex/session/state.d.ts +6 -1
- package/lib/types/backends/codex/session/state.d.ts.map +1 -1
- package/lib/types/backends/codex/session/subagents.js +5 -5
- package/lib/types/backends/codex/session/tasks.js +4 -4
- package/lib/types/backends/codex/text.d.ts +933 -0
- package/lib/types/backends/codex/text.d.ts.map +1 -0
- package/lib/types/backends/codex/text.js +313 -0
- package/lib/types/backends/codex/translate/items.js +4 -4
- package/lib/types/backends/codex/translate/live.d.ts.map +1 -1
- package/lib/types/backends/codex/translate/live.js +11 -8
- package/lib/types/backends/codex/translate/notices.js +10 -10
- package/lib/types/backends/shared/channel-slug.d.ts +4 -0
- package/lib/types/backends/shared/channel-slug.d.ts.map +1 -0
- package/lib/types/backends/shared/channel-slug.js +25 -0
- package/lib/types/backends/shared/channel-tokens.d.ts.map +1 -1
- package/lib/types/backends/shared/channel-tokens.js +30 -23
- package/lib/types/{channel → backends/shared}/elicitation.d.ts +78 -21
- package/lib/types/backends/shared/elicitation.d.ts.map +1 -0
- package/lib/types/{channel → backends/shared}/elicitation.js +64 -66
- package/lib/types/backends/shared/image-size.d.ts +33 -0
- package/lib/types/backends/shared/image-size.d.ts.map +1 -0
- package/lib/types/backends/shared/image-size.js +134 -0
- package/lib/types/{utils → backends/shared}/jsonl.d.ts +5 -1
- package/lib/types/backends/shared/jsonl.d.ts.map +1 -0
- package/lib/types/{utils → backends/shared}/jsonl.js +5 -1
- package/lib/types/backends/shared/localized-text.d.ts +30 -0
- package/lib/types/backends/shared/localized-text.d.ts.map +1 -0
- package/lib/types/backends/shared/localized-text.js +24 -0
- package/lib/types/backends/shared/platform-text.d.ts +88 -0
- package/lib/types/backends/shared/platform-text.d.ts.map +1 -0
- package/lib/types/backends/shared/platform-text.js +33 -0
- package/lib/types/branding.d.ts +13 -0
- package/lib/types/branding.d.ts.map +1 -1
- package/lib/types/branding.js +18 -0
- package/lib/types/channel/channel-slug.d.ts +3 -1
- package/lib/types/channel/channel-slug.d.ts.map +1 -1
- package/lib/types/channel/channel-slug.js +3 -1
- package/lib/types/channel/sanitize.d.ts +7 -0
- package/lib/types/channel/sanitize.d.ts.map +1 -1
- package/lib/types/channel/sanitize.js +9 -0
- package/lib/types/channel/usage.d.ts.map +1 -1
- package/lib/types/channel/usage.js +5 -0
- package/lib/types/commands.d.ts +5 -0
- package/lib/types/commands.d.ts.map +1 -1
- package/lib/types/commands.js +47 -8
- package/lib/types/components/AgentMessageComposer.d.ts.map +1 -1
- package/lib/types/components/AgentMessageComposer.js +3 -2
- package/lib/types/components/BtwPanel.d.ts.map +1 -1
- package/lib/types/components/BtwPanel.js +4 -2
- package/lib/types/components/Chat/JobCard.js +3 -3
- package/lib/types/components/CommandSuggestions.d.ts.map +1 -1
- package/lib/types/components/CommandSuggestions.js +20 -6
- package/lib/types/components/ContextBarView.d.ts +5 -1
- package/lib/types/components/ContextBarView.d.ts.map +1 -1
- package/lib/types/components/ContextBarView.js +6 -3
- package/lib/types/components/ExtensionDialog.d.ts.map +1 -1
- package/lib/types/components/ExtensionDialog.js +2 -3
- package/lib/types/components/GoalTodoPanel.d.ts.map +1 -1
- package/lib/types/components/GoalTodoPanel.js +14 -3
- package/lib/types/components/InlineMathParagraph.js +1 -1
- package/lib/types/components/KernelPicker.d.ts.map +1 -1
- package/lib/types/components/KernelPicker.js +1 -1
- package/lib/types/components/LogoV2.d.ts.map +1 -1
- package/lib/types/components/LogoV2.js +9 -6
- package/lib/types/components/MarkdownTable.d.ts.map +1 -1
- package/lib/types/components/MarkdownTable.js +4 -3
- package/lib/types/components/MessageList.d.ts.map +1 -1
- package/lib/types/components/MessageList.js +18 -5
- package/lib/types/components/ModelPicker.d.ts +24 -31
- package/lib/types/components/ModelPicker.d.ts.map +1 -1
- package/lib/types/components/ModelPicker.js +115 -40
- package/lib/types/components/PromptEditor.d.ts +3 -3
- package/lib/types/components/PromptInput.d.ts +21 -3
- package/lib/types/components/PromptInput.d.ts.map +1 -1
- package/lib/types/components/PromptInput.js +58 -118
- package/lib/types/components/SdkInstallWizard.d.ts +3 -1
- package/lib/types/components/SdkInstallWizard.d.ts.map +1 -1
- package/lib/types/components/SdkInstallWizard.js +8 -1
- package/lib/types/components/SearchBox.d.ts +13 -15
- package/lib/types/components/SearchBox.d.ts.map +1 -1
- package/lib/types/components/SearchBox.js +58 -27
- package/lib/types/components/ThemePicker.d.ts +1 -1
- package/lib/types/components/ThemePicker.d.ts.map +1 -1
- package/lib/types/components/ThemePicker.js +14 -11
- package/lib/types/components/Tooltip.js +1 -1
- package/lib/types/components/WorkingSpinner.js +1 -1
- package/lib/types/components/WorkspaceFlowPicker.d.ts.map +1 -1
- package/lib/types/components/WorkspaceFlowPicker.js +4 -3
- package/lib/types/components/composerImageTokens.d.ts +24 -0
- package/lib/types/components/composerImageTokens.d.ts.map +1 -0
- package/lib/types/components/composerImageTokens.js +37 -0
- package/lib/types/components/design-system/InputCaret.d.ts +7 -0
- package/lib/types/components/design-system/InputCaret.d.ts.map +1 -0
- package/lib/types/components/design-system/InputCaret.js +9 -0
- package/lib/types/components/design-system/ListItem.d.ts +13 -2
- package/lib/types/components/design-system/ListItem.d.ts.map +1 -1
- package/lib/types/components/design-system/ListItem.js +11 -5
- package/lib/types/components/design-system/ThemeProvider.d.ts.map +1 -1
- package/lib/types/components/design-system/ThemeProvider.js +6 -8
- package/lib/types/components/kernelCatalog.d.ts +55 -11
- package/lib/types/components/kernelCatalog.d.ts.map +1 -1
- package/lib/types/components/kernelCatalog.js +42 -23
- package/lib/types/components/launchpadActions.d.ts +4 -0
- package/lib/types/components/launchpadActions.d.ts.map +1 -1
- package/lib/types/components/launchpadActions.js +5 -4
- package/lib/types/components/launchpadLayout.d.ts.map +1 -1
- package/lib/types/components/launchpadLayout.js +2 -2
- package/lib/types/components/messages/UserPromptMessage.d.ts +4 -3
- package/lib/types/components/messages/UserPromptMessage.d.ts.map +1 -1
- package/lib/types/components/messages/UserPromptMessage.js +4 -3
- package/lib/types/components/questions/AskUserQuestionPanel.d.ts.map +1 -1
- package/lib/types/components/questions/AskUserQuestionPanel.js +8 -3
- package/lib/types/components/questions/PlanReviewPanel.d.ts.map +1 -1
- package/lib/types/components/questions/PlanReviewPanel.js +4 -3
- package/lib/types/components/questions/ProviderModelEditor.d.ts.map +1 -1
- package/lib/types/components/questions/ProviderModelEditor.js +3 -13
- package/lib/types/components/sessions/ForeignSessionRow.d.ts +3 -1
- package/lib/types/components/sessions/ForeignSessionRow.d.ts.map +1 -1
- package/lib/types/components/sessions/ForeignSessionRow.js +5 -2
- package/lib/types/components/sessions/SessionListRow.d.ts +3 -1
- package/lib/types/components/sessions/SessionListRow.d.ts.map +1 -1
- package/lib/types/components/sessions/SessionListRow.js +5 -2
- package/lib/types/components/sidePanel/PanelBar.d.ts +1 -0
- package/lib/types/components/sidePanel/PanelBar.d.ts.map +1 -1
- package/lib/types/components/sidePanel/PanelBar.js +21 -17
- package/lib/types/components/sidePanel/SidePanelColumn.d.ts +1 -1
- package/lib/types/components/sidePanel/SidePanelColumn.d.ts.map +1 -1
- package/lib/types/components/sidePanel/SidePanelColumn.js +2 -1
- package/lib/types/components/sidePanel/SidePanelLayout.d.ts +6 -4
- package/lib/types/components/sidePanel/SidePanelLayout.d.ts.map +1 -1
- package/lib/types/components/sidePanel/SidePanelLayout.js +33 -7
- package/lib/types/components/sidePanel/btw/BtwComposer.d.ts +4 -2
- package/lib/types/components/sidePanel/btw/BtwComposer.d.ts.map +1 -1
- package/lib/types/components/sidePanel/btw/BtwComposer.js +12 -4
- package/lib/types/components/sidePanel/btw/BtwPanelAdapter.d.ts.map +1 -1
- package/lib/types/components/sidePanel/btw/BtwPanelAdapter.js +59 -15
- package/lib/types/components/sidePanel/btw/BtwThreadScene.d.ts.map +1 -1
- package/lib/types/components/sidePanel/btw/BtwThreadScene.js +4 -2
- package/lib/types/components/sidePanel/btw/BtwThreadView.d.ts +1 -1
- package/lib/types/components/sidePanel/btw/BtwThreadView.d.ts.map +1 -1
- package/lib/types/components/sidePanel/btw/BtwThreadView.js +12 -6
- package/lib/types/components/sidePanel/companion/CompanionPanel.js +2 -2
- package/lib/types/components/sidePanel/types.d.ts +1 -1
- package/lib/types/components/sidePanel/types.d.ts.map +1 -1
- package/lib/types/components/sidePanel/useSidePanel.d.ts +2 -0
- package/lib/types/components/sidePanel/useSidePanel.d.ts.map +1 -1
- package/lib/types/components/sidePanel/useSidePanel.js +11 -1
- package/lib/types/components/splashFonts.d.ts +24 -1
- package/lib/types/components/splashFonts.d.ts.map +1 -1
- package/lib/types/components/splashFonts.js +40 -5
- package/lib/types/components/workspaces/HomeWorkspaceRow.d.ts +3 -1
- package/lib/types/components/workspaces/HomeWorkspaceRow.d.ts.map +1 -1
- package/lib/types/components/workspaces/HomeWorkspaceRow.js +5 -2
- package/lib/types/dsh-adapter/admission-loader.d.ts +20 -0
- package/lib/types/dsh-adapter/admission-loader.d.ts.map +1 -0
- package/lib/types/dsh-adapter/admission-loader.js +256 -0
- package/lib/types/dsh-adapter/backend/translate.d.ts.map +1 -1
- package/lib/types/dsh-adapter/backend/translate.js +3 -0
- package/lib/types/dsh-adapter/backend-admission.d.ts +64 -0
- package/lib/types/dsh-adapter/backend-admission.d.ts.map +1 -0
- package/lib/types/dsh-adapter/backend-admission.js +34 -0
- package/lib/types/dsh-adapter/backend-contribution.d.ts +26 -0
- package/lib/types/dsh-adapter/backend-contribution.d.ts.map +1 -0
- package/lib/types/dsh-adapter/backend-contribution.js +37 -0
- package/lib/types/dsh-adapter/backend-registry.d.ts +136 -0
- package/lib/types/dsh-adapter/backend-registry.d.ts.map +1 -0
- package/lib/types/dsh-adapter/backend-registry.js +285 -0
- package/lib/types/dsh-adapter/backends.d.ts +67 -24
- package/lib/types/dsh-adapter/backends.d.ts.map +1 -1
- package/lib/types/dsh-adapter/backends.generated.d.ts +12 -0
- package/lib/types/dsh-adapter/backends.generated.d.ts.map +1 -0
- package/lib/types/dsh-adapter/backends.generated.js +6 -0
- package/lib/types/dsh-adapter/backends.js +92 -46
- package/lib/types/dsh-adapter/channel/action-readiness.d.ts +2 -0
- package/lib/types/dsh-adapter/channel/action-readiness.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/action-readiness.js +9 -3
- package/lib/types/dsh-adapter/channel/agent-view-projection.js +2 -2
- package/lib/types/dsh-adapter/channel/background-action.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/background-action.js +8 -3
- package/lib/types/dsh-adapter/channel/binding-events.d.ts +16 -3
- package/lib/types/dsh-adapter/channel/binding-events.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/binding-events.js +18 -46
- package/lib/types/dsh-adapter/channel/channel-host.d.ts +45 -0
- package/lib/types/dsh-adapter/channel/channel-host.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/channel-host.js +1 -0
- package/lib/types/dsh-adapter/channel/command-completions.d.ts +5 -0
- package/lib/types/dsh-adapter/channel/command-completions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/command-completions.js +16 -0
- package/lib/types/dsh-adapter/channel/composer-images.d.ts +4 -2
- package/lib/types/dsh-adapter/channel/composer-images.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/composer-images.js +36 -5
- package/lib/types/dsh-adapter/channel/cordis-host.d.ts +14 -0
- package/lib/types/dsh-adapter/channel/cordis-host.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/cordis-host.js +35 -0
- package/lib/types/dsh-adapter/channel/core/actions.d.ts +3 -3
- package/lib/types/dsh-adapter/channel/core/actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/core/actions.js +15 -6
- package/lib/types/dsh-adapter/channel/core/binding-feed.d.ts +7 -3
- package/lib/types/dsh-adapter/channel/core/binding-feed.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/core/binding-feed.js +3 -0
- package/lib/types/dsh-adapter/channel/core/compose.d.ts +12 -28
- package/lib/types/dsh-adapter/channel/core/compose.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/core/compose.js +318 -117
- package/lib/types/dsh-adapter/channel/core/files.d.ts +7 -2
- package/lib/types/dsh-adapter/channel/core/files.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/core/files.js +1 -0
- package/lib/types/dsh-adapter/channel/core/host.d.ts +12 -6
- package/lib/types/dsh-adapter/channel/core/host.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/core/host.js +69 -35
- package/lib/types/dsh-adapter/channel/core/local-actions.d.ts +5 -3
- package/lib/types/dsh-adapter/channel/core/local-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/core/local-actions.js +5 -2
- package/lib/types/dsh-adapter/channel/core/session-controls.js +2 -2
- package/lib/types/dsh-adapter/channel/core/session-switch.d.ts +7 -4
- package/lib/types/dsh-adapter/channel/core/session-switch.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/core/session-switch.js +8 -4
- package/lib/types/dsh-adapter/channel/core/sessions.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/core/sessions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/core/sessions.js +75 -16
- package/lib/types/dsh-adapter/channel/extensions.d.ts +4 -3
- package/lib/types/dsh-adapter/channel/extensions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/extensions.js +41 -22
- package/lib/types/dsh-adapter/channel/input-delivery.d.ts +2 -2
- package/lib/types/dsh-adapter/channel/input-delivery.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/input-delivery.js +14 -5
- package/lib/types/dsh-adapter/channel/job-projection.d.ts +4 -0
- package/lib/types/dsh-adapter/channel/job-projection.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/job-projection.js +205 -24
- package/lib/types/dsh-adapter/channel/mentions.d.ts +3 -3
- package/lib/types/dsh-adapter/channel/mentions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts +1 -0
- package/lib/types/dsh-adapter/channel/mode-permission-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/mode-permission-actions.js +138 -8
- package/lib/types/dsh-adapter/channel/model-actions.d.ts +5 -1
- package/lib/types/dsh-adapter/channel/model-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/model-actions.js +40 -28
- package/lib/types/dsh-adapter/channel/model-selection.d.ts +17 -0
- package/lib/types/dsh-adapter/channel/model-selection.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/model-selection.js +109 -0
- package/lib/types/dsh-adapter/channel/model-switch.d.ts +12 -21
- package/lib/types/dsh-adapter/channel/model-switch.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/model-switch.js +39 -102
- package/lib/types/dsh-adapter/channel/projection.js +1 -1
- package/lib/types/dsh-adapter/channel/reports.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/reports.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/reports.js +11 -3
- package/lib/types/dsh-adapter/channel/session-fork.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-fork.js +33 -20
- package/lib/types/dsh-adapter/channel/session-listing.d.ts +20 -0
- package/lib/types/dsh-adapter/channel/session-listing.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/session-listing.js +51 -0
- package/lib/types/dsh-adapter/channel/session-metadata.d.ts +3 -1
- package/lib/types/dsh-adapter/channel/session-metadata.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-metadata.js +56 -27
- package/lib/types/dsh-adapter/channel/session-resume.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-resume.js +15 -8
- package/lib/types/dsh-adapter/channel/session-rewind.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-rewind.js +38 -24
- package/lib/types/dsh-adapter/channel/session-tree-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-tree-actions.js +38 -24
- package/lib/types/dsh-adapter/channel/settings-host.d.ts +2 -2
- package/lib/types/dsh-adapter/channel/settings-host.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/settings-host.js +1 -0
- package/lib/types/dsh-adapter/channel/state.d.ts +37 -1
- package/lib/types/dsh-adapter/channel/state.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/state.js +14 -1
- package/lib/types/dsh-adapter/channel/subagent-projection.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/subagent-projection.js +66 -6
- package/lib/types/dsh-adapter/channel/task-completion.d.ts +6 -0
- package/lib/types/dsh-adapter/channel/task-completion.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/task-completion.js +114 -0
- package/lib/types/dsh-adapter/channel/transcript.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/transcript.js +1 -1
- package/lib/types/dsh-adapter/channel/upstream-retry.d.ts +81 -0
- package/lib/types/dsh-adapter/channel/upstream-retry.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/upstream-retry.js +138 -0
- package/lib/types/dsh-adapter/channel/workspace-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/workspace-actions.js +9 -8
- package/lib/types/dsh-adapter/channel-ui.d.ts +3 -1
- package/lib/types/dsh-adapter/channel-ui.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel-ui.js +4 -2
- package/lib/types/dsh-adapter/channel.d.ts +2 -2
- package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel.js +19 -5
- package/lib/types/dsh-adapter/context-occupancy.d.ts +81 -4
- package/lib/types/dsh-adapter/context-occupancy.d.ts.map +1 -1
- package/lib/types/dsh-adapter/context-occupancy.js +108 -17
- package/lib/types/dsh-adapter/contract.d.ts +1 -1
- package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
- package/lib/types/dsh-adapter/contract.js +15 -0
- package/lib/types/dsh-adapter/entry-slot.d.ts +36 -0
- package/lib/types/dsh-adapter/entry-slot.d.ts.map +1 -0
- package/lib/types/dsh-adapter/entry-slot.js +28 -0
- package/lib/types/dsh-adapter/fresh-agent.d.ts +22 -0
- package/lib/types/dsh-adapter/fresh-agent.d.ts.map +1 -0
- package/lib/types/dsh-adapter/fresh-agent.js +221 -0
- package/lib/types/dsh-adapter/host-access.d.ts +16 -1
- package/lib/types/dsh-adapter/host-access.d.ts.map +1 -1
- package/lib/types/dsh-adapter/host-access.js +53 -2
- package/lib/types/dsh-adapter/host-contract.d.ts +103 -0
- package/lib/types/dsh-adapter/host-contract.d.ts.map +1 -0
- package/lib/types/dsh-adapter/host-contract.js +76 -0
- package/lib/types/dsh-adapter/host-dsh.d.ts +106 -0
- package/lib/types/dsh-adapter/host-dsh.d.ts.map +1 -0
- package/lib/types/dsh-adapter/host-dsh.js +466 -0
- package/lib/types/dsh-adapter/host-entry.d.ts +9 -0
- package/lib/types/dsh-adapter/host-entry.d.ts.map +1 -0
- package/lib/types/dsh-adapter/host-entry.js +228 -0
- package/lib/types/dsh-adapter/index.d.ts +55 -18
- package/lib/types/dsh-adapter/index.d.ts.map +1 -1
- package/lib/types/dsh-adapter/index.js +59 -7
- package/lib/types/dsh-adapter/install/executors.d.ts +44 -0
- package/lib/types/dsh-adapter/install/executors.d.ts.map +1 -0
- package/lib/types/dsh-adapter/install/executors.js +15 -0
- package/lib/types/dsh-adapter/install/pnpm-profile-add.d.ts +3 -0
- package/lib/types/dsh-adapter/install/pnpm-profile-add.d.ts.map +1 -0
- package/lib/types/dsh-adapter/install/pnpm-profile-add.js +150 -0
- package/lib/types/dsh-adapter/jobs.d.ts +7 -0
- package/lib/types/dsh-adapter/jobs.d.ts.map +1 -1
- package/lib/types/dsh-adapter/jobs.js +13 -0
- package/lib/types/dsh-adapter/lite-profile.d.ts +50 -0
- package/lib/types/dsh-adapter/lite-profile.d.ts.map +1 -0
- package/lib/types/dsh-adapter/lite-profile.js +49 -0
- package/lib/types/dsh-adapter/migrate/parse/jsonl.d.ts +1 -1
- package/lib/types/dsh-adapter/migrate/parse/jsonl.d.ts.map +1 -1
- package/lib/types/dsh-adapter/migrate/parse/jsonl.js +4 -3
- package/lib/types/dsh-adapter/oauth/profiles.d.ts.map +1 -1
- package/lib/types/dsh-adapter/oauth/profiles.js +5 -1
- package/lib/types/dsh-adapter/panels.d.ts +7 -0
- package/lib/types/dsh-adapter/panels.d.ts.map +1 -1
- package/lib/types/dsh-adapter/panels.js +35 -2
- package/lib/types/dsh-adapter/plugin-completions.d.ts +32 -0
- package/lib/types/dsh-adapter/plugin-completions.d.ts.map +1 -0
- package/lib/types/dsh-adapter/plugin-completions.js +80 -0
- package/lib/types/dsh-adapter/plugin-declaration.d.ts +21 -0
- package/lib/types/dsh-adapter/plugin-declaration.d.ts.map +1 -0
- package/lib/types/dsh-adapter/plugin-declaration.js +53 -0
- package/lib/types/dsh-adapter/plugin-host.d.ts +13 -2
- package/lib/types/dsh-adapter/plugin-host.d.ts.map +1 -1
- package/lib/types/dsh-adapter/plugin-host.js +34 -8
- package/lib/types/dsh-adapter/plugin-manager.d.ts +68 -0
- package/lib/types/dsh-adapter/plugin-manager.d.ts.map +1 -0
- package/lib/types/dsh-adapter/plugin-manager.js +51 -0
- package/lib/types/dsh-adapter/plugin.d.ts +50 -1
- package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
- package/lib/types/dsh-adapter/plugin.js +870 -233
- package/lib/types/dsh-adapter/plugins-info.d.ts +44 -8
- package/lib/types/dsh-adapter/plugins-info.d.ts.map +1 -1
- package/lib/types/dsh-adapter/plugins-info.js +354 -34
- package/lib/types/dsh-adapter/process-exit.d.ts +43 -0
- package/lib/types/dsh-adapter/process-exit.d.ts.map +1 -0
- package/lib/types/dsh-adapter/process-exit.js +60 -0
- package/lib/types/dsh-adapter/root-dispose.d.ts +18 -0
- package/lib/types/dsh-adapter/root-dispose.d.ts.map +1 -0
- package/lib/types/dsh-adapter/root-dispose.js +28 -0
- package/lib/types/dsh-adapter/session-list-metadata.d.ts +20 -0
- package/lib/types/dsh-adapter/session-list-metadata.d.ts.map +1 -0
- package/lib/types/dsh-adapter/session-list-metadata.js +56 -0
- package/lib/types/dsh-adapter/session-seed.d.ts +11 -0
- package/lib/types/dsh-adapter/session-seed.d.ts.map +1 -0
- package/lib/types/dsh-adapter/session-seed.js +47 -0
- package/lib/types/dsh-adapter/sessions/list.d.ts +3 -1
- package/lib/types/dsh-adapter/sessions/list.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sessions/list.js +11 -5
- package/lib/types/dsh-adapter/sessions/snapshot.d.ts +0 -2
- package/lib/types/dsh-adapter/sessions/snapshot.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sessions/snapshot.js +7 -70
- package/lib/types/dsh-adapter/startup-args.d.ts +2 -0
- package/lib/types/dsh-adapter/startup-args.d.ts.map +1 -1
- package/lib/types/dsh-adapter/startup-args.js +5 -0
- package/lib/types/dsh-adapter/subagents.d.ts +33 -1
- package/lib/types/dsh-adapter/subagents.d.ts.map +1 -1
- package/lib/types/dsh-adapter/subagents.js +110 -8
- package/lib/types/dsh-adapter/tui-settings.d.ts +57 -0
- package/lib/types/dsh-adapter/tui-settings.d.ts.map +1 -0
- package/lib/types/dsh-adapter/tui-settings.js +199 -0
- package/lib/types/effortPrefs.d.ts +6 -3
- package/lib/types/effortPrefs.d.ts.map +1 -1
- package/lib/types/effortPrefs.js +7 -4
- package/lib/types/hostEntryRoute.d.ts +18 -0
- package/lib/types/hostEntryRoute.d.ts.map +1 -0
- package/lib/types/hostEntryRoute.js +57 -0
- package/lib/types/i18n.d.ts +363 -1432
- package/lib/types/i18n.d.ts.map +1 -1
- package/lib/types/i18n.js +155 -385
- package/lib/types/ink/components/AlternateScreen.js +2 -2
- package/lib/types/ink/components/App.d.ts +1 -0
- package/lib/types/ink/components/App.d.ts.map +1 -1
- package/lib/types/ink/components/App.js +16 -4
- package/lib/types/ink/components/CursorDeclarationContext.d.ts +9 -0
- package/lib/types/ink/components/CursorDeclarationContext.d.ts.map +1 -1
- package/lib/types/ink/components/CursorDeclarationContext.js +2 -0
- package/lib/types/ink/hooks/use-copy-on-select.d.ts +2 -2
- package/lib/types/ink/hooks/use-copy-on-select.d.ts.map +1 -1
- package/lib/types/ink/hooks/use-copy-on-select.js +13 -7
- package/lib/types/ink/hooks/use-declared-cursor.d.ts +11 -3
- package/lib/types/ink/hooks/use-declared-cursor.d.ts.map +1 -1
- package/lib/types/ink/hooks/use-declared-cursor.js +30 -10
- package/lib/types/ink/ink.d.ts +22 -17
- package/lib/types/ink/ink.d.ts.map +1 -1
- package/lib/types/ink/ink.js +151 -40
- package/lib/types/ink/kitty-graphics.d.ts +2 -0
- package/lib/types/ink/kitty-graphics.d.ts.map +1 -1
- package/lib/types/ink/kitty-graphics.js +6 -1
- package/lib/types/ink/node-cache.d.ts +2 -1
- package/lib/types/ink/node-cache.d.ts.map +1 -1
- package/lib/types/ink/output.d.ts +10 -4
- package/lib/types/ink/output.d.ts.map +1 -1
- package/lib/types/ink/output.js +14 -10
- package/lib/types/ink/render-node-to-output.d.ts +5 -2
- package/lib/types/ink/render-node-to-output.d.ts.map +1 -1
- package/lib/types/ink/render-node-to-output.js +27 -9
- package/lib/types/ink/renderer.d.ts +1 -0
- package/lib/types/ink/renderer.d.ts.map +1 -1
- package/lib/types/ink/renderer.js +4 -3
- package/lib/types/ink/root.d.ts +4 -1
- package/lib/types/ink/root.d.ts.map +1 -1
- package/lib/types/ink/screen.d.ts +4 -2
- package/lib/types/ink/screen.d.ts.map +1 -1
- package/lib/types/ink/selection.d.ts +10 -1
- package/lib/types/ink/selection.d.ts.map +1 -1
- package/lib/types/ink/selection.js +94 -25
- package/lib/types/ink/stdin-handoff.d.ts +11 -0
- package/lib/types/ink/stdin-handoff.d.ts.map +1 -0
- package/lib/types/ink/stdin-handoff.js +20 -0
- package/lib/types/ink/styles.d.ts +2 -1
- package/lib/types/ink/styles.d.ts.map +1 -1
- package/lib/types/ink/terminal-image.d.ts +6 -4
- package/lib/types/ink/terminal-image.d.ts.map +1 -1
- package/lib/types/ink/terminal-image.js +16 -39
- package/lib/types/ink/terminal-notification.d.ts +8 -0
- package/lib/types/ink/terminal-notification.d.ts.map +1 -0
- package/lib/types/ink/terminal-notification.js +83 -0
- package/lib/types/ink/terminal.d.ts +9 -0
- package/lib/types/ink/terminal.d.ts.map +1 -1
- package/lib/types/ink/terminal.js +34 -1
- package/lib/types/ink/termio/csi.d.ts +11 -0
- package/lib/types/ink/termio/csi.d.ts.map +1 -1
- package/lib/types/ink/termio/csi.js +13 -0
- package/lib/types/ink/update-overflow-guard.d.ts +6 -0
- package/lib/types/ink/update-overflow-guard.d.ts.map +1 -1
- package/lib/types/ink/update-overflow-guard.js +17 -0
- package/lib/types/ink/wrap-text.d.ts +6 -0
- package/lib/types/ink/wrap-text.d.ts.map +1 -1
- package/lib/types/ink/wrap-text.js +17 -0
- package/lib/types/kernelPrefs.d.ts +129 -16
- package/lib/types/kernelPrefs.d.ts.map +1 -1
- package/lib/types/kernelPrefs.js +98 -35
- package/lib/types/math/inline-layout.d.ts +2 -0
- package/lib/types/math/inline-layout.d.ts.map +1 -1
- package/lib/types/math/inline-layout.js +5 -27
- package/lib/types/modelGroups.d.ts +15 -27
- package/lib/types/modelGroups.d.ts.map +1 -1
- package/lib/types/modelGroups.js +17 -31
- package/lib/types/modelPrefs.d.ts +5 -4
- package/lib/types/modelPrefs.d.ts.map +1 -1
- package/lib/types/modelPrefs.js +5 -4
- package/lib/types/modelRoute.d.ts +23 -9
- package/lib/types/modelRoute.d.ts.map +1 -1
- package/lib/types/modelRoute.js +25 -11
- package/lib/types/permissionPrefs.d.ts +34 -0
- package/lib/types/permissionPrefs.d.ts.map +1 -0
- package/lib/types/permissionPrefs.js +61 -0
- package/lib/types/plugin-host.d.ts +1 -0
- package/lib/types/plugin-host.d.ts.map +1 -1
- package/lib/types/presetPrefs.d.ts +17 -3
- package/lib/types/presetPrefs.d.ts.map +1 -1
- package/lib/types/presetPrefs.js +20 -3
- package/lib/types/reload.d.ts +6 -10
- package/lib/types/reload.d.ts.map +1 -1
- package/lib/types/reload.js +14 -14
- package/lib/types/screens/Chat.d.ts +22 -15
- package/lib/types/screens/Chat.d.ts.map +1 -1
- package/lib/types/screens/Chat.js +442 -272
- package/lib/types/screens/Launchpad.d.ts +27 -17
- package/lib/types/screens/Launchpad.d.ts.map +1 -1
- package/lib/types/screens/Launchpad.js +241 -78
- package/lib/types/screens/SessionSupervisor.d.ts.map +1 -1
- package/lib/types/screens/SessionSupervisor.js +53 -12
- package/lib/types/screens/Settings.d.ts.map +1 -1
- package/lib/types/screens/Settings.js +6 -0
- package/lib/types/screens/StatusLine.d.ts.map +1 -1
- package/lib/types/screens/StatusLine.js +24 -7
- package/lib/types/screens/StatusMetrics.d.ts +46 -1
- package/lib/types/screens/StatusMetrics.d.ts.map +1 -1
- package/lib/types/screens/StatusMetrics.js +72 -0
- package/lib/types/screens/chat/useKernelPicker.d.ts +8 -4
- package/lib/types/screens/chat/useKernelPicker.d.ts.map +1 -1
- package/lib/types/screens/chat/useKernelPicker.js +61 -21
- package/lib/types/screens/chat/useModelPicker.d.ts +42 -0
- package/lib/types/screens/chat/useModelPicker.d.ts.map +1 -0
- package/lib/types/screens/chat/useModelPicker.js +182 -0
- package/lib/types/screens/chatOverlay.d.ts +11 -4
- package/lib/types/screens/chatOverlay.d.ts.map +1 -1
- package/lib/types/screens/chatOverlay.js +0 -1
- package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.d.ts +4 -1
- package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.d.ts.map +1 -1
- package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.js +26 -5
- package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts +1 -1
- package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts.map +1 -1
- package/lib/types/screens/sessionSupervisor/useSessionSupervisor.js +51 -29
- package/lib/types/sessionHistory.d.ts +5 -0
- package/lib/types/sessionHistory.d.ts.map +1 -1
- package/lib/types/sessionHistory.js +5 -0
- package/lib/types/sessions/listSnapshot.d.ts +6 -0
- package/lib/types/sessions/listSnapshot.d.ts.map +1 -0
- package/lib/types/sessions/listSnapshot.js +67 -0
- package/lib/types/settings/definitions.d.ts +50 -0
- package/lib/types/settings/definitions.d.ts.map +1 -1
- package/lib/types/settings/definitions.js +42 -8
- package/lib/types/terminal-utils/cjk-emphasis.d.ts +28 -0
- package/lib/types/terminal-utils/cjk-emphasis.d.ts.map +1 -0
- package/lib/types/terminal-utils/cjk-emphasis.js +31 -0
- package/lib/types/terminal-utils/markdown.d.ts +3 -1
- package/lib/types/terminal-utils/markdown.d.ts.map +1 -1
- package/lib/types/terminal-utils/markdown.js +7 -2
- package/lib/types/theme.d.ts +29 -12
- package/lib/types/theme.d.ts.map +1 -1
- package/lib/types/theme.js +310 -23
- package/lib/types/themeCatalog.d.ts.map +1 -1
- package/lib/types/themeCatalog.js +21 -2
- package/lib/types/tips.js +4 -4
- package/lib/types/tuiSettingsFile.d.ts +56 -0
- package/lib/types/tuiSettingsFile.d.ts.map +1 -0
- package/lib/types/tuiSettingsFile.js +206 -0
- package/lib/types/ui.d.ts +2 -0
- package/lib/types/ui.d.ts.map +1 -1
- package/lib/types/ui.js +2 -0
- package/lib/types/update.d.ts +72 -26
- package/lib/types/update.d.ts.map +1 -1
- package/lib/types/update.js +131 -43
- package/lib/types/utils/bmp.d.ts +7 -0
- package/lib/types/utils/bmp.d.ts.map +1 -1
- package/lib/types/utils/bmp.js +27 -0
- package/lib/types/utils/bootTrace.d.ts +2 -0
- package/lib/types/utils/bootTrace.d.ts.map +1 -0
- package/lib/types/utils/bootTrace.js +20 -0
- package/lib/types/utils/clipboard.d.ts.map +1 -1
- package/lib/types/utils/clipboard.js +11 -3
- package/lib/types/utils/credentials.d.ts +14 -2
- package/lib/types/utils/credentials.d.ts.map +1 -1
- package/lib/types/utils/credentials.js +34 -11
- package/lib/types/utils/imageResize.d.ts +10 -20
- package/lib/types/utils/imageResize.d.ts.map +1 -1
- package/lib/types/utils/imageResize.js +61 -134
- package/lib/types/utils/inputPaste.d.ts +2 -2
- package/lib/types/utils/inputPaste.js +2 -2
- package/lib/types/utils/pastedImagePath.d.ts +5 -0
- package/lib/types/utils/pastedImagePath.d.ts.map +1 -1
- package/lib/types/utils/pastedImagePath.js +33 -0
- package/package.json +36 -6
- package/presets/winbash.mjs +716 -0
- package/tui-profile/protocols/profile-definitions.d.ts +1 -0
- package/tui-profile/protocols/profile-definitions.js +14 -0
- package/tui-profile/protocols/tui-contributions.d.ts +55 -0
- package/tui-profile/protocols/tui-contributions.js +141 -0
- package/tui-profile/registry/contracts/backend-v1alpha1.json +13 -0
- package/tui-profile/registry/registry-0.15.json +12 -0
- package/lib/types/backends/claude/install.d.ts +0 -15
- package/lib/types/backends/claude/install.d.ts.map +0 -1
- package/lib/types/backends/claude/install.js +0 -91
- package/lib/types/channel/elicitation.d.ts.map +0 -1
- package/lib/types/dsh-adapter/channel/session-lineage.d.ts +0 -42
- package/lib/types/dsh-adapter/channel/session-lineage.d.ts.map +0 -1
- package/lib/types/dsh-adapter/channel/session-lineage.js +0 -51
- package/lib/types/utils/jsonl.d.ts.map +0 -1
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admits third-party plugin activations via their package-root
|
|
3
|
+
* `dsh-plugin.json` (`getHostAdmission()`), binding the identity to the
|
|
4
|
+
* plugin's own fiber. A refused activation keeps running (an
|
|
5
|
+
* unload would rewrite the user's profile) but stays outside every mediated
|
|
6
|
+
* capability. Listeners and the retry timer ride the caller's `ctx.effect`.
|
|
7
|
+
*/
|
|
8
|
+
import { findPackageJSON } from 'node:module';
|
|
9
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
10
|
+
import { dirname, isAbsolute, join, resolve as resolvePath } from 'node:path';
|
|
11
|
+
import { fileURLToPath, pathToFileURL } from 'node:url';
|
|
12
|
+
import { Context } from '@deepseek-ai/cordis';
|
|
13
|
+
import { componentIdentityOf } from './component-identity.js';
|
|
14
|
+
import { compositionRoot, withHostRootCapability } from './host-access.js';
|
|
15
|
+
import { getHostAdmission } from './plugin-host.js';
|
|
16
|
+
import { logForDebugging } from '../utils/debug.js';
|
|
17
|
+
/** Retry window for an admission not decidable yet (a required contract or
|
|
18
|
+
* the host itself arrives later). Bounded so a host that never arrives
|
|
19
|
+
* (issue #183) settles as `refused` with a diagnostic instead of ticking forever. */
|
|
20
|
+
const RETRY_INTERVAL_MS = 200;
|
|
21
|
+
const RETRY_ATTEMPTS = 100;
|
|
22
|
+
/**
|
|
23
|
+
* Watch `ctx`'s composition and admit every third-party activation that
|
|
24
|
+
* carries a package-root `dsh-plugin.json`. The listeners and the retry
|
|
25
|
+
* timer are bound to `ctx`'s own teardown.
|
|
26
|
+
*/
|
|
27
|
+
export function armAdmissionLoader(ctx, options = {}) {
|
|
28
|
+
const root = compositionRoot(ctx);
|
|
29
|
+
const retryAttempts = options.retryAttempts ?? RETRY_ATTEMPTS;
|
|
30
|
+
const loader = root.get('loader', false);
|
|
31
|
+
if (loader === undefined || typeof loader.locate !== 'function' || typeof loader.resolve !== 'function') {
|
|
32
|
+
logForDebugging('dsh-tui: admission loader not armed — this composition has no cordis loader');
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const state = new WeakMap();
|
|
36
|
+
const manifests = new WeakMap();
|
|
37
|
+
const attempts = new WeakMap();
|
|
38
|
+
const pending = new Set();
|
|
39
|
+
let timer;
|
|
40
|
+
const host = options.host ?? (() => ctx.get('tuiPluginHost', false));
|
|
41
|
+
const stopTimer = () => {
|
|
42
|
+
if (timer !== undefined) {
|
|
43
|
+
clearTimeout(timer);
|
|
44
|
+
timer = undefined;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
const settle = (fiber, next) => {
|
|
48
|
+
state.set(fiber, next);
|
|
49
|
+
pending.delete(fiber);
|
|
50
|
+
};
|
|
51
|
+
const attempt = (fiber) => {
|
|
52
|
+
const pluginCtx = fiber.ctx;
|
|
53
|
+
// LOADING (1), not ACTIVE (2): Cordis emits it before the row's callback
|
|
54
|
+
// runs, so the plugin has its identity while its `apply` registers panels.
|
|
55
|
+
// ACTIVE is the catch-up path for rows that activated before arming.
|
|
56
|
+
if (!Context.is(pluginCtx) || (fiber.state !== 1 && fiber.state !== 2)) {
|
|
57
|
+
settle(fiber, 'skipped');
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
// Already admitted (the row called admission itself, or a previous pass
|
|
61
|
+
// of this loader did): the manifest identity is host-owned and single.
|
|
62
|
+
if (componentIdentityOf(pluginCtx) !== undefined) {
|
|
63
|
+
settle(fiber, 'admitted');
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
// The manifest lookup is one synchronous walk per activation, cached for
|
|
67
|
+
// the fiber's lifetime (a restart reuses it; the package cannot move).
|
|
68
|
+
if (!manifests.has(fiber))
|
|
69
|
+
manifests.set(fiber, manifestPathOf(loader, fiber));
|
|
70
|
+
const resolved = manifests.get(fiber);
|
|
71
|
+
// No manifest at its package root:
|
|
72
|
+
// nothing to admit, and no retry will change that.
|
|
73
|
+
if (resolved === undefined) {
|
|
74
|
+
settle(fiber, 'skipped');
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
const live = host();
|
|
78
|
+
const admission = live === undefined ? undefined : getHostAdmission(live);
|
|
79
|
+
if (admission === undefined) {
|
|
80
|
+
const waited = (attempts.get(fiber) ?? 0) + 1;
|
|
81
|
+
attempts.set(fiber, waited);
|
|
82
|
+
// The host has not arrived (an absent host looks like a late one):
|
|
83
|
+
// bounded wait, then a logged refusal.
|
|
84
|
+
if (waited >= retryAttempts) {
|
|
85
|
+
settle(fiber, 'refused');
|
|
86
|
+
logForDebugging(`dsh-tui: admission loader refused a Component after waiting ${waited} ticks for `
|
|
87
|
+
+ `tuiPluginHost / its admission seam (host ${live === undefined ? 'missing' : 'without getHostAdmission'})`, { manifest: resolved });
|
|
88
|
+
}
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
let source;
|
|
92
|
+
try {
|
|
93
|
+
source = readFileSync(resolved, 'utf8');
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
settle(fiber, 'skipped');
|
|
97
|
+
logForDebugging(`dsh-tui: admission loader could not read ${resolved} (${messageOf(error)})`);
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
const count = (attempts.get(fiber) ?? 0) + 1;
|
|
101
|
+
attempts.set(fiber, count);
|
|
102
|
+
try {
|
|
103
|
+
const identity = admission.admit(pluginCtx, source, { source: resolved });
|
|
104
|
+
settle(fiber, 'admitted');
|
|
105
|
+
logForDebugging('dsh-tui: admission loader admitted a Component', {
|
|
106
|
+
componentId: identity.componentId,
|
|
107
|
+
activationId: identity.activationId,
|
|
108
|
+
manifest: resolved,
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
if (count >= retryAttempts) {
|
|
113
|
+
settle(fiber, 'refused');
|
|
114
|
+
logForDebugging(`dsh-tui: admission loader refused a Component after ${count} attempts (${messageOf(error)})`, {
|
|
115
|
+
manifest: resolved,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
const consider = (fiber) => {
|
|
121
|
+
if (typeof fiber !== 'object' || fiber === null)
|
|
122
|
+
return;
|
|
123
|
+
const activation = fiber;
|
|
124
|
+
if (activation.state !== 1 && activation.state !== 2)
|
|
125
|
+
return;
|
|
126
|
+
const current = state.get(fiber);
|
|
127
|
+
if (current === 'admitted' || current === 'refused')
|
|
128
|
+
return;
|
|
129
|
+
// Synchronous on purpose: the row's callback runs one microtask after
|
|
130
|
+
// LOADING, so any hop here would let `apply` run before the identity exists.
|
|
131
|
+
pending.add(fiber);
|
|
132
|
+
attempt(activation);
|
|
133
|
+
if (pending.has(fiber) && timer === undefined)
|
|
134
|
+
timer = setTimeout(flush, RETRY_INTERVAL_MS);
|
|
135
|
+
};
|
|
136
|
+
const flush = () => {
|
|
137
|
+
stopTimer();
|
|
138
|
+
for (const fiber of [...pending])
|
|
139
|
+
attempt(fiber);
|
|
140
|
+
if (pending.size > 0)
|
|
141
|
+
timer = setTimeout(flush, RETRY_INTERVAL_MS);
|
|
142
|
+
};
|
|
143
|
+
// Rows that activated before this loader was armed (the profile path
|
|
144
|
+
// applies plugin rows before the TUI row) come from the entry tree; every
|
|
145
|
+
// later activation arrives through the lifecycle event.
|
|
146
|
+
const seed = () => {
|
|
147
|
+
if (typeof loader.entries !== 'function')
|
|
148
|
+
return;
|
|
149
|
+
try {
|
|
150
|
+
for (const entry of loader.entries())
|
|
151
|
+
consider(entry.fiber);
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
logForDebugging(`dsh-tui: admission loader could not walk the entry tree (${messageOf(error)})`);
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
ctx.effect(() => {
|
|
158
|
+
const listener = (fiber) => {
|
|
159
|
+
// A fiber that leaves the running states loses the identity with its
|
|
160
|
+
// own effects (restart): forget the pass so a re-activation is admitted
|
|
161
|
+
// again.
|
|
162
|
+
const fiberState = fiber?.state;
|
|
163
|
+
if (typeof fiber === 'object' && fiber !== null && (fiberState === 5 || fiberState === 4 || fiberState === 3)) {
|
|
164
|
+
state.delete(fiber);
|
|
165
|
+
pending.delete(fiber);
|
|
166
|
+
attempts.delete(fiber);
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
consider(fiber);
|
|
170
|
+
};
|
|
171
|
+
// On the composition root (plugin rows' lifecycle events never travel
|
|
172
|
+
// through the TUI row), `global` so child filters cannot hide them; in the
|
|
173
|
+
// host capability, since the root guard refuses `root.events.on` here.
|
|
174
|
+
const disposer = withHostRootCapability(() => root.on('internal/status', listener, { global: true }));
|
|
175
|
+
return () => {
|
|
176
|
+
if (typeof disposer === 'function') {
|
|
177
|
+
withHostRootCapability(() => disposer());
|
|
178
|
+
}
|
|
179
|
+
};
|
|
180
|
+
});
|
|
181
|
+
ctx.effect(() => stopTimer);
|
|
182
|
+
seed();
|
|
183
|
+
}
|
|
184
|
+
/** The package-root `dsh-plugin.json` of the entry that owns `fiber`, if any.
|
|
185
|
+
* Both loader calls are fenced: `EntryTree.resolve` throws for nested ids
|
|
186
|
+
* (`include:<group>:<row>`); an uninspectable entry is simply skipped. */
|
|
187
|
+
function manifestPathOf(loader, fiber) {
|
|
188
|
+
let entry;
|
|
189
|
+
try {
|
|
190
|
+
const entryId = loader.locate?.(fiber);
|
|
191
|
+
entry = entryId === undefined ? undefined : loader.resolve?.(entryId);
|
|
192
|
+
}
|
|
193
|
+
catch {
|
|
194
|
+
return undefined;
|
|
195
|
+
}
|
|
196
|
+
const name = entry?.options?.name;
|
|
197
|
+
if (typeof name !== 'string' || name === '')
|
|
198
|
+
return undefined;
|
|
199
|
+
const entryFile = resolveEntryFile(name, entry?.ctx?.baseUrl);
|
|
200
|
+
return entryFile === undefined ? undefined : findManifest(entryFile);
|
|
201
|
+
}
|
|
202
|
+
/** The module file an entry `name` resolves to, following the same rules the
|
|
203
|
+
* loader's own import uses (file URL, relative to `baseUrl`, bare
|
|
204
|
+
* specifier relative to the profile). */
|
|
205
|
+
function resolveEntryFile(name, baseUrl) {
|
|
206
|
+
try {
|
|
207
|
+
// Builtin rows (loader groups, timers) have no package directory.
|
|
208
|
+
if (name.startsWith('cordis:'))
|
|
209
|
+
return undefined;
|
|
210
|
+
if (name.startsWith('file:'))
|
|
211
|
+
return fileURLToPath(name);
|
|
212
|
+
if (isAbsolute(name))
|
|
213
|
+
return name;
|
|
214
|
+
if (name.startsWith('.')) {
|
|
215
|
+
return baseUrl === undefined || baseUrl === '' ? undefined : fileURLToPath(new URL(name, baseUrl));
|
|
216
|
+
}
|
|
217
|
+
// Through the package's own resolution: `exports` need not list
|
|
218
|
+
// `./package.json`, and a subpath (`pkg/sub`) lands on the same root.
|
|
219
|
+
return findPackageJSON(name, requireBase(baseUrl));
|
|
220
|
+
}
|
|
221
|
+
catch {
|
|
222
|
+
return undefined;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
function requireBase(baseUrl) {
|
|
226
|
+
if (baseUrl === undefined || baseUrl === '')
|
|
227
|
+
return pathToFileURL(join(process.cwd(), 'index.js'));
|
|
228
|
+
try {
|
|
229
|
+
return baseUrl.startsWith('file:') ? new URL(baseUrl) : pathToFileURL(join(baseUrl, 'index.js'));
|
|
230
|
+
}
|
|
231
|
+
catch {
|
|
232
|
+
return pathToFileURL(join(process.cwd(), 'index.js'));
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
/** Walk up from the entry module to its package root. The walk stops at the
|
|
236
|
+
* first `package.json`: a manifest lives at the package root, never deeper,
|
|
237
|
+
* so DSH's own rows (a `package.json` one level up from their entry) cost
|
|
238
|
+
* one lookup instead of a climb to the filesystem root. */
|
|
239
|
+
function findManifest(from) {
|
|
240
|
+
let dir = dirname(resolvePath(from));
|
|
241
|
+
for (let depth = 0; depth < 64; depth += 1) {
|
|
242
|
+
const candidate = join(dir, 'dsh-plugin.json');
|
|
243
|
+
if (existsSync(candidate))
|
|
244
|
+
return candidate;
|
|
245
|
+
if (existsSync(join(dir, 'package.json')))
|
|
246
|
+
return undefined;
|
|
247
|
+
const parent = dirname(dir);
|
|
248
|
+
if (parent === dir)
|
|
249
|
+
return undefined;
|
|
250
|
+
dir = parent;
|
|
251
|
+
}
|
|
252
|
+
return undefined;
|
|
253
|
+
}
|
|
254
|
+
function messageOf(error) {
|
|
255
|
+
return error instanceof Error ? error.message : String(error);
|
|
256
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"translate.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/backend/translate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAElE,OAAO,KAAK,EAAE,YAAY,EAAqC,MAAM,0BAA0B,CAAA;AAC/F,OAAO,EAAa,KAAK,UAAU,EAAqB,KAAK,cAAc,EAA0D,MAAM,uBAAuB,CAAA;AAElK,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAI3D,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAI1F,MAAM,WAAW,iBAAiB;IAChC;;0DAEsD;IACtD,KAAK,IAAI,iBAAiB,GAAG,SAAS,CAAA;IACtC;4EACwE;IACxE,KAAK,IAAI,OAAO,CAAA;IAChB;+DAC2D;IAC3D,WAAW,IAAI,OAAO,CAAA;CACvB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAE5D;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAkEtD;AA6FD,2EAA2E;AAC3E,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB;
|
|
1
|
+
{"version":3,"file":"translate.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/backend/translate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAA;AAElE,OAAO,KAAK,EAAE,YAAY,EAAqC,MAAM,0BAA0B,CAAA;AAC/F,OAAO,EAAa,KAAK,UAAU,EAAqB,KAAK,cAAc,EAA0D,MAAM,uBAAuB,CAAA;AAElK,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAI3D,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAI1F,MAAM,WAAW,iBAAiB;IAChC;;0DAEsD;IACtD,KAAK,IAAI,iBAAiB,GAAG,SAAS,CAAA;IACtC;4EACwE;IACxE,KAAK,IAAI,OAAO,CAAA;IAChB;+DAC2D;IAC3D,WAAW,IAAI,OAAO,CAAA;CACvB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,CAE5D;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAkEtD;AA6FD,2EAA2E;AAC3E,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,iBAAiB;4BAmI1B,YAAY,KAAG,SAAS,UAAU,EAAE;4BAsJpC,oBAAoB,KAAG,SAAS,UAAU,EAAE;8BAmB1C,SAAS,YAAY,EAAE,KAAG,SAAS,UAAU,EAAE;iBAU9D,IAAI;4BAtSS,MAAM,WAAW,MAAM,KAAG,YAAY,GAAG,SAAS;8BAYhD,MAAM,WAAW,MAAM,QAAQ,YAAY,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,KAAG,cAAc,GAAG,SAAS;EAgSjI;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAA"}
|
|
@@ -217,6 +217,9 @@ export function createDshTranslator(deps) {
|
|
|
217
217
|
return NO_EVENTS;
|
|
218
218
|
return [goalChange(change)];
|
|
219
219
|
}
|
|
220
|
+
if (data.source.kind === 'model-selection') {
|
|
221
|
+
return [{ type: 'notice', level: 'info', text: textOf(data.content) }];
|
|
222
|
+
}
|
|
220
223
|
// Injected context (plugin/skill source) is model-facing only; it has no
|
|
221
224
|
// transcript-facing text.
|
|
222
225
|
if (data.source.kind !== 'user')
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admission of one backend declaration (B-2, W-1): what the *host* knows about a
|
|
3
|
+
* `BackendSpec`, decided before anything runs.
|
|
4
|
+
*
|
|
5
|
+
* `validateBackendSpec()` (tui-profile) answers "is this shape well formed?".
|
|
6
|
+
* This answers the other half: "can this host honor it?" — a capability name in a
|
|
7
|
+
* vocabulary the host does not implement, a permission name with no grant, an id
|
|
8
|
+
* the host owns. The two are deliberately separate layers: the shape validator
|
|
9
|
+
* lives with the protocol (it must reject the same thing in every host that
|
|
10
|
+
* implements the family), while these verdicts depend on host state.
|
|
11
|
+
*
|
|
12
|
+
* The five-state vocabulary is reused verbatim from the plugin admission
|
|
13
|
+
* (`NegotiationDecision`, `NEGOTIATION_ERROR_CODES`), not invented here:
|
|
14
|
+
* a contribution family speaks the same admission language as every other
|
|
15
|
+
* plugin surface, and `negotiate.ts` stays untouched (it has no backend concept
|
|
16
|
+
* and does not need one).
|
|
17
|
+
*
|
|
18
|
+
* **Scope.** This decides; it does not wire the family into the registry /
|
|
19
|
+
* descriptor chain by itself. Since W-2 (stage C) that chain *is* wired —
|
|
20
|
+
* `Backend` is a host-published contract, the profile pins this family's contract
|
|
21
|
+
* profile by digest and the descriptor publishes the coordinate only on real
|
|
22
|
+
* probe evidence ({@link probeBackendAdmission}) — while the step that reads a
|
|
23
|
+
* mounted bundle's declaration into {@link registerBackend} is still the stage C
|
|
24
|
+
* install chain's work.
|
|
25
|
+
*
|
|
26
|
+
* **Published codes.** The contract profile
|
|
27
|
+
* (`tui-profile/registry/contracts/backend-v1alpha1.json`) publishes exactly the
|
|
28
|
+
* codes this file can produce: `BACKEND_ID_RESERVED` and `PERMISSION_NOT_GRANTED`.
|
|
29
|
+
* A code with no producer is a phantom its readers would write error handling for,
|
|
30
|
+
* so a future one waits until the stage that gives it a producer
|
|
31
|
+
* (`scripts/verify-backend-contribution.ts` pins the pair).
|
|
32
|
+
*/
|
|
33
|
+
import type { BackendSpec } from '../adapter/spec/tui-contributions.js';
|
|
34
|
+
import type { NegotiationDecision } from '../adapter/standard/types.js';
|
|
35
|
+
/** The host facts the verdict depends on; passed in, so the function is pure. */
|
|
36
|
+
export interface BackendAdmissionHost {
|
|
37
|
+
/** Ids this host owns (`BUILTIN_BACKEND_IDS`); a contribution may not wear one. */
|
|
38
|
+
readonly reservedIds: ReadonlySet<string>;
|
|
39
|
+
/** Names this host's session model implements (`BACKEND_CAPABILITY_NAMES`). */
|
|
40
|
+
readonly capabilityNames: ReadonlySet<string>;
|
|
41
|
+
/** The host's permission vocabulary (`EXPECTED_PERMISSIONS`). */
|
|
42
|
+
readonly permissionNames: ReadonlySet<string>;
|
|
43
|
+
/** Permissions actually granted to this entry; empty until a grant flow (C). */
|
|
44
|
+
readonly granted: ReadonlySet<string>;
|
|
45
|
+
}
|
|
46
|
+
/** The verdicts a registered entry can carry: the two that admit, and the one
|
|
47
|
+
* that registers without being offered. `rejected`/`unknown` never reach the
|
|
48
|
+
* registry — the caller throws on them (a build-time error for an in-tree
|
|
49
|
+
* manifest must be loud). `reasonCode` stays a `string` because the vocabulary
|
|
50
|
+
* is `NegotiationDecision`'s, shared with every other plugin surface; among
|
|
51
|
+
* these three verdicts the only `reasonCode` produced is
|
|
52
|
+
* `PERMISSION_NOT_GRANTED` (`rejected` carries `BACKEND_ID_RESERVED`). */
|
|
53
|
+
export type BackendAdmission = {
|
|
54
|
+
readonly decision: 'compatible';
|
|
55
|
+
} | {
|
|
56
|
+
readonly decision: 'compatible_degraded';
|
|
57
|
+
readonly missingOptional: readonly string[];
|
|
58
|
+
} | {
|
|
59
|
+
readonly decision: 'waiting_authorization';
|
|
60
|
+
readonly reasonCode: string;
|
|
61
|
+
readonly deniedPermissions: readonly string[];
|
|
62
|
+
};
|
|
63
|
+
export declare function backendAdmission(spec: BackendSpec, host: BackendAdmissionHost): NegotiationDecision;
|
|
64
|
+
//# sourceMappingURL=backend-admission.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend-admission.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/backend-admission.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAA;AACvE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAA;AAEvE,iFAAiF;AACjF,MAAM,WAAW,oBAAoB;IACnC,mFAAmF;IACnF,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IACzC,+EAA+E;IAC/E,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAC7C,iEAAiE;IACjE,QAAQ,CAAC,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAC7C,gFAAgF;IAChF,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;CACtC;AAED;;;;;;2EAM2E;AAC3E,MAAM,MAAM,gBAAgB,GACxB;IAAE,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAA;CAAE,GACnC;IAAE,QAAQ,CAAC,QAAQ,EAAE,qBAAqB,CAAC;IAAC,QAAQ,CAAC,eAAe,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,GACzF;IAAE,QAAQ,CAAC,QAAQ,EAAE,uBAAuB,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,iBAAiB,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAAA;AAO9H,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,oBAAoB,GAAG,mBAAmB,CA4BnG"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/** Unknown capability or permission names, in the same list, distinguishable at
|
|
2
|
+
* a glance from protocol coordinates (which are `apiVersion#kind`). */
|
|
3
|
+
const capabilityItem = (name) => `capability:${name}`;
|
|
4
|
+
const permissionItem = (name) => `permission:${name}`;
|
|
5
|
+
export function backendAdmission(spec, host) {
|
|
6
|
+
// A reserved id never reaches here in the in-tree path (registerBackend refuses
|
|
7
|
+
// it before projecting), but this is the reusable gate for a bundle, so it
|
|
8
|
+
// refuses it itself rather than trusting the caller to have done it. The other
|
|
9
|
+
// two member refusals — a host label key and a `nativeKey` declaration — are
|
|
10
|
+
// shape violations: `validateBackendSpec()` rejects both as unknown fields
|
|
11
|
+
// (`exactRecord`), so they cannot arrive as a `BackendSpec` at all and never
|
|
12
|
+
// need a reason code of their own.
|
|
13
|
+
if (host.reservedIds.has(spec.id)) {
|
|
14
|
+
return { decision: 'rejected', reasonCode: 'BACKEND_ID_RESERVED' };
|
|
15
|
+
}
|
|
16
|
+
const unknownCapabilities = spec.capabilities.filter(name => !host.capabilityNames.has(name));
|
|
17
|
+
const unknownGrants = spec.grants.filter(name => !host.permissionNames.has(name));
|
|
18
|
+
const denied = spec.grants.filter(name => host.permissionNames.has(name) && !host.granted.has(name));
|
|
19
|
+
// A permission the host cannot name is a fact the host must not act on: it is
|
|
20
|
+
// recorded as a pending item and the entry degrades, exactly like an unknown
|
|
21
|
+
// capability (D-3). Silently treating it as usable would claim a grant nobody
|
|
22
|
+
// can revoke; refusing would invent a permission vocabulary.
|
|
23
|
+
const missingOptional = [...unknownCapabilities.map(capabilityItem), ...unknownGrants.map(permissionItem)];
|
|
24
|
+
if (denied.length > 0) {
|
|
25
|
+
return {
|
|
26
|
+
decision: 'waiting_authorization',
|
|
27
|
+
reasonCode: 'PERMISSION_NOT_GRANTED',
|
|
28
|
+
deniedPermissions: [...denied],
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
if (missingOptional.length > 0)
|
|
32
|
+
return { decision: 'compatible_degraded', missingOptional };
|
|
33
|
+
return { decision: 'compatible' };
|
|
34
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The in-tree side of the `Backend` contribution family (B-2): one projection
|
|
3
|
+
* from this package's own manifest shape to the public declaration shape.
|
|
4
|
+
*
|
|
5
|
+
* A built-in manifest is a **superset** of `BackendSpec`: it carries in-tree
|
|
6
|
+
* facts (`inTree`, `alwaysAvailable`, `nativeKey`, `vendorPackages`,
|
|
7
|
+
* `backendExport`, and a `label` that may name a host i18n key) that no
|
|
8
|
+
* contribution may declare. Dogfooding therefore means proving the projection:
|
|
9
|
+
* `backendContributionOf()` strips those, expands the label into the literal
|
|
10
|
+
* text the spec requires, and the result must satisfy `validateBackendSpec()` for
|
|
11
|
+
* every built-in. A manifest that grows a field the spec cannot express reds here
|
|
12
|
+
* instead of drifting (scripts/verify-backend-contribution.ts).
|
|
13
|
+
*
|
|
14
|
+
* `backendExport` stays in-tree on purpose: it is the build-time index's
|
|
15
|
+
* mechanism (the registry reads an export name out of a module namespace), not a
|
|
16
|
+
* contribution field. A contribution hands its handler object over at
|
|
17
|
+
* registration, like `assertSceneHandler`'s scene handlers.
|
|
18
|
+
*/
|
|
19
|
+
import type { BackendManifest } from '../agent/backend-manifest.js';
|
|
20
|
+
/**
|
|
21
|
+
* Project one manifest onto the public declaration. Pure: the same manifest
|
|
22
|
+
* projects to a deep-equal value every time (no timestamps, no host state), which
|
|
23
|
+
* is what lets the gate compare two projections and diff keys.
|
|
24
|
+
*/
|
|
25
|
+
export declare function backendContributionOf(manifest: BackendManifest): Record<string, unknown>;
|
|
26
|
+
//# sourceMappingURL=backend-contribution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend-contribution.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/backend-contribution.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAoBnE;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAaxF"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { t } from '../i18n.js';
|
|
2
|
+
/** The label text a contribution would declare, or a refusal.
|
|
3
|
+
*
|
|
4
|
+
* Only an in-tree manifest may carry a host i18n key, and the projection is what
|
|
5
|
+
* turns one into the literal text the spec requires — so it is also where the rule
|
|
6
|
+
* has to hold when the projection is called directly: expanding a *plugin's* key
|
|
7
|
+
* would launder it into the literal `t()` happens to return, i.e. let a contribution
|
|
8
|
+
* paint itself with this host's own name. `registerBackend` refuses that combination
|
|
9
|
+
* before projecting; this refuses it again, so the exported projection cannot be used
|
|
10
|
+
* to do what registration forbids. */
|
|
11
|
+
function labelTextOf(manifest) {
|
|
12
|
+
if (manifest.label.kind === 'literal')
|
|
13
|
+
return manifest.label.text;
|
|
14
|
+
if (!manifest.inTree) {
|
|
15
|
+
throw new Error(`dsh-tui: backend "${manifest.id}" is not in-tree and may not project a host label key`);
|
|
16
|
+
}
|
|
17
|
+
return t(manifest.label.key);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Project one manifest onto the public declaration. Pure: the same manifest
|
|
21
|
+
* projects to a deep-equal value every time (no timestamps, no host state), which
|
|
22
|
+
* is what lets the gate compare two projections and diff keys.
|
|
23
|
+
*/
|
|
24
|
+
export function backendContributionOf(manifest) {
|
|
25
|
+
return {
|
|
26
|
+
id: manifest.id,
|
|
27
|
+
label: { text: labelTextOf(manifest) },
|
|
28
|
+
shortLabel: manifest.shortLabel,
|
|
29
|
+
...(manifest.product === undefined ? {} : { product: manifest.product }),
|
|
30
|
+
// Absent declarations project to the empty list: the spec requires both
|
|
31
|
+
// fields, so "I declare nothing" must be sayable and must mean "nothing".
|
|
32
|
+
capabilities: [...(manifest.capabilities ?? [])],
|
|
33
|
+
grants: [...(manifest.grants ?? [])],
|
|
34
|
+
...(manifest.install === undefined ? {} : { install: { ...manifest.install } }),
|
|
35
|
+
...(manifest.unloadExport === undefined ? {} : { unloadExport: manifest.unloadExport }),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The runtime backend registry (roadmap Stage A / P0).
|
|
3
|
+
*
|
|
4
|
+
* Before this module, "which backends exist" was a hand-written closed set
|
|
5
|
+
* spread over `kernelPrefs.ts`, this adapter, the launcher copy and the boundary
|
|
6
|
+
* gate: every new backend had to be copied into all of them (codex did exactly
|
|
7
|
+
* that, #1352). Now the set is the built-in seed plus whatever the build-time
|
|
8
|
+
* index found under `src/backends/*/manifest.ts` — adding a backend is a new
|
|
9
|
+
* directory, nothing else.
|
|
10
|
+
*
|
|
11
|
+
* Three properties this file must keep (they are what a fourth backend would
|
|
12
|
+
* otherwise break):
|
|
13
|
+
*
|
|
14
|
+
* - **Lazy**: an entry that is never loaded is never imported. `probeKernels`
|
|
15
|
+
* is the only path that loads everything, and it is opt-in.
|
|
16
|
+
* - **Booked pooling** (D4): `unloadExport` is remembered when — and only when —
|
|
17
|
+
* the entry's module was actually imported, so a DSH-only boot does not pay a
|
|
18
|
+
* module import (let alone a child process) just to close a pool it never
|
|
19
|
+
* opened. The one exit funnel (`plugin.ts`'s `disposeRootAndThen`) calls
|
|
20
|
+
* {@link unloadBackends} after the fiber is disposed and stays otherwise
|
|
21
|
+
* untouched.
|
|
22
|
+
* - **Membership is the second half of the parse** (D1): a syntactically valid
|
|
23
|
+
* but unregistered id must behave exactly like an unknown value everywhere
|
|
24
|
+
* (dsh + a warning, never a crashed boot). See {@link parseBackendChoice}.
|
|
25
|
+
*/
|
|
26
|
+
import type { AgentBackend } from '../agent/backend.js';
|
|
27
|
+
import { isBackendIdSyntax, type BackendEntry, type BackendManifest } from '../agent/backend-manifest.js';
|
|
28
|
+
import { type KernelBackendId } from '../kernelPrefs.js';
|
|
29
|
+
import { type BackendAdmission } from './backend-admission.js';
|
|
30
|
+
export { isBackendIdSyntax };
|
|
31
|
+
/**
|
|
32
|
+
* One registered backend: the manifest, its id as a validated {@link KernelBackendId}
|
|
33
|
+
* (the cast below is reached only after the syntax gate), the lazy loader, and the
|
|
34
|
+
* one fact the registry derives from the manifest.
|
|
35
|
+
*
|
|
36
|
+
* `installable` is derived, not declared: the old `installable` field was a
|
|
37
|
+
* boolean that the registration gate forced to equal "declares install data", so
|
|
38
|
+
* it carried no information of its own — and the half that *is* a runtime
|
|
39
|
+
* question (`does this host run that executor?`) could not be written in a
|
|
40
|
+
* manifest at all. Picker rows read it from here, and `installSurfaceFor(id)`
|
|
41
|
+
* answers the same question with the actions attached.
|
|
42
|
+
*/
|
|
43
|
+
export interface RegisteredBackend {
|
|
44
|
+
readonly id: KernelBackendId;
|
|
45
|
+
readonly manifest: BackendManifest;
|
|
46
|
+
readonly installable: boolean;
|
|
47
|
+
/**
|
|
48
|
+
* What the admission decided about this entry (B-2). `compatible_degraded`
|
|
49
|
+
* carries the names the host does not implement, `waiting_authorization` the
|
|
50
|
+
* permissions nobody granted; `rejected` and `unknown` never become an entry
|
|
51
|
+
* (registration throws on them). Every in-tree backend is `compatible` today.
|
|
52
|
+
*/
|
|
53
|
+
readonly admission: BackendAdmission;
|
|
54
|
+
readonly load?: () => Promise<Record<string, unknown>>;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Add one entry. The built-in seeds register themselves below; the plugin
|
|
58
|
+
* discovery of Stage C is the intended second caller, which is why the checks
|
|
59
|
+
* are loud rather than lenient: a bad manifest must fail at registration, not
|
|
60
|
+
* paint a wrong row.
|
|
61
|
+
*/
|
|
62
|
+
export declare function registerBackend(entry: BackendEntry): void;
|
|
63
|
+
/** Every registered backend, in declaration order (= picker order). */
|
|
64
|
+
export declare function listBackends(): readonly RegisteredBackend[];
|
|
65
|
+
/**
|
|
66
|
+
* The entries a picker may offer (B-2). A `waiting_authorization` entry is
|
|
67
|
+
* registered — its id exists, the boot's two-stage parse must find it, and its
|
|
68
|
+
* session refs must resolve — but it is not offered: nothing has granted what it
|
|
69
|
+
* declares, so selecting it would open a backend the host cannot describe. Today
|
|
70
|
+
* no entry is in that state (every in-tree manifest declares `grants: []`); the
|
|
71
|
+
* shape exists so the C stage's grant flow has somewhere to land.
|
|
72
|
+
*/
|
|
73
|
+
export declare function listOfferedBackends(): readonly RegisteredBackend[];
|
|
74
|
+
/**
|
|
75
|
+
* What the backend admission machine reports when asked whether it is mounted
|
|
76
|
+
* and can admit a *contribution* (W-2).
|
|
77
|
+
*/
|
|
78
|
+
export interface BackendAdmissionProbe {
|
|
79
|
+
/** Entries the registry holds: the built-in seed plus every registration. */
|
|
80
|
+
readonly registered: number;
|
|
81
|
+
/** How many of them a picker may offer (not `waiting_authorization`). */
|
|
82
|
+
readonly offered: number;
|
|
83
|
+
/** What a synthetic third-party declaration was admitted as. A machine that
|
|
84
|
+
* could not answer `compatible` would refuse every contribution, so this is
|
|
85
|
+
* the one verdict the probe accepts. */
|
|
86
|
+
readonly verdict: 'compatible';
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Read-only probe behind the host descriptor's `Backend` contract (W-2): is the
|
|
90
|
+
* backend admission machine mounted, and does it answer for a *contribution*?
|
|
91
|
+
*
|
|
92
|
+
* The descriptor publishes `tui.dsh/v1alpha1#Backend` only on real probe evidence
|
|
93
|
+
* (`hasVerificationEvidence`, descriptor publication barrier), and "a service row
|
|
94
|
+
* exists" is deliberately not evidence. So this probe walks the same path a
|
|
95
|
+
* third-party declaration takes — build a declaration no host owns, run it
|
|
96
|
+
* through the family validator, then through the host's admission facts — and
|
|
97
|
+
* reports what came back. It registers nothing, imports nothing and writes
|
|
98
|
+
* nothing: an entry that was never loaded is still never loaded.
|
|
99
|
+
*/
|
|
100
|
+
export declare function probeBackendAdmission(): BackendAdmissionProbe;
|
|
101
|
+
/** One backend, or undefined when no such backend is registered. */
|
|
102
|
+
export declare function getBackend(id: string): RegisteredBackend | undefined;
|
|
103
|
+
/** Whether an untrusted value names a backend this process can actually run.
|
|
104
|
+
* This is the second half of the parse (D1) and the only way to obtain a
|
|
105
|
+
* {@link KernelBackendId} outside `kernelPrefs`' own syntax gate. */
|
|
106
|
+
export declare function isRegisteredBackend(value: unknown): value is KernelBackendId;
|
|
107
|
+
/**
|
|
108
|
+
* The backend a configured / remembered value names: trimmed, lowercased, and
|
|
109
|
+
* **registered**. Anything else is undefined, which every caller already treats
|
|
110
|
+
* as "no choice made" (dsh + a warning) — the semantics an unknown value had
|
|
111
|
+
* before the set was open (D1).
|
|
112
|
+
*/
|
|
113
|
+
export declare function parseBackendChoice(value: unknown): KernelBackendId | undefined;
|
|
114
|
+
/** The display name of a backend id: its manifest's short brand name, else the
|
|
115
|
+
* id itself (a session from an uninstalled plugin must still render as
|
|
116
|
+
* something). */
|
|
117
|
+
export declare function backendLabel(id: string): string;
|
|
118
|
+
/**
|
|
119
|
+
* Import one registered backend's implementation and book its pool hook.
|
|
120
|
+
*
|
|
121
|
+
* The two failure messages stay distinct (D1): "not registered" means the id was
|
|
122
|
+
* never a choice, "has no loader" means the id names the host's own kernel.
|
|
123
|
+
*/
|
|
124
|
+
export declare function loadBackend(id: KernelBackendId): Promise<AgentBackend>;
|
|
125
|
+
/**
|
|
126
|
+
* Close the pooled, process-wide resources of every backend this process
|
|
127
|
+
* actually loaded, in load order, then forget them (idempotent).
|
|
128
|
+
*
|
|
129
|
+
* Called once from the exit funnel *after* `ctx.root.fiber.dispose()`: closing a
|
|
130
|
+
* pool first would break the in-flight sessions whose calls still hold it
|
|
131
|
+
* (D4-P3). A failing or hanging hook must not block the exit — failures only
|
|
132
|
+
* reach the debug log, and a stuck one is caught by the funnel's existing 5s
|
|
133
|
+
* bound (P4).
|
|
134
|
+
*/
|
|
135
|
+
export declare function unloadBackends(): Promise<void>;
|
|
136
|
+
//# sourceMappingURL=backend-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"backend-registry.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/backend-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAE,iBAAiB,EAAE,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,8BAA8B,CAAA;AAKzG,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAE7E,OAAO,EAAoB,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAKhF,OAAO,EAAE,iBAAiB,EAAE,CAAA;AA6C5B;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,EAAE,eAAe,CAAA;IAC5B,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAA;IAClC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;IAC7B;;;;;OAKG;IACH,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAA;IACpC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CACvD;AA0CD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAgEzD;AAOD,uEAAuE;AACvE,wBAAgB,YAAY,IAAI,SAAS,iBAAiB,EAAE,CAE3D;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,IAAI,SAAS,iBAAiB,EAAE,CAElE;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,6EAA6E;IAC7E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,yEAAyE;IACzE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB;;6CAEyC;IACzC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAA;CAC/B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,IAAI,qBAAqB,CAkB7D;AAED,oEAAoE;AACpE,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS,CAEpE;AAED;;sEAEsE;AACtE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAE5E;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,eAAe,GAAG,SAAS,CAI9E;AAED;;kBAEkB;AAClB,wBAAgB,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;;;;GAKG;AACH,wBAAsB,WAAW,CAAC,EAAE,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC,CAkB5E;AAED;;;;;;;;;GASG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CASpD"}
|