@iowarp/clio-coder 0.4.5 → 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 (700) hide show
  1. package/.claude-plugin/marketplace.json +283 -0
  2. package/CHANGELOG.md +74 -0
  3. package/CONTRIBUTING.md +116 -38
  4. package/NOTICE +24 -0
  5. package/README.md +341 -682
  6. package/dist/{acp-H3CU2HBQ.js → acp-W3Y3TRHD.js} +12 -12
  7. package/dist/{agents-IXQQZ7BD.js → agents-J4ICNLQ3.js} +57 -56
  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-R7KYF7N3.js → auth-X2UJUMOC.js} +25 -25
  13. package/dist/{builtins-CRFDQUVP.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-SE4ZKILO.js → chunk-3XE4NRLF.js} +30 -9
  20. package/dist/{chunk-YYB3MC65.js → chunk-4MFBBY2Z.js} +3 -3
  21. package/dist/{chunk-5VTJP36Q.js → chunk-4N2RZ4TO.js} +2 -2
  22. package/dist/{chunk-FKIOX6DS.js → chunk-4QKAITQT.js} +10 -5
  23. package/dist/chunk-4UHVS5T7.js +207 -0
  24. package/dist/{chunk-VLPTKCKT.js → chunk-5AJPUR72.js} +6 -6
  25. package/dist/{chunk-5CY4Q6QI.js → chunk-5EQO5NWP.js} +105 -3
  26. package/dist/{chunk-RXIOCVBZ.js → chunk-65BGHOUR.js} +8 -5
  27. package/dist/{chunk-T53XI6I7.js → chunk-6CA2BHOR.js} +2 -2
  28. package/dist/{chunk-HL26ADLH.js → chunk-6CB2IL4N.js} +2 -1
  29. package/dist/{chunk-HR3HPQ76.js → chunk-6LRLOJHQ.js} +3 -3
  30. package/dist/{chunk-HXHFDHB6.js → chunk-6TAATXXH.js} +6 -6
  31. package/dist/{chunk-WFKDPU7U.js → chunk-6YHPAAZR.js} +3 -3
  32. package/dist/{chunk-ZMZQEBKI.js → chunk-7EEGBKV4.js} +11 -11
  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-MDU3C27C.js → chunk-BO4XV5VX.js} +8 -8
  36. package/dist/{chunk-KF6GFW6O.js → chunk-BQQ5MXUC.js} +11 -11
  37. package/dist/{chunk-K6RDB7IA.js → chunk-C3G5PNUO.js} +23 -23
  38. package/dist/{chunk-SRZOW5L2.js → chunk-C6GEXX4L.js} +1 -1
  39. package/dist/{chunk-U2JOLB7O.js → chunk-CE64C5K5.js} +227 -72
  40. package/dist/chunk-CP3HIR5H.js +2119 -0
  41. package/dist/{chunk-BBV5TKE6.js → chunk-CPXGJI2A.js} +2 -2
  42. package/dist/{chunk-5DDOTTG4.js → chunk-CULVKYTK.js} +5 -5
  43. package/dist/{chunk-F34AR6O3.js → chunk-D2T66PDV.js} +6 -6
  44. package/dist/{chunk-NF3BK5WR.js → chunk-DACXIVVF.js} +5 -5
  45. package/dist/{chunk-4SVIVOMC.js → chunk-DLIYANB7.js} +20 -15
  46. package/dist/{chunk-E3BQTQUP.js → chunk-DO7M3LSX.js} +9 -9
  47. package/dist/{chunk-2QPI3TR3.js → chunk-DVJL77SO.js} +2 -2
  48. package/dist/chunk-EM2WNQS2.js +93 -0
  49. package/dist/{chunk-ODUTYZIU.js → chunk-EUEXGXXR.js} +5 -5
  50. package/dist/{chunk-UL36QJX6.js → chunk-EUZRMP4Y.js} +18 -16
  51. package/dist/{chunk-R6MAYTMS.js → chunk-G4LGUTOE.js} +4 -4
  52. package/dist/{chunk-CBSKDFWL.js → chunk-GEVQNST4.js} +2 -2
  53. package/dist/{chunk-XXBQKW32.js → chunk-GFQ7P2UF.js} +7 -7
  54. package/dist/{chunk-SBZX6ARC.js → chunk-GI5RRMAH.js} +14 -14
  55. package/dist/{chunk-KDWLXVMN.js → chunk-GVZFCJHE.js} +343 -113
  56. package/dist/{chunk-633EXGZA.js → chunk-GXIWHXDB.js} +3 -3
  57. package/dist/{chunk-LUL5Z66S.js → chunk-HOX4YZ2K.js} +6 -5
  58. package/dist/chunk-HRAKUPIH.js +57 -0
  59. package/dist/{chunk-KYKNBD4Y.js → chunk-IJMW64DX.js} +978 -258
  60. package/dist/{chunk-DIMRLNIC.js → chunk-IMOD2YPV.js} +16 -9
  61. package/dist/{chunk-6CDNRHWH.js → chunk-IQCNVLO6.js} +28 -8
  62. package/dist/{chunk-UTUNT5QL.js → chunk-ISNCCX42.js} +9 -9
  63. package/dist/{chunk-RLTT5GVY.js → chunk-IZYTT3CD.js} +9 -5
  64. package/dist/{chunk-5ZMXGW7P.js → chunk-KAFMW7WM.js} +4 -85
  65. package/dist/chunk-KKEYGFX4.js +915 -0
  66. package/dist/{chunk-HHVJNVUJ.js → chunk-KS7ETA3P.js} +2 -2
  67. package/dist/{chunk-UXAC2FX4.js → chunk-L3Z5ANCV.js} +7 -7
  68. package/dist/{chunk-EHCPSZJF.js → chunk-LBFQMYS3.js} +2 -2
  69. package/dist/{chunk-QEQISF75.js → chunk-LK2FN5JY.js} +1 -1
  70. package/dist/{chunk-URBGEOH3.js → chunk-M6Z2V6YU.js} +5 -5
  71. package/dist/{chunk-DRD2A54W.js → chunk-MBJO5VNZ.js} +18 -18
  72. package/dist/chunk-MNQN3X6Y.js +595 -0
  73. package/dist/{chunk-GXCCHKN6.js → chunk-MZHXENL7.js} +7 -7
  74. package/dist/chunk-MZNWZUJM.js +1801 -0
  75. package/dist/{chunk-7YJWEF2L.js → chunk-N37QC5FV.js} +5 -5
  76. package/dist/{chunk-WLMSOT73.js → chunk-NCCQ6DVS.js} +7 -7
  77. package/dist/{chunk-TZ7MFRG4.js → chunk-NO7J45X6.js} +170 -53
  78. package/dist/chunk-OH3YYA3B.js +15 -0
  79. package/dist/{chunk-22PQ4TX4.js → chunk-P4DL2LM5.js} +16 -77
  80. package/dist/{chunk-R6MICQYU.js → chunk-PFLOULP3.js} +4 -4
  81. package/dist/{chunk-MC3JSVR6.js → chunk-QJMRYTCX.js} +7 -7
  82. package/dist/{chunk-ILJ7DWGE.js → chunk-QKWL7SYE.js} +12 -12
  83. package/dist/chunk-R2CT5YDO.js +66 -0
  84. package/dist/chunk-RFCKPS2V.js +26 -0
  85. package/dist/{chunk-ONRTXOZY.js → chunk-RTLNFZMD.js} +12 -4
  86. package/dist/{chunk-U7H5WRG5.js → chunk-RXFPB32E.js} +8 -6
  87. package/dist/{chunk-S32UQ5GL.js → chunk-SEDI5K5B.js} +18 -18
  88. package/dist/{chunk-ICO4TQ2F.js → chunk-SELG4SUR.js} +41 -25
  89. package/dist/{chunk-YEJIG7LN.js → chunk-SER7RRAE.js} +27 -832
  90. package/dist/{chunk-K2HL3GBL.js → chunk-T4TY5GG3.js} +165 -15
  91. package/dist/chunk-T7QQBNLH.js +691 -0
  92. package/dist/{chunk-HGSLRG33.js → chunk-TLTGZTXI.js} +3 -3
  93. package/dist/chunk-TZ6UVP2H.js +637 -0
  94. package/dist/{chunk-EWD5P3GK.js → chunk-TZHN5ITX.js} +13 -41
  95. package/dist/{chunk-7TKWWPD7.js → chunk-U3TPUXOQ.js} +398 -253
  96. package/dist/{chunk-GNQRWTMY.js → chunk-UA3W4FGC.js} +6 -6
  97. package/dist/{chunk-O2RQ7LCK.js → chunk-UA6W4XFJ.js} +2 -2
  98. package/dist/chunk-UWD3JD5X.js +709 -0
  99. package/dist/chunk-V4ZKOKRB.js +13433 -0
  100. package/dist/{chunk-NC4KV7EL.js → chunk-VCRVEDUC.js} +5 -5
  101. package/dist/{chunk-I7VLWRK2.js → chunk-VMATUZB6.js} +12 -10
  102. package/dist/{chunk-J2FYEQ5L.js → chunk-VTYHHQ57.js} +2 -2
  103. package/dist/chunk-WB7POC6M.js +891 -0
  104. package/dist/{chunk-GVYWZNRK.js → chunk-WBVKKTUT.js} +2 -2
  105. package/dist/{chunk-EHOSNVVM.js → chunk-WLHX3MM5.js} +6 -2
  106. package/dist/{chunk-SDWNDICN.js → chunk-WN552PKN.js} +573 -316
  107. package/dist/{chunk-TEG3RYVZ.js → chunk-WT5TRMO4.js} +51 -26
  108. package/dist/{chunk-NY6IWDVU.js → chunk-WURGVOZJ.js} +56 -12
  109. package/dist/{chunk-7WUZEB2M.js → chunk-XR3XJN2M.js} +2 -2
  110. package/dist/chunk-XW2UZICE.js +372 -0
  111. package/dist/{chunk-FSTIBAGM.js → chunk-XZ6UFQ52.js} +11 -11
  112. package/dist/chunk-Y3JU5RPK.js +8 -0
  113. package/dist/chunk-YKRJTYNP.js +1143 -0
  114. package/dist/{chunk-7HBHHVCK.js → chunk-YPRSNUTC.js} +2 -2
  115. package/dist/{chunk-PWWSIB2A.js → chunk-ZGIGW4ZG.js} +5 -5
  116. package/dist/cli/index.js +34 -36
  117. package/dist/{clio-5I2IBFYL.js → clio-L2P7S2R2.js} +9 -9
  118. package/dist/{code-nav-YXIAEZVS.js → code-nav-B5LNX4KU.js} +25 -25
  119. package/dist/{components-TNIKXCBH.js → components-63MMQKUT.js} +6 -6
  120. package/dist/{config-Y2JDJ3JJ.js → config-YXARKGTX.js} +81 -77
  121. package/dist/configure-LMVQJ46J.js +85 -0
  122. package/dist/{context-QQ53HSGJ.js → context-7HJEWTTP.js} +92 -48
  123. package/dist/{context-S2EEC3EJ.js → context-XSZKKFBW.js} +14 -14
  124. package/dist/{context-P5YSEO55.js → context-YG2LZDYZ.js} +67 -64
  125. package/dist/{context-clear-TMEQCOTH.js → context-clear-AC5NXHM2.js} +64 -61
  126. package/dist/{context-index-HP2JFUWA.js → context-index-KKTPRV5G.js} +3 -3
  127. package/dist/{context-map-INTXD54D.js → context-map-T7ROR5D5.js} +4 -4
  128. package/dist/{context-working-set-CNLSQN5K.js → context-working-set-F4Q4J3NS.js} +15 -12
  129. package/dist/{detail-5572VLBO.js → detail-H73BEF2N.js} +65 -62
  130. package/dist/{dispatch-runner-FRHD6P2O.js → dispatch-runner-3RY5FSJC.js} +83 -80
  131. package/dist/{doctor-N3LCM2LG.js → doctor-EQYJOGUG.js} +47 -32
  132. package/dist/{eval-BUU3ZOUZ.js → eval-4P7O6CCE.js} +114 -50
  133. package/dist/{evidence-DTGEN456.js → evidence-D6GUSYJW.js} +64 -61
  134. package/dist/{evidence-SQ5DNFEN.js → evidence-O76QF7TZ.js} +69 -65
  135. package/dist/{evolve-IJNUFZDS.js → evolve-H47BCETS.js} +65 -62
  136. package/dist/{extensions-YVRHX6ZI.js → extensions-NNL3ZOCU.js} +98 -20
  137. package/dist/{fleet-ZNNVSYFO.js → fleet-KMNS6NOM.js} +115 -107
  138. package/dist/{fleet-commands-5YE7NPJL.js → fleet-commands-DOWSYCBX.js} +15 -15
  139. package/dist/{fleet-decisions-3SBSCTCW.js → fleet-decisions-S3PTZV2D.js} +9 -9
  140. package/dist/{fleet-graph-6HHPWF5T.js → fleet-graph-F2DE2TME.js} +26 -24
  141. package/dist/{fleet-inspect-JEYMGCGC.js → fleet-inspect-EN2Q6IVB.js} +67 -63
  142. package/dist/{fleet-preflight-QRSHIIDE.js → fleet-preflight-FRLETDD3.js} +3 -3
  143. package/dist/{fleet-validate-4PM4GDDL.js → fleet-validate-B2XDLS57.js} +28 -29
  144. package/dist/{fleet-verify-NJDTHTO3.js → fleet-verify-4JKUWGJ7.js} +64 -61
  145. package/dist/{fleet-view-UP2BWQQY.js → fleet-view-BHJFW26B.js} +67 -63
  146. package/dist/{init-S3GZQ5ZF.js → init-XAT5N5YM.js} +86 -80
  147. package/dist/interop-FVECHFKG.js +246 -0
  148. package/dist/{inventory-K2OZ36YJ.js → inventory-7KFQGLCV.js} +67 -63
  149. package/dist/library-NY2XOT75.js +492 -0
  150. package/dist/library-QAPAO23R.js +306 -0
  151. package/dist/library-import-5Y6MAS3R.js +183 -0
  152. package/dist/library-inventory-JT6HWITQ.js +56 -0
  153. package/dist/library-validation-EQUH25DC.js +42 -0
  154. package/dist/{memory-OQOXQGYD.js → memory-DYVTTCP6.js} +65 -62
  155. package/dist/{models-3IK2Y5WE.js → models-MASFJ6Y2.js} +51 -38
  156. package/dist/{monitor-FTJLTKCQ.js → monitor-YMP4NXJJ.js} +73 -69
  157. package/dist/{orchestrator-N47O7SFD.js → orchestrator-AFQRRTEI.js} +4255 -2845
  158. package/dist/{panes-7BTYH3XQ.js → panes-D3Y2KFG5.js} +4 -4
  159. package/dist/{panes-WPOMEMRH.js → panes-NICTHQCV.js} +7 -7
  160. package/dist/{paths-J3KN7UAO.js → paths-PSFAUIGO.js} +5 -5
  161. package/dist/{preload-65U34NG6.js → preload-5Q7VXRFJ.js} +64 -61
  162. package/dist/{reset-MUVQDLNL.js → reset-7NKZK7JN.js} +11 -9
  163. package/dist/{resources-LM76COAO.js → resources-NILSIZAT.js} +94 -38
  164. package/dist/{run-3VFZQ33N.js → run-BPZGEBZV.js} +131 -114
  165. package/dist/{share-4JUB4BL7.js → share-EZ6ERBMH.js} +31 -28
  166. package/dist/skills-BTVVNYVM.js +100 -0
  167. package/dist/{skills-eval-G6T57L7M.js → skills-eval-UY34MNK7.js} +117 -78
  168. package/dist/{skills-inventory-WLM46PJH.js → skills-inventory-JDHSIA7I.js} +30 -25
  169. package/dist/{slash-commands-GBARG3Y7.js → slash-commands-K4FNQ2AT.js} +53 -49
  170. package/dist/{steer-S7D7IKPU.js → steer-2B3EQGFH.js} +4 -4
  171. package/dist/{support-5VAEC32W.js → support-L2SOL3IE.js} +7 -7
  172. package/dist/{targets-N5REUETU.js → targets-44VKGFLN.js} +69 -47
  173. package/dist/{tasks-6BVY5YZF.js → tasks-3KODKFU7.js} +14 -14
  174. package/dist/{terminal-lease-57UEOJKS.js → terminal-lease-LXA7MMPO.js} +32 -19
  175. package/dist/{tools-6OCQ6SVB.js → tools-3UB7TEVR.js} +7 -7
  176. package/dist/{trace-JHLXWUMN.js → trace-TAMIU4OJ.js} +5 -4
  177. package/dist/{tui-primitives-RCY2HN7G.js → tui-primitives-A6MUW32V.js} +3 -2
  178. package/dist/{uninstall-FXYMFFRT.js → uninstall-QYVRPEM4.js} +9 -9
  179. package/dist/{upgrade-4HD5HAIV.js → upgrade-7PMKM2JH.js} +17 -18
  180. package/dist/{usage-4GWM2WWP.js → usage-6EQV7EQK.js} +77 -73
  181. package/dist/{verifiers-GSKWKWVG.js → verifiers-JLITWSHU.js} +16 -16
  182. package/dist/{verify-3AS3ULCY.js → verify-T7NAEVIG.js} +13 -13
  183. package/dist/{web-fetch-MQN4FH3X.js → web-fetch-W4TNW4Q7.js} +4 -4
  184. package/dist/{wiki-generate-7BV7XWIY.js → wiki-generate-T2TJQJUA.js} +90 -84
  185. package/dist/{with-panes-OFTNAR4Y.js → with-panes-CHFC7HGI.js} +4 -4
  186. package/dist/worker/entry.js +297 -88
  187. package/docs/README.md +43 -0
  188. package/docs/architecture/architecture.md +8 -7
  189. package/docs/architecture/artifact-versions.md +3 -3
  190. package/docs/architecture/context-engine.md +36 -2
  191. package/docs/architecture/library.md +32 -0
  192. package/docs/architecture/middleware-and-components.md +1 -1
  193. package/docs/architecture/model-catalog.md +21 -1
  194. package/docs/architecture/pi-boundary.md +18 -0
  195. package/docs/architecture/prompt-envelope-and-tools.md +5 -5
  196. package/docs/architecture/safety-model.md +21 -2
  197. package/docs/architecture/session-lifecycle.md +12 -1
  198. package/docs/architecture/tui-design.md +153 -39
  199. package/docs/architecture/worker-context.md +106 -0
  200. package/docs/guide/authoring-plugins.md +160 -0
  201. package/docs/guide/built-in-agents.md +5 -5
  202. package/docs/guide/commands-and-modes.md +186 -80
  203. package/docs/guide/configuration-and-targets.md +123 -28
  204. package/docs/guide/configuration-reference.md +36 -38
  205. package/docs/guide/environment-variables.md +2 -2
  206. package/docs/guide/exit-codes-and-output.md +1 -1
  207. package/docs/guide/extensions-and-sharing.md +93 -53
  208. package/docs/guide/fleet-dispatch.md +32 -10
  209. package/docs/guide/glossary.md +2 -2
  210. package/docs/guide/harness-extensions.md +291 -0
  211. package/docs/guide/installation-and-lifecycle.md +53 -20
  212. package/docs/guide/interop.md +243 -0
  213. package/docs/guide/panes-and-files.md +3 -3
  214. package/docs/guide/plugins.md +80 -0
  215. package/docs/guide/resource-library.md +111 -45
  216. package/docs/guide/skills-marketplace.md +35 -72
  217. package/docs/guide/tool-usage.md +19 -7
  218. package/docs/guide/troubleshooting.md +1 -1
  219. package/docs/process/development-pipeline.md +15 -15
  220. package/docs/process/documentation-coverage.md +29 -2
  221. package/docs/process/documentation-guide.md +15 -7
  222. package/docs/process/eval-runner.md +8 -3
  223. package/docs/process/performance-methodology.md +1 -1
  224. package/docs/process/release-cut-checklist.md +22 -6
  225. package/docs/process/scientific-validation.md +23 -0
  226. package/evals/scalar-decision-machinery.ts +1 -1
  227. package/examples/extensions/README.md +67 -0
  228. package/examples/extensions/lab-status/clio-coder-extension.json +14 -0
  229. package/examples/extensions/lab-status/extension.mjs +68 -0
  230. package/examples/extensions/lab-status/jobs.synthetic.json +9 -0
  231. package/examples/extensions/measurements/clio-coder-extension.json +28 -0
  232. package/examples/extensions/measurements/summarize.cjs +23 -0
  233. package/library/README.md +109 -0
  234. package/library/_authoring/templates/agent/README.md +28 -0
  235. package/library/_authoring/templates/agent/agents/benchmark-scout.md +30 -0
  236. package/library/_authoring/templates/agent/plugin.json +23 -0
  237. package/library/_authoring/templates/fleet/README.md +29 -0
  238. package/library/_authoring/templates/fleet/fleets/pipeline-review.md +31 -0
  239. package/library/_authoring/templates/fleet/plugin.json +23 -0
  240. package/library/_authoring/templates/plugin/README.md +37 -0
  241. package/library/_authoring/templates/plugin/agents/data-curator.md +31 -0
  242. package/library/_authoring/templates/plugin/assets/curation-guide.md +22 -0
  243. package/library/_authoring/templates/plugin/plugin.json +42 -0
  244. package/library/_authoring/templates/plugin/prompts/inspect-dataset.md +15 -0
  245. package/library/_authoring/templates/plugin/skills/dataset-curation/SKILL.md +36 -0
  246. package/library/_authoring/templates/plugin/skills/dataset-curation/evals.md +17 -0
  247. package/library/_authoring/templates/prompt/README.md +28 -0
  248. package/library/_authoring/templates/prompt/plugin.json +23 -0
  249. package/library/_authoring/templates/prompt/prompts/paper-summary.md +26 -0
  250. package/library/_authoring/templates/skill/README.md +24 -0
  251. package/library/_authoring/templates/skill/SKILL.md +39 -0
  252. package/library/_authoring/templates/skill/evals.md +30 -0
  253. package/library/_authoring/templates/skill/plugin.json +23 -0
  254. package/library/agents/README.md +7 -0
  255. package/library/fleets/README.md +7 -0
  256. package/library/plugins/materio/README.md +137 -0
  257. package/library/plugins/materio/ai.iowarp.clio/agents/materio-lab-definer.md +208 -0
  258. package/library/plugins/materio/ai.iowarp.clio/agents/materio-literature-reviewer.md +308 -0
  259. package/library/plugins/materio/ai.iowarp.clio/agents/materio-research-explorer.md +249 -0
  260. package/library/plugins/materio/ai.iowarp.clio/agents/materio-task-executor.md +416 -0
  261. package/library/plugins/materio/ai.iowarp.clio/agents/materio-task-verifier.md +60 -0
  262. package/library/plugins/materio/ai.iowarp.clio/agents/materio-workflow-planner.md +238 -0
  263. package/library/plugins/materio/ai.iowarp.clio/fleets/materio-execute-task.md +50 -0
  264. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/add-task.md +66 -0
  265. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/archive-task.md +65 -0
  266. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/checkpoint.md +26 -0
  267. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/define-research-tasks.md +230 -0
  268. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/define-virtual-lab.md +181 -0
  269. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/execute-task.md +292 -0
  270. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/help.md +129 -0
  271. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/identify-research.md +206 -0
  272. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/literature-review.md +201 -0
  273. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/pause-research.md +12 -0
  274. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/progress.md +105 -0
  275. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/remove-task.md +63 -0
  276. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/resume-research.md +64 -0
  277. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/settings.md +16 -0
  278. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/status.md +92 -0
  279. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/upload-data.md +104 -0
  280. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/wtfp.md +145 -0
  281. package/library/plugins/materio/ai.iowarp.clio/references/execution.md +56 -0
  282. package/library/plugins/materio/ai.iowarp.portability/provenance.json +9 -0
  283. package/library/plugins/materio/assets/actions/add-task.md +86 -0
  284. package/library/plugins/materio/assets/actions/archive-task.md +84 -0
  285. package/library/plugins/materio/assets/actions/checkpoint.md +47 -0
  286. package/library/plugins/materio/assets/actions/define-research-tasks.md +228 -0
  287. package/library/plugins/materio/assets/actions/define-virtual-lab.md +179 -0
  288. package/library/plugins/materio/assets/actions/execute-task.md +290 -0
  289. package/library/plugins/materio/assets/actions/help.md +140 -0
  290. package/library/plugins/materio/assets/actions/identify-research.md +204 -0
  291. package/library/plugins/materio/assets/actions/literature-review.md +199 -0
  292. package/library/plugins/materio/assets/actions/pause-research.md +34 -0
  293. package/library/plugins/materio/assets/actions/progress.md +125 -0
  294. package/library/plugins/materio/assets/actions/remove-task.md +82 -0
  295. package/library/plugins/materio/assets/actions/resume-research.md +84 -0
  296. package/library/plugins/materio/assets/actions/settings.md +38 -0
  297. package/library/plugins/materio/assets/actions/status.md +112 -0
  298. package/library/plugins/materio/assets/actions/upload-data.md +123 -0
  299. package/library/plugins/materio/assets/actions/wtfp.md +179 -0
  300. package/library/plugins/materio/assets/references/research-domains.md +134 -0
  301. package/library/plugins/materio/assets/references/research-policy.md +77 -0
  302. package/library/plugins/materio/assets/references/traditional-workflows.md +146 -0
  303. package/library/plugins/materio/assets/scripts/check_physics.py +271 -0
  304. package/library/plugins/materio/assets/scripts/check_scripts.py +248 -0
  305. package/library/plugins/materio/assets/scripts/project_plugin.py +165 -0
  306. package/library/plugins/materio/assets/scripts/research_state.py +400 -0
  307. package/library/plugins/materio/assets/scripts/verify_citations.py +616 -0
  308. package/library/plugins/materio/assets/templates/RESEARCH.md +39 -0
  309. package/library/plugins/materio/assets/templates/VIRTUAL-LAB.md +120 -0
  310. package/library/plugins/materio/assets/templates/WORKFLOW.md +42 -0
  311. package/library/plugins/materio/assets/templates/config.json +5 -0
  312. package/library/plugins/materio/evals/scripts.yaml +29 -0
  313. package/library/plugins/materio/plugin.json +530 -0
  314. package/library/plugins/materio/skills/materio-lab-definer/SKILL.md +74 -0
  315. package/library/plugins/materio/skills/materio-literature-reviewer/SKILL.md +64 -0
  316. package/library/plugins/materio/skills/materio-research-explorer/SKILL.md +74 -0
  317. package/library/plugins/materio/skills/materio-task-executor/SKILL.md +214 -0
  318. package/library/plugins/materio/skills/materio-task-verifier/SKILL.md +46 -0
  319. package/library/plugins/materio/skills/materio-workflow-planner/SKILL.md +79 -0
  320. package/library/plugins/materio/tests/test_check_physics.py +139 -0
  321. package/library/plugins/materio/tests/test_check_scripts.py +140 -0
  322. package/library/plugins/materio/tests/test_research_state.py +291 -0
  323. package/library/plugins/materio/tests/test_verify_citations.py +337 -0
  324. package/library/prompts/README.md +7 -0
  325. package/library/registry.yaml +921 -0
  326. package/library/skills/README.md +120 -0
  327. package/{skills → library/skills}/coding/ast-grep/SKILL.md +1 -1
  328. package/{skills → library/skills}/coding/ast-grep/evals.md +1 -1
  329. package/library/skills/coding/ast-grep/plugin.json +23 -0
  330. package/{skills → library/skills}/coding/coding-standards/SKILL.md +1 -1
  331. package/{skills → library/skills}/coding/coding-standards/evals.md +1 -1
  332. package/library/skills/coding/coding-standards/plugin.json +23 -0
  333. package/{skills → library/skills}/coding/prototype/SKILL.md +1 -1
  334. package/{skills → library/skills}/coding/prototype/evals.md +1 -1
  335. package/library/skills/coding/prototype/plugin.json +23 -0
  336. package/{skills → library/skills}/coding/tdd/SKILL.md +1 -1
  337. package/{skills → library/skills}/coding/tdd/evals.md +1 -1
  338. package/library/skills/coding/tdd/plugin.json +23 -0
  339. package/{skills → library/skills}/context/context-handoff/SKILL.md +1 -1
  340. package/{skills → library/skills}/context/context-handoff/evals.md +1 -1
  341. package/library/skills/context/context-handoff/plugin.json +23 -0
  342. package/{skills → library/skills}/context/context-prime/SKILL.md +1 -1
  343. package/{skills → library/skills}/context/context-prime/evals.md +1 -1
  344. package/library/skills/context/context-prime/plugin.json +23 -0
  345. package/{skills → library/skills}/git/branch-closeout/SKILL.md +1 -1
  346. package/library/skills/git/branch-closeout/plugin.json +23 -0
  347. package/{skills → library/skills}/git/file-ticket/SKILL.md +1 -1
  348. package/library/skills/git/file-ticket/plugin.json +23 -0
  349. package/{skills → library/skills}/git/fix-issue/SKILL.md +1 -1
  350. package/library/skills/git/fix-issue/plugin.json +23 -0
  351. package/{skills → library/skills}/git/resolve-merge-conflicts/SKILL.md +1 -1
  352. package/{skills → library/skills}/git/resolve-merge-conflicts/evals.md +1 -1
  353. package/library/skills/git/resolve-merge-conflicts/plugin.json +23 -0
  354. package/{skills → library/skills}/git/ship/SKILL.md +1 -1
  355. package/library/skills/git/ship/plugin.json +23 -0
  356. package/{skills → library/skills}/git/worktree-create/SKILL.md +1 -1
  357. package/library/skills/git/worktree-create/plugin.json +23 -0
  358. package/{skills → library/skills}/git/worktree-merge/SKILL.md +1 -1
  359. package/library/skills/git/worktree-merge/plugin.json +23 -0
  360. package/{skills → library/skills}/meta/clio-coder-dev/SKILL.md +1 -1
  361. package/{skills → library/skills}/meta/clio-coder-dev/evals.md +1 -1
  362. package/library/skills/meta/clio-coder-dev/plugin.json +23 -0
  363. package/{skills → library/skills}/meta/clio-coder-test/SKILL.md +1 -1
  364. package/{skills → library/skills}/meta/clio-coder-test/evals.md +1 -1
  365. package/library/skills/meta/clio-coder-test/plugin.json +23 -0
  366. package/{skills → library/skills}/meta/credentials/SKILL.md +1 -1
  367. package/{skills → library/skills}/meta/credentials/evals.md +1 -1
  368. package/library/skills/meta/credentials/plugin.json +23 -0
  369. package/library/skills/meta/find-skills/SKILL.md +85 -0
  370. package/library/skills/meta/find-skills/evals.md +65 -0
  371. package/library/skills/meta/find-skills/plugin.json +23 -0
  372. package/{skills → library/skills}/meta/herdr/SKILL.md +1 -1
  373. package/{skills → library/skills}/meta/herdr/evals.md +1 -1
  374. package/library/skills/meta/herdr/plugin.json +23 -0
  375. package/{skills → library/skills}/meta/skill-craft/SKILL.md +23 -9
  376. package/{skills → library/skills}/meta/skill-craft/evals.md +11 -3
  377. package/library/skills/meta/skill-craft/plugin.json +23 -0
  378. package/{skills → library/skills}/planning/archify/SKILL.md +13 -13
  379. package/library/skills/planning/archify/plugin.json +23 -0
  380. package/{skills → library/skills}/planning/architecture/SKILL.md +1 -1
  381. package/{skills → library/skills}/planning/architecture/evals.md +1 -1
  382. package/library/skills/planning/architecture/plugin.json +23 -0
  383. package/{skills → library/skills}/planning/backlog/SKILL.md +1 -1
  384. package/{skills → library/skills}/planning/backlog/evals.md +1 -1
  385. package/library/skills/planning/backlog/plugin.json +23 -0
  386. package/{skills → library/skills}/planning/prd/SKILL.md +1 -1
  387. package/{skills → library/skills}/planning/prd/evals.md +1 -1
  388. package/library/skills/planning/prd/plugin.json +23 -0
  389. package/{skills → library/skills}/planning/product-intent/SKILL.md +1 -1
  390. package/{skills → library/skills}/planning/product-intent/evals.md +1 -1
  391. package/library/skills/planning/product-intent/plugin.json +23 -0
  392. package/{skills → library/skills}/planning/tech-spec/SKILL.md +1 -1
  393. package/{skills → library/skills}/planning/tech-spec/evals.md +1 -1
  394. package/library/skills/planning/tech-spec/plugin.json +23 -0
  395. package/{skills → library/skills}/registry.yaml +7 -7
  396. package/{skills → library/skills}/remote.yaml +1 -1
  397. package/{skills → library/skills}/research/arxiv-literature/SKILL.md +1 -1
  398. package/{skills → library/skills}/research/arxiv-literature/evals.md +1 -1
  399. package/library/skills/research/arxiv-literature/plugin.json +23 -0
  400. package/{skills → library/skills}/research/experiment-protocol/SKILL.md +1 -1
  401. package/{skills → library/skills}/research/experiment-protocol/evals.md +1 -1
  402. package/library/skills/research/experiment-protocol/plugin.json +23 -0
  403. package/{skills → library/skills}/research/scientific-debugging/SKILL.md +1 -1
  404. package/{skills → library/skills}/research/scientific-debugging/evals.md +1 -1
  405. package/library/skills/research/scientific-debugging/plugin.json +23 -0
  406. package/{skills → library/skills}/research/scientific-modernization/SKILL.md +1 -1
  407. package/{skills → library/skills}/research/scientific-modernization/evals.md +1 -1
  408. package/library/skills/research/scientific-modernization/plugin.json +23 -0
  409. package/{skills → library/skills}/skill-marketplace.json +37 -37
  410. package/{skills → library/skills}/workflow/cut-it/SKILL.md +1 -1
  411. package/{skills → library/skills}/workflow/cut-it/evals.md +1 -1
  412. package/library/skills/workflow/cut-it/plugin.json +23 -0
  413. package/{skills → library/skills}/workflow/design-council/SKILL.md +1 -1
  414. package/{skills → library/skills}/workflow/design-council/evals.md +1 -1
  415. package/library/skills/workflow/design-council/plugin.json +23 -0
  416. package/{skills → library/skills}/workflow/grill-me/SKILL.md +1 -1
  417. package/{skills → library/skills}/workflow/grill-me/evals.md +1 -1
  418. package/library/skills/workflow/grill-me/plugin.json +23 -0
  419. package/{skills → library/skills}/workflow/workflow-distiller/SKILL.md +14 -11
  420. package/{skills → library/skills}/workflow/workflow-distiller/evals.md +14 -6
  421. package/library/skills/workflow/workflow-distiller/plugin.json +23 -0
  422. package/package.json +12 -5
  423. package/src/cli/agents.ts +1 -1
  424. package/src/cli/ask.ts +10 -10
  425. package/src/cli/config-inspect.ts +1 -1
  426. package/src/cli/configure-editor.ts +51 -0
  427. package/src/cli/configure-interop.ts +1 -1
  428. package/src/cli/configure-oauth.ts +1 -1
  429. package/src/cli/configure-onboarding.ts +232 -96
  430. package/src/cli/configure-prompts.ts +76 -0
  431. package/src/cli/configure-quick.ts +274 -0
  432. package/src/cli/configure-target.ts +14 -2
  433. package/src/cli/configure.ts +415 -176
  434. package/src/cli/eval.ts +40 -6
  435. package/src/cli/extensions.ts +74 -8
  436. package/src/cli/fleet-preflight.ts +2 -0
  437. package/src/cli/fleet.ts +2 -0
  438. package/src/cli/index.ts +1 -3
  439. package/src/cli/interop-inspect.ts +61 -33
  440. package/src/cli/interop.ts +79 -9
  441. package/src/cli/library-import.ts +139 -0
  442. package/src/cli/library.ts +418 -120
  443. package/src/cli/oauth-manual-input.ts +1 -1
  444. package/src/cli/reset.ts +2 -0
  445. package/src/cli/run.ts +26 -9
  446. package/src/cli/select.ts +35 -4
  447. package/src/cli/skills-eval.ts +43 -6
  448. package/src/cli/skills-inventory.ts +6 -2
  449. package/src/cli/skills.ts +44 -491
  450. package/src/cli/upgrade.ts +2 -2
  451. package/src/core/bus-events.ts +5 -0
  452. package/src/core/config.ts +6 -1
  453. package/src/core/defaults.ts +34 -12
  454. package/src/{interactive → core}/external-editor.ts +4 -4
  455. package/src/core/recent-models.ts +2 -2
  456. package/src/core/session-routing.ts +3 -3
  457. package/src/core/state-file-lock.ts +1 -1
  458. package/src/core/tool-names.ts +5 -0
  459. package/src/domains/agents/extension.ts +42 -6
  460. package/src/domains/agents/fleet-commands.ts +92 -1
  461. package/src/domains/agents/fleet-contract.ts +87 -19
  462. package/src/domains/agents/recipe.ts +5 -4
  463. package/src/domains/agents/registry.ts +80 -24
  464. package/src/domains/config/classify.ts +1 -1
  465. package/src/domains/config/keybindings.ts +156 -124
  466. package/src/domains/context/worker/contract.ts +91 -0
  467. package/src/domains/context/worker/pressure.ts +120 -0
  468. package/src/domains/context/worker/recall.ts +62 -0
  469. package/src/domains/context/worker/select.ts +164 -0
  470. package/src/domains/context/worker/snapshot.ts +35 -0
  471. package/src/domains/context/worker/store.ts +16 -0
  472. package/src/domains/context/working-set/replay/synthetic.ts +2 -1
  473. package/src/domains/dispatch/active-route-planner.ts +2 -0
  474. package/src/domains/dispatch/backoff.ts +1 -0
  475. package/src/domains/dispatch/code-step.ts +12 -2
  476. package/src/domains/dispatch/contract.ts +3 -0
  477. package/src/domains/dispatch/execution-plan.ts +2 -0
  478. package/src/domains/dispatch/extension.ts +109 -27
  479. package/src/domains/dispatch/fleet-plan.ts +10 -0
  480. package/src/domains/dispatch/fleet-run.ts +1 -0
  481. package/src/domains/dispatch/orphan-recovery.ts +1 -0
  482. package/src/domains/dispatch/receipt-integrity.ts +4 -0
  483. package/src/domains/dispatch/state.ts +1 -0
  484. package/src/domains/dispatch/types.ts +5 -0
  485. package/src/domains/dispatch/validation.ts +12 -0
  486. package/src/domains/dispatch/workspace-checkpoint.ts +1 -1
  487. package/src/domains/evidence/failure-attribution.ts +1 -0
  488. package/src/domains/evidence/trust-status.ts +22 -3
  489. package/src/domains/extensions/command-schema.ts +145 -0
  490. package/src/domains/extensions/command-tools.ts +15 -0
  491. package/src/domains/extensions/compatibility.ts +7 -0
  492. package/src/domains/extensions/contract.ts +0 -4
  493. package/src/domains/extensions/discovery.ts +69 -205
  494. package/src/domains/extensions/extension.ts +0 -4
  495. package/src/domains/extensions/index.ts +1 -5
  496. package/src/domains/extensions/manager.ts +1 -6
  497. package/src/domains/extensions/operator-commands.ts +29 -0
  498. package/src/domains/extensions/operator-runtime.ts +483 -0
  499. package/src/domains/extensions/public-api.ts +53 -0
  500. package/src/domains/extensions/runtime-child.mjs +114 -0
  501. package/src/domains/extensions/runtime-process.ts +306 -0
  502. package/src/domains/extensions/runtime-schema.ts +146 -0
  503. package/src/domains/extensions/{resources.ts → snapshot-access.ts} +1 -17
  504. package/src/domains/extensions/snapshot.ts +4 -32
  505. package/src/domains/extensions/state.ts +5 -83
  506. package/src/domains/extensions/types.ts +33 -34
  507. package/src/domains/interop/adopt.ts +546 -0
  508. package/src/domains/interop/detect.ts +50 -12
  509. package/src/domains/interop/foreign.ts +554 -0
  510. package/src/domains/interop/import.ts +277 -0
  511. package/src/domains/interop/index.ts +24 -0
  512. package/src/domains/interop/install.ts +6 -0
  513. package/src/domains/interop/inventory.ts +351 -0
  514. package/src/domains/interop/projection.ts +360 -0
  515. package/src/domains/interop/registry.ts +106 -3
  516. package/src/domains/interop/types.ts +51 -0
  517. package/src/domains/lifecycle/migrations/index.ts +0 -2
  518. package/src/domains/lifecycle/naming-resources.ts +1 -1
  519. package/src/domains/middleware/marketplace-offer.ts +1 -1
  520. package/src/domains/mux/contract.ts +1 -1
  521. package/src/domains/plugins/catalog.ts +204 -0
  522. package/src/domains/plugins/contract.ts +24 -0
  523. package/src/domains/plugins/discovery.ts +316 -0
  524. package/src/domains/plugins/extension.ts +40 -0
  525. package/src/domains/plugins/index.ts +77 -0
  526. package/src/domains/plugins/integrity.ts +6 -0
  527. package/src/domains/plugins/manifest.ts +3 -0
  528. package/src/domains/plugins/resources.ts +102 -0
  529. package/src/domains/plugins/state.ts +753 -0
  530. package/src/domains/plugins/types.ts +217 -0
  531. package/src/domains/prompts/extension.ts +9 -2
  532. package/src/domains/prompts/fragments/operating/skills.md +10 -10
  533. package/src/domains/providers/probe/fingerprint.ts +13 -6
  534. package/src/domains/providers/probe/reasoning.ts +2 -0
  535. package/src/domains/providers/runtimes/common/probe-helpers.ts +23 -7
  536. package/src/domains/providers/runtimes/protocol/anthropic-compat.ts +7 -2
  537. package/src/domains/providers/runtimes/protocol/openai-compat.ts +10 -4
  538. package/src/domains/resources/common-loader.ts +9 -6
  539. package/src/domains/resources/index.ts +67 -0
  540. package/src/domains/resources/library-actions.ts +836 -0
  541. package/src/domains/resources/library-evals.ts +38 -0
  542. package/src/domains/resources/library-inventory.ts +1048 -0
  543. package/src/domains/resources/library-types.ts +50 -0
  544. package/src/domains/resources/library-validation.ts +634 -0
  545. package/src/domains/resources/library.ts +437 -156
  546. package/src/domains/resources/package-references.ts +66 -0
  547. package/src/domains/resources/prompts/loader.ts +75 -41
  548. package/src/domains/resources/skills/install.ts +2 -2
  549. package/src/domains/resources/skills/loader.ts +77 -22
  550. package/src/domains/resources/skills/marketplace.ts +48 -57
  551. package/src/domains/resources/skills/promotion.ts +2 -2
  552. package/src/domains/resources/skills/provenance-pin.ts +17 -4
  553. package/src/domains/safety/action-classifier.ts +2 -2
  554. package/src/domains/safety/default-path-policy.ts +3 -1
  555. package/src/domains/safety/policy-engine.ts +1 -1
  556. package/src/domains/safety/protected-artifacts.ts +21 -5
  557. package/src/domains/safety/skill-authority.ts +5 -2
  558. package/src/domains/share/archive.ts +1 -1
  559. package/src/engine/apis/openai-completions.ts +52 -2
  560. package/src/engine/notices/pi-tui-LICENSE +21 -0
  561. package/src/engine/tui.ts +3 -0
  562. package/src/engine/worker-runtime.ts +58 -14
  563. package/src/engine/worker-tools.ts +5 -0
  564. package/src/entry/orchestrator.ts +26 -5
  565. package/src/entry/plugin-reload.ts +18 -0
  566. package/src/interactive/application-controller.ts +68 -52
  567. package/src/interactive/chat-loop.ts +32 -5
  568. package/src/interactive/chat-panel.ts +168 -638
  569. package/src/interactive/chat-renderer.ts +13 -30
  570. package/src/interactive/clio-editor.ts +53 -21
  571. package/src/interactive/command-output.ts +56 -1
  572. package/src/interactive/dispatch-board.ts +1 -3
  573. package/src/interactive/editor-submit.ts +73 -59
  574. package/src/interactive/fleet-run-preview.ts +2 -0
  575. package/src/interactive/follow-up-queue-panel.ts +3 -3
  576. package/src/interactive/footer/dashboard.ts +12 -4
  577. package/src/interactive/footer/notifications.ts +2 -2
  578. package/src/interactive/footer/widgets.ts +52 -93
  579. package/src/interactive/interactive-application.ts +225 -63
  580. package/src/interactive/interactive-event-projection.ts +2 -44
  581. package/src/interactive/interactive-input-runtime.ts +257 -35
  582. package/src/interactive/interactive-presentation.ts +71 -21
  583. package/src/interactive/interactive-slash-runtime.ts +40 -48
  584. package/src/interactive/keybinding-manager.ts +156 -79
  585. package/src/interactive/keyboard-owner.ts +37 -0
  586. package/src/interactive/layout.ts +29 -4
  587. package/src/interactive/leader-key.ts +49 -102
  588. package/src/interactive/leader-menu.ts +45 -0
  589. package/src/interactive/overlay-ask-user-lifecycle.ts +9 -1
  590. package/src/interactive/overlay-frame.ts +15 -0
  591. package/src/interactive/overlay-general-openers.ts +2 -0
  592. package/src/interactive/overlay-key-routing.ts +46 -47
  593. package/src/interactive/overlay-lifecycle.ts +31 -15
  594. package/src/interactive/overlay-resource-openers.ts +56 -46
  595. package/src/interactive/overlay-session-lifecycle.ts +1 -1
  596. package/src/interactive/overlays/ask-user.ts +630 -556
  597. package/src/interactive/overlays/extension-panel.ts +70 -0
  598. package/src/interactive/overlays/extensions.ts +28 -5
  599. package/src/interactive/overlays/fleet-run-approval.ts +7 -3
  600. package/src/interactive/overlays/help-reference.ts +89 -40
  601. package/src/interactive/overlays/interop.ts +122 -3
  602. package/src/interactive/overlays/keybinding-detail.ts +2 -2
  603. package/src/interactive/overlays/library-lifecycle.ts +90 -0
  604. package/src/interactive/overlays/library-model.ts +574 -0
  605. package/src/interactive/overlays/library-review.ts +557 -0
  606. package/src/interactive/overlays/library-tabs.ts +3 -15
  607. package/src/interactive/overlays/library.ts +602 -0
  608. package/src/interactive/overlays/list-overlay.ts +218 -39
  609. package/src/interactive/overlays/model-selector.ts +28 -25
  610. package/src/interactive/overlays/session-selector.ts +9 -3
  611. package/src/interactive/overlays/settings.ts +34 -26
  612. package/src/interactive/overlays/tree-selector.ts +16 -11
  613. package/src/interactive/permission-hint.ts +13 -0
  614. package/src/interactive/permission-overlay.ts +77 -28
  615. package/src/interactive/prompt-source-label.ts +21 -0
  616. package/src/interactive/renderers/preview.ts +16 -0
  617. package/src/interactive/renderers/reference-card.ts +35 -0
  618. package/src/interactive/renderers/tool-execution.ts +67 -160
  619. package/src/interactive/renderers/worker-entry.ts +90 -42
  620. package/src/interactive/slash-autocomplete.ts +100 -7
  621. package/src/interactive/slash-commands.ts +396 -105
  622. package/src/interactive/slash-spec.ts +0 -1
  623. package/src/interactive/status/controller.ts +0 -5
  624. package/src/interactive/status/state-machine.ts +44 -26
  625. package/src/interactive/status/types.ts +3 -0
  626. package/src/interactive/status/verbs.ts +13 -12
  627. package/src/interactive/terminal-lease.ts +44 -12
  628. package/src/interactive/transcript-detail.ts +50 -112
  629. package/src/interactive/turn-queues.ts +8 -7
  630. package/src/interactive/turn-runtime.ts +1 -1
  631. package/src/interactive/view/artifacts.ts +4 -0
  632. package/src/interactive/view/view-overlay.ts +58 -43
  633. package/src/interactive/welcome-dashboard.ts +525 -408
  634. package/src/tools/bootstrap.ts +8 -0
  635. package/src/tools/builtin-tool-catalog.ts +7 -2
  636. package/src/tools/context/index.ts +58 -5
  637. package/src/tools/context/library.ts +465 -0
  638. package/src/tools/context/surface.ts +20 -6
  639. package/src/tools/core-bootstrap.ts +3 -0
  640. package/src/tools/dispatch-admission.ts +24 -1
  641. package/src/tools/dispatch-arguments.ts +8 -0
  642. package/src/tools/dispatch-plan.ts +32 -0
  643. package/src/tools/dispatch-schema.ts +31 -1
  644. package/src/tools/dispatch-types.ts +3 -0
  645. package/src/tools/dispatch.ts +1 -1
  646. package/src/tools/harness-extensions.ts +169 -0
  647. package/src/tools/observation.ts +4 -0
  648. package/src/tools/policy.ts +7 -1
  649. package/src/tools/presentation.ts +1 -1
  650. package/src/tools/registry.ts +20 -2
  651. package/src/tools/verify/numeric.ts +4 -4
  652. package/src/tools/worker-evidence.ts +5 -0
  653. package/src/worker/context-seed.ts +192 -0
  654. package/src/worker/entry.ts +1 -0
  655. package/src/worker/spec-contract.ts +8 -1
  656. package/dist/chunk-3UW3KU4A.js +0 -21
  657. package/dist/chunk-6SYEGZI3.js +0 -433
  658. package/dist/chunk-CXQ37WJH.js +0 -45
  659. package/dist/chunk-EQEJJ53P.js +0 -399
  660. package/dist/chunk-KTFSFCVN.js +0 -46
  661. package/dist/chunk-QRFXEO6Y.js +0 -17
  662. package/dist/chunk-T7FDXNRU.js +0 -1257
  663. package/dist/chunk-U7VQ4NI4.js +0 -911
  664. package/dist/configure-SML6UBZ5.js +0 -55
  665. package/dist/interop-YOTGXFJM.js +0 -115
  666. package/dist/library-GJI6W6OK.js +0 -226
  667. package/dist/skills-S36AAJHU.js +0 -510
  668. package/skills/README.md +0 -418
  669. package/skills/meta/find-skills/SKILL.md +0 -78
  670. package/skills/meta/find-skills/evals.md +0 -47
  671. package/src/domains/extensions/resource-path.ts +0 -27
  672. package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +0 -27
  673. package/src/interactive/overlays/agents.ts +0 -70
  674. package/src/interactive/overlays/library-install-confirm.ts +0 -152
  675. package/src/interactive/overlays/prompts.ts +0 -89
  676. package/src/interactive/overlays/skills-hub.ts +0 -615
  677. /package/{skills → library/skills}/coding/ast-grep/references/rule_reference.md +0 -0
  678. /package/{skills → library/skills}/coding/prototype/references/LOGIC.md +0 -0
  679. /package/{skills → library/skills}/coding/prototype/references/UI.md +0 -0
  680. /package/{skills → library/skills}/coding/tdd/references/mocking.md +0 -0
  681. /package/{skills → library/skills}/coding/tdd/references/tests.md +0 -0
  682. /package/{skills → library/skills}/context/context-handoff/scripts/new-handoff.sh +0 -0
  683. /package/{skills → library/skills}/git/branch-closeout/evals.md +0 -0
  684. /package/{skills → library/skills}/git/branch-closeout/references/closeout-checklist.md +0 -0
  685. /package/{skills → library/skills}/git/file-ticket/assets/issue-template.md +0 -0
  686. /package/{skills → library/skills}/git/file-ticket/evals.md +0 -0
  687. /package/{skills → library/skills}/git/file-ticket/references/issue-discovery.md +0 -0
  688. /package/{skills → library/skills}/git/fix-issue/evals.md +0 -0
  689. /package/{skills → library/skills}/git/fix-issue/references/diagnosis-and-rca.md +0 -0
  690. /package/{skills → library/skills}/git/resolve-merge-conflicts/references/conflict-matrix.md +0 -0
  691. /package/{skills → library/skills}/git/ship/assets/pr-template.md +0 -0
  692. /package/{skills → library/skills}/git/ship/evals.md +0 -0
  693. /package/{skills → library/skills}/git/ship/references/remote-and-branch-policy.md +0 -0
  694. /package/{skills → library/skills}/git/worktree-create/evals.md +0 -0
  695. /package/{skills → library/skills}/git/worktree-create/references/worktree-setup.md +0 -0
  696. /package/{skills → library/skills}/git/worktree-merge/evals.md +0 -0
  697. /package/{skills → library/skills}/git/worktree-merge/references/merge-strategies.md +0 -0
  698. /package/{skills → library/skills}/meta/clio-coder-test/references/harness.md +0 -0
  699. /package/{skills → library/skills}/meta/clio-coder-test/references/test-map.md +0 -0
  700. /package/{skills → library/skills}/planning/archify/evals.md +0 -0
@@ -219,15 +219,37 @@ export interface RetrySettings {
219
219
  streamStallMs: number;
220
220
  }
221
221
 
222
- export type OutputVerbosity = "minimal" | "default" | "verbose";
222
+ export const OUTPUT_STYLES = ["compact", "standard", "detailed"] as const;
223
+ export type OutputStyle = (typeof OUTPUT_STYLES)[number];
224
+
225
+ /** Read older preferences without rewriting a user's settings on startup. */
226
+ export function normalizeOutputStyle(value: unknown): OutputStyle | undefined {
227
+ switch (value) {
228
+ case "minimal":
229
+ case "compact":
230
+ return "compact";
231
+ case "default":
232
+ case "standard":
233
+ return "standard";
234
+ case "verbose":
235
+ case "detailed":
236
+ return "detailed";
237
+ default:
238
+ return undefined;
239
+ }
240
+ }
241
+
242
+ export function nextOutputStyle(style: OutputStyle): OutputStyle {
243
+ return OUTPUT_STYLES[(OUTPUT_STYLES.indexOf(style) + 1) % OUTPUT_STYLES.length] ?? "standard";
244
+ }
223
245
  export type TuiMode = "regular" | "fullscreen";
224
246
  export type FullscreenScrollbar = "hidden" | "auto" | "always";
225
247
  export type SmoothStreaming = "off" | "auto" | "on";
226
248
 
227
249
  export interface InterfaceSettings {
228
250
  terminalProgress: boolean;
229
- /** Transcript detail: collapsed, balanced, or fully transparent. */
230
- outputDetail: OutputVerbosity;
251
+ /** Output style: Compact, Standard, or Detailed bounded previews. */
252
+ outputDetail: OutputStyle;
231
253
  /** Regular scrollback-preserving renderer or alternate-screen sticky layout. */
232
254
  mode: TuiMode;
233
255
  /** Fullscreen transcript scrollbar visibility. */
@@ -261,7 +283,7 @@ export interface ReviewSettings {
261
283
  }
262
284
 
263
285
  export interface ModelSelectorSettings {
264
- /** Exact target/model refs cycled by Alt+J/Alt+K. */
286
+ /** Exact target/model refs used by the scoped model cycle actions. */
265
287
  cycleSet: string[];
266
288
  /** Exact target/model refs shown in the focused model picker. */
267
289
  favorites: string[];
@@ -456,7 +478,7 @@ export const DEFAULT_SETTINGS = {
456
478
  recentLimit: 12,
457
479
  } as ModelSelectorSettings,
458
480
  maxOutputTokens: 0,
459
- prewarm: true,
481
+ prewarm: false,
460
482
  retry: {
461
483
  enabled: true,
462
484
  maxRetries: 3,
@@ -484,7 +506,7 @@ export const DEFAULT_SETTINGS = {
484
506
  mode: "deny" as WorkerPermissionMode,
485
507
  escalation: { timeoutMs: 120000, fallback: "deny" } as WorkerEscalationSettings,
486
508
  },
487
- concurrency: "auto" as "auto" | number,
509
+ concurrency: 1 as "auto" | number,
488
510
  retry: { maxRetries: 2, routeCooldownMs: 15000 },
489
511
  limits: {
490
512
  toolCallsPerRun: GUARDRAIL_DEFAULTS.workerToolCallCap,
@@ -521,10 +543,10 @@ export const DEFAULT_SETTINGS = {
521
543
  } as SafetySettings,
522
544
  interface: {
523
545
  terminalProgress: false,
524
- outputDetail: "default",
546
+ outputDetail: "standard",
525
547
  mode: "regular",
526
548
  fullscreenScrollbar: "auto",
527
- smoothStreaming: "off",
549
+ smoothStreaming: "auto",
528
550
  desktopNotifications: false,
529
551
  panes: {
530
552
  enabled: "off",
@@ -591,7 +613,7 @@ chat:
591
613
  favorites: []
592
614
  recentLimit: 12
593
615
  maxOutputTokens: 0
594
- prewarm: true
616
+ prewarm: false
595
617
  retry:
596
618
  enabled: true
597
619
  maxRetries: 3
@@ -617,7 +639,7 @@ fleet:
617
639
  escalation:
618
640
  timeoutMs: 120000
619
641
  fallback: deny
620
- concurrency: auto
642
+ concurrency: 1
621
643
  retry:
622
644
  maxRetries: 2
623
645
  routeCooldownMs: 15000
@@ -659,8 +681,8 @@ safety:
659
681
  enabled: false
660
682
 
661
683
  interface:
662
- outputDetail: default
663
- smoothStreaming: off
684
+ outputDetail: standard
685
+ smoothStreaming: auto
664
686
  mode: regular
665
687
  fullscreenScrollbar: auto
666
688
  terminalProgress: false
@@ -3,7 +3,7 @@ import { randomUUID } from "node:crypto";
3
3
  import { readFileSync, unlinkSync, writeFileSync } from "node:fs";
4
4
  import { tmpdir } from "node:os";
5
5
  import { join } from "node:path";
6
- import { shellQuote } from "../core/shell-quote.js";
6
+ import { shellQuote } from "./shell-quote.js";
7
7
 
8
8
  export type ExternalEditorProbe = (candidates: ReadonlyArray<string>) => string | null;
9
9
 
@@ -48,11 +48,11 @@ export function resolveExternalEditor(
48
48
  return probe(["nano", "vi"]);
49
49
  }
50
50
 
51
- export function editTextExternally(initialText: string, command: string | null): ExternalEditResult {
51
+ export function editTextExternally(initialText: string, command: string | null, extension = ".md"): ExternalEditResult {
52
52
  if (!command) return { ok: false, error: "no external editor configured; set VISUAL or EDITOR" };
53
- const tmpFile = join(tmpdir(), `clio-coder-editor-${process.pid}-${randomUUID()}.md`);
53
+ const tmpFile = join(tmpdir(), `clio-coder-editor-${process.pid}-${randomUUID()}${extension}`);
54
54
  try {
55
- writeFileSync(tmpFile, initialText, "utf8");
55
+ writeFileSync(tmpFile, initialText, { encoding: "utf8", mode: 0o600, flag: "wx" });
56
56
  const result = runEditor(command, tmpFile);
57
57
  if (result.error) return { ok: false, error: result.error.message };
58
58
  if (result.status !== 0) return { ok: false, error: `external editor exited with code ${result.status ?? "?"}` };
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Recents are runtime state, not user configuration, so they live in the state
5
5
  * dir (recent-models.json) and never in settings.yaml. Keeping them out
6
- * of the settings file means an Alt+L model pick does not rewrite settings.yaml
6
+ * of the settings file means an Alt+M model pick does not rewrite settings.yaml
7
7
  * just to bump a recency list, which would fire the config watcher in every
8
8
  * other running session. Favorites (modelSelector.favorites) remain in
9
9
  * settings.yaml because they are deliberate user configuration.
@@ -72,7 +72,7 @@ export function rememberRecentModel(ref: string, limit: number): string[] {
72
72
  const next = [ref, ...base.filter((entry) => entry !== ref)].slice(0, max);
73
73
  cache = next;
74
74
  cachePath = path;
75
- // An Alt+L model pick in a session outliving `clio-coder uninstall` must not
75
+ // An Alt+M model pick in a session outliving `clio-coder uninstall` must not
76
76
  // rebuild the state root around recent-models.json. The in-memory list still
77
77
  // updates so the picker behaves for the rest of the run; see stateRootRemoved().
78
78
  if (stateRootRemoved()) return next;
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * Saved settings (settings.yaml) are defaults shared by every Clio process.
5
5
  * Live routing for a running session — active orchestrator target/model/
6
- * thinking, the fleet default used by /run, and the Alt+J / Alt+K scope list —
6
+ * thinking, the fleet default used by /run, and the configured model-cycle scope list —
7
7
  * is owned by the process that is running the session. Each process seeds its
8
8
  * routing from saved settings at boot and afterwards reads everything through
9
9
  * an effective view: the shared snapshot (targets, theme, safety, retry, …)
@@ -279,7 +279,7 @@ const ROUTING_FIELD_LABELS: ReadonlyArray<{
279
279
  },
280
280
  {
281
281
  field: "chat.modelPicker.cycleSet",
282
- label: "Alt+J/Alt+K cycle set",
282
+ label: "Scoped model cycle set",
283
283
  read: (s) => s.chat.modelPicker.cycleSet.join(","),
284
284
  },
285
285
  ];
@@ -317,7 +317,7 @@ export interface RoutingChangeNotice {
317
317
  * moves settings.yaml underneath it. One helper feeds every surface — the TUI
318
318
  * notification center and the ACP session ledger — so the wording cannot
319
319
  * drift. `commandHints` appends the interactive remedies (/settings, /model,
320
- * Alt+L), which only make sense where a user can type slash commands.
320
+ * Alt+M), which only make sense where a user can type slash commands.
321
321
  */
322
322
  export function routingChangeNotices(
323
323
  changedPaths: ReadonlyArray<string>,
@@ -118,7 +118,7 @@ function tryAcquire(lockPath: string): boolean {
118
118
 
119
119
  function timeoutError(lockPath: string, timeoutMs: number): Error {
120
120
  return new Error(
121
- `timed out after ${timeoutMs}ms waiting for ${lockPath} (owner pid=${readLockOwner(lockPath)?.pid ?? "?"}); delete it if no other clio process is running`,
121
+ `timed out after ${timeoutMs}ms waiting for ${lockPath} (owner pid=${readLockOwner(lockPath)?.pid ?? "?"}); delete it if no other clio-coder process is running`,
122
122
  );
123
123
  }
124
124
 
@@ -67,3 +67,8 @@ export const ALL_TOOL_NAMES: ReadonlyArray<BuiltinToolName> = Object.values(Tool
67
67
  export function isBuiltinToolName(name: ToolName): name is BuiltinToolName {
68
68
  return (ALL_TOOL_NAMES as ReadonlyArray<string>).includes(name);
69
69
  }
70
+
71
+ /** Reserved command-capability namespace. Syntax conveys execution class, never availability. */
72
+ export function isHarnessExtensionToolName(name: string): name is DynamicToolName {
73
+ return name.length <= 64 && /^extension_[a-z0-9][a-z0-9_-]*__[a-z][a-z0-9_]*$/.test(name);
74
+ }
@@ -12,34 +12,70 @@ export function createAgentsBundle(_context: DomainContext): DomainBundle<Agents
12
12
  let specs: ReadonlyArray<AgentSpec> = [];
13
13
  let diagnostics: ReadonlyArray<AgentRecipeDiagnostic> = [];
14
14
  let revision = 0;
15
+ let rediscoveryPending = false;
16
+ let attemptedRecipes: ReadonlyArray<AgentRecipe> | null = null;
15
17
 
16
18
  function discover(): void {
19
+ attemptedRecipes = null;
17
20
  const nextDiagnostics: AgentRecipeDiagnostic[] = [];
18
21
  const merged = discoverAgentRecipes(process.cwd(), nextDiagnostics);
22
+ attemptedRecipes = merged;
19
23
  const config = _context.getContract<ConfigContract>("config");
20
24
  assertAgentIdNamespace(merged, config?.get()?.integrations.externalAgents?.entries ?? []);
21
25
  recipes = merged;
22
26
  specs = recipes.map(normalizeAgentSpec);
23
27
  diagnostics = nextDiagnostics;
24
28
  revision += 1;
29
+ rediscoveryPending = false;
25
30
  }
26
31
 
27
32
  let unsubscribeExtensionsReload: (() => void) | null = null;
28
33
  const extension: DomainExtension = {
29
34
  async start() {
30
35
  discover();
31
- // Recipes are cached at start; extension agent roots come from the
32
- // committed extension generation, so a changed generation rediscovers.
33
- unsubscribeExtensionsReload = _context.bus.on(BusChannels.ExtensionsReloaded, (payload: unknown) => {
34
- if ((payload as { changed?: unknown } | undefined)?.changed !== true) return;
36
+ // Recipes are cached at start; plugin agent roots come from the
37
+ // committed plugin generation, so a changed generation rediscovers.
38
+ const onResourceReload = (payload: unknown) => {
39
+ if (!rediscoveryPending && (payload as { changed?: unknown } | undefined)?.changed !== true) return;
35
40
  try {
36
41
  discover();
37
42
  } catch (error) {
43
+ // Snapshot admission may already have revoked packages. Never retain
44
+ // their cached authority when namespace or filesystem discovery fails.
45
+ rediscoveryPending = true;
46
+ recipes = attemptedRecipes ?? recipes.filter((recipe) => recipe.source === "builtin");
47
+ let conflictingIds = new Set<string>();
48
+ try {
49
+ const config = _context.getContract<ConfigContract>("config");
50
+ conflictingIds = new Set((config?.get()?.integrations.externalAgents?.entries ?? []).map((agent) => agent.id));
51
+ } catch {
52
+ // If even current operator configuration is unreadable, no custom
53
+ // cached recipe has a trustworthy namespace admission decision.
54
+ recipes = recipes.filter((recipe) => recipe.source === "builtin");
55
+ }
56
+ recipes = recipes.filter((recipe) => recipe.source !== "plugin" && !conflictingIds.has(recipe.id));
57
+ specs = recipes.map(normalizeAgentSpec);
58
+ diagnostics = [
59
+ ...diagnostics,
60
+ {
61
+ source: "project" as const,
62
+ filepath: process.cwd(),
63
+ message: `recipe reload failed; package recipes withdrawn until retry: ${error instanceof Error ? error.message : String(error)}`,
64
+ },
65
+ ].slice(-100);
66
+ revision += 1;
38
67
  process.stderr.write(
39
- `[clio-coder:agents] rediscovery after extension reload failed: ${error instanceof Error ? error.message : String(error)}\n`,
68
+ `[clio-coder:agents] rediscovery after resource reload failed: ${error instanceof Error ? error.message : String(error)}\n`,
40
69
  );
41
70
  }
42
- });
71
+ };
72
+ const unsubscribe = [
73
+ _context.bus.on(BusChannels.ExtensionsReloaded, onResourceReload),
74
+ _context.bus.on(BusChannels.PluginsReloaded, onResourceReload),
75
+ ];
76
+ unsubscribeExtensionsReload = () => {
77
+ for (const stop of unsubscribe) stop();
78
+ };
43
79
  },
44
80
  async stop() {
45
81
  unsubscribeExtensionsReload?.();
@@ -38,7 +38,14 @@ export const FLEET_COMMAND_DEFAULT_TIMEOUT_MS = 600_000;
38
38
  */
39
39
  export const FLEET_COMMAND_BASE_ENV: ReadonlyArray<string> = ["PATH", "HOME", "LANG", "LC_ALL", "TZ", "TMPDIR"];
40
40
 
41
+ export interface FleetCommandArgumentSlot {
42
+ name: string;
43
+ maxLength: number;
44
+ }
45
+
41
46
  export interface FleetCommand {
47
+ /** Operator-owned required positional data slots; omission forbids appended args. */
48
+ argumentSlots?: ReadonlyArray<FleetCommandArgumentSlot>;
42
49
  id: string;
43
50
  /** argv list, never a shell string: no quoting bugs and no shell injection. */
44
51
  argv: ReadonlyArray<string>;
@@ -59,6 +66,18 @@ export interface FleetCommandRegistry {
59
66
  const CommandSchema = Type.Object(
60
67
  {
61
68
  argv: Type.Array(Type.String({ minLength: 1 }), { minItems: 1 }),
69
+ argumentSlots: Type.Optional(
70
+ Type.Array(
71
+ Type.Object(
72
+ {
73
+ name: Type.String({ pattern: "^[A-Za-z][A-Za-z0-9_-]{0,63}$" }),
74
+ maxLength: Type.Integer({ minimum: 1, maximum: 8192 }),
75
+ },
76
+ { additionalProperties: false },
77
+ ),
78
+ { minItems: 1, maxItems: 64 },
79
+ ),
80
+ ),
62
81
  cwd: Type.Optional(Type.String({ minLength: 1 })),
63
82
  timeoutMs: Type.Optional(
64
83
  Type.Integer({ minimum: FLEET_COMMAND_MIN_TIMEOUT_MS, maximum: FLEET_COMMAND_MAX_TIMEOUT_MS }),
@@ -114,7 +133,17 @@ export function parseFleetCommands(raw: string, sourcePath: string): FleetComman
114
133
  if (schemaError !== null) throw new Error(`fleet commands ${sourcePath}: ${schemaError}`);
115
134
  const registry = parsed as {
116
135
  version: 1;
117
- commands: Record<string, { argv: string[]; cwd?: string; timeoutMs?: number; env?: string[]; description?: string }>;
136
+ commands: Record<
137
+ string,
138
+ {
139
+ argv: string[];
140
+ argumentSlots?: FleetCommandArgumentSlot[];
141
+ cwd?: string;
142
+ timeoutMs?: number;
143
+ env?: string[];
144
+ description?: string;
145
+ }
146
+ >;
118
147
  };
119
148
  const commands = new Map<string, FleetCommand>();
120
149
  for (const [id, entry] of Object.entries(registry.commands)) {
@@ -130,9 +159,16 @@ export function parseFleetCommands(raw: string, sourcePath: string): FleetComman
130
159
  throw new Error(`fleet commands ${sourcePath}: command '${id}' env name '${name}' is not a variable name`);
131
160
  }
132
161
  }
162
+ if (entry.argumentSlots)
163
+ validateFleetCommandArgs(
164
+ { id, argv: entry.argv, cwd: "", timeoutMs: 1000, env: [], description: "", argumentSlots: entry.argumentSlots },
165
+ entry.argumentSlots.map(() => "{{slot}}"),
166
+ { allowTemplates: true },
167
+ );
133
168
  commands.set(id, {
134
169
  id,
135
170
  argv: [...entry.argv],
171
+ ...(entry.argumentSlots ? { argumentSlots: entry.argumentSlots.map((slot) => ({ ...slot })) } : {}),
136
172
  cwd: entry.cwd === undefined ? "" : checkCwd(id, entry.cwd, sourcePath),
137
173
  timeoutMs: entry.timeoutMs ?? FLEET_COMMAND_DEFAULT_TIMEOUT_MS,
138
174
  env: [...(entry.env ?? [])],
@@ -152,3 +188,58 @@ export function loadFleetCommands(cwd: string): FleetCommandRegistry | null {
152
188
  if (!existsSync(path)) return null;
153
189
  return parseFleetCommands(readFileSync(path, "utf8"), path);
154
190
  }
191
+
192
+ /** Bind authored code-step arguments before plan admission; each stays one argv token. */
193
+ export function resolveFleetCommandArgs(
194
+ args: ReadonlyArray<string>,
195
+ vars: Readonly<Record<string, string>> = {},
196
+ ): string[] {
197
+ if (args.length > 64) throw new Error("fleet code args: at most 64 arguments are allowed");
198
+ return args.map((token) => {
199
+ const match = /^\{\{\s*([A-Za-z_][A-Za-z0-9_-]*)\s*\}\}$/u.exec(token);
200
+ if (!match && token.includes("{{")) throw new Error("fleet code args: placeholders must occupy a whole argument");
201
+ const value = match ? vars[match[1] ?? ""] : token;
202
+ if (value === undefined) throw new Error(`fleet code args: missing variable ${match?.[1]} (pass --var name=value)`);
203
+ if (value.includes("\0") || value.length > 8192)
204
+ throw new Error("fleet code args: invalid NUL or oversized argument");
205
+ return value;
206
+ });
207
+ }
208
+
209
+ /** Enforce operator-declared data slots; contracts cannot append flags or executable code. */
210
+ export function validateFleetCommandArgs(
211
+ command: FleetCommand,
212
+ args: ReadonlyArray<string>,
213
+ options: { allowTemplates?: boolean } = {},
214
+ ): void {
215
+ const slots = command.argumentSlots ?? [];
216
+ if (
217
+ slots.length > 64 ||
218
+ new Set(slots.map((slot) => slot.name)).size !== slots.length ||
219
+ slots.some(
220
+ (slot) =>
221
+ !/^[A-Za-z][A-Za-z0-9_-]{0,63}$/u.test(slot.name) ||
222
+ !Number.isInteger(slot.maxLength) ||
223
+ slot.maxLength < 1 ||
224
+ slot.maxLength > 8192,
225
+ )
226
+ ) {
227
+ throw new Error(`fleet command '${command.id}': invalid argumentSlots declaration`);
228
+ }
229
+ if (args.length !== slots.length) {
230
+ throw new Error(
231
+ `fleet command '${command.id}': expected ${slots.length} declared argument slots, got ${args.length}; the operator must declare argumentSlots in commands.yaml`,
232
+ );
233
+ }
234
+ for (let index = 0; index < slots.length; index++) {
235
+ const slot = slots[index];
236
+ const value = args[index];
237
+ if (!slot || typeof value !== "string") throw new Error(`fleet command '${command.id}': invalid argument`);
238
+ if (options.allowTemplates && /^\{\{\s*([A-Za-z_][A-Za-z0-9_-]*)\s*\}\}$/u.test(value)) continue;
239
+ if (value.length === 0 || value.length > slot.maxLength || value.includes("\0") || value.startsWith("-")) {
240
+ throw new Error(
241
+ `fleet command '${command.id}': argument '${slot.name}' must be nonempty data of at most ${slot.maxLength} characters, without NUL or a leading dash; fixed flags belong in argv`,
242
+ );
243
+ }
244
+ }
245
+ }
@@ -1,3 +1,5 @@
1
+ import { enabledPluginResourceRoots } from "../plugins/index.js";
2
+ import { resolvePackagePathReference, resolvePackageReferences } from "../resources/package-references.js";
1
3
  /**
2
4
  * Repo-owned fleet contracts (Symphony P5: work policy lives in the repo,
3
5
  * versioned and strictly validated).
@@ -16,8 +18,12 @@ import { Type } from "typebox";
16
18
  import { Value } from "typebox/value";
17
19
  import { resolvePackageRoot } from "../../core/package-root.js";
18
20
  import { clioConfigDir } from "../../core/xdg.js";
19
- import { enabledExtensionResourceRoots } from "../extensions/index.js";
20
- import { type FleetCommandRegistry, loadFleetCommands } from "./fleet-commands.js";
21
+ import {
22
+ type FleetCommandRegistry,
23
+ loadFleetCommands,
24
+ resolveFleetCommandArgs,
25
+ validateFleetCommandArgs,
26
+ } from "./fleet-commands.js";
21
27
  import { parseFrontmatter } from "./frontmatter.js";
22
28
  import { normalizeWriteBoundary, WRITE_BOUNDARY_MAX_ENTRIES } from "./write-boundary.js";
23
29
 
@@ -111,6 +117,7 @@ export interface FleetContractCodeStep {
111
117
  kind: "code";
112
118
  id: string;
113
119
  command: string;
120
+ args?: ReadonlyArray<string>;
114
121
  scope: FleetStepScope;
115
122
  dependencies: ReadonlyArray<string>;
116
123
  commitFrom?: ReadonlyArray<string>;
@@ -119,7 +126,13 @@ export interface FleetContractCodeStep {
119
126
 
120
127
  /** The verification half of a loop: the question that decides continuation. */
121
128
  export type FleetContractLoopCheck =
122
- | { kind: "code"; command: string; scope: FleetStepScope; writes?: ReadonlyArray<string> }
129
+ | {
130
+ kind: "code";
131
+ command: string;
132
+ args?: ReadonlyArray<string>;
133
+ scope: FleetStepScope;
134
+ writes?: ReadonlyArray<string>;
135
+ }
123
136
  | {
124
137
  kind: "agent";
125
138
  agent: string;
@@ -199,7 +212,7 @@ export interface FleetContract {
199
212
  path: string;
200
213
  }
201
214
 
202
- export type FleetContractSource = "builtin" | "extension" | "user" | "project";
215
+ export type FleetContractSource = "builtin" | "plugin" | "user" | "project";
203
216
 
204
217
  export interface FleetContractListing {
205
218
  name: string;
@@ -291,6 +304,7 @@ function codeStepSchema(version: FleetContractVersion) {
291
304
  kind: Type.Literal("code"),
292
305
  id: Type.String({ minLength: 1 }),
293
306
  command: Type.String({ minLength: 1 }),
307
+ args: Type.Optional(Type.Array(Type.String({ maxLength: 8192, pattern: "^[^\\u0000]*$" }), { maxItems: 64 })),
294
308
  scope: FleetScopeSchema,
295
309
  dependencies: Type.Array(Type.String({ minLength: 1 })),
296
310
  ...(version >= 3 ? { commitFrom: Type.Optional(Type.Array(Type.String({ minLength: 1 }), { minItems: 1 })) } : {}),
@@ -313,6 +327,7 @@ function loopStepSchema(version: FleetContractVersion) {
313
327
  {
314
328
  kind: Type.Literal("code"),
315
329
  command: Type.String({ minLength: 1 }),
330
+ args: Type.Optional(Type.Array(Type.String({ maxLength: 8192, pattern: "^[^\\u0000]*$" }), { maxItems: 64 })),
316
331
  scope: FleetScopeSchema,
317
332
  ...writesSchema(version),
318
333
  },
@@ -412,12 +427,14 @@ type RawStep = {
412
427
  id: string;
413
428
  agent?: string;
414
429
  command?: string;
430
+ args?: string[];
415
431
  commitFrom?: string[];
416
432
  writes?: string[];
417
433
  maxAttempts?: number;
418
434
  check?: {
419
435
  kind: "code" | "agent" | "gate";
420
436
  command?: string;
437
+ args?: string[];
421
438
  agent?: string;
422
439
  gate?: string;
423
440
  scope: FleetStepScope;
@@ -488,7 +505,13 @@ function normalizeStep(step: RawStep): FleetContractStep {
488
505
  dependencies: [...step.dependencies],
489
506
  check:
490
507
  check.kind === "code"
491
- ? { kind: "code", command: check.command ?? "", scope: check.scope, ...normalizedWrites(check.writes) }
508
+ ? {
509
+ kind: "code",
510
+ command: check.command ?? "",
511
+ ...(check.args ? { args: [...check.args] } : {}),
512
+ scope: check.scope,
513
+ ...normalizedWrites(check.writes),
514
+ }
492
515
  : check.kind === "gate"
493
516
  ? { kind: "gate", gate: check.gate ?? "" }
494
517
  : {
@@ -512,6 +535,7 @@ function normalizeStep(step: RawStep): FleetContractStep {
512
535
  kind: "code",
513
536
  id: step.id,
514
537
  command: step.command ?? "",
538
+ ...(step.args ? { args: [...step.args] } : {}),
515
539
  scope: step.scope,
516
540
  dependencies: [...step.dependencies],
517
541
  ...(step.commitFrom !== undefined ? { commitFrom: [...step.commitFrom] } : {}),
@@ -901,13 +925,20 @@ export function fleetLoopSteps(contract: FleetContract): FleetContractLoopStep[]
901
925
  * check is a code step in every way that matters to the registry, so it is
902
926
  * bound to a real command by the same validation.
903
927
  */
904
- export function fleetCodeSteps(contract: FleetContract): Array<{ id: string; command: string }> {
905
- const steps: Array<{ id: string; command: string }> = [];
928
+ export function fleetCodeSteps(
929
+ contract: FleetContract,
930
+ ): Array<{ id: string; command: string; args?: ReadonlyArray<string> }> {
931
+ const steps: Array<{ id: string; command: string; args?: ReadonlyArray<string> }> = [];
906
932
  for (const step of contract.steps) {
907
- if (step.kind === "code") steps.push({ id: step.id, command: step.command });
933
+ if (step.kind === "code")
934
+ steps.push({ id: step.id, command: step.command, ...(step.args ? { args: step.args } : {}) });
908
935
  else if (step.kind === "gate") steps.push({ id: step.id, command: step.run });
909
936
  else if (step.kind === "loop" && step.check.kind === "code") {
910
- steps.push({ id: fleetLoopCheckStepId(step.id, 1), command: step.check.command });
937
+ steps.push({
938
+ id: fleetLoopCheckStepId(step.id, 1),
939
+ command: step.check.command,
940
+ ...(step.check.args ? { args: step.check.args } : {}),
941
+ });
911
942
  }
912
943
  }
913
944
  return steps;
@@ -945,19 +976,26 @@ export class FleetCommandRegistryMissingError extends Error {
945
976
  * failure mode this whole mechanism exists to prevent: a green test phase that
946
977
  * never ran a test.
947
978
  */
948
- export function validateFleetCommands(contract: FleetContract, registry: FleetCommandRegistry | null): void {
979
+ export function validateFleetCommands(
980
+ contract: FleetContract,
981
+ registry: FleetCommandRegistry | null,
982
+ vars?: Readonly<Record<string, string>>,
983
+ ): void {
949
984
  const codeSteps = fleetCodeSteps(contract);
950
985
  if (codeSteps.length === 0) return;
951
986
  if (registry === null) {
952
987
  throw new FleetCommandRegistryMissingError(contract.path, [...new Set(codeSteps.map((step) => step.command))].sort());
953
988
  }
954
989
  for (const step of codeSteps) {
955
- if (!registry.commands.has(step.command)) {
990
+ const command = registry.commands.get(step.command);
991
+ if (!command) {
956
992
  const known = [...registry.commands.keys()].sort().join(", ");
957
993
  throw new Error(
958
994
  `fleet contract ${contract.path}: step '${step.id}' names unknown command '${step.command}' (registered: ${known || "none"})`,
959
995
  );
960
996
  }
997
+ const args = vars === undefined ? (step.args ?? []) : resolveFleetCommandArgs(step.args ?? [], vars);
998
+ validateFleetCommandArgs(command, args, { allowTemplates: vars === undefined });
961
999
  }
962
1000
  }
963
1001
 
@@ -971,21 +1009,48 @@ function builtinFleetsDir(): string {
971
1009
  return join(resolvePackageRoot(), "src", "domains", "agents", "fleets");
972
1010
  }
973
1011
 
974
- function fleetSources(cwd: string): ReadonlyArray<{ dir: string; source: FleetContractSource }> {
1012
+ export function resolveFleetReferences(
1013
+ contract: FleetContract,
1014
+ source: { source: FleetContractSource; rootPath?: string },
1015
+ ): FleetContract {
1016
+ if (!source.rootPath) return contract;
1017
+ const context = { rootPath: source.rootPath, plugin: source.source === "plugin" };
1018
+ // Authored text is resolved after schema parsing; paths cannot inject YAML keys.
1019
+ return {
1020
+ ...contract,
1021
+ body: resolvePackageReferences(contract.body, context),
1022
+ steps: contract.steps.map((step) => {
1023
+ if (step.kind === "code" && step.args)
1024
+ return { ...step, args: step.args.map((arg) => resolvePackagePathReference(arg, context)) };
1025
+ if (step.kind === "loop" && step.check.kind === "code" && step.check.args)
1026
+ return {
1027
+ ...step,
1028
+ check: { ...step.check, args: step.check.args.map((arg) => resolvePackagePathReference(arg, context)) },
1029
+ };
1030
+ return step;
1031
+ }),
1032
+ };
1033
+ }
1034
+
1035
+ function fleetSources(cwd: string): ReadonlyArray<{ dir: string; source: FleetContractSource; rootPath?: string }> {
975
1036
  return [
976
1037
  { dir: builtinFleetsDir(), source: "builtin" },
977
- ...enabledExtensionResourceRoots("fleets", cwd)
1038
+ ...enabledPluginResourceRoots("fleets", cwd)
978
1039
  .sort((left, right) => left.source.localeCompare(right.source))
979
- .map((root) => ({ dir: root.path, source: "extension" as const })),
1040
+ .map((root) => ({ dir: root.path, rootPath: root.rootPath, source: "plugin" as const })),
980
1041
  { dir: join(clioConfigDir(), "fleets"), source: "user" },
981
1042
  { dir: fleetsDir(cwd), source: "project" },
982
1043
  ];
983
1044
  }
984
1045
 
985
- function fleetContractPath(cwd: string, name: string): { path: string; source: FleetContractSource } | null {
1046
+ function fleetContractPath(
1047
+ cwd: string,
1048
+ name: string,
1049
+ ): { path: string; source: FleetContractSource; rootPath?: string } | null {
986
1050
  for (const source of [...fleetSources(cwd)].reverse()) {
987
1051
  const candidate = join(source.dir, `${name}.md`);
988
- if (existsSync(candidate)) return { path: candidate, source: source.source };
1052
+ if (existsSync(candidate))
1053
+ return { path: candidate, source: source.source, ...(source.rootPath ? { rootPath: source.rootPath } : {}) };
989
1054
  }
990
1055
  return null;
991
1056
  }
@@ -995,7 +1060,7 @@ export function loadFleetContract(cwd: string, name: string): FleetContract {
995
1060
  if (located === null) {
996
1061
  throw new Error(`fleet contract not found: ${join(fleetsDir(cwd), `${name}.md`)} (and no builtin named '${name}')`);
997
1062
  }
998
- const contract = parseFleetContract(readFileSync(located.path, "utf8"), located.path);
1063
+ const contract = resolveFleetReferences(parseFleetContract(readFileSync(located.path, "utf8"), located.path), located);
999
1064
  validateFleetCommands(contract, loadFleetCommands(cwd));
1000
1065
  return contract;
1001
1066
  }
@@ -1027,12 +1092,15 @@ export function listFleetContracts(cwd: string): FleetContractListing[] {
1027
1092
  }
1028
1093
  const listings = new Map<string, FleetContractListing>();
1029
1094
  const sources = fleetSources(cwd);
1030
- for (const { dir, source } of sources) {
1095
+ for (const { dir, source, rootPath } of sources) {
1031
1096
  for (const file of listDirectory(dir)) {
1032
1097
  const path = join(dir, file);
1033
1098
  const name = basename(file, ".md");
1034
1099
  try {
1035
- const contract = parseFleetContract(readFileSync(path, "utf8"), path);
1100
+ const contract = resolveFleetReferences(parseFleetContract(readFileSync(path, "utf8"), path), {
1101
+ source,
1102
+ ...(rootPath ? { rootPath } : {}),
1103
+ });
1036
1104
  if (registryError !== null && fleetCodeSteps(contract).length > 0) throw new Error(registryError);
1037
1105
  validateFleetCommands(contract, registry);
1038
1106
  listings.set(name, { name, path, source, contract, error: null, needsCommands: null });
@@ -131,20 +131,21 @@ export interface AgentRecipe {
131
131
  resultContract: ResultContract;
132
132
  product?: AgentProduct;
133
133
  tags: ReadonlyArray<string>;
134
- source: "builtin" | "extension" | "user" | "project";
134
+ source: "builtin" | "plugin" | "user" | "project";
135
135
  filepath: string;
136
136
  /** Persona prompt body. */
137
137
  body: string;
138
138
  }
139
139
 
140
140
  export interface RecipeSource {
141
+ rootPath?: string;
141
142
  dir: string;
142
143
  source: AgentRecipe["source"];
143
- /** Project root whose extension and skill resources are being discovered. */
144
+ /** Project root whose package and skill resources are being discovered. */
144
145
  cwd?: string;
145
- /** Stable provenance used to correlate resources from one extension. */
146
+ /** Stable provenance used to correlate resources from one package. */
146
147
  origin?: string;
147
- /** The declaring extension's skill root; extension agents may bind only here. */
148
+ /** The declaring package's skill root; package agents may bind only here. */
148
149
  skillRoot?: string;
149
150
  }
150
151