@deepseek-harness-tui/dsh-tui 0.10.1 → 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +175 -269
- package/bin/dsh-tui.js +748 -22
- package/cordis.patch.yml +38 -10
- package/cordis.yml +2 -0
- 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/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 +5 -1
- 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-session.d.ts +3 -1
- package/lib/types/adapter/ports/channel-session.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-ui.d.ts +22 -2
- package/lib/types/adapter/ports/channel-ui.d.ts.map +1 -1
- package/lib/types/adapter/ports/channel-view.d.ts +66 -0
- 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/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/Chat/JobCard.d.ts.map +1 -1
- package/lib/types/components/Chat/JobCard.js +8 -1
- 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 +13 -3
- package/lib/types/components/Markdown.d.ts.map +1 -1
- package/lib/types/components/Markdown.js +47 -4
- 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 +82 -16
- 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 +243 -28
- 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/StreamingMarkdown.d.ts.map +1 -1
- package/lib/types/components/StreamingMarkdown.js +88 -34
- package/lib/types/components/Tooltip.d.ts.map +1 -1
- package/lib/types/components/Tooltip.js +45 -7
- 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/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.map +1 -1
- package/lib/types/dsh-adapter/channel/background-action.js +52 -29
- package/lib/types/dsh-adapter/channel/binding-events.d.ts +5 -0
- package/lib/types/dsh-adapter/channel/binding-events.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/binding-events.js +12 -2
- 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/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 +11 -3
- package/lib/types/dsh-adapter/channel/input-delivery.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/input-delivery.js +80 -8
- 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.map +1 -1
- package/lib/types/dsh-adapter/channel/model-switch.js +49 -31
- package/lib/types/dsh-adapter/channel/permissions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/permissions.js +10 -7
- 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-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 +3 -0
- package/lib/types/dsh-adapter/channel/session-live-adoption.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-live-adoption.js +1 -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 +2 -2
- package/lib/types/dsh-adapter/channel/session-resume.d.ts +11 -2
- package/lib/types/dsh-adapter/channel/session-resume.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-resume.js +291 -94
- package/lib/types/dsh-adapter/channel/session-rewind.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-rewind.js +42 -17
- package/lib/types/dsh-adapter/channel/session-tree-actions.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/session-tree-actions.js +28 -6
- 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/skill-catalog.d.ts +8 -2
- package/lib/types/dsh-adapter/channel/skill-catalog.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/skill-catalog.js +49 -17
- package/lib/types/dsh-adapter/channel/state.d.ts +1 -1
- package/lib/types/dsh-adapter/channel/state.d.ts.map +1 -1
- package/lib/types/dsh-adapter/channel/state.js +1 -1
- 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.map +1 -1
- package/lib/types/dsh-adapter/channel.js +72 -8
- package/lib/types/dsh-adapter/compat/liveSession.d.ts +5 -3
- package/lib/types/dsh-adapter/compat/liveSession.d.ts.map +1 -1
- package/lib/types/dsh-adapter/compat/liveSession.js +5 -3
- 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/settings.d.ts +33 -0
- package/lib/types/dsh-adapter/compat/settings.d.ts.map +1 -0
- package/lib/types/dsh-adapter/compat/settings.js +43 -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 +4 -4
- package/lib/types/dsh-adapter/contract.d.ts.map +1 -1
- package/lib/types/dsh-adapter/contract.js +15 -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 +5 -2
- package/lib/types/dsh-adapter/plugin.d.ts.map +1 -1
- package/lib/types/dsh-adapter/plugin.js +173 -42
- 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/sessions/digest.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sessions/digest.js +40 -19
- package/lib/types/dsh-adapter/sessions/frames.js +2 -0
- package/lib/types/dsh-adapter/sessions/list.js +3 -3
- package/lib/types/dsh-adapter/sessions/store.d.ts +2 -2
- package/lib/types/dsh-adapter/sessions/store.d.ts.map +1 -1
- package/lib/types/dsh-adapter/sessions/store.js +12 -11
- package/lib/types/dsh-adapter/sessions/types.d.ts +2 -0
- package/lib/types/dsh-adapter/sessions/types.d.ts.map +1 -1
- package/lib/types/dsh-adapter/subagents.d.ts.map +1 -1
- package/lib/types/dsh-adapter/subagents.js +6 -5
- 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/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 +257 -296
- package/lib/types/i18n.d.ts.map +1 -1
- package/lib/types/i18n.js +78 -84
- 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 +41 -33
- package/lib/types/ink/dom.d.ts +1 -0
- package/lib/types/ink/dom.d.ts.map +1 -1
- package/lib/types/ink/dom.js +32 -64
- package/lib/types/ink/get-max-width.d.ts +7 -15
- package/lib/types/ink/get-max-width.d.ts.map +1 -1
- package/lib/types/ink/get-max-width.js +7 -20
- 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 +1 -0
- package/lib/types/ink/ink.d.ts.map +1 -1
- package/lib/types/ink/ink.js +58 -4
- package/lib/types/ink/layout/node.d.ts +2 -0
- package/lib/types/ink/layout/node.d.ts.map +1 -1
- package/lib/types/ink/layout/yoga.d.ts +1 -0
- package/lib/types/ink/layout/yoga.d.ts.map +1 -1
- package/lib/types/ink/layout/yoga.js +3 -0
- package/lib/types/ink/node-cache.d.ts +11 -0
- package/lib/types/ink/node-cache.d.ts.map +1 -1
- package/lib/types/ink/node-cache.js +3 -0
- package/lib/types/ink/output.d.ts +16 -2
- package/lib/types/ink/output.d.ts.map +1 -1
- package/lib/types/ink/output.js +163 -81
- 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 +140 -73
- 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 +60 -0
- package/lib/types/ink/selection.d.ts.map +1 -1
- package/lib/types/ink/selection.js +129 -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/tabstops.d.ts +3 -2
- package/lib/types/ink/tabstops.d.ts.map +1 -1
- package/lib/types/ink/tabstops.js +5 -4
- 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/ink/wrap-text.js +2 -2
- package/lib/types/native-ts/yoga-layout/index.d.ts +8 -3
- package/lib/types/native-ts/yoga-layout/index.d.ts.map +1 -1
- package/lib/types/native-ts/yoga-layout/index.js +23 -8
- 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 +303 -79
- 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 +13 -0
- package/lib/types/screens/StatusLine.d.ts.map +1 -1
- package/lib/types/screens/StatusLine.js +36 -17
- 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/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/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 +121 -103
- package/presets/liangshen/.dsh-tui-managed.json +1 -1
- package/presets/liangshen/agent.cordis.yml +15 -0
- 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
|
@@ -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';
|
|
@@ -92,6 +93,48 @@ function revealDisplayLen(row, enabled) {
|
|
|
92
93
|
}
|
|
93
94
|
return row.text.length;
|
|
94
95
|
}
|
|
96
|
+
/**
|
|
97
|
+
* Display form of an IDE-selection path (T-FIX-01): when the path lives
|
|
98
|
+
* under the session cwd, strip that prefix so the indicator line reads
|
|
99
|
+
* `src/a.ts` instead of a long absolute path (UAT finding — the extension
|
|
100
|
+
* anchors at its workspace root while the TUI session cwd is the git
|
|
101
|
+
* worktree root, so raw paths are long and redundant). Pure display layer:
|
|
102
|
+
* the `<attached-file>` block keeps its absolute path for the model.
|
|
103
|
+
*
|
|
104
|
+
* Comparison reuses normalizeIdePath (the ide-channel lock matcher's
|
|
105
|
+
* normalizer: backslashes folded to forward slashes, trailing slashes
|
|
106
|
+
* stripped, case folded on case-insensitive filesystems) so Windows forms
|
|
107
|
+
* like `d:/x` vs `D:\X` still match. Prefix hits return the remainder
|
|
108
|
+
* (`src/a.ts`); everything else — outside cwd, empty/undefined cwd, or the
|
|
109
|
+
* path being the cwd itself — returns the input unchanged. NOT basename:
|
|
110
|
+
* that would drop the directory context and collide on same-named files.
|
|
111
|
+
* `caseInsensitive` is parameterized so verifiers can pin either mode on
|
|
112
|
+
* any host.
|
|
113
|
+
*/
|
|
114
|
+
export function displaySelectionPath(path, sessionCwd, caseInsensitive = process.platform === 'win32' || process.platform === 'darwin') {
|
|
115
|
+
if (sessionCwd === undefined || sessionCwd === '')
|
|
116
|
+
return path;
|
|
117
|
+
// Shared normalizer (lock matching uses the same): backslashes fold to
|
|
118
|
+
// forward slashes, trailing slashes stripped — transforms that preserve
|
|
119
|
+
// character positions, so slicing the canonical path at the cwd's length
|
|
120
|
+
// keeps the file's own casing in the displayed relative string. Folding
|
|
121
|
+
// decides only WHETHER the prefix matches, never what gets sliced off.
|
|
122
|
+
const pathNorm = normalizeIdePath(path, false);
|
|
123
|
+
const cwdNorm = normalizeIdePath(sessionCwd, false);
|
|
124
|
+
if (cwdNorm === '' || cwdNorm.length >= pathNorm.length)
|
|
125
|
+
return path;
|
|
126
|
+
// The POSIX root `/` is a prefix of every absolute path without a further
|
|
127
|
+
// separator — `/repo/file.ts` under cwd `/` displays as `repo/file.ts`.
|
|
128
|
+
// (A `startsWith('/' + '/')` check would never match; coderabbit review.)
|
|
129
|
+
if (cwdNorm === '/') {
|
|
130
|
+
return pathNorm.startsWith('/') ? pathNorm.slice(1) : path;
|
|
131
|
+
}
|
|
132
|
+
const foldedPath = normalizeIdePath(pathNorm, caseInsensitive);
|
|
133
|
+
const foldedCwd = normalizeIdePath(cwdNorm, caseInsensitive);
|
|
134
|
+
if (!foldedPath.startsWith(`${foldedCwd}/`))
|
|
135
|
+
return path;
|
|
136
|
+
return pathNorm.slice(cwdNorm.length + 1);
|
|
137
|
+
}
|
|
95
138
|
/**
|
|
96
139
|
* Per-kind layout signature PARTS: the O(1) identity of every input that
|
|
97
140
|
* decides a row's rendered HEIGHT (see sigRef in MessageList). Fields are
|
|
@@ -113,7 +156,7 @@ function revealDisplayLen(row, enabled) {
|
|
|
113
156
|
* (parts.slice()).
|
|
114
157
|
*/
|
|
115
158
|
const signatureScratch = [];
|
|
116
|
-
function signatureParts(row, columns, expanded, expandedRows, streamViewToggledRows, thinkingVisible, thinkingFold, diffLayout, foldTerminalCommand, model, failureHintRowId, failureHint, displayTextLen) {
|
|
159
|
+
function signatureParts(row, columns, expanded, expandedRows, streamViewToggledRows, thinkingVisible, thinkingFold, diffLayout, foldTerminalCommand, model, failureHintRowId, failureHint, displayTextLen, sessionCwd) {
|
|
117
160
|
signatureScratch.length = 0;
|
|
118
161
|
// Universal height inputs: width reflows every row; kind switches height
|
|
119
162
|
// semantics wholesale; text length drives wrapping. `displayTextLen` is the
|
|
@@ -156,8 +199,26 @@ function signatureParts(row, columns, expanded, expandedRows, streamViewToggledR
|
|
|
156
199
|
// Folded one-liner vs full summary text.
|
|
157
200
|
signatureScratch.push(expanded, expandedRows.has(row.id));
|
|
158
201
|
break;
|
|
202
|
+
case 'user':
|
|
203
|
+
// T06: the selection indicator line above the bubble adds one rendered
|
|
204
|
+
// row whose text wraps with width — its presence and content length
|
|
205
|
+
// are height inputs. Missing this would leave offscreen spacer heights
|
|
206
|
+
// stale when the field arrives (scroll jump, DESIGN R4).
|
|
207
|
+
// T-FIX-01: the indicator renders the cwd-relative display path, so
|
|
208
|
+
// the signature hashes THAT string — a cwd switch (/workspace) that
|
|
209
|
+
// changes the display form must invalidate the cached height too.
|
|
210
|
+
// width is the display-CELL width (emoji / CJK / combining / ANSI
|
|
211
|
+
// differ from JS length), not the JS string length — two paths with
|
|
212
|
+
// equal length but different terminal widths must not share a cached
|
|
213
|
+
// height (coderabbit review, repo width convention).
|
|
214
|
+
signatureScratch.push(row.selectionAttached === undefined ? 0 : 1, stringWidth(displaySelectionPath(row.selectionAttached?.path ?? '', sessionCwd)), String(row.selectionAttached?.lines ?? ''));
|
|
215
|
+
// Long-line fold: expanding a folded row swaps the folded preview for
|
|
216
|
+
// the raw line (thousands of rows), so both expansion switches are
|
|
217
|
+
// height inputs on user rows too — same rationale as the default arm.
|
|
218
|
+
signatureScratch.push(expanded, expandedRows.has(row.id));
|
|
219
|
+
break;
|
|
159
220
|
default:
|
|
160
|
-
//
|
|
221
|
+
// notice / interrupt / local / local-output: height follows
|
|
161
222
|
// text + columns alone (selection/background never change height) —
|
|
162
223
|
// EXCEPT the long-line fold: expanding a folded row swaps ~10 rows of
|
|
163
224
|
// folded text for the raw line (thousands), so both expansion switches
|
|
@@ -169,7 +230,7 @@ function signatureParts(row, columns, expanded, expandedRows, streamViewToggledR
|
|
|
169
230
|
}
|
|
170
231
|
return signatureScratch;
|
|
171
232
|
}
|
|
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, }) {
|
|
233
|
+
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
234
|
const lang = React.useSyncExternalStore(subscribeLang, getLang);
|
|
174
235
|
const hiddenCount = rows.length - RENDERED_ROW_CAP;
|
|
175
236
|
// The thinking filter runs BEFORE virtualization so window indices line up.
|
|
@@ -396,7 +457,7 @@ export function MessageList({ rows, expanded, expandedRows, selectedId, onToggle
|
|
|
396
457
|
// reasoning height at once, remounting the widened window over rows
|
|
397
458
|
// whose rendering never changed (Yoga spike + measure churn for
|
|
398
459
|
// 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));
|
|
460
|
+
const parts = signatureParts(row, columns, expanded, expandedRows, streamViewToggledRows, thinkingVisible, thinkingFold, diffLayout, foldTerminalCommand, model, failureHintRowId, failureHint, revealDisplayLen(row, smoothStreaming), sessionCwd);
|
|
400
461
|
const cachedParts = sigs.get(row.id);
|
|
401
462
|
let same = false;
|
|
402
463
|
if (cachedParts !== undefined && cachedParts.length === parts.length) {
|
|
@@ -457,6 +518,12 @@ export function MessageList({ rows, expanded, expandedRows, selectedId, onToggle
|
|
|
457
518
|
let start = 0;
|
|
458
519
|
while (start < visibleRows.length && offsets[start] + heightOf(visibleRows[start]) <= relTop)
|
|
459
520
|
start++;
|
|
521
|
+
// Resize invalidates cached heights, so a manual scrollTop can overshoot
|
|
522
|
+
// the entire estimated list. Keep its last row mounted to re-measure:
|
|
523
|
+
// an empty window has no measurement wakeup and collapses scrollHeight,
|
|
524
|
+
// leaving the transcript blank and the gutter believing nothing scrolls.
|
|
525
|
+
if (start === visibleRows.length && start > 0)
|
|
526
|
+
start--;
|
|
460
527
|
let end = start;
|
|
461
528
|
while (end < visibleRows.length && offsets[end] < relBottom)
|
|
462
529
|
end++;
|
|
@@ -629,15 +696,10 @@ export function MessageList({ rows, expanded, expandedRows, selectedId, onToggle
|
|
|
629
696
|
end = Math.max(end, idx + 1);
|
|
630
697
|
}
|
|
631
698
|
}
|
|
632
|
-
// The
|
|
633
|
-
//
|
|
634
|
-
//
|
|
635
|
-
//
|
|
636
|
-
if (failureHintRowId !== undefined && failureHintRowId !== null) {
|
|
637
|
-
const idx = visibleRows.findIndex(row => row.id === failureHintRowId);
|
|
638
|
-
if (idx !== -1)
|
|
639
|
-
start = Math.min(start, idx);
|
|
640
|
-
}
|
|
699
|
+
// The failure footnote is row content, not a seek request. Pinning its
|
|
700
|
+
// row also mounted EVERY later tool card until the trajectory was opened,
|
|
701
|
+
// defeating virtualization for the rest of a tool-heavy conversation.
|
|
702
|
+
// It reappears when scrolled into view; only forceMountRowId widens for a seek.
|
|
641
703
|
const topPad = offsets[start] ?? 0;
|
|
642
704
|
const mountedBottom = end < visibleRows.length ? offsets[end] : total;
|
|
643
705
|
const bottomPad = total - mountedBottom;
|
|
@@ -958,7 +1020,7 @@ export function MessageList({ rows, expanded, expandedRows, selectedId, onToggle
|
|
|
958
1020
|
else if (row.kind === 'reasoning' && smoothStreaming) {
|
|
959
1021
|
displayText = revealTextOf(`r${row.id}`, row.text, { enabled: true, active: displayStreaming });
|
|
960
1022
|
}
|
|
961
|
-
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));
|
|
1023
|
+
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));
|
|
962
1024
|
}), bottomPad > 0 && _jsx(Box, { height: bottomPad, flexShrink: 0 })] }));
|
|
963
1025
|
}
|
|
964
1026
|
/** Load-earlier / show-previous divider row with a mouse hover tint — the
|
|
@@ -967,7 +1029,7 @@ function ClickableDivider({ title, onClick }) {
|
|
|
967
1029
|
const [hovered, setHovered] = useState(false);
|
|
968
1030
|
return (_jsx(Box, { marginTop: 1, onClick: onClick, onMouseEnter: () => setHovered(true), onMouseLeave: () => setHovered(false), backgroundColor: hovered ? 'userMessageBackgroundHover' : undefined, children: _jsx(Divider, { title: title }) }));
|
|
969
1031
|
}
|
|
970
|
-
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, }) {
|
|
1032
|
+
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, }) {
|
|
971
1033
|
const ref = React.useCallback((el) => {
|
|
972
1034
|
setRowRef(rowId, el);
|
|
973
1035
|
}, [setRowRef, rowId]);
|
|
@@ -1017,7 +1079,11 @@ function TranscriptRow({ rowId, kind, text, images, textFull, executionTarget, s
|
|
|
1017
1079
|
const foldClickable = foldable && folded.hiddenChars > 0;
|
|
1018
1080
|
switch (kind) {
|
|
1019
1081
|
case 'user':
|
|
1020
|
-
return (_jsxs(Box, { flexDirection: "column", ref: ref, onClick: foldClickable ? foldOnClick : undefined, children: [
|
|
1082
|
+
return (_jsxs(Box, { flexDirection: "column", ref: ref, onClick: foldClickable ? foldOnClick : undefined, children: [selectionAttached && (_jsxs(Text, { dimColor: true, children: ['⧉ ', t('selection-attached', {
|
|
1083
|
+
lines: selectionAttached.lines,
|
|
1084
|
+
count: selectionAttached.lines,
|
|
1085
|
+
path: displaySelectionPath(selectionAttached.path, sessionCwd),
|
|
1086
|
+
})] })), 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 }) }))] }));
|
|
1021
1087
|
case 'assistant':
|
|
1022
1088
|
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 })] }));
|
|
1023
1089
|
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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"}
|