@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
|
@@ -1,16 +1,155 @@
|
|
|
1
1
|
import { markChannelReadDirty } from '../../adapter/channel/read-view.js';
|
|
2
2
|
import { SubagentActivityStore } from '../subagents.js';
|
|
3
|
+
import { isSubagentToolName } from './projection-helpers.js';
|
|
4
|
+
/**
|
|
5
|
+
* Keep each parked parent's reducer alive, including session links and the
|
|
6
|
+
* stream attempt/settlement cursor. A display snapshot cannot resume either
|
|
7
|
+
* a run epoch or an in-flight assistant attempt faithfully.
|
|
8
|
+
*/
|
|
9
|
+
export function createSubagentProjection(getState, deps) {
|
|
10
|
+
const parked = new Map();
|
|
11
|
+
const hidden = { rows: [], subagents: [], subagentCost: [], emit() { }, emitStream() { } };
|
|
12
|
+
const make = () => {
|
|
13
|
+
const projection = createSessionSubagentProjection(() => active === projection ? getState() : hidden, { ...deps, visible: () => active === projection });
|
|
14
|
+
return projection;
|
|
15
|
+
};
|
|
16
|
+
let active = make();
|
|
17
|
+
let activeParent = deps.agent();
|
|
18
|
+
let restored = false;
|
|
19
|
+
const childProjection = (id, parent) => {
|
|
20
|
+
// A lifecycle carrier names the DIRECT delegating parent. Its visibility
|
|
21
|
+
// filter also admits ancestors, which is not evidence of ownership.
|
|
22
|
+
if (parent != null)
|
|
23
|
+
return parent === activeParent ? active : parked.get(parent);
|
|
24
|
+
for (const projection of parked.values())
|
|
25
|
+
if (projection.store.has(id))
|
|
26
|
+
return projection;
|
|
27
|
+
if (active.store.has(id))
|
|
28
|
+
return active;
|
|
29
|
+
// Legacy unkeyed delivery can still resolve a child through established
|
|
30
|
+
// catalog membership or the registry's durable parent-session lineage.
|
|
31
|
+
let session;
|
|
32
|
+
try {
|
|
33
|
+
session = deps.lookupChild(id)?.session;
|
|
34
|
+
}
|
|
35
|
+
catch { /* discovery may arrive later */ }
|
|
36
|
+
const parentId = session?.header?.parentSession;
|
|
37
|
+
if (typeof parentId === 'string') {
|
|
38
|
+
for (const [parentAgent, projection] of parked)
|
|
39
|
+
if (String(parentAgent.session.id) === parentId)
|
|
40
|
+
return projection;
|
|
41
|
+
return String(activeParent.session.id) === parentId ? active : undefined;
|
|
42
|
+
}
|
|
43
|
+
// Omitted parent is only for direct callers that already scope events.
|
|
44
|
+
// Transport passes null for an unkeyed event; never guess its ownership.
|
|
45
|
+
return parent === undefined ? active : undefined;
|
|
46
|
+
};
|
|
47
|
+
const park = (agent) => {
|
|
48
|
+
active.dropRows();
|
|
49
|
+
parked.set(agent, active);
|
|
50
|
+
};
|
|
51
|
+
const restore = (agent) => {
|
|
52
|
+
const previous = parked.get(agent);
|
|
53
|
+
if (previous === undefined)
|
|
54
|
+
return;
|
|
55
|
+
parked.delete(agent);
|
|
56
|
+
active = previous;
|
|
57
|
+
activeParent = agent;
|
|
58
|
+
restored = true;
|
|
59
|
+
for (const saved of active.store.snapshot()) {
|
|
60
|
+
if (saved.status !== 'running' && saved.status !== 'starting')
|
|
61
|
+
continue;
|
|
62
|
+
let child;
|
|
63
|
+
try {
|
|
64
|
+
child = deps.lookupChild(saved.agentId);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
if (child !== undefined && child.status !== 'running')
|
|
70
|
+
active.store.patch(saved.agentId, { status: 'unknown' });
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
return {
|
|
74
|
+
get store() { return active.store; },
|
|
75
|
+
get pendingTaskDescriptions() { return active.pendingTaskDescriptions; },
|
|
76
|
+
control: { interrupt: (id) => active.control.interrupt(id) },
|
|
77
|
+
onSessionEvent(session, event) {
|
|
78
|
+
let handled = false;
|
|
79
|
+
if (session === activeParent.session) {
|
|
80
|
+
active.onParentEvent(event);
|
|
81
|
+
handled = true;
|
|
82
|
+
}
|
|
83
|
+
for (const [parent, projection] of parked) {
|
|
84
|
+
if (session === parent.session) {
|
|
85
|
+
projection.onParentEvent(event);
|
|
86
|
+
handled = true;
|
|
87
|
+
}
|
|
88
|
+
if (projection.onSessionEvent(session, event))
|
|
89
|
+
handled = true;
|
|
90
|
+
}
|
|
91
|
+
return active.onSessionEvent(session, event) || handled;
|
|
92
|
+
},
|
|
93
|
+
onStreamFrame(agent, frame) {
|
|
94
|
+
for (const projection of parked.values())
|
|
95
|
+
if (projection.onStreamFrame(agent, frame))
|
|
96
|
+
return true;
|
|
97
|
+
return active.onStreamFrame(agent, frame);
|
|
98
|
+
},
|
|
99
|
+
onStart(info, parent) { childProjection(info.id, parent)?.onStart(info); },
|
|
100
|
+
onEnd(info, parent) { childProjection(info.id, parent)?.onEnd(info); },
|
|
101
|
+
onParentEvent: (event) => active.onParentEvent(event),
|
|
102
|
+
bootstrapFromLog(events) {
|
|
103
|
+
// Live parked reducers already consumed this log. Re-folding historical
|
|
104
|
+
// workflow edges would overwrite the current epoch and its settlement.
|
|
105
|
+
if (!restored)
|
|
106
|
+
active.bootstrapFromLog(events);
|
|
107
|
+
else
|
|
108
|
+
active.syncNow();
|
|
109
|
+
},
|
|
110
|
+
syncNow: () => active.syncNow(),
|
|
111
|
+
flush: () => active.flush(),
|
|
112
|
+
dropRows: () => active.dropRows(),
|
|
113
|
+
park, restore,
|
|
114
|
+
forget(agent) { parked.delete(agent); },
|
|
115
|
+
dispose() { parked.clear(); active.store.reset(); active.dropRows(); active.pendingTaskDescriptions.length = 0; },
|
|
116
|
+
reset() { active = make(); activeParent = deps.agent(); restored = false; getState().subagents = []; getState().subagentCost = []; },
|
|
117
|
+
};
|
|
118
|
+
}
|
|
3
119
|
/** Current-session subagent store, row projection and frame-batched stream
|
|
4
120
|
* bridge. The owning channel installs transport subscriptions; this module
|
|
5
|
-
* only accepts scoped events and never captures a replaceable agent itself.
|
|
6
|
-
|
|
121
|
+
* only accepts scoped events and never captures a replaceable agent itself.
|
|
122
|
+
*
|
|
123
|
+
* Discovery comes from three seams so the dashboard can mirror EVERY child
|
|
124
|
+
* the session dispatched (issue #966):
|
|
125
|
+
* 1. `subagent/start`/`subagent/end` bus edges — per-run lifecycle of
|
|
126
|
+
* one-shot runs and continuable epochs, paired by `runId`;
|
|
127
|
+
* 2. parent-session durable events — `subagent/catalog` (child creation
|
|
128
|
+
* fact, written for every child) and `tool-workflow/agent-start|end`
|
|
129
|
+
* (workflow/ralph members, which never emit subagent edges) — received
|
|
130
|
+
* live AND folded from the log at bind/resume so a restart no longer
|
|
131
|
+
* blanks the panel;
|
|
132
|
+
* 3. lazy registry back-fill — a child session event or stream frame whose
|
|
133
|
+
* session link was never established is resolved through the agents
|
|
134
|
+
* registry on arrival, healing one-shot `lookupChild` misses.
|
|
135
|
+
* Transcript cards are gated to children discovered while LIVE: a resumed
|
|
136
|
+
* session's historical children appear in the dashboard without flooding the
|
|
137
|
+
* replayed transcript with cards that the durable log never contained. */
|
|
138
|
+
function createSessionSubagentProjection(getState, deps) {
|
|
7
139
|
const store = new SubagentActivityStore();
|
|
8
140
|
const rowsByAgentId = new Map();
|
|
9
141
|
const pendingTaskDescriptions = [];
|
|
142
|
+
/** Workflow member identity: `tool-workflow/agent-end` carries no childId,
|
|
143
|
+
* so member starts remember `runId:seq` → agentId for their settlement. */
|
|
144
|
+
const workflowMembers = new Map();
|
|
145
|
+
/** Children that earned a transcript card (live discovery only). */
|
|
146
|
+
const cardedIds = new Set();
|
|
10
147
|
let streamDirty = false;
|
|
11
148
|
const syncRows = (snapshot = store.snapshot()) => {
|
|
12
149
|
const state = getState();
|
|
13
150
|
for (const sub of snapshot) {
|
|
151
|
+
if (!cardedIds.has(sub.agentId))
|
|
152
|
+
continue;
|
|
14
153
|
let row = rowsByAgentId.get(sub.agentId);
|
|
15
154
|
if (!row) {
|
|
16
155
|
row = { id: deps.rowIds.value++, kind: 'subagent', text: sub.description, subagent: undefined };
|
|
@@ -33,8 +172,15 @@ export function createSubagentProjection(getState, deps) {
|
|
|
33
172
|
};
|
|
34
173
|
const syncNow = () => {
|
|
35
174
|
streamDirty = false;
|
|
175
|
+
if (!deps.visible())
|
|
176
|
+
return;
|
|
36
177
|
const snapshot = store.snapshot();
|
|
37
|
-
getState()
|
|
178
|
+
const state = getState();
|
|
179
|
+
state.subagents = snapshot;
|
|
180
|
+
// 费用快照随 dashboard 一起镜像:StatusLine/BalanceReportRow 从这里读
|
|
181
|
+
// 子代理按 (provider, model) 的 durable 用量桶。与 subagents 同在 visible
|
|
182
|
+
// 守卫之后——停靠父级的费用留在自己的 store 里,restore 时重新镜像。
|
|
183
|
+
state.subagentCost = store.costSnapshot().entries;
|
|
38
184
|
syncRows(snapshot);
|
|
39
185
|
};
|
|
40
186
|
const flush = () => {
|
|
@@ -44,7 +190,9 @@ export function createSubagentProjection(getState, deps) {
|
|
|
44
190
|
return true;
|
|
45
191
|
};
|
|
46
192
|
const onSessionEvent = (session, event) => {
|
|
47
|
-
|
|
193
|
+
let id = store.getSubagentIdBySession(session);
|
|
194
|
+
if (id === undefined)
|
|
195
|
+
id = backfillSessionLink(session);
|
|
48
196
|
if (id === undefined)
|
|
49
197
|
return false;
|
|
50
198
|
store.onSessionEvent(id, event);
|
|
@@ -62,7 +210,9 @@ export function createSubagentProjection(getState, deps) {
|
|
|
62
210
|
// (not its session), so resolve the subagent through its bound session.
|
|
63
211
|
const onStreamFrame = (agent, frame) => {
|
|
64
212
|
const session = agent?.session;
|
|
65
|
-
|
|
213
|
+
let id = session !== undefined && session !== null ? store.getSubagentIdBySession(session) : undefined;
|
|
214
|
+
if (id === undefined && session !== undefined && session !== null)
|
|
215
|
+
id = backfillSessionLink(session);
|
|
66
216
|
if (id === undefined)
|
|
67
217
|
return false;
|
|
68
218
|
store.onStreamFrame(id, frame);
|
|
@@ -76,6 +226,145 @@ export function createSubagentProjection(getState, deps) {
|
|
|
76
226
|
}
|
|
77
227
|
return true;
|
|
78
228
|
};
|
|
229
|
+
/** Heal a missing session→agent link through the agents registry. The
|
|
230
|
+
* start-time lookup is one-shot; a miss (service not yet mounted, child not
|
|
231
|
+
* yet registered) previously left the child's events permanently
|
|
232
|
+
* unattributed — its row then never left `running`. Only rows the store
|
|
233
|
+
* already tracks are linked: the registry also holds peer top-level
|
|
234
|
+
* sessions (a parked `/bg` agent streams on the same bus) that must never
|
|
235
|
+
* become dashboard rows. */
|
|
236
|
+
const backfillSessionLink = (session) => {
|
|
237
|
+
const sessionId = session?.id;
|
|
238
|
+
if (typeof sessionId !== 'string' || !store.has(sessionId))
|
|
239
|
+
return undefined;
|
|
240
|
+
let child;
|
|
241
|
+
try {
|
|
242
|
+
child = deps.lookupChild(sessionId);
|
|
243
|
+
}
|
|
244
|
+
catch {
|
|
245
|
+
return undefined;
|
|
246
|
+
}
|
|
247
|
+
if (!child || child.session !== session)
|
|
248
|
+
return undefined;
|
|
249
|
+
// Registry presence is not liveness: a continuable child stays
|
|
250
|
+
// registered while idle. Only a running child upgrades a discovered row
|
|
251
|
+
// and earns a transcript card; the session link itself is established
|
|
252
|
+
// regardless so attribution heals the moment it starts streaming.
|
|
253
|
+
const running = child.status === 'running';
|
|
254
|
+
if (running && store.get(sessionId)?.status === 'unknown')
|
|
255
|
+
store.patch(sessionId, { status: 'running' });
|
|
256
|
+
store.linkSession(sessionId, session);
|
|
257
|
+
if (running)
|
|
258
|
+
cardedIds.add(sessionId);
|
|
259
|
+
return sessionId;
|
|
260
|
+
};
|
|
261
|
+
/** Register a discovered child and, when the agents registry currently
|
|
262
|
+
* holds it RUNNING (idle continuable children stay registered without
|
|
263
|
+
* being live), bind its session so streaming state flows. */
|
|
264
|
+
const discover = (childId, info) => {
|
|
265
|
+
let child;
|
|
266
|
+
try {
|
|
267
|
+
child = deps.lookupChild(childId);
|
|
268
|
+
}
|
|
269
|
+
catch {
|
|
270
|
+
child = undefined;
|
|
271
|
+
}
|
|
272
|
+
const running = child?.status === 'running';
|
|
273
|
+
store.onDiscovered(childId, {
|
|
274
|
+
label: info.label,
|
|
275
|
+
childCreatedAt: info.childCreatedAt,
|
|
276
|
+
live: running,
|
|
277
|
+
provider: info.provider ?? child?.options?.provider,
|
|
278
|
+
model: child?.options?.model,
|
|
279
|
+
});
|
|
280
|
+
if (info.runId !== undefined)
|
|
281
|
+
store.patch(childId, { runId: info.runId });
|
|
282
|
+
if (child?.session)
|
|
283
|
+
store.linkSession(childId, child.session);
|
|
284
|
+
if (running)
|
|
285
|
+
cardedIds.add(childId);
|
|
286
|
+
};
|
|
287
|
+
/** Durable session events stamp their own wall time; a fold from the log
|
|
288
|
+
* must not date a historical child at resume time. */
|
|
289
|
+
const eventTime = (event) => {
|
|
290
|
+
const time = event?.time;
|
|
291
|
+
return typeof time === 'number' ? time : undefined;
|
|
292
|
+
};
|
|
293
|
+
/** Parent-session durable discovery events, live or folded from the log. */
|
|
294
|
+
const onParentEvent = (event, historical = false) => {
|
|
295
|
+
if (!event || typeof event !== 'object')
|
|
296
|
+
return;
|
|
297
|
+
const ev = event;
|
|
298
|
+
const data = ev.data ?? {};
|
|
299
|
+
const childId = typeof data.childId === 'string' ? data.childId : undefined;
|
|
300
|
+
if (ev.type === 'tool/call') {
|
|
301
|
+
if (!historical && typeof data.name === 'string' && isSubagentToolName(data.name) && typeof data.arguments === 'string') {
|
|
302
|
+
try {
|
|
303
|
+
const args = JSON.parse(data.arguments);
|
|
304
|
+
if (typeof args.description === 'string' && args.description)
|
|
305
|
+
pendingTaskDescriptions.push(args.description);
|
|
306
|
+
}
|
|
307
|
+
catch { /* malformed arguments do not describe a child */ }
|
|
308
|
+
}
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
311
|
+
else if (ev.type === 'subagent/catalog') {
|
|
312
|
+
if (childId === undefined)
|
|
313
|
+
return;
|
|
314
|
+
discover(childId, {
|
|
315
|
+
label: typeof data.label === 'string' ? data.label : undefined,
|
|
316
|
+
childCreatedAt: typeof data.childCreatedAt === 'number' ? data.childCreatedAt : eventTime(event),
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
else if (ev.type === 'tool-workflow/agent-start') {
|
|
320
|
+
if (childId === undefined || typeof data.runId !== 'string' || typeof data.seq !== 'number')
|
|
321
|
+
return;
|
|
322
|
+
const memberKey = `${data.runId}:${data.seq}`;
|
|
323
|
+
workflowMembers.set(memberKey, childId);
|
|
324
|
+
discover(childId, {
|
|
325
|
+
label: typeof data.label === 'string' ? data.label : undefined,
|
|
326
|
+
childCreatedAt: eventTime(event),
|
|
327
|
+
provider: 'workflow',
|
|
328
|
+
runId: memberKey,
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
else if (ev.type === 'tool-workflow/agent-end') {
|
|
332
|
+
if (typeof data.runId !== 'string' || typeof data.seq !== 'number')
|
|
333
|
+
return;
|
|
334
|
+
const agentId = workflowMembers.get(`${data.runId}:${data.seq}`);
|
|
335
|
+
if (agentId === undefined)
|
|
336
|
+
return;
|
|
337
|
+
// The durable end event stamps the historical wall time; folding it
|
|
338
|
+
// must close the member at that time, not at fold/resume time.
|
|
339
|
+
const endedAt = eventTime(event);
|
|
340
|
+
if (data.outcome === 'failed')
|
|
341
|
+
store.onFailed(agentId, 'failed', endedAt);
|
|
342
|
+
else if (data.outcome === 'cancelled')
|
|
343
|
+
store.onCancelled(agentId, 'cancelled', undefined, endedAt);
|
|
344
|
+
else
|
|
345
|
+
store.onCompleted(agentId, undefined, undefined, endedAt);
|
|
346
|
+
}
|
|
347
|
+
else {
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
if (!historical) {
|
|
351
|
+
syncNow();
|
|
352
|
+
getState().emit();
|
|
353
|
+
}
|
|
354
|
+
};
|
|
355
|
+
/** Seed the dashboard from the durable parent log at bind/resume: catalog
|
|
356
|
+
* children and workflow members survive a restart. Historical children the
|
|
357
|
+
* registry no longer holds stay card-less (dashboard-only, `unknown`). */
|
|
358
|
+
const bootstrapFromLog = (events) => {
|
|
359
|
+
if (!Array.isArray(events))
|
|
360
|
+
return;
|
|
361
|
+
try {
|
|
362
|
+
for (const event of events)
|
|
363
|
+
onParentEvent(event, true);
|
|
364
|
+
}
|
|
365
|
+
catch { /* bootstrap is best-effort discovery; live events remain authoritative */ }
|
|
366
|
+
syncNow();
|
|
367
|
+
};
|
|
79
368
|
const onStart = (info) => {
|
|
80
369
|
if (!info?.id)
|
|
81
370
|
return;
|
|
@@ -84,8 +373,10 @@ export function createSubagentProjection(getState, deps) {
|
|
|
84
373
|
store.onSpawned(info.id, info.provider || 'subagent', info.provider, {
|
|
85
374
|
runId: info.runId ?? info.id,
|
|
86
375
|
local: info.local,
|
|
87
|
-
|
|
376
|
+
startedAt: Date.now(),
|
|
377
|
+
description: pendingTaskDescriptions.shift(),
|
|
88
378
|
});
|
|
379
|
+
cardedIds.add(info.id);
|
|
89
380
|
try {
|
|
90
381
|
const child = deps.lookupChild(info.id);
|
|
91
382
|
if (child?.session) {
|
|
@@ -102,6 +393,16 @@ export function createSubagentProjection(getState, deps) {
|
|
|
102
393
|
const onEnd = (info) => {
|
|
103
394
|
if (!info?.id)
|
|
104
395
|
return;
|
|
396
|
+
// Host ordering guarantee: a continuable epoch's `subagent/end` may be
|
|
397
|
+
// published AFTER the next epoch's `subagent/start` already arrived (the
|
|
398
|
+
// parent delivery runs before the ownership release). An end that names a
|
|
399
|
+
// runId this row no longer holds belongs to that earlier epoch — the new
|
|
400
|
+
// run must keep running.
|
|
401
|
+
if (info.runId !== undefined) {
|
|
402
|
+
const current = store.get(info.id);
|
|
403
|
+
if (current?.runId !== undefined && current.runId !== info.runId)
|
|
404
|
+
return;
|
|
405
|
+
}
|
|
105
406
|
const output = Array.isArray(info.lastAssistantMessage)
|
|
106
407
|
? info.lastAssistantMessage.map(block => typeof block === 'object' && block !== null && 'text' in block ? String(block.text ?? '') : '').filter(Boolean).join('\n')
|
|
107
408
|
: '';
|
|
@@ -135,6 +436,6 @@ export function createSubagentProjection(getState, deps) {
|
|
|
135
436
|
},
|
|
136
437
|
};
|
|
137
438
|
const dropRows = () => { streamDirty = false; rowsByAgentId.clear(); };
|
|
138
|
-
const reset = () => { dropRows(); pendingTaskDescriptions.length = 0; store.reset(); getState().subagents = []; };
|
|
139
|
-
return { store, control, pendingTaskDescriptions, onSessionEvent, onStreamFrame, onStart, onEnd, syncNow, flush, dropRows, reset };
|
|
439
|
+
const reset = () => { dropRows(); cardedIds.clear(); workflowMembers.clear(); pendingTaskDescriptions.length = 0; store.reset(); getState().subagents = []; getState().subagentCost = []; };
|
|
440
|
+
return { store, control, pendingTaskDescriptions, onSessionEvent, onStreamFrame, onParentEvent, bootstrapFromLog, onStart, onEnd, syncNow, flush, dropRows, reset };
|
|
140
441
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { ChannelUi } from '../../adapter/ports/channel-ui.js';
|
|
2
2
|
import type { ChatRow, ToolCallView, ToolResultView, NotificationItem, TodoPanelItem, PendingMessage } from '../../adapter/ports/channel-view.js';
|
|
3
|
-
export type { ChatRow, ToolRow, ToolCallView, ToolFileDiff, ToolResultView, SubagentRow, JobRow, TokenUsage, TokenBucket,
|
|
3
|
+
export type { ChatRow, ToolRow, ToolCallView, ToolFileDiff, ToolResultView, SubagentRow, JobRow, TokenUsage, TokenBucket, CostTokenBuckets, SessionCostByModel, SubagentCostEntry, NotificationItem, ChannelGoal, TodoPanelItem, LoadedContext, LoadedContextEntry, LoadedContextFile, LoadedContextSkill, LoadedContextTool, PendingMessage, SubagentControl, JobControl, StagedImageInput, StagedImageAdjustment, StagedImageHandle, ComposerImageRef, ComposerSubmission, ExternalCommandOutcome, TranscriptImage, ResumeResult, EffortOption, PermissionPresetSnapshot, PermissionPresetAvailability, PermissionPresetOption, PermissionPresetCurrent, PresetOption, SkillInfo, CredentialStatus, AgentViewRow, AgentViewStatus, AgentViewDispatchResult, BackgroundResult } from '../../adapter/ports/channel-view.js';
|
|
4
4
|
import { type ContentBlock, type StreamChunk } from '@deepseek-ai/dsh-llm';
|
|
5
5
|
import { type SessionEvent } from '@deepseek-ai/dsh-session';
|
|
6
6
|
import { type BackgroundJobState } from '../jobs.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mCAAmC,CAAA;AAClE,OAAO,KAAK,EAAE,OAAO,EAAW,YAAY,EAAgB,cAAc,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/channel/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,6 @@ export declare function createChannel(ctx: Context, initialAgent: Agent, options
|
|
|
18
18
|
export type { ChannelLaunchOptions } from './channel/state.js';
|
|
19
19
|
export { expandMentions } from './channel/mentions.js';
|
|
20
20
|
export { sessionCwdMatches } from './channel/paths.js';
|
|
21
|
-
export type {
|
|
21
|
+
export type { AgentViewDispatchResult, AgentViewRow, AgentViewStatus, BackgroundResult, Channel, ChannelGoal, ChannelState, ChatRow, ComposerImageRef, ComposerSubmission, CredentialStatus, EffortOption, ExternalCommandOutcome, JobControl, JobRow, LoadedContext, LoadedContextEntry, LoadedContextFile, LoadedContextSkill, LoadedContextTool, MentionAttachments, MentionExpansion, MentionFs, NotificationItem, PendingMessage, PermissionPresetAvailability, PermissionPresetCurrent, PermissionPresetOption, PermissionPresetSnapshot, PresetOption, ResumeResult, SkillInfo, StagedImageHandle, StagedImageInput, SubagentControl, SubagentRow, TodoPanelItem, TokenBucket, TokenUsage, ToolCallView, ToolFileDiff, ToolResultView, ToolRow, ToolViewPresenter, TranscriptImage } from './channel/types.js';
|
|
22
22
|
export { emptyTokenUsage } from './channel/usage.js';
|
|
23
23
|
//# sourceMappingURL=channel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/channel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../../src/dsh-adapter/channel.ts"],"names":[],"mappings":"AASA,OAAO,EAA4B,KAAK,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AA6BxF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAA;AAClD,OAAO,EAAE,KAAK,KAAK,EAAqE,MAAM,wBAAwB,CAAA;AAyCtH,OAAO,KAAK,EAAyD,YAAY,EAA8T,MAAM,oBAAoB,CAAA;AAgCza,YAAY,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAkBnD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,OAAO,EACZ,YAAY,EAAE,KAAK,EACnB,OAAO,EAAE,oBAAoB,GAC5B,YAAY,CAUd;AA07BD,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtD,YAAY,EAAE,uBAAuB,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,YAAY,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,SAAS,EAAE,gBAAgB,EAAE,cAAc,EAAE,4BAA4B,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,wBAAwB,EAAE,YAAY,EAAE,YAAY,EAAE,SAAS,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,eAAe,EAAE,WAAW,EAAE,aAAa,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACrxB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { createSessionTreeReader } from './channel/session-tree.js';
|
|
2
2
|
import { createInputDelivery } from './channel/input-delivery.js';
|
|
3
3
|
import { createChannelBinding } from './channel/binding.js';
|
|
4
|
-
import { createChannelActivity } from './channel/activity.js';
|
|
5
4
|
import { createCommandCompletions } from './channel/command-completions.js';
|
|
6
5
|
import { createLocalActions } from './channel/local-actions.js';
|
|
7
6
|
import { createDetachedHandleFactory } from './channel/lifetime-resources.js';
|
|
@@ -24,6 +23,7 @@ import { createModelSwitchAction } from './channel/model-switch.js';
|
|
|
24
23
|
import { createFileActions } from './channel/file-actions.js';
|
|
25
24
|
import { createReportActions } from './channel/reports.js';
|
|
26
25
|
import { createSessionMetadataActions } from './channel/session-metadata.js';
|
|
26
|
+
import { createForeignBrowser } from './migrate/browse.js';
|
|
27
27
|
import { createAgentViewProjection } from './channel/agent-view-projection.js';
|
|
28
28
|
import { createJobProjection } from './channel/job-projection.js';
|
|
29
29
|
import { createExternalCommandInvoker } from './channel/external-commands.js';
|
|
@@ -151,9 +151,8 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
|
|
|
151
151
|
return agents?.get(id);
|
|
152
152
|
},
|
|
153
153
|
});
|
|
154
|
-
|
|
154
|
+
owner.own(() => subagentProjection.dispose());
|
|
155
155
|
const subagentControl = subagentProjection.control;
|
|
156
|
-
const pendingTaskDescriptions = subagentProjection.pendingTaskDescriptions;
|
|
157
156
|
// Job projection owns registry callbacks and transcript rows. The optional
|
|
158
157
|
// service attachment has no authority after its injected lifetime ends.
|
|
159
158
|
const jobProjection = createJobProjection(() => state, {
|
|
@@ -365,6 +364,7 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
|
|
|
365
364
|
// installed after ChannelState initialization below.
|
|
366
365
|
let settleManualCompaction;
|
|
367
366
|
let compactManualSession;
|
|
367
|
+
let cancelManualCompaction;
|
|
368
368
|
let forkSessionAction;
|
|
369
369
|
let rewindToAction;
|
|
370
370
|
let rewindToNodeAction;
|
|
@@ -397,15 +397,19 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
|
|
|
397
397
|
emitStream: emitter.emitStream,
|
|
398
398
|
...createSettingsHosts(ctx, owner.assertActive),
|
|
399
399
|
...createPreferences(() => state),
|
|
400
|
+
/** Mount-owned settings namespace: the section registers under it, so this
|
|
401
|
+
* is the only ns whose section carries the TUI's user layer. */
|
|
402
|
+
settingsNamespace: options.settingsNs ?? 'dsh-tui',
|
|
400
403
|
get autoRecapOnOpen() {
|
|
401
404
|
const settings = ctx.get('settings');
|
|
402
405
|
if (settings === undefined)
|
|
403
406
|
return false;
|
|
404
|
-
const ns = settings.describe({ redactSecrets: true }).find(entry => entry.ns ===
|
|
407
|
+
const ns = settings.describe({ redactSecrets: true }).find(entry => entry.ns === state.settingsNamespace);
|
|
405
408
|
return ns?.value?.recapOnOpen !== false;
|
|
406
409
|
},
|
|
407
410
|
...createInitialChannelView(options, {
|
|
408
411
|
agentId: binding.agent.id,
|
|
412
|
+
sessionId: binding.agent.session.id,
|
|
409
413
|
mode: sessionModes[0],
|
|
410
414
|
cwdDescription: workspaceService.describe(options.cwd).description ?? options.cwd,
|
|
411
415
|
}),
|
|
@@ -556,6 +560,7 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
|
|
|
556
560
|
runtime: adapterRuntime,
|
|
557
561
|
grantStore: currentGrantStore,
|
|
558
562
|
});
|
|
563
|
+
const foreignBrowser = createForeignBrowser(() => ctx.get('sessionPersistence'), owner.signal);
|
|
559
564
|
sessionMetadataActions = createSessionMetadataActions(ctx, {
|
|
560
565
|
owner,
|
|
561
566
|
binding,
|
|
@@ -602,7 +607,7 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
|
|
|
602
607
|
};
|
|
603
608
|
const bash = ctx.get('shell');
|
|
604
609
|
const projector = createChannelProjection(state, {
|
|
605
|
-
agent: () => binding.agent, rowIds, resetContextWarning,
|
|
610
|
+
agent: () => binding.agent, rowIds, resetContextWarning, jobs: jobStore, inputConvergence,
|
|
606
611
|
checkContextWarning, notify: (...args) => notify(...args),
|
|
607
612
|
tools: ctx.get('tools'), renderer: rendererRuntime,
|
|
608
613
|
attachments: () => ctx.get('attachments'),
|
|
@@ -622,8 +627,15 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
|
|
|
622
627
|
shell: bash,
|
|
623
628
|
notify,
|
|
624
629
|
});
|
|
625
|
-
// Replay the durable transcript first, then follow live events.
|
|
626
|
-
|
|
630
|
+
// Replay the durable transcript first, then follow live events. The same
|
|
631
|
+
// seed re-populates the subagent dashboard's durable discovery facts
|
|
632
|
+
// (`subagent/catalog`, workflow member edges) so a resumed session keeps
|
|
633
|
+
// its dispatched-children history (issue #966).
|
|
634
|
+
const replaySessionSeed = (events) => {
|
|
635
|
+
projector.replayEvents(events);
|
|
636
|
+
subagentProjection.bootstrapFromLog(events);
|
|
637
|
+
};
|
|
638
|
+
replaySessionSeed(snapshotLiveSessionEvents(binding.agent.session));
|
|
627
639
|
projector.settleStreaming();
|
|
628
640
|
// Attached to an idle agent: any replayed turn/start belongs to a previous
|
|
629
641
|
// session run, so the spinner must not come up on boot.
|
|
@@ -631,8 +643,6 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
|
|
|
631
643
|
state.cancelPending = false;
|
|
632
644
|
state.status = binding.agent.status;
|
|
633
645
|
state.emit();
|
|
634
|
-
// The activity sidecar owns its tracker and interval; it never projects transcript facts.
|
|
635
|
-
const activity = createChannelActivity(ctx, state, owner, options.activity !== false);
|
|
636
646
|
modelActions = createModelActions(ctx, state, {
|
|
637
647
|
owner,
|
|
638
648
|
binding,
|
|
@@ -658,7 +668,7 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
|
|
|
658
668
|
resetProjector: () => projector.reset(),
|
|
659
669
|
resetSubagents: subagentProjection.reset,
|
|
660
670
|
resetJobs: resetJobProjection,
|
|
661
|
-
replay:
|
|
671
|
+
replay: replaySessionSeed,
|
|
662
672
|
settleReplay: projector.settleStreaming,
|
|
663
673
|
bindAgent: () => bindAgent(),
|
|
664
674
|
refreshCommands: refreshCommandList,
|
|
@@ -666,7 +676,6 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
|
|
|
666
676
|
refreshSkillCommands,
|
|
667
677
|
clearStagedImages,
|
|
668
678
|
dropModelCompletion: () => modelActions.dropModelNodeCache(),
|
|
669
|
-
onModelSwitch: model => activity.onModelSwitch(model),
|
|
670
679
|
notify,
|
|
671
680
|
});
|
|
672
681
|
workspaceActions = createWorkspaceActions(state, {
|
|
@@ -695,7 +704,7 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
|
|
|
695
704
|
owner,
|
|
696
705
|
binding,
|
|
697
706
|
state,
|
|
698
|
-
|
|
707
|
+
seedActivity: options.seedActivity,
|
|
699
708
|
inputConvergence,
|
|
700
709
|
selection,
|
|
701
710
|
modelActions,
|
|
@@ -713,7 +722,7 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
|
|
|
713
722
|
resetProjector: () => projector.reset(),
|
|
714
723
|
resetSubagents: subagentProjection.reset,
|
|
715
724
|
resetJobs: resetJobProjection,
|
|
716
|
-
replay:
|
|
725
|
+
replay: replaySessionSeed,
|
|
717
726
|
settleReplay: projector.settleStreaming,
|
|
718
727
|
bindAgent,
|
|
719
728
|
refreshCommands: refreshCommandList,
|
|
@@ -729,8 +738,10 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
|
|
|
729
738
|
rowIds,
|
|
730
739
|
resetProjector: () => projector.reset(),
|
|
731
740
|
resetSubagents: subagentProjection.reset,
|
|
741
|
+
restoreSubagents: subagentProjection.restore,
|
|
742
|
+
parkSubagents: subagentProjection.park,
|
|
732
743
|
resetJobs: resetJobProjection,
|
|
733
|
-
replay:
|
|
744
|
+
replay: replaySessionSeed,
|
|
734
745
|
settleReplay: projector.settleStreaming,
|
|
735
746
|
describeWorkspace: cwd => workspaceService.describe(cwd),
|
|
736
747
|
refreshGitBranch: () => refreshGitBranch(),
|
|
@@ -756,12 +767,13 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
|
|
|
756
767
|
// a target already running in this process is re-attached rather than
|
|
757
768
|
// resumed twice from its log (which would mount one log in two places).
|
|
758
769
|
adoptLive: target => adoptLiveAgent(target),
|
|
770
|
+
parkSubagents: subagentProjection.park,
|
|
759
771
|
backgroundHandles,
|
|
760
772
|
rowIds,
|
|
761
773
|
resetProjector: () => projector.reset(),
|
|
762
774
|
resetSubagents: subagentProjection.reset,
|
|
763
775
|
resetJobs: resetJobProjection,
|
|
764
|
-
replay:
|
|
776
|
+
replay: replaySessionSeed,
|
|
765
777
|
settleReplay: projector.settleStreaming,
|
|
766
778
|
describeWorkspace: cwd => workspaceService.describe(cwd),
|
|
767
779
|
refreshGitBranch: () => refreshGitBranch(),
|
|
@@ -808,10 +820,10 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
|
|
|
808
820
|
agent: () => binding.agent,
|
|
809
821
|
withDecisionPending,
|
|
810
822
|
notify,
|
|
811
|
-
onComplete: () => activity.onCompact(),
|
|
812
823
|
});
|
|
813
824
|
settleManualCompaction = manualCompaction.settle;
|
|
814
825
|
compactManualSession = manualCompaction.compact;
|
|
826
|
+
cancelManualCompaction = manualCompaction.cancel;
|
|
815
827
|
backgroundCurrentAction = createBackgroundCurrentAction(ctx, state, {
|
|
816
828
|
configuredPreset: options.configuredPreset,
|
|
817
829
|
configuredProvider: options.configuredProvider,
|
|
@@ -825,6 +837,7 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
|
|
|
825
837
|
rowIds,
|
|
826
838
|
resetProjector: () => projector.reset(),
|
|
827
839
|
resetSubagents: subagentProjection.reset,
|
|
840
|
+
parkSubagents: subagentProjection.park,
|
|
828
841
|
resetJobs: resetJobProjection,
|
|
829
842
|
refreshEffortLevels: () => modelActions.refreshEffortLevels(),
|
|
830
843
|
bindAgent,
|
|
@@ -877,8 +890,12 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
|
|
|
877
890
|
sideQuestion: sessionMetadataActions.sideQuestion,
|
|
878
891
|
listFileCandidates: fileActions.listFileCandidates,
|
|
879
892
|
listFiles: fileActions.listFiles,
|
|
893
|
+
cachedSessions: sessionMetadataActions.cachedSessions,
|
|
880
894
|
listSessions: sessionMetadataActions.listSessions,
|
|
881
895
|
previewSession: sessionMetadataActions.previewSession,
|
|
896
|
+
listForeignSources: foreignBrowser.listSources,
|
|
897
|
+
listForeignSessions: foreignBrowser.listSessions,
|
|
898
|
+
importForeignSession: foreignBrowser.importSession,
|
|
882
899
|
bindApprovalStore: agentView.bindApprovalStore,
|
|
883
900
|
agentViewRows: agentView.rows,
|
|
884
901
|
subscribeAgentView: agentView.subscribe,
|
|
@@ -895,6 +912,7 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
|
|
|
895
912
|
deleteSession: sessionMetadataActions.deleteSession,
|
|
896
913
|
renameSessionTo: sessionMetadataActions.renameSessionTo,
|
|
897
914
|
compact: compactManualSession,
|
|
915
|
+
cancelCompact: cancelManualCompaction,
|
|
898
916
|
runExternalCommand: externalCommands.invokeText,
|
|
899
917
|
runExternalCommandOutcome: externalCommands.invoke,
|
|
900
918
|
pushLocal: localActions.pushLocal,
|
|
@@ -979,8 +997,6 @@ function createChannelWithOwner(ctx, initialAgent, options, owner) {
|
|
|
979
997
|
// only show a branch for sessions this install actually used — which
|
|
980
998
|
// is exactly what the column claims.
|
|
981
999
|
noteBranch(binding.agent.session.id, branch);
|
|
982
|
-
// Feed the working line so git tools can show ` · git <branch>`.
|
|
983
|
-
activity.onGitBranch(branch);
|
|
984
1000
|
state.emit();
|
|
985
1001
|
}
|
|
986
1002
|
})
|
|
@@ -25,5 +25,5 @@
|
|
|
25
25
|
* @module @deepseek-harness-tui/dsh-tui/compat
|
|
26
26
|
*/
|
|
27
27
|
export { appendInterruptedTurnEnd, liveSessionCreateOptions, liveSessionListingFields, liveSessionOffset, sliceLiveSessionSeed, snapshotLiveSessionEvents, } from './liveSession.js';
|
|
28
|
-
export { appendSessionTitle, defaultMaxScanned, deleteSessionLog, ensureLegacySessionEventTypes, findSessionLogFile, LEGACY_SESSION_EVENT_TYPES, readPhysicalHeaderSeedLength, readPhysicalHeaderSeedLengthForSession, readSessionEventsFromFile, readSessionEventsFromLog, readSessionTitleFromLog, type SessionLogRead, sessionsRoots, } from './sessionLog.js';
|
|
28
|
+
export { appendSessionTitle, defaultMaxScanned, deleteSessionLog, ensureLegacySessionEventTypes, findSessionLogFile, LEGACY_SESSION_EVENT_TYPES, readPhysicalHeaderSeedLength, readPhysicalHeaderSeedLengthForSession, readSessionEventsFromFile, readSessionEventsFromLog, readSessionTitleFromLog, type SessionLogRead, sessionsRoots, userTitleData, } from './sessionLog.js';
|
|
29
29
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/compat/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,wBAAwB,EACxB,iBAAiB,EACjB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,6BAA6B,EAC7B,kBAAkB,EAClB,0BAA0B,EAC1B,4BAA4B,EAC5B,sCAAsC,EACtC,yBAAyB,EACzB,wBAAwB,EACxB,uBAAuB,EACvB,KAAK,cAAc,EACnB,aAAa,GACd,MAAM,iBAAiB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/dsh-adapter/compat/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,wBAAwB,EACxB,iBAAiB,EACjB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,kBAAkB,CAAA;AACzB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,6BAA6B,EAC7B,kBAAkB,EAClB,0BAA0B,EAC1B,4BAA4B,EAC5B,sCAAsC,EACtC,yBAAyB,EACzB,wBAAwB,EACxB,uBAAuB,EACvB,KAAK,cAAc,EACnB,aAAa,EACb,aAAa,GACd,MAAM,iBAAiB,CAAA"}
|