@deepseek-harness-tui/dsh-tui 0.11.0 → 0.11.2
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 +55 -20
- package/assets/whale-girl/whale-girl-dark.png +0 -0
- package/assets/whale-girl/whale-girl-happy.png +0 -0
- package/assets/whale-girl/whale-girl.png +0 -0
- package/bin/dsh-tui.js +63 -3
- package/cordis.patch.yml +43 -20
- package/cordis.yml +6 -4
- package/lib/settings.json +1272 -0
- package/lib/types/activityPrefs.d.ts +24 -0
- package/lib/types/activityPrefs.d.ts.map +1 -1
- package/lib/types/activityPrefs.js +50 -1
- package/lib/types/adapter/channel/state.d.ts.map +1 -1
- package/lib/types/adapter/channel/state.js +3 -1
- package/lib/types/adapter/channel/ui-policy.d.ts +9 -2
- package/lib/types/adapter/channel/ui-policy.d.ts.map +1 -1
- package/lib/types/adapter/channel/ui-policy.js +14 -1
- package/lib/types/adapter/kernel/replay.d.ts.map +1 -1
- package/lib/types/adapter/kernel/replay.js +2 -0
- package/lib/types/adapter/ports/channel-display.d.ts +12 -0
- package/lib/types/adapter/ports/channel-display.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-session.d.ts +38 -0
- package/lib/types/adapter/ports/channel-session.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-settings.d.ts +12 -0
- package/lib/types/adapter/ports/channel-settings.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-ui.d.ts +53 -7
- package/lib/types/adapter/ports/channel-ui.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-view.d.ts +43 -12
- package/lib/types/adapter/ports/channel-view.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel.d.ts +4 -1
- package/lib/types/adapter/ports/channel.d.ts.map +1 -1
- package/lib/types/commands.d.ts.map +1 -1
- package/lib/types/commands.js +2 -0
- package/lib/types/components/ActivityLine.d.ts +7 -2
- package/lib/types/components/ActivityLine.d.ts.map +1 -1
- package/lib/types/components/ActivityLine.js +0 -8
- package/lib/types/components/BalanceReportRow.d.ts +10 -2
- package/lib/types/components/BalanceReportRow.d.ts.map +1 -1
- package/lib/types/components/BalanceReportRow.js +18 -4
- package/lib/types/components/CompactionStatusRow.d.ts +24 -0
- package/lib/types/components/CompactionStatusRow.d.ts.map +1 -0
- package/lib/types/components/CompactionStatusRow.js +72 -0
- package/lib/types/components/GoalTodoPanel.js +2 -2
- package/lib/types/components/HelpMenu.d.ts +2 -2
- package/lib/types/components/HelpMenu.d.ts.map +1 -1
- package/lib/types/components/HelpMenu.js +5 -4
- package/lib/types/components/InlineMathParagraph.d.ts +22 -0
- package/lib/types/components/InlineMathParagraph.d.ts.map +1 -0
- package/lib/types/components/InlineMathParagraph.js +178 -0
- package/lib/types/components/LogoV2.d.ts +41 -3
- package/lib/types/components/LogoV2.d.ts.map +1 -1
- package/lib/types/components/LogoV2.js +148 -24
- package/lib/types/components/Markdown.d.ts +10 -3
- package/lib/types/components/Markdown.d.ts.map +1 -1
- package/lib/types/components/Markdown.js +47 -14
- package/lib/types/components/MathBlock.d.ts +13 -0
- package/lib/types/components/MathBlock.d.ts.map +1 -0
- package/lib/types/components/MathBlock.js +136 -0
- package/lib/types/components/MessageList.d.ts +10 -1
- package/lib/types/components/MessageList.d.ts.map +1 -1
- package/lib/types/components/MessageList.js +15 -5
- package/lib/types/components/MigratePicker.d.ts +30 -0
- package/lib/types/components/MigratePicker.d.ts.map +1 -0
- package/lib/types/components/MigratePicker.js +38 -0
- package/lib/types/components/PromptInput.d.ts +17 -0
- package/lib/types/components/PromptInput.d.ts.map +1 -1
- package/lib/types/components/PromptInput.js +96 -9
- package/lib/types/components/SplitDiffView.d.ts.map +1 -1
- package/lib/types/components/SplitDiffView.js +3 -1
- package/lib/types/components/StarPrompt.d.ts +53 -0
- package/lib/types/components/StarPrompt.d.ts.map +1 -0
- package/lib/types/components/StarPrompt.js +281 -0
- package/lib/types/components/StreamingMarkdown.d.ts.map +1 -1
- package/lib/types/components/StreamingMarkdown.js +20 -3
- package/lib/types/components/SubagentCard.d.ts.map +1 -1
- package/lib/types/components/SubagentCard.js +12 -6
- package/lib/types/components/SubagentDetailScene.d.ts.map +1 -1
- package/lib/types/components/SubagentDetailScene.js +8 -3
- package/lib/types/components/TimelineRail.d.ts.map +1 -1
- package/lib/types/components/TimelineRail.js +9 -1
- package/lib/types/components/Whale.d.ts +17 -8
- package/lib/types/components/Whale.d.ts.map +1 -1
- package/lib/types/components/Whale.js +25 -15
- package/lib/types/components/WhaleGirl.d.ts +29 -0
- package/lib/types/components/WhaleGirl.d.ts.map +1 -0
- package/lib/types/components/WhaleGirl.js +32 -0
- package/lib/types/components/WorkingSpinner.d.ts +4 -1
- package/lib/types/components/WorkingSpinner.d.ts.map +1 -1
- package/lib/types/components/WorkingSpinner.js +2 -2
- package/lib/types/components/bigfont.d.ts +47 -18
- package/lib/types/components/bigfont.d.ts.map +1 -1
- package/lib/types/components/bigfont.js +55 -40
- package/lib/types/components/design-system/HintLine.d.ts +1 -2
- package/lib/types/components/design-system/HintLine.d.ts.map +1 -1
- package/lib/types/components/design-system/HintLine.js +1 -2
- package/lib/types/components/design-system/ThemeProvider.d.ts +6 -0
- package/lib/types/components/design-system/ThemeProvider.d.ts.map +1 -1
- package/lib/types/components/design-system/ThemeProvider.js +40 -1
- package/lib/types/components/maidPortrait.d.ts +44 -0
- package/lib/types/components/maidPortrait.d.ts.map +1 -0
- package/lib/types/components/maidPortrait.js +178 -0
- package/lib/types/components/mathPreview.d.ts +25 -0
- package/lib/types/components/mathPreview.d.ts.map +1 -0
- package/lib/types/components/mathPreview.js +48 -0
- package/lib/types/components/messages/AssistantThinkingMessage.d.ts +2 -1
- package/lib/types/components/messages/AssistantThinkingMessage.d.ts.map +1 -1
- package/lib/types/components/messages/AssistantThinkingMessage.js +4 -2
- package/lib/types/components/messages/AssistantToolUseMessage.d.ts +2 -2
- package/lib/types/components/messages/AssistantToolUseMessage.d.ts.map +1 -1
- package/lib/types/components/messages/AssistantToolUseMessage.js +31 -26
- package/lib/types/components/messages/TranscriptImages.d.ts.map +1 -1
- package/lib/types/components/messages/TranscriptImages.js +11 -1
- package/lib/types/components/questions/AskUserQuestionPanel.d.ts +14 -2
- package/lib/types/components/questions/AskUserQuestionPanel.d.ts.map +1 -1
- package/lib/types/components/questions/AskUserQuestionPanel.js +80 -38
- package/lib/types/components/questions/PlanReviewPanel.d.ts.map +1 -1
- package/lib/types/components/questions/PlanReviewPanel.js +3 -3
- package/lib/types/components/sessions/ForeignSessionRow.d.ts +34 -0
- package/lib/types/components/sessions/ForeignSessionRow.d.ts.map +1 -0
- package/lib/types/components/sessions/ForeignSessionRow.js +43 -0
- package/lib/types/components/sessions/SourceTabs.d.ts +52 -0
- package/lib/types/components/sessions/SourceTabs.d.ts.map +1 -0
- package/lib/types/components/sessions/SourceTabs.js +70 -0
- package/lib/types/components/splashEggs.d.ts +56 -0
- package/lib/types/components/splashEggs.d.ts.map +1 -0
- package/lib/types/components/splashEggs.js +67 -0
- package/lib/types/components/splashFonts.d.ts +119 -0
- package/lib/types/components/splashFonts.d.ts.map +1 -0
- package/lib/types/components/splashFonts.js +267 -0
- package/lib/types/components/splashLayout.d.ts +41 -0
- package/lib/types/components/splashLayout.d.ts.map +1 -0
- package/lib/types/components/splashLayout.js +40 -0
- package/lib/types/components/whaleGirlSprite.d.ts +17 -0
- package/lib/types/components/whaleGirlSprite.d.ts.map +1 -0
- package/lib/types/components/whaleGirlSprite.js +47 -0
- package/lib/types/deepseekPricing.d.ts +74 -0
- package/lib/types/deepseekPricing.d.ts.map +1 -1
- package/lib/types/deepseekPricing.js +110 -11
- package/lib/types/dsh-adapter/activity-store.d.ts +221 -0
- package/lib/types/dsh-adapter/activity-store.d.ts.map +1 -0
- package/lib/types/dsh-adapter/activity-store.js +359 -0
- package/lib/types/dsh-adapter/channel/action-readiness.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/action-readiness.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/action-readiness.js +6 -1
- package/lib/types/dsh-adapter/channel/background-action.d.ts +2 -1
- package/lib/types/dsh-adapter/channel/background-action.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/background-action.js +2 -0
- package/lib/types/dsh-adapter/channel/binding-events.d.ts +15 -14
- package/lib/types/dsh-adapter/channel/binding-events.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/binding-events.js +70 -21
- package/lib/types/dsh-adapter/channel/compaction.d.ts +2 -2
- package/lib/types/dsh-adapter/channel/compaction.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/compaction.js +35 -4
- package/lib/types/dsh-adapter/channel/local-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/local-actions.js +6 -1
- package/lib/types/dsh-adapter/channel/model-switch.d.ts +1 -2
- package/lib/types/dsh-adapter/channel/model-switch.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/model-switch.js +6 -2
- package/lib/types/dsh-adapter/channel/paths.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/paths.js +7 -1
- package/lib/types/dsh-adapter/channel/preferences.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/preferences.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/preferences.js +16 -0
- package/lib/types/dsh-adapter/channel/projection.d.ts +1 -2
- package/lib/types/dsh-adapter/channel/projection.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/projection.js +127 -17
- package/lib/types/dsh-adapter/channel/question-record.d.ts +76 -0
- package/lib/types/dsh-adapter/channel/question-record.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/question-record.js +107 -0
- package/lib/types/dsh-adapter/channel/session-adoption.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/session-adoption.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-adoption.js +1 -0
- package/lib/types/dsh-adapter/channel/session-lineage.d.ts +42 -0
- package/lib/types/dsh-adapter/channel/session-lineage.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/session-lineage.js +51 -0
- package/lib/types/dsh-adapter/channel/session-live-adoption.d.ts +3 -1
- package/lib/types/dsh-adapter/channel/session-live-adoption.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-live-adoption.js +10 -3
- package/lib/types/dsh-adapter/channel/session-metadata.d.ts +2 -1
- package/lib/types/dsh-adapter/channel/session-metadata.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-metadata.js +43 -9
- package/lib/types/dsh-adapter/channel/session-reset.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/session-reset.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-reset.js +7 -1
- package/lib/types/dsh-adapter/channel/session-resume.d.ts +2 -1
- package/lib/types/dsh-adapter/channel/session-resume.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-resume.js +5 -2
- package/lib/types/dsh-adapter/channel/settings-host.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/settings-host.js +8 -0
- package/lib/types/dsh-adapter/channel/state.d.ts +19 -1
- package/lib/types/dsh-adapter/channel/state.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/state.js +8 -3
- package/lib/types/dsh-adapter/channel/subagent-projection.d.ts +32 -17
- package/lib/types/dsh-adapter/channel/subagent-projection.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/subagent-projection.js +309 -8
- package/lib/types/dsh-adapter/channel/types.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/types.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel.d.ts +1 -1
- package/lib/types/dsh-adapter/channel.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel.js +34 -18
- package/lib/types/dsh-adapter/compat/index.d.ts +1 -1
- package/lib/types/dsh-adapter/compat/index.d.ts.map +1 -1
- package/lib/types/dsh-adapter/compat/index.js +1 -1
- package/lib/types/dsh-adapter/compat/messages.d.ts +6 -0
- package/lib/types/dsh-adapter/compat/messages.d.ts.map +1 -1
- package/lib/types/dsh-adapter/compat/messages.js +9 -0
- package/lib/types/dsh-adapter/compat/sessionLog.d.ts +18 -0
- package/lib/types/dsh-adapter/compat/sessionLog.d.ts.map +1 -1
- package/lib/types/dsh-adapter/compat/sessionLog.js +18 -3
- package/lib/types/dsh-adapter/compat/settings.d.ts +2 -0
- package/lib/types/dsh-adapter/compat/settings.d.ts.map +1 -1
- package/lib/types/dsh-adapter/compat/settings.js +14 -0
- package/lib/types/dsh-adapter/contract.d.ts +5 -4
- package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
- package/lib/types/dsh-adapter/contract.js +9 -5
- package/lib/types/dsh-adapter/index.d.ts +36 -1
- package/lib/types/dsh-adapter/index.d.ts.map +1 -1
- package/lib/types/dsh-adapter/index.js +22 -6
- package/lib/types/dsh-adapter/migrate/adapters/claude-code.d.ts +3 -0
- package/lib/types/dsh-adapter/migrate/adapters/claude-code.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/adapters/claude-code.js +131 -0
- package/lib/types/dsh-adapter/migrate/adapters/claude-code.parse.d.ts +17 -0
- package/lib/types/dsh-adapter/migrate/adapters/claude-code.parse.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/adapters/claude-code.parse.js +329 -0
- package/lib/types/dsh-adapter/migrate/adapters/codex.d.ts +3 -0
- package/lib/types/dsh-adapter/migrate/adapters/codex.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/adapters/codex.js +102 -0
- package/lib/types/dsh-adapter/migrate/adapters/codex.parse.d.ts +16 -0
- package/lib/types/dsh-adapter/migrate/adapters/codex.parse.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/adapters/codex.parse.js +289 -0
- package/lib/types/dsh-adapter/migrate/adapters/grok-build.d.ts +3 -0
- package/lib/types/dsh-adapter/migrate/adapters/grok-build.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/adapters/grok-build.js +117 -0
- package/lib/types/dsh-adapter/migrate/adapters/grok-build.parse.d.ts +13 -0
- package/lib/types/dsh-adapter/migrate/adapters/grok-build.parse.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/adapters/grok-build.parse.js +178 -0
- package/lib/types/dsh-adapter/migrate/adapters/omp.d.ts +3 -0
- package/lib/types/dsh-adapter/migrate/adapters/omp.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/adapters/omp.js +133 -0
- package/lib/types/dsh-adapter/migrate/adapters/scan-fs.d.ts +60 -0
- package/lib/types/dsh-adapter/migrate/adapters/scan-fs.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/adapters/scan-fs.js +178 -0
- package/lib/types/dsh-adapter/migrate/adapters/scan.d.ts +8 -0
- package/lib/types/dsh-adapter/migrate/adapters/scan.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/adapters/scan.js +40 -0
- package/lib/types/dsh-adapter/migrate/adapters/zcode.d.ts +3 -0
- package/lib/types/dsh-adapter/migrate/adapters/zcode.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/adapters/zcode.js +93 -0
- package/lib/types/dsh-adapter/migrate/adapters/zcode.parse.d.ts +9 -0
- package/lib/types/dsh-adapter/migrate/adapters/zcode.parse.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/adapters/zcode.parse.js +89 -0
- package/lib/types/dsh-adapter/migrate/bin-path.d.ts +6 -0
- package/lib/types/dsh-adapter/migrate/bin-path.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/bin-path.js +30 -0
- package/lib/types/dsh-adapter/migrate/browse.d.ts +42 -0
- package/lib/types/dsh-adapter/migrate/browse.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/browse.js +90 -0
- package/lib/types/dsh-adapter/migrate/cli.d.ts +9 -0
- package/lib/types/dsh-adapter/migrate/cli.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/cli.js +106 -0
- package/lib/types/dsh-adapter/migrate/import-one.d.ts +89 -0
- package/lib/types/dsh-adapter/migrate/import-one.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/import-one.js +133 -0
- package/lib/types/dsh-adapter/migrate/index.d.ts +35 -0
- package/lib/types/dsh-adapter/migrate/index.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/index.js +107 -0
- package/lib/types/dsh-adapter/migrate/parse/injection.d.ts +40 -0
- package/lib/types/dsh-adapter/migrate/parse/injection.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/parse/injection.js +127 -0
- package/lib/types/dsh-adapter/migrate/parse/jsonl.d.ts +28 -0
- package/lib/types/dsh-adapter/migrate/parse/jsonl.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/parse/jsonl.js +40 -0
- package/lib/types/dsh-adapter/migrate/parse/role-turns.d.ts +28 -0
- package/lib/types/dsh-adapter/migrate/parse/role-turns.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/parse/role-turns.js +50 -0
- package/lib/types/dsh-adapter/migrate/parse/title.d.ts +18 -0
- package/lib/types/dsh-adapter/migrate/parse/title.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/parse/title.js +29 -0
- package/lib/types/dsh-adapter/migrate/parse/tools.d.ts +62 -0
- package/lib/types/dsh-adapter/migrate/parse/tools.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/parse/tools.js +110 -0
- package/lib/types/dsh-adapter/migrate/picker.d.ts +64 -0
- package/lib/types/dsh-adapter/migrate/picker.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/picker.js +86 -0
- package/lib/types/dsh-adapter/migrate/recent-agents.d.ts +40 -0
- package/lib/types/dsh-adapter/migrate/recent-agents.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/recent-agents.js +100 -0
- package/lib/types/dsh-adapter/migrate/sessionize.d.ts +39 -0
- package/lib/types/dsh-adapter/migrate/sessionize.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/sessionize.js +271 -0
- package/lib/types/dsh-adapter/migrate/types.d.ts +176 -0
- package/lib/types/dsh-adapter/migrate/types.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/types.js +11 -0
- package/lib/types/dsh-adapter/migrate/uuid.d.ts +7 -0
- package/lib/types/dsh-adapter/migrate/uuid.d.ts.map +1 -0
- package/lib/types/dsh-adapter/migrate/uuid.js +25 -0
- package/lib/types/dsh-adapter/plugin.d.ts +5 -3
- package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
- package/lib/types/dsh-adapter/plugin.js +168 -372
- package/lib/types/dsh-adapter/providerWizard.d.ts +17 -0
- package/lib/types/dsh-adapter/providerWizard.d.ts.map +1 -1
- package/lib/types/dsh-adapter/providerWizard.js +254 -66
- package/lib/types/dsh-adapter/questions.d.ts +22 -15
- package/lib/types/dsh-adapter/questions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/questions.js +47 -45
- package/lib/types/dsh-adapter/sessions/digest.d.ts +11 -6
- package/lib/types/dsh-adapter/sessions/digest.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sessions/digest.js +20 -13
- package/lib/types/dsh-adapter/sessions/frames.d.ts +3 -1
- package/lib/types/dsh-adapter/sessions/frames.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sessions/frames.js +5 -4
- package/lib/types/dsh-adapter/sessions/list.d.ts +6 -1
- package/lib/types/dsh-adapter/sessions/list.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sessions/list.js +188 -164
- package/lib/types/dsh-adapter/sessions/recovery.d.ts +16 -0
- package/lib/types/dsh-adapter/sessions/recovery.d.ts.map +1 -0
- package/lib/types/dsh-adapter/sessions/recovery.js +108 -0
- package/lib/types/dsh-adapter/sessions/snapshot.d.ts +7 -0
- package/lib/types/dsh-adapter/sessions/snapshot.d.ts.map +1 -0
- package/lib/types/dsh-adapter/sessions/snapshot.js +90 -0
- package/lib/types/dsh-adapter/sessions/store.d.ts +10 -4
- package/lib/types/dsh-adapter/sessions/store.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sessions/store.js +62 -25
- package/lib/types/dsh-adapter/settings-sections.d.ts.map +1 -1
- package/lib/types/dsh-adapter/settings-sections.js +7 -4
- package/lib/types/dsh-adapter/sideQuestion.d.ts +41 -2
- package/lib/types/dsh-adapter/sideQuestion.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sideQuestion.js +98 -2
- package/lib/types/dsh-adapter/subagents.d.ts +44 -6
- package/lib/types/dsh-adapter/subagents.d.ts.map +1 -1
- package/lib/types/dsh-adapter/subagents.js +163 -26
- package/lib/types/herdr.d.ts +2 -0
- package/lib/types/herdr.d.ts.map +1 -1
- package/lib/types/herdr.js +9 -3
- package/lib/types/history.d.ts +13 -1
- package/lib/types/history.d.ts.map +1 -1
- package/lib/types/history.js +15 -2
- package/lib/types/i18n.d.ts +512 -41
- package/lib/types/i18n.d.ts.map +1 -1
- package/lib/types/i18n.js +199 -20
- package/lib/types/ink/components/App.d.ts +2 -2
- package/lib/types/ink/components/App.d.ts.map +1 -1
- package/lib/types/ink/components/App.js +5 -1
- package/lib/types/ink/components/Image.d.ts +14 -1
- package/lib/types/ink/components/Image.d.ts.map +1 -1
- package/lib/types/ink/components/Image.js +2 -2
- package/lib/types/ink/events/input-event.js +3 -3
- package/lib/types/ink/hooks/use-terminal-images.d.ts +12 -0
- package/lib/types/ink/hooks/use-terminal-images.d.ts.map +1 -1
- package/lib/types/ink/hooks/use-terminal-images.js +13 -0
- package/lib/types/ink/ink.d.ts +6 -0
- package/lib/types/ink/ink.d.ts.map +1 -1
- package/lib/types/ink/ink.js +16 -1
- package/lib/types/ink/kitty-graphics.d.ts +44 -3
- package/lib/types/ink/kitty-graphics.d.ts.map +1 -1
- package/lib/types/ink/kitty-graphics.js +184 -23
- package/lib/types/ink/log-update.d.ts.map +1 -1
- package/lib/types/ink/log-update.js +19 -1
- package/lib/types/ink/output.d.ts +24 -2
- package/lib/types/ink/output.d.ts.map +1 -1
- package/lib/types/ink/output.js +83 -5
- package/lib/types/ink/parse-keypress.d.ts +26 -1
- package/lib/types/ink/parse-keypress.d.ts.map +1 -1
- package/lib/types/ink/parse-keypress.js +156 -13
- package/lib/types/ink/render-node-to-output.d.ts.map +1 -1
- package/lib/types/ink/render-node-to-output.js +8 -1
- package/lib/types/ink/screen.d.ts +24 -0
- package/lib/types/ink/screen.d.ts.map +1 -1
- package/lib/types/ink/screen.js +89 -0
- package/lib/types/ink/selection.d.ts +68 -18
- package/lib/types/ink/selection.d.ts.map +1 -1
- package/lib/types/ink/selection.js +178 -31
- package/lib/types/ink/sixel-codec.d.ts +12 -1
- package/lib/types/ink/sixel-codec.d.ts.map +1 -1
- package/lib/types/ink/sixel-codec.js +29 -5
- package/lib/types/ink/sixel-graphics.d.ts.map +1 -1
- package/lib/types/ink/sixel-graphics.js +5 -3
- package/lib/types/ink/styles.d.ts +9 -0
- package/lib/types/ink/styles.d.ts.map +1 -1
- package/lib/types/ink/terminal-image.d.ts +8 -0
- package/lib/types/ink/terminal-image.d.ts.map +1 -1
- package/lib/types/ink/terminal-querier.d.ts +7 -1
- package/lib/types/ink/terminal-querier.d.ts.map +1 -1
- package/lib/types/ink/terminal-querier.js +12 -2
- package/lib/types/ink/timeline-rail.d.ts +5 -0
- package/lib/types/ink/timeline-rail.d.ts.map +1 -1
- package/lib/types/math/inline-layout.d.ts +29 -0
- package/lib/types/math/inline-layout.d.ts.map +1 -0
- package/lib/types/math/inline-layout.js +106 -0
- package/lib/types/math/layout.d.ts +58 -0
- package/lib/types/math/layout.d.ts.map +1 -0
- package/lib/types/math/layout.js +59 -0
- package/lib/types/math/renderer.d.ts +64 -0
- package/lib/types/math/renderer.d.ts.map +1 -0
- package/lib/types/math/renderer.js +256 -0
- package/lib/types/screens/Chat.d.ts +17 -1
- package/lib/types/screens/Chat.d.ts.map +1 -1
- package/lib/types/screens/Chat.js +618 -57
- package/lib/types/screens/SessionSupervisor.d.ts +2 -1
- package/lib/types/screens/SessionSupervisor.d.ts.map +1 -1
- package/lib/types/screens/SessionSupervisor.js +156 -19
- package/lib/types/screens/Settings.d.ts.map +1 -1
- package/lib/types/screens/Settings.js +49 -11
- package/lib/types/screens/StatusLine.d.ts +5 -1
- package/lib/types/screens/StatusLine.d.ts.map +1 -1
- package/lib/types/screens/StatusLine.js +47 -17
- package/lib/types/screens/chatOverlay.d.ts +5 -0
- package/lib/types/screens/chatOverlay.d.ts.map +1 -1
- package/lib/types/screens/chatOverlay.js +1 -0
- package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.d.ts +47 -0
- package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.d.ts.map +1 -0
- package/lib/types/screens/sessionSupervisor/ForeignSessionPanes.js +65 -0
- package/lib/types/screens/sessionSupervisor/model.d.ts +12 -0
- package/lib/types/screens/sessionSupervisor/model.d.ts.map +1 -1
- package/lib/types/screens/sessionSupervisor/model.js +26 -0
- package/lib/types/screens/sessionSupervisor/useForeignSessions.d.ts +107 -0
- package/lib/types/screens/sessionSupervisor/useForeignSessions.d.ts.map +1 -0
- package/lib/types/screens/sessionSupervisor/useForeignSessions.js +312 -0
- package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts +4 -1
- package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts.map +1 -1
- package/lib/types/screens/sessionSupervisor/useSessionSupervisor.js +97 -14
- package/lib/types/sessionHistory.d.ts +2 -2
- package/lib/types/sessionHistory.d.ts.map +1 -1
- package/lib/types/sessionHistory.js +31 -5
- package/lib/types/settings/definitions.d.ts +681 -0
- package/lib/types/settings/definitions.d.ts.map +1 -0
- package/lib/types/settings/definitions.js +511 -0
- package/lib/types/starAction.d.ts +44 -0
- package/lib/types/starAction.d.ts.map +1 -0
- package/lib/types/starAction.js +52 -0
- package/lib/types/terminal-utils/latex.d.ts +10 -0
- package/lib/types/terminal-utils/latex.d.ts.map +1 -0
- package/lib/types/terminal-utils/latex.js +1417 -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 +26 -1
- package/lib/types/terminal-utils/math.d.ts +66 -0
- package/lib/types/terminal-utils/math.d.ts.map +1 -0
- package/lib/types/terminal-utils/math.js +337 -0
- package/lib/types/tips.d.ts.map +1 -1
- package/lib/types/tips.js +6 -0
- package/lib/types/tuiDisplayPrefs.d.ts +67 -0
- package/lib/types/tuiDisplayPrefs.d.ts.map +1 -1
- package/lib/types/tuiDisplayPrefs.js +59 -0
- package/lib/types/ui.d.ts +1 -1
- package/lib/types/ui.d.ts.map +1 -1
- package/lib/types/ui.js +1 -1
- package/lib/types/usageStats.d.ts +98 -0
- package/lib/types/usageStats.d.ts.map +1 -0
- package/lib/types/usageStats.js +169 -0
- package/lib/types/utils/bmp.d.ts +17 -0
- package/lib/types/utils/bmp.d.ts.map +1 -0
- package/lib/types/utils/bmp.js +154 -0
- package/lib/types/utils/clipboard.d.ts +14 -2
- package/lib/types/utils/clipboard.d.ts.map +1 -1
- package/lib/types/utils/clipboard.js +143 -8
- package/lib/types/utils/fold-long-lines.d.ts +1 -1
- package/lib/types/utils/fold-long-lines.d.ts.map +1 -1
- package/lib/types/utils/fold-long-lines.js +3 -2
- package/lib/types/utils/keymap.d.ts +4 -1
- package/lib/types/utils/keymap.d.ts.map +1 -1
- package/lib/types/utils/keymap.js +8 -0
- package/lib/types/utils/modifiers.d.ts +4 -3
- package/lib/types/utils/modifiers.d.ts.map +1 -1
- package/lib/types/utils/modifiers.js +4 -3
- package/lib/types/working-activity.d.ts +10 -9
- package/lib/types/working-activity.d.ts.map +1 -1
- package/lib/types/working-activity.js +17 -10
- package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/LICENSE +202 -0
- package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/NOTICE +20 -0
- package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/index.d.ts +16 -0
- package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/lib/bundled-packages.json +4 -0
- package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/lib/index.mjs +20 -0
- package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/lib/index.mjs.LEGAL.txt +35 -0
- package/node_modules/@dsh-tui-vendor/mathjax-tex-svg/package.json +29 -0
- package/package.json +117 -99
- package/lib/types/components/design-system/KeyboardShortcutHint.d.ts +0 -19
- package/lib/types/components/design-system/KeyboardShortcutHint.d.ts.map +0 -1
- package/lib/types/components/design-system/KeyboardShortcutHint.js +0 -14
- package/lib/types/dsh-adapter/channel/activity.d.ts +0 -20
- package/lib/types/dsh-adapter/channel/activity.d.ts.map +0 -1
- package/lib/types/dsh-adapter/channel/activity.js +0 -113
- package/lib/types/terminal-utils/terminal.d.ts +0 -18
- package/lib/types/terminal-utils/terminal.d.ts.map +0 -1
- package/lib/types/terminal-utils/terminal.js +0 -96
|
@@ -9,7 +9,11 @@ function formatDuration(ms) {
|
|
|
9
9
|
}
|
|
10
10
|
export function SubagentCard({ subagent, focused, onClick }) {
|
|
11
11
|
const running = subagent.status === 'running' || subagent.status === 'starting';
|
|
12
|
-
|
|
12
|
+
// Only a live run ticks; discovered history (`unknown`) has no end time to
|
|
13
|
+
// count from, so it must not accumulate a fake growing duration.
|
|
14
|
+
const elapsed = running
|
|
15
|
+
? Date.now() - subagent.startedAt
|
|
16
|
+
: subagent.completedAt !== undefined ? subagent.completedAt - subagent.startedAt : undefined;
|
|
13
17
|
const total = subagent.tokens?.total ?? ((subagent.tokens?.input ?? 0) + (subagent.tokens?.output ?? 0) || 0);
|
|
14
18
|
// Mouse affordance: clickable cards tint on hover; the keyboard-focused
|
|
15
19
|
// card keeps its brand-color header (no double highlight).
|
|
@@ -22,12 +26,14 @@ export function SubagentCard({ subagent, focused, onClick }) {
|
|
|
22
26
|
const liveLine = running ? subagent.output[subagent.output.length - 1] : undefined;
|
|
23
27
|
const minimal = isMinimalMode();
|
|
24
28
|
const glyph = running ? (minimal ? '·' : '🟡')
|
|
25
|
-
: subagent.status === '
|
|
26
|
-
: (minimal ? '
|
|
29
|
+
: subagent.status === 'unknown' ? (minimal ? '·' : '⚪')
|
|
30
|
+
: subagent.status === 'failed' || subagent.status === 'cancelled' ? (minimal ? '×' : '🔴')
|
|
31
|
+
: (minimal ? '✓' : '🟢');
|
|
27
32
|
const glyphColor = minimal ? undefined
|
|
28
33
|
: running ? 'warning'
|
|
29
|
-
: subagent.status === '
|
|
30
|
-
: '
|
|
34
|
+
: subagent.status === 'unknown' ? 'subtle'
|
|
35
|
+
: subagent.status === 'failed' || subagent.status === 'cancelled' ? 'error'
|
|
36
|
+
: 'success';
|
|
31
37
|
const hoverTint = onClick !== undefined && hovered && !focused;
|
|
32
|
-
return _jsxs(Box, { flexDirection: "column", paddingLeft: 1, marginBottom: 1, onClick: onClick, onMouseEnter: onClick !== undefined ? () => setHovered(true) : undefined, onMouseLeave: onClick !== undefined ? () => setHovered(false) : undefined, backgroundColor: hoverTint ? 'userMessageBackgroundHover' : undefined, children: [_jsxs(Box, { flexDirection: "row", gap: 1, children: [_jsx(Text, { color: glyphColor, children: glyph }), _jsx(Text, { bold: true, color: focused ? 'accent' : undefined, children: `${t('subagent-card-prefix')}${subagent.description}` }), _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: ' · ' }), _jsx(Text, { children: subagent.model ?? subagent.provider ?? 'default' }),
|
|
38
|
+
return _jsxs(Box, { flexDirection: "column", paddingLeft: 1, marginBottom: 1, onClick: onClick, onMouseEnter: onClick !== undefined ? () => setHovered(true) : undefined, onMouseLeave: onClick !== undefined ? () => setHovered(false) : undefined, backgroundColor: hoverTint ? 'userMessageBackgroundHover' : undefined, children: [_jsxs(Box, { flexDirection: "row", gap: 1, children: [_jsx(Text, { color: glyphColor, children: glyph }), _jsx(Text, { bold: true, color: focused ? 'accent' : undefined, children: `${t('subagent-card-prefix')}${subagent.description}` }), _jsxs(Text, { children: [_jsx(Text, { dimColor: true, children: ' · ' }), _jsx(Text, { children: subagent.model ?? subagent.provider ?? 'default' }), _jsxs(Text, { dimColor: true, children: [elapsed !== undefined ? ` · ${formatDuration(elapsed)} · ` : ' · ', total || '—', " tok \u00B7 ", subagent.toolCalls.length, " tools"] })] })] }), liveLine && _jsx(Text, { dimColor: true, wrap: "truncate", children: ` │ ${liveLine}` })] });
|
|
33
39
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SubagentDetailScene.d.ts","sourceRoot":"","sources":["../../../src/components/SubagentDetailScene.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"SubagentDetailScene.d.ts","sourceRoot":"","sources":["../../../src/components/SubagentDetailScene.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAEzB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAwGhE,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,aAAa,CAAA;IACvB,MAAM,EAAE,MAAM,IAAI,CAAA;IAClB,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CACxC;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,QAAQ,EACR,MAAM,EACN,WAAW,GACZ,EAAE,wBAAwB,GAAG,KAAK,CAAC,SAAS,CAiN5C"}
|
|
@@ -28,6 +28,8 @@ function statusGlyph(status) {
|
|
|
28
28
|
return { glyph: minimal ? '×' : '🔴', color: minimal ? undefined : 'error', label: 'failed' };
|
|
29
29
|
if (status === 'cancelled')
|
|
30
30
|
return { glyph: minimal ? '×' : '🔴', color: minimal ? undefined : 'error', label: 'cancelled' };
|
|
31
|
+
if (status === 'unknown')
|
|
32
|
+
return { glyph: minimal ? '·' : '⚪', color: minimal ? undefined : 'subtle', label: 'history' };
|
|
31
33
|
return { glyph: minimal ? '·' : '🟡', color: minimal ? undefined : 'warning', label: 'running' };
|
|
32
34
|
}
|
|
33
35
|
const PAGES = ['summary', 'output', 'tools'];
|
|
@@ -37,7 +39,7 @@ function StatRow({ label, children }) {
|
|
|
37
39
|
}
|
|
38
40
|
/** Two-column key/value stats grid (Kimi Code settled summary style). */
|
|
39
41
|
function StatGrid({ subagent, totalTokens, elapsed, statusLabel, statusColor }) {
|
|
40
|
-
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(StatRow, { label: t('subagent-status-label'), children: _jsx(Text, { color: statusColor, children: statusLabel }) }), _jsx(StatRow, { label: t('subagent-model'), children: _jsx(Text, { children: subagent.model ?? subagent.provider ?? 'default' }) }), _jsx(StatRow, { label: t('subagent-duration'), children: _jsx(Text, { children: formatDuration(elapsed) }) }), _jsx(StatRow, { label: "tokens", children: _jsxs(Text, { children: [totalTokens || '—', subagent.tokens?.input !== undefined ? ` (in ${subagent.tokens.input} · out ${subagent.tokens.output ?? 0})` : ''] }) }), _jsx(StatRow, { label: t('subagent-tools'), children: _jsx(Text, { children: subagent.toolCalls.length }) }), _jsx(StatRow, { label: t('subagent-started'), children: _jsx(Text, { children: formatTimestamp(subagent.startedAt) }) }), subagent.completedAt !== undefined && (_jsx(StatRow, { label: t('subagent-completed'), children: _jsx(Text, { children: formatTimestamp(subagent.completedAt) }) }))] }));
|
|
42
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(StatRow, { label: t('subagent-status-label'), children: _jsx(Text, { color: statusColor, children: statusLabel }) }), _jsx(StatRow, { label: t('subagent-model'), children: _jsx(Text, { children: subagent.model ?? subagent.provider ?? 'default' }) }), _jsx(StatRow, { label: t('subagent-duration'), children: _jsx(Text, { children: elapsed !== undefined ? formatDuration(elapsed) : '—' }) }), _jsx(StatRow, { label: "tokens", children: _jsxs(Text, { children: [totalTokens || '—', subagent.tokens?.input !== undefined ? ` (in ${subagent.tokens.input} · out ${subagent.tokens.output ?? 0})` : ''] }) }), _jsx(StatRow, { label: t('subagent-tools'), children: _jsx(Text, { children: subagent.toolCalls.length }) }), _jsx(StatRow, { label: t('subagent-started'), children: _jsx(Text, { children: formatTimestamp(subagent.startedAt) }) }), subagent.completedAt !== undefined && (_jsx(StatRow, { label: t('subagent-completed'), children: _jsx(Text, { children: formatTimestamp(subagent.completedAt) }) }))] }));
|
|
41
43
|
}
|
|
42
44
|
/** Tool args line: JSON-looking args get cli-highlight syntax colors (loaded
|
|
43
45
|
* lazily through the shared promise); anything else stays a dim flat line. */
|
|
@@ -77,7 +79,10 @@ export function SubagentDetailScene({ subagent, onBack, onInterrupt, }) {
|
|
|
77
79
|
const { rows, columns } = useTerminalSize();
|
|
78
80
|
const [page, setPage] = React.useState('summary');
|
|
79
81
|
const isRunning = subagent.status === 'running' || subagent.status === 'starting';
|
|
80
|
-
|
|
82
|
+
// Only a live run ticks; discovered history (`unknown`) shows no duration.
|
|
83
|
+
const elapsed = isRunning
|
|
84
|
+
? Date.now() - subagent.startedAt
|
|
85
|
+
: subagent.completedAt !== undefined ? subagent.completedAt - subagent.startedAt : undefined;
|
|
81
86
|
const info = statusGlyph(subagent.status);
|
|
82
87
|
const totalTokens = subagent.tokens?.total ?? ((subagent.tokens?.input ?? 0) + (subagent.tokens?.output ?? 0) || 0);
|
|
83
88
|
const pageIndex = PAGES.indexOf(page);
|
|
@@ -137,6 +142,6 @@ export function SubagentDetailScene({ subagent, onBack, onInterrupt, }) {
|
|
|
137
142
|
const active = page === name;
|
|
138
143
|
return (_jsxs(React.Fragment, { children: [_jsx(Box, { onClick: () => setPage(name), backgroundColor: !active ? 'userMessageBackgroundHover' : undefined, children: _jsx(Text, { color: active ? 'accent' : undefined, bold: active, inverse: active, children: ` ${label} ` }) }), _jsx(Text, { dimColor: true, children: name === PAGES[PAGES.length - 1] ? '' : '│' })] }, name));
|
|
139
144
|
};
|
|
140
|
-
return (_jsxs(Box, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [_jsxs(Box, { flexDirection: "row", gap: 1, children: [_jsx(Text, { color: info.color, bold: true, children: info.glyph }), _jsx(Text, { bold: true, children: `${t('subagent-card-prefix')}${subagent.description}` }), _jsx(Text, { dimColor: true, children: "\u00B7" }), _jsx(Text, { color: info.color, children: info.label }), _jsx(Box, { flexGrow: 1 }), _jsx(ExitButton, { onClick: onBack })] }), _jsxs(Text, { children: [_jsx(Text, { children: subagent.model ?? subagent.provider ?? 'default' }),
|
|
145
|
+
return (_jsxs(Box, { flexDirection: "column", paddingX: 2, paddingY: 1, children: [_jsxs(Box, { flexDirection: "row", gap: 1, children: [_jsx(Text, { color: info.color, bold: true, children: info.glyph }), _jsx(Text, { bold: true, children: `${t('subagent-card-prefix')}${subagent.description}` }), _jsx(Text, { dimColor: true, children: "\u00B7" }), _jsx(Text, { color: info.color, children: info.label }), _jsx(Box, { flexGrow: 1 }), _jsx(ExitButton, { onClick: onBack })] }), _jsxs(Text, { children: [_jsx(Text, { children: subagent.model ?? subagent.provider ?? 'default' }), _jsxs(Text, { dimColor: true, children: [elapsed !== undefined ? ` · ${formatDuration(elapsed)} · ` : ' · ', totalTokens || '—', " tok \u00B7 ", subagent.toolCalls.length, " tools"] })] }), _jsxs(Text, { dimColor: true, children: [`${t('subagent-started')} ${formatTimestamp(subagent.startedAt)}`
|
|
141
146
|
+ (subagent.completedAt ? ` · ${t('subagent-completed')} ${formatTimestamp(subagent.completedAt)}` : ''), ` · id ${subagent.agentId}`] }), subagent.error && (_jsx(Box, { marginTop: 0, children: _jsx(Text, { color: "error", wrap: "wrap", children: `${t('subagent-error-label')}: ${subagent.error}` }) })), _jsxs(Box, { flexDirection: "row", gap: 0, marginTop: 1, children: [tab('summary', t('subagent-tab-summary')), tab('output', t('subagent-output-label')), tab('tools', t('subagent-tools')), _jsx(Text, { dimColor: true, children: ` ${pageIndex + 1}/${PAGES.length}` })] }), _jsx(Text, { dimColor: true, children: '─'.repeat(Math.max(20, Math.min(72, columns - 6))) }), _jsx(Box, { flexDirection: "column", paddingX: 1, maxHeight: Math.max(10, rows - 14), children: _jsxs(ScrollBox, { ref: scrollRef, flexDirection: "column", flexGrow: 1, children: [page === 'summary' && (_jsxs(Box, { flexDirection: "column", children: [_jsx(StatGrid, { subagent: subagent, totalTokens: totalTokens, elapsed: elapsed, statusLabel: info.label, statusColor: info.color }), subagent.summary && (_jsxs(Box, { flexDirection: "column", marginTop: 1, children: [_jsx(Text, { dimColor: true, bold: true, children: '─ summary ' }), _jsx(Text, { wrap: "wrap", children: subagent.summary })] })), !subagent.summary && (_jsx(Text, { dimColor: true, children: isRunning ? t('subagent-no-output') : t('subagent-no-summary') }))] })), page === 'output' && (subagent.outputEvents.length === 0 && subagent.output.length === 0 ? (_jsx(Text, { dimColor: true, children: t('subagent-no-output') })) : (subagent.outputEvents.map((line, index) => (_jsxs(Text, { wrap: "wrap", dimColor: line.kind === 'thinking' || line.kind === 'system', color: line.kind === 'error' ? 'error' : undefined, children: [line.kind === 'thinking' ? ' ⌁ ' : ' ', line.text, !line.settled && isRunning ? ' ▍' : ''] }, index))))), page === 'tools' && (subagent.toolCalls.length === 0 ? (_jsx(Text, { dimColor: true, children: t('subagent-no-tools') })) : (subagent.toolCalls.map((tool, index) => (_jsxs(Box, { flexDirection: "column", marginTop: index === 0 ? 0 : 1, children: [_jsxs(Box, { flexDirection: "row", gap: 1, children: [_jsx(Text, { color: tool.status === 'failed' ? 'error' : tool.status === 'running' ? 'warning' : 'success', children: tool.status === 'running' ? '·' : tool.status === 'failed' ? '×' : '✓' }), _jsx(Text, { color: toolNameColor(tool.name), children: tool.name }), tool.endedAt && _jsx(Text, { dimColor: true, children: formatDuration(tool.endedAt - tool.startedAt) })] }), tool.argsPreview && (_jsx(Box, { flexDirection: "row", paddingLeft: 2, children: _jsx(JsonArgsText, { raw: tool.argsPreview }) })), tool.resultPreview && (_jsx(Box, { flexDirection: "row", paddingLeft: 2, children: _jsx(Text, { dimColor: true, wrap: "wrap", children: `⎿ ${tool.resultPreview}` }) })), tool.error && (_jsx(Box, { flexDirection: "row", paddingLeft: 2, children: _jsx(Text, { color: "error", wrap: "wrap", children: tool.error }) }))] }, tool.id ?? index)))))] }) }), _jsx(Divider, { color: "subtle", title: "" }), _jsxs(Box, { marginTop: 0, flexDirection: "row", children: [_jsx(Text, { dimColor: true, children: `←/→ ${t('subagent-hint-page')} · ↑/↓ ${t('subagent-hint-scroll')}` }), isRunning && onInterrupt && (_jsxs(_Fragment, { children: [_jsx(Text, { dimColor: true, children: ' · ' }), _jsx(Box, { onClick: () => onInterrupt(subagent.agentId), children: _jsx(Text, { dimColor: true, bold: true, color: "warning", children: "X interrupt" }) })] })), _jsx(Text, { dimColor: true, children: ` · Esc ${t('subagent-hint-back')}` })] })] }));
|
|
142
147
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimelineRail.d.ts","sourceRoot":"","sources":["../../../src/components/TimelineRail.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,UAAU,CAAA;AAEpE,OAAO,EAKL,KAAK,YAAY,EAClB,MAAM,yBAAyB,CAAA;AAwBhC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EACN,KAAK,EACL,QAAQ,EACR,IAAI,EACJ,MAAM,EACN,aAAa,EACb,YAAY,EACZ,YAAY,GACb,EAAE;IACD,MAAM,EAAE,eAAe,GAAG,IAAI,CAAA;IAC9B,qEAAqE;IACrE,KAAK,EAAE,aAAa,CAAC,YAAY,CAAC,CAAA;IAClC,gEAAgE;IAChE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,8DAA8D;IAC9D,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB;sCACkC;IAClC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB;6DACyD;IACzD,YAAY,EAAE,OAAO,CAAA;IACrB;;;;;OAKG;IACH,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACtC,GAAG,KAAK,CAAC,SAAS,
|
|
1
|
+
{"version":3,"file":"TimelineRail.d.ts","sourceRoot":"","sources":["../../../src/components/TimelineRail.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,UAAU,CAAA;AAEpE,OAAO,EAKL,KAAK,YAAY,EAClB,MAAM,yBAAyB,CAAA;AAwBhC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EACN,KAAK,EACL,QAAQ,EACR,IAAI,EACJ,MAAM,EACN,aAAa,EACb,YAAY,EACZ,YAAY,GACb,EAAE;IACD,MAAM,EAAE,eAAe,GAAG,IAAI,CAAA;IAC9B,qEAAqE;IACrE,KAAK,EAAE,aAAa,CAAC,YAAY,CAAC,CAAA;IAClC,gEAAgE;IAChE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;IACvB,8DAA8D;IAC9D,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB;sCACkC;IAClC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB;6DACyD;IACzD,YAAY,EAAE,OAAO,CAAA;IACrB;;;;;OAKG;IACH,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CACtC,GAAG,KAAK,CAAC,SAAS,CA+NlB"}
|
|
@@ -177,7 +177,15 @@ export function TimelineRail({ handle, turns, activeId, upId, downId, terminalWi
|
|
|
177
177
|
const cardH = lines.length + 2;
|
|
178
178
|
if (cardH <= viewport) {
|
|
179
179
|
const top = Math.max(0, Math.min(tickRow - Math.floor(cardH / 2), viewport - cardH));
|
|
180
|
-
card = (_jsx(Box, { position: "absolute", top: top, right: RAIL_WIDTH + 1, width: cardW, height: cardH, flexDirection: "column", flexShrink: 0, borderStyle: "round", borderColor: "inactive",
|
|
180
|
+
card = (_jsx(Box, { position: "absolute", top: top, right: RAIL_WIDTH + 1, width: cardW, height: cardH, flexDirection: "column", flexShrink: 0, borderStyle: "round", borderColor: "inactive",
|
|
181
|
+
// An opaque surface, like every other card floating over the
|
|
182
|
+
// transcript (Tooltip's card uses the same token). Without it
|
|
183
|
+
// the card is translucent: the rows underneath show through
|
|
184
|
+
// the padding/border columns, so the transcript's own fills
|
|
185
|
+
// leak out beside each preview line (reported from a real
|
|
186
|
+
// session: one line leaked the message background, the next a
|
|
187
|
+
// terminal-default gap).
|
|
188
|
+
backgroundColor: "toolCardBackground", paddingX: 1,
|
|
181
189
|
// The card floats LEFT of the rail over selectable
|
|
182
190
|
// transcript text; fence its own rect so a drag that
|
|
183
191
|
// happens under a dwell-popped preview never copies the
|
|
@@ -11,14 +11,23 @@ import { type WhaleLayerPose } from './whaleLayers.js';
|
|
|
11
11
|
*/
|
|
12
12
|
type Rgb = readonly [number, number, number];
|
|
13
13
|
/**
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
14
|
+
* Half-block row encoder for true-color letter-grid sprites (the pixel
|
|
15
|
+
* whale's frames): `pixel(x, y)` returns the color of sprite cell (x, y)
|
|
16
|
+
* or `undefined` for transparent.
|
|
17
|
+
*
|
|
18
|
+
* Render one sprite to ANSI rows (one per sprite row pair). Consecutive
|
|
19
|
+
* cells sharing one style are run-length encoded; every row spans the full
|
|
20
|
+
* sprite width (transparent cells write plain spaces, so the blank cells of
|
|
21
|
+
* a diff region are re-output and overwrite whatever the previous frame
|
|
22
|
+
* painted there), and each row closes with an erase-to-EOL: the text
|
|
23
|
+
* pipeline may trim trailing whitespace, and the erase guarantees the
|
|
24
|
+
* terminal itself clears every cell past the row's last glyph — no ghost
|
|
25
|
+
* pixels can survive a frame switch.
|
|
26
|
+
*/
|
|
27
|
+
export declare function renderCellRows(width: number, height: number, pixel: (x: number, y: number) => Rgb | undefined): string[];
|
|
28
|
+
/**
|
|
29
|
+
* Render one letter-grid frame to ANSI rows under its own palette — the
|
|
30
|
+
* thin adapter over {@link renderCellRows} the whale frames use.
|
|
22
31
|
*/
|
|
23
32
|
export declare function renderSpriteRows(sprite: readonly string[], palette: Record<string, Rgb | undefined>): string[];
|
|
24
33
|
/** Render one composed pose (body + action layers) to ANSI rows, cached. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Whale.d.ts","sourceRoot":"","sources":["../../../src/components/Whale.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,EAA6B,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjF;;;;;;;;GAQG;AAEH,KAAK,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AAoB5C
|
|
1
|
+
{"version":3,"file":"Whale.d.ts","sourceRoot":"","sources":["../../../src/components/Whale.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,EAA6B,KAAK,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAEjF;;;;;;;;GAQG;AAEH,KAAK,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AAoB5C;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,GAAG,GAAG,SAAS,GAC/C,MAAM,EAAE,CAyCV;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,SAAS,CAAC,GAAG,MAAM,EAAE,CAG9G;AAWD,4EAA4E;AAC5E,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,EAAE,CAO/D;AAGD,wEAAwE;AACxE,eAAO,MAAM,oBAAoB,IAAI,CAAA;AAErC;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,EACvB,UAAiC,EACjC,IAAI,EACJ,KAAK,GACN,EAAE;IACD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,0EAA0E;IAC1E,IAAI,CAAC,EAAE,cAAc,CAAA;IACrB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,GAAG,KAAK,CAAC,SAAS,CAWlB"}
|
|
@@ -19,25 +19,27 @@ const ERASE_TO_EOL = '\x1b[K';
|
|
|
19
19
|
/** Reset the background plane to the terminal default (fg keeps its SGR). */
|
|
20
20
|
const BG_DEFAULT = '\x1b[49m';
|
|
21
21
|
/**
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
22
|
+
* Half-block row encoder for true-color letter-grid sprites (the pixel
|
|
23
|
+
* whale's frames): `pixel(x, y)` returns the color of sprite cell (x, y)
|
|
24
|
+
* or `undefined` for transparent.
|
|
25
|
+
*
|
|
26
|
+
* Render one sprite to ANSI rows (one per sprite row pair). Consecutive
|
|
27
|
+
* cells sharing one style are run-length encoded; every row spans the full
|
|
28
|
+
* sprite width (transparent cells write plain spaces, so the blank cells of
|
|
29
|
+
* a diff region are re-output and overwrite whatever the previous frame
|
|
30
|
+
* painted there), and each row closes with an erase-to-EOL: the text
|
|
31
|
+
* pipeline may trim trailing whitespace, and the erase guarantees the
|
|
32
|
+
* terminal itself clears every cell past the row's last glyph — no ghost
|
|
33
|
+
* pixels can survive a frame switch.
|
|
30
34
|
*/
|
|
31
|
-
export function
|
|
35
|
+
export function renderCellRows(width, height, pixel) {
|
|
32
36
|
const rows = [];
|
|
33
|
-
for (let
|
|
34
|
-
const upper = sprite[r];
|
|
35
|
-
const lower = sprite[r + 1] ?? '';
|
|
37
|
+
for (let y = 0; y < height; y += 2) {
|
|
36
38
|
let out = '';
|
|
37
39
|
let current = '';
|
|
38
|
-
for (let x = 0; x <
|
|
39
|
-
const up =
|
|
40
|
-
const lo =
|
|
40
|
+
for (let x = 0; x < width; x++) {
|
|
41
|
+
const up = pixel(x, y);
|
|
42
|
+
const lo = pixel(x, y + 1);
|
|
41
43
|
let seq;
|
|
42
44
|
let ch;
|
|
43
45
|
if (up !== undefined && lo !== undefined) {
|
|
@@ -76,6 +78,14 @@ export function renderSpriteRows(sprite, palette) {
|
|
|
76
78
|
}
|
|
77
79
|
return rows;
|
|
78
80
|
}
|
|
81
|
+
/**
|
|
82
|
+
* Render one letter-grid frame to ANSI rows under its own palette — the
|
|
83
|
+
* thin adapter over {@link renderCellRows} the whale frames use.
|
|
84
|
+
*/
|
|
85
|
+
export function renderSpriteRows(sprite, palette) {
|
|
86
|
+
const width = sprite.reduce((max, row) => Math.max(max, row.length), 0);
|
|
87
|
+
return renderCellRows(width, sprite.length, (x, y) => palette[sprite[y]?.[x] ?? '']);
|
|
88
|
+
}
|
|
79
89
|
/** Pre-rendered ANSI rows for every whale frame, computed once at module load. */
|
|
80
90
|
const RENDERED = WHALE_FRAMES.map(frame => renderSpriteRows(frame.rows, PALETTE));
|
|
81
91
|
/**
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* The maid portrait (鲸鱼娘) that can stand in for the header's pixel whale
|
|
4
|
+
* (settings `dsh-tui.whaleGirl`): the author-designed 30×30 true-color
|
|
5
|
+
* sprite in `whaleGirlSprite.ts`, rendered with the same half-block
|
|
6
|
+
* technique as the whale — one `▀`/`▄` cell packs two sprite rows, so the
|
|
7
|
+
* portrait shows at 30 columns × 15 rows. A static portrait by design: the
|
|
8
|
+
* whale's idle planner and click-hearts stay whale-only, so `dsh-tui.whaleIdle`
|
|
9
|
+
* has nothing to animate here (documented with the setting).
|
|
10
|
+
*/
|
|
11
|
+
/** Pre-rendered ANSI rows, computed once at module load. */
|
|
12
|
+
export declare const WHALE_GIRL_ROWS: readonly string[];
|
|
13
|
+
/**
|
|
14
|
+
* The portrait's center column when it fills the whale's 40-column box
|
|
15
|
+
* (indented (40−30)/2 = 5, so the art spans columns 5..34 → center 19.5).
|
|
16
|
+
* The welcome tagline centers on this instead of `WHALE_CENTER` in maid
|
|
17
|
+
* mode, keeping the caption under the art it belongs to.
|
|
18
|
+
*/
|
|
19
|
+
export declare const WHALE_GIRL_CENTER = 19.5;
|
|
20
|
+
/**
|
|
21
|
+
* The maid portrait as an Ink component: 15 rows × 30 columns. `width` pins
|
|
22
|
+
* the box (the header passes the whale's 40-column box so the neighbouring
|
|
23
|
+
* text column never shifts) and centers the portrait inside it; without it
|
|
24
|
+
* the component is exactly the portrait's own 30 columns (the star modal).
|
|
25
|
+
*/
|
|
26
|
+
export declare function WhaleGirlArt({ width }: {
|
|
27
|
+
width?: number;
|
|
28
|
+
}): React.ReactNode;
|
|
29
|
+
//# sourceMappingURL=WhaleGirl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WhaleGirl.d.ts","sourceRoot":"","sources":["../../../src/components/WhaleGirl.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB;;;;;;;;GAQG;AAEH,4DAA4D;AAC5D,eAAO,MAAM,eAAe,EAAE,SAAS,MAAM,EAI5C,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,OAAO,CAAA;AAErC;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,KAAK,CAAC,SAAS,CAW3E"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Box, Text } from '../ui.js';
|
|
3
|
+
import { renderCellRows } from './Whale.js';
|
|
4
|
+
import { WHALE_GIRL_COLS, WHALE_GIRL_SPRITE, WHALE_GIRL_SPRITE_ROWS } from './whaleGirlSprite.js';
|
|
5
|
+
/**
|
|
6
|
+
* The maid portrait (鲸鱼娘) that can stand in for the header's pixel whale
|
|
7
|
+
* (settings `dsh-tui.whaleGirl`): the author-designed 30×30 true-color
|
|
8
|
+
* sprite in `whaleGirlSprite.ts`, rendered with the same half-block
|
|
9
|
+
* technique as the whale — one `▀`/`▄` cell packs two sprite rows, so the
|
|
10
|
+
* portrait shows at 30 columns × 15 rows. A static portrait by design: the
|
|
11
|
+
* whale's idle planner and click-hearts stay whale-only, so `dsh-tui.whaleIdle`
|
|
12
|
+
* has nothing to animate here (documented with the setting).
|
|
13
|
+
*/
|
|
14
|
+
/** Pre-rendered ANSI rows, computed once at module load. */
|
|
15
|
+
export const WHALE_GIRL_ROWS = renderCellRows(WHALE_GIRL_COLS, WHALE_GIRL_SPRITE_ROWS, (x, y) => WHALE_GIRL_SPRITE[y]?.[x] ?? undefined);
|
|
16
|
+
/**
|
|
17
|
+
* The portrait's center column when it fills the whale's 40-column box
|
|
18
|
+
* (indented (40−30)/2 = 5, so the art spans columns 5..34 → center 19.5).
|
|
19
|
+
* The welcome tagline centers on this instead of `WHALE_CENTER` in maid
|
|
20
|
+
* mode, keeping the caption under the art it belongs to.
|
|
21
|
+
*/
|
|
22
|
+
export const WHALE_GIRL_CENTER = 19.5;
|
|
23
|
+
/**
|
|
24
|
+
* The maid portrait as an Ink component: 15 rows × 30 columns. `width` pins
|
|
25
|
+
* the box (the header passes the whale's 40-column box so the neighbouring
|
|
26
|
+
* text column never shifts) and centers the portrait inside it; without it
|
|
27
|
+
* the component is exactly the portrait's own 30 columns (the star modal).
|
|
28
|
+
*/
|
|
29
|
+
export function WhaleGirlArt({ width }) {
|
|
30
|
+
const pad = width === undefined ? 0 : Math.max(0, Math.floor((width - WHALE_GIRL_COLS) / 2));
|
|
31
|
+
return (_jsx(Box, { flexDirection: "column", flexShrink: 0, width: width, children: WHALE_GIRL_ROWS.map((row, index) => (_jsxs(Text, { wrap: "truncate-end", children: [pad > 0 ? ' '.repeat(pad) : '', row] }, index))) }));
|
|
32
|
+
}
|
|
@@ -7,7 +7,7 @@ import type { SpinnerMode } from './Spinner/spinnerMode.js';
|
|
|
7
7
|
*
|
|
8
8
|
* Random verb is picked once per turn (per mount of the spinner).
|
|
9
9
|
*/
|
|
10
|
-
export declare function WorkingSpinner({ mode, hasActiveTools, responseLengthRef, uploadTokensRef, loadingStartTimeRef, totalPausedMsRef, pauseStartTimeRef, thinkingStatus, }: {
|
|
10
|
+
export declare function WorkingSpinner({ mode, hasActiveTools, responseLengthRef, uploadTokensRef, loadingStartTimeRef, totalPausedMsRef, pauseStartTimeRef, thinkingStatus, suffix, }: {
|
|
11
11
|
mode: SpinnerMode;
|
|
12
12
|
hasActiveTools: boolean;
|
|
13
13
|
responseLengthRef: React.RefObject<number>;
|
|
@@ -17,6 +17,9 @@ export declare function WorkingSpinner({ mode, hasActiveTools, responseLengthRef
|
|
|
17
17
|
totalPausedMsRef: React.RefObject<number>;
|
|
18
18
|
pauseStartTimeRef: React.RefObject<number | null>;
|
|
19
19
|
thinkingStatus: 'thinking' | number | null;
|
|
20
|
+
/** Extra leading field (e.g. the auto-compaction badge) shown before the
|
|
21
|
+
* timer/token counters; omitted for an ordinary turn. */
|
|
22
|
+
suffix?: string;
|
|
20
23
|
}): React.ReactNode;
|
|
21
24
|
/**
|
|
22
25
|
* Tracks thinking status: 'thinking' while the model is streaming reasoning,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorkingSpinner.d.ts","sourceRoot":"","sources":["../../../src/components/WorkingSpinner.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAA;AAG1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAM3D;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,
|
|
1
|
+
{"version":3,"file":"WorkingSpinner.d.ts","sourceRoot":"","sources":["../../../src/components/WorkingSpinner.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAA;AAG1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAM3D;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,cAAc,EACd,MAAM,GACP,EAAE;IACD,IAAI,EAAE,WAAW,CAAA;IACjB,cAAc,EAAE,OAAO,CAAA;IACvB,iBAAiB,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IAC1C,+EAA+E;IAC/E,eAAe,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IACxC,mBAAmB,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IAC5C,gBAAgB,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IACzC,iBAAiB,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IACjD,cAAc,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,CAAA;IAC1C;8DAC0D;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,GAAG,KAAK,CAAC,SAAS,CA4BlB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,OAAO,GAClB,UAAU,GAAG,MAAM,GAAG,IAAI,CA6C5B"}
|
|
@@ -13,12 +13,12 @@ import { sample } from 'lodash-es';
|
|
|
13
13
|
*
|
|
14
14
|
* Random verb is picked once per turn (per mount of the spinner).
|
|
15
15
|
*/
|
|
16
|
-
export function WorkingSpinner({ mode, hasActiveTools, responseLengthRef, uploadTokensRef, loadingStartTimeRef, totalPausedMsRef, pauseStartTimeRef, thinkingStatus, }) {
|
|
16
|
+
export function WorkingSpinner({ mode, hasActiveTools, responseLengthRef, uploadTokensRef, loadingStartTimeRef, totalPausedMsRef, pauseStartTimeRef, thinkingStatus, suffix, }) {
|
|
17
17
|
const { columns } = useTerminalSize();
|
|
18
18
|
// Pick a random verb once per spinner mount (per turn).
|
|
19
19
|
const [randomVerb] = useState(() => sample(SPINNER_VERBS) ?? 'Working');
|
|
20
20
|
const message = `${tOr(`spinner-verb-${randomVerb.toLowerCase()}`, randomVerb)}…`;
|
|
21
|
-
return (_jsx(Box, { flexDirection: "column", width: "100%", alignItems: "flex-start", children: _jsx(SpinnerAnimationRow, { mode: mode, reducedMotion: false, hasActiveTools: hasActiveTools, responseLengthRef: responseLengthRef, uploadTokensRef: uploadTokensRef, message: message, messageColor: "accent", shimmerColor: "accentShimmer", loadingStartTimeRef: loadingStartTimeRef, totalPausedMsRef: totalPausedMsRef, pauseStartTimeRef: pauseStartTimeRef, spinnerSuffix: null, verbose: true, columns: columns, thinkingStatus: thinkingStatus }) }));
|
|
21
|
+
return (_jsx(Box, { flexDirection: "column", width: "100%", alignItems: "flex-start", children: _jsx(SpinnerAnimationRow, { mode: mode, reducedMotion: false, hasActiveTools: hasActiveTools, responseLengthRef: responseLengthRef, uploadTokensRef: uploadTokensRef, message: message, messageColor: "accent", shimmerColor: "accentShimmer", loadingStartTimeRef: loadingStartTimeRef, totalPausedMsRef: totalPausedMsRef, pauseStartTimeRef: pauseStartTimeRef, spinnerSuffix: suffix === undefined ? null : suffix, verbose: true, columns: columns, thinkingStatus: thinkingStatus }) }));
|
|
22
22
|
}
|
|
23
23
|
/**
|
|
24
24
|
* Tracks thinking status: 'thinking' while the model is streaming reasoning,
|
|
@@ -1,28 +1,57 @@
|
|
|
1
|
+
import type { SplashFont } from './splashFonts.js';
|
|
1
2
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* fails visibly instead of crashing the splash.
|
|
3
|
+
* 5 行点阵大字的画布:横向颜色渐变 + 一道从左往右扫的高光(节奏与 `✦ dsh-TUI`
|
|
4
|
+
* 字标的扫光一致,见 `stepMs`)。字形与度量来自 `splashFonts.ts` 的字体描述符,
|
|
5
|
+
* 这里只负责"把某款字体画出来"——所以加字体是加数据,不是改画布。
|
|
6
|
+
*
|
|
7
|
+
* 缺字走字体自带的 `fallback` 空心方块:打错字要看得见,而不是让开屏崩掉。
|
|
8
8
|
*/
|
|
9
|
+
/** 颜色通道。 */
|
|
9
10
|
export interface Rgb {
|
|
10
11
|
r: number;
|
|
11
12
|
g: number;
|
|
12
13
|
b: number;
|
|
13
14
|
}
|
|
14
15
|
/**
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* `flash` travels left to right (one column per `stepMs`, matching the
|
|
18
|
-
* wordmark shimmer's cadence). Returns 5 ANSI rows.
|
|
19
|
-
* @param text - Text to render; only D, E, P, S, K, H, A, R, N have glyphs, unknown letters fall back to a hollow box.
|
|
20
|
-
* @param time - Elapsed time in milliseconds; drives the sweep position and the brightness pulse.
|
|
21
|
-
* @param from - Gradient start color at the left edge.
|
|
22
|
-
* @param to - Gradient end color at the right edge.
|
|
23
|
-
* @param flash - Highlight color mixed into the moving sweep window.
|
|
24
|
-
* @param stepMs - Milliseconds per column of sweep advance (default 60).
|
|
25
|
-
* @returns Five ANSI rows, one per block-font line.
|
|
16
|
+
* 画字量宽只需要字身宽度——`SplashFont` 天然满足,`splashFonts.ts` 解字距时
|
|
17
|
+
* 手里只有宽度,也能直接复用同一套算术。
|
|
26
18
|
*/
|
|
27
|
-
export
|
|
19
|
+
export interface GlyphMetrics {
|
|
20
|
+
/** 字身宽度(列)。 */
|
|
21
|
+
readonly glyphWidth: number;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* `text` 在该字身宽度、该字距下画出来的列数(含末尾那格字距留白)——与渲染循环
|
|
25
|
+
* 用同一套算术,放在这里以免两处漂移(`splashFonts.ts` 解字距时也读它)。
|
|
26
|
+
* @param font - 字体度量(只用到字身宽度)。
|
|
27
|
+
* @param text - 要量的文本。
|
|
28
|
+
* @param kerning - 每个字形之后补的空列数。
|
|
29
|
+
* @returns 画出来的列数。
|
|
30
|
+
*/
|
|
31
|
+
export declare function paintedWidth(font: GlyphMetrics, text: string, kerning: number): number;
|
|
32
|
+
/**
|
|
33
|
+
* `text` 的显示宽度:含字距、**不含**最后一个字形之后的留白。开屏用它判断
|
|
34
|
+
* 某个词还放不放得下(配合鲸鱼),`verify-splash-layout` 会把它与实际画出的
|
|
35
|
+
* 列数对齐钉死。
|
|
36
|
+
* @param font - 字体度量(只用到字身宽度)。
|
|
37
|
+
* @param text - 要量的文本(只有字体表里定义的字母有字形)。
|
|
38
|
+
* @param kerning - 每个字形之后的空列数(默认 1)。
|
|
39
|
+
* @returns 显示宽度(终端列)。
|
|
40
|
+
*/
|
|
41
|
+
export declare function bigTextWidth(font: GlyphMetrics, text: string, kerning?: number): number;
|
|
42
|
+
/**
|
|
43
|
+
* 用某款字体渲染 `text`:渐变从 `from` 走到 `to`,一段 SWEEP_WINDOW 宽的高光
|
|
44
|
+
* 混向 `flash` 并随时间从左扫到右。返回 5 行 ANSI。
|
|
45
|
+
* @param font - 字体描述符(字形 + 字身宽度 + fallback)。
|
|
46
|
+
* @param text - 要渲染的文本;缺字的字母退化成 fallback 方块。
|
|
47
|
+
* @param time - 毫秒;决定扫光位置与脉动亮度(定格时传 0)。
|
|
48
|
+
* @param from - 渐变起点色(最左列)。
|
|
49
|
+
* @param to - 渐变终点色(最右列)。
|
|
50
|
+
* @param flash - 扫光窗口混入的高光色。
|
|
51
|
+
* @param stepMs - 扫光每前进一列的毫秒数(默认 60)。
|
|
52
|
+
* @param kerning - 每个字形之后的空列数(默认 1)。两行标题靠它撑到等宽。
|
|
53
|
+
* @param indent - 每行左侧缩进列数(下排居中用,默认 0)。
|
|
54
|
+
* @returns 5 行 ANSI,每行是点阵字的一行。
|
|
55
|
+
*/
|
|
56
|
+
export declare function renderBigText(font: SplashFont, text: string, time: number, from: Rgb, to: Rgb, flash: Rgb, stepMs?: number, kerning?: number, indent?: number): string[];
|
|
28
57
|
//# sourceMappingURL=bigfont.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bigfont.d.ts","sourceRoot":"","sources":["../../../src/components/bigfont.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bigfont.d.ts","sourceRoot":"","sources":["../../../src/components/bigfont.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAElD;;;;;;GAMG;AAEH,YAAY;AACZ,MAAM,WAAW,GAAG;IAClB,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;IACT,CAAC,EAAE,MAAM,CAAA;CACV;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,eAAe;IACf,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;CAC5B;AAYD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAItF;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,SAAI,GAAG,MAAM,CAKlF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,UAAU,EAChB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,GAAG,EACT,EAAE,EAAE,GAAG,EACP,KAAK,EAAE,GAAG,EACV,MAAM,SAAK,EACX,OAAO,SAAI,EACX,MAAM,SAAI,GACT,MAAM,EAAE,CAgDV"}
|
|
@@ -1,51 +1,63 @@
|
|
|
1
1
|
import { interpolateColor } from './Spinner/spinnerUtils.js';
|
|
2
|
-
/**
|
|
3
|
-
const GLYPHS = {
|
|
4
|
-
D: ['█▀▀▀▄', '█···█', '█···█', '█···█', '█▄▄▄▀'],
|
|
5
|
-
E: ['█▀▀▀▀', '█····', '█▀▀▀·', '█····', '█▄▄▄▄'],
|
|
6
|
-
P: ['█▀▀▀▄', '█···█', '█▄▄▄▀', '█····', '█····'],
|
|
7
|
-
S: ['█▀▀▀▀', '█····', '·▀▀▀▄', '····█', '█▄▄▄▀'],
|
|
8
|
-
K: ['█···█', '█·█··', '██···', '█·█··', '█···█'],
|
|
9
|
-
H: ['█···█', '█···█', '█▀▀▀█', '█···█', '█···█'],
|
|
10
|
-
A: ['·▄▀▄·', '█···█', '█▀▀▀█', '█···█', '█···█'],
|
|
11
|
-
R: ['█▀▀▀▄', '█···█', '█▄▄▄▀', '█·█··', '█···█'],
|
|
12
|
-
N: ['█···█', '██··█', '█·█·█', '█··██', '█···█'],
|
|
13
|
-
};
|
|
14
|
-
const FALLBACK = [
|
|
15
|
-
'▄▄▄▄▄',
|
|
16
|
-
'█···█',
|
|
17
|
-
'█···█',
|
|
18
|
-
'█···█',
|
|
19
|
-
'▀▀▀▀▀',
|
|
20
|
-
];
|
|
21
|
-
/** Per-glyph advance (5 glyph columns + 1 kerning column). */
|
|
22
|
-
const ADVANCE = 6;
|
|
23
|
-
/** Space between words. */
|
|
2
|
+
/** 词组之间的间隔列数。 */
|
|
24
3
|
const WORD_GAP = 2;
|
|
25
|
-
/**
|
|
4
|
+
/** 扫光窗口宽度(列)。 */
|
|
26
5
|
const SWEEP_WINDOW = 8;
|
|
6
|
+
/** 一行字画几行。 */
|
|
7
|
+
const ROWS = 5;
|
|
27
8
|
const esc = (rgb) => `\x1b[38;2;${rgb.r};${rgb.g};${rgb.b}m`;
|
|
28
9
|
const RESET = '\x1b[39m';
|
|
29
10
|
/**
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
* @param
|
|
35
|
-
* @
|
|
36
|
-
* @param from - Gradient start color at the left edge.
|
|
37
|
-
* @param to - Gradient end color at the right edge.
|
|
38
|
-
* @param flash - Highlight color mixed into the moving sweep window.
|
|
39
|
-
* @param stepMs - Milliseconds per column of sweep advance (default 60).
|
|
40
|
-
* @returns Five ANSI rows, one per block-font line.
|
|
11
|
+
* `text` 在该字身宽度、该字距下画出来的列数(含末尾那格字距留白)——与渲染循环
|
|
12
|
+
* 用同一套算术,放在这里以免两处漂移(`splashFonts.ts` 解字距时也读它)。
|
|
13
|
+
* @param font - 字体度量(只用到字身宽度)。
|
|
14
|
+
* @param text - 要量的文本。
|
|
15
|
+
* @param kerning - 每个字形之后补的空列数。
|
|
16
|
+
* @returns 画出来的列数。
|
|
41
17
|
*/
|
|
42
|
-
export function
|
|
43
|
-
|
|
18
|
+
export function paintedWidth(font, text, kerning) {
|
|
19
|
+
let width = 0;
|
|
20
|
+
for (const ch of text)
|
|
21
|
+
width += ch === ' ' ? WORD_GAP : font.glyphWidth + kerning;
|
|
22
|
+
return width;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* `text` 的显示宽度:含字距、**不含**最后一个字形之后的留白。开屏用它判断
|
|
26
|
+
* 某个词还放不放得下(配合鲸鱼),`verify-splash-layout` 会把它与实际画出的
|
|
27
|
+
* 列数对齐钉死。
|
|
28
|
+
* @param font - 字体度量(只用到字身宽度)。
|
|
29
|
+
* @param text - 要量的文本(只有字体表里定义的字母有字形)。
|
|
30
|
+
* @param kerning - 每个字形之后的空列数(默认 1)。
|
|
31
|
+
* @returns 显示宽度(终端列)。
|
|
32
|
+
*/
|
|
33
|
+
export function bigTextWidth(font, text, kerning = 1) {
|
|
34
|
+
const characters = Array.from(text);
|
|
35
|
+
if (characters.length === 0)
|
|
36
|
+
return 0;
|
|
37
|
+
const trailing = characters[characters.length - 1] === ' ' ? WORD_GAP : kerning;
|
|
38
|
+
return paintedWidth(font, text, kerning) - trailing;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* 用某款字体渲染 `text`:渐变从 `from` 走到 `to`,一段 SWEEP_WINDOW 宽的高光
|
|
42
|
+
* 混向 `flash` 并随时间从左扫到右。返回 5 行 ANSI。
|
|
43
|
+
* @param font - 字体描述符(字形 + 字身宽度 + fallback)。
|
|
44
|
+
* @param text - 要渲染的文本;缺字的字母退化成 fallback 方块。
|
|
45
|
+
* @param time - 毫秒;决定扫光位置与脉动亮度(定格时传 0)。
|
|
46
|
+
* @param from - 渐变起点色(最左列)。
|
|
47
|
+
* @param to - 渐变终点色(最右列)。
|
|
48
|
+
* @param flash - 扫光窗口混入的高光色。
|
|
49
|
+
* @param stepMs - 扫光每前进一列的毫秒数(默认 60)。
|
|
50
|
+
* @param kerning - 每个字形之后的空列数(默认 1)。两行标题靠它撑到等宽。
|
|
51
|
+
* @param indent - 每行左侧缩进列数(下排居中用,默认 0)。
|
|
52
|
+
* @returns 5 行 ANSI,每行是点阵字的一行。
|
|
53
|
+
*/
|
|
54
|
+
export function renderBigText(font, text, time, from, to, flash, stepMs = 60, kerning = 1, indent = 0) {
|
|
55
|
+
const width = paintedWidth(font, text, kerning) + indent;
|
|
44
56
|
const cycle = width + SWEEP_WINDOW * 2;
|
|
45
57
|
const sweepStart = (Math.floor(time / stepMs) % cycle) - SWEEP_WINDOW;
|
|
46
58
|
const pulse = (Math.sin(time / (stepMs * 2)) + 1) / 2;
|
|
47
59
|
const rows = [];
|
|
48
|
-
for (let row = 0; row <
|
|
60
|
+
for (let row = 0; row < ROWS; row++) {
|
|
49
61
|
let out = '';
|
|
50
62
|
let current = '';
|
|
51
63
|
let x = 0;
|
|
@@ -72,16 +84,19 @@ export function renderBigText(text, time, from, to, flash, stepMs = 60) {
|
|
|
72
84
|
out += ch;
|
|
73
85
|
x += 1;
|
|
74
86
|
};
|
|
87
|
+
for (let i = 0; i < indent; i++)
|
|
88
|
+
emit(' ');
|
|
75
89
|
for (const ch of text) {
|
|
76
90
|
if (ch === ' ') {
|
|
77
91
|
for (let i = 0; i < WORD_GAP; i++)
|
|
78
92
|
emit(' ');
|
|
79
93
|
continue;
|
|
80
94
|
}
|
|
81
|
-
const glyph =
|
|
82
|
-
for (const cell of glyph[row])
|
|
95
|
+
const glyph = font.glyphs[ch] ?? font.fallback;
|
|
96
|
+
for (const cell of glyph[row] ?? '')
|
|
83
97
|
emit(cell);
|
|
84
|
-
|
|
98
|
+
for (let i = 0; i < kerning; i++)
|
|
99
|
+
emit(' ');
|
|
85
100
|
}
|
|
86
101
|
if (current !== '')
|
|
87
102
|
out += RESET;
|
|
@@ -2,8 +2,7 @@ import React from 'react';
|
|
|
2
2
|
/**
|
|
3
3
|
* Localized shortcut-hint line: renders a `t('hint-*')` string, with the
|
|
4
4
|
* `**primary shortcut**` segment (the main action's key, wrapped in `**` in
|
|
5
|
-
* the dict) in bold
|
|
6
|
-
* prop used to give. Wrap in `<Text dimColor italic>` for the common dim
|
|
5
|
+
* the dict) in bold. Wrap in `<Text dimColor italic>` for the common dim
|
|
7
6
|
* styling, like the Byline it replaces.
|
|
8
7
|
*/
|
|
9
8
|
export declare function HintLine({ text }: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HintLine.d.ts","sourceRoot":"","sources":["../../../../src/components/design-system/HintLine.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB
|
|
1
|
+
{"version":3,"file":"HintLine.d.ts","sourceRoot":"","sources":["../../../../src/components/design-system/HintLine.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,KAAK,CAAC,SAAS,CAUpE"}
|
|
@@ -3,8 +3,7 @@ import Text from './ThemedText.js';
|
|
|
3
3
|
/**
|
|
4
4
|
* Localized shortcut-hint line: renders a `t('hint-*')` string, with the
|
|
5
5
|
* `**primary shortcut**` segment (the main action's key, wrapped in `**` in
|
|
6
|
-
* the dict) in bold
|
|
7
|
-
* prop used to give. Wrap in `<Text dimColor italic>` for the common dim
|
|
6
|
+
* the dict) in bold. Wrap in `<Text dimColor italic>` for the common dim
|
|
8
7
|
* styling, like the Byline it replaces.
|
|
9
8
|
*/
|
|
10
9
|
export function HintLine({ text }) {
|
|
@@ -18,4 +18,10 @@ export declare function ThemeProvider({ children, theme, themeHost, }: {
|
|
|
18
18
|
* `[themeName, setTheme]`.
|
|
19
19
|
*/
|
|
20
20
|
export declare function useTheme(): [string, (name: string) => boolean];
|
|
21
|
+
/**
|
|
22
|
+
* The colour the terminal shows behind the UI (`#rrggbb`): the OSC 11
|
|
23
|
+
* answer when available, else white/black by palette lightness. Terminal
|
|
24
|
+
* image placements use it as their opaque Sixel backing.
|
|
25
|
+
*/
|
|
26
|
+
export declare function useTerminalBackground(): `#${string}`;
|
|
21
27
|
//# sourceMappingURL=ThemeProvider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../../../src/components/design-system/ThemeProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyD,MAAM,OAAO,CAAA;AAY7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"ThemeProvider.d.ts","sourceRoot":"","sources":["../../../../src/components/design-system/ThemeProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAyD,MAAM,OAAO,CAAA;AAY7E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAA;AA2E/D;;;;;GAKG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAGrD;AAcD,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,KAAK,EACL,SAAS,GACV,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,qEAAqE;IACrE,SAAS,CAAC,EAAE,YAAY,CAAA;CACzB,GAAG,KAAK,CAAC,SAAS,CA6MlB;AAED;;;GAGG;AACH,wBAAgB,QAAQ,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,CAG9D;AA2BD;;;;GAIG;AACH,wBAAgB,qBAAqB,IAAI,IAAI,MAAM,EAAE,CAEpD"}
|