@iowarp/clio-coder 0.4.2 → 0.4.4

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 (523) hide show
  1. package/CHANGELOG.md +98 -0
  2. package/CONTRIBUTING.md +86 -19
  3. package/README.md +35 -6
  4. package/dist/{acp-TMDQZDIG.js → acp-WNAYYF4F.js} +12 -13
  5. package/dist/{agents-5N5NG3XG.js → agents-3OKXHLOI.js} +60 -57
  6. package/dist/assets/codewiki.json +1 -1
  7. package/dist/{auth-Z5CCBXKQ.js → auth-VKNNMGPU.js} +21 -19
  8. package/dist/{builtins-K6TNDT24.js → builtins-WGALA46I.js} +9 -4
  9. package/dist/{chunk-XE3PCIXH.js → chunk-23L32XTI.js} +12 -9
  10. package/dist/{chunk-I64IFBLB.js → chunk-25QBEXRS.js} +18 -11
  11. package/dist/{chunk-CDNVLKUX.js → chunk-26QSH3EJ.js} +13 -7
  12. package/dist/{chunk-QQLGQY2A.js → chunk-2ASED4PZ.js} +22 -22
  13. package/dist/{chunk-MCEPRMZW.js → chunk-2CU2H6KE.js} +2 -2
  14. package/dist/chunk-2DSOYNFC.js +108 -0
  15. package/dist/{chunk-72GZI5EV.js → chunk-2JH2WHGE.js} +2 -2
  16. package/dist/{chunk-I66EAJFY.js → chunk-2WZ546HR.js} +267 -232
  17. package/dist/{chunk-O3YUNJZ2.js → chunk-2ZSONWVL.js} +82 -25
  18. package/dist/{chunk-2NHR3NAY.js → chunk-36CT5VVL.js} +331 -42
  19. package/dist/{chunk-2X4RYJTJ.js → chunk-3GY4F45V.js} +3 -3
  20. package/dist/{chunk-ZW55JB7N.js → chunk-3ODX73FK.js} +4 -6
  21. package/dist/{chunk-PBP4B7XR.js → chunk-3UNOLWNZ.js} +3 -3
  22. package/dist/{chunk-4JDLP6ZS.js → chunk-3UUXNFEX.js} +14 -10
  23. package/dist/{chunk-RKSR6VSF.js → chunk-4IUZQIJ3.js} +29 -1
  24. package/dist/{chunk-ZW4HH5JJ.js → chunk-4M6Z5QVF.js} +6 -6
  25. package/dist/{chunk-K6BSR66V.js → chunk-4NSRCOYP.js} +4 -1
  26. package/dist/{chunk-M2DAX4F6.js → chunk-4WR7VSYB.js} +2 -2
  27. package/dist/{chunk-FSP7CMNU.js → chunk-54X7T7DK.js} +61 -6
  28. package/dist/{chunk-54ODD65L.js → chunk-5636DCO5.js} +4 -4
  29. package/dist/chunk-57XXR6DR.js +3763 -0
  30. package/dist/{chunk-3KIPBMUA.js → chunk-5ICU3EUH.js} +2 -2
  31. package/dist/{chunk-77QIVUZB.js → chunk-5MEZN6CB.js} +4 -4
  32. package/dist/{chunk-O42A54GG.js → chunk-5OIVVPHF.js} +2 -2
  33. package/dist/{chunk-YJISEZKC.js → chunk-5TUB6SLS.js} +6 -6
  34. package/dist/{chunk-IMXMHHMQ.js → chunk-6OSVSQL5.js} +341 -57
  35. package/dist/{chunk-Q4XWMHX6.js → chunk-6PAZTBPA.js} +14 -2
  36. package/dist/{chunk-FVDGR2ZL.js → chunk-6Q3CYFD3.js} +112 -39
  37. package/dist/{chunk-IDNA72AH.js → chunk-6QOTUPRG.js} +155 -36
  38. package/dist/{chunk-X7IARSHT.js → chunk-6UINWWS6.js} +16 -10
  39. package/dist/{chunk-CYZW7JHJ.js → chunk-72YIHOZQ.js} +9 -9
  40. package/dist/{chunk-IKSLQ4XV.js → chunk-75W7L2E2.js} +752 -861
  41. package/dist/{chunk-CRFOIAX3.js → chunk-7UGL4MB5.js} +6 -6
  42. package/dist/{chunk-HIICAHCJ.js → chunk-AUPNRN7C.js} +2 -2
  43. package/dist/{chunk-7BHIY2MW.js → chunk-BJVFZO5U.js} +8 -50
  44. package/dist/{chunk-B74PXLU7.js → chunk-CUSRQKPU.js} +65 -3
  45. package/dist/chunk-DQOVN6KV.js +386 -0
  46. package/dist/{chunk-E7GT7O5N.js → chunk-DT3LWJOB.js} +7 -4
  47. package/dist/chunk-DXKJURES.js +671 -0
  48. package/dist/{chunk-JBCS7CRR.js → chunk-EL24TAU4.js} +10 -10
  49. package/dist/{chunk-TPEQIQIE.js → chunk-ELWDPP3Y.js} +8 -8
  50. package/dist/{chunk-NDINPTJ4.js → chunk-ELZVTCGV.js} +5 -4
  51. package/dist/chunk-EXLD33WO.js +381 -0
  52. package/dist/chunk-FEAXX7B6.js +101 -0
  53. package/dist/{chunk-RLYRBIYQ.js → chunk-FFUPXJC4.js} +90 -331
  54. package/dist/{chunk-5PFYMY2V.js → chunk-FTMGRKEF.js} +2 -2
  55. package/dist/{chunk-34BHNEE3.js → chunk-GHS5EBTQ.js} +58 -7
  56. package/dist/{chunk-DYHAXKHD.js → chunk-GWZNEVM2.js} +12 -8
  57. package/dist/chunk-GX5WYQO4.js +59 -0
  58. package/dist/chunk-GYV6VZOC.js +26 -0
  59. package/dist/{chunk-MQXIVJ35.js → chunk-HAXOFFRH.js} +5 -5
  60. package/dist/chunk-I2DWJ4GM.js +390 -0
  61. package/dist/{chunk-TXOTCRLG.js → chunk-I5FWO7L5.js} +5 -5
  62. package/dist/{chunk-WNP7O5WZ.js → chunk-ID64D7PE.js} +4 -4
  63. package/dist/{chunk-XQRY4DTA.js → chunk-IGLP3ODT.js} +10 -10
  64. package/dist/chunk-IRXAATOX.js +539 -0
  65. package/dist/chunk-IXIY2H4R.js +44 -0
  66. package/dist/{chunk-SSEYRH53.js → chunk-IZXGRF7P.js} +92 -147
  67. package/dist/{chunk-5TSRNF4G.js → chunk-JCI2ROMZ.js} +164 -6
  68. package/dist/{chunk-JWJGP5DQ.js → chunk-JEIYHLOR.js} +7 -7
  69. package/dist/{chunk-F2I26BDK.js → chunk-JQLNNIKT.js} +4 -4
  70. package/dist/{chunk-BYMNWQ7O.js → chunk-JSD46VO2.js} +315 -63
  71. package/dist/{chunk-AK5XEFVZ.js → chunk-JT2RFCC5.js} +64 -14
  72. package/dist/{chunk-MCMZMDAC.js → chunk-K6T2ZAMZ.js} +168 -6
  73. package/dist/{chunk-PGF63K6I.js → chunk-KFV5L5SK.js} +73 -4
  74. package/dist/{chunk-IHXBNWMM.js → chunk-KXDSS5WJ.js} +7 -3
  75. package/dist/{chunk-PJX3WQUQ.js → chunk-LLXSDWXS.js} +3 -3
  76. package/dist/{chunk-DZAW46HP.js → chunk-LTIKRKFL.js} +3 -3
  77. package/dist/{chunk-DZEK6CJN.js → chunk-N56KALIC.js} +21 -21
  78. package/dist/{chunk-B7HM5Z7T.js → chunk-NAI6ZFCY.js} +9 -5
  79. package/dist/{chunk-I66ZTYNP.js → chunk-NRO2BJRH.js} +2656 -2213
  80. package/dist/{chunk-ZGNYYXQ6.js → chunk-NXIMQY5W.js} +3 -3
  81. package/dist/{chunk-IKOZFYBN.js → chunk-NXYCB2VD.js} +149 -106
  82. package/dist/{chunk-CWVRRIEI.js → chunk-NZMNUPZZ.js} +2 -2
  83. package/dist/{chunk-462T4EGZ.js → chunk-O5CVSAG5.js} +2 -2
  84. package/dist/chunk-ODGTEFFI.js +50 -0
  85. package/dist/{chunk-3F7VUY77.js → chunk-OEJSLEPW.js} +2 -2
  86. package/dist/{chunk-KKOJXO6R.js → chunk-OMQNJVKW.js} +4 -2
  87. package/dist/{chunk-5KW52TEP.js → chunk-Q4WO54TA.js} +132 -77
  88. package/dist/{chunk-W6NIE6OW.js → chunk-QUFRYSWI.js} +13 -7
  89. package/dist/{chunk-42FMPA75.js → chunk-QZWQA4DE.js} +2 -2
  90. package/dist/chunk-R6Q67RJH.js +134 -0
  91. package/dist/{chunk-W4YEMFBX.js → chunk-RAY4OVGZ.js} +3 -3
  92. package/dist/{chunk-ZNT2M6TG.js → chunk-RQCKCSRL.js} +17 -17
  93. package/dist/{chunk-LJID3DYZ.js → chunk-RXTN6AKH.js} +3 -3
  94. package/dist/{chunk-P75RZCJW.js → chunk-RZDWV63N.js} +3 -3
  95. package/dist/{chunk-UH632ZYL.js → chunk-S6PYF2XF.js} +2 -2
  96. package/dist/{chunk-HJWWJ6IL.js → chunk-TOIVGRUX.js} +17 -5
  97. package/dist/{chunk-HLAFFSEK.js → chunk-TQAHXW6Y.js} +2 -2
  98. package/dist/{chunk-JIEGK6UF.js → chunk-U6TMQNSI.js} +48 -4
  99. package/dist/{chunk-2HFQNRV3.js → chunk-UEPWCCTY.js} +12 -12
  100. package/dist/chunk-UOIZ7DA4.js +41 -0
  101. package/dist/{chunk-UH347SHR.js → chunk-USR47QNF.js} +11 -11
  102. package/dist/{chunk-AZ4WMN4W.js → chunk-V6HJFQZE.js} +2 -2
  103. package/dist/chunk-V76WTFTW.js +318 -0
  104. package/dist/{chunk-NMJXSHBJ.js → chunk-W54I7H25.js} +2 -2
  105. package/dist/{chunk-KPXDY6QF.js → chunk-XRZT5WY5.js} +2 -2
  106. package/dist/{chunk-UBRFI4HS.js → chunk-XULDXHTN.js} +142 -50
  107. package/dist/chunk-XXYSBZIQ.js +283 -0
  108. package/dist/{chunk-HKMD33FO.js → chunk-Y55JBDO5.js} +405 -122
  109. package/dist/{chunk-XOXV5GKE.js → chunk-YD5GIKET.js} +17 -8
  110. package/dist/{chunk-XGDPUNND.js → chunk-YECAMM3D.js} +2 -2
  111. package/dist/{chunk-BO7Y52RY.js → chunk-YNFKXPEC.js} +7 -7
  112. package/dist/{chunk-VXMFAE2W.js → chunk-YPC6ZR5L.js} +19 -6
  113. package/dist/{chunk-M2WXEHER.js → chunk-ZA4VCIGV.js} +2 -2
  114. package/dist/cli/index.js +42 -40
  115. package/dist/{clio-7VB377CC.js → clio-QLICPCF5.js} +7 -7
  116. package/dist/{code-nav-YVLCYA7V.js → code-nav-IJR2DBPR.js} +9 -9
  117. package/dist/{components-UBWCQSRW.js → components-2TGAI2RC.js} +5 -6
  118. package/dist/{config-4HVOS65E.js → config-IUA6OYNS.js} +88 -81
  119. package/dist/{configure-PIWO7B24.js → configure-VEPX4NMX.js} +26 -25
  120. package/dist/{context-KQYIWPWT.js → context-2DKHWH2T.js} +60 -45
  121. package/dist/{context-IYEHL3WQ.js → context-4MPR7WKB.js} +78 -69
  122. package/dist/{context-N6ZE3LGJ.js → context-BOYF5EJM.js} +15 -11
  123. package/dist/{context-clear-G4OGZJDS.js → context-clear-S4ZJCQUX.js} +73 -65
  124. package/dist/context-map-COB37XXN.js +505 -0
  125. package/dist/{context-working-set-BWLF6LJP.js → context-working-set-3I3FYX6Y.js} +18 -17
  126. package/dist/detail-A7JAVSIG.js +98 -0
  127. package/dist/{dispatch-runner-2QQAITS3.js → dispatch-runner-RJ5I2F2O.js} +99 -75
  128. package/dist/{docs-PD3EXDKU.js → docs-SPOV3BAN.js} +3 -5
  129. package/dist/{doctor-LHBD36VU.js → doctor-DKICC2SN.js} +71 -48
  130. package/dist/{eval-C45FYRJ6.js → eval-OQOQUDHK.js} +308 -146
  131. package/dist/{eval-inventory-6DEJPLBF.js → eval-inventory-Y6QRFOH5.js} +4 -4
  132. package/dist/{evidence-6SHONYAF.js → evidence-4DQ25GUQ.js} +79 -175
  133. package/dist/evidence-4F5USFKH.js +208 -0
  134. package/dist/{evolve-KRKMV72X.js → evolve-GSS52E5J.js} +71 -67
  135. package/dist/{extensions-KPZ2UHBB.js → extensions-G7MFLYHT.js} +8 -9
  136. package/dist/{fleet-IVTCKDHT.js → fleet-Q37YHHAQ.js} +126 -118
  137. package/dist/{fleet-commands-EDWL3IT7.js → fleet-commands-G7E4N7SM.js} +16 -13
  138. package/dist/{fleet-decisions-YP3YEFGK.js → fleet-decisions-O7M6QBA2.js} +9 -8
  139. package/dist/{fleet-graph-ZFWKHY2M.js → fleet-graph-TOUBW6OW.js} +21 -20
  140. package/dist/{fleet-inspect-FVUNCBML.js → fleet-inspect-SW33JJNI.js} +65 -60
  141. package/dist/{fleet-preflight-UN5XED4R.js → fleet-preflight-CV2655TW.js} +4 -5
  142. package/dist/{fleet-validate-XOWC4HSX.js → fleet-validate-KESZX2YH.js} +25 -24
  143. package/dist/{fleet-verify-UN3SODEL.js → fleet-verify-UQPMTVE3.js} +66 -61
  144. package/dist/{fleet-view-TWHJKCN6.js → fleet-view-MN2VG4MR.js} +65 -60
  145. package/dist/{init-T2QORQ3Y.js → init-PXEXQSBF.js} +90 -82
  146. package/dist/{interop-IN5I2A66.js → interop-ZG5T62U3.js} +12 -13
  147. package/dist/inventory-C26CFDRR.js +101 -0
  148. package/dist/{library-LSCATDLZ.js → library-B2W4N74O.js} +29 -29
  149. package/dist/{memory-HYOKAGGJ.js → memory-YCANYS5A.js} +73 -69
  150. package/dist/{models-2GPMFYCM.js → models-GERTU3YI.js} +51 -47
  151. package/dist/{monitor-E4ASVUJH.js → monitor-CPNIUULB.js} +74 -67
  152. package/dist/{orchestrator-DDMPR3PY.js → orchestrator-J4BSH4WQ.js} +1288 -1606
  153. package/dist/{panes-E3RUXOW5.js → panes-BOHAEGYC.js} +4 -4
  154. package/dist/{panes-IXKLOKA2.js → panes-NXSLDQZ2.js} +10 -11
  155. package/dist/{paths-L7LGY6RN.js → paths-VSUWNC22.js} +6 -7
  156. package/dist/reset-TNWTB5LU.js +343 -0
  157. package/dist/{resources-OTRSN34L.js → resources-4PXNMD5G.js} +29 -22
  158. package/dist/{run-5DEYH5QK.js → run-D6XJ34CN.js} +132 -132
  159. package/dist/{share-IHWTLO3M.js → share-2NWMJJEE.js} +27 -27
  160. package/dist/{skills-IYMXMKW4.js → skills-KR7WON5G.js} +40 -33
  161. package/dist/{skills-eval-DROHSJAR.js → skills-eval-O2ZNOLDS.js} +81 -77
  162. package/dist/{skills-inventory-D7X4L4ZX.js → skills-inventory-ZZOUBK7O.js} +23 -22
  163. package/dist/{slash-commands-QBM7UZ3B.js → slash-commands-ZXPJD64J.js} +47 -37
  164. package/dist/{steer-Z5DO23FJ.js → steer-XA25PSCS.js} +4 -4
  165. package/dist/{support-U7QOWY26.js → support-7EMVWYG2.js} +6 -6
  166. package/dist/{targets-P2FUC4IL.js → targets-OMH2XCSN.js} +50 -49
  167. package/dist/tasks-IPAGMEIX.js +36 -0
  168. package/dist/{terminal-lease-YREJ3JX2.js → terminal-lease-C2J3JYRE.js} +4 -4
  169. package/dist/{tools-5B7RO6MV.js → tools-EFFEAIDP.js} +8 -9
  170. package/dist/{trace-YMGMUM6A.js → trace-FXMXUZUF.js} +7 -7
  171. package/dist/uninstall-HALS6BLF.js +407 -0
  172. package/dist/upgrade-MS72RJEP.js +306 -0
  173. package/dist/{usage-ME5MPXGX.js → usage-NHG6MCJM.js} +162 -108
  174. package/dist/{verifiers-BVZ7IWOO.js → verifiers-7AUNVXDY.js} +155 -22
  175. package/dist/{verify-5K7ZKQFC.js → verify-FWYGPKMR.js} +14 -12
  176. package/dist/{web-fetch-MPARV2K7.js → web-fetch-V4FKSDAV.js} +4 -4
  177. package/dist/{wiki-generate-F5W5QTYY.js → wiki-generate-743CIGJW.js} +99 -90
  178. package/dist/{with-panes-BYOJCLAM.js → with-panes-BDQEWBRT.js} +10 -10
  179. package/dist/worker/entry.js +72 -68
  180. package/docs/README.md +3 -2
  181. package/docs/architecture/acp.md +17 -0
  182. package/docs/architecture/artifact-placement.md +1 -0
  183. package/docs/architecture/artifact-versions.md +2 -2
  184. package/docs/architecture/context-engine.md +4 -0
  185. package/docs/architecture/dispatch-typed-intent.md +1 -1
  186. package/docs/architecture/evidence-and-memory.md +1 -1
  187. package/docs/architecture/middleware-and-components.md +1 -1
  188. package/docs/architecture/model-catalog.md +21 -10
  189. package/docs/architecture/observability.md +19 -2
  190. package/docs/architecture/prompt-envelope-and-tools.md +17 -5
  191. package/docs/architecture/provider-adapter-cookbook.md +63 -0
  192. package/docs/architecture/safety-model.md +25 -22
  193. package/docs/architecture/tui-design.md +1 -1
  194. package/docs/guide/built-in-agents.md +25 -11
  195. package/docs/guide/commands-and-modes.md +18 -3
  196. package/docs/guide/configuration-and-targets.md +100 -10
  197. package/docs/guide/configuration-reference.md +17 -7
  198. package/docs/guide/environment-variables.md +4 -2
  199. package/docs/guide/installation-and-lifecycle.md +37 -4
  200. package/docs/guide/proactive-memory.md +66 -55
  201. package/docs/guide/skills-marketplace.md +18 -0
  202. package/docs/guide/tool-usage.md +78 -3
  203. package/docs/history/config-knobs-audit.md +2 -2
  204. package/docs/process/development-pipeline.md +40 -2
  205. package/docs/process/eval-runner.md +67 -3
  206. package/docs/process/git-commit-provenance.md +15 -0
  207. package/docs/process/release-cut-checklist.md +207 -0
  208. package/docs/process/scientific-validation.md +18 -17
  209. package/evals/behavioral-machinery-support.ts +1 -0
  210. package/evals/behavioral-machinery.yaml +1 -1
  211. package/evals/behavioral-model.yaml +3 -2
  212. package/package.json +2 -2
  213. package/skills/README.md +7 -5
  214. package/skills/coding/ast-grep/SKILL.md +101 -30
  215. package/skills/coding/ast-grep/evals.md +26 -0
  216. package/skills/coding/coding-standards/SKILL.md +47 -2
  217. package/skills/coding/coding-standards/evals.md +23 -0
  218. package/skills/coding/prototype/SKILL.md +87 -28
  219. package/skills/coding/prototype/evals.md +19 -0
  220. package/skills/coding/tdd/SKILL.md +80 -53
  221. package/skills/coding/tdd/evals.md +20 -0
  222. package/skills/context/context-handoff/SKILL.md +43 -2
  223. package/skills/context/context-handoff/evals.md +44 -0
  224. package/skills/context/context-prime/SKILL.md +45 -15
  225. package/skills/context/context-prime/evals.md +45 -0
  226. package/skills/git/branch-closeout/SKILL.md +132 -0
  227. package/skills/git/branch-closeout/evals.md +133 -0
  228. package/skills/git/branch-closeout/references/closeout-checklist.md +81 -0
  229. package/skills/git/file-ticket/SKILL.md +77 -63
  230. package/skills/git/file-ticket/assets/issue-template.md +22 -0
  231. package/skills/git/file-ticket/evals.md +31 -26
  232. package/skills/git/file-ticket/references/issue-discovery.md +49 -0
  233. package/skills/git/fix-issue/SKILL.md +87 -64
  234. package/skills/git/fix-issue/evals.md +35 -31
  235. package/skills/git/fix-issue/references/diagnosis-and-rca.md +46 -0
  236. package/skills/git/resolve-merge-conflicts/SKILL.md +100 -51
  237. package/skills/git/resolve-merge-conflicts/evals.md +52 -25
  238. package/skills/git/resolve-merge-conflicts/references/conflict-matrix.md +126 -0
  239. package/skills/git/ship/SKILL.md +103 -67
  240. package/skills/git/ship/assets/pr-template.md +21 -0
  241. package/skills/git/ship/evals.md +44 -28
  242. package/skills/git/ship/references/remote-and-branch-policy.md +62 -0
  243. package/skills/git/worktree-create/SKILL.md +80 -50
  244. package/skills/git/worktree-create/evals.md +40 -33
  245. package/skills/git/worktree-create/references/worktree-setup.md +62 -66
  246. package/skills/git/worktree-merge/SKILL.md +112 -65
  247. package/skills/git/worktree-merge/evals.md +42 -34
  248. package/skills/git/worktree-merge/references/merge-strategies.md +52 -0
  249. package/skills/planning/archify/SKILL.md +196 -0
  250. package/skills/planning/archify/evals.md +65 -0
  251. package/skills/planning/architecture/SKILL.md +61 -12
  252. package/skills/planning/architecture/evals.md +65 -0
  253. package/skills/planning/backlog/SKILL.md +130 -14
  254. package/skills/planning/backlog/evals.md +142 -0
  255. package/skills/planning/prd/SKILL.md +47 -6
  256. package/skills/planning/prd/evals.md +54 -0
  257. package/skills/planning/product-intent/SKILL.md +57 -2
  258. package/skills/planning/product-intent/evals.md +70 -0
  259. package/skills/planning/tech-spec/SKILL.md +53 -2
  260. package/skills/planning/tech-spec/evals.md +73 -0
  261. package/skills/registry.yaml +58 -50
  262. package/skills/remote.yaml +13 -0
  263. package/skills/research/arxiv-literature/SKILL.md +76 -18
  264. package/skills/research/arxiv-literature/evals.md +50 -0
  265. package/skills/research/experiment-protocol/SKILL.md +20 -1
  266. package/skills/research/experiment-protocol/evals.md +23 -0
  267. package/skills/research/scientific-debugging/SKILL.md +24 -1
  268. package/skills/research/scientific-debugging/evals.md +18 -0
  269. package/skills/research/scientific-modernization/SKILL.md +26 -1
  270. package/skills/research/scientific-modernization/evals.md +27 -0
  271. package/skills/skill-marketplace.json +63 -28
  272. package/skills/workflow/cut-it/SKILL.md +64 -5
  273. package/skills/workflow/cut-it/evals.md +101 -0
  274. package/skills/workflow/design-council/SKILL.md +112 -27
  275. package/skills/workflow/design-council/evals.md +161 -0
  276. package/skills/workflow/grill-me/SKILL.md +85 -10
  277. package/skills/workflow/grill-me/evals.md +153 -0
  278. package/skills/workflow/workflow-distiller/SKILL.md +76 -17
  279. package/skills/workflow/workflow-distiller/evals.md +118 -0
  280. package/src/cli/args.ts +0 -8
  281. package/src/cli/configure-interop.ts +105 -13
  282. package/src/cli/configure-oauth.ts +57 -0
  283. package/src/cli/configure-onboarding.ts +980 -0
  284. package/src/cli/configure-target.ts +594 -0
  285. package/src/cli/configure.ts +1084 -529
  286. package/src/cli/context-map.ts +114 -0
  287. package/src/cli/context.ts +4 -0
  288. package/src/cli/doctor-state-size.ts +1 -12
  289. package/src/cli/doctor-validation-contract.ts +28 -0
  290. package/src/cli/doctor.ts +5 -0
  291. package/src/cli/evidence-detail.ts +1 -75
  292. package/src/cli/evidence-inventory.ts +1 -167
  293. package/src/cli/index.ts +3 -0
  294. package/src/cli/lifecycle-presenter.ts +436 -0
  295. package/src/cli/models.ts +10 -2
  296. package/src/cli/modes/print.ts +5 -1
  297. package/src/cli/reset.ts +228 -106
  298. package/src/cli/run.ts +7 -4
  299. package/src/cli/select.ts +664 -0
  300. package/src/cli/skills.ts +9 -2
  301. package/src/cli/targets.ts +3 -0
  302. package/src/cli/tasks.ts +84 -0
  303. package/src/cli/uninstall.ts +233 -165
  304. package/src/cli/upgrade.ts +210 -150
  305. package/src/cli/usage.ts +92 -27
  306. package/src/cli/validate-model.ts +3 -3
  307. package/src/cli/verifiers.ts +147 -1
  308. package/src/cli/wiki-generate.ts +1 -0
  309. package/src/core/commit-attribution.ts +41 -1
  310. package/src/core/config.ts +56 -0
  311. package/src/core/external-diagnostic.ts +44 -0
  312. package/src/core/gateway-routing.ts +157 -0
  313. package/src/core/git-commit-attribution.ts +46 -3
  314. package/src/core/run-overrides.ts +0 -5
  315. package/src/core/safe-exec.ts +17 -2
  316. package/src/core/skill-activation.ts +92 -2
  317. package/src/core/tool-names.ts +5 -2
  318. package/src/domains/agents/builtins/architect.md +1 -1
  319. package/src/domains/agents/builtins/coder.md +1 -1
  320. package/src/domains/agents/builtins/documenter.md +1 -1
  321. package/src/domains/agents/builtins/git-master.md +1 -1
  322. package/src/domains/agents/builtins/provenance.md +7 -7
  323. package/src/domains/agents/builtins/tester.md +1 -1
  324. package/src/domains/agents/builtins/verifier.md +2 -2
  325. package/src/domains/agents/builtins/wiki-writer.md +4 -3
  326. package/src/domains/agents/builtins/world-knowledge.md +31 -0
  327. package/src/domains/agents/catalog.ts +1 -1
  328. package/src/domains/agents/result-contract.ts +70 -0
  329. package/src/domains/context/extension.ts +31 -7
  330. package/src/domains/context/refresh.ts +3 -0
  331. package/src/domains/context/wiki/frontmatter.ts +5 -2
  332. package/src/domains/context/wiki/generate.ts +6 -0
  333. package/src/domains/context/wiki/map-seed.ts +589 -0
  334. package/src/domains/context/wiki/plan.ts +2 -2
  335. package/src/domains/context/wiki/prompts.ts +43 -0
  336. package/src/domains/dispatch/active-route-planner.ts +4 -0
  337. package/src/domains/dispatch/admission.ts +29 -0
  338. package/src/domains/dispatch/agent-candidates.ts +10 -0
  339. package/src/domains/dispatch/budget-envelope.ts +86 -1
  340. package/src/domains/dispatch/capability-match.ts +1 -0
  341. package/src/domains/dispatch/capacity-lease.ts +17 -0
  342. package/src/domains/dispatch/code-step.ts +11 -4
  343. package/src/domains/dispatch/contract.ts +42 -8
  344. package/src/domains/dispatch/execution-scheduler.ts +2 -0
  345. package/src/domains/dispatch/extension.ts +184 -56
  346. package/src/domains/dispatch/fleet-commit-attribution.ts +5 -0
  347. package/src/domains/dispatch/fleet-run.ts +1 -0
  348. package/src/domains/dispatch/host-verification.ts +114 -13
  349. package/src/domains/dispatch/intent.ts +28 -18
  350. package/src/domains/dispatch/orphan-recovery.ts +2 -0
  351. package/src/domains/dispatch/receipt-integrity.ts +4 -0
  352. package/src/domains/dispatch/reservation-store.ts +5 -3
  353. package/src/domains/dispatch/state.ts +15 -2
  354. package/src/domains/dispatch/types.ts +20 -2
  355. package/src/domains/dispatch/worker-model-metadata.ts +38 -0
  356. package/src/domains/eval/metrics/call-ledger-stream.ts +34 -11
  357. package/src/domains/eval/metrics/token-stream.ts +201 -31
  358. package/src/domains/eval/metrics/tracked.ts +40 -4
  359. package/src/domains/eval/runners/clio-run.ts +17 -11
  360. package/src/domains/eval/runners/context-index.ts +2 -7
  361. package/src/domains/eval/runners/context-init.ts +3 -6
  362. package/src/domains/eval/runners/external-command.ts +29 -11
  363. package/src/domains/eval/schema/suite.ts +28 -0
  364. package/src/domains/eval/schema/verdict.ts +2 -2
  365. package/src/domains/eval/suites/resolve.ts +13 -1
  366. package/src/domains/eval/suites/run.ts +24 -3
  367. package/src/domains/evidence/build.ts +102 -15
  368. package/src/domains/evidence/detail.ts +69 -0
  369. package/src/domains/evidence/eval.ts +13 -1
  370. package/src/domains/evidence/finish-contract-map.ts +5 -1
  371. package/src/domains/evidence/inventory.ts +167 -0
  372. package/src/domains/evidence/store.ts +16 -0
  373. package/src/domains/evidence/types.ts +12 -0
  374. package/src/domains/extensions/resources.ts +7 -0
  375. package/src/domains/interop/registry.ts +6 -2
  376. package/src/domains/interop/types.ts +4 -0
  377. package/src/domains/lifecycle/migrations/index.ts +4 -0
  378. package/src/domains/memory/task-memory-policy.ts +70 -26
  379. package/src/domains/memory/task-memory-telemetry.ts +1 -0
  380. package/src/domains/middleware/index.ts +0 -1
  381. package/src/domains/middleware/marketplace-offer.ts +22 -35
  382. package/src/domains/middleware/memory-intervention.ts +127 -32
  383. package/src/domains/middleware/memory-step-endpoint.ts +3 -2
  384. package/src/domains/middleware/runtime.ts +7 -3
  385. package/src/domains/middleware/skills-reminder.ts +31 -2
  386. package/src/domains/mux/detect.ts +3 -6
  387. package/src/domains/observability/accountability.ts +15 -1
  388. package/src/domains/observability/compaction-usage.ts +118 -0
  389. package/src/domains/observability/contract.ts +52 -7
  390. package/src/domains/observability/cost.ts +1 -1
  391. package/src/domains/observability/evidence-index.ts +10 -0
  392. package/src/domains/observability/extension.ts +15 -6
  393. package/src/domains/observability/out-of-turn-usage.ts +52 -21
  394. package/src/domains/observability/projection.ts +394 -45
  395. package/src/{interactive → domains/observability}/worker-progress.ts +3 -3
  396. package/src/domains/prompts/fragments/operating/contract.md +2 -0
  397. package/src/domains/prompts/fragments/wiki/page.md +8 -0
  398. package/src/domains/providers/contract.ts +4 -1
  399. package/src/domains/providers/extension.ts +40 -9
  400. package/src/domains/providers/model-capabilities.ts +9 -0
  401. package/src/domains/providers/model-discovery.ts +3 -4
  402. package/src/domains/providers/model-runtime-capabilities.ts +15 -5
  403. package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +48 -26
  404. package/src/domains/providers/runtimes/antigravity/antigravity-code.ts +225 -45
  405. package/src/domains/providers/runtimes/claude/claude-code.ts +9 -0
  406. package/src/domains/providers/runtimes/common/lmstudio-http.ts +6 -2
  407. package/src/domains/providers/runtimes/common/local-synth.ts +2 -0
  408. package/src/domains/providers/runtimes/protocol/litellm.ts +119 -29
  409. package/src/domains/providers/support.ts +11 -5
  410. package/src/domains/providers/target-model-cache.ts +25 -2
  411. package/src/domains/providers/types/capability-flags.ts +2 -0
  412. package/src/domains/providers/types/runtime-descriptor.ts +20 -1
  413. package/src/domains/providers/types/target-descriptor.ts +19 -0
  414. package/src/domains/resources/index.ts +3 -0
  415. package/src/domains/resources/skills/install.ts +72 -7
  416. package/src/domains/resources/skills/loader.ts +7 -0
  417. package/src/domains/resources/skills/marketplace.ts +63 -11
  418. package/src/domains/safety/action-classifier.ts +7 -0
  419. package/src/domains/safety/autonomy.ts +15 -0
  420. package/src/domains/safety/default-path-policy.ts +2 -0
  421. package/src/domains/safety/finish-contract-registration.ts +29 -14
  422. package/src/domains/safety/finish-contract.ts +252 -40
  423. package/src/domains/safety/index.ts +21 -1
  424. package/src/domains/safety/path-policy.ts +1 -1
  425. package/src/domains/safety/policy-engine.ts +60 -17
  426. package/src/domains/safety/protected-artifacts.ts +191 -88
  427. package/src/domains/safety/rigor.ts +53 -39
  428. package/src/domains/safety/run-effects.ts +2 -22
  429. package/src/domains/safety/skill-authority.ts +55 -0
  430. package/src/domains/safety/validation-contract.ts +388 -0
  431. package/src/domains/session/archive-readers.ts +10 -1
  432. package/src/domains/session/compaction/compact.ts +72 -22
  433. package/src/domains/session/decision-board.ts +101 -2
  434. package/src/domains/session/entries.ts +50 -7
  435. package/src/domains/session/extension.ts +4 -4
  436. package/src/domains/session/handoff.ts +2 -1
  437. package/src/domains/session/manager.ts +2 -3
  438. package/src/domains/session/task-board.ts +14 -1
  439. package/src/domains/session/tree/fork.ts +1 -2
  440. package/src/domains/session/tree/navigator.ts +1 -1
  441. package/src/domains/session/usage.ts +3 -3
  442. package/src/domains/user-tasks/acceptance.ts +56 -0
  443. package/src/domains/user-tasks/active-acceptance.ts +40 -0
  444. package/src/domains/user-tasks/store.ts +34 -3
  445. package/src/engine/acp/adapter.ts +24 -6
  446. package/src/engine/acp/server.ts +21 -4
  447. package/src/engine/acp/transport.ts +53 -8
  448. package/src/engine/acp/types.ts +4 -0
  449. package/src/engine/agent.ts +13 -3
  450. package/src/engine/ai.ts +26 -8
  451. package/src/engine/antigravity/subprocess-runtime.ts +386 -120
  452. package/src/engine/api-registry.ts +3 -0
  453. package/src/engine/apis/ollama-native.ts +15 -0
  454. package/src/engine/apis/openai-completions.ts +117 -14
  455. package/src/engine/claude/subprocess-runtime.ts +107 -60
  456. package/src/engine/external-subprocess.ts +122 -6
  457. package/src/entry/background-model-metadata.ts +18 -0
  458. package/src/entry/compaction-prompt.ts +57 -0
  459. package/src/entry/orchestrator.ts +416 -218
  460. package/src/entry/task-memory-lifecycle.ts +35 -0
  461. package/src/interactive/chat-loop-messages.ts +13 -4
  462. package/src/interactive/chat-loop.ts +65 -2
  463. package/src/interactive/chat-renderer.ts +1 -0
  464. package/src/interactive/cost-overlay.ts +26 -2
  465. package/src/interactive/dispatch-board.ts +46 -717
  466. package/src/interactive/fleet-run-preview.ts +2 -1
  467. package/src/interactive/interactive-application.ts +3 -2
  468. package/src/interactive/interactive-presentation.ts +55 -12
  469. package/src/interactive/interactive-slash-runtime.ts +4 -2
  470. package/src/interactive/oracle.ts +5 -2
  471. package/src/interactive/overlays/fleet-run-approval.ts +3 -2
  472. package/src/interactive/overlays/message-picker.ts +2 -2
  473. package/src/interactive/overlays/settings.ts +2 -2
  474. package/src/interactive/overlays/tree-selector.ts +2 -2
  475. package/src/interactive/renderers/branch-summary.ts +1 -1
  476. package/src/interactive/renderers/worker-entry.ts +32 -0
  477. package/src/interactive/slash-autocomplete.ts +4 -6
  478. package/src/interactive/slash-commands.ts +49 -45
  479. package/src/interactive/slash-spec.ts +28 -0
  480. package/src/interactive/theme/labels.ts +19 -13
  481. package/src/interactive/turn-context.ts +9 -5
  482. package/src/interactive/turn-recovery.ts +8 -0
  483. package/src/interactive/turn-runtime.ts +27 -11
  484. package/src/interactive/turn-state.ts +7 -0
  485. package/src/interactive/view/artifacts.ts +2 -0
  486. package/src/interactive/worker-receipts.ts +1 -0
  487. package/src/interactive/worker-stream.ts +13 -4
  488. package/src/tools/bootstrap.ts +4 -0
  489. package/src/tools/builtin-tool-catalog.ts +31 -0
  490. package/src/tools/compete-worktrees.ts +7 -1
  491. package/src/tools/context/index.ts +30 -9
  492. package/src/tools/core-bootstrap.ts +16 -0
  493. package/src/tools/decide.ts +136 -0
  494. package/src/tools/dispatch-admission.ts +21 -0
  495. package/src/tools/dispatch-arguments.ts +1 -0
  496. package/src/tools/dispatch-event-text.ts +10 -0
  497. package/src/tools/dispatch-plan.ts +6 -2
  498. package/src/tools/dispatch-runner.ts +27 -1
  499. package/src/tools/dispatch-types.ts +6 -0
  500. package/src/tools/evidence.ts +96 -0
  501. package/src/tools/limitation.ts +76 -0
  502. package/src/tools/policy.ts +9 -0
  503. package/src/tools/presentation.ts +3 -0
  504. package/src/tools/registry.ts +11 -5
  505. package/src/tools/result-shaping.ts +17 -5
  506. package/src/tools/task-worktree.ts +13 -3
  507. package/src/tools/tasks.ts +10 -1
  508. package/src/tools/verify/authoring.ts +170 -83
  509. package/src/tools/verify/catalog.ts +122 -5
  510. package/src/tools/verify/index.ts +2 -1
  511. package/src/tools/verify/numeric.ts +298 -0
  512. package/src/tools/verify/perf.ts +143 -0
  513. package/src/tools/verify/scripts.ts +229 -2
  514. package/src/tools/worker-evidence.ts +3 -1
  515. package/src/worker/spec-contract.ts +4 -0
  516. package/dist/chunk-2Z2IKEXI.js +0 -1554
  517. package/dist/chunk-RVG5JXAL.js +0 -41
  518. package/dist/chunk-T56WDKA5.js +0 -183
  519. package/dist/chunk-VN3SHNBN.js +0 -313
  520. package/dist/chunk-VPKWYKEY.js +0 -169
  521. package/dist/reset-OAQP3W4O.js +0 -230
  522. package/dist/uninstall-N34PCTGJ.js +0 -331
  523. package/dist/upgrade-PXK3S2YM.js +0 -325
@@ -4,16 +4,20 @@ import {
4
4
  TASK_MEMORY_POLICY_DEFAULT_TIMEOUT_MS,
5
5
  runTaskMemoryPolicy,
6
6
  taskMemoryBankDelta
7
- } from "./chunk-I66EAJFY.js";
7
+ } from "./chunk-2WZ546HR.js";
8
8
  import {
9
9
  isTerminalRunEnvelope
10
- } from "./chunk-IKSLQ4XV.js";
10
+ } from "./chunk-75W7L2E2.js";
11
+ import {
12
+ hashToolCall
13
+ } from "./chunk-6QOTUPRG.js";
11
14
  import {
12
15
  taskBoardCounts
13
- } from "./chunk-Q4XWMHX6.js";
16
+ } from "./chunk-6PAZTBPA.js";
14
17
  import {
15
- hashToolCall
16
- } from "./chunk-IDNA72AH.js";
18
+ legacyToolResultDigest,
19
+ sanitizeToolResultDigest
20
+ } from "./chunk-NAI6ZFCY.js";
17
21
  import {
18
22
  SKILL_INSTALL_OFFER_OPTION_NEVER,
19
23
  SKILL_INSTALL_OFFER_OPTION_NOT_NOW,
@@ -21,36 +25,32 @@ import {
21
25
  SKILL_INSTALL_OFFER_OPTION_USER,
22
26
  SKILL_SUGGESTION_ANCHOR,
23
27
  SKILL_SUGGESTION_PREFIX
24
- } from "./chunk-FSP7CMNU.js";
25
- import {
26
- legacyToolResultDigest,
27
- sanitizeToolResultDigest
28
- } from "./chunk-B7HM5Z7T.js";
28
+ } from "./chunk-54X7T7DK.js";
29
29
  import {
30
30
  ToolNames
31
- } from "./chunk-K6BSR66V.js";
31
+ } from "./chunk-4NSRCOYP.js";
32
32
  import {
33
33
  registerForegroundStream
34
- } from "./chunk-BYMNWQ7O.js";
34
+ } from "./chunk-JSD46VO2.js";
35
35
  import {
36
36
  ceilChars
37
- } from "./chunk-CWVRRIEI.js";
37
+ } from "./chunk-NZMNUPZZ.js";
38
38
  import {
39
39
  BusChannels
40
40
  } from "./chunk-F4EKGO4N.js";
41
41
  import {
42
42
  reportCommitAttributionDiagnostic,
43
43
  withManagedGitCommitAttributionEnvironment
44
- } from "./chunk-JIEGK6UF.js";
44
+ } from "./chunk-U6TMQNSI.js";
45
45
  import {
46
46
  require_dist
47
47
  } from "./chunk-APJ265NV.js";
48
- import {
49
- clioConfigDir
50
- } from "./chunk-BYP5D4HI.js";
51
48
  import {
52
49
  safeResourceWrite
53
50
  } from "./chunk-WEPFGWHJ.js";
51
+ import {
52
+ clioConfigDir
53
+ } from "./chunk-BYP5D4HI.js";
54
54
  import {
55
55
  __toESM,
56
56
  init_esm_shims
@@ -970,8 +970,11 @@ function readPersistedHookReceipts(persistPath) {
970
970
  // src/domains/middleware/skills-reminder.ts
971
971
  init_esm_shims();
972
972
  var SKILLS_REMINDER_REGISTRATION_ID = "observer.skills-reminder";
973
- function skillsReminderMessage(installed, installable = 0) {
973
+ function skillsReminderMessage(installed, installable = 0, modelActivation = false) {
974
974
  const counts = installable > 0 ? `${installed} installed, ${installable} installable from the marketplace` : `${installed} installed`;
975
+ if (modelActivation) {
976
+ return `[Skills] ${counts}. Start this task by listing them with context(scope="skills") and checking for a match; if one matches, load it with context(scope="skills", name="<name>") and continue the task in the same turn. A marketplace skill is not installed and is offered for install when the operator runs it. If none match, do not mention skills and continue with the task.`;
977
+ }
975
978
  return `[Skills] ${counts}. Start this task by listing them with context(scope="skills") and checking for a match; if one matches, open your reply with the line \`${SKILL_SUGGESTION_ANCHOR}\` (a comma-separated sequence, in order, when several compose) and then continue the task in the same turn without the skill. Only the operator loads a skill, and a marketplace skill is offered for install when the operator runs it. If none match, do not mention skills and continue with the task.`;
976
979
  }
977
980
  var NO_EFFECTS = [];
@@ -1070,7 +1073,18 @@ function createSkillsReminderRegistration(deps) {
1070
1073
  return NO_EFFECTS;
1071
1074
  }
1072
1075
  if (installed <= 0 && installable <= 0) return NO_EFFECTS;
1073
- return [{ kind: "inject_reminder", severity: "info", message: skillsReminderMessage(installed, installable) }];
1076
+ let modelActivation = false;
1077
+ try {
1078
+ modelActivation = deps.modelMayActivateSkills?.() ?? false;
1079
+ } catch {
1080
+ }
1081
+ return [
1082
+ {
1083
+ kind: "inject_reminder",
1084
+ severity: "info",
1085
+ message: skillsReminderMessage(installed, installable, modelActivation)
1086
+ }
1087
+ ];
1074
1088
  }
1075
1089
  };
1076
1090
  }
@@ -1203,11 +1217,11 @@ var NO_EFFECTS2 = [];
1203
1217
  function offerBindingTag(offerTag) {
1204
1218
  return `[clio-install:${offerTag}]`;
1205
1219
  }
1206
- function marketplaceOfferReminder(entry, offerTag) {
1207
- return `[Marketplace] This request may need expertise no installed skill covers. The local marketplace has "${entry.name}" (not installed): ${entry.description} First check the installed side with context(scope="skills"); if ${entry.name} is genuinely the right fit and nothing installed serves, ask the operator with ask_user (mode=single_question, header "Install skill") whether to install ${entry.name}, offering exactly these options in this order: "${SKILL_INSTALL_OFFER_OPTION_PROJECT}", "${SKILL_INSTALL_OFFER_OPTION_USER}", "${SKILL_INSTALL_OFFER_OPTION_NOT_NOW}", "${SKILL_INSTALL_OFFER_OPTION_NEVER}". Include the exact tag ${offerBindingTag(offerTag)} verbatim in that question's text so the harness can bind the answer to this offer; the harness acts only on an answer carrying this tag. Then continue the task in the same turn. The harness handles the answer; never install or load a skill yourself. If it is not actually needed, do not mention it.`;
1220
+ function boundedDescription(text) {
1221
+ return text.replace(/\[[^[\]]*\]/gu, " ").replace(/\s+/gu, " ").trim().slice(0, 200);
1208
1222
  }
1209
- function marketplaceAutoInstallReminder(entry, result) {
1210
- return `[Marketplace] Installed skill "${entry.name}" from Clio's own local marketplace (full-auto) to ${result.path}. Source ${result.sourceUrl}, sha256 ${result.installedHash}. ${entry.description} It is installed but not active \u2014 activation stays operator-gated. If it fits this task, suggest /skill ${entry.name} to the operator; never load it yourself.`;
1223
+ function marketplaceOfferReminder(entry, offerTag) {
1224
+ return `[Marketplace] This request may need expertise no installed skill covers. The local marketplace has "${entry.name}" (not installed): ${boundedDescription(entry.description)} First check the installed side with context(scope="skills"); if ${entry.name} is genuinely the right fit and nothing installed serves, ask the operator with ask_user (mode=single_question, header "Install skill") whether to install ${entry.name}, offering exactly these options in this order: "${SKILL_INSTALL_OFFER_OPTION_PROJECT}", "${SKILL_INSTALL_OFFER_OPTION_USER}", "${SKILL_INSTALL_OFFER_OPTION_NOT_NOW}", "${SKILL_INSTALL_OFFER_OPTION_NEVER}". Include the exact tag ${offerBindingTag(offerTag)} verbatim in that question's text so the harness can bind the answer to this offer; the harness acts only on an answer carrying this tag. Then continue the task in the same turn. The harness handles the answer; never install or load a skill yourself. If it is not actually needed, do not mention it.`;
1211
1225
  }
1212
1226
  function answersFromDetails(details) {
1213
1227
  const raw = details?.answers;
@@ -1355,18 +1369,14 @@ function createMarketplaceOfferRegistration(deps) {
1355
1369
  const match = bestMatch(input.text ?? "");
1356
1370
  if (!match) return NO_EFFECTS2;
1357
1371
  offeredNames.add(match.entry.name);
1358
- if (deps.getAutonomy() === "full-auto") {
1359
- try {
1360
- const result = installGated(match.entry, "project");
1361
- return [
1362
- {
1363
- kind: "inject_reminder",
1364
- severity: "info",
1365
- message: marketplaceAutoInstallReminder(match.entry, result)
1366
- }
1367
- ];
1368
- } catch {
1369
- }
1372
+ if (deps.interactive === false) {
1373
+ return [
1374
+ {
1375
+ kind: "inject_reminder",
1376
+ severity: "info",
1377
+ message: `[Marketplace] Skill "${match.entry.name}" matches this request; install with clio-coder skills install ${match.entry.name}.`
1378
+ }
1379
+ ];
1370
1380
  }
1371
1381
  const tag = newOfferTag();
1372
1382
  pendingOffer = { entry: match.entry, tag };
@@ -1387,6 +1397,10 @@ var MEMORY_INTERVENTION_ACTIVITY_LIMIT = 20;
1387
1397
  var CALL_DESCRIPTION_MAX_CHARS = 180;
1388
1398
  var NO_EFFECTS3 = [];
1389
1399
  function createMemoryInterventionRegistration(deps) {
1400
+ let generation = 0;
1401
+ let generationController = new AbortController();
1402
+ let observedSessionId;
1403
+ let disposed = false;
1390
1404
  const pending = /* @__PURE__ */ new Map();
1391
1405
  const trajectory = [];
1392
1406
  const failures = /* @__PURE__ */ new Map();
@@ -1411,11 +1425,17 @@ function createMemoryInterventionRegistration(deps) {
1411
1425
  let annotatedSinceTurnEnd = false;
1412
1426
  let consecutiveLlmTimeouts = 0;
1413
1427
  return {
1428
+ reset,
1429
+ dispose() {
1430
+ disposed = true;
1431
+ reset();
1432
+ },
1414
1433
  id: MEMORY_INTERVENTION_REGISTRATION_ID,
1415
1434
  description: "maintain bounded task execution memory and selectively remind after repeated failures or compaction",
1416
1435
  hooks: ["before_tool", "after_tool", "turn_start", "turn_end", "on_compaction"],
1417
1436
  evaluate(input) {
1418
- if (!settings().enabled) return NO_EFFECTS3;
1437
+ observeSession(input);
1438
+ if (disposed || !settings().enabled) return NO_EFFECTS3;
1419
1439
  try {
1420
1440
  switch (input.hook) {
1421
1441
  case "before_tool":
@@ -1482,7 +1502,8 @@ function createMemoryInterventionRegistration(deps) {
1482
1502
  * would have been buffered anyway.
1483
1503
  */
1484
1504
  async evaluateAsync(input, context) {
1485
- if (!settings().enabled || input.hook !== "turn_end" || pendingTriggers.size === 0) return NO_EFFECTS3;
1505
+ observeSession(input);
1506
+ if (disposed || !settings().enabled || input.hook !== "turn_end" || pendingTriggers.size === 0) return NO_EFFECTS3;
1486
1507
  const boundary = input.turnId ?? input.metadata?.userTurnId?.toString() ?? `tool-step:${toolStep}`;
1487
1508
  if (boundary === lastPromptedBoundary) return NO_EFFECTS3;
1488
1509
  if (deps.deliversDeferredReminders === false) {
@@ -1512,31 +1533,68 @@ function createMemoryInterventionRegistration(deps) {
1512
1533
  (effect) => effect.kind === "inject_reminder" && effect.message.startsWith("Memory:")
1513
1534
  ) ?? false);
1514
1535
  rulesInjectedSincePromptedStep = false;
1536
+ const stepGeneration = generation;
1515
1537
  promptedStepInFlight = true;
1516
1538
  outstandingStep = runPromptedStep({
1517
1539
  deterministicTrigger: triggers.some((trigger) => trigger !== "interval"),
1518
1540
  suppressIntervention: rulesAlreadySpoke,
1519
1541
  triggerReasons: triggers
1520
1542
  }).then((result) => {
1543
+ if (stepGeneration !== generation || disposed) return;
1521
1544
  if (rulesAlreadySpoke && result.decision === "silent") lastDecision = "injected";
1522
1545
  if (result.reminder === null) return;
1523
1546
  lastInjectedMessage = result.reminder;
1524
1547
  deps.onDeferredReminder?.(result.reminder);
1525
1548
  }).catch(() => {
1526
1549
  }).finally(() => {
1527
- promptedStepInFlight = false;
1550
+ if (stepGeneration === generation) promptedStepInFlight = false;
1528
1551
  });
1529
1552
  return NO_EFFECTS3;
1530
1553
  },
1531
1554
  runPromptedStep,
1532
1555
  signalLoop() {
1533
- if (settings().enabled) pendingTriggers.add("loop_signal");
1556
+ if (!disposed && settings().enabled) pendingTriggers.add("loop_signal");
1534
1557
  },
1535
1558
  lastDecision: () => lastDecision,
1536
1559
  recentActivity: () => [...activity],
1537
1560
  stepInFlight: () => promptedStepInFlight,
1538
1561
  whenIdle: () => outstandingStep
1539
1562
  };
1563
+ function observeSession(input) {
1564
+ if (input.sessionId === void 0) return;
1565
+ if (observedSessionId !== void 0 && observedSessionId !== input.sessionId) reset();
1566
+ observedSessionId = input.sessionId;
1567
+ }
1568
+ function reset() {
1569
+ generation += 1;
1570
+ generationController.abort();
1571
+ generationController = new AbortController();
1572
+ deps.bank.clear();
1573
+ pending.clear();
1574
+ trajectory.length = 0;
1575
+ failures.clear();
1576
+ toolStep = 0;
1577
+ lastTurnEndStep = 0;
1578
+ reactivateAfterCompaction = false;
1579
+ lastInjectedOperationFingerprint = null;
1580
+ currentTask = "(current task unavailable)";
1581
+ toolsSinceMemoryStep = 0;
1582
+ consecutiveErrors = 0;
1583
+ lastPromptedBoundary = null;
1584
+ lastInjectedMessage = null;
1585
+ lastDecision = null;
1586
+ pendingTriggers.clear();
1587
+ activity.length = 0;
1588
+ annotatedThisTurn.clear();
1589
+ telemetryBankSnapshot = deps.bank.snapshot();
1590
+ promptedStepInFlight = false;
1591
+ promptedStepTier = "rules";
1592
+ outstandingStep = Promise.resolve();
1593
+ rulesInjectedSincePromptedStep = false;
1594
+ annotatedSinceTurnEnd = false;
1595
+ consecutiveLlmTimeouts = 0;
1596
+ observedSessionId = void 0;
1597
+ }
1540
1598
  function settings() {
1541
1599
  const live = deps.getSettings?.();
1542
1600
  return {
@@ -1563,12 +1621,16 @@ function createMemoryInterventionRegistration(deps) {
1563
1621
  effects: NO_EFFECTS3
1564
1622
  });
1565
1623
  const live = settings();
1566
- if (!live.enabled) {
1624
+ const stepGeneration = generation;
1625
+ const isCurrent = () => !disposed && stepGeneration === generation;
1626
+ const usageSink = deps.captureStepUsage?.();
1627
+ if (disposed || !live.enabled) {
1567
1628
  const result = silent("no_client");
1568
1629
  lastDecision = result.decision;
1569
1630
  return result;
1570
1631
  }
1571
1632
  const started = process.hrtime.bigint();
1633
+ let attemptStarted = started;
1572
1634
  const triggers = input.triggerReasons?.length ? input.triggerReasons : ["manual"];
1573
1635
  let tier = "rules";
1574
1636
  promptedStepTier = tier;
@@ -1589,7 +1651,13 @@ function createMemoryInterventionRegistration(deps) {
1589
1651
  } else {
1590
1652
  tier = "llm";
1591
1653
  promptedStepTier = tier;
1592
- promptedResult = await runTaskMemoryPolicy(deps.bank, client, {
1654
+ const runClient = (selected, timeoutMs) => runTaskMemoryPolicy(deps.bank, selected, {
1655
+ isCurrent,
1656
+ signal: generationController.signal,
1657
+ onStepUsage: (usage) => {
1658
+ if (usageSink) usageSink(usage, isCurrent());
1659
+ else deps.onStepUsage?.(usage);
1660
+ },
1593
1661
  task: input.task?.trim() || currentTask,
1594
1662
  trajectory: [...trajectory],
1595
1663
  deterministicTrigger: input.deterministicTrigger,
@@ -1597,9 +1665,37 @@ function createMemoryInterventionRegistration(deps) {
1597
1665
  modelMaxTokens: positiveInteger(deps.getModelMaxTokens?.(live.maxTokens), live.maxTokens),
1598
1666
  ...input.suppressIntervention === void 0 ? {} : { suppressIntervention: input.suppressIntervention },
1599
1667
  previousReminder: lastInjectedMessage,
1600
- timeoutMs: live.timeoutMs,
1668
+ timeoutMs,
1601
1669
  ...deps.onEnvelope === void 0 ? {} : { onEnvelope: deps.onEnvelope }
1602
1670
  });
1671
+ const remainingMs = () => Math.floor(live.timeoutMs - Number(process.hrtime.bigint() - started) / 1e6);
1672
+ const initialTimeoutMs = remainingMs();
1673
+ promptedResult = initialTimeoutMs <= 0 ? { ...silent("deadline"), decision: "timeout" } : await runClient(client, initialTimeoutMs);
1674
+ if (promptedResult.reason === "client_error" && isCurrent() && remainingMs() > 0) {
1675
+ let fallback = null;
1676
+ let fallbackReady = false;
1677
+ try {
1678
+ fallback = deps.getFallbackModelClient?.() ?? null;
1679
+ fallbackReady = fallback !== null && deps.backgroundEndpointBusy?.() !== true;
1680
+ } catch {
1681
+ }
1682
+ const fallbackTimeoutMs = remainingMs();
1683
+ if (fallback !== null && fallbackReady && isCurrent() && fallbackTimeoutMs > 0) {
1684
+ emitTelemetry(
1685
+ triggers,
1686
+ tier,
1687
+ promptedResult.decision,
1688
+ promptedResult.reason,
1689
+ 0,
1690
+ promptedResult.inputTokens,
1691
+ promptedResult.outputTokens,
1692
+ started,
1693
+ { bankOperations: promptedResult.bankOperations, droppedOperations: promptedResult.droppedOperations }
1694
+ );
1695
+ attemptStarted = process.hrtime.bigint();
1696
+ promptedResult = await runClient(fallback, fallbackTimeoutMs);
1697
+ }
1698
+ }
1603
1699
  }
1604
1700
  }
1605
1701
  } catch (error) {
@@ -1616,15 +1712,11 @@ function createMemoryInterventionRegistration(deps) {
1616
1712
  error: error instanceof Error ? error.message : "resolving the background model client failed"
1617
1713
  });
1618
1714
  }
1715
+ if (!isCurrent()) return { ...promptedResult, reminder: null, effects: NO_EFFECTS3 };
1716
+ if (promptedResult.reason === "endpoint_busy") telemetryDecision = "dropped";
1619
1717
  if (tier === "llm" && promptedResult.decision === "timeout") consecutiveLlmTimeouts += 1;
1620
1718
  else if (tier === "llm" && telemetryDecision !== "dropped") consecutiveLlmTimeouts = 0;
1621
1719
  lastDecision = promptedResult.decision;
1622
- if (promptedResult.usage !== null) {
1623
- try {
1624
- deps.onStepUsage?.(promptedResult.usage);
1625
- } catch {
1626
- }
1627
- }
1628
1720
  if (promptedResult.decision === "injected") reportInjectedEntries(promptedResult.reminder);
1629
1721
  emitTelemetry(
1630
1722
  triggers,
@@ -1634,7 +1726,7 @@ function createMemoryInterventionRegistration(deps) {
1634
1726
  citedEntryCount(promptedResult.reminder),
1635
1727
  promptedResult.inputTokens,
1636
1728
  promptedResult.outputTokens,
1637
- started,
1729
+ attemptStarted,
1638
1730
  { bankOperations: promptedResult.bankOperations, droppedOperations: promptedResult.droppedOperations }
1639
1731
  );
1640
1732
  return {
@@ -3004,4 +3096,4 @@ export {
3004
3096
  createWatchdogRegistration,
3005
3097
  MiddlewareDomainModule
3006
3098
  };
3007
- //# sourceMappingURL=chunk-UBRFI4HS.js.map
3099
+ //# sourceMappingURL=chunk-XULDXHTN.js.map
@@ -0,0 +1,283 @@
1
+ import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ WORKER_OUTPUT_MAX_BYTES,
4
+ durableAssistantTextFromEvent
5
+ } from "./chunk-I2DWJ4GM.js";
6
+ import {
7
+ truncateUtf8
8
+ } from "./chunk-6XLNIQDB.js";
9
+ import {
10
+ init_esm_shims
11
+ } from "./chunk-3R73A4XB.js";
12
+
13
+ // src/domains/observability/worker-progress.ts
14
+ init_esm_shims();
15
+ var WORKER_LIVE_TAIL_LINES = 40;
16
+ var WORKER_LIVE_TAIL_MAX_BYTES = 4096;
17
+ var WORKER_TOOL_NAME_LIMIT = 8;
18
+ var WORKER_ACTION_TRAIL_LIMIT = 4;
19
+ var WORKER_PROGRESS_WINDOW_MS = 250;
20
+ var WORKER_PROGRESS_WINDOW_BYTES = 16384;
21
+ var TAIL_TRUNCATION_MARKER = "";
22
+ function isRecord(value) {
23
+ return typeof value === "object" && value !== null && !Array.isArray(value);
24
+ }
25
+ function nonEmptyString(value) {
26
+ return typeof value === "string" && value.trim().length > 0 ? value : void 0;
27
+ }
28
+ function workerTextDelta(event) {
29
+ if (!isRecord(event)) return "";
30
+ if (event.type === "message_update") {
31
+ const assistantEvent = isRecord(event.assistantMessageEvent) ? event.assistantMessageEvent : null;
32
+ if (assistantEvent?.type !== "text_delta") return "";
33
+ return typeof assistantEvent.delta === "string" ? assistantEvent.delta : "";
34
+ }
35
+ if (event.type !== "text_delta") return "";
36
+ if (typeof event.delta === "string") return event.delta;
37
+ return typeof event.text === "string" ? event.text : "";
38
+ }
39
+ function isThinkingEvent(event) {
40
+ if (event.type === "thinking_delta") return true;
41
+ if (event.type !== "message_update") return false;
42
+ const assistantEvent = isRecord(event.assistantMessageEvent) ? event.assistantMessageEvent : null;
43
+ return assistantEvent?.type === "thinking_delta";
44
+ }
45
+ function toolEventAction(event) {
46
+ if (event.type !== "clio_coder_tool_start" && event.type !== "clio_coder_tool_finish") return null;
47
+ const payload = isRecord(event.payload) ? event.payload : null;
48
+ const tool = nonEmptyString(payload?.tool);
49
+ if (tool === void 0) return null;
50
+ const toolCallId = nonEmptyString(payload?.toolCallId);
51
+ const raw = isRecord(payload?.action) ? payload.action : void 0;
52
+ const verb = nonEmptyString(raw?.verb);
53
+ if (verb === void 0) return { tool, ...toolCallId !== void 0 ? { toolCallId } : {} };
54
+ const object = nonEmptyString(raw?.object);
55
+ return {
56
+ tool,
57
+ ...toolCallId !== void 0 ? { toolCallId } : {},
58
+ descriptor: {
59
+ verb,
60
+ ...object !== void 0 ? { object } : {},
61
+ ...raw?.truncated === true ? { truncated: true } : {}
62
+ }
63
+ };
64
+ }
65
+ function lineCount(text) {
66
+ if (text.length === 0) return 0;
67
+ let lines = 1;
68
+ for (let index = 0; index < text.length; index += 1) {
69
+ if (text[index] === "\n") lines += 1;
70
+ }
71
+ return lines;
72
+ }
73
+ function keepTailBytes(text, maxBytes) {
74
+ const buffer = Buffer.from(text, "utf8");
75
+ if (buffer.byteLength <= maxBytes) return text;
76
+ let cut = buffer.byteLength - maxBytes;
77
+ while (cut < buffer.byteLength) {
78
+ const byte = buffer[cut];
79
+ if (byte === void 0 || (byte & 192) !== 128) break;
80
+ cut += 1;
81
+ }
82
+ return buffer.subarray(cut).toString("utf8");
83
+ }
84
+ function boundLiveTail(text) {
85
+ const lines = text.split("\n");
86
+ let droppedLines = 0;
87
+ if (lines.length > WORKER_LIVE_TAIL_LINES) {
88
+ droppedLines = lines.length - WORKER_LIVE_TAIL_LINES;
89
+ lines.splice(0, droppedLines);
90
+ }
91
+ while (lines.length > 1 && Buffer.byteLength(lines.join("\n"), "utf8") > WORKER_LIVE_TAIL_MAX_BYTES) {
92
+ lines.shift();
93
+ droppedLines += 1;
94
+ }
95
+ const joined = lines.join("\n");
96
+ const bytes = Buffer.byteLength(joined, "utf8");
97
+ if (bytes <= WORKER_LIVE_TAIL_MAX_BYTES) return { text: joined, droppedLines, droppedBytes: 0 };
98
+ const kept = keepTailBytes(joined, WORKER_LIVE_TAIL_MAX_BYTES);
99
+ return { text: kept, droppedLines, droppedBytes: bytes - Buffer.byteLength(kept, "utf8") };
100
+ }
101
+ function boundSettledText(text) {
102
+ const bounded = truncateUtf8(text, WORKER_OUTPUT_MAX_BYTES, TAIL_TRUNCATION_MARKER);
103
+ if (bounded === text) return { text, dropped: 0 };
104
+ return { text: bounded, dropped: Math.max(0, lineCount(text) - lineCount(bounded)) };
105
+ }
106
+ var EMPTY_SNAPSHOT = {
107
+ revision: 0,
108
+ phase: "starting",
109
+ tailText: "",
110
+ droppedLines: 0,
111
+ droppedBytes: 0,
112
+ currentAction: null,
113
+ recentActions: [],
114
+ toolNames: [],
115
+ settled: false
116
+ };
117
+ function createWorkerProgressFold() {
118
+ let revision = 0;
119
+ let phase = "starting";
120
+ let tailText = "";
121
+ let droppedLines = 0;
122
+ let droppedBytes = 0;
123
+ let currentAction = null;
124
+ const recentActions = [];
125
+ const toolNames = [];
126
+ let settled = false;
127
+ let durable = "";
128
+ let betweenAssistantMessages = false;
129
+ const pendingActions = [];
130
+ const pendingActionsById = /* @__PURE__ */ new Map();
131
+ let windowStartMs = 0;
132
+ let windowBytes = 0;
133
+ let cached = EMPTY_SNAPSHOT;
134
+ const touch = () => {
135
+ revision += 1;
136
+ cached = null;
137
+ return true;
138
+ };
139
+ const setPhase = (next) => {
140
+ if (phase === next) return false;
141
+ phase = next;
142
+ return touch();
143
+ };
144
+ const admitDelta = (delta, nowMs) => {
145
+ if (nowMs - windowStartMs >= WORKER_PROGRESS_WINDOW_MS) {
146
+ windowStartMs = nowMs;
147
+ windowBytes = 0;
148
+ }
149
+ const bytes = Buffer.byteLength(delta, "utf8");
150
+ if (windowBytes + bytes <= WORKER_PROGRESS_WINDOW_BYTES) {
151
+ windowBytes += bytes;
152
+ return delta;
153
+ }
154
+ windowBytes = WORKER_PROGRESS_WINDOW_BYTES;
155
+ droppedBytes += bytes;
156
+ return "";
157
+ };
158
+ const appendTail = (text) => {
159
+ if (text.length === 0) return false;
160
+ const bounded = boundLiveTail(tailText + text);
161
+ tailText = bounded.text;
162
+ droppedLines += bounded.droppedLines;
163
+ droppedBytes += bounded.droppedBytes;
164
+ return touch();
165
+ };
166
+ const noteToolName = (tool) => {
167
+ if (toolNames.includes(tool) || toolNames.length >= WORKER_TOOL_NAME_LIMIT) return false;
168
+ toolNames.push(tool);
169
+ return touch();
170
+ };
171
+ const removePendingAction = (action) => {
172
+ const index = pendingActions.lastIndexOf(action);
173
+ if (index >= 0) pendingActions.splice(index, 1);
174
+ if (action.toolCallId !== void 0 && pendingActionsById.get(action.toolCallId) === action) {
175
+ pendingActionsById.delete(action.toolCallId);
176
+ }
177
+ };
178
+ const lastPendingActionForTool = (tool) => {
179
+ for (let index = pendingActions.length - 1; index >= 0; index -= 1) {
180
+ const candidate = pendingActions[index];
181
+ if (candidate?.tool === tool) return candidate;
182
+ }
183
+ return void 0;
184
+ };
185
+ return {
186
+ observe(event, nowMs = Date.now()) {
187
+ if (!isRecord(event) || settled) return false;
188
+ let changed = false;
189
+ const delta = workerTextDelta(event);
190
+ if (delta.length > 0) {
191
+ const separator = betweenAssistantMessages && tailText.length > 0 && !tailText.endsWith("\n") ? "\n\n" : "";
192
+ betweenAssistantMessages = false;
193
+ changed = appendTail(admitDelta(`${separator}${delta}`, nowMs)) || changed;
194
+ changed = setPhase("writing") || changed;
195
+ } else if (isThinkingEvent(event)) {
196
+ changed = setPhase("thinking") || changed;
197
+ }
198
+ const durableText = durableAssistantTextFromEvent(event);
199
+ if (durableText.trim().length > 0) {
200
+ durable = durableText;
201
+ if (delta.length === 0 && tailText.trim().length === 0) {
202
+ changed = appendTail(durableText) || changed;
203
+ }
204
+ betweenAssistantMessages = true;
205
+ }
206
+ const action = toolEventAction(event);
207
+ if (action !== null && event.type === "clio_coder_tool_start") {
208
+ if (action.toolCallId !== void 0) {
209
+ const duplicate = pendingActionsById.get(action.toolCallId);
210
+ if (duplicate !== void 0) removePendingAction(duplicate);
211
+ pendingActionsById.set(action.toolCallId, action);
212
+ }
213
+ pendingActions.push(action);
214
+ currentAction = action;
215
+ noteToolName(action.tool);
216
+ touch();
217
+ setPhase("tool");
218
+ changed = true;
219
+ } else if (action !== null && event.type === "clio_coder_tool_finish") {
220
+ const finished = (action.toolCallId !== void 0 ? pendingActionsById.get(action.toolCallId) : void 0) ?? lastPendingActionForTool(action.tool) ?? action;
221
+ removePendingAction(finished);
222
+ currentAction = pendingActions[pendingActions.length - 1] ?? null;
223
+ recentActions.unshift(finished);
224
+ if (recentActions.length > WORKER_ACTION_TRAIL_LIMIT) recentActions.length = WORKER_ACTION_TRAIL_LIMIT;
225
+ noteToolName(finished.tool);
226
+ touch();
227
+ setPhase(currentAction === null ? "waiting" : "tool");
228
+ changed = true;
229
+ }
230
+ if (event.type === "agent_start") changed = setPhase("starting") || changed;
231
+ return changed;
232
+ },
233
+ settle(text) {
234
+ const sealed = nonEmptyString(text) ?? nonEmptyString(durable);
235
+ if (sealed !== void 0) {
236
+ const bounded = boundSettledText(sealed);
237
+ tailText = bounded.text;
238
+ droppedLines = bounded.dropped;
239
+ }
240
+ currentAction = null;
241
+ pendingActions.length = 0;
242
+ pendingActionsById.clear();
243
+ settled = true;
244
+ phase = "settled";
245
+ touch();
246
+ return true;
247
+ },
248
+ restart() {
249
+ currentAction = null;
250
+ pendingActions.length = 0;
251
+ pendingActionsById.clear();
252
+ durable = "";
253
+ betweenAssistantMessages = false;
254
+ settled = false;
255
+ phase = "starting";
256
+ touch();
257
+ },
258
+ snapshot() {
259
+ if (cached !== null) return cached;
260
+ cached = {
261
+ revision,
262
+ phase,
263
+ tailText,
264
+ droppedLines,
265
+ droppedBytes,
266
+ currentAction: currentAction === null ? null : { ...currentAction },
267
+ recentActions: recentActions.map((entry) => ({ ...entry })),
268
+ toolNames: [...toolNames],
269
+ settled
270
+ };
271
+ return cached;
272
+ },
273
+ durableText() {
274
+ return durable;
275
+ }
276
+ };
277
+ }
278
+
279
+ export {
280
+ boundSettledText,
281
+ createWorkerProgressFold
282
+ };
283
+ //# sourceMappingURL=chunk-XXYSBZIQ.js.map