@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
|
@@ -3,12 +3,16 @@
|
|
|
3
3
|
* 滚动、composer 追问。Esc 返回侧栏,面板状态原样(mountPolicy=enabled
|
|
4
4
|
* 不卸载,thread 与 draft 都在线程 store)。
|
|
5
5
|
*
|
|
6
|
-
* 键层级:composer 编辑(Esc
|
|
6
|
+
* 键层级:composer 编辑(Esc 收起草稿、↑ 上到标题)> 场景动作(↑/↓ 选轮、
|
|
7
|
+
* s 送聊天/撤回、c 复制)> Esc 退出场景。选中态与侧栏面板同源(线程 store),
|
|
8
|
+
* 两个形态的键位与落点逐条对齐。
|
|
7
9
|
*/
|
|
8
10
|
import React from 'react';
|
|
9
11
|
import type { ChannelUi } from '../../../adapter/channel/ui-policy.js';
|
|
10
|
-
export declare function BtwThreadScene({ channel, onClose, }: {
|
|
12
|
+
export declare function BtwThreadScene({ channel, onClose, onFocusChat, }: {
|
|
11
13
|
readonly channel: ChannelUi;
|
|
12
14
|
readonly onClose: () => void;
|
|
15
|
+
/** 送聊天之后把焦点交回主输入框(宿主没接时只关场景)。 */
|
|
16
|
+
readonly onFocusChat?: (() => void) | undefined;
|
|
13
17
|
}): React.ReactNode;
|
|
14
18
|
//# sourceMappingURL=BtwThreadScene.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BtwThreadScene.d.ts","sourceRoot":"","sources":["../../../../../src/components/sidePanel/btw/BtwThreadScene.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"BtwThreadScene.d.ts","sourceRoot":"","sources":["../../../../../src/components/sidePanel/btw/BtwThreadScene.tsx"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAA;AAQtE,wBAAgB,cAAc,CAAC,EAC7B,OAAO,EACP,OAAO,EACP,WAAW,GACZ,EAAE;IACD,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAA;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,IAAI,CAAA;IAC5B,iCAAiC;IACjC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAA;CAChD,GAAG,KAAK,CAAC,SAAS,CAuKlB"}
|
|
@@ -4,7 +4,9 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
4
4
|
* 滚动、composer 追问。Esc 返回侧栏,面板状态原样(mountPolicy=enabled
|
|
5
5
|
* 不卸载,thread 与 draft 都在线程 store)。
|
|
6
6
|
*
|
|
7
|
-
* 键层级:composer 编辑(Esc
|
|
7
|
+
* 键层级:composer 编辑(Esc 收起草稿、↑ 上到标题)> 场景动作(↑/↓ 选轮、
|
|
8
|
+
* s 送聊天/撤回、c 复制)> Esc 退出场景。选中态与侧栏面板同源(线程 store),
|
|
9
|
+
* 两个形态的键位与落点逐条对齐。
|
|
8
10
|
*/
|
|
9
11
|
import React from 'react';
|
|
10
12
|
import { Box, Text, useInput, useTerminalSize } from '../../../ui.js';
|
|
@@ -14,11 +16,12 @@ import { btwThreads } from './threads.js';
|
|
|
14
16
|
import { getBtwContextBudget, getBtwContextTurns } from '../../../tuiDisplayPrefs.js';
|
|
15
17
|
import { BtwComposer, btwComposerKey } from './BtwComposer.js';
|
|
16
18
|
import { BtwThreadView } from './BtwThreadView.js';
|
|
17
|
-
export function BtwThreadScene({ channel, onClose, }) {
|
|
19
|
+
export function BtwThreadScene({ channel, onClose, onFocusChat, }) {
|
|
18
20
|
const { columns, rows } = useTerminalSize();
|
|
19
21
|
const sessionId = String(channel.agentId);
|
|
20
22
|
const thread = React.useSyncExternalStore(btwThreads.subscribe, () => btwThreads.get(sessionId));
|
|
21
23
|
const [composerFocus, setComposerFocus] = React.useState(true);
|
|
24
|
+
const activateComposer = React.useCallback(() => setComposerFocus(true), []);
|
|
22
25
|
const caretRef = React.useRef(0);
|
|
23
26
|
const [caret, setCaretState] = React.useState(0);
|
|
24
27
|
const setCaret = (next) => {
|
|
@@ -28,11 +31,15 @@ export function BtwThreadScene({ channel, onClose, }) {
|
|
|
28
31
|
const [notice, setNotice] = React.useState(null);
|
|
29
32
|
const scrollRef = React.useRef(null);
|
|
30
33
|
const busy = thread !== undefined && thread.activeTurnId !== null;
|
|
34
|
+
// 选中轮与侧栏面板同源(线程 store):↑/↓ 移动、s 送聊天/撤回、c 复制。
|
|
35
|
+
const turns = thread?.turns ?? [];
|
|
36
|
+
const selectedId = thread?.selectedTurnId ?? null;
|
|
37
|
+
const selectedTurn = turns.find(turn => turn.turnId === selectedId);
|
|
31
38
|
const attachTurn = React.useCallback((turn) => {
|
|
32
39
|
if (turn.phase !== 'completed')
|
|
33
|
-
return;
|
|
40
|
+
return false;
|
|
34
41
|
if (typeof channel.attachContext !== 'function')
|
|
35
|
-
return;
|
|
42
|
+
return false;
|
|
36
43
|
channel.attachContext({
|
|
37
44
|
source: 'panel',
|
|
38
45
|
sourceId: turn.turnId,
|
|
@@ -41,7 +48,42 @@ export function BtwThreadScene({ channel, onClose, }) {
|
|
|
41
48
|
});
|
|
42
49
|
const staged = channel.attachedContexts.find(entry => entry.sourceId === turn.turnId);
|
|
43
50
|
channel.notify(staged?.truncated === true ? t('btw-thread-answer-truncated') : t('btw-thread-answer-attached'), { color: 'success' });
|
|
51
|
+
return true;
|
|
44
52
|
}, [channel]);
|
|
53
|
+
/**
|
|
54
|
+
* `s` = 送聊天,再按一次 = 撤回(与侧栏面板、jobs/companion 同一契约)。
|
|
55
|
+
* 送出去之后这个整屏场景就让位:关掉场景 + 焦点交回主输入框——等价于侧栏
|
|
56
|
+
* 形态里「面板留着、焦点回到输入框」,两种形态的落点一致。
|
|
57
|
+
*/
|
|
58
|
+
const sendToChat = React.useCallback((turn) => {
|
|
59
|
+
// oxlint-disable-next-line typescript/no-unnecessary-condition -- runtime guard: partial fixture channels
|
|
60
|
+
const staged = (channel.attachedContexts ?? []).find(entry => entry.sourceId === turn.turnId);
|
|
61
|
+
if (staged !== undefined) {
|
|
62
|
+
if (typeof channel.detachContext === 'function')
|
|
63
|
+
channel.detachContext(staged.id);
|
|
64
|
+
channel.notify(t('panel-context-detached'), { color: 'success' });
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
if (!attachTurn(turn))
|
|
68
|
+
return;
|
|
69
|
+
onFocusChat?.();
|
|
70
|
+
onClose();
|
|
71
|
+
}, [attachTurn, channel, onFocusChat, onClose]);
|
|
72
|
+
/** 点标题行:选中那一轮并离开编辑层(高亮只在列表态显示)。 */
|
|
73
|
+
const selectTurn = React.useCallback((turnId) => {
|
|
74
|
+
btwThreads.select(sessionId, turnId);
|
|
75
|
+
setComposerFocus(false);
|
|
76
|
+
}, [sessionId]);
|
|
77
|
+
const copySelected = React.useCallback(() => {
|
|
78
|
+
const turn = btwThreads.selectedTurn(sessionId);
|
|
79
|
+
const answer = turn !== undefined && turn.answer !== ''
|
|
80
|
+
? turn.answer
|
|
81
|
+
: [...(btwThreads.get(sessionId)?.turns ?? [])].reverse().find(candidate => candidate.phase === 'completed')?.answer;
|
|
82
|
+
if (answer === undefined)
|
|
83
|
+
return;
|
|
84
|
+
void setClipboard(answer);
|
|
85
|
+
channel.notify(t('copied-chars', { n: answer.length }), { timeoutMs: 1500 });
|
|
86
|
+
}, [sessionId, channel]);
|
|
45
87
|
useInput((input, key, event) => {
|
|
46
88
|
if (composerFocus) {
|
|
47
89
|
const text = btwThreads.get(sessionId)?.draft ?? '';
|
|
@@ -79,14 +121,23 @@ export function BtwThreadScene({ channel, onClose, }) {
|
|
|
79
121
|
onClose();
|
|
80
122
|
return;
|
|
81
123
|
}
|
|
124
|
+
// ↑/↓ 只挪选中,滚动交给 BtwThreadView 的「最小揭示」(出了视口才滚)。
|
|
82
125
|
if (key.upArrow) {
|
|
83
|
-
scrollRef.current?.scrollBy(-3);
|
|
84
126
|
event.stopImmediatePropagation();
|
|
127
|
+
btwThreads.moveSelection(sessionId, -1);
|
|
85
128
|
return;
|
|
86
129
|
}
|
|
87
130
|
if (key.downArrow) {
|
|
88
|
-
scrollRef.current?.scrollBy(3);
|
|
89
131
|
event.stopImmediatePropagation();
|
|
132
|
+
const list = btwThreads.get(sessionId)?.turns ?? [];
|
|
133
|
+
const current = btwThreads.selectedTurn(sessionId);
|
|
134
|
+
const at = current === undefined ? list.length - 1 : list.findIndex(turn => turn.turnId === current.turnId);
|
|
135
|
+
// 已在最后一条:↓ 回输入框(与输入框里按 ↑ 上到标题互为往返)。
|
|
136
|
+
if (list.length === 0 || at === list.length - 1) {
|
|
137
|
+
setComposerFocus(true);
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
btwThreads.moveSelection(sessionId, 1);
|
|
90
141
|
return;
|
|
91
142
|
}
|
|
92
143
|
if (key.pageUp) {
|
|
@@ -100,7 +151,8 @@ export function BtwThreadScene({ channel, onClose, }) {
|
|
|
100
151
|
return;
|
|
101
152
|
}
|
|
102
153
|
// ink reports a plain Tab as key.tab with an empty input.
|
|
103
|
-
|
|
154
|
+
// Enter/Tab 都回编辑层:列表态不是死胡同,一键继续问。
|
|
155
|
+
if (key.tab || input === '\t' || key.return || /^[\r\n]+$/u.test(input)) {
|
|
104
156
|
setComposerFocus(true);
|
|
105
157
|
event.stopImmediatePropagation();
|
|
106
158
|
return;
|
|
@@ -112,20 +164,16 @@ export function BtwThreadScene({ channel, onClose, }) {
|
|
|
112
164
|
return;
|
|
113
165
|
}
|
|
114
166
|
if (input === 's' && !key.ctrl && !key.meta) {
|
|
115
|
-
const
|
|
116
|
-
if (
|
|
117
|
-
|
|
167
|
+
const turn = btwThreads.selectedTurn(sessionId);
|
|
168
|
+
if (turn !== undefined)
|
|
169
|
+
sendToChat(turn);
|
|
118
170
|
event.stopImmediatePropagation();
|
|
119
171
|
return;
|
|
120
172
|
}
|
|
121
173
|
if (input === 'c' && !key.ctrl && !key.meta) {
|
|
122
|
-
|
|
123
|
-
if (latest !== undefined) {
|
|
124
|
-
void setClipboard(latest.answer);
|
|
125
|
-
channel.notify(t('copied-chars', { n: latest.answer.length }), { timeoutMs: 1500 });
|
|
126
|
-
}
|
|
174
|
+
copySelected();
|
|
127
175
|
event.stopImmediatePropagation();
|
|
128
176
|
}
|
|
129
177
|
});
|
|
130
|
-
return (_jsxs(Box, { flexDirection: "column", width: columns, height: rows, paddingX: 1, children: [_jsxs(Box, { flexDirection: "row", width: "100%", height: 1, flexShrink: 0, children: [_jsx(Text, { color: "warning", bold: true, children: t('btw-fullscreen-title') }), _jsx(Text, { dimColor: true, children: ' ' + t('btw-
|
|
178
|
+
return (_jsxs(Box, { flexDirection: "column", width: columns, height: rows, paddingX: 1, children: [_jsxs(Box, { flexDirection: "row", width: "100%", height: 1, flexShrink: 0, children: [_jsx(Text, { color: "warning", bold: true, children: t('btw-fullscreen-title') }), _jsx(Text, { dimColor: true, wrap: "truncate", children: ' ' + t('btw-scene-hints') })] }), _jsx(BtwThreadView, { thread: thread, width: columns - 2, height: Math.max(3, rows - 4), alive: true, selectedTurnId: composerFocus ? undefined : selectedId ?? undefined, onSelectTurn: selectTurn, scrollHandleRef: scrollRef }), _jsx(BtwComposer, { state: { text: thread?.draft ?? '', caret }, focused: composerFocus, busy: busy, notice: notice === null ? undefined : notice, onActivate: activateComposer })] }));
|
|
131
179
|
}
|
|
@@ -1,19 +1,29 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* BtwThreadView:Q/A 轮次的滚动列表(面板 / 全屏场景 / 浮层 fallback
|
|
3
|
-
* 共用)。Question 走用户侧视觉(accent
|
|
3
|
+
* 共用)。Question 走用户侧视觉(accent 加粗,无行首箭头),Answer 走共享
|
|
4
4
|
* Markdown;运行中显示本轮 spinner;失败或中止时保留已流出的部分答复,
|
|
5
5
|
* 下面标出错误/已中止。
|
|
6
6
|
*
|
|
7
7
|
* 跟尾:默认跟随尾部;用户上滚后暂停 follow,
|
|
8
8
|
* 出现「有新回答」跳尾提示(点击回底)。ScrollBox 的 sticky 位就是
|
|
9
9
|
* follow 信号——上滚打破 sticky,scrollToBottom/贴底恢复。
|
|
10
|
+
*
|
|
11
|
+
* 消息区不是控件:点它跟点面板其它地方一样,只由宿主把列焦点交给面板
|
|
12
|
+
* (见 BtwComposer 的点击注释),注入/复制的入口是选中轮 + `s`/`c`。
|
|
13
|
+
* 选中只看标题那一行:反色只覆盖标题本身的字,终端光标也声明在那儿。
|
|
14
|
+
* 选中轮滚出视口时只滚到「恰好露出这一行」:往上走贴视口顶、往下走贴视口底;
|
|
15
|
+
* 已经在视口里就只挪高亮,不动滚动位置。
|
|
10
16
|
*/
|
|
11
17
|
import React from 'react';
|
|
12
18
|
import { type ScrollBoxHandle } from '../../../ui.js';
|
|
13
|
-
import type { BtwThreadSnapshot
|
|
19
|
+
import type { BtwThreadSnapshot } from './threads.js';
|
|
14
20
|
export declare function BtwThreadView({ thread, width, height,
|
|
15
21
|
/** 渲时钟的开关(面板不可见/场景失焦时停表)。 */
|
|
16
|
-
alive,
|
|
22
|
+
alive,
|
|
23
|
+
/** 当前选中的轮(标题反色 + 光标声明);undefined = 列表没有选中态。 */
|
|
24
|
+
selectedTurnId,
|
|
25
|
+
/** 点标题行把选中挪到那一轮(继续冒泡,宿主照旧拿列焦点)。 */
|
|
26
|
+
onSelectTurn,
|
|
17
27
|
/** 宿主(全屏场景/浮层)接管键盘滚动用的句柄透传。 */
|
|
18
28
|
scrollHandleRef, }: {
|
|
19
29
|
readonly thread: BtwThreadSnapshot | undefined;
|
|
@@ -21,8 +31,8 @@ scrollHandleRef, }: {
|
|
|
21
31
|
/** 滚动区行预算(含滚动区自身;跳尾提示一行另计)。 */
|
|
22
32
|
readonly height: number;
|
|
23
33
|
readonly alive: boolean;
|
|
24
|
-
|
|
25
|
-
readonly
|
|
34
|
+
readonly selectedTurnId?: string | undefined;
|
|
35
|
+
readonly onSelectTurn?: ((turnId: string) => void) | undefined;
|
|
26
36
|
readonly scrollHandleRef?: {
|
|
27
37
|
current: ScrollBoxHandle | null;
|
|
28
38
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BtwThreadView.d.ts","sourceRoot":"","sources":["../../../../../src/components/sidePanel/btw/BtwThreadView.tsx"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"BtwThreadView.d.ts","sourceRoot":"","sources":["../../../../../src/components/sidePanel/btw/BtwThreadView.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAwB,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAO3E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AA2DrD,wBAAgB,aAAa,CAAC,EAC5B,MAAM,EACN,KAAK,EACL,MAAM;AACN,6BAA6B;AAC7B,KAAK;AACL,+CAA+C;AAC/C,cAAc;AACd,mCAAmC;AACnC,YAAY;AACZ,+BAA+B;AAC/B,eAAe,GAChB,EAAE;IACD,QAAQ,CAAC,MAAM,EAAE,iBAAiB,GAAG,SAAS,CAAA;IAC9C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,+BAA+B;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAC5C,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAA;IAC9D,QAAQ,CAAC,eAAe,CAAC,EAAE;QAAE,OAAO,EAAE,eAAe,GAAG,IAAI,CAAA;KAAE,CAAA;CAC/D,GAAG,KAAK,CAAC,SAAS,CA6JlB"}
|
|
@@ -1,27 +1,68 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
/**
|
|
3
3
|
* BtwThreadView:Q/A 轮次的滚动列表(面板 / 全屏场景 / 浮层 fallback
|
|
4
|
-
* 共用)。Question 走用户侧视觉(accent
|
|
4
|
+
* 共用)。Question 走用户侧视觉(accent 加粗,无行首箭头),Answer 走共享
|
|
5
5
|
* Markdown;运行中显示本轮 spinner;失败或中止时保留已流出的部分答复,
|
|
6
6
|
* 下面标出错误/已中止。
|
|
7
7
|
*
|
|
8
8
|
* 跟尾:默认跟随尾部;用户上滚后暂停 follow,
|
|
9
9
|
* 出现「有新回答」跳尾提示(点击回底)。ScrollBox 的 sticky 位就是
|
|
10
10
|
* follow 信号——上滚打破 sticky,scrollToBottom/贴底恢复。
|
|
11
|
+
*
|
|
12
|
+
* 消息区不是控件:点它跟点面板其它地方一样,只由宿主把列焦点交给面板
|
|
13
|
+
* (见 BtwComposer 的点击注释),注入/复制的入口是选中轮 + `s`/`c`。
|
|
14
|
+
* 选中只看标题那一行:反色只覆盖标题本身的字,终端光标也声明在那儿。
|
|
15
|
+
* 选中轮滚出视口时只滚到「恰好露出这一行」:往上走贴视口顶、往下走贴视口底;
|
|
16
|
+
* 已经在视口里就只挪高亮,不动滚动位置。
|
|
11
17
|
*/
|
|
12
18
|
import React from 'react';
|
|
13
19
|
import { Box, Text, ScrollBox } from '../../../ui.js';
|
|
14
20
|
import { Markdown } from '../../Markdown.js';
|
|
15
21
|
import { SpinnerGlyph } from '../../Spinner/SpinnerGlyph.js';
|
|
16
22
|
import { t } from '../../../i18n.js';
|
|
23
|
+
import { useDeclaredCursor, useNativeCursor } from '../../../ink/hooks/use-declared-cursor.js';
|
|
24
|
+
import { getBtwContextTurns, subscribeBtwContextTurns } from '../../../tuiDisplayPrefs.js';
|
|
17
25
|
/** 80ms spinner 帧(只在有 running 轮且其还没收到首段文本时走时钟)。 */
|
|
18
26
|
const SPINNER_MS = 80;
|
|
27
|
+
/** 空态:一句「还没有」+ 这是什么 + 上下文口径(三条信息各一行,不再一行裸文案)。 */
|
|
28
|
+
function BtwEmptyState({ contextTurns }) {
|
|
29
|
+
return (_jsxs(Box, { flexDirection: "column", flexGrow: 1, paddingX: 1, children: [_jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "subtle", wrap: "truncate", children: t('btw-thread-empty') }) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { color: "subtle", wrap: "wrap", children: t('btw-empty-lines') }) }), _jsx(Box, { marginTop: 1, children: _jsx(Text, { dimColor: true, italic: true, wrap: "wrap", children: t('btw-thread-context-recent', { n: contextTurns }) }) })] }));
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* 一轮的标题行(问题)。选中 = 只反色标题本身的字(不铺满整行),并把终端
|
|
33
|
+
* 光标声明在这一行上:按 ↑/↓ 时原生光标的拖尾是「在标题之间上下走」,而不是
|
|
34
|
+
* 掉到屏幕左下角(没有声明时渲染器的兜底位置)。点这一行 = 把高亮挪过来
|
|
35
|
+
* (`onSelect`),点击继续冒泡,宿主照旧拿到列焦点。
|
|
36
|
+
*/
|
|
37
|
+
function QuestionRow({ turnId, text, selected, onSelect, onRegister }) {
|
|
38
|
+
const native = useNativeCursor();
|
|
39
|
+
// 与 ListItem 同款:移动期间可见、静止 500ms 后收起,形状/闪烁归终端。
|
|
40
|
+
const cursorRef = useDeclaredCursor({ line: 0, column: 0, active: selected, visible: native, hideOnIdle: native });
|
|
41
|
+
// 组装 ref 时必须把 cursorRef 的 cleanup 转交出去(React 19 用返回值当卸载
|
|
42
|
+
// 清理),否则这一行被删掉时光标声明会留在原地。
|
|
43
|
+
const setNode = React.useCallback((node) => {
|
|
44
|
+
const cleanup = cursorRef(node);
|
|
45
|
+
onRegister?.(turnId, node);
|
|
46
|
+
return () => {
|
|
47
|
+
if (typeof cleanup === 'function')
|
|
48
|
+
cleanup();
|
|
49
|
+
onRegister?.(turnId, null);
|
|
50
|
+
};
|
|
51
|
+
}, [cursorRef, onRegister, turnId]);
|
|
52
|
+
return (_jsx(Box, { ref: setNode, onClick: onSelect === undefined ? undefined : () => onSelect(turnId), children: _jsx(Text, { color: "accent", bold: true, inverse: selected, wrap: "wrap", children: text }) }));
|
|
53
|
+
}
|
|
19
54
|
export function BtwThreadView({ thread, width, height,
|
|
20
55
|
/** 渲时钟的开关(面板不可见/场景失焦时停表)。 */
|
|
21
|
-
alive,
|
|
56
|
+
alive,
|
|
57
|
+
/** 当前选中的轮(标题反色 + 光标声明);undefined = 列表没有选中态。 */
|
|
58
|
+
selectedTurnId,
|
|
59
|
+
/** 点标题行把选中挪到那一轮(继续冒泡,宿主照旧拿列焦点)。 */
|
|
60
|
+
onSelectTurn,
|
|
22
61
|
/** 宿主(全屏场景/浮层)接管键盘滚动用的句柄透传。 */
|
|
23
62
|
scrollHandleRef, }) {
|
|
24
63
|
const localScrollRef = React.useRef(null);
|
|
64
|
+
// 上下文覆盖提示跟随 dsh-tui.btw.contextTurns 的活值(/settings 改完即换词)。
|
|
65
|
+
const contextTurns = React.useSyncExternalStore(subscribeBtwContextTurns, getBtwContextTurns);
|
|
25
66
|
const scrollRef = scrollHandleRef ?? localScrollRef;
|
|
26
67
|
const [frame, setFrame] = React.useState(0);
|
|
27
68
|
const [follow, setFollow] = React.useState(true);
|
|
@@ -70,18 +111,68 @@ scrollHandleRef, }) {
|
|
|
70
111
|
setPendingJump(true);
|
|
71
112
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
72
113
|
}, [version, answerLengths, follow]);
|
|
114
|
+
// ── 选中轮的最小滚动揭示 ─────────────────────────────────────────────
|
|
115
|
+
// 行节点表:QuestionRow 挂载时交进来;滚动位置一律走 ScrollBox 的
|
|
116
|
+
// scrollToElement(位置在渲染期读元素 Yoga top,不会用到过期数字)。
|
|
117
|
+
const rowNodes = React.useRef(new Map());
|
|
118
|
+
const registerRow = React.useCallback((turnId, node) => {
|
|
119
|
+
if (node === null)
|
|
120
|
+
rowNodes.current.delete(turnId);
|
|
121
|
+
else
|
|
122
|
+
rowNodes.current.set(turnId, node);
|
|
123
|
+
}, []);
|
|
124
|
+
/**
|
|
125
|
+
* 节点在滚动内容里的行号(不含滚动位移):沿祖先累加 Yoga top,直到撞上滚动
|
|
126
|
+
* 容器(ScrollBox 的节点上才有 scrollTop)。没撞到(浮层回退等无滚动区形态)
|
|
127
|
+
* 返回 undefined——宁可不滚,也不要按错误的坐标系乱跳。
|
|
128
|
+
*/
|
|
129
|
+
const contentRowOf = (node) => {
|
|
130
|
+
let rows = 0;
|
|
131
|
+
let current = node;
|
|
132
|
+
while (current !== undefined && current.parentNode !== undefined) {
|
|
133
|
+
if (current.parentNode.scrollTop !== undefined)
|
|
134
|
+
return rows;
|
|
135
|
+
rows += current.yogaNode?.getComputedTop() ?? 0;
|
|
136
|
+
current = current.parentNode;
|
|
137
|
+
}
|
|
138
|
+
return undefined;
|
|
139
|
+
};
|
|
140
|
+
const previousSelectedRef = React.useRef(undefined);
|
|
141
|
+
React.useLayoutEffect(() => {
|
|
142
|
+
const previous = previousSelectedRef.current;
|
|
143
|
+
previousSelectedRef.current = selectedTurnId;
|
|
144
|
+
// 从编辑层或主输入框回列表时也要揭示:长答案跟尾后,标题可能在视口外。
|
|
145
|
+
if (selectedTurnId === undefined || previous === selectedTurnId)
|
|
146
|
+
return;
|
|
147
|
+
const handle = scrollRef.current;
|
|
148
|
+
const node = rowNodes.current.get(selectedTurnId);
|
|
149
|
+
if (handle === null || node === undefined)
|
|
150
|
+
return;
|
|
151
|
+
const viewport = handle.getViewportHeight();
|
|
152
|
+
if (viewport <= 0)
|
|
153
|
+
return;
|
|
154
|
+
const rows = Math.max(1, Math.ceil(node.yogaNode?.getComputedHeight() ?? 1));
|
|
155
|
+
const top = contentRowOf(node);
|
|
156
|
+
if (top === undefined)
|
|
157
|
+
return;
|
|
158
|
+
const scrollTop = handle.getScrollTop();
|
|
159
|
+
// 用算好的内容行号直接 scrollTo:scrollToElement 读的是元素相对**父节点**的
|
|
160
|
+
// top,标题盒子嵌在 turn 里,用它会把滚动甩到内容顶部。布局已稳定(只有选中
|
|
161
|
+
// 变了),这里的数字不会过期。
|
|
162
|
+
// 往上走出视口 → 贴视口顶;往下走出视口 → 整行贴视口底(恰好露出,不多滚)。
|
|
163
|
+
if (top < scrollTop)
|
|
164
|
+
handle.scrollTo(top);
|
|
165
|
+
else if (top + rows > scrollTop + viewport)
|
|
166
|
+
handle.scrollTo(top + rows - viewport);
|
|
167
|
+
}, [selectedTurnId]);
|
|
73
168
|
const jumpTail = React.useCallback(() => {
|
|
74
169
|
scrollRef.current?.scrollToBottom();
|
|
75
170
|
setFollow(true);
|
|
76
171
|
setPendingJump(false);
|
|
77
172
|
}, []);
|
|
78
|
-
if (thread === undefined || thread.turns.length === 0)
|
|
79
|
-
return
|
|
80
|
-
}
|
|
81
|
-
return (_jsxs(Box, { flexDirection: "column", flexGrow: 1, overflow: "hidden", paddingX: 1, children: [_jsx(ScrollBox, { ref: scrollRef, flexDirection: "column", flexGrow: 1, stickyScroll: true, children: thread.turns.map(turn => (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { flexDirection: "row", flexShrink: 0, children: [_jsx(Text, { color: "accent", bold: true, children: '❯ ' }), _jsx(Text, { color: "accent", wrap: "wrap", children: turn.question })] }), _jsxs(Box, { marginLeft: 2, flexDirection: "column", children: [turn.phase === 'completed' ? (_jsx(Box, { onClick: onAttachTurn === undefined ? undefined : event => {
|
|
82
|
-
event.stopImmediatePropagation();
|
|
83
|
-
onAttachTurn(turn);
|
|
84
|
-
}, children: _jsx(Markdown, { cacheTokens: false, children: turn.answer }) })) : turn.phase === 'failed' || turn.phase === 'cancelled' ? (_jsxs(_Fragment, { children: [turn.answer !== '' && _jsx(Markdown, { cacheTokens: false, children: turn.answer }), turn.phase === 'failed'
|
|
173
|
+
if (thread === undefined || thread.turns.length === 0)
|
|
174
|
+
return _jsx(BtwEmptyState, { contextTurns: contextTurns });
|
|
175
|
+
return (_jsxs(Box, { flexDirection: "column", flexGrow: 1, overflow: "hidden", paddingX: 1, children: [_jsx(ScrollBox, { ref: scrollRef, flexDirection: "column", flexGrow: 1, stickyScroll: true, children: thread.turns.map((turn, index) => (_jsxs(Box, { flexDirection: "column", children: [index > 0 && _jsx(Text, { dimColor: true, children: '┈'.repeat(Math.max(4, width - 2)) }), _jsx(QuestionRow, { turnId: turn.turnId, text: turn.question, selected: turn.turnId === selectedTurnId, onSelect: onSelectTurn, onRegister: registerRow }), _jsxs(Box, { marginLeft: 2, flexDirection: "column", children: [turn.phase === 'completed' ? (_jsx(Markdown, { cacheTokens: false, children: turn.answer })) : turn.phase === 'failed' || turn.phase === 'cancelled' ? (_jsxs(_Fragment, { children: [turn.answer !== '' && _jsx(Markdown, { cacheTokens: false, children: turn.answer }), turn.phase === 'failed'
|
|
85
176
|
? _jsxs(Text, { color: "error", wrap: "wrap", children: [t('btw-thread-error'), turn.error === undefined ? '' : ': ' + turn.error] })
|
|
86
|
-
: _jsx(Text, { dimColor: true, italic: true, children: t('btw-thread-cancelled') })] })) : turn.answer !== '' ? (_jsx(Markdown, { cacheTokens: false, children: turn.answer })) : (_jsxs(Box, { flexShrink: 0, children: [_jsx(SpinnerGlyph, { frame: frame, messageColor: "warning" }), _jsxs(Text, { color: "warning", children: [" ", t('btw-answering')] })] })), turn.omittedOlderCount > 0 && (_jsx(Text, { dimColor: true, italic: true, wrap: "truncate", children: t('btw-thread-context-omitted', { n: turn.omittedOlderCount }) }))] })
|
|
177
|
+
: _jsx(Text, { dimColor: true, italic: true, children: t('btw-thread-cancelled') })] })) : turn.answer !== '' ? (_jsx(Markdown, { cacheTokens: false, children: turn.answer })) : (_jsxs(Box, { flexShrink: 0, children: [_jsx(SpinnerGlyph, { frame: frame, messageColor: "warning" }), _jsxs(Text, { color: "warning", children: [" ", t('btw-answering')] })] })), turn.omittedOlderCount > 0 && (_jsx(Text, { dimColor: true, italic: true, wrap: "truncate", children: t('btw-thread-context-omitted', { n: turn.omittedOlderCount }) }))] })] }, turn.turnId))) }), pendingJump && !follow && (_jsx(Box, { flexShrink: 0, onClick: event => { event.stopImmediatePropagation(); jumpTail(); }, children: _jsxs(Text, { color: "permission", children: ["\u2193 ", t('btw-thread-unread')] }) }))] }));
|
|
87
178
|
}
|
|
@@ -22,6 +22,9 @@ export interface BtwThreadSnapshot {
|
|
|
22
22
|
readonly turns: readonly BtwTurn[];
|
|
23
23
|
readonly activeTurnId: string | null;
|
|
24
24
|
readonly draft: string;
|
|
25
|
+
/** 列表选中的轮(`s` 送聊天 / `c` 复制的对象);null = 跟最后一条。
|
|
26
|
+
* 与 draft 同理放在 store 里:面板与全屏场景共用同一份选中态。 */
|
|
27
|
+
readonly selectedTurnId: string | null;
|
|
25
28
|
/** seen-through 标尺之后的完成/失败轮(cancelled 不计:用户自己中止,
|
|
26
29
|
* 不是没看到的新答案)。 */
|
|
27
30
|
readonly unread: {
|
|
@@ -55,6 +58,12 @@ export type BtwSubmitResult = {
|
|
|
55
58
|
readonly ok: false;
|
|
56
59
|
readonly reason: 'empty' | 'busy' | 'congested';
|
|
57
60
|
};
|
|
61
|
+
/**
|
|
62
|
+
* 有效选中轮:钉住的 id 还在就继续用它,否则跟最后一条(新轮到达自动跟尾、
|
|
63
|
+
* 轮被清掉/换话题自动落回)。面板与全屏场景共用这一条解析,保证两个形态
|
|
64
|
+
* 的选中语义逐字一致。
|
|
65
|
+
*/
|
|
66
|
+
export declare function effectiveSelectedTurnId(turns: readonly BtwTurn[], pinned: string | null): string | null;
|
|
58
67
|
/** 钳到 1–8;非有限值取默认 4。 */
|
|
59
68
|
export declare function normalizeRecentTurnsLimit(value: number | undefined): number;
|
|
60
69
|
export interface BtwContextSelection {
|
|
@@ -97,6 +106,15 @@ declare class BtwThreadStore {
|
|
|
97
106
|
*/
|
|
98
107
|
newTopic(sessionId: string): boolean;
|
|
99
108
|
setDraft(sessionId: string, text: string): void;
|
|
109
|
+
/** 指定选中某一轮(点标题行;null = 回到跟最后一条)。 */
|
|
110
|
+
select(sessionId: string, turnId: string | null): void;
|
|
111
|
+
/** 当前选中轮(实时解析,不依赖渲染期快照)。 */
|
|
112
|
+
selectedTurn(sessionId: string): BtwTurn | undefined;
|
|
113
|
+
/**
|
|
114
|
+
* ↑/↓ 移动选中:从当前有效选中出发、夹在两端(delta = ±1)。落点即钉住,
|
|
115
|
+
* 所以移动之后不再跟尾;返回新选中轮(线程为空 = undefined)。
|
|
116
|
+
*/
|
|
117
|
+
moveSelection(sessionId: string, delta: number): BtwTurn | undefined;
|
|
100
118
|
/** 看到最新线程:把已落定轮全部记为已读(running 轮落定时再见分晓)。 */
|
|
101
119
|
markSeen(sessionId: string): void;
|
|
102
120
|
/** 测试/多夹具隔离用:清空全部线程状态。 */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"threads.d.ts","sourceRoot":"","sources":["../../../../../src/components/sidePanel/btw/threads.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"threads.d.ts","sourceRoot":"","sources":["../../../../../src/components/sidePanel/btw/threads.ts"],"names":[],"mappings":"AAiBA,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAA;AAEtF,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,uCAAuC;IACvC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAA;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,qCAAqC;IACrC,QAAQ,CAAC,sBAAsB,EAAE,SAAS,MAAM,EAAE,CAAA;IAClD,gDAAgD;IAChD,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAA;CACnC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,CAAA;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAAA;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB;gDAC4C;IAC5C,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IACtC;qBACiB;IACjB,QAAQ,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAA;IACpE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AAED,4CAA4C;AAC5C,eAAO,MAAM,wBAAwB,IAAI,CAAA;AACzC,eAAO,MAAM,oBAAoB,IAAI,CAAA;AACrC,eAAO,MAAM,oBAAoB,IAAI,CAAA;AACrC,4BAA4B;AAC5B,eAAO,MAAM,uBAAuB,QAAS,CAAA;AAC7C,uBAAuB;AACvB,eAAO,MAAM,sBAAsB,OAAQ,CAAA;AAC3C,2BAA2B;AAC3B,eAAO,MAAM,uBAAuB,IAAI,CAAA;AAExC,0DAA0D;AAC1D,MAAM,MAAM,YAAY,GAAG,CACzB,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,KACnF,OAAO,CAAC;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAEzE,MAAM,MAAM,eAAe,GACvB;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC9C;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,WAAW,CAAA;CAAE,CAAA;AAE3E;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,SAAS,OAAO,EAAE,EACzB,MAAM,EAAE,MAAM,GAAG,IAAI,GACpB,MAAM,GAAG,IAAI,CAGf;AAED,wBAAwB;AACxB,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAG3E;AAUD,MAAM,WAAW,mBAAmB;IAClC,2BAA2B;IAC3B,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAA;IACrC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAA;CACnC;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,SAAS,OAAO,EAAE,EACzB,KAAK,GAAE,MAAiC,EACxC,OAAO,GAAE;IAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GACrE,mBAAmB,CAoBrB;AA2CD,cAAM,cAAc;IAClB,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,WAAW,CAAqC;IACxD,OAAO,CAAC,SAAS,CAAwB;IACzC,OAAO,CAAC,OAAO,CAAI;IACnB,OAAO,CAAC,SAAS,CAAI;IAErB,SAAS,GAAI,UAAU,MAAM,IAAI,KAAG,CAAC,MAAM,IAAI,CAAC,CAG/C;IAED,6CAA6C;IAC7C,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAIrD;;;;OAIG;IACH,MAAM,CACJ,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,YAAY,EACjB,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GAC7E,eAAe;IAkFlB,4CAA4C;IAC5C,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAavC;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAepC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAO/C,oCAAoC;IACpC,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAOtD,4BAA4B;IAC5B,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAOpD;;;OAGG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS;IAepE,4CAA4C;IAC5C,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAYjC,0BAA0B;IAC1B,YAAY,IAAI,IAAI;IAMpB,OAAO,CAAC,QAAQ;IAgChB,OAAO,CAAC,IAAI;IAMZ,OAAO,CAAC,IAAI;CAGb;AAED,oCAAoC;AACpC,eAAO,MAAM,UAAU,gBAAuB,CAAA"}
|
|
@@ -24,6 +24,16 @@ export const BTW_CONTEXT_CHAR_BUDGET = 24_000;
|
|
|
24
24
|
export const BTW_ANSWER_CHAR_BUDGET = 8_000;
|
|
25
25
|
/** 跨线程并发上限:超过显示忙,不隐式取消。 */
|
|
26
26
|
export const BTW_MAX_CONCURRENT_ASKS = 2;
|
|
27
|
+
/**
|
|
28
|
+
* 有效选中轮:钉住的 id 还在就继续用它,否则跟最后一条(新轮到达自动跟尾、
|
|
29
|
+
* 轮被清掉/换话题自动落回)。面板与全屏场景共用这一条解析,保证两个形态
|
|
30
|
+
* 的选中语义逐字一致。
|
|
31
|
+
*/
|
|
32
|
+
export function effectiveSelectedTurnId(turns, pinned) {
|
|
33
|
+
if (pinned !== null && turns.some(turn => turn.turnId === pinned))
|
|
34
|
+
return pinned;
|
|
35
|
+
return turns.length === 0 ? null : turns[turns.length - 1].turnId;
|
|
36
|
+
}
|
|
27
37
|
/** 钳到 1–8;非有限值取默认 4。 */
|
|
28
38
|
export function normalizeRecentTurnsLimit(value) {
|
|
29
39
|
if (value === undefined || !Number.isFinite(value))
|
|
@@ -92,6 +102,7 @@ function buildSnapshot(record) {
|
|
|
92
102
|
turns: Object.freeze([...record.turns]),
|
|
93
103
|
activeTurnId: active === null ? null : active.turnId,
|
|
94
104
|
draft: record.draft,
|
|
105
|
+
selectedTurnId: effectiveSelectedTurnId(record.turns, record.selectedTurnId),
|
|
95
106
|
unread: Object.freeze({ count: unreadCount, error: unreadError }),
|
|
96
107
|
version: record.version,
|
|
97
108
|
});
|
|
@@ -147,6 +158,8 @@ class BtwThreadStore {
|
|
|
147
158
|
omittedOlderCount: selection.omittedOlderCount,
|
|
148
159
|
};
|
|
149
160
|
record.turns.push(turn);
|
|
161
|
+
// 新轮到达回到跟尾:选中态跟的是「最后一条」,上一轮的钉位不再有意义。
|
|
162
|
+
record.selectedTurnId = null;
|
|
150
163
|
this.bump(record);
|
|
151
164
|
const controller = new AbortController();
|
|
152
165
|
this.controllers.set(turn.turnId, controller);
|
|
@@ -230,6 +243,7 @@ class BtwThreadStore {
|
|
|
230
243
|
record.generation += 1;
|
|
231
244
|
record.turns = [];
|
|
232
245
|
record.draft = '';
|
|
246
|
+
record.selectedTurnId = null;
|
|
233
247
|
record.seenThroughSeq = this.turnSeq;
|
|
234
248
|
this.bump(record);
|
|
235
249
|
return true;
|
|
@@ -241,6 +255,41 @@ class BtwThreadStore {
|
|
|
241
255
|
record.draft = text;
|
|
242
256
|
this.bump(record);
|
|
243
257
|
}
|
|
258
|
+
/** 指定选中某一轮(点标题行;null = 回到跟最后一条)。 */
|
|
259
|
+
select(sessionId, turnId) {
|
|
260
|
+
const record = this.recordOf(sessionId);
|
|
261
|
+
if (record.selectedTurnId === turnId)
|
|
262
|
+
return;
|
|
263
|
+
record.selectedTurnId = turnId;
|
|
264
|
+
this.bump(record);
|
|
265
|
+
}
|
|
266
|
+
/** 当前选中轮(实时解析,不依赖渲染期快照)。 */
|
|
267
|
+
selectedTurn(sessionId) {
|
|
268
|
+
const record = this.threads.get(sessionId);
|
|
269
|
+
if (record === undefined)
|
|
270
|
+
return undefined;
|
|
271
|
+
const id = effectiveSelectedTurnId(record.turns, record.selectedTurnId);
|
|
272
|
+
return id === null ? undefined : record.turns.find(turn => turn.turnId === id);
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* ↑/↓ 移动选中:从当前有效选中出发、夹在两端(delta = ±1)。落点即钉住,
|
|
276
|
+
* 所以移动之后不再跟尾;返回新选中轮(线程为空 = undefined)。
|
|
277
|
+
*/
|
|
278
|
+
moveSelection(sessionId, delta) {
|
|
279
|
+
const record = this.recordOf(sessionId);
|
|
280
|
+
if (record.turns.length === 0)
|
|
281
|
+
return undefined;
|
|
282
|
+
const current = effectiveSelectedTurnId(record.turns, record.selectedTurnId);
|
|
283
|
+
const at = record.turns.findIndex(turn => turn.turnId === current);
|
|
284
|
+
const from = at === -1 ? record.turns.length - 1 : at;
|
|
285
|
+
const next = Math.min(record.turns.length - 1, Math.max(0, from + delta));
|
|
286
|
+
const turnId = record.turns[next].turnId;
|
|
287
|
+
if (record.selectedTurnId !== turnId) {
|
|
288
|
+
record.selectedTurnId = turnId;
|
|
289
|
+
this.bump(record);
|
|
290
|
+
}
|
|
291
|
+
return record.turns[next];
|
|
292
|
+
}
|
|
244
293
|
/** 看到最新线程:把已落定轮全部记为已读(running 轮落定时再见分晓)。 */
|
|
245
294
|
markSeen(sessionId) {
|
|
246
295
|
const record = this.threads.get(sessionId);
|
|
@@ -269,6 +318,7 @@ class BtwThreadStore {
|
|
|
269
318
|
generation: 0,
|
|
270
319
|
turns: [],
|
|
271
320
|
draft: '',
|
|
321
|
+
selectedTurnId: null,
|
|
272
322
|
seenThroughSeq: this.turnSeq,
|
|
273
323
|
version: 0,
|
|
274
324
|
snapshot: Object.freeze({
|
|
@@ -279,6 +329,7 @@ class BtwThreadStore {
|
|
|
279
329
|
turns: Object.freeze([]),
|
|
280
330
|
activeTurnId: null,
|
|
281
331
|
draft: '',
|
|
332
|
+
selectedTurnId: null,
|
|
282
333
|
unread: Object.freeze({ count: 0, error: false }),
|
|
283
334
|
version: 0,
|
|
284
335
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builtinPanels.d.ts","sourceRoot":"","sources":["../../../../src/components/sidePanel/builtinPanels.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"builtinPanels.d.ts","sourceRoot":"","sources":["../../../../src/components/sidePanel/builtinPanels.tsx"],"names":[],"mappings":"AAiOA,2BAA2B;AAC3B,wBAAgB,qBAAqB,IAAI,IAAI,CAmG5C"}
|
|
@@ -141,6 +141,10 @@ function AgentsPanelAdapter({ focused, visible }) {
|
|
|
141
141
|
React.useEffect(() => {
|
|
142
142
|
const running = subagents.filter(s => s.status === 'running' || s.status === 'starting').length;
|
|
143
143
|
const failedIds = new Set(subagents.filter(s => s.status === 'failed').map(s => s.agentId));
|
|
144
|
+
// A failed team member is durable; it counts once even beside a failed run.
|
|
145
|
+
for (const member of channel.team?.members ?? [])
|
|
146
|
+
if (member.phase === 'failed')
|
|
147
|
+
failedIds.add(member.id);
|
|
144
148
|
if (visible) {
|
|
145
149
|
seenFailedRef.current = failedIds;
|
|
146
150
|
panelStore.setBadge('agents', running > 0 ? { level: 'info', unread: 0 } : null);
|
|
@@ -162,7 +166,7 @@ function AgentsPanelAdapter({ focused, visible }) {
|
|
|
162
166
|
if (typeof route === 'object' && detail !== undefined) {
|
|
163
167
|
return (_jsx(SubagentDetailScene, { subagent: detail, variant: "panel", focused: focused, visible: visible, onBack: () => setRoute('dashboard'), onInterrupt: (id) => channel.subagentControl?.interrupt(id), ...(channel.subagentControl?.history === undefined ? {} : { loadTranscript: channel.subagentControl.history }), onOpenView: () => agentViewStore.request(detail.agentId, 'agent-detail', true), messages: detailMessages, ...(detailCompose === undefined ? {} : { compose: detailCompose }) }));
|
|
164
168
|
}
|
|
165
|
-
return (_jsx(SubagentDashboard, { subagents: subagents, variant: "panel", focused: focused, visible: visible, onSelect: (id) => setRoute({ detail: id }), onOpenView: (id) => agentViewStore.request(id, 'agents-dashboard', true), messages: messageControl?.messages() }));
|
|
169
|
+
return (_jsx(SubagentDashboard, { subagents: subagents, team: channel.team, sessionId: channel.sessionId, variant: "panel", focused: focused, visible: visible, onSelect: (id) => setRoute({ detail: id }), onOpenView: (id) => agentViewStore.request(id, 'agents-dashboard', true), messages: messageControl?.messages() }));
|
|
166
170
|
}
|
|
167
171
|
let registered = false;
|
|
168
172
|
/** 幂等:重复调用(夹具多次挂载)不再注册。 */
|
|
@@ -9,7 +9,7 @@ import React from 'react';
|
|
|
9
9
|
import { Box, Text, useAnimationFrame } from '../../../ui.js';
|
|
10
10
|
import instances from '../../../ink/instances.js';
|
|
11
11
|
import { t } from '../../../i18n.js';
|
|
12
|
-
import
|
|
12
|
+
import { wrapTextLines } from '../../../ink/wrap-text.js';
|
|
13
13
|
import { truncateWidth } from '../../../trajectory/format.js';
|
|
14
14
|
import { panelStore } from '../PanelStore.js';
|
|
15
15
|
import { PANEL_MIN_COLUMNS } from '../dimensions.js';
|
|
@@ -471,7 +471,7 @@ export function CompanionPanel({ width, height, focused, visible }) {
|
|
|
471
471
|
let bubbleNode = null;
|
|
472
472
|
if (bubble !== undefined && bubbleLines > 0 && !compact) {
|
|
473
473
|
const inner = Math.max(4, width - 4);
|
|
474
|
-
const wrapped =
|
|
474
|
+
const wrapped = wrapTextLines(bubble.text, inner).map(line => line.text);
|
|
475
475
|
const shown = wrapped.length > bubbleLines
|
|
476
476
|
? [...wrapped.slice(0, bubbleLines - 1), truncateWidth(wrapped[bubbleLines - 1] + '…', inner)]
|
|
477
477
|
: wrapped;
|
|
@@ -19,13 +19,17 @@
|
|
|
19
19
|
* 渲染路径(LogoV2 底部块,welcomePad 缩进)。
|
|
20
20
|
*/
|
|
21
21
|
import React from 'react';
|
|
22
|
+
import { type SplashImageBox } from '../../splashArtRows.js';
|
|
22
23
|
export type SplashMascotSkin = 'deepy' | 'whaleGirl';
|
|
23
24
|
/** 读 companion.skin(LogoV2 的测试缝 prop 优先);非吉祥物皮肤返回
|
|
24
25
|
* undefined(LogoV2 走原鲸鱼/女仆娘路径,零改动)。 */
|
|
25
26
|
export declare function useSplashMascotSkin(pinned?: string): SplashMascotSkin | undefined;
|
|
27
|
+
/** 图片原生尺寸的紧凑槽;仅启动页使用,协议/像元/素材未就绪时保持原回退。 */
|
|
28
|
+
export declare function useSplashMascotBox(skin: SplashMascotSkin | undefined, compact: boolean): SplashImageBox | undefined;
|
|
26
29
|
/** 启动页吉祥物本体:按 skin 渲染动画,点击交互(poke/连点)在内层盒。 */
|
|
27
|
-
export declare function SplashMascot({ skin, active }: {
|
|
30
|
+
export declare function SplashMascot({ skin, active, imageBox }: {
|
|
28
31
|
readonly skin: SplashMascotSkin;
|
|
32
|
+
readonly imageBox?: SplashImageBox;
|
|
29
33
|
/** 动画许可:false(冻结/落地页 whaleIdle=false)时定格 idle 帧 0、零时钟。 */
|
|
30
34
|
readonly active: boolean;
|
|
31
35
|
}): React.ReactNode;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SplashMascot.d.ts","sourceRoot":"","sources":["../../../../../src/components/sidePanel/companion/SplashMascot.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"SplashMascot.d.ts","sourceRoot":"","sources":["../../../../../src/components/sidePanel/companion/SplashMascot.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,EAAqB,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAiB/E,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,WAAW,CAAA;AAEpD;wCACwC;AACxC,wBAAgB,mBAAmB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAIjF;AAGD,2CAA2C;AAC3C,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,gBAAgB,GAAG,SAAS,EAAE,OAAO,EAAE,OAAO,GAAG,cAAc,GAAG,SAAS,CAUnH;AAED,8CAA8C;AAC9C,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE;IACvD,QAAQ,CAAC,IAAI,EAAE,gBAAgB,CAAA;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAA;IAClC,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CACzB,GAAG,KAAK,CAAC,SAAS,CAsElB"}
|