@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.
Files changed (255) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +3 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/config.d.ts +1 -0
  5. package/dist/config.d.ts.map +1 -1
  6. package/dist/config.js +7 -1
  7. package/dist/config.js.map +1 -1
  8. package/dist/config.test.d.ts +2 -0
  9. package/dist/config.test.d.ts.map +1 -0
  10. package/dist/config.test.js +29 -0
  11. package/dist/config.test.js.map +1 -0
  12. package/dist/core/goal-controller.d.ts +27 -6
  13. package/dist/core/goal-controller.d.ts.map +1 -1
  14. package/dist/core/goal-controller.js +246 -141
  15. package/dist/core/goal-controller.js.map +1 -1
  16. package/dist/core/goal-controller.test.js +210 -79
  17. package/dist/core/goal-controller.test.js.map +1 -1
  18. package/dist/core/goal-engine.d.ts +61 -0
  19. package/dist/core/goal-engine.d.ts.map +1 -0
  20. package/dist/core/goal-engine.js +123 -0
  21. package/dist/core/goal-engine.js.map +1 -0
  22. package/dist/core/goal-engine.test.d.ts +2 -0
  23. package/dist/core/goal-engine.test.d.ts.map +1 -0
  24. package/dist/core/goal-engine.test.js +295 -0
  25. package/dist/core/goal-engine.test.js.map +1 -0
  26. package/dist/core/goal-integration.d.ts +80 -0
  27. package/dist/core/goal-integration.d.ts.map +1 -0
  28. package/dist/core/goal-integration.js +296 -0
  29. package/dist/core/goal-integration.js.map +1 -0
  30. package/dist/core/goal-integration.test.d.ts +2 -0
  31. package/dist/core/goal-integration.test.d.ts.map +1 -0
  32. package/dist/core/goal-integration.test.js +369 -0
  33. package/dist/core/goal-integration.test.js.map +1 -0
  34. package/dist/core/goal-prerequisites.test.js +37 -1
  35. package/dist/core/goal-prerequisites.test.js.map +1 -1
  36. package/dist/core/goal-store.d.ts +80 -1
  37. package/dist/core/goal-store.d.ts.map +1 -1
  38. package/dist/core/goal-store.js +232 -65
  39. package/dist/core/goal-store.js.map +1 -1
  40. package/dist/core/goal-store.test.js +111 -2
  41. package/dist/core/goal-store.test.js.map +1 -1
  42. package/dist/core/goal-worker.d.ts.map +1 -1
  43. package/dist/core/goal-worker.js +55 -4
  44. package/dist/core/goal-worker.js.map +1 -1
  45. package/dist/core/goal-worker.test.js +75 -6
  46. package/dist/core/goal-worker.test.js.map +1 -1
  47. package/dist/core/goal-worktree.d.ts +55 -1
  48. package/dist/core/goal-worktree.d.ts.map +1 -1
  49. package/dist/core/goal-worktree.js +164 -1
  50. package/dist/core/goal-worktree.js.map +1 -1
  51. package/dist/core/goal-worktree.test.js +226 -4
  52. package/dist/core/goal-worktree.test.js.map +1 -1
  53. package/dist/core/ideal-review.d.ts +20 -0
  54. package/dist/core/ideal-review.d.ts.map +1 -0
  55. package/dist/core/ideal-review.js +55 -0
  56. package/dist/core/ideal-review.js.map +1 -0
  57. package/dist/core/ideal-review.test.d.ts +2 -0
  58. package/dist/core/ideal-review.test.d.ts.map +1 -0
  59. package/dist/core/ideal-review.test.js +59 -0
  60. package/dist/core/ideal-review.test.js.map +1 -0
  61. package/dist/core/settings-manager.d.ts +1 -0
  62. package/dist/core/settings-manager.d.ts.map +1 -1
  63. package/dist/core/settings-manager.js +2 -0
  64. package/dist/core/settings-manager.js.map +1 -1
  65. package/dist/system-prompt.d.ts.map +1 -1
  66. package/dist/system-prompt.js +9 -6
  67. package/dist/system-prompt.js.map +1 -1
  68. package/dist/system-prompt.test.js +1 -1
  69. package/dist/system-prompt.test.js.map +1 -1
  70. package/dist/tools/edit-diff.d.ts +17 -4
  71. package/dist/tools/edit-diff.d.ts.map +1 -1
  72. package/dist/tools/edit-diff.js +78 -16
  73. package/dist/tools/edit-diff.js.map +1 -1
  74. package/dist/tools/edit-diff.test.js +31 -1
  75. package/dist/tools/edit-diff.test.js.map +1 -1
  76. package/dist/tools/edit-robustness.test.d.ts +2 -0
  77. package/dist/tools/edit-robustness.test.d.ts.map +1 -0
  78. package/dist/tools/edit-robustness.test.js +415 -0
  79. package/dist/tools/edit-robustness.test.js.map +1 -0
  80. package/dist/tools/edit.d.ts.map +1 -1
  81. package/dist/tools/edit.js +15 -16
  82. package/dist/tools/edit.js.map +1 -1
  83. package/dist/tools/edit.test.js +23 -12
  84. package/dist/tools/edit.test.js.map +1 -1
  85. package/dist/tools/goals.d.ts +9 -1
  86. package/dist/tools/goals.d.ts.map +1 -1
  87. package/dist/tools/goals.js +78 -25
  88. package/dist/tools/goals.js.map +1 -1
  89. package/dist/tools/goals.test.js +142 -11
  90. package/dist/tools/goals.test.js.map +1 -1
  91. package/dist/tools/html-extract.d.ts +58 -0
  92. package/dist/tools/html-extract.d.ts.map +1 -0
  93. package/dist/tools/html-extract.js +130 -0
  94. package/dist/tools/html-extract.js.map +1 -0
  95. package/dist/tools/html-extract.test.d.ts +2 -0
  96. package/dist/tools/html-extract.test.d.ts.map +1 -0
  97. package/dist/tools/html-extract.test.js +60 -0
  98. package/dist/tools/html-extract.test.js.map +1 -0
  99. package/dist/tools/pdf-extract.d.ts +18 -0
  100. package/dist/tools/pdf-extract.d.ts.map +1 -0
  101. package/dist/tools/pdf-extract.js +43 -0
  102. package/dist/tools/pdf-extract.js.map +1 -0
  103. package/dist/tools/pdf-extract.test.d.ts +2 -0
  104. package/dist/tools/pdf-extract.test.d.ts.map +1 -0
  105. package/dist/tools/pdf-extract.test.js +15 -0
  106. package/dist/tools/pdf-extract.test.js.map +1 -0
  107. package/dist/tools/prompt-hints.d.ts.map +1 -1
  108. package/dist/tools/prompt-hints.js +2 -1
  109. package/dist/tools/prompt-hints.js.map +1 -1
  110. package/dist/tools/web-fetch.d.ts +16 -1
  111. package/dist/tools/web-fetch.d.ts.map +1 -1
  112. package/dist/tools/web-fetch.js +357 -45
  113. package/dist/tools/web-fetch.js.map +1 -1
  114. package/dist/tools/web-fetch.test.js +263 -2
  115. package/dist/tools/web-fetch.test.js.map +1 -1
  116. package/dist/tools/web-search.d.ts +14 -0
  117. package/dist/tools/web-search.d.ts.map +1 -1
  118. package/dist/tools/web-search.js +321 -35
  119. package/dist/tools/web-search.js.map +1 -1
  120. package/dist/tools/web-search.test.js +144 -1
  121. package/dist/tools/web-search.test.js.map +1 -1
  122. package/dist/ui/App.d.ts +11 -1
  123. package/dist/ui/App.d.ts.map +1 -1
  124. package/dist/ui/App.js +132 -17
  125. package/dist/ui/App.js.map +1 -1
  126. package/dist/ui/app-items.d.ts +14 -1
  127. package/dist/ui/app-items.d.ts.map +1 -1
  128. package/dist/ui/app-items.js +2 -0
  129. package/dist/ui/app-items.js.map +1 -1
  130. package/dist/ui/components/ChatLayout.d.ts +8 -1
  131. package/dist/ui/components/ChatLayout.d.ts.map +1 -1
  132. package/dist/ui/components/ChatLayout.js +4 -1
  133. package/dist/ui/components/ChatLayout.js.map +1 -1
  134. package/dist/ui/components/ChatScreen.d.ts +14 -1
  135. package/dist/ui/components/ChatScreen.d.ts.map +1 -1
  136. package/dist/ui/components/ChatScreen.js +3 -2
  137. package/dist/ui/components/ChatScreen.js.map +1 -1
  138. package/dist/ui/components/IdealHookMessage.d.ts +12 -0
  139. package/dist/ui/components/IdealHookMessage.d.ts.map +1 -0
  140. package/dist/ui/components/IdealHookMessage.js +24 -0
  141. package/dist/ui/components/IdealHookMessage.js.map +1 -0
  142. package/dist/ui/components/InputArea.d.ts +13 -1
  143. package/dist/ui/components/InputArea.d.ts.map +1 -1
  144. package/dist/ui/components/InputArea.js +96 -12
  145. package/dist/ui/components/InputArea.js.map +1 -1
  146. package/dist/ui/components/TranscriptViewport.d.ts +34 -0
  147. package/dist/ui/components/TranscriptViewport.d.ts.map +1 -0
  148. package/dist/ui/components/TranscriptViewport.js +45 -0
  149. package/dist/ui/components/TranscriptViewport.js.map +1 -0
  150. package/dist/ui/footer-jump-regression.test.d.ts +2 -0
  151. package/dist/ui/footer-jump-regression.test.d.ts.map +1 -0
  152. package/dist/ui/footer-jump-regression.test.js +167 -0
  153. package/dist/ui/footer-jump-regression.test.js.map +1 -0
  154. package/dist/ui/goal-events.d.ts +1 -1
  155. package/dist/ui/goal-events.d.ts.map +1 -1
  156. package/dist/ui/goal-events.js +2 -2
  157. package/dist/ui/goal-events.js.map +1 -1
  158. package/dist/ui/goal-events.test.js +2 -2
  159. package/dist/ui/goal-events.test.js.map +1 -1
  160. package/dist/ui/goal-lifecycle-orchestration.test.js +13 -97
  161. package/dist/ui/goal-lifecycle-orchestration.test.js.map +1 -1
  162. package/dist/ui/goal-progress.d.ts.map +1 -1
  163. package/dist/ui/goal-progress.js +0 -1
  164. package/dist/ui/goal-progress.js.map +1 -1
  165. package/dist/ui/goal-run-helpers.d.ts +0 -4
  166. package/dist/ui/goal-run-helpers.d.ts.map +1 -1
  167. package/dist/ui/goal-run-helpers.js +2 -21
  168. package/dist/ui/goal-run-helpers.js.map +1 -1
  169. package/dist/ui/hooks/useAgentLoop.d.ts +2 -0
  170. package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -1
  171. package/dist/ui/hooks/useAgentLoop.js +45 -1
  172. package/dist/ui/hooks/useAgentLoop.js.map +1 -1
  173. package/dist/ui/hooks/useChatLayoutMeasurements.d.ts +8 -0
  174. package/dist/ui/hooks/useChatLayoutMeasurements.d.ts.map +1 -1
  175. package/dist/ui/hooks/useChatLayoutMeasurements.js +2 -0
  176. package/dist/ui/hooks/useChatLayoutMeasurements.js.map +1 -1
  177. package/dist/ui/hooks/useGoalOrchestration.d.ts +2 -1
  178. package/dist/ui/hooks/useGoalOrchestration.d.ts.map +1 -1
  179. package/dist/ui/hooks/useGoalOrchestration.js +198 -80
  180. package/dist/ui/hooks/useGoalOrchestration.js.map +1 -1
  181. package/dist/ui/hooks/useTerminalSize.d.ts +8 -1
  182. package/dist/ui/hooks/useTerminalSize.d.ts.map +1 -1
  183. package/dist/ui/hooks/useTerminalSize.js +12 -2
  184. package/dist/ui/hooks/useTerminalSize.js.map +1 -1
  185. package/dist/ui/hooks/useTranscriptHistory.d.ts +1 -1
  186. package/dist/ui/hooks/useTranscriptHistory.d.ts.map +1 -1
  187. package/dist/ui/hooks/useTranscriptHistory.js +23 -9
  188. package/dist/ui/hooks/useTranscriptHistory.js.map +1 -1
  189. package/dist/ui/hooks/useTranscriptHistory.test.d.ts +2 -0
  190. package/dist/ui/hooks/useTranscriptHistory.test.d.ts.map +1 -0
  191. package/dist/ui/hooks/useTranscriptHistory.test.js +61 -0
  192. package/dist/ui/hooks/useTranscriptHistory.test.js.map +1 -0
  193. package/dist/ui/hooks/useTranscriptScroll.d.ts +30 -0
  194. package/dist/ui/hooks/useTranscriptScroll.d.ts.map +1 -0
  195. package/dist/ui/hooks/useTranscriptScroll.js +44 -0
  196. package/dist/ui/hooks/useTranscriptScroll.js.map +1 -0
  197. package/dist/ui/hooks/useTranscriptScroll.test.d.ts +2 -0
  198. package/dist/ui/hooks/useTranscriptScroll.test.d.ts.map +1 -0
  199. package/dist/ui/hooks/useTranscriptScroll.test.js +119 -0
  200. package/dist/ui/hooks/useTranscriptScroll.test.js.map +1 -0
  201. package/dist/ui/live-area-clamp.test.js +11 -2
  202. package/dist/ui/live-area-clamp.test.js.map +1 -1
  203. package/dist/ui/render.d.ts +11 -0
  204. package/dist/ui/render.d.ts.map +1 -1
  205. package/dist/ui/render.js +71 -7
  206. package/dist/ui/render.js.map +1 -1
  207. package/dist/ui/stores/transcript-scroll-store.d.ts +27 -0
  208. package/dist/ui/stores/transcript-scroll-store.d.ts.map +1 -0
  209. package/dist/ui/stores/transcript-scroll-store.js +73 -0
  210. package/dist/ui/stores/transcript-scroll-store.js.map +1 -0
  211. package/dist/ui/stores/transcript-scroll-store.test.d.ts +2 -0
  212. package/dist/ui/stores/transcript-scroll-store.test.d.ts.map +1 -0
  213. package/dist/ui/stores/transcript-scroll-store.test.js +73 -0
  214. package/dist/ui/stores/transcript-scroll-store.test.js.map +1 -0
  215. package/dist/ui/terminal-history.d.ts.map +1 -1
  216. package/dist/ui/terminal-history.js +8 -0
  217. package/dist/ui/terminal-history.js.map +1 -1
  218. package/dist/ui/testing/screen-recorder.d.ts +29 -0
  219. package/dist/ui/testing/screen-recorder.d.ts.map +1 -0
  220. package/dist/ui/testing/screen-recorder.js +179 -0
  221. package/dist/ui/testing/screen-recorder.js.map +1 -0
  222. package/dist/ui/transcript/TranscriptRenderer.d.ts.map +1 -1
  223. package/dist/ui/transcript/TranscriptRenderer.js +4 -1
  224. package/dist/ui/transcript/TranscriptRenderer.js.map +1 -1
  225. package/dist/ui/transcript/spacing.d.ts +3 -2
  226. package/dist/ui/transcript/spacing.d.ts.map +1 -1
  227. package/dist/ui/transcript/spacing.js +8 -0
  228. package/dist/ui/transcript/spacing.js.map +1 -1
  229. package/dist/ui/transcript/spacing.test.js +31 -0
  230. package/dist/ui/transcript/spacing.test.js.map +1 -1
  231. package/dist/ui/transcript/transcript-lines.d.ts +32 -0
  232. package/dist/ui/transcript/transcript-lines.d.ts.map +1 -0
  233. package/dist/ui/transcript/transcript-lines.js +82 -0
  234. package/dist/ui/transcript/transcript-lines.js.map +1 -0
  235. package/dist/ui/transcript/transcript-lines.test.d.ts +2 -0
  236. package/dist/ui/transcript/transcript-lines.test.d.ts.map +1 -0
  237. package/dist/ui/transcript/transcript-lines.test.js +76 -0
  238. package/dist/ui/transcript/transcript-lines.test.js.map +1 -0
  239. package/dist/ui/transcript-viewport-pinning.test.d.ts +2 -0
  240. package/dist/ui/transcript-viewport-pinning.test.d.ts.map +1 -0
  241. package/dist/ui/transcript-viewport-pinning.test.js +148 -0
  242. package/dist/ui/transcript-viewport-pinning.test.js.map +1 -0
  243. package/dist/ui/tui-history-parity.test.js +8 -0
  244. package/dist/ui/tui-history-parity.test.js.map +1 -1
  245. package/dist/ui/tui-simulation.test.d.ts +2 -0
  246. package/dist/ui/tui-simulation.test.d.ts.map +1 -0
  247. package/dist/ui/tui-simulation.test.js +138 -0
  248. package/dist/ui/tui-simulation.test.js.map +1 -0
  249. package/dist/ui/tui-terminal-recorder.test.d.ts +2 -0
  250. package/dist/ui/tui-terminal-recorder.test.d.ts.map +1 -0
  251. package/dist/ui/tui-terminal-recorder.test.js +134 -0
  252. package/dist/ui/tui-terminal-recorder.test.js.map +1 -0
  253. package/dist/utils/format.js +7 -0
  254. package/dist/utils/format.js.map +1 -1
  255. package/package.json +12 -6
@@ -1 +1 @@
1
- {"version":3,"file":"ChatScreen.d.ts","sourceRoot":"","sources":["../../../src/ui/components/ChatScreen.tsx"],"names":[],"mappings":"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"}
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":"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"}
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,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,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;AAsHvD,MAAM,UAAU,UAAU,CAAC,EACzB,OAAO,EACP,SAAS,EACT,UAAU,EACV,SAAS,EACT,oBAAoB,EACpB,iBAAiB,EACjB,UAAU,EACV,uBAAuB,EACvB,cAAc,EACd,oBAAoB,EACpB,UAAU,EACV,IAAI,EACJ,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,qBAAqB,EACrB,WAAW,EACX,iBAAiB,EACjB,uBAAuB,EACvB,KAAK,EACL,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,UAAU,EACV,aAAa,EACb,SAAS,EACT,WAAW,EACX,UAAU,EACV,aAAa,EACb,aAAa,EACb,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,SAAS,EACT,QAAQ,EACR,SAAS,EACT,cAAc,EACd,aAAa,EACb,UAAU,EACV,UAAU,EACV,OAAO,EACP,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,eAAe,EACf,aAAa,EACb,aAAa,EACb,YAAY,EACZ,WAAW,EACX,oBAAoB,EACpB,YAAY,EACZ,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,UAAU,EACV,aAAa,EACb,cAAc,GACE;IAChB,OAAO,CACL,MAAC,UAAU,IAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,aAC9D,UAAU,CAAC,CAAC,CAAC,CACZ,KAAC,kBAAkB,IAAC,KAAK,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,YAAY,GAAI,CAC7F,CAAC,CAAC,CAAC,CACF,KAAC,YAAY,IACX,SAAS,EAAE,SAAS,EACpB,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,SAAS,EACpB,oBAAoB,EAAE,oBAAoB,EAC1C,iBAAiB,EAAE,iBAAiB,EACpC,UAAU,EAAE,UAAU,EACtB,uBAAuB,EAAE,uBAAuB,EAChD,cAAc,EAAE,cAAc,EAC9B,oBAAoB,EAAE,oBAAoB,EAC1C,kBAAkB,EAAE,kBAAkB,EACtC,qBAAqB,EAAE,qBAAqB,GAC5C,CACH,EAED,MAAC,YAAY,IAAC,WAAW,EAAE,WAAW,aACpC,KAAC,cAAc,IACb,iBAAiB,EAAE,iBAAiB,EACpC,SAAS,EAAE,uBAAuB,EAClC,KAAK,EAAE,KAAK,GACZ,EAEF,KAAC,cAAc,IACb,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,KAAK,EACZ,iBAAiB,EAAE,iBAAiB,EACpC,eAAe,EAAE,eAAe,EAChC,kBAAkB,EAAE,kBAAkB,EACtC,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,aAAa,EAC5B,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,YAAY,EAC1B,kBAAkB,EAAE,kBAAkB,EACtC,eAAe,EAAE,eAAe,EAChC,eAAe,EAAE,eAAe,EAChC,SAAS,EAAE,SAAS,EACpB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,SAAS,EACpB,cAAc,EAAE,cAAc,EAC9B,cAAc,EAAE,cAAc,GAC9B,EACF,KAAC,SAAS,IACR,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAChC,OAAO,EAAE,aAAa,CAAC,OAAO,EAC9B,UAAU,EAAE,aAAa,CAAC,UAAU,EACpC,QAAQ,EAAE,SAAS,EACnB,QAAQ,EAAE,aAAa,CAAC,WAAW,EACnC,WAAW,EAAE,aAAa,CAAC,WAAW,EACtC,UAAU,EAAE,aAAa,CAAC,UAAU,EACpC,aAAa,EAAE,aAAa,CAAC,aAAa,EAC1C,cAAc,EAAE,UAAU,CAAC,IAAI,EAC/B,KAAK,EAAE,UAAU,CAAC,KAAK,EACvB,iBAAiB,EAAE,UAAU,CAAC,OAAO,EACrC,WAAW,EAAE,UAAU,CAAC,OAAO,EAC/B,aAAa,EAAE,UAAU,CAAC,QAAQ,EAClC,YAAY,EAAE,UAAU,CAAC,QAAQ,EACjC,cAAc,EAAE,UAAU,CAAC,IAAI,EAC/B,KAAK,EAAE,UAAU,CAAC,KAAK,EACvB,iBAAiB,EAAE,UAAU,CAAC,OAAO,EACrC,SAAS,EAAE,UAAU,CAAC,KAAK,EAC3B,YAAY,EAAE,UAAU,CAAC,QAAQ,EACjC,WAAW,EAAE,UAAU,CAAC,OAAO,EAC/B,YAAY,EAAE,aAAa,CAAC,YAAY,EACxC,cAAc,EAAE,aAAa,CAAC,cAAc,EAC5C,aAAa,EAAE,aAAa,CAAC,aAAa,EAC1C,gBAAgB,EAAE,aAAa,CAAC,gBAAgB,EAChD,GAAG,EAAE,aAAa,CAAC,GAAG,EACtB,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAChC,WAAW,EAAE,aAAa,CAAC,WAAW,EACtC,QAAQ,EAAE,aAAa,CAAC,QAAQ,GAChC,EACF,KAAC,cAAc,IACb,OAAO,EAAE,OAAO,EAChB,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,iBAAiB,EAAE,iBAAiB,EACpC,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,WAAW,EACxB,oBAAoB,EAAE,oBAAoB,EAC1C,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,SAAS,EACpB,aAAa,EAAE,aAAa,EAC5B,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,QAAQ,EAClB,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,cAAc,EAC9B,iBAAiB,EAAE,iBAAiB,GACpC,EACF,KAAC,eAAe,IACd,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,kBAAkB,EAC1B,KAAK,EAAE,eAAe,EACtB,OAAO,EAAE,cAAc,EACvB,QAAQ,EAAE,eAAe,EACzB,aAAa,EAAE,iBAAiB,EAChC,QAAQ,EAAE,eAAe,EACzB,UAAU,EAAE,iBAAiB,EAC7B,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,aAAa,EACrB,UAAU,EAAE,cAAc,EAC1B,KAAK,EAAE,KAAK,GACZ,IACW,IACJ,CACd,CAAC;AACJ,CAAC"}
@@ -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":"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"}
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
- if (hasInputTextRef.current) {
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
- // Scroll passthrough: when a scroll event is detected, temporarily disable
466
- // mouse tracking so the terminal handles scroll natively (scrollback buffer).
467
- // Re-enable after a short idle period so click-to-cursor continues to work.
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 (mouseDisabled && hasInputTextRef.current) {
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
- const pauseMouseForScroll = () => {
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, 300);
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: disable mouse tracking so the terminal handles it natively,
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
- if (isActive) {
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";