@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
@@ -3,42 +3,22 @@ import path from "node:path";
3
3
  import { warnLegacyNaming } from "../../../core/naming-compat.js";
4
4
  import { resolvePackageRoot } from "../../../core/package-root.js";
5
5
  import { clioConfigDir } from "../../../core/xdg.js";
6
- import {
7
- type InstallSkillInput,
8
- type InstallSkillResult,
9
- installSkillFromSource,
10
- isSkillName,
11
- parseSkillSourceSpec,
12
- type SkillInstallShaping,
13
- } from "./install.js";
6
+ import { pluginResourcePath, readPluginManifest } from "../../plugins/index.js";
7
+ import { discoverLibrary, installLibraryPlan, planLibraryInstall, resolveLibraryPackage } from "../library.js";
8
+ import type { InstallSkillInput, InstallSkillResult, SkillInstallShaping } from "./install.js";
14
9
  import { loadSkills, type Skill } from "./loader.js";
15
10
 
16
11
  /**
17
- * Local skill marketplace. Entries come from two real sources only:
18
- *
19
- * 1. A catalog directory of actual SKILL.md packages: CLIO_CODER_SKILL_CATALOG_DIR,
20
- * else a repo-level skills/ folder in the working tree, else the skills/
21
- * catalog the installed clio-coder package carries. Metadata is read from
22
- * the packages themselves via the normal skill loader.
23
- * 2. A JSON index file: CLIO_CODER_SKILL_MARKETPLACE_INDEX, else
24
- * <config>/skill-marketplace.json, else the skill-marketplace.json the
25
- * package carries. Entries point at installable sources.
26
- *
27
- * The package fallbacks are what make a fresh npm install a marketplace at
28
- * all: before them, an operator outside this repository with no env var set
29
- * had no catalog and no index, so every bare-name install and every
30
- * `/skill <name>` for a catalog skill failed. The package catalog is a
31
- * marketplace source only, never a discovery root; catalog skills stay
32
- * uninstalled until the operator asks, and install copies them out of the
33
- * package into a Clio root without touching the network.
34
- *
35
- * There is no synthetic or hardcoded marketplace data; an empty result means
36
- * no marketplace is configured.
12
+ * Skill-facing adapter for the canonical library, plus explicit authoring probes
13
+ * of unmanaged source trees. Runtime offers and activation use the library;
14
+ * only an explicit catalogDir/indexPath request invokes a raw source audit.
37
15
  */
38
16
 
39
17
  export type MarketplaceSkillOrigin = "catalog" | "index";
40
- export type LibraryEntryKind = "skill" | "agent" | "prompt" | "fleet";
41
- export type LibraryRequirementRef = `${LibraryEntryKind}:${string}`;
18
+
19
+ import type { LibraryEntryKind, LibraryRequirementRef } from "../library-types.js";
20
+
21
+ export type { LibraryEntryKind, LibraryRequirementRef } from "../library-types.js";
42
22
 
43
23
  /**
44
24
  * The diagnostic that means "nothing is wrong, nothing is configured". Callers
@@ -48,10 +28,10 @@ export type LibraryRequirementRef = `${LibraryEntryKind}:${string}`;
48
28
  export const MARKETPLACE_UNCONFIGURED = "no local skill marketplace catalog or index configured";
49
29
 
50
30
  export interface MarketplaceSkill {
51
- kind: LibraryEntryKind;
31
+ kind: Exclude<LibraryEntryKind, "plugin">;
52
32
  name: string;
53
33
  description: string;
54
- /** Local path or URL accepted by `clio-coder skills install`. */
34
+ /** Local path or URL accepted by `clio-coder library install`. */
55
35
  sourceUrl: string;
56
36
  version?: string;
57
37
  audit?: "pass" | "warn" | "fail" | "unknown";
@@ -96,7 +76,7 @@ export interface DiscoverMarketplaceOptions {
96
76
  */
97
77
  function packageCatalogDir(): string | null {
98
78
  try {
99
- return path.join(resolvePackageRoot(), "skills");
79
+ return path.join(resolvePackageRoot(), "library", "skills");
100
80
  } catch {
101
81
  return null;
102
82
  }
@@ -104,7 +84,7 @@ function packageCatalogDir(): string | null {
104
84
 
105
85
  function packageIndexPath(): string | null {
106
86
  try {
107
- return path.join(resolvePackageRoot(), "skills", "skill-marketplace.json");
87
+ return path.join(resolvePackageRoot(), "library", "skills", "skill-marketplace.json");
108
88
  } catch {
109
89
  return null;
110
90
  }
@@ -250,6 +230,8 @@ function resolveCatalogDir(options: DiscoverMarketplaceOptions): string | null {
250
230
  if (options.catalogDir) return path.resolve(options.catalogDir);
251
231
  const fromEnv = process.env.CLIO_CODER_SKILL_CATALOG_DIR;
252
232
  if (fromEnv && fromEnv.trim().length > 0) return path.resolve(fromEnv.trim());
233
+ const repoLibraryCatalog = path.join(options.cwd ?? process.cwd(), "library", "skills");
234
+ if (looksLikeSkillCatalog(repoLibraryCatalog)) return repoLibraryCatalog;
253
235
  const repoCatalog = path.join(options.cwd ?? process.cwd(), "skills");
254
236
  if (looksLikeSkillCatalog(repoCatalog)) return repoCatalog;
255
237
  // The package's own catalog: rows resolve to local files, so a bare-name
@@ -297,6 +279,15 @@ function catalogSkills(dir: string, diagnostics: string[]): MarketplaceSkill[] {
297
279
  }
298
280
 
299
281
  export function discoverMarketplaceSkills(options: DiscoverMarketplaceOptions = {}): MarketplaceDiscoveryResult {
282
+ // Automatic promotion and /skill consume the same pinned library as the CLI.
283
+ // Explicit source probes below support authoring audits of unmanaged skill trees.
284
+ if (options.indexPath === undefined && options.catalogDir === undefined) {
285
+ const library = discoverLibrary(options.cwd ? { cwd: options.cwd } : {});
286
+ const skills: MarketplaceSkill[] = library.entries
287
+ .filter((entry) => entry.kind === "skill" && entry.origin !== "installed")
288
+ .map((entry) => ({ ...entry, kind: "skill", origin: entry.origin === "index" ? "index" : "catalog" }));
289
+ return { status: skills.length ? "installable" : "unavailable", skills, diagnostics: library.diagnostics };
290
+ }
300
291
  const diagnostics: string[] = [];
301
292
  const skills: MarketplaceSkill[] = [];
302
293
  const seen = new Set<string>();
@@ -367,31 +358,31 @@ export function resolveMarketplaceShaping(options: DiscoverMarketplaceOptions =
367
358
  };
368
359
  }
369
360
 
370
- /**
371
- * The single install entry point for every frontend (headless CLI, TUI
372
- * pending-skill prompt, skills hub). Source resolution, in precedence order:
373
- *
374
- * 1. A GitHub URL installs directly.
375
- * 2. An existing local path installs directly; paths always beat same-named
376
- * marketplace entries.
377
- * 3. A bare skill name resolves through the local marketplace.
378
- *
379
- * Anything else is an error naming both failed interpretations. Overwriting
380
- * an existing install always requires an explicit `force: true`.
381
- */
361
+ /** Skill-offer adapter: resolve a package and commit through the shared library engine. */
382
362
  export function installSkill(input: InstallSkillInput): InstallSkillResult {
383
363
  const requested = input.source.trim();
384
364
  const source = requested === "clio-dev" ? "clio-coder-dev" : requested === "clio-test" ? "clio-coder-test" : requested;
385
365
  if (source !== requested) warnLegacyNaming(requested, source);
386
- const spec = parseSkillSourceSpec(source);
387
- if (spec?.kind === "local" && isSkillName(source) && !existsSync(spec.path)) {
388
- const skill = getMarketplaceSkills({ ...(input.cwd ? { cwd: input.cwd } : {}) }).find(
389
- (entry) => entry.name === source,
390
- );
391
- if (!skill) {
392
- throw new Error(`"${source}" is neither an existing local path nor available in the local marketplace`);
393
- }
394
- return installSkillFromSource({ ...input, ...marketplaceInstallShaping(skill), source: skill.sourceUrl });
395
- }
396
- return installSkillFromSource({ ...input, source });
366
+ if (input.overlay || input.exclude?.length || input.configDir)
367
+ throw new Error("package installs use the prepared manifest tree and the active Clio profile");
368
+ const entry = resolveLibraryPackage(source, input.cwd ? { cwd: input.cwd } : {});
369
+ if (entry.kind !== "skill") throw new Error(`expected a skill package, found ${entry.kind}:${entry.name}`);
370
+ if (input.name && input.name !== entry.name) throw new Error("package identities cannot be renamed at install");
371
+ const plan = planLibraryInstall(entry, {
372
+ ...(input.cwd ? { cwd: input.cwd } : {}),
373
+ scope: input.scope ?? "user",
374
+ force: input.force ?? false,
375
+ });
376
+ installLibraryPlan(plan);
377
+ const candidate = readPluginManifest(plan.path);
378
+ const component = candidate.manifest?.clio.components.find((item) => item.kind === "skill");
379
+ if (!component) throw new Error("installed skill package has no skill component");
380
+ return {
381
+ name: entry.name,
382
+ scope: input.scope ?? "user",
383
+ path: pluginResourcePath(plan.path, component.path),
384
+ sourceUrl: entry.sourceUrl,
385
+ installedHash: plan.sha256,
386
+ warnings: [],
387
+ };
397
388
  }
@@ -143,7 +143,7 @@ export function matchMarketplaceSkills(
143
143
  * is not the enforcement mechanism.
144
144
  *
145
145
  * This gates the promotion flow only. Operator-driven installs through
146
- * `clio-coder skills install <url>` keep their existing behavior.
146
+ * `clio-coder library install <url>` keep their existing behavior.
147
147
  */
148
148
  export const OWN_MARKETPLACE_URL_PREFIX = "https://github.com/iowarp/clio-coder/";
149
149
 
@@ -160,7 +160,7 @@ export function assertPromotionInstallSource(entry: MarketplaceSkill): void {
160
160
  throw new Error(
161
161
  `skill promotion: refusing to install "${entry.name}" from ${entry.sourceUrl}; ` +
162
162
  "promotion installs only from Clio's own marketplace (local catalog or " +
163
- `${OWN_MARKETPLACE_URL_PREFIX}). Install manually with clio-coder skills install if intended.`,
163
+ `${OWN_MARKETPLACE_URL_PREFIX}). Install manually with clio-coder library install if intended.`,
164
164
  );
165
165
  }
166
166
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Local-first skill provenance pinning.
3
3
  *
4
- * `skills/registry.yaml` (regenerated with `npm run skills:pin`) pins the
4
+ * `library/skills/registry.yaml` (regenerated with `pnpm run skills:pin`) pins the
5
5
  * provenance-stripped sha256 of every marketplace skill's SKILL.md. At
6
6
  * activation time, a skill carrying marketplace provenance (`registry-id`
7
7
  * frontmatter) is compared against the pinned entry on the same normalized
@@ -16,6 +16,7 @@
16
16
  import { existsSync, readFileSync } from "node:fs";
17
17
  import path from "node:path";
18
18
  import yaml from "yaml";
19
+ import { resolvePackageRoot } from "../../../core/package-root.js";
19
20
 
20
21
  export const SKILL_PIN_MANIFEST_FILENAME = "registry.yaml";
21
22
 
@@ -34,9 +35,21 @@ function isPlainObject(value: unknown): value is Record<string, unknown> {
34
35
  /** Resolve the manifest path using the same catalog resolution as the marketplace. */
35
36
  function resolveSkillPinManifestPath(cwd: string): string | null {
36
37
  const fromEnv = process.env.CLIO_CODER_SKILL_CATALOG_DIR;
37
- const catalogDir = fromEnv && fromEnv.trim().length > 0 ? path.resolve(fromEnv.trim()) : path.join(cwd, "skills");
38
- const manifestPath = path.join(catalogDir, SKILL_PIN_MANIFEST_FILENAME);
39
- return existsSync(manifestPath) ? manifestPath : null;
38
+ if (fromEnv && fromEnv.trim().length > 0) {
39
+ const manifestPath = path.join(path.resolve(fromEnv.trim()), SKILL_PIN_MANIFEST_FILENAME);
40
+ return existsSync(manifestPath) ? manifestPath : null;
41
+ }
42
+ const repoLibraryManifest = path.join(cwd, "library", "skills", SKILL_PIN_MANIFEST_FILENAME);
43
+ if (existsSync(repoLibraryManifest)) return repoLibraryManifest;
44
+ const repoManifest = path.join(cwd, "skills", SKILL_PIN_MANIFEST_FILENAME);
45
+ if (existsSync(repoManifest)) return repoManifest;
46
+ try {
47
+ const bundledManifest = path.join(resolvePackageRoot(), "library", "skills", SKILL_PIN_MANIFEST_FILENAME);
48
+ if (existsSync(bundledManifest)) return bundledManifest;
49
+ } catch {
50
+ // Package root may be unavailable in isolated harnesses.
51
+ }
52
+ return null;
40
53
  }
41
54
 
42
55
  function loadSkillPinManifest(manifestPath: string): Map<string, SkillPinEntry> | null {
@@ -1,7 +1,7 @@
1
1
  import path from "node:path";
2
2
  import { artifactDefaultPath } from "../../core/artifact-paths.js";
3
3
  import { canonicalizeExistingPath } from "../../core/path-canonical.js";
4
- import { ToolNames } from "../../core/tool-names.js";
4
+ import { isHarnessExtensionToolName, ToolNames } from "../../core/tool-names.js";
5
5
  import { extractCommandCdTargets, extractCommandWriteTargets } from "./protected-artifacts.js";
6
6
 
7
7
  /**
@@ -129,7 +129,7 @@ function baseClassify(tool: string): ActionClass | null {
129
129
  case ToolNames.Steer:
130
130
  return "dispatch";
131
131
  default:
132
- return null;
132
+ return isHarnessExtensionToolName(tool) ? "execute" : null;
133
133
  }
134
134
  }
135
135
 
@@ -67,10 +67,12 @@ export const DEFAULT_DAMAGE_CONTROL_PATH_POLICY: PathPolicyInput = {
67
67
  // widen its own permissions in two tool calls. Both are authored by the
68
68
  // operator through the CLI (`clio-coder verifiers author` lands nothing
69
69
  // before `--yes`), so model-side writes and deletes are refused.
70
- // Skills also refuse model-side writes and deletes; installs go through `clio-coder skills install`.
70
+ // Skills also refuse model-side writes and deletes; installs go through `clio-coder library install`.
71
71
  ".clio-coder/safety.yaml",
72
72
  ".clio-coder/verifiers.yaml",
73
73
  ".clio-coder/skills/",
74
+ ".clio-coder/plugins/",
75
+ ".clio-coder/extensions/",
74
76
  "/etc/",
75
77
  "/usr/",
76
78
  "/bin/",
@@ -354,7 +354,7 @@ export function createSafetyPolicyEngine(options: SafetyPolicyEngineOptions = {}
354
354
  }
355
355
  const skillReason =
356
356
  mutationCommand !== null && invokesClioSkillMutation(mutationCommand)
357
- ? "skill installation and updates require the operator CLI or an explicit operator install choice; draft outside active skill roots"
357
+ ? "resource installation and lifecycle changes require the operator CLI or an explicit operator install choice; draft outside installed resource roots"
358
358
  : skillMutationReason(
359
359
  skillRoots,
360
360
  pathPolicyTargets(catalogCommand === null ? call : { tool: ToolNames.Bash, args: { command: catalogCommand } }),
@@ -416,7 +416,14 @@ export function invokesClioSkillMutation(command: string): boolean {
416
416
  args = args.slice(flag === "--skill" || flag === "--api-key" ? 2 : 1);
417
417
  }
418
418
  if (rootHelp) continue;
419
- if (args[0] !== "skills" && args[0] !== "library") continue;
419
+ if (
420
+ args[0] !== "skills" &&
421
+ args[0] !== "library" &&
422
+ args[0] !== "plugins" &&
423
+ args[0] !== "extensions" &&
424
+ args[0] !== "interop"
425
+ )
426
+ continue;
420
427
  if (resourceCliMutatesSkills(args[0], args.slice(1))) return true;
421
428
  }
422
429
  return false;
@@ -440,7 +447,10 @@ function shellCommandArguments(segment: ReadonlyArray<ShellToken>): string[] {
440
447
  return args.map((token) => token.value);
441
448
  }
442
449
 
443
- function resourceCliMutatesSkills(resource: "skills" | "library", args: ReadonlyArray<string>): boolean {
450
+ function resourceCliMutatesSkills(
451
+ resource: "skills" | "library" | "plugins" | "extensions" | "interop",
452
+ args: ReadonlyArray<string>,
453
+ ): boolean {
444
454
  // Both resource parsers accept flags before the verb. Consume their value
445
455
  // options so a catalog path called --yes or --help is not treated as a flag.
446
456
  const valueOptions =
@@ -449,6 +459,7 @@ function resourceCliMutatesSkills(resource: "skills" | "library", args: Readonly
449
459
  : ["--kind", "--from"];
450
460
  let verb: string | undefined;
451
461
  let confirmed = false;
462
+ let dryRun = false;
452
463
  for (let index = 0; index < args.length; index += 1) {
453
464
  const arg = args[index];
454
465
  if (arg === undefined) continue;
@@ -458,12 +469,17 @@ function resourceCliMutatesSkills(resource: "skills" | "library", args: Readonly
458
469
  }
459
470
  if (arg === "--help" || arg === "-h") return false;
460
471
  if (arg === "--yes") confirmed = true;
472
+ if (arg === "--dry-run") dryRun = true;
461
473
  if (!arg.startsWith("-")) verb ??= arg;
462
474
  }
463
475
  if (resource === "skills") return verb === "install" || verb === "update" || verb === "sync";
464
- // Unconfirmed library add only prints a plan. A confirmed add can install
465
- // skill dependencies of any resource kind, or resolve an untyped skill ref.
466
- return verb === "add" && confirmed;
476
+ if (resource === "plugins" || resource === "extensions")
477
+ return ["install", "update", "remove", "enable", "disable", "pin"].includes(verb ?? "");
478
+ if (resource === "interop") return verb === "adopt" && confirmed && !dryRun;
479
+ // A package of any kind may carry skills or require a skill dependency.
480
+ // Only install/update implement a dry-run; other mutations cannot spend it.
481
+ if ((verb === "install" || verb === "update") && dryRun) return false;
482
+ return ["install", "update", "remove", "enable", "disable", "pin", "register", "sync"].includes(verb ?? "");
467
483
  }
468
484
 
469
485
  const STANDARD_DEV_TARGETS = new Set(["/dev/null", "/dev/stdout", "/dev/stderr", "/dev/tty", "/dev/zero"]);
@@ -10,7 +10,10 @@ import { extractCommandCdTargets } from "./protected-artifacts.js";
10
10
  * may install or replace a symlink after the session starts. Reads stay allowed.
11
11
  */
12
12
  export function activeClioSkillRoots(cwd: string): string[] {
13
- return [path.join(cwd, ".clio-coder", "skills"), path.join(clioConfigDir(), "skills")];
13
+ return ["skills", "plugins", "extensions"].flatMap((kind) => [
14
+ path.join(cwd, ".clio-coder", kind),
15
+ path.join(clioConfigDir(), kind),
16
+ ]);
14
17
  }
15
18
 
16
19
  export function skillMutationReason(
@@ -40,7 +43,7 @@ export function skillMutationReason(
40
43
  isSameOrDescendant(candidate, boundary) ||
41
44
  (target.operation === "delete" && isSameOrDescendant(boundary, candidate))
42
45
  ) {
43
- return `active skill tree ${root} is operator-owned; draft changes outside active skill roots and ask the operator to install or update them`;
46
+ return `active resource tree ${root} is operator-owned; draft changes outside installed resource roots and use the operator install or update interface`;
44
47
  }
45
48
  }
46
49
  }
@@ -644,7 +644,7 @@ function withStagedExtensionPackage<T>(
644
644
  input: { id: string; files: ReadonlyArray<{ relativePath: string; buffer: Buffer }> },
645
645
  fn: (root: string) => T,
646
646
  ): T {
647
- const stagingParent = mkdtempSync(path.join(tmpdir(), "clio-share-extension-"));
647
+ const stagingParent = mkdtempSync(path.join(tmpdir(), "clio-coder-share-extension-"));
648
648
  const root = path.join(stagingParent, input.id);
649
649
  try {
650
650
  mkdirSync(root, { recursive: true });
@@ -385,6 +385,46 @@ function stripThinkingFromContext(context: Context): Context {
385
385
  };
386
386
  }
387
387
 
388
+ /**
389
+ * Pi 0.85 drops assistant turns with neither text nor tools, even when it has
390
+ * serialized their raw reasoning field. Give only an interrupted, same-model
391
+ * raw-reasoning turn a request-local notice so a continuation retains its work.
392
+ * Never turn private reasoning into answer text or modify the saved transcript.
393
+ * Opaque signatures and cross-model conversion remain the provider's concern.
394
+ */
395
+ function preserveInterruptedReasoning(
396
+ context: Context,
397
+ model: Model<"openai-completions">,
398
+ resolved: ResolvedModelRuntimeCapabilities,
399
+ ): Context {
400
+ if (!resolved.thinking.thinkingActive || model.compat?.requiresThinkingAsText) return context;
401
+ return {
402
+ ...context,
403
+ messages: context.messages.map((message) => {
404
+ if (
405
+ message.role !== "assistant" ||
406
+ message.stopReason !== "length" ||
407
+ message.provider !== model.provider ||
408
+ message.api !== model.api ||
409
+ message.model !== model.id ||
410
+ message.content.length === 0 ||
411
+ !message.content.every(
412
+ (block) =>
413
+ block.type === "thinking" &&
414
+ !block.redacted &&
415
+ block.thinking.trim().length > 0 &&
416
+ ["reasoning", "reasoning_content", "reasoning_text"].includes(block.thinkingSignature ?? ""),
417
+ )
418
+ )
419
+ return message;
420
+ return {
421
+ ...message,
422
+ content: [...message.content, { type: "text" as const, text: "Response interrupted before its answer." }],
423
+ };
424
+ }),
425
+ };
426
+ }
427
+
388
428
  function withStrippedPartial<TEvent extends AssistantMessageEvent>(event: TEvent): TEvent {
389
429
  if (!("partial" in event)) return event;
390
430
  return { ...event, partial: stripThinkingFromMessage(event.partial as AssistantMessage) };
@@ -1041,7 +1081,12 @@ export const openAICompletionsApiProvider: EngineApiProvider<"openai-completions
1041
1081
  ...(options?.apiKey !== undefined ? { apiKey: options.apiKey } : {}),
1042
1082
  ...(options?.signal !== undefined ? { signal: options.signal } : {}),
1043
1083
  },
1044
- (requestModel) => piOpenAICompletions.stream(requestModel, effectiveContext, capturedOptions),
1084
+ (requestModel) =>
1085
+ piOpenAICompletions.stream(
1086
+ requestModel,
1087
+ preserveInterruptedReasoning(effectiveContext, requestModel, resolved),
1088
+ capturedOptions,
1089
+ ),
1045
1090
  ),
1046
1091
  ),
1047
1092
  ),
@@ -1078,7 +1123,12 @@ export const openAICompletionsApiProvider: EngineApiProvider<"openai-completions
1078
1123
  ...(options?.apiKey !== undefined ? { apiKey: options.apiKey } : {}),
1079
1124
  ...(options?.signal !== undefined ? { signal: options.signal } : {}),
1080
1125
  },
1081
- (requestModel) => piOpenAICompletions.streamSimple(requestModel, effectiveContext, capturedOptions),
1126
+ (requestModel) =>
1127
+ piOpenAICompletions.streamSimple(
1128
+ requestModel,
1129
+ preserveInterruptedReasoning(effectiveContext, requestModel, resolved),
1130
+ capturedOptions,
1131
+ ),
1082
1132
  ),
1083
1133
  ),
1084
1134
  ),
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Mario Zechner
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/src/engine/tui.ts CHANGED
@@ -80,11 +80,13 @@ export {
80
80
  getKeybindings,
81
81
  Input,
82
82
  isKeyRelease,
83
+ isKeyRepeat,
83
84
  KeybindingsManager,
84
85
  Markdown,
85
86
  Marked,
86
87
  matchesKey,
87
88
  ProcessTerminal,
89
+ parseKey,
88
90
  ScrollView,
89
91
  setKeybindings,
90
92
  stripTerminalSequences,
@@ -97,6 +99,7 @@ export {
97
99
  visibleWidth,
98
100
  wrapTextWithAnsi,
99
101
  } from "@earendil-works/pi-tui";
102
+ export { decodePrintableKey } from "@earendil-works/pi-tui/dist/keys.js";
100
103
  export {
101
104
  InstrumentedTuiAltScreen,
102
105
  InstrumentedTuiMainScreen,
@@ -1,3 +1,9 @@
1
+ import type { WorkerContextSeed } from "../domains/context/worker/contract.js";
2
+ import { createWorkerContextGuard, WorkerContextExhaustedError } from "../domains/context/worker/pressure.js";
3
+ import { createWorkerObservationStore } from "../domains/context/worker/recall.js";
4
+ import { seededWorkerMessages } from "../worker/context-seed.js";
5
+ import { engineStreamSimple } from "./api-registry.js";
6
+ import { estimateInputTokensFromContext, resolveReservedOutputTokens } from "./apis/output-budget.js";
1
7
  /**
2
8
  * Worker-subprocess engine boundary.
3
9
  *
@@ -10,7 +16,6 @@
10
16
  */
11
17
 
12
18
  import path from "node:path";
13
- import { validateSettingsFile } from "../core/config.js";
14
19
  import {
15
20
  configureGuardrails,
16
21
  guardrailValuesFromSettings,
@@ -18,6 +23,7 @@ import {
18
23
  isWorkerToolCallCapSynthesisReason,
19
24
  } from "../core/guardrails.js";
20
25
  import { runtimeSpeaksResponseSchemaDialect } from "../core/response-schema.js";
26
+ import { readLayeredSettings } from "../core/settings-layers.js";
21
27
  import { agentSkillToolPolicy } from "../core/skill-activation.js";
22
28
  import { type ToolName, ToolNames } from "../core/tool-names.js";
23
29
  import {
@@ -89,6 +95,7 @@ import { createWorkerSafety, createWorkerToolRegistry } from "./worker-tools.js"
89
95
  export interface WorkerRunInput {
90
96
  sessionId?: string;
91
97
  systemPrompt: string;
98
+ contextSeed?: WorkerContextSeed;
92
99
  dynamicPromptMessages?: ReadonlyArray<WorkerPromptMessage>;
93
100
  agentId: string;
94
101
  task: string;
@@ -360,6 +367,8 @@ function resolveWorkerRuntimeBudget(input: Pick<WorkerRunInput, "budget">): Work
360
367
  */
361
368
  export function startWorkerRun(input: WorkerRunInput, emit: WorkerEventEmit): WorkerRunHandle {
362
369
  assertResponseSchemaRuntime(input);
370
+ if (input.contextSeed && input.runtime.kind !== "http")
371
+ throw new Error("worker context: history seeds require a native Pi runtime");
363
372
  // The wire carries the contract as data; the one strict parser owns its
364
373
  // shape. The worker subprocess may not import it (it stays slim), so the
365
374
  // check lands here, before any model call. The wire parser, not the recipe
@@ -382,11 +391,11 @@ export function startWorkerRun(input: WorkerRunInput, emit: WorkerEventEmit): Wo
382
391
  // so it must register them here before any agent.prompt() touches a local
383
392
  // runtime (lmstudio, ollama-native).
384
393
  registerClioApiProviders();
385
- // The worker is a fresh process; mirror the orchestrator's global output
386
- // budget so dispatched runs honor settings.defaults.maxTokens too. Use the
387
- // non-throwing read: a worker must not abort over a settings issue the parent
388
- // already surfaced.
389
- const workerSettings = validateSettingsFile().settings;
394
+ // The worker is a fresh process. Resolve its workspace's trusted settings
395
+ // layers so project output limits and guardrails survive dispatch. Keep the
396
+ // best-effort read: the parent already surfaced settings diagnostics, and
397
+ // untrusted or changed project settings must still fall back to lower layers.
398
+ const workerSettings = readLayeredSettings(input.cwd ?? process.cwd()).settings;
390
399
  setGlobalDefaultMaxOutputTokens(workerSettings.chat.maxOutputTokens);
391
400
  // Same mirroring for guardrail policy: the fresh process needs its settings
392
401
  // projection installed before any registry or tool construction reads it.
@@ -484,6 +493,7 @@ export function startWorkerRun(input: WorkerRunInput, emit: WorkerEventEmit): Wo
484
493
  }
485
494
  : {}),
486
495
  });
496
+ const observations = createWorkerObservationStore();
487
497
  const registry = createWorkerToolRegistry(
488
498
  input.middlewareSnapshot,
489
499
  safety,
@@ -512,6 +522,7 @@ export function startWorkerRun(input: WorkerRunInput, emit: WorkerEventEmit): Wo
512
522
  input.autonomy,
513
523
  (effects) => middlewareToolChoice.apply(effects),
514
524
  input.agentLedger,
525
+ observations.recall,
515
526
  );
516
527
  const contractCwd = input.cwd ?? process.cwd();
517
528
  let resultContractRepairsQueued = 0;
@@ -621,13 +632,46 @@ export function startWorkerRun(input: WorkerRunInput, emit: WorkerEventEmit): Wo
621
632
  input.runtimeResolution?.effectiveThinkingLevel ?? input.thinkingLevel,
622
633
  );
623
634
 
635
+ const inheritedMessages = seededWorkerMessages(input.contextSeed);
636
+ const inheritedCount = inheritedMessages.length;
637
+ const contextGuard = createWorkerContextGuard(observations.archive);
624
638
  const options: EngineAgentOptions = {
639
+ streamFn: (currentModel, currentContext, streamOptions) => {
640
+ const window = input.runtimeResolution?.capabilities.contextWindow ?? currentModel.contextWindow;
641
+ let messages: AgentMessage[];
642
+ try {
643
+ messages = contextGuard({
644
+ messages: currentContext.messages,
645
+ systemPrompt: currentContext.systemPrompt ?? "",
646
+ tools: currentContext.tools ?? [],
647
+ contextWindow: window,
648
+ threshold: workerSettings.context.compaction.threshold,
649
+ autoEvict: workerSettings.context.compaction.auto && workerSettings.context.workingSet.enabled,
650
+ outputReserve: resolveReservedOutputTokens(currentModel.maxTokens, {
651
+ api: currentModel.api,
652
+ contextWindow: window,
653
+ inputTokens: estimateInputTokensFromContext(currentContext),
654
+ }),
655
+ });
656
+ } catch (error) {
657
+ if (error instanceof WorkerContextExhaustedError) {
658
+ workerBoundFailure = error.message;
659
+ emit({ type: "clio_coder_run_outcome", payload: { outcomeCode: "worker_context_exhausted" } });
660
+ }
661
+ throw error;
662
+ }
663
+ return engineStreamSimple(
664
+ currentModel,
665
+ { ...currentContext, messages: messages as typeof currentContext.messages },
666
+ streamOptions,
667
+ );
668
+ },
625
669
  initialState: {
626
670
  systemPrompt: input.systemPrompt,
627
671
  model,
628
672
  thinkingLevel: effectiveThinkingLevel,
629
673
  tools,
630
- messages: [],
674
+ messages: inheritedMessages,
631
675
  },
632
676
  onPayload: async (payload, currentModel) => {
633
677
  const middlewareChoice = middlewareToolChoice.current();
@@ -1003,12 +1047,12 @@ export function startWorkerRun(input: WorkerRunInput, emit: WorkerEventEmit): Wo
1003
1047
  await agent.waitForIdle();
1004
1048
  unsubscribe();
1005
1049
  if (workerBoundFailure !== null) {
1006
- return { messages: agent.state.messages, exitCode: 1 };
1050
+ return { messages: agent.state.messages.slice(inheritedCount), exitCode: 1 };
1007
1051
  }
1008
1052
  if (permissionFailure) {
1009
- return { messages: agent.state.messages, exitCode: WORKER_EXIT_PERMISSION_REQUIRED };
1053
+ return { messages: agent.state.messages.slice(inheritedCount), exitCode: WORKER_EXIT_PERMISSION_REQUIRED };
1010
1054
  }
1011
- const messages = agent.state.messages;
1055
+ const messages = agent.state.messages.slice(inheritedCount);
1012
1056
  const errorMessage = getTerminalAgentError(messages);
1013
1057
  if (errorMessage !== null) {
1014
1058
  if (errorMessage.length > 0) {
@@ -1020,15 +1064,15 @@ export function startWorkerRun(input: WorkerRunInput, emit: WorkerEventEmit): Wo
1020
1064
  } catch (err) {
1021
1065
  unsubscribe();
1022
1066
  if (workerBoundFailure !== null) {
1023
- return { messages: agent.state.messages, exitCode: 1 };
1067
+ return { messages: agent.state.messages.slice(inheritedCount), exitCode: 1 };
1024
1068
  }
1025
1069
  if (permissionFailure) {
1026
- return { messages: agent.state.messages, exitCode: WORKER_EXIT_PERMISSION_REQUIRED };
1070
+ return { messages: agent.state.messages.slice(inheritedCount), exitCode: WORKER_EXIT_PERMISSION_REQUIRED };
1027
1071
  }
1028
1072
  const msg = err instanceof Error ? err.message : String(err);
1029
- emit({ type: "agent_end", messages: agent.state.messages });
1073
+ emit({ type: "agent_end", messages: agent.state.messages.slice(inheritedCount) });
1030
1074
  process.stderr.write(`[worker] agent error: ${msg}\n`);
1031
- return { messages: agent.state.messages, exitCode: 1 };
1075
+ return { messages: agent.state.messages.slice(inheritedCount), exitCode: 1 };
1032
1076
  } finally {
1033
1077
  clearActiveEscalation();
1034
1078
  unsubscribePermission();