@calliopelabs/cli 2.3.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 (538) hide show
  1. package/README.md +45 -644
  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/auto-compressor.d.ts.map +1 -1
  7. package/dist/auto-compressor.js +9 -5
  8. package/dist/auto-compressor.js.map +1 -1
  9. package/dist/bin.d.ts +9 -5
  10. package/dist/bin.d.ts.map +1 -1
  11. package/dist/bin.js +108 -76
  12. package/dist/bin.js.map +1 -1
  13. package/dist/budget.d.ts +64 -0
  14. package/dist/budget.d.ts.map +1 -0
  15. package/dist/budget.js +157 -0
  16. package/dist/budget.js.map +1 -0
  17. package/dist/checkpoint.d.ts +63 -30
  18. package/dist/checkpoint.d.ts.map +1 -1
  19. package/dist/checkpoint.js +249 -150
  20. package/dist/checkpoint.js.map +1 -1
  21. package/dist/circuit-breaker/breaker.js.map +1 -1
  22. package/dist/config.d.ts +86 -81
  23. package/dist/config.d.ts.map +1 -1
  24. package/dist/config.js +237 -305
  25. package/dist/config.js.map +1 -1
  26. package/dist/cost.d.ts +114 -0
  27. package/dist/cost.d.ts.map +1 -0
  28. package/dist/cost.js +499 -0
  29. package/dist/cost.js.map +1 -0
  30. package/dist/diff.d.ts.map +1 -1
  31. package/dist/diff.js +53 -11
  32. package/dist/diff.js.map +1 -1
  33. package/dist/errors.d.ts.map +1 -1
  34. package/dist/errors.js +33 -6
  35. package/dist/errors.js.map +1 -1
  36. package/dist/files.js.map +1 -1
  37. package/dist/fleet.d.ts +30 -0
  38. package/dist/fleet.d.ts.map +1 -0
  39. package/dist/fleet.js +86 -0
  40. package/dist/fleet.js.map +1 -0
  41. package/dist/fuzzy-search.d.ts.map +1 -1
  42. package/dist/fuzzy-search.js +2 -1
  43. package/dist/fuzzy-search.js.map +1 -1
  44. package/dist/git-status.js.map +1 -1
  45. package/dist/headless.d.ts +1 -2
  46. package/dist/headless.d.ts.map +1 -1
  47. package/dist/headless.js +222 -26
  48. package/dist/headless.js.map +1 -1
  49. package/dist/hooks.d.ts +8 -2
  50. package/dist/hooks.d.ts.map +1 -1
  51. package/dist/hooks.js +97 -11
  52. package/dist/hooks.js.map +1 -1
  53. package/dist/hud/api.d.ts +3 -18
  54. package/dist/hud/api.d.ts.map +1 -1
  55. package/dist/hud/api.js +9 -352
  56. package/dist/hud/api.js.map +1 -1
  57. package/dist/hud/palettes.d.ts.map +1 -1
  58. package/dist/hud/palettes.js +0 -180
  59. package/dist/hud/palettes.js.map +1 -1
  60. package/dist/hud/skins.d.ts.map +1 -1
  61. package/dist/hud/skins.js +0 -263
  62. package/dist/hud/skins.js.map +1 -1
  63. package/dist/hud/types.d.ts +2 -5
  64. package/dist/hud/types.d.ts.map +1 -1
  65. package/dist/index.d.ts +1 -4
  66. package/dist/index.d.ts.map +1 -1
  67. package/dist/index.js +1 -4
  68. package/dist/index.js.map +1 -1
  69. package/dist/iteration-ledger.d.ts.map +1 -1
  70. package/dist/iteration-ledger.js +3 -2
  71. package/dist/iteration-ledger.js.map +1 -1
  72. package/dist/local-model.d.ts +150 -0
  73. package/dist/local-model.d.ts.map +1 -0
  74. package/dist/local-model.js +408 -0
  75. package/dist/local-model.js.map +1 -0
  76. package/dist/markdown.d.ts.map +1 -1
  77. package/dist/markdown.js +32 -10
  78. package/dist/markdown.js.map +1 -1
  79. package/dist/mcp.d.ts +35 -5
  80. package/dist/mcp.d.ts.map +1 -1
  81. package/dist/mcp.js +190 -13
  82. package/dist/mcp.js.map +1 -1
  83. package/dist/memory.d.ts.map +1 -1
  84. package/dist/memory.js +6 -4
  85. package/dist/memory.js.map +1 -1
  86. package/dist/model-detection.d.ts +14 -1
  87. package/dist/model-detection.d.ts.map +1 -1
  88. package/dist/model-detection.js +308 -115
  89. package/dist/model-detection.js.map +1 -1
  90. package/dist/parallel-tools.d.ts +9 -1
  91. package/dist/parallel-tools.d.ts.map +1 -1
  92. package/dist/parallel-tools.js +6 -5
  93. package/dist/parallel-tools.js.map +1 -1
  94. package/dist/plugins.d.ts +68 -0
  95. package/dist/plugins.d.ts.map +1 -1
  96. package/dist/plugins.js +201 -3
  97. package/dist/plugins.js.map +1 -1
  98. package/dist/policy.d.ts +43 -0
  99. package/dist/policy.d.ts.map +1 -0
  100. package/dist/policy.js +139 -0
  101. package/dist/policy.js.map +1 -0
  102. package/dist/project-config.d.ts +1 -2
  103. package/dist/project-config.d.ts.map +1 -1
  104. package/dist/project-config.js +0 -3
  105. package/dist/project-config.js.map +1 -1
  106. package/dist/providers/anthropic.d.ts.map +1 -1
  107. package/dist/providers/anthropic.js +36 -2
  108. package/dist/providers/anthropic.js.map +1 -1
  109. package/dist/providers/bedrock.d.ts.map +1 -1
  110. package/dist/providers/bedrock.js +83 -22
  111. package/dist/providers/bedrock.js.map +1 -1
  112. package/dist/providers/compat.d.ts +21 -0
  113. package/dist/providers/compat.d.ts.map +1 -1
  114. package/dist/providers/compat.js +176 -6
  115. package/dist/providers/compat.js.map +1 -1
  116. package/dist/providers/google.js.map +1 -1
  117. package/dist/providers/index.d.ts +19 -4
  118. package/dist/providers/index.d.ts.map +1 -1
  119. package/dist/providers/index.js +62 -9
  120. package/dist/providers/index.js.map +1 -1
  121. package/dist/providers/ollama.d.ts +2 -2
  122. package/dist/providers/ollama.d.ts.map +1 -1
  123. package/dist/providers/ollama.js +26 -6
  124. package/dist/providers/ollama.js.map +1 -1
  125. package/dist/providers/openai.d.ts.map +1 -1
  126. package/dist/providers/openai.js +14 -10
  127. package/dist/providers/openai.js.map +1 -1
  128. package/dist/providers/types.d.ts +8 -0
  129. package/dist/providers/types.d.ts.map +1 -1
  130. package/dist/providers/types.js +19 -10
  131. package/dist/providers/types.js.map +1 -1
  132. package/dist/replay.d.ts +37 -0
  133. package/dist/replay.d.ts.map +1 -0
  134. package/dist/replay.js +168 -0
  135. package/dist/replay.js.map +1 -0
  136. package/dist/risk.d.ts.map +1 -1
  137. package/dist/risk.js +15 -5
  138. package/dist/risk.js.map +1 -1
  139. package/dist/router.d.ts +133 -0
  140. package/dist/router.d.ts.map +1 -0
  141. package/dist/{model-router.js → router.js} +336 -10
  142. package/dist/router.js.map +1 -0
  143. package/dist/runlog.d.ts +185 -0
  144. package/dist/runlog.d.ts.map +1 -0
  145. package/dist/runlog.js +398 -0
  146. package/dist/runlog.js.map +1 -0
  147. package/dist/{sandbox.d.ts → sandbox/docker.d.ts} +1 -1
  148. package/dist/sandbox/docker.d.ts.map +1 -0
  149. package/dist/{sandbox.js → sandbox/docker.js} +1 -1
  150. package/dist/sandbox/docker.js.map +1 -0
  151. package/dist/sandbox/index.d.ts +36 -0
  152. package/dist/sandbox/index.d.ts.map +1 -0
  153. package/dist/sandbox/index.js +62 -0
  154. package/dist/sandbox/index.js.map +1 -0
  155. package/dist/{sandbox-native.d.ts → sandbox/native.d.ts} +2 -1
  156. package/dist/sandbox/native.d.ts.map +1 -0
  157. package/dist/{sandbox-native.js → sandbox/native.js} +38 -6
  158. package/dist/sandbox/native.js.map +1 -0
  159. package/dist/scope.d.ts +10 -0
  160. package/dist/scope.d.ts.map +1 -1
  161. package/dist/scope.js +76 -16
  162. package/dist/scope.js.map +1 -1
  163. package/dist/scuttlebot/client.d.ts +83 -0
  164. package/dist/scuttlebot/client.d.ts.map +1 -0
  165. package/dist/scuttlebot/client.js +350 -0
  166. package/dist/scuttlebot/client.js.map +1 -0
  167. package/dist/scuttlebot/config.d.ts +28 -0
  168. package/dist/scuttlebot/config.d.ts.map +1 -0
  169. package/dist/scuttlebot/config.js +91 -0
  170. package/dist/scuttlebot/config.js.map +1 -0
  171. package/dist/scuttlebot/http-client.d.ts +63 -0
  172. package/dist/scuttlebot/http-client.d.ts.map +1 -0
  173. package/dist/scuttlebot/http-client.js +124 -0
  174. package/dist/scuttlebot/http-client.js.map +1 -0
  175. package/dist/scuttlebot/index.d.ts +13 -0
  176. package/dist/scuttlebot/index.d.ts.map +1 -0
  177. package/dist/scuttlebot/index.js +10 -0
  178. package/dist/scuttlebot/index.js.map +1 -0
  179. package/dist/scuttlebot/irc-client.d.ts +124 -0
  180. package/dist/scuttlebot/irc-client.d.ts.map +1 -0
  181. package/dist/scuttlebot/irc-client.js +599 -0
  182. package/dist/scuttlebot/irc-client.js.map +1 -0
  183. package/dist/setup.d.ts.map +1 -1
  184. package/dist/setup.js +22 -54
  185. package/dist/setup.js.map +1 -1
  186. package/dist/skills.d.ts +58 -0
  187. package/dist/skills.d.ts.map +1 -1
  188. package/dist/skills.js +186 -16
  189. package/dist/skills.js.map +1 -1
  190. package/dist/storage.d.ts +0 -4
  191. package/dist/storage.d.ts.map +1 -1
  192. package/dist/storage.js +87 -8
  193. package/dist/storage.js.map +1 -1
  194. package/dist/streaming.d.ts +25 -0
  195. package/dist/streaming.d.ts.map +1 -1
  196. package/dist/streaming.js +59 -0
  197. package/dist/streaming.js.map +1 -1
  198. package/dist/styles.d.ts +6 -0
  199. package/dist/styles.d.ts.map +1 -1
  200. package/dist/styles.js +11 -0
  201. package/dist/styles.js.map +1 -1
  202. package/dist/summarization.js.map +1 -1
  203. package/dist/terminal-image.js +1 -1
  204. package/dist/terminal-image.js.map +1 -1
  205. package/dist/themes.d.ts +5 -4
  206. package/dist/themes.d.ts.map +1 -1
  207. package/dist/themes.js +35 -90
  208. package/dist/themes.js.map +1 -1
  209. package/dist/tools.d.ts +27 -3
  210. package/dist/tools.d.ts.map +1 -1
  211. package/dist/tools.js +352 -209
  212. package/dist/tools.js.map +1 -1
  213. package/dist/trust.d.ts +16 -3
  214. package/dist/trust.d.ts.map +1 -1
  215. package/dist/trust.js +23 -4
  216. package/dist/trust.js.map +1 -1
  217. package/dist/types.d.ts +4 -3
  218. package/dist/types.d.ts.map +1 -1
  219. package/dist/types.js +34 -44
  220. package/dist/types.js.map +1 -1
  221. package/dist/ui/agent.d.ts +4 -7
  222. package/dist/ui/agent.d.ts.map +1 -1
  223. package/dist/ui/agent.js +354 -73
  224. package/dist/ui/agent.js.map +1 -1
  225. package/dist/ui/animations.d.ts +37 -0
  226. package/dist/ui/animations.d.ts.map +1 -0
  227. package/dist/ui/animations.js +227 -0
  228. package/dist/ui/animations.js.map +1 -0
  229. package/dist/ui/chat-input-keys.d.ts +42 -0
  230. package/dist/ui/chat-input-keys.d.ts.map +1 -0
  231. package/dist/ui/chat-input-keys.js +360 -0
  232. package/dist/ui/chat-input-keys.js.map +1 -0
  233. package/dist/ui/chat-input.d.ts +5 -2
  234. package/dist/ui/chat-input.d.ts.map +1 -1
  235. package/dist/ui/chat-input.js +54 -308
  236. package/dist/ui/chat-input.js.map +1 -1
  237. package/dist/ui/commands.d.ts +15 -45
  238. package/dist/ui/commands.d.ts.map +1 -1
  239. package/dist/ui/commands.js +461 -2636
  240. package/dist/ui/commands.js.map +1 -1
  241. package/dist/ui/completions.d.ts +1 -0
  242. package/dist/ui/completions.d.ts.map +1 -1
  243. package/dist/ui/completions.js +36 -107
  244. package/dist/ui/completions.js.map +1 -1
  245. package/dist/ui/components.d.ts +14 -6
  246. package/dist/ui/components.d.ts.map +1 -1
  247. package/dist/ui/components.js +17 -226
  248. package/dist/ui/components.js.map +1 -1
  249. package/dist/ui/context.js +6 -6
  250. package/dist/ui/context.js.map +1 -1
  251. package/dist/ui/debug-log.d.ts +11 -0
  252. package/dist/ui/debug-log.d.ts.map +1 -0
  253. package/dist/ui/debug-log.js +21 -0
  254. package/dist/ui/debug-log.js.map +1 -0
  255. package/dist/ui/error-boundary.d.ts.map +1 -1
  256. package/dist/ui/error-boundary.js.map +1 -1
  257. package/dist/ui/frame.d.ts.map +1 -1
  258. package/dist/ui/frame.js +1 -3
  259. package/dist/ui/frame.js.map +1 -1
  260. package/dist/ui/index.d.ts +11 -3
  261. package/dist/ui/index.d.ts.map +1 -1
  262. package/dist/ui/index.js +46 -887
  263. package/dist/ui/index.js.map +1 -1
  264. package/dist/ui/input-utils.d.ts +20 -0
  265. package/dist/ui/input-utils.d.ts.map +1 -0
  266. package/dist/ui/input-utils.js +35 -0
  267. package/dist/ui/input-utils.js.map +1 -0
  268. package/dist/ui/messages.d.ts +8 -7
  269. package/dist/ui/messages.d.ts.map +1 -1
  270. package/dist/ui/messages.js +51 -35
  271. package/dist/ui/messages.js.map +1 -1
  272. package/dist/ui/modals/index.d.ts +11 -0
  273. package/dist/ui/modals/index.d.ts.map +1 -0
  274. package/dist/ui/modals/index.js +10 -0
  275. package/dist/ui/modals/index.js.map +1 -0
  276. package/dist/ui/{modals.d.ts → modals/prompts.d.ts} +5 -20
  277. package/dist/ui/modals/prompts.d.ts.map +1 -0
  278. package/dist/ui/{modals.js → modals/prompts.js} +14 -94
  279. package/dist/ui/modals/prompts.js.map +1 -0
  280. package/dist/ui/modals/selectors.d.ts +33 -0
  281. package/dist/ui/modals/selectors.d.ts.map +1 -0
  282. package/dist/ui/modals/selectors.js +111 -0
  283. package/dist/ui/modals/selectors.js.map +1 -0
  284. package/dist/ui/modals/setup.d.ts +17 -0
  285. package/dist/ui/modals/setup.d.ts.map +1 -0
  286. package/dist/ui/modals/setup.js +51 -0
  287. package/dist/ui/modals/setup.js.map +1 -0
  288. package/dist/ui/regions/input-region.d.ts +40 -0
  289. package/dist/ui/regions/input-region.d.ts.map +1 -0
  290. package/dist/ui/regions/input-region.js +116 -0
  291. package/dist/ui/regions/input-region.js.map +1 -0
  292. package/dist/ui/regions/modal-host.d.ts +41 -0
  293. package/dist/ui/regions/modal-host.d.ts.map +1 -0
  294. package/dist/ui/regions/modal-host.js +51 -0
  295. package/dist/ui/regions/modal-host.js.map +1 -0
  296. package/dist/ui/regions/render-probe.d.ts +22 -0
  297. package/dist/ui/regions/render-probe.d.ts.map +1 -0
  298. package/dist/ui/regions/render-probe.js +45 -0
  299. package/dist/ui/regions/render-probe.js.map +1 -0
  300. package/dist/ui/regions/static-scrollback.d.ts +39 -0
  301. package/dist/ui/regions/static-scrollback.d.ts.map +1 -0
  302. package/dist/ui/regions/static-scrollback.js +68 -0
  303. package/dist/ui/regions/static-scrollback.js.map +1 -0
  304. package/dist/ui/regions/status-region.d.ts +24 -0
  305. package/dist/ui/regions/status-region.d.ts.map +1 -0
  306. package/dist/ui/regions/status-region.js +17 -0
  307. package/dist/ui/regions/status-region.js.map +1 -0
  308. package/dist/ui/regions/transcript-region.d.ts +41 -0
  309. package/dist/ui/regions/transcript-region.d.ts.map +1 -0
  310. package/dist/ui/regions/transcript-region.js +52 -0
  311. package/dist/ui/regions/transcript-region.js.map +1 -0
  312. package/dist/ui/self-restart.d.ts +9 -0
  313. package/dist/ui/self-restart.d.ts.map +1 -0
  314. package/dist/ui/self-restart.js +24 -0
  315. package/dist/ui/self-restart.js.map +1 -0
  316. package/dist/ui/state/use-chat-controller.d.ts +23 -0
  317. package/dist/ui/state/use-chat-controller.d.ts.map +1 -0
  318. package/dist/ui/state/use-chat-controller.js +643 -0
  319. package/dist/ui/state/use-chat-controller.js.map +1 -0
  320. package/dist/ui/state/use-loop-state.d.ts +23 -0
  321. package/dist/ui/state/use-loop-state.d.ts.map +1 -0
  322. package/dist/ui/state/use-loop-state.js +39 -0
  323. package/dist/ui/state/use-loop-state.js.map +1 -0
  324. package/dist/ui/state/use-modal-state.d.ts +52 -0
  325. package/dist/ui/state/use-modal-state.d.ts.map +1 -0
  326. package/dist/ui/state/use-modal-state.js +44 -0
  327. package/dist/ui/state/use-modal-state.js.map +1 -0
  328. package/dist/ui/state/use-model-state.d.ts +29 -0
  329. package/dist/ui/state/use-model-state.d.ts.map +1 -0
  330. package/dist/ui/state/use-model-state.js +47 -0
  331. package/dist/ui/state/use-model-state.js.map +1 -0
  332. package/dist/ui/state/use-processing-state.d.ts +24 -0
  333. package/dist/ui/state/use-processing-state.d.ts.map +1 -0
  334. package/dist/ui/state/use-processing-state.js +46 -0
  335. package/dist/ui/state/use-processing-state.js.map +1 -0
  336. package/dist/ui/state/use-queue-state.d.ts +19 -0
  337. package/dist/ui/state/use-queue-state.d.ts.map +1 -0
  338. package/dist/ui/state/use-queue-state.js +30 -0
  339. package/dist/ui/state/use-queue-state.js.map +1 -0
  340. package/dist/ui/state/use-session-init.d.ts +22 -0
  341. package/dist/ui/state/use-session-init.d.ts.map +1 -0
  342. package/dist/ui/state/use-session-init.js +77 -0
  343. package/dist/ui/state/use-session-init.js.map +1 -0
  344. package/dist/ui/state/use-session-stats.d.ts +16 -0
  345. package/dist/ui/state/use-session-stats.d.ts.map +1 -0
  346. package/dist/ui/state/use-session-stats.js +18 -0
  347. package/dist/ui/state/use-session-stats.js.map +1 -0
  348. package/dist/ui/state/use-terminal-width.d.ts +8 -0
  349. package/dist/ui/state/use-terminal-width.d.ts.map +1 -0
  350. package/dist/ui/state/use-terminal-width.js +22 -0
  351. package/dist/ui/state/use-terminal-width.js.map +1 -0
  352. package/dist/ui/state/use-transcript-state.d.ts +21 -0
  353. package/dist/ui/state/use-transcript-state.d.ts.map +1 -0
  354. package/dist/ui/state/use-transcript-state.js +49 -0
  355. package/dist/ui/state/use-transcript-state.js.map +1 -0
  356. package/dist/ui/status-bar.d.ts +4 -1
  357. package/dist/ui/status-bar.d.ts.map +1 -1
  358. package/dist/ui/status-bar.js +13 -3
  359. package/dist/ui/status-bar.js.map +1 -1
  360. package/dist/ui/types.d.ts +3 -0
  361. package/dist/ui/types.d.ts.map +1 -1
  362. package/dist/version-check.d.ts.map +1 -1
  363. package/dist/version-check.js +10 -0
  364. package/dist/version-check.js.map +1 -1
  365. package/package.json +12 -8
  366. package/dist/agents/agent-config-loader.d.ts +0 -60
  367. package/dist/agents/agent-config-loader.d.ts.map +0 -1
  368. package/dist/agents/agent-config-loader.js +0 -402
  369. package/dist/agents/agent-config-loader.js.map +0 -1
  370. package/dist/agents/agent-config-presets.d.ts +0 -10
  371. package/dist/agents/agent-config-presets.d.ts.map +0 -1
  372. package/dist/agents/agent-config-presets.js +0 -940
  373. package/dist/agents/agent-config-presets.js.map +0 -1
  374. package/dist/agents/agent-config-types.d.ts +0 -145
  375. package/dist/agents/agent-config-types.d.ts.map +0 -1
  376. package/dist/agents/agent-config-types.js +0 -12
  377. package/dist/agents/agent-config-types.js.map +0 -1
  378. package/dist/agents/agent-detection.d.ts +0 -35
  379. package/dist/agents/agent-detection.d.ts.map +0 -1
  380. package/dist/agents/agent-detection.js +0 -110
  381. package/dist/agents/agent-detection.js.map +0 -1
  382. package/dist/agents/aggregator.d.ts +0 -19
  383. package/dist/agents/aggregator.d.ts.map +0 -1
  384. package/dist/agents/aggregator.js +0 -141
  385. package/dist/agents/aggregator.js.map +0 -1
  386. package/dist/agents/cli-backend.d.ts +0 -32
  387. package/dist/agents/cli-backend.d.ts.map +0 -1
  388. package/dist/agents/cli-backend.js +0 -271
  389. package/dist/agents/cli-backend.js.map +0 -1
  390. package/dist/agents/council-types.d.ts +0 -115
  391. package/dist/agents/council-types.d.ts.map +0 -1
  392. package/dist/agents/council-types.js +0 -81
  393. package/dist/agents/council-types.js.map +0 -1
  394. package/dist/agents/council.d.ts +0 -112
  395. package/dist/agents/council.d.ts.map +0 -1
  396. package/dist/agents/council.js +0 -722
  397. package/dist/agents/council.js.map +0 -1
  398. package/dist/agents/decomposer.d.ts +0 -33
  399. package/dist/agents/decomposer.d.ts.map +0 -1
  400. package/dist/agents/decomposer.js +0 -138
  401. package/dist/agents/decomposer.js.map +0 -1
  402. package/dist/agents/dynamic-tools.d.ts +0 -52
  403. package/dist/agents/dynamic-tools.d.ts.map +0 -1
  404. package/dist/agents/dynamic-tools.js +0 -395
  405. package/dist/agents/dynamic-tools.js.map +0 -1
  406. package/dist/agents/index.d.ts +0 -29
  407. package/dist/agents/index.d.ts.map +0 -1
  408. package/dist/agents/index.js +0 -29
  409. package/dist/agents/index.js.map +0 -1
  410. package/dist/agents/installer.d.ts +0 -39
  411. package/dist/agents/installer.d.ts.map +0 -1
  412. package/dist/agents/installer.js +0 -205
  413. package/dist/agents/installer.js.map +0 -1
  414. package/dist/agents/orchestrator.d.ts +0 -106
  415. package/dist/agents/orchestrator.d.ts.map +0 -1
  416. package/dist/agents/orchestrator.js +0 -363
  417. package/dist/agents/orchestrator.js.map +0 -1
  418. package/dist/agents/sdk-backend.d.ts +0 -63
  419. package/dist/agents/sdk-backend.d.ts.map +0 -1
  420. package/dist/agents/sdk-backend.js +0 -489
  421. package/dist/agents/sdk-backend.js.map +0 -1
  422. package/dist/agents/swarm-types.d.ts +0 -84
  423. package/dist/agents/swarm-types.d.ts.map +0 -1
  424. package/dist/agents/swarm-types.js +0 -20
  425. package/dist/agents/swarm-types.js.map +0 -1
  426. package/dist/agents/swarm.d.ts +0 -79
  427. package/dist/agents/swarm.d.ts.map +0 -1
  428. package/dist/agents/swarm.js +0 -375
  429. package/dist/agents/swarm.js.map +0 -1
  430. package/dist/agents/tools.d.ts +0 -26
  431. package/dist/agents/tools.d.ts.map +0 -1
  432. package/dist/agents/tools.js +0 -776
  433. package/dist/agents/tools.js.map +0 -1
  434. package/dist/agents/types.d.ts +0 -108
  435. package/dist/agents/types.d.ts.map +0 -1
  436. package/dist/agents/types.js +0 -43
  437. package/dist/agents/types.js.map +0 -1
  438. package/dist/api-server.d.ts +0 -36
  439. package/dist/api-server.d.ts.map +0 -1
  440. package/dist/api-server.js +0 -255
  441. package/dist/api-server.js.map +0 -1
  442. package/dist/auto-checkpoint.d.ts +0 -35
  443. package/dist/auto-checkpoint.d.ts.map +0 -1
  444. package/dist/auto-checkpoint.js +0 -143
  445. package/dist/auto-checkpoint.js.map +0 -1
  446. package/dist/background-jobs.d.ts +0 -45
  447. package/dist/background-jobs.d.ts.map +0 -1
  448. package/dist/background-jobs.js +0 -127
  449. package/dist/background-jobs.js.map +0 -1
  450. package/dist/branching.d.ts +0 -56
  451. package/dist/branching.d.ts.map +0 -1
  452. package/dist/branching.js +0 -211
  453. package/dist/branching.js.map +0 -1
  454. package/dist/cli/agent.d.ts +0 -9
  455. package/dist/cli/agent.d.ts.map +0 -1
  456. package/dist/cli/agent.js +0 -314
  457. package/dist/cli/agent.js.map +0 -1
  458. package/dist/cli/commands.d.ts +0 -12
  459. package/dist/cli/commands.d.ts.map +0 -1
  460. package/dist/cli/commands.js +0 -943
  461. package/dist/cli/commands.js.map +0 -1
  462. package/dist/cli/index.d.ts +0 -8
  463. package/dist/cli/index.d.ts.map +0 -1
  464. package/dist/cli/index.js +0 -237
  465. package/dist/cli/index.js.map +0 -1
  466. package/dist/cli/types.d.ts +0 -33
  467. package/dist/cli/types.d.ts.map +0 -1
  468. package/dist/cli/types.js +0 -21
  469. package/dist/cli/types.js.map +0 -1
  470. package/dist/companions.d.ts +0 -54
  471. package/dist/companions.d.ts.map +0 -1
  472. package/dist/companions.js +0 -440
  473. package/dist/companions.js.map +0 -1
  474. package/dist/completion.d.ts +0 -75
  475. package/dist/completion.d.ts.map +0 -1
  476. package/dist/completion.js +0 -234
  477. package/dist/completion.js.map +0 -1
  478. package/dist/file-watcher.d.ts +0 -91
  479. package/dist/file-watcher.d.ts.map +0 -1
  480. package/dist/file-watcher.js +0 -269
  481. package/dist/file-watcher.js.map +0 -1
  482. package/dist/hud/theme-packs/api.d.ts +0 -51
  483. package/dist/hud/theme-packs/api.d.ts.map +0 -1
  484. package/dist/hud/theme-packs/api.js +0 -145
  485. package/dist/hud/theme-packs/api.js.map +0 -1
  486. package/dist/hud/theme-packs/index.d.ts +0 -18
  487. package/dist/hud/theme-packs/index.d.ts.map +0 -1
  488. package/dist/hud/theme-packs/index.js +0 -38
  489. package/dist/hud/theme-packs/index.js.map +0 -1
  490. package/dist/hud/theme-packs/types.d.ts +0 -29
  491. package/dist/hud/theme-packs/types.d.ts.map +0 -1
  492. package/dist/hud/theme-packs/types.js +0 -9
  493. package/dist/hud/theme-packs/types.js.map +0 -1
  494. package/dist/idle-eviction.d.ts +0 -34
  495. package/dist/idle-eviction.d.ts.map +0 -1
  496. package/dist/idle-eviction.js +0 -78
  497. package/dist/idle-eviction.js.map +0 -1
  498. package/dist/keyboard.d.ts +0 -57
  499. package/dist/keyboard.d.ts.map +0 -1
  500. package/dist/keyboard.js +0 -265
  501. package/dist/keyboard.js.map +0 -1
  502. package/dist/model-router.d.ts +0 -67
  503. package/dist/model-router.d.ts.map +0 -1
  504. package/dist/model-router.js.map +0 -1
  505. package/dist/providers/openai-compat-shims.d.ts +0 -31
  506. package/dist/providers/openai-compat-shims.d.ts.map +0 -1
  507. package/dist/providers/openai-compat-shims.js +0 -179
  508. package/dist/providers/openai-compat-shims.js.map +0 -1
  509. package/dist/sandbox-native.d.ts.map +0 -1
  510. package/dist/sandbox-native.js.map +0 -1
  511. package/dist/sandbox.d.ts.map +0 -1
  512. package/dist/sandbox.js.map +0 -1
  513. package/dist/session-timeout.d.ts +0 -31
  514. package/dist/session-timeout.d.ts.map +0 -1
  515. package/dist/session-timeout.js +0 -100
  516. package/dist/session-timeout.js.map +0 -1
  517. package/dist/smart-router.d.ts +0 -73
  518. package/dist/smart-router.d.ts.map +0 -1
  519. package/dist/smart-router.js +0 -332
  520. package/dist/smart-router.js.map +0 -1
  521. package/dist/terminal-recording.d.ts +0 -55
  522. package/dist/terminal-recording.d.ts.map +0 -1
  523. package/dist/terminal-recording.js +0 -182
  524. package/dist/terminal-recording.js.map +0 -1
  525. package/dist/tmux.d.ts +0 -35
  526. package/dist/tmux.d.ts.map +0 -1
  527. package/dist/tmux.js +0 -106
  528. package/dist/tmux.js.map +0 -1
  529. package/dist/ui/modals.d.ts.map +0 -1
  530. package/dist/ui/modals.js.map +0 -1
  531. package/dist/ui/pack-picker.d.ts +0 -12
  532. package/dist/ui/pack-picker.d.ts.map +0 -1
  533. package/dist/ui/pack-picker.js +0 -101
  534. package/dist/ui/pack-picker.js.map +0 -1
  535. package/dist/ui/theme-picker.d.ts +0 -24
  536. package/dist/ui/theme-picker.d.ts.map +0 -1
  537. package/dist/ui/theme-picker.js +0 -190
  538. package/dist/ui/theme-picker.js.map +0 -1
@@ -1,943 +0,0 @@
1
- /**
2
- * CLI Command Handlers
3
- *
4
- * Slash command processing, help text, and upgrade flow.
5
- */
6
- import * as path from 'path';
7
- import * as config from '../config.js';
8
- import { getAvailableProviders, selectProvider } from '../providers/index.js';
9
- import { getSystemPrompt, DEFAULT_MODELS, MODE_CONFIG } from '../types.js';
10
- import { getVersion, getLatestVersion, performUpgrade } from '../version-check.js';
11
- import { selectModelInteractively } from '../model-detection.js';
12
- import * as memory from '../memory.js';
13
- import * as hooks from '../hooks.js';
14
- import * as modelRouter from '../model-router.js';
15
- import * as summarization from '../summarization.js';
16
- import * as themes from '../themes.js';
17
- import * as branching from '../branching.js';
18
- import * as fuzzySearch from '../fuzzy-search.js';
19
- import * as storage from '../storage.js';
20
- import { addToScope, removeFromScope, getScopeSummary, getScopeDetails, resetScope } from '../scope.js';
21
- import { color } from '../styles.js';
22
- import { getCurrentSkin, getCurrentPalette, applySkin, applyPalette, listSkins, listPalettes } from '../hud/api.js';
23
- import { getCurrentCompanion, applyCompanion, listCompanions, getMoodText } from '../companions.js';
24
- import { applyThemePack, listThemePacks, getCurrentPack, getCompanionMode, setCompanionMode } from '../hud/theme-packs/api.js';
25
- import { isDockerAvailable } from '../sandbox.js';
26
- import { getSandboxStatus } from '../sandbox-native.js';
27
- import { resolveIterationLimit, formatIterationLimit } from '../iteration-limit.js';
28
- // Builds the full system prompt including memory context (project + global)
29
- function buildFullSystemPrompt(persona, cwd) {
30
- const base = getSystemPrompt(persona);
31
- const mem = memory.buildMemoryContext(cwd);
32
- return mem.trim() ? base + '\n\n--- Project Context ---\n' + mem : base;
33
- }
34
- function formatLedgerDuration(durationMs) {
35
- if (durationMs < 1000)
36
- return `${durationMs}ms`;
37
- if (durationMs < 60_000)
38
- return `${(durationMs / 1000).toFixed(1)}s`;
39
- return `${(durationMs / 60_000).toFixed(1)}m`;
40
- }
41
- function formatSessionLogLimit(limit) {
42
- return limit > 0 ? String(limit) : 'unlimited';
43
- }
44
- // Forward declaration — injected by index.ts to avoid circular imports
45
- let _startLoop;
46
- export function setStartLoop(fn) {
47
- _startLoop = fn;
48
- }
49
- export async function handleCommand(input, state, rl) {
50
- const parts = input.split(/\s+/);
51
- const cmd = parts[0].toLowerCase();
52
- switch (cmd) {
53
- case '/help':
54
- case '/h':
55
- printHelp();
56
- break;
57
- case '/provider':
58
- case '/p':
59
- if (parts[1]) {
60
- const validProviders = ['anthropic', 'google', 'openai', 'together', 'openrouter', 'groq', 'fireworks', 'mistral', 'ollama', 'ai21', 'huggingface', 'litellm', 'bedrock', 'auto'];
61
- const requested = parts[1].toLowerCase();
62
- if (validProviders.includes(requested)) {
63
- state.provider = requested;
64
- console.log(color(`Provider set to: ${requested}`, 'green'));
65
- }
66
- else {
67
- console.log(color(`Invalid provider: ${parts[1]}`, 'red'));
68
- console.log(`Available: ${validProviders.join(', ')}`);
69
- }
70
- }
71
- else {
72
- const available = getAvailableProviders();
73
- console.log(`Current: ${color(selectProvider(state.provider), 'green')}`);
74
- console.log(`Available: ${available.join(', ')}`);
75
- }
76
- console.log();
77
- break;
78
- case '/model':
79
- case '/m':
80
- if (parts[1]) {
81
- state.model = parts[1];
82
- console.log(color(`Model set to: ${parts[1]}`, 'green'));
83
- console.log();
84
- }
85
- else {
86
- const actualProvider = selectProvider(state.provider);
87
- console.log(`Current model: ${color(state.model || DEFAULT_MODELS[actualProvider], 'cyan')}`);
88
- console.log();
89
- const selectedModel = await selectModelInteractively(actualProvider);
90
- if (selectedModel) {
91
- state.model = selectedModel;
92
- console.log();
93
- console.log(color(`Model set to: ${selectedModel}`, 'green'));
94
- }
95
- console.log();
96
- }
97
- break;
98
- case '/models':
99
- {
100
- const provider = selectProvider(state.provider);
101
- const selectedModel = await selectModelInteractively(provider);
102
- if (selectedModel) {
103
- state.model = selectedModel;
104
- console.log();
105
- console.log(color(`Model set to: ${selectedModel}`, 'green'));
106
- }
107
- console.log();
108
- }
109
- break;
110
- case '/persona':
111
- if (parts[1] && ['calliope', 'muse', 'minimal'].includes(parts[1])) {
112
- state.persona = parts[1];
113
- state.messages = [{ role: 'system', content: buildFullSystemPrompt(state.persona, state.cwd) }];
114
- console.log(color(`Persona set to: ${parts[1]}`, 'green'));
115
- }
116
- else {
117
- console.log(`Current: ${color(state.persona, 'magenta')}`);
118
- console.log('Options: calliope, muse, minimal');
119
- }
120
- console.log();
121
- break;
122
- case '/clear':
123
- case '/c':
124
- state.messages = [{ role: 'system', content: buildFullSystemPrompt(state.persona, state.cwd) }];
125
- state.ledger.reset();
126
- console.log(color('Conversation cleared.', 'green'));
127
- console.log();
128
- break;
129
- case '/status':
130
- case '/s':
131
- console.log(`Provider: ${color(selectProvider(state.provider), 'green')}`);
132
- console.log(`Model: ${state.model || DEFAULT_MODELS[selectProvider(state.provider)]}`);
133
- console.log(`Persona: ${color(state.persona, 'magenta')}`);
134
- console.log(`Messages: ${state.messages.length}`);
135
- console.log(`Directory: ${state.cwd}`);
136
- console.log();
137
- break;
138
- case '/loop':
139
- await _startLoop(parts.slice(1).join(' '), state);
140
- break;
141
- case '/cancel-loop':
142
- case '/breakloop':
143
- if (state.loopActive) {
144
- state.loopActive = false;
145
- console.log(color('Loop cancelled.', 'yellow'));
146
- }
147
- else {
148
- console.log(color('No active loop.', 'dim'));
149
- }
150
- console.log();
151
- break;
152
- case '/setup':
153
- const { reconfigure } = await import('../setup.js');
154
- await reconfigure();
155
- break;
156
- case '/config':
157
- console.log(`Config: ${config.getConfigPath()}`);
158
- console.log(`Providers: ${config.getConfiguredProviders().join(', ') || 'none'}`);
159
- console.log(`sessionLogLimit: ${formatSessionLogLimit(config.get('sessionLogLimit'))} (set > 0 to cap)`);
160
- console.log();
161
- break;
162
- case '/memory':
163
- if (parts[1] === 'init') {
164
- const memPath = memory.initProjectMemory(state.cwd);
165
- console.log(color(`Created: ${memPath}`, 'green'));
166
- }
167
- else if (parts[1] === 'show') {
168
- const mem = memory.getProjectMemory(state.cwd);
169
- console.log(color('Project Memory:', 'bold'));
170
- if (mem.context.length)
171
- console.log(`Context: ${mem.context.join(', ')}`);
172
- if (mem.preferences.length)
173
- console.log(`Preferences: ${mem.preferences.join(', ')}`);
174
- if (mem.history.length)
175
- console.log(`History: ${mem.history.slice(-3).join(', ')}`);
176
- }
177
- else if (parts[1] === 'add' && parts[2] && parts[3]) {
178
- const type = parts[2];
179
- const content = parts.slice(3).join(' ');
180
- const memPath = memory.findProjectMemory(state.cwd) || path.join(state.cwd, 'CALLIOPE.md');
181
- memory.addMemoryEntry(memPath, { type, content });
182
- console.log(color(`Added ${type}: ${content}`, 'green'));
183
- }
184
- else if (parts[1] === 'global') {
185
- const globalMem = memory.getGlobalMemory();
186
- console.log(color('Global Memory:', 'bold'));
187
- if (globalMem.preferences.length)
188
- console.log(`Preferences: ${globalMem.preferences.join(', ')}`);
189
- }
190
- else {
191
- console.log('Usage: /memory [init|show|add <type> <content>|global]');
192
- }
193
- console.log();
194
- break;
195
- case '/hooks':
196
- if (parts[1] === 'init') {
197
- hooks.initDefaultHooks();
198
- console.log(color('Initialized default hooks', 'green'));
199
- }
200
- else if (parts[1] === 'list') {
201
- console.log(hooks.listHooksFormatted());
202
- }
203
- else {
204
- console.log('Usage: /hooks [init|list]');
205
- }
206
- console.log();
207
- break;
208
- case '/route':
209
- case '/autoroute':
210
- if (parts[1] === 'on') {
211
- state.autoRoute = true;
212
- console.log(color('Auto-routing ON', 'green'));
213
- }
214
- else if (parts[1] === 'off') {
215
- state.autoRoute = false;
216
- console.log(color('Auto-routing OFF', 'green'));
217
- }
218
- else if (parts[1] === 'test' && parts[2]) {
219
- const testMsg = parts.slice(2).join(' ');
220
- const decision = modelRouter.routeRequest(testMsg, state.provider);
221
- console.log(`Tier: ${color(decision.tier, 'cyan')} (${decision.complexity})`);
222
- console.log(`Model: ${decision.model.model}`);
223
- console.log(`Reason: ${decision.reason}`);
224
- }
225
- else {
226
- const tiers = modelRouter.getAllTiers(state.provider);
227
- console.log(`Auto-route: ${state.autoRoute ? 'ON' : 'OFF'}`);
228
- console.log(`Tiers: fast=${tiers.fast.model}, balanced=${tiers.balanced.model}, smart=${tiers.smart.model}`);
229
- }
230
- console.log();
231
- break;
232
- case '/summarize':
233
- if (parts[1] === 'context' || !parts[1]) {
234
- const summary = summarization.extractKeyInfo(state.messages);
235
- console.log(color('Context Summary:', 'bold'));
236
- if (summary.topics.length)
237
- console.log(`Topics: ${summary.topics.join(', ')}`);
238
- if (summary.decisions.length)
239
- console.log(`Decisions: ${summary.decisions.join(', ')}`);
240
- if (summary.actions.length)
241
- console.log(`Actions: ${summary.actions.slice(0, 5).join(', ')}`);
242
- }
243
- else if (parts[1] === 'compact') {
244
- const result = summarization.summarizeConversation(state.messages, { maxTokens: 50000 });
245
- if (result.summarizedCount > 0) {
246
- state.messages = result.messages;
247
- console.log(color(`Compacted ${result.summarizedCount} messages`, 'green'));
248
- }
249
- else {
250
- console.log(color('Context already within limits', 'dim'));
251
- }
252
- }
253
- console.log();
254
- break;
255
- case '/theme':
256
- if (parts[1] === 'list') {
257
- const themeList = themes.listThemes();
258
- const current = themes.getCurrentThemeName();
259
- console.log(`Themes: ${themeList.map(t => t.name === current ? color(t.name, 'green') : t.name).join(', ')}`);
260
- }
261
- else if (parts[1]) {
262
- if (themes.setCurrentTheme(parts[1])) {
263
- console.log(color(`Theme set to: ${parts[1]}`, 'green'));
264
- }
265
- else {
266
- console.log(color(`Theme not found: ${parts[1]}`, 'red'));
267
- }
268
- }
269
- else {
270
- console.log(`Current: ${themes.getCurrentThemeName()}`);
271
- console.log(`Available: ${themes.listThemes().map(t => t.name).join(', ')}`);
272
- }
273
- console.log();
274
- break;
275
- case '/skin':
276
- if (parts[1] === 'list' || !parts[1]) {
277
- const skins = listSkins();
278
- const currentSkin = getCurrentSkin();
279
- console.log(`Skins: ${skins.map(s => s.name === currentSkin.name ? color(s.name, 'green') : s.name).join(', ')}`);
280
- if (!parts[1])
281
- console.log(`Current: ${color(currentSkin.name, 'cyan')} — ${currentSkin.description}`);
282
- }
283
- else {
284
- applySkin(parts[1]);
285
- const newSkin = getCurrentSkin();
286
- if (newSkin.name === parts[1]) {
287
- config.set('activeSkin', parts[1]);
288
- console.log(color(`Skin set to: ${parts[1]}`, 'green'));
289
- }
290
- else {
291
- console.log(color(`Skin not found: ${parts[1]}. Using: ${newSkin.name}`, 'yellow'));
292
- }
293
- }
294
- console.log();
295
- break;
296
- case '/palette':
297
- if (parts[1] === 'list' || !parts[1]) {
298
- const palettes = listPalettes();
299
- const currentPal = getCurrentPalette();
300
- console.log(`Palettes: ${palettes.map(p => p.name === currentPal.name ? color(p.name, 'green') : p.name).join(', ')}`);
301
- if (!parts[1])
302
- console.log(`Current: ${color(currentPal.name, 'cyan')} — ${currentPal.description}`);
303
- }
304
- else {
305
- applyPalette(parts[1]);
306
- const newPal = getCurrentPalette();
307
- if (newPal.name === parts[1]) {
308
- config.set('activePalette', parts[1]);
309
- console.log(color(`Palette set to: ${parts[1]}`, 'green'));
310
- }
311
- else {
312
- console.log(color(`Palette not found: ${parts[1]}. Using: ${newPal.name}`, 'yellow'));
313
- }
314
- }
315
- console.log();
316
- break;
317
- case '/companion':
318
- if (parts[1] === 'list' || !parts[1]) {
319
- const companions = listCompanions();
320
- const currentComp = getCurrentCompanion();
321
- console.log(`Companions: ${companions.map(comp => comp.name === currentComp.name ? color(comp.name, 'green') : comp.name).join(', ')}`);
322
- if (!parts[1])
323
- console.log(`Current: ${color(currentComp.name, 'cyan')} — ${currentComp.description}`);
324
- }
325
- else {
326
- applyCompanion(parts[1]);
327
- const newComp = getCurrentCompanion();
328
- if (newComp.name === parts[1]) {
329
- config.set('activeCompanion', parts[1]);
330
- state.messages = [{ role: 'system', content: buildFullSystemPrompt(state.persona, state.cwd) }];
331
- console.log(color(`Companion set to: ${parts[1]}`, 'green'));
332
- console.log(color(` "${newComp.greeting}"`, 'dim'));
333
- }
334
- else {
335
- console.log(color(`Companion not found: ${parts[1]}. Using: ${newComp.name}`, 'yellow'));
336
- }
337
- }
338
- console.log();
339
- break;
340
- case '/hud':
341
- {
342
- const hudSkin = getCurrentSkin();
343
- const hudPalette = getCurrentPalette();
344
- const hudCompanion = getCurrentCompanion();
345
- const hudPack = getCurrentPack();
346
- const hudIntensity = getCompanionMode();
347
- console.log(color('HUD Configuration', 'bold'));
348
- if (hudPack)
349
- console.log(` Pack: ${color(hudPack.name, 'cyan')} — ${hudPack.description}`);
350
- console.log(` Skin: ${color(hudSkin.name, 'cyan')} — ${hudSkin.description}`);
351
- console.log(` Palette: ${color(hudPalette.name, 'cyan')} — ${hudPalette.description}`);
352
- console.log(` Companion: ${color(hudCompanion.name, 'cyan')} — ${hudCompanion.description}`);
353
- console.log(` Intensity: ${hudIntensity}`);
354
- console.log(` Emojis: ${config.get('useEmojis') !== false ? 'ON' : 'OFF'}`);
355
- console.log(` Mood: ${getMoodText()}`);
356
- console.log();
357
- console.log(color(' /pack <name> /intensity <pro|immersive> /emoji [on|off]', 'dim'));
358
- console.log(color(' /skin <name> /palette <name> /companion <name>', 'dim'));
359
- }
360
- console.log();
361
- break;
362
- case '/pack':
363
- if (parts[1] === 'list' || !parts[1]) {
364
- const category = parts[2];
365
- const packs = listThemePacks(category || undefined);
366
- const currentP = getCurrentPack();
367
- const grouped = new Map();
368
- for (const p of packs) {
369
- const group = grouped.get(p.category) || [];
370
- group.push(p);
371
- grouped.set(p.category, group);
372
- }
373
- console.log(color('Theme Packs:', 'bold'));
374
- for (const [cat, catPacks] of grouped) {
375
- console.log(color(`\n [${cat}]`, 'dim'));
376
- for (const p of catPacks) {
377
- const marker = currentP && p.name === currentP.name ? color(' *', 'green') : '';
378
- console.log(` ${p.name}${marker} — ${p.description}`);
379
- }
380
- }
381
- console.log(color('\n /pack <name>', 'dim'));
382
- }
383
- else {
384
- const success = applyThemePack(parts[1], getCompanionMode());
385
- if (success) {
386
- const pack = getCurrentPack();
387
- config.set('activeThemePack', parts[1]);
388
- config.set('activeSkin', pack.skin.name);
389
- config.set('activePalette', pack.palette.name);
390
- const companion = getCompanionMode() === 'professional'
391
- ? pack.companions.professional
392
- : pack.companions.immersive;
393
- config.set('activeCompanion', companion.name);
394
- // Reset system prompt to use the companion's persona
395
- state.messages = [{ role: 'system', content: buildFullSystemPrompt(state.persona, state.cwd) }];
396
- console.log(color(`Theme pack: ${parts[1]}`, 'green'));
397
- console.log(color(` "${companion.greeting}"`, 'dim'));
398
- }
399
- else {
400
- console.log(color(`Theme pack not found: ${parts[1]}`, 'yellow'));
401
- }
402
- }
403
- console.log();
404
- break;
405
- case '/intensity':
406
- if (parts[1] === 'professional' || parts[1] === 'pro') {
407
- const success = setCompanionMode('professional');
408
- if (success) {
409
- const pack = getCurrentPack();
410
- config.set('companionIntensity', 'professional');
411
- config.set('activeCompanion', pack.companions.professional.name);
412
- state.messages = [{ role: 'system', content: buildFullSystemPrompt(state.persona, state.cwd) }];
413
- console.log(color(`Switched to professional mode`, 'green'));
414
- }
415
- else {
416
- console.log(color('No theme pack active. Use /pack <name> first.', 'yellow'));
417
- }
418
- }
419
- else if (parts[1] === 'immersive' || parts[1] === 'imm') {
420
- const success = setCompanionMode('immersive');
421
- if (success) {
422
- const pack = getCurrentPack();
423
- config.set('companionIntensity', 'immersive');
424
- config.set('activeCompanion', pack.companions.immersive.name);
425
- state.messages = [{ role: 'system', content: buildFullSystemPrompt(state.persona, state.cwd) }];
426
- console.log(color(`Switched to immersive mode`, 'green'));
427
- }
428
- else {
429
- console.log(color('No theme pack active. Use /pack <name> first.', 'yellow'));
430
- }
431
- }
432
- else {
433
- console.log(`Intensity: ${getCompanionMode()}`);
434
- console.log(color('Options: /intensity professional (pro), /intensity immersive (imm)', 'dim'));
435
- }
436
- console.log();
437
- break;
438
- case '/emoji': {
439
- const emojiArg = parts[1];
440
- const emojiCurrent = config.get('useEmojis') !== false;
441
- if (emojiArg === 'on') {
442
- config.set('useEmojis', true);
443
- console.log(color('Emojis enabled', 'green'));
444
- }
445
- else if (emojiArg === 'off') {
446
- config.set('useEmojis', false);
447
- console.log(color('Emojis disabled — text fallbacks will be used', 'green'));
448
- }
449
- else if (emojiArg === 'toggle') {
450
- config.set('useEmojis', !emojiCurrent);
451
- console.log(color(`Emojis ${!emojiCurrent ? 'enabled' : 'disabled'}`, 'green'));
452
- }
453
- else {
454
- console.log(`Emojis: ${emojiCurrent ? 'ON' : 'OFF'}`);
455
- console.log(color('Usage: /emoji [on|off|toggle]', 'dim'));
456
- }
457
- console.log();
458
- break;
459
- }
460
- case '/branch':
461
- {
462
- const sessionId = 'default-session';
463
- if (parts[1] === 'list') {
464
- const branches = branching.listBranches(sessionId);
465
- console.log(`Branches: ${branches.map(b => b.id === state.currentBranch ? color(b.id, 'green') : b.id).join(', ')}`);
466
- }
467
- else if (parts[1] === 'new' && parts[2]) {
468
- const description = parts.slice(3).join(' ') || undefined;
469
- const branch = branching.createBranch(sessionId, parts[2], state.messages, description);
470
- state.currentBranch = branch.id;
471
- console.log(color(`Created branch: ${parts[2]}`, 'green'));
472
- }
473
- else if (parts[1] === 'switch' && parts[2]) {
474
- const result = branching.switchBranch(sessionId, parts[2], state.messages);
475
- if (result) {
476
- state.messages = result;
477
- state.currentBranch = parts[2];
478
- console.log(color(`Switched to branch: ${parts[2]}`, 'green'));
479
- }
480
- else {
481
- console.log(color(`Branch not found: ${parts[2]}`, 'red'));
482
- }
483
- }
484
- else {
485
- console.log(`Current: ${state.currentBranch}`);
486
- console.log('Usage: /branch [list|new <name>|switch <name>]');
487
- }
488
- }
489
- console.log();
490
- break;
491
- case '/find':
492
- if (parts[1]) {
493
- const results = fuzzySearch.searchFiles(parts[1], state.cwd, { maxResults: 10 });
494
- if (results.length) {
495
- console.log(color('Matches:', 'bold'));
496
- for (const r of results) {
497
- console.log(` ${r.relativePath} (${Math.round(r.score * 100)}%)`);
498
- }
499
- }
500
- else {
501
- console.log(color('No matches found', 'dim'));
502
- }
503
- }
504
- else {
505
- console.log('Usage: /find <pattern>');
506
- }
507
- console.log();
508
- break;
509
- case '/search':
510
- if (parts[1]) {
511
- const query = parts.slice(1).join(' ').toLowerCase();
512
- const matches = state.messages.filter(m => {
513
- const content = typeof m.content === 'string' ? m.content : JSON.stringify(m.content);
514
- return content.toLowerCase().includes(query);
515
- });
516
- console.log(`Found ${matches.length} messages containing "${query}"`);
517
- for (const m of matches.slice(0, 5)) {
518
- const preview = (typeof m.content === 'string' ? m.content : JSON.stringify(m.content)).slice(0, 80);
519
- console.log(` [${m.role}] ${preview}...`);
520
- }
521
- }
522
- else {
523
- console.log('Usage: /search <query>');
524
- }
525
- console.log();
526
- break;
527
- case '/upgrade':
528
- await handleUpgrade(rl);
529
- break;
530
- case '/mode':
531
- if (parts[1] && ['plan', 'hybrid', 'work'].includes(parts[1])) {
532
- state.mode = parts[1];
533
- const cfg = MODE_CONFIG[state.mode];
534
- console.log(color(`Mode: ${cfg.icon} ${cfg.label} - ${cfg.description}`, 'green'));
535
- }
536
- else {
537
- const cfg = MODE_CONFIG[state.mode];
538
- console.log(`Current: ${cfg.icon} ${cfg.label}`);
539
- console.log('Options: plan, hybrid, work');
540
- }
541
- console.log();
542
- break;
543
- case '/work':
544
- state.mode = 'work';
545
- console.log(color(`Mode: ${MODE_CONFIG['work'].icon} ${MODE_CONFIG['work'].label}`, 'green'));
546
- console.log();
547
- break;
548
- case '/plan':
549
- state.mode = 'plan';
550
- console.log(color(`Mode: ${MODE_CONFIG['plan'].icon} ${MODE_CONFIG['plan'].label}`, 'green'));
551
- console.log();
552
- break;
553
- case '/debug':
554
- if (parts[1] === 'on') {
555
- state.debugEnabled = true;
556
- console.log(color('Debug logging ON', 'green'));
557
- }
558
- else if (parts[1] === 'off') {
559
- state.debugEnabled = false;
560
- console.log(color('Debug logging OFF', 'yellow'));
561
- }
562
- else {
563
- console.log(`Debug: ${state.debugEnabled ? 'ON' : 'OFF'}`);
564
- console.log(`Mode: ${state.mode}`);
565
- console.log(`Confirm: ${state.confirmMode ? 'ON' : 'OFF'}`);
566
- console.log(`Messages: ${state.messages.length}`);
567
- console.log(`Loop: ${state.loopActive ? 'active' : 'inactive'}`);
568
- console.log('\nUse /debug on|off to toggle.');
569
- }
570
- console.log();
571
- break;
572
- case '/set':
573
- if (parts[1] === 'maxIterations' && parts[2]) {
574
- const val = parseInt(parts[2]);
575
- if (!isNaN(val) && val >= 0 && val <= 1000000) {
576
- config.set('maxIterations', val);
577
- state.loopMaxIterations = resolveIterationLimit(val);
578
- console.log(color(`maxIterations set to ${formatIterationLimit(state.loopMaxIterations)}`, 'green'));
579
- }
580
- }
581
- else if (parts[1] === 'sessionLogLimit' && parts[2]) {
582
- const val = parseInt(parts[2]);
583
- if (!isNaN(val) && val >= 0 && val <= 100000) {
584
- config.set('sessionLogLimit', val);
585
- state.ledger.setRetentionLimit(val);
586
- console.log(color(`sessionLogLimit set to ${val === 0 ? 'unlimited (set > 0 to cap)' : val}`, 'green'));
587
- }
588
- else {
589
- console.log(color('sessionLogLimit must be 0-100000 (0 = unlimited)', 'red'));
590
- }
591
- }
592
- else {
593
- console.log('Usage: /set maxIterations <number>');
594
- console.log(' /set sessionLogLimit <number>');
595
- console.log(' sessionLogLimit uses 0 for unlimited; set > 0 to cap retained log items');
596
- }
597
- console.log();
598
- break;
599
- case '/confirm':
600
- if (parts[1] === 'on') {
601
- state.confirmMode = true;
602
- console.log(color('Confirmation mode ON', 'green'));
603
- }
604
- else if (parts[1] === 'off') {
605
- state.confirmMode = false;
606
- console.log(color('Confirmation mode OFF', 'yellow'));
607
- }
608
- else {
609
- console.log(`Confirm mode: ${state.confirmMode ? 'ON' : 'OFF'}`);
610
- console.log('Use /confirm on|off to toggle.');
611
- }
612
- console.log();
613
- break;
614
- case '/scope':
615
- case '/dirs':
616
- if (parts[1] === 'details') {
617
- console.log(color('Scope Details:', 'cyan'));
618
- console.log(getScopeDetails());
619
- }
620
- else if (parts[1] === 'reset') {
621
- resetScope();
622
- console.log(color('Scope reset to defaults', 'green'));
623
- }
624
- else {
625
- console.log(getScopeSummary());
626
- }
627
- console.log();
628
- break;
629
- case '/add-dir':
630
- if (parts[1]) {
631
- addToScope(parts[1]);
632
- console.log(color(`Added to scope: ${parts[1]}`, 'green'));
633
- }
634
- else {
635
- console.log('Usage: /add-dir <path>');
636
- }
637
- console.log();
638
- break;
639
- case '/remove-dir':
640
- if (parts[1]) {
641
- removeFromScope(parts[1]);
642
- console.log(color(`Removed from scope: ${parts[1]}`, 'green'));
643
- }
644
- else {
645
- console.log('Usage: /remove-dir <path>');
646
- }
647
- console.log();
648
- break;
649
- case '/cost':
650
- case '/costs':
651
- if (parts[1] === 'reset') {
652
- state.sessionCost = 0;
653
- storage.resetCosts();
654
- console.log(color('Costs reset', 'green'));
655
- }
656
- else {
657
- console.log(color('Cost Tracking:', 'cyan'));
658
- console.log(` Session: $${state.sessionCost.toFixed(4)}`);
659
- console.log(storage.getCostSummary());
660
- }
661
- console.log();
662
- break;
663
- case '/session':
664
- console.log(color('Session Info:', 'cyan'));
665
- if (state.sessionId) {
666
- console.log(` Session ID: ${state.sessionId}`);
667
- }
668
- console.log(` Messages: ${state.messages.length}`);
669
- console.log(` Provider: ${selectProvider(state.provider)}`);
670
- console.log(` Model: ${state.model || DEFAULT_MODELS[selectProvider(state.provider)]}`);
671
- console.log(` Mode: ${MODE_CONFIG[state.mode].icon} ${state.mode}`);
672
- console.log(` Cost: $${state.sessionCost.toFixed(4)}`);
673
- console.log(` Logged iterations: ${state.ledger.getTotals().iterations}`);
674
- console.log(` Failed approaches: ${state.ledger.getFailedApproachCount()}`);
675
- const latestRun = state.ledger.getLatestRun();
676
- if (latestRun) {
677
- console.log(` Latest run: ${latestRun.kind} [${latestRun.status}]`);
678
- }
679
- console.log();
680
- break;
681
- case '/log': {
682
- const subCmd = parts[1] || 'summary';
683
- if (subCmd === 'summary') {
684
- const totals = state.ledger.getTotals();
685
- const runs = state.ledger.getRuns(5);
686
- const failures = state.ledger.getFailedApproaches().slice(-5);
687
- console.log(color('Session Log:', 'cyan'));
688
- console.log(` Iterations: ${totals.iterations}`);
689
- console.log(` Failed approaches: ${state.ledger.getFailedApproachCount()}`);
690
- console.log(` Tokens: ${totals.totalTokens}`);
691
- console.log(` Cost: $${totals.totalCost.toFixed(4)}`);
692
- console.log(` Duration: ${formatLedgerDuration(totals.totalDurationMs)}`);
693
- if (runs.length > 0) {
694
- console.log('\n Recent runs:');
695
- for (const run of runs) {
696
- console.log(` - ${run.kind} [${run.status}] ${run.prompt}`);
697
- }
698
- }
699
- if (failures.length > 0) {
700
- console.log('\n Recent failures:');
701
- for (const failure of failures) {
702
- console.log(` - #${failure.iteration} ${failure.description} — ${failure.reason}`);
703
- }
704
- }
705
- }
706
- else if (subCmd === 'tail') {
707
- const limit = parts[2] ? parseInt(parts[2], 10) : 10;
708
- const entries = state.ledger.getEntries().slice(-(isNaN(limit) || limit <= 0 ? 10 : limit));
709
- if (entries.length === 0) {
710
- console.log(color('No logged iterations yet.', 'dim'));
711
- }
712
- else {
713
- console.log(color('Recent iterations:', 'cyan'));
714
- for (const entry of entries) {
715
- const actions = entry.actions.length > 0
716
- ? entry.actions.map(action => `${action.tool}(${action.args})${action.result === 'error' ? ' FAILED' : action.result === 'blocked' ? ' BLOCKED' : ''}`).join(', ')
717
- : 'no tool actions';
718
- console.log(` #${entry.iteration} [${entry.outcome}] ${formatLedgerDuration(entry.durationMs)} — ${actions}`);
719
- }
720
- }
721
- }
722
- else if (subCmd === 'failures') {
723
- const failures = state.ledger.getFailedApproaches();
724
- if (failures.length === 0) {
725
- console.log(color('No failed approaches recorded.', 'dim'));
726
- }
727
- else {
728
- console.log(color('Failed approaches:', 'cyan'));
729
- for (const failure of failures.slice(-10)) {
730
- console.log(` - #${failure.iteration} ${failure.description} — ${failure.reason}`);
731
- }
732
- }
733
- }
734
- else if (subCmd === 'reset') {
735
- state.ledger.reset();
736
- console.log(color('Session log reset.', 'green'));
737
- }
738
- else {
739
- console.log(color('Usage: /log [summary|tail [N]|failures|reset]', 'dim'));
740
- }
741
- console.log();
742
- break;
743
- }
744
- case '/context':
745
- const memCtx = memory.buildMemoryContext(state.cwd);
746
- if (memCtx) {
747
- console.log(color('Context:', 'cyan'));
748
- console.log(memCtx.substring(0, 500) + (memCtx.length > 500 ? '...' : ''));
749
- }
750
- else {
751
- console.log('No context loaded. Use /memory init to create CALLIOPE.md');
752
- }
753
- console.log();
754
- break;
755
- case '/sandbox':
756
- {
757
- const sandboxArg = parts[1];
758
- const validModes = ['auto', 'native', 'docker', 'off'];
759
- if (sandboxArg && validModes.includes(sandboxArg)) {
760
- config.set('sandboxMode', sandboxArg);
761
- console.log(color(`Sandbox mode set to: ${sandboxArg}`, 'green'));
762
- }
763
- else if (sandboxArg && !validModes.includes(sandboxArg)) {
764
- console.log(color(`Invalid sandbox mode: ${sandboxArg}`, 'red'));
765
- console.log(`Available modes: ${validModes.join(', ')}`);
766
- }
767
- else {
768
- // Show sandbox status
769
- const currentMode = config.get('sandboxMode') || 'auto';
770
- const nativeStatus = getSandboxStatus();
771
- const dockerReady = isDockerAvailable();
772
- console.log(color('Sandbox Configuration', 'bold'));
773
- console.log(` Mode: ${color(currentMode, 'cyan')}`);
774
- console.log();
775
- console.log(color(' Backends:', 'bold'));
776
- console.log(` Docker: ${dockerReady ? color('available', 'green') : color('not available', 'dim')}`);
777
- console.log(` Native: ${nativeStatus.available ? color('available', 'green') : color('not available', 'dim')}`);
778
- if (nativeStatus.available) {
779
- console.log(` ${nativeStatus.description}`);
780
- }
781
- console.log(` Platform: ${nativeStatus.platform}`);
782
- console.log();
783
- // Show effective behaviour
784
- let effective;
785
- switch (currentMode) {
786
- case 'auto':
787
- if (nativeStatus.available)
788
- effective = `native (${nativeStatus.backend}) for shell commands`;
789
- else
790
- effective = 'unsandboxed (no native backend available)';
791
- if (dockerReady)
792
- effective += ', Docker for code execution';
793
- break;
794
- case 'native':
795
- effective = nativeStatus.available ? `${nativeStatus.backend}` : 'ERROR: native not available';
796
- break;
797
- case 'docker':
798
- effective = dockerReady ? 'Docker' : 'ERROR: Docker not available';
799
- break;
800
- case 'off':
801
- effective = 'all sandboxing disabled';
802
- break;
803
- default:
804
- effective = 'unknown';
805
- }
806
- console.log(` Effective: ${effective}`);
807
- console.log();
808
- console.log(color(' /sandbox <auto|native|docker|off>', 'dim'));
809
- }
810
- }
811
- console.log();
812
- break;
813
- case '/exit':
814
- case '/quit':
815
- process.exit(0);
816
- default:
817
- console.log(color(`Unknown command: ${cmd}. Type /help for help.`, 'red'));
818
- console.log();
819
- }
820
- }
821
- async function handleUpgrade(rl) {
822
- console.log();
823
- console.log(color('Checking for updates...', 'cyan'));
824
- const currentVersion = getVersion();
825
- const latestVersion = await getLatestVersion();
826
- if (!latestVersion) {
827
- console.log(color('Could not check for updates. Try again later.', 'red'));
828
- console.log();
829
- return;
830
- }
831
- const current = currentVersion.split('.').map(Number);
832
- const latest = latestVersion.split('.').map(Number);
833
- let hasUpdate = false;
834
- for (let i = 0; i < 3; i++) {
835
- if ((latest[i] || 0) > (current[i] || 0)) {
836
- hasUpdate = true;
837
- break;
838
- }
839
- if ((latest[i] || 0) < (current[i] || 0))
840
- break;
841
- }
842
- if (!hasUpdate) {
843
- console.log(color(`You're on the latest version (v${currentVersion})`, 'green'));
844
- console.log();
845
- return;
846
- }
847
- console.log();
848
- console.log(`${color('Update available:', 'yellow')} v${currentVersion} → ${color('v' + latestVersion, 'green')}`);
849
- console.log();
850
- rl.question(`${color('Upgrade now? (y/N)', 'cyan')} `, async (answer) => {
851
- if (answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes') {
852
- console.log();
853
- const success = await performUpgrade();
854
- if (success) {
855
- console.log();
856
- console.log(color('Upgrade complete!', 'green'));
857
- console.log(color('Restarting Calliope...', 'dim'));
858
- console.log();
859
- const { spawn } = await import('child_process');
860
- const child = spawn(process.argv[0], process.argv.slice(1), {
861
- stdio: 'inherit',
862
- detached: true,
863
- });
864
- child.unref();
865
- process.exit(0);
866
- }
867
- else {
868
- console.log();
869
- console.log(color('Upgrade failed. Try manually:', 'red'));
870
- console.log(color(' npm install -g @calliopelabs/cli@latest', 'dim'));
871
- console.log();
872
- }
873
- }
874
- else {
875
- console.log(color('Upgrade cancelled.', 'dim'));
876
- console.log();
877
- }
878
- });
879
- }
880
- function printHelp() {
881
- console.log();
882
- console.log(color('Commands:', 'bold'));
883
- console.log(' /help, /h Show this help');
884
- console.log(' /provider <name> Switch AI provider');
885
- console.log(' /model [name] Set model (interactive if no name)');
886
- console.log(' /models Browse and select available models');
887
- console.log(' /route [on|off] Auto model routing by complexity');
888
- console.log(' /persona <name> Switch persona (calliope, professional, minimal)');
889
- console.log(' /clear Clear conversation');
890
- console.log(' /status Show current status');
891
- console.log();
892
- console.log(color('Mode & Settings:', 'bold'));
893
- console.log(' /mode [plan|hybrid|work] Switch modes');
894
- console.log(' /work Quick switch to work mode');
895
- console.log(' /plan Quick switch to plan mode');
896
- console.log(' /set <key> <val> Change settings (maxIterations, sessionLogLimit)');
897
- console.log(' /confirm [on|off] Toggle confirmation for risky ops');
898
- console.log(' /debug [on|off] Show state / toggle debug logging');
899
- console.log();
900
- console.log(color('Memory & Context:', 'bold'));
901
- console.log(' /memory [init|show|add|global] Project memory');
902
- console.log(' /context Show loaded context');
903
- console.log(' /summarize [context|compact] Summarize conversation');
904
- console.log(' /search <query> Search conversation');
905
- console.log();
906
- console.log(color('Scope & Security:', 'bold'));
907
- console.log(' /scope [details|reset] Show/manage file access scope');
908
- console.log(' /add-dir <path> Add directory to scope');
909
- console.log(' /remove-dir <path> Remove directory from scope');
910
- console.log(' /sandbox [mode] Sandbox status or set mode (auto|native|docker|off)');
911
- console.log();
912
- console.log(color('Navigation:', 'bold'));
913
- console.log(' /find <pattern> Fuzzy file search');
914
- console.log(' /branch [list|new|switch] Conversation branches');
915
- console.log();
916
- console.log(color('Extensions:', 'bold'));
917
- console.log(' /hooks [init|list] Pre/post tool hooks');
918
- console.log(' /theme [name|list] Color themes');
919
- console.log();
920
- console.log(color('HUD:', 'bold'));
921
- console.log(' /skin [name|list] Switch visual skin');
922
- console.log(' /palette [name|list] Switch color palette');
923
- console.log(' /companion [name|list] Switch AI companion');
924
- console.log(' /hud Show HUD status');
925
- console.log();
926
- console.log(color('Agent Loop:', 'bold'));
927
- console.log(' /loop "<prompt>" Start autonomous loop (default: unlimited)');
928
- console.log(' --max-iterations N');
929
- console.log(' --completion-promise "text"');
930
- console.log(' /cancel-loop Stop active loop');
931
- console.log(' /breakloop Stop active loop');
932
- console.log();
933
- console.log(color('Info & Config:', 'bold'));
934
- console.log(' /session Show session info');
935
- console.log(' /log Show iteration/run log');
936
- console.log(' /cost [reset] Show cost tracking');
937
- console.log(' /setup Reconfigure');
938
- console.log(' /config Show config path');
939
- console.log(' /upgrade Check for and install updates');
940
- console.log(' /exit Exit');
941
- console.log();
942
- }
943
- //# sourceMappingURL=commands.js.map