@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
@@ -0,0 +1,97 @@
1
+ import { useCallback, useEffect, useRef, useState } from "react";
2
+ import {} from "ink";
3
+ import { doesFooterFitOnOneLine } from "../components/Footer.js";
4
+ import { getFooterStatusLayoutDecision, } from "../components/BackgroundTasksBar.js";
5
+ import { getChatControlsLayoutDecision, MIN_LIVE_AREA_ROWS, } from "../layout-decisions.js";
6
+ export function useChatLayoutMeasurements({ rows, columns, backgroundTaskCount, updatePending, agentRunning, activityPhase, stallError, doneStatus, currentModel, contextUsed, contextWindowOptions, displayedCwd, gitBranch, thinkingLevel, exitPending, taskBarExpanded, liveToolFeedCount, }) {
7
+ const footerStatusLayout = getFooterStatusLayoutDecision({
8
+ columns,
9
+ backgroundTaskCount,
10
+ updatePending,
11
+ });
12
+ const activityVisible = agentRunning && activityPhase !== "idle";
13
+ // The pinned LiveToolPanel renders for the whole active turn: as soon as the
14
+ // feed has a tool it stays visible — including while the agent streams
15
+ // intermediate replies between tool calls — and only disappears when the run
16
+ // ends (activity goes idle). Keep this predicate identical to ChatInputStack's
17
+ // render gate so the budget and the rendered rows never differ.
18
+ const liveToolPanelVisible = activityVisible;
19
+ const liveToolPanelRows = liveToolPanelVisible && liveToolFeedCount > 0 ? Math.min(liveToolFeedCount, 3) : 0;
20
+ const stallStatusVisible = !activityVisible && !!stallError;
21
+ const doneStatusVisible = !activityVisible && !stallStatusVisible && !!doneStatus && !agentRunning;
22
+ const statusSlotVisible = activityVisible || stallStatusVisible || doneStatusVisible;
23
+ const [controlsHeight, setControlsHeight] = useState(0);
24
+ const controlsObserverRef = useRef(null);
25
+ const mainControlsRef = useCallback((node) => {
26
+ if (controlsObserverRef.current) {
27
+ controlsObserverRef.current.disconnect();
28
+ controlsObserverRef.current = null;
29
+ }
30
+ if (!node || typeof ResizeObserver === "undefined")
31
+ return;
32
+ const observer = new ResizeObserver((entries) => {
33
+ const entry = entries[0];
34
+ if (!entry)
35
+ return;
36
+ const roundedHeight = Math.round(entry.contentRect.height);
37
+ setControlsHeight((prev) => (roundedHeight !== prev ? roundedHeight : prev));
38
+ });
39
+ observer.observe(node);
40
+ controlsObserverRef.current = observer;
41
+ }, []);
42
+ useEffect(() => () => controlsObserverRef.current?.disconnect(), []);
43
+ const footerFitsOnOneLine = doesFooterFitOnOneLine({
44
+ columns,
45
+ model: currentModel,
46
+ tokensIn: contextUsed,
47
+ contextWindowOptions,
48
+ cwd: displayedCwd,
49
+ gitBranch,
50
+ thinkingLevel,
51
+ });
52
+ const chatControlsLayout = getChatControlsLayoutDecision({
53
+ rows,
54
+ columns,
55
+ agentRunning,
56
+ activityVisible,
57
+ doneStatusVisible,
58
+ stallStatusVisible,
59
+ exitPending,
60
+ footerStatusLayout,
61
+ taskBarExpanded,
62
+ footerFitsOnOneLine,
63
+ liveToolPanelRows,
64
+ });
65
+ // Mirror Gemini's stableControlsHeight: while a turn is active, never let the
66
+ // measured controls height shrink (transient ResizeObserver dips would grow the
67
+ // live budget for one frame and bounce the footer). Reset to the live value at
68
+ // idle so legitimate shrink (e.g. background task finished) is picked up.
69
+ const prevControlsHeightRef = useRef(0);
70
+ const measuredControlsRows = controlsHeight > 0 ? controlsHeight : chatControlsLayout.controlsRows;
71
+ // While running, take the max of: the carried-forward height, the measured
72
+ // height, and the freshly computed formula (which now includes the live tool
73
+ // panel rows). The formula updates synchronously with the tool feed, so it
74
+ // acts as a proactive floor that shrinks the live area in the SAME render the
75
+ // panel grows — beating the one-frame ResizeObserver lag that otherwise lets
76
+ // the frame overflow the terminal and bounce the footer on each tool step.
77
+ const stableControlsRows = agentRunning
78
+ ? Math.max(prevControlsHeightRef.current, measuredControlsRows, chatControlsLayout.controlsRows)
79
+ : measuredControlsRows;
80
+ prevControlsHeightRef.current = stableControlsRows;
81
+ // Subtract a 2-row cushion (not 1) so the total live frame stays <= rows - 1
82
+ // even with rounding from the ResizeObserver-measured controlsHeight, keeping
83
+ // Ink out of its fullscreen clearTerminal path that snaps the controls upward.
84
+ const measuredLiveAreaRows = Math.max(MIN_LIVE_AREA_ROWS, rows - stableControlsRows - 2);
85
+ const viewportRows = Math.max(MIN_LIVE_AREA_ROWS, rows - stableControlsRows);
86
+ return {
87
+ footerStatusLayout,
88
+ activityVisible,
89
+ stallStatusVisible,
90
+ doneStatusVisible,
91
+ statusSlotVisible,
92
+ mainControlsRef,
93
+ measuredLiveAreaRows,
94
+ viewportRows,
95
+ };
96
+ }
97
+ //# sourceMappingURL=useChatLayoutMeasurements.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useChatLayoutMeasurements.js","sourceRoot":"","sources":["../../../src/ui/hooks/useChatLayoutMeasurements.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { type Dispatch, type MutableRefObject, type SetStateAction } from "react";
2
+ import type { Message, Provider } from "@prestyj/ai";
3
+ import { type ContextWindowOptions } from "../../core/model-registry.js";
4
+ import type { AuthStorage } from "../../core/auth-storage.js";
5
+ import type { SettingsManager } from "../../core/settings-manager.js";
6
+ import type { CompletedItem } from "../app-items.js";
7
+ interface UseContextCompactionOptions {
8
+ currentModel: string;
9
+ currentProvider: Provider;
10
+ maxTokens: number;
11
+ authStorage?: AuthStorage;
12
+ contextWindowOptions: ContextWindowOptions;
13
+ activeApiKey: string | undefined;
14
+ activeAccountId: string | undefined;
15
+ activeProjectId: string | undefined;
16
+ activeBaseUrl: string | undefined;
17
+ setLiveItems: Dispatch<SetStateAction<CompletedItem[]>>;
18
+ getId: () => string;
19
+ approvedPlanPathRef: MutableRefObject<string | undefined>;
20
+ settingsRef: MutableRefObject<SettingsManager | null>;
21
+ messagesRef: MutableRefObject<Message[]>;
22
+ lastActualTokensRef: MutableRefObject<number>;
23
+ lastActualTokensTimestampRef: MutableRefObject<number>;
24
+ persistCompactedSession: (compactedMessages: readonly Message[]) => Promise<void>;
25
+ }
26
+ export interface ContextCompaction {
27
+ compactionAbortRef: MutableRefObject<AbortController | null>;
28
+ compactConversation: (messages: Message[], signal?: AbortSignal) => Promise<Message[]>;
29
+ transformContext: (messages: Message[], options?: {
30
+ force?: boolean;
31
+ }) => Promise<Message[]>;
32
+ }
33
+ /**
34
+ * Owns context compaction: the manual `compactConversation` flow (spinner +
35
+ * credential resolution + abort handling) and the `transformContext` callback
36
+ * the agent loop calls before each turn / on overflow. Extracted verbatim from
37
+ * `App.tsx`.
38
+ */
39
+ export declare function useContextCompaction({ currentModel, currentProvider, maxTokens, authStorage, contextWindowOptions, activeApiKey, activeAccountId, activeProjectId, activeBaseUrl, setLiveItems, getId, approvedPlanPathRef, settingsRef, messagesRef, lastActualTokensRef, lastActualTokensTimestampRef, persistCompactedSession, }: UseContextCompactionOptions): ContextCompaction;
40
+ export {};
41
+ //# sourceMappingURL=useContextCompaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useContextCompaction.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/useContextCompaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,QAAQ,EACb,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACpB,MAAM,OAAO,CAAC;AACf,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAOrD,OAAO,EAAoB,KAAK,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAE3F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,iBAAiB,CAAC;AAGpE,UAAU,2BAA2B;IACnC,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,QAAQ,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,oBAAoB,EAAE,oBAAoB,CAAC;IAC3C,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,eAAe,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAC;IAClC,YAAY,EAAE,QAAQ,CAAC,cAAc,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IACxD,KAAK,EAAE,MAAM,MAAM,CAAC;IACpB,mBAAmB,EAAE,gBAAgB,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC1D,WAAW,EAAE,gBAAgB,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IACtD,WAAW,EAAE,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC;IACzC,mBAAmB,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IAC9C,4BAA4B,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACvD,uBAAuB,EAAE,CAAC,iBAAiB,EAAE,SAAS,OAAO,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACnF;AAED,MAAM,WAAW,iBAAiB;IAChC,kBAAkB,EAAE,gBAAgB,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;IAC7D,mBAAmB,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACvF,gBAAgB,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;CAC9F;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,EACnC,YAAY,EACZ,eAAe,EACf,SAAS,EACT,WAAW,EACX,oBAAoB,EACpB,YAAY,EACZ,eAAe,EACf,eAAe,EACf,aAAa,EACb,YAAY,EACZ,KAAK,EACL,mBAAmB,EACnB,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,4BAA4B,EAC5B,uBAAuB,GACxB,EAAE,2BAA2B,GAAG,iBAAiB,CAmKjD"}
@@ -0,0 +1,149 @@
1
+ import { useCallback, useRef, } from "react";
2
+ import { compact, shouldCompact, getCompactionReserveTokens, } from "../../core/compaction/compactor.js";
3
+ import { estimateConversationTokens } from "../../core/compaction/token-estimator.js";
4
+ import { getContextWindow } from "../../core/model-registry.js";
5
+ import { log } from "../../core/logger.js";
6
+ import { toErrorItem } from "../error-item.js";
7
+ /**
8
+ * Owns context compaction: the manual `compactConversation` flow (spinner +
9
+ * credential resolution + abort handling) and the `transformContext` callback
10
+ * the agent loop calls before each turn / on overflow. Extracted verbatim from
11
+ * `App.tsx`.
12
+ */
13
+ export function useContextCompaction({ currentModel, currentProvider, maxTokens, authStorage, contextWindowOptions, activeApiKey, activeAccountId, activeProjectId, activeBaseUrl, setLiveItems, getId, approvedPlanPathRef, settingsRef, messagesRef, lastActualTokensRef, lastActualTokensTimestampRef, persistCompactedSession, }) {
14
+ const compactionAbortRef = useRef(null);
15
+ const lastCompactionTimeRef = useRef(0);
16
+ const compactConversation = useCallback(async (messages, signal) => {
17
+ const contextWindow = getContextWindow(currentModel, contextWindowOptions);
18
+ const tokensBefore = estimateConversationTokens(messages);
19
+ const spinId = getId();
20
+ log("INFO", "compaction", `Running compaction`, {
21
+ messages: String(messages.length),
22
+ estimatedTokens: String(tokensBefore),
23
+ contextWindow: String(contextWindow),
24
+ });
25
+ // Show animated spinner
26
+ setLiveItems((prev) => [...prev, { kind: "compacting", id: spinId }]);
27
+ const ownedAbort = signal ? null : new AbortController();
28
+ const compactionSignal = signal ?? ownedAbort?.signal;
29
+ if (ownedAbort)
30
+ compactionAbortRef.current = ownedAbort;
31
+ try {
32
+ // Resolve fresh credentials for compaction too
33
+ let compactApiKey = activeApiKey;
34
+ let compactAccountId = activeAccountId;
35
+ let compactProjectId = activeProjectId;
36
+ let compactBaseUrl = activeBaseUrl;
37
+ if (authStorage) {
38
+ const creds = await authStorage.resolveCredentials(currentProvider);
39
+ compactApiKey = creds.accessToken;
40
+ compactAccountId = creds.accountId;
41
+ compactProjectId = creds.projectId;
42
+ compactBaseUrl = creds.baseUrl ?? compactBaseUrl;
43
+ }
44
+ const result = await compact(messages, {
45
+ provider: currentProvider,
46
+ model: currentModel,
47
+ apiKey: compactApiKey,
48
+ accountId: compactAccountId,
49
+ projectId: compactProjectId,
50
+ baseUrl: compactBaseUrl,
51
+ contextWindow,
52
+ signal: compactionSignal,
53
+ approvedPlanPath: approvedPlanPathRef.current,
54
+ });
55
+ if (result.result.compacted) {
56
+ // Replace spinner with completed notice
57
+ setLiveItems((prev) => prev.map((item) => item.id === spinId
58
+ ? {
59
+ kind: "compacted",
60
+ originalCount: result.result.originalCount,
61
+ newCount: result.result.newCount,
62
+ tokensBefore: result.result.tokensBeforeEstimate,
63
+ tokensAfter: result.result.tokensAfterEstimate,
64
+ id: spinId,
65
+ }
66
+ : item));
67
+ }
68
+ else {
69
+ // Nothing was actually compacted — remove spinner silently
70
+ log("INFO", "compaction", `Compaction skipped: ${result.result.reason ?? "unknown"}`);
71
+ setLiveItems((prev) => prev.filter((item) => item.id !== spinId));
72
+ }
73
+ return result.messages;
74
+ }
75
+ catch (err) {
76
+ const msg = err instanceof Error ? err.message : String(err);
77
+ const isAbort = compactionSignal?.aborted || msg.includes("aborted") || msg.includes("abort");
78
+ log(isAbort ? "WARN" : "ERROR", "compaction", isAbort ? "Compaction aborted" : `Compaction failed: ${msg}`);
79
+ setLiveItems((prev) => isAbort
80
+ ? prev.filter((item) => item.id !== spinId)
81
+ : prev.map((item) => item.id === spinId ? toErrorItem(err, spinId, "Compaction failed") : item));
82
+ return messages; // Return unchanged on failure/abort
83
+ }
84
+ finally {
85
+ if (ownedAbort && compactionAbortRef.current === ownedAbort)
86
+ compactionAbortRef.current = null;
87
+ }
88
+ }, [
89
+ currentModel,
90
+ currentProvider,
91
+ activeApiKey,
92
+ activeAccountId,
93
+ activeProjectId,
94
+ activeBaseUrl,
95
+ contextWindowOptions,
96
+ authStorage,
97
+ setLiveItems,
98
+ getId,
99
+ approvedPlanPathRef,
100
+ ]);
101
+ const transformContext = useCallback(async (messages, options) => {
102
+ const settings = settingsRef.current;
103
+ const autoCompact = settings?.get("autoCompact") ?? true;
104
+ const threshold = settings?.get("compactThreshold") ?? 0.8;
105
+ // Force-compact on context overflow regardless of settings
106
+ if (options?.force) {
107
+ const result = await compactConversation(messages);
108
+ if (result !== messages) {
109
+ messagesRef.current = result;
110
+ await persistCompactedSession(result);
111
+ }
112
+ lastCompactionTimeRef.current = Date.now();
113
+ return result;
114
+ }
115
+ if (!autoCompact)
116
+ return messages;
117
+ // Time-based cooldown: skip if compaction ran within the last 30 seconds
118
+ if (Date.now() - lastCompactionTimeRef.current < 30_000) {
119
+ log("INFO", "compaction", `Skipping compaction — cooldown active`);
120
+ return messages;
121
+ }
122
+ const contextWindow = getContextWindow(currentModel, contextWindowOptions);
123
+ const reserveTokens = getCompactionReserveTokens(maxTokens);
124
+ const tokensFresh = lastActualTokensTimestampRef.current > lastCompactionTimeRef.current;
125
+ const actualTokens = lastActualTokensRef.current > 0 && tokensFresh ? lastActualTokensRef.current : undefined;
126
+ if (shouldCompact(messages, contextWindow, threshold, actualTokens, reserveTokens)) {
127
+ const result = await compactConversation(messages);
128
+ if (result !== messages) {
129
+ messagesRef.current = result;
130
+ await persistCompactedSession(result);
131
+ }
132
+ lastCompactionTimeRef.current = Date.now();
133
+ return result;
134
+ }
135
+ return messages;
136
+ }, [
137
+ currentModel,
138
+ compactConversation,
139
+ contextWindowOptions,
140
+ persistCompactedSession,
141
+ maxTokens,
142
+ settingsRef,
143
+ messagesRef,
144
+ lastActualTokensRef,
145
+ lastActualTokensTimestampRef,
146
+ ]);
147
+ return { compactionAbortRef, compactConversation, transformContext };
148
+ }
149
+ //# sourceMappingURL=useContextCompaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useContextCompaction.js","sourceRoot":"","sources":["../../../src/ui/hooks/useContextCompaction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import { type MutableRefObject } from "react";
2
+ import type { Message, Provider } from "@prestyj/ai";
3
+ import type { AgentTool } from "@prestyj/agent";
4
+ import type { LanguageId } from "../../core/language-detector.js";
5
+ import type { Skill } from "../../core/skills.js";
6
+ import type { GoalMode } from "../../core/runtime-mode.js";
7
+ /** Options accepted by {@link useModeState.rebuildSystemPrompt}. */
8
+ export interface RebuildSystemPromptOptions {
9
+ cwd?: string;
10
+ approvedPlanPath?: string;
11
+ clearApprovedPlan?: boolean;
12
+ activeLanguages?: Set<LanguageId>;
13
+ tools?: AgentTool[];
14
+ planMode?: boolean;
15
+ }
16
+ /** Minimal session-store surface the mode state mirrors into for remount survival. */
17
+ interface ModeSessionStore {
18
+ planMode?: boolean;
19
+ goalMode?: GoalMode;
20
+ }
21
+ interface UseModeStateOptions {
22
+ initialPlanMode: boolean;
23
+ initialGoalMode?: GoalMode;
24
+ skills: Skill[] | undefined;
25
+ planModeRef?: {
26
+ current: boolean;
27
+ };
28
+ goalModeRef?: {
29
+ current: GoalMode;
30
+ };
31
+ sessionStore?: ModeSessionStore;
32
+ cwdRef: MutableRefObject<string>;
33
+ currentToolsRef: MutableRefObject<AgentTool[]>;
34
+ providerRef: MutableRefObject<Provider>;
35
+ approvedPlanPathRef: MutableRefObject<string | undefined>;
36
+ injectedLanguagesRef: MutableRefObject<Set<LanguageId>>;
37
+ messagesRef: MutableRefObject<Message[]>;
38
+ }
39
+ export interface ModeState {
40
+ planMode: boolean;
41
+ goalMode: GoalMode;
42
+ planModeStateRef: MutableRefObject<boolean>;
43
+ goalModeStateRef: MutableRefObject<GoalMode>;
44
+ rebuildSystemPrompt: (options?: RebuildSystemPromptOptions) => Promise<string>;
45
+ replaceSystemPrompt: (options?: RebuildSystemPromptOptions) => Promise<string>;
46
+ setPlanModeAndPrompt: (nextMode: boolean) => Promise<void>;
47
+ setGoalModeAndPrompt: (nextMode: GoalMode) => Promise<void>;
48
+ }
49
+ /**
50
+ * Owns the `planMode` runtime state and the system-prompt rebuild cluster
51
+ * (`rebuildSystemPrompt`, `replaceSystemPrompt`, `setPlanModeAndPrompt`).
52
+ * Extracted from `App.tsx` as a self-contained controller.
53
+ */
54
+ export declare function useModeState({ initialPlanMode, initialGoalMode, skills, planModeRef, goalModeRef, sessionStore, cwdRef, currentToolsRef, providerRef, approvedPlanPathRef, injectedLanguagesRef, messagesRef, }: UseModeStateOptions): ModeState;
55
+ export {};
56
+ //# sourceMappingURL=useModeState.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useModeState.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/useModeState.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4C,KAAK,gBAAgB,EAAE,MAAM,OAAO,CAAC;AACxF,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAE3D,oEAAoE;AACpE,MAAM,WAAW,0BAA0B;IACzC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,eAAe,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,sFAAsF;AACtF,UAAU,gBAAgB;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB;AAED,UAAU,mBAAmB;IAC3B,eAAe,EAAE,OAAO,CAAC;IACzB,eAAe,CAAC,EAAE,QAAQ,CAAC;IAC3B,MAAM,EAAE,KAAK,EAAE,GAAG,SAAS,CAAC;IAC5B,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC;IACnC,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,QAAQ,CAAA;KAAE,CAAC;IACpC,YAAY,CAAC,EAAE,gBAAgB,CAAC;IAEhC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACjC,eAAe,EAAE,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC;IAE/C,WAAW,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACxC,mBAAmB,EAAE,gBAAgB,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC1D,oBAAoB,EAAE,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC;IACxD,WAAW,EAAE,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,QAAQ,CAAC;IACnB,gBAAgB,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC5C,gBAAgB,EAAE,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC7C,mBAAmB,EAAE,CAAC,OAAO,CAAC,EAAE,0BAA0B,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/E,mBAAmB,EAAE,CAAC,OAAO,CAAC,EAAE,0BAA0B,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/E,oBAAoB,EAAE,CAAC,QAAQ,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3D,oBAAoB,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7D;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAC3B,eAAe,EACf,eAAuB,EACvB,MAAM,EACN,WAAW,EACX,WAAW,EACX,YAAY,EACZ,MAAM,EACN,eAAe,EACf,WAAW,EACX,mBAAmB,EACnB,oBAAoB,EACpB,WAAW,GACZ,EAAE,mBAAmB,GAAG,SAAS,CA8EjC"}
@@ -0,0 +1,65 @@
1
+ import { useCallback, useEffect, useRef, useState } from "react";
2
+ import { buildSystemPrompt } from "../../system-prompt.js";
3
+ /**
4
+ * Owns the `planMode` runtime state and the system-prompt rebuild cluster
5
+ * (`rebuildSystemPrompt`, `replaceSystemPrompt`, `setPlanModeAndPrompt`).
6
+ * Extracted from `App.tsx` as a self-contained controller.
7
+ */
8
+ export function useModeState({ initialPlanMode, initialGoalMode = "off", skills, planModeRef, goalModeRef, sessionStore, cwdRef, currentToolsRef, providerRef, approvedPlanPathRef, injectedLanguagesRef, messagesRef, }) {
9
+ const [planMode, setPlanMode] = useState(initialPlanMode);
10
+ const [goalMode, setGoalMode] = useState(initialGoalMode);
11
+ const planModeStateRef = useRef(planMode);
12
+ const goalModeStateRef = useRef(goalMode);
13
+ useEffect(() => {
14
+ planModeStateRef.current = planMode;
15
+ if (planModeRef)
16
+ planModeRef.current = planMode;
17
+ }, [planMode, planModeRef]);
18
+ useEffect(() => {
19
+ goalModeStateRef.current = goalMode;
20
+ if (goalModeRef)
21
+ goalModeRef.current = goalMode;
22
+ }, [goalMode, goalModeRef]);
23
+ const rebuildSystemPrompt = useCallback(async (options) => {
24
+ const approvedPlanPath = options?.clearApprovedPlan
25
+ ? undefined
26
+ : (options?.approvedPlanPath ?? approvedPlanPathRef.current);
27
+ return buildSystemPrompt(options?.cwd ?? cwdRef.current, skills, options?.planMode ?? planModeStateRef.current, approvedPlanPath, (options?.tools ?? currentToolsRef.current).map((tool) => tool.name), options?.activeLanguages ?? injectedLanguagesRef.current, providerRef.current, goalModeStateRef.current);
28
+ }, [skills, approvedPlanPathRef, cwdRef, currentToolsRef, providerRef, injectedLanguagesRef]);
29
+ const replaceSystemPrompt = useCallback(async (options) => {
30
+ const newPrompt = await rebuildSystemPrompt(options);
31
+ if (messagesRef.current[0]?.role === "system") {
32
+ messagesRef.current[0] = { role: "system", content: newPrompt };
33
+ }
34
+ return newPrompt;
35
+ }, [rebuildSystemPrompt, messagesRef]);
36
+ const setPlanModeAndPrompt = useCallback(async (nextMode) => {
37
+ planModeStateRef.current = nextMode;
38
+ if (planModeRef)
39
+ planModeRef.current = nextMode;
40
+ if (sessionStore)
41
+ sessionStore.planMode = nextMode;
42
+ setPlanMode(nextMode);
43
+ await replaceSystemPrompt({ planMode: nextMode });
44
+ }, [planModeRef, sessionStore, replaceSystemPrompt]);
45
+ const setGoalModeAndPrompt = useCallback(async (nextMode) => {
46
+ goalModeStateRef.current = nextMode;
47
+ if (goalModeRef)
48
+ goalModeRef.current = nextMode;
49
+ if (sessionStore)
50
+ sessionStore.goalMode = nextMode;
51
+ setGoalMode(nextMode);
52
+ await replaceSystemPrompt();
53
+ }, [goalModeRef, sessionStore, replaceSystemPrompt]);
54
+ return {
55
+ planMode,
56
+ goalMode,
57
+ planModeStateRef,
58
+ goalModeStateRef,
59
+ rebuildSystemPrompt,
60
+ replaceSystemPrompt,
61
+ setPlanModeAndPrompt,
62
+ setGoalModeAndPrompt,
63
+ };
64
+ }
65
+ //# sourceMappingURL=useModeState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useModeState.js","sourceRoot":"","sources":["../../../src/ui/hooks/useModeState.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,57 @@
1
+ import { type Dispatch, type MutableRefObject, type SetStateAction } from "react";
2
+ import type { Message, Provider } from "@prestyj/ai";
3
+ import type { AgentTool } from "@prestyj/agent";
4
+ import { type LanguageId } from "../../core/language-detector.js";
5
+ import type { PreparedPixelFix } from "../../core/pixel-fix.js";
6
+ import type { SessionManager } from "../../core/session-manager.js";
7
+ import type { UseAgentLoopReturn } from "./useAgentLoop.js";
8
+ import type { RebuildSystemPromptOptions } from "./useModeState.js";
9
+ import type { CompletedItem } from "../app-items.js";
10
+ import type { DoneStatus } from "../layout-decisions.js";
11
+ /** Minimal session-store surface the pixel run-all flag mirrors into. */
12
+ interface PixelSessionStore {
13
+ runAllPixel?: boolean;
14
+ }
15
+ interface UsePixelFixFlowOptions {
16
+ agentLoop: UseAgentLoopReturn;
17
+ cwd: string;
18
+ currentProvider: Provider;
19
+ currentModel: string;
20
+ rebuildToolsForCwd?: (cwd: string) => AgentTool[];
21
+ sessionStore?: PixelSessionStore;
22
+ currentPixelFixRef: MutableRefObject<PreparedPixelFix | null>;
23
+ runAllPixelRef: MutableRefObject<boolean>;
24
+ startPixelFixRef: MutableRefObject<(errorId: string) => void>;
25
+ cwdRef: MutableRefObject<string>;
26
+ currentToolsRef: MutableRefObject<AgentTool[]>;
27
+ injectedLanguagesRef: MutableRefObject<Set<LanguageId>>;
28
+ setupHintShownRef: MutableRefObject<boolean>;
29
+ messagesRef: MutableRefObject<Message[]>;
30
+ persistedIndexRef: MutableRefObject<number>;
31
+ sessionManagerRef: MutableRefObject<SessionManager | null>;
32
+ sessionPathRef: MutableRefObject<string | undefined>;
33
+ setDisplayedCwd: Dispatch<SetStateAction<string>>;
34
+ setCurrentTools: Dispatch<SetStateAction<AgentTool[]>>;
35
+ setHistory: Dispatch<SetStateAction<CompletedItem[]>>;
36
+ setLiveItems: Dispatch<SetStateAction<CompletedItem[]>>;
37
+ setLastUserMessage: Dispatch<SetStateAction<string>>;
38
+ setDoneStatus: Dispatch<SetStateAction<DoneStatus | null>>;
39
+ rebuildSystemPrompt: (options?: RebuildSystemPromptOptions) => Promise<string>;
40
+ clearPendingHistory: () => void;
41
+ getId: () => string;
42
+ initialRunAllPixel: boolean;
43
+ }
44
+ export interface PixelFixFlow {
45
+ startPixelFix: (errorId: string) => void;
46
+ runAllPixel: boolean;
47
+ setRunAllPixel: Dispatch<SetStateAction<boolean>>;
48
+ }
49
+ /**
50
+ * Owns the in-Ink pixel-fix flow: swapping cwd/tools/system-prompt/banner in
51
+ * lockstep, resetting chat state, kicking off the agent run, and the "fix all"
52
+ * run-all flag. Extracted verbatim from `App.tsx`; see CLAUDE.md for the
53
+ * four-things-in-lockstep contract.
54
+ */
55
+ export declare function usePixelFixFlow({ agentLoop, cwd, currentProvider, currentModel, rebuildToolsForCwd, sessionStore, currentPixelFixRef, runAllPixelRef, startPixelFixRef, cwdRef, currentToolsRef, injectedLanguagesRef, setupHintShownRef, messagesRef, persistedIndexRef, sessionManagerRef, sessionPathRef, setDisplayedCwd, setCurrentTools, setHistory, setLiveItems, setLastUserMessage, setDoneStatus, rebuildSystemPrompt, clearPendingHistory, getId, initialRunAllPixel, }: UsePixelFixFlowOptions): PixelFixFlow;
56
+ export {};
57
+ //# sourceMappingURL=usePixelFixFlow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePixelFixFlow.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/usePixelFixFlow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,102 @@
1
+ import { useCallback, useEffect, useState, } from "react";
2
+ import { log } from "../../core/logger.js";
3
+ import { detectLanguages } from "../../core/language-detector.js";
4
+ import { toErrorItem } from "../error-item.js";
5
+ /**
6
+ * Owns the in-Ink pixel-fix flow: swapping cwd/tools/system-prompt/banner in
7
+ * lockstep, resetting chat state, kicking off the agent run, and the "fix all"
8
+ * run-all flag. Extracted verbatim from `App.tsx`; see CLAUDE.md for the
9
+ * four-things-in-lockstep contract.
10
+ */
11
+ export function usePixelFixFlow({ agentLoop, cwd, currentProvider, currentModel, rebuildToolsForCwd, sessionStore, currentPixelFixRef, runAllPixelRef, startPixelFixRef, cwdRef, currentToolsRef, injectedLanguagesRef, setupHintShownRef, messagesRef, persistedIndexRef, sessionManagerRef, sessionPathRef, setDisplayedCwd, setCurrentTools, setHistory, setLiveItems, setLastUserMessage, setDoneStatus, rebuildSystemPrompt, clearPendingHistory, getId, initialRunAllPixel, }) {
12
+ const [runAllPixel, setRunAllPixel] = useState(initialRunAllPixel);
13
+ const startPixelFix = useCallback((errorId) => {
14
+ void (async () => {
15
+ try {
16
+ const { preparePixelFix } = await import("../../core/pixel-fix.js");
17
+ const prep = await preparePixelFix(errorId);
18
+ currentPixelFixRef.current = prep;
19
+ // Move the agent into the error's project root. Four things must
20
+ // change in lockstep, otherwise the agent (or the chrome around
21
+ // it) shows the wrong project:
22
+ // 1. process.cwd — for any code reading it directly
23
+ // 2. cwd-bound tools (read/write/bash/grep/…) — baked at creation
24
+ // 3. the system prompt's "Working directory: …" line — the only
25
+ // place the model itself learns where it is
26
+ // 4. displayedCwd state — Banner + Footer read this for display
27
+ try {
28
+ process.chdir(prep.projectPath);
29
+ }
30
+ catch (err) {
31
+ log("WARN", "pixel", `chdir failed: ${err.message}`);
32
+ }
33
+ cwdRef.current = prep.projectPath;
34
+ setDisplayedCwd(prep.projectPath);
35
+ let toolsForPixelFix = currentToolsRef.current;
36
+ if (rebuildToolsForCwd) {
37
+ toolsForPixelFix = rebuildToolsForCwd(prep.projectPath);
38
+ currentToolsRef.current = toolsForPixelFix;
39
+ setCurrentTools(toolsForPixelFix);
40
+ }
41
+ // Pixel-fix swaps the project root — reset injected packs so the
42
+ // new project re-detects from scratch on the next tool call. Also
43
+ // reset the setup-hint flag so the new project's first badge re-
44
+ // surfaces the tip (different project, may need the reminder).
45
+ injectedLanguagesRef.current = new Set();
46
+ setupHintShownRef.current = false;
47
+ const detectedForPixelFix = detectLanguages(prep.projectPath);
48
+ injectedLanguagesRef.current = detectedForPixelFix;
49
+ const newSystemPrompt = await rebuildSystemPrompt({
50
+ cwd: prep.projectPath,
51
+ clearApprovedPlan: true,
52
+ activeLanguages: detectedForPixelFix,
53
+ tools: toolsForPixelFix,
54
+ });
55
+ // Now that the cwd swap is committed, reset chat. Do not clear the
56
+ // terminal here; terminal clear sequences can erase saved scrollback.
57
+ clearPendingHistory();
58
+ setHistory([{ kind: "banner", id: "banner" }]);
59
+ setLiveItems([]);
60
+ messagesRef.current = messagesRef.current.slice(0, 1);
61
+ agentLoop.reset();
62
+ persistedIndexRef.current = messagesRef.current.length;
63
+ const sm = sessionManagerRef.current;
64
+ if (sm) {
65
+ void sm.create(prep.projectPath, currentProvider, currentModel).then((s) => {
66
+ sessionPathRef.current = s.path;
67
+ log("INFO", "pixel", "New session for pixel fix", { path: s.path });
68
+ });
69
+ }
70
+ if (messagesRef.current[0]?.role === "system") {
71
+ messagesRef.current[0] = { role: "system", content: newSystemPrompt };
72
+ }
73
+ else {
74
+ messagesRef.current.unshift({ role: "system", content: newSystemPrompt });
75
+ }
76
+ const title = `Fix ${errorId.slice(0, 12)}… in ${prep.projectName}`;
77
+ const taskItem = { kind: "task", title, id: getId() };
78
+ setLastUserMessage(title);
79
+ setDoneStatus(null);
80
+ setLiveItems([taskItem]);
81
+ await agentLoop.run(prep.prompt);
82
+ }
83
+ catch (err) {
84
+ const msg = err instanceof Error ? err.message : String(err);
85
+ log("ERROR", "pixel", msg);
86
+ currentPixelFixRef.current = null;
87
+ setRunAllPixel(false);
88
+ setLiveItems((prev) => [...prev, toErrorItem(err, getId())]);
89
+ }
90
+ })();
91
+ }, [cwd, agentLoop, currentProvider, currentModel]);
92
+ startPixelFixRef.current = startPixelFix;
93
+ // Seed from sessionStore so "Fix All" chaining survives a deferred
94
+ // resetUI() if it fires between pixel fixes (e.g. user toggled a pane).
95
+ useEffect(() => {
96
+ runAllPixelRef.current = runAllPixel;
97
+ if (sessionStore)
98
+ sessionStore.runAllPixel = runAllPixel;
99
+ }, [runAllPixel, sessionStore, runAllPixelRef]);
100
+ return { startPixelFix, runAllPixel, setRunAllPixel };
101
+ }
102
+ //# sourceMappingURL=usePixelFixFlow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePixelFixFlow.js","sourceRoot":"","sources":["../../../src/ui/hooks/usePixelFixFlow.ts"],"names":[],"mappings":"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"}