@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
@@ -3,106 +3,42 @@
3
3
  *
4
4
  * Slash command list, path completion, and context-aware command suggestions.
5
5
  */
6
+ import config from '../config.js';
6
7
  import * as fs from 'fs';
7
8
  import * as path from 'path';
8
9
  // ============================================================================
9
10
  // Slash Commands (for tab completion)
10
11
  // ============================================================================
11
- export const SLASH_COMMANDS = [
12
- '/help', '/h',
13
- '/mode', '/m',
14
- '/provider', '/p',
15
- '/model',
16
- '/models',
17
- '/route',
18
- '/persona',
19
- '/todo',
20
- '/plans',
21
- '/session',
22
- '/sessions',
23
- '/log',
24
- '/history',
25
- '/context',
26
- '/summarize',
27
- '/clear', '/c',
28
- '/copy',
29
- '/export',
30
- '/edit',
12
+ const BASE_SLASH_COMMANDS = [
13
+ '/help',
14
+ '/status',
15
+ '/clear',
16
+ '/exit',
17
+ '/model', '/model list',
18
+ '/provider',
19
+ '/mode', '/mode plan', '/mode work',
31
20
  '/undo',
32
- '/redo',
33
- '/confirm',
34
- '/profile',
21
+ '/export',
22
+ '/resume',
23
+ '/compact',
24
+ '/scope', '/scope add', '/scope remove',
25
+ '/memory',
35
26
  '/mcp',
36
27
  '/skills',
37
- '/memory',
38
- '/project',
39
- '/find',
40
- '/branch',
41
- '/theme',
42
- '/hooks',
43
- '/search',
44
- '/status', '/s',
45
- '/config',
46
- '/set',
47
- '/layout',
48
- '/density',
49
- '/collapse',
50
- '/scope',
51
- '/add-dir',
52
- '/remove-dir',
53
- '/agents',
54
- '/install-agents',
55
- '/agents defs',
56
- '/agents teams',
57
- '/agents init',
58
- '/agents show',
59
- '/build-agent',
60
- '/build-team',
61
- '/upgrade',
62
- '/loop',
63
- '/cancel-loop',
64
- '/breakloop',
65
- '/exit',
66
- '/keys',
67
- '/?',
68
- '/queue',
69
- '/flush',
70
- '/debug',
71
- '/unstick',
72
- '/work',
73
- '/plan',
74
- '/resume',
75
- '/skin',
76
- '/palette',
77
- '/companion',
78
- '/hud',
79
- '/pack',
80
- '/intensity',
81
- '/emoji',
82
- '/breaker', '/cb',
83
- '/smart',
84
- '/swarm',
85
- '/council',
86
- '/trust',
87
- '/untrust',
88
- '/checkpoint', '/cp',
28
+ '/config', '/config set',
29
+ '/setup',
30
+ '/trust', '/trust remove',
31
+ '/cost',
32
+ '/loop', '/loop stop',
89
33
  '/restore',
90
- '/approve',
91
- '/sandbox',
92
- '/banner',
93
- '/bg',
94
- '/jobs',
95
- '/job',
96
- '/cancel',
97
- '/clear-jobs',
98
- '/recordings',
99
- '/recording',
100
- '/delete-recording',
101
- '/serve',
102
- '/serve-stop',
34
+ '/debug',
103
35
  ];
36
+ /** Slash commands offered in completions. /fleet appears only when fleet mode is enabled. */
37
+ export const SLASH_COMMANDS = config.get('fleet')?.enabled === true
38
+ ? [...BASE_SLASH_COMMANDS, '/fleet']
39
+ : BASE_SLASH_COMMANDS;
104
40
  // Commands that take a path argument (for file tab completion)
105
- export const PATH_COMMANDS = ['/add-dir', '/remove-dir', '/export', '/find', '/restore'];
41
+ export const PATH_COMMANDS = ['/export', '/restore'];
106
42
  // ============================================================================
107
43
  // Path Completion
108
44
  // ============================================================================
@@ -168,39 +104,32 @@ export function getPathCompletions(partial, cwd) {
168
104
  }
169
105
  }
170
106
  export function getSmartCommandSuggestions(ctx) {
171
- const { input, hasGitRepo, contextPercentage, currentMode, recentCommands } = ctx;
107
+ const { input, contextPercentage, currentMode, recentCommands } = ctx;
172
108
  if (!input.startsWith('/'))
173
109
  return [];
174
110
  const suggestions = [];
175
111
  const inputLower = input.toLowerCase();
176
- // All available commands for matching
112
+ // All available commands for matching (survivors only)
177
113
  const allCommands = [
178
- '/help', '/clear', '/exit', '/quit',
179
- '/mode', '/work', '/plan',
180
- '/provider', '/model', '/models', '/config',
181
- '/scope', '/add-dir', '/remove-dir', '/find',
182
- '/summarize', '/context', '/cost', '/session',
183
- '/debug', '/keys', '/unstick', '/flush',
184
- '/branch', '/branches', '/switch',
185
- '/save', '/load', '/sessions',
186
- '/git', '/run', '/set', '/confirm',
114
+ '/help', '/status', '/clear', '/exit',
115
+ '/model', '/provider', '/mode',
116
+ '/undo', '/export', '/resume', '/compact',
117
+ '/scope', '/memory', '/trust', '/restore',
118
+ '/mcp', '/skills',
119
+ '/config', '/setup', '/cost', '/loop', '/debug',
187
120
  ];
188
121
  // Context-aware prioritization
189
122
  const prioritized = [];
190
123
  // High context? Suggest compaction commands first
191
124
  if (contextPercentage > 70) {
192
- prioritized.push('/summarize compact', '/clear', '/branch new');
125
+ prioritized.push('/compact', '/clear');
193
126
  }
194
127
  // Mode-specific suggestions
195
128
  if (currentMode === 'plan') {
196
- prioritized.push('/mode hybrid', '/work');
129
+ prioritized.push('/mode hybrid', '/mode work');
197
130
  }
198
131
  else if (currentMode === 'work') {
199
- prioritized.push('/mode hybrid', '/plan');
200
- }
201
- // Git repo? Suggest git commands
202
- if (hasGitRepo) {
203
- prioritized.push('/git status', '/git diff', '/git add', '/git commit');
132
+ prioritized.push('/mode hybrid', '/mode plan');
204
133
  }
205
134
  // Add recent commands (deduplicated)
206
135
  for (const cmd of recentCommands.slice(-5)) {
@@ -1 +1 @@
1
- {"version":3,"file":"completions.js","sourceRoot":"","sources":["../../src/ui/completions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"completions.js","sourceRoot":"","sources":["../../src/ui/completions.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,10 @@
2
2
  * UI Module - Utility Components
3
3
  *
4
4
  * Animated thinking displays, state transitions, streaming indicators.
5
- * Colors sourced from active palette, animations from active skin.
5
+ * Colors sourced from active palette, animations from active skin. Pure frame
6
+ * generators and the transition hook live in animations.ts.
6
7
  */
8
+ import React from 'react';
7
9
  import type { ThinkingState, ActivityState } from './types.js';
8
10
  export declare function getBannerLines(): string[];
9
11
  export declare function getSkinSpinnerFrames(): string[];
@@ -11,28 +13,34 @@ export declare function getSkinSpinnerFrames(): string[];
11
13
  export declare function getStateSpinner(state: 'thinking' | 'processing' | 'streaming'): string[];
12
14
  export declare const DEFAULT_SPINNER: string[];
13
15
  export declare function Separator(): import("react/jsx-runtime").JSX.Element;
14
- export declare function ThinkingDisplay({ state }: {
16
+ declare function ThinkingDisplayInner({ state }: {
15
17
  state: ThinkingState;
16
18
  }): import("react/jsx-runtime").JSX.Element;
17
- export declare function ProcessingIndicator({ label }: {
19
+ export declare const ThinkingDisplay: React.MemoExoticComponent<typeof ThinkingDisplayInner>;
20
+ declare function ProcessingIndicatorInner({ label }: {
18
21
  label: string;
19
22
  }): import("react/jsx-runtime").JSX.Element;
23
+ export declare const ProcessingIndicator: React.MemoExoticComponent<typeof ProcessingIndicatorInner>;
20
24
  /** Brief splash overlay shown when switching themes (auto-dismisses) */
21
- export declare function SplashOverlay({ art, color, onDone }: {
25
+ declare function SplashOverlayInner({ art, color, onDone }: {
22
26
  art: string[];
23
27
  color: string;
24
28
  onDone: () => void;
25
29
  }): import("react/jsx-runtime").JSX.Element;
26
- export declare function StreamingIndicator({ activity }: {
30
+ export declare const SplashOverlay: React.MemoExoticComponent<typeof SplashOverlayInner>;
31
+ declare function StreamingIndicatorInner({ activity }: {
27
32
  activity?: ActivityState;
28
33
  }): import("react/jsx-runtime").JSX.Element;
34
+ export declare const StreamingIndicator: React.MemoExoticComponent<typeof StreamingIndicatorInner>;
29
35
  /**
30
36
  * Renders a brief transition effect between processing states.
31
37
  * Mount when transitioning, unmount after onComplete fires.
32
38
  */
33
- export declare function StateTransition({ from, to, onComplete }: {
39
+ declare function StateTransitionInner({ from, to, onComplete }: {
34
40
  from: 'idle' | 'thinking' | 'streaming' | 'done';
35
41
  to: 'idle' | 'thinking' | 'streaming' | 'done';
36
42
  onComplete: () => void;
37
43
  }): import("react/jsx-runtime").JSX.Element;
44
+ export declare const StateTransition: React.MemoExoticComponent<typeof StateTransitionInner>;
45
+ export {};
38
46
  //# sourceMappingURL=components.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../src/ui/components.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAM/D,wBAAgB,cAAc,IAAI,MAAM,EAAE,CAEzC;AAED,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAE/C;AAID,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,YAAY,GAAG,WAAW,GAAG,MAAM,EAAE,CAOxF;AAED,eAAO,MAAM,eAAe,UAAqD,CAAC;AAsNlF,wBAAgB,SAAS,4CAKxB;AAED,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,aAAa,CAAA;CAAE,2CAqGlE;AAED,wBAAgB,mBAAmB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,2CA4B/D;AAkBD,wEAAwE;AACxE,wBAAgB,aAAa,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;IAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,IAAI,CAAA;CAAE,2CAqBzG;AAED,wBAAgB,kBAAkB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,CAAC,EAAE,aAAa,CAAA;CAAE,2CAmD5E;AAMD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE;IACxD,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,CAAC;IACjD,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,CAAC;IAC/C,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB,2CAyEA"}
1
+ {"version":3,"file":"components.d.ts","sourceRoot":"","sources":["../../src/ui/components.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAsC,MAAM,OAAO,CAAC;AAG3D,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAW/D,wBAAgB,cAAc,IAAI,MAAM,EAAE,CAEzC;AAED,wBAAgB,oBAAoB,IAAI,MAAM,EAAE,CAE/C;AAID,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,YAAY,GAAG,WAAW,GAAG,MAAM,EAAE,CAOxF;AAED,eAAO,MAAM,eAAe,UAAqD,CAAC;AAMlF,wBAAgB,SAAS,4CAKxB;AAED,iBAAS,oBAAoB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,aAAa,CAAA;CAAE,2CAoGhE;AAID,eAAO,MAAM,eAAe,wDAAmC,CAAC;AAEhE,iBAAS,wBAAwB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,2CA4B7D;AAED,eAAO,MAAM,mBAAmB,4DAAuC,CAAC;AAExE,wEAAwE;AACxE,iBAAS,kBAAkB,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;IAAE,GAAG,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,IAAI,CAAA;CAAE,2CAqBvG;AAED,eAAO,MAAM,aAAa,sDAAiC,CAAC;AAE5D,iBAAS,uBAAuB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,CAAC,EAAE,aAAa,CAAA;CAAE,2CAmD1E;AAED,eAAO,MAAM,kBAAkB,2DAAsC,CAAC;AAMtE;;;GAGG;AACH,iBAAS,oBAAoB,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE;IACtD,IAAI,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,CAAC;IACjD,EAAE,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,GAAG,MAAM,CAAC;IAC/C,UAAU,EAAE,MAAM,IAAI,CAAC;CACxB,2CAyEA;AAED,eAAO,MAAM,eAAe,wDAAmC,CAAC"}
@@ -3,12 +3,13 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  * UI Module - Utility Components
4
4
  *
5
5
  * Animated thinking displays, state transitions, streaming indicators.
6
- * Colors sourced from active palette, animations from active skin.
6
+ * Colors sourced from active palette, animations from active skin. Pure frame
7
+ * generators and the transition hook live in animations.ts.
7
8
  */
8
- import { useState, useEffect, useRef } from 'react';
9
+ import React, { useState, useEffect, useRef } from 'react';
9
10
  import { Box, Text, useStdout } from 'ink';
10
11
  import { getCurrentSkin, getSpinnerFrames, getInkColor } from '../hud/api.js';
11
- import { getThinkingPhrase } from '../companions.js';
12
+ import { waveFrame, neuralFrame, circuitFrame, dnaFrame, pulseBarFrame, cascadeFrame, scanLine, getAnimationStyle, useTransition, transitionWipe, formatElapsed, elapsedDots, ORBIT_CHARS, } from './animations.js';
12
13
  // ============================================================================
13
14
  // Constants & Helpers
14
15
  // ============================================================================
@@ -32,202 +33,6 @@ export function getStateSpinner(state) {
32
33
  return state === 'streaming' ? DEFAULT_PULSE : getSpinnerFrames();
33
34
  }
34
35
  export const DEFAULT_SPINNER = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
35
- /** Characters for each animation style */
36
- const WAVE_CHARS = ' ░▒▓█▓▒░ ';
37
- const NEURAL_NODES = ['◇', '◆', '○', '●', '◎', '◉'];
38
- const CIRCUIT_CHARS = ['─', '┐', '│', '└', '─', '┌', '│', '┘'];
39
- const DNA_LEFT = ['╭', '│', '╰', ' ', ' ', '╭', '│', '╰'];
40
- const DNA_RIGHT = [' ', ' ', '╭', '│', '╰', ' ', ' ', '╭'];
41
- const DNA_BASES = ['A', 'T', 'G', 'C'];
42
- const ORBIT_CHARS = [
43
- ' ◠ ',
44
- ' ◜ ◝ ',
45
- ' ◜ ● ◝ ',
46
- ' ◟ ◞ ',
47
- ' ◡ ',
48
- ];
49
- /** Generate a wave animation line */
50
- function waveFrame(tick, width) {
51
- let line = '';
52
- for (let x = 0; x < width; x++) {
53
- const phase = (x * 0.3 + tick * 0.4) % WAVE_CHARS.length;
54
- line += WAVE_CHARS[Math.floor(phase)] || ' ';
55
- }
56
- return line;
57
- }
58
- /** Generate neural network activity */
59
- function neuralFrame(tick, width) {
60
- let line = '';
61
- for (let x = 0; x < width; x++) {
62
- if (x % 4 === 0) {
63
- const nodeIdx = (tick + x) % NEURAL_NODES.length;
64
- line += NEURAL_NODES[nodeIdx];
65
- }
66
- else if (x % 4 === 2) {
67
- const active = ((tick + x * 3) % 7) < 3;
68
- line += active ? '─' : ' ';
69
- }
70
- else {
71
- line += ' ';
72
- }
73
- }
74
- return line;
75
- }
76
- /** Generate circuit trace pattern */
77
- function circuitFrame(tick, width) {
78
- let line = '';
79
- const pulsePos = tick % width;
80
- for (let x = 0; x < width; x++) {
81
- const charIdx = (x + tick) % CIRCUIT_CHARS.length;
82
- const dist = Math.abs(x - pulsePos);
83
- if (dist < 3) {
84
- line += CIRCUIT_CHARS[charIdx];
85
- }
86
- else if (x % 5 === 0) {
87
- line += '·';
88
- }
89
- else {
90
- line += ' ';
91
- }
92
- }
93
- return line;
94
- }
95
- /** Generate DNA helix pattern (2 lines) */
96
- function dnaFrame(tick, _width) {
97
- const len = 24;
98
- let top = ' ';
99
- let bot = ' ';
100
- for (let x = 0; x < len; x++) {
101
- const phase = (x + tick) % 8;
102
- const lt = DNA_LEFT[phase];
103
- const rt = DNA_RIGHT[phase];
104
- if (lt !== ' ' && rt !== ' ') {
105
- // Crossover — show a base pair
106
- const base = DNA_BASES[(x + tick) % DNA_BASES.length];
107
- top += lt + base;
108
- bot += rt + base;
109
- }
110
- else {
111
- top += lt + ' ';
112
- bot += rt + ' ';
113
- }
114
- }
115
- return [top, bot];
116
- }
117
- /** Generate an animated pulse bar */
118
- function pulseBarFrame(tick, width) {
119
- const barWidth = Math.min(width - 4, 32);
120
- let bar = '│';
121
- for (let x = 0; x < barWidth; x++) {
122
- const intensity = Math.sin((x / barWidth) * Math.PI + tick * 0.3);
123
- if (intensity > 0.8)
124
- bar += '█';
125
- else if (intensity > 0.5)
126
- bar += '▓';
127
- else if (intensity > 0.2)
128
- bar += '▒';
129
- else if (intensity > -0.2)
130
- bar += '░';
131
- else
132
- bar += ' ';
133
- }
134
- bar += '│';
135
- return bar;
136
- }
137
- /** Generate cascade / waterfall pattern */
138
- function cascadeFrame(tick, width) {
139
- const lines = [];
140
- const cascadeWidth = Math.min(width - 2, 36);
141
- for (let row = 0; row < 3; row++) {
142
- let line = '';
143
- for (let x = 0; x < cascadeWidth; x++) {
144
- const drop = ((x * 7 + row * 13 + tick * 3) % 23);
145
- if (drop < 2)
146
- line += '│';
147
- else if (drop < 4)
148
- line += '┊';
149
- else if (drop < 6)
150
- line += '·';
151
- else
152
- line += ' ';
153
- }
154
- lines.push(line);
155
- }
156
- return lines;
157
- }
158
- /** Pick animation style from skin config or infer from skin name */
159
- function getAnimationStyle() {
160
- const skin = getCurrentSkin();
161
- // Explicit skin preference wins
162
- if (skin.animations?.thinkingStyle)
163
- return skin.animations.thinkingStyle;
164
- const skinName = skin.name.toLowerCase();
165
- // Infer from skin name / vibe
166
- if (skinName.includes('matrix') || skinName.includes('neo') || skinName.includes('hack'))
167
- return 'cascade';
168
- if (skinName.includes('retro') || skinName.includes('basic') || skinName.includes('arcade'))
169
- return 'circuit';
170
- if (skinName.includes('sci') || skinName.includes('trek') || skinName.includes('space'))
171
- return 'neural';
172
- if (skinName.includes('bio') || skinName.includes('nature') || skinName.includes('organic'))
173
- return 'dna';
174
- if (skinName.includes('minimal') || skinName.includes('clean'))
175
- return 'minimal';
176
- return 'wave';
177
- }
178
- function useTransition(isActive, enterMs = 300, exitMs = 200) {
179
- const [phase, setPhase] = useState(isActive ? 'active' : 'exit');
180
- const [progress, setProgress] = useState(isActive ? 1 : 0);
181
- const startTime = useRef(Date.now());
182
- useEffect(() => {
183
- if (isActive && phase !== 'active') {
184
- setPhase('enter');
185
- startTime.current = Date.now();
186
- }
187
- else if (!isActive && phase === 'active') {
188
- setPhase('exit');
189
- startTime.current = Date.now();
190
- }
191
- }, [isActive]);
192
- useEffect(() => {
193
- if (phase === 'enter' || phase === 'exit') {
194
- const duration = phase === 'enter' ? enterMs : exitMs;
195
- const timer = setInterval(() => {
196
- const elapsed = Date.now() - startTime.current;
197
- const p = Math.min(1, elapsed / duration);
198
- setProgress(phase === 'enter' ? p : 1 - p);
199
- if (p >= 1) {
200
- setPhase(phase === 'enter' ? 'active' : 'exit');
201
- setProgress(phase === 'enter' ? 1 : 0);
202
- clearInterval(timer);
203
- }
204
- }, 30);
205
- return () => clearInterval(timer);
206
- }
207
- }, [phase]);
208
- return { phase, progress };
209
- }
210
- /** Build a transition-in wipe line */
211
- function transitionWipe(text, progress) {
212
- const visibleChars = Math.floor(text.length * progress);
213
- return text.slice(0, visibleChars) + ' '.repeat(Math.max(0, text.length - visibleChars));
214
- }
215
- // ============================================================================
216
- // Elapsed Time Visualization
217
- // ============================================================================
218
- function formatElapsed(seconds) {
219
- if (seconds < 60)
220
- return `${seconds}s`;
221
- const m = Math.floor(seconds / 60);
222
- const s = seconds % 60;
223
- return `${m}m${s.toString().padStart(2, '0')}s`;
224
- }
225
- /** Tiny progress dots that grow with time */
226
- function elapsedDots(seconds) {
227
- const filled = Math.min(seconds, 20);
228
- const dots = '·'.repeat(Math.max(0, 20 - filled)) + '•'.repeat(Math.min(filled, 10));
229
- return dots.slice(0, 20);
230
- }
231
36
  // ============================================================================
232
37
  // Components
233
38
  // ============================================================================
@@ -237,12 +42,11 @@ export function Separator() {
237
42
  const borderColor = getInkColor('border');
238
43
  return _jsx(Text, { color: borderColor, dimColor: true, children: '─'.repeat(width) });
239
44
  }
240
- export function ThinkingDisplay({ state }) {
45
+ function ThinkingDisplayInner({ state }) {
241
46
  const [frame, setFrame] = useState(0);
242
47
  const [elapsed, setElapsed] = useState(0);
243
48
  const startTime = useRef(Date.now());
244
49
  const spinFrames = getStateSpinner('thinking');
245
- const [immersionPhrase] = useState(() => getThinkingPhrase());
246
50
  const [animStyle] = useState(() => getAnimationStyle());
247
51
  const { stdout } = useStdout();
248
52
  const termWidth = stdout?.columns || 80;
@@ -257,7 +61,7 @@ export function ThinkingDisplay({ state }) {
257
61
  }, 80);
258
62
  return () => clearInterval(timer);
259
63
  }, []);
260
- const displayStatus = immersionPhrase || state.status;
64
+ const displayStatus = state.status;
261
65
  const animWidth = Math.min(termWidth - 4, 40);
262
66
  // Build animation lines based on style
263
67
  let animLines = [];
@@ -290,7 +94,10 @@ export function ThinkingDisplay({ state }) {
290
94
  }
291
95
  return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Text, { color: primaryColor, children: spinFrames[frame % spinFrames.length] }), _jsxs(Text, { color: primaryColor, bold: true, children: [" ", displayStatus] }), state.iteration != null && state.maxIterations && Number.isFinite(state.maxIterations) && (_jsxs(Text, { dimColor: true, children: [" (", state.iteration, "/", state.maxIterations, ")"] })), elapsed > 0 && (_jsxs(Text, { dimColor: true, children: [" ", formatElapsed(elapsed)] }))] }), animStyle !== 'minimal' && animLines.length > 0 && (_jsx(Box, { flexDirection: "column", marginLeft: 2, children: animLines.map((line, i) => (_jsx(Text, { color: secondaryColor, dimColor: true, children: line }, i))) })), elapsed > 2 && (_jsx(Box, { marginLeft: 2, children: _jsx(Text, { color: accentColor, dimColor: true, children: elapsedDots(elapsed) }) })), state.detail && (_jsx(Box, { marginLeft: 2, children: _jsxs(Text, { dimColor: true, children: ["\u21B3 ", state.detail] }) })), state.thinking && (_jsxs(Box, { flexDirection: "column", marginLeft: 2, children: [_jsx(Text, { color: accentColor, children: "Thinking:" }), state.thinking.split('\n').slice(0, 5).map((line, i) => (_jsxs(Text, { dimColor: true, children: [" ", line.substring(0, 80)] }, i))), state.thinking.split('\n').length > 5 && (_jsx(Text, { dimColor: true, children: " ..." }))] }))] }));
292
96
  }
293
- export function ProcessingIndicator({ label }) {
97
+ // Memoized so unrelated parent re-renders (streaming chunks, stats ticks) don't
98
+ // re-run the animation build between its own timer frames.
99
+ export const ThinkingDisplay = React.memo(ThinkingDisplayInner);
100
+ function ProcessingIndicatorInner({ label }) {
294
101
  const [frame, setFrame] = useState(0);
295
102
  const spinFrames = getStateSpinner('processing');
296
103
  const primaryColor = getInkColor('primary');
@@ -305,28 +112,9 @@ export function ProcessingIndicator({ label }) {
305
112
  const dots = '.'.repeat((frame % 12) < 3 ? 1 : (frame % 12) < 6 ? 2 : (frame % 12) < 9 ? 3 : 0);
306
113
  return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Box, { children: [_jsx(Text, { color: primaryColor, children: spinFrames[frame % spinFrames.length] }), _jsxs(Text, { dimColor: true, children: [" ", label, dots] })] }), _jsx(Box, { marginLeft: 2, children: _jsx(Text, { color: secondaryColor, dimColor: true, children: scanLine(frame, 24) }) })] }));
307
114
  }
308
- /** A subtle scanning line effect */
309
- function scanLine(tick, width) {
310
- const pos = tick % (width * 2);
311
- const actual = pos < width ? pos : width * 2 - pos;
312
- let line = '';
313
- for (let x = 0; x < width; x++) {
314
- const dist = Math.abs(x - actual);
315
- if (dist === 0)
316
- line += '█';
317
- else if (dist === 1)
318
- line += '▓';
319
- else if (dist === 2)
320
- line += '▒';
321
- else if (dist === 3)
322
- line += '░';
323
- else
324
- line += '·';
325
- }
326
- return line;
327
- }
115
+ export const ProcessingIndicator = React.memo(ProcessingIndicatorInner);
328
116
  /** Brief splash overlay shown when switching themes (auto-dismisses) */
329
- export function SplashOverlay({ art, color, onDone }) {
117
+ function SplashOverlayInner({ art, color, onDone }) {
330
118
  const [visibleLines, setVisibleLines] = useState(0);
331
119
  useEffect(() => {
332
120
  // Typewriter entry: reveal one line at a time
@@ -340,7 +128,8 @@ export function SplashOverlay({ art, color, onDone }) {
340
128
  }, [visibleLines, art.length, onDone]);
341
129
  return (_jsx(Box, { flexDirection: "column", justifyContent: "center", alignItems: "center", marginY: 1, children: art.slice(0, visibleLines).map((line, i) => (_jsx(Text, { color: color, children: line }, i))) }));
342
130
  }
343
- export function StreamingIndicator({ activity }) {
131
+ export const SplashOverlay = React.memo(SplashOverlayInner);
132
+ function StreamingIndicatorInner({ activity }) {
344
133
  const [frame, setFrame] = useState(0);
345
134
  const [elapsed, setElapsed] = useState(0);
346
135
  const pulseFrames = getStateSpinner('streaming');
@@ -366,6 +155,7 @@ export function StreamingIndicator({ activity }) {
366
155
  }
367
156
  return (_jsx(Box, { flexDirection: "column", children: _jsxs(Box, { children: [_jsx(Text, { color: successColor, children: pulseFrames[frame % pulseFrames.length] }), _jsx(Text, { dimColor: true, children: " receiving" }), _jsxs(Text, { color: accentColor, dimColor: true, children: [" ", streamVis] })] }) }));
368
157
  }
158
+ export const StreamingIndicator = React.memo(StreamingIndicatorInner);
369
159
  // ============================================================================
370
160
  // State Transition Overlay
371
161
  // ============================================================================
@@ -373,7 +163,7 @@ export function StreamingIndicator({ activity }) {
373
163
  * Renders a brief transition effect between processing states.
374
164
  * Mount when transitioning, unmount after onComplete fires.
375
165
  */
376
- export function StateTransition({ from, to, onComplete }) {
166
+ function StateTransitionInner({ from, to, onComplete }) {
377
167
  const [frame, setFrame] = useState(0);
378
168
  const totalFrames = 8;
379
169
  const primaryColor = getInkColor('primary');
@@ -424,4 +214,5 @@ export function StateTransition({ from, to, onComplete }) {
424
214
  const fadeBar = opacity > 0.5 ? '─'.repeat(width) : opacity > 0.2 ? '·'.repeat(width) : '';
425
215
  return (_jsx(Box, { children: _jsx(Text, { dimColor: true, children: fadeBar }) }));
426
216
  }
217
+ export const StateTransition = React.memo(StateTransitionInner);
427
218
  //# sourceMappingURL=components.js.map