@iowarp/clio-coder 0.3.7 → 0.3.9

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 (400) hide show
  1. package/CHANGELOG.md +80 -0
  2. package/README.md +13 -4
  3. package/dist/{acp-SK4MD6MM.js → acp-7LOELQFP.js} +13 -13
  4. package/dist/{agents-2FN2K6ME.js → agents-FIBG2SHA.js} +41 -37
  5. package/dist/assets/codewiki.json +1 -1
  6. package/dist/{auth-QIYZWM5I.js → auth-OI4LIH2I.js} +31 -24
  7. package/dist/builtins-AD25UL3C.js +17 -0
  8. package/dist/{chunk-5FR74PWO.js → chunk-2JDWVJND.js} +2 -2
  9. package/dist/chunk-3DPEIQKN.js +113 -0
  10. package/dist/{chunk-EOOQZZDE.js → chunk-3DUR4WUA.js} +19 -19
  11. package/dist/{chunk-WHJYKASB.js → chunk-3MRC2YSQ.js} +2 -2
  12. package/dist/{chunk-EBEFWSGL.js → chunk-3UUY7R3Z.js} +14 -10
  13. package/dist/{chunk-LADCF22A.js → chunk-3V5AYSEQ.js} +113 -54
  14. package/dist/{chunk-BMWK7ZIZ.js → chunk-465CC7FK.js} +16 -13
  15. package/dist/{chunk-5WIGXA4T.js → chunk-47CMYGET.js} +111 -4
  16. package/dist/{chunk-CEYBNUGC.js → chunk-4H6ULJ3H.js} +378 -36
  17. package/dist/{chunk-YTYFXUI3.js → chunk-4LJX2PUC.js} +9 -9
  18. package/dist/{chunk-DOOEX22V.js → chunk-56KB5IJP.js} +5 -5
  19. package/dist/{chunk-SPULKLCF.js → chunk-5DQRIYDZ.js} +2 -2
  20. package/dist/{chunk-TSHXZTOQ.js → chunk-5HFBWUMU.js} +23 -11
  21. package/dist/{chunk-5UJ6ECTS.js → chunk-5PVQ4SRS.js} +80 -8
  22. package/dist/{chunk-ZWLZP4ZT.js → chunk-5QKCQQ3E.js} +359 -17
  23. package/dist/{chunk-6M7VS3J3.js → chunk-5T7RBWN2.js} +111 -5
  24. package/dist/chunk-774ILSRL.js +172 -0
  25. package/dist/chunk-7C6RYZGQ.js +391 -0
  26. package/dist/{chunk-GH5622CP.js → chunk-A2NJGIB3.js} +2 -2
  27. package/dist/{chunk-C4JBQ5SR.js → chunk-AD7Y7STJ.js} +6 -6
  28. package/dist/{chunk-GEYXPTRF.js → chunk-AEYBF3TB.js} +33 -12
  29. package/dist/{chunk-2SFS6XQE.js → chunk-AMKHQW3C.js} +3 -2
  30. package/dist/{chunk-D4MDIG46.js → chunk-B5CSFE7B.js} +7 -7
  31. package/dist/{chunk-MXI6J5JF.js → chunk-B5XRQOLB.js} +10 -10
  32. package/dist/{chunk-X2KV5FXT.js → chunk-BVDVID7E.js} +2 -2
  33. package/dist/{chunk-JNXPYBB4.js → chunk-CA42X6KT.js} +3 -3
  34. package/dist/{chunk-VREKEFLL.js → chunk-D73KXYPF.js} +3 -3
  35. package/dist/{chunk-JTSEDYVQ.js → chunk-DG4M6ZUE.js} +7 -7
  36. package/dist/{chunk-DQA7QLMD.js → chunk-EBOC7MT3.js} +10 -25
  37. package/dist/{chunk-KZ2H5X4G.js → chunk-ECUO3KDP.js} +129 -14
  38. package/dist/{chunk-JRIO5UD2.js → chunk-EQ63NRB7.js} +5 -5
  39. package/dist/{chunk-YD734TPH.js → chunk-FALJGAWU.js} +2 -2
  40. package/dist/{chunk-GWS3VEIW.js → chunk-FWDFM5ZU.js} +24 -3
  41. package/dist/{chunk-XEGB6BCN.js → chunk-GAYUJ7LE.js} +68 -14
  42. package/dist/{chunk-UND3GU2L.js → chunk-H7IXIC72.js} +2 -2
  43. package/dist/{chunk-IR4CFBFN.js → chunk-HAY4ZE2P.js} +12 -12
  44. package/dist/{chunk-UVDSQ6LW.js → chunk-HCBCAYZU.js} +74 -147
  45. package/dist/{chunk-4DWFMQDR.js → chunk-HJB5IUKP.js} +89 -145
  46. package/dist/{chunk-M4AKACEO.js → chunk-HKO36JWF.js} +33 -5
  47. package/dist/{chunk-KCMKRQX4.js → chunk-HPCTNZM2.js} +45 -82
  48. package/dist/{chunk-465YSENW.js → chunk-IFBNV6H6.js} +3 -3
  49. package/dist/{chunk-FJ3H4MN5.js → chunk-IHKBWSXF.js} +2 -2
  50. package/dist/chunk-JEQQR47K.js +3025 -0
  51. package/dist/{chunk-FO5ZOVUY.js → chunk-KV2AOLDF.js} +27 -7
  52. package/dist/chunk-LU7P4LHA.js +33 -0
  53. package/dist/{chunk-6TUKSZVF.js → chunk-LXPJXFM5.js} +11 -11
  54. package/dist/{chunk-VQNODYQ4.js → chunk-MIX5N5AC.js} +488 -3668
  55. package/dist/chunk-MLOK6ZOS.js +2888 -0
  56. package/dist/{chunk-ZZMN5OM4.js → chunk-MV2VUEJC.js} +2 -2
  57. package/dist/{chunk-MVVUPGPW.js → chunk-MXHC5QYU.js} +6 -6
  58. package/dist/{chunk-OBMAI2DP.js → chunk-N3PBVRTZ.js} +12 -388
  59. package/dist/{chunk-WJHBC77E.js → chunk-N5XKWMDW.js} +17 -7
  60. package/dist/{chunk-5C3AQNDW.js → chunk-NNNWO6F2.js} +124 -36
  61. package/dist/{chunk-UFQ3F4FW.js → chunk-NQ6UCCOD.js} +4 -4
  62. package/dist/chunk-NUGM5KR6.js +165 -0
  63. package/dist/{chunk-DMD2AGVS.js → chunk-NZU6YDNV.js} +20 -18
  64. package/dist/{chunk-WHGPSPT5.js → chunk-O6I4CIEU.js} +151 -13
  65. package/dist/{chunk-XN3L4EYL.js → chunk-OEDBCISO.js} +2 -2
  66. package/dist/{chunk-PD3MESLB.js → chunk-P3JGPQFL.js} +4 -4
  67. package/dist/{chunk-UHXRNZ2J.js → chunk-PNY46YEY.js} +23 -6
  68. package/dist/{chunk-THKY7CD7.js → chunk-PZ4I4JE2.js} +134 -29
  69. package/dist/{chunk-SROCI7ZU.js → chunk-QQ7EKM72.js} +5 -5
  70. package/dist/{chunk-QCTRSGHQ.js → chunk-R7LNVMCS.js} +91 -53
  71. package/dist/{chunk-GOXNB3AO.js → chunk-RAPCMZL4.js} +75 -4
  72. package/dist/chunk-RKKLTLYB.js +45 -0
  73. package/dist/{chunk-OB5HIGJY.js → chunk-RKRLDWD3.js} +4 -1
  74. package/dist/{chunk-DJNLUABN.js → chunk-S4COXYBG.js} +588 -32
  75. package/dist/{chunk-3HAPLH5M.js → chunk-T3Z6VAAF.js} +172 -11
  76. package/dist/{chunk-FOT2FX5J.js → chunk-TD7UE2L5.js} +12 -10
  77. package/dist/{chunk-UUANF5CR.js → chunk-TEO2TLVN.js} +856 -967
  78. package/dist/{chunk-FCSXB6T2.js → chunk-UOSL25KY.js} +14 -2
  79. package/dist/{chunk-EELBMBT6.js → chunk-VKBMFOYV.js} +74 -15
  80. package/dist/chunk-VO2LKSTM.js +165 -0
  81. package/dist/{chunk-5C77SEEY.js → chunk-VPTUJU4P.js} +3 -3
  82. package/dist/{chunk-WEH5XRJQ.js → chunk-WIE7ZOSW.js} +2 -2
  83. package/dist/{chunk-J7PIKKWC.js → chunk-WXCJ7VME.js} +8 -8
  84. package/dist/{chunk-4DGYLA73.js → chunk-XDOQXGFO.js} +22 -7
  85. package/dist/{chunk-PPAMZ32Z.js → chunk-XK56QHLX.js} +6 -1
  86. package/dist/{chunk-AB4XIIVB.js → chunk-YKOFT37S.js} +6 -6
  87. package/dist/chunk-YSEHGPCT.js +127 -0
  88. package/dist/{chunk-HFSBBKSQ.js → chunk-YW7UVM5V.js} +138 -3
  89. package/dist/cli/index.js +32 -32
  90. package/dist/{clio-WBVQEBKO.js → clio-LT5V7SSZ.js} +9 -9
  91. package/dist/{code-nav-FGGFIE7L.js → code-nav-LMW275PA.js} +5 -5
  92. package/dist/codewiki/build-worker.js +4 -4
  93. package/dist/{components-F7OEATSO.js → components-ZFA3SAER.js} +8 -8
  94. package/dist/{config-TRBL3RCF.js → config-RXS5T3JT.js} +98 -65
  95. package/dist/{configure-OLCVPHNM.js → configure-2WYWSCSD.js} +26 -22
  96. package/dist/{context-MJIJ6GOX.js → context-I3BTOTCS.js} +12 -12
  97. package/dist/{context-XEWE3MOJ.js → context-MVOORGMF.js} +54 -47
  98. package/dist/{context-WFPKQSM6.js → context-PALKKQYL.js} +28 -28
  99. package/dist/{context-clear-KNOS2JPB.js → context-clear-N2WOYZ2K.js} +53 -46
  100. package/dist/{context-index-SSR5ECNE.js → context-index-HNG3MOME.js} +6 -6
  101. package/dist/{context-working-set-EUXAZI6N.js → context-working-set-MIEVECVZ.js} +17 -18
  102. package/dist/{dispatch-runner-B7MTOVKL.js → dispatch-runner-VVA4SRRH.js} +90 -61
  103. package/dist/{docs-FLJTIDSE.js → docs-7LQ23DLM.js} +8 -8
  104. package/dist/doctor-TWBWFK5V.js +165 -0
  105. package/dist/eval-IJ5VEZDJ.js +4483 -0
  106. package/dist/{evidence-JZNBUOQZ.js → evidence-L5APPXNV.js} +68 -61
  107. package/dist/{evolve-FJVC4KKI.js → evolve-RGNKFJ52.js} +47 -40
  108. package/dist/{extensions-IQL36S7K.js → extensions-7WYWUX5A.js} +13 -7
  109. package/dist/{fleet-BDKYJFCP.js → fleet-6CNVBZZP.js} +113 -76
  110. package/dist/{fleet-commands-ZFIWZSB3.js → fleet-commands-L2SXSYEI.js} +10 -10
  111. package/dist/{fleet-graph-Y6HPXIVF.js → fleet-graph-2J3OOIPO.js} +17 -15
  112. package/dist/{fleet-preflight-BHSNPBMH.js → fleet-preflight-CZRJ4JP5.js} +5 -6
  113. package/dist/{fleet-validate-BIYREGIK.js → fleet-validate-C5RI6DP7.js} +20 -19
  114. package/dist/{init-LQUB5COQ.js → init-VBN2ACVA.js} +70 -63
  115. package/dist/{library-NJAHIGG4.js → library-JHGUMLY2.js} +22 -20
  116. package/dist/{memory-OG6HOYKM.js → memory-K4OQIYWG.js} +49 -42
  117. package/dist/{models-5ZG5XY7J.js → models-2NCZUWDD.js} +35 -29
  118. package/dist/{monitor-TJ7AMTGB.js → monitor-MMVTJABD.js} +64 -45
  119. package/dist/{orchestrator-WZYB54DM.js → orchestrator-ZKBPCHW6.js} +1971 -520
  120. package/dist/{paths-XUC7GS6E.js → paths-DBXMZMDU.js} +5 -5
  121. package/dist/registry-LG64LTF4.js +11 -0
  122. package/dist/{reset-PXQT45IY.js → reset-DD5JGOY3.js} +11 -11
  123. package/dist/{run-FQ74YF62.js → run-QEGNX7FL.js} +89 -83
  124. package/dist/{share-FW7SVCL3.js → share-JKD3BQMW.js} +20 -18
  125. package/dist/{skills-7E7IRB3R.js → skills-LMQIKDOZ.js} +23 -21
  126. package/dist/{skills-eval-LI75W6OK.js → skills-eval-I7X2774U.js} +59 -52
  127. package/dist/{steer-GGWFUJUD.js → steer-CF5TDANS.js} +3 -3
  128. package/dist/support-I7LOJLIF.js +38 -0
  129. package/dist/{targets-4CIFKCTW.js → targets-RUSR6B5Z.js} +77 -42
  130. package/dist/{terminal-lease-WUZY7ZV5.js → terminal-lease-QYVORFR4.js} +6 -4
  131. package/dist/{trace-PNCASAXC.js → trace-ODOQIVIW.js} +61 -6
  132. package/dist/{uninstall-7FV7IP4E.js → uninstall-ZJF5H5ZN.js} +8 -8
  133. package/dist/{upgrade-K2HVIVMQ.js → upgrade-XANW3FXB.js} +29 -26
  134. package/dist/{usage-GTZELZQX.js → usage-4H7ZRXQT.js} +110 -61
  135. package/dist/{verifiers-RLAHT27O.js → verifiers-UZXNBZEB.js} +13 -13
  136. package/dist/{verify-BX3BRKH5.js → verify-BVKWTNDL.js} +9 -9
  137. package/dist/{wiki-generate-ASIFASCN.js → wiki-generate-MY7WV2QI.js} +76 -69
  138. package/dist/worker/entry.js +69 -66
  139. package/docs/alcf-provider.md +1 -1
  140. package/docs/architecture.md +1 -1
  141. package/docs/artifact-versions.md +11 -5
  142. package/docs/built-in-agents.md +1 -1
  143. package/docs/capacity-and-scheduling.md +23 -2
  144. package/docs/commands-and-modes.md +2 -2
  145. package/docs/configuration-and-targets.md +37 -5
  146. package/docs/context-engine.md +63 -4
  147. package/docs/documentation-coverage.md +3 -3
  148. package/docs/documentation-guide.md +1 -1
  149. package/docs/environment-variables.md +2 -0
  150. package/docs/eval-runner.md +262 -11
  151. package/docs/evals-internal.md +72 -2
  152. package/docs/evidence-and-memory.md +77 -12
  153. package/docs/evolution.md +1 -1
  154. package/docs/extensions-and-sharing.md +3 -1
  155. package/docs/fleet-dispatch.md +34 -9
  156. package/docs/glossary.md +21 -1
  157. package/docs/installation-and-lifecycle.md +1 -1
  158. package/docs/middleware-and-components.md +1 -1
  159. package/docs/model-catalog.md +1 -1
  160. package/docs/observability.md +54 -3
  161. package/docs/proactive-memory.md +127 -14
  162. package/docs/prompt-envelope-and-tools.md +22 -2
  163. package/docs/provider-adapter-cookbook.md +1 -1
  164. package/docs/release-cut-checklist.md +60 -41
  165. package/docs/safety-model.md +1 -1
  166. package/docs/scientific-validation.md +1 -1
  167. package/docs/skills-marketplace.md +1 -1
  168. package/docs/tool-usage.md +1 -1
  169. package/docs/trace-store.md +1 -1
  170. package/docs/troubleshooting.md +87 -0
  171. package/docs/tui-design.md +1 -1
  172. package/docs/worker-dispatch-mechanics.md +1 -1
  173. package/package.json +2 -2
  174. package/src/cli/agents.ts +1 -1
  175. package/src/cli/argv.ts +5 -0
  176. package/src/cli/config-inspect.ts +33 -6
  177. package/src/cli/config.ts +1 -1
  178. package/src/cli/configure.ts +107 -23
  179. package/src/cli/doctor-state-size.ts +82 -0
  180. package/src/cli/doctor.ts +7 -1
  181. package/src/cli/eval.ts +80 -16
  182. package/src/cli/evidence.ts +30 -25
  183. package/src/cli/extensions.ts +5 -1
  184. package/src/cli/fleet-preflight.ts +2 -12
  185. package/src/cli/fleet.ts +32 -3
  186. package/src/cli/shared.ts +1 -0
  187. package/src/cli/targets.ts +45 -11
  188. package/src/cli/trace.ts +63 -4
  189. package/src/cli/usage.ts +63 -14
  190. package/src/cli/validate-model.ts +60 -5
  191. package/src/core/bus-events.ts +54 -1
  192. package/src/core/cache-telemetry.ts +42 -0
  193. package/src/core/commit-attribution.ts +4 -4
  194. package/src/core/config.ts +18 -0
  195. package/src/core/defaults.ts +36 -6
  196. package/src/core/endpoint-key.ts +27 -0
  197. package/src/core/path-boundary.ts +100 -0
  198. package/src/core/residency-target-key.ts +25 -0
  199. package/src/core/response-schema.ts +36 -2
  200. package/src/domains/agents/extension.ts +2 -11
  201. package/src/domains/agents/fleet-contract.ts +30 -12
  202. package/src/domains/agents/recipe.ts +7 -1
  203. package/src/domains/agents/registry.ts +73 -5
  204. package/src/domains/agents/result-contract.ts +128 -17
  205. package/src/domains/agents/write-boundary.ts +15 -50
  206. package/src/domains/config/classify.ts +3 -0
  207. package/src/domains/context/codewiki/coordinator.ts +12 -4
  208. package/src/domains/context/project-rules.ts +51 -1
  209. package/src/domains/dispatch/admission.ts +40 -3
  210. package/src/domains/dispatch/assignment-reconcile.ts +22 -5
  211. package/src/domains/dispatch/assignment-store.ts +151 -14
  212. package/src/domains/dispatch/capacity-lease.ts +98 -9
  213. package/src/domains/dispatch/contract.ts +26 -1
  214. package/src/domains/dispatch/delegation-plan.ts +2 -5
  215. package/src/domains/dispatch/execution-plan.ts +44 -4
  216. package/src/domains/dispatch/execution-role.ts +9 -1
  217. package/src/domains/dispatch/extension.ts +309 -96
  218. package/src/domains/dispatch/fleet-run.ts +78 -4
  219. package/src/domains/dispatch/gate-role-prompts.ts +38 -0
  220. package/src/domains/dispatch/heartbeat.ts +32 -8
  221. package/src/domains/dispatch/index.ts +6 -1
  222. package/src/domains/dispatch/intent-requirements.ts +40 -0
  223. package/src/domains/dispatch/intent.ts +84 -8
  224. package/src/domains/dispatch/orphan-recovery.ts +5 -0
  225. package/src/domains/dispatch/path-scope.ts +370 -0
  226. package/src/domains/dispatch/receipt-integrity.ts +2 -1
  227. package/src/domains/dispatch/reservation-store.ts +116 -8
  228. package/src/domains/dispatch/state.ts +4 -0
  229. package/src/domains/dispatch/types.ts +14 -7
  230. package/src/domains/dispatch/validation.ts +6 -3
  231. package/src/domains/dispatch/worker-spawn.ts +25 -11
  232. package/src/domains/dispatch/write-boundary-enforcer.ts +62 -0
  233. package/src/domains/dispatch/write-boundary.ts +262 -22
  234. package/src/domains/eval/artifacts/store.ts +62 -0
  235. package/src/domains/eval/compare/behavioral.ts +224 -0
  236. package/src/domains/eval/compare/compare.ts +355 -2
  237. package/src/domains/eval/compare/envelope.ts +128 -0
  238. package/src/domains/eval/compare/gates.ts +24 -6
  239. package/src/domains/eval/compare/thresholds.ts +30 -3
  240. package/src/domains/eval/execution-provenance.ts +240 -0
  241. package/src/domains/eval/metrics/aggregate.ts +136 -0
  242. package/src/domains/eval/metrics/call-ledger-stream.ts +112 -0
  243. package/src/domains/eval/metrics/evidence.ts +79 -2
  244. package/src/domains/eval/metrics/tracked.ts +413 -0
  245. package/src/domains/eval/provenance.ts +117 -0
  246. package/src/domains/eval/reports/comparison.ts +128 -0
  247. package/src/domains/eval/reports/junit.ts +17 -3
  248. package/src/domains/eval/reports/markdown.ts +3 -3
  249. package/src/domains/eval/reports/text.ts +14 -0
  250. package/src/domains/eval/run-compare.ts +20 -0
  251. package/src/domains/eval/runners/clio-run.ts +139 -2
  252. package/src/domains/eval/runners/external-command.ts +28 -3
  253. package/src/domains/eval/schema/adapter.ts +111 -0
  254. package/src/domains/eval/schema/artifact.ts +20 -0
  255. package/src/domains/eval/schema/behavioral-metrics.ts +204 -0
  256. package/src/domains/eval/schema/behavioral.ts +520 -0
  257. package/src/domains/eval/schema/execution-envelope.ts +194 -0
  258. package/src/domains/eval/schema/serving.ts +74 -0
  259. package/src/domains/eval/schema/suite.ts +38 -8
  260. package/src/domains/eval/schema/validate.ts +58 -3
  261. package/src/domains/eval/schema/verdict.ts +237 -0
  262. package/src/domains/eval/suites/resolve.ts +2 -0
  263. package/src/domains/eval/suites/run.ts +264 -33
  264. package/src/domains/eval/verifiers/command.ts +2 -1
  265. package/src/domains/eval/workspaces/temp-copy.ts +145 -13
  266. package/src/domains/evidence/build.ts +68 -21
  267. package/src/domains/evidence/eval.ts +2 -12
  268. package/src/domains/evidence/findings-markdown.ts +33 -0
  269. package/src/domains/evidence/index.ts +21 -0
  270. package/src/domains/evidence/provenance.ts +46 -11
  271. package/src/domains/evidence/run-trust.ts +7 -113
  272. package/src/domains/evidence/trust-projection.ts +274 -0
  273. package/src/domains/evidence/trust-status.ts +145 -17
  274. package/src/domains/evidence/types.ts +4 -0
  275. package/src/domains/extensions/compatibility.ts +285 -0
  276. package/src/domains/extensions/discovery.ts +126 -4
  277. package/src/domains/extensions/resources.ts +21 -9
  278. package/src/domains/extensions/state.ts +18 -5
  279. package/src/domains/extensions/types.ts +6 -1
  280. package/src/domains/lifecycle/doctor.ts +209 -2
  281. package/src/domains/memory/index.ts +14 -0
  282. package/src/domains/memory/task-bank-promotion.ts +64 -0
  283. package/src/domains/memory/task-memory-policy.ts +77 -8
  284. package/src/domains/memory/task-memory-spend.ts +131 -0
  285. package/src/domains/memory/task-memory-status.ts +7 -0
  286. package/src/domains/memory/task-memory-telemetry.ts +2 -0
  287. package/src/domains/middleware/index.ts +1 -0
  288. package/src/domains/middleware/memory-intervention.ts +69 -5
  289. package/src/domains/middleware/memory-step-endpoint.ts +71 -0
  290. package/src/domains/observability/background-memory-usage.ts +140 -0
  291. package/src/domains/observability/cost.ts +1 -1
  292. package/src/domains/observability/index.ts +7 -0
  293. package/src/domains/observability/out-of-turn-usage.ts +51 -2
  294. package/src/domains/observability/trace-store.ts +192 -2
  295. package/src/domains/prompts/compiler.ts +100 -13
  296. package/src/domains/prompts/contract.ts +3 -5
  297. package/src/domains/providers/endpoint-capacity.ts +96 -0
  298. package/src/domains/providers/extension.ts +30 -2
  299. package/src/domains/providers/index.ts +10 -0
  300. package/src/domains/providers/models/local-models/clio-local-coding-targets.yaml +243 -1
  301. package/src/domains/providers/runtime-resolution.ts +8 -1
  302. package/src/domains/providers/runtimes/common/probe-helpers.ts +31 -9
  303. package/src/domains/providers/runtimes/local-native/llamacpp-anthropic.ts +1 -1
  304. package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
  305. package/src/domains/providers/runtimes/local-native/llamacpp-embed.ts +1 -1
  306. package/src/domains/providers/runtimes/local-native/llamacpp-rerank.ts +1 -1
  307. package/src/domains/providers/runtimes/local-native/llamacpp.ts +4 -1
  308. package/src/domains/providers/runtimes/local-native/lmstudio.ts +4 -1
  309. package/src/domains/providers/runtimes/local-native/ollama-native.ts +6 -1
  310. package/src/domains/providers/types/capability-flags.ts +2 -0
  311. package/src/domains/providers/types/target-descriptor.ts +2 -0
  312. package/src/domains/resources/common-loader.ts +3 -0
  313. package/src/domains/resources/prompts/loader.ts +184 -17
  314. package/src/domains/safety/call-target.ts +52 -0
  315. package/src/domains/safety/policy-engine.ts +5 -5
  316. package/src/domains/safety/run-effects.ts +96 -2
  317. package/src/domains/safety/scope.ts +7 -12
  318. package/src/domains/session/context-accounting.ts +52 -1
  319. package/src/domains/session/context-ledger.ts +37 -13
  320. package/src/domains/session/index.ts +6 -0
  321. package/src/domains/session/prompt-cache.ts +140 -0
  322. package/src/domains/session/prompt-manifest.ts +42 -0
  323. package/src/engine/acp/adapter.ts +18 -3
  324. package/src/engine/acp/server.ts +4 -1
  325. package/src/engine/ai.ts +35 -0
  326. package/src/engine/apis/llamacpp-residency.ts +55 -3
  327. package/src/engine/apis/lmstudio.ts +25 -5
  328. package/src/engine/apis/ollama-native.ts +2 -1
  329. package/src/engine/apis/openai-completions.ts +80 -17
  330. package/src/engine/apis/residency-lock.ts +3 -1
  331. package/src/engine/apis/residency.ts +34 -1
  332. package/src/engine/prompt-templates.ts +18 -1
  333. package/src/engine/provider-payload.ts +29 -1
  334. package/src/engine/worker-runtime.ts +6 -3
  335. package/src/entry/orchestrator.ts +176 -30
  336. package/src/interactive/chat-loop-messages.ts +26 -7
  337. package/src/interactive/chat-loop.ts +318 -41
  338. package/src/interactive/chat-panel.ts +62 -8
  339. package/src/interactive/clio-editor.ts +45 -8
  340. package/src/interactive/context-activity.ts +5 -1
  341. package/src/interactive/context-meter.ts +1 -1
  342. package/src/interactive/context-overlay.ts +40 -10
  343. package/src/interactive/cost-overlay.ts +64 -6
  344. package/src/interactive/dispatch-board.ts +127 -5
  345. package/src/interactive/fleet-run-preview.ts +41 -15
  346. package/src/interactive/handoff-round.ts +41 -2
  347. package/src/interactive/interactive-application.ts +24 -1
  348. package/src/interactive/interactive-event-projection.ts +14 -0
  349. package/src/interactive/interactive-input-runtime.ts +8 -0
  350. package/src/interactive/interactive-presentation.ts +4 -0
  351. package/src/interactive/interactive-shell.ts +20 -17
  352. package/src/interactive/interactive-slash-runtime.ts +27 -4
  353. package/src/interactive/memory-overlay.ts +8 -0
  354. package/src/interactive/mutation-preview.ts +295 -0
  355. package/src/interactive/overlay-general-openers.ts +16 -0
  356. package/src/interactive/overlay-key-routing.ts +38 -0
  357. package/src/interactive/overlay-lifecycle.ts +38 -5
  358. package/src/interactive/overlay-permission-lifecycle.ts +22 -2
  359. package/src/interactive/overlay-session-lifecycle.ts +73 -9
  360. package/src/interactive/overlays/ask-user.ts +91 -19
  361. package/src/interactive/overlays/help-reference.ts +4 -0
  362. package/src/interactive/overlays/prompts.ts +11 -1
  363. package/src/interactive/overlays/settings.ts +176 -48
  364. package/src/interactive/permission-hint.ts +34 -2
  365. package/src/interactive/permission-overlay.ts +159 -9
  366. package/src/interactive/prewarm.ts +197 -0
  367. package/src/interactive/render-trace.ts +162 -15
  368. package/src/interactive/renderers/tool-execution.ts +4 -0
  369. package/src/interactive/side-question.ts +58 -1
  370. package/src/interactive/slash-commands.ts +7 -2
  371. package/src/interactive/status/controller.ts +11 -0
  372. package/src/interactive/status/state-machine.ts +54 -2
  373. package/src/interactive/status/types.ts +7 -0
  374. package/src/interactive/terminal-lease.ts +2 -0
  375. package/src/interactive/turn-context.ts +299 -31
  376. package/src/interactive/turn-persistence.ts +14 -4
  377. package/src/interactive/turn-prewarm.ts +364 -0
  378. package/src/interactive/turn-queues.ts +7 -4
  379. package/src/interactive/turn-runtime.ts +8 -1
  380. package/src/interactive/turn-state.ts +23 -0
  381. package/src/interactive/view/artifacts.ts +42 -9
  382. package/src/interactive/view/view-overlay.ts +43 -6
  383. package/src/interactive/worker-receipts.ts +14 -2
  384. package/src/interactive/worker-stream.ts +8 -0
  385. package/src/tools/ask-user.ts +43 -2
  386. package/src/tools/dispatch-admission.ts +12 -13
  387. package/src/tools/dispatch-arguments.ts +27 -0
  388. package/src/tools/dispatch-plan.ts +46 -9
  389. package/src/tools/dispatch-runner.ts +48 -13
  390. package/src/tools/dispatch-scout.ts +1 -1
  391. package/src/tools/monitor.ts +13 -0
  392. package/src/tools/registry.ts +16 -0
  393. package/src/tools/worker-evidence.ts +19 -13
  394. package/src/worker/spec-contract.ts +2 -1
  395. package/dist/chunk-AOCYTWAV.js +0 -449
  396. package/dist/chunk-HWUFFB6L.js +0 -83
  397. package/dist/chunk-R346GLFC.js +0 -31
  398. package/dist/chunk-ZGH7FGS5.js +0 -1079
  399. package/dist/doctor-RN4YKO2X.js +0 -87
  400. package/dist/eval-RUBJVSNQ.js +0 -2557
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
2
  import {
3
3
  ceilChars
4
- } from "./chunk-GEYXPTRF.js";
4
+ } from "./chunk-AEYBF3TB.js";
5
5
  import {
6
6
  clioStateDir
7
7
  } from "./chunk-BNAZZHFG.js";
@@ -231,6 +231,83 @@ function taskMemoryBankDelta(before, after) {
231
231
  procedural: entryDelta(before.procedural, after.procedural)
232
232
  };
233
233
  }
234
+ function parseTaskMemoryTelemetryRecord(value) {
235
+ if (!isRecord(value) || !hasExactKeys(value, TELEMETRY_KEYS)) return null;
236
+ if (value.version !== TASK_MEMORY_TELEMETRY_VERSION || !validIsoTimestamp(value.at)) return null;
237
+ if (!validTriggerReasons(value.triggerReasons) || !isTier(value.tier) || !isDecision(value.decision)) return null;
238
+ if (!isReason(value.reason) || !isNonNegativeInteger(value.citedEntries)) return null;
239
+ if (!isNonNegativeInteger(value.bankOperations) || !isNonNegativeInteger(value.droppedOperations)) return null;
240
+ const bankDelta = parseBankDelta(value.bankDelta);
241
+ const tokenCost = parseTokenCost(value.tokenCost);
242
+ if (bankDelta === null || tokenCost === null || !isNonNegativeFinite(value.latencyMs)) return null;
243
+ return {
244
+ version: TASK_MEMORY_TELEMETRY_VERSION,
245
+ at: value.at,
246
+ triggerReasons: value.triggerReasons,
247
+ tier: value.tier,
248
+ bankDelta,
249
+ decision: value.decision,
250
+ reason: value.reason,
251
+ bankOperations: value.bankOperations,
252
+ droppedOperations: value.droppedOperations,
253
+ citedEntries: value.citedEntries,
254
+ tokenCost,
255
+ latencyMs: value.latencyMs
256
+ };
257
+ }
258
+ var TELEMETRY_KEYS = [
259
+ "version",
260
+ "at",
261
+ "triggerReasons",
262
+ "tier",
263
+ "bankDelta",
264
+ "decision",
265
+ "reason",
266
+ "bankOperations",
267
+ "droppedOperations",
268
+ "citedEntries",
269
+ "tokenCost",
270
+ "latencyMs"
271
+ ];
272
+ var DELTA_KEYS = ["status", "knowledge", "procedural"];
273
+ var CLASS_DELTA_KEYS = ["added", "updated", "deleted"];
274
+ var TOKEN_KEYS = ["input", "output", "total"];
275
+ var TRIGGERS = /* @__PURE__ */ new Set([
276
+ "interval",
277
+ "tool_error_streak",
278
+ "loop_signal",
279
+ "repeated_failure",
280
+ "turn_end",
281
+ "post_compaction",
282
+ "manual"
283
+ ]);
284
+ var DECISIONS = /* @__PURE__ */ new Set([
285
+ "silent",
286
+ "injected",
287
+ "gated",
288
+ "timeout",
289
+ "malformed",
290
+ "dropped"
291
+ ]);
292
+ var REASONS = /* @__PURE__ */ new Set([
293
+ "intervened",
294
+ "model_silent",
295
+ "duplicate_reminder",
296
+ "suppressed",
297
+ "uncited",
298
+ "over_budget",
299
+ "unparseable",
300
+ "all_operations_invalid",
301
+ "deadline",
302
+ "timed_out",
303
+ "endpoint_busy",
304
+ "client_error",
305
+ "no_client",
306
+ "no_consumer",
307
+ "step_in_flight",
308
+ "no_repeated_failure",
309
+ "bank_empty"
310
+ ]);
234
311
  function entryDelta(before, after) {
235
312
  const old = new Map(before.map((entry) => [entry.id, entry]));
236
313
  const next = new Map(after.map((entry) => [entry.id, entry]));
@@ -250,9 +327,58 @@ function entryDelta(before, after) {
250
327
  function sameEntry(left, right) {
251
328
  return left.content === right.content && left.createdAt === right.createdAt;
252
329
  }
330
+ function parseBankDelta(value) {
331
+ if (!isRecord(value) || !hasExactKeys(value, DELTA_KEYS)) return null;
332
+ const status = parseClassDelta(value.status);
333
+ const knowledge = parseClassDelta(value.knowledge);
334
+ const procedural = parseClassDelta(value.procedural);
335
+ return status === null || knowledge === null || procedural === null ? null : { status, knowledge, procedural };
336
+ }
337
+ function parseClassDelta(value) {
338
+ if (!isRecord(value) || !hasExactKeys(value, CLASS_DELTA_KEYS)) return null;
339
+ return isNonNegativeInteger(value.added) && isNonNegativeInteger(value.updated) && isNonNegativeInteger(value.deleted) ? { added: value.added, updated: value.updated, deleted: value.deleted } : null;
340
+ }
341
+ function parseTokenCost(value) {
342
+ if (!isRecord(value) || !hasExactKeys(value, TOKEN_KEYS)) return null;
343
+ if (!isNonNegativeInteger(value.input) || !isNonNegativeInteger(value.output) || !isNonNegativeInteger(value.total))
344
+ return null;
345
+ if (value.total !== value.input + value.output) return null;
346
+ return { input: value.input, output: value.output, total: value.total };
347
+ }
348
+ function validTriggerReasons(value) {
349
+ return Array.isArray(value) && value.length > 0 && value.length <= 3 && new Set(value).size === value.length && value.every((item) => typeof item === "string" && TRIGGERS.has(item));
350
+ }
351
+ function isTier(value) {
352
+ return value === "rules" || value === "llm";
353
+ }
354
+ function isDecision(value) {
355
+ return typeof value === "string" && DECISIONS.has(value);
356
+ }
357
+ function isReason(value) {
358
+ return typeof value === "string" && REASONS.has(value);
359
+ }
360
+ function validIsoTimestamp(value) {
361
+ if (typeof value !== "string" || value.length > 40) return false;
362
+ const timestamp = Date.parse(value);
363
+ return Number.isFinite(timestamp) && new Date(timestamp).toISOString() === value;
364
+ }
365
+ function isRecord(value) {
366
+ return typeof value === "object" && value !== null && !Array.isArray(value);
367
+ }
368
+ function hasExactKeys(value, keys) {
369
+ const actual = Object.keys(value).sort();
370
+ const expected = [...keys].sort();
371
+ return actual.length === expected.length && actual.every((key, index) => key === expected[index]);
372
+ }
373
+ function isNonNegativeInteger(value) {
374
+ return typeof value === "number" && Number.isSafeInteger(value) && value >= 0;
375
+ }
253
376
  function nonNegativeInteger(value) {
254
377
  return Number.isSafeInteger(value) && value >= 0 ? value : 0;
255
378
  }
379
+ function isNonNegativeFinite(value) {
380
+ return typeof value === "number" && Number.isFinite(value) && value >= 0;
381
+ }
256
382
  function nonNegativeFinite(value) {
257
383
  return Number.isFinite(value) && value >= 0 ? value : 0;
258
384
  }
@@ -303,7 +429,7 @@ function buildMemoryInterventionUserPrompt(input) {
303
429
 
304
430
  // src/domains/memory/task-memory-policy.ts
305
431
  var TASK_MEMORY_POLICY_MAX_OPERATIONS = 8;
306
- var TASK_MEMORY_POLICY_DEFAULT_TIMEOUT_MS = 18e4;
432
+ var TASK_MEMORY_POLICY_DEFAULT_TIMEOUT_MS = 3e4;
307
433
  var TASK_MEMORY_POLICY_MODEL_MAX_OUTPUT_TOKENS = 4e3;
308
434
  var TASK_PROMPT_MAX_CHARS = 2e3;
309
435
  var TRAJECTORY_PROMPT_MAX_CHARS = 4e3;
@@ -331,6 +457,7 @@ async function runTaskMemoryPolicy(bank, client, input) {
331
457
  let userPrompt = "";
332
458
  let rawResponse = "";
333
459
  let clientError = null;
460
+ let stepUsage = null;
334
461
  const settle = (decision, reason, parts = {}) => {
335
462
  const result = {
336
463
  decision,
@@ -339,7 +466,8 @@ async function runTaskMemoryPolicy(bank, client, input) {
339
466
  droppedOperations: parts.droppedOperations ?? 0,
340
467
  reminder: parts.reminder ?? null,
341
468
  inputTokens: parts.inputTokens ?? 0,
342
- outputTokens: parts.outputTokens ?? 0
469
+ outputTokens: parts.outputTokens ?? 0,
470
+ usage: stepUsage
343
471
  };
344
472
  try {
345
473
  input.onEnvelope?.({
@@ -379,9 +507,10 @@ async function runTaskMemoryPolicy(bank, client, input) {
379
507
  return settle("timeout", "deadline");
380
508
  }
381
509
  rawResponse = typeof response.text === "string" ? response.text : "";
510
+ stepUsage = response.usage ?? null;
382
511
  const usage = {
383
- inputTokens: nonNegativeInteger2(response.inputTokens),
384
- outputTokens: nonNegativeInteger2(response.outputTokens)
512
+ inputTokens: nonNegativeInteger2(response.inputTokens ?? stepUsage?.input),
513
+ outputTokens: nonNegativeInteger2(response.outputTokens ?? stepUsage?.output)
385
514
  };
386
515
  const read = readPolicyStep(rawResponse);
387
516
  if (!read.ok) return settle("malformed", read.reason, { ...usage, droppedOperations: read.dropped });
@@ -403,6 +532,7 @@ async function runTaskMemoryPolicy(bank, client, input) {
403
532
  return settle("injected", "intervened", { ...counts, reminder });
404
533
  } catch (error) {
405
534
  clientError = errorMessage(error);
535
+ if (isTimeoutError(error)) return settle("timeout", "timed_out");
406
536
  return settle("silent", "client_error");
407
537
  } finally {
408
538
  if (timer !== void 0) clearTimeout(timer);
@@ -493,10 +623,10 @@ function readOperations(value) {
493
623
  const operations = [];
494
624
  let dropped = 0;
495
625
  for (const raw of value) {
496
- if (!isRecord(raw) || typeof raw.op !== "string") return null;
626
+ if (!isRecord2(raw) || typeof raw.op !== "string") return null;
497
627
  switch (raw.op) {
498
628
  case "update_status": {
499
- if (!hasExactKeys(raw, ["op", "content"])) return null;
629
+ if (!hasExactKeys2(raw, ["op", "content"])) return null;
500
630
  const content = boundedContent(raw.content);
501
631
  if (content === null) return null;
502
632
  operations.push({ op: raw.op, content });
@@ -504,7 +634,7 @@ function readOperations(value) {
504
634
  }
505
635
  case "save_knowledge":
506
636
  case "save_procedural": {
507
- if (!hasExactKeys(raw, raw.id === void 0 ? ["op", "content"] : ["op", "content", "id"])) return null;
637
+ if (!hasExactKeys2(raw, raw.id === void 0 ? ["op", "content"] : ["op", "content", "id"])) return null;
508
638
  const content = boundedContent(raw.content);
509
639
  if (content === null) return null;
510
640
  if (raw.id !== void 0 && !nonEmptyString(raw.id)) return null;
@@ -514,7 +644,7 @@ function readOperations(value) {
514
644
  break;
515
645
  }
516
646
  case "delete":
517
- if (!hasExactKeys(raw, ["op", "id"]) || !nonEmptyString(raw.id)) return null;
647
+ if (!hasExactKeys2(raw, ["op", "id"]) || !nonEmptyString(raw.id)) return null;
518
648
  operations.push({ op: raw.op, id: raw.id });
519
649
  break;
520
650
  default:
@@ -585,10 +715,10 @@ function boundedContent(value) {
585
715
  const normalized = value.replace(/\s+/gu, " ").trim();
586
716
  return normalized.length > 0 && normalized.length <= TASK_MEMORY_CONTENT_MAX_CHARS ? normalized : null;
587
717
  }
588
- function isRecord(value) {
718
+ function isRecord2(value) {
589
719
  return value !== null && typeof value === "object" && !Array.isArray(value);
590
720
  }
591
- function hasExactKeys(record, expected) {
721
+ function hasExactKeys2(record, expected) {
592
722
  const keys = Object.keys(record).sort();
593
723
  return keys.length === expected.length && [...expected].sort().every((key, index) => keys[index] === key);
594
724
  }
@@ -601,6 +731,12 @@ function positiveInteger2(value, fallback) {
601
731
  function nonNegativeInteger2(value) {
602
732
  return value !== void 0 && Number.isInteger(value) && value >= 0 ? value : 0;
603
733
  }
734
+ function isTimeoutError(error) {
735
+ const name = error instanceof Error ? error.name : "";
736
+ if (name === "AbortError" || name === "TimeoutError") return true;
737
+ const message = error instanceof Error ? error.message : typeof error === "string" ? error : "";
738
+ return /\b(abort(ed)?|timed out|timeout)\b/iu.test(message);
739
+ }
604
740
  function errorMessage(error) {
605
741
  if (error instanceof Error) return error.message.length > 0 ? error.message : error.name;
606
742
  return typeof error === "string" && error.length > 0 ? error : "an unknown client failure";
@@ -613,7 +749,9 @@ export {
613
749
  TaskMemoryBank,
614
750
  TASK_MEMORY_POLICY_DEFAULT_TIMEOUT_MS,
615
751
  runTaskMemoryPolicy,
752
+ TASK_MEMORY_TELEMETRY_FILE,
616
753
  createTaskMemoryTelemetrySink,
617
- taskMemoryBankDelta
754
+ taskMemoryBankDelta,
755
+ parseTaskMemoryTelemetryRecord
618
756
  };
619
- //# sourceMappingURL=chunk-WHGPSPT5.js.map
757
+ //# sourceMappingURL=chunk-O6I4CIEU.js.map
@@ -7,7 +7,7 @@ import {
7
7
  } from "./chunk-CGKSTWHD.js";
8
8
  import {
9
9
  StringEnum
10
- } from "./chunk-FCSXB6T2.js";
10
+ } from "./chunk-UOSL25KY.js";
11
11
  import {
12
12
  init_esm_shims
13
13
  } from "./chunk-3R73A4XB.js";
@@ -43,4 +43,4 @@ export {
43
43
  CODE_NAV_MAX_LIMIT,
44
44
  codeNavToolSurface
45
45
  };
46
- //# sourceMappingURL=chunk-XN3L4EYL.js.map
46
+ //# sourceMappingURL=chunk-OEDBCISO.js.map
@@ -1,19 +1,19 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
2
  import {
3
3
  runVectorTool
4
- } from "./chunk-JNXPYBB4.js";
4
+ } from "./chunk-CA42X6KT.js";
5
5
  import {
6
6
  PROJECT_VERIFIER_CATALOG_RELATIVE_PATH,
7
7
  loadProjectVerifierCatalog,
8
8
  packageDeclaredCheck,
9
9
  resolveProjectVerifierExecutionCwd
10
- } from "./chunk-GH5622CP.js";
10
+ } from "./chunk-A2NJGIB3.js";
11
11
  import {
12
12
  declaredVerificationScripts
13
13
  } from "./chunk-UL3WSD3F.js";
14
14
  import {
15
15
  resolveSafeCwd
16
- } from "./chunk-D4MDIG46.js";
16
+ } from "./chunk-B5CSFE7B.js";
17
17
  import {
18
18
  init_esm_shims
19
19
  } from "./chunk-3R73A4XB.js";
@@ -239,4 +239,4 @@ export {
239
239
  runProjectCheck,
240
240
  runScriptCheck
241
241
  };
242
- //# sourceMappingURL=chunk-PD3MESLB.js.map
242
+ //# sourceMappingURL=chunk-P3JGPQFL.js.map
@@ -1,4 +1,7 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ MAX_TIMER_DELAY_MS
4
+ } from "./chunk-FQ4SKYE4.js";
2
5
  import {
3
6
  ACTIVE_AGENT_AUTOMATION_ROLES,
4
7
  ACTIVE_ROUTING_POSTURES,
@@ -7,10 +10,7 @@ import {
7
10
  DEFAULT_SETTINGS,
8
11
  THEME_NAMED_COLORS,
9
12
  THINKING_LEVELS
10
- } from "./chunk-4DGYLA73.js";
11
- import {
12
- MAX_TIMER_DELAY_MS
13
- } from "./chunk-FQ4SKYE4.js";
13
+ } from "./chunk-XDOQXGFO.js";
14
14
  import {
15
15
  withStateFileLockSync
16
16
  } from "./chunk-IKCO5N3L.js";
@@ -388,7 +388,8 @@ function validateTarget(issues, path, value) {
388
388
  "lifecycle",
389
389
  "gateway",
390
390
  "pricing",
391
- "lmstudio"
391
+ "lmstudio",
392
+ "maxConcurrentRequests"
392
393
  ]);
393
394
  const id = "id" in value ? expectString(issues, `${path}.id`, value.id) : void 0;
394
395
  const runtime = "runtime" in value ? expectString(issues, `${path}.runtime`, value.runtime) : void 0;
@@ -434,6 +435,10 @@ function validateTarget(issues, path, value) {
434
435
  const v = validateLmStudioSettings(issues, `${path}.lmstudio`, value.lmstudio);
435
436
  if (v !== void 0) target.lmstudio = v;
436
437
  }
438
+ if ("maxConcurrentRequests" in value) {
439
+ const v = expectInteger(issues, `${path}.maxConcurrentRequests`, value.maxConcurrentRequests, { min: 1 });
440
+ if (v !== void 0) target.maxConcurrentRequests = v;
441
+ }
437
442
  return target;
438
443
  }
439
444
  function validateWorkerTarget(issues, path, value, defaults, targets, options) {
@@ -812,6 +817,7 @@ var TOP_LEVEL_KEYS = [
812
817
  "keybindings",
813
818
  "compaction",
814
819
  "context",
820
+ "prewarm",
815
821
  "retry",
816
822
  "guardrails"
817
823
  ];
@@ -1353,6 +1359,17 @@ function validateSettings(raw) {
1353
1359
  }
1354
1360
  }
1355
1361
  }
1362
+ if ("prewarm" in raw) {
1363
+ if (!isPlainObject(raw.prewarm)) {
1364
+ issues.add("prewarm", `expected a map, got ${describe(raw.prewarm)}`);
1365
+ } else {
1366
+ issues.unknownKeys("prewarm", raw.prewarm, ["enabled"]);
1367
+ if ("enabled" in raw.prewarm) {
1368
+ const v = expectBoolean(issues, "prewarm.enabled", raw.prewarm.enabled);
1369
+ if (v !== void 0) settings.prewarm.enabled = v;
1370
+ }
1371
+ }
1372
+ }
1356
1373
  if ("retry" in raw) {
1357
1374
  if (!isPlainObject(raw.retry)) {
1358
1375
  issues.add("retry", `expected a map, got ${describe(raw.retry)}`);
@@ -1561,4 +1578,4 @@ export {
1561
1578
  removeFleetProfileFromSettings,
1562
1579
  bindAgentProfileInSettings
1563
1580
  };
1564
- //# sourceMappingURL=chunk-UHXRNZ2J.js.map
1581
+ //# sourceMappingURL=chunk-PNY46YEY.js.map
@@ -1,7 +1,7 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
2
  import {
3
3
  parseAgentRecipeSchema
4
- } from "./chunk-UVDSQ6LW.js";
4
+ } from "./chunk-HCBCAYZU.js";
5
5
  import {
6
6
  discoverMarketplaceSkills,
7
7
  expandSkillInvocationInput,
@@ -10,36 +10,37 @@ import {
10
10
  normalizedSkillHash,
11
11
  parsePendingSkillRequests,
12
12
  projectCompatTrusted
13
- } from "./chunk-C4JBQ5SR.js";
13
+ } from "./chunk-AD7Y7STJ.js";
14
14
  import {
15
15
  COMPAT_RESOURCE_PRECEDENCE,
16
16
  defaultScopedResourceRoots,
17
- readRootEntries,
18
17
  sourceInfoForRoot,
19
18
  splitYamlFrontmatter,
20
19
  stringField
21
- } from "./chunk-2SFS6XQE.js";
20
+ } from "./chunk-AMKHQW3C.js";
21
+ import {
22
+ parseFleetContract
23
+ } from "./chunk-HPCTNZM2.js";
22
24
  import {
23
- parseFleetContract,
24
25
  parseFrontmatter
25
- } from "./chunk-KCMKRQX4.js";
26
+ } from "./chunk-RKKLTLYB.js";
26
27
  import {
27
28
  assertAgentSpecPolicy,
28
29
  normalizeAgentSpec
29
- } from "./chunk-AOCYTWAV.js";
30
+ } from "./chunk-S4COXYBG.js";
30
31
  import {
31
32
  INTEROP_AGENT_KINDS
32
33
  } from "./chunk-IHXBNWMM.js";
34
+ import {
35
+ runCommandVector
36
+ } from "./chunk-B5CSFE7B.js";
33
37
  import {
34
38
  readSettings,
35
39
  updateSettings
36
- } from "./chunk-UHXRNZ2J.js";
40
+ } from "./chunk-PNY46YEY.js";
37
41
  import {
38
42
  expandConfigPath
39
43
  } from "./chunk-SST6Z5JA.js";
40
- import {
41
- runCommandVector
42
- } from "./chunk-D4MDIG46.js";
43
44
  import {
44
45
  require_dist
45
46
  } from "./chunk-APJ265NV.js";
@@ -63,13 +64,18 @@ import path2 from "node:path";
63
64
 
64
65
  // src/domains/resources/prompts/loader.ts
65
66
  init_esm_shims();
66
- import { readFileSync } from "node:fs";
67
+ import { lstatSync, readdirSync, readFileSync, realpathSync } from "node:fs";
67
68
  import { homedir } from "node:os";
68
69
  import path from "node:path";
69
70
 
70
71
  // src/engine/prompt-templates.ts
71
72
  init_esm_shims();
72
- import { parseCommandArgs, substituteArgs } from "@earendil-works/pi-agent-core";
73
+ import { parseCommandArgs, substituteArgs as substituteParsedArgs } from "@earendil-works/pi-agent-core";
74
+ var RAW_ARGUMENTS_PLACEHOLDER = /\$ARGUMENTS/g;
75
+ function substituteArgs(content, args, rawArguments) {
76
+ if (rawArguments === void 0) return substituteParsedArgs(content, args);
77
+ return content.split(RAW_ARGUMENTS_PLACEHOLDER).map((segment) => substituteParsedArgs(segment, args)).join(rawArguments);
78
+ }
73
79
 
74
80
  // src/domains/resources/collision.ts
75
81
  init_esm_shims();
@@ -163,27 +169,83 @@ function fallbackDescription(body) {
163
169
  const normalized = line.replace(/^#{1,6}\s+/, "");
164
170
  return normalized.length > 60 ? `${normalized.slice(0, 57)}...` : normalized;
165
171
  }
172
+ var EXTENSION_ROOT_REFERENCE = /\$\{extensionRoot\}(\/[A-Za-z0-9._~%+@/-]*)?/g;
173
+ var EXTENSION_ROOT_TOKEN = "${extensionRoot}";
174
+ function contained(root, candidate) {
175
+ const relative = path.relative(root, candidate);
176
+ return relative === "" || !relative.startsWith(`..${path.sep}`) && relative !== ".." && !path.isAbsolute(relative);
177
+ }
178
+ function resolveExtensionReferences(body, root) {
179
+ if (root.rootPath === void 0 || !body.includes(EXTENSION_ROOT_TOKEN)) return { body };
180
+ let canonicalRoot;
181
+ try {
182
+ canonicalRoot = realpathSync(root.rootPath);
183
+ } catch (error) {
184
+ return { reason: `extension root could not be resolved: ${error instanceof Error ? error.message : String(error)}` };
185
+ }
186
+ let invalid = null;
187
+ const resolved = body.replace(EXTENSION_ROOT_REFERENCE, (reference, suffix) => {
188
+ const candidate = path.resolve(canonicalRoot, `.${suffix ?? ""}`);
189
+ try {
190
+ const canonicalCandidate = realpathSync(candidate);
191
+ if (!contained(canonicalRoot, canonicalCandidate)) invalid = reference;
192
+ } catch {
193
+ invalid = reference;
194
+ }
195
+ return candidate;
196
+ });
197
+ if (invalid !== null) {
198
+ return { reason: `prompt template has an unresolved or escaping extension reference: ${invalid}` };
199
+ }
200
+ return { body: resolved };
201
+ }
202
+ function unavailableTemplate(name, filePath, root, reason, diagnostics, description) {
203
+ diagnostics.push({ type: "warning", message: reason, path: filePath });
204
+ const sourceInfo = sourceInfoForRoot(root, filePath);
205
+ return {
206
+ name,
207
+ value: {
208
+ name,
209
+ description: description ?? "Prompt template (unavailable)",
210
+ content: "",
211
+ filePath,
212
+ sourceInfo,
213
+ trusted: root.trusted !== false,
214
+ unavailable: `${reason} (${filePath})`
215
+ },
216
+ source: sourceInfo
217
+ };
218
+ }
166
219
  function loadPromptFile(filePath, root, diagnostics) {
167
220
  const ext = path.extname(filePath).toLowerCase();
168
221
  if (ext !== ".md") return null;
222
+ const relativePath = path.relative(root.path, filePath);
223
+ if (relativePath === "" || relativePath === ".." || relativePath.startsWith(`..${path.sep}`) || path.isAbsolute(relativePath)) {
224
+ diagnostics.push({ type: "warning", message: "prompt template escaped its discovery root", path: filePath });
225
+ return null;
226
+ }
227
+ const name = relativePath.slice(0, -ext.length).split(path.sep).join(":");
228
+ if (name.trim().length === 0) return null;
169
229
  let raw;
170
230
  try {
171
231
  raw = readFileSync(filePath, "utf8");
172
232
  } catch (err) {
173
233
  const reason = err instanceof Error ? err.message : String(err);
174
- diagnostics.push({ type: "warning", message: `prompt template could not be read: ${reason}`, path: filePath });
175
- return null;
234
+ return unavailableTemplate(name, filePath, root, `prompt template could not be read: ${reason}`, diagnostics);
176
235
  }
177
- const name = path.basename(filePath, ext);
178
- if (name.trim().length === 0) return null;
179
236
  const { frontmatter, body } = splitOptionalFrontmatter(raw, filePath, diagnostics);
180
- const description = stringField(frontmatter, "description") ?? fallbackDescription(body);
237
+ const declaredDescription = stringField(frontmatter, "description");
238
+ const resolution = resolveExtensionReferences(body, root);
239
+ if ("reason" in resolution) {
240
+ return unavailableTemplate(name, filePath, root, resolution.reason, diagnostics, declaredDescription ?? void 0);
241
+ }
242
+ const description = declaredDescription ?? fallbackDescription(resolution.body);
181
243
  const argumentHint = stringField(frontmatter, "argument-hint") ?? stringField(frontmatter, "argumentHint");
182
244
  const sourceInfo = sourceInfoForRoot(root, filePath);
183
245
  const template = {
184
246
  name,
185
247
  description,
186
- content: body.trim(),
248
+ content: resolution.body.trim(),
187
249
  filePath,
188
250
  sourceInfo,
189
251
  trusted: root.trusted !== false
@@ -193,10 +255,42 @@ function loadPromptFile(filePath, root, diagnostics) {
193
255
  }
194
256
  function loadPromptRoot(root, diagnostics) {
195
257
  const candidates = [];
196
- for (const entry of readRootEntries(root, "prompt template", diagnostics)) {
197
- if (!entry.isFile()) continue;
198
- const candidate = loadPromptFile(path.join(root.path, entry.name), root, diagnostics);
199
- if (candidate) candidates.push(candidate);
258
+ const pending = [root.path];
259
+ while (pending.length > 0) {
260
+ const directory = pending.pop();
261
+ if (!directory) continue;
262
+ let entries;
263
+ try {
264
+ const stat = lstatSync(directory);
265
+ if (stat.isSymbolicLink() || !stat.isDirectory()) {
266
+ diagnostics.push({
267
+ type: "warning",
268
+ message: "prompt template root contains a non-directory or symbolic link",
269
+ path: directory
270
+ });
271
+ continue;
272
+ }
273
+ entries = readdirSync(directory, { withFileTypes: true }).sort((a, b) => a.name.localeCompare(b.name));
274
+ } catch (error) {
275
+ if (error.code === "ENOENT") continue;
276
+ diagnostics.push({
277
+ type: "warning",
278
+ message: `prompt template directory could not be read: ${error instanceof Error ? error.message : String(error)}`,
279
+ path: directory
280
+ });
281
+ continue;
282
+ }
283
+ for (const entry of [...entries].reverse()) {
284
+ const filePath = path.join(directory, entry.name);
285
+ if (entry.isSymbolicLink()) {
286
+ diagnostics.push({ type: "warning", message: "prompt template symbolic link was ignored", path: filePath });
287
+ } else if (entry.isDirectory()) {
288
+ pending.push(filePath);
289
+ } else if (entry.isFile()) {
290
+ const candidate = loadPromptFile(filePath, root, diagnostics);
291
+ if (candidate) candidates.push(candidate);
292
+ }
293
+ }
200
294
  }
201
295
  return candidates;
202
296
  }
@@ -223,13 +317,14 @@ function loadPromptTemplates(input = {}) {
223
317
  };
224
318
  }
225
319
  function parsePromptCommand(input) {
226
- const trimmed = input.trim();
227
- if (!trimmed.startsWith("/")) return null;
228
- const withoutSlash = trimmed.slice(1);
320
+ const framed = input.trimStart();
321
+ if (!framed.startsWith("/")) return null;
322
+ const withoutSlash = framed.slice(1);
229
323
  const separator = withoutSlash.search(/\s/);
230
324
  const name = separator === -1 ? withoutSlash : withoutSlash.slice(0, separator);
231
325
  if (name.length === 0 || name.includes("/")) return null;
232
- const rest = separator === -1 ? "" : withoutSlash.slice(separator).trim();
326
+ const delimiterWidth = separator !== -1 && withoutSlash.slice(separator, separator + 2) === "\r\n" ? 2 : 1;
327
+ const rest = separator === -1 ? "" : withoutSlash.slice(separator + delimiterWidth);
233
328
  return { name, rest };
234
329
  }
235
330
  function expandPromptTemplateInput(input, templates) {
@@ -237,6 +332,16 @@ function expandPromptTemplateInput(input, templates) {
237
332
  if (!command) return { expanded: false, text: input, args: [], diagnostics: templates.diagnostics };
238
333
  const template = templates.items.find((entry) => entry.name === command.name);
239
334
  if (!template) return { expanded: false, text: input, args: [], diagnostics: templates.diagnostics };
335
+ if (template.unavailable !== void 0) {
336
+ const message = `prompt template /${template.name} cannot run: ${template.unavailable}`;
337
+ return {
338
+ expanded: false,
339
+ text: input,
340
+ args: [],
341
+ diagnostics: templates.diagnostics,
342
+ refusal: { template, message }
343
+ };
344
+ }
240
345
  if (!template.trusted) {
241
346
  const message = `prompt template ${template.name} comes from an untrusted project root; set skills.trustProjectCompatRoots to use it`;
242
347
  return {
@@ -250,7 +355,7 @@ function expandPromptTemplateInput(input, templates) {
250
355
  const args = parseCommandArgs(command.rest);
251
356
  return {
252
357
  expanded: true,
253
- text: substituteArgs(template.content, args),
358
+ text: substituteArgs(template.content, args, command.rest),
254
359
  args,
255
360
  template,
256
361
  diagnostics: templates.diagnostics
@@ -793,4 +898,4 @@ export {
793
898
  ResourcesDomainModule,
794
899
  createResourcesDomainModule
795
900
  };
796
- //# sourceMappingURL=chunk-THKY7CD7.js.map
901
+ //# sourceMappingURL=chunk-PZ4I4JE2.js.map
@@ -3,13 +3,13 @@ import {
3
3
  INTEROP_AGENT_KINDS,
4
4
  interopAgentKind
5
5
  } from "./chunk-IHXBNWMM.js";
6
+ import {
7
+ runCommandVector
8
+ } from "./chunk-B5CSFE7B.js";
6
9
  import {
7
10
  readSettings,
8
11
  updateSettings
9
- } from "./chunk-UHXRNZ2J.js";
10
- import {
11
- runCommandVector
12
- } from "./chunk-D4MDIG46.js";
12
+ } from "./chunk-PNY46YEY.js";
13
13
  import {
14
14
  withStateFileLockSync
15
15
  } from "./chunk-IKCO5N3L.js";
@@ -478,4 +478,4 @@ export {
478
478
  detectInteropAgents,
479
479
  InteropDomainModule
480
480
  };
481
- //# sourceMappingURL=chunk-SROCI7ZU.js.map
481
+ //# sourceMappingURL=chunk-QQ7EKM72.js.map