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