@iowarp/clio-coder 0.4.2 → 0.4.3

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 (369) hide show
  1. package/CHANGELOG.md +35 -0
  2. package/CONTRIBUTING.md +86 -19
  3. package/README.md +35 -6
  4. package/dist/{acp-TMDQZDIG.js → acp-H2NGRPWO.js} +11 -11
  5. package/dist/{agents-5N5NG3XG.js → agents-TL5LLUQP.js} +54 -53
  6. package/dist/assets/codewiki.json +1 -1
  7. package/dist/{auth-Z5CCBXKQ.js → auth-E5SW4HMS.js} +19 -16
  8. package/dist/{builtins-K6TNDT24.js → builtins-IA7V7FUC.js} +9 -4
  9. package/dist/{chunk-ZW4HH5JJ.js → chunk-2APPQIER.js} +6 -6
  10. package/dist/{chunk-72GZI5EV.js → chunk-2JH2WHGE.js} +2 -2
  11. package/dist/{chunk-UBRFI4HS.js → chunk-2UG5F4C5.js} +127 -47
  12. package/dist/{chunk-UH632ZYL.js → chunk-2UH2KFUP.js} +2 -2
  13. package/dist/{chunk-3F7VUY77.js → chunk-2VIKGWFZ.js} +2 -2
  14. package/dist/{chunk-I66EAJFY.js → chunk-2WZ546HR.js} +267 -232
  15. package/dist/{chunk-RKSR6VSF.js → chunk-4IUZQIJ3.js} +29 -1
  16. package/dist/{chunk-2X4RYJTJ.js → chunk-4UVU7BJ5.js} +2 -2
  17. package/dist/{chunk-M2DAX4F6.js → chunk-4WR7VSYB.js} +2 -2
  18. package/dist/{chunk-5KW52TEP.js → chunk-54CBCGIR.js} +5 -5
  19. package/dist/{chunk-3KIPBMUA.js → chunk-5ICU3EUH.js} +2 -2
  20. package/dist/{chunk-77QIVUZB.js → chunk-5MEZN6CB.js} +4 -4
  21. package/dist/{chunk-O42A54GG.js → chunk-5OIVVPHF.js} +2 -2
  22. package/dist/{chunk-LJID3DYZ.js → chunk-64I3JVYM.js} +2 -2
  23. package/dist/{chunk-4JDLP6ZS.js → chunk-6PTFB5VS.js} +7 -7
  24. package/dist/{chunk-VN3SHNBN.js → chunk-7DICMOS6.js} +2 -2
  25. package/dist/{chunk-HLAFFSEK.js → chunk-7DRAWPTZ.js} +2 -2
  26. package/dist/chunk-7E7I3WLS.js +3762 -0
  27. package/dist/{chunk-YJISEZKC.js → chunk-7ZYNNDKC.js} +6 -6
  28. package/dist/{chunk-I66ZTYNP.js → chunk-AF4YM7Z4.js} +236 -101
  29. package/dist/{chunk-2HFQNRV3.js → chunk-AX2THNSA.js} +12 -12
  30. package/dist/{chunk-PGF63K6I.js → chunk-B4OAX3SI.js} +65 -3
  31. package/dist/{chunk-W6NIE6OW.js → chunk-B4VEBZKF.js} +3 -3
  32. package/dist/{chunk-JBCS7CRR.js → chunk-BEPZRGGU.js} +10 -10
  33. package/dist/{chunk-XGDPUNND.js → chunk-CE5AX47J.js} +2 -2
  34. package/dist/{chunk-I64IFBLB.js → chunk-DWUOQKRU.js} +17 -10
  35. package/dist/{chunk-DZAW46HP.js → chunk-E3TPLWFX.js} +3 -3
  36. package/dist/{chunk-HIICAHCJ.js → chunk-EKCHAPYA.js} +2 -2
  37. package/dist/{chunk-XE3PCIXH.js → chunk-F5JHEYZM.js} +7 -7
  38. package/dist/{chunk-5PFYMY2V.js → chunk-FTMGRKEF.js} +2 -2
  39. package/dist/{chunk-ZNT2M6TG.js → chunk-G76U63X4.js} +17 -17
  40. package/dist/{chunk-34BHNEE3.js → chunk-GHS5EBTQ.js} +58 -7
  41. package/dist/{chunk-2NHR3NAY.js → chunk-GI7YYQ3F.js} +40 -34
  42. package/dist/{chunk-DYHAXKHD.js → chunk-GWZNEVM2.js} +12 -8
  43. package/dist/chunk-GYV6VZOC.js +26 -0
  44. package/dist/{chunk-MQXIVJ35.js → chunk-HAXOFFRH.js} +5 -5
  45. package/dist/{chunk-W4YEMFBX.js → chunk-HEQY7ZFI.js} +2 -2
  46. package/dist/{chunk-IKOZFYBN.js → chunk-I7ZPNEJM.js} +145 -102
  47. package/dist/{chunk-WNP7O5WZ.js → chunk-ID64D7PE.js} +4 -4
  48. package/dist/{chunk-XQRY4DTA.js → chunk-IGLP3ODT.js} +10 -10
  49. package/dist/chunk-IJNZMHLA.js +101 -0
  50. package/dist/{chunk-JWJGP5DQ.js → chunk-INY6HTFL.js} +7 -7
  51. package/dist/{chunk-PBP4B7XR.js → chunk-IUE3Y34X.js} +2 -2
  52. package/dist/{chunk-B74PXLU7.js → chunk-IWT4SF4R.js} +3 -3
  53. package/dist/{chunk-B7HM5Z7T.js → chunk-JDAY6FIL.js} +5 -5
  54. package/dist/{chunk-PJX3WQUQ.js → chunk-JEQ3XTHC.js} +2 -2
  55. package/dist/{chunk-FSP7CMNU.js → chunk-JGRC33J2.js} +50 -4
  56. package/dist/{chunk-X7IARSHT.js → chunk-JKKCYP3C.js} +9 -9
  57. package/dist/{chunk-HJWWJ6IL.js → chunk-JSC3U7TI.js} +16 -4
  58. package/dist/{chunk-SSEYRH53.js → chunk-KK4JZPBQ.js} +19 -140
  59. package/dist/{chunk-IHXBNWMM.js → chunk-KXDSS5WJ.js} +7 -3
  60. package/dist/{chunk-Q4XWMHX6.js → chunk-L47TF46W.js} +2 -2
  61. package/dist/{chunk-O3YUNJZ2.js → chunk-LDJG7DW3.js} +81 -24
  62. package/dist/{chunk-CDNVLKUX.js → chunk-LLDJM5XK.js} +13 -7
  63. package/dist/{chunk-F2I26BDK.js → chunk-MUW2BDDH.js} +4 -4
  64. package/dist/{chunk-HKMD33FO.js → chunk-MWUZBSAQ.js} +79 -76
  65. package/dist/{chunk-QQLGQY2A.js → chunk-N2Z7HLVY.js} +20 -20
  66. package/dist/{chunk-DZEK6CJN.js → chunk-NIQJ66N4.js} +19 -19
  67. package/dist/{chunk-CWVRRIEI.js → chunk-NZMNUPZZ.js} +2 -2
  68. package/dist/{chunk-462T4EGZ.js → chunk-O5CVSAG5.js} +2 -2
  69. package/dist/{chunk-TPEQIQIE.js → chunk-OML5D5V5.js} +8 -8
  70. package/dist/{chunk-IKSLQ4XV.js → chunk-PAJQJ7BS.js} +558 -216
  71. package/dist/{chunk-ZW55JB7N.js → chunk-PUVDKJ2Y.js} +2 -2
  72. package/dist/{chunk-UH347SHR.js → chunk-QWGDJJYJ.js} +11 -11
  73. package/dist/chunk-R6Q67RJH.js +134 -0
  74. package/dist/{chunk-CRFOIAX3.js → chunk-RRNP2ANY.js} +6 -6
  75. package/dist/{chunk-IDNA72AH.js → chunk-RSJ25QSL.js} +2 -2
  76. package/dist/chunk-SKHCAU7K.js +385 -0
  77. package/dist/{chunk-RLYRBIYQ.js → chunk-TM6LQDI3.js} +20 -12
  78. package/dist/chunk-UOIZ7DA4.js +41 -0
  79. package/dist/{chunk-P75RZCJW.js → chunk-UPZU6GE4.js} +3 -3
  80. package/dist/{chunk-MCMZMDAC.js → chunk-V2ANDPVT.js} +4 -4
  81. package/dist/{chunk-AK5XEFVZ.js → chunk-VA5FNYMT.js} +26 -13
  82. package/dist/{chunk-IMXMHHMQ.js → chunk-VW6DOEDG.js} +332 -57
  83. package/dist/{chunk-XOXV5GKE.js → chunk-W6RRQCPQ.js} +16 -7
  84. package/dist/{chunk-CYZW7JHJ.js → chunk-WBKFA554.js} +8 -8
  85. package/dist/{chunk-BO7Y52RY.js → chunk-WCXUNS7U.js} +7 -7
  86. package/dist/{chunk-ZGNYYXQ6.js → chunk-WRBAGUNF.js} +3 -3
  87. package/dist/{chunk-FVDGR2ZL.js → chunk-XIVNBFZS.js} +85 -30
  88. package/dist/{chunk-BYMNWQ7O.js → chunk-XPWWI35G.js} +299 -58
  89. package/dist/{chunk-KPXDY6QF.js → chunk-XRZT5WY5.js} +2 -2
  90. package/dist/{chunk-AZ4WMN4W.js → chunk-Y3CBHOR6.js} +2 -2
  91. package/dist/{chunk-VXMFAE2W.js → chunk-YPC6ZR5L.js} +19 -6
  92. package/dist/{chunk-54ODD65L.js → chunk-YQWYVTMC.js} +4 -4
  93. package/dist/{chunk-M2WXEHER.js → chunk-ZA4VCIGV.js} +2 -2
  94. package/dist/{chunk-7BHIY2MW.js → chunk-ZDN3Y73Y.js} +6 -6
  95. package/dist/{chunk-E7GT7O5N.js → chunk-ZWPRK62N.js} +7 -4
  96. package/dist/cli/index.js +38 -37
  97. package/dist/{clio-7VB377CC.js → clio-CMMK4KRR.js} +7 -7
  98. package/dist/{code-nav-YVLCYA7V.js → code-nav-MDZNQS33.js} +7 -7
  99. package/dist/{components-UBWCQSRW.js → components-UCUQ4QXW.js} +4 -4
  100. package/dist/{config-4HVOS65E.js → config-SVM5P5YI.js} +76 -74
  101. package/dist/{configure-PIWO7B24.js → configure-LE3IK2TJ.js} +26 -24
  102. package/dist/{context-IYEHL3WQ.js → context-2OHRKS42.js} +66 -63
  103. package/dist/{context-N6ZE3LGJ.js → context-E3VC7RX5.js} +15 -11
  104. package/dist/{context-KQYIWPWT.js → context-VNCR7KAG.js} +60 -45
  105. package/dist/{context-clear-G4OGZJDS.js → context-clear-BW4O37TG.js} +61 -59
  106. package/dist/context-map-COB37XXN.js +505 -0
  107. package/dist/{context-working-set-BWLF6LJP.js → context-working-set-VDS25HXZ.js} +17 -16
  108. package/dist/{dispatch-runner-2QQAITS3.js → dispatch-runner-5AHT53RF.js} +85 -74
  109. package/dist/{doctor-LHBD36VU.js → doctor-WNNVO6FY.js} +37 -37
  110. package/dist/{eval-C45FYRJ6.js → eval-7G7SGAYO.js} +285 -114
  111. package/dist/{eval-inventory-6DEJPLBF.js → eval-inventory-Y6QRFOH5.js} +4 -4
  112. package/dist/{evidence-6SHONYAF.js → evidence-VD6736FQ.js} +63 -62
  113. package/dist/{evolve-KRKMV72X.js → evolve-AL3NGVRL.js} +62 -61
  114. package/dist/{extensions-KPZ2UHBB.js → extensions-MOVJ32NM.js} +7 -7
  115. package/dist/{fleet-IVTCKDHT.js → fleet-QZHUMAGI.js} +110 -108
  116. package/dist/{fleet-commands-EDWL3IT7.js → fleet-commands-BAYT5FJZ.js} +10 -10
  117. package/dist/{fleet-decisions-YP3YEFGK.js → fleet-decisions-IREVMRU4.js} +7 -6
  118. package/dist/{fleet-graph-ZFWKHY2M.js → fleet-graph-YCTT3HTI.js} +19 -18
  119. package/dist/{fleet-inspect-FVUNCBML.js → fleet-inspect-QVJTDAVB.js} +55 -54
  120. package/dist/{fleet-preflight-UN5XED4R.js → fleet-preflight-25QAFPK4.js} +4 -4
  121. package/dist/{fleet-validate-XOWC4HSX.js → fleet-validate-5O57AAJ7.js} +23 -22
  122. package/dist/{fleet-verify-UN3SODEL.js → fleet-verify-CPH2W2T6.js} +56 -55
  123. package/dist/{fleet-view-TWHJKCN6.js → fleet-view-SWBR3VGQ.js} +55 -54
  124. package/dist/{init-T2QORQ3Y.js → init-J477LKZH.js} +78 -76
  125. package/dist/{interop-IN5I2A66.js → interop-3FCM6XLG.js} +11 -11
  126. package/dist/{library-LSCATDLZ.js → library-QUQEIUG6.js} +28 -27
  127. package/dist/{memory-HYOKAGGJ.js → memory-SGGSEP65.js} +64 -63
  128. package/dist/{models-2GPMFYCM.js → models-HEKUAXXK.js} +49 -43
  129. package/dist/{monitor-E4ASVUJH.js → monitor-HKU57TYQ.js} +61 -60
  130. package/dist/{orchestrator-DDMPR3PY.js → orchestrator-VDFAEFAI.js} +919 -546
  131. package/dist/{panes-E3RUXOW5.js → panes-DN2SSFOH.js} +3 -3
  132. package/dist/{panes-IXKLOKA2.js → panes-TALGNPZT.js} +8 -8
  133. package/dist/{paths-L7LGY6RN.js → paths-NBMFAIEZ.js} +5 -5
  134. package/dist/reset-EAJFFJVB.js +344 -0
  135. package/dist/{resources-OTRSN34L.js → resources-OVKSEFVE.js} +27 -20
  136. package/dist/{run-5DEYH5QK.js → run-7DP7ZF2J.js} +113 -109
  137. package/dist/{share-IHWTLO3M.js → share-WML67FT3.js} +26 -25
  138. package/dist/{skills-IYMXMKW4.js → skills-SG662R2K.js} +39 -31
  139. package/dist/{skills-eval-DROHSJAR.js → skills-eval-VVZEUU46.js} +74 -73
  140. package/dist/{skills-inventory-D7X4L4ZX.js → skills-inventory-I2E23GET.js} +21 -20
  141. package/dist/{slash-commands-QBM7UZ3B.js → slash-commands-S7MBJDQK.js} +35 -34
  142. package/dist/{steer-Z5DO23FJ.js → steer-2LQOMCPB.js} +3 -3
  143. package/dist/{support-U7QOWY26.js → support-CC2UJBJ6.js} +6 -6
  144. package/dist/{targets-P2FUC4IL.js → targets-4QC3HIEW.js} +48 -45
  145. package/dist/{terminal-lease-YREJ3JX2.js → terminal-lease-TUHIJ6Y2.js} +2 -2
  146. package/dist/{tools-5B7RO6MV.js → tools-TFGJICCU.js} +8 -8
  147. package/dist/{trace-YMGMUM6A.js → trace-FXMXUZUF.js} +7 -7
  148. package/dist/uninstall-5PEVOE5B.js +408 -0
  149. package/dist/upgrade-M4WXY6KN.js +303 -0
  150. package/dist/{usage-ME5MPXGX.js → usage-N7ZNVLEM.js} +147 -102
  151. package/dist/{verifiers-BVZ7IWOO.js → verifiers-DJTP4XX6.js} +15 -15
  152. package/dist/{verify-5K7ZKQFC.js → verify-RWE4PPEK.js} +9 -9
  153. package/dist/{wiki-generate-F5W5QTYY.js → wiki-generate-C7IQOXSP.js} +84 -82
  154. package/dist/{with-panes-BYOJCLAM.js → with-panes-4GCGSL7J.js} +9 -9
  155. package/dist/worker/entry.js +61 -60
  156. package/docs/architecture/artifact-placement.md +1 -0
  157. package/docs/architecture/artifact-versions.md +1 -1
  158. package/docs/architecture/context-engine.md +4 -0
  159. package/docs/architecture/middleware-and-components.md +1 -1
  160. package/docs/architecture/model-catalog.md +21 -10
  161. package/docs/architecture/observability.md +12 -1
  162. package/docs/architecture/prompt-envelope-and-tools.md +2 -0
  163. package/docs/architecture/provider-adapter-cookbook.md +63 -0
  164. package/docs/architecture/safety-model.md +15 -5
  165. package/docs/guide/built-in-agents.md +17 -3
  166. package/docs/guide/commands-and-modes.md +1 -1
  167. package/docs/guide/configuration-and-targets.md +97 -9
  168. package/docs/guide/configuration-reference.md +7 -2
  169. package/docs/guide/environment-variables.md +2 -0
  170. package/docs/guide/installation-and-lifecycle.md +37 -4
  171. package/docs/guide/proactive-memory.md +66 -55
  172. package/docs/guide/skills-marketplace.md +18 -0
  173. package/docs/process/development-pipeline.md +34 -1
  174. package/docs/process/eval-runner.md +67 -3
  175. package/evals/behavioral-model.yaml +3 -2
  176. package/package.json +2 -2
  177. package/skills/README.md +7 -5
  178. package/skills/coding/ast-grep/SKILL.md +101 -30
  179. package/skills/coding/ast-grep/evals.md +26 -0
  180. package/skills/coding/coding-standards/SKILL.md +40 -5
  181. package/skills/coding/coding-standards/evals.md +23 -0
  182. package/skills/coding/prototype/SKILL.md +87 -28
  183. package/skills/coding/prototype/evals.md +19 -0
  184. package/skills/coding/tdd/SKILL.md +80 -53
  185. package/skills/coding/tdd/evals.md +20 -0
  186. package/skills/context/context-handoff/SKILL.md +43 -2
  187. package/skills/context/context-handoff/evals.md +44 -0
  188. package/skills/context/context-prime/SKILL.md +45 -15
  189. package/skills/context/context-prime/evals.md +45 -0
  190. package/skills/git/branch-closeout/SKILL.md +132 -0
  191. package/skills/git/branch-closeout/evals.md +133 -0
  192. package/skills/git/branch-closeout/references/closeout-checklist.md +81 -0
  193. package/skills/git/file-ticket/SKILL.md +77 -63
  194. package/skills/git/file-ticket/assets/issue-template.md +22 -0
  195. package/skills/git/file-ticket/evals.md +31 -26
  196. package/skills/git/file-ticket/references/issue-discovery.md +49 -0
  197. package/skills/git/fix-issue/SKILL.md +87 -64
  198. package/skills/git/fix-issue/evals.md +35 -31
  199. package/skills/git/fix-issue/references/diagnosis-and-rca.md +46 -0
  200. package/skills/git/resolve-merge-conflicts/SKILL.md +100 -51
  201. package/skills/git/resolve-merge-conflicts/evals.md +52 -25
  202. package/skills/git/resolve-merge-conflicts/references/conflict-matrix.md +126 -0
  203. package/skills/git/ship/SKILL.md +103 -67
  204. package/skills/git/ship/assets/pr-template.md +21 -0
  205. package/skills/git/ship/evals.md +44 -28
  206. package/skills/git/ship/references/remote-and-branch-policy.md +62 -0
  207. package/skills/git/worktree-create/SKILL.md +80 -50
  208. package/skills/git/worktree-create/evals.md +40 -33
  209. package/skills/git/worktree-create/references/worktree-setup.md +62 -66
  210. package/skills/git/worktree-merge/SKILL.md +112 -65
  211. package/skills/git/worktree-merge/evals.md +42 -34
  212. package/skills/git/worktree-merge/references/merge-strategies.md +52 -0
  213. package/skills/planning/archify/SKILL.md +196 -0
  214. package/skills/planning/archify/evals.md +65 -0
  215. package/skills/planning/architecture/SKILL.md +61 -12
  216. package/skills/planning/architecture/evals.md +65 -0
  217. package/skills/planning/backlog/SKILL.md +130 -14
  218. package/skills/planning/backlog/evals.md +142 -0
  219. package/skills/planning/prd/SKILL.md +46 -6
  220. package/skills/planning/prd/evals.md +54 -0
  221. package/skills/planning/product-intent/SKILL.md +57 -2
  222. package/skills/planning/product-intent/evals.md +70 -0
  223. package/skills/planning/tech-spec/SKILL.md +53 -2
  224. package/skills/planning/tech-spec/evals.md +73 -0
  225. package/skills/registry.yaml +58 -50
  226. package/skills/remote.yaml +13 -0
  227. package/skills/research/arxiv-literature/SKILL.md +76 -18
  228. package/skills/research/arxiv-literature/evals.md +50 -0
  229. package/skills/research/experiment-protocol/SKILL.md +20 -1
  230. package/skills/research/experiment-protocol/evals.md +23 -0
  231. package/skills/research/scientific-debugging/SKILL.md +23 -1
  232. package/skills/research/scientific-debugging/evals.md +18 -0
  233. package/skills/research/scientific-modernization/SKILL.md +26 -1
  234. package/skills/research/scientific-modernization/evals.md +27 -0
  235. package/skills/skill-marketplace.json +63 -28
  236. package/skills/workflow/cut-it/SKILL.md +65 -5
  237. package/skills/workflow/cut-it/evals.md +101 -0
  238. package/skills/workflow/design-council/SKILL.md +117 -27
  239. package/skills/workflow/design-council/evals.md +161 -0
  240. package/skills/workflow/grill-me/SKILL.md +86 -10
  241. package/skills/workflow/grill-me/evals.md +153 -0
  242. package/skills/workflow/workflow-distiller/SKILL.md +76 -17
  243. package/skills/workflow/workflow-distiller/evals.md +118 -0
  244. package/src/cli/configure-interop.ts +105 -13
  245. package/src/cli/configure-oauth.ts +57 -0
  246. package/src/cli/configure-onboarding.ts +980 -0
  247. package/src/cli/configure-target.ts +594 -0
  248. package/src/cli/configure.ts +1082 -528
  249. package/src/cli/context-map.ts +114 -0
  250. package/src/cli/context.ts +4 -0
  251. package/src/cli/index.ts +1 -0
  252. package/src/cli/lifecycle-presenter.ts +436 -0
  253. package/src/cli/models.ts +10 -2
  254. package/src/cli/modes/print.ts +5 -1
  255. package/src/cli/reset.ts +228 -106
  256. package/src/cli/run.ts +7 -2
  257. package/src/cli/select.ts +664 -0
  258. package/src/cli/skills.ts +9 -2
  259. package/src/cli/targets.ts +3 -0
  260. package/src/cli/uninstall.ts +233 -165
  261. package/src/cli/upgrade.ts +204 -149
  262. package/src/cli/usage.ts +86 -27
  263. package/src/cli/validate-model.ts +3 -3
  264. package/src/core/config.ts +56 -0
  265. package/src/core/external-diagnostic.ts +44 -0
  266. package/src/core/gateway-routing.ts +157 -0
  267. package/src/core/safe-exec.ts +17 -2
  268. package/src/core/skill-activation.ts +89 -2
  269. package/src/domains/agents/builtins/world-knowledge.md +31 -0
  270. package/src/domains/agents/catalog.ts +1 -1
  271. package/src/domains/agents/result-contract.ts +70 -0
  272. package/src/domains/context/wiki/map-seed.ts +589 -0
  273. package/src/domains/context/wiki/plan.ts +2 -2
  274. package/src/domains/dispatch/admission.ts +29 -0
  275. package/src/domains/dispatch/agent-candidates.ts +10 -0
  276. package/src/domains/dispatch/budget-envelope.ts +86 -1
  277. package/src/domains/dispatch/capability-match.ts +1 -0
  278. package/src/domains/dispatch/capacity-lease.ts +17 -0
  279. package/src/domains/dispatch/contract.ts +11 -1
  280. package/src/domains/dispatch/extension.ts +134 -29
  281. package/src/domains/dispatch/types.ts +3 -0
  282. package/src/domains/dispatch/worker-model-metadata.ts +38 -0
  283. package/src/domains/eval/metrics/call-ledger-stream.ts +34 -11
  284. package/src/domains/eval/metrics/token-stream.ts +201 -31
  285. package/src/domains/eval/metrics/tracked.ts +40 -4
  286. package/src/domains/eval/runners/clio-run.ts +5 -2
  287. package/src/domains/eval/schema/suite.ts +28 -0
  288. package/src/domains/eval/schema/verdict.ts +2 -2
  289. package/src/domains/eval/suites/resolve.ts +13 -1
  290. package/src/domains/eval/suites/run.ts +24 -3
  291. package/src/domains/interop/registry.ts +6 -2
  292. package/src/domains/interop/types.ts +4 -0
  293. package/src/domains/lifecycle/migrations/index.ts +4 -0
  294. package/src/domains/memory/task-memory-policy.ts +70 -26
  295. package/src/domains/memory/task-memory-telemetry.ts +1 -0
  296. package/src/domains/middleware/index.ts +0 -1
  297. package/src/domains/middleware/marketplace-offer.ts +3 -35
  298. package/src/domains/middleware/memory-intervention.ts +127 -32
  299. package/src/domains/middleware/memory-step-endpoint.ts +3 -2
  300. package/src/domains/middleware/skills-reminder.ts +31 -2
  301. package/src/domains/observability/compaction-usage.ts +118 -0
  302. package/src/domains/observability/cost.ts +1 -1
  303. package/src/domains/observability/extension.ts +6 -1
  304. package/src/domains/observability/out-of-turn-usage.ts +52 -21
  305. package/src/domains/providers/contract.ts +4 -1
  306. package/src/domains/providers/extension.ts +40 -9
  307. package/src/domains/providers/model-capabilities.ts +9 -0
  308. package/src/domains/providers/model-discovery.ts +2 -0
  309. package/src/domains/providers/model-runtime-capabilities.ts +15 -5
  310. package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +32 -12
  311. package/src/domains/providers/runtimes/antigravity/antigravity-code.ts +225 -45
  312. package/src/domains/providers/runtimes/common/lmstudio-http.ts +6 -2
  313. package/src/domains/providers/runtimes/common/local-synth.ts +2 -0
  314. package/src/domains/providers/runtimes/protocol/litellm.ts +119 -29
  315. package/src/domains/providers/support.ts +11 -5
  316. package/src/domains/providers/target-model-cache.ts +25 -2
  317. package/src/domains/providers/types/capability-flags.ts +2 -0
  318. package/src/domains/providers/types/runtime-descriptor.ts +20 -1
  319. package/src/domains/providers/types/target-descriptor.ts +19 -0
  320. package/src/domains/resources/index.ts +3 -0
  321. package/src/domains/resources/skills/install.ts +72 -7
  322. package/src/domains/resources/skills/loader.ts +7 -0
  323. package/src/domains/resources/skills/marketplace.ts +63 -11
  324. package/src/domains/safety/autonomy.ts +15 -0
  325. package/src/domains/safety/index.ts +1 -0
  326. package/src/domains/safety/path-policy.ts +1 -1
  327. package/src/domains/safety/policy-engine.ts +34 -11
  328. package/src/domains/safety/protected-artifacts.ts +191 -88
  329. package/src/domains/safety/run-effects.ts +2 -22
  330. package/src/domains/safety/skill-authority.ts +55 -0
  331. package/src/domains/session/compaction/compact.ts +72 -22
  332. package/src/domains/session/entries.ts +6 -0
  333. package/src/domains/session/usage.ts +3 -3
  334. package/src/engine/agent.ts +13 -3
  335. package/src/engine/ai.ts +26 -8
  336. package/src/engine/antigravity/subprocess-runtime.ts +386 -120
  337. package/src/engine/api-registry.ts +3 -0
  338. package/src/engine/apis/openai-completions.ts +117 -14
  339. package/src/engine/external-subprocess.ts +114 -6
  340. package/src/entry/background-model-metadata.ts +18 -0
  341. package/src/entry/compaction-prompt.ts +57 -0
  342. package/src/entry/orchestrator.ts +405 -216
  343. package/src/entry/task-memory-lifecycle.ts +35 -0
  344. package/src/interactive/chat-loop-messages.ts +13 -4
  345. package/src/interactive/chat-loop.ts +65 -2
  346. package/src/interactive/chat-renderer.ts +1 -0
  347. package/src/interactive/cost-overlay.ts +26 -2
  348. package/src/interactive/interactive-slash-runtime.ts +2 -1
  349. package/src/interactive/renderers/worker-entry.ts +32 -0
  350. package/src/interactive/slash-commands.ts +24 -6
  351. package/src/interactive/theme/labels.ts +19 -13
  352. package/src/interactive/turn-context.ts +9 -5
  353. package/src/interactive/turn-recovery.ts +8 -0
  354. package/src/interactive/turn-runtime.ts +27 -11
  355. package/src/interactive/turn-state.ts +7 -0
  356. package/src/interactive/worker-receipts.ts +1 -0
  357. package/src/interactive/worker-stream.ts +6 -1
  358. package/src/tools/context/index.ts +30 -9
  359. package/src/tools/dispatch-arguments.ts +1 -0
  360. package/src/tools/dispatch-event-text.ts +10 -0
  361. package/src/tools/dispatch-plan.ts +1 -0
  362. package/src/tools/dispatch-runner.ts +12 -0
  363. package/src/tools/registry.ts +11 -5
  364. package/src/tools/worker-evidence.ts +3 -1
  365. package/src/worker/spec-contract.ts +4 -0
  366. package/dist/chunk-2Z2IKEXI.js +0 -1554
  367. package/dist/reset-OAQP3W4O.js +0 -230
  368. package/dist/uninstall-N34PCTGJ.js +0 -331
  369. package/dist/upgrade-PXK3S2YM.js +0 -325
@@ -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-CWVRRIEI.js";
4
+ } from "./chunk-NZMNUPZZ.js";
5
5
  import {
6
6
  clioStateDir
7
7
  } from "./chunk-BYP5D4HI.js";
@@ -179,211 +179,6 @@ function compareForSnapshot(left, right) {
179
179
  return byCreated !== 0 ? byCreated : left.id.localeCompare(right.id);
180
180
  }
181
181
 
182
- // src/domains/memory/task-memory-telemetry.ts
183
- init_esm_shims();
184
- import { appendFileSync, mkdirSync, renameSync, statSync } from "node:fs";
185
- import { join } from "node:path";
186
- var TASK_MEMORY_TELEMETRY_VERSION = 2;
187
- var TASK_MEMORY_TELEMETRY_MAX_BYTES = 1024 * 1024;
188
- var TASK_MEMORY_TELEMETRY_FILE = "steps.jsonl";
189
- function createTaskMemoryTelemetrySink(options = {}) {
190
- const now = options.now ?? (() => /* @__PURE__ */ new Date());
191
- return {
192
- record(step) {
193
- try {
194
- const logDir = options.logDir ?? join(clioStateDir(), "memory");
195
- const record = taskMemoryTelemetryRecord(step, now());
196
- mkdirSync(logDir, { recursive: true });
197
- const path = join(logDir, TASK_MEMORY_TELEMETRY_FILE);
198
- try {
199
- if (statSync(path).size > TASK_MEMORY_TELEMETRY_MAX_BYTES) renameSync(path, `${path}.1`);
200
- } catch {
201
- }
202
- appendFileSync(path, `${JSON.stringify(record)}
203
- `);
204
- } catch {
205
- }
206
- }
207
- };
208
- }
209
- function taskMemoryTelemetryRecord(step, at) {
210
- const input = nonNegativeInteger(step.inputTokens);
211
- const output = nonNegativeInteger(step.outputTokens);
212
- return {
213
- version: TASK_MEMORY_TELEMETRY_VERSION,
214
- at: at.toISOString(),
215
- triggerReasons: [...new Set(step.triggerReasons)],
216
- tier: step.tier,
217
- bankDelta: step.bankDelta,
218
- decision: step.decision,
219
- reason: step.reason,
220
- bankOperations: nonNegativeInteger(step.bankOperations),
221
- droppedOperations: nonNegativeInteger(step.droppedOperations),
222
- citedEntries: nonNegativeInteger(step.citedEntries),
223
- tokenCost: { input, output, total: input + output },
224
- latencyMs: nonNegativeFinite(step.latencyMs)
225
- };
226
- }
227
- function taskMemoryBankDelta(before, after) {
228
- return {
229
- status: entryDelta(before.status === null ? [] : [before.status], after.status === null ? [] : [after.status]),
230
- knowledge: entryDelta(before.knowledge, after.knowledge),
231
- procedural: entryDelta(before.procedural, after.procedural)
232
- };
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
- "llm_timeout_backoff",
309
- "no_repeated_failure",
310
- "bank_empty"
311
- ]);
312
- function entryDelta(before, after) {
313
- const old = new Map(before.map((entry) => [entry.id, entry]));
314
- const next = new Map(after.map((entry) => [entry.id, entry]));
315
- let added = 0;
316
- let updated = 0;
317
- let deleted = 0;
318
- for (const [id, entry] of next) {
319
- const previous = old.get(id);
320
- if (previous === void 0) added += 1;
321
- else if (!sameEntry(previous, entry)) updated += 1;
322
- }
323
- for (const id of old.keys()) {
324
- if (!next.has(id)) deleted += 1;
325
- }
326
- return { added, updated, deleted };
327
- }
328
- function sameEntry(left, right) {
329
- return left.content === right.content && left.createdAt === right.createdAt;
330
- }
331
- function parseBankDelta(value) {
332
- if (!isRecord(value) || !hasExactKeys(value, DELTA_KEYS)) return null;
333
- const status = parseClassDelta(value.status);
334
- const knowledge = parseClassDelta(value.knowledge);
335
- const procedural = parseClassDelta(value.procedural);
336
- return status === null || knowledge === null || procedural === null ? null : { status, knowledge, procedural };
337
- }
338
- function parseClassDelta(value) {
339
- if (!isRecord(value) || !hasExactKeys(value, CLASS_DELTA_KEYS)) return null;
340
- return isNonNegativeInteger(value.added) && isNonNegativeInteger(value.updated) && isNonNegativeInteger(value.deleted) ? { added: value.added, updated: value.updated, deleted: value.deleted } : null;
341
- }
342
- function parseTokenCost(value) {
343
- if (!isRecord(value) || !hasExactKeys(value, TOKEN_KEYS)) return null;
344
- if (!isNonNegativeInteger(value.input) || !isNonNegativeInteger(value.output) || !isNonNegativeInteger(value.total))
345
- return null;
346
- if (value.total !== value.input + value.output) return null;
347
- return { input: value.input, output: value.output, total: value.total };
348
- }
349
- function validTriggerReasons(value) {
350
- 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));
351
- }
352
- function isTier(value) {
353
- return value === "rules" || value === "llm";
354
- }
355
- function isDecision(value) {
356
- return typeof value === "string" && DECISIONS.has(value);
357
- }
358
- function isReason(value) {
359
- return typeof value === "string" && REASONS.has(value);
360
- }
361
- function validIsoTimestamp(value) {
362
- if (typeof value !== "string" || value.length > 40) return false;
363
- const timestamp = Date.parse(value);
364
- return Number.isFinite(timestamp) && new Date(timestamp).toISOString() === value;
365
- }
366
- function isRecord(value) {
367
- return typeof value === "object" && value !== null && !Array.isArray(value);
368
- }
369
- function hasExactKeys(value, keys) {
370
- const actual = Object.keys(value).sort();
371
- const expected = [...keys].sort();
372
- return actual.length === expected.length && actual.every((key, index) => key === expected[index]);
373
- }
374
- function isNonNegativeInteger(value) {
375
- return typeof value === "number" && Number.isSafeInteger(value) && value >= 0;
376
- }
377
- function nonNegativeInteger(value) {
378
- return Number.isSafeInteger(value) && value >= 0 ? value : 0;
379
- }
380
- function isNonNegativeFinite(value) {
381
- return typeof value === "number" && Number.isFinite(value) && value >= 0;
382
- }
383
- function nonNegativeFinite(value) {
384
- return Number.isFinite(value) && value >= 0 ? value : 0;
385
- }
386
-
387
182
  // src/domains/memory/task-memory-policy.ts
388
183
  init_esm_shims();
389
184
 
@@ -431,6 +226,8 @@ function buildMemoryInterventionUserPrompt(input) {
431
226
  // src/domains/memory/task-memory-policy.ts
432
227
  var TASK_MEMORY_POLICY_MAX_OPERATIONS = 8;
433
228
  var TASK_MEMORY_POLICY_DEFAULT_TIMEOUT_MS = 6e4;
229
+ var TaskMemoryEndpointBusyError = class extends Error {
230
+ };
434
231
  var TASK_PROMPT_MAX_CHARS = 2e3;
435
232
  var TRAJECTORY_PROMPT_MAX_CHARS = 4e3;
436
233
  function renderTrajectory(trajectory) {
@@ -454,10 +251,31 @@ async function runTaskMemoryPolicy(bank, client, input) {
454
251
  const timeoutMs = positiveInteger2(input.timeoutMs, TASK_MEMORY_POLICY_DEFAULT_TIMEOUT_MS);
455
252
  const timeoutMarker = /* @__PURE__ */ Symbol("task-memory-timeout");
456
253
  let timer;
254
+ const cancelledMarker = /* @__PURE__ */ Symbol("task-memory-cancelled");
255
+ let cancel = () => {
256
+ };
257
+ const cancelled = new Promise((resolve) => {
258
+ cancel = () => {
259
+ controller.abort();
260
+ resolve(cancelledMarker);
261
+ };
262
+ });
263
+ input.signal?.addEventListener("abort", cancel, { once: true });
264
+ if (input.signal?.aborted) cancel();
457
265
  let userPrompt = "";
458
266
  let rawResponse = "";
459
267
  let clientError = null;
460
268
  let stepUsage = null;
269
+ let usageReported = false;
270
+ const reportUsage = (usage) => {
271
+ if (usageReported) return;
272
+ usageReported = true;
273
+ stepUsage = usage;
274
+ try {
275
+ input.onStepUsage?.(usage);
276
+ } catch {
277
+ }
278
+ };
461
279
  const settle = (decision, reason, parts = {}) => {
462
280
  const result = {
463
281
  decision,
@@ -465,27 +283,29 @@ async function runTaskMemoryPolicy(bank, client, input) {
465
283
  bankOperations: parts.bankOperations ?? 0,
466
284
  droppedOperations: parts.droppedOperations ?? 0,
467
285
  reminder: parts.reminder ?? null,
468
- inputTokens: parts.inputTokens ?? 0,
469
- outputTokens: parts.outputTokens ?? 0,
286
+ inputTokens: parts.inputTokens ?? stepUsage?.input ?? 0,
287
+ outputTokens: parts.outputTokens ?? stepUsage?.output ?? 0,
470
288
  usage: stepUsage
471
289
  };
472
290
  try {
473
- input.onEnvelope?.({
474
- systemPrompt: MEMORY_INTERVENTION_SYSTEM_PROMPT,
475
- userPrompt,
476
- response: rawResponse,
477
- decision,
478
- reason,
479
- bankOperations: result.bankOperations,
480
- droppedOperations: result.droppedOperations,
481
- reminder: result.reminder,
482
- error: clientError
483
- });
291
+ if (input.isCurrent?.() !== false)
292
+ input.onEnvelope?.({
293
+ systemPrompt: MEMORY_INTERVENTION_SYSTEM_PROMPT,
294
+ userPrompt,
295
+ response: rawResponse,
296
+ decision,
297
+ reason,
298
+ bankOperations: result.bankOperations,
299
+ droppedOperations: result.droppedOperations,
300
+ reminder: result.reminder,
301
+ error: clientError
302
+ });
484
303
  } catch {
485
304
  }
486
305
  return result;
487
306
  };
488
307
  try {
308
+ if (input.signal?.aborted || input.isCurrent?.() === false) return settle("silent", "scope_changed");
489
309
  userPrompt = buildMemoryInterventionUserPrompt({
490
310
  task: input.task.slice(0, TASK_PROMPT_MAX_CHARS),
491
311
  bank: bank.render(input.maxTokens),
@@ -495,23 +315,29 @@ async function runTaskMemoryPolicy(bank, client, input) {
495
315
  systemPrompt: MEMORY_INTERVENTION_SYSTEM_PROMPT,
496
316
  userPrompt,
497
317
  maxTokens: positiveInteger2(input.modelMaxTokens, input.maxTokens),
498
- signal: controller.signal
318
+ signal: controller.signal,
319
+ onUsage: reportUsage
320
+ }).then((response2) => {
321
+ if (response2.usage !== void 0) reportUsage(response2.usage);
322
+ return response2;
499
323
  });
500
324
  const timeout = new Promise((resolve) => {
501
325
  timer = setTimeout(() => resolve(timeoutMarker), timeoutMs);
502
326
  });
503
- const response = await Promise.race([completion, timeout]);
327
+ const response = await Promise.race([completion, timeout, cancelled]);
328
+ if (response === cancelledMarker) return settle("silent", "scope_changed");
504
329
  if (response === timeoutMarker) {
505
330
  controller.abort();
506
331
  void completion.catch(() => void 0);
507
332
  return settle("timeout", "deadline");
508
333
  }
509
334
  rawResponse = typeof response.text === "string" ? response.text : "";
510
- stepUsage = response.usage ?? null;
335
+ stepUsage = response.usage ?? stepUsage;
511
336
  const usage = {
512
- inputTokens: nonNegativeInteger2(response.inputTokens ?? stepUsage?.input),
513
- outputTokens: nonNegativeInteger2(response.outputTokens ?? stepUsage?.output)
337
+ inputTokens: nonNegativeInteger(response.inputTokens ?? stepUsage?.input),
338
+ outputTokens: nonNegativeInteger(response.outputTokens ?? stepUsage?.output)
514
339
  };
340
+ if (input.signal?.aborted || input.isCurrent?.() === false) return settle("silent", "scope_changed", usage);
515
341
  const read = readPolicyStep(rawResponse);
516
342
  if (!read.ok) return settle("malformed", read.reason, { ...usage, droppedOperations: read.dropped });
517
343
  const operations = resolveOperations(bank, read.step.operations);
@@ -531,11 +357,13 @@ async function runTaskMemoryPolicy(bank, client, input) {
531
357
  bank.recordInjection(citedIds);
532
358
  return settle("injected", "intervened", { ...counts, reminder });
533
359
  } catch (error) {
360
+ if (error instanceof TaskMemoryEndpointBusyError) return settle("silent", "endpoint_busy");
534
361
  clientError = errorMessage(error);
535
362
  if (isTimeoutError(error)) return settle("timeout", "timed_out");
536
363
  return settle("silent", "client_error");
537
364
  } finally {
538
365
  if (timer !== void 0) clearTimeout(timer);
366
+ input.signal?.removeEventListener("abort", cancel);
539
367
  }
540
368
  }
541
369
  var OPERATIONS_OPEN = "<operations>";
@@ -623,10 +451,10 @@ function readOperations(value) {
623
451
  const operations = [];
624
452
  let dropped = 0;
625
453
  for (const raw of value) {
626
- if (!isRecord2(raw) || typeof raw.op !== "string") return null;
454
+ if (!isRecord(raw) || typeof raw.op !== "string") return null;
627
455
  switch (raw.op) {
628
456
  case "update_status": {
629
- if (!hasExactKeys2(raw, ["op", "content"])) return null;
457
+ if (!hasExactKeys(raw, ["op", "content"])) return null;
630
458
  const content = boundedContent(raw.content);
631
459
  if (content === null) return null;
632
460
  operations.push({ op: raw.op, content });
@@ -634,7 +462,7 @@ function readOperations(value) {
634
462
  }
635
463
  case "save_knowledge":
636
464
  case "save_procedural": {
637
- if (!hasExactKeys2(raw, raw.id === void 0 ? ["op", "content"] : ["op", "content", "id"])) return null;
465
+ if (!hasExactKeys(raw, raw.id === void 0 ? ["op", "content"] : ["op", "content", "id"])) return null;
638
466
  const content = boundedContent(raw.content);
639
467
  if (content === null) return null;
640
468
  if (raw.id !== void 0 && !nonEmptyString(raw.id)) return null;
@@ -644,7 +472,7 @@ function readOperations(value) {
644
472
  break;
645
473
  }
646
474
  case "delete":
647
- if (!hasExactKeys2(raw, ["op", "id"]) || !nonEmptyString(raw.id)) return null;
475
+ if (!hasExactKeys(raw, ["op", "id"]) || !nonEmptyString(raw.id)) return null;
648
476
  operations.push({ op: raw.op, id: raw.id });
649
477
  break;
650
478
  default:
@@ -715,10 +543,10 @@ function boundedContent(value) {
715
543
  const normalized = value.replace(/\s+/gu, " ").trim();
716
544
  return normalized.length > 0 && normalized.length <= TASK_MEMORY_CONTENT_MAX_CHARS ? normalized : null;
717
545
  }
718
- function isRecord2(value) {
546
+ function isRecord(value) {
719
547
  return value !== null && typeof value === "object" && !Array.isArray(value);
720
548
  }
721
- function hasExactKeys2(record, expected) {
549
+ function hasExactKeys(record, expected) {
722
550
  const keys = Object.keys(record).sort();
723
551
  return keys.length === expected.length && [...expected].sort().every((key, index) => keys[index] === key);
724
552
  }
@@ -728,7 +556,7 @@ function nonEmptyString(value) {
728
556
  function positiveInteger2(value, fallback) {
729
557
  return value !== void 0 && Number.isInteger(value) && value > 0 ? value : fallback;
730
558
  }
731
- function nonNegativeInteger2(value) {
559
+ function nonNegativeInteger(value) {
732
560
  return value !== void 0 && Number.isInteger(value) && value >= 0 ? value : 0;
733
561
  }
734
562
  function isTimeoutError(error) {
@@ -742,16 +570,223 @@ function errorMessage(error) {
742
570
  return typeof error === "string" && error.length > 0 ? error : "an unknown client failure";
743
571
  }
744
572
 
573
+ // src/domains/memory/task-memory-telemetry.ts
574
+ init_esm_shims();
575
+ import { appendFileSync, mkdirSync, renameSync, statSync } from "node:fs";
576
+ import { join } from "node:path";
577
+ var TASK_MEMORY_TELEMETRY_VERSION = 2;
578
+ var TASK_MEMORY_TELEMETRY_MAX_BYTES = 1024 * 1024;
579
+ var TASK_MEMORY_TELEMETRY_FILE = "steps.jsonl";
580
+ function createTaskMemoryTelemetrySink(options = {}) {
581
+ const now = options.now ?? (() => /* @__PURE__ */ new Date());
582
+ return {
583
+ record(step) {
584
+ try {
585
+ const logDir = options.logDir ?? join(clioStateDir(), "memory");
586
+ const record = taskMemoryTelemetryRecord(step, now());
587
+ mkdirSync(logDir, { recursive: true });
588
+ const path = join(logDir, TASK_MEMORY_TELEMETRY_FILE);
589
+ try {
590
+ if (statSync(path).size > TASK_MEMORY_TELEMETRY_MAX_BYTES) renameSync(path, `${path}.1`);
591
+ } catch {
592
+ }
593
+ appendFileSync(path, `${JSON.stringify(record)}
594
+ `);
595
+ } catch {
596
+ }
597
+ }
598
+ };
599
+ }
600
+ function taskMemoryTelemetryRecord(step, at) {
601
+ const input = nonNegativeInteger2(step.inputTokens);
602
+ const output = nonNegativeInteger2(step.outputTokens);
603
+ return {
604
+ version: TASK_MEMORY_TELEMETRY_VERSION,
605
+ at: at.toISOString(),
606
+ triggerReasons: [...new Set(step.triggerReasons)],
607
+ tier: step.tier,
608
+ bankDelta: step.bankDelta,
609
+ decision: step.decision,
610
+ reason: step.reason,
611
+ bankOperations: nonNegativeInteger2(step.bankOperations),
612
+ droppedOperations: nonNegativeInteger2(step.droppedOperations),
613
+ citedEntries: nonNegativeInteger2(step.citedEntries),
614
+ tokenCost: { input, output, total: input + output },
615
+ latencyMs: nonNegativeFinite(step.latencyMs)
616
+ };
617
+ }
618
+ function taskMemoryBankDelta(before, after) {
619
+ return {
620
+ status: entryDelta(before.status === null ? [] : [before.status], after.status === null ? [] : [after.status]),
621
+ knowledge: entryDelta(before.knowledge, after.knowledge),
622
+ procedural: entryDelta(before.procedural, after.procedural)
623
+ };
624
+ }
625
+ function parseTaskMemoryTelemetryRecord(value) {
626
+ if (!isRecord2(value) || !hasExactKeys2(value, TELEMETRY_KEYS)) return null;
627
+ if (value.version !== TASK_MEMORY_TELEMETRY_VERSION || !validIsoTimestamp(value.at)) return null;
628
+ if (!validTriggerReasons(value.triggerReasons) || !isTier(value.tier) || !isDecision(value.decision)) return null;
629
+ if (!isReason(value.reason) || !isNonNegativeInteger(value.citedEntries)) return null;
630
+ if (!isNonNegativeInteger(value.bankOperations) || !isNonNegativeInteger(value.droppedOperations)) return null;
631
+ const bankDelta = parseBankDelta(value.bankDelta);
632
+ const tokenCost = parseTokenCost(value.tokenCost);
633
+ if (bankDelta === null || tokenCost === null || !isNonNegativeFinite(value.latencyMs)) return null;
634
+ return {
635
+ version: TASK_MEMORY_TELEMETRY_VERSION,
636
+ at: value.at,
637
+ triggerReasons: value.triggerReasons,
638
+ tier: value.tier,
639
+ bankDelta,
640
+ decision: value.decision,
641
+ reason: value.reason,
642
+ bankOperations: value.bankOperations,
643
+ droppedOperations: value.droppedOperations,
644
+ citedEntries: value.citedEntries,
645
+ tokenCost,
646
+ latencyMs: value.latencyMs
647
+ };
648
+ }
649
+ var TELEMETRY_KEYS = [
650
+ "version",
651
+ "at",
652
+ "triggerReasons",
653
+ "tier",
654
+ "bankDelta",
655
+ "decision",
656
+ "reason",
657
+ "bankOperations",
658
+ "droppedOperations",
659
+ "citedEntries",
660
+ "tokenCost",
661
+ "latencyMs"
662
+ ];
663
+ var DELTA_KEYS = ["status", "knowledge", "procedural"];
664
+ var CLASS_DELTA_KEYS = ["added", "updated", "deleted"];
665
+ var TOKEN_KEYS = ["input", "output", "total"];
666
+ var TRIGGERS = /* @__PURE__ */ new Set([
667
+ "interval",
668
+ "tool_error_streak",
669
+ "loop_signal",
670
+ "repeated_failure",
671
+ "turn_end",
672
+ "post_compaction",
673
+ "manual"
674
+ ]);
675
+ var DECISIONS = /* @__PURE__ */ new Set([
676
+ "silent",
677
+ "injected",
678
+ "gated",
679
+ "timeout",
680
+ "malformed",
681
+ "dropped"
682
+ ]);
683
+ var REASONS = /* @__PURE__ */ new Set([
684
+ "intervened",
685
+ "model_silent",
686
+ "duplicate_reminder",
687
+ "suppressed",
688
+ "uncited",
689
+ "over_budget",
690
+ "unparseable",
691
+ "all_operations_invalid",
692
+ "deadline",
693
+ "timed_out",
694
+ "endpoint_busy",
695
+ "client_error",
696
+ "no_client",
697
+ "no_consumer",
698
+ "step_in_flight",
699
+ "llm_timeout_backoff",
700
+ "no_repeated_failure",
701
+ "bank_empty",
702
+ "scope_changed"
703
+ ]);
704
+ function entryDelta(before, after) {
705
+ const old = new Map(before.map((entry) => [entry.id, entry]));
706
+ const next = new Map(after.map((entry) => [entry.id, entry]));
707
+ let added = 0;
708
+ let updated = 0;
709
+ let deleted = 0;
710
+ for (const [id, entry] of next) {
711
+ const previous = old.get(id);
712
+ if (previous === void 0) added += 1;
713
+ else if (!sameEntry(previous, entry)) updated += 1;
714
+ }
715
+ for (const id of old.keys()) {
716
+ if (!next.has(id)) deleted += 1;
717
+ }
718
+ return { added, updated, deleted };
719
+ }
720
+ function sameEntry(left, right) {
721
+ return left.content === right.content && left.createdAt === right.createdAt;
722
+ }
723
+ function parseBankDelta(value) {
724
+ if (!isRecord2(value) || !hasExactKeys2(value, DELTA_KEYS)) return null;
725
+ const status = parseClassDelta(value.status);
726
+ const knowledge = parseClassDelta(value.knowledge);
727
+ const procedural = parseClassDelta(value.procedural);
728
+ return status === null || knowledge === null || procedural === null ? null : { status, knowledge, procedural };
729
+ }
730
+ function parseClassDelta(value) {
731
+ if (!isRecord2(value) || !hasExactKeys2(value, CLASS_DELTA_KEYS)) return null;
732
+ return isNonNegativeInteger(value.added) && isNonNegativeInteger(value.updated) && isNonNegativeInteger(value.deleted) ? { added: value.added, updated: value.updated, deleted: value.deleted } : null;
733
+ }
734
+ function parseTokenCost(value) {
735
+ if (!isRecord2(value) || !hasExactKeys2(value, TOKEN_KEYS)) return null;
736
+ if (!isNonNegativeInteger(value.input) || !isNonNegativeInteger(value.output) || !isNonNegativeInteger(value.total))
737
+ return null;
738
+ if (value.total !== value.input + value.output) return null;
739
+ return { input: value.input, output: value.output, total: value.total };
740
+ }
741
+ function validTriggerReasons(value) {
742
+ 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));
743
+ }
744
+ function isTier(value) {
745
+ return value === "rules" || value === "llm";
746
+ }
747
+ function isDecision(value) {
748
+ return typeof value === "string" && DECISIONS.has(value);
749
+ }
750
+ function isReason(value) {
751
+ return typeof value === "string" && REASONS.has(value);
752
+ }
753
+ function validIsoTimestamp(value) {
754
+ if (typeof value !== "string" || value.length > 40) return false;
755
+ const timestamp = Date.parse(value);
756
+ return Number.isFinite(timestamp) && new Date(timestamp).toISOString() === value;
757
+ }
758
+ function isRecord2(value) {
759
+ return typeof value === "object" && value !== null && !Array.isArray(value);
760
+ }
761
+ function hasExactKeys2(value, keys) {
762
+ const actual = Object.keys(value).sort();
763
+ const expected = [...keys].sort();
764
+ return actual.length === expected.length && actual.every((key, index) => key === expected[index]);
765
+ }
766
+ function isNonNegativeInteger(value) {
767
+ return typeof value === "number" && Number.isSafeInteger(value) && value >= 0;
768
+ }
769
+ function nonNegativeInteger2(value) {
770
+ return Number.isSafeInteger(value) && value >= 0 ? value : 0;
771
+ }
772
+ function isNonNegativeFinite(value) {
773
+ return typeof value === "number" && Number.isFinite(value) && value >= 0;
774
+ }
775
+ function nonNegativeFinite(value) {
776
+ return Number.isFinite(value) && value >= 0 ? value : 0;
777
+ }
778
+
745
779
  export {
746
780
  TASK_MEMORY_DEFAULT_KNOWLEDGE_CAP,
747
781
  TASK_MEMORY_DEFAULT_PROCEDURAL_CAP,
748
782
  TASK_MEMORY_CONTENT_MAX_CHARS,
749
783
  TaskMemoryBank,
750
784
  TASK_MEMORY_POLICY_DEFAULT_TIMEOUT_MS,
785
+ TaskMemoryEndpointBusyError,
751
786
  runTaskMemoryPolicy,
752
787
  TASK_MEMORY_TELEMETRY_FILE,
753
788
  createTaskMemoryTelemetrySink,
754
789
  taskMemoryBankDelta,
755
790
  parseTaskMemoryTelemetryRecord
756
791
  };
757
- //# sourceMappingURL=chunk-I66EAJFY.js.map
792
+ //# sourceMappingURL=chunk-2WZ546HR.js.map
@@ -16,6 +16,33 @@ var CANONICAL_METRICS = [
16
16
  // are absent in that case rather than zero, so a gate on cost can require
17
17
  // measurement instead of reading silence as free.
18
18
  "tokens.measured",
19
+ // Observed stdout terminal/retry facts, independent of task success. Opaque
20
+ // runs carry measured:false and no counters. Errored usage stays in inclusive
21
+ // tokens.* totals; errorTokens/errorCostUsd are known subtotals with coverage.
22
+ "provider.measured",
23
+ "provider.stopReason.stop",
24
+ "provider.stopReason.toolUse",
25
+ "provider.stopReason.length",
26
+ "provider.stopReason.error",
27
+ "provider.stopReason.aborted",
28
+ "provider.stopReason.other",
29
+ "provider.retryScheduled",
30
+ "provider.retryStarted",
31
+ "provider.retryCancelled",
32
+ "provider.retryExhausted",
33
+ "provider.retryRecovered",
34
+ "provider.errorUsageObservedCalls",
35
+ "provider.errorUsageUnobservedCalls",
36
+ "provider.errorUsageIncompleteCalls",
37
+ "provider.errorCostUnobservedCalls",
38
+ "provider.errorReasoningUnobservedCalls",
39
+ "provider.errorReasoningTokens",
40
+ "provider.errorTokens.input",
41
+ "provider.errorTokens.output",
42
+ "provider.errorTokens.total",
43
+ "provider.errorTokens.cacheRead",
44
+ "provider.errorTokens.cacheWrite",
45
+ "provider.errorCostUsd",
19
46
  "latency.wallMs",
20
47
  "latency.modelMs",
21
48
  "tools.totalCalls",
@@ -25,6 +52,7 @@ var CANONICAL_METRICS = [
25
52
  "tools.read.outsideAllowed",
26
53
  "tools.read.decoyHits",
27
54
  "tools.calls.dispatch",
55
+ "tools.succeeded.dispatch",
28
56
  "tools.blocked.bash",
29
57
  "claims.unsupported",
30
58
  "completion.reported",
@@ -129,4 +157,4 @@ export {
129
157
  CANONICAL_METRICS,
130
158
  CANONICAL_METRIC_PREFIXES
131
159
  };
132
- //# sourceMappingURL=chunk-RKSR6VSF.js.map
160
+ //# sourceMappingURL=chunk-4IUZQIJ3.js.map
@@ -10,7 +10,7 @@ import {
10
10
  } from "./chunk-K6BSR66V.js";
11
11
  import {
12
12
  StringEnum
13
- } from "./chunk-VXMFAE2W.js";
13
+ } from "./chunk-YPC6ZR5L.js";
14
14
  import {
15
15
  init_esm_shims
16
16
  } from "./chunk-3R73A4XB.js";
@@ -36,4 +36,4 @@ var panesToolSurface = {
36
36
  export {
37
37
  panesToolSurface
38
38
  };
39
- //# sourceMappingURL=chunk-2X4RYJTJ.js.map
39
+ //# sourceMappingURL=chunk-4UVU7BJ5.js.map