@calliopelabs/cli 2.5.0 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (476) hide show
  1. package/README.md +45 -661
  2. package/dist/acp.d.ts +78 -0
  3. package/dist/acp.d.ts.map +1 -0
  4. package/dist/acp.js +572 -0
  5. package/dist/acp.js.map +1 -0
  6. package/dist/bin.d.ts +3 -7
  7. package/dist/bin.d.ts.map +1 -1
  8. package/dist/bin.js +56 -79
  9. package/dist/bin.js.map +1 -1
  10. package/dist/budget.d.ts +64 -0
  11. package/dist/budget.d.ts.map +1 -0
  12. package/dist/budget.js +157 -0
  13. package/dist/budget.js.map +1 -0
  14. package/dist/checkpoint.d.ts +63 -30
  15. package/dist/checkpoint.d.ts.map +1 -1
  16. package/dist/checkpoint.js +247 -160
  17. package/dist/checkpoint.js.map +1 -1
  18. package/dist/circuit-breaker/breaker.js.map +1 -1
  19. package/dist/config.d.ts +86 -81
  20. package/dist/config.d.ts.map +1 -1
  21. package/dist/config.js +236 -304
  22. package/dist/config.js.map +1 -1
  23. package/dist/cost.d.ts +114 -0
  24. package/dist/cost.d.ts.map +1 -0
  25. package/dist/cost.js +499 -0
  26. package/dist/cost.js.map +1 -0
  27. package/dist/diff.d.ts.map +1 -1
  28. package/dist/diff.js +11 -7
  29. package/dist/diff.js.map +1 -1
  30. package/dist/errors.js +3 -3
  31. package/dist/errors.js.map +1 -1
  32. package/dist/files.js.map +1 -1
  33. package/dist/fleet.d.ts +30 -0
  34. package/dist/fleet.d.ts.map +1 -0
  35. package/dist/fleet.js +86 -0
  36. package/dist/fleet.js.map +1 -0
  37. package/dist/fuzzy-search.d.ts.map +1 -1
  38. package/dist/fuzzy-search.js +2 -1
  39. package/dist/fuzzy-search.js.map +1 -1
  40. package/dist/git-status.js.map +1 -1
  41. package/dist/headless.d.ts +1 -2
  42. package/dist/headless.d.ts.map +1 -1
  43. package/dist/headless.js +166 -24
  44. package/dist/headless.js.map +1 -1
  45. package/dist/hud/api.d.ts +3 -18
  46. package/dist/hud/api.d.ts.map +1 -1
  47. package/dist/hud/api.js +9 -352
  48. package/dist/hud/api.js.map +1 -1
  49. package/dist/hud/palettes.d.ts.map +1 -1
  50. package/dist/hud/palettes.js +0 -180
  51. package/dist/hud/palettes.js.map +1 -1
  52. package/dist/hud/skins.d.ts.map +1 -1
  53. package/dist/hud/skins.js +0 -263
  54. package/dist/hud/skins.js.map +1 -1
  55. package/dist/hud/types.d.ts +2 -5
  56. package/dist/hud/types.d.ts.map +1 -1
  57. package/dist/index.d.ts +1 -4
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +1 -4
  60. package/dist/index.js.map +1 -1
  61. package/dist/iteration-ledger.d.ts.map +1 -1
  62. package/dist/iteration-ledger.js +3 -2
  63. package/dist/iteration-ledger.js.map +1 -1
  64. package/dist/local-model.d.ts +150 -0
  65. package/dist/local-model.d.ts.map +1 -0
  66. package/dist/local-model.js +408 -0
  67. package/dist/local-model.js.map +1 -0
  68. package/dist/mcp.d.ts.map +1 -1
  69. package/dist/mcp.js +5 -2
  70. package/dist/mcp.js.map +1 -1
  71. package/dist/memory.d.ts.map +1 -1
  72. package/dist/memory.js +6 -4
  73. package/dist/memory.js.map +1 -1
  74. package/dist/model-detection.js +2 -2
  75. package/dist/model-detection.js.map +1 -1
  76. package/dist/parallel-tools.js.map +1 -1
  77. package/dist/plugins.d.ts +32 -1
  78. package/dist/plugins.d.ts.map +1 -1
  79. package/dist/plugins.js +116 -5
  80. package/dist/plugins.js.map +1 -1
  81. package/dist/policy.d.ts +43 -0
  82. package/dist/policy.d.ts.map +1 -0
  83. package/dist/policy.js +139 -0
  84. package/dist/policy.js.map +1 -0
  85. package/dist/project-config.d.ts +1 -2
  86. package/dist/project-config.d.ts.map +1 -1
  87. package/dist/project-config.js +0 -3
  88. package/dist/project-config.js.map +1 -1
  89. package/dist/providers/bedrock.d.ts.map +1 -1
  90. package/dist/providers/bedrock.js +2 -5
  91. package/dist/providers/bedrock.js.map +1 -1
  92. package/dist/providers/compat.d.ts +21 -0
  93. package/dist/providers/compat.d.ts.map +1 -1
  94. package/dist/providers/compat.js +176 -6
  95. package/dist/providers/compat.js.map +1 -1
  96. package/dist/providers/google.js.map +1 -1
  97. package/dist/providers/index.d.ts +19 -4
  98. package/dist/providers/index.d.ts.map +1 -1
  99. package/dist/providers/index.js +61 -10
  100. package/dist/providers/index.js.map +1 -1
  101. package/dist/providers/ollama.d.ts +2 -2
  102. package/dist/providers/ollama.d.ts.map +1 -1
  103. package/dist/providers/ollama.js +26 -6
  104. package/dist/providers/ollama.js.map +1 -1
  105. package/dist/providers/openai.d.ts.map +1 -1
  106. package/dist/providers/openai.js +14 -10
  107. package/dist/providers/openai.js.map +1 -1
  108. package/dist/providers/types.d.ts +8 -0
  109. package/dist/providers/types.d.ts.map +1 -1
  110. package/dist/providers/types.js.map +1 -1
  111. package/dist/replay.d.ts +37 -0
  112. package/dist/replay.d.ts.map +1 -0
  113. package/dist/replay.js +168 -0
  114. package/dist/replay.js.map +1 -0
  115. package/dist/router.d.ts +133 -0
  116. package/dist/router.d.ts.map +1 -0
  117. package/dist/{model-router.js → router.js} +329 -3
  118. package/dist/router.js.map +1 -0
  119. package/dist/runlog.d.ts +185 -0
  120. package/dist/runlog.d.ts.map +1 -0
  121. package/dist/runlog.js +398 -0
  122. package/dist/runlog.js.map +1 -0
  123. package/dist/{sandbox.d.ts → sandbox/docker.d.ts} +1 -1
  124. package/dist/sandbox/docker.d.ts.map +1 -0
  125. package/dist/{sandbox.js → sandbox/docker.js} +1 -1
  126. package/dist/sandbox/docker.js.map +1 -0
  127. package/dist/sandbox/index.d.ts +36 -0
  128. package/dist/sandbox/index.d.ts.map +1 -0
  129. package/dist/sandbox/index.js +62 -0
  130. package/dist/sandbox/index.js.map +1 -0
  131. package/dist/{sandbox-native.d.ts → sandbox/native.d.ts} +1 -1
  132. package/dist/sandbox/native.d.ts.map +1 -0
  133. package/dist/{sandbox-native.js → sandbox/native.js} +1 -1
  134. package/dist/sandbox/native.js.map +1 -0
  135. package/dist/scope.js +1 -1
  136. package/dist/scope.js.map +1 -1
  137. package/dist/scuttlebot/config.js.map +1 -1
  138. package/dist/scuttlebot/irc-client.js.map +1 -1
  139. package/dist/setup.d.ts.map +1 -1
  140. package/dist/setup.js +22 -54
  141. package/dist/setup.js.map +1 -1
  142. package/dist/skills.d.ts +39 -0
  143. package/dist/skills.d.ts.map +1 -1
  144. package/dist/skills.js +90 -8
  145. package/dist/skills.js.map +1 -1
  146. package/dist/storage.d.ts.map +1 -1
  147. package/dist/storage.js +6 -3
  148. package/dist/storage.js.map +1 -1
  149. package/dist/streaming.d.ts +25 -0
  150. package/dist/streaming.d.ts.map +1 -1
  151. package/dist/streaming.js +59 -0
  152. package/dist/streaming.js.map +1 -1
  153. package/dist/styles.d.ts +6 -0
  154. package/dist/styles.d.ts.map +1 -1
  155. package/dist/styles.js +11 -0
  156. package/dist/styles.js.map +1 -1
  157. package/dist/summarization.js.map +1 -1
  158. package/dist/terminal-image.js +1 -1
  159. package/dist/terminal-image.js.map +1 -1
  160. package/dist/themes.d.ts +5 -4
  161. package/dist/themes.d.ts.map +1 -1
  162. package/dist/themes.js +35 -90
  163. package/dist/themes.js.map +1 -1
  164. package/dist/tools.d.ts +27 -3
  165. package/dist/tools.d.ts.map +1 -1
  166. package/dist/tools.js +128 -179
  167. package/dist/tools.js.map +1 -1
  168. package/dist/types.d.ts +4 -3
  169. package/dist/types.d.ts.map +1 -1
  170. package/dist/types.js +21 -40
  171. package/dist/types.js.map +1 -1
  172. package/dist/ui/agent.d.ts +3 -6
  173. package/dist/ui/agent.d.ts.map +1 -1
  174. package/dist/ui/agent.js +328 -38
  175. package/dist/ui/agent.js.map +1 -1
  176. package/dist/ui/animations.d.ts +37 -0
  177. package/dist/ui/animations.d.ts.map +1 -0
  178. package/dist/ui/animations.js +227 -0
  179. package/dist/ui/animations.js.map +1 -0
  180. package/dist/ui/chat-input-keys.d.ts +42 -0
  181. package/dist/ui/chat-input-keys.d.ts.map +1 -0
  182. package/dist/ui/chat-input-keys.js +360 -0
  183. package/dist/ui/chat-input-keys.js.map +1 -0
  184. package/dist/ui/chat-input.d.ts +2 -1
  185. package/dist/ui/chat-input.d.ts.map +1 -1
  186. package/dist/ui/chat-input.js +31 -350
  187. package/dist/ui/chat-input.js.map +1 -1
  188. package/dist/ui/commands.d.ts +14 -46
  189. package/dist/ui/commands.d.ts.map +1 -1
  190. package/dist/ui/commands.js +416 -2899
  191. package/dist/ui/commands.js.map +1 -1
  192. package/dist/ui/completions.d.ts +1 -0
  193. package/dist/ui/completions.d.ts.map +1 -1
  194. package/dist/ui/completions.js +36 -107
  195. package/dist/ui/completions.js.map +1 -1
  196. package/dist/ui/components.d.ts +14 -6
  197. package/dist/ui/components.d.ts.map +1 -1
  198. package/dist/ui/components.js +17 -226
  199. package/dist/ui/components.js.map +1 -1
  200. package/dist/ui/context.js +6 -6
  201. package/dist/ui/context.js.map +1 -1
  202. package/dist/ui/debug-log.d.ts +11 -0
  203. package/dist/ui/debug-log.d.ts.map +1 -0
  204. package/dist/ui/debug-log.js +21 -0
  205. package/dist/ui/debug-log.js.map +1 -0
  206. package/dist/ui/error-boundary.d.ts.map +1 -1
  207. package/dist/ui/error-boundary.js.map +1 -1
  208. package/dist/ui/frame.d.ts.map +1 -1
  209. package/dist/ui/frame.js +1 -3
  210. package/dist/ui/frame.js.map +1 -1
  211. package/dist/ui/index.d.ts +11 -3
  212. package/dist/ui/index.d.ts.map +1 -1
  213. package/dist/ui/index.js +45 -1076
  214. package/dist/ui/index.js.map +1 -1
  215. package/dist/ui/messages.d.ts +4 -7
  216. package/dist/ui/messages.d.ts.map +1 -1
  217. package/dist/ui/messages.js +15 -30
  218. package/dist/ui/messages.js.map +1 -1
  219. package/dist/ui/modals/index.d.ts +11 -0
  220. package/dist/ui/modals/index.d.ts.map +1 -0
  221. package/dist/ui/modals/index.js +10 -0
  222. package/dist/ui/modals/index.js.map +1 -0
  223. package/dist/ui/modals/prompts.d.ts +37 -0
  224. package/dist/ui/modals/prompts.d.ts.map +1 -0
  225. package/dist/ui/modals/prompts.js +124 -0
  226. package/dist/ui/modals/prompts.js.map +1 -0
  227. package/dist/ui/modals/selectors.d.ts +33 -0
  228. package/dist/ui/modals/selectors.d.ts.map +1 -0
  229. package/dist/ui/modals/selectors.js +111 -0
  230. package/dist/ui/modals/selectors.js.map +1 -0
  231. package/dist/ui/modals/setup.d.ts +17 -0
  232. package/dist/ui/modals/setup.d.ts.map +1 -0
  233. package/dist/ui/modals/setup.js +51 -0
  234. package/dist/ui/modals/setup.js.map +1 -0
  235. package/dist/ui/regions/input-region.d.ts +40 -0
  236. package/dist/ui/regions/input-region.d.ts.map +1 -0
  237. package/dist/ui/regions/input-region.js +116 -0
  238. package/dist/ui/regions/input-region.js.map +1 -0
  239. package/dist/ui/regions/modal-host.d.ts +41 -0
  240. package/dist/ui/regions/modal-host.d.ts.map +1 -0
  241. package/dist/ui/regions/modal-host.js +51 -0
  242. package/dist/ui/regions/modal-host.js.map +1 -0
  243. package/dist/ui/regions/render-probe.d.ts +22 -0
  244. package/dist/ui/regions/render-probe.d.ts.map +1 -0
  245. package/dist/ui/regions/render-probe.js +45 -0
  246. package/dist/ui/regions/render-probe.js.map +1 -0
  247. package/dist/ui/regions/static-scrollback.d.ts +39 -0
  248. package/dist/ui/regions/static-scrollback.d.ts.map +1 -0
  249. package/dist/ui/regions/static-scrollback.js +68 -0
  250. package/dist/ui/regions/static-scrollback.js.map +1 -0
  251. package/dist/ui/regions/status-region.d.ts +24 -0
  252. package/dist/ui/regions/status-region.d.ts.map +1 -0
  253. package/dist/ui/regions/status-region.js +17 -0
  254. package/dist/ui/regions/status-region.js.map +1 -0
  255. package/dist/ui/regions/transcript-region.d.ts +41 -0
  256. package/dist/ui/regions/transcript-region.d.ts.map +1 -0
  257. package/dist/ui/regions/transcript-region.js +52 -0
  258. package/dist/ui/regions/transcript-region.js.map +1 -0
  259. package/dist/ui/self-restart.d.ts +9 -0
  260. package/dist/ui/self-restart.d.ts.map +1 -0
  261. package/dist/ui/self-restart.js +24 -0
  262. package/dist/ui/self-restart.js.map +1 -0
  263. package/dist/ui/state/use-chat-controller.d.ts +23 -0
  264. package/dist/ui/state/use-chat-controller.d.ts.map +1 -0
  265. package/dist/ui/state/use-chat-controller.js +643 -0
  266. package/dist/ui/state/use-chat-controller.js.map +1 -0
  267. package/dist/ui/state/use-loop-state.d.ts +23 -0
  268. package/dist/ui/state/use-loop-state.d.ts.map +1 -0
  269. package/dist/ui/state/use-loop-state.js +39 -0
  270. package/dist/ui/state/use-loop-state.js.map +1 -0
  271. package/dist/ui/state/use-modal-state.d.ts +52 -0
  272. package/dist/ui/state/use-modal-state.d.ts.map +1 -0
  273. package/dist/ui/state/use-modal-state.js +44 -0
  274. package/dist/ui/state/use-modal-state.js.map +1 -0
  275. package/dist/ui/state/use-model-state.d.ts +29 -0
  276. package/dist/ui/state/use-model-state.d.ts.map +1 -0
  277. package/dist/ui/state/use-model-state.js +47 -0
  278. package/dist/ui/state/use-model-state.js.map +1 -0
  279. package/dist/ui/state/use-processing-state.d.ts +24 -0
  280. package/dist/ui/state/use-processing-state.d.ts.map +1 -0
  281. package/dist/ui/state/use-processing-state.js +46 -0
  282. package/dist/ui/state/use-processing-state.js.map +1 -0
  283. package/dist/ui/state/use-queue-state.d.ts +19 -0
  284. package/dist/ui/state/use-queue-state.d.ts.map +1 -0
  285. package/dist/ui/state/use-queue-state.js +30 -0
  286. package/dist/ui/state/use-queue-state.js.map +1 -0
  287. package/dist/ui/state/use-session-init.d.ts +22 -0
  288. package/dist/ui/state/use-session-init.d.ts.map +1 -0
  289. package/dist/ui/state/use-session-init.js +77 -0
  290. package/dist/ui/state/use-session-init.js.map +1 -0
  291. package/dist/ui/state/use-session-stats.d.ts +16 -0
  292. package/dist/ui/state/use-session-stats.d.ts.map +1 -0
  293. package/dist/ui/state/use-session-stats.js +18 -0
  294. package/dist/ui/state/use-session-stats.js.map +1 -0
  295. package/dist/ui/state/use-terminal-width.d.ts +8 -0
  296. package/dist/ui/state/use-terminal-width.d.ts.map +1 -0
  297. package/dist/ui/state/use-terminal-width.js +22 -0
  298. package/dist/ui/state/use-terminal-width.js.map +1 -0
  299. package/dist/ui/state/use-transcript-state.d.ts +21 -0
  300. package/dist/ui/state/use-transcript-state.d.ts.map +1 -0
  301. package/dist/ui/state/use-transcript-state.js +49 -0
  302. package/dist/ui/state/use-transcript-state.js.map +1 -0
  303. package/dist/ui/status-bar.d.ts.map +1 -1
  304. package/dist/ui/status-bar.js +2 -3
  305. package/dist/ui/status-bar.js.map +1 -1
  306. package/dist/version-check.d.ts.map +1 -1
  307. package/dist/version-check.js +10 -0
  308. package/dist/version-check.js.map +1 -1
  309. package/package.json +10 -3
  310. package/dist/agents/agent-config-loader.d.ts +0 -60
  311. package/dist/agents/agent-config-loader.d.ts.map +0 -1
  312. package/dist/agents/agent-config-loader.js +0 -402
  313. package/dist/agents/agent-config-loader.js.map +0 -1
  314. package/dist/agents/agent-config-presets.d.ts +0 -10
  315. package/dist/agents/agent-config-presets.d.ts.map +0 -1
  316. package/dist/agents/agent-config-presets.js +0 -940
  317. package/dist/agents/agent-config-presets.js.map +0 -1
  318. package/dist/agents/agent-config-types.d.ts +0 -145
  319. package/dist/agents/agent-config-types.d.ts.map +0 -1
  320. package/dist/agents/agent-config-types.js +0 -12
  321. package/dist/agents/agent-config-types.js.map +0 -1
  322. package/dist/agents/agent-detection.d.ts +0 -35
  323. package/dist/agents/agent-detection.d.ts.map +0 -1
  324. package/dist/agents/agent-detection.js +0 -110
  325. package/dist/agents/agent-detection.js.map +0 -1
  326. package/dist/agents/aggregator.d.ts +0 -19
  327. package/dist/agents/aggregator.d.ts.map +0 -1
  328. package/dist/agents/aggregator.js +0 -141
  329. package/dist/agents/aggregator.js.map +0 -1
  330. package/dist/agents/cli-backend.d.ts +0 -32
  331. package/dist/agents/cli-backend.d.ts.map +0 -1
  332. package/dist/agents/cli-backend.js +0 -271
  333. package/dist/agents/cli-backend.js.map +0 -1
  334. package/dist/agents/council-types.d.ts +0 -115
  335. package/dist/agents/council-types.d.ts.map +0 -1
  336. package/dist/agents/council-types.js +0 -81
  337. package/dist/agents/council-types.js.map +0 -1
  338. package/dist/agents/council.d.ts +0 -112
  339. package/dist/agents/council.d.ts.map +0 -1
  340. package/dist/agents/council.js +0 -722
  341. package/dist/agents/council.js.map +0 -1
  342. package/dist/agents/decomposer.d.ts +0 -33
  343. package/dist/agents/decomposer.d.ts.map +0 -1
  344. package/dist/agents/decomposer.js +0 -138
  345. package/dist/agents/decomposer.js.map +0 -1
  346. package/dist/agents/dynamic-tools.d.ts +0 -52
  347. package/dist/agents/dynamic-tools.d.ts.map +0 -1
  348. package/dist/agents/dynamic-tools.js +0 -424
  349. package/dist/agents/dynamic-tools.js.map +0 -1
  350. package/dist/agents/index.d.ts +0 -29
  351. package/dist/agents/index.d.ts.map +0 -1
  352. package/dist/agents/index.js +0 -29
  353. package/dist/agents/index.js.map +0 -1
  354. package/dist/agents/installer.d.ts +0 -39
  355. package/dist/agents/installer.d.ts.map +0 -1
  356. package/dist/agents/installer.js +0 -205
  357. package/dist/agents/installer.js.map +0 -1
  358. package/dist/agents/orchestrator.d.ts +0 -106
  359. package/dist/agents/orchestrator.d.ts.map +0 -1
  360. package/dist/agents/orchestrator.js +0 -363
  361. package/dist/agents/orchestrator.js.map +0 -1
  362. package/dist/agents/sdk-backend.d.ts +0 -63
  363. package/dist/agents/sdk-backend.d.ts.map +0 -1
  364. package/dist/agents/sdk-backend.js +0 -489
  365. package/dist/agents/sdk-backend.js.map +0 -1
  366. package/dist/agents/swarm-types.d.ts +0 -84
  367. package/dist/agents/swarm-types.d.ts.map +0 -1
  368. package/dist/agents/swarm-types.js +0 -20
  369. package/dist/agents/swarm-types.js.map +0 -1
  370. package/dist/agents/swarm.d.ts +0 -79
  371. package/dist/agents/swarm.d.ts.map +0 -1
  372. package/dist/agents/swarm.js +0 -375
  373. package/dist/agents/swarm.js.map +0 -1
  374. package/dist/agents/tools.d.ts +0 -26
  375. package/dist/agents/tools.d.ts.map +0 -1
  376. package/dist/agents/tools.js +0 -776
  377. package/dist/agents/tools.js.map +0 -1
  378. package/dist/agents/types.d.ts +0 -108
  379. package/dist/agents/types.d.ts.map +0 -1
  380. package/dist/agents/types.js +0 -43
  381. package/dist/agents/types.js.map +0 -1
  382. package/dist/api-server.d.ts +0 -45
  383. package/dist/api-server.d.ts.map +0 -1
  384. package/dist/api-server.js +0 -326
  385. package/dist/api-server.js.map +0 -1
  386. package/dist/auto-checkpoint.d.ts +0 -35
  387. package/dist/auto-checkpoint.d.ts.map +0 -1
  388. package/dist/auto-checkpoint.js +0 -176
  389. package/dist/auto-checkpoint.js.map +0 -1
  390. package/dist/background-jobs.d.ts +0 -45
  391. package/dist/background-jobs.d.ts.map +0 -1
  392. package/dist/background-jobs.js +0 -127
  393. package/dist/background-jobs.js.map +0 -1
  394. package/dist/branching.d.ts +0 -56
  395. package/dist/branching.d.ts.map +0 -1
  396. package/dist/branching.js +0 -224
  397. package/dist/branching.js.map +0 -1
  398. package/dist/cli/agent.d.ts +0 -9
  399. package/dist/cli/agent.d.ts.map +0 -1
  400. package/dist/cli/agent.js +0 -330
  401. package/dist/cli/agent.js.map +0 -1
  402. package/dist/cli/commands.d.ts +0 -12
  403. package/dist/cli/commands.d.ts.map +0 -1
  404. package/dist/cli/commands.js +0 -1042
  405. package/dist/cli/commands.js.map +0 -1
  406. package/dist/cli/index.d.ts +0 -8
  407. package/dist/cli/index.d.ts.map +0 -1
  408. package/dist/cli/index.js +0 -268
  409. package/dist/cli/index.js.map +0 -1
  410. package/dist/cli/types.d.ts +0 -33
  411. package/dist/cli/types.d.ts.map +0 -1
  412. package/dist/cli/types.js +0 -21
  413. package/dist/cli/types.js.map +0 -1
  414. package/dist/companions.d.ts +0 -54
  415. package/dist/companions.d.ts.map +0 -1
  416. package/dist/companions.js +0 -440
  417. package/dist/companions.js.map +0 -1
  418. package/dist/file-watcher.d.ts +0 -91
  419. package/dist/file-watcher.d.ts.map +0 -1
  420. package/dist/file-watcher.js +0 -269
  421. package/dist/file-watcher.js.map +0 -1
  422. package/dist/hud/theme-packs/api.d.ts +0 -51
  423. package/dist/hud/theme-packs/api.d.ts.map +0 -1
  424. package/dist/hud/theme-packs/api.js +0 -145
  425. package/dist/hud/theme-packs/api.js.map +0 -1
  426. package/dist/hud/theme-packs/index.d.ts +0 -18
  427. package/dist/hud/theme-packs/index.d.ts.map +0 -1
  428. package/dist/hud/theme-packs/index.js +0 -38
  429. package/dist/hud/theme-packs/index.js.map +0 -1
  430. package/dist/hud/theme-packs/types.d.ts +0 -29
  431. package/dist/hud/theme-packs/types.d.ts.map +0 -1
  432. package/dist/hud/theme-packs/types.js +0 -9
  433. package/dist/hud/theme-packs/types.js.map +0 -1
  434. package/dist/idle-eviction.d.ts +0 -34
  435. package/dist/idle-eviction.d.ts.map +0 -1
  436. package/dist/idle-eviction.js +0 -85
  437. package/dist/idle-eviction.js.map +0 -1
  438. package/dist/model-router.d.ts +0 -67
  439. package/dist/model-router.d.ts.map +0 -1
  440. package/dist/model-router.js.map +0 -1
  441. package/dist/providers/openai-compat-shims.d.ts +0 -31
  442. package/dist/providers/openai-compat-shims.d.ts.map +0 -1
  443. package/dist/providers/openai-compat-shims.js +0 -179
  444. package/dist/providers/openai-compat-shims.js.map +0 -1
  445. package/dist/sandbox-native.d.ts.map +0 -1
  446. package/dist/sandbox-native.js.map +0 -1
  447. package/dist/sandbox.d.ts.map +0 -1
  448. package/dist/sandbox.js.map +0 -1
  449. package/dist/session-timeout.d.ts +0 -31
  450. package/dist/session-timeout.d.ts.map +0 -1
  451. package/dist/session-timeout.js +0 -100
  452. package/dist/session-timeout.js.map +0 -1
  453. package/dist/smart-router.d.ts +0 -73
  454. package/dist/smart-router.d.ts.map +0 -1
  455. package/dist/smart-router.js +0 -332
  456. package/dist/smart-router.js.map +0 -1
  457. package/dist/terminal-recording.d.ts +0 -55
  458. package/dist/terminal-recording.d.ts.map +0 -1
  459. package/dist/terminal-recording.js +0 -182
  460. package/dist/terminal-recording.js.map +0 -1
  461. package/dist/tmux.d.ts +0 -35
  462. package/dist/tmux.d.ts.map +0 -1
  463. package/dist/tmux.js +0 -106
  464. package/dist/tmux.js.map +0 -1
  465. package/dist/ui/modals.d.ts +0 -72
  466. package/dist/ui/modals.d.ts.map +0 -1
  467. package/dist/ui/modals.js +0 -266
  468. package/dist/ui/modals.js.map +0 -1
  469. package/dist/ui/pack-picker.d.ts +0 -12
  470. package/dist/ui/pack-picker.d.ts.map +0 -1
  471. package/dist/ui/pack-picker.js +0 -101
  472. package/dist/ui/pack-picker.js.map +0 -1
  473. package/dist/ui/theme-picker.d.ts +0 -24
  474. package/dist/ui/theme-picker.d.ts.map +0 -1
  475. package/dist/ui/theme-picker.js +0 -190
  476. package/dist/ui/theme-picker.js.map +0 -1
@@ -0,0 +1,111 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * UI Module - Selector Modals
4
+ *
5
+ * List-based pickers: model selection, session management, provider selection.
6
+ */
7
+ import { useState } from 'react';
8
+ import { Box, Text, useInput } from 'ink';
9
+ // ============================================================================
10
+ // Model Selector
11
+ // ============================================================================
12
+ export function ModelSelector({ models, onSelect, onCancel }) {
13
+ const [index, setIndex] = useState(0);
14
+ const pageSize = 10;
15
+ const start = Math.max(0, Math.min(index - Math.floor(pageSize / 2), models.length - pageSize));
16
+ const visible = models.slice(start, start + pageSize);
17
+ useInput((input, key) => {
18
+ if (key.upArrow)
19
+ setIndex(i => Math.max(0, i - 1));
20
+ else if (key.downArrow)
21
+ setIndex(i => Math.min(models.length - 1, i + 1));
22
+ else if (key.return && models.length > 0)
23
+ onSelect(models[index].id);
24
+ else if (key.escape || input === 'q')
25
+ onCancel();
26
+ });
27
+ return (_jsxs(Box, { flexDirection: "column", marginY: 1, children: [_jsx(Text, { color: "yellow", children: "Select model (\u2191/\u2193 navigate, Enter select, Esc cancel):" }), visible.map((model, i) => {
28
+ const globalIndex = start + i;
29
+ const isSelected = globalIndex === index;
30
+ const name = model.name || model.id;
31
+ const displayName = name.length > 50 ? name.slice(0, 47) + '...' : name;
32
+ return (_jsxs(Text, { color: isSelected ? 'cyan' : undefined, bold: isSelected, children: [isSelected ? '❯ ' : ' ', displayName] }, model.id));
33
+ }), models.length > pageSize && (_jsxs(Text, { dimColor: true, children: [" (", index + 1, "/", models.length, ")"] }))] }));
34
+ }
35
+ // ============================================================================
36
+ // Session Selector
37
+ // ============================================================================
38
+ export function SessionSelector({ sessions, onSelect, onDelete, onCancel }) {
39
+ const [index, setIndex] = useState(0);
40
+ const pageSize = 5;
41
+ // Keep selection visible - scroll window to follow selection
42
+ const start = Math.max(0, Math.min(index - pageSize + 1, sessions.length - pageSize));
43
+ const end = Math.min(start + pageSize, sessions.length);
44
+ const visible = sessions.slice(start, end);
45
+ const hasMore = sessions.length > pageSize;
46
+ const hasAbove = start > 0;
47
+ const hasBelow = end < sessions.length;
48
+ useInput((input, key) => {
49
+ if (key.upArrow)
50
+ setIndex(i => Math.max(0, i - 1));
51
+ else if (key.downArrow)
52
+ setIndex(i => Math.min(sessions.length - 1, i + 1));
53
+ else if (key.return && sessions.length > 0)
54
+ onSelect(sessions[index]);
55
+ else if ((key.backspace || key.delete) && sessions.length > 0)
56
+ onDelete(sessions[index]);
57
+ else if (key.escape || input === 'q')
58
+ onCancel();
59
+ });
60
+ const formatTimeAgo = (dateStr) => {
61
+ const diff = Date.now() - new Date(dateStr).getTime();
62
+ const hours = Math.floor(diff / (1000 * 60 * 60));
63
+ const days = Math.floor(hours / 24);
64
+ if (days > 0)
65
+ return `${days}d ago`;
66
+ if (hours > 0)
67
+ return `${hours}h ago`;
68
+ const minutes = Math.floor(diff / (1000 * 60));
69
+ return `${minutes}m ago`;
70
+ };
71
+ if (sessions.length === 0) {
72
+ return (_jsx(Box, { flexDirection: "column", marginY: 1, children: _jsx(Text, { dimColor: true, children: "No sessions found. Press Esc to close." }) }));
73
+ }
74
+ return (_jsxs(Box, { flexDirection: "column", marginY: 1, children: [_jsx(Text, { color: "yellow", children: "Sessions (\u2191/\u2193, Enter load, Del delete, Esc cancel):" }), hasMore && hasAbove && _jsx(Text, { dimColor: true, children: " \u2191 more" }), visible.map((session, i) => {
75
+ const globalIndex = start + i;
76
+ const isSelected = globalIndex === index;
77
+ const timeAgo = formatTimeAgo(session.lastAccessedAt);
78
+ const name = session.projectName.length > 30 ? session.projectName.slice(0, 27) + '...' : session.projectName;
79
+ return (_jsxs(Text, { color: isSelected ? 'cyan' : undefined, bold: isSelected, children: [isSelected ? '❯ ' : ' ', name, " ", _jsxs(Text, { dimColor: true, children: ["(", timeAgo, ", ", session.messageCount, " msgs)"] })] }, session.id));
80
+ }), hasMore && hasBelow && _jsx(Text, { dimColor: true, children: " \u2193 more" }), hasMore && _jsxs(Text, { dimColor: true, children: [" ", index + 1, "/", sessions.length] })] }));
81
+ }
82
+ export function ProviderSelector({ providers, onSelect, onCancel, }) {
83
+ const [index, setIndex] = useState(() => {
84
+ // Start on the first configured provider; fall back to 0.
85
+ const firstConfigured = providers.findIndex(p => p.configured);
86
+ return firstConfigured >= 0 ? firstConfigured : 0;
87
+ });
88
+ const pageSize = 12;
89
+ const start = Math.max(0, Math.min(index - Math.floor(pageSize / 2), providers.length - pageSize));
90
+ const visible = providers.slice(start, start + pageSize);
91
+ const anyConfigured = providers.some(p => p.configured);
92
+ useInput((input, key) => {
93
+ if (key.upArrow)
94
+ setIndex(i => Math.max(0, i - 1));
95
+ else if (key.downArrow)
96
+ setIndex(i => Math.min(providers.length - 1, i + 1));
97
+ else if (key.return && providers.length > 0)
98
+ onSelect(providers[index]);
99
+ else if (key.escape || input === 'q')
100
+ onCancel();
101
+ });
102
+ return (_jsxs(Box, { flexDirection: "column", marginY: 1, children: [_jsx(Text, { color: "yellow", children: "Select provider (\u2191/\u2193 navigate, Enter select, Esc cancel):" }), !anyConfigured && (_jsx(Text, { dimColor: true, children: " No providers configured. Ollama is the easiest starting point (local, free)." })), visible.map((p, i) => {
103
+ const globalIndex = start + i;
104
+ const isSelected = globalIndex === index;
105
+ const star = p.configured ? '★' : '☆';
106
+ const starColor = p.configured ? 'green' : 'gray';
107
+ const tag = p.recommended ? ' (recommended)' : '';
108
+ return (_jsxs(Box, { children: [_jsx(Text, { color: isSelected ? 'cyan' : undefined, bold: isSelected, children: isSelected ? '❯ ' : ' ' }), _jsxs(Text, { color: starColor, children: [star, " "] }), _jsx(Text, { color: isSelected ? 'cyan' : undefined, bold: isSelected, children: p.label }), p.note && _jsxs(Text, { dimColor: true, children: [" \u2014 ", p.note] }), tag && _jsx(Text, { color: "yellow", children: tag }), !p.configured && _jsxs(Text, { dimColor: true, children: [" (needs ", p.configHint, ")"] })] }, p.id));
109
+ }), providers.length > pageSize && (_jsxs(Text, { dimColor: true, children: [" (", index + 1, "/", providers.length, ")"] }))] }));
110
+ }
111
+ //# sourceMappingURL=selectors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selectors.js","sourceRoot":"","sources":["../../../src/ui/modals/selectors.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * UI Module - Setup & Info Modals
3
+ *
4
+ * Inline API-key configuration and the keybindings help overlay.
5
+ */
6
+ import type { LLMProvider } from '../../types.js';
7
+ export declare function ApiKeySetup({ provider, configHint, onSubmit, onCancel, extraInstructions, }: {
8
+ provider: LLMProvider;
9
+ configHint: string;
10
+ onSubmit: (value: string) => void;
11
+ onCancel: () => void;
12
+ extraInstructions?: string;
13
+ }): import("react/jsx-runtime").JSX.Element;
14
+ export declare function KeybindingsModal({ onClose }: {
15
+ onClose: () => void;
16
+ }): import("react/jsx-runtime").JSX.Element;
17
+ //# sourceMappingURL=setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/ui/modals/setup.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAOlD,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,iBAAiB,GAClB,EAAE;IACD,QAAQ,EAAE,WAAW,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,2CA0CA;AAMD,wBAAgB,gBAAgB,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,2CAoCpE"}
@@ -0,0 +1,51 @@
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * UI Module - Setup & Info Modals
4
+ *
5
+ * Inline API-key configuration and the keybindings help overlay.
6
+ */
7
+ import { useState } from 'react';
8
+ import { Box, Text, useInput } from 'ink';
9
+ import { shouldInsertInputChunk } from '../input-utils.js';
10
+ // ============================================================================
11
+ // Api Key Setup (inline configuration for unconfigured providers)
12
+ // ============================================================================
13
+ export function ApiKeySetup({ provider, configHint, onSubmit, onCancel, extraInstructions, }) {
14
+ const [value, setValue] = useState('');
15
+ useInput((input, key) => {
16
+ if (key.escape) {
17
+ onCancel();
18
+ return;
19
+ }
20
+ if (key.return) {
21
+ const trimmed = value.trim();
22
+ if (trimmed)
23
+ onSubmit(trimmed);
24
+ return;
25
+ }
26
+ if (key.backspace || key.delete || input === '\x7f' || input === '\b' || (key.ctrl && input === 'h')) {
27
+ setValue(v => v.slice(0, -1));
28
+ return;
29
+ }
30
+ if (key.ctrl && input === 'u') {
31
+ setValue('');
32
+ return;
33
+ }
34
+ if (shouldInsertInputChunk(input, key)) {
35
+ setValue(v => v + input);
36
+ }
37
+ });
38
+ const masked = value ? '•'.repeat(Math.min(value.length, 40)) : '';
39
+ return (_jsxs(Box, { flexDirection: "column", marginY: 1, borderStyle: "round", borderColor: "cyan", paddingX: 1, children: [_jsxs(Text, { color: "cyan", bold: true, children: ["\uD83D\uDD11 Configure ", provider] }), _jsx(Text, { children: " " }), _jsxs(Text, { dimColor: true, children: ["Paste your ", configHint, " and press Enter (Esc to cancel):"] }), extraInstructions && _jsx(Text, { dimColor: true, children: extraInstructions }), _jsx(Text, { children: " " }), _jsxs(Box, { children: [_jsxs(Text, { color: "yellow", children: [configHint, ": "] }), _jsx(Text, { children: masked }), _jsx(Text, { color: "cyan", children: "\u258C" })] })] }));
40
+ }
41
+ // ============================================================================
42
+ // Keybindings Modal
43
+ // ============================================================================
44
+ export function KeybindingsModal({ onClose }) {
45
+ useInput((input, key) => {
46
+ if (key.escape || key.return || input === 'q')
47
+ onClose();
48
+ });
49
+ return (_jsxs(Box, { flexDirection: "column", marginY: 1, borderStyle: "round", borderColor: "cyan", paddingX: 2, paddingY: 1, children: [_jsx(Text, { color: "cyan", bold: true, children: "\u2328\uFE0F Keyboard Shortcuts" }), _jsx(Text, { children: " " }), _jsx(Text, { bold: true, color: "yellow", children: "General:" }), _jsx(Text, { children: " Enter Submit message" }), _jsx(Text, { children: " Alt/Ctrl+Enter Insert newline (multiline)" }), _jsx(Text, { children: " Shift+Tab Cycle modes (plan/hybrid/work)" }), _jsx(Text, { children: " Esc Cancel operation / show hint" }), _jsx(Text, { children: " Ctrl+C Exit" }), _jsx(Text, { children: " \u2191/\u2193 Navigate input history" }), _jsx(Text, { children: " Tab Auto-complete commands/paths" }), _jsx(Text, { children: " Ctrl+U Clear input line" }), _jsx(Text, { children: " " }), _jsx(Text, { bold: true, color: "yellow", children: "During Processing (queue mode):" }), _jsx(Text, { children: " Enter Queue message for later" }), _jsx(Text, { children: " !message Send directly (interrupt agent)" }), _jsx(Text, { children: " \u2191/\u2193 Edit queued messages" }), _jsx(Text, { children: " Ctrl+D Delete queued message" }), _jsx(Text, { children: " " }), _jsx(Text, { bold: true, color: "yellow", children: "Quick Commands:" }), _jsx(Text, { children: " /keys This help" }), _jsx(Text, { children: " /work Switch to work mode" }), _jsx(Text, { children: " /plan Switch to plan mode" }), _jsx(Text, { children: " /flush Force-process queue" }), _jsx(Text, { children: " /unstick Reset stuck state" }), _jsx(Text, { children: " /debug on/off Toggle debug mode" }), _jsx(Text, { children: " " }), _jsx(Text, { dimColor: true, children: "Press any key to close..." })] }));
50
+ }
51
+ //# sourceMappingURL=setup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/ui/modals/setup.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * UI region - input
3
+ *
4
+ * Owns every input-widget concern: the current value, tab-completion
5
+ * suggestions, up/down history navigation, and submit (which records history
6
+ * and clears the line before delegating message processing to the parent).
7
+ *
8
+ * This is where keystroke isolation lives. The value is held in a ref for the
9
+ * synchronous-paint pattern ChatInput relies on, and a version counter bumps on
10
+ * every change so ONLY this region re-renders while typing — the parent, the
11
+ * transcript, and the status bar are untouched.
12
+ */
13
+ import React from 'react';
14
+ import type { Mode } from '../../types.js';
15
+ export interface InputRegionProps {
16
+ /** Process a submitted, trimmed, non-empty message (command/shell/agent routing). */
17
+ onSubmitMessage: (trimmed: string) => void;
18
+ /** Populated with the full submit fn (records history, clears, routes) so the
19
+ * parent can drive submissions from outside the widget (e.g. fleet polling). */
20
+ submitRef?: React.MutableRefObject<((value: string) => void) | null>;
21
+ disabled: boolean;
22
+ isProcessing: boolean;
23
+ queuedCount: number;
24
+ queuedMessages: string[];
25
+ editingQueueIndex: number | null;
26
+ onQueueMessage: (msg: string) => void;
27
+ onEditQueuedMessage: (index: number, msg: string) => void;
28
+ onSetEditingQueueIndex: (index: number | null) => void;
29
+ onDirectSend: (msg: string) => void;
30
+ onEscape: () => void;
31
+ onExit: () => void;
32
+ onCycleMode: () => void;
33
+ currentMode: Mode;
34
+ contextPercentage: number;
35
+ cwd: string;
36
+ }
37
+ declare function InputRegionInner(props: InputRegionProps): import("react/jsx-runtime").JSX.Element;
38
+ export declare const InputRegion: React.MemoExoticComponent<typeof InputRegionInner>;
39
+ export {};
40
+ //# sourceMappingURL=input-region.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-region.d.ts","sourceRoot":"","sources":["../../../src/ui/regions/input-region.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAA4D,MAAM,OAAO,CAAC;AAEjF,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAI3C,MAAM,WAAW,gBAAgB;IAC/B,qFAAqF;IACrF,eAAe,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C;qFACiF;IACjF,SAAS,CAAC,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;IACrE,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,cAAc,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,mBAAmB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC1D,sBAAsB,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACvD,YAAY,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,WAAW,EAAE,MAAM,IAAI,CAAC;IACxB,WAAW,EAAE,IAAI,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;CACb;AAED,iBAAS,gBAAgB,CAAC,KAAK,EAAE,gBAAgB,2CAuIhD;AAED,eAAO,MAAM,WAAW,oDAA+B,CAAC"}
@@ -0,0 +1,116 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * UI region - input
4
+ *
5
+ * Owns every input-widget concern: the current value, tab-completion
6
+ * suggestions, up/down history navigation, and submit (which records history
7
+ * and clears the line before delegating message processing to the parent).
8
+ *
9
+ * This is where keystroke isolation lives. The value is held in a ref for the
10
+ * synchronous-paint pattern ChatInput relies on, and a version counter bumps on
11
+ * every change so ONLY this region re-renders while typing — the parent, the
12
+ * transcript, and the status bar are untouched.
13
+ */
14
+ import React, { useState, useRef, useCallback, useEffect, useMemo } from 'react';
15
+ import * as fs from 'fs';
16
+ import { ChatInput } from '../chat-input.js';
17
+ import { probeRender } from './render-probe.js';
18
+ function InputRegionInner(props) {
19
+ probeRender('input');
20
+ const { onSubmitMessage, submitRef, disabled, isProcessing, queuedCount, queuedMessages, editingQueueIndex, onQueueMessage, onEditQueuedMessage, onSetEditingQueueIndex, onDirectSend, onEscape, onExit, onCycleMode, currentMode, contextPercentage, cwd, } = props;
21
+ // Input value is held in a ref for ChatInput's synchronous-paint pattern; the
22
+ // version counter bumps on every change so this region re-renders on a
23
+ // keystroke while the rest of the tree stays put.
24
+ const inputRef = useRef('');
25
+ const [inputVersion, setInputVersion] = useState(0);
26
+ const [suggestions, setSuggestions] = useState([]);
27
+ // Input history for up/down arrow navigation
28
+ const [inputHistory, setInputHistory] = useState([]);
29
+ const [historyIndex, setHistoryIndex] = useState(-1);
30
+ const [savedInput, setSavedInput] = useState(''); // Save current input when navigating
31
+ const [hasGitRepo] = useState(() => {
32
+ try {
33
+ return fs.existsSync('.git') || fs.existsSync('../.git');
34
+ }
35
+ catch {
36
+ return false;
37
+ }
38
+ });
39
+ const recentCommands = useMemo(() => inputHistory.filter(cmd => cmd.startsWith('/')).slice(-10), [inputHistory]);
40
+ const setInputValue = useCallback((value) => {
41
+ inputRef.current = value;
42
+ setInputVersion(v => v + 1);
43
+ }, []);
44
+ // Typing: keep the ref canonical and bump the version so this region repaints.
45
+ // Slash-suggestion and history-index resets bail out when already current.
46
+ const handleInputChange = useCallback((newValue) => {
47
+ inputRef.current = newValue;
48
+ setInputVersion(v => v + 1);
49
+ if (!newValue || !newValue.startsWith('/')) {
50
+ setSuggestions(prev => prev.length > 0 ? [] : prev);
51
+ }
52
+ setHistoryIndex(prev => prev === -1 ? prev : -1);
53
+ }, []);
54
+ // Navigate input history
55
+ const navigateHistory = useCallback((direction) => {
56
+ if (inputHistory.length === 0)
57
+ return;
58
+ if (direction === 'up') {
59
+ if (historyIndex === -1) {
60
+ // Save current input before navigating
61
+ setSavedInput(inputRef.current);
62
+ setHistoryIndex(inputHistory.length - 1);
63
+ setInputValue(inputHistory[inputHistory.length - 1]);
64
+ }
65
+ else if (historyIndex > 0) {
66
+ setHistoryIndex(historyIndex - 1);
67
+ setInputValue(inputHistory[historyIndex - 1]);
68
+ }
69
+ }
70
+ else {
71
+ if (historyIndex === -1)
72
+ return;
73
+ if (historyIndex < inputHistory.length - 1) {
74
+ setHistoryIndex(historyIndex + 1);
75
+ setInputValue(inputHistory[historyIndex + 1]);
76
+ }
77
+ else {
78
+ // Return to saved input
79
+ setHistoryIndex(-1);
80
+ setInputValue(savedInput);
81
+ }
82
+ }
83
+ }, [inputHistory, historyIndex, savedInput, setInputValue]);
84
+ // Add to history when submitting
85
+ const addToHistory = useCallback((value) => {
86
+ if (value.trim() && (inputHistory.length === 0 || inputHistory[inputHistory.length - 1] !== value)) {
87
+ setInputHistory(prev => [...prev.slice(-100), value]); // Keep last 100 entries
88
+ }
89
+ setHistoryIndex(-1);
90
+ setSavedInput('');
91
+ }, [inputHistory]);
92
+ // Submit: record history, clear the line, then hand off routing to the parent.
93
+ // (ChatInput queues rather than submitting while processing, and fleet checks
94
+ // isProcessingRef before calling, so the value is only ever submitted idle.)
95
+ const handleSubmit = useCallback((value) => {
96
+ const trimmed = value.trim();
97
+ if (!trimmed)
98
+ return;
99
+ addToHistory(trimmed);
100
+ setInputValue('');
101
+ onSubmitMessage(trimmed);
102
+ }, [addToHistory, setInputValue, onSubmitMessage]);
103
+ // Expose the full submit to the parent (fleet polling drives it directly).
104
+ useEffect(() => {
105
+ if (submitRef) {
106
+ submitRef.current = handleSubmit;
107
+ return () => { submitRef.current = null; };
108
+ }
109
+ return undefined;
110
+ }, [submitRef, handleSubmit]);
111
+ return (_jsx(ChatInput, { value: inputRef.current, valueVersion: inputVersion, onChange: handleInputChange, onSubmit: handleSubmit, onEscape: onEscape, onExit: onExit, onCycleMode: onCycleMode, disabled: disabled, isProcessing: isProcessing, queuedCount: queuedCount, queuedMessages: queuedMessages, editingQueueIndex: editingQueueIndex, onQueueMessage: onQueueMessage, onEditQueuedMessage: onEditQueuedMessage, onSetEditingQueueIndex: onSetEditingQueueIndex, onDirectSend: onDirectSend, cwd: cwd, suggestions: suggestions, onSuggestionsChange: setSuggestions, onNavigateHistory: navigateHistory,
112
+ // Smart suggestions context
113
+ currentMode: currentMode, contextPercentage: contextPercentage, recentCommands: recentCommands, hasGitRepo: hasGitRepo }));
114
+ }
115
+ export const InputRegion = React.memo(InputRegionInner);
116
+ //# sourceMappingURL=input-region.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input-region.js","sourceRoot":"","sources":["../../../src/ui/regions/input-region.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AACjF,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AAEzB,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAyBhD,SAAS,gBAAgB,CAAC,KAAuB;IAC/C,WAAW,CAAC,OAAO,CAAC,CAAC;IAErB,MAAM,EACJ,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAC/E,iBAAiB,EAAE,cAAc,EAAE,mBAAmB,EAAE,sBAAsB,EAC9E,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAE,GAAG,GACjF,GAAG,KAAK,CAAC;IAEV,8EAA8E;IAC9E,uEAAuE;IACvE,kDAAkD;IAClD,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IAC5B,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACpD,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC,CAAC;IAE7D,6CAA6C;IAC7C,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAW,EAAE,CAAC,CAAC;IAC/D,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,qCAAqC;IAEvF,MAAM,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE;QACjC,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;QAC3D,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,OAAO,CAC5B,GAAG,EAAE,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAChE,CAAC,YAAY,CAAC,CACf,CAAC;IAEF,MAAM,aAAa,GAAG,WAAW,CAAC,CAAC,KAAa,EAAE,EAAE;QAClD,QAAQ,CAAC,OAAO,GAAG,KAAK,CAAC;QACzB,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC9B,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,+EAA+E;IAC/E,2EAA2E;IAC3E,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,QAAgB,EAAE,EAAE;QACzD,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC;QAC5B,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5B,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3C,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACtD,CAAC;QACD,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,yBAAyB;IACzB,MAAM,eAAe,GAAG,WAAW,CAAC,CAAC,SAAwB,EAAE,EAAE;QAC/D,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEtC,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;gBACxB,uCAAuC;gBACvC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAChC,eAAe,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;gBACzC,aAAa,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,CAAC;YACxD,CAAC;iBAAM,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;gBAC5B,eAAe,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;gBAClC,aAAa,CAAC,YAAY,CAAC,YAAY,GAAG,CAAC,CAAE,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,YAAY,KAAK,CAAC,CAAC;gBAAE,OAAO;YAChC,IAAI,YAAY,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3C,eAAe,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;gBAClC,aAAa,CAAC,YAAY,CAAC,YAAY,GAAG,CAAC,CAAE,CAAC,CAAC;YACjD,CAAC;iBAAM,CAAC;gBACN,wBAAwB;gBACxB,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;gBACpB,aAAa,CAAC,UAAU,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC;IAE5D,iCAAiC;IACjC,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,KAAa,EAAE,EAAE;QACjD,IAAI,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;YACnG,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,wBAAwB;QACjF,CAAC;QACD,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;QACpB,aAAa,CAAC,EAAE,CAAC,CAAC;IACpB,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnB,+EAA+E;IAC/E,8EAA8E;IAC9E,6EAA6E;IAC7E,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,KAAa,EAAE,EAAE;QACjD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO;YAAE,OAAO;QACrB,YAAY,CAAC,OAAO,CAAC,CAAC;QACtB,aAAa,CAAC,EAAE,CAAC,CAAC;QAClB,eAAe,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC,CAAC;IAEnD,2EAA2E;IAC3E,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,SAAS,EAAE,CAAC;YACd,SAAS,CAAC,OAAO,GAAG,YAAY,CAAC;YACjC,OAAO,GAAG,EAAE,GAAG,SAAS,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,EAAE,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC,CAAC;IAE9B,OAAO,CACL,KAAC,SAAS,IACR,KAAK,EAAE,QAAQ,CAAC,OAAO,EACvB,YAAY,EAAE,YAAY,EAC1B,QAAQ,EAAE,iBAAiB,EAC3B,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,WAAW,EACxB,cAAc,EAAE,cAAc,EAC9B,iBAAiB,EAAE,iBAAiB,EACpC,cAAc,EAAE,cAAc,EAC9B,mBAAmB,EAAE,mBAAmB,EACxC,sBAAsB,EAAE,sBAAsB,EAC9C,YAAY,EAAE,YAAY,EAC1B,GAAG,EAAE,GAAG,EACR,WAAW,EAAE,WAAW,EACxB,mBAAmB,EAAE,cAAc,EACnC,iBAAiB,EAAE,eAAe;QAClC,4BAA4B;QAC5B,WAAW,EAAE,WAAW,EACxB,iBAAiB,EAAE,iBAAiB,EACpC,cAAc,EAAE,cAAc,EAC9B,UAAU,EAAE,UAAU,GACtB,CACH,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * UI region - modal host
3
+ *
4
+ * Renders whichever modal `modalMode` selects. Purely presentational: every bit
5
+ * of logic (session loading, provider config, upgrade) is supplied by the
6
+ * controller as a stable callback. Memoized so it stays put on keystrokes.
7
+ */
8
+ import React from 'react';
9
+ import type { ModelInfo } from '../../model-detection.js';
10
+ import type { SessionInfo } from '../types.js';
11
+ import type { ProviderEntry } from '../modals/index.js';
12
+ import type { ModalMode, PendingComplexPrompt, PreviousSessionInfo } from '../state/use-modal-state.js';
13
+ export interface ModalHostProps {
14
+ modalMode: ModalMode;
15
+ availableModels: ModelInfo[];
16
+ onModelSelect: (model: string) => void;
17
+ onModalCancel: () => void;
18
+ availableSessions: SessionInfo[];
19
+ onSessionSelect: (session: SessionInfo) => void;
20
+ onSessionDelete: (session: SessionInfo) => void;
21
+ latestVersion: string | null;
22
+ onUpgradeConfirm: () => void;
23
+ previousSession: PreviousSessionInfo | null;
24
+ onSessionResume: () => void;
25
+ onSessionResumeNew: () => void;
26
+ pendingComplexPrompt: PendingComplexPrompt | null;
27
+ onComplexityProceed: () => void;
28
+ onComplexityPlan: () => void;
29
+ onComplexityCancel: () => void;
30
+ onKeybindingsClose: () => void;
31
+ providerEntries: ProviderEntry[];
32
+ onProviderSelect: (entry: ProviderEntry) => void;
33
+ onProviderCancel: () => void;
34
+ pendingSetupProvider: ProviderEntry | null;
35
+ onApiKeySubmit: (value: string) => void;
36
+ onApiKeyCancel: () => void;
37
+ }
38
+ declare function ModalHostInner(props: ModalHostProps): import("react/jsx-runtime").JSX.Element | null;
39
+ export declare const ModalHost: React.MemoExoticComponent<typeof ModalHostInner>;
40
+ export {};
41
+ //# sourceMappingURL=modal-host.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modal-host.d.ts","sourceRoot":"","sources":["../../../src/ui/regions/modal-host.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EACV,SAAS,EAAE,oBAAoB,EAAE,mBAAmB,EACrD,MAAM,6BAA6B,CAAC;AAGrC,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,SAAS,CAAC;IAErB,eAAe,EAAE,SAAS,EAAE,CAAC;IAC7B,aAAa,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,aAAa,EAAE,MAAM,IAAI,CAAC;IAE1B,iBAAiB,EAAE,WAAW,EAAE,CAAC;IACjC,eAAe,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAChD,eAAe,EAAE,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAEhD,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAE7B,eAAe,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAC5C,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAE/B,oBAAoB,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAClD,mBAAmB,EAAE,MAAM,IAAI,CAAC;IAChC,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAE/B,kBAAkB,EAAE,MAAM,IAAI,CAAC;IAE/B,eAAe,EAAE,aAAa,EAAE,CAAC;IACjC,gBAAgB,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;IACjD,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAE7B,oBAAoB,EAAE,aAAa,GAAG,IAAI,CAAC;IAC3C,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,cAAc,EAAE,MAAM,IAAI,CAAC;CAC5B;AAED,iBAAS,cAAc,CAAC,KAAK,EAAE,cAAc,kDAgG5C;AAED,eAAO,MAAM,SAAS,kDAA6B,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ /**
3
+ * UI region - modal host
4
+ *
5
+ * Renders whichever modal `modalMode` selects. Purely presentational: every bit
6
+ * of logic (session loading, provider config, upgrade) is supplied by the
7
+ * controller as a stable callback. Memoized so it stays put on keystrokes.
8
+ */
9
+ import React from 'react';
10
+ import { getVersion } from '../../version-check.js';
11
+ import { ModelSelector, SessionSelector, UpgradePrompt, ComplexityWarning, SessionResumePrompt, KeybindingsModal, ProviderSelector, ApiKeySetup, } from '../modals/index.js';
12
+ import { probeRender } from './render-probe.js';
13
+ function ModalHostInner(props) {
14
+ probeRender('modal');
15
+ const { modalMode } = props;
16
+ if (modalMode === 'model' && props.availableModels.length > 0) {
17
+ return (_jsx(ModelSelector, { models: props.availableModels, onSelect: props.onModelSelect, onCancel: props.onModalCancel }));
18
+ }
19
+ if (modalMode === 'sessions') {
20
+ return (_jsx(SessionSelector, { sessions: props.availableSessions, onSelect: props.onSessionSelect, onDelete: props.onSessionDelete, onCancel: props.onModalCancel }));
21
+ }
22
+ if (modalMode === 'upgrade' && props.latestVersion) {
23
+ return (_jsx(UpgradePrompt, { currentVersion: getVersion(), latestVersion: props.latestVersion, onConfirm: props.onUpgradeConfirm, onCancel: props.onModalCancel }));
24
+ }
25
+ if (modalMode === 'session-resume' && props.previousSession) {
26
+ return (_jsx(SessionResumePrompt, { session: props.previousSession, onResume: props.onSessionResume, onNew: props.onSessionResumeNew }));
27
+ }
28
+ if (modalMode === 'complexity-warning' && props.pendingComplexPrompt) {
29
+ const { pendingComplexPrompt } = props;
30
+ return (_jsx(ComplexityWarning, { reason: pendingComplexPrompt.complexity.reason || 'Complex operation detected', prompt: typeof pendingComplexPrompt.prompt === 'string' ? pendingComplexPrompt.prompt : undefined, onProceed: props.onComplexityProceed, onPlan: props.onComplexityPlan, onCancel: props.onComplexityCancel }));
31
+ }
32
+ if (modalMode === 'keys') {
33
+ return _jsx(KeybindingsModal, { onClose: props.onKeybindingsClose });
34
+ }
35
+ if (modalMode === 'provider' && props.providerEntries.length > 0) {
36
+ return (_jsx(ProviderSelector, { providers: props.providerEntries, onSelect: props.onProviderSelect, onCancel: props.onProviderCancel }));
37
+ }
38
+ if (modalMode === 'api-key-setup' && props.pendingSetupProvider) {
39
+ const { pendingSetupProvider } = props;
40
+ return (_jsx(ApiKeySetup, { provider: pendingSetupProvider.id, configHint: pendingSetupProvider.configHint, onSubmit: props.onApiKeySubmit, onCancel: props.onApiKeyCancel, extraInstructions: pendingSetupProvider.id === 'ollama'
41
+ ? 'e.g. http://localhost:11434 (start with: ollama serve)'
42
+ : pendingSetupProvider.id === 'bedrock'
43
+ ? 'Enter your AWS profile name. Ensure it exists in ~/.aws/credentials or ~/.aws/config.'
44
+ : pendingSetupProvider.id === 'litellm'
45
+ ? 'e.g. http://localhost:4000'
46
+ : undefined }));
47
+ }
48
+ return null;
49
+ }
50
+ export const ModalHost = React.memo(ModalHostInner);
51
+ //# sourceMappingURL=modal-host.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modal-host.js","sourceRoot":"","sources":["../../../src/ui/regions/modal-host.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * UI Module - Render Probe (test/automation instrumentation)
3
+ *
4
+ * Region components call `probeRender(name)` at the top of their render and
5
+ * `probeMount(name)` from a mount effect. Both are no-ops in production (the
6
+ * probe is disabled), so the overhead is a single boolean check per render.
7
+ *
8
+ * The render-isolation test enables the probe, renders the decomposed tree,
9
+ * drives stdin, and asserts which regions re-rendered — this is how we prove a
10
+ * keystroke touches only the input region and that resetSession() resets state
11
+ * without remounting (mount count stays 1).
12
+ */
13
+ /** Enable (and reset) or disable render/mount counting. */
14
+ export declare function enableRenderProbe(on?: boolean): void;
15
+ export declare function isRenderProbeEnabled(): boolean;
16
+ /** Count one render of the named component. No-op unless the probe is enabled. */
17
+ export declare function probeRender(name: string): void;
18
+ /** Count one mount of the named component. No-op unless the probe is enabled. */
19
+ export declare function probeMount(name: string): void;
20
+ export declare function getRenderCount(name: string): number;
21
+ export declare function getMountCount(name: string): number;
22
+ //# sourceMappingURL=render-probe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-probe.d.ts","sourceRoot":"","sources":["../../../src/ui/regions/render-probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,2DAA2D;AAC3D,wBAAgB,iBAAiB,CAAC,EAAE,UAAO,GAAG,IAAI,CAMjD;AAED,wBAAgB,oBAAoB,IAAI,OAAO,CAE9C;AAED,kFAAkF;AAClF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED,iFAAiF;AACjF,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAE7C;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAElD"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * UI Module - Render Probe (test/automation instrumentation)
3
+ *
4
+ * Region components call `probeRender(name)` at the top of their render and
5
+ * `probeMount(name)` from a mount effect. Both are no-ops in production (the
6
+ * probe is disabled), so the overhead is a single boolean check per render.
7
+ *
8
+ * The render-isolation test enables the probe, renders the decomposed tree,
9
+ * drives stdin, and asserts which regions re-rendered — this is how we prove a
10
+ * keystroke touches only the input region and that resetSession() resets state
11
+ * without remounting (mount count stays 1).
12
+ */
13
+ let enabled = false;
14
+ const renderCounts = Object.create(null);
15
+ const mountCounts = Object.create(null);
16
+ /** Enable (and reset) or disable render/mount counting. */
17
+ export function enableRenderProbe(on = true) {
18
+ enabled = on;
19
+ if (on) {
20
+ for (const k of Object.keys(renderCounts))
21
+ delete renderCounts[k];
22
+ for (const k of Object.keys(mountCounts))
23
+ delete mountCounts[k];
24
+ }
25
+ }
26
+ export function isRenderProbeEnabled() {
27
+ return enabled;
28
+ }
29
+ /** Count one render of the named component. No-op unless the probe is enabled. */
30
+ export function probeRender(name) {
31
+ if (enabled)
32
+ renderCounts[name] = (renderCounts[name] ?? 0) + 1;
33
+ }
34
+ /** Count one mount of the named component. No-op unless the probe is enabled. */
35
+ export function probeMount(name) {
36
+ if (enabled)
37
+ mountCounts[name] = (mountCounts[name] ?? 0) + 1;
38
+ }
39
+ export function getRenderCount(name) {
40
+ return renderCounts[name] ?? 0;
41
+ }
42
+ export function getMountCount(name) {
43
+ return mountCounts[name] ?? 0;
44
+ }
45
+ //# sourceMappingURL=render-probe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-probe.js","sourceRoot":"","sources":["../../../src/ui/regions/render-probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,IAAI,OAAO,GAAG,KAAK,CAAC;AACpB,MAAM,YAAY,GAA2B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACjE,MAAM,WAAW,GAA2B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAEhE,2DAA2D;AAC3D,MAAM,UAAU,iBAAiB,CAAC,EAAE,GAAG,IAAI;IACzC,OAAO,GAAG,EAAE,CAAC;IACb,IAAI,EAAE,EAAE,CAAC;QACP,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;YAAE,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC;QAClE,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC;YAAE,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC;IAClE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB;IAClC,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,IAAI,OAAO;QAAE,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AAClE,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,IAAI,OAAO;QAAE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * UI region - static scrollback
3
+ *
4
+ * Completed transcript entries rendered through Ink's <Static>. Static writes
5
+ * each item to stdout exactly once and never re-traverses it, so a growing
6
+ * scrollback and per-token streaming updates below no longer pay a full-frame
7
+ * redraw for history that hasn't changed.
8
+ *
9
+ * Two Static constraints shape this component:
10
+ *
11
+ * 1. APPEND-ONLY. Static tracks how many items it has emitted and only renders
12
+ * the tail beyond that count. Items must therefore be appended, never
13
+ * reordered or truncated. Every UIMessage is finalized before the next one
14
+ * is appended (streaming text lives in the separate live zone, not here), so
15
+ * `messages` is naturally append-only during a turn. Clearing/undo replace
16
+ * the array non-append-only; the parent remounts this component (keyed on
17
+ * clearCount) to reset Static's emitted-count rather than mutating it.
18
+ *
19
+ * 2. WRITE-ONCE COLLAPSE (tradeoff). A tool message's rendering depends on its
20
+ * ordinal among tools (collapseTools/toolDisplayLimit windowing). Under
21
+ * <Static> each item renders once, at append time, so that decision is
22
+ * FROZEN then: a tool shown expanded when it was the newest stays expanded
23
+ * even as newer tools arrive — the sliding collapse window no longer
24
+ * re-collapses already-printed tools. This only affects sessions that opt
25
+ * into collapseTools (default off; collapseThinking is currently always
26
+ * off), where the default configuration is byte-identical to the previous
27
+ * non-Static rendering. This is accepted, not worked around: a re-render
28
+ * escape hatch would defeat the write-once guarantee that is the point.
29
+ */
30
+ import React from 'react';
31
+ import type { UIMessage, CollapseSettings } from '../types.js';
32
+ export interface StaticScrollbackProps {
33
+ messages: UIMessage[];
34
+ collapseSettings: CollapseSettings;
35
+ }
36
+ declare function StaticScrollbackInner({ messages, collapseSettings }: StaticScrollbackProps): import("react/jsx-runtime").JSX.Element;
37
+ export declare const StaticScrollback: React.MemoExoticComponent<typeof StaticScrollbackInner>;
38
+ export {};
39
+ //# sourceMappingURL=static-scrollback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"static-scrollback.d.ts","sourceRoot":"","sources":["../../../src/ui/regions/static-scrollback.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAoB,MAAM,OAAO,CAAC;AAEzC,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAI/D,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,SAAS,EAAE,CAAC;IACtB,gBAAgB,EAAE,gBAAgB,CAAC;CACpC;AAED,iBAAS,qBAAqB,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,EAAE,qBAAqB,2CAqCnF;AAMD,eAAO,MAAM,gBAAgB,yDAAoC,CAAC"}