@deepseek-harness-tui/dsh-tui 0.10.2 → 0.11.1
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 +175 -123
- package/bin/dsh-tui.js +748 -22
- package/cordis.patch.yml +42 -13
- package/cordis.yml +5 -2
- 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/session-projection.d.ts.map +1 -1
- package/lib/types/adapter/channel/session-projection.js +2 -0
- 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 +4 -1
- package/lib/types/adapter/channel/ui-policy.d.ts.map +1 -1
- package/lib/types/adapter/channel/ui-policy.js +6 -2
- package/lib/types/adapter/kernel/host-facade.d.ts.map +1 -1
- package/lib/types/adapter/kernel/host-facade.js +1 -0
- package/lib/types/adapter/kernel/replay.d.ts.map +1 -1
- package/lib/types/adapter/kernel/replay.js +3 -0
- package/lib/types/adapter/kernel/runtime.d.ts.map +1 -1
- package/lib/types/adapter/kernel/runtime.js +2 -0
- package/lib/types/adapter/kernel/slices/workspace.d.ts.map +1 -1
- package/lib/types/adapter/kernel/slices/workspace.js +1 -0
- package/lib/types/adapter/ports/channel-ui.d.ts +29 -5
- package/lib/types/adapter/ports/channel-ui.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-view.d.ts +66 -12
- package/lib/types/adapter/ports/channel-view.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-workspace.d.ts +23 -0
- package/lib/types/adapter/ports/channel-workspace.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/adapter/ports/workspace.d.ts +2 -0
- package/lib/types/adapter/ports/workspace.d.ts.map +1 -1
- package/lib/types/adapter/upstream/workspace-driver.d.ts.map +1 -1
- package/lib/types/adapter/upstream/workspace-driver.js +10 -2
- package/lib/types/commands.d.ts.map +1 -1
- package/lib/types/commands.js +1 -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/ContextBarView.d.ts +15 -7
- package/lib/types/components/ContextBarView.d.ts.map +1 -1
- package/lib/types/components/ContextBarView.js +26 -22
- package/lib/types/components/ImagePreviewOverlay.d.ts.map +1 -1
- package/lib/types/components/ImagePreviewOverlay.js +11 -5
- package/lib/types/components/Markdown.d.ts +11 -1
- package/lib/types/components/Markdown.d.ts.map +1 -1
- package/lib/types/components/Markdown.js +20 -2
- package/lib/types/components/MermaidDiagram.d.ts +13 -0
- package/lib/types/components/MermaidDiagram.d.ts.map +1 -0
- package/lib/types/components/MermaidDiagram.js +61 -0
- package/lib/types/components/MessageList.d.ts +26 -1
- package/lib/types/components/MessageList.d.ts.map +1 -1
- package/lib/types/components/MessageList.js +74 -8
- package/lib/types/components/PageMargin.d.ts +1 -1
- package/lib/types/components/PromptInput.d.ts +37 -1
- package/lib/types/components/PromptInput.d.ts.map +1 -1
- package/lib/types/components/PromptInput.js +291 -30
- package/lib/types/components/ScrollbarGutter.d.ts +20 -5
- package/lib/types/components/ScrollbarGutter.d.ts.map +1 -1
- package/lib/types/components/ScrollbarGutter.js +88 -10
- package/lib/types/components/SplitDiffView.d.ts.map +1 -1
- package/lib/types/components/SplitDiffView.js +2 -1
- package/lib/types/components/StreamingMarkdown.d.ts.map +1 -1
- package/lib/types/components/StreamingMarkdown.js +30 -28
- 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/Tooltip.d.ts.map +1 -1
- package/lib/types/components/Tooltip.js +45 -7
- 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/messages/AssistantThinkingMessage.d.ts +2 -1
- package/lib/types/components/messages/AssistantThinkingMessage.d.ts.map +1 -1
- package/lib/types/components/messages/AssistantThinkingMessage.js +2 -1
- 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 +30 -26
- package/lib/types/components/messages/UserPromptMessage.d.ts.map +1 -1
- package/lib/types/components/messages/UserPromptMessage.js +5 -7
- package/lib/types/components/messages/useImageInspection.d.ts.map +1 -1
- package/lib/types/components/messages/useImageInspection.js +19 -9
- package/lib/types/components/promptDraftCache.d.ts +102 -0
- package/lib/types/components/promptDraftCache.d.ts.map +1 -0
- package/lib/types/components/promptDraftCache.js +76 -0
- package/lib/types/components/questions/AskUserQuestionPanel.d.ts +17 -1
- package/lib/types/components/questions/AskUserQuestionPanel.d.ts.map +1 -1
- package/lib/types/components/questions/AskUserQuestionPanel.js +40 -7
- package/lib/types/components/questions/QuestionMinimizedBar.d.ts +12 -0
- package/lib/types/components/questions/QuestionMinimizedBar.d.ts.map +1 -0
- package/lib/types/components/questions/QuestionMinimizedBar.js +43 -0
- package/lib/types/components/sessions/SessionListRow.d.ts +23 -1
- package/lib/types/components/sessions/SessionListRow.d.ts.map +1 -1
- package/lib/types/components/sessions/SessionListRow.js +52 -5
- package/lib/types/components/workspaces/HomeWorkspaceRow.d.ts +49 -0
- package/lib/types/components/workspaces/HomeWorkspaceRow.d.ts.map +1 -0
- package/lib/types/components/workspaces/HomeWorkspaceRow.js +50 -0
- 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/bundled-presets.d.ts +10 -0
- package/lib/types/dsh-adapter/bundled-presets.d.ts.map +1 -0
- package/lib/types/dsh-adapter/bundled-presets.js +80 -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 +3 -0
- package/lib/types/dsh-adapter/channel/agent-view-projection.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/agent-view-projection.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/agent-view-projection.js +19 -2
- package/lib/types/dsh-adapter/channel/background-action.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/background-action.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/background-action.js +53 -29
- package/lib/types/dsh-adapter/channel/binding-events.d.ts +8 -6
- package/lib/types/dsh-adapter/channel/binding-events.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/binding-events.js +5 -4
- package/lib/types/dsh-adapter/channel/binding.d.ts +19 -2
- package/lib/types/dsh-adapter/channel/binding.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/binding.js +78 -18
- package/lib/types/dsh-adapter/channel/compaction.d.ts +0 -1
- package/lib/types/dsh-adapter/channel/compaction.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/compaction.js +0 -2
- package/lib/types/dsh-adapter/channel/composer-images.d.ts +5 -0
- package/lib/types/dsh-adapter/channel/composer-images.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/composer-images.js +105 -6
- package/lib/types/dsh-adapter/channel/context-bookkeeping.d.ts +8 -0
- package/lib/types/dsh-adapter/channel/context-bookkeeping.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/context-bookkeeping.js +3 -2
- package/lib/types/dsh-adapter/channel/ide-selection.d.ts +58 -0
- package/lib/types/dsh-adapter/channel/ide-selection.d.ts.map +1 -0
- package/lib/types/dsh-adapter/channel/ide-selection.js +226 -0
- package/lib/types/dsh-adapter/channel/input-delivery.d.ts +6 -1
- package/lib/types/dsh-adapter/channel/input-delivery.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/input-delivery.js +9 -1
- package/lib/types/dsh-adapter/channel/local-actions.d.ts +3 -19
- package/lib/types/dsh-adapter/channel/local-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/local-actions.js +2 -1
- package/lib/types/dsh-adapter/channel/model-actions.d.ts +4 -1
- package/lib/types/dsh-adapter/channel/model-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/model-actions.js +82 -6
- 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 +49 -31
- package/lib/types/dsh-adapter/channel/projection.d.ts +4 -0
- package/lib/types/dsh-adapter/channel/projection.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/projection.js +29 -19
- package/lib/types/dsh-adapter/channel/reports.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/reports.js +4 -12
- 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-fork.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-fork.js +26 -2
- package/lib/types/dsh-adapter/channel/session-live-adoption.d.ts +4 -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 +2 -0
- package/lib/types/dsh-adapter/channel/session-metadata.d.ts +10 -0
- package/lib/types/dsh-adapter/channel/session-metadata.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-metadata.js +6 -4
- 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 +0 -1
- package/lib/types/dsh-adapter/channel/session-resume.d.ts +12 -3
- package/lib/types/dsh-adapter/channel/session-resume.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-resume.js +292 -94
- package/lib/types/dsh-adapter/channel/session-rewind.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-rewind.js +34 -16
- package/lib/types/dsh-adapter/channel/session-tree-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-tree-actions.js +19 -3
- package/lib/types/dsh-adapter/channel/settings-host.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/settings-host.js +4 -3
- package/lib/types/dsh-adapter/channel/state.d.ts +6 -1
- package/lib/types/dsh-adapter/channel/state.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/state.js +3 -3
- package/lib/types/dsh-adapter/channel/subagent-projection.d.ts +21 -1
- package/lib/types/dsh-adapter/channel/subagent-projection.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/subagent-projection.js +173 -6
- package/lib/types/dsh-adapter/channel/transcript.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/transcript.js +6 -12
- package/lib/types/dsh-adapter/channel/types.d.ts +6 -1
- package/lib/types/dsh-adapter/channel/types.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/workspace-actions.d.ts +4 -1
- package/lib/types/dsh-adapter/channel/workspace-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/workspace-actions.js +41 -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 +82 -20
- 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 +15 -0
- package/lib/types/dsh-adapter/compat/messages.d.ts.map +1 -0
- package/lib/types/dsh-adapter/compat/messages.js +15 -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 +35 -0
- package/lib/types/dsh-adapter/compat/settings.d.ts.map +1 -0
- package/lib/types/dsh-adapter/compat/settings.js +57 -0
- package/lib/types/dsh-adapter/compat/shell.d.ts +25 -0
- package/lib/types/dsh-adapter/compat/shell.d.ts.map +1 -0
- package/lib/types/dsh-adapter/compat/shell.js +11 -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 +17 -6
- package/lib/types/dsh-adapter/ide-channel.d.ts +224 -0
- package/lib/types/dsh-adapter/ide-channel.d.ts.map +1 -0
- package/lib/types/dsh-adapter/ide-channel.js +556 -0
- package/lib/types/dsh-adapter/index.d.ts +18 -3
- package/lib/types/dsh-adapter/index.d.ts.map +1 -1
- package/lib/types/dsh-adapter/index.js +32 -5
- package/lib/types/dsh-adapter/plugin.d.ts +4 -1
- package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
- package/lib/types/dsh-adapter/plugin.js +197 -49
- package/lib/types/dsh-adapter/preset-resolution.d.ts +8 -0
- package/lib/types/dsh-adapter/preset-resolution.d.ts.map +1 -1
- package/lib/types/dsh-adapter/preset-resolution.js +10 -0
- package/lib/types/dsh-adapter/session-mount-heartbeat.d.ts +53 -0
- package/lib/types/dsh-adapter/session-mount-heartbeat.d.ts.map +1 -0
- package/lib/types/dsh-adapter/session-mount-heartbeat.js +100 -0
- package/lib/types/dsh-adapter/sessionTree.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sessionTree.js +3 -2
- 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/subagents.d.ts +16 -3
- package/lib/types/dsh-adapter/subagents.d.ts.map +1 -1
- package/lib/types/dsh-adapter/subagents.js +92 -29
- package/lib/types/dsh-adapter/workspaces.d.ts +46 -3
- package/lib/types/dsh-adapter/workspaces.d.ts.map +1 -1
- package/lib/types/dsh-adapter/workspaces.js +116 -0
- package/lib/types/effortPrefs.d.ts +15 -3
- package/lib/types/effortPrefs.d.ts.map +1 -1
- package/lib/types/effortPrefs.js +37 -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/homePrefs.d.ts +15 -0
- package/lib/types/homePrefs.d.ts.map +1 -0
- package/lib/types/homePrefs.js +53 -0
- package/lib/types/i18n.d.ts +347 -297
- package/lib/types/i18n.d.ts.map +1 -1
- package/lib/types/i18n.js +133 -85
- package/lib/types/ink/colorize.d.ts +10 -0
- package/lib/types/ink/colorize.d.ts.map +1 -1
- package/lib/types/ink/colorize.js +21 -0
- package/lib/types/ink/components/ScrollBox.d.ts.map +1 -1
- package/lib/types/ink/components/ScrollBox.js +12 -1
- package/lib/types/ink/dom.d.ts +1 -0
- package/lib/types/ink/dom.d.ts.map +1 -1
- package/lib/types/ink/hooks/use-copy-on-select.d.ts +5 -1
- package/lib/types/ink/hooks/use-copy-on-select.d.ts.map +1 -1
- package/lib/types/ink/hooks/use-copy-on-select.js +15 -1
- package/lib/types/ink/ink.d.ts.map +1 -1
- package/lib/types/ink/ink.js +36 -1
- 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 +10 -1
- package/lib/types/ink/output.d.ts.map +1 -1
- package/lib/types/ink/output.js +109 -17
- package/lib/types/ink/render-border.d.ts +6 -1
- package/lib/types/ink/render-border.d.ts.map +1 -1
- package/lib/types/ink/render-border.js +25 -9
- package/lib/types/ink/render-node-to-output.d.ts.map +1 -1
- package/lib/types/ink/render-node-to-output.js +48 -6
- package/lib/types/ink/renderer.d.ts +6 -0
- package/lib/types/ink/renderer.d.ts.map +1 -1
- package/lib/types/ink/renderer.js +2 -1
- package/lib/types/ink/selection.d.ts +88 -0
- package/lib/types/ink/selection.d.ts.map +1 -1
- package/lib/types/ink/selection.js +164 -0
- package/lib/types/ink/sixel-graphics.d.ts +19 -1
- package/lib/types/ink/sixel-graphics.d.ts.map +1 -1
- package/lib/types/ink/sixel-graphics.js +124 -12
- package/lib/types/ink/terminal-image.d.ts +18 -1
- package/lib/types/ink/terminal-image.d.ts.map +1 -1
- package/lib/types/ink/terminal.d.ts +17 -0
- package/lib/types/ink/terminal.d.ts.map +1 -1
- package/lib/types/ink/terminal.js +20 -1
- package/lib/types/screens/Chat.d.ts +20 -1
- package/lib/types/screens/Chat.d.ts.map +1 -1
- package/lib/types/screens/Chat.js +296 -76
- package/lib/types/screens/SessionSupervisor.d.ts +84 -0
- package/lib/types/screens/SessionSupervisor.d.ts.map +1 -0
- package/lib/types/screens/SessionSupervisor.js +350 -0
- package/lib/types/screens/SessionTree.js +2 -2
- package/lib/types/screens/Settings.d.ts.map +1 -1
- package/lib/types/screens/Settings.js +32 -9
- package/lib/types/screens/StatusLine.d.ts +18 -1
- package/lib/types/screens/StatusLine.d.ts.map +1 -1
- package/lib/types/screens/StatusLine.js +38 -19
- package/lib/types/screens/StatusMetrics.d.ts +79 -22
- package/lib/types/screens/StatusMetrics.d.ts.map +1 -1
- package/lib/types/screens/StatusMetrics.js +153 -88
- package/lib/types/screens/sessionSupervisor/model.d.ts +83 -0
- package/lib/types/screens/sessionSupervisor/model.d.ts.map +1 -0
- package/lib/types/screens/sessionSupervisor/model.js +69 -0
- package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts +120 -0
- package/lib/types/screens/sessionSupervisor/useSessionSupervisor.d.ts.map +1 -0
- package/lib/types/screens/sessionSupervisor/useSessionSupervisor.js +593 -0
- package/lib/types/sessionMounts.d.ts +272 -0
- package/lib/types/sessionMounts.d.ts.map +1 -0
- package/lib/types/sessionMounts.js +706 -0
- package/lib/types/sessions/format.d.ts.map +1 -1
- package/lib/types/sessions/format.js +4 -1
- package/lib/types/sessions/resumeFailure.d.ts +38 -0
- package/lib/types/sessions/resumeFailure.d.ts.map +1 -0
- package/lib/types/sessions/resumeFailure.js +58 -0
- package/lib/types/terminal-utils/mermaid.d.ts +44 -0
- package/lib/types/terminal-utils/mermaid.d.ts.map +1 -0
- package/lib/types/terminal-utils/mermaid.js +83 -0
- package/lib/types/tips.d.ts.map +1 -1
- package/lib/types/tips.js +175 -19
- package/lib/types/tuiDisplayPrefs.d.ts +7 -9
- package/lib/types/tuiDisplayPrefs.d.ts.map +1 -1
- package/lib/types/tuiDisplayPrefs.js +31 -28
- package/lib/types/update.d.ts +61 -0
- package/lib/types/update.d.ts.map +1 -1
- package/lib/types/update.js +194 -0
- package/lib/types/utils/fold-long-lines.d.ts +1 -1
- package/lib/types/utils/fold-long-lines.js +1 -1
- package/lib/types/utils/imageResize.d.ts +90 -0
- package/lib/types/utils/imageResize.d.ts.map +1 -0
- package/lib/types/utils/imageResize.js +272 -0
- package/lib/types/utils/keymap.d.ts +5 -1
- package/lib/types/utils/keymap.d.ts.map +1 -1
- package/lib/types/utils/keymap.js +23 -0
- 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/lib/types/workspaces.d.ts +2 -1
- package/lib/types/workspaces.d.ts.map +1 -1
- package/lib/types/workspaces.js +1 -1
- package/node_modules/@deepseek-harness-tui/dsh-auth/package.json +10 -10
- package/package.json +126 -105
- package/presets/liangshen/.dsh-tui-managed.json +1 -1
- package/presets/liangshen/agent.cordis.yml +15 -0
- 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/screens/AgentView.d.ts +0 -23
- package/lib/types/screens/AgentView.d.ts.map +0 -1
- package/lib/types/screens/AgentView.js +0 -546
- package/lib/types/screens/SessionBrowser.d.ts +0 -42
- package/lib/types/screens/SessionBrowser.d.ts.map +0 -1
- package/lib/types/screens/SessionBrowser.js +0 -911
- 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
|
@@ -4,7 +4,9 @@ import { marked } from 'marked';
|
|
|
4
4
|
import { Box, Text } from '../ui.js';
|
|
5
5
|
import { configureMarked, formatToken, stripPromptXMLTags } from '../terminal-utils/markdown.js';
|
|
6
6
|
import { getCliHighlightPromise } from '../terminal-utils/cliHighlight.js';
|
|
7
|
+
import { isMermaidLang } from '../terminal-utils/mermaid.js';
|
|
7
8
|
import { MarkdownTable } from './MarkdownTable.js';
|
|
9
|
+
import { MermaidDiagram } from './MermaidDiagram.js';
|
|
8
10
|
// ---- token 缓存 ----
|
|
9
11
|
//
|
|
10
12
|
// marked.lexer 在组件重挂载时是最贵的开销;消息内容不可变,相同文本
|
|
@@ -73,8 +75,20 @@ function lexWithCache(content, allowCache) {
|
|
|
73
75
|
return tokens;
|
|
74
76
|
}
|
|
75
77
|
/**
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
+
* Tokens that render as their own layout node (a width-aware component)
|
|
79
|
+
* instead of joining the ANSI text run. StreamingMarkdown consults the same
|
|
80
|
+
* predicate: a standalone node has a fixed one-row gap to its neighbours
|
|
81
|
+
* rather than the newline-derived spacing of text blocks.
|
|
82
|
+
*/
|
|
83
|
+
export function isStandaloneToken(token) {
|
|
84
|
+
return token.type === 'table' || isMermaidToken(token);
|
|
85
|
+
}
|
|
86
|
+
function isMermaidToken(token) {
|
|
87
|
+
return token.type === 'code' && isMermaidLang(token.lang);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* 把 lexer 产出的 token 列表转成 React 节点序列:table 与 mermaid 块独立
|
|
91
|
+
* 渲染,其余 token 的 ANSI 文本按完整块分批拼接,只去整段首尾空白。
|
|
78
92
|
*/
|
|
79
93
|
function renderTokensToNodes(tokens, highlight, dimColor) {
|
|
80
94
|
const nodes = [];
|
|
@@ -108,6 +122,10 @@ function renderTokensToNodes(tokens, highlight, dimColor) {
|
|
|
108
122
|
flushAnsiText();
|
|
109
123
|
nodes.push(_jsx(MarkdownTable, { token: token, highlight: highlight }, nodes.length));
|
|
110
124
|
}
|
|
125
|
+
else if (isMermaidToken(token)) {
|
|
126
|
+
flushAnsiText();
|
|
127
|
+
nodes.push(_jsx(MermaidDiagram, { token: token, highlight: highlight, dimColor: dimColor }, nodes.length));
|
|
128
|
+
}
|
|
111
129
|
else {
|
|
112
130
|
ansiText += formatToken(token, 0, null, null, highlight);
|
|
113
131
|
// A top-level token boundary keeps inline formatting and code fences
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { Tokens } from 'marked';
|
|
3
|
+
import type { CliHighlight } from '../terminal-utils/cliHighlight.js';
|
|
4
|
+
type Props = {
|
|
5
|
+
token: Tokens.Code;
|
|
6
|
+
highlight: CliHighlight | null;
|
|
7
|
+
dimColor: boolean;
|
|
8
|
+
/** Override terminal width (useful for testing). */
|
|
9
|
+
forceWidth?: number;
|
|
10
|
+
};
|
|
11
|
+
export declare function MermaidDiagram({ token, highlight, dimColor, forceWidth }: Props): React.ReactNode;
|
|
12
|
+
export {};
|
|
13
|
+
//# sourceMappingURL=MermaidDiagram.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MermaidDiagram.d.ts","sourceRoot":"","sources":["../../../src/components/MermaidDiagram.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAOpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAA;AA6BrE,KAAK,KAAK,GAAG;IACX,KAAK,EAAE,MAAM,CAAC,IAAI,CAAA;IAClB,SAAS,EAAE,YAAY,GAAG,IAAI,CAAA;IAC9B,QAAQ,EAAE,OAAO,CAAA;IACjB,oDAAoD;IACpD,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB,CAAA;AAmBD,wBAAgB,cAAc,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,KAAK,GAAG,KAAK,CAAC,SAAS,CAgCjG"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { Box, Text } from '../ui.js';
|
|
4
|
+
import { useTerminalSize } from '../ink/hooks/use-terminal-size.js';
|
|
5
|
+
import { stringWidth } from '../ink/stringWidth.js';
|
|
6
|
+
import { getTheme } from '../theme.js';
|
|
7
|
+
import { useTheme } from './design-system/ThemeProvider.js';
|
|
8
|
+
import { formatToken } from '../terminal-utils/markdown.js';
|
|
9
|
+
import { getMermaidEnginePromise, paintMermaidArt, peekMermaidEngine, renderMermaid, } from '../terminal-utils/mermaid.js';
|
|
10
|
+
import { getMermaidDiagrams, subscribeMermaidDiagrams } from '../tuiDisplayPrefs.js';
|
|
11
|
+
import { t } from '../i18n.js';
|
|
12
|
+
/**
|
|
13
|
+
* A ```mermaid fence rendered as Unicode box-drawing art.
|
|
14
|
+
*
|
|
15
|
+
* The art is shown on its own, indented like a code-block body; the
|
|
16
|
+
* ```mermaid fence line is a code-block affordance and a diagram needs none.
|
|
17
|
+
* Whenever there is no art to show (setting off, engine still loading or
|
|
18
|
+
* unavailable, unsupported diagram type, nothing parsed, or the layout is
|
|
19
|
+
* wider than the viewport) the block falls back to the ordinary code-block
|
|
20
|
+
* rendering — fence line included, because that IS a code block — and a
|
|
21
|
+
* too-wide diagram adds a caption with the width it needs.
|
|
22
|
+
*/
|
|
23
|
+
/** Same viewport slack MarkdownTable keeps for gutters and message insets. */
|
|
24
|
+
const SAFETY_MARGIN = 4;
|
|
25
|
+
const INDENT = ' ';
|
|
26
|
+
/** Column budget the indent takes: display width, not string length. */
|
|
27
|
+
const INDENT_WIDTH = stringWidth(INDENT);
|
|
28
|
+
/** The lazily loaded engine: available on first render once any earlier
|
|
29
|
+
* diagram loaded it, otherwise resolved after mount. */
|
|
30
|
+
function useMermaidEngine() {
|
|
31
|
+
const [engine, setEngine] = React.useState(() => peekMermaidEngine() ?? null);
|
|
32
|
+
React.useEffect(() => {
|
|
33
|
+
if (engine !== null)
|
|
34
|
+
return;
|
|
35
|
+
let mounted = true;
|
|
36
|
+
void getMermaidEnginePromise().then(loaded => {
|
|
37
|
+
if (mounted && loaded !== null)
|
|
38
|
+
setEngine(loaded);
|
|
39
|
+
});
|
|
40
|
+
return () => {
|
|
41
|
+
mounted = false;
|
|
42
|
+
};
|
|
43
|
+
}, [engine]);
|
|
44
|
+
return engine;
|
|
45
|
+
}
|
|
46
|
+
export function MermaidDiagram({ token, highlight, dimColor, forceWidth }) {
|
|
47
|
+
const enabled = React.useSyncExternalStore(subscribeMermaidDiagrams, getMermaidDiagrams);
|
|
48
|
+
const engine = useMermaidEngine();
|
|
49
|
+
const { columns } = useTerminalSize();
|
|
50
|
+
const [themeName] = useTheme();
|
|
51
|
+
const theme = getTheme(themeName);
|
|
52
|
+
const width = Math.max(0, forceWidth ?? columns);
|
|
53
|
+
// Layout is width-independent (the engine draws at natural size), so a
|
|
54
|
+
// resize or theme switch only re-paints; streaming changes token.text
|
|
55
|
+
// every frame and re-lays out — sub-millisecond for a warm engine.
|
|
56
|
+
const art = React.useMemo(() => (enabled && engine !== null ? renderMermaid(engine, token.text) : null), [enabled, engine, token.text]);
|
|
57
|
+
if (art === null || art.width > width - INDENT_WIDTH - SAFETY_MARGIN) {
|
|
58
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Text, { dimColor: dimColor, children: formatToken(token, 0, null, null, highlight).trimEnd() }), art !== null && (_jsx(Text, { color: "inactive", children: INDENT + t('mermaid-too-wide', { width: art.width }) }))] }));
|
|
59
|
+
}
|
|
60
|
+
return (_jsx(Text, { dimColor: dimColor, children: paintMermaidArt(art, theme).map(line => INDENT + line).join('\n') }));
|
|
61
|
+
}
|
|
@@ -5,7 +5,26 @@ import type { TranscriptImage } from '../dsh-adapter/transcript-images.js';
|
|
|
5
5
|
import type { DOMElement } from '../ink/dom.js';
|
|
6
6
|
import { type TimelineSnapshot } from '../ink/timeline-rail.js';
|
|
7
7
|
import type { ToolBackground } from '../tuiDisplayPrefs.js';
|
|
8
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Display form of an IDE-selection path (T-FIX-01): when the path lives
|
|
10
|
+
* under the session cwd, strip that prefix so the indicator line reads
|
|
11
|
+
* `src/a.ts` instead of a long absolute path (UAT finding — the extension
|
|
12
|
+
* anchors at its workspace root while the TUI session cwd is the git
|
|
13
|
+
* worktree root, so raw paths are long and redundant). Pure display layer:
|
|
14
|
+
* the `<attached-file>` block keeps its absolute path for the model.
|
|
15
|
+
*
|
|
16
|
+
* Comparison reuses normalizeIdePath (the ide-channel lock matcher's
|
|
17
|
+
* normalizer: backslashes folded to forward slashes, trailing slashes
|
|
18
|
+
* stripped, case folded on case-insensitive filesystems) so Windows forms
|
|
19
|
+
* like `d:/x` vs `D:\X` still match. Prefix hits return the remainder
|
|
20
|
+
* (`src/a.ts`); everything else — outside cwd, empty/undefined cwd, or the
|
|
21
|
+
* path being the cwd itself — returns the input unchanged. NOT basename:
|
|
22
|
+
* that would drop the directory context and collide on same-named files.
|
|
23
|
+
* `caseInsensitive` is parameterized so verifiers can pin either mode on
|
|
24
|
+
* any host.
|
|
25
|
+
*/
|
|
26
|
+
export declare function displaySelectionPath(path: string, sessionCwd: string | undefined, caseInsensitive?: boolean): string;
|
|
27
|
+
export declare function MessageList({ rows, expanded, expandedRows, selectedId, onToggleRow, streamViewToggledRows, onToggleStreamView, model, diffLayout, thinkingFold, toolBackground, foldTerminalCommand, smoothStreaming, activityFrames, showAll, onToggleAll, onLoadOlder, thinkingVisible, historyPaintEnabled, registerRowRef, scrollHandle, forceMountRowId, newSinceRowId, onUnseenCount, onTimeline, failureHintRowId, failureHint, onOpenSubagent, onOpenJobs, onOpenFile, sessionCwd, onPreviewImage, suppressImageGraphics, }: {
|
|
9
28
|
rows: readonly ChatRow[];
|
|
10
29
|
expanded: boolean;
|
|
11
30
|
expandedRows: ReadonlySet<number>;
|
|
@@ -93,6 +112,12 @@ export declare function MessageList({ rows, expanded, expandedRows, selectedId,
|
|
|
93
112
|
onOpenJobs?: () => void;
|
|
94
113
|
/** 点击工具卡内的文件路径(打开文件操作菜单)。 */
|
|
95
114
|
onOpenFile?: (path: string) => void;
|
|
115
|
+
/** Session working directory (fs path, `channel.cwd`): the IDE-selection
|
|
116
|
+
* indicator line strips this prefix for display (T-FIX-01). Optional —
|
|
117
|
+
* repro/verify harnesses that predate the field render unchanged with
|
|
118
|
+
* raw paths. The real fs cwd, NOT displayCwd: remote URI display forms
|
|
119
|
+
* can't prefix-match selection paths. */
|
|
120
|
+
sessionCwd?: string | undefined;
|
|
96
121
|
/** 点击 transcript 缩略图(打开共享的大图预览 overlay)。 */
|
|
97
122
|
onPreviewImage?: (image: TranscriptImage) => void;
|
|
98
123
|
/** Modal preview owns the terminal-image frame budget while open. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MessageList.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAA;AAEvC,OAAO,EAA8B,KAAK,eAAe,EAAE,MAAM,UAAU,CAAA;AAE3E,OAAO,KAAK,EAAE,OAAO,EAA8D,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"MessageList.d.ts","sourceRoot":"","sources":["../../../src/components/MessageList.tsx"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
|
|
|
2
2
|
import React, { useState } from 'react';
|
|
3
3
|
import { getLang, subscribeLang, t } from '../i18n.js';
|
|
4
4
|
import { Box, Text, useTerminalSize } from '../ui.js';
|
|
5
|
+
import { normalizeIdePath } from '../dsh-adapter/ide-channel.js';
|
|
5
6
|
import { Divider } from './design-system/Divider.js';
|
|
6
7
|
import { UserPromptMessage } from './messages/UserPromptMessage.js';
|
|
7
8
|
import { AssistantTextMessage } from './messages/AssistantTextMessage.js';
|
|
@@ -28,7 +29,8 @@ import { TranscriptImages } from './messages/TranscriptImages.js';
|
|
|
28
29
|
* Transcript rows rendered with the dsh-TUI message layout: user prompts
|
|
29
30
|
* on a grey bubble with a `❯` pointer, assistant text with a `●` bullet and
|
|
30
31
|
* markdown, thinking as a live three-line/full toggle then a settled
|
|
31
|
-
* `⚓ Thinking
|
|
32
|
+
* `⚓ Thinking` row with the localized ctrl+o expand hint, and tool calls as
|
|
33
|
+
* status-dot cards.
|
|
32
34
|
* `expanded` (Ctrl+O) shows full reasoning + full tool
|
|
33
35
|
* args/results; `expandedRows` (message-selection mode, Enter) expands single
|
|
34
36
|
* rows; `selectedId` highlights the selected row.
|
|
@@ -92,6 +94,48 @@ function revealDisplayLen(row, enabled) {
|
|
|
92
94
|
}
|
|
93
95
|
return row.text.length;
|
|
94
96
|
}
|
|
97
|
+
/**
|
|
98
|
+
* Display form of an IDE-selection path (T-FIX-01): when the path lives
|
|
99
|
+
* under the session cwd, strip that prefix so the indicator line reads
|
|
100
|
+
* `src/a.ts` instead of a long absolute path (UAT finding — the extension
|
|
101
|
+
* anchors at its workspace root while the TUI session cwd is the git
|
|
102
|
+
* worktree root, so raw paths are long and redundant). Pure display layer:
|
|
103
|
+
* the `<attached-file>` block keeps its absolute path for the model.
|
|
104
|
+
*
|
|
105
|
+
* Comparison reuses normalizeIdePath (the ide-channel lock matcher's
|
|
106
|
+
* normalizer: backslashes folded to forward slashes, trailing slashes
|
|
107
|
+
* stripped, case folded on case-insensitive filesystems) so Windows forms
|
|
108
|
+
* like `d:/x` vs `D:\X` still match. Prefix hits return the remainder
|
|
109
|
+
* (`src/a.ts`); everything else — outside cwd, empty/undefined cwd, or the
|
|
110
|
+
* path being the cwd itself — returns the input unchanged. NOT basename:
|
|
111
|
+
* that would drop the directory context and collide on same-named files.
|
|
112
|
+
* `caseInsensitive` is parameterized so verifiers can pin either mode on
|
|
113
|
+
* any host.
|
|
114
|
+
*/
|
|
115
|
+
export function displaySelectionPath(path, sessionCwd, caseInsensitive = process.platform === 'win32' || process.platform === 'darwin') {
|
|
116
|
+
if (sessionCwd === undefined || sessionCwd === '')
|
|
117
|
+
return path;
|
|
118
|
+
// Shared normalizer (lock matching uses the same): backslashes fold to
|
|
119
|
+
// forward slashes, trailing slashes stripped — transforms that preserve
|
|
120
|
+
// character positions, so slicing the canonical path at the cwd's length
|
|
121
|
+
// keeps the file's own casing in the displayed relative string. Folding
|
|
122
|
+
// decides only WHETHER the prefix matches, never what gets sliced off.
|
|
123
|
+
const pathNorm = normalizeIdePath(path, false);
|
|
124
|
+
const cwdNorm = normalizeIdePath(sessionCwd, false);
|
|
125
|
+
if (cwdNorm === '' || cwdNorm.length >= pathNorm.length)
|
|
126
|
+
return path;
|
|
127
|
+
// The POSIX root `/` is a prefix of every absolute path without a further
|
|
128
|
+
// separator — `/repo/file.ts` under cwd `/` displays as `repo/file.ts`.
|
|
129
|
+
// (A `startsWith('/' + '/')` check would never match; coderabbit review.)
|
|
130
|
+
if (cwdNorm === '/') {
|
|
131
|
+
return pathNorm.startsWith('/') ? pathNorm.slice(1) : path;
|
|
132
|
+
}
|
|
133
|
+
const foldedPath = normalizeIdePath(pathNorm, caseInsensitive);
|
|
134
|
+
const foldedCwd = normalizeIdePath(cwdNorm, caseInsensitive);
|
|
135
|
+
if (!foldedPath.startsWith(`${foldedCwd}/`))
|
|
136
|
+
return path;
|
|
137
|
+
return pathNorm.slice(cwdNorm.length + 1);
|
|
138
|
+
}
|
|
95
139
|
/**
|
|
96
140
|
* Per-kind layout signature PARTS: the O(1) identity of every input that
|
|
97
141
|
* decides a row's rendered HEIGHT (see sigRef in MessageList). Fields are
|
|
@@ -113,7 +157,7 @@ function revealDisplayLen(row, enabled) {
|
|
|
113
157
|
* (parts.slice()).
|
|
114
158
|
*/
|
|
115
159
|
const signatureScratch = [];
|
|
116
|
-
function signatureParts(row, columns, expanded, expandedRows, streamViewToggledRows, thinkingVisible, thinkingFold, diffLayout, foldTerminalCommand, model, failureHintRowId, failureHint, displayTextLen) {
|
|
160
|
+
function signatureParts(row, columns, expanded, expandedRows, streamViewToggledRows, thinkingVisible, thinkingFold, diffLayout, foldTerminalCommand, model, failureHintRowId, failureHint, displayTextLen, sessionCwd) {
|
|
117
161
|
signatureScratch.length = 0;
|
|
118
162
|
// Universal height inputs: width reflows every row; kind switches height
|
|
119
163
|
// semantics wholesale; text length drives wrapping. `displayTextLen` is the
|
|
@@ -156,8 +200,26 @@ function signatureParts(row, columns, expanded, expandedRows, streamViewToggledR
|
|
|
156
200
|
// Folded one-liner vs full summary text.
|
|
157
201
|
signatureScratch.push(expanded, expandedRows.has(row.id));
|
|
158
202
|
break;
|
|
203
|
+
case 'user':
|
|
204
|
+
// T06: the selection indicator line above the bubble adds one rendered
|
|
205
|
+
// row whose text wraps with width — its presence and content length
|
|
206
|
+
// are height inputs. Missing this would leave offscreen spacer heights
|
|
207
|
+
// stale when the field arrives (scroll jump, DESIGN R4).
|
|
208
|
+
// T-FIX-01: the indicator renders the cwd-relative display path, so
|
|
209
|
+
// the signature hashes THAT string — a cwd switch (/workspace) that
|
|
210
|
+
// changes the display form must invalidate the cached height too.
|
|
211
|
+
// width is the display-CELL width (emoji / CJK / combining / ANSI
|
|
212
|
+
// differ from JS length), not the JS string length — two paths with
|
|
213
|
+
// equal length but different terminal widths must not share a cached
|
|
214
|
+
// height (coderabbit review, repo width convention).
|
|
215
|
+
signatureScratch.push(row.selectionAttached === undefined ? 0 : 1, stringWidth(displaySelectionPath(row.selectionAttached?.path ?? '', sessionCwd)), String(row.selectionAttached?.lines ?? ''));
|
|
216
|
+
// Long-line fold: expanding a folded row swaps the folded preview for
|
|
217
|
+
// the raw line (thousands of rows), so both expansion switches are
|
|
218
|
+
// height inputs on user rows too — same rationale as the default arm.
|
|
219
|
+
signatureScratch.push(expanded, expandedRows.has(row.id));
|
|
220
|
+
break;
|
|
159
221
|
default:
|
|
160
|
-
//
|
|
222
|
+
// notice / interrupt / local / local-output: height follows
|
|
161
223
|
// text + columns alone (selection/background never change height) —
|
|
162
224
|
// EXCEPT the long-line fold: expanding a folded row swaps ~10 rows of
|
|
163
225
|
// folded text for the raw line (thousands), so both expansion switches
|
|
@@ -169,7 +231,7 @@ function signatureParts(row, columns, expanded, expandedRows, streamViewToggledR
|
|
|
169
231
|
}
|
|
170
232
|
return signatureScratch;
|
|
171
233
|
}
|
|
172
|
-
export function MessageList({ rows, expanded, expandedRows, selectedId, onToggleRow, streamViewToggledRows = NO_STREAM_VIEW_TOGGLED, onToggleStreamView = NOOP_TOGGLE_STREAM_VIEW, model, diffLayout = 'auto', thinkingFold = 'preview', toolBackground = 'none', foldTerminalCommand = false, smoothStreaming = false, activityFrames, showAll, onToggleAll, onLoadOlder, thinkingVisible = true, historyPaintEnabled = true, registerRowRef, scrollHandle, forceMountRowId, newSinceRowId, onUnseenCount, onTimeline, failureHintRowId, failureHint, onOpenSubagent, onOpenJobs, onOpenFile, onPreviewImage, suppressImageGraphics = false, }) {
|
|
234
|
+
export function MessageList({ rows, expanded, expandedRows, selectedId, onToggleRow, streamViewToggledRows = NO_STREAM_VIEW_TOGGLED, onToggleStreamView = NOOP_TOGGLE_STREAM_VIEW, model, diffLayout = 'auto', thinkingFold = 'preview', toolBackground = 'none', foldTerminalCommand = false, smoothStreaming = false, activityFrames, showAll, onToggleAll, onLoadOlder, thinkingVisible = true, historyPaintEnabled = true, registerRowRef, scrollHandle, forceMountRowId, newSinceRowId, onUnseenCount, onTimeline, failureHintRowId, failureHint, onOpenSubagent, onOpenJobs, onOpenFile, sessionCwd, onPreviewImage, suppressImageGraphics = false, }) {
|
|
173
235
|
const lang = React.useSyncExternalStore(subscribeLang, getLang);
|
|
174
236
|
const hiddenCount = rows.length - RENDERED_ROW_CAP;
|
|
175
237
|
// The thinking filter runs BEFORE virtualization so window indices line up.
|
|
@@ -396,7 +458,7 @@ export function MessageList({ rows, expanded, expandedRows, selectedId, onToggle
|
|
|
396
458
|
// reasoning height at once, remounting the widened window over rows
|
|
397
459
|
// whose rendering never changed (Yoga spike + measure churn for
|
|
398
460
|
// nothing). Base parts cover the universal height inputs.
|
|
399
|
-
const parts = signatureParts(row, columns, expanded, expandedRows, streamViewToggledRows, thinkingVisible, thinkingFold, diffLayout, foldTerminalCommand, model, failureHintRowId, failureHint, revealDisplayLen(row, smoothStreaming));
|
|
461
|
+
const parts = signatureParts(row, columns, expanded, expandedRows, streamViewToggledRows, thinkingVisible, thinkingFold, diffLayout, foldTerminalCommand, model, failureHintRowId, failureHint, revealDisplayLen(row, smoothStreaming), sessionCwd);
|
|
400
462
|
const cachedParts = sigs.get(row.id);
|
|
401
463
|
let same = false;
|
|
402
464
|
if (cachedParts !== undefined && cachedParts.length === parts.length) {
|
|
@@ -959,7 +1021,7 @@ export function MessageList({ rows, expanded, expandedRows, selectedId, onToggle
|
|
|
959
1021
|
else if (row.kind === 'reasoning' && smoothStreaming) {
|
|
960
1022
|
displayText = revealTextOf(`r${row.id}`, row.text, { enabled: true, active: displayStreaming });
|
|
961
1023
|
}
|
|
962
|
-
return (_jsx(MemoRow, { rowId: row.id, kind: row.kind, text: displayText, images: row.images, textFull: row.kind === 'reasoning' ? row.text : undefined, executionTarget: row.executionTarget, streaming: displayStreaming, durationMs: row.durationMs, time: row.time, marginTopOnTurn: marginTopOnTurn, isSelected: selectedId === row.id, isExpanded: expandedRows.has(row.id), expanded: expanded, model: model, diffLayout: diffLayout, thinkingFold: thinkingFold, toolBackground: toolBackground, foldTerminalCommand: foldTerminalCommand, smoothStreaming: smoothStreaming, fresh: row.fresh === true, revealVersion: revealVersion, activityFrames: activityFrames, background: rowBackground(row.id), toolCallId: tool?.callId, toolName: tool?.name, toolArgsText: tool?.argsText, toolArgsFull: tool?.argsFull, toolStatus: tool?.status, toolResultText: tool?.resultText, toolResultFull: tool?.resultFull, toolErrorText: tool?.errorText, toolFootnote: failureHintRowId === row.id ? failureHint : undefined, toolCallView: tool?.callView, toolResultView: tool?.resultView, toolStartedAt: tool?.startedAt, toolDurationMs: tool?.durationMs, subagent: subagent, job: job, onToggleRow: onToggleRow, onToggleStreamView: onToggleStreamView, streamViewToggled: streamViewToggledRows.has(row.id), onOpenSubagent: onOpenSubagent, onOpenJobs: onOpenJobs, onOpenFile: onOpenFile, onPreviewImage: onPreviewImage, suppressImageGraphics: suppressImageGraphics, setRowRef: setRowRef }, row.id));
|
|
1024
|
+
return (_jsx(MemoRow, { rowId: row.id, kind: row.kind, text: displayText, images: row.images, textFull: row.kind === 'reasoning' ? row.text : undefined, executionTarget: row.executionTarget, selectionAttached: row.selectionAttached, streaming: displayStreaming, durationMs: row.durationMs, time: row.time, marginTopOnTurn: marginTopOnTurn, isSelected: selectedId === row.id, isExpanded: expandedRows.has(row.id), expanded: expanded, model: model, diffLayout: diffLayout, thinkingFold: thinkingFold, toolBackground: toolBackground, foldTerminalCommand: foldTerminalCommand, smoothStreaming: smoothStreaming, fresh: row.fresh === true, revealVersion: revealVersion, activityFrames: activityFrames, background: rowBackground(row.id), toolCallId: tool?.callId, toolName: tool?.name, toolArgsText: tool?.argsText, toolArgsFull: tool?.argsFull, toolStatus: tool?.status, toolResultText: tool?.resultText, toolResultFull: tool?.resultFull, toolErrorText: tool?.errorText, toolFootnote: failureHintRowId === row.id ? failureHint : undefined, toolCallView: tool?.callView, toolResultView: tool?.resultView, toolStartedAt: tool?.startedAt, toolDurationMs: tool?.durationMs, subagent: subagent, job: job, onToggleRow: onToggleRow, onToggleStreamView: onToggleStreamView, streamViewToggled: streamViewToggledRows.has(row.id), onOpenSubagent: onOpenSubagent, onOpenJobs: onOpenJobs, onOpenFile: onOpenFile, sessionCwd: sessionCwd, onPreviewImage: onPreviewImage, suppressImageGraphics: suppressImageGraphics, setRowRef: setRowRef }, row.id));
|
|
963
1025
|
}), bottomPad > 0 && _jsx(Box, { height: bottomPad, flexShrink: 0 })] }));
|
|
964
1026
|
}
|
|
965
1027
|
/** Load-earlier / show-previous divider row with a mouse hover tint — the
|
|
@@ -968,7 +1030,7 @@ function ClickableDivider({ title, onClick }) {
|
|
|
968
1030
|
const [hovered, setHovered] = useState(false);
|
|
969
1031
|
return (_jsx(Box, { marginTop: 1, onClick: onClick, onMouseEnter: () => setHovered(true), onMouseLeave: () => setHovered(false), backgroundColor: hovered ? 'userMessageBackgroundHover' : undefined, children: _jsx(Divider, { title: title }) }));
|
|
970
1032
|
}
|
|
971
|
-
function TranscriptRow({ rowId, kind, text, images, textFull, executionTarget, streaming, durationMs, time, marginTopOnTurn, isSelected, isExpanded, expanded, model, diffLayout, smoothStreaming, fresh, revealVersion, thinkingFold, toolBackground, foldTerminalCommand, activityFrames, background, toolCallId, toolName, toolArgsText, toolArgsFull, toolStatus, toolResultText, toolResultFull, toolErrorText, toolFootnote, toolCallView, toolResultView, toolStartedAt, toolDurationMs, subagent, job, onToggleRow, onToggleStreamView, streamViewToggled, onOpenSubagent, onOpenJobs, onOpenFile, onPreviewImage, suppressImageGraphics, setRowRef, }) {
|
|
1033
|
+
function TranscriptRow({ rowId, kind, text, images, textFull, executionTarget, selectionAttached, sessionCwd, streaming, durationMs, time, marginTopOnTurn, isSelected, isExpanded, expanded, model, diffLayout, smoothStreaming, fresh, revealVersion, thinkingFold, toolBackground, foldTerminalCommand, activityFrames, background, toolCallId, toolName, toolArgsText, toolArgsFull, toolStatus, toolResultText, toolResultFull, toolErrorText, toolFootnote, toolCallView, toolResultView, toolStartedAt, toolDurationMs, subagent, job, onToggleRow, onToggleStreamView, streamViewToggled, onOpenSubagent, onOpenJobs, onOpenFile, onPreviewImage, suppressImageGraphics, setRowRef, }) {
|
|
972
1034
|
const ref = React.useCallback((el) => {
|
|
973
1035
|
setRowRef(rowId, el);
|
|
974
1036
|
}, [setRowRef, rowId]);
|
|
@@ -1018,7 +1080,11 @@ function TranscriptRow({ rowId, kind, text, images, textFull, executionTarget, s
|
|
|
1018
1080
|
const foldClickable = foldable && folded.hiddenChars > 0;
|
|
1019
1081
|
switch (kind) {
|
|
1020
1082
|
case 'user':
|
|
1021
|
-
return (_jsxs(Box, { flexDirection: "column", ref: ref, onClick: foldClickable ? foldOnClick : undefined, children: [
|
|
1083
|
+
return (_jsxs(Box, { flexDirection: "column", ref: ref, onClick: foldClickable ? foldOnClick : undefined, children: [selectionAttached && (_jsxs(Text, { dimColor: true, children: ['⧉ ', t('selection-attached', {
|
|
1084
|
+
lines: selectionAttached.lines,
|
|
1085
|
+
count: selectionAttached.lines,
|
|
1086
|
+
path: displaySelectionPath(selectionAttached.path, sessionCwd),
|
|
1087
|
+
})] })), text !== '' && (_jsx(UserPromptMessage, { text: displayText, marginTopOnTurn: marginTopOnTurn, isSelected: isSelected })), images !== undefined && (_jsx(Box, { marginTop: text === '' && marginTopOnTurn ? 1 : 0, children: _jsx(TranscriptImages, { images: images, onPreview: onPreviewImage, suppressGraphics: suppressImageGraphics }) }))] }));
|
|
1022
1088
|
case 'assistant':
|
|
1023
1089
|
return streaming ? (_jsxs(Box, { alignItems: "flex-start", flexDirection: "row", marginTop: marginTopOnTurn ? 1 : 0, width: "100%", backgroundColor: background, ref: ref, onClick: foldClickable ? foldOnClick : undefined, children: [_jsx(Box, { minWidth: 2, children: _jsx(Text, { color: "text", children: "\u25CF" }) }), _jsxs(Box, { flexDirection: "column", children: [_jsx(StreamingMarkdown, { children: stripNarration(displayText) }), images !== undefined && _jsx(TranscriptImages, { images: images, indent: 0, onPreview: onPreviewImage, suppressGraphics: suppressImageGraphics })] })] })) : (_jsxs(Box, { width: "100%", flexDirection: "column", backgroundColor: background, ref: ref, onClick: foldClickable ? foldOnClick : undefined, children: [expanded && (_jsx(Box, { flexDirection: "row", justifyContent: "flex-end", gap: 1, marginTop: 1, children: _jsx(MessageMetadata, { timestamp: time, model: model }) })), _jsx(AssistantTextMessage, { text: stripNarration(displayText), marginTopOnTurn: marginTopOnTurn, isSelected: isSelected, isExpanded: isExpanded }), images !== undefined && _jsx(TranscriptImages, { images: images, onPreview: onPreviewImage, suppressGraphics: suppressImageGraphics })] }));
|
|
1024
1090
|
case 'reasoning': {
|
|
@@ -17,7 +17,7 @@ import React from 'react';
|
|
|
17
17
|
* 组件(换行宽度、虚拟化、输入区预算、表格布局……)无需各自知道
|
|
18
18
|
* 边距存在——它们拿到的就是内容区尺寸;
|
|
19
19
|
* 3. 坐标层:`PageInsetContext` 报告内容区相对屏幕原点的偏移,供少数
|
|
20
|
-
* 以「屏幕坐标」做 absolute 定位的浮层(Tooltip
|
|
20
|
+
* 以「屏幕坐标」做 absolute 定位的浮层(Tooltip、会话列表
|
|
21
21
|
* 右键菜单)补偿——它们的锚点来自指针事件(屏幕坐标),而 absolute
|
|
22
22
|
* 盒子相对的是内缩后的内容区原点。
|
|
23
23
|
*
|
|
@@ -2,6 +2,7 @@ import React from 'react';
|
|
|
2
2
|
import type { ChannelUi as Channel } from '../adapter/channel/ui-policy.js';
|
|
3
3
|
import type { ComposerImageRef } from '../dsh-adapter/channel.js';
|
|
4
4
|
import type { TranscriptImage } from '../dsh-adapter/transcript-images.js';
|
|
5
|
+
import { type PromptDraftCache } from './promptDraftCache.js';
|
|
5
6
|
/** Capabilities referenced by `text`, in first occurrence order. A raw token
|
|
6
7
|
* restored from disk/history has no sidecar entry and therefore stays inert. */
|
|
7
8
|
export declare function composerImageRefsForText(text: string, stagedByToken: ReadonlyMap<string, string>): ComposerImageRef[];
|
|
@@ -13,6 +14,8 @@ export declare function composerImageRefsForText(text: string, stagedByToken: Re
|
|
|
13
14
|
*/
|
|
14
15
|
export interface PromptController {
|
|
15
16
|
hasText(): boolean;
|
|
17
|
+
/** The draft text, for a caller that must not lose it (see {@link PromptDraftCache}). */
|
|
18
|
+
text(): string;
|
|
16
19
|
/** Current capability-backed draft images in token order, without reads. */
|
|
17
20
|
previewImages?(): readonly {
|
|
18
21
|
image: TranscriptImage;
|
|
@@ -39,10 +42,33 @@ export interface PromptController {
|
|
|
39
42
|
* Chat's working-turn Esc interrupt must yield in BOTH submodes. */
|
|
40
43
|
vimActive(): boolean;
|
|
41
44
|
}
|
|
45
|
+
/**
|
|
46
|
+
* Owner-held slot for the composer draft, so a screen that unmounts the
|
|
47
|
+
* prompt (every early return in Chat) does not discard what the user typed.
|
|
48
|
+
*
|
|
49
|
+
* The composer writes ONE complete snapshot as it unmounts and consumes it on
|
|
50
|
+
* the way back; the shape and the reasoning live in `promptDraftCache.ts`.
|
|
51
|
+
*/
|
|
42
52
|
export interface PromptInputProps {
|
|
43
53
|
channel: Channel;
|
|
44
54
|
/** Keep the draft mounted while another prompt-slot panel owns the UI. */
|
|
45
55
|
suspended?: boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Owner-held slot for the unsent draft.
|
|
58
|
+
*
|
|
59
|
+
* The prompt owns its text in local state, and several screens REPLACE the
|
|
60
|
+
* conversation (the session screen, the session tree, settings, the jobs and
|
|
61
|
+
* subagent panels, the trajectory scene) — early returns that unmount this
|
|
62
|
+
* component and would take a half-written prompt down with it. Chat owns the
|
|
63
|
+
* slot, so the text, its caret AND its image bindings survive that unmount
|
|
64
|
+
* and come back when the composer does. The owner also drops it on a session
|
|
65
|
+
* change, so a draft can never leak into a different conversation.
|
|
66
|
+
*
|
|
67
|
+
* Nothing is written from render: a commit-time assignment would run before
|
|
68
|
+
* the restore effect has read the slot and overwrite the draft with the
|
|
69
|
+
* empty first value.
|
|
70
|
+
*/
|
|
71
|
+
draftCache?: PromptDraftCache;
|
|
46
72
|
/** Whether the `?` help menu is open (state lives in the Chat screen). */
|
|
47
73
|
helpOpen: boolean;
|
|
48
74
|
onToggleHelp(): void;
|
|
@@ -67,6 +93,16 @@ export interface PromptInputProps {
|
|
|
67
93
|
* opens the agent view (with text, ← moves the caret as usual).
|
|
68
94
|
*/
|
|
69
95
|
onBackgroundRequest?(): void;
|
|
96
|
+
/**
|
|
97
|
+
* Open the session screen (the one `/resume`, `/agentview` and `/home`
|
|
98
|
+
* share) from the `⌂` entry at the head of the input row.
|
|
99
|
+
*
|
|
100
|
+
* Optional on purpose: the entry is rendered ONLY when this is provided, so
|
|
101
|
+
* hosts that mount the prompt without a session screen — and the layout
|
|
102
|
+
* regressions that pin this row's column budget — keep exactly the row they
|
|
103
|
+
* had before.
|
|
104
|
+
*/
|
|
105
|
+
onOpenSessions?(): void;
|
|
70
106
|
/**
|
|
71
107
|
* Background sessions waiting on the user (agent view "needs input" rows
|
|
72
108
|
* excluding this session); the prompt footer shows the
|
|
@@ -123,5 +159,5 @@ export interface PromptInputProps {
|
|
|
123
159
|
* working) interrupts the turn and delivers them right away; Ctrl+Enter
|
|
124
160
|
* aborts the turn and sends the current input immediately.
|
|
125
161
|
*/
|
|
126
|
-
export declare function PromptInput({ channel, suspended, helpOpen, onToggleHelp, onRunCommand, selectionActive, fillText, onFillConsumed, onRewindRequest, onBackgroundRequest, backgroundAgentsNeedingInput, controllerRef, onCaretImage, caretPreviewOpen, onDismissCaretPreview, }: PromptInputProps): React.JSX.Element | null;
|
|
162
|
+
export declare function PromptInput({ channel, suspended, draftCache, helpOpen, onToggleHelp, onRunCommand, selectionActive, fillText, onFillConsumed, onRewindRequest, onBackgroundRequest, onOpenSessions, backgroundAgentsNeedingInput, controllerRef, onCaretImage, caretPreviewOpen, onDismissCaretPreview, }: PromptInputProps): React.JSX.Element | null;
|
|
127
163
|
//# sourceMappingURL=PromptInput.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PromptInput.d.ts","sourceRoot":"","sources":["../../../src/components/PromptInput.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AA0BzB,OAAO,KAAK,EAAE,SAAS,IAAI,OAAO,EAAE,MAAM,iCAAiC,CAAA;AAC3E,OAAO,KAAK,EACV,gBAAgB,EAGjB,MAAM,2BAA2B,CAAA;AAClC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qCAAqC,CAAA;
|
|
1
|
+
{"version":3,"file":"PromptInput.d.ts","sourceRoot":"","sources":["../../../src/components/PromptInput.tsx"],"names":[],"mappings":"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"}
|