@kenkaiiii/ggcoder 4.3.230 → 4.3.232
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/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +3 -0
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +7 -1
- package/dist/config.js.map +1 -1
- package/dist/config.test.d.ts +2 -0
- package/dist/config.test.d.ts.map +1 -0
- package/dist/config.test.js +29 -0
- package/dist/config.test.js.map +1 -0
- package/dist/core/goal-controller.d.ts +27 -6
- package/dist/core/goal-controller.d.ts.map +1 -1
- package/dist/core/goal-controller.js +246 -141
- package/dist/core/goal-controller.js.map +1 -1
- package/dist/core/goal-controller.test.js +210 -79
- package/dist/core/goal-controller.test.js.map +1 -1
- package/dist/core/goal-engine.d.ts +61 -0
- package/dist/core/goal-engine.d.ts.map +1 -0
- package/dist/core/goal-engine.js +123 -0
- package/dist/core/goal-engine.js.map +1 -0
- package/dist/core/goal-engine.test.d.ts +2 -0
- package/dist/core/goal-engine.test.d.ts.map +1 -0
- package/dist/core/goal-engine.test.js +295 -0
- package/dist/core/goal-engine.test.js.map +1 -0
- package/dist/core/goal-integration.d.ts +80 -0
- package/dist/core/goal-integration.d.ts.map +1 -0
- package/dist/core/goal-integration.js +296 -0
- package/dist/core/goal-integration.js.map +1 -0
- package/dist/core/goal-integration.test.d.ts +2 -0
- package/dist/core/goal-integration.test.d.ts.map +1 -0
- package/dist/core/goal-integration.test.js +369 -0
- package/dist/core/goal-integration.test.js.map +1 -0
- package/dist/core/goal-prerequisites.test.js +37 -1
- package/dist/core/goal-prerequisites.test.js.map +1 -1
- package/dist/core/goal-store.d.ts +80 -1
- package/dist/core/goal-store.d.ts.map +1 -1
- package/dist/core/goal-store.js +232 -65
- package/dist/core/goal-store.js.map +1 -1
- package/dist/core/goal-store.test.js +111 -2
- package/dist/core/goal-store.test.js.map +1 -1
- package/dist/core/goal-worker.d.ts.map +1 -1
- package/dist/core/goal-worker.js +55 -4
- package/dist/core/goal-worker.js.map +1 -1
- package/dist/core/goal-worker.test.js +75 -6
- package/dist/core/goal-worker.test.js.map +1 -1
- package/dist/core/goal-worktree.d.ts +55 -1
- package/dist/core/goal-worktree.d.ts.map +1 -1
- package/dist/core/goal-worktree.js +164 -1
- package/dist/core/goal-worktree.js.map +1 -1
- package/dist/core/goal-worktree.test.js +226 -4
- package/dist/core/goal-worktree.test.js.map +1 -1
- package/dist/core/ideal-review.d.ts +20 -0
- package/dist/core/ideal-review.d.ts.map +1 -0
- package/dist/core/ideal-review.js +55 -0
- package/dist/core/ideal-review.js.map +1 -0
- package/dist/core/ideal-review.test.d.ts +2 -0
- package/dist/core/ideal-review.test.d.ts.map +1 -0
- package/dist/core/ideal-review.test.js +59 -0
- package/dist/core/ideal-review.test.js.map +1 -0
- package/dist/core/settings-manager.d.ts +1 -0
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +2 -0
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/system-prompt.d.ts.map +1 -1
- package/dist/system-prompt.js +9 -6
- package/dist/system-prompt.js.map +1 -1
- package/dist/system-prompt.test.js +1 -1
- package/dist/system-prompt.test.js.map +1 -1
- package/dist/tools/edit-diff.d.ts +17 -4
- package/dist/tools/edit-diff.d.ts.map +1 -1
- package/dist/tools/edit-diff.js +78 -16
- package/dist/tools/edit-diff.js.map +1 -1
- package/dist/tools/edit-diff.test.js +31 -1
- package/dist/tools/edit-diff.test.js.map +1 -1
- package/dist/tools/edit-robustness.test.d.ts +2 -0
- package/dist/tools/edit-robustness.test.d.ts.map +1 -0
- package/dist/tools/edit-robustness.test.js +415 -0
- package/dist/tools/edit-robustness.test.js.map +1 -0
- package/dist/tools/edit.d.ts.map +1 -1
- package/dist/tools/edit.js +15 -16
- package/dist/tools/edit.js.map +1 -1
- package/dist/tools/edit.test.js +23 -12
- package/dist/tools/edit.test.js.map +1 -1
- package/dist/tools/goals.d.ts +9 -1
- package/dist/tools/goals.d.ts.map +1 -1
- package/dist/tools/goals.js +78 -25
- package/dist/tools/goals.js.map +1 -1
- package/dist/tools/goals.test.js +142 -11
- package/dist/tools/goals.test.js.map +1 -1
- package/dist/tools/html-extract.d.ts +58 -0
- package/dist/tools/html-extract.d.ts.map +1 -0
- package/dist/tools/html-extract.js +130 -0
- package/dist/tools/html-extract.js.map +1 -0
- package/dist/tools/html-extract.test.d.ts +2 -0
- package/dist/tools/html-extract.test.d.ts.map +1 -0
- package/dist/tools/html-extract.test.js +60 -0
- package/dist/tools/html-extract.test.js.map +1 -0
- package/dist/tools/pdf-extract.d.ts +18 -0
- package/dist/tools/pdf-extract.d.ts.map +1 -0
- package/dist/tools/pdf-extract.js +43 -0
- package/dist/tools/pdf-extract.js.map +1 -0
- package/dist/tools/pdf-extract.test.d.ts +2 -0
- package/dist/tools/pdf-extract.test.d.ts.map +1 -0
- package/dist/tools/pdf-extract.test.js +15 -0
- package/dist/tools/pdf-extract.test.js.map +1 -0
- package/dist/tools/prompt-hints.d.ts.map +1 -1
- package/dist/tools/prompt-hints.js +2 -1
- package/dist/tools/prompt-hints.js.map +1 -1
- package/dist/tools/web-fetch.d.ts +16 -1
- package/dist/tools/web-fetch.d.ts.map +1 -1
- package/dist/tools/web-fetch.js +357 -45
- package/dist/tools/web-fetch.js.map +1 -1
- package/dist/tools/web-fetch.test.js +263 -2
- package/dist/tools/web-fetch.test.js.map +1 -1
- package/dist/tools/web-search.d.ts +14 -0
- package/dist/tools/web-search.d.ts.map +1 -1
- package/dist/tools/web-search.js +321 -35
- package/dist/tools/web-search.js.map +1 -1
- package/dist/tools/web-search.test.js +144 -1
- package/dist/tools/web-search.test.js.map +1 -1
- package/dist/ui/App.d.ts +11 -1
- package/dist/ui/App.d.ts.map +1 -1
- package/dist/ui/App.js +132 -17
- package/dist/ui/App.js.map +1 -1
- package/dist/ui/app-items.d.ts +14 -1
- package/dist/ui/app-items.d.ts.map +1 -1
- package/dist/ui/app-items.js +2 -0
- package/dist/ui/app-items.js.map +1 -1
- package/dist/ui/components/ChatLayout.d.ts +8 -1
- package/dist/ui/components/ChatLayout.d.ts.map +1 -1
- package/dist/ui/components/ChatLayout.js +4 -1
- package/dist/ui/components/ChatLayout.js.map +1 -1
- package/dist/ui/components/ChatScreen.d.ts +14 -1
- package/dist/ui/components/ChatScreen.d.ts.map +1 -1
- package/dist/ui/components/ChatScreen.js +3 -2
- package/dist/ui/components/ChatScreen.js.map +1 -1
- package/dist/ui/components/IdealHookMessage.d.ts +12 -0
- package/dist/ui/components/IdealHookMessage.d.ts.map +1 -0
- package/dist/ui/components/IdealHookMessage.js +24 -0
- package/dist/ui/components/IdealHookMessage.js.map +1 -0
- package/dist/ui/components/InputArea.d.ts +13 -1
- package/dist/ui/components/InputArea.d.ts.map +1 -1
- package/dist/ui/components/InputArea.js +96 -12
- package/dist/ui/components/InputArea.js.map +1 -1
- package/dist/ui/components/TranscriptViewport.d.ts +34 -0
- package/dist/ui/components/TranscriptViewport.d.ts.map +1 -0
- package/dist/ui/components/TranscriptViewport.js +45 -0
- package/dist/ui/components/TranscriptViewport.js.map +1 -0
- package/dist/ui/footer-jump-regression.test.d.ts +2 -0
- package/dist/ui/footer-jump-regression.test.d.ts.map +1 -0
- package/dist/ui/footer-jump-regression.test.js +167 -0
- package/dist/ui/footer-jump-regression.test.js.map +1 -0
- package/dist/ui/goal-events.d.ts +1 -1
- package/dist/ui/goal-events.d.ts.map +1 -1
- package/dist/ui/goal-events.js +2 -2
- package/dist/ui/goal-events.js.map +1 -1
- package/dist/ui/goal-events.test.js +2 -2
- package/dist/ui/goal-events.test.js.map +1 -1
- package/dist/ui/goal-lifecycle-orchestration.test.js +13 -97
- package/dist/ui/goal-lifecycle-orchestration.test.js.map +1 -1
- package/dist/ui/goal-progress.d.ts.map +1 -1
- package/dist/ui/goal-progress.js +0 -1
- package/dist/ui/goal-progress.js.map +1 -1
- package/dist/ui/goal-run-helpers.d.ts +0 -4
- package/dist/ui/goal-run-helpers.d.ts.map +1 -1
- package/dist/ui/goal-run-helpers.js +2 -21
- package/dist/ui/goal-run-helpers.js.map +1 -1
- package/dist/ui/hooks/useAgentLoop.d.ts +2 -0
- package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -1
- package/dist/ui/hooks/useAgentLoop.js +45 -1
- package/dist/ui/hooks/useAgentLoop.js.map +1 -1
- package/dist/ui/hooks/useChatLayoutMeasurements.d.ts +8 -0
- package/dist/ui/hooks/useChatLayoutMeasurements.d.ts.map +1 -1
- package/dist/ui/hooks/useChatLayoutMeasurements.js +2 -0
- package/dist/ui/hooks/useChatLayoutMeasurements.js.map +1 -1
- package/dist/ui/hooks/useGoalOrchestration.d.ts +2 -1
- package/dist/ui/hooks/useGoalOrchestration.d.ts.map +1 -1
- package/dist/ui/hooks/useGoalOrchestration.js +198 -80
- package/dist/ui/hooks/useGoalOrchestration.js.map +1 -1
- package/dist/ui/hooks/useTerminalSize.d.ts +8 -1
- package/dist/ui/hooks/useTerminalSize.d.ts.map +1 -1
- package/dist/ui/hooks/useTerminalSize.js +12 -2
- package/dist/ui/hooks/useTerminalSize.js.map +1 -1
- package/dist/ui/hooks/useTranscriptHistory.d.ts +1 -1
- package/dist/ui/hooks/useTranscriptHistory.d.ts.map +1 -1
- package/dist/ui/hooks/useTranscriptHistory.js +23 -9
- package/dist/ui/hooks/useTranscriptHistory.js.map +1 -1
- package/dist/ui/hooks/useTranscriptHistory.test.d.ts +2 -0
- package/dist/ui/hooks/useTranscriptHistory.test.d.ts.map +1 -0
- package/dist/ui/hooks/useTranscriptHistory.test.js +61 -0
- package/dist/ui/hooks/useTranscriptHistory.test.js.map +1 -0
- package/dist/ui/hooks/useTranscriptScroll.d.ts +30 -0
- package/dist/ui/hooks/useTranscriptScroll.d.ts.map +1 -0
- package/dist/ui/hooks/useTranscriptScroll.js +44 -0
- package/dist/ui/hooks/useTranscriptScroll.js.map +1 -0
- package/dist/ui/hooks/useTranscriptScroll.test.d.ts +2 -0
- package/dist/ui/hooks/useTranscriptScroll.test.d.ts.map +1 -0
- package/dist/ui/hooks/useTranscriptScroll.test.js +119 -0
- package/dist/ui/hooks/useTranscriptScroll.test.js.map +1 -0
- package/dist/ui/live-area-clamp.test.js +11 -2
- package/dist/ui/live-area-clamp.test.js.map +1 -1
- package/dist/ui/render.d.ts +11 -0
- package/dist/ui/render.d.ts.map +1 -1
- package/dist/ui/render.js +71 -7
- package/dist/ui/render.js.map +1 -1
- package/dist/ui/stores/transcript-scroll-store.d.ts +27 -0
- package/dist/ui/stores/transcript-scroll-store.d.ts.map +1 -0
- package/dist/ui/stores/transcript-scroll-store.js +73 -0
- package/dist/ui/stores/transcript-scroll-store.js.map +1 -0
- package/dist/ui/stores/transcript-scroll-store.test.d.ts +2 -0
- package/dist/ui/stores/transcript-scroll-store.test.d.ts.map +1 -0
- package/dist/ui/stores/transcript-scroll-store.test.js +73 -0
- package/dist/ui/stores/transcript-scroll-store.test.js.map +1 -0
- package/dist/ui/terminal-history.d.ts.map +1 -1
- package/dist/ui/terminal-history.js +8 -0
- package/dist/ui/terminal-history.js.map +1 -1
- package/dist/ui/testing/screen-recorder.d.ts +29 -0
- package/dist/ui/testing/screen-recorder.d.ts.map +1 -0
- package/dist/ui/testing/screen-recorder.js +179 -0
- package/dist/ui/testing/screen-recorder.js.map +1 -0
- package/dist/ui/transcript/TranscriptRenderer.d.ts.map +1 -1
- package/dist/ui/transcript/TranscriptRenderer.js +4 -1
- package/dist/ui/transcript/TranscriptRenderer.js.map +1 -1
- package/dist/ui/transcript/spacing.d.ts +3 -2
- package/dist/ui/transcript/spacing.d.ts.map +1 -1
- package/dist/ui/transcript/spacing.js +8 -0
- package/dist/ui/transcript/spacing.js.map +1 -1
- package/dist/ui/transcript/spacing.test.js +31 -0
- package/dist/ui/transcript/spacing.test.js.map +1 -1
- package/dist/ui/transcript/transcript-lines.d.ts +32 -0
- package/dist/ui/transcript/transcript-lines.d.ts.map +1 -0
- package/dist/ui/transcript/transcript-lines.js +82 -0
- package/dist/ui/transcript/transcript-lines.js.map +1 -0
- package/dist/ui/transcript/transcript-lines.test.d.ts +2 -0
- package/dist/ui/transcript/transcript-lines.test.d.ts.map +1 -0
- package/dist/ui/transcript/transcript-lines.test.js +76 -0
- package/dist/ui/transcript/transcript-lines.test.js.map +1 -0
- package/dist/ui/transcript-viewport-pinning.test.d.ts +2 -0
- package/dist/ui/transcript-viewport-pinning.test.d.ts.map +1 -0
- package/dist/ui/transcript-viewport-pinning.test.js +148 -0
- package/dist/ui/transcript-viewport-pinning.test.js.map +1 -0
- package/dist/ui/tui-history-parity.test.js +8 -0
- package/dist/ui/tui-history-parity.test.js.map +1 -1
- package/dist/ui/tui-simulation.test.d.ts +2 -0
- package/dist/ui/tui-simulation.test.d.ts.map +1 -0
- package/dist/ui/tui-simulation.test.js +138 -0
- package/dist/ui/tui-simulation.test.js.map +1 -0
- package/dist/ui/tui-terminal-recorder.test.d.ts +2 -0
- package/dist/ui/tui-terminal-recorder.test.d.ts.map +1 -0
- package/dist/ui/tui-terminal-recorder.test.js +134 -0
- package/dist/ui/tui-terminal-recorder.test.js.map +1 -0
- package/dist/utils/format.js +7 -0
- package/dist/utils/format.js.map +1 -1
- package/package.json +12 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatScreen.d.ts","sourceRoot":"","sources":["../../../src/ui/components/ChatScreen.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACtC,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAC1E,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"ChatScreen.d.ts","sourceRoot":"","sources":["../../../src/ui/components/ChatScreen.tsx"],"names":[],"mappings":"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"}
|
|
@@ -4,11 +4,12 @@ import { ChatControls, ChatLayout } from "./ChatLayout.js";
|
|
|
4
4
|
import { ChatFooterPane } from "./ChatFooterPane.js";
|
|
5
5
|
import { ChatInputStack } from "./ChatInputStack.js";
|
|
6
6
|
import { ChatLivePane } from "./ChatLivePane.js";
|
|
7
|
+
import { TranscriptViewport } from "./TranscriptViewport.js";
|
|
7
8
|
import { QueueIndicator } from "./QueueIndicator.js";
|
|
8
9
|
import { InputArea } from "./InputArea.js";
|
|
9
10
|
import {} from "./GoalStatusBar.js";
|
|
10
11
|
import { FooterStatusRow } from "./FooterStatusRow.js";
|
|
11
|
-
export function ChatScreen({ columns, liveItems, renderItem, isRunning, visibleStreamingText, streamingThinking, thinkingMs, reserveStreamingSpacing, renderMarkdown, measuredLiveAreaRows, assistantMarginTop, streamingContinuation, controlsRef, hiddenQueuedCount, queueIndicatorMarginTop, theme, statusSlotVisible, activityVisible, stallStatusVisible, doneStatus, activityPhase, elapsedMs, runStartRef, isThinking, thinkingLevel, tokenEstimate, charCountRef, realTokensAccumRef, lastUserMessage, activeToolNames, retryInfo, planDone, planTotal, formatDuration, inputControls, taskPicker, goalPicker, overlay, onModelSelect, onModelCancel, loggedInProviders, currentModel, currentProvider, onThemeSelect, onThemeCancel, currentTheme, contextUsed, contextWindowOptions, displayedCwd, gitBranch, goalMode, planMode, exitPending, goalStatusEntries, footerStatusLayout, backgroundTasks, taskBarFocused, taskBarExpanded, selectedTaskIndex, onTaskBarExpand, onTaskBarCollapse, onTaskKill, onTaskBarExit, onTaskNavigate, }) {
|
|
12
|
-
return (_jsxs(ChatLayout, { columns: columns, children: [_jsx(ChatLivePane, { liveItems: liveItems, renderItem: renderItem, isRunning: isRunning, visibleStreamingText: visibleStreamingText, streamingThinking: streamingThinking, thinkingMs: thinkingMs, reserveStreamingSpacing: reserveStreamingSpacing, renderMarkdown: renderMarkdown, measuredLiveAreaRows: measuredLiveAreaRows, assistantMarginTop: assistantMarginTop, streamingContinuation: streamingContinuation }), _jsxs(ChatControls, { controlsRef: controlsRef, children: [_jsx(QueueIndicator, { hiddenQueuedCount: hiddenQueuedCount, marginTop: queueIndicatorMarginTop, theme: theme }), _jsx(ChatInputStack, { columns: columns, theme: theme, statusSlotVisible: statusSlotVisible, activityVisible: activityVisible, stallStatusVisible: stallStatusVisible, doneStatus: doneStatus, activityPhase: activityPhase, elapsedMs: elapsedMs, runStartRef: runStartRef, thinkingMs: thinkingMs, isThinking: isThinking, thinkingLevel: thinkingLevel, tokenEstimate: tokenEstimate, charCountRef: charCountRef, realTokensAccumRef: realTokensAccumRef, lastUserMessage: lastUserMessage, activeToolNames: activeToolNames, retryInfo: retryInfo, planDone: planDone, planTotal: planTotal, renderMarkdown: renderMarkdown, formatDuration: formatDuration }), _jsx(InputArea, { onSubmit: inputControls.onSubmit, onAbort: inputControls.onAbort, injectText: inputControls.injectText, disabled: isRunning, isActive: inputControls.inputActive, onDownAtEnd: inputControls.onDownAtEnd, onShiftTab: inputControls.onShiftTab, onToggleTasks: inputControls.onToggleTasks, taskPickerOpen: taskPicker.open, tasks: taskPicker.tasks, onCloseTaskPicker: taskPicker.onClose, onStartTask: taskPicker.onStart, onRunAllTasks: taskPicker.onRunAll, onDeleteTask: taskPicker.onDelete, goalPickerOpen: goalPicker.open, goals: goalPicker.goals, onCloseGoalPicker: goalPicker.onClose, onRunGoal: goalPicker.onRun, onDeleteGoal: goalPicker.onDelete, onPauseGoal: goalPicker.onPause, onToggleGoal: inputControls.onToggleGoal, onToggleSkills: inputControls.onToggleSkills, onTogglePixel: inputControls.onTogglePixel, onToggleMarkdown: inputControls.onToggleMarkdown, cwd: inputControls.cwd, commands: inputControls.commands }), _jsx(ChatFooterPane, { overlay: overlay, onModelSelect: onModelSelect, onModelCancel: onModelCancel, loggedInProviders: loggedInProviders, currentModel: currentModel, currentProvider: currentProvider, onThemeSelect: onThemeSelect, onThemeCancel: onThemeCancel, currentTheme: currentTheme, contextUsed: contextUsed, contextWindowOptions: contextWindowOptions, displayedCwd: displayedCwd, gitBranch: gitBranch, thinkingLevel: thinkingLevel, goalMode: goalMode, planMode: planMode, exitPending: exitPending, renderMarkdown: renderMarkdown, goalStatusEntries: goalStatusEntries }), _jsx(FooterStatusRow, { columns: columns, layout: footerStatusLayout, tasks: backgroundTasks, focused: taskBarFocused, expanded: taskBarExpanded, selectedIndex: selectedTaskIndex, onExpand: onTaskBarExpand, onCollapse: onTaskBarCollapse, onKill: onTaskKill, onExit: onTaskBarExit, onNavigate: onTaskNavigate, theme: theme })] })] }));
|
|
12
|
+
export function ChatScreen({ columns, liveItems, renderItem, isRunning, visibleStreamingText, streamingThinking, thinkingMs, reserveStreamingSpacing, renderMarkdown, measuredLiveAreaRows, fullscreen, rows, transcriptLines, viewportRows, assistantMarginTop, streamingContinuation, controlsRef, hiddenQueuedCount, queueIndicatorMarginTop, theme, statusSlotVisible, activityVisible, stallStatusVisible, doneStatus, activityPhase, elapsedMs, runStartRef, isThinking, thinkingLevel, tokenEstimate, charCountRef, realTokensAccumRef, lastUserMessage, activeToolNames, retryInfo, planDone, planTotal, formatDuration, inputControls, taskPicker, goalPicker, overlay, onModelSelect, onModelCancel, loggedInProviders, currentModel, currentProvider, onThemeSelect, onThemeCancel, currentTheme, contextUsed, contextWindowOptions, displayedCwd, gitBranch, goalMode, planMode, exitPending, goalStatusEntries, footerStatusLayout, backgroundTasks, taskBarFocused, taskBarExpanded, selectedTaskIndex, onTaskBarExpand, onTaskBarCollapse, onTaskKill, onTaskBarExit, onTaskNavigate, }) {
|
|
13
|
+
return (_jsxs(ChatLayout, { columns: columns, rows: fullscreen ? rows : undefined, children: [fullscreen ? (_jsx(TranscriptViewport, { lines: transcriptLines, columns: columns, viewportRows: viewportRows })) : (_jsx(ChatLivePane, { liveItems: liveItems, renderItem: renderItem, isRunning: isRunning, visibleStreamingText: visibleStreamingText, streamingThinking: streamingThinking, thinkingMs: thinkingMs, reserveStreamingSpacing: reserveStreamingSpacing, renderMarkdown: renderMarkdown, measuredLiveAreaRows: measuredLiveAreaRows, assistantMarginTop: assistantMarginTop, streamingContinuation: streamingContinuation })), _jsxs(ChatControls, { controlsRef: controlsRef, children: [_jsx(QueueIndicator, { hiddenQueuedCount: hiddenQueuedCount, marginTop: queueIndicatorMarginTop, theme: theme }), _jsx(ChatInputStack, { columns: columns, theme: theme, statusSlotVisible: statusSlotVisible, activityVisible: activityVisible, stallStatusVisible: stallStatusVisible, doneStatus: doneStatus, activityPhase: activityPhase, elapsedMs: elapsedMs, runStartRef: runStartRef, thinkingMs: thinkingMs, isThinking: isThinking, thinkingLevel: thinkingLevel, tokenEstimate: tokenEstimate, charCountRef: charCountRef, realTokensAccumRef: realTokensAccumRef, lastUserMessage: lastUserMessage, activeToolNames: activeToolNames, retryInfo: retryInfo, planDone: planDone, planTotal: planTotal, renderMarkdown: renderMarkdown, formatDuration: formatDuration }), _jsx(InputArea, { onSubmit: inputControls.onSubmit, onAbort: inputControls.onAbort, injectText: inputControls.injectText, disabled: isRunning, isActive: inputControls.inputActive, onDownAtEnd: inputControls.onDownAtEnd, onShiftTab: inputControls.onShiftTab, onToggleTasks: inputControls.onToggleTasks, taskPickerOpen: taskPicker.open, tasks: taskPicker.tasks, onCloseTaskPicker: taskPicker.onClose, onStartTask: taskPicker.onStart, onRunAllTasks: taskPicker.onRunAll, onDeleteTask: taskPicker.onDelete, goalPickerOpen: goalPicker.open, goals: goalPicker.goals, onCloseGoalPicker: goalPicker.onClose, onRunGoal: goalPicker.onRun, onDeleteGoal: goalPicker.onDelete, onPauseGoal: goalPicker.onPause, onToggleGoal: inputControls.onToggleGoal, onToggleSkills: inputControls.onToggleSkills, onTogglePixel: inputControls.onTogglePixel, onToggleMarkdown: inputControls.onToggleMarkdown, cwd: inputControls.cwd, commands: inputControls.commands, mouseScroll: inputControls.mouseScroll, onScroll: inputControls.onScroll }), _jsx(ChatFooterPane, { overlay: overlay, onModelSelect: onModelSelect, onModelCancel: onModelCancel, loggedInProviders: loggedInProviders, currentModel: currentModel, currentProvider: currentProvider, onThemeSelect: onThemeSelect, onThemeCancel: onThemeCancel, currentTheme: currentTheme, contextUsed: contextUsed, contextWindowOptions: contextWindowOptions, displayedCwd: displayedCwd, gitBranch: gitBranch, thinkingLevel: thinkingLevel, goalMode: goalMode, planMode: planMode, exitPending: exitPending, renderMarkdown: renderMarkdown, goalStatusEntries: goalStatusEntries }), _jsx(FooterStatusRow, { columns: columns, layout: footerStatusLayout, tasks: backgroundTasks, focused: taskBarFocused, expanded: taskBarExpanded, selectedIndex: selectedTaskIndex, onExpand: onTaskBarExpand, onCollapse: onTaskBarCollapse, onKill: onTaskKill, onExit: onTaskBarExit, onNavigate: onTaskNavigate, theme: theme })] })] }));
|
|
13
14
|
}
|
|
14
15
|
//# sourceMappingURL=ChatScreen.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChatScreen.js","sourceRoot":"","sources":["../../../src/ui/components/ChatScreen.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAY1B,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,SAAS,EAAkB,MAAM,gBAAgB,CAAC;AAC3D,OAAO,EAAwB,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"ChatScreen.js","sourceRoot":"","sources":["../../../src/ui/components/ChatScreen.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
interface IdealHookMessageProps {
|
|
3
|
+
text: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Announces that the automatic ideal-review hook engaged before the final
|
|
7
|
+
* response. Styled like an assistant message (dot prefix, padding, spacing)
|
|
8
|
+
* but in the theme's secondary color so it stands out from normal output.
|
|
9
|
+
*/
|
|
10
|
+
export declare const IdealHookMessage: React.MemoExoticComponent<({ text, }: IdealHookMessageProps) => import("react/jsx-runtime").JSX.Element>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=IdealHookMessage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IdealHookMessage.d.ts","sourceRoot":"","sources":["../../../src/ui/components/IdealHookMessage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAM1B,UAAU,qBAAqB;IAC7B,IAAI,EAAE,MAAM,CAAC;CACd;AASD;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,wCAE1B,qBAAqB,6CAoBtB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { Text, Box } from "ink";
|
|
4
|
+
import { useTheme } from "../theme/theme.js";
|
|
5
|
+
import { useTerminalSize } from "../hooks/useTerminalSize.js";
|
|
6
|
+
import { BLACK_CIRCLE } from "../constants/figures.js";
|
|
7
|
+
// Mirror AssistantMessage's layout so the row lines up with normal assistant
|
|
8
|
+
// output — same left padding, same prefix width, same content width.
|
|
9
|
+
const RESPONSE_LEFT_PADDING = 1;
|
|
10
|
+
const RESPONSE_RIGHT_GUARD = 1;
|
|
11
|
+
// BLACK_CIRCLE + " " = 2 chars.
|
|
12
|
+
const PREFIX_WIDTH = 2;
|
|
13
|
+
/**
|
|
14
|
+
* Announces that the automatic ideal-review hook engaged before the final
|
|
15
|
+
* response. Styled like an assistant message (dot prefix, padding, spacing)
|
|
16
|
+
* but in the theme's secondary color so it stands out from normal output.
|
|
17
|
+
*/
|
|
18
|
+
export const IdealHookMessage = React.memo(function IdealHookMessage({ text, }) {
|
|
19
|
+
const theme = useTheme();
|
|
20
|
+
const { columns } = useTerminalSize();
|
|
21
|
+
const contentWidth = Math.max(10, columns - RESPONSE_LEFT_PADDING - PREFIX_WIDTH - RESPONSE_RIGHT_GUARD);
|
|
22
|
+
return (_jsxs(Box, { flexDirection: "row", paddingLeft: RESPONSE_LEFT_PADDING, flexShrink: 1, children: [_jsx(Box, { width: PREFIX_WIDTH, flexShrink: 0, children: _jsx(Text, { color: theme.secondary, children: BLACK_CIRCLE + " " }) }), _jsx(Box, { width: contentWidth, flexShrink: 1, children: _jsx(Text, { color: theme.secondary, bold: true, children: text }) })] }));
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=IdealHookMessage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"IdealHookMessage.js","sourceRoot":"","sources":["../../../src/ui/components/IdealHookMessage.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAMvD,6EAA6E;AAC7E,qEAAqE;AACrE,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAChC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAC/B,gCAAgC;AAChC,MAAM,YAAY,GAAG,CAAC,CAAC;AAEvB;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,gBAAgB,CAAC,EACnE,IAAI,GACkB;IACtB,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,EAAE,OAAO,EAAE,GAAG,eAAe,EAAE,CAAC;IACtC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAC3B,EAAE,EACF,OAAO,GAAG,qBAAqB,GAAG,YAAY,GAAG,oBAAoB,CACtE,CAAC;IAEF,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,KAAK,EAAC,WAAW,EAAE,qBAAqB,EAAE,UAAU,EAAE,CAAC,aACxE,KAAC,GAAG,IAAC,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,YACrC,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,SAAS,YAAG,YAAY,GAAG,GAAG,GAAQ,GACrD,EACN,KAAC,GAAG,IAAC,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,CAAC,YACrC,KAAC,IAAI,IAAC,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,kBAC/B,IAAI,GACA,GACH,IACF,CACP,CAAC;AACJ,CAAC,CAAC,CAAC"}
|
|
@@ -65,7 +65,19 @@ interface InputAreaProps {
|
|
|
65
65
|
* downstream tools (gg-boss) to cycle the scope badge.
|
|
66
66
|
*/
|
|
67
67
|
onTab?: () => void;
|
|
68
|
+
/**
|
|
69
|
+
* Fullscreen alt-screen mode: there is no native scrollback, so mouse-wheel
|
|
70
|
+
* events must drive the in-app transcript scroll instead of being passed
|
|
71
|
+
* through to the terminal. When set, wheel-up/down call `onScroll` and mouse
|
|
72
|
+
* tracking is kept enabled regardless of input text so wheel events arrive.
|
|
73
|
+
*/
|
|
74
|
+
mouseScroll?: boolean;
|
|
75
|
+
/**
|
|
76
|
+
* Called with a signed line delta when the user scrolls the mouse wheel in
|
|
77
|
+
* fullscreen mode. Positive = scroll UP (older output), negative = DOWN.
|
|
78
|
+
*/
|
|
79
|
+
onScroll?: (deltaLines: number) => void;
|
|
68
80
|
}
|
|
69
|
-
export declare function InputArea({ onSubmit, onAbort, injectText, disabled, isActive, onDownAtEnd, onShiftTab, onToggleTasks, taskPickerOpen, tasks, onCloseTaskPicker, onStartTask, onRunAllTasks, onDeleteTask, goalPickerOpen, goals, onCloseGoalPicker, onRunGoal, onDeleteGoal, onPauseGoal, onToggleGoal, onToggleSkills, onTogglePixel, onToggleMarkdown, cwd, commands, scopeBadge, disableMouseTracking, onTab, }: InputAreaProps): import("react/jsx-runtime").JSX.Element;
|
|
81
|
+
export declare function InputArea({ onSubmit, onAbort, injectText, disabled, isActive, onDownAtEnd, onShiftTab, onToggleTasks, taskPickerOpen, tasks, onCloseTaskPicker, onStartTask, onRunAllTasks, onDeleteTask, goalPickerOpen, goals, onCloseGoalPicker, onRunGoal, onDeleteGoal, onPauseGoal, onToggleGoal, onToggleSkills, onTogglePixel, onToggleMarkdown, cwd, commands, scopeBadge, disableMouseTracking, mouseScroll, onScroll, onTab, }: InputAreaProps): import("react/jsx-runtime").JSX.Element;
|
|
70
82
|
export {};
|
|
71
83
|
//# sourceMappingURL=InputArea.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InputArea.d.ts","sourceRoot":"","sources":["../../../src/ui/components/InputArea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAMpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,OAAO,EAAoC,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAIhG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"InputArea.d.ts","sourceRoot":"","sources":["../../../src/ui/components/InputArea.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAMpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAE5D,OAAO,EAAoC,KAAK,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAIhG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAiMxD,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,UAAU,cAAc;IACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,EAAE,KAAK,CAAC,EAAE,SAAS,KAAK,IAAI,CAAC;IAChF,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB;;;;OAIG;IACH,UAAU,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IACpD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IAC9B,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IACzC,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,UAAU,KAAK,IAAI,CAAC;IAC5C,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,UAAU,KAAK,IAAI,CAAC;IAC1C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,KAAK,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC/B,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACpC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACtC,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAC;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC9B;;;;OAIG;IACH,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B;;;;;;;;;OASG;IACH,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;CACzC;AAyDD,wBAAgB,SAAS,CAAC,EACxB,QAAQ,EACR,OAAO,EACP,UAAU,EACV,QAAgB,EAChB,QAAe,EACf,WAAW,EACX,UAAU,EACV,aAAa,EACb,cAAsB,EACtB,KAAU,EACV,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,YAAY,EACZ,cAAsB,EACtB,KAAU,EACV,iBAAiB,EACjB,SAAS,EACT,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,GAAG,EACH,QAAa,EACb,UAAU,EACV,oBAAoB,EACpB,WAAW,EACX,QAAQ,EACR,KAAK,GACN,EAAE,cAAc,2CA0oDhB"}
|
|
@@ -29,6 +29,15 @@ const SGR_MOUSE_RE_G = /\x1b\[<(\d+);(\d+);(\d+)([Mm])/g;
|
|
|
29
29
|
// ?1000h = basic click tracking, ?1006h = SGR extended mode (supports coords > 223).
|
|
30
30
|
const ENABLE_MOUSE = "\x1b[?1000h\x1b[?1006h";
|
|
31
31
|
const DISABLE_MOUSE = "\x1b[?1006l\x1b[?1000l";
|
|
32
|
+
// Idle window (ms) for the legacy scroll-passthrough release: a short pause
|
|
33
|
+
// reliably spans a wheel gesture before tracking re-arms.
|
|
34
|
+
const SCROLL_PAUSE_MS = 300;
|
|
35
|
+
// Safety net only. In fullscreen, native text selection releases the mouse with
|
|
36
|
+
// NO active timer — the wheel re-arms on the next keystroke instead, so a slow
|
|
37
|
+
// drag is never cut short. This long timer only fires if the user never presses
|
|
38
|
+
// a key afterward (e.g. copies text and switches apps), so the mouse doesn't
|
|
39
|
+
// stay captured forever in that edge case.
|
|
40
|
+
const NATIVE_INTERACTION_SAFETY_MS = 60_000;
|
|
32
41
|
// Guard against stray SGR mouse sequences leaking into text input.
|
|
33
42
|
// Some terminals or multiplexers send these even without mouse tracking enabled.
|
|
34
43
|
function isMouseEscapeSequence(input) {
|
|
@@ -183,6 +192,8 @@ function compactHistory() {
|
|
|
183
192
|
}
|
|
184
193
|
}
|
|
185
194
|
}
|
|
195
|
+
// Lines advanced per mouse-wheel notch in fullscreen transcript scrolling.
|
|
196
|
+
const WHEEL_LINES_PER_NOTCH = 3;
|
|
186
197
|
// Padding (1 each side) = 2 characters of overhead. Gemini's composer is borderless
|
|
187
198
|
// except for a zero-height top rule, so wrapping should not reserve border columns.
|
|
188
199
|
const INPUT_HORIZONTAL_OVERHEAD = 2;
|
|
@@ -228,7 +239,7 @@ function getVisualLines(text, columns) {
|
|
|
228
239
|
}
|
|
229
240
|
return result;
|
|
230
241
|
}
|
|
231
|
-
export function InputArea({ onSubmit, onAbort, injectText, disabled = false, isActive = true, onDownAtEnd, onShiftTab, onToggleTasks, taskPickerOpen = false, tasks = [], onCloseTaskPicker, onStartTask, onRunAllTasks, onDeleteTask, goalPickerOpen = false, goals = [], onCloseGoalPicker, onRunGoal, onDeleteGoal, onPauseGoal, onToggleGoal, onToggleSkills, onTogglePixel, onToggleMarkdown, cwd, commands = [], scopeBadge, disableMouseTracking, onTab, }) {
|
|
242
|
+
export function InputArea({ onSubmit, onAbort, injectText, disabled = false, isActive = true, onDownAtEnd, onShiftTab, onToggleTasks, taskPickerOpen = false, tasks = [], onCloseTaskPicker, onStartTask, onRunAllTasks, onDeleteTask, goalPickerOpen = false, goals = [], onCloseGoalPicker, onRunGoal, onDeleteGoal, onPauseGoal, onToggleGoal, onToggleSkills, onTogglePixel, onToggleMarkdown, cwd, commands = [], scopeBadge, disableMouseTracking, mouseScroll, onScroll, onTab, }) {
|
|
232
243
|
const theme = useTheme();
|
|
233
244
|
const isScreenReaderEnabled = useIsScreenReaderEnabled();
|
|
234
245
|
const [value, setValue] = useState("");
|
|
@@ -439,6 +450,18 @@ export function InputArea({ onSubmit, onAbort, injectText, disabled = false, isA
|
|
|
439
450
|
// is empty, click-to-cursor is useless and disabling tracking lets the
|
|
440
451
|
// terminal handle CMD+click for opening links natively.
|
|
441
452
|
const hasInputTextRef = useRef(value.length > 0);
|
|
453
|
+
// Fullscreen wheel-scroll routing. Kept in refs so the emit-wrapper effect
|
|
454
|
+
// (whose deps are intentionally stable) always sees the freshest callback.
|
|
455
|
+
const mouseScrollRef = useRef(mouseScroll);
|
|
456
|
+
mouseScrollRef.current = mouseScroll;
|
|
457
|
+
const onScrollRef = useRef(onScroll);
|
|
458
|
+
onScrollRef.current = onScroll;
|
|
459
|
+
// Assigned by the mouse effect; called by the keyboard handler to re-arm
|
|
460
|
+
// mouse tracking after the user finishes a native text selection (see the
|
|
461
|
+
// fullscreen selection-mode logic below). Lifting it out of the effect lets
|
|
462
|
+
// a keystroke — the unambiguous "I'm done selecting" signal — restore the
|
|
463
|
+
// wheel without a fragile timer that would cut a slow selection short.
|
|
464
|
+
const reenableMouseRef = useRef(() => { });
|
|
442
465
|
useEffect(() => {
|
|
443
466
|
if (!isActive || !internal_eventEmitter)
|
|
444
467
|
return;
|
|
@@ -453,7 +476,9 @@ export function InputArea({ onSubmit, onAbort, injectText, disabled = false, isA
|
|
|
453
476
|
return;
|
|
454
477
|
// Only enable mouse tracking if there's text — when empty, let the
|
|
455
478
|
// terminal handle clicks natively (e.g., CMD+click to open links).
|
|
456
|
-
|
|
479
|
+
// In fullscreen mode we always enable it so wheel-scroll events arrive even
|
|
480
|
+
// when the composer is empty (there's no native scrollback to fall back to).
|
|
481
|
+
if (hasInputTextRef.current || mouseScrollRef.current) {
|
|
457
482
|
process.stdout.write(ENABLE_MOUSE);
|
|
458
483
|
}
|
|
459
484
|
// Safety: ensure mouse tracking is disabled even on crash/SIGINT/unexpected exit
|
|
@@ -462,25 +487,56 @@ export function InputArea({ onSubmit, onAbort, injectText, disabled = false, isA
|
|
|
462
487
|
process.on("exit", onProcessExit);
|
|
463
488
|
const originalEmit = internal_eventEmitter.emit.bind(internal_eventEmitter);
|
|
464
489
|
mouseEmitRef.current.original = originalEmit;
|
|
465
|
-
//
|
|
466
|
-
//
|
|
467
|
-
//
|
|
490
|
+
// Mouse-release passthrough: when we want the TERMINAL (not the app) to
|
|
491
|
+
// handle a gesture — native scroll in the legacy model, or native text
|
|
492
|
+
// selection / CMD+click link-opening in fullscreen — we disable mouse
|
|
493
|
+
// tracking so the terminal owns the mouse.
|
|
468
494
|
let scrollTimer = null;
|
|
469
495
|
let mouseDisabled = false;
|
|
496
|
+
// Re-arm mouse tracking only when something still needs it: there's input
|
|
497
|
+
// text to position a cursor in (legacy click-to-cursor), OR we're in
|
|
498
|
+
// fullscreen where the wheel drives the transcript scroll. Without the
|
|
499
|
+
// fullscreen clause the mouse would stay dead after the first click and the
|
|
500
|
+
// wheel would stop scrolling.
|
|
470
501
|
const reenableMouse = () => {
|
|
471
|
-
if (
|
|
502
|
+
if (scrollTimer) {
|
|
503
|
+
clearTimeout(scrollTimer);
|
|
504
|
+
scrollTimer = null;
|
|
505
|
+
}
|
|
506
|
+
if (mouseDisabled && (hasInputTextRef.current || mouseScrollRef.current)) {
|
|
472
507
|
process.stdout.write(ENABLE_MOUSE);
|
|
473
508
|
mouseDisabled = false;
|
|
474
509
|
}
|
|
475
510
|
};
|
|
476
|
-
|
|
511
|
+
// Exposed so the keyboard handler can re-arm on the next keystroke.
|
|
512
|
+
reenableMouseRef.current = reenableMouse;
|
|
513
|
+
// Timed release — used for the legacy scroll-passthrough model where a short
|
|
514
|
+
// idle reliably means the wheel gesture is over.
|
|
515
|
+
const pauseMouseTimed = (durationMs) => {
|
|
516
|
+
if (!mouseDisabled) {
|
|
517
|
+
process.stdout.write(DISABLE_MOUSE);
|
|
518
|
+
mouseDisabled = true;
|
|
519
|
+
}
|
|
520
|
+
if (scrollTimer)
|
|
521
|
+
clearTimeout(scrollTimer);
|
|
522
|
+
scrollTimer = setTimeout(reenableMouse, durationMs);
|
|
523
|
+
};
|
|
524
|
+
const pauseMouseForScroll = () => pauseMouseTimed(SCROLL_PAUSE_MS);
|
|
525
|
+
// Indefinite release for native selection / link-clicks in fullscreen. NO
|
|
526
|
+
// timer: a text selection can take as long as the user wants, and a timer
|
|
527
|
+
// that re-armed mid-drag would abort the selection. The wheel is restored
|
|
528
|
+
// only when the user presses a key (handled in the keyboard useInput) — an
|
|
529
|
+
// unambiguous signal that they're done selecting and back to driving the
|
|
530
|
+
// app. A long safety-net timer guards against a stuck state if no key ever
|
|
531
|
+
// follows (e.g. they copy and switch windows).
|
|
532
|
+
const pauseMouseForNativeInteraction = () => {
|
|
477
533
|
if (!mouseDisabled) {
|
|
478
534
|
process.stdout.write(DISABLE_MOUSE);
|
|
479
535
|
mouseDisabled = true;
|
|
480
536
|
}
|
|
481
537
|
if (scrollTimer)
|
|
482
538
|
clearTimeout(scrollTimer);
|
|
483
|
-
scrollTimer = setTimeout(reenableMouse,
|
|
539
|
+
scrollTimer = setTimeout(reenableMouse, NATIVE_INTERACTION_SAFETY_MS);
|
|
484
540
|
};
|
|
485
541
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
486
542
|
internal_eventEmitter.emit = (event, ...args) => {
|
|
@@ -508,12 +564,32 @@ export function InputArea({ onSubmit, onAbort, injectText, disabled = false, isA
|
|
|
508
564
|
const hasModifier = (btnCode & 0b11100) !== 0; // shift, meta, or ctrl
|
|
509
565
|
const isMotion = (btnCode & 32) !== 0;
|
|
510
566
|
const isScroll = (btnCode & 64) !== 0;
|
|
511
|
-
// On scroll:
|
|
512
|
-
// then re-enable after idle so click-to-cursor keeps working.
|
|
567
|
+
// On scroll wheel:
|
|
513
568
|
if (isScroll) {
|
|
569
|
+
// Fullscreen alt-screen: no native scrollback exists, so route the
|
|
570
|
+
// wheel into the in-app transcript scroll. Wheel-up (button bit 0
|
|
571
|
+
// clear) scrolls toward older output, wheel-down toward newest.
|
|
572
|
+
if (mouseScrollRef.current && onScrollRef.current) {
|
|
573
|
+
const wheelUp = (btnCode & 1) === 0;
|
|
574
|
+
onScrollRef.current(wheelUp ? WHEEL_LINES_PER_NOTCH : -WHEEL_LINES_PER_NOTCH);
|
|
575
|
+
continue;
|
|
576
|
+
}
|
|
577
|
+
// Legacy scrollback model: disable mouse tracking so the terminal
|
|
578
|
+
// handles it natively, then re-enable after idle.
|
|
514
579
|
pauseMouseForScroll();
|
|
515
580
|
continue;
|
|
516
581
|
}
|
|
582
|
+
// Fullscreen: the wheel is the ONLY gesture we capture. Any other
|
|
583
|
+
// mouse event means the user wants to interact with the terminal
|
|
584
|
+
// itself — drag to select/copy text, or CMD+click a link. Release the
|
|
585
|
+
// mouse so the terminal handles it natively, then re-arm for the
|
|
586
|
+
// wheel after an idle window. (We trade away composer click-to-cursor
|
|
587
|
+
// in fullscreen; the keyboard positions the cursor, and copy/paste +
|
|
588
|
+
// links matter more.)
|
|
589
|
+
if (mouseScrollRef.current) {
|
|
590
|
+
pauseMouseForNativeInteraction();
|
|
591
|
+
continue;
|
|
592
|
+
}
|
|
517
593
|
// When modifier keys are held (CMD+click, Ctrl+click, Shift+click),
|
|
518
594
|
// temporarily disable mouse tracking so the terminal can handle
|
|
519
595
|
// the click natively (e.g., opening links with CMD+click).
|
|
@@ -615,6 +691,7 @@ export function InputArea({ onSubmit, onAbort, injectText, disabled = false, isA
|
|
|
615
691
|
return () => {
|
|
616
692
|
if (scrollTimer)
|
|
617
693
|
clearTimeout(scrollTimer);
|
|
694
|
+
reenableMouseRef.current = () => { };
|
|
618
695
|
process.stdout.write(DISABLE_MOUSE);
|
|
619
696
|
process.removeListener("exit", onProcessExit);
|
|
620
697
|
// Restore original emit
|
|
@@ -633,11 +710,13 @@ export function InputArea({ onSubmit, onAbort, injectText, disabled = false, isA
|
|
|
633
710
|
const hasText = value.length > 0;
|
|
634
711
|
if (hasText !== hasInputTextRef.current) {
|
|
635
712
|
hasInputTextRef.current = hasText;
|
|
636
|
-
|
|
713
|
+
// In fullscreen mode mouse tracking stays on regardless of input text so
|
|
714
|
+
// wheel-scroll keeps working with an empty composer — never disable it.
|
|
715
|
+
if (isActive && !mouseScroll) {
|
|
637
716
|
process.stdout.write(hasText ? ENABLE_MOUSE : DISABLE_MOUSE);
|
|
638
717
|
}
|
|
639
718
|
}
|
|
640
|
-
}, [value, isActive]);
|
|
719
|
+
}, [value, isActive, mouseScroll]);
|
|
641
720
|
// Helper: delete selected text and return new value + cursor position.
|
|
642
721
|
// Returns null if no selection is active.
|
|
643
722
|
const deleteSelection = () => {
|
|
@@ -662,6 +741,11 @@ export function InputArea({ onSubmit, onAbort, injectText, disabled = false, isA
|
|
|
662
741
|
return;
|
|
663
742
|
if (isMouseEscapeSequence(inputWithoutFocusReports))
|
|
664
743
|
return;
|
|
744
|
+
// A real keystroke is the "I'm done selecting" signal: re-arm mouse
|
|
745
|
+
// tracking (no-op if it was never released) so the wheel works again.
|
|
746
|
+
// This is why native selection can take as long as the user wants — it's
|
|
747
|
+
// ended by intent (a key) rather than a timer that could cut it short.
|
|
748
|
+
reenableMouseRef.current();
|
|
665
749
|
// Reset kill ring accumulation for non-kill keys
|
|
666
750
|
input = inputWithoutFocusReports;
|
|
667
751
|
const isReturnKey = key.return || input === "\r" || input === "\n";
|