@iowarp/clio-coder 0.4.6 → 0.4.7

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 (657) hide show
  1. package/.claude-plugin/marketplace.json +283 -0
  2. package/CHANGELOG.md +50 -0
  3. package/CONTRIBUTING.md +102 -29
  4. package/NOTICE +8 -0
  5. package/README.md +37 -5
  6. package/dist/{acp-UVEVWSDL.js → acp-W3Y3TRHD.js} +12 -12
  7. package/dist/{agents-VWY37DTK.js → agents-J4ICNLQ3.js} +52 -52
  8. package/dist/assets/codewiki.json +1 -1
  9. package/dist/assets/tui-notices/get-east-asian-width-LICENSE +9 -0
  10. package/dist/assets/tui-notices/marked-LICENSE +44 -0
  11. package/dist/assets/tui-notices/pi-tui-LICENSE +21 -0
  12. package/dist/{auth-PCV2XQDV.js → auth-X2UJUMOC.js} +24 -24
  13. package/dist/{builtins-PD652MTK.js → builtins-XLXWWSRF.js} +6 -6
  14. package/dist/{chunk-DZK63TZJ.js → chunk-24S3DN22.js} +336 -612
  15. package/dist/{chunk-NTK3WTHM.js → chunk-24TOGHPO.js} +2 -2
  16. package/dist/{chunk-M6TAYK66.js → chunk-2O2LVQQK.js} +11 -4
  17. package/dist/{chunk-OQM5IVJY.js → chunk-34XHRVKG.js} +3 -3
  18. package/dist/{chunk-LY4N4TTL.js → chunk-3LXJOICS.js} +2 -2
  19. package/dist/{chunk-3BJGMT2D.js → chunk-3XE4NRLF.js} +1 -1
  20. package/dist/{chunk-N2OKBREN.js → chunk-4MFBBY2Z.js} +3 -3
  21. package/dist/{chunk-5VTJP36Q.js → chunk-4N2RZ4TO.js} +2 -2
  22. package/dist/{chunk-WNGF5AJX.js → chunk-4QKAITQT.js} +3 -3
  23. package/dist/chunk-4UHVS5T7.js +207 -0
  24. package/dist/{chunk-GLYBJ4RQ.js → chunk-5AJPUR72.js} +6 -6
  25. package/dist/{chunk-5CY4Q6QI.js → chunk-5EQO5NWP.js} +105 -3
  26. package/dist/{chunk-6HAO6X5B.js → chunk-65BGHOUR.js} +8 -5
  27. package/dist/{chunk-6VRRJT7L.js → chunk-6CA2BHOR.js} +2 -2
  28. package/dist/{chunk-HL26ADLH.js → chunk-6CB2IL4N.js} +2 -1
  29. package/dist/{chunk-E7RF4KBO.js → chunk-6LRLOJHQ.js} +3 -3
  30. package/dist/{chunk-HXHFDHB6.js → chunk-6TAATXXH.js} +6 -6
  31. package/dist/{chunk-P6M7RKMI.js → chunk-6YHPAAZR.js} +3 -3
  32. package/dist/{chunk-5QRX7SLS.js → chunk-7EEGBKV4.js} +7 -7
  33. package/dist/{chunk-BS4GAMUB.js → chunk-A67NR5AT.js} +2 -2
  34. package/dist/{chunk-WJIMKGD6.js → chunk-BAU36233.js} +8 -8
  35. package/dist/{chunk-PZN2LQY6.js → chunk-BO4XV5VX.js} +4 -4
  36. package/dist/{chunk-I2K2NCZQ.js → chunk-BQQ5MXUC.js} +6 -6
  37. package/dist/{chunk-X3BI7HTV.js → chunk-C3G5PNUO.js} +21 -21
  38. package/dist/{chunk-SRZOW5L2.js → chunk-C6GEXX4L.js} +1 -1
  39. package/dist/{chunk-6RYDAVQT.js → chunk-CE64C5K5.js} +219 -64
  40. package/dist/chunk-CP3HIR5H.js +2119 -0
  41. package/dist/{chunk-BBV5TKE6.js → chunk-CPXGJI2A.js} +2 -2
  42. package/dist/{chunk-IGLVVNEG.js → chunk-CULVKYTK.js} +4 -4
  43. package/dist/{chunk-DXLUVUD4.js → chunk-D2T66PDV.js} +5 -5
  44. package/dist/{chunk-NF3BK5WR.js → chunk-DACXIVVF.js} +5 -5
  45. package/dist/{chunk-IKRWLEDA.js → chunk-DLIYANB7.js} +20 -15
  46. package/dist/{chunk-RGZNQ5CT.js → chunk-DO7M3LSX.js} +9 -9
  47. package/dist/{chunk-2QPI3TR3.js → chunk-DVJL77SO.js} +2 -2
  48. package/dist/{chunk-ODUTYZIU.js → chunk-EUEXGXXR.js} +5 -5
  49. package/dist/{chunk-WKUYQBCG.js → chunk-EUZRMP4Y.js} +18 -16
  50. package/dist/{chunk-JMPL7NUB.js → chunk-G4LGUTOE.js} +4 -4
  51. package/dist/{chunk-CBSKDFWL.js → chunk-GEVQNST4.js} +2 -2
  52. package/dist/{chunk-NNWJYUNO.js → chunk-GFQ7P2UF.js} +7 -7
  53. package/dist/{chunk-SXQKNKRA.js → chunk-GI5RRMAH.js} +14 -14
  54. package/dist/{chunk-HPTJF6DG.js → chunk-GVZFCJHE.js} +336 -83
  55. package/dist/{chunk-ACCKVSHU.js → chunk-GXIWHXDB.js} +3 -3
  56. package/dist/{chunk-LUL5Z66S.js → chunk-HOX4YZ2K.js} +6 -5
  57. package/dist/chunk-HRAKUPIH.js +57 -0
  58. package/dist/{chunk-F5Z7EWMN.js → chunk-IJMW64DX.js} +50 -50
  59. package/dist/{chunk-QNWRHOMF.js → chunk-IMOD2YPV.js} +16 -9
  60. package/dist/{chunk-HZ2T2YED.js → chunk-IQCNVLO6.js} +28 -8
  61. package/dist/{chunk-HZFBVU5X.js → chunk-ISNCCX42.js} +8 -8
  62. package/dist/{chunk-7JSSKXG2.js → chunk-IZYTT3CD.js} +7 -3
  63. package/dist/chunk-KKEYGFX4.js +915 -0
  64. package/dist/{chunk-HHVJNVUJ.js → chunk-KS7ETA3P.js} +2 -2
  65. package/dist/{chunk-BLTEAUCB.js → chunk-L3Z5ANCV.js} +7 -7
  66. package/dist/{chunk-4VMV6OS6.js → chunk-LBFQMYS3.js} +2 -2
  67. package/dist/{chunk-URBGEOH3.js → chunk-M6Z2V6YU.js} +5 -5
  68. package/dist/{chunk-BT7HGDOX.js → chunk-MBJO5VNZ.js} +12 -12
  69. package/dist/chunk-MNQN3X6Y.js +595 -0
  70. package/dist/{chunk-3QKXHCGS.js → chunk-MZHXENL7.js} +5 -5
  71. package/dist/chunk-MZNWZUJM.js +1801 -0
  72. package/dist/{chunk-7YJWEF2L.js → chunk-N37QC5FV.js} +5 -5
  73. package/dist/{chunk-TJFDL26W.js → chunk-NCCQ6DVS.js} +7 -7
  74. package/dist/{chunk-P5JMBPDJ.js → chunk-NO7J45X6.js} +162 -47
  75. package/dist/chunk-OH3YYA3B.js +15 -0
  76. package/dist/{chunk-22PQ4TX4.js → chunk-P4DL2LM5.js} +16 -77
  77. package/dist/{chunk-LIN2K3EL.js → chunk-PFLOULP3.js} +4 -4
  78. package/dist/{chunk-QXFBABFJ.js → chunk-QKWL7SYE.js} +11 -11
  79. package/dist/chunk-RFCKPS2V.js +26 -0
  80. package/dist/{chunk-ZS43Y2FT.js → chunk-RTLNFZMD.js} +12 -4
  81. package/dist/{chunk-U7H5WRG5.js → chunk-RXFPB32E.js} +8 -6
  82. package/dist/{chunk-Q7NNUHQV.js → chunk-SEDI5K5B.js} +16 -16
  83. package/dist/{chunk-WV6TDAPN.js → chunk-SELG4SUR.js} +7 -7
  84. package/dist/{chunk-3WBALRQH.js → chunk-SER7RRAE.js} +27 -832
  85. package/dist/{chunk-K2HL3GBL.js → chunk-T4TY5GG3.js} +165 -15
  86. package/dist/chunk-T7QQBNLH.js +691 -0
  87. package/dist/{chunk-6OII3LOK.js → chunk-TLTGZTXI.js} +3 -3
  88. package/dist/chunk-TZ6UVP2H.js +637 -0
  89. package/dist/{chunk-3JLFK5MW.js → chunk-TZHN5ITX.js} +13 -41
  90. package/dist/{chunk-VANN3GDP.js → chunk-U3TPUXOQ.js} +399 -234
  91. package/dist/{chunk-VHMX7SXF.js → chunk-UA3W4FGC.js} +6 -6
  92. package/dist/{chunk-3O2ZAUGQ.js → chunk-UA6W4XFJ.js} +2 -2
  93. package/dist/chunk-UWD3JD5X.js +709 -0
  94. package/dist/chunk-V4ZKOKRB.js +13433 -0
  95. package/dist/{chunk-NC4KV7EL.js → chunk-VCRVEDUC.js} +5 -5
  96. package/dist/{chunk-4DU2TVI4.js → chunk-VMATUZB6.js} +12 -10
  97. package/dist/{chunk-J2FYEQ5L.js → chunk-VTYHHQ57.js} +2 -2
  98. package/dist/chunk-WB7POC6M.js +891 -0
  99. package/dist/{chunk-3HQVBIKD.js → chunk-WBVKKTUT.js} +2 -2
  100. package/dist/{chunk-EHOSNVVM.js → chunk-WLHX3MM5.js} +6 -2
  101. package/dist/{chunk-24T2YZ7A.js → chunk-WN552PKN.js} +553 -298
  102. package/dist/{chunk-4U4TKZFR.js → chunk-WT5TRMO4.js} +51 -26
  103. package/dist/{chunk-XWMSPJYN.js → chunk-WURGVOZJ.js} +56 -12
  104. package/dist/{chunk-7WUZEB2M.js → chunk-XR3XJN2M.js} +2 -2
  105. package/dist/chunk-XW2UZICE.js +372 -0
  106. package/dist/{chunk-2AKYFREM.js → chunk-XZ6UFQ52.js} +11 -11
  107. package/dist/chunk-Y3JU5RPK.js +8 -0
  108. package/dist/chunk-YKRJTYNP.js +1143 -0
  109. package/dist/{chunk-PWWSIB2A.js → chunk-ZGIGW4ZG.js} +5 -5
  110. package/dist/cli/index.js +34 -36
  111. package/dist/{clio-QQCMTUZE.js → clio-L2P7S2R2.js} +9 -9
  112. package/dist/{code-nav-GUPM6766.js → code-nav-B5LNX4KU.js} +25 -25
  113. package/dist/{components-TNIKXCBH.js → components-63MMQKUT.js} +6 -6
  114. package/dist/{config-IIM7YOD3.js → config-YXARKGTX.js} +70 -67
  115. package/dist/{configure-4ZM5HWJX.js → configure-LMVQJ46J.js} +47 -35
  116. package/dist/{context-OL5P3HEP.js → context-7HJEWTTP.js} +87 -44
  117. package/dist/{context-44BZLJ3J.js → context-XSZKKFBW.js} +14 -14
  118. package/dist/{context-AIDVQKMW.js → context-YG2LZDYZ.js} +60 -58
  119. package/dist/{context-clear-OQV76MYP.js → context-clear-AC5NXHM2.js} +57 -55
  120. package/dist/{context-index-HP2JFUWA.js → context-index-KKTPRV5G.js} +3 -3
  121. package/dist/{context-map-INTXD54D.js → context-map-T7ROR5D5.js} +4 -4
  122. package/dist/{context-working-set-ZUW3EGLS.js → context-working-set-F4Q4J3NS.js} +12 -10
  123. package/dist/{detail-UXPWRANG.js → detail-H73BEF2N.js} +58 -56
  124. package/dist/{dispatch-runner-P3ZW6G77.js → dispatch-runner-3RY5FSJC.js} +74 -72
  125. package/dist/{doctor-JJVGPZWT.js → doctor-EQYJOGUG.js} +44 -30
  126. package/dist/{eval-V2RTN3UH.js → eval-4P7O6CCE.js} +109 -46
  127. package/dist/{evidence-35PYWGSO.js → evidence-D6GUSYJW.js} +57 -55
  128. package/dist/{evidence-CIGGKI6J.js → evidence-O76QF7TZ.js} +62 -59
  129. package/dist/{evolve-33SM3NJP.js → evolve-H47BCETS.js} +58 -56
  130. package/dist/{extensions-YVRHX6ZI.js → extensions-NNL3ZOCU.js} +98 -20
  131. package/dist/{fleet-LFO7SIPC.js → fleet-KMNS6NOM.js} +106 -99
  132. package/dist/{fleet-commands-RLK72GU3.js → fleet-commands-DOWSYCBX.js} +14 -14
  133. package/dist/{fleet-decisions-3SBSCTCW.js → fleet-decisions-S3PTZV2D.js} +9 -9
  134. package/dist/{fleet-graph-JZIBCGMW.js → fleet-graph-F2DE2TME.js} +26 -24
  135. package/dist/{fleet-inspect-2L5YGGZJ.js → fleet-inspect-EN2Q6IVB.js} +60 -57
  136. package/dist/{fleet-preflight-QRSHIIDE.js → fleet-preflight-FRLETDD3.js} +3 -3
  137. package/dist/{fleet-validate-LIAVKDUU.js → fleet-validate-B2XDLS57.js} +28 -29
  138. package/dist/{fleet-verify-JIK3OQZR.js → fleet-verify-4JKUWGJ7.js} +57 -55
  139. package/dist/{fleet-view-IWHYGQKK.js → fleet-view-BHJFW26B.js} +60 -57
  140. package/dist/{init-NJEDOTQW.js → init-XAT5N5YM.js} +79 -74
  141. package/dist/interop-FVECHFKG.js +246 -0
  142. package/dist/{inventory-74UL7UHU.js → inventory-7KFQGLCV.js} +60 -57
  143. package/dist/library-NY2XOT75.js +492 -0
  144. package/dist/library-QAPAO23R.js +306 -0
  145. package/dist/library-import-5Y6MAS3R.js +183 -0
  146. package/dist/library-inventory-JT6HWITQ.js +56 -0
  147. package/dist/library-validation-EQUH25DC.js +42 -0
  148. package/dist/{memory-I76I5VUH.js → memory-DYVTTCP6.js} +58 -56
  149. package/dist/{models-D4YDIQZQ.js → models-MASFJ6Y2.js} +48 -36
  150. package/dist/{monitor-NKVD55HX.js → monitor-YMP4NXJJ.js} +64 -61
  151. package/dist/{orchestrator-I6OATVPK.js → orchestrator-AFQRRTEI.js} +3685 -1841
  152. package/dist/{panes-7BTYH3XQ.js → panes-D3Y2KFG5.js} +4 -4
  153. package/dist/{panes-WPOMEMRH.js → panes-NICTHQCV.js} +7 -7
  154. package/dist/{paths-J3KN7UAO.js → paths-PSFAUIGO.js} +5 -5
  155. package/dist/{preload-EJAWJEIO.js → preload-5Q7VXRFJ.js} +57 -55
  156. package/dist/{reset-4XMQKDNZ.js → reset-7NKZK7JN.js} +9 -9
  157. package/dist/{resources-TVYVXK3Q.js → resources-NILSIZAT.js} +94 -38
  158. package/dist/{run-OWQNNSJU.js → run-BPZGEBZV.js} +121 -105
  159. package/dist/{share-NPZZMUXG.js → share-EZ6ERBMH.js} +31 -28
  160. package/dist/skills-BTVVNYVM.js +100 -0
  161. package/dist/{skills-eval-J5TCKSJA.js → skills-eval-UY34MNK7.js} +110 -72
  162. package/dist/{skills-inventory-7II4DM57.js → skills-inventory-JDHSIA7I.js} +30 -25
  163. package/dist/{slash-commands-MDSDSWYF.js → slash-commands-K4FNQ2AT.js} +49 -46
  164. package/dist/{steer-S7D7IKPU.js → steer-2B3EQGFH.js} +4 -4
  165. package/dist/{support-5VAEC32W.js → support-L2SOL3IE.js} +7 -7
  166. package/dist/{targets-KILZEOCE.js → targets-44VKGFLN.js} +64 -58
  167. package/dist/{tasks-R6P6OV22.js → tasks-3KODKFU7.js} +12 -12
  168. package/dist/{terminal-lease-LZCG2KN3.js → terminal-lease-LXA7MMPO.js} +32 -19
  169. package/dist/{tools-6OCQ6SVB.js → tools-3UB7TEVR.js} +7 -7
  170. package/dist/{trace-JHLXWUMN.js → trace-TAMIU4OJ.js} +5 -4
  171. package/dist/{tui-primitives-RCY2HN7G.js → tui-primitives-A6MUW32V.js} +3 -2
  172. package/dist/{uninstall-FXYMFFRT.js → uninstall-QYVRPEM4.js} +9 -9
  173. package/dist/{upgrade-D2OZH6IQ.js → upgrade-7PMKM2JH.js} +15 -16
  174. package/dist/{usage-PIASNUS4.js → usage-6EQV7EQK.js} +70 -67
  175. package/dist/{verifiers-LTHUY2PX.js → verifiers-JLITWSHU.js} +15 -15
  176. package/dist/{verify-HYF7KBVE.js → verify-T7NAEVIG.js} +13 -13
  177. package/dist/{web-fetch-MQN4FH3X.js → web-fetch-W4TNW4Q7.js} +4 -4
  178. package/dist/{wiki-generate-RK7JQ5NP.js → wiki-generate-T2TJQJUA.js} +81 -76
  179. package/dist/{with-panes-OFTNAR4Y.js → with-panes-CHFC7HGI.js} +4 -4
  180. package/dist/worker/entry.js +283 -76
  181. package/docs/README.md +43 -0
  182. package/docs/architecture/architecture.md +8 -7
  183. package/docs/architecture/artifact-versions.md +3 -3
  184. package/docs/architecture/context-engine.md +35 -1
  185. package/docs/architecture/library.md +32 -0
  186. package/docs/architecture/middleware-and-components.md +1 -1
  187. package/docs/architecture/model-catalog.md +21 -1
  188. package/docs/architecture/pi-boundary.md +18 -0
  189. package/docs/architecture/prompt-envelope-and-tools.md +5 -5
  190. package/docs/architecture/safety-model.md +21 -2
  191. package/docs/architecture/session-lifecycle.md +12 -1
  192. package/docs/architecture/tui-design.md +108 -9
  193. package/docs/architecture/worker-context.md +106 -0
  194. package/docs/guide/authoring-plugins.md +160 -0
  195. package/docs/guide/built-in-agents.md +5 -5
  196. package/docs/guide/commands-and-modes.md +161 -56
  197. package/docs/guide/configuration-and-targets.md +1 -1
  198. package/docs/guide/configuration-reference.md +27 -34
  199. package/docs/guide/environment-variables.md +2 -2
  200. package/docs/guide/exit-codes-and-output.md +1 -1
  201. package/docs/guide/extensions-and-sharing.md +93 -53
  202. package/docs/guide/fleet-dispatch.md +31 -4
  203. package/docs/guide/glossary.md +1 -1
  204. package/docs/guide/harness-extensions.md +291 -0
  205. package/docs/guide/installation-and-lifecycle.md +9 -9
  206. package/docs/guide/interop.md +243 -0
  207. package/docs/guide/panes-and-files.md +3 -3
  208. package/docs/guide/plugins.md +80 -0
  209. package/docs/guide/resource-library.md +111 -45
  210. package/docs/guide/skills-marketplace.md +35 -72
  211. package/docs/guide/tool-usage.md +19 -7
  212. package/docs/guide/troubleshooting.md +1 -1
  213. package/docs/process/development-pipeline.md +14 -14
  214. package/docs/process/documentation-coverage.md +28 -1
  215. package/docs/process/documentation-guide.md +15 -7
  216. package/docs/process/eval-runner.md +8 -3
  217. package/docs/process/performance-methodology.md +1 -1
  218. package/docs/process/release-cut-checklist.md +4 -0
  219. package/docs/process/scientific-validation.md +23 -0
  220. package/evals/scalar-decision-machinery.ts +1 -1
  221. package/examples/extensions/README.md +67 -0
  222. package/examples/extensions/lab-status/clio-coder-extension.json +14 -0
  223. package/examples/extensions/lab-status/extension.mjs +68 -0
  224. package/examples/extensions/lab-status/jobs.synthetic.json +9 -0
  225. package/examples/extensions/measurements/clio-coder-extension.json +28 -0
  226. package/examples/extensions/measurements/summarize.cjs +23 -0
  227. package/library/README.md +109 -0
  228. package/library/_authoring/templates/agent/README.md +28 -0
  229. package/library/_authoring/templates/agent/agents/benchmark-scout.md +30 -0
  230. package/library/_authoring/templates/agent/plugin.json +23 -0
  231. package/library/_authoring/templates/fleet/README.md +29 -0
  232. package/library/_authoring/templates/fleet/fleets/pipeline-review.md +31 -0
  233. package/library/_authoring/templates/fleet/plugin.json +23 -0
  234. package/library/_authoring/templates/plugin/README.md +37 -0
  235. package/library/_authoring/templates/plugin/agents/data-curator.md +31 -0
  236. package/library/_authoring/templates/plugin/assets/curation-guide.md +22 -0
  237. package/library/_authoring/templates/plugin/plugin.json +42 -0
  238. package/library/_authoring/templates/plugin/prompts/inspect-dataset.md +15 -0
  239. package/library/_authoring/templates/plugin/skills/dataset-curation/SKILL.md +36 -0
  240. package/library/_authoring/templates/plugin/skills/dataset-curation/evals.md +17 -0
  241. package/library/_authoring/templates/prompt/README.md +28 -0
  242. package/library/_authoring/templates/prompt/plugin.json +23 -0
  243. package/library/_authoring/templates/prompt/prompts/paper-summary.md +26 -0
  244. package/library/_authoring/templates/skill/README.md +24 -0
  245. package/library/_authoring/templates/skill/SKILL.md +39 -0
  246. package/library/_authoring/templates/skill/evals.md +30 -0
  247. package/library/_authoring/templates/skill/plugin.json +23 -0
  248. package/library/agents/README.md +7 -0
  249. package/library/fleets/README.md +7 -0
  250. package/library/plugins/materio/README.md +137 -0
  251. package/library/plugins/materio/ai.iowarp.clio/agents/materio-lab-definer.md +208 -0
  252. package/library/plugins/materio/ai.iowarp.clio/agents/materio-literature-reviewer.md +308 -0
  253. package/library/plugins/materio/ai.iowarp.clio/agents/materio-research-explorer.md +249 -0
  254. package/library/plugins/materio/ai.iowarp.clio/agents/materio-task-executor.md +416 -0
  255. package/library/plugins/materio/ai.iowarp.clio/agents/materio-task-verifier.md +60 -0
  256. package/library/plugins/materio/ai.iowarp.clio/agents/materio-workflow-planner.md +238 -0
  257. package/library/plugins/materio/ai.iowarp.clio/fleets/materio-execute-task.md +50 -0
  258. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/add-task.md +66 -0
  259. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/archive-task.md +65 -0
  260. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/checkpoint.md +26 -0
  261. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/define-research-tasks.md +230 -0
  262. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/define-virtual-lab.md +181 -0
  263. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/execute-task.md +292 -0
  264. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/help.md +129 -0
  265. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/identify-research.md +206 -0
  266. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/literature-review.md +201 -0
  267. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/pause-research.md +12 -0
  268. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/progress.md +105 -0
  269. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/remove-task.md +63 -0
  270. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/resume-research.md +64 -0
  271. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/settings.md +16 -0
  272. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/status.md +92 -0
  273. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/upload-data.md +104 -0
  274. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/wtfp.md +145 -0
  275. package/library/plugins/materio/ai.iowarp.clio/references/execution.md +56 -0
  276. package/library/plugins/materio/ai.iowarp.portability/provenance.json +9 -0
  277. package/library/plugins/materio/assets/actions/add-task.md +86 -0
  278. package/library/plugins/materio/assets/actions/archive-task.md +84 -0
  279. package/library/plugins/materio/assets/actions/checkpoint.md +47 -0
  280. package/library/plugins/materio/assets/actions/define-research-tasks.md +228 -0
  281. package/library/plugins/materio/assets/actions/define-virtual-lab.md +179 -0
  282. package/library/plugins/materio/assets/actions/execute-task.md +290 -0
  283. package/library/plugins/materio/assets/actions/help.md +140 -0
  284. package/library/plugins/materio/assets/actions/identify-research.md +204 -0
  285. package/library/plugins/materio/assets/actions/literature-review.md +199 -0
  286. package/library/plugins/materio/assets/actions/pause-research.md +34 -0
  287. package/library/plugins/materio/assets/actions/progress.md +125 -0
  288. package/library/plugins/materio/assets/actions/remove-task.md +82 -0
  289. package/library/plugins/materio/assets/actions/resume-research.md +84 -0
  290. package/library/plugins/materio/assets/actions/settings.md +38 -0
  291. package/library/plugins/materio/assets/actions/status.md +112 -0
  292. package/library/plugins/materio/assets/actions/upload-data.md +123 -0
  293. package/library/plugins/materio/assets/actions/wtfp.md +179 -0
  294. package/library/plugins/materio/assets/references/research-domains.md +134 -0
  295. package/library/plugins/materio/assets/references/research-policy.md +77 -0
  296. package/library/plugins/materio/assets/references/traditional-workflows.md +146 -0
  297. package/library/plugins/materio/assets/scripts/check_physics.py +271 -0
  298. package/library/plugins/materio/assets/scripts/check_scripts.py +248 -0
  299. package/library/plugins/materio/assets/scripts/project_plugin.py +165 -0
  300. package/library/plugins/materio/assets/scripts/research_state.py +400 -0
  301. package/library/plugins/materio/assets/scripts/verify_citations.py +616 -0
  302. package/library/plugins/materio/assets/templates/RESEARCH.md +39 -0
  303. package/library/plugins/materio/assets/templates/VIRTUAL-LAB.md +120 -0
  304. package/library/plugins/materio/assets/templates/WORKFLOW.md +42 -0
  305. package/library/plugins/materio/assets/templates/config.json +5 -0
  306. package/library/plugins/materio/evals/scripts.yaml +29 -0
  307. package/library/plugins/materio/plugin.json +530 -0
  308. package/library/plugins/materio/skills/materio-lab-definer/SKILL.md +74 -0
  309. package/library/plugins/materio/skills/materio-literature-reviewer/SKILL.md +64 -0
  310. package/library/plugins/materio/skills/materio-research-explorer/SKILL.md +74 -0
  311. package/library/plugins/materio/skills/materio-task-executor/SKILL.md +214 -0
  312. package/library/plugins/materio/skills/materio-task-verifier/SKILL.md +46 -0
  313. package/library/plugins/materio/skills/materio-workflow-planner/SKILL.md +79 -0
  314. package/library/plugins/materio/tests/test_check_physics.py +139 -0
  315. package/library/plugins/materio/tests/test_check_scripts.py +140 -0
  316. package/library/plugins/materio/tests/test_research_state.py +291 -0
  317. package/library/plugins/materio/tests/test_verify_citations.py +337 -0
  318. package/library/prompts/README.md +7 -0
  319. package/library/registry.yaml +921 -0
  320. package/library/skills/README.md +120 -0
  321. package/{skills → library/skills}/coding/ast-grep/SKILL.md +1 -1
  322. package/{skills → library/skills}/coding/ast-grep/evals.md +1 -1
  323. package/library/skills/coding/ast-grep/plugin.json +23 -0
  324. package/{skills → library/skills}/coding/coding-standards/SKILL.md +1 -1
  325. package/{skills → library/skills}/coding/coding-standards/evals.md +1 -1
  326. package/library/skills/coding/coding-standards/plugin.json +23 -0
  327. package/{skills → library/skills}/coding/prototype/SKILL.md +1 -1
  328. package/{skills → library/skills}/coding/prototype/evals.md +1 -1
  329. package/library/skills/coding/prototype/plugin.json +23 -0
  330. package/{skills → library/skills}/coding/tdd/SKILL.md +1 -1
  331. package/{skills → library/skills}/coding/tdd/evals.md +1 -1
  332. package/library/skills/coding/tdd/plugin.json +23 -0
  333. package/{skills → library/skills}/context/context-handoff/SKILL.md +1 -1
  334. package/{skills → library/skills}/context/context-handoff/evals.md +1 -1
  335. package/library/skills/context/context-handoff/plugin.json +23 -0
  336. package/{skills → library/skills}/context/context-prime/SKILL.md +1 -1
  337. package/{skills → library/skills}/context/context-prime/evals.md +1 -1
  338. package/library/skills/context/context-prime/plugin.json +23 -0
  339. package/{skills → library/skills}/git/branch-closeout/SKILL.md +1 -1
  340. package/library/skills/git/branch-closeout/plugin.json +23 -0
  341. package/{skills → library/skills}/git/file-ticket/SKILL.md +1 -1
  342. package/library/skills/git/file-ticket/plugin.json +23 -0
  343. package/{skills → library/skills}/git/fix-issue/SKILL.md +1 -1
  344. package/library/skills/git/fix-issue/plugin.json +23 -0
  345. package/{skills → library/skills}/git/resolve-merge-conflicts/SKILL.md +1 -1
  346. package/{skills → library/skills}/git/resolve-merge-conflicts/evals.md +1 -1
  347. package/library/skills/git/resolve-merge-conflicts/plugin.json +23 -0
  348. package/{skills → library/skills}/git/ship/SKILL.md +1 -1
  349. package/library/skills/git/ship/plugin.json +23 -0
  350. package/{skills → library/skills}/git/worktree-create/SKILL.md +1 -1
  351. package/library/skills/git/worktree-create/plugin.json +23 -0
  352. package/{skills → library/skills}/git/worktree-merge/SKILL.md +1 -1
  353. package/library/skills/git/worktree-merge/plugin.json +23 -0
  354. package/{skills → library/skills}/meta/clio-coder-dev/SKILL.md +1 -1
  355. package/{skills → library/skills}/meta/clio-coder-dev/evals.md +1 -1
  356. package/library/skills/meta/clio-coder-dev/plugin.json +23 -0
  357. package/{skills → library/skills}/meta/clio-coder-test/SKILL.md +1 -1
  358. package/{skills → library/skills}/meta/clio-coder-test/evals.md +1 -1
  359. package/library/skills/meta/clio-coder-test/plugin.json +23 -0
  360. package/{skills → library/skills}/meta/credentials/SKILL.md +1 -1
  361. package/{skills → library/skills}/meta/credentials/evals.md +1 -1
  362. package/library/skills/meta/credentials/plugin.json +23 -0
  363. package/library/skills/meta/find-skills/SKILL.md +85 -0
  364. package/library/skills/meta/find-skills/evals.md +65 -0
  365. package/library/skills/meta/find-skills/plugin.json +23 -0
  366. package/{skills → library/skills}/meta/herdr/SKILL.md +1 -1
  367. package/{skills → library/skills}/meta/herdr/evals.md +1 -1
  368. package/library/skills/meta/herdr/plugin.json +23 -0
  369. package/{skills → library/skills}/meta/skill-craft/SKILL.md +23 -9
  370. package/{skills → library/skills}/meta/skill-craft/evals.md +11 -3
  371. package/library/skills/meta/skill-craft/plugin.json +23 -0
  372. package/{skills → library/skills}/planning/archify/SKILL.md +13 -13
  373. package/library/skills/planning/archify/plugin.json +23 -0
  374. package/{skills → library/skills}/planning/architecture/SKILL.md +1 -1
  375. package/{skills → library/skills}/planning/architecture/evals.md +1 -1
  376. package/library/skills/planning/architecture/plugin.json +23 -0
  377. package/{skills → library/skills}/planning/backlog/SKILL.md +1 -1
  378. package/{skills → library/skills}/planning/backlog/evals.md +1 -1
  379. package/library/skills/planning/backlog/plugin.json +23 -0
  380. package/{skills → library/skills}/planning/prd/SKILL.md +1 -1
  381. package/{skills → library/skills}/planning/prd/evals.md +1 -1
  382. package/library/skills/planning/prd/plugin.json +23 -0
  383. package/{skills → library/skills}/planning/product-intent/SKILL.md +1 -1
  384. package/{skills → library/skills}/planning/product-intent/evals.md +1 -1
  385. package/library/skills/planning/product-intent/plugin.json +23 -0
  386. package/{skills → library/skills}/planning/tech-spec/SKILL.md +1 -1
  387. package/{skills → library/skills}/planning/tech-spec/evals.md +1 -1
  388. package/library/skills/planning/tech-spec/plugin.json +23 -0
  389. package/{skills → library/skills}/registry.yaml +7 -7
  390. package/{skills → library/skills}/remote.yaml +1 -1
  391. package/{skills → library/skills}/research/arxiv-literature/SKILL.md +1 -1
  392. package/{skills → library/skills}/research/arxiv-literature/evals.md +1 -1
  393. package/library/skills/research/arxiv-literature/plugin.json +23 -0
  394. package/{skills → library/skills}/research/experiment-protocol/SKILL.md +1 -1
  395. package/{skills → library/skills}/research/experiment-protocol/evals.md +1 -1
  396. package/library/skills/research/experiment-protocol/plugin.json +23 -0
  397. package/{skills → library/skills}/research/scientific-debugging/SKILL.md +1 -1
  398. package/{skills → library/skills}/research/scientific-debugging/evals.md +1 -1
  399. package/library/skills/research/scientific-debugging/plugin.json +23 -0
  400. package/{skills → library/skills}/research/scientific-modernization/SKILL.md +1 -1
  401. package/{skills → library/skills}/research/scientific-modernization/evals.md +1 -1
  402. package/library/skills/research/scientific-modernization/plugin.json +23 -0
  403. package/{skills → library/skills}/skill-marketplace.json +37 -37
  404. package/{skills → library/skills}/workflow/cut-it/SKILL.md +1 -1
  405. package/{skills → library/skills}/workflow/cut-it/evals.md +1 -1
  406. package/library/skills/workflow/cut-it/plugin.json +23 -0
  407. package/{skills → library/skills}/workflow/design-council/SKILL.md +1 -1
  408. package/{skills → library/skills}/workflow/design-council/evals.md +1 -1
  409. package/library/skills/workflow/design-council/plugin.json +23 -0
  410. package/{skills → library/skills}/workflow/grill-me/SKILL.md +1 -1
  411. package/{skills → library/skills}/workflow/grill-me/evals.md +1 -1
  412. package/library/skills/workflow/grill-me/plugin.json +23 -0
  413. package/{skills → library/skills}/workflow/workflow-distiller/SKILL.md +14 -11
  414. package/{skills → library/skills}/workflow/workflow-distiller/evals.md +14 -6
  415. package/library/skills/workflow/workflow-distiller/plugin.json +23 -0
  416. package/package.json +12 -5
  417. package/src/cli/agents.ts +1 -1
  418. package/src/cli/config-inspect.ts +1 -1
  419. package/src/cli/configure.ts +2 -2
  420. package/src/cli/eval.ts +40 -6
  421. package/src/cli/extensions.ts +74 -8
  422. package/src/cli/fleet-preflight.ts +2 -0
  423. package/src/cli/fleet.ts +2 -0
  424. package/src/cli/index.ts +1 -3
  425. package/src/cli/interop-inspect.ts +61 -33
  426. package/src/cli/interop.ts +79 -9
  427. package/src/cli/library-import.ts +139 -0
  428. package/src/cli/library.ts +418 -120
  429. package/src/cli/run.ts +26 -9
  430. package/src/cli/skills-eval.ts +43 -6
  431. package/src/cli/skills-inventory.ts +6 -2
  432. package/src/cli/skills.ts +44 -491
  433. package/src/core/bus-events.ts +5 -0
  434. package/src/core/defaults.ts +1 -1
  435. package/src/core/recent-models.ts +2 -2
  436. package/src/core/session-routing.ts +3 -3
  437. package/src/core/state-file-lock.ts +1 -1
  438. package/src/core/tool-names.ts +5 -0
  439. package/src/domains/agents/extension.ts +42 -6
  440. package/src/domains/agents/fleet-commands.ts +92 -1
  441. package/src/domains/agents/fleet-contract.ts +87 -19
  442. package/src/domains/agents/recipe.ts +5 -4
  443. package/src/domains/agents/registry.ts +80 -24
  444. package/src/domains/config/keybindings.ts +155 -95
  445. package/src/domains/context/worker/contract.ts +91 -0
  446. package/src/domains/context/worker/pressure.ts +120 -0
  447. package/src/domains/context/worker/recall.ts +62 -0
  448. package/src/domains/context/worker/select.ts +164 -0
  449. package/src/domains/context/worker/snapshot.ts +35 -0
  450. package/src/domains/context/worker/store.ts +16 -0
  451. package/src/domains/context/working-set/replay/synthetic.ts +2 -1
  452. package/src/domains/dispatch/active-route-planner.ts +2 -0
  453. package/src/domains/dispatch/backoff.ts +1 -0
  454. package/src/domains/dispatch/code-step.ts +12 -2
  455. package/src/domains/dispatch/contract.ts +3 -0
  456. package/src/domains/dispatch/execution-plan.ts +2 -0
  457. package/src/domains/dispatch/extension.ts +109 -27
  458. package/src/domains/dispatch/fleet-plan.ts +10 -0
  459. package/src/domains/dispatch/fleet-run.ts +1 -0
  460. package/src/domains/dispatch/orphan-recovery.ts +1 -0
  461. package/src/domains/dispatch/receipt-integrity.ts +4 -0
  462. package/src/domains/dispatch/state.ts +1 -0
  463. package/src/domains/dispatch/types.ts +5 -0
  464. package/src/domains/dispatch/validation.ts +12 -0
  465. package/src/domains/dispatch/workspace-checkpoint.ts +1 -1
  466. package/src/domains/evidence/failure-attribution.ts +1 -0
  467. package/src/domains/evidence/trust-status.ts +22 -3
  468. package/src/domains/extensions/command-schema.ts +145 -0
  469. package/src/domains/extensions/command-tools.ts +15 -0
  470. package/src/domains/extensions/compatibility.ts +7 -0
  471. package/src/domains/extensions/contract.ts +0 -4
  472. package/src/domains/extensions/discovery.ts +69 -205
  473. package/src/domains/extensions/extension.ts +0 -4
  474. package/src/domains/extensions/index.ts +1 -5
  475. package/src/domains/extensions/manager.ts +1 -6
  476. package/src/domains/extensions/operator-commands.ts +29 -0
  477. package/src/domains/extensions/operator-runtime.ts +483 -0
  478. package/src/domains/extensions/public-api.ts +53 -0
  479. package/src/domains/extensions/runtime-child.mjs +114 -0
  480. package/src/domains/extensions/runtime-process.ts +306 -0
  481. package/src/domains/extensions/runtime-schema.ts +146 -0
  482. package/src/domains/extensions/{resources.ts → snapshot-access.ts} +1 -17
  483. package/src/domains/extensions/snapshot.ts +4 -32
  484. package/src/domains/extensions/state.ts +5 -83
  485. package/src/domains/extensions/types.ts +33 -34
  486. package/src/domains/interop/adopt.ts +546 -0
  487. package/src/domains/interop/detect.ts +50 -12
  488. package/src/domains/interop/foreign.ts +554 -0
  489. package/src/domains/interop/import.ts +277 -0
  490. package/src/domains/interop/index.ts +24 -0
  491. package/src/domains/interop/install.ts +6 -0
  492. package/src/domains/interop/inventory.ts +351 -0
  493. package/src/domains/interop/projection.ts +360 -0
  494. package/src/domains/interop/registry.ts +106 -3
  495. package/src/domains/interop/types.ts +51 -0
  496. package/src/domains/lifecycle/migrations/index.ts +0 -2
  497. package/src/domains/lifecycle/naming-resources.ts +1 -1
  498. package/src/domains/middleware/marketplace-offer.ts +1 -1
  499. package/src/domains/mux/contract.ts +1 -1
  500. package/src/domains/plugins/catalog.ts +204 -0
  501. package/src/domains/plugins/contract.ts +24 -0
  502. package/src/domains/plugins/discovery.ts +316 -0
  503. package/src/domains/plugins/extension.ts +40 -0
  504. package/src/domains/plugins/index.ts +77 -0
  505. package/src/domains/plugins/integrity.ts +6 -0
  506. package/src/domains/plugins/manifest.ts +3 -0
  507. package/src/domains/plugins/resources.ts +102 -0
  508. package/src/domains/plugins/state.ts +753 -0
  509. package/src/domains/plugins/types.ts +217 -0
  510. package/src/domains/prompts/extension.ts +9 -2
  511. package/src/domains/prompts/fragments/operating/skills.md +10 -10
  512. package/src/domains/resources/common-loader.ts +9 -6
  513. package/src/domains/resources/index.ts +67 -0
  514. package/src/domains/resources/library-actions.ts +836 -0
  515. package/src/domains/resources/library-evals.ts +38 -0
  516. package/src/domains/resources/library-inventory.ts +1048 -0
  517. package/src/domains/resources/library-types.ts +50 -0
  518. package/src/domains/resources/library-validation.ts +634 -0
  519. package/src/domains/resources/library.ts +437 -156
  520. package/src/domains/resources/package-references.ts +66 -0
  521. package/src/domains/resources/prompts/loader.ts +75 -41
  522. package/src/domains/resources/skills/install.ts +2 -2
  523. package/src/domains/resources/skills/loader.ts +77 -22
  524. package/src/domains/resources/skills/marketplace.ts +48 -57
  525. package/src/domains/resources/skills/promotion.ts +2 -2
  526. package/src/domains/resources/skills/provenance-pin.ts +17 -4
  527. package/src/domains/safety/action-classifier.ts +2 -2
  528. package/src/domains/safety/default-path-policy.ts +3 -1
  529. package/src/domains/safety/policy-engine.ts +1 -1
  530. package/src/domains/safety/protected-artifacts.ts +21 -5
  531. package/src/domains/safety/skill-authority.ts +5 -2
  532. package/src/domains/share/archive.ts +1 -1
  533. package/src/engine/apis/openai-completions.ts +52 -2
  534. package/src/engine/notices/pi-tui-LICENSE +21 -0
  535. package/src/engine/tui.ts +3 -0
  536. package/src/engine/worker-runtime.ts +58 -14
  537. package/src/engine/worker-tools.ts +5 -0
  538. package/src/entry/orchestrator.ts +26 -5
  539. package/src/entry/plugin-reload.ts +18 -0
  540. package/src/interactive/application-controller.ts +67 -21
  541. package/src/interactive/chat-loop.ts +32 -5
  542. package/src/interactive/chat-panel.ts +5 -1
  543. package/src/interactive/clio-editor.ts +53 -21
  544. package/src/interactive/command-output.ts +56 -1
  545. package/src/interactive/editor-submit.ts +65 -28
  546. package/src/interactive/fleet-run-preview.ts +2 -0
  547. package/src/interactive/follow-up-queue-panel.ts +3 -3
  548. package/src/interactive/footer/dashboard.ts +4 -1
  549. package/src/interactive/footer/notifications.ts +2 -2
  550. package/src/interactive/footer/widgets.ts +2 -2
  551. package/src/interactive/interactive-application.ts +209 -21
  552. package/src/interactive/interactive-input-runtime.ts +254 -7
  553. package/src/interactive/interactive-presentation.ts +41 -12
  554. package/src/interactive/interactive-slash-runtime.ts +37 -8
  555. package/src/interactive/keybinding-manager.ts +156 -79
  556. package/src/interactive/keyboard-owner.ts +37 -0
  557. package/src/interactive/leader-key.ts +49 -102
  558. package/src/interactive/leader-menu.ts +45 -0
  559. package/src/interactive/overlay-ask-user-lifecycle.ts +9 -1
  560. package/src/interactive/overlay-frame.ts +15 -0
  561. package/src/interactive/overlay-key-routing.ts +46 -47
  562. package/src/interactive/overlay-lifecycle.ts +30 -15
  563. package/src/interactive/overlay-resource-openers.ts +56 -46
  564. package/src/interactive/overlays/ask-user.ts +630 -556
  565. package/src/interactive/overlays/extension-panel.ts +70 -0
  566. package/src/interactive/overlays/extensions.ts +28 -5
  567. package/src/interactive/overlays/fleet-run-approval.ts +7 -3
  568. package/src/interactive/overlays/help-reference.ts +89 -40
  569. package/src/interactive/overlays/interop.ts +122 -3
  570. package/src/interactive/overlays/keybinding-detail.ts +2 -2
  571. package/src/interactive/overlays/library-lifecycle.ts +90 -0
  572. package/src/interactive/overlays/library-model.ts +574 -0
  573. package/src/interactive/overlays/library-review.ts +557 -0
  574. package/src/interactive/overlays/library-tabs.ts +3 -15
  575. package/src/interactive/overlays/library.ts +602 -0
  576. package/src/interactive/overlays/list-overlay.ts +218 -39
  577. package/src/interactive/overlays/model-selector.ts +28 -25
  578. package/src/interactive/overlays/session-selector.ts +9 -3
  579. package/src/interactive/overlays/settings.ts +25 -18
  580. package/src/interactive/overlays/tree-selector.ts +16 -11
  581. package/src/interactive/permission-hint.ts +13 -0
  582. package/src/interactive/permission-overlay.ts +77 -28
  583. package/src/interactive/prompt-source-label.ts +21 -0
  584. package/src/interactive/renderers/reference-card.ts +35 -0
  585. package/src/interactive/renderers/worker-entry.ts +35 -3
  586. package/src/interactive/slash-autocomplete.ts +99 -1
  587. package/src/interactive/slash-commands.ts +390 -67
  588. package/src/interactive/slash-spec.ts +0 -1
  589. package/src/interactive/terminal-lease.ts +44 -12
  590. package/src/interactive/turn-queues.ts +8 -7
  591. package/src/interactive/turn-runtime.ts +1 -1
  592. package/src/interactive/view/view-overlay.ts +19 -14
  593. package/src/interactive/welcome-dashboard.ts +525 -408
  594. package/src/tools/bootstrap.ts +8 -0
  595. package/src/tools/builtin-tool-catalog.ts +7 -2
  596. package/src/tools/context/index.ts +58 -5
  597. package/src/tools/context/library.ts +465 -0
  598. package/src/tools/context/surface.ts +20 -6
  599. package/src/tools/core-bootstrap.ts +3 -0
  600. package/src/tools/dispatch-admission.ts +24 -1
  601. package/src/tools/dispatch-arguments.ts +8 -0
  602. package/src/tools/dispatch-plan.ts +32 -0
  603. package/src/tools/dispatch-schema.ts +31 -1
  604. package/src/tools/dispatch-types.ts +3 -0
  605. package/src/tools/dispatch.ts +1 -1
  606. package/src/tools/harness-extensions.ts +169 -0
  607. package/src/tools/observation.ts +4 -0
  608. package/src/tools/policy.ts +7 -1
  609. package/src/tools/registry.ts +19 -1
  610. package/src/tools/worker-evidence.ts +5 -0
  611. package/src/worker/context-seed.ts +192 -0
  612. package/src/worker/entry.ts +1 -0
  613. package/src/worker/spec-contract.ts +8 -1
  614. package/dist/chunk-3UW3KU4A.js +0 -21
  615. package/dist/chunk-536HXRFE.js +0 -1257
  616. package/dist/chunk-B3MOMLJ4.js +0 -433
  617. package/dist/chunk-CXQ37WJH.js +0 -45
  618. package/dist/chunk-KTFSFCVN.js +0 -46
  619. package/dist/chunk-QCOV5DFY.js +0 -911
  620. package/dist/chunk-QRFXEO6Y.js +0 -17
  621. package/dist/chunk-VAHLPXPY.js +0 -399
  622. package/dist/interop-RVCAYECG.js +0 -115
  623. package/dist/library-CTKZA7K3.js +0 -226
  624. package/dist/skills-OXFEAWMT.js +0 -510
  625. package/skills/README.md +0 -418
  626. package/skills/meta/find-skills/SKILL.md +0 -78
  627. package/skills/meta/find-skills/evals.md +0 -47
  628. package/src/domains/extensions/resource-path.ts +0 -27
  629. package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +0 -27
  630. package/src/interactive/overlays/agents.ts +0 -70
  631. package/src/interactive/overlays/library-install-confirm.ts +0 -152
  632. package/src/interactive/overlays/prompts.ts +0 -89
  633. package/src/interactive/overlays/skills-hub.ts +0 -615
  634. /package/{skills → library/skills}/coding/ast-grep/references/rule_reference.md +0 -0
  635. /package/{skills → library/skills}/coding/prototype/references/LOGIC.md +0 -0
  636. /package/{skills → library/skills}/coding/prototype/references/UI.md +0 -0
  637. /package/{skills → library/skills}/coding/tdd/references/mocking.md +0 -0
  638. /package/{skills → library/skills}/coding/tdd/references/tests.md +0 -0
  639. /package/{skills → library/skills}/context/context-handoff/scripts/new-handoff.sh +0 -0
  640. /package/{skills → library/skills}/git/branch-closeout/evals.md +0 -0
  641. /package/{skills → library/skills}/git/branch-closeout/references/closeout-checklist.md +0 -0
  642. /package/{skills → library/skills}/git/file-ticket/assets/issue-template.md +0 -0
  643. /package/{skills → library/skills}/git/file-ticket/evals.md +0 -0
  644. /package/{skills → library/skills}/git/file-ticket/references/issue-discovery.md +0 -0
  645. /package/{skills → library/skills}/git/fix-issue/evals.md +0 -0
  646. /package/{skills → library/skills}/git/fix-issue/references/diagnosis-and-rca.md +0 -0
  647. /package/{skills → library/skills}/git/resolve-merge-conflicts/references/conflict-matrix.md +0 -0
  648. /package/{skills → library/skills}/git/ship/assets/pr-template.md +0 -0
  649. /package/{skills → library/skills}/git/ship/evals.md +0 -0
  650. /package/{skills → library/skills}/git/ship/references/remote-and-branch-policy.md +0 -0
  651. /package/{skills → library/skills}/git/worktree-create/evals.md +0 -0
  652. /package/{skills → library/skills}/git/worktree-create/references/worktree-setup.md +0 -0
  653. /package/{skills → library/skills}/git/worktree-merge/evals.md +0 -0
  654. /package/{skills → library/skills}/git/worktree-merge/references/merge-strategies.md +0 -0
  655. /package/{skills → library/skills}/meta/clio-coder-test/references/harness.md +0 -0
  656. /package/{skills → library/skills}/meta/clio-coder-test/references/test-map.md +0 -0
  657. /package/{skills → library/skills}/planning/archify/evals.md +0 -0
@@ -6,23 +6,37 @@ import type { ToolSurface } from "../lazy-tool.js";
6
6
  export const contextToolSurface = {
7
7
  name: ToolNames.Context,
8
8
  description:
9
- "Environment context: scope=workspace returns the git/project snapshot, scope=docs searches Clio's bundled documentation (omit query to list the corpus), scope=skills lists installed and marketplace skills or loads an installed one by name, scope=recall returns an exact persisted evicted or summarized tool result by ref; omit ref to discover historical results by query with bounded limit/offset pages. For repository code and the repo's generated wiki use code_nav (mode=wiki).",
9
+ "Environment context: scope=workspace returns the git/project snapshot, scope=docs searches Clio's bundled documentation (omit query to list the corpus), scope=skills lists installed and marketplace skills or loads an installed one by name, scope=library reads the recipe catalog (installed skills/agents/prompts/fleets with their owner and invocation, plus installable packages) without activating or installing anything, scope=recall returns an exact persisted evicted or summarized tool result by ref; omit ref to discover historical results by query with bounded limit/offset pages. For repository code and the repo's generated wiki use code_nav (mode=wiki).",
10
10
  parameters: Type.Object({
11
- scope: StringEnum(["workspace", "docs", "skills", "recall"], { description: "Context source." }),
11
+ scope: StringEnum(["workspace", "docs", "skills", "library", "recall"], { description: "Context source." }),
12
12
  query: Type.Optional(
13
13
  Type.String({
14
- description: "scope=docs: question or terms. scope=recall without ref: path, tool, or ref terms; omit to list.",
14
+ description:
15
+ "scope=docs: question or terms. scope=library: name, owner, or description terms. scope=recall without ref: path, tool, or ref terms; omit to list.",
15
16
  }),
16
17
  ),
17
18
  name: Type.Optional(Type.String({ description: "scope=skills: skill name to load; omit to list." })),
19
+ kind: Type.Optional(
20
+ StringEnum(["skill", "agent", "prompt", "fleet", "plugin"], {
21
+ description: "scope=library: one recipe kind, or plugin for installable package rows.",
22
+ }),
23
+ ),
18
24
  limit: Type.Optional(
19
25
  Type.Number({
20
- description: "scope=docs: max sections (default 5, max 12). scope=recall: max refs (default 8, max 12).",
26
+ description:
27
+ "scope=docs: max sections (default 5, max 12). scope=library: max rows (default 20, max 50). scope=recall: max refs (default 8, max 12).",
28
+ }),
29
+ ),
30
+ ref: Type.Optional(
31
+ Type.String({
32
+ description:
33
+ "scope=library: exact kind:name or resource key for one record. scope=recall: exact persisted result ref; omit for discovery.",
21
34
  }),
22
35
  ),
23
- ref: Type.Optional(Type.String({ description: "scope=recall: exact persisted result ref; omit for discovery." })),
24
36
  offset: Type.Optional(
25
- Type.Number({ description: "scope=recall discovery: zero-based offset; follow nextOffset (default 0)." }),
37
+ Type.Number({
38
+ description: "scope=library and scope=recall discovery: zero-based offset; follow nextOffset (default 0).",
39
+ }),
26
40
  ),
27
41
  include_tree: Type.Optional(Type.Boolean({ description: "scope=skills: list files under the skill base_dir." })),
28
42
  }),
@@ -1,4 +1,5 @@
1
1
  import type { ContextRecalledPayload } from "../core/bus-events.js";
2
+ import type { WorkerRecall } from "../domains/context/worker/recall.js";
2
3
  import type { LoadSkillsInput } from "../domains/resources/index.js";
3
4
  import type { SessionContract } from "../domains/session/contract.js";
4
5
  import type { DecisionBoardStore } from "../domains/session/decision-board.js";
@@ -33,6 +34,7 @@ import { webFetchToolSurface } from "./web-fetch-surface.js";
33
34
  import { writeTool } from "./write.js";
34
35
 
35
36
  export interface CoreToolBootstrapDeps {
37
+ workerRecall?: WorkerRecall;
36
38
  session?: SessionContract;
37
39
  /** Full ledger of the current session; context(scope=recall) folds it. Absent in worker registries. */
38
40
  readSessionEntries?: () => ReadonlyArray<SessionEntry>;
@@ -117,6 +119,7 @@ export function registerCoreTools(registry: ToolRegistry, deps: CoreToolBootstra
117
119
  ),
118
120
  });
119
121
  const skillToolDeps = {
122
+ ...(deps.workerRecall ? { workerRecall: deps.workerRecall } : {}),
120
123
  getCwd: () => deps.session?.current()?.cwd ?? process.cwd(),
121
124
  ...(deps.getSkillLoaderOptions ? { getSkillLoaderOptions: deps.getSkillLoaderOptions } : {}),
122
125
  ...(deps.skillMarketplace !== undefined ? { skillMarketplace: deps.skillMarketplace } : {}),
@@ -1,4 +1,5 @@
1
1
  import { isAbsolute, relative, resolve } from "node:path";
2
+ import { selectWorkerContext } from "../domains/context/worker/select.js";
2
3
  import type { DispatchPlanTaskResolution, DispatchRequest } from "../domains/dispatch/contract.js";
3
4
  import type { ExecutionPlan } from "../domains/dispatch/execution-plan.js";
4
5
  import { gateDeciderAgentId } from "../domains/dispatch/execution-role.js";
@@ -344,6 +345,8 @@ export function createDispatchAdmissionController(deps: DispatchToolDeps): Dispa
344
345
  agent: resolution.agentId,
345
346
  task: request.task,
346
347
  ...(request.briefing !== undefined ? { briefing: request.briefing } : {}),
348
+ ...(request.context ? { context: structuredClone(request.context) } : {}),
349
+ ...(request.contextSeed ? { workerContext: structuredClone(request.contextSeed.provenance) } : {}),
347
350
  ...(request.worktree === true
348
351
  ? {
349
352
  worktree: true as const,
@@ -510,6 +513,26 @@ export function createDispatchAdmissionController(deps: DispatchToolDeps): Dispa
510
513
  }
511
514
  const parsed = parseRequests(args);
512
515
  if (!parsed.ok) return shapeRejection(args, parsed.message);
516
+ try {
517
+ const inheriting = parsed.requests.filter((request) => request.context && request.context.mode !== "isolated");
518
+ if (inheriting.length > 0) {
519
+ const source = deps.captureWorkerContext?.();
520
+ if (!source) throw new Error("worker context: no active parent conversation is available");
521
+ for (const request of inheriting) {
522
+ const policy = request.context;
523
+ if (!policy || policy.mode === "isolated") continue;
524
+ request.contextSeed = selectWorkerContext(
525
+ source,
526
+ policy,
527
+ request.intent
528
+ ? [...request.intent.readRoots, ...request.intent.relevantPaths, ...request.intent.writeRoots]
529
+ : [],
530
+ );
531
+ }
532
+ }
533
+ } catch (error) {
534
+ return preparationFailure(args, error);
535
+ }
513
536
  if (
514
537
  args.mode !== undefined &&
515
538
  !["parallel", "sequential", "pipeline", "compete", "council"].includes(String(args.mode))
@@ -755,7 +778,7 @@ export function createDispatchAdmissionController(deps: DispatchToolDeps): Dispa
755
778
  topology === "compete" ||
756
779
  tasks.some((task) => task.node !== "local" || task.failover === "approved");
757
780
  if (!planScale) {
758
- const marked = parsed.requests.some((request) => request.intent !== undefined)
781
+ const marked = parsed.requests.some((request) => request.intent !== undefined || request.contextSeed !== undefined)
759
782
  ? markPrepared(
760
783
  withResolvedDispatchPlan(args, {
761
784
  version: 3,
@@ -1,3 +1,4 @@
1
+ import { parseWorkerContextPolicy } from "../domains/context/worker/contract.js";
1
2
  /** Pure model-argument parsing; every returned DispatchRequest has a concrete agent id. */
2
3
 
3
4
  import { parseResultSummaryMaxBytes } from "../domains/agents/result-contract.js";
@@ -168,6 +169,13 @@ function dispatchRequestFromArgs(
168
169
  }
169
170
  : {}),
170
171
  };
172
+ if (args.context !== undefined) {
173
+ try {
174
+ request.context = parseWorkerContextPolicy(args.context);
175
+ } catch (error) {
176
+ return { ok: false, message: error instanceof Error ? error.message : String(error) };
177
+ }
178
+ }
171
179
  if ("briefing" in args && args.briefing !== undefined) {
172
180
  if (typeof args.briefing !== "string") return { ok: false, message: "briefing must be a string" };
173
181
  const briefing = args.briefing.trim();
@@ -1,3 +1,9 @@
1
+ import {
2
+ parseWorkerContextPolicy,
3
+ type WorkerContextPolicy,
4
+ type WorkerContextProvenance,
5
+ } from "../domains/context/worker/contract.js";
6
+ import { parseWorkerContextProvenance } from "../worker/context-seed.js";
1
7
  /**
2
8
  * Plan-scale dispatch detection and the operator-facing plan artifact.
3
9
  *
@@ -61,6 +67,8 @@ export interface DispatchPlanTaskView {
61
67
  task: string;
62
68
  /** Exact canonical bounded briefing approved for this task. */
63
69
  briefing?: string;
70
+ context?: WorkerContextPolicy;
71
+ workerContext?: WorkerContextProvenance;
64
72
  worktree?: true;
65
73
  apply?: "merge" | "preserve";
66
74
  worktreeDestination?: string;
@@ -138,6 +146,8 @@ export interface ResolvedDispatchPlanArtifact {
138
146
  Pick<
139
147
  DispatchPlanTaskView,
140
148
  | "briefing"
149
+ | "context"
150
+ | "workerContext"
141
151
  | "worktree"
142
152
  | "apply"
143
153
  | "worktreeDestination"
@@ -175,8 +185,12 @@ export function withResolvedPlanTaskPin(
175
185
  options: { pinTask?: boolean; pinBriefing?: boolean } = {},
176
186
  ): DispatchRequest {
177
187
  if (task === undefined) return request;
188
+ if (task.workerContext !== undefined && request.contextSeed?.provenance.contentHash !== task.workerContext.contentHash)
189
+ throw new Error("worker context: admitted seed no longer matches the plan");
178
190
  const {
179
191
  briefing: _briefing,
192
+ context: _context,
193
+ contextSeed: _contextSeed,
180
194
  failover: _failover,
181
195
  allowedCandidates: _candidates,
182
196
  agentSelection: _agentSelection,
@@ -188,6 +202,8 @@ export function withResolvedPlanTaskPin(
188
202
  return {
189
203
  ...base,
190
204
  agentId: task.agent,
205
+ ...(task.context ? { context: structuredClone(task.context) } : {}),
206
+ ...(task.workerContext && request.contextSeed ? { contextSeed: structuredClone(request.contextSeed) } : {}),
191
207
  executionRole: task.executionRole,
192
208
  ...(request.reservation !== undefined &&
193
209
  (task.stepId !== null || (task.role !== undefined && task.position !== undefined))
@@ -476,6 +492,10 @@ function renderPlanText(
476
492
  if (agentReasons !== undefined && agentReasons.length > 0)
477
493
  lines.push(` agent-exclusions=${agentReasons.join(";")}`);
478
494
  }
495
+ if (task.context !== undefined)
496
+ lines.push(
497
+ ` context=${task.context.mode}${task.workerContext ? ` tokens=${task.workerContext.estimatedTokens} omitted=${task.workerContext.omittedMessages} sha256=${task.workerContext.contentHash}` : ""}`,
498
+ );
479
499
  if (task.briefing !== undefined) {
480
500
  lines.push(
481
501
  ` briefing_bytes=${Buffer.byteLength(task.briefing, "utf8")} briefing_sha256=${createHash("sha256").update(task.briefing, "utf8").digest("hex")} briefing_preview=${JSON.stringify(safeField(task.briefing, false))}`,
@@ -497,10 +517,20 @@ function renderPlanText(
497
517
 
498
518
  function isResolvedTask(value: unknown): value is ResolvedDispatchPlanArtifact["tasks"][number] {
499
519
  if (!isRecord(value)) return false;
520
+ try {
521
+ const context = value.context === undefined ? undefined : parseWorkerContextPolicy(value.context);
522
+ const provenance = value.workerContext === undefined ? undefined : parseWorkerContextProvenance(value.workerContext);
523
+ if (provenance && provenance.mode !== context?.mode) return false;
524
+ if (context && context.mode !== "isolated" && !provenance) return false;
525
+ } catch {
526
+ return false;
527
+ }
500
528
  const allowedKeys = new Set([
501
529
  "agent",
502
530
  "task",
503
531
  "briefing",
532
+ "context",
533
+ "workerContext",
504
534
  "worktree",
505
535
  "apply",
506
536
  "worktreeDestination",
@@ -821,6 +851,8 @@ export function resolvedDispatchPlanFromArgs(args: Record<string, unknown>): Res
821
851
  agent: task.agent.trim(),
822
852
  task: task.task.trim(),
823
853
  ...(task.briefing !== undefined ? { briefing: task.briefing.trim() } : {}),
854
+ ...(task.context !== undefined ? { context: parseWorkerContextPolicy(task.context) } : {}),
855
+ ...(task.workerContext !== undefined ? { workerContext: structuredClone(task.workerContext) } : {}),
824
856
  ...(task.worktree === true
825
857
  ? {
826
858
  worktree: true as const,
@@ -1,6 +1,7 @@
1
1
  import { type Static, Type } from "typebox";
2
2
  import type { FleetSettings } from "../core/defaults.js";
3
3
  import { RESULT_SUMMARY_MAX_BYTES_CEILING } from "../domains/agents/result-contract.js";
4
+ import { WORKER_CONTEXT_SPLICE_TOKENS } from "../domains/context/worker/contract.js";
4
5
  import { DISPATCH_BRIEFING_MAX_BYTES } from "../domains/dispatch/validation.js";
5
6
  import { StringEnum } from "../engine/ai.js";
6
7
  import { TOOL_PROFILE_NAMES } from "./profiles.js";
@@ -116,7 +117,6 @@ const DispatchIntentSchema = Type.Object(
116
117
  },
117
118
  );
118
119
 
119
- const DISPATCH_DEFS = { intent: DispatchIntentSchema, budget: DispatchBudgetSchema };
120
120
  const IntentRef = Type.Unsafe<Static<typeof DispatchIntentSchema>>({ $ref: "#/$defs/intent" });
121
121
  const BudgetRef = Type.Unsafe<Static<typeof DispatchBudgetSchema>>({ $ref: "#/$defs/budget" });
122
122
 
@@ -136,6 +136,34 @@ const MODE_DESCRIPTION: Record<"full" | "noCouncil" | "noCompete" | "neither", s
136
136
  * Optional blocks come and go with `composition`, and the `mode` enum only
137
137
  * names the modes whose fields are advertised.
138
138
  */
139
+ const WorkerContextSchema = Type.Union(
140
+ [
141
+ Type.Object({ mode: Type.Literal("isolated") }, { additionalProperties: false }),
142
+ Type.Object(
143
+ { mode: Type.Literal("fork"), max_tokens: Type.Optional(Type.Integer({ minimum: 256, maximum: 262144 })) },
144
+ { additionalProperties: false },
145
+ ),
146
+ Type.Object(
147
+ {
148
+ mode: Type.Literal("splice"),
149
+ max_tokens: Type.Optional(Type.Integer({ minimum: 256, maximum: 262144 })),
150
+ paths: Type.Optional(Type.Array(Type.String({ minLength: 1, maxLength: 4096 }), { minItems: 1, maxItems: 64 })),
151
+ refs: Type.Optional(Type.Array(Type.String({ minLength: 1, maxLength: 4096 }), { minItems: 1, maxItems: 64 })),
152
+ },
153
+ { additionalProperties: false },
154
+ ),
155
+ ],
156
+ {
157
+ description: `Parent conversation: isolated (default), fork (native history; never silently truncated), or splice (selected text evidence, default ${WORKER_CONTEXT_SPLICE_TOKENS} tokens). refs: tool:<call-id> or message:<index> in the current snapshot. Batch defaults may be overridden per task.`,
158
+ },
159
+ );
160
+ const ContextRef = Type.Unsafe<Static<typeof WorkerContextSchema>>({ $ref: "#/$defs/workerContext" });
161
+ const DISPATCH_DEFS = {
162
+ intent: DispatchIntentSchema,
163
+ budget: DispatchBudgetSchema,
164
+ workerContext: WorkerContextSchema,
165
+ };
166
+
139
167
  export function buildDispatchParameters(composition: DispatchSchemaComposition = FULL_DISPATCH_SCHEMA_COMPOSITION) {
140
168
  const modes = [
141
169
  "parallel",
@@ -178,6 +206,7 @@ export function buildDispatchParameters(composition: DispatchSchemaComposition =
178
206
  // tokens advertising them twice).
179
207
  Type.Object({
180
208
  task: Type.String({ description: "The assignment, with expected output and constraints." }),
209
+ context: Type.Optional(ContextRef),
181
210
  briefing: Type.Optional(
182
211
  Type.String({ description: `Per-task parent context, max ${DISPATCH_BRIEFING_MAX_BYTES} UTF-8 bytes.` }),
183
212
  ),
@@ -288,6 +317,7 @@ export function buildDispatchParameters(composition: DispatchSchemaComposition =
288
317
  : "Default recipe id for tasks without their own agent, or auto (default coder).",
289
318
  }),
290
319
  ),
320
+ context: Type.Optional(ContextRef),
291
321
  briefing: Type.Optional(
292
322
  Type.String({
293
323
  description: `Parent context for task, or the shared default for tasks; never instructions. Max ${DISPATCH_BRIEFING_MAX_BYTES} UTF-8 bytes.`,
@@ -1,5 +1,6 @@
1
1
  import type { SafeEventBus } from "../core/event-bus.js";
2
2
  import type { AgentSpec } from "../domains/agents/spec.js";
3
+ import type { WorkerContextSnapshot } from "../domains/context/worker/contract.js";
3
4
  import type { DispatchContract, DispatchRequest } from "../domains/dispatch/contract.js";
4
5
  import type { AgentRoleFactsResolver } from "../domains/dispatch/execution-role.js";
5
6
  import type { AutonomyLevel } from "../domains/safety/autonomy.js";
@@ -83,6 +84,8 @@ export type DispatchExecutionSnapshot =
83
84
  | DispatchListExecutionSnapshot;
84
85
 
85
86
  export interface DispatchToolDeps {
87
+ /** Synchronous read of the active model-visible history, before admission can park. */
88
+ captureWorkerContext?: () => WorkerContextSnapshot | null;
86
89
  dispatch: DispatchContract;
87
90
  bus?: SafeEventBus;
88
91
  /** Instance-scoped owner for ordinary tool-owned run streams and monitor tails. */
@@ -61,7 +61,7 @@ export function createDispatchTool(
61
61
  // Delegation prompt sections. This description says only what the call
62
62
  // shape is; every field below carries one discriminating sentence.
63
63
  description:
64
- "Delegate to a fleet worker: task dispatches one assignment, tasks dispatches a batch, never both. briefing is bounded parent context, never instructions. A call auto-waits for the sealed receipt; detach:true returns run ids to monitor and collect later. Declare intent on every dispatch. list:true shows the roster.",
64
+ "Delegate to a fleet worker: task dispatches one assignment, tasks dispatches a batch, never both. context selects isolated (default), fork (native only), or splice inheritance. briefing adds bounded parent evidence. A call auto-waits for the sealed receipt; detach:true returns run ids to monitor and collect later. Declare intent on every dispatch. list:true shows the roster.",
65
65
  // Composed once per session: council, compete, and adaptive-routing fields
66
66
  // are advertised only when the fleet can exercise them (see dispatch-schema.ts).
67
67
  parameters: buildDispatchParameters(deps.getSchemaComposition?.() ?? FULL_DISPATCH_SCHEMA_COMPOSITION),
@@ -0,0 +1,169 @@
1
+ import path from "node:path";
2
+ import type { TSchema } from "typebox";
3
+ import { Value } from "typebox/value";
4
+ import { parse as parseYaml } from "yaml";
5
+ import { runCommandVector } from "../core/safe-exec.js";
6
+ import type { DynamicToolName } from "../core/tool-names.js";
7
+ import { extensionToolName, resolveExtensionEntrypoint } from "../domains/extensions/command-schema.js";
8
+ import { parseExtensionManifest } from "../domains/extensions/discovery.js";
9
+ import { extensionContentDigestWithCapture } from "../domains/extensions/integrity.js";
10
+ import { listInstalledExtensions } from "../domains/extensions/state.js";
11
+ import {
12
+ type ExtensionCommandTool,
13
+ type ExtensionDiagnostic,
14
+ isLoadableExtension,
15
+ type LoadableExtension,
16
+ } from "../domains/extensions/types.js";
17
+ import type { ToolRegistry, ToolSpec } from "./registry.js";
18
+
19
+ const MAX_INPUT_BYTES = 64 * 1024;
20
+
21
+ /** Serialize a fixed argv vector only for the existing shell safety classifier. No shell executes this text. */
22
+ function quoted(value: string): string {
23
+ return `'${value.replaceAll("'", "'\\''")}'`;
24
+ }
25
+
26
+ function jsonInput(args: Record<string, unknown>): string {
27
+ const input = JSON.stringify(args);
28
+ if (Buffer.byteLength(input) > MAX_INPUT_BYTES) throw new Error(`command tool input exceeds ${MAX_INPUT_BYTES} bytes`);
29
+ return input;
30
+ }
31
+
32
+ function commandVector(extension: LoadableExtension, tool: ExtensionCommandTool): { file: string; args: string[] } {
33
+ const entrypoint = resolveExtensionEntrypoint(extension.rootPath, tool.entrypoint);
34
+ return tool.runtime === "node"
35
+ ? { file: process.execPath, args: ["--", entrypoint] }
36
+ : { file: "python3", args: ["-I", entrypoint] };
37
+ }
38
+
39
+ /** Parse declarations from the exact manifest bytes included in the verified tree. */
40
+ function verifiedCommands(extension: LoadableExtension): ExtensionCommandTool[] {
41
+ const manifestName = path.basename(extension.manifestPath);
42
+ const verified = extensionContentDigestWithCapture(extension.rootPath, { capture: [manifestName] });
43
+ if (verified.digest !== extension.provenance.contentDigest)
44
+ throw new Error("installed extension changed while loading tools");
45
+ const bytes = verified.captured.get(manifestName);
46
+ if (!bytes) throw new Error("verified extension manifest bytes are absent");
47
+ const parsed = parseExtensionManifest(
48
+ manifestName.endsWith(".json") ? JSON.parse(bytes.toString("utf8")) : parseYaml(bytes.toString("utf8")),
49
+ extension.manifestPath,
50
+ );
51
+ if (!parsed.manifest || parsed.diagnostics.some((entry) => entry.type === "error"))
52
+ throw new Error("verified extension manifest is invalid");
53
+ if (parsed.manifest.id !== extension.id || parsed.manifest.version !== extension.version)
54
+ throw new Error("verified extension identity changed while loading tools");
55
+ return parsed.manifest.capabilities?.tools ?? [];
56
+ }
57
+
58
+ function createCommandTool(extension: LoadableExtension, tool: ExtensionCommandTool, cwd: string): ToolSpec {
59
+ const name = extensionToolName(extension.id, tool.name) as DynamicToolName;
60
+ const vector = commandVector(extension, tool);
61
+ return {
62
+ name,
63
+ description: `${tool.description}\nHarness extension ${extension.id}@${extension.version}; runs an installed command with JSON input and output.`,
64
+ parameters: tool.inputSchema as TSchema,
65
+ baseActionClass: "execute",
66
+ executionMode: "sequential",
67
+ sourceInfo: { path: extension.manifestPath, scope: "domain", extension: extension.provenance },
68
+ metadata: {
69
+ objective: tool.description,
70
+ uiLabel: `${extension.id}/${tool.name}`,
71
+ retrySafety: "not_retry_safe",
72
+ resultSizePolicy: { kind: "bounded", maxBytes: tool.maxOutputBytes ?? 600000 },
73
+ costLatency: "local_slow",
74
+ },
75
+ safetyCall(args) {
76
+ // The vector stays execution-class even for inputs such as {op:"read"}.
77
+ let input = "[invalid JSON input]";
78
+ try {
79
+ input = jsonInput(args);
80
+ } catch {
81
+ /* The body reports bounded input validation. */
82
+ }
83
+ return { tool: "bash", args: { command: [vector.file, ...vector.args, input].map(quoted).join(" "), cwd } };
84
+ },
85
+ async run(args, options) {
86
+ try {
87
+ const input = jsonInput(args);
88
+ if (!Value.Check(tool.inputSchema as TSchema, args))
89
+ return { kind: "error", message: `${name}: input does not match its declared JSON schema` };
90
+ if (options?.signal?.aborted) return { kind: "error", message: `${name}: aborted before execution` };
91
+ const current = listInstalledExtensions(cwd).find(
92
+ (entry) => entry.id === extension.id && isLoadableExtension(entry),
93
+ );
94
+ if (
95
+ !current ||
96
+ !isLoadableExtension(current) ||
97
+ current.scope !== extension.scope ||
98
+ current.provenance.canonicalRoot !== extension.provenance.canonicalRoot ||
99
+ current.provenance.contentDigest !== extension.provenance.contentDigest
100
+ ) {
101
+ return {
102
+ kind: "error",
103
+ message: `${name}: extension disabled, removed, replaced, or changed; restart after reviewing its installation`,
104
+ };
105
+ }
106
+ const activeVector = commandVector(current, tool);
107
+ const result = await runCommandVector(activeVector.file, [...activeVector.args, input], {
108
+ cwd,
109
+ workspaceRoot: cwd,
110
+ timeoutMs: tool.timeoutMs ?? 120000,
111
+ maxOutputBytes: tool.maxOutputBytes ?? 600000,
112
+ ...(options?.signal ? { signal: options.signal } : {}),
113
+ });
114
+ const details = {
115
+ extension: extension.provenance,
116
+ argv: [result.file, ...result.args],
117
+ cwd: result.cwd,
118
+ exitCode: result.exitCode,
119
+ durationMs: result.durationMs,
120
+ aborted: result.aborted,
121
+ timedOut: result.timedOut,
122
+ outputCapped: result.outputCapped,
123
+ stderr: result.stderr,
124
+ };
125
+ if (result.aborted || result.timedOut || result.outputCapped || result.exitCode !== 0) {
126
+ const reason = result.aborted
127
+ ? "aborted"
128
+ : result.timedOut
129
+ ? "timed out"
130
+ : result.outputCapped
131
+ ? "output limit exceeded"
132
+ : `exited with code ${result.exitCode}`;
133
+ return { kind: "error", message: `${name}: ${reason}`, details };
134
+ }
135
+ try {
136
+ return { kind: "ok", output: JSON.stringify(JSON.parse(result.stdout)), details };
137
+ } catch {
138
+ return { kind: "error", message: `${name}: command stdout must contain one JSON value`, details };
139
+ }
140
+ } catch (error) {
141
+ return { kind: "error", message: `${name}: ${error instanceof Error ? error.message : String(error)}` };
142
+ }
143
+ },
144
+ };
145
+ }
146
+
147
+ /**
148
+ * Freeze installed harness tool schemas at registry construction, in sessions and native workers.
149
+ * Registration never imports or executes package code. Lifecycle mutations revoke calls immediately;
150
+ * new or updated schemas enter the next session/worker, keeping approved worker surfaces stable.
151
+ */
152
+ export function registerHarnessExtensionTools(registry: ToolRegistry, cwd = process.cwd()): ExtensionDiagnostic[] {
153
+ const diagnostics: ExtensionDiagnostic[] = [];
154
+ for (const extension of listInstalledExtensions(cwd)) {
155
+ if (!isLoadableExtension(extension) || !extension.capabilities) continue;
156
+ try {
157
+ const tools = verifiedCommands(extension).map((tool) => createCommandTool(extension, tool, path.resolve(cwd)));
158
+ for (const tool of tools) if (registry.get(tool.name)) throw new Error(`tool collision: ${tool.name}`);
159
+ for (const tool of tools) registry.register(tool);
160
+ } catch (error) {
161
+ diagnostics.push({
162
+ type: "error",
163
+ path: extension.rootPath,
164
+ message: `extension ${extension.id}: ${error instanceof Error ? error.message : String(error)}`,
165
+ });
166
+ }
167
+ }
168
+ return diagnostics;
169
+ }
@@ -62,6 +62,10 @@ export const OBSERVE_SELF_CAPS = {
62
62
  contextDocs: 16 * 1024,
63
63
  contextSkills: 50 * 1024,
64
64
  contextWorkspace: 50 * 1024,
65
+ // Library rows are metadata: name, owner, origin, availability, invocation.
66
+ // A full page of 50 stays well inside this, and a smaller cap than the
67
+ // skills catalog is what keeps a catalog read from crowding out the turn.
68
+ contextLibrary: 16 * 1024,
65
69
  } as const;
66
70
 
67
71
  // Per-turn observation budget pool. One pool per sessionId:turnId shared by
@@ -81,7 +81,13 @@ const OBSERVE_ENVELOPE_SELF_CAPS: ReadonlyArray<[BuiltinToolName, () => number]>
81
81
  [ToolNames.CodeNav, () => OBSERVE_SELF_CAPS.codeNav],
82
82
  [
83
83
  ToolNames.Context,
84
- () => Math.max(OBSERVE_SELF_CAPS.contextDocs, OBSERVE_SELF_CAPS.contextSkills, OBSERVE_SELF_CAPS.contextWorkspace),
84
+ () =>
85
+ Math.max(
86
+ OBSERVE_SELF_CAPS.contextDocs,
87
+ OBSERVE_SELF_CAPS.contextSkills,
88
+ OBSERVE_SELF_CAPS.contextWorkspace,
89
+ OBSERVE_SELF_CAPS.contextLibrary,
90
+ ),
85
91
  ],
86
92
  ];
87
93
 
@@ -77,6 +77,8 @@ export function resolveToolPromptHint(
77
77
  export interface ToolSourceInfo {
78
78
  path: string;
79
79
  scope: ToolSourceScope;
80
+ /** Verified installed capability identity, when this is a harness extension tool. */
81
+ extension?: import("../domains/extensions/types.js").ExtensionProvenance;
80
82
  }
81
83
 
82
84
  export interface ToolResultSizePolicy {
@@ -127,6 +129,8 @@ export interface ToolSpec {
127
129
  parameters: TSchema;
128
130
  /** Base action class for this tool when arguments are trivial. */
129
131
  baseActionClass: ActionClass;
132
+ /** Harness-owned projection of executable effects for the safety engine. Never package-supplied code. */
133
+ safetyCall?(args: Record<string, unknown>): ClassifierCall;
130
134
  /**
131
135
  * Per-tool execution mode. Read-only tools set `"parallel"` so the model
132
136
  * can batch scans; mutating or filesystem-racing tools set `"sequential"`
@@ -532,7 +536,21 @@ export function createRegistry(deps: RegistryDeps): ToolRegistry {
532
536
  return { kind: "terminal", verdict: { kind: "not_visible", reason: `tool not registered: ${call.tool}` } };
533
537
  }
534
538
  const level = deps.autonomy?.() ?? DEFAULT_AUTONOMY_LEVEL;
535
- const decision = applyRegisteredToolClassification(deps.safety.evaluate(call, grant ? "confirmed" : undefined), spec);
539
+ const directDecision = applyRegisteredToolClassification(
540
+ deps.safety.evaluate(call, grant ? "confirmed" : undefined),
541
+ spec,
542
+ );
543
+ const projectedCall = spec.safetyCall?.(call.args ?? {});
544
+ const projectedDecision =
545
+ projectedCall && directDecision.kind !== "block"
546
+ ? applyRegisteredToolClassification(deps.safety.evaluate(projectedCall, grant ? "confirmed" : undefined), spec)
547
+ : undefined;
548
+ // Both the public capability and its underlying effects must pass. A trusted
549
+ // projection cannot bypass a rule targeting the capability's own name.
550
+ const decision =
551
+ directDecision.kind === "block" || (directDecision.kind === "ask" && projectedDecision?.kind !== "block")
552
+ ? directDecision
553
+ : (projectedDecision ?? directDecision);
536
554
  // Stage 1, the safety net (level-independent): engine blocks are final;
537
555
  // engine asks are confirm rails that park at every level. read-only is
538
556
  // the exception by definition: approvals are never invoked there, so a
@@ -168,6 +168,11 @@ export function receiptEvidenceLabels(
168
168
  ...receiptAdmissionLabels(receipt),
169
169
  ...receiptActivityLabels(receipt, status),
170
170
  briefing,
171
+ ...(receipt.workerContext
172
+ ? [
173
+ `context=${receipt.workerContext.mode} tokens:${receipt.workerContext.estimatedTokens} omitted:${receipt.workerContext.omittedMessages} sha256:${receipt.workerContext.contentHash}`,
174
+ ]
175
+ : []),
171
176
  projectContext,
172
177
  ];
173
178
  }