@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
package/dist/hooks.js CHANGED
@@ -18,19 +18,61 @@ function debugLog(message, ...args) {
18
18
  // ============================================================================
19
19
  const HOOKS_DIR = path.join(os.homedir(), '.calliope-cli', 'hooks');
20
20
  const HOOKS_FILE = path.join(HOOKS_DIR, 'hooks.json');
21
+ /**
22
+ * Events on which a hook may veto an operation (exit code 42). For these
23
+ * events the hook MUST be awaited so its blocking result is honored, even
24
+ * if the hook is flagged `async`. Otherwise an `async: true` flag could
25
+ * silently neutralize a guardrail.
26
+ */
27
+ const BLOCKING_EVENTS = new Set([
28
+ 'pre-tool',
29
+ 'pre-shell',
30
+ 'pre-write',
31
+ 'pre-read',
32
+ 'session-start',
33
+ ]);
21
34
  function ensureHooksDir() {
22
35
  if (!fs.existsSync(HOOKS_DIR)) {
23
- fs.mkdirSync(HOOKS_DIR, { recursive: true });
36
+ fs.mkdirSync(HOOKS_DIR, { recursive: true, mode: 0o700 });
24
37
  }
25
38
  }
26
39
  /**
27
- * Load hooks configuration
40
+ * hooks.json is a trust boundary: its `command` strings run as arbitrary
41
+ * shell on routine events. Refuse to load it if it is writable by group or
42
+ * other, since any process that can write it gains persistent code-exec.
43
+ * Returns true if safe to load.
44
+ */
45
+ function hooksFileIsSafe() {
46
+ try {
47
+ const mode = fs.statSync(HOOKS_FILE).mode;
48
+ // Reject if group-writable (0o020) or world-writable (0o002).
49
+ if (mode & 0o022) {
50
+ debugLog(`Refusing to load hooks.json: file is group/world-writable (mode ${(mode & 0o777).toString(8)}). ` +
51
+ `Run: chmod 600 ${HOOKS_FILE}`);
52
+ return false;
53
+ }
54
+ return true;
55
+ }
56
+ catch {
57
+ return false;
58
+ }
59
+ }
60
+ /**
61
+ * Load hooks configuration.
62
+ *
63
+ * SECURITY: hooks.json is a trusted file — its `command` strings are executed
64
+ * as shell. It must not be writable by group/other, and the directory must
65
+ * never be agent-writable. Hooks are refused (not executed) if the file has
66
+ * loose permissions.
28
67
  */
29
68
  export function loadHooks() {
30
69
  ensureHooksDir();
31
70
  if (!fs.existsSync(HOOKS_FILE)) {
32
71
  return [];
33
72
  }
73
+ if (!hooksFileIsSafe()) {
74
+ return [];
75
+ }
34
76
  try {
35
77
  return JSON.parse(fs.readFileSync(HOOKS_FILE, 'utf-8'));
36
78
  }
@@ -39,11 +81,19 @@ export function loadHooks() {
39
81
  }
40
82
  }
41
83
  /**
42
- * Save hooks configuration
84
+ * Save hooks configuration. Written with restrictive (0600) permissions so the
85
+ * trusted command list is not exposed to or writable by other users.
43
86
  */
44
87
  export function saveHooks(hooks) {
45
88
  ensureHooksDir();
46
- fs.writeFileSync(HOOKS_FILE, JSON.stringify(hooks, null, 2));
89
+ fs.writeFileSync(HOOKS_FILE, JSON.stringify(hooks, null, 2), { mode: 0o600 });
90
+ // writeFileSync `mode` only applies on create; enforce perms on existing files too.
91
+ try {
92
+ fs.chmodSync(HOOKS_FILE, 0o600);
93
+ }
94
+ catch {
95
+ /* best effort */
96
+ }
47
97
  }
48
98
  // ============================================================================
49
99
  // Hook Management
@@ -114,28 +164,58 @@ async function runHookCommand(hook, context) {
114
164
  if (context.toolArgs) {
115
165
  env.CALLIOPE_TOOL_ARGS = JSON.stringify(context.toolArgs);
116
166
  }
167
+ // `detached` puts the shell and its children in their own process group so
168
+ // the timeout can kill the whole group (a shell child cannot escape it).
117
169
  const proc = spawn('sh', ['-c', hook.command], {
118
170
  env,
119
171
  stdio: ['pipe', 'pipe', 'pipe'],
120
- timeout,
172
+ detached: true,
121
173
  });
122
174
  let stdout = '';
123
175
  let stderr = '';
176
+ let timedOut = false;
177
+ let killTimer;
124
178
  proc.stdout?.on('data', (data) => {
125
179
  stdout += data.toString();
126
180
  });
127
181
  proc.stderr?.on('data', (data) => {
128
182
  stderr += data.toString();
129
183
  });
184
+ // Signal the whole process group (negative pid) so the shell's children die
185
+ // too. Fall back to signalling the process directly if the group is gone.
186
+ const signalGroup = (signal) => {
187
+ try {
188
+ if (proc.pid !== undefined) {
189
+ process.kill(-proc.pid, signal);
190
+ }
191
+ }
192
+ catch {
193
+ try {
194
+ proc.kill(signal);
195
+ }
196
+ catch {
197
+ /* already dead */
198
+ }
199
+ }
200
+ };
201
+ // Hard timeout: SIGTERM, then SIGKILL after a short grace period so a
202
+ // command that traps/ignores SIGTERM cannot outlive its timeout.
130
203
  const timer = setTimeout(() => {
131
- proc.kill();
132
- resolve({
133
- success: false,
134
- error: 'Hook timed out',
135
- });
204
+ timedOut = true;
205
+ signalGroup('SIGTERM');
206
+ killTimer = setTimeout(() => signalGroup('SIGKILL'), 2000);
136
207
  }, timeout);
137
208
  proc.on('close', (code) => {
138
209
  clearTimeout(timer);
210
+ if (killTimer)
211
+ clearTimeout(killTimer);
212
+ if (timedOut) {
213
+ resolve({
214
+ success: false,
215
+ error: 'Hook timed out',
216
+ });
217
+ return;
218
+ }
139
219
  // Exit code 42 means "block the operation"
140
220
  const blocked = code === 42;
141
221
  resolve({
@@ -147,6 +227,8 @@ async function runHookCommand(hook, context) {
147
227
  });
148
228
  proc.on('error', (err) => {
149
229
  clearTimeout(timer);
230
+ if (killTimer)
231
+ clearTimeout(killTimer);
150
232
  resolve({
151
233
  success: false,
152
234
  error: err.message,
@@ -187,7 +269,11 @@ export async function executeHooks(event, context) {
187
269
  if (!matches)
188
270
  continue;
189
271
  }
190
- if (hook.async) {
272
+ // For blocking events, the exit-42 veto contract must be enforced, so the
273
+ // hook is always awaited regardless of its `async` flag. Allowing
274
+ // fire-and-forget here would let `async: true` silently neutralize a
275
+ // guardrail (the discarded result could never set `blocked`).
276
+ if (hook.async && !BLOCKING_EVENTS.has(event)) {
191
277
  // Fire and forget with debug logging
192
278
  runHookCommand(hook, fullContext).catch((err) => {
193
279
  debugLog(`Async hook '${hook.id}' failed:`, err instanceof Error ? err.message : err);
package/dist/hooks.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"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"}
package/dist/hud/api.d.ts CHANGED
@@ -1,35 +1,20 @@
1
1
  /**
2
2
  * HUD API
3
3
  *
4
- * State management, discovery, and helper functions.
4
+ * Palette state management plus Ink/ANSI color helpers. The CLI ships a single
5
+ * built-in skin and three palettes (default / light / monochrome) mapped from
6
+ * the dark / light / no-color themes.
5
7
  */
6
8
  import type { Skin, Palette, BoxChars, SemanticColorKey } from './types.js';
7
- export declare function getSkin(name?: string): Skin;
8
- export declare function applySkin(name: string): boolean;
9
9
  export declare function getCurrentSkin(): Skin;
10
- export declare function listSkins(): Array<{
11
- name: string;
12
- description: string;
13
- custom: boolean;
14
- }>;
15
10
  export declare function getPalette(name?: string): Palette;
16
11
  export declare function applyPalette(name: string): boolean;
17
12
  export declare function getCurrentPalette(): Palette;
18
- export declare function listPalettes(): Array<{
19
- name: string;
20
- description: string;
21
- custom: boolean;
22
- }>;
23
- export declare function applyHUD(skinName: string, paletteName: string, _companionName?: string): void;
24
- export declare function discoverSkins(): Skin[];
25
- export declare function discoverPalettes(): Palette[];
26
13
  export declare function getBoxChars(skin?: Skin): BoxChars;
27
14
  export declare function getSpinnerFrames(skin?: Skin): string[];
28
15
  export declare function getPaletteColor(key: SemanticColorKey): string;
29
16
  export declare function paletteColorize(text: string, key: SemanticColorKey): string;
30
17
  export declare function getInkColor(key: SemanticColorKey): string;
31
18
  export declare function getInkBorderStyle(skin?: Skin): string;
32
- export declare function saveCustomSkin(skin: Skin): void;
33
- export declare function saveCustomPalette(palette: Palette): void;
34
19
  export declare function clearHUDCache(): void;
35
20
  //# sourceMappingURL=api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/hud/api.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAiB,MAAM,YAAY,CAAC;AAgL3F,wBAAgB,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAqB3C;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAO/C;AAED,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAED,wBAAgB,SAAS,IAAI,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,CA6BzF;AAMD,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAqBjD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAOlD;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAED,wBAAgB,YAAY,IAAI,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,CA6B5F;AAMD,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAG7F;AAMD,wBAAgB,aAAa,IAAI,IAAI,EAAE,CAsBtC;AAED,wBAAgB,gBAAgB,IAAI,OAAO,EAAE,CAsB5C;AAMD,wBAAgB,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,QAAQ,CAMjD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,EAAE,CAMtD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,gBAAgB,GAAG,MAAM,CAG7D;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,gBAAgB,GAAG,MAAM,CAG3E;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,gBAAgB,GAAG,MAAM,CAGzD;AA0BD,wBAAgB,iBAAiB,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,CAUrD;AAMD,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAM/C;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAMxD;AAED,wBAAgB,aAAa,IAAI,IAAI,CAGpC"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/hud/api.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAc5E,wBAAgB,cAAc,IAAI,IAAI,CAErC;AAMD,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAKjD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAMlD;AAED,wBAAgB,iBAAiB,IAAI,OAAO,CAE3C;AAMD,wBAAgB,WAAW,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,QAAQ,CAMjD;AAED,wBAAgB,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,EAAE,CAMtD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,gBAAgB,GAAG,MAAM,CAG7D;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,gBAAgB,GAAG,MAAM,CAG3E;AAED,wBAAgB,WAAW,CAAC,GAAG,EAAE,gBAAgB,GAAG,MAAM,CAGzD;AA0BD,wBAAgB,iBAAiB,CAAC,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,CAUrD;AAED,wBAAgB,aAAa,IAAI,IAAI,CAEpC"}
package/dist/hud/api.js CHANGED
@@ -1,284 +1,35 @@
1
1
  /**
2
2
  * HUD API
3
3
  *
4
- * State management, discovery, and helper functions.
4
+ * Palette state management plus Ink/ANSI color helpers. The CLI ships a single
5
+ * built-in skin and three palettes (default / light / monochrome) mapped from
6
+ * the dark / light / no-color themes.
5
7
  */
6
- import * as fs from 'fs';
7
- import * as path from 'path';
8
- import * as os from 'os';
9
8
  import { colors as ANSI } from '../styles.js';
10
9
  import { SKINS, BOX_STYLES, SPINNER_SETS } from './skins.js';
11
10
  import { PALETTES } from './palettes.js';
12
11
  // ============================================================================
13
- // Schema Validation
14
- // ============================================================================
15
- /** Maximum size for a custom JSON file (1MB) */
16
- const MAX_CUSTOM_FILE_SIZE = 1_048_576;
17
- /** Maximum number of banner art lines */
18
- const MAX_BANNER_ART_LINES = 100;
19
- /** Maximum length of any single string field */
20
- const MAX_STRING_LENGTH = 1000;
21
- /**
22
- * Strip ANSI escape sequences that could manipulate terminal state
23
- * beyond standard color codes (CSI sequences for cursor movement, screen clear, etc.)
24
- */
25
- function sanitizeString(s) {
26
- // Remove OSC (Operating System Command) sequences - potential for title/clipboard injection
27
- // Remove CSI sequences for cursor movement, erase, scroll (but keep SGR color codes \e[...m)
28
- return s
29
- .replace(/\x1b\][^\x07\x1b]*(?:\x07|\x1b\\)/g, '') // OSC sequences
30
- .replace(/\x1b\[[\d;]*[ABCDEFGHJKSTfnsu]/g, '') // CSI cursor/erase sequences
31
- .replace(/\x1b\[\?[\d;]*[hl]/g, ''); // CSI private mode set/reset
32
- }
33
- /**
34
- * Validate and sanitize a loaded custom Skin JSON object.
35
- * Returns a validated Skin or null if the data is invalid.
36
- */
37
- function validateSkin(data) {
38
- if (typeof data !== 'object' || data === null)
39
- return null;
40
- const d = data;
41
- // Required string fields
42
- if (typeof d.name !== 'string' || d.name.length === 0 || d.name.length > MAX_STRING_LENGTH)
43
- return null;
44
- if (typeof d.description !== 'string' || d.description.length > MAX_STRING_LENGTH)
45
- return null;
46
- // banner
47
- if (typeof d.banner !== 'object' || d.banner === null)
48
- return null;
49
- const banner = d.banner;
50
- if (!Array.isArray(banner.art))
51
- return null;
52
- if (banner.art.length > MAX_BANNER_ART_LINES)
53
- return null;
54
- for (let i = 0; i < banner.art.length; i++) {
55
- if (typeof banner.art[i] !== 'string')
56
- return null;
57
- if (banner.art[i].length > MAX_STRING_LENGTH)
58
- return null;
59
- banner.art[i] = sanitizeString(banner.art[i]);
60
- }
61
- const validBannerStyles = ['full', 'compact', 'none'];
62
- if (typeof banner.style !== 'string' || !validBannerStyles.includes(banner.style))
63
- return null;
64
- // borders
65
- if (typeof d.borders !== 'object' || d.borders === null)
66
- return null;
67
- const borders = d.borders;
68
- const validBorderStyles = ['rounded', 'sharp', 'double', 'ascii', 'custom', 'none'];
69
- if (typeof borders.style !== 'string' || !validBorderStyles.includes(borders.style))
70
- return null;
71
- // decorations
72
- if (typeof d.decorations !== 'object' || d.decorations === null)
73
- return null;
74
- const decorations = d.decorations;
75
- if (typeof decorations.promptPrefix !== 'string')
76
- return null;
77
- if (typeof decorations.assistantPrefix !== 'string')
78
- return null;
79
- if (typeof decorations.toolPrefix !== 'string')
80
- return null;
81
- if (typeof decorations.toolSuffix !== 'string')
82
- return null;
83
- if (typeof decorations.separator !== 'string')
84
- return null;
85
- const validSpinners = ['braille', 'dots', 'simple', 'blocks', 'custom'];
86
- if (typeof decorations.spinner !== 'string' || !validSpinners.includes(decorations.spinner))
87
- return null;
88
- // Sanitize decoration strings
89
- decorations.promptPrefix = sanitizeString(decorations.promptPrefix);
90
- decorations.assistantPrefix = sanitizeString(decorations.assistantPrefix);
91
- decorations.toolPrefix = sanitizeString(decorations.toolPrefix);
92
- decorations.toolSuffix = sanitizeString(decorations.toolSuffix);
93
- decorations.separator = sanitizeString(decorations.separator);
94
- // diff
95
- if (typeof d.diff !== 'object' || d.diff === null)
96
- return null;
97
- const diff = d.diff;
98
- const validDiffStyles = ['inline', 'unified', 'side-by-side'];
99
- if (typeof diff.style !== 'string' || !validDiffStyles.includes(diff.style))
100
- return null;
101
- if (typeof diff.showLineNumbers !== 'boolean')
102
- return null;
103
- if (typeof diff.contextLines !== 'number')
104
- return null;
105
- if (typeof diff.maxLineWidth !== 'number')
106
- return null;
107
- if (typeof diff.wordDiff !== 'boolean')
108
- return null;
109
- // density
110
- const validDensities = ['normal', 'compact', 'spacious'];
111
- if (typeof d.density !== 'string' || !validDensities.includes(d.density))
112
- return null;
113
- // responsive
114
- if (typeof d.responsive !== 'object' || d.responsive === null)
115
- return null;
116
- const responsive = d.responsive;
117
- if (typeof responsive.compact !== 'number' || typeof responsive.wide !== 'number')
118
- return null;
119
- return data;
120
- }
121
- /** Required keys for a PaletteColors object */
122
- const PALETTE_COLOR_KEYS = [
123
- 'primary', 'secondary', 'accent',
124
- 'text', 'textDim', 'textBold',
125
- 'user', 'assistant', 'system', 'error',
126
- 'codeKeyword', 'codeString', 'codeNumber', 'codeComment', 'codeFunction',
127
- 'diffAdd', 'diffRemove', 'diffContext',
128
- 'success', 'warning', 'info',
129
- 'border', 'background', 'selection',
130
- ];
131
- /**
132
- * Validate and sanitize a loaded custom Palette JSON object.
133
- * Returns a validated Palette or null if the data is invalid.
134
- */
135
- function validatePalette(data) {
136
- if (typeof data !== 'object' || data === null)
137
- return null;
138
- const d = data;
139
- if (typeof d.name !== 'string' || d.name.length === 0 || d.name.length > MAX_STRING_LENGTH)
140
- return null;
141
- if (typeof d.description !== 'string' || d.description.length > MAX_STRING_LENGTH)
142
- return null;
143
- if (typeof d.colors !== 'object' || d.colors === null)
144
- return null;
145
- const colors = d.colors;
146
- // Validate all required color keys exist and are strings (ANSI codes)
147
- for (const key of PALETTE_COLOR_KEYS) {
148
- if (typeof colors[key] !== 'string')
149
- return null;
150
- if (colors[key].length > MAX_STRING_LENGTH)
151
- return null;
152
- // Sanitize color values
153
- colors[key] = sanitizeString(colors[key]);
154
- }
155
- return data;
156
- }
157
- /**
158
- * Safely load and validate a custom JSON file with size limits.
159
- */
160
- function loadCustomJSON(filePath) {
161
- try {
162
- const stat = fs.statSync(filePath);
163
- if (stat.size > MAX_CUSTOM_FILE_SIZE) {
164
- console.warn(`Custom theme file too large (${stat.size} bytes, max ${MAX_CUSTOM_FILE_SIZE}): ${filePath}`);
165
- return null;
166
- }
167
- return JSON.parse(fs.readFileSync(filePath, 'utf-8'));
168
- }
169
- catch {
170
- return null;
171
- }
172
- }
173
- // ============================================================================
174
12
  // State
175
13
  // ============================================================================
176
- let currentSkin = null;
177
14
  let currentPalette = null;
178
15
  // ============================================================================
179
- // Directories
180
- // ============================================================================
181
- const HUD_DIR = path.join(os.homedir(), '.calliope-cli');
182
- const SKINS_DIR = path.join(HUD_DIR, 'skins');
183
- const PALETTES_DIR = path.join(HUD_DIR, 'palettes');
184
- function ensureDir(dir) {
185
- if (!fs.existsSync(dir)) {
186
- fs.mkdirSync(dir, { recursive: true });
187
- }
188
- }
189
- // ============================================================================
190
- // Skin Management
16
+ // Skin (single built-in skin)
191
17
  // ============================================================================
192
- export function getSkin(name) {
193
- if (!name) {
194
- if (currentSkin)
195
- return currentSkin;
196
- return SKINS.clean;
197
- }
198
- if (SKINS[name])
199
- return SKINS[name];
200
- // Check custom skins directory
201
- ensureDir(SKINS_DIR);
202
- const customPath = path.join(SKINS_DIR, `${name}.json`);
203
- if (fs.existsSync(customPath)) {
204
- const raw = loadCustomJSON(customPath);
205
- if (raw) {
206
- const validated = validateSkin(raw);
207
- if (validated)
208
- return validated;
209
- console.warn(`Custom skin "${name}" failed schema validation — using default`);
210
- }
211
- }
212
- return SKINS.clean;
213
- }
214
- export function applySkin(name) {
215
- const skin = getSkin(name);
216
- if (skin.name === name || SKINS[name]) {
217
- currentSkin = skin;
218
- return true;
219
- }
220
- return false;
221
- }
222
18
  export function getCurrentSkin() {
223
- return currentSkin || SKINS.clean;
224
- }
225
- export function listSkins() {
226
- const result = [];
227
- for (const [name, skin] of Object.entries(SKINS)) {
228
- result.push({ name, description: skin.description, custom: false });
229
- }
230
- ensureDir(SKINS_DIR);
231
- try {
232
- const files = fs.readdirSync(SKINS_DIR);
233
- for (const file of files) {
234
- if (file.endsWith('.json')) {
235
- const name = file.slice(0, -5);
236
- if (!SKINS[name]) {
237
- const raw = loadCustomJSON(path.join(SKINS_DIR, file));
238
- if (raw) {
239
- const skin = validateSkin(raw);
240
- if (skin) {
241
- result.push({ name, description: skin.description || '', custom: true });
242
- }
243
- }
244
- }
245
- }
246
- }
247
- }
248
- catch {
249
- // Directory read failed
250
- }
251
- return result;
19
+ return SKINS.clean;
252
20
  }
253
21
  // ============================================================================
254
22
  // Palette Management
255
23
  // ============================================================================
256
24
  export function getPalette(name) {
257
25
  if (!name) {
258
- if (currentPalette)
259
- return currentPalette;
260
- return PALETTES.default;
261
- }
262
- if (PALETTES[name])
263
- return PALETTES[name];
264
- // Check custom palettes directory
265
- ensureDir(PALETTES_DIR);
266
- const customPath = path.join(PALETTES_DIR, `${name}.json`);
267
- if (fs.existsSync(customPath)) {
268
- const raw = loadCustomJSON(customPath);
269
- if (raw) {
270
- const validated = validatePalette(raw);
271
- if (validated)
272
- return validated;
273
- console.warn(`Custom palette "${name}" failed schema validation — using default`);
274
- }
26
+ return currentPalette || PALETTES.default;
275
27
  }
276
- return PALETTES.default;
28
+ return PALETTES[name] || PALETTES.default;
277
29
  }
278
30
  export function applyPalette(name) {
279
- const palette = getPalette(name);
280
- if (palette.name === name || PALETTES[name]) {
281
- currentPalette = palette;
31
+ if (PALETTES[name]) {
32
+ currentPalette = PALETTES[name];
282
33
  return true;
283
34
  }
284
35
  return false;
@@ -286,88 +37,6 @@ export function applyPalette(name) {
286
37
  export function getCurrentPalette() {
287
38
  return currentPalette || PALETTES.default;
288
39
  }
289
- export function listPalettes() {
290
- const result = [];
291
- for (const [name, palette] of Object.entries(PALETTES)) {
292
- result.push({ name, description: palette.description, custom: false });
293
- }
294
- ensureDir(PALETTES_DIR);
295
- try {
296
- const files = fs.readdirSync(PALETTES_DIR);
297
- for (const file of files) {
298
- if (file.endsWith('.json')) {
299
- const name = file.slice(0, -5);
300
- if (!PALETTES[name]) {
301
- const raw = loadCustomJSON(path.join(PALETTES_DIR, file));
302
- if (raw) {
303
- const palette = validatePalette(raw);
304
- if (palette) {
305
- result.push({ name, description: palette.description || '', custom: true });
306
- }
307
- }
308
- }
309
- }
310
- }
311
- }
312
- catch {
313
- // Directory read failed
314
- }
315
- return result;
316
- }
317
- // ============================================================================
318
- // HUD Apply
319
- // ============================================================================
320
- export function applyHUD(skinName, paletteName, _companionName) {
321
- applySkin(skinName);
322
- applyPalette(paletteName);
323
- }
324
- // ============================================================================
325
- // Discovery
326
- // ============================================================================
327
- export function discoverSkins() {
328
- const result = Object.values(SKINS);
329
- ensureDir(SKINS_DIR);
330
- try {
331
- const files = fs.readdirSync(SKINS_DIR);
332
- for (const file of files) {
333
- if (file.endsWith('.json')) {
334
- const raw = loadCustomJSON(path.join(SKINS_DIR, file));
335
- if (raw) {
336
- const skin = validateSkin(raw);
337
- if (skin && skin.name && !SKINS[skin.name]) {
338
- result.push(skin);
339
- }
340
- }
341
- }
342
- }
343
- }
344
- catch {
345
- // Directory read failed
346
- }
347
- return result;
348
- }
349
- export function discoverPalettes() {
350
- const result = Object.values(PALETTES);
351
- ensureDir(PALETTES_DIR);
352
- try {
353
- const files = fs.readdirSync(PALETTES_DIR);
354
- for (const file of files) {
355
- if (file.endsWith('.json')) {
356
- const raw = loadCustomJSON(path.join(PALETTES_DIR, file));
357
- if (raw) {
358
- const palette = validatePalette(raw);
359
- if (palette && palette.name && !PALETTES[palette.name]) {
360
- result.push(palette);
361
- }
362
- }
363
- }
364
- }
365
- }
366
- catch {
367
- // Directory read failed
368
- }
369
- return result;
370
- }
371
40
  // ============================================================================
372
41
  // Helpers
373
42
  // ============================================================================
@@ -430,19 +99,7 @@ export function getInkBorderStyle(skin) {
430
99
  };
431
100
  return map[s.borders.style] || 'round';
432
101
  }
433
- // ============================================================================
434
- // Save custom skin/palette
435
- // ============================================================================
436
- export function saveCustomSkin(skin) {
437
- ensureDir(SKINS_DIR);
438
- fs.writeFileSync(path.join(SKINS_DIR, `${skin.name}.json`), JSON.stringify(skin, null, 2));
439
- }
440
- export function saveCustomPalette(palette) {
441
- ensureDir(PALETTES_DIR);
442
- fs.writeFileSync(path.join(PALETTES_DIR, `${palette.name}.json`), JSON.stringify(palette, null, 2));
443
- }
444
102
  export function clearHUDCache() {
445
- currentSkin = null;
446
103
  currentPalette = null;
447
104
  }
448
105
  //# sourceMappingURL=api.js.map