@calliopelabs/cli 3.1.0 → 3.2.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 (856) hide show
  1. package/README.md +54 -7
  2. package/dist/acp.d.ts +1 -4
  3. package/dist/acp.d.ts.map +1 -1
  4. package/dist/acp.js +118 -217
  5. package/dist/acp.js.map +1 -1
  6. package/dist/approvals/commands.d.ts +35 -0
  7. package/dist/approvals/commands.d.ts.map +1 -0
  8. package/dist/approvals/commands.js +51 -0
  9. package/dist/approvals/commands.js.map +1 -0
  10. package/dist/approvals/index.d.ts +6 -0
  11. package/dist/approvals/index.d.ts.map +1 -0
  12. package/dist/approvals/index.js +6 -0
  13. package/dist/approvals/index.js.map +1 -0
  14. package/dist/approvals/queue.d.ts +18 -0
  15. package/dist/approvals/queue.d.ts.map +1 -0
  16. package/dist/approvals/queue.js +46 -0
  17. package/dist/approvals/queue.js.map +1 -0
  18. package/dist/approvals/request.d.ts +13 -0
  19. package/dist/approvals/request.d.ts.map +1 -0
  20. package/dist/approvals/request.js +102 -0
  21. package/dist/approvals/request.js.map +1 -0
  22. package/dist/approvals/store.d.ts +24 -0
  23. package/dist/approvals/store.d.ts.map +1 -0
  24. package/dist/approvals/store.js +229 -0
  25. package/dist/approvals/store.js.map +1 -0
  26. package/dist/approvals/types.d.ts +27 -0
  27. package/dist/approvals/types.d.ts.map +1 -0
  28. package/dist/approvals/types.js +4 -0
  29. package/dist/approvals/types.js.map +1 -0
  30. package/dist/auto-compressor.d.ts +3 -2
  31. package/dist/auto-compressor.d.ts.map +1 -1
  32. package/dist/auto-compressor.js +9 -9
  33. package/dist/auto-compressor.js.map +1 -1
  34. package/dist/bin.d.ts.map +1 -1
  35. package/dist/bin.js +125 -22
  36. package/dist/bin.js.map +1 -1
  37. package/dist/brain/access.d.ts +65 -0
  38. package/dist/brain/access.d.ts.map +1 -0
  39. package/dist/brain/access.js +216 -0
  40. package/dist/brain/access.js.map +1 -0
  41. package/dist/brain/actions.d.ts +120 -0
  42. package/dist/brain/actions.d.ts.map +1 -0
  43. package/dist/brain/actions.js +270 -0
  44. package/dist/brain/actions.js.map +1 -0
  45. package/dist/brain/cli.d.ts +17 -0
  46. package/dist/brain/cli.d.ts.map +1 -0
  47. package/dist/brain/cli.js +206 -0
  48. package/dist/brain/cli.js.map +1 -0
  49. package/dist/brain/index.d.ts +16 -0
  50. package/dist/brain/index.d.ts.map +1 -0
  51. package/dist/brain/index.js +16 -0
  52. package/dist/brain/index.js.map +1 -0
  53. package/dist/brain/journal.d.ts +17 -0
  54. package/dist/brain/journal.d.ts.map +1 -0
  55. package/dist/brain/journal.js +189 -0
  56. package/dist/brain/journal.js.map +1 -0
  57. package/dist/brain/kg.d.ts +23 -0
  58. package/dist/brain/kg.d.ts.map +1 -0
  59. package/dist/brain/kg.js +36 -0
  60. package/dist/brain/kg.js.map +1 -0
  61. package/dist/brain/presentation.d.ts +3 -0
  62. package/dist/brain/presentation.d.ts.map +1 -0
  63. package/dist/brain/presentation.js +48 -0
  64. package/dist/brain/presentation.js.map +1 -0
  65. package/dist/brain/queries.d.ts +179 -0
  66. package/dist/brain/queries.d.ts.map +1 -0
  67. package/dist/brain/queries.js +210 -0
  68. package/dist/brain/queries.js.map +1 -0
  69. package/dist/brain/run-ingest.d.ts +29 -0
  70. package/dist/brain/run-ingest.d.ts.map +1 -0
  71. package/dist/brain/run-ingest.js +200 -0
  72. package/dist/brain/run-ingest.js.map +1 -0
  73. package/dist/brain/sqlite.d.ts +19 -0
  74. package/dist/brain/sqlite.d.ts.map +1 -0
  75. package/dist/brain/sqlite.js +252 -0
  76. package/dist/brain/sqlite.js.map +1 -0
  77. package/dist/brain/store.d.ts +31 -0
  78. package/dist/brain/store.d.ts.map +1 -0
  79. package/dist/brain/store.js +324 -0
  80. package/dist/brain/store.js.map +1 -0
  81. package/dist/brain/tool-query.d.ts +6 -0
  82. package/dist/brain/tool-query.d.ts.map +1 -0
  83. package/dist/brain/tool-query.js +42 -0
  84. package/dist/brain/tool-query.js.map +1 -0
  85. package/dist/brain/tools.d.ts +13 -0
  86. package/dist/brain/tools.d.ts.map +1 -0
  87. package/dist/brain/tools.js +20 -0
  88. package/dist/brain/tools.js.map +1 -0
  89. package/dist/brain/transfer.d.ts +57 -0
  90. package/dist/brain/transfer.d.ts.map +1 -0
  91. package/dist/brain/transfer.js +266 -0
  92. package/dist/brain/transfer.js.map +1 -0
  93. package/dist/brain/types.d.ts +145 -0
  94. package/dist/brain/types.d.ts.map +1 -0
  95. package/dist/brain/types.js +38 -0
  96. package/dist/brain/types.js.map +1 -0
  97. package/dist/brain/validation.d.ts +15 -0
  98. package/dist/brain/validation.d.ts.map +1 -0
  99. package/dist/brain/validation.js +163 -0
  100. package/dist/brain/validation.js.map +1 -0
  101. package/dist/budget.d.ts +5 -4
  102. package/dist/budget.d.ts.map +1 -1
  103. package/dist/budget.js +16 -38
  104. package/dist/budget.js.map +1 -1
  105. package/dist/cancellation.d.ts +8 -0
  106. package/dist/cancellation.d.ts.map +1 -0
  107. package/dist/cancellation.js +42 -0
  108. package/dist/cancellation.js.map +1 -0
  109. package/dist/checkpoint.d.ts +2 -2
  110. package/dist/checkpoint.d.ts.map +1 -1
  111. package/dist/checkpoint.js +5 -5
  112. package/dist/checkpoint.js.map +1 -1
  113. package/dist/config.d.ts +13 -0
  114. package/dist/config.d.ts.map +1 -1
  115. package/dist/config.js +32 -8
  116. package/dist/config.js.map +1 -1
  117. package/dist/doctor.d.ts +30 -0
  118. package/dist/doctor.d.ts.map +1 -0
  119. package/dist/doctor.js +124 -0
  120. package/dist/doctor.js.map +1 -0
  121. package/dist/errors.d.ts +15 -0
  122. package/dist/errors.d.ts.map +1 -1
  123. package/dist/errors.js +33 -9
  124. package/dist/errors.js.map +1 -1
  125. package/dist/execution/attribution.d.ts +17 -0
  126. package/dist/execution/attribution.d.ts.map +1 -0
  127. package/dist/execution/attribution.js +21 -0
  128. package/dist/execution/attribution.js.map +1 -0
  129. package/dist/execution/authority.d.ts +22 -0
  130. package/dist/execution/authority.d.ts.map +1 -0
  131. package/dist/execution/authority.js +134 -0
  132. package/dist/execution/authority.js.map +1 -0
  133. package/dist/execution/billing.d.ts +100 -0
  134. package/dist/execution/billing.d.ts.map +1 -0
  135. package/dist/execution/billing.js +166 -0
  136. package/dist/execution/billing.js.map +1 -0
  137. package/dist/execution/child-grants.d.ts +9 -0
  138. package/dist/execution/child-grants.d.ts.map +1 -0
  139. package/dist/execution/child-grants.js +55 -0
  140. package/dist/execution/child-grants.js.map +1 -0
  141. package/dist/execution/files.d.ts +6 -0
  142. package/dist/execution/files.d.ts.map +1 -0
  143. package/dist/execution/files.js +159 -0
  144. package/dist/execution/files.js.map +1 -0
  145. package/dist/execution/guard.d.ts +50 -0
  146. package/dist/execution/guard.d.ts.map +1 -0
  147. package/dist/execution/guard.js +158 -0
  148. package/dist/execution/guard.js.map +1 -0
  149. package/dist/execution/index.d.ts +12 -0
  150. package/dist/execution/index.d.ts.map +1 -0
  151. package/dist/execution/index.js +12 -0
  152. package/dist/execution/index.js.map +1 -0
  153. package/dist/execution/ledger.d.ts +23 -0
  154. package/dist/execution/ledger.d.ts.map +1 -0
  155. package/dist/execution/ledger.js +379 -0
  156. package/dist/execution/ledger.js.map +1 -0
  157. package/dist/execution/project-spend.d.ts +45 -0
  158. package/dist/execution/project-spend.d.ts.map +1 -0
  159. package/dist/execution/project-spend.js +274 -0
  160. package/dist/execution/project-spend.js.map +1 -0
  161. package/dist/execution/quote.d.ts +19 -0
  162. package/dist/execution/quote.d.ts.map +1 -0
  163. package/dist/execution/quote.js +116 -0
  164. package/dist/execution/quote.js.map +1 -0
  165. package/dist/execution/types.d.ts +113 -0
  166. package/dist/execution/types.d.ts.map +1 -0
  167. package/dist/execution/types.js +9 -0
  168. package/dist/execution/types.js.map +1 -0
  169. package/dist/execution/writer-recovery.d.ts +3 -0
  170. package/dist/execution/writer-recovery.d.ts.map +1 -0
  171. package/dist/execution/writer-recovery.js +85 -0
  172. package/dist/execution/writer-recovery.js.map +1 -0
  173. package/dist/goals/accounting.d.ts +69 -0
  174. package/dist/goals/accounting.d.ts.map +1 -0
  175. package/dist/goals/accounting.js +100 -0
  176. package/dist/goals/accounting.js.map +1 -0
  177. package/dist/goals/actions.d.ts +33 -0
  178. package/dist/goals/actions.d.ts.map +1 -0
  179. package/dist/goals/actions.js +261 -0
  180. package/dist/goals/actions.js.map +1 -0
  181. package/dist/goals/authority.d.ts +9 -0
  182. package/dist/goals/authority.d.ts.map +1 -0
  183. package/dist/goals/authority.js +47 -0
  184. package/dist/goals/authority.js.map +1 -0
  185. package/dist/goals/cli.d.ts +10 -0
  186. package/dist/goals/cli.d.ts.map +1 -0
  187. package/dist/goals/cli.js +169 -0
  188. package/dist/goals/cli.js.map +1 -0
  189. package/dist/goals/contracts.d.ts +18 -0
  190. package/dist/goals/contracts.d.ts.map +1 -0
  191. package/dist/goals/contracts.js +127 -0
  192. package/dist/goals/contracts.js.map +1 -0
  193. package/dist/goals/index.d.ts +17 -0
  194. package/dist/goals/index.d.ts.map +1 -0
  195. package/dist/goals/index.js +16 -0
  196. package/dist/goals/index.js.map +1 -0
  197. package/dist/goals/journal.d.ts +5 -0
  198. package/dist/goals/journal.d.ts.map +1 -0
  199. package/dist/goals/journal.js +142 -0
  200. package/dist/goals/journal.js.map +1 -0
  201. package/dist/goals/metrics.d.ts +53 -0
  202. package/dist/goals/metrics.d.ts.map +1 -0
  203. package/dist/goals/metrics.js +141 -0
  204. package/dist/goals/metrics.js.map +1 -0
  205. package/dist/goals/repair.d.ts +10 -0
  206. package/dist/goals/repair.d.ts.map +1 -0
  207. package/dist/goals/repair.js +50 -0
  208. package/dist/goals/repair.js.map +1 -0
  209. package/dist/goals/routing.d.ts +18 -0
  210. package/dist/goals/routing.d.ts.map +1 -0
  211. package/dist/goals/routing.js +60 -0
  212. package/dist/goals/routing.js.map +1 -0
  213. package/dist/goals/store.d.ts +30 -0
  214. package/dist/goals/store.d.ts.map +1 -0
  215. package/dist/goals/store.js +314 -0
  216. package/dist/goals/store.js.map +1 -0
  217. package/dist/goals/supervised-cli.d.ts +5 -0
  218. package/dist/goals/supervised-cli.d.ts.map +1 -0
  219. package/dist/goals/supervised-cli.js +44 -0
  220. package/dist/goals/supervised-cli.js.map +1 -0
  221. package/dist/goals/supervised.d.ts +8 -0
  222. package/dist/goals/supervised.d.ts.map +1 -0
  223. package/dist/goals/supervised.js +65 -0
  224. package/dist/goals/supervised.js.map +1 -0
  225. package/dist/goals/team.d.ts +8 -0
  226. package/dist/goals/team.d.ts.map +1 -0
  227. package/dist/goals/team.js +64 -0
  228. package/dist/goals/team.js.map +1 -0
  229. package/dist/goals/types.d.ts +174 -0
  230. package/dist/goals/types.d.ts.map +1 -0
  231. package/dist/goals/types.js +2 -0
  232. package/dist/goals/types.js.map +1 -0
  233. package/dist/goals/validation.d.ts +17 -0
  234. package/dist/goals/validation.d.ts.map +1 -0
  235. package/dist/goals/validation.js +172 -0
  236. package/dist/goals/validation.js.map +1 -0
  237. package/dist/headless.d.ts +1 -0
  238. package/dist/headless.d.ts.map +1 -1
  239. package/dist/headless.js +98 -275
  240. package/dist/headless.js.map +1 -1
  241. package/dist/health/index.d.ts +5 -0
  242. package/dist/health/index.d.ts.map +1 -0
  243. package/dist/health/index.js +5 -0
  244. package/dist/health/index.js.map +1 -0
  245. package/dist/health/store.d.ts +24 -0
  246. package/dist/health/store.d.ts.map +1 -0
  247. package/dist/health/store.js +190 -0
  248. package/dist/health/store.js.map +1 -0
  249. package/dist/health/summary.d.ts +10 -0
  250. package/dist/health/summary.d.ts.map +1 -0
  251. package/dist/health/summary.js +95 -0
  252. package/dist/health/summary.js.map +1 -0
  253. package/dist/health/target.d.ts +3 -0
  254. package/dist/health/target.d.ts.map +1 -0
  255. package/dist/health/target.js +53 -0
  256. package/dist/health/target.js.map +1 -0
  257. package/dist/health/types.d.ts +72 -0
  258. package/dist/health/types.d.ts.map +1 -0
  259. package/dist/health/types.js +2 -0
  260. package/dist/health/types.js.map +1 -0
  261. package/dist/hooks.d.ts +7 -2
  262. package/dist/hooks.d.ts.map +1 -1
  263. package/dist/hooks.js +35 -17
  264. package/dist/hooks.js.map +1 -1
  265. package/dist/improvement/actions.d.ts +27 -0
  266. package/dist/improvement/actions.d.ts.map +1 -0
  267. package/dist/improvement/actions.js +116 -0
  268. package/dist/improvement/actions.js.map +1 -0
  269. package/dist/improvement/cli.d.ts +9 -0
  270. package/dist/improvement/cli.d.ts.map +1 -0
  271. package/dist/improvement/cli.js +58 -0
  272. package/dist/improvement/cli.js.map +1 -0
  273. package/dist/improvement/feedback.d.ts +30 -0
  274. package/dist/improvement/feedback.d.ts.map +1 -0
  275. package/dist/improvement/feedback.js +7 -0
  276. package/dist/improvement/feedback.js.map +1 -0
  277. package/dist/improvement/index.d.ts +7 -0
  278. package/dist/improvement/index.d.ts.map +1 -0
  279. package/dist/improvement/index.js +7 -0
  280. package/dist/improvement/index.js.map +1 -0
  281. package/dist/improvement/metrics.d.ts +4 -0
  282. package/dist/improvement/metrics.d.ts.map +1 -0
  283. package/dist/improvement/metrics.js +38 -0
  284. package/dist/improvement/metrics.js.map +1 -0
  285. package/dist/improvement/projection.d.ts +7 -0
  286. package/dist/improvement/projection.d.ts.map +1 -0
  287. package/dist/improvement/projection.js +135 -0
  288. package/dist/improvement/projection.js.map +1 -0
  289. package/dist/improvement/types.d.ts +115 -0
  290. package/dist/improvement/types.d.ts.map +1 -0
  291. package/dist/improvement/types.js +2 -0
  292. package/dist/improvement/types.js.map +1 -0
  293. package/dist/index.d.ts +3 -0
  294. package/dist/index.d.ts.map +1 -1
  295. package/dist/index.js +3 -0
  296. package/dist/index.js.map +1 -1
  297. package/dist/instructions.d.ts +10 -0
  298. package/dist/instructions.d.ts.map +1 -0
  299. package/dist/instructions.js +93 -0
  300. package/dist/instructions.js.map +1 -0
  301. package/dist/isolation/contracts.d.ts +42 -0
  302. package/dist/isolation/contracts.d.ts.map +1 -0
  303. package/dist/isolation/contracts.js +33 -0
  304. package/dist/isolation/contracts.js.map +1 -0
  305. package/dist/isolation/coordinator.d.ts +10 -0
  306. package/dist/isolation/coordinator.d.ts.map +1 -0
  307. package/dist/isolation/coordinator.js +79 -0
  308. package/dist/isolation/coordinator.js.map +1 -0
  309. package/dist/isolation/index.d.ts +5 -0
  310. package/dist/isolation/index.d.ts.map +1 -0
  311. package/dist/isolation/index.js +5 -0
  312. package/dist/isolation/index.js.map +1 -0
  313. package/dist/isolation/process.d.ts +11 -0
  314. package/dist/isolation/process.d.ts.map +1 -0
  315. package/dist/isolation/process.js +131 -0
  316. package/dist/isolation/process.js.map +1 -0
  317. package/dist/isolation/worktree.d.ts +25 -0
  318. package/dist/isolation/worktree.d.ts.map +1 -0
  319. package/dist/isolation/worktree.js +282 -0
  320. package/dist/isolation/worktree.js.map +1 -0
  321. package/dist/memory.d.ts.map +1 -1
  322. package/dist/memory.js +5 -1
  323. package/dist/memory.js.map +1 -1
  324. package/dist/model-detection.d.ts +14 -18
  325. package/dist/model-detection.d.ts.map +1 -1
  326. package/dist/model-detection.js +287 -149
  327. package/dist/model-detection.js.map +1 -1
  328. package/dist/models/index.d.ts +3 -0
  329. package/dist/models/index.d.ts.map +1 -0
  330. package/dist/models/index.js +3 -0
  331. package/dist/models/index.js.map +1 -0
  332. package/dist/models/metadata.d.ts +43 -0
  333. package/dist/models/metadata.d.ts.map +1 -0
  334. package/dist/models/metadata.js +72 -0
  335. package/dist/models/metadata.js.map +1 -0
  336. package/dist/models/openrouter.d.ts +6 -0
  337. package/dist/models/openrouter.d.ts.map +1 -0
  338. package/dist/models/openrouter.js +38 -0
  339. package/dist/models/openrouter.js.map +1 -0
  340. package/dist/orchestration/accounting.d.ts +35 -0
  341. package/dist/orchestration/accounting.d.ts.map +1 -0
  342. package/dist/orchestration/accounting.js +27 -0
  343. package/dist/orchestration/accounting.js.map +1 -0
  344. package/dist/orchestration/actions.d.ts +23 -0
  345. package/dist/orchestration/actions.d.ts.map +1 -0
  346. package/dist/orchestration/actions.js +65 -0
  347. package/dist/orchestration/actions.js.map +1 -0
  348. package/dist/orchestration/cli.d.ts +28 -0
  349. package/dist/orchestration/cli.d.ts.map +1 -0
  350. package/dist/orchestration/cli.js +178 -0
  351. package/dist/orchestration/cli.js.map +1 -0
  352. package/dist/orchestration/coordinator-actions.d.ts +15 -0
  353. package/dist/orchestration/coordinator-actions.d.ts.map +1 -0
  354. package/dist/orchestration/coordinator-actions.js +79 -0
  355. package/dist/orchestration/coordinator-actions.js.map +1 -0
  356. package/dist/orchestration/coordinator-types.d.ts +193 -0
  357. package/dist/orchestration/coordinator-types.d.ts.map +1 -0
  358. package/dist/orchestration/coordinator-types.js +2 -0
  359. package/dist/orchestration/coordinator-types.js.map +1 -0
  360. package/dist/orchestration/coordinator.d.ts +32 -0
  361. package/dist/orchestration/coordinator.d.ts.map +1 -0
  362. package/dist/orchestration/coordinator.js +405 -0
  363. package/dist/orchestration/coordinator.js.map +1 -0
  364. package/dist/orchestration/execution-cli.d.ts +11 -0
  365. package/dist/orchestration/execution-cli.d.ts.map +1 -0
  366. package/dist/orchestration/execution-cli.js +183 -0
  367. package/dist/orchestration/execution-cli.js.map +1 -0
  368. package/dist/orchestration/execution-journal.d.ts +15 -0
  369. package/dist/orchestration/execution-journal.d.ts.map +1 -0
  370. package/dist/orchestration/execution-journal.js +477 -0
  371. package/dist/orchestration/execution-journal.js.map +1 -0
  372. package/dist/orchestration/execution-store.d.ts +39 -0
  373. package/dist/orchestration/execution-store.d.ts.map +1 -0
  374. package/dist/orchestration/execution-store.js +325 -0
  375. package/dist/orchestration/execution-store.js.map +1 -0
  376. package/dist/orchestration/execution.d.ts +8 -0
  377. package/dist/orchestration/execution.d.ts.map +1 -0
  378. package/dist/orchestration/execution.js +47 -0
  379. package/dist/orchestration/execution.js.map +1 -0
  380. package/dist/orchestration/index.d.ts +20 -0
  381. package/dist/orchestration/index.d.ts.map +1 -0
  382. package/dist/orchestration/index.js +17 -0
  383. package/dist/orchestration/index.js.map +1 -0
  384. package/dist/orchestration/progress.d.ts +19 -0
  385. package/dist/orchestration/progress.d.ts.map +1 -0
  386. package/dist/orchestration/progress.js +20 -0
  387. package/dist/orchestration/progress.js.map +1 -0
  388. package/dist/orchestration/recovery.d.ts +4 -0
  389. package/dist/orchestration/recovery.d.ts.map +1 -0
  390. package/dist/orchestration/recovery.js +121 -0
  391. package/dist/orchestration/recovery.js.map +1 -0
  392. package/dist/orchestration/request-accounting.d.ts +35 -0
  393. package/dist/orchestration/request-accounting.d.ts.map +1 -0
  394. package/dist/orchestration/request-accounting.js +71 -0
  395. package/dist/orchestration/request-accounting.js.map +1 -0
  396. package/dist/orchestration/routing.d.ts +20 -0
  397. package/dist/orchestration/routing.d.ts.map +1 -0
  398. package/dist/orchestration/routing.js +38 -0
  399. package/dist/orchestration/routing.js.map +1 -0
  400. package/dist/orchestration/store.d.ts +26 -0
  401. package/dist/orchestration/store.d.ts.map +1 -0
  402. package/dist/orchestration/store.js +381 -0
  403. package/dist/orchestration/store.js.map +1 -0
  404. package/dist/orchestration/types.d.ts +201 -0
  405. package/dist/orchestration/types.d.ts.map +1 -0
  406. package/dist/orchestration/types.js +11 -0
  407. package/dist/orchestration/types.js.map +1 -0
  408. package/dist/orchestration/validation.d.ts +29 -0
  409. package/dist/orchestration/validation.d.ts.map +1 -0
  410. package/dist/orchestration/validation.js +440 -0
  411. package/dist/orchestration/validation.js.map +1 -0
  412. package/dist/orchestration/verification.d.ts +30 -0
  413. package/dist/orchestration/verification.d.ts.map +1 -0
  414. package/dist/orchestration/verification.js +204 -0
  415. package/dist/orchestration/verification.js.map +1 -0
  416. package/dist/orchestration/worker-context.d.ts +33 -0
  417. package/dist/orchestration/worker-context.d.ts.map +1 -0
  418. package/dist/orchestration/worker-context.js +31 -0
  419. package/dist/orchestration/worker-context.js.map +1 -0
  420. package/dist/policy.d.ts +1 -0
  421. package/dist/policy.d.ts.map +1 -1
  422. package/dist/policy.js +25 -5
  423. package/dist/policy.js.map +1 -1
  424. package/dist/preferences/controls.d.ts +21 -0
  425. package/dist/preferences/controls.d.ts.map +1 -0
  426. package/dist/preferences/controls.js +36 -0
  427. package/dist/preferences/controls.js.map +1 -0
  428. package/dist/preferences/flags.d.ts +8 -0
  429. package/dist/preferences/flags.d.ts.map +1 -0
  430. package/dist/preferences/flags.js +27 -0
  431. package/dist/preferences/flags.js.map +1 -0
  432. package/dist/preferences/index.d.ts +9 -0
  433. package/dist/preferences/index.d.ts.map +1 -0
  434. package/dist/preferences/index.js +9 -0
  435. package/dist/preferences/index.js.map +1 -0
  436. package/dist/preferences/once.d.ts +8 -0
  437. package/dist/preferences/once.d.ts.map +1 -0
  438. package/dist/preferences/once.js +28 -0
  439. package/dist/preferences/once.js.map +1 -0
  440. package/dist/preferences/resolve.d.ts +14 -0
  441. package/dist/preferences/resolve.d.ts.map +1 -0
  442. package/dist/preferences/resolve.js +58 -0
  443. package/dist/preferences/resolve.js.map +1 -0
  444. package/dist/preferences/store.d.ts +19 -0
  445. package/dist/preferences/store.d.ts.map +1 -0
  446. package/dist/preferences/store.js +147 -0
  447. package/dist/preferences/store.js.map +1 -0
  448. package/dist/preferences/submission.d.ts +16 -0
  449. package/dist/preferences/submission.d.ts.map +1 -0
  450. package/dist/preferences/submission.js +29 -0
  451. package/dist/preferences/submission.js.map +1 -0
  452. package/dist/preferences/types.d.ts +23 -0
  453. package/dist/preferences/types.d.ts.map +1 -0
  454. package/dist/preferences/types.js +2 -0
  455. package/dist/preferences/types.js.map +1 -0
  456. package/dist/preferences/validate.d.ts +3 -0
  457. package/dist/preferences/validate.d.ts.map +1 -0
  458. package/dist/preferences/validate.js +15 -0
  459. package/dist/preferences/validate.js.map +1 -0
  460. package/dist/process-cancellation.d.ts +6 -0
  461. package/dist/process-cancellation.d.ts.map +1 -0
  462. package/dist/process-cancellation.js +39 -0
  463. package/dist/process-cancellation.js.map +1 -0
  464. package/dist/providers/anthropic.d.ts +7 -2
  465. package/dist/providers/anthropic.d.ts.map +1 -1
  466. package/dist/providers/anthropic.js +72 -41
  467. package/dist/providers/anthropic.js.map +1 -1
  468. package/dist/providers/bedrock.d.ts +1 -1
  469. package/dist/providers/bedrock.d.ts.map +1 -1
  470. package/dist/providers/bedrock.js +39 -23
  471. package/dist/providers/bedrock.js.map +1 -1
  472. package/dist/providers/compat.d.ts +4 -3
  473. package/dist/providers/compat.d.ts.map +1 -1
  474. package/dist/providers/compat.js +49 -31
  475. package/dist/providers/compat.js.map +1 -1
  476. package/dist/providers/deepseek-reasoning.d.ts +64 -0
  477. package/dist/providers/deepseek-reasoning.d.ts.map +1 -0
  478. package/dist/providers/deepseek-reasoning.js +28 -0
  479. package/dist/providers/deepseek-reasoning.js.map +1 -0
  480. package/dist/providers/google.d.ts +4 -3
  481. package/dist/providers/google.d.ts.map +1 -1
  482. package/dist/providers/google.js +128 -19
  483. package/dist/providers/google.js.map +1 -1
  484. package/dist/providers/index.d.ts +2 -0
  485. package/dist/providers/index.d.ts.map +1 -1
  486. package/dist/providers/index.js +216 -36
  487. package/dist/providers/index.js.map +1 -1
  488. package/dist/providers/ollama.d.ts.map +1 -1
  489. package/dist/providers/ollama.js +79 -43
  490. package/dist/providers/ollama.js.map +1 -1
  491. package/dist/providers/openai.d.ts +2 -2
  492. package/dist/providers/openai.d.ts.map +1 -1
  493. package/dist/providers/openai.js +50 -46
  494. package/dist/providers/openai.js.map +1 -1
  495. package/dist/providers/openrouter-bounds.d.ts +22 -0
  496. package/dist/providers/openrouter-bounds.d.ts.map +1 -0
  497. package/dist/providers/openrouter-bounds.js +16 -0
  498. package/dist/providers/openrouter-bounds.js.map +1 -0
  499. package/dist/providers/stream-attempt.d.ts +29 -0
  500. package/dist/providers/stream-attempt.d.ts.map +1 -0
  501. package/dist/providers/stream-attempt.js +63 -0
  502. package/dist/providers/stream-attempt.js.map +1 -0
  503. package/dist/providers/types.d.ts +40 -4
  504. package/dist/providers/types.d.ts.map +1 -1
  505. package/dist/providers/types.js +19 -0
  506. package/dist/providers/types.js.map +1 -1
  507. package/dist/replay.d.ts.map +1 -1
  508. package/dist/replay.js +16 -0
  509. package/dist/replay.js.map +1 -1
  510. package/dist/risk.d.ts.map +1 -1
  511. package/dist/risk.js +5 -0
  512. package/dist/risk.js.map +1 -1
  513. package/dist/router.d.ts +7 -110
  514. package/dist/router.d.ts.map +1 -1
  515. package/dist/router.js +0 -451
  516. package/dist/router.js.map +1 -1
  517. package/dist/routing/index.d.ts +6 -0
  518. package/dist/routing/index.d.ts.map +1 -0
  519. package/dist/routing/index.js +5 -0
  520. package/dist/routing/index.js.map +1 -0
  521. package/dist/routing/prompt.d.ts +4 -0
  522. package/dist/routing/prompt.d.ts.map +1 -0
  523. package/dist/routing/prompt.js +14 -0
  524. package/dist/routing/prompt.js.map +1 -0
  525. package/dist/routing/select.d.ts +9 -0
  526. package/dist/routing/select.d.ts.map +1 -0
  527. package/dist/routing/select.js +279 -0
  528. package/dist/routing/select.js.map +1 -0
  529. package/dist/routing/smart.d.ts +31 -0
  530. package/dist/routing/smart.d.ts.map +1 -0
  531. package/dist/routing/smart.js +46 -0
  532. package/dist/routing/smart.js.map +1 -0
  533. package/dist/routing/types.d.ts +79 -0
  534. package/dist/routing/types.d.ts.map +1 -0
  535. package/dist/routing/types.js +2 -0
  536. package/dist/routing/types.js.map +1 -0
  537. package/dist/runlog.d.ts +32 -4
  538. package/dist/runlog.d.ts.map +1 -1
  539. package/dist/runlog.js +22 -6
  540. package/dist/runlog.js.map +1 -1
  541. package/dist/runtime/index.d.ts +6 -0
  542. package/dist/runtime/index.d.ts.map +1 -0
  543. package/dist/runtime/index.js +6 -0
  544. package/dist/runtime/index.js.map +1 -0
  545. package/dist/runtime/permissions.d.ts +21 -0
  546. package/dist/runtime/permissions.d.ts.map +1 -0
  547. package/dist/runtime/permissions.js +110 -0
  548. package/dist/runtime/permissions.js.map +1 -0
  549. package/dist/runtime/repair.d.ts +20 -0
  550. package/dist/runtime/repair.d.ts.map +1 -0
  551. package/dist/runtime/repair.js +50 -0
  552. package/dist/runtime/repair.js.map +1 -0
  553. package/dist/runtime/tool-retry.d.ts +3 -0
  554. package/dist/runtime/tool-retry.d.ts.map +1 -0
  555. package/dist/runtime/tool-retry.js +12 -0
  556. package/dist/runtime/tool-retry.js.map +1 -0
  557. package/dist/runtime/turn.d.ts +97 -0
  558. package/dist/runtime/turn.d.ts.map +1 -0
  559. package/dist/runtime/turn.js +437 -0
  560. package/dist/runtime/turn.js.map +1 -0
  561. package/dist/runtime/types.d.ts +11 -0
  562. package/dist/runtime/types.d.ts.map +1 -0
  563. package/dist/runtime/types.js +5 -0
  564. package/dist/runtime/types.js.map +1 -0
  565. package/dist/sandbox/docker.d.ts +4 -4
  566. package/dist/sandbox/docker.d.ts.map +1 -1
  567. package/dist/sandbox/docker.js +55 -16
  568. package/dist/sandbox/docker.js.map +1 -1
  569. package/dist/sandbox/native.d.ts +1 -0
  570. package/dist/sandbox/native.d.ts.map +1 -1
  571. package/dist/sandbox/native.js +11 -2
  572. package/dist/sandbox/native.js.map +1 -1
  573. package/dist/scope.d.ts +5 -9
  574. package/dist/scope.d.ts.map +1 -1
  575. package/dist/scope.js +43 -20
  576. package/dist/scope.js.map +1 -1
  577. package/dist/session-management/actions.d.ts +28 -0
  578. package/dist/session-management/actions.d.ts.map +1 -0
  579. package/dist/session-management/actions.js +78 -0
  580. package/dist/session-management/actions.js.map +1 -0
  581. package/dist/session-management/cli.d.ts +24 -0
  582. package/dist/session-management/cli.d.ts.map +1 -0
  583. package/dist/session-management/cli.js +92 -0
  584. package/dist/session-management/cli.js.map +1 -0
  585. package/dist/session-management/files.d.ts +5 -0
  586. package/dist/session-management/files.d.ts.map +1 -0
  587. package/dist/session-management/files.js +92 -0
  588. package/dist/session-management/files.js.map +1 -0
  589. package/dist/session-management/index.d.ts +7 -0
  590. package/dist/session-management/index.d.ts.map +1 -0
  591. package/dist/session-management/index.js +7 -0
  592. package/dist/session-management/index.js.map +1 -0
  593. package/dist/session-management/permissions.d.ts +12 -0
  594. package/dist/session-management/permissions.d.ts.map +1 -0
  595. package/dist/session-management/permissions.js +33 -0
  596. package/dist/session-management/permissions.js.map +1 -0
  597. package/dist/session-management/presentation.d.ts +5 -0
  598. package/dist/session-management/presentation.d.ts.map +1 -0
  599. package/dist/session-management/presentation.js +10 -0
  600. package/dist/session-management/presentation.js.map +1 -0
  601. package/dist/session-management/transfer.d.ts +9 -0
  602. package/dist/session-management/transfer.d.ts.map +1 -0
  603. package/dist/session-management/transfer.js +39 -0
  604. package/dist/session-management/transfer.js.map +1 -0
  605. package/dist/sessions/context.d.ts +4 -0
  606. package/dist/sessions/context.d.ts.map +1 -0
  607. package/dist/sessions/context.js +6 -0
  608. package/dist/sessions/context.js.map +1 -0
  609. package/dist/sessions/format.d.ts +38 -0
  610. package/dist/sessions/format.d.ts.map +1 -0
  611. package/dist/sessions/format.js +116 -0
  612. package/dist/sessions/format.js.map +1 -0
  613. package/dist/sessions/history.d.ts +37 -0
  614. package/dist/sessions/history.d.ts.map +1 -0
  615. package/dist/sessions/history.js +197 -0
  616. package/dist/sessions/history.js.map +1 -0
  617. package/dist/sessions/index.d.ts +8 -0
  618. package/dist/sessions/index.d.ts.map +1 -0
  619. package/dist/sessions/index.js +8 -0
  620. package/dist/sessions/index.js.map +1 -0
  621. package/dist/sessions/output.d.ts +31 -0
  622. package/dist/sessions/output.d.ts.map +1 -0
  623. package/dist/sessions/output.js +115 -0
  624. package/dist/sessions/output.js.map +1 -0
  625. package/dist/sessions/portable.d.ts +26 -0
  626. package/dist/sessions/portable.d.ts.map +1 -0
  627. package/dist/sessions/portable.js +105 -0
  628. package/dist/sessions/portable.js.map +1 -0
  629. package/dist/sessions/snapshot.d.ts +11 -0
  630. package/dist/sessions/snapshot.d.ts.map +1 -0
  631. package/dist/sessions/snapshot.js +118 -0
  632. package/dist/sessions/snapshot.js.map +1 -0
  633. package/dist/sessions/tool-state.d.ts +11 -0
  634. package/dist/sessions/tool-state.d.ts.map +1 -0
  635. package/dist/sessions/tool-state.js +152 -0
  636. package/dist/sessions/tool-state.js.map +1 -0
  637. package/dist/setup.d.ts.map +1 -1
  638. package/dist/setup.js +13 -5
  639. package/dist/setup.js.map +1 -1
  640. package/dist/spawning/actions.d.ts +23 -0
  641. package/dist/spawning/actions.d.ts.map +1 -0
  642. package/dist/spawning/actions.js +120 -0
  643. package/dist/spawning/actions.js.map +1 -0
  644. package/dist/spawning/authority.d.ts +15 -0
  645. package/dist/spawning/authority.d.ts.map +1 -0
  646. package/dist/spawning/authority.js +16 -0
  647. package/dist/spawning/authority.js.map +1 -0
  648. package/dist/spawning/cli.d.ts +4 -0
  649. package/dist/spawning/cli.d.ts.map +1 -0
  650. package/dist/spawning/cli.js +46 -0
  651. package/dist/spawning/cli.js.map +1 -0
  652. package/dist/spawning/execution.d.ts +13 -0
  653. package/dist/spawning/execution.d.ts.map +1 -0
  654. package/dist/spawning/execution.js +59 -0
  655. package/dist/spawning/execution.js.map +1 -0
  656. package/dist/spawning/index.d.ts +8 -0
  657. package/dist/spawning/index.d.ts.map +1 -0
  658. package/dist/spawning/index.js +8 -0
  659. package/dist/spawning/index.js.map +1 -0
  660. package/dist/spawning/store.d.ts +12 -0
  661. package/dist/spawning/store.d.ts.map +1 -0
  662. package/dist/spawning/store.js +93 -0
  663. package/dist/spawning/store.js.map +1 -0
  664. package/dist/spawning/types.d.ts +34 -0
  665. package/dist/spawning/types.d.ts.map +1 -0
  666. package/dist/spawning/types.js +2 -0
  667. package/dist/spawning/types.js.map +1 -0
  668. package/dist/spawning/validation.d.ts +14 -0
  669. package/dist/spawning/validation.d.ts.map +1 -0
  670. package/dist/spawning/validation.js +95 -0
  671. package/dist/spawning/validation.js.map +1 -0
  672. package/dist/storage.d.ts +29 -1
  673. package/dist/storage.d.ts.map +1 -1
  674. package/dist/storage.js +112 -40
  675. package/dist/storage.js.map +1 -1
  676. package/dist/supervision/approval.d.ts +4 -0
  677. package/dist/supervision/approval.d.ts.map +1 -0
  678. package/dist/supervision/approval.js +7 -0
  679. package/dist/supervision/approval.js.map +1 -0
  680. package/dist/supervision/availability.d.ts +34 -0
  681. package/dist/supervision/availability.d.ts.map +1 -0
  682. package/dist/supervision/availability.js +44 -0
  683. package/dist/supervision/availability.js.map +1 -0
  684. package/dist/supervision/context.d.ts +36 -0
  685. package/dist/supervision/context.d.ts.map +1 -0
  686. package/dist/supervision/context.js +52 -0
  687. package/dist/supervision/context.js.map +1 -0
  688. package/dist/supervision/contracts.d.ts +7 -0
  689. package/dist/supervision/contracts.d.ts.map +1 -0
  690. package/dist/supervision/contracts.js +86 -0
  691. package/dist/supervision/contracts.js.map +1 -0
  692. package/dist/supervision/effects.d.ts +15 -0
  693. package/dist/supervision/effects.d.ts.map +1 -0
  694. package/dist/supervision/effects.js +19 -0
  695. package/dist/supervision/effects.js.map +1 -0
  696. package/dist/supervision/evidence.d.ts +32 -0
  697. package/dist/supervision/evidence.d.ts.map +1 -0
  698. package/dist/supervision/evidence.js +68 -0
  699. package/dist/supervision/evidence.js.map +1 -0
  700. package/dist/supervision/health.d.ts +16 -0
  701. package/dist/supervision/health.d.ts.map +1 -0
  702. package/dist/supervision/health.js +86 -0
  703. package/dist/supervision/health.js.map +1 -0
  704. package/dist/supervision/index.d.ts +13 -0
  705. package/dist/supervision/index.d.ts.map +1 -0
  706. package/dist/supervision/index.js +13 -0
  707. package/dist/supervision/index.js.map +1 -0
  708. package/dist/supervision/journal.d.ts +16 -0
  709. package/dist/supervision/journal.d.ts.map +1 -0
  710. package/dist/supervision/journal.js +311 -0
  711. package/dist/supervision/journal.js.map +1 -0
  712. package/dist/supervision/receipts.d.ts +4 -0
  713. package/dist/supervision/receipts.d.ts.map +1 -0
  714. package/dist/supervision/receipts.js +21 -0
  715. package/dist/supervision/receipts.js.map +1 -0
  716. package/dist/supervision/reply.d.ts +12 -0
  717. package/dist/supervision/reply.d.ts.map +1 -0
  718. package/dist/supervision/reply.js +50 -0
  719. package/dist/supervision/reply.js.map +1 -0
  720. package/dist/supervision/runtime.d.ts +8 -0
  721. package/dist/supervision/runtime.d.ts.map +1 -0
  722. package/dist/supervision/runtime.js +188 -0
  723. package/dist/supervision/runtime.js.map +1 -0
  724. package/dist/supervision/types.d.ts +174 -0
  725. package/dist/supervision/types.d.ts.map +1 -0
  726. package/dist/supervision/types.js +2 -0
  727. package/dist/supervision/types.js.map +1 -0
  728. package/dist/tools.d.ts +12 -0
  729. package/dist/tools.d.ts.map +1 -1
  730. package/dist/tools.js +131 -23
  731. package/dist/tools.js.map +1 -1
  732. package/dist/turn-controller.d.ts +12 -0
  733. package/dist/turn-controller.d.ts.map +1 -0
  734. package/dist/turn-controller.js +51 -0
  735. package/dist/turn-controller.js.map +1 -0
  736. package/dist/types.d.ts +7 -1
  737. package/dist/types.d.ts.map +1 -1
  738. package/dist/types.js +3 -0
  739. package/dist/types.js.map +1 -1
  740. package/dist/ui/agent.d.ts +11 -10
  741. package/dist/ui/agent.d.ts.map +1 -1
  742. package/dist/ui/agent.js +293 -897
  743. package/dist/ui/agent.js.map +1 -1
  744. package/dist/ui/commands.d.ts +20 -2
  745. package/dist/ui/commands.d.ts.map +1 -1
  746. package/dist/ui/commands.js +208 -155
  747. package/dist/ui/commands.js.map +1 -1
  748. package/dist/ui/completions.d.ts.map +1 -1
  749. package/dist/ui/completions.js +16 -5
  750. package/dist/ui/completions.js.map +1 -1
  751. package/dist/ui/index.d.ts +6 -2
  752. package/dist/ui/index.d.ts.map +1 -1
  753. package/dist/ui/index.js +13 -11
  754. package/dist/ui/index.js.map +1 -1
  755. package/dist/ui/messages.d.ts.map +1 -1
  756. package/dist/ui/messages.js +5 -0
  757. package/dist/ui/messages.js.map +1 -1
  758. package/dist/ui/modals/index.d.ts +1 -0
  759. package/dist/ui/modals/index.d.ts.map +1 -1
  760. package/dist/ui/modals/index.js +1 -0
  761. package/dist/ui/modals/index.js.map +1 -1
  762. package/dist/ui/modals/prompts.d.ts +4 -7
  763. package/dist/ui/modals/prompts.d.ts.map +1 -1
  764. package/dist/ui/modals/prompts.js +14 -10
  765. package/dist/ui/modals/prompts.js.map +1 -1
  766. package/dist/ui/modals/selectors.d.ts +1 -0
  767. package/dist/ui/modals/selectors.d.ts.map +1 -1
  768. package/dist/ui/modals/selectors.js +3 -2
  769. package/dist/ui/modals/selectors.js.map +1 -1
  770. package/dist/ui/modals/tool-output.d.ts +8 -0
  771. package/dist/ui/modals/tool-output.d.ts.map +1 -0
  772. package/dist/ui/modals/tool-output.js +26 -0
  773. package/dist/ui/modals/tool-output.js.map +1 -0
  774. package/dist/ui/model-commands.d.ts +4 -0
  775. package/dist/ui/model-commands.d.ts.map +1 -0
  776. package/dist/ui/model-commands.js +69 -0
  777. package/dist/ui/model-commands.js.map +1 -0
  778. package/dist/ui/regions/modal-host.d.ts +3 -0
  779. package/dist/ui/regions/modal-host.d.ts.map +1 -1
  780. package/dist/ui/regions/modal-host.js +7 -1
  781. package/dist/ui/regions/modal-host.js.map +1 -1
  782. package/dist/ui/regions/status-region.d.ts +2 -1
  783. package/dist/ui/regions/status-region.d.ts.map +1 -1
  784. package/dist/ui/regions/status-region.js +2 -2
  785. package/dist/ui/regions/status-region.js.map +1 -1
  786. package/dist/ui/regions/tool-activity.d.ts +6 -0
  787. package/dist/ui/regions/tool-activity.d.ts.map +1 -0
  788. package/dist/ui/regions/tool-activity.js +9 -0
  789. package/dist/ui/regions/tool-activity.js.map +1 -0
  790. package/dist/ui/regions/transcript-region.d.ts.map +1 -1
  791. package/dist/ui/regions/transcript-region.js +2 -1
  792. package/dist/ui/regions/transcript-region.js.map +1 -1
  793. package/dist/ui/regions/workflow-region.d.ts +9 -0
  794. package/dist/ui/regions/workflow-region.d.ts.map +1 -0
  795. package/dist/ui/regions/workflow-region.js +11 -0
  796. package/dist/ui/regions/workflow-region.js.map +1 -0
  797. package/dist/ui/session-commands.d.ts +3 -0
  798. package/dist/ui/session-commands.d.ts.map +1 -0
  799. package/dist/ui/session-commands.js +141 -0
  800. package/dist/ui/session-commands.js.map +1 -0
  801. package/dist/ui/state/use-approval-state.d.ts +9 -0
  802. package/dist/ui/state/use-approval-state.d.ts.map +1 -0
  803. package/dist/ui/state/use-approval-state.js +18 -0
  804. package/dist/ui/state/use-approval-state.js.map +1 -0
  805. package/dist/ui/state/use-chat-controller.d.ts +4 -1
  806. package/dist/ui/state/use-chat-controller.d.ts.map +1 -1
  807. package/dist/ui/state/use-chat-controller.js +256 -180
  808. package/dist/ui/state/use-chat-controller.js.map +1 -1
  809. package/dist/ui/state/use-modal-state.d.ts +6 -8
  810. package/dist/ui/state/use-modal-state.d.ts.map +1 -1
  811. package/dist/ui/state/use-modal-state.js +3 -4
  812. package/dist/ui/state/use-modal-state.js.map +1 -1
  813. package/dist/ui/state/use-model-state.d.ts +7 -3
  814. package/dist/ui/state/use-model-state.d.ts.map +1 -1
  815. package/dist/ui/state/use-model-state.js +24 -17
  816. package/dist/ui/state/use-model-state.js.map +1 -1
  817. package/dist/ui/state/use-queue-state.d.ts +4 -3
  818. package/dist/ui/state/use-queue-state.d.ts.map +1 -1
  819. package/dist/ui/state/use-queue-state.js +11 -8
  820. package/dist/ui/state/use-queue-state.js.map +1 -1
  821. package/dist/ui/state/use-session-init.d.ts +4 -0
  822. package/dist/ui/state/use-session-init.d.ts.map +1 -1
  823. package/dist/ui/state/use-session-init.js +19 -3
  824. package/dist/ui/state/use-session-init.js.map +1 -1
  825. package/dist/ui/state/use-transcript-state.d.ts +6 -3
  826. package/dist/ui/state/use-transcript-state.d.ts.map +1 -1
  827. package/dist/ui/state/use-transcript-state.js +27 -15
  828. package/dist/ui/state/use-transcript-state.js.map +1 -1
  829. package/dist/ui/status-bar.d.ts +2 -1
  830. package/dist/ui/status-bar.d.ts.map +1 -1
  831. package/dist/ui/status-bar.js +2 -2
  832. package/dist/ui/status-bar.js.map +1 -1
  833. package/dist/ui/tool-output-cache.d.ts +12 -0
  834. package/dist/ui/tool-output-cache.d.ts.map +1 -0
  835. package/dist/ui/tool-output-cache.js +27 -0
  836. package/dist/ui/tool-output-cache.js.map +1 -0
  837. package/dist/ui/tool-output-commands.d.ts +3 -0
  838. package/dist/ui/tool-output-commands.d.ts.map +1 -0
  839. package/dist/ui/tool-output-commands.js +37 -0
  840. package/dist/ui/tool-output-commands.js.map +1 -0
  841. package/dist/ui/tool-output-wrap.d.ts +3 -0
  842. package/dist/ui/tool-output-wrap.d.ts.map +1 -0
  843. package/dist/ui/tool-output-wrap.js +24 -0
  844. package/dist/ui/tool-output-wrap.js.map +1 -0
  845. package/dist/ui/tool-progress.d.ts +23 -0
  846. package/dist/ui/tool-progress.d.ts.map +1 -0
  847. package/dist/ui/tool-progress.js +42 -0
  848. package/dist/ui/tool-progress.js.map +1 -0
  849. package/dist/ui/types.d.ts +8 -0
  850. package/dist/ui/types.d.ts.map +1 -1
  851. package/dist/ui/workflow-progress.d.ts +21 -0
  852. package/dist/ui/workflow-progress.d.ts.map +1 -0
  853. package/dist/ui/workflow-progress.js +107 -0
  854. package/dist/ui/workflow-progress.js.map +1 -0
  855. package/package.json +13 -4
  856. package/scripts/verify-runlog.mjs +208 -0
@@ -0,0 +1,95 @@
1
+ import { smartPolicyWithin } from '../routing/smart.js';
2
+ import { canonicalJson, digest } from '../approvals/index.js';
3
+ import { analyzePlan, array, shape, id, hex, uuid, integer, pathName, fail } from '../orchestration/validation.js';
4
+ import { validateChildGrant } from '../execution/child-grants.js';
5
+ export const MAX_SPAWN_BYTES = 65536, MAX_SPAWN_PROPOSALS = 256;
6
+ export function validateSpawnInput(value) {
7
+ shape(value, ['version', 'parentId', 'agents', 'tasks']);
8
+ if (value.version !== 1)
9
+ fail('Unsupported child proposal version.');
10
+ id(value.parentId);
11
+ array(value.agents, 16, 1);
12
+ array(value.tasks, 64, 1);
13
+ if (Buffer.byteLength(canonicalJson(value)) > MAX_SPAWN_BYTES)
14
+ fail('Child proposal exceeds 64 KiB.');
15
+ return value;
16
+ }
17
+ /** Existing agents, tasks, scopes and limits remain byte-for-byte unchanged. */
18
+ export function extendPlan(base, input) {
19
+ validateSpawnInput(input);
20
+ if (!base.agents.some(a => a.id === input.parentId))
21
+ fail('Child proposal names an unknown parent.');
22
+ const addedAgents = new Set(input.agents.map(agent => agent?.id));
23
+ if (input.tasks.some(task => !task || !addedAgents.has(task.agentId)))
24
+ fail('New tasks must belong to the proposed child hierarchy.');
25
+ const next = analyzePlan({ ...base, agents: [...base.agents, ...input.agents], tasks: [...base.tasks, ...input.tasks] }).plan;
26
+ for (const child of input.agents) {
27
+ const parent = next.agents.find(a => a.id === child.parentId), allowed = parent?.childRouting ?? parent?.routing;
28
+ if (allowed && (!child.routing || !smartPolicyWithin(child.routing, allowed) || child.childRouting && !smartPolicyWithin(child.childRouting, allowed) || !allowed.pool.some(target => (child.preference.provider === 'auto' || target.provider === child.preference.provider) && (!child.preference.model || !target.model || target.model === child.preference.model))))
29
+ fail('Child routing exceeds its parent approved delegation pool; inherit or narrow the policy.');
30
+ }
31
+ for (const child of input.agents) {
32
+ let current = next.agents.find(a => a.id === child.id), found = false;
33
+ for (let n = 0; current?.parentId && n < next.agents.length; n++) {
34
+ if (current.parentId === input.parentId) {
35
+ found = true;
36
+ break;
37
+ }
38
+ current = next.agents.find(a => a.id === current.parentId);
39
+ }
40
+ if (!found)
41
+ fail('Every proposed agent must descend from the named parent.');
42
+ }
43
+ return next;
44
+ }
45
+ export function proposalId(hash) {
46
+ if (!hex(hash))
47
+ fail('Invalid proposal hash.');
48
+ const raw = hash.slice(0, 12) + '4' + hash.slice(13, 16) + (8 + (parseInt(hash[16], 16) % 4)).toString(16) + hash.slice(17, 32);
49
+ return `${raw.slice(0, 8)}-${raw.slice(8, 12)}-${raw.slice(12, 16)}-${raw.slice(16, 20)}-${raw.slice(20)}`;
50
+ }
51
+ export function proposalGrant(proposal, header) {
52
+ return validateChildGrant({ version: 1, id: proposalId(proposal.hash), proposalHash: proposal.hash, previousGraphHash: proposal.graphHash, planHash: proposal.planHash, runManifestHash: proposal.runManifestHash, approvalRevision: proposal.approvalRevision, parentId: proposal.parentId,
53
+ accounts: proposal.agents.map(agent => ({ id: agent.id, parentId: agent.parentId, tokenBudget: agent.tokenBudget, costBudgetNanos: Math.floor(agent.costBudgetUsd * 1e9), deadline: Date.parse(header.createdAt) + agent.timeBudgetMs, allowedTools: agent.allowedTools, allowedPaths: agent.allowedPaths })) });
54
+ }
55
+ export function validateSpawnProposal(value, manifest, header, base) {
56
+ shape(value, ['version', 'parentId', 'agents', 'tasks', 'runId', 'runManifestHash', 'approvalRevision', 'graphHash', 'planHash', 'source', 'hash']);
57
+ if (value.runId !== manifest.id || value.runManifestHash !== manifest.hash || value.approvalRevision !== header.approvalRevision || !hex(value.graphHash) || !hex(value.planHash) || !hex(value.hash))
58
+ fail('Child proposal belongs to another run, approval or graph.');
59
+ shape(value.source, ['path', 'sha256'], ['kind', 'eventId']);
60
+ pathName(value.source.path);
61
+ if (value.source.kind !== undefined || value.source.eventId !== undefined) {
62
+ if (value.source.kind !== 'supervision' || !uuid(value.source.eventId) || value.source.path !== `supervision/${value.source.eventId}.json`)
63
+ fail('Invalid controller proposal source.');
64
+ }
65
+ if (!hex(value.source.sha256))
66
+ fail('Child proposal source needs its byte hash.');
67
+ const { hash, ...body } = value;
68
+ if (hash !== digest(canonicalJson(body)))
69
+ fail('Child proposal hash is invalid.');
70
+ const proposal = value, input = { version: proposal.version, parentId: proposal.parentId, agents: proposal.agents, tasks: proposal.tasks }, next = extendPlan(base, input);
71
+ if (analyzePlan(base).hash !== proposal.graphHash || analyzePlan(next).hash !== proposal.planHash)
72
+ fail('Child proposal graph revision changed.');
73
+ if (Buffer.byteLength(canonicalJson(value)) > MAX_SPAWN_BYTES)
74
+ fail('Child proposal exceeds 64 KiB.');
75
+ proposalGrant(proposal, header);
76
+ return proposal;
77
+ }
78
+ export function makeSpawnProposal(manifest, header, base, input, source) {
79
+ const next = extendPlan(base, input), body = { ...structuredClone(input), runId: manifest.id, runManifestHash: manifest.hash, approvalRevision: header.approvalRevision, graphHash: analyzePlan(base).hash, planHash: analyzePlan(next).hash, source };
80
+ return validateSpawnProposal({ ...body, hash: digest(canonicalJson(body)) }, manifest, header, base);
81
+ }
82
+ export function validateSpawnAdmission(value, manifest, header, base) {
83
+ shape(value, ['version', 'proposal', 'grant']);
84
+ if (value.version !== 1)
85
+ fail('Unsupported spawn admission.');
86
+ const proposal = validateSpawnProposal(value.proposal, manifest, header, base);
87
+ shape(value.grant, ['grant', 'eventId', 'eventHash', 'at']);
88
+ if (!uuid(value.grant.eventId) || !hex(value.grant.eventHash))
89
+ fail('Spawn admission requires its budget event.');
90
+ integer(value.grant.at, Date.parse(header.createdAt), header.deadline);
91
+ if (canonicalJson(validateChildGrant(value.grant.grant)) !== canonicalJson(proposalGrant(proposal, header)))
92
+ fail('Child authority differs from the approved graph.');
93
+ return value;
94
+ }
95
+ //# sourceMappingURL=validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/spawning/validation.ts"],"names":[],"mappings":"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"}
package/dist/storage.d.ts CHANGED
@@ -3,6 +3,8 @@
3
3
  *
4
4
  * Manages ~/.calliope-cli/ directory structure for sessions, todos, and history.
5
5
  */
6
+ import { type ConversationState, type ConversationSnapshot, type RecoveryStatus } from './sessions/index.js';
7
+ import type { Message } from './types.js';
6
8
  import { IterationLedger } from './iteration-ledger.js';
7
9
  import type { IterationLedgerSnapshot } from './iteration-ledger.js';
8
10
  export declare function createSessionId(): string;
@@ -15,6 +17,16 @@ export interface Session {
15
17
  messageCount: number;
16
18
  provider: string;
17
19
  model: string;
20
+ lineage?: {
21
+ version: 1;
22
+ toolStateHash: string;
23
+ kind: 'manual' | 'safety' | 'import';
24
+ name?: string;
25
+ sessionId: string;
26
+ revision: string;
27
+ stateHash: string;
28
+ at: string;
29
+ };
18
30
  }
19
31
  export interface ChatMessage {
20
32
  id: string;
@@ -67,6 +79,21 @@ export declare function initStorage(): void;
67
79
  * Create or resume a session for the current project
68
80
  */
69
81
  export declare function getOrCreateSession(projectPath: string): Session;
82
+ /** A new terminal owns a unique session, including on the same day/project. */
83
+ export declare function createSession(projectPath: string, options?: {
84
+ activate?: boolean;
85
+ prefix?: 'session' | 'acp';
86
+ lineage?: Session['lineage'];
87
+ }): Session;
88
+ /** Strict recovery APIs pin the ID; they never fall back to the shared pointer. */
89
+ export declare function readSessionConversation(sessionId: string): ConversationState;
90
+ export declare function saveSessionConversation(sessionId: string, messages: Message[], options: {
91
+ expectedRevision: string | null;
92
+ status: RecoveryStatus;
93
+ signal?: AbortSignal;
94
+ }): ConversationSnapshot;
95
+ /** Listing metadata may lag a committed snapshot after a crash; it is never authoritative. */
96
+ export declare function updateSessionSummary(sessionId: string, snapshot: ConversationSnapshot): void;
70
97
  /**
71
98
  * Get current session info
72
99
  */
@@ -82,7 +109,7 @@ export declare function deleteSession(sessionId: string): boolean;
82
109
  /**
83
110
  * Add a message to the current session's chat history
84
111
  */
85
- export declare function addChatMessage(message: Omit<ChatMessage, 'id' | 'timestamp'>): void;
112
+ export declare function addChatMessage(message: Omit<ChatMessage, 'id' | 'timestamp'>, sessionId?: string): void;
86
113
  /**
87
114
  * Get chat history for current session
88
115
  */
@@ -95,6 +122,7 @@ export declare function getSessionDirById(sessionId: string): string | null;
95
122
  * Switch the active session pointer to a saved session by ID.
96
123
  */
97
124
  export declare function setCurrentSessionById(sessionId: string): Session | null;
125
+ /** Legacy convenience API; new clients use explicit IDs and revisions above. */
98
126
  export declare function saveMessageHistory(messages: unknown[]): void;
99
127
  /**
100
128
  * Load saved LLM messages from a session.
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
package/dist/storage.js CHANGED
@@ -6,6 +6,8 @@
6
6
  import * as fs from 'fs';
7
7
  import * as path from 'path';
8
8
  import * as os from 'os';
9
+ import { randomUUID } from 'node:crypto';
10
+ import { activeSessionId, readPrivateSessionFile, readConversation, writeConversation, SessionRecoveryError } from './sessions/index.js';
9
11
  import { IterationLedger } from './iteration-ledger.js';
10
12
  // ============================================================================
11
13
  // Date Utilities
@@ -20,7 +22,7 @@ function getTodayString(date = new Date()) {
20
22
  return `${year}-${month}-${day}`;
21
23
  }
22
24
  export function createSessionId() {
23
- return `session_${Date.now()}_${Math.random().toString(36).slice(2, 8)}`;
25
+ return `session_${Date.now()}_${randomUUID()}`;
24
26
  }
25
27
  // ============================================================================
26
28
  // Paths
@@ -40,8 +42,17 @@ export const paths = {
40
42
  history: path.join(CALLIOPE_DIR, 'history'),
41
43
  commandHistory: path.join(CALLIOPE_DIR, 'history', 'commands.txt'),
42
44
  };
45
+ function activeSessionDir() {
46
+ const id = activeSessionId();
47
+ if (!id)
48
+ return paths.currentSession;
49
+ const dir = getSessionDirById(id);
50
+ if (!dir)
51
+ throw new SessionRecoveryError('invalid', 'this run has no saved session for session-scoped tools.');
52
+ return dir;
53
+ }
43
54
  function getSessionFilePath(fileName, sessionId) {
44
- const sessionDir = sessionId ? getSessionDirById(sessionId) : paths.currentSession;
55
+ const sessionDir = sessionId ? getSessionDirById(sessionId) : activeSessionDir();
45
56
  return sessionDir ? path.join(sessionDir, fileName) : null;
46
57
  }
47
58
  // ============================================================================
@@ -63,7 +74,7 @@ export function initStorage() {
63
74
  ];
64
75
  for (const dir of dirs) {
65
76
  if (!fs.existsSync(dir)) {
66
- fs.mkdirSync(dir, { recursive: true });
77
+ fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
67
78
  }
68
79
  }
69
80
  // Initialize global todos if not exists (line-based format)
@@ -100,9 +111,9 @@ function writeJSON(filePath, data) {
100
111
  if (!fs.existsSync(dir)) {
101
112
  fs.mkdirSync(dir, { recursive: true });
102
113
  }
103
- const tmp = `${filePath}.${process.pid}.${Date.now()}.tmp`;
114
+ const tmp = `${filePath}.${randomUUID()}.tmp`;
104
115
  try {
105
- fs.writeFileSync(tmp, JSON.stringify(data, null, 2));
116
+ fs.writeFileSync(tmp, JSON.stringify(data, null, 2), { flag: 'wx', mode: 0o600 });
106
117
  fs.renameSync(tmp, filePath);
107
118
  }
108
119
  catch (err) {
@@ -328,6 +339,53 @@ export function getOrCreateSession(projectPath) {
328
339
  updateCurrentSymlink(sessionDir);
329
340
  return session;
330
341
  }
342
+ /** A new terminal owns a unique session, including on the same day/project. */
343
+ export function createSession(projectPath, options = {}) {
344
+ initStorage();
345
+ const now = new Date().toISOString();
346
+ const session = { id: createSessionId().replace(/^session_/, `${options.prefix ?? 'session'}_`), projectPath: path.resolve(projectPath),
347
+ projectName: path.basename(projectPath) || 'unnamed', createdAt: now, lastAccessedAt: now,
348
+ messageCount: 0, provider: '', model: '', ...(options.lineage ? { lineage: options.lineage } : {}) };
349
+ const dir = path.join(paths.sessions, `${getTodayString()}_${session.projectName}_${randomUUID()}`);
350
+ fs.mkdirSync(dir, { mode: 0o700 });
351
+ fs.mkdirSync(path.join(dir, 'plans'), { mode: 0o700 });
352
+ writeJSON(path.join(dir, 'session.json'), session);
353
+ fs.writeFileSync(path.join(dir, 'chat.log'), '', { mode: 0o600 });
354
+ fs.writeFileSync(path.join(dir, 'todos.txt'), '', { mode: 0o600 });
355
+ if (options.activate !== false)
356
+ updateCurrentSymlink(dir);
357
+ return session;
358
+ }
359
+ /** Strict recovery APIs pin the ID; they never fall back to the shared pointer. */
360
+ export function readSessionConversation(sessionId) {
361
+ const dir = getSessionDirById(sessionId);
362
+ if (!dir)
363
+ throw new SessionRecoveryError('invalid', 'session not found; use /sessions to select an existing session.');
364
+ return readConversation(dir, sessionId);
365
+ }
366
+ export function saveSessionConversation(sessionId, messages, options) {
367
+ const dir = getSessionDirById(sessionId);
368
+ if (!dir)
369
+ throw new SessionRecoveryError('invalid', 'session not found; start /new before continuing.');
370
+ const snapshot = writeConversation(dir, sessionId, messages, { ...options, cap: Math.min(getMaxPersistedMessages(), 10000) });
371
+ updateSessionSummary(sessionId, snapshot);
372
+ return snapshot;
373
+ }
374
+ /** Listing metadata may lag a committed snapshot after a crash; it is never authoritative. */
375
+ export function updateSessionSummary(sessionId, snapshot) {
376
+ const dir = getSessionDirById(sessionId);
377
+ if (!dir || snapshot.sessionId !== sessionId)
378
+ return;
379
+ const session = readSessionFromDir(dir);
380
+ if (session) {
381
+ session.messageCount = snapshot.messages.length;
382
+ session.lastAccessedAt = snapshot.updatedAt;
383
+ try {
384
+ writeJSON(path.join(dir, 'session.json'), session);
385
+ }
386
+ catch { /* Snapshot is durable. */ }
387
+ }
388
+ }
331
389
  /**
332
390
  * Update the 'current' symlink to point to active session
333
391
  */
@@ -344,7 +402,23 @@ function updateCurrentSymlink(sessionDir) {
344
402
  }
345
403
  function readSessionFromDir(sessionDir) {
346
404
  const sessionFile = path.join(sessionDir, 'session.json');
347
- return readJSON(sessionFile, null);
405
+ let value;
406
+ try {
407
+ value = JSON.parse(readPrivateSessionFile(sessionFile, 65536) ?? 'null');
408
+ }
409
+ catch {
410
+ return null;
411
+ }
412
+ const lineage = value?.lineage;
413
+ if (lineage !== undefined && (!lineage || typeof lineage !== 'object' || Array.isArray(lineage) || lineage.version !== 1 ||
414
+ !['manual', 'safety', 'import'].includes(lineage.kind) || typeof lineage.sessionId !== 'string' ||
415
+ !/^[a-zA-Z0-9_-]{1,200}$/.test(lineage.sessionId) || typeof lineage.revision !== 'string' || !/^[a-f0-9-]{36}$/.test(lineage.revision) ||
416
+ typeof lineage.stateHash !== 'string' || !/^[a-f0-9]{64}$/.test(lineage.stateHash) || typeof lineage.toolStateHash !== 'string' || !/^[a-f0-9]{64}$/.test(lineage.toolStateHash) ||
417
+ !Number.isFinite(Date.parse(lineage.at)) || lineage.name !== undefined && (typeof lineage.name !== 'string' || !/^[a-zA-Z0-9][a-zA-Z0-9._-]{0,63}$/.test(lineage.name))))
418
+ return null;
419
+ return value && typeof value.id === 'string' && typeof value.projectPath === 'string' && !/[\x00-\x1f\x7f]/.test(value.projectPath) && path.isAbsolute(value.projectPath)
420
+ && typeof value.projectName === 'string' && Number.isFinite(Date.parse(value.createdAt))
421
+ && Number.isFinite(Date.parse(value.lastAccessedAt)) ? value : null;
348
422
  }
349
423
  function touchSession(sessionDir, session) {
350
424
  session.lastAccessedAt = new Date().toISOString();
@@ -355,6 +429,9 @@ function touchSession(sessionDir, session) {
355
429
  * Get current session info
356
430
  */
357
431
  export function getCurrentSession() {
432
+ const id = activeSessionId();
433
+ if (id)
434
+ return getSessionById(id);
358
435
  try {
359
436
  if (fs.existsSync(paths.currentSession)) {
360
437
  return readSessionFromDir(paths.currentSession);
@@ -376,7 +453,7 @@ export function listSessions(limit = 10) {
376
453
  for (const entry of entries) {
377
454
  if (entry.isDirectory() && entry.name !== 'current') {
378
455
  const sessionFile = path.join(paths.sessions, entry.name, 'session.json');
379
- const session = readJSON(sessionFile, null);
456
+ const session = readSessionFromDir(path.dirname(sessionFile));
380
457
  if (session) {
381
458
  sessions.push(session);
382
459
  }
@@ -413,11 +490,14 @@ export function deleteSession(sessionId) {
413
490
  /**
414
491
  * Add a message to the current session's chat history
415
492
  */
416
- export function addChatMessage(message) {
417
- const session = getCurrentSession();
493
+ export function addChatMessage(message, sessionId) {
494
+ const session = sessionId ? getSessionById(sessionId) : getCurrentSession();
418
495
  if (!session)
419
496
  return;
420
- const historyFile = path.join(paths.currentSession, 'chat.log');
497
+ const dir = getSessionDirById(session.id);
498
+ if (!dir)
499
+ return;
500
+ const historyFile = path.join(dir, 'chat.log');
421
501
  const newMessage = {
422
502
  id: `msg_${Date.now()}_${Math.random().toString(36).slice(2)}`,
423
503
  timestamp: new Date().toISOString(),
@@ -426,7 +506,7 @@ export function addChatMessage(message) {
426
506
  // Append to chat log (line-based format)
427
507
  appendChatMessage(historyFile, newMessage);
428
508
  // Update session message count
429
- const sessionFile = path.join(paths.currentSession, 'session.json');
509
+ const sessionFile = path.join(dir, 'session.json');
430
510
  session.messageCount += 1;
431
511
  session.lastAccessedAt = new Date().toISOString();
432
512
  writeJSON(sessionFile, session);
@@ -435,7 +515,7 @@ export function addChatMessage(message) {
435
515
  * Get chat history for current session
436
516
  */
437
517
  export function getChatHistory(limit, sessionId) {
438
- const sessionDir = sessionId ? getSessionDirById(sessionId) : paths.currentSession;
518
+ const sessionDir = sessionId ? getSessionDirById(sessionId) : activeSessionDir();
439
519
  if (!sessionDir)
440
520
  return [];
441
521
  const history = readChatHistory(path.join(sessionDir, 'chat.log'));
@@ -457,7 +537,7 @@ export function getSessionDirById(sessionId) {
457
537
  for (const entry of entries) {
458
538
  if (entry.isDirectory() && entry.name !== 'current') {
459
539
  const sessionFile = path.join(paths.sessions, entry.name, 'session.json');
460
- const session = readJSON(sessionFile, null);
540
+ const session = readSessionFromDir(path.dirname(sessionFile));
461
541
  if (session && session.id === sessionId) {
462
542
  return path.join(paths.sessions, entry.name);
463
543
  }
@@ -504,24 +584,16 @@ function getMaxPersistedMessages() {
504
584
  }
505
585
  return DEFAULT_MAX_PERSISTED_MESSAGES;
506
586
  }
587
+ /** Legacy convenience API; new clients use explicit IDs and revisions above. */
507
588
  export function saveMessageHistory(messages) {
508
589
  const session = getCurrentSession();
509
590
  if (!session)
510
591
  return;
511
592
  try {
512
- const cap = getMaxPersistedMessages();
513
- const toPersist = messages.length > cap ? messages.slice(-cap) : messages;
514
- const messagesFile = path.join(paths.currentSession, 'messages.json');
515
- writeJSON(messagesFile, toPersist);
516
- // Update session metadata
517
- const sessionFile = path.join(paths.currentSession, 'session.json');
518
- session.messageCount = toPersist.length;
519
- session.lastAccessedAt = new Date().toISOString();
520
- writeJSON(sessionFile, session);
521
- }
522
- catch {
523
- // Silently fail - don't break the agent loop
593
+ const previous = readSessionConversation(session.id);
594
+ saveSessionConversation(session.id, messages, { expectedRevision: previous.revision, status: 'completed' });
524
595
  }
596
+ catch { /* Kept for legacy callers. Interactive recovery uses the throwing API. */ }
525
597
  }
526
598
  /**
527
599
  * Load saved LLM messages from a session.
@@ -537,15 +609,15 @@ export function loadMessageHistory(sessionId) {
537
609
  messagesFile = path.join(sessionDir, 'messages.json');
538
610
  }
539
611
  else {
540
- messagesFile = path.join(paths.currentSession, 'messages.json');
612
+ messagesFile = path.join(activeSessionDir(), 'messages.json');
541
613
  }
542
614
  if (!fs.existsSync(messagesFile))
543
615
  return null;
544
- const content = fs.readFileSync(messagesFile, 'utf-8');
545
- const messages = JSON.parse(content);
546
- if (Array.isArray(messages)) {
547
- return messages;
548
- }
616
+ const dir = fs.realpathSync(path.dirname(messagesFile));
617
+ const session = readSessionFromDir(dir);
618
+ if (!session)
619
+ return null;
620
+ return readConversation(dir, session.id).messages;
549
621
  }
550
622
  catch {
551
623
  // Ignore parse errors
@@ -674,7 +746,7 @@ export function searchChatHistory(query) {
674
746
  * Get todos for current session
675
747
  */
676
748
  export function getSessionTodos() {
677
- const todosFile = path.join(paths.currentSession, 'todos.txt');
749
+ const todosFile = path.join(activeSessionDir(), 'todos.txt');
678
750
  return readTodos(todosFile);
679
751
  }
680
752
  /**
@@ -703,7 +775,7 @@ export function addTodo(content, options = {}) {
703
775
  writeTodos(globalTodosFile, todos);
704
776
  }
705
777
  else {
706
- const todosFile = path.join(paths.currentSession, 'todos.txt');
778
+ const todosFile = path.join(activeSessionDir(), 'todos.txt');
707
779
  const todos = readTodos(todosFile);
708
780
  todos.push(todo);
709
781
  writeTodos(todosFile, todos);
@@ -716,7 +788,7 @@ export function addTodo(content, options = {}) {
716
788
  export function updateTodo(id, updates, global = false) {
717
789
  const filePath = global
718
790
  ? paths.globalTodos.replace('.json', '.txt')
719
- : path.join(paths.currentSession, 'todos.txt');
791
+ : path.join(activeSessionDir(), 'todos.txt');
720
792
  const todos = readTodos(filePath);
721
793
  const index = todos.findIndex(t => t.id === id);
722
794
  if (index === -1)
@@ -735,7 +807,7 @@ export function updateTodo(id, updates, global = false) {
735
807
  export function deleteTodo(id, global = false) {
736
808
  const filePath = global
737
809
  ? paths.globalTodos.replace('.json', '.txt')
738
- : path.join(paths.currentSession, 'todos.txt');
810
+ : path.join(activeSessionDir(), 'todos.txt');
739
811
  const todos = readTodos(filePath);
740
812
  const index = todos.findIndex(t => t.id === id);
741
813
  if (index === -1)
@@ -751,7 +823,7 @@ export function deleteTodo(id, global = false) {
751
823
  * Get plans for current session
752
824
  */
753
825
  export function getPlans() {
754
- const plansDir = path.join(paths.currentSession, 'plans');
826
+ const plansDir = path.join(activeSessionDir(), 'plans');
755
827
  if (!fs.existsSync(plansDir))
756
828
  return [];
757
829
  const plans = [];
@@ -769,7 +841,7 @@ export function getPlans() {
769
841
  * Save a plan
770
842
  */
771
843
  export function savePlan(plan) {
772
- const plansDir = path.join(paths.currentSession, 'plans');
844
+ const plansDir = path.join(activeSessionDir(), 'plans');
773
845
  if (!fs.existsSync(plansDir)) {
774
846
  fs.mkdirSync(plansDir, { recursive: true });
775
847
  }
@@ -780,14 +852,14 @@ export function savePlan(plan) {
780
852
  * Get active plan
781
853
  */
782
854
  export function getActivePlan() {
783
- const activeFile = path.join(paths.currentSession, 'plans', 'active.json');
855
+ const activeFile = path.join(activeSessionDir(), 'plans', 'active.json');
784
856
  return readJSON(activeFile, null);
785
857
  }
786
858
  /**
787
859
  * Set active plan
788
860
  */
789
861
  export function setActivePlan(plan) {
790
- const activeFile = path.join(paths.currentSession, 'plans', 'active.json');
862
+ const activeFile = path.join(activeSessionDir(), 'plans', 'active.json');
791
863
  if (plan) {
792
864
  writeJSON(activeFile, plan);
793
865
  }
@@ -999,7 +1071,7 @@ export function deleteTemplate(name) {
999
1071
  * Get active TODO file path
1000
1072
  */
1001
1073
  function getActiveTodoFilePath() {
1002
- return path.join(paths.currentSession, 'active-todo.json');
1074
+ return path.join(activeSessionDir(), 'active-todo.json');
1003
1075
  }
1004
1076
  /**
1005
1077
  * Set the active TODO