@calliopelabs/cli 2.5.0 → 3.1.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 (490) 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.d.ts.map +1 -1
  19. package/dist/circuit-breaker/breaker.js.map +1 -1
  20. package/dist/config.d.ts +86 -81
  21. package/dist/config.d.ts.map +1 -1
  22. package/dist/config.js +236 -304
  23. package/dist/config.js.map +1 -1
  24. package/dist/cost.d.ts +114 -0
  25. package/dist/cost.d.ts.map +1 -0
  26. package/dist/cost.js +499 -0
  27. package/dist/cost.js.map +1 -0
  28. package/dist/diff.d.ts.map +1 -1
  29. package/dist/diff.js +11 -7
  30. package/dist/diff.js.map +1 -1
  31. package/dist/env-expansion.js.map +1 -1
  32. package/dist/errors.js +3 -3
  33. package/dist/errors.js.map +1 -1
  34. package/dist/files.js.map +1 -1
  35. package/dist/fleet.d.ts +30 -0
  36. package/dist/fleet.d.ts.map +1 -0
  37. package/dist/fleet.js +86 -0
  38. package/dist/fleet.js.map +1 -0
  39. package/dist/fuzzy-search.d.ts.map +1 -1
  40. package/dist/fuzzy-search.js +2 -1
  41. package/dist/fuzzy-search.js.map +1 -1
  42. package/dist/git-status.js.map +1 -1
  43. package/dist/headless.d.ts +1 -2
  44. package/dist/headless.d.ts.map +1 -1
  45. package/dist/headless.js +166 -24
  46. package/dist/headless.js.map +1 -1
  47. package/dist/hud/api.d.ts +3 -18
  48. package/dist/hud/api.d.ts.map +1 -1
  49. package/dist/hud/api.js +9 -352
  50. package/dist/hud/api.js.map +1 -1
  51. package/dist/hud/palettes.d.ts.map +1 -1
  52. package/dist/hud/palettes.js +0 -180
  53. package/dist/hud/palettes.js.map +1 -1
  54. package/dist/hud/skins.d.ts.map +1 -1
  55. package/dist/hud/skins.js +0 -263
  56. package/dist/hud/skins.js.map +1 -1
  57. package/dist/hud/types.d.ts +2 -5
  58. package/dist/hud/types.d.ts.map +1 -1
  59. package/dist/index.d.ts +1 -4
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +1 -4
  62. package/dist/index.js.map +1 -1
  63. package/dist/iteration-ledger.d.ts.map +1 -1
  64. package/dist/iteration-ledger.js +3 -2
  65. package/dist/iteration-ledger.js.map +1 -1
  66. package/dist/local-model.d.ts +150 -0
  67. package/dist/local-model.d.ts.map +1 -0
  68. package/dist/local-model.js +408 -0
  69. package/dist/local-model.js.map +1 -0
  70. package/dist/mcp.d.ts.map +1 -1
  71. package/dist/mcp.js +5 -2
  72. package/dist/mcp.js.map +1 -1
  73. package/dist/memory.d.ts.map +1 -1
  74. package/dist/memory.js +6 -4
  75. package/dist/memory.js.map +1 -1
  76. package/dist/model-detection.js +2 -2
  77. package/dist/model-detection.js.map +1 -1
  78. package/dist/parallel-tools.js.map +1 -1
  79. package/dist/plugins.d.ts +32 -1
  80. package/dist/plugins.d.ts.map +1 -1
  81. package/dist/plugins.js +116 -5
  82. package/dist/plugins.js.map +1 -1
  83. package/dist/policy.d.ts +43 -0
  84. package/dist/policy.d.ts.map +1 -0
  85. package/dist/policy.js +139 -0
  86. package/dist/policy.js.map +1 -0
  87. package/dist/project-config.d.ts +1 -2
  88. package/dist/project-config.d.ts.map +1 -1
  89. package/dist/project-config.js +0 -3
  90. package/dist/project-config.js.map +1 -1
  91. package/dist/providers/bedrock.d.ts.map +1 -1
  92. package/dist/providers/bedrock.js +2 -5
  93. package/dist/providers/bedrock.js.map +1 -1
  94. package/dist/providers/compat.d.ts +21 -0
  95. package/dist/providers/compat.d.ts.map +1 -1
  96. package/dist/providers/compat.js +176 -6
  97. package/dist/providers/compat.js.map +1 -1
  98. package/dist/providers/google.js.map +1 -1
  99. package/dist/providers/index.d.ts +19 -4
  100. package/dist/providers/index.d.ts.map +1 -1
  101. package/dist/providers/index.js +61 -10
  102. package/dist/providers/index.js.map +1 -1
  103. package/dist/providers/ollama.d.ts +2 -2
  104. package/dist/providers/ollama.d.ts.map +1 -1
  105. package/dist/providers/ollama.js +26 -6
  106. package/dist/providers/ollama.js.map +1 -1
  107. package/dist/providers/openai.d.ts +10 -10
  108. package/dist/providers/openai.d.ts.map +1 -1
  109. package/dist/providers/openai.js +18 -10
  110. package/dist/providers/openai.js.map +1 -1
  111. package/dist/providers/types.d.ts +8 -0
  112. package/dist/providers/types.d.ts.map +1 -1
  113. package/dist/providers/types.js.map +1 -1
  114. package/dist/replay.d.ts +37 -0
  115. package/dist/replay.d.ts.map +1 -0
  116. package/dist/replay.js +168 -0
  117. package/dist/replay.js.map +1 -0
  118. package/dist/router.d.ts +133 -0
  119. package/dist/router.d.ts.map +1 -0
  120. package/dist/{model-router.js → router.js} +329 -3
  121. package/dist/router.js.map +1 -0
  122. package/dist/runlog.d.ts +185 -0
  123. package/dist/runlog.d.ts.map +1 -0
  124. package/dist/runlog.js +398 -0
  125. package/dist/runlog.js.map +1 -0
  126. package/dist/{sandbox.d.ts → sandbox/docker.d.ts} +1 -1
  127. package/dist/sandbox/docker.d.ts.map +1 -0
  128. package/dist/{sandbox.js → sandbox/docker.js} +1 -1
  129. package/dist/sandbox/docker.js.map +1 -0
  130. package/dist/sandbox/index.d.ts +36 -0
  131. package/dist/sandbox/index.d.ts.map +1 -0
  132. package/dist/sandbox/index.js +62 -0
  133. package/dist/sandbox/index.js.map +1 -0
  134. package/dist/{sandbox-native.d.ts → sandbox/native.d.ts} +1 -1
  135. package/dist/sandbox/native.d.ts.map +1 -0
  136. package/dist/{sandbox-native.js → sandbox/native.js} +1 -1
  137. package/dist/sandbox/native.js.map +1 -0
  138. package/dist/scope.d.ts.map +1 -1
  139. package/dist/scope.js +1 -1
  140. package/dist/scope.js.map +1 -1
  141. package/dist/scuttlebot/client.d.ts.map +1 -1
  142. package/dist/scuttlebot/client.js.map +1 -1
  143. package/dist/scuttlebot/config.js.map +1 -1
  144. package/dist/scuttlebot/http-client.d.ts.map +1 -1
  145. package/dist/scuttlebot/irc-client.d.ts +5 -5
  146. package/dist/scuttlebot/irc-client.d.ts.map +1 -1
  147. package/dist/scuttlebot/irc-client.js.map +1 -1
  148. package/dist/setup.d.ts.map +1 -1
  149. package/dist/setup.js +25 -54
  150. package/dist/setup.js.map +1 -1
  151. package/dist/skills.d.ts +39 -0
  152. package/dist/skills.d.ts.map +1 -1
  153. package/dist/skills.js +90 -8
  154. package/dist/skills.js.map +1 -1
  155. package/dist/storage.d.ts.map +1 -1
  156. package/dist/storage.js +6 -3
  157. package/dist/storage.js.map +1 -1
  158. package/dist/streaming.d.ts +25 -0
  159. package/dist/streaming.d.ts.map +1 -1
  160. package/dist/streaming.js +59 -0
  161. package/dist/streaming.js.map +1 -1
  162. package/dist/styles.d.ts +62 -56
  163. package/dist/styles.d.ts.map +1 -1
  164. package/dist/styles.js +11 -0
  165. package/dist/styles.js.map +1 -1
  166. package/dist/summarization.d.ts.map +1 -1
  167. package/dist/summarization.js.map +1 -1
  168. package/dist/terminal-image.js +1 -1
  169. package/dist/terminal-image.js.map +1 -1
  170. package/dist/themes.d.ts +5 -4
  171. package/dist/themes.d.ts.map +1 -1
  172. package/dist/themes.js +35 -90
  173. package/dist/themes.js.map +1 -1
  174. package/dist/tools.d.ts +27 -3
  175. package/dist/tools.d.ts.map +1 -1
  176. package/dist/tools.js +128 -179
  177. package/dist/tools.js.map +1 -1
  178. package/dist/trust.js.map +1 -1
  179. package/dist/types.d.ts +4 -3
  180. package/dist/types.d.ts.map +1 -1
  181. package/dist/types.js +21 -40
  182. package/dist/types.js.map +1 -1
  183. package/dist/ui/agent.d.ts +3 -6
  184. package/dist/ui/agent.d.ts.map +1 -1
  185. package/dist/ui/agent.js +328 -38
  186. package/dist/ui/agent.js.map +1 -1
  187. package/dist/ui/animations.d.ts +37 -0
  188. package/dist/ui/animations.d.ts.map +1 -0
  189. package/dist/ui/animations.js +227 -0
  190. package/dist/ui/animations.js.map +1 -0
  191. package/dist/ui/chat-input-keys.d.ts +42 -0
  192. package/dist/ui/chat-input-keys.d.ts.map +1 -0
  193. package/dist/ui/chat-input-keys.js +360 -0
  194. package/dist/ui/chat-input-keys.js.map +1 -0
  195. package/dist/ui/chat-input.d.ts +4 -2
  196. package/dist/ui/chat-input.d.ts.map +1 -1
  197. package/dist/ui/chat-input.js +31 -350
  198. package/dist/ui/chat-input.js.map +1 -1
  199. package/dist/ui/commands.d.ts +14 -46
  200. package/dist/ui/commands.d.ts.map +1 -1
  201. package/dist/ui/commands.js +416 -2899
  202. package/dist/ui/commands.js.map +1 -1
  203. package/dist/ui/completions.d.ts +1 -0
  204. package/dist/ui/completions.d.ts.map +1 -1
  205. package/dist/ui/completions.js +36 -107
  206. package/dist/ui/completions.js.map +1 -1
  207. package/dist/ui/components.d.ts +20 -12
  208. package/dist/ui/components.d.ts.map +1 -1
  209. package/dist/ui/components.js +17 -226
  210. package/dist/ui/components.js.map +1 -1
  211. package/dist/ui/context.js +6 -6
  212. package/dist/ui/context.js.map +1 -1
  213. package/dist/ui/debug-log.d.ts +11 -0
  214. package/dist/ui/debug-log.d.ts.map +1 -0
  215. package/dist/ui/debug-log.js +21 -0
  216. package/dist/ui/debug-log.js.map +1 -0
  217. package/dist/ui/error-boundary.d.ts +1 -1
  218. package/dist/ui/error-boundary.d.ts.map +1 -1
  219. package/dist/ui/error-boundary.js.map +1 -1
  220. package/dist/ui/frame.d.ts +1 -1
  221. package/dist/ui/frame.d.ts.map +1 -1
  222. package/dist/ui/frame.js +1 -3
  223. package/dist/ui/frame.js.map +1 -1
  224. package/dist/ui/index.d.ts +11 -3
  225. package/dist/ui/index.d.ts.map +1 -1
  226. package/dist/ui/index.js +45 -1076
  227. package/dist/ui/index.js.map +1 -1
  228. package/dist/ui/messages.d.ts +5 -8
  229. package/dist/ui/messages.d.ts.map +1 -1
  230. package/dist/ui/messages.js +15 -30
  231. package/dist/ui/messages.js.map +1 -1
  232. package/dist/ui/modals/index.d.ts +11 -0
  233. package/dist/ui/modals/index.d.ts.map +1 -0
  234. package/dist/ui/modals/index.js +10 -0
  235. package/dist/ui/modals/index.js.map +1 -0
  236. package/dist/ui/modals/prompts.d.ts +38 -0
  237. package/dist/ui/modals/prompts.d.ts.map +1 -0
  238. package/dist/ui/modals/prompts.js +124 -0
  239. package/dist/ui/modals/prompts.js.map +1 -0
  240. package/dist/ui/modals/selectors.d.ts +34 -0
  241. package/dist/ui/modals/selectors.d.ts.map +1 -0
  242. package/dist/ui/modals/selectors.js +111 -0
  243. package/dist/ui/modals/selectors.js.map +1 -0
  244. package/dist/ui/modals/setup.d.ts +18 -0
  245. package/dist/ui/modals/setup.d.ts.map +1 -0
  246. package/dist/ui/modals/setup.js +51 -0
  247. package/dist/ui/modals/setup.js.map +1 -0
  248. package/dist/ui/regions/input-region.d.ts +40 -0
  249. package/dist/ui/regions/input-region.d.ts.map +1 -0
  250. package/dist/ui/regions/input-region.js +116 -0
  251. package/dist/ui/regions/input-region.js.map +1 -0
  252. package/dist/ui/regions/modal-host.d.ts +41 -0
  253. package/dist/ui/regions/modal-host.d.ts.map +1 -0
  254. package/dist/ui/regions/modal-host.js +51 -0
  255. package/dist/ui/regions/modal-host.js.map +1 -0
  256. package/dist/ui/regions/render-probe.d.ts +22 -0
  257. package/dist/ui/regions/render-probe.d.ts.map +1 -0
  258. package/dist/ui/regions/render-probe.js +45 -0
  259. package/dist/ui/regions/render-probe.js.map +1 -0
  260. package/dist/ui/regions/static-scrollback.d.ts +39 -0
  261. package/dist/ui/regions/static-scrollback.d.ts.map +1 -0
  262. package/dist/ui/regions/static-scrollback.js +68 -0
  263. package/dist/ui/regions/static-scrollback.js.map +1 -0
  264. package/dist/ui/regions/status-region.d.ts +24 -0
  265. package/dist/ui/regions/status-region.d.ts.map +1 -0
  266. package/dist/ui/regions/status-region.js +17 -0
  267. package/dist/ui/regions/status-region.js.map +1 -0
  268. package/dist/ui/regions/transcript-region.d.ts +41 -0
  269. package/dist/ui/regions/transcript-region.d.ts.map +1 -0
  270. package/dist/ui/regions/transcript-region.js +52 -0
  271. package/dist/ui/regions/transcript-region.js.map +1 -0
  272. package/dist/ui/self-restart.d.ts +9 -0
  273. package/dist/ui/self-restart.d.ts.map +1 -0
  274. package/dist/ui/self-restart.js +24 -0
  275. package/dist/ui/self-restart.js.map +1 -0
  276. package/dist/ui/state/use-chat-controller.d.ts +23 -0
  277. package/dist/ui/state/use-chat-controller.d.ts.map +1 -0
  278. package/dist/ui/state/use-chat-controller.js +643 -0
  279. package/dist/ui/state/use-chat-controller.js.map +1 -0
  280. package/dist/ui/state/use-loop-state.d.ts +23 -0
  281. package/dist/ui/state/use-loop-state.d.ts.map +1 -0
  282. package/dist/ui/state/use-loop-state.js +39 -0
  283. package/dist/ui/state/use-loop-state.js.map +1 -0
  284. package/dist/ui/state/use-modal-state.d.ts +52 -0
  285. package/dist/ui/state/use-modal-state.d.ts.map +1 -0
  286. package/dist/ui/state/use-modal-state.js +44 -0
  287. package/dist/ui/state/use-modal-state.js.map +1 -0
  288. package/dist/ui/state/use-model-state.d.ts +29 -0
  289. package/dist/ui/state/use-model-state.d.ts.map +1 -0
  290. package/dist/ui/state/use-model-state.js +47 -0
  291. package/dist/ui/state/use-model-state.js.map +1 -0
  292. package/dist/ui/state/use-processing-state.d.ts +24 -0
  293. package/dist/ui/state/use-processing-state.d.ts.map +1 -0
  294. package/dist/ui/state/use-processing-state.js +46 -0
  295. package/dist/ui/state/use-processing-state.js.map +1 -0
  296. package/dist/ui/state/use-queue-state.d.ts +19 -0
  297. package/dist/ui/state/use-queue-state.d.ts.map +1 -0
  298. package/dist/ui/state/use-queue-state.js +30 -0
  299. package/dist/ui/state/use-queue-state.js.map +1 -0
  300. package/dist/ui/state/use-session-init.d.ts +22 -0
  301. package/dist/ui/state/use-session-init.d.ts.map +1 -0
  302. package/dist/ui/state/use-session-init.js +77 -0
  303. package/dist/ui/state/use-session-init.js.map +1 -0
  304. package/dist/ui/state/use-session-stats.d.ts +16 -0
  305. package/dist/ui/state/use-session-stats.d.ts.map +1 -0
  306. package/dist/ui/state/use-session-stats.js +18 -0
  307. package/dist/ui/state/use-session-stats.js.map +1 -0
  308. package/dist/ui/state/use-terminal-width.d.ts +8 -0
  309. package/dist/ui/state/use-terminal-width.d.ts.map +1 -0
  310. package/dist/ui/state/use-terminal-width.js +22 -0
  311. package/dist/ui/state/use-terminal-width.js.map +1 -0
  312. package/dist/ui/state/use-transcript-state.d.ts +21 -0
  313. package/dist/ui/state/use-transcript-state.d.ts.map +1 -0
  314. package/dist/ui/state/use-transcript-state.js +49 -0
  315. package/dist/ui/state/use-transcript-state.js.map +1 -0
  316. package/dist/ui/status-bar.d.ts +1 -1
  317. package/dist/ui/status-bar.d.ts.map +1 -1
  318. package/dist/ui/status-bar.js +3 -4
  319. package/dist/ui/status-bar.js.map +1 -1
  320. package/dist/version-check.d.ts.map +1 -1
  321. package/dist/version-check.js +10 -0
  322. package/dist/version-check.js.map +1 -1
  323. package/package.json +17 -10
  324. package/dist/agents/agent-config-loader.d.ts +0 -60
  325. package/dist/agents/agent-config-loader.d.ts.map +0 -1
  326. package/dist/agents/agent-config-loader.js +0 -402
  327. package/dist/agents/agent-config-loader.js.map +0 -1
  328. package/dist/agents/agent-config-presets.d.ts +0 -10
  329. package/dist/agents/agent-config-presets.d.ts.map +0 -1
  330. package/dist/agents/agent-config-presets.js +0 -940
  331. package/dist/agents/agent-config-presets.js.map +0 -1
  332. package/dist/agents/agent-config-types.d.ts +0 -145
  333. package/dist/agents/agent-config-types.d.ts.map +0 -1
  334. package/dist/agents/agent-config-types.js +0 -12
  335. package/dist/agents/agent-config-types.js.map +0 -1
  336. package/dist/agents/agent-detection.d.ts +0 -35
  337. package/dist/agents/agent-detection.d.ts.map +0 -1
  338. package/dist/agents/agent-detection.js +0 -110
  339. package/dist/agents/agent-detection.js.map +0 -1
  340. package/dist/agents/aggregator.d.ts +0 -19
  341. package/dist/agents/aggregator.d.ts.map +0 -1
  342. package/dist/agents/aggregator.js +0 -141
  343. package/dist/agents/aggregator.js.map +0 -1
  344. package/dist/agents/cli-backend.d.ts +0 -32
  345. package/dist/agents/cli-backend.d.ts.map +0 -1
  346. package/dist/agents/cli-backend.js +0 -271
  347. package/dist/agents/cli-backend.js.map +0 -1
  348. package/dist/agents/council-types.d.ts +0 -115
  349. package/dist/agents/council-types.d.ts.map +0 -1
  350. package/dist/agents/council-types.js +0 -81
  351. package/dist/agents/council-types.js.map +0 -1
  352. package/dist/agents/council.d.ts +0 -112
  353. package/dist/agents/council.d.ts.map +0 -1
  354. package/dist/agents/council.js +0 -722
  355. package/dist/agents/council.js.map +0 -1
  356. package/dist/agents/decomposer.d.ts +0 -33
  357. package/dist/agents/decomposer.d.ts.map +0 -1
  358. package/dist/agents/decomposer.js +0 -138
  359. package/dist/agents/decomposer.js.map +0 -1
  360. package/dist/agents/dynamic-tools.d.ts +0 -52
  361. package/dist/agents/dynamic-tools.d.ts.map +0 -1
  362. package/dist/agents/dynamic-tools.js +0 -424
  363. package/dist/agents/dynamic-tools.js.map +0 -1
  364. package/dist/agents/index.d.ts +0 -29
  365. package/dist/agents/index.d.ts.map +0 -1
  366. package/dist/agents/index.js +0 -29
  367. package/dist/agents/index.js.map +0 -1
  368. package/dist/agents/installer.d.ts +0 -39
  369. package/dist/agents/installer.d.ts.map +0 -1
  370. package/dist/agents/installer.js +0 -205
  371. package/dist/agents/installer.js.map +0 -1
  372. package/dist/agents/orchestrator.d.ts +0 -106
  373. package/dist/agents/orchestrator.d.ts.map +0 -1
  374. package/dist/agents/orchestrator.js +0 -363
  375. package/dist/agents/orchestrator.js.map +0 -1
  376. package/dist/agents/sdk-backend.d.ts +0 -63
  377. package/dist/agents/sdk-backend.d.ts.map +0 -1
  378. package/dist/agents/sdk-backend.js +0 -489
  379. package/dist/agents/sdk-backend.js.map +0 -1
  380. package/dist/agents/swarm-types.d.ts +0 -84
  381. package/dist/agents/swarm-types.d.ts.map +0 -1
  382. package/dist/agents/swarm-types.js +0 -20
  383. package/dist/agents/swarm-types.js.map +0 -1
  384. package/dist/agents/swarm.d.ts +0 -79
  385. package/dist/agents/swarm.d.ts.map +0 -1
  386. package/dist/agents/swarm.js +0 -375
  387. package/dist/agents/swarm.js.map +0 -1
  388. package/dist/agents/tools.d.ts +0 -26
  389. package/dist/agents/tools.d.ts.map +0 -1
  390. package/dist/agents/tools.js +0 -776
  391. package/dist/agents/tools.js.map +0 -1
  392. package/dist/agents/types.d.ts +0 -108
  393. package/dist/agents/types.d.ts.map +0 -1
  394. package/dist/agents/types.js +0 -43
  395. package/dist/agents/types.js.map +0 -1
  396. package/dist/api-server.d.ts +0 -45
  397. package/dist/api-server.d.ts.map +0 -1
  398. package/dist/api-server.js +0 -326
  399. package/dist/api-server.js.map +0 -1
  400. package/dist/auto-checkpoint.d.ts +0 -35
  401. package/dist/auto-checkpoint.d.ts.map +0 -1
  402. package/dist/auto-checkpoint.js +0 -176
  403. package/dist/auto-checkpoint.js.map +0 -1
  404. package/dist/background-jobs.d.ts +0 -45
  405. package/dist/background-jobs.d.ts.map +0 -1
  406. package/dist/background-jobs.js +0 -127
  407. package/dist/background-jobs.js.map +0 -1
  408. package/dist/branching.d.ts +0 -56
  409. package/dist/branching.d.ts.map +0 -1
  410. package/dist/branching.js +0 -224
  411. package/dist/branching.js.map +0 -1
  412. package/dist/cli/agent.d.ts +0 -9
  413. package/dist/cli/agent.d.ts.map +0 -1
  414. package/dist/cli/agent.js +0 -330
  415. package/dist/cli/agent.js.map +0 -1
  416. package/dist/cli/commands.d.ts +0 -12
  417. package/dist/cli/commands.d.ts.map +0 -1
  418. package/dist/cli/commands.js +0 -1042
  419. package/dist/cli/commands.js.map +0 -1
  420. package/dist/cli/index.d.ts +0 -8
  421. package/dist/cli/index.d.ts.map +0 -1
  422. package/dist/cli/index.js +0 -268
  423. package/dist/cli/index.js.map +0 -1
  424. package/dist/cli/types.d.ts +0 -33
  425. package/dist/cli/types.d.ts.map +0 -1
  426. package/dist/cli/types.js +0 -21
  427. package/dist/cli/types.js.map +0 -1
  428. package/dist/companions.d.ts +0 -54
  429. package/dist/companions.d.ts.map +0 -1
  430. package/dist/companions.js +0 -440
  431. package/dist/companions.js.map +0 -1
  432. package/dist/file-watcher.d.ts +0 -91
  433. package/dist/file-watcher.d.ts.map +0 -1
  434. package/dist/file-watcher.js +0 -269
  435. package/dist/file-watcher.js.map +0 -1
  436. package/dist/hud/theme-packs/api.d.ts +0 -51
  437. package/dist/hud/theme-packs/api.d.ts.map +0 -1
  438. package/dist/hud/theme-packs/api.js +0 -145
  439. package/dist/hud/theme-packs/api.js.map +0 -1
  440. package/dist/hud/theme-packs/index.d.ts +0 -18
  441. package/dist/hud/theme-packs/index.d.ts.map +0 -1
  442. package/dist/hud/theme-packs/index.js +0 -38
  443. package/dist/hud/theme-packs/index.js.map +0 -1
  444. package/dist/hud/theme-packs/types.d.ts +0 -29
  445. package/dist/hud/theme-packs/types.d.ts.map +0 -1
  446. package/dist/hud/theme-packs/types.js +0 -9
  447. package/dist/hud/theme-packs/types.js.map +0 -1
  448. package/dist/idle-eviction.d.ts +0 -34
  449. package/dist/idle-eviction.d.ts.map +0 -1
  450. package/dist/idle-eviction.js +0 -85
  451. package/dist/idle-eviction.js.map +0 -1
  452. package/dist/model-router.d.ts +0 -67
  453. package/dist/model-router.d.ts.map +0 -1
  454. package/dist/model-router.js.map +0 -1
  455. package/dist/providers/openai-compat-shims.d.ts +0 -31
  456. package/dist/providers/openai-compat-shims.d.ts.map +0 -1
  457. package/dist/providers/openai-compat-shims.js +0 -179
  458. package/dist/providers/openai-compat-shims.js.map +0 -1
  459. package/dist/sandbox-native.d.ts.map +0 -1
  460. package/dist/sandbox-native.js.map +0 -1
  461. package/dist/sandbox.d.ts.map +0 -1
  462. package/dist/sandbox.js.map +0 -1
  463. package/dist/session-timeout.d.ts +0 -31
  464. package/dist/session-timeout.d.ts.map +0 -1
  465. package/dist/session-timeout.js +0 -100
  466. package/dist/session-timeout.js.map +0 -1
  467. package/dist/smart-router.d.ts +0 -73
  468. package/dist/smart-router.d.ts.map +0 -1
  469. package/dist/smart-router.js +0 -332
  470. package/dist/smart-router.js.map +0 -1
  471. package/dist/terminal-recording.d.ts +0 -55
  472. package/dist/terminal-recording.d.ts.map +0 -1
  473. package/dist/terminal-recording.js +0 -182
  474. package/dist/terminal-recording.js.map +0 -1
  475. package/dist/tmux.d.ts +0 -35
  476. package/dist/tmux.d.ts.map +0 -1
  477. package/dist/tmux.js +0 -106
  478. package/dist/tmux.js.map +0 -1
  479. package/dist/ui/modals.d.ts +0 -72
  480. package/dist/ui/modals.d.ts.map +0 -1
  481. package/dist/ui/modals.js +0 -266
  482. package/dist/ui/modals.js.map +0 -1
  483. package/dist/ui/pack-picker.d.ts +0 -12
  484. package/dist/ui/pack-picker.d.ts.map +0 -1
  485. package/dist/ui/pack-picker.js +0 -101
  486. package/dist/ui/pack-picker.js.map +0 -1
  487. package/dist/ui/theme-picker.d.ts +0 -24
  488. package/dist/ui/theme-picker.d.ts.map +0 -1
  489. package/dist/ui/theme-picker.js +0 -190
  490. 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,37 +2,45 @@
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[];
10
12
  /** Get spinner frames for a specific state, falling back to skin default */
11
13
  export declare function getStateSpinner(state: 'thinking' | 'processing' | 'streaming'): string[];
12
14
  export declare const DEFAULT_SPINNER: string[];
13
- export declare function Separator(): import("react/jsx-runtime").JSX.Element;
14
- export declare function ThinkingDisplay({ state }: {
15
+ export declare function Separator(): React.JSX.Element;
16
+ declare function ThinkingDisplayInner({ state }: {
15
17
  state: ThinkingState;
16
- }): import("react/jsx-runtime").JSX.Element;
17
- export declare function ProcessingIndicator({ label }: {
18
+ }): React.JSX.Element;
19
+ export declare const ThinkingDisplay: React.MemoExoticComponent<typeof ThinkingDisplayInner>;
20
+ declare function ProcessingIndicatorInner({ label }: {
18
21
  label: string;
19
- }): import("react/jsx-runtime").JSX.Element;
22
+ }): React.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
- }): import("react/jsx-runtime").JSX.Element;
26
- export declare function StreamingIndicator({ activity }: {
29
+ }): React.JSX.Element;
30
+ export declare const SplashOverlay: React.MemoExoticComponent<typeof SplashOverlayInner>;
31
+ declare function StreamingIndicatorInner({ activity }: {
27
32
  activity?: ActivityState;
28
- }): import("react/jsx-runtime").JSX.Element;
33
+ }): React.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
- }): import("react/jsx-runtime").JSX.Element;
43
+ }): React.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,sBAKxB;AAED,iBAAS,oBAAoB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,aAAa,CAAA;CAAE,qBAoGhE;AAID,eAAO,MAAM,eAAe,wDAAmC,CAAC;AAEhE,iBAAS,wBAAwB,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,qBA4B7D;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,qBAqBvG;AAED,eAAO,MAAM,aAAa,sDAAiC,CAAC;AAE5D,iBAAS,uBAAuB,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,CAAC,EAAE,aAAa,CAAA;CAAE,qBAmD1E;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,qBAyEA;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