@prestyj/cli 4.3.209 → 4.3.237

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 (889) hide show
  1. package/README.md +17 -9
  2. package/dist/cli/auth.d.ts +4 -0
  3. package/dist/cli/auth.d.ts.map +1 -0
  4. package/dist/cli/auth.js +344 -0
  5. package/dist/cli/auth.js.map +1 -0
  6. package/dist/cli/command-routing.d.ts +28 -0
  7. package/dist/cli/command-routing.d.ts.map +1 -0
  8. package/dist/cli/command-routing.js +53 -0
  9. package/dist/cli/command-routing.js.map +1 -0
  10. package/dist/cli/command-routing.test.d.ts +2 -0
  11. package/dist/cli/command-routing.test.d.ts.map +1 -0
  12. package/dist/cli/command-routing.test.js +60 -0
  13. package/dist/cli/command-routing.test.js.map +1 -0
  14. package/dist/cli/mcp.d.ts +2 -0
  15. package/dist/cli/mcp.d.ts.map +1 -0
  16. package/dist/cli/mcp.js +309 -0
  17. package/dist/cli/mcp.js.map +1 -0
  18. package/dist/cli/pixel.d.ts +27 -0
  19. package/dist/cli/pixel.d.ts.map +1 -0
  20. package/dist/cli/pixel.js +103 -0
  21. package/dist/cli/pixel.js.map +1 -0
  22. package/dist/cli/shared.d.ts +13 -0
  23. package/dist/cli/shared.d.ts.map +1 -0
  24. package/dist/cli/shared.js +82 -0
  25. package/dist/cli/shared.js.map +1 -0
  26. package/dist/cli.d.ts +4 -1
  27. package/dist/cli.d.ts.map +1 -1
  28. package/dist/cli.js +174 -724
  29. package/dist/cli.js.map +1 -1
  30. package/dist/config.d.ts +4 -1
  31. package/dist/config.d.ts.map +1 -1
  32. package/dist/config.js +14 -1
  33. package/dist/config.js.map +1 -1
  34. package/dist/config.test.d.ts +2 -0
  35. package/dist/config.test.d.ts.map +1 -0
  36. package/dist/config.test.js +29 -0
  37. package/dist/config.test.js.map +1 -0
  38. package/dist/core/agent-session-compaction.test.d.ts +2 -0
  39. package/dist/core/agent-session-compaction.test.d.ts.map +1 -0
  40. package/dist/core/agent-session-compaction.test.js +114 -0
  41. package/dist/core/agent-session-compaction.test.js.map +1 -0
  42. package/dist/core/agent-session.d.ts +0 -23
  43. package/dist/core/agent-session.d.ts.map +1 -1
  44. package/dist/core/agent-session.js +6 -101
  45. package/dist/core/agent-session.js.map +1 -1
  46. package/dist/core/checkpoint-store.d.ts +93 -0
  47. package/dist/core/checkpoint-store.d.ts.map +1 -0
  48. package/dist/core/checkpoint-store.js +188 -0
  49. package/dist/core/checkpoint-store.js.map +1 -0
  50. package/dist/core/checkpoint-store.test.d.ts +2 -0
  51. package/dist/core/checkpoint-store.test.d.ts.map +1 -0
  52. package/dist/core/checkpoint-store.test.js +111 -0
  53. package/dist/core/checkpoint-store.test.js.map +1 -0
  54. package/dist/core/compaction/compactor.d.ts +4 -0
  55. package/dist/core/compaction/compactor.d.ts.map +1 -1
  56. package/dist/core/compaction/compactor.js +81 -28
  57. package/dist/core/compaction/compactor.js.map +1 -1
  58. package/dist/core/compaction/compactor.test.js +33 -9
  59. package/dist/core/compaction/compactor.test.js.map +1 -1
  60. package/dist/core/compaction/token-estimator.test.js +1 -1
  61. package/dist/core/continue-replay-inventory.test.d.ts +2 -0
  62. package/dist/core/continue-replay-inventory.test.d.ts.map +1 -0
  63. package/dist/core/continue-replay-inventory.test.js +42 -0
  64. package/dist/core/continue-replay-inventory.test.js.map +1 -0
  65. package/dist/core/goal-controller.d.ts +4 -0
  66. package/dist/core/goal-controller.d.ts.map +1 -1
  67. package/dist/core/goal-controller.js +223 -32
  68. package/dist/core/goal-controller.js.map +1 -1
  69. package/dist/core/goal-controller.test.js +387 -22
  70. package/dist/core/goal-controller.test.js.map +1 -1
  71. package/dist/core/goal-lifecycle-smoke.test.js +49 -8
  72. package/dist/core/goal-lifecycle-smoke.test.js.map +1 -1
  73. package/dist/core/goal-prerequisites.d.ts +23 -0
  74. package/dist/core/goal-prerequisites.d.ts.map +1 -0
  75. package/dist/core/goal-prerequisites.js +114 -0
  76. package/dist/core/goal-prerequisites.js.map +1 -0
  77. package/dist/core/goal-prerequisites.test.d.ts +2 -0
  78. package/dist/core/goal-prerequisites.test.d.ts.map +1 -0
  79. package/dist/core/goal-prerequisites.test.js +118 -0
  80. package/dist/core/goal-prerequisites.test.js.map +1 -0
  81. package/dist/core/goal-store.d.ts +12 -1
  82. package/dist/core/goal-store.d.ts.map +1 -1
  83. package/dist/core/goal-store.js +146 -40
  84. package/dist/core/goal-store.js.map +1 -1
  85. package/dist/core/goal-store.test.js +65 -8
  86. package/dist/core/goal-store.test.js.map +1 -1
  87. package/dist/core/goal-verifier.d.ts.map +1 -1
  88. package/dist/core/goal-verifier.js +4 -1
  89. package/dist/core/goal-verifier.js.map +1 -1
  90. package/dist/core/goal-verifier.test.js +43 -0
  91. package/dist/core/goal-verifier.test.js.map +1 -1
  92. package/dist/core/goal-worker.d.ts +2 -0
  93. package/dist/core/goal-worker.d.ts.map +1 -1
  94. package/dist/core/goal-worker.js +31 -7
  95. package/dist/core/goal-worker.js.map +1 -1
  96. package/dist/core/goal-worker.test.js +44 -0
  97. package/dist/core/goal-worker.test.js.map +1 -1
  98. package/dist/core/ideal-review.d.ts +20 -0
  99. package/dist/core/ideal-review.d.ts.map +1 -0
  100. package/dist/core/ideal-review.js +55 -0
  101. package/dist/core/ideal-review.js.map +1 -0
  102. package/dist/core/ideal-review.test.d.ts +2 -0
  103. package/dist/core/ideal-review.test.d.ts.map +1 -0
  104. package/dist/core/ideal-review.test.js +59 -0
  105. package/dist/core/ideal-review.test.js.map +1 -0
  106. package/dist/core/index.d.ts +1 -0
  107. package/dist/core/index.d.ts.map +1 -1
  108. package/dist/core/index.js +1 -0
  109. package/dist/core/index.js.map +1 -1
  110. package/dist/core/loop-breaker.d.ts +46 -0
  111. package/dist/core/loop-breaker.d.ts.map +1 -0
  112. package/dist/core/loop-breaker.js +79 -0
  113. package/dist/core/loop-breaker.js.map +1 -0
  114. package/dist/core/loop-breaker.test.d.ts +2 -0
  115. package/dist/core/loop-breaker.test.d.ts.map +1 -0
  116. package/dist/core/loop-breaker.test.js +110 -0
  117. package/dist/core/loop-breaker.test.js.map +1 -0
  118. package/dist/core/mcp/client.d.ts +20 -0
  119. package/dist/core/mcp/client.d.ts.map +1 -1
  120. package/dist/core/mcp/client.js +55 -11
  121. package/dist/core/mcp/client.js.map +1 -1
  122. package/dist/core/mcp/defaults.d.ts +7 -0
  123. package/dist/core/mcp/defaults.d.ts.map +1 -1
  124. package/dist/core/mcp/defaults.js +14 -0
  125. package/dist/core/mcp/defaults.js.map +1 -1
  126. package/dist/core/mcp/index.d.ts +6 -1
  127. package/dist/core/mcp/index.d.ts.map +1 -1
  128. package/dist/core/mcp/index.js +3 -1
  129. package/dist/core/mcp/index.js.map +1 -1
  130. package/dist/core/mcp/parse-add-command.d.ts +25 -0
  131. package/dist/core/mcp/parse-add-command.d.ts.map +1 -0
  132. package/dist/core/mcp/parse-add-command.js +220 -0
  133. package/dist/core/mcp/parse-add-command.js.map +1 -0
  134. package/dist/core/mcp/parse-add-command.test.d.ts +2 -0
  135. package/dist/core/mcp/parse-add-command.test.d.ts.map +1 -0
  136. package/dist/core/mcp/parse-add-command.test.js +75 -0
  137. package/dist/core/mcp/parse-add-command.test.js.map +1 -0
  138. package/dist/core/mcp/store.d.ts +80 -0
  139. package/dist/core/mcp/store.d.ts.map +1 -0
  140. package/dist/core/mcp/store.js +157 -0
  141. package/dist/core/mcp/store.js.map +1 -0
  142. package/dist/core/mcp/store.test.d.ts +2 -0
  143. package/dist/core/mcp/store.test.d.ts.map +1 -0
  144. package/dist/core/mcp/store.test.js +101 -0
  145. package/dist/core/mcp/store.test.js.map +1 -0
  146. package/dist/core/model-registry.d.ts +2 -2
  147. package/dist/core/model-registry.js +4 -4
  148. package/dist/core/model-registry.js.map +1 -1
  149. package/dist/core/model-registry.test.js +1 -1
  150. package/dist/core/model-registry.test.js.map +1 -1
  151. package/dist/core/prompt-commands.d.ts.map +1 -1
  152. package/dist/core/prompt-commands.js +64 -894
  153. package/dist/core/prompt-commands.js.map +1 -1
  154. package/dist/core/prompt-commands.test.js +49 -41
  155. package/dist/core/prompt-commands.test.js.map +1 -1
  156. package/dist/core/regrounding.d.ts +23 -0
  157. package/dist/core/regrounding.d.ts.map +1 -0
  158. package/dist/core/regrounding.js +21 -0
  159. package/dist/core/regrounding.js.map +1 -0
  160. package/dist/core/regrounding.test.d.ts +2 -0
  161. package/dist/core/regrounding.test.d.ts.map +1 -0
  162. package/dist/core/regrounding.test.js +38 -0
  163. package/dist/core/regrounding.test.js.map +1 -0
  164. package/dist/core/runtime-mode.d.ts +23 -0
  165. package/dist/core/runtime-mode.d.ts.map +1 -0
  166. package/dist/core/runtime-mode.js +30 -0
  167. package/dist/core/runtime-mode.js.map +1 -0
  168. package/dist/core/session-manager.d.ts +4 -0
  169. package/dist/core/session-manager.d.ts.map +1 -1
  170. package/dist/core/session-manager.js +20 -0
  171. package/dist/core/session-manager.js.map +1 -1
  172. package/dist/core/session-restore-display.test.d.ts +2 -0
  173. package/dist/core/session-restore-display.test.d.ts.map +1 -0
  174. package/dist/core/session-restore-display.test.js +78 -0
  175. package/dist/core/session-restore-display.test.js.map +1 -0
  176. package/dist/core/settings-manager.d.ts +4 -2
  177. package/dist/core/settings-manager.d.ts.map +1 -1
  178. package/dist/core/settings-manager.js +3 -6
  179. package/dist/core/settings-manager.js.map +1 -1
  180. package/dist/core/slash-commands.d.ts +0 -2
  181. package/dist/core/slash-commands.d.ts.map +1 -1
  182. package/dist/core/slash-commands.js +10 -15
  183. package/dist/core/slash-commands.js.map +1 -1
  184. package/dist/core/style-packs/index.js +1 -1
  185. package/dist/core/style-packs/index.js.map +1 -1
  186. package/dist/core/task-store.d.ts +26 -0
  187. package/dist/core/task-store.d.ts.map +1 -0
  188. package/dist/core/task-store.js +147 -0
  189. package/dist/core/task-store.js.map +1 -0
  190. package/dist/core/tasks-store.d.ts +24 -0
  191. package/dist/core/tasks-store.d.ts.map +1 -0
  192. package/dist/core/tasks-store.js +81 -0
  193. package/dist/core/tasks-store.js.map +1 -0
  194. package/dist/core/thinking-level.d.ts +5 -0
  195. package/dist/core/thinking-level.d.ts.map +1 -0
  196. package/dist/core/thinking-level.js +59 -0
  197. package/dist/core/thinking-level.js.map +1 -0
  198. package/dist/core/thinking-level.test.d.ts +2 -0
  199. package/dist/core/thinking-level.test.d.ts.map +1 -0
  200. package/dist/core/thinking-level.test.js +38 -0
  201. package/dist/core/thinking-level.test.js.map +1 -0
  202. package/dist/core/verify-commands.js +4 -4
  203. package/dist/core/verify-commands.js.map +1 -1
  204. package/dist/index.d.ts +1 -1
  205. package/dist/index.d.ts.map +1 -1
  206. package/dist/index.js +1 -1
  207. package/dist/index.js.map +1 -1
  208. package/dist/interactive.d.ts.map +1 -1
  209. package/dist/interactive.js +3 -1
  210. package/dist/interactive.js.map +1 -1
  211. package/dist/system-prompt.d.ts +5 -1
  212. package/dist/system-prompt.d.ts.map +1 -1
  213. package/dist/system-prompt.js +76 -48
  214. package/dist/system-prompt.js.map +1 -1
  215. package/dist/system-prompt.test.js +98 -46
  216. package/dist/system-prompt.test.js.map +1 -1
  217. package/dist/tools/bash.d.ts +6 -1
  218. package/dist/tools/bash.d.ts.map +1 -1
  219. package/dist/tools/bash.js +21 -3
  220. package/dist/tools/bash.js.map +1 -1
  221. package/dist/tools/checkpoint-hook.test.d.ts +2 -0
  222. package/dist/tools/checkpoint-hook.test.d.ts.map +1 -0
  223. package/dist/tools/checkpoint-hook.test.js +65 -0
  224. package/dist/tools/checkpoint-hook.test.js.map +1 -0
  225. package/dist/tools/edit-diff.d.ts +17 -4
  226. package/dist/tools/edit-diff.d.ts.map +1 -1
  227. package/dist/tools/edit-diff.js +78 -16
  228. package/dist/tools/edit-diff.js.map +1 -1
  229. package/dist/tools/edit-diff.test.js +31 -1
  230. package/dist/tools/edit-diff.test.js.map +1 -1
  231. package/dist/tools/edit-robustness.test.d.ts +2 -0
  232. package/dist/tools/edit-robustness.test.d.ts.map +1 -0
  233. package/dist/tools/edit-robustness.test.js +415 -0
  234. package/dist/tools/edit-robustness.test.js.map +1 -0
  235. package/dist/tools/edit.d.ts +8 -2
  236. package/dist/tools/edit.d.ts.map +1 -1
  237. package/dist/tools/edit.js +48 -20
  238. package/dist/tools/edit.js.map +1 -1
  239. package/dist/tools/edit.test.js +23 -22
  240. package/dist/tools/edit.test.js.map +1 -1
  241. package/dist/tools/enter-plan.d.ts +1 -1
  242. package/dist/tools/enter-plan.d.ts.map +1 -1
  243. package/dist/tools/enter-plan.js +8 -11
  244. package/dist/tools/enter-plan.js.map +1 -1
  245. package/dist/tools/exit-plan.d.ts.map +1 -1
  246. package/dist/tools/exit-plan.js +8 -9
  247. package/dist/tools/exit-plan.js.map +1 -1
  248. package/dist/tools/goal-mode.test.d.ts +2 -0
  249. package/dist/tools/goal-mode.test.d.ts.map +1 -0
  250. package/dist/tools/goal-mode.test.js +121 -0
  251. package/dist/tools/goal-mode.test.js.map +1 -0
  252. package/dist/tools/goals.d.ts +14 -2
  253. package/dist/tools/goals.d.ts.map +1 -1
  254. package/dist/tools/goals.js +257 -26
  255. package/dist/tools/goals.js.map +1 -1
  256. package/dist/tools/goals.test.js +365 -1
  257. package/dist/tools/goals.test.js.map +1 -1
  258. package/dist/tools/html-extract.d.ts +58 -0
  259. package/dist/tools/html-extract.d.ts.map +1 -0
  260. package/dist/tools/html-extract.js +130 -0
  261. package/dist/tools/html-extract.js.map +1 -0
  262. package/dist/tools/html-extract.test.d.ts +2 -0
  263. package/dist/tools/html-extract.test.d.ts.map +1 -0
  264. package/dist/tools/html-extract.test.js +60 -0
  265. package/dist/tools/html-extract.test.js.map +1 -0
  266. package/dist/tools/index.d.ts +16 -4
  267. package/dist/tools/index.d.ts.map +1 -1
  268. package/dist/tools/index.js +11 -7
  269. package/dist/tools/index.js.map +1 -1
  270. package/dist/tools/pdf-extract.d.ts +18 -0
  271. package/dist/tools/pdf-extract.d.ts.map +1 -0
  272. package/dist/tools/pdf-extract.js +43 -0
  273. package/dist/tools/pdf-extract.js.map +1 -0
  274. package/dist/tools/pdf-extract.test.d.ts +2 -0
  275. package/dist/tools/pdf-extract.test.d.ts.map +1 -0
  276. package/dist/tools/pdf-extract.test.js +15 -0
  277. package/dist/tools/pdf-extract.test.js.map +1 -0
  278. package/dist/tools/plan-mode.test.js +82 -221
  279. package/dist/tools/plan-mode.test.js.map +1 -1
  280. package/dist/tools/prompt-hints.d.ts.map +1 -1
  281. package/dist/tools/prompt-hints.js +6 -9
  282. package/dist/tools/prompt-hints.js.map +1 -1
  283. package/dist/tools/read-only-bash.d.ts +13 -0
  284. package/dist/tools/read-only-bash.d.ts.map +1 -0
  285. package/dist/tools/read-only-bash.js +155 -0
  286. package/dist/tools/read-only-bash.js.map +1 -0
  287. package/dist/tools/read-only-bash.test.d.ts +2 -0
  288. package/dist/tools/read-only-bash.test.d.ts.map +1 -0
  289. package/dist/tools/read-only-bash.test.js +47 -0
  290. package/dist/tools/read-only-bash.test.js.map +1 -0
  291. package/dist/tools/read.d.ts.map +1 -1
  292. package/dist/tools/read.js +14 -1
  293. package/dist/tools/read.js.map +1 -1
  294. package/dist/tools/read.test.js +4 -0
  295. package/dist/tools/read.test.js.map +1 -1
  296. package/dist/tools/screenshot.d.ts +25 -0
  297. package/dist/tools/screenshot.d.ts.map +1 -0
  298. package/dist/tools/screenshot.js +165 -0
  299. package/dist/tools/screenshot.js.map +1 -0
  300. package/dist/tools/screenshot.test.d.ts +2 -0
  301. package/dist/tools/screenshot.test.d.ts.map +1 -0
  302. package/dist/tools/screenshot.test.js +145 -0
  303. package/dist/tools/screenshot.test.js.map +1 -0
  304. package/dist/tools/subagent.d.ts +7 -2
  305. package/dist/tools/subagent.d.ts.map +1 -1
  306. package/dist/tools/subagent.js +32 -11
  307. package/dist/tools/subagent.js.map +1 -1
  308. package/dist/tools/tasks.d.ts.map +1 -1
  309. package/dist/tools/tasks.js +22 -58
  310. package/dist/tools/tasks.js.map +1 -1
  311. package/dist/tools/web-fetch.d.ts +16 -1
  312. package/dist/tools/web-fetch.d.ts.map +1 -1
  313. package/dist/tools/web-fetch.js +357 -45
  314. package/dist/tools/web-fetch.js.map +1 -1
  315. package/dist/tools/web-fetch.test.js +263 -2
  316. package/dist/tools/web-fetch.test.js.map +1 -1
  317. package/dist/tools/web-search.d.ts +14 -0
  318. package/dist/tools/web-search.d.ts.map +1 -1
  319. package/dist/tools/web-search.js +321 -35
  320. package/dist/tools/web-search.js.map +1 -1
  321. package/dist/tools/web-search.test.js +144 -1
  322. package/dist/tools/web-search.test.js.map +1 -1
  323. package/dist/tools/write.d.ts +8 -2
  324. package/dist/tools/write.d.ts.map +1 -1
  325. package/dist/tools/write.js +36 -9
  326. package/dist/tools/write.js.map +1 -1
  327. package/dist/tools/write.test.js +0 -16
  328. package/dist/tools/write.test.js.map +1 -1
  329. package/dist/ui/App.d.ts +52 -272
  330. package/dist/ui/App.d.ts.map +1 -1
  331. package/dist/ui/App.js +1606 -2199
  332. package/dist/ui/App.js.map +1 -1
  333. package/dist/ui/activity-phrases.d.ts.map +1 -1
  334. package/dist/ui/activity-phrases.js +0 -2
  335. package/dist/ui/activity-phrases.js.map +1 -1
  336. package/dist/ui/app-items.d.ts +276 -0
  337. package/dist/ui/app-items.d.ts.map +1 -0
  338. package/dist/ui/app-items.js +52 -0
  339. package/dist/ui/app-items.js.map +1 -0
  340. package/dist/ui/app-items.test.d.ts +2 -0
  341. package/dist/ui/app-items.test.d.ts.map +1 -0
  342. package/dist/ui/app-items.test.js +38 -0
  343. package/dist/ui/app-items.test.js.map +1 -0
  344. package/dist/ui/app-state-persistence.test.js +45 -160
  345. package/dist/ui/app-state-persistence.test.js.map +1 -1
  346. package/dist/ui/assistant-stream-flush-parity.test.d.ts +2 -0
  347. package/dist/ui/assistant-stream-flush-parity.test.d.ts.map +1 -0
  348. package/dist/ui/assistant-stream-flush-parity.test.js +85 -0
  349. package/dist/ui/assistant-stream-flush-parity.test.js.map +1 -0
  350. package/dist/ui/chat-layout-pinning.test.d.ts +2 -0
  351. package/dist/ui/chat-layout-pinning.test.d.ts.map +1 -0
  352. package/dist/ui/chat-layout-pinning.test.js +525 -0
  353. package/dist/ui/chat-layout-pinning.test.js.map +1 -0
  354. package/dist/ui/components/ActivityIndicator.d.ts +1 -2
  355. package/dist/ui/components/ActivityIndicator.d.ts.map +1 -1
  356. package/dist/ui/components/ActivityIndicator.js +63 -94
  357. package/dist/ui/components/ActivityIndicator.js.map +1 -1
  358. package/dist/ui/components/AnimationContext.d.ts.map +1 -1
  359. package/dist/ui/components/AnimationContext.js +3 -5
  360. package/dist/ui/components/AnimationContext.js.map +1 -1
  361. package/dist/ui/components/AssistantMessage.d.ts +6 -2
  362. package/dist/ui/components/AssistantMessage.d.ts.map +1 -1
  363. package/dist/ui/components/AssistantMessage.js +9 -4
  364. package/dist/ui/components/AssistantMessage.js.map +1 -1
  365. package/dist/ui/components/AssistantMessage.test.d.ts +2 -0
  366. package/dist/ui/components/AssistantMessage.test.d.ts.map +1 -0
  367. package/dist/ui/components/AssistantMessage.test.js +387 -0
  368. package/dist/ui/components/AssistantMessage.test.js.map +1 -0
  369. package/dist/ui/components/BackgroundTasksBar.d.ts +1 -3
  370. package/dist/ui/components/BackgroundTasksBar.d.ts.map +1 -1
  371. package/dist/ui/components/BackgroundTasksBar.js +8 -10
  372. package/dist/ui/components/BackgroundTasksBar.js.map +1 -1
  373. package/dist/ui/components/Banner.d.ts +1 -2
  374. package/dist/ui/components/Banner.d.ts.map +1 -1
  375. package/dist/ui/components/Banner.js +9 -4
  376. package/dist/ui/components/Banner.js.map +1 -1
  377. package/dist/ui/components/ChatFooterPane.d.ts +25 -0
  378. package/dist/ui/components/ChatFooterPane.d.ts.map +1 -0
  379. package/dist/ui/components/ChatFooterPane.js +15 -0
  380. package/dist/ui/components/ChatFooterPane.js.map +1 -0
  381. package/dist/ui/components/ChatInputStack.d.ts +36 -0
  382. package/dist/ui/components/ChatInputStack.d.ts.map +1 -0
  383. package/dist/ui/components/ChatInputStack.js +10 -0
  384. package/dist/ui/components/ChatInputStack.js.map +1 -0
  385. package/dist/ui/components/ChatLayout.d.ts +37 -0
  386. package/dist/ui/components/ChatLayout.d.ts.map +1 -0
  387. package/dist/ui/components/ChatLayout.js +21 -0
  388. package/dist/ui/components/ChatLayout.js.map +1 -0
  389. package/dist/ui/components/ChatLivePane.d.ts +18 -0
  390. package/dist/ui/components/ChatLivePane.d.ts.map +1 -0
  391. package/dist/ui/components/ChatLivePane.js +22 -0
  392. package/dist/ui/components/ChatLivePane.js.map +1 -0
  393. package/dist/ui/components/ChatScreen.d.ts +136 -0
  394. package/dist/ui/components/ChatScreen.d.ts.map +1 -0
  395. package/dist/ui/components/ChatScreen.js +16 -0
  396. package/dist/ui/components/ChatScreen.js.map +1 -0
  397. package/dist/ui/components/ChatStatusRow.d.ts +34 -0
  398. package/dist/ui/components/ChatStatusRow.d.ts.map +1 -0
  399. package/dist/ui/components/ChatStatusRow.js +11 -0
  400. package/dist/ui/components/ChatStatusRow.js.map +1 -0
  401. package/dist/ui/components/CompactionNotice.d.ts +4 -2
  402. package/dist/ui/components/CompactionNotice.d.ts.map +1 -1
  403. package/dist/ui/components/CompactionNotice.js +4 -4
  404. package/dist/ui/components/CompactionNotice.js.map +1 -1
  405. package/dist/ui/components/Footer.d.ts +27 -6
  406. package/dist/ui/components/Footer.d.ts.map +1 -1
  407. package/dist/ui/components/Footer.js +75 -30
  408. package/dist/ui/components/Footer.js.map +1 -1
  409. package/dist/ui/components/FooterStatusRow.d.ts +20 -0
  410. package/dist/ui/components/FooterStatusRow.d.ts.map +1 -0
  411. package/dist/ui/components/FooterStatusRow.js +10 -0
  412. package/dist/ui/components/FooterStatusRow.js.map +1 -0
  413. package/dist/ui/components/FullScreenOverlayRouter.d.ts +19 -0
  414. package/dist/ui/components/FullScreenOverlayRouter.d.ts.map +1 -0
  415. package/dist/ui/components/FullScreenOverlayRouter.js +18 -0
  416. package/dist/ui/components/FullScreenOverlayRouter.js.map +1 -0
  417. package/dist/ui/components/GoalOverlay.d.ts +28 -20
  418. package/dist/ui/components/GoalOverlay.d.ts.map +1 -1
  419. package/dist/ui/components/GoalOverlay.js +283 -253
  420. package/dist/ui/components/GoalOverlay.js.map +1 -1
  421. package/dist/ui/components/GoalStatusBar.d.ts.map +1 -1
  422. package/dist/ui/components/GoalStatusBar.js +2 -1
  423. package/dist/ui/components/GoalStatusBar.js.map +1 -1
  424. package/dist/ui/components/IdealHookMessage.d.ts +14 -0
  425. package/dist/ui/components/IdealHookMessage.d.ts.map +1 -0
  426. package/dist/ui/components/IdealHookMessage.js +26 -0
  427. package/dist/ui/components/IdealHookMessage.js.map +1 -0
  428. package/dist/ui/components/InputArea.d.ts +31 -6
  429. package/dist/ui/components/InputArea.d.ts.map +1 -1
  430. package/dist/ui/components/InputArea.js +208 -50
  431. package/dist/ui/components/InputArea.js.map +1 -1
  432. package/dist/ui/components/InputArea.test.js +11 -1
  433. package/dist/ui/components/InputArea.test.js.map +1 -1
  434. package/dist/ui/components/LiveToolPanel.d.ts +30 -0
  435. package/dist/ui/components/LiveToolPanel.d.ts.map +1 -0
  436. package/dist/ui/components/LiveToolPanel.js +66 -0
  437. package/dist/ui/components/LiveToolPanel.js.map +1 -0
  438. package/dist/ui/components/Markdown.d.ts +11 -11
  439. package/dist/ui/components/Markdown.d.ts.map +1 -1
  440. package/dist/ui/components/Markdown.js +28 -198
  441. package/dist/ui/components/Markdown.js.map +1 -1
  442. package/dist/ui/components/ModelSelector.d.ts.map +1 -1
  443. package/dist/ui/components/ModelSelector.js +18 -18
  444. package/dist/ui/components/ModelSelector.js.map +1 -1
  445. package/dist/ui/components/PlanModeLogo.d.ts +3 -0
  446. package/dist/ui/components/PlanModeLogo.d.ts.map +1 -0
  447. package/dist/ui/components/PlanModeLogo.js +49 -0
  448. package/dist/ui/components/PlanModeLogo.js.map +1 -0
  449. package/dist/ui/components/PlanOverlay.d.ts +7 -0
  450. package/dist/ui/components/PlanOverlay.d.ts.map +1 -1
  451. package/dist/ui/components/PlanOverlay.js +17 -3
  452. package/dist/ui/components/PlanOverlay.js.map +1 -1
  453. package/dist/ui/components/PlanOverlay.test.d.ts +2 -0
  454. package/dist/ui/components/PlanOverlay.test.d.ts.map +1 -0
  455. package/dist/ui/components/PlanOverlay.test.js +24 -0
  456. package/dist/ui/components/PlanOverlay.test.js.map +1 -0
  457. package/dist/ui/components/QueueIndicator.d.ts +9 -0
  458. package/dist/ui/components/QueueIndicator.d.ts.map +1 -0
  459. package/dist/ui/components/QueueIndicator.js +9 -0
  460. package/dist/ui/components/QueueIndicator.js.map +1 -0
  461. package/dist/ui/components/RewindOverlay.d.ts +18 -0
  462. package/dist/ui/components/RewindOverlay.d.ts.map +1 -0
  463. package/dist/ui/components/RewindOverlay.js +52 -0
  464. package/dist/ui/components/RewindOverlay.js.map +1 -0
  465. package/dist/ui/components/SelectList.d.ts.map +1 -1
  466. package/dist/ui/components/SelectList.js +5 -0
  467. package/dist/ui/components/SelectList.js.map +1 -1
  468. package/dist/ui/components/ServerToolExecution.d.ts +2 -0
  469. package/dist/ui/components/ServerToolExecution.d.ts.map +1 -1
  470. package/dist/ui/components/ServerToolExecution.js +7 -23
  471. package/dist/ui/components/ServerToolExecution.js.map +1 -1
  472. package/dist/ui/components/SessionSummary.d.ts +5 -0
  473. package/dist/ui/components/SessionSummary.d.ts.map +1 -0
  474. package/dist/ui/components/SessionSummary.js +32 -0
  475. package/dist/ui/components/SessionSummary.js.map +1 -0
  476. package/dist/ui/components/SlashCommandMenu.d.ts +4 -3
  477. package/dist/ui/components/SlashCommandMenu.d.ts.map +1 -1
  478. package/dist/ui/components/SlashCommandMenu.js +38 -26
  479. package/dist/ui/components/SlashCommandMenu.js.map +1 -1
  480. package/dist/ui/components/SlashStyledSelectList.d.ts +21 -0
  481. package/dist/ui/components/SlashStyledSelectList.d.ts.map +1 -0
  482. package/dist/ui/components/SlashStyledSelectList.js +71 -0
  483. package/dist/ui/components/SlashStyledSelectList.js.map +1 -0
  484. package/dist/ui/components/StreamingArea.d.ts +11 -2
  485. package/dist/ui/components/StreamingArea.d.ts.map +1 -1
  486. package/dist/ui/components/StreamingArea.js +20 -23
  487. package/dist/ui/components/StreamingArea.js.map +1 -1
  488. package/dist/ui/components/StreamingArea.test.d.ts +2 -0
  489. package/dist/ui/components/StreamingArea.test.d.ts.map +1 -0
  490. package/dist/ui/components/StreamingArea.test.js +18 -0
  491. package/dist/ui/components/StreamingArea.test.js.map +1 -0
  492. package/dist/ui/components/SubAgentPanel.d.ts +2 -1
  493. package/dist/ui/components/SubAgentPanel.d.ts.map +1 -1
  494. package/dist/ui/components/SubAgentPanel.js +4 -3
  495. package/dist/ui/components/SubAgentPanel.js.map +1 -1
  496. package/dist/ui/components/TaskOverlay.d.ts.map +1 -1
  497. package/dist/ui/components/TaskOverlay.js +53 -82
  498. package/dist/ui/components/TaskOverlay.js.map +1 -1
  499. package/dist/ui/components/TaskPickerMenu.d.ts +9 -0
  500. package/dist/ui/components/TaskPickerMenu.d.ts.map +1 -0
  501. package/dist/ui/components/TaskPickerMenu.js +33 -0
  502. package/dist/ui/components/TaskPickerMenu.js.map +1 -0
  503. package/dist/ui/components/ThemeSelector.js +2 -2
  504. package/dist/ui/components/ThemeSelector.js.map +1 -1
  505. package/dist/ui/components/ToolExecution.d.ts +2 -0
  506. package/dist/ui/components/ToolExecution.d.ts.map +1 -1
  507. package/dist/ui/components/ToolExecution.js +18 -52
  508. package/dist/ui/components/ToolExecution.js.map +1 -1
  509. package/dist/ui/components/ToolGroupExecution.d.ts +6 -2
  510. package/dist/ui/components/ToolGroupExecution.d.ts.map +1 -1
  511. package/dist/ui/components/ToolGroupExecution.js +15 -147
  512. package/dist/ui/components/ToolGroupExecution.js.map +1 -1
  513. package/dist/ui/components/ToolUseLoader.d.ts +3 -1
  514. package/dist/ui/components/ToolUseLoader.d.ts.map +1 -1
  515. package/dist/ui/components/ToolUseLoader.js +2 -2
  516. package/dist/ui/components/ToolUseLoader.js.map +1 -1
  517. package/dist/ui/components/TranscriptViewport.d.ts +34 -0
  518. package/dist/ui/components/TranscriptViewport.d.ts.map +1 -0
  519. package/dist/ui/components/TranscriptViewport.js +45 -0
  520. package/dist/ui/components/TranscriptViewport.js.map +1 -0
  521. package/dist/ui/components/UserMessage.d.ts.map +1 -1
  522. package/dist/ui/components/UserMessage.js +15 -10
  523. package/dist/ui/components/UserMessage.js.map +1 -1
  524. package/dist/ui/components/UserMessage.test.d.ts +2 -0
  525. package/dist/ui/components/UserMessage.test.d.ts.map +1 -0
  526. package/dist/ui/components/UserMessage.test.js +39 -0
  527. package/dist/ui/components/UserMessage.test.js.map +1 -0
  528. package/dist/ui/components/index.d.ts +5 -0
  529. package/dist/ui/components/index.d.ts.map +1 -1
  530. package/dist/ui/components/index.js +5 -0
  531. package/dist/ui/components/index.js.map +1 -1
  532. package/dist/ui/duration-format.d.ts +2 -0
  533. package/dist/ui/duration-format.d.ts.map +1 -0
  534. package/dist/ui/duration-format.js +9 -0
  535. package/dist/ui/duration-format.js.map +1 -0
  536. package/dist/ui/duration-summary.d.ts +2 -0
  537. package/dist/ui/duration-summary.d.ts.map +1 -0
  538. package/dist/ui/duration-summary.js +66 -0
  539. package/dist/ui/duration-summary.js.map +1 -0
  540. package/dist/ui/error-item.d.ts +8 -0
  541. package/dist/ui/error-item.d.ts.map +1 -0
  542. package/dist/ui/error-item.js +32 -0
  543. package/dist/ui/error-item.js.map +1 -0
  544. package/dist/ui/footer-jump-regression.test.d.ts +2 -0
  545. package/dist/ui/footer-jump-regression.test.d.ts.map +1 -0
  546. package/dist/ui/footer-jump-regression.test.js +177 -0
  547. package/dist/ui/footer-jump-regression.test.js.map +1 -0
  548. package/dist/ui/footer-status-layout.test.js +22 -7
  549. package/dist/ui/footer-status-layout.test.js.map +1 -1
  550. package/dist/ui/goal-events.d.ts.map +1 -1
  551. package/dist/ui/goal-events.js +14 -6
  552. package/dist/ui/goal-events.js.map +1 -1
  553. package/dist/ui/goal-events.test.js +40 -2
  554. package/dist/ui/goal-events.test.js.map +1 -1
  555. package/dist/ui/goal-lifecycle-orchestration.test.d.ts +2 -0
  556. package/dist/ui/goal-lifecycle-orchestration.test.d.ts.map +1 -0
  557. package/dist/ui/goal-lifecycle-orchestration.test.js +512 -0
  558. package/dist/ui/goal-lifecycle-orchestration.test.js.map +1 -0
  559. package/dist/ui/goal-overlay.test.js +122 -44
  560. package/dist/ui/goal-overlay.test.js.map +1 -1
  561. package/dist/ui/goal-status-bar.test.js +29 -0
  562. package/dist/ui/goal-status-bar.test.js.map +1 -1
  563. package/dist/ui/goal-summary.d.ts +14 -0
  564. package/dist/ui/goal-summary.d.ts.map +1 -0
  565. package/dist/ui/goal-summary.js +194 -0
  566. package/dist/ui/goal-summary.js.map +1 -0
  567. package/dist/ui/hooks/useAgentLoop.d.ts +25 -4
  568. package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -1
  569. package/dist/ui/hooks/useAgentLoop.js +197 -22
  570. package/dist/ui/hooks/useAgentLoop.js.map +1 -1
  571. package/dist/ui/hooks/useAgentLoop.test.d.ts +2 -0
  572. package/dist/ui/hooks/useAgentLoop.test.d.ts.map +1 -0
  573. package/dist/ui/hooks/useAgentLoop.test.js +8 -0
  574. package/dist/ui/hooks/useAgentLoop.test.js.map +1 -0
  575. package/dist/ui/hooks/useChatLayoutMeasurements.d.ts +45 -0
  576. package/dist/ui/hooks/useChatLayoutMeasurements.d.ts.map +1 -0
  577. package/dist/ui/hooks/useChatLayoutMeasurements.js +97 -0
  578. package/dist/ui/hooks/useChatLayoutMeasurements.js.map +1 -0
  579. package/dist/ui/hooks/useContextCompaction.d.ts +41 -0
  580. package/dist/ui/hooks/useContextCompaction.d.ts.map +1 -0
  581. package/dist/ui/hooks/useContextCompaction.js +149 -0
  582. package/dist/ui/hooks/useContextCompaction.js.map +1 -0
  583. package/dist/ui/hooks/useModeState.d.ts +56 -0
  584. package/dist/ui/hooks/useModeState.d.ts.map +1 -0
  585. package/dist/ui/hooks/useModeState.js +65 -0
  586. package/dist/ui/hooks/useModeState.js.map +1 -0
  587. package/dist/ui/hooks/usePixelFixFlow.d.ts +57 -0
  588. package/dist/ui/hooks/usePixelFixFlow.d.ts.map +1 -0
  589. package/dist/ui/hooks/usePixelFixFlow.js +102 -0
  590. package/dist/ui/hooks/usePixelFixFlow.js.map +1 -0
  591. package/dist/ui/hooks/useSessionPersistence.d.ts +34 -0
  592. package/dist/ui/hooks/useSessionPersistence.d.ts.map +1 -0
  593. package/dist/ui/hooks/useSessionPersistence.js +67 -0
  594. package/dist/ui/hooks/useSessionPersistence.js.map +1 -0
  595. package/dist/ui/hooks/useTaskPickerController.d.ts +19 -0
  596. package/dist/ui/hooks/useTaskPickerController.d.ts.map +1 -0
  597. package/dist/ui/hooks/useTaskPickerController.js +41 -0
  598. package/dist/ui/hooks/useTaskPickerController.js.map +1 -0
  599. package/dist/ui/hooks/useTerminalSize.d.ts +13 -10
  600. package/dist/ui/hooks/useTerminalSize.d.ts.map +1 -1
  601. package/dist/ui/hooks/useTerminalSize.js +21 -16
  602. package/dist/ui/hooks/useTerminalSize.js.map +1 -1
  603. package/dist/ui/hooks/useTranscriptHistory.d.ts +48 -0
  604. package/dist/ui/hooks/useTranscriptHistory.d.ts.map +1 -0
  605. package/dist/ui/hooks/useTranscriptHistory.js +113 -0
  606. package/dist/ui/hooks/useTranscriptHistory.js.map +1 -0
  607. package/dist/ui/hooks/useTranscriptHistory.test.d.ts +2 -0
  608. package/dist/ui/hooks/useTranscriptHistory.test.d.ts.map +1 -0
  609. package/dist/ui/hooks/useTranscriptHistory.test.js +61 -0
  610. package/dist/ui/hooks/useTranscriptHistory.test.js.map +1 -0
  611. package/dist/ui/hooks/useTranscriptScroll.d.ts +30 -0
  612. package/dist/ui/hooks/useTranscriptScroll.d.ts.map +1 -0
  613. package/dist/ui/hooks/useTranscriptScroll.js +44 -0
  614. package/dist/ui/hooks/useTranscriptScroll.js.map +1 -0
  615. package/dist/ui/hooks/useTranscriptScroll.test.d.ts +2 -0
  616. package/dist/ui/hooks/useTranscriptScroll.test.d.ts.map +1 -0
  617. package/dist/ui/hooks/useTranscriptScroll.test.js +119 -0
  618. package/dist/ui/hooks/useTranscriptScroll.test.js.map +1 -0
  619. package/dist/ui/item-helpers.d.ts +26 -0
  620. package/dist/ui/item-helpers.d.ts.map +1 -0
  621. package/dist/ui/item-helpers.js +114 -0
  622. package/dist/ui/item-helpers.js.map +1 -0
  623. package/dist/ui/layout-decisions.d.ts +81 -0
  624. package/dist/ui/layout-decisions.d.ts.map +1 -0
  625. package/dist/ui/layout-decisions.js +89 -0
  626. package/dist/ui/layout-decisions.js.map +1 -0
  627. package/dist/ui/live-area-clamp.test.d.ts +2 -0
  628. package/dist/ui/live-area-clamp.test.d.ts.map +1 -0
  629. package/dist/ui/live-area-clamp.test.js +88 -0
  630. package/dist/ui/live-area-clamp.test.js.map +1 -0
  631. package/dist/ui/live-area-height.d.ts +35 -0
  632. package/dist/ui/live-area-height.d.ts.map +1 -0
  633. package/dist/ui/live-area-height.js +80 -0
  634. package/dist/ui/live-area-height.js.map +1 -0
  635. package/dist/ui/live-area-height.test.d.ts +2 -0
  636. package/dist/ui/live-area-height.test.d.ts.map +1 -0
  637. package/dist/ui/live-area-height.test.js +67 -0
  638. package/dist/ui/live-area-height.test.js.map +1 -0
  639. package/dist/ui/live-frame-height.test.d.ts +2 -0
  640. package/dist/ui/live-frame-height.test.d.ts.map +1 -0
  641. package/dist/ui/live-frame-height.test.js +116 -0
  642. package/dist/ui/live-frame-height.test.js.map +1 -0
  643. package/dist/ui/live-item-flush.d.ts +2 -2
  644. package/dist/ui/live-item-flush.d.ts.map +1 -1
  645. package/dist/ui/live-item-flush.js +8 -4
  646. package/dist/ui/live-item-flush.js.map +1 -1
  647. package/dist/ui/login.js +1 -1
  648. package/dist/ui/long-prompt-regression-harness.test.d.ts +2 -0
  649. package/dist/ui/long-prompt-regression-harness.test.d.ts.map +1 -0
  650. package/dist/ui/long-prompt-regression-harness.test.js +195 -0
  651. package/dist/ui/long-prompt-regression-harness.test.js.map +1 -0
  652. package/dist/ui/mcp.d.ts +62 -0
  653. package/dist/ui/mcp.d.ts.map +1 -0
  654. package/dist/ui/mcp.js +306 -0
  655. package/dist/ui/mcp.js.map +1 -0
  656. package/dist/ui/plan-overlay.test.js +7 -29
  657. package/dist/ui/plan-overlay.test.js.map +1 -1
  658. package/dist/ui/prompt-routing.d.ts +11 -0
  659. package/dist/ui/prompt-routing.d.ts.map +1 -0
  660. package/dist/ui/prompt-routing.js +61 -0
  661. package/dist/ui/prompt-routing.js.map +1 -0
  662. package/dist/ui/queued-message.test.d.ts +2 -0
  663. package/dist/ui/queued-message.test.d.ts.map +1 -0
  664. package/dist/ui/queued-message.test.js +162 -0
  665. package/dist/ui/queued-message.test.js.map +1 -0
  666. package/dist/ui/render.d.ts +38 -34
  667. package/dist/ui/render.d.ts.map +1 -1
  668. package/dist/ui/render.js +128 -41
  669. package/dist/ui/render.js.map +1 -1
  670. package/dist/ui/render.test.d.ts +2 -0
  671. package/dist/ui/render.test.d.ts.map +1 -0
  672. package/dist/ui/render.test.js +16 -0
  673. package/dist/ui/render.test.js.map +1 -0
  674. package/dist/ui/scroll-stabilization.test.js +1 -7
  675. package/dist/ui/scroll-stabilization.test.js.map +1 -1
  676. package/dist/ui/session-summary.d.ts +63 -0
  677. package/dist/ui/session-summary.d.ts.map +1 -0
  678. package/dist/ui/session-summary.js +81 -0
  679. package/dist/ui/session-summary.js.map +1 -0
  680. package/dist/ui/slash-command-images.test.js +12 -11
  681. package/dist/ui/slash-command-images.test.js.map +1 -1
  682. package/dist/ui/stores/transcript-scroll-store.d.ts +27 -0
  683. package/dist/ui/stores/transcript-scroll-store.d.ts.map +1 -0
  684. package/dist/ui/stores/transcript-scroll-store.js +73 -0
  685. package/dist/ui/stores/transcript-scroll-store.js.map +1 -0
  686. package/dist/ui/stores/transcript-scroll-store.test.d.ts +2 -0
  687. package/dist/ui/stores/transcript-scroll-store.test.d.ts.map +1 -0
  688. package/dist/ui/stores/transcript-scroll-store.test.js +73 -0
  689. package/dist/ui/stores/transcript-scroll-store.test.js.map +1 -0
  690. package/dist/ui/streaming-flush-bounce.test.d.ts +2 -0
  691. package/dist/ui/streaming-flush-bounce.test.d.ts.map +1 -0
  692. package/dist/ui/streaming-flush-bounce.test.js +156 -0
  693. package/dist/ui/streaming-flush-bounce.test.js.map +1 -0
  694. package/dist/ui/submit-prompt-command.d.ts +49 -0
  695. package/dist/ui/submit-prompt-command.d.ts.map +1 -0
  696. package/dist/ui/submit-prompt-command.js +107 -0
  697. package/dist/ui/submit-prompt-command.js.map +1 -0
  698. package/dist/ui/submit-slash-commands.d.ts +12 -0
  699. package/dist/ui/submit-slash-commands.d.ts.map +1 -0
  700. package/dist/ui/submit-slash-commands.js +32 -0
  701. package/dist/ui/submit-slash-commands.js.map +1 -0
  702. package/dist/ui/terminal-history-format.d.ts +43 -0
  703. package/dist/ui/terminal-history-format.d.ts.map +1 -0
  704. package/dist/ui/terminal-history-format.js +133 -0
  705. package/dist/ui/terminal-history-format.js.map +1 -0
  706. package/dist/ui/terminal-history-retry-dedup.test.d.ts +2 -0
  707. package/dist/ui/terminal-history-retry-dedup.test.d.ts.map +1 -0
  708. package/dist/ui/terminal-history-retry-dedup.test.js +61 -0
  709. package/dist/ui/terminal-history-retry-dedup.test.js.map +1 -0
  710. package/dist/ui/terminal-history-spacing.d.ts +2 -0
  711. package/dist/ui/terminal-history-spacing.d.ts.map +1 -0
  712. package/dist/ui/terminal-history-spacing.js +2 -0
  713. package/dist/ui/terminal-history-spacing.js.map +1 -0
  714. package/dist/ui/terminal-history-status-renderers.d.ts +15 -0
  715. package/dist/ui/terminal-history-status-renderers.d.ts.map +1 -0
  716. package/dist/ui/terminal-history-status-renderers.js +99 -0
  717. package/dist/ui/terminal-history-status-renderers.js.map +1 -0
  718. package/dist/ui/terminal-history.d.ts +26 -0
  719. package/dist/ui/terminal-history.d.ts.map +1 -0
  720. package/dist/ui/terminal-history.js +916 -0
  721. package/dist/ui/terminal-history.js.map +1 -0
  722. package/dist/ui/terminal-history.test.d.ts +2 -0
  723. package/dist/ui/terminal-history.test.d.ts.map +1 -0
  724. package/dist/ui/terminal-history.test.js +550 -0
  725. package/dist/ui/terminal-history.test.js.map +1 -0
  726. package/dist/ui/testing/screen-recorder.d.ts +29 -0
  727. package/dist/ui/testing/screen-recorder.d.ts.map +1 -0
  728. package/dist/ui/testing/screen-recorder.js +179 -0
  729. package/dist/ui/testing/screen-recorder.js.map +1 -0
  730. package/dist/ui/thinking-level-cycle.test.d.ts +2 -0
  731. package/dist/ui/thinking-level-cycle.test.d.ts.map +1 -0
  732. package/dist/ui/thinking-level-cycle.test.js +45 -0
  733. package/dist/ui/thinking-level-cycle.test.js.map +1 -0
  734. package/dist/ui/thinking-level.d.ts +2 -0
  735. package/dist/ui/thinking-level.d.ts.map +1 -0
  736. package/dist/ui/thinking-level.js +2 -0
  737. package/dist/ui/thinking-level.js.map +1 -0
  738. package/dist/ui/tool-group-summary.d.ts +24 -0
  739. package/dist/ui/tool-group-summary.d.ts.map +1 -0
  740. package/dist/ui/tool-group-summary.js +233 -0
  741. package/dist/ui/tool-group-summary.js.map +1 -0
  742. package/dist/ui/tool-group-summary.test.d.ts +2 -0
  743. package/dist/ui/tool-group-summary.test.d.ts.map +1 -0
  744. package/dist/ui/tool-group-summary.test.js +79 -0
  745. package/dist/ui/tool-group-summary.test.js.map +1 -0
  746. package/dist/ui/tool-line-summary.d.ts +29 -0
  747. package/dist/ui/tool-line-summary.d.ts.map +1 -0
  748. package/dist/ui/tool-line-summary.js +153 -0
  749. package/dist/ui/tool-line-summary.js.map +1 -0
  750. package/dist/ui/transcript/MiscRows.d.ts +26 -0
  751. package/dist/ui/transcript/MiscRows.d.ts.map +1 -0
  752. package/dist/ui/transcript/MiscRows.js +68 -0
  753. package/dist/ui/transcript/MiscRows.js.map +1 -0
  754. package/dist/ui/transcript/StatusRow.d.ts +14 -0
  755. package/dist/ui/transcript/StatusRow.d.ts.map +1 -0
  756. package/dist/ui/transcript/StatusRow.js +14 -0
  757. package/dist/ui/transcript/StatusRow.js.map +1 -0
  758. package/dist/ui/transcript/ToolRows.d.ts +20 -0
  759. package/dist/ui/transcript/ToolRows.d.ts.map +1 -0
  760. package/dist/ui/transcript/ToolRows.js +25 -0
  761. package/dist/ui/transcript/ToolRows.js.map +1 -0
  762. package/dist/ui/transcript/TranscriptItemFrame.d.ts +8 -0
  763. package/dist/ui/transcript/TranscriptItemFrame.d.ts.map +1 -0
  764. package/dist/ui/transcript/TranscriptItemFrame.js +9 -0
  765. package/dist/ui/transcript/TranscriptItemFrame.js.map +1 -0
  766. package/dist/ui/transcript/TranscriptRenderer.d.ts +22 -0
  767. package/dist/ui/transcript/TranscriptRenderer.d.ts.map +1 -0
  768. package/dist/ui/transcript/TranscriptRenderer.js +111 -0
  769. package/dist/ui/transcript/TranscriptRenderer.js.map +1 -0
  770. package/dist/ui/transcript/presentation.d.ts +61 -0
  771. package/dist/ui/transcript/presentation.d.ts.map +1 -0
  772. package/dist/ui/transcript/presentation.js +86 -0
  773. package/dist/ui/transcript/presentation.js.map +1 -0
  774. package/dist/ui/transcript/spacing.d.ts +56 -0
  775. package/dist/ui/transcript/spacing.d.ts.map +1 -0
  776. package/dist/ui/transcript/spacing.js +129 -0
  777. package/dist/ui/transcript/spacing.js.map +1 -0
  778. package/dist/ui/transcript/spacing.test.d.ts +2 -0
  779. package/dist/ui/transcript/spacing.test.d.ts.map +1 -0
  780. package/dist/ui/transcript/spacing.test.js +193 -0
  781. package/dist/ui/transcript/spacing.test.js.map +1 -0
  782. package/dist/ui/transcript/tool-presentation.d.ts +12 -0
  783. package/dist/ui/transcript/tool-presentation.d.ts.map +1 -0
  784. package/dist/ui/transcript/tool-presentation.js +55 -0
  785. package/dist/ui/transcript/tool-presentation.js.map +1 -0
  786. package/dist/ui/transcript/transcript-lines.d.ts +32 -0
  787. package/dist/ui/transcript/transcript-lines.d.ts.map +1 -0
  788. package/dist/ui/transcript/transcript-lines.js +86 -0
  789. package/dist/ui/transcript/transcript-lines.js.map +1 -0
  790. package/dist/ui/transcript/transcript-lines.test.d.ts +2 -0
  791. package/dist/ui/transcript/transcript-lines.test.d.ts.map +1 -0
  792. package/dist/ui/transcript/transcript-lines.test.js +76 -0
  793. package/dist/ui/transcript/transcript-lines.test.js.map +1 -0
  794. package/dist/ui/transcript-viewport-pinning.test.d.ts +2 -0
  795. package/dist/ui/transcript-viewport-pinning.test.d.ts.map +1 -0
  796. package/dist/ui/transcript-viewport-pinning.test.js +148 -0
  797. package/dist/ui/transcript-viewport-pinning.test.js.map +1 -0
  798. package/dist/ui/tui-history-parity.test.d.ts +2 -0
  799. package/dist/ui/tui-history-parity.test.d.ts.map +1 -0
  800. package/dist/ui/tui-history-parity.test.js +381 -0
  801. package/dist/ui/tui-history-parity.test.js.map +1 -0
  802. package/dist/ui/tui-simulation.test.d.ts +2 -0
  803. package/dist/ui/tui-simulation.test.d.ts.map +1 -0
  804. package/dist/ui/tui-simulation.test.js +139 -0
  805. package/dist/ui/tui-simulation.test.js.map +1 -0
  806. package/dist/ui/tui-terminal-recorder.test.d.ts +2 -0
  807. package/dist/ui/tui-terminal-recorder.test.d.ts.map +1 -0
  808. package/dist/ui/tui-terminal-recorder.test.js +134 -0
  809. package/dist/ui/tui-terminal-recorder.test.js.map +1 -0
  810. package/dist/ui/utils/assistant-stream-split.d.ts +23 -0
  811. package/dist/ui/utils/assistant-stream-split.d.ts.map +1 -0
  812. package/dist/ui/utils/assistant-stream-split.js +41 -0
  813. package/dist/ui/utils/assistant-stream-split.js.map +1 -0
  814. package/dist/ui/utils/assistant-stream-split.test.d.ts +2 -0
  815. package/dist/ui/utils/assistant-stream-split.test.d.ts.map +1 -0
  816. package/dist/ui/utils/assistant-stream-split.test.js +40 -0
  817. package/dist/ui/utils/assistant-stream-split.test.js.map +1 -0
  818. package/dist/ui/utils/latex-to-unicode.d.ts +22 -0
  819. package/dist/ui/utils/latex-to-unicode.d.ts.map +1 -0
  820. package/dist/ui/utils/latex-to-unicode.js +538 -0
  821. package/dist/ui/utils/latex-to-unicode.js.map +1 -0
  822. package/dist/ui/utils/markdown-renderer.d.ts +20 -0
  823. package/dist/ui/utils/markdown-renderer.d.ts.map +1 -0
  824. package/dist/ui/utils/markdown-renderer.js +327 -0
  825. package/dist/ui/utils/markdown-renderer.js.map +1 -0
  826. package/dist/ui/utils/markdown-table.d.ts +9 -0
  827. package/dist/ui/utils/markdown-table.d.ts.map +1 -0
  828. package/dist/ui/utils/markdown-table.js +95 -0
  829. package/dist/ui/utils/markdown-table.js.map +1 -0
  830. package/dist/ui/utils/terminal-graphics.d.ts +16 -0
  831. package/dist/ui/utils/terminal-graphics.d.ts.map +1 -0
  832. package/dist/ui/utils/terminal-graphics.js +68 -0
  833. package/dist/ui/utils/terminal-graphics.js.map +1 -0
  834. package/dist/ui/utils/terminal-graphics.test.d.ts +2 -0
  835. package/dist/ui/utils/terminal-graphics.test.d.ts.map +1 -0
  836. package/dist/ui/utils/terminal-graphics.test.js +61 -0
  837. package/dist/ui/utils/terminal-graphics.test.js.map +1 -0
  838. package/dist/ui/utils/terminal-input.d.ts +3 -0
  839. package/dist/ui/utils/terminal-input.d.ts.map +1 -0
  840. package/dist/ui/utils/terminal-input.js +28 -0
  841. package/dist/ui/utils/terminal-input.js.map +1 -0
  842. package/dist/ui/utils/terminal-input.test.d.ts +2 -0
  843. package/dist/ui/utils/terminal-input.test.d.ts.map +1 -0
  844. package/dist/ui/utils/terminal-input.test.js +15 -0
  845. package/dist/ui/utils/terminal-input.test.js.map +1 -0
  846. package/dist/ui/utils/text-utils.d.ts +8 -0
  847. package/dist/ui/utils/text-utils.d.ts.map +1 -0
  848. package/dist/ui/utils/text-utils.js +16 -0
  849. package/dist/ui/utils/text-utils.js.map +1 -0
  850. package/dist/ui/utils/token-to-ansi.js +19 -9
  851. package/dist/ui/utils/token-to-ansi.js.map +1 -1
  852. package/dist/ui/utils/user-message-display.d.ts +7 -0
  853. package/dist/ui/utils/user-message-display.d.ts.map +1 -0
  854. package/dist/ui/utils/user-message-display.js +26 -0
  855. package/dist/ui/utils/user-message-display.js.map +1 -0
  856. package/dist/utils/format.js +7 -9
  857. package/dist/utils/format.js.map +1 -1
  858. package/dist/utils/image.d.ts +9 -0
  859. package/dist/utils/image.d.ts.map +1 -1
  860. package/dist/utils/image.js +25 -0
  861. package/dist/utils/image.js.map +1 -1
  862. package/dist/utils/plan-steps.d.ts.map +1 -1
  863. package/dist/utils/plan-steps.js +5 -1
  864. package/dist/utils/plan-steps.js.map +1 -1
  865. package/dist/utils/plan-steps.test.d.ts +2 -0
  866. package/dist/utils/plan-steps.test.d.ts.map +1 -0
  867. package/dist/utils/plan-steps.test.js +16 -0
  868. package/dist/utils/plan-steps.test.js.map +1 -0
  869. package/package.json +50 -10
  870. package/dist/core/repomap-context.d.ts +0 -11
  871. package/dist/core/repomap-context.d.ts.map +0 -1
  872. package/dist/core/repomap-context.js +0 -68
  873. package/dist/core/repomap-context.js.map +0 -1
  874. package/dist/core/repomap-context.test.d.ts +0 -2
  875. package/dist/core/repomap-context.test.d.ts.map +0 -1
  876. package/dist/core/repomap-context.test.js +0 -47
  877. package/dist/core/repomap-context.test.js.map +0 -1
  878. package/dist/core/repomap.d.ts +0 -74
  879. package/dist/core/repomap.d.ts.map +0 -1
  880. package/dist/core/repomap.js +0 -906
  881. package/dist/core/repomap.js.map +0 -1
  882. package/dist/core/repomap.test.d.ts +0 -2
  883. package/dist/core/repomap.test.d.ts.map +0 -1
  884. package/dist/core/repomap.test.js +0 -494
  885. package/dist/core/repomap.test.js.map +0 -1
  886. package/dist/ui/components/EyesOverlay.d.ts +0 -10
  887. package/dist/ui/components/EyesOverlay.d.ts.map +0 -1
  888. package/dist/ui/components/EyesOverlay.js +0 -220
  889. package/dist/ui/components/EyesOverlay.js.map +0 -1
@@ -1,17 +1,23 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import React, { useState, useRef, useEffect, useMemo } from "react";
3
- import { Text, Box, useInput, useStdin } from "ink";
3
+ import { Text, Box, useInput, useStdin, useIsScreenReaderEnabled } from "ink";
4
4
  import { useTheme } from "../theme/theme.js";
5
5
  import { useFocusedAnimation, deriveFrame } from "./AnimationContext.js";
6
6
  import { useTerminalSize } from "../hooks/useTerminalSize.js";
7
7
  import { extractImagePaths, readImageFile, getClipboardImage } from "../../utils/image.js";
8
8
  import { SlashCommandMenu, filterCommands } from "./SlashCommandMenu.js";
9
+ import { TaskPickerMenu } from "./TaskPickerMenu.js";
10
+ import { stripTerminalFocusSequences } from "../utils/terminal-input.js";
9
11
  import { log } from "../../core/logger.js";
10
12
  import { homedir } from "node:os";
11
13
  import { join } from "node:path";
12
14
  import { readFileSync, writeFileSync, appendFileSync, mkdirSync, renameSync, unlinkSync, existsSync, } from "node:fs";
13
15
  const MAX_VISIBLE_LINES = 12;
14
- const PROMPT = " ";
16
+ const PROMPT = "> ";
17
+ const PLACEHOLDER = " Type your message or / to run a command";
18
+ const INPUT_BACKGROUND = "#374151";
19
+ const INPUT_TOP_FILL = "▄";
20
+ const INPUT_BOTTOM_FILL = "▀";
15
21
  // SGR mouse sequence: ESC [ < button ; col ; row M/m
16
22
  // M = press, m = release. Coordinates are 1-based.
17
23
  // SGR mouse sequence (global) — used both to strip sequences from input data
@@ -22,14 +28,20 @@ const SGR_MOUSE_RE_G = /\x1b\[<(\d+);(\d+);(\d+)([Mm])/g;
22
28
  // ?1000h = basic click tracking, ?1006h = SGR extended mode (supports coords > 223).
23
29
  const ENABLE_MOUSE = "\x1b[?1000h\x1b[?1006h";
24
30
  const DISABLE_MOUSE = "\x1b[?1006l\x1b[?1000l";
31
+ // Idle window (ms) for the legacy scroll-passthrough release: a short pause
32
+ // reliably spans a wheel gesture before tracking re-arms.
33
+ const SCROLL_PAUSE_MS = 300;
34
+ // Safety net only. In fullscreen, native text selection releases the mouse with
35
+ // NO active timer — the wheel re-arms on the next keystroke instead, so a slow
36
+ // drag is never cut short. This long timer only fires if the user never presses
37
+ // a key afterward (e.g. copies text and switches apps), so the mouse doesn't
38
+ // stay captured forever in that edge case.
39
+ const NATIVE_INTERACTION_SAFETY_MS = 60_000;
25
40
  // Guard against stray SGR mouse sequences leaking into text input.
26
41
  // Some terminals or multiplexers send these even without mouse tracking enabled.
27
42
  function isMouseEscapeSequence(input) {
28
43
  return input.includes("[<") && /\[<\d+;\d+;\d+[Mm]/.test(input);
29
44
  }
30
- function stripTerminalFocusSequences(input) {
31
- return input.replaceAll("\x1b[I", "").replaceAll("\x1b[O", "");
32
- }
33
45
  // Option+Arrow escape sequences — terminals send these as raw input strings
34
46
  // rather than setting key.meta + key.leftArrow reliably.
35
47
  const OPTION_LEFT_SEQUENCES = new Set([
@@ -179,8 +191,11 @@ function compactHistory() {
179
191
  }
180
192
  }
181
193
  }
182
- // Border (1 each side) + padding (1 each side) = 4 characters of overhead
183
- const BOX_OVERHEAD = 4;
194
+ // Lines advanced per mouse-wheel notch in fullscreen transcript scrolling.
195
+ const WHEEL_LINES_PER_NOTCH = 3;
196
+ // Padding (1 each side) = 2 characters of overhead. Gemini's composer is borderless
197
+ // except for a zero-height top rule, so wrapping should not reserve border columns.
198
+ const INPUT_HORIZONTAL_OVERHEAD = 2;
184
199
  // Minimum content width to prevent zero/negative values that cause infinite
185
200
  // re-render loops when Ink tries to wrap text wider than available space.
186
201
  const MIN_CONTENT_WIDTH = 10;
@@ -212,7 +227,7 @@ function wrapLine(text, contentWidth) {
212
227
  return lines;
213
228
  }
214
229
  function getVisualLines(text, columns) {
215
- const contentWidth = Math.max(MIN_CONTENT_WIDTH, columns - PROMPT.length - BOX_OVERHEAD);
230
+ const contentWidth = Math.max(MIN_CONTENT_WIDTH, columns - PROMPT.length - INPUT_HORIZONTAL_OVERHEAD);
216
231
  if (text.length === 0)
217
232
  return [""];
218
233
  // Split on real newlines first, then wrap each
@@ -223,9 +238,9 @@ function getVisualLines(text, columns) {
223
238
  }
224
239
  return result;
225
240
  }
226
- export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true, onDownAtEnd, onShiftTab, onToggleTasks, onToggleGoal, onToggleSkills, onTogglePixel, onTogglePlanMode, cwd, commands = [], eyesCount, scopeBadge, disableMouseTracking, onTab, }) {
241
+ export function InputArea({ onSubmit, onAbort, injectText, disabled = false, isActive = true, onDownAtEnd, onShiftTab, onToggleTasks, taskPickerOpen = false, tasks = [], onCloseTaskPicker, onStartTask, onRunAllTasks, onDeleteTask, onToggleSkills, onTogglePixel, onToggleGoal, onToggleMarkdown, cwd, commands = [], scopeBadge, disableMouseTracking, mouseScroll, onScroll, onTab, }) {
227
242
  const theme = useTheme();
228
- const eyesBadge = eyesCount && eyesCount > 0 ? (_jsx(Text, { color: theme.accent, bold: true, children: `[eyes: ${eyesCount}↗] ` })) : null;
243
+ const isScreenReaderEnabled = useIsScreenReaderEnabled();
229
244
  const [value, setValue] = useState("");
230
245
  const [cursor, setCursor] = useState(0);
231
246
  const cursorRef = useRef(cursor);
@@ -235,6 +250,22 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
235
250
  const historyRef = useRef(loadHistory());
236
251
  const historyIndexRef = useRef(-1);
237
252
  const draftRef = useRef("");
253
+ // ── External text injection (e.g. queued messages restored on interrupt) ──
254
+ // Append injected text to any existing draft and move the cursor to the end.
255
+ // Keyed on nonce so repeated injections of identical text still fire.
256
+ const lastInjectNonceRef = useRef(null);
257
+ useEffect(() => {
258
+ if (!injectText || injectText.text.length === 0)
259
+ return;
260
+ if (lastInjectNonceRef.current === injectText.nonce)
261
+ return;
262
+ lastInjectNonceRef.current = injectText.nonce;
263
+ setValue((prev) => {
264
+ const next = prev.length > 0 ? `${prev}\n\n${injectText.text}` : injectText.text;
265
+ setCursor(next.length);
266
+ return next;
267
+ });
268
+ }, [injectText]);
238
269
  // ── Ctrl+R history search state ──────────────────────────
239
270
  const [searchMode, setSearchMode] = useState(false);
240
271
  const [searchQuery, setSearchQuery] = useState("");
@@ -260,6 +291,7 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
260
291
  const lastEscRef = useRef(0);
261
292
  const { columns } = useTerminalSize();
262
293
  const [menuIndex, setMenuIndex] = useState(0);
294
+ const [taskPickerIndex, setTaskPickerIndex] = useState(0);
263
295
  const [pasteText, setPasteText] = useState(""); // accumulated pasted content
264
296
  const [pasteOffset, setPasteOffset] = useState(0); // where in value the paste starts
265
297
  const pasteTimerRef = useRef(null);
@@ -267,10 +299,14 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
267
299
  const isSlashMode = value.startsWith("/") && !value.includes(" ") && commands.length > 0;
268
300
  const slashFilter = isSlashMode ? value.slice(1) : "";
269
301
  const filteredCommands = useMemo(() => (isSlashMode ? filterCommands(commands, slashFilter) : []), [isSlashMode, commands, slashFilter]);
302
+ const runnableTasks = useMemo(() => tasks.filter((task) => task.status !== "done"), [tasks]);
270
303
  // Reset menu index when filter changes
271
304
  useEffect(() => {
272
305
  setMenuIndex(0);
273
306
  }, [slashFilter]);
307
+ useEffect(() => {
308
+ setTaskPickerIndex((index) => Math.min(index, Math.max(0, runnableTasks.length - 1)));
309
+ }, [runnableTasks.length]);
274
310
  // Border color pulse (when idle/waiting for input)
275
311
  const borderPulseColors = useMemo(() => [theme.primary, theme.accent, theme.secondary, theme.accent], [theme.primary, theme.accent, theme.secondary]);
276
312
  // Derive border pulse and cursor blink from global animation tick.
@@ -408,6 +444,18 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
408
444
  // is empty, click-to-cursor is useless and disabling tracking lets the
409
445
  // terminal handle CMD+click for opening links natively.
410
446
  const hasInputTextRef = useRef(value.length > 0);
447
+ // Fullscreen wheel-scroll routing. Kept in refs so the emit-wrapper effect
448
+ // (whose deps are intentionally stable) always sees the freshest callback.
449
+ const mouseScrollRef = useRef(mouseScroll);
450
+ mouseScrollRef.current = mouseScroll;
451
+ const onScrollRef = useRef(onScroll);
452
+ onScrollRef.current = onScroll;
453
+ // Assigned by the mouse effect; called by the keyboard handler to re-arm
454
+ // mouse tracking after the user finishes a native text selection (see the
455
+ // fullscreen selection-mode logic below). Lifting it out of the effect lets
456
+ // a keystroke — the unambiguous "I'm done selecting" signal — restore the
457
+ // wheel without a fragile timer that would cut a slow selection short.
458
+ const reenableMouseRef = useRef(() => { });
411
459
  useEffect(() => {
412
460
  if (!isActive || !internal_eventEmitter)
413
461
  return;
@@ -422,7 +470,9 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
422
470
  return;
423
471
  // Only enable mouse tracking if there's text — when empty, let the
424
472
  // terminal handle clicks natively (e.g., CMD+click to open links).
425
- if (hasInputTextRef.current) {
473
+ // In fullscreen mode we always enable it so wheel-scroll events arrive even
474
+ // when the composer is empty (there's no native scrollback to fall back to).
475
+ if (hasInputTextRef.current || mouseScrollRef.current) {
426
476
  process.stdout.write(ENABLE_MOUSE);
427
477
  }
428
478
  // Safety: ensure mouse tracking is disabled even on crash/SIGINT/unexpected exit
@@ -431,25 +481,56 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
431
481
  process.on("exit", onProcessExit);
432
482
  const originalEmit = internal_eventEmitter.emit.bind(internal_eventEmitter);
433
483
  mouseEmitRef.current.original = originalEmit;
434
- // Scroll passthrough: when a scroll event is detected, temporarily disable
435
- // mouse tracking so the terminal handles scroll natively (scrollback buffer).
436
- // Re-enable after a short idle period so click-to-cursor continues to work.
484
+ // Mouse-release passthrough: when we want the TERMINAL (not the app) to
485
+ // handle a gesture — native scroll in the legacy model, or native text
486
+ // selection / CMD+click link-opening in fullscreen we disable mouse
487
+ // tracking so the terminal owns the mouse.
437
488
  let scrollTimer = null;
438
489
  let mouseDisabled = false;
490
+ // Re-arm mouse tracking only when something still needs it: there's input
491
+ // text to position a cursor in (legacy click-to-cursor), OR we're in
492
+ // fullscreen where the wheel drives the transcript scroll. Without the
493
+ // fullscreen clause the mouse would stay dead after the first click and the
494
+ // wheel would stop scrolling.
439
495
  const reenableMouse = () => {
440
- if (mouseDisabled && hasInputTextRef.current) {
496
+ if (scrollTimer) {
497
+ clearTimeout(scrollTimer);
498
+ scrollTimer = null;
499
+ }
500
+ if (mouseDisabled && (hasInputTextRef.current || mouseScrollRef.current)) {
441
501
  process.stdout.write(ENABLE_MOUSE);
442
502
  mouseDisabled = false;
443
503
  }
444
504
  };
445
- const pauseMouseForScroll = () => {
505
+ // Exposed so the keyboard handler can re-arm on the next keystroke.
506
+ reenableMouseRef.current = reenableMouse;
507
+ // Timed release — used for the legacy scroll-passthrough model where a short
508
+ // idle reliably means the wheel gesture is over.
509
+ const pauseMouseTimed = (durationMs) => {
510
+ if (!mouseDisabled) {
511
+ process.stdout.write(DISABLE_MOUSE);
512
+ mouseDisabled = true;
513
+ }
514
+ if (scrollTimer)
515
+ clearTimeout(scrollTimer);
516
+ scrollTimer = setTimeout(reenableMouse, durationMs);
517
+ };
518
+ const pauseMouseForScroll = () => pauseMouseTimed(SCROLL_PAUSE_MS);
519
+ // Indefinite release for native selection / link-clicks in fullscreen. NO
520
+ // timer: a text selection can take as long as the user wants, and a timer
521
+ // that re-armed mid-drag would abort the selection. The wheel is restored
522
+ // only when the user presses a key (handled in the keyboard useInput) — an
523
+ // unambiguous signal that they're done selecting and back to driving the
524
+ // app. A long safety-net timer guards against a stuck state if no key ever
525
+ // follows (e.g. they copy and switch windows).
526
+ const pauseMouseForNativeInteraction = () => {
446
527
  if (!mouseDisabled) {
447
528
  process.stdout.write(DISABLE_MOUSE);
448
529
  mouseDisabled = true;
449
530
  }
450
531
  if (scrollTimer)
451
532
  clearTimeout(scrollTimer);
452
- scrollTimer = setTimeout(reenableMouse, 300);
533
+ scrollTimer = setTimeout(reenableMouse, NATIVE_INTERACTION_SAFETY_MS);
453
534
  };
454
535
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
455
536
  internal_eventEmitter.emit = (event, ...args) => {
@@ -477,12 +558,32 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
477
558
  const hasModifier = (btnCode & 0b11100) !== 0; // shift, meta, or ctrl
478
559
  const isMotion = (btnCode & 32) !== 0;
479
560
  const isScroll = (btnCode & 64) !== 0;
480
- // On scroll: disable mouse tracking so the terminal handles it natively,
481
- // then re-enable after idle so click-to-cursor keeps working.
561
+ // On scroll wheel:
482
562
  if (isScroll) {
563
+ // Fullscreen alt-screen: no native scrollback exists, so route the
564
+ // wheel into the in-app transcript scroll. Wheel-up (button bit 0
565
+ // clear) scrolls toward older output, wheel-down toward newest.
566
+ if (mouseScrollRef.current && onScrollRef.current) {
567
+ const wheelUp = (btnCode & 1) === 0;
568
+ onScrollRef.current(wheelUp ? WHEEL_LINES_PER_NOTCH : -WHEEL_LINES_PER_NOTCH);
569
+ continue;
570
+ }
571
+ // Legacy scrollback model: disable mouse tracking so the terminal
572
+ // handles it natively, then re-enable after idle.
483
573
  pauseMouseForScroll();
484
574
  continue;
485
575
  }
576
+ // Fullscreen: the wheel is the ONLY gesture we capture. Any other
577
+ // mouse event means the user wants to interact with the terminal
578
+ // itself — drag to select/copy text, or CMD+click a link. Release the
579
+ // mouse so the terminal handles it natively, then re-arm for the
580
+ // wheel after an idle window. (We trade away composer click-to-cursor
581
+ // in fullscreen; the keyboard positions the cursor, and copy/paste +
582
+ // links matter more.)
583
+ if (mouseScrollRef.current) {
584
+ pauseMouseForNativeInteraction();
585
+ continue;
586
+ }
486
587
  // When modifier keys are held (CMD+click, Ctrl+click, Shift+click),
487
588
  // temporarily disable mouse tracking so the terminal can handle
488
589
  // the click natively (e.g., opening links with CMD+click).
@@ -584,6 +685,7 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
584
685
  return () => {
585
686
  if (scrollTimer)
586
687
  clearTimeout(scrollTimer);
688
+ reenableMouseRef.current = () => { };
587
689
  process.stdout.write(DISABLE_MOUSE);
588
690
  process.removeListener("exit", onProcessExit);
589
691
  // Restore original emit
@@ -602,11 +704,13 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
602
704
  const hasText = value.length > 0;
603
705
  if (hasText !== hasInputTextRef.current) {
604
706
  hasInputTextRef.current = hasText;
605
- if (isActive) {
707
+ // In fullscreen mode mouse tracking stays on regardless of input text so
708
+ // wheel-scroll keeps working with an empty composer — never disable it.
709
+ if (isActive && !mouseScroll) {
606
710
  process.stdout.write(hasText ? ENABLE_MOUSE : DISABLE_MOUSE);
607
711
  }
608
712
  }
609
- }, [value, isActive]);
713
+ }, [value, isActive, mouseScroll]);
610
714
  // Helper: delete selected text and return new value + cursor position.
611
715
  // Returns null if no selection is active.
612
716
  const deleteSelection = () => {
@@ -631,8 +735,14 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
631
735
  return;
632
736
  if (isMouseEscapeSequence(inputWithoutFocusReports))
633
737
  return;
738
+ // A real keystroke is the "I'm done selecting" signal: re-arm mouse
739
+ // tracking (no-op if it was never released) so the wheel works again.
740
+ // This is why native selection can take as long as the user wants — it's
741
+ // ended by intent (a key) rather than a timer that could cut it short.
742
+ reenableMouseRef.current();
634
743
  // Reset kill ring accumulation for non-kill keys
635
744
  input = inputWithoutFocusReports;
745
+ const isReturnKey = key.return || input === "\r" || input === "\n";
636
746
  const isKillKey = key.ctrl && (input === "k" || input === "u" || input === "w");
637
747
  if (!isKillKey)
638
748
  lastActionWasKill = false;
@@ -669,7 +779,7 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
669
779
  setCursor(savedCursorRef.current);
670
780
  return;
671
781
  }
672
- if (key.return) {
782
+ if (isReturnKey) {
673
783
  // Accept match and submit
674
784
  setSearchMode(false);
675
785
  return; // fall through to normal submit handling
@@ -706,14 +816,41 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
706
816
  }
707
817
  return; // absorb all other keys during search
708
818
  }
709
- // Ctrl+T toggles task overlay — works even while agent is running
710
- if (key.ctrl && input === "t") {
711
- onToggleTasks?.();
819
+ if (taskPickerOpen) {
820
+ if (key.escape || (key.ctrl && input === "t")) {
821
+ onCloseTaskPicker?.();
822
+ return;
823
+ }
824
+ if (key.upArrow) {
825
+ setTaskPickerIndex((i) => Math.max(0, i - 1));
826
+ return;
827
+ }
828
+ if (key.downArrow) {
829
+ setTaskPickerIndex((i) => Math.min(runnableTasks.length - 1, i + 1));
830
+ return;
831
+ }
832
+ if (input.toLowerCase() === "r") {
833
+ const task = runnableTasks[Math.min(taskPickerIndex, runnableTasks.length - 1)];
834
+ onRunAllTasks?.(task);
835
+ return;
836
+ }
837
+ if (input.toLowerCase() === "d") {
838
+ const task = runnableTasks[Math.min(taskPickerIndex, runnableTasks.length - 1)];
839
+ if (task)
840
+ onDeleteTask?.(task);
841
+ return;
842
+ }
843
+ if (isReturnKey) {
844
+ const task = runnableTasks[Math.min(taskPickerIndex, runnableTasks.length - 1)];
845
+ if (task)
846
+ onStartTask?.(task);
847
+ return;
848
+ }
712
849
  return;
713
850
  }
714
- // Ctrl+G toggles goal overlay in normal input mode. In search mode it cancels search above.
715
- if (key.ctrl && input === "g") {
716
- onToggleGoal?.();
851
+ // Ctrl+T toggles task picker
852
+ if (key.ctrl && input === "t") {
853
+ onToggleTasks?.();
717
854
  return;
718
855
  }
719
856
  // Ctrl+S toggles skills overlay
@@ -726,9 +863,14 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
726
863
  onTogglePixel?.();
727
864
  return;
728
865
  }
729
- // Ctrl+P toggles plan mode
730
- if (key.ctrl && input === "p") {
731
- onTogglePlanMode?.();
866
+ // Ctrl+G toggles durable Goal overlay
867
+ if (key.ctrl && input === "g") {
868
+ onToggleGoal?.();
869
+ return;
870
+ }
871
+ // Ctrl+M toggles rendered/raw markdown mode, matching Gemini's raw markdown affordance.
872
+ if (key.ctrl && input === "m") {
873
+ onToggleMarkdown?.();
732
874
  return;
733
875
  }
734
876
  if (disabled) {
@@ -739,7 +881,7 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
739
881
  // When disabled (agent running), allow typing AND submission.
740
882
  // Submitted messages will be queued by the parent component.
741
883
  }
742
- if (key.return && (key.shift || key.meta)) {
884
+ if (isReturnKey && (key.shift || key.meta)) {
743
885
  // If there's a selection, replace it with the newline
744
886
  const sel = deleteSelection();
745
887
  if (sel) {
@@ -753,7 +895,7 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
753
895
  setSelectionAnchor(null);
754
896
  return;
755
897
  }
756
- if (key.return) {
898
+ if (isReturnKey) {
757
899
  // If slash menu is open and a command is selected, fill it in
758
900
  if (isSlashMode && filteredCommands.length > 0) {
759
901
  const selected = filteredCommands[Math.min(menuIndex, filteredCommands.length - 1)];
@@ -912,6 +1054,10 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
912
1054
  return;
913
1055
  }
914
1056
  if (key.upArrow) {
1057
+ if (taskPickerOpen) {
1058
+ setTaskPickerIndex((i) => Math.max(0, i - 1));
1059
+ return;
1060
+ }
915
1061
  // If slash menu is open, navigate it
916
1062
  if (isSlashMode && filteredCommands.length > 0) {
917
1063
  setMenuIndex((i) => Math.max(0, i - 1));
@@ -952,6 +1098,10 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
952
1098
  return;
953
1099
  }
954
1100
  if (key.downArrow) {
1101
+ if (taskPickerOpen) {
1102
+ setTaskPickerIndex((i) => Math.min(runnableTasks.length - 1, i + 1));
1103
+ return;
1104
+ }
955
1105
  // If slash menu is open, navigate it
956
1106
  if (isSlashMode && filteredCommands.length > 0) {
957
1107
  setMenuIndex((i) => Math.min(filteredCommands.length - 1, i + 1));
@@ -1145,7 +1295,7 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
1145
1295
  }, { isActive });
1146
1296
  // Calculate visual lines and cap at MAX_VISIBLE_LINES (scroll to cursor)
1147
1297
  const visualLines = getVisualLines(value, columns);
1148
- const contentWidth = Math.max(MIN_CONTENT_WIDTH, columns - PROMPT.length - BOX_OVERHEAD);
1298
+ const contentWidth = Math.max(MIN_CONTENT_WIDTH, columns - PROMPT.length - INPUT_HORIZONTAL_OVERHEAD);
1149
1299
  // Find which visual line and column the cursor is on
1150
1300
  const cursorLineInfo = useMemo(() => {
1151
1301
  let pos = 0;
@@ -1210,7 +1360,12 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
1210
1360
  : 0;
1211
1361
  // Active selection range (absolute character offsets)
1212
1362
  const selection = getSelectionRange(selectionAnchor, cursor);
1213
- return (_jsxs(Box, { flexDirection: "column", width: columns, children: [_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: disabled ? theme.textDim : borderPulseColors[borderFrame], paddingLeft: 1, paddingRight: 1, children: [scopeBadge && _jsx(Box, { marginBottom: 0, children: scopeBadge }), images.length > 0 && (_jsx(Box, { children: _jsx(Text, { color: theme.accent, children: images
1363
+ const promptColor = disabled ? theme.textDim : theme.commandColor;
1364
+ const borderColor = disabled ? theme.textDim : borderPulseColors[borderFrame];
1365
+ const backgroundColor = isScreenReaderEnabled ? undefined : INPUT_BACKGROUND;
1366
+ const renderInputEdge = (fill) => (_jsx(Box, { width: columns, children: _jsx(Text, { color: backgroundColor ?? borderColor, children: fill.repeat(columns) }) }));
1367
+ const renderPromptPrefix = (text) => (_jsx(Text, { color: promptColor, bold: true, backgroundColor: backgroundColor, children: text }));
1368
+ return (_jsxs(Box, { flexDirection: "column", width: columns, flexGrow: 0, flexShrink: 0, children: [renderInputEdge(backgroundColor ? INPUT_TOP_FILL : "─"), _jsxs(Box, { flexDirection: "column", paddingLeft: 1, paddingRight: 1, flexGrow: 0, flexShrink: 0, backgroundColor: backgroundColor, width: columns, children: [scopeBadge && _jsx(Box, { marginBottom: 0, children: scopeBadge }), images.length > 0 && (_jsx(Box, { children: _jsx(Text, { color: theme.accent, children: images
1214
1369
  .map((img, i) => img.kind === "text" ? `[File: ${img.fileName}]` : `[Image #${i + 1}]`)
1215
1370
  .join(" ") }) })), (() => {
1216
1371
  if (pasteText && value) {
@@ -1231,7 +1386,7 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
1231
1386
  else {
1232
1387
  cursorInDisplay = pasteOffset + indicator.length;
1233
1388
  }
1234
- return (_jsxs(Box, { children: [searchMode ? (_jsxs(Text, { color: searchFailed ? theme.error : theme.inputPrompt, bold: true, children: [searchFailed ? "(fail)" : "(i-search)", `'${searchQuery}': `] })) : (_jsxs(_Fragment, { children: [eyesBadge, _jsx(Text, { color: disabled ? theme.textDim : theme.inputPrompt, bold: true, children: PROMPT })] })), (() => {
1389
+ return (_jsxs(Box, { backgroundColor: backgroundColor, width: "100%", children: [searchMode ? (_jsxs(Text, { color: searchFailed ? theme.error : theme.inputPrompt, bold: true, backgroundColor: backgroundColor, children: [searchFailed ? "(fail)" : "(i-search)", `'${searchQuery}': `] })) : (renderPromptPrefix(PROMPT)), (() => {
1235
1390
  const beforeCursor = displayStr.slice(0, cursorInDisplay);
1236
1391
  const renderDisplaySegment = (text, displayOffset) => {
1237
1392
  if (!text)
@@ -1241,18 +1396,18 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
1241
1396
  ? Math.min(text.length, commandEndIndex - displayOffset)
1242
1397
  : 0;
1243
1398
  if (cmdChars >= text.length) {
1244
- return (_jsx(Text, { color: theme.commandColor, bold: true, children: text }));
1399
+ return (_jsx(Text, { color: theme.commandColor, bold: true, backgroundColor: backgroundColor, children: text }));
1245
1400
  }
1246
1401
  if (cmdChars > 0) {
1247
- return (_jsxs(_Fragment, { children: [_jsx(Text, { color: theme.commandColor, bold: true, children: text.slice(0, cmdChars) }), _jsx(Text, { color: theme.text, children: text.slice(cmdChars) })] }));
1402
+ return (_jsxs(_Fragment, { children: [_jsx(Text, { color: theme.commandColor, bold: true, backgroundColor: backgroundColor, children: text.slice(0, cmdChars) }), _jsx(Text, { color: theme.commandColor, backgroundColor: backgroundColor, children: text.slice(cmdChars) })] }));
1248
1403
  }
1249
- return _jsx(Text, { color: theme.text, children: text });
1404
+ return (_jsx(Text, { color: theme.commandColor, backgroundColor: backgroundColor, children: text }));
1250
1405
  };
1251
1406
  return renderDisplaySegment(beforeCursor, 0);
1252
1407
  })(), (() => {
1253
1408
  const cursorChar = cursorInDisplay < displayStr.length ? displayStr[cursorInDisplay] : " ";
1254
1409
  const cursorInCmd = isCommand && cursorInDisplay < commandEndIndex;
1255
- return (_jsx(Text, { color: cursorInCmd ? theme.commandColor : theme.text, bold: cursorInCmd || undefined, inverse: cursorVisible, children: cursorChar }));
1410
+ return (_jsx(Text, { color: theme.commandColor, bold: cursorInCmd || undefined, inverse: cursorVisible, backgroundColor: backgroundColor, children: cursorChar }));
1256
1411
  })(), cursorInDisplay + 1 < displayStr.length &&
1257
1412
  (() => {
1258
1413
  const afterCursor = displayStr.slice(cursorInDisplay + 1);
@@ -1265,11 +1420,14 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
1265
1420
  return (_jsx(Text, { color: theme.commandColor, bold: true, children: afterCursor }));
1266
1421
  }
1267
1422
  if (cmdChars > 0) {
1268
- return (_jsxs(_Fragment, { children: [_jsx(Text, { color: theme.commandColor, bold: true, children: afterCursor.slice(0, cmdChars) }), _jsx(Text, { color: theme.text, children: afterCursor.slice(cmdChars) })] }));
1423
+ return (_jsxs(_Fragment, { children: [_jsx(Text, { color: theme.commandColor, bold: true, children: afterCursor.slice(0, cmdChars) }), _jsx(Text, { color: theme.commandColor, backgroundColor: backgroundColor, children: afterCursor.slice(cmdChars) })] }));
1269
1424
  }
1270
- return _jsx(Text, { color: theme.text, children: afterCursor });
1425
+ return (_jsx(Text, { color: theme.commandColor, backgroundColor: backgroundColor, children: afterCursor }));
1271
1426
  })()] }));
1272
1427
  }
1428
+ if (value.length === 0) {
1429
+ return (_jsxs(Box, { backgroundColor: backgroundColor, width: "100%", children: [renderPromptPrefix(PROMPT), _jsx(Text, { color: theme.textDim, inverse: cursorVisible, backgroundColor: backgroundColor, children: PLACEHOLDER.slice(0, 1) }), _jsx(Text, { color: theme.textDim, backgroundColor: backgroundColor, children: PLACEHOLDER.slice(1) })] }));
1430
+ }
1273
1431
  return displayLines.map((line, i) => {
1274
1432
  const showCursor = i === cursorDisplayLine;
1275
1433
  const col = cursorLineInfo.col;
@@ -1309,12 +1467,12 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
1309
1467
  const cmdChars = inCmd ? Math.min(text.length, commandEndIndex - absOffset) : 0;
1310
1468
  const inv = opts?.inverse ?? false;
1311
1469
  if (cmdChars >= text.length) {
1312
- return (_jsx(Text, { color: theme.commandColor, bold: true, inverse: inv, children: text }));
1470
+ return (_jsx(Text, { color: theme.commandColor, bold: true, inverse: inv, backgroundColor: backgroundColor, children: text }));
1313
1471
  }
1314
1472
  if (cmdChars > 0) {
1315
- return (_jsxs(_Fragment, { children: [_jsx(Text, { color: theme.commandColor, bold: true, inverse: inv, children: text.slice(0, cmdChars) }), _jsx(Text, { color: theme.text, inverse: inv, children: text.slice(cmdChars) })] }));
1473
+ return (_jsxs(_Fragment, { children: [_jsx(Text, { color: theme.commandColor, bold: true, inverse: inv, backgroundColor: backgroundColor, children: text.slice(0, cmdChars) }), _jsx(Text, { color: theme.commandColor, inverse: inv, backgroundColor: backgroundColor, children: text.slice(cmdChars) })] }));
1316
1474
  }
1317
- return (_jsx(Text, { color: theme.text, inverse: inv, children: text }));
1475
+ return (_jsx(Text, { color: theme.commandColor, inverse: inv, backgroundColor: backgroundColor, children: text }));
1318
1476
  };
1319
1477
  // Build segments for: [before-sel] [selected] [cursor] [after-sel]
1320
1478
  // considering that cursor and selection can overlap on this line
@@ -1346,7 +1504,7 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
1346
1504
  const cursorChar = col < line.length ? line[col] : " ";
1347
1505
  const cursorAbs = lineStartOffset + col;
1348
1506
  const curInCmd = isCommand && cursorAbs < commandEndIndex;
1349
- segments.push(_jsx(Text, { color: curInCmd ? theme.commandColor : theme.text, bold: curInCmd, inverse: cursorVisible, children: cursorChar }, "cursor"));
1507
+ segments.push(_jsx(Text, { color: theme.commandColor, bold: curInCmd, inverse: cursorVisible, backgroundColor: backgroundColor, children: cursorChar }, "cursor"));
1350
1508
  const afterCursorPos = col + (col < line.length ? 1 : 0);
1351
1509
  if (afterCursorPos < selLocalEnd) {
1352
1510
  segments.push(_jsx(React.Fragment, { children: renderSegment(line.slice(afterCursorPos, selLocalEnd), lineStartOffset + afterCursorPos, { inverse: true }) }, "sel-after"));
@@ -1369,7 +1527,7 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
1369
1527
  const cursorChar = col < line.length ? line[col] : " ";
1370
1528
  const cursorAbs = lineStartOffset + col;
1371
1529
  const curInCmd = isCommand && cursorAbs < commandEndIndex;
1372
- segments.push(_jsx(Text, { color: curInCmd ? theme.commandColor : theme.text, bold: curInCmd, inverse: cursorVisible, children: cursorChar }, "cursor"));
1530
+ segments.push(_jsx(Text, { color: theme.commandColor, bold: curInCmd, inverse: cursorVisible, backgroundColor: backgroundColor, children: cursorChar }, "cursor"));
1373
1531
  pos = col + (col < line.length ? 1 : 0);
1374
1532
  }
1375
1533
  // Text after selection (and cursor)
@@ -1386,14 +1544,14 @@ export function InputArea({ onSubmit, onAbort, disabled = false, isActive = true
1386
1544
  const cursorInCommand = isCommand && cursorCharOffset < commandEndIndex;
1387
1545
  segments.push(_jsx(React.Fragment, { children: renderSegment(before, lineStartOffset) }, "before"));
1388
1546
  if (showCursor) {
1389
- segments.push(_jsx(Text, { color: cursorInCommand ? theme.commandColor : theme.text, bold: cursorInCommand, inverse: cursorVisible, children: charUnderCursor }, "cursor"));
1547
+ segments.push(_jsx(Text, { color: theme.commandColor, bold: cursorInCommand, inverse: cursorVisible, backgroundColor: backgroundColor, children: charUnderCursor }, "cursor"));
1390
1548
  }
1391
1549
  if (after) {
1392
1550
  segments.push(_jsx(React.Fragment, { children: renderSegment(after, lineStartOffset + col + (col < line.length ? 1 : 0)) }, "after"));
1393
1551
  }
1394
1552
  }
1395
- return (_jsxs(Box, { children: [i === 0 ? eyesBadge : null, _jsx(Text, { color: disabled ? theme.textDim : theme.inputPrompt, bold: true, children: i === 0 ? PROMPT : " " }), segments] }, i));
1553
+ return (_jsxs(Box, { backgroundColor: backgroundColor, width: "100%", children: [renderPromptPrefix(i === 0 ? PROMPT : " "), segments] }, i));
1396
1554
  });
1397
- })()] }), isSlashMode && filteredCommands.length > 0 && (_jsx(SlashCommandMenu, { commands: commands, filter: slashFilter, selectedIndex: menuIndex }))] }));
1555
+ })()] }), renderInputEdge(backgroundColor ? INPUT_BOTTOM_FILL : "─"), taskPickerOpen ? (_jsx(Box, { paddingRight: 2, children: _jsx(TaskPickerMenu, { tasks: tasks, selectedIndex: taskPickerIndex, width: Math.max(20, columns) }) })) : isSlashMode && filteredCommands.length > 0 ? (_jsx(Box, { paddingRight: 2, children: _jsx(SlashCommandMenu, { commands: filteredCommands, selectedIndex: menuIndex, width: Math.max(20, columns) }) })) : null] }));
1398
1556
  }
1399
1557
  //# sourceMappingURL=InputArea.js.map