@iowarp/clio-coder 0.4.6 → 0.4.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (657) hide show
  1. package/.claude-plugin/marketplace.json +283 -0
  2. package/CHANGELOG.md +50 -0
  3. package/CONTRIBUTING.md +102 -29
  4. package/NOTICE +8 -0
  5. package/README.md +37 -5
  6. package/dist/{acp-UVEVWSDL.js → acp-W3Y3TRHD.js} +12 -12
  7. package/dist/{agents-VWY37DTK.js → agents-J4ICNLQ3.js} +52 -52
  8. package/dist/assets/codewiki.json +1 -1
  9. package/dist/assets/tui-notices/get-east-asian-width-LICENSE +9 -0
  10. package/dist/assets/tui-notices/marked-LICENSE +44 -0
  11. package/dist/assets/tui-notices/pi-tui-LICENSE +21 -0
  12. package/dist/{auth-PCV2XQDV.js → auth-X2UJUMOC.js} +24 -24
  13. package/dist/{builtins-PD652MTK.js → builtins-XLXWWSRF.js} +6 -6
  14. package/dist/{chunk-DZK63TZJ.js → chunk-24S3DN22.js} +336 -612
  15. package/dist/{chunk-NTK3WTHM.js → chunk-24TOGHPO.js} +2 -2
  16. package/dist/{chunk-M6TAYK66.js → chunk-2O2LVQQK.js} +11 -4
  17. package/dist/{chunk-OQM5IVJY.js → chunk-34XHRVKG.js} +3 -3
  18. package/dist/{chunk-LY4N4TTL.js → chunk-3LXJOICS.js} +2 -2
  19. package/dist/{chunk-3BJGMT2D.js → chunk-3XE4NRLF.js} +1 -1
  20. package/dist/{chunk-N2OKBREN.js → chunk-4MFBBY2Z.js} +3 -3
  21. package/dist/{chunk-5VTJP36Q.js → chunk-4N2RZ4TO.js} +2 -2
  22. package/dist/{chunk-WNGF5AJX.js → chunk-4QKAITQT.js} +3 -3
  23. package/dist/chunk-4UHVS5T7.js +207 -0
  24. package/dist/{chunk-GLYBJ4RQ.js → chunk-5AJPUR72.js} +6 -6
  25. package/dist/{chunk-5CY4Q6QI.js → chunk-5EQO5NWP.js} +105 -3
  26. package/dist/{chunk-6HAO6X5B.js → chunk-65BGHOUR.js} +8 -5
  27. package/dist/{chunk-6VRRJT7L.js → chunk-6CA2BHOR.js} +2 -2
  28. package/dist/{chunk-HL26ADLH.js → chunk-6CB2IL4N.js} +2 -1
  29. package/dist/{chunk-E7RF4KBO.js → chunk-6LRLOJHQ.js} +3 -3
  30. package/dist/{chunk-HXHFDHB6.js → chunk-6TAATXXH.js} +6 -6
  31. package/dist/{chunk-P6M7RKMI.js → chunk-6YHPAAZR.js} +3 -3
  32. package/dist/{chunk-5QRX7SLS.js → chunk-7EEGBKV4.js} +7 -7
  33. package/dist/{chunk-BS4GAMUB.js → chunk-A67NR5AT.js} +2 -2
  34. package/dist/{chunk-WJIMKGD6.js → chunk-BAU36233.js} +8 -8
  35. package/dist/{chunk-PZN2LQY6.js → chunk-BO4XV5VX.js} +4 -4
  36. package/dist/{chunk-I2K2NCZQ.js → chunk-BQQ5MXUC.js} +6 -6
  37. package/dist/{chunk-X3BI7HTV.js → chunk-C3G5PNUO.js} +21 -21
  38. package/dist/{chunk-SRZOW5L2.js → chunk-C6GEXX4L.js} +1 -1
  39. package/dist/{chunk-6RYDAVQT.js → chunk-CE64C5K5.js} +219 -64
  40. package/dist/chunk-CP3HIR5H.js +2119 -0
  41. package/dist/{chunk-BBV5TKE6.js → chunk-CPXGJI2A.js} +2 -2
  42. package/dist/{chunk-IGLVVNEG.js → chunk-CULVKYTK.js} +4 -4
  43. package/dist/{chunk-DXLUVUD4.js → chunk-D2T66PDV.js} +5 -5
  44. package/dist/{chunk-NF3BK5WR.js → chunk-DACXIVVF.js} +5 -5
  45. package/dist/{chunk-IKRWLEDA.js → chunk-DLIYANB7.js} +20 -15
  46. package/dist/{chunk-RGZNQ5CT.js → chunk-DO7M3LSX.js} +9 -9
  47. package/dist/{chunk-2QPI3TR3.js → chunk-DVJL77SO.js} +2 -2
  48. package/dist/{chunk-ODUTYZIU.js → chunk-EUEXGXXR.js} +5 -5
  49. package/dist/{chunk-WKUYQBCG.js → chunk-EUZRMP4Y.js} +18 -16
  50. package/dist/{chunk-JMPL7NUB.js → chunk-G4LGUTOE.js} +4 -4
  51. package/dist/{chunk-CBSKDFWL.js → chunk-GEVQNST4.js} +2 -2
  52. package/dist/{chunk-NNWJYUNO.js → chunk-GFQ7P2UF.js} +7 -7
  53. package/dist/{chunk-SXQKNKRA.js → chunk-GI5RRMAH.js} +14 -14
  54. package/dist/{chunk-HPTJF6DG.js → chunk-GVZFCJHE.js} +336 -83
  55. package/dist/{chunk-ACCKVSHU.js → chunk-GXIWHXDB.js} +3 -3
  56. package/dist/{chunk-LUL5Z66S.js → chunk-HOX4YZ2K.js} +6 -5
  57. package/dist/chunk-HRAKUPIH.js +57 -0
  58. package/dist/{chunk-F5Z7EWMN.js → chunk-IJMW64DX.js} +50 -50
  59. package/dist/{chunk-QNWRHOMF.js → chunk-IMOD2YPV.js} +16 -9
  60. package/dist/{chunk-HZ2T2YED.js → chunk-IQCNVLO6.js} +28 -8
  61. package/dist/{chunk-HZFBVU5X.js → chunk-ISNCCX42.js} +8 -8
  62. package/dist/{chunk-7JSSKXG2.js → chunk-IZYTT3CD.js} +7 -3
  63. package/dist/chunk-KKEYGFX4.js +915 -0
  64. package/dist/{chunk-HHVJNVUJ.js → chunk-KS7ETA3P.js} +2 -2
  65. package/dist/{chunk-BLTEAUCB.js → chunk-L3Z5ANCV.js} +7 -7
  66. package/dist/{chunk-4VMV6OS6.js → chunk-LBFQMYS3.js} +2 -2
  67. package/dist/{chunk-URBGEOH3.js → chunk-M6Z2V6YU.js} +5 -5
  68. package/dist/{chunk-BT7HGDOX.js → chunk-MBJO5VNZ.js} +12 -12
  69. package/dist/chunk-MNQN3X6Y.js +595 -0
  70. package/dist/{chunk-3QKXHCGS.js → chunk-MZHXENL7.js} +5 -5
  71. package/dist/chunk-MZNWZUJM.js +1801 -0
  72. package/dist/{chunk-7YJWEF2L.js → chunk-N37QC5FV.js} +5 -5
  73. package/dist/{chunk-TJFDL26W.js → chunk-NCCQ6DVS.js} +7 -7
  74. package/dist/{chunk-P5JMBPDJ.js → chunk-NO7J45X6.js} +162 -47
  75. package/dist/chunk-OH3YYA3B.js +15 -0
  76. package/dist/{chunk-22PQ4TX4.js → chunk-P4DL2LM5.js} +16 -77
  77. package/dist/{chunk-LIN2K3EL.js → chunk-PFLOULP3.js} +4 -4
  78. package/dist/{chunk-QXFBABFJ.js → chunk-QKWL7SYE.js} +11 -11
  79. package/dist/chunk-RFCKPS2V.js +26 -0
  80. package/dist/{chunk-ZS43Y2FT.js → chunk-RTLNFZMD.js} +12 -4
  81. package/dist/{chunk-U7H5WRG5.js → chunk-RXFPB32E.js} +8 -6
  82. package/dist/{chunk-Q7NNUHQV.js → chunk-SEDI5K5B.js} +16 -16
  83. package/dist/{chunk-WV6TDAPN.js → chunk-SELG4SUR.js} +7 -7
  84. package/dist/{chunk-3WBALRQH.js → chunk-SER7RRAE.js} +27 -832
  85. package/dist/{chunk-K2HL3GBL.js → chunk-T4TY5GG3.js} +165 -15
  86. package/dist/chunk-T7QQBNLH.js +691 -0
  87. package/dist/{chunk-6OII3LOK.js → chunk-TLTGZTXI.js} +3 -3
  88. package/dist/chunk-TZ6UVP2H.js +637 -0
  89. package/dist/{chunk-3JLFK5MW.js → chunk-TZHN5ITX.js} +13 -41
  90. package/dist/{chunk-VANN3GDP.js → chunk-U3TPUXOQ.js} +399 -234
  91. package/dist/{chunk-VHMX7SXF.js → chunk-UA3W4FGC.js} +6 -6
  92. package/dist/{chunk-3O2ZAUGQ.js → chunk-UA6W4XFJ.js} +2 -2
  93. package/dist/chunk-UWD3JD5X.js +709 -0
  94. package/dist/chunk-V4ZKOKRB.js +13433 -0
  95. package/dist/{chunk-NC4KV7EL.js → chunk-VCRVEDUC.js} +5 -5
  96. package/dist/{chunk-4DU2TVI4.js → chunk-VMATUZB6.js} +12 -10
  97. package/dist/{chunk-J2FYEQ5L.js → chunk-VTYHHQ57.js} +2 -2
  98. package/dist/chunk-WB7POC6M.js +891 -0
  99. package/dist/{chunk-3HQVBIKD.js → chunk-WBVKKTUT.js} +2 -2
  100. package/dist/{chunk-EHOSNVVM.js → chunk-WLHX3MM5.js} +6 -2
  101. package/dist/{chunk-24T2YZ7A.js → chunk-WN552PKN.js} +553 -298
  102. package/dist/{chunk-4U4TKZFR.js → chunk-WT5TRMO4.js} +51 -26
  103. package/dist/{chunk-XWMSPJYN.js → chunk-WURGVOZJ.js} +56 -12
  104. package/dist/{chunk-7WUZEB2M.js → chunk-XR3XJN2M.js} +2 -2
  105. package/dist/chunk-XW2UZICE.js +372 -0
  106. package/dist/{chunk-2AKYFREM.js → chunk-XZ6UFQ52.js} +11 -11
  107. package/dist/chunk-Y3JU5RPK.js +8 -0
  108. package/dist/chunk-YKRJTYNP.js +1143 -0
  109. package/dist/{chunk-PWWSIB2A.js → chunk-ZGIGW4ZG.js} +5 -5
  110. package/dist/cli/index.js +34 -36
  111. package/dist/{clio-QQCMTUZE.js → clio-L2P7S2R2.js} +9 -9
  112. package/dist/{code-nav-GUPM6766.js → code-nav-B5LNX4KU.js} +25 -25
  113. package/dist/{components-TNIKXCBH.js → components-63MMQKUT.js} +6 -6
  114. package/dist/{config-IIM7YOD3.js → config-YXARKGTX.js} +70 -67
  115. package/dist/{configure-4ZM5HWJX.js → configure-LMVQJ46J.js} +47 -35
  116. package/dist/{context-OL5P3HEP.js → context-7HJEWTTP.js} +87 -44
  117. package/dist/{context-44BZLJ3J.js → context-XSZKKFBW.js} +14 -14
  118. package/dist/{context-AIDVQKMW.js → context-YG2LZDYZ.js} +60 -58
  119. package/dist/{context-clear-OQV76MYP.js → context-clear-AC5NXHM2.js} +57 -55
  120. package/dist/{context-index-HP2JFUWA.js → context-index-KKTPRV5G.js} +3 -3
  121. package/dist/{context-map-INTXD54D.js → context-map-T7ROR5D5.js} +4 -4
  122. package/dist/{context-working-set-ZUW3EGLS.js → context-working-set-F4Q4J3NS.js} +12 -10
  123. package/dist/{detail-UXPWRANG.js → detail-H73BEF2N.js} +58 -56
  124. package/dist/{dispatch-runner-P3ZW6G77.js → dispatch-runner-3RY5FSJC.js} +74 -72
  125. package/dist/{doctor-JJVGPZWT.js → doctor-EQYJOGUG.js} +44 -30
  126. package/dist/{eval-V2RTN3UH.js → eval-4P7O6CCE.js} +109 -46
  127. package/dist/{evidence-35PYWGSO.js → evidence-D6GUSYJW.js} +57 -55
  128. package/dist/{evidence-CIGGKI6J.js → evidence-O76QF7TZ.js} +62 -59
  129. package/dist/{evolve-33SM3NJP.js → evolve-H47BCETS.js} +58 -56
  130. package/dist/{extensions-YVRHX6ZI.js → extensions-NNL3ZOCU.js} +98 -20
  131. package/dist/{fleet-LFO7SIPC.js → fleet-KMNS6NOM.js} +106 -99
  132. package/dist/{fleet-commands-RLK72GU3.js → fleet-commands-DOWSYCBX.js} +14 -14
  133. package/dist/{fleet-decisions-3SBSCTCW.js → fleet-decisions-S3PTZV2D.js} +9 -9
  134. package/dist/{fleet-graph-JZIBCGMW.js → fleet-graph-F2DE2TME.js} +26 -24
  135. package/dist/{fleet-inspect-2L5YGGZJ.js → fleet-inspect-EN2Q6IVB.js} +60 -57
  136. package/dist/{fleet-preflight-QRSHIIDE.js → fleet-preflight-FRLETDD3.js} +3 -3
  137. package/dist/{fleet-validate-LIAVKDUU.js → fleet-validate-B2XDLS57.js} +28 -29
  138. package/dist/{fleet-verify-JIK3OQZR.js → fleet-verify-4JKUWGJ7.js} +57 -55
  139. package/dist/{fleet-view-IWHYGQKK.js → fleet-view-BHJFW26B.js} +60 -57
  140. package/dist/{init-NJEDOTQW.js → init-XAT5N5YM.js} +79 -74
  141. package/dist/interop-FVECHFKG.js +246 -0
  142. package/dist/{inventory-74UL7UHU.js → inventory-7KFQGLCV.js} +60 -57
  143. package/dist/library-NY2XOT75.js +492 -0
  144. package/dist/library-QAPAO23R.js +306 -0
  145. package/dist/library-import-5Y6MAS3R.js +183 -0
  146. package/dist/library-inventory-JT6HWITQ.js +56 -0
  147. package/dist/library-validation-EQUH25DC.js +42 -0
  148. package/dist/{memory-I76I5VUH.js → memory-DYVTTCP6.js} +58 -56
  149. package/dist/{models-D4YDIQZQ.js → models-MASFJ6Y2.js} +48 -36
  150. package/dist/{monitor-NKVD55HX.js → monitor-YMP4NXJJ.js} +64 -61
  151. package/dist/{orchestrator-I6OATVPK.js → orchestrator-AFQRRTEI.js} +3685 -1841
  152. package/dist/{panes-7BTYH3XQ.js → panes-D3Y2KFG5.js} +4 -4
  153. package/dist/{panes-WPOMEMRH.js → panes-NICTHQCV.js} +7 -7
  154. package/dist/{paths-J3KN7UAO.js → paths-PSFAUIGO.js} +5 -5
  155. package/dist/{preload-EJAWJEIO.js → preload-5Q7VXRFJ.js} +57 -55
  156. package/dist/{reset-4XMQKDNZ.js → reset-7NKZK7JN.js} +9 -9
  157. package/dist/{resources-TVYVXK3Q.js → resources-NILSIZAT.js} +94 -38
  158. package/dist/{run-OWQNNSJU.js → run-BPZGEBZV.js} +121 -105
  159. package/dist/{share-NPZZMUXG.js → share-EZ6ERBMH.js} +31 -28
  160. package/dist/skills-BTVVNYVM.js +100 -0
  161. package/dist/{skills-eval-J5TCKSJA.js → skills-eval-UY34MNK7.js} +110 -72
  162. package/dist/{skills-inventory-7II4DM57.js → skills-inventory-JDHSIA7I.js} +30 -25
  163. package/dist/{slash-commands-MDSDSWYF.js → slash-commands-K4FNQ2AT.js} +49 -46
  164. package/dist/{steer-S7D7IKPU.js → steer-2B3EQGFH.js} +4 -4
  165. package/dist/{support-5VAEC32W.js → support-L2SOL3IE.js} +7 -7
  166. package/dist/{targets-KILZEOCE.js → targets-44VKGFLN.js} +64 -58
  167. package/dist/{tasks-R6P6OV22.js → tasks-3KODKFU7.js} +12 -12
  168. package/dist/{terminal-lease-LZCG2KN3.js → terminal-lease-LXA7MMPO.js} +32 -19
  169. package/dist/{tools-6OCQ6SVB.js → tools-3UB7TEVR.js} +7 -7
  170. package/dist/{trace-JHLXWUMN.js → trace-TAMIU4OJ.js} +5 -4
  171. package/dist/{tui-primitives-RCY2HN7G.js → tui-primitives-A6MUW32V.js} +3 -2
  172. package/dist/{uninstall-FXYMFFRT.js → uninstall-QYVRPEM4.js} +9 -9
  173. package/dist/{upgrade-D2OZH6IQ.js → upgrade-7PMKM2JH.js} +15 -16
  174. package/dist/{usage-PIASNUS4.js → usage-6EQV7EQK.js} +70 -67
  175. package/dist/{verifiers-LTHUY2PX.js → verifiers-JLITWSHU.js} +15 -15
  176. package/dist/{verify-HYF7KBVE.js → verify-T7NAEVIG.js} +13 -13
  177. package/dist/{web-fetch-MQN4FH3X.js → web-fetch-W4TNW4Q7.js} +4 -4
  178. package/dist/{wiki-generate-RK7JQ5NP.js → wiki-generate-T2TJQJUA.js} +81 -76
  179. package/dist/{with-panes-OFTNAR4Y.js → with-panes-CHFC7HGI.js} +4 -4
  180. package/dist/worker/entry.js +283 -76
  181. package/docs/README.md +43 -0
  182. package/docs/architecture/architecture.md +8 -7
  183. package/docs/architecture/artifact-versions.md +3 -3
  184. package/docs/architecture/context-engine.md +35 -1
  185. package/docs/architecture/library.md +32 -0
  186. package/docs/architecture/middleware-and-components.md +1 -1
  187. package/docs/architecture/model-catalog.md +21 -1
  188. package/docs/architecture/pi-boundary.md +18 -0
  189. package/docs/architecture/prompt-envelope-and-tools.md +5 -5
  190. package/docs/architecture/safety-model.md +21 -2
  191. package/docs/architecture/session-lifecycle.md +12 -1
  192. package/docs/architecture/tui-design.md +108 -9
  193. package/docs/architecture/worker-context.md +106 -0
  194. package/docs/guide/authoring-plugins.md +160 -0
  195. package/docs/guide/built-in-agents.md +5 -5
  196. package/docs/guide/commands-and-modes.md +161 -56
  197. package/docs/guide/configuration-and-targets.md +1 -1
  198. package/docs/guide/configuration-reference.md +27 -34
  199. package/docs/guide/environment-variables.md +2 -2
  200. package/docs/guide/exit-codes-and-output.md +1 -1
  201. package/docs/guide/extensions-and-sharing.md +93 -53
  202. package/docs/guide/fleet-dispatch.md +31 -4
  203. package/docs/guide/glossary.md +1 -1
  204. package/docs/guide/harness-extensions.md +291 -0
  205. package/docs/guide/installation-and-lifecycle.md +9 -9
  206. package/docs/guide/interop.md +243 -0
  207. package/docs/guide/panes-and-files.md +3 -3
  208. package/docs/guide/plugins.md +80 -0
  209. package/docs/guide/resource-library.md +111 -45
  210. package/docs/guide/skills-marketplace.md +35 -72
  211. package/docs/guide/tool-usage.md +19 -7
  212. package/docs/guide/troubleshooting.md +1 -1
  213. package/docs/process/development-pipeline.md +14 -14
  214. package/docs/process/documentation-coverage.md +28 -1
  215. package/docs/process/documentation-guide.md +15 -7
  216. package/docs/process/eval-runner.md +8 -3
  217. package/docs/process/performance-methodology.md +1 -1
  218. package/docs/process/release-cut-checklist.md +4 -0
  219. package/docs/process/scientific-validation.md +23 -0
  220. package/evals/scalar-decision-machinery.ts +1 -1
  221. package/examples/extensions/README.md +67 -0
  222. package/examples/extensions/lab-status/clio-coder-extension.json +14 -0
  223. package/examples/extensions/lab-status/extension.mjs +68 -0
  224. package/examples/extensions/lab-status/jobs.synthetic.json +9 -0
  225. package/examples/extensions/measurements/clio-coder-extension.json +28 -0
  226. package/examples/extensions/measurements/summarize.cjs +23 -0
  227. package/library/README.md +109 -0
  228. package/library/_authoring/templates/agent/README.md +28 -0
  229. package/library/_authoring/templates/agent/agents/benchmark-scout.md +30 -0
  230. package/library/_authoring/templates/agent/plugin.json +23 -0
  231. package/library/_authoring/templates/fleet/README.md +29 -0
  232. package/library/_authoring/templates/fleet/fleets/pipeline-review.md +31 -0
  233. package/library/_authoring/templates/fleet/plugin.json +23 -0
  234. package/library/_authoring/templates/plugin/README.md +37 -0
  235. package/library/_authoring/templates/plugin/agents/data-curator.md +31 -0
  236. package/library/_authoring/templates/plugin/assets/curation-guide.md +22 -0
  237. package/library/_authoring/templates/plugin/plugin.json +42 -0
  238. package/library/_authoring/templates/plugin/prompts/inspect-dataset.md +15 -0
  239. package/library/_authoring/templates/plugin/skills/dataset-curation/SKILL.md +36 -0
  240. package/library/_authoring/templates/plugin/skills/dataset-curation/evals.md +17 -0
  241. package/library/_authoring/templates/prompt/README.md +28 -0
  242. package/library/_authoring/templates/prompt/plugin.json +23 -0
  243. package/library/_authoring/templates/prompt/prompts/paper-summary.md +26 -0
  244. package/library/_authoring/templates/skill/README.md +24 -0
  245. package/library/_authoring/templates/skill/SKILL.md +39 -0
  246. package/library/_authoring/templates/skill/evals.md +30 -0
  247. package/library/_authoring/templates/skill/plugin.json +23 -0
  248. package/library/agents/README.md +7 -0
  249. package/library/fleets/README.md +7 -0
  250. package/library/plugins/materio/README.md +137 -0
  251. package/library/plugins/materio/ai.iowarp.clio/agents/materio-lab-definer.md +208 -0
  252. package/library/plugins/materio/ai.iowarp.clio/agents/materio-literature-reviewer.md +308 -0
  253. package/library/plugins/materio/ai.iowarp.clio/agents/materio-research-explorer.md +249 -0
  254. package/library/plugins/materio/ai.iowarp.clio/agents/materio-task-executor.md +416 -0
  255. package/library/plugins/materio/ai.iowarp.clio/agents/materio-task-verifier.md +60 -0
  256. package/library/plugins/materio/ai.iowarp.clio/agents/materio-workflow-planner.md +238 -0
  257. package/library/plugins/materio/ai.iowarp.clio/fleets/materio-execute-task.md +50 -0
  258. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/add-task.md +66 -0
  259. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/archive-task.md +65 -0
  260. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/checkpoint.md +26 -0
  261. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/define-research-tasks.md +230 -0
  262. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/define-virtual-lab.md +181 -0
  263. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/execute-task.md +292 -0
  264. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/help.md +129 -0
  265. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/identify-research.md +206 -0
  266. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/literature-review.md +201 -0
  267. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/pause-research.md +12 -0
  268. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/progress.md +105 -0
  269. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/remove-task.md +63 -0
  270. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/resume-research.md +64 -0
  271. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/settings.md +16 -0
  272. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/status.md +92 -0
  273. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/upload-data.md +104 -0
  274. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/wtfp.md +145 -0
  275. package/library/plugins/materio/ai.iowarp.clio/references/execution.md +56 -0
  276. package/library/plugins/materio/ai.iowarp.portability/provenance.json +9 -0
  277. package/library/plugins/materio/assets/actions/add-task.md +86 -0
  278. package/library/plugins/materio/assets/actions/archive-task.md +84 -0
  279. package/library/plugins/materio/assets/actions/checkpoint.md +47 -0
  280. package/library/plugins/materio/assets/actions/define-research-tasks.md +228 -0
  281. package/library/plugins/materio/assets/actions/define-virtual-lab.md +179 -0
  282. package/library/plugins/materio/assets/actions/execute-task.md +290 -0
  283. package/library/plugins/materio/assets/actions/help.md +140 -0
  284. package/library/plugins/materio/assets/actions/identify-research.md +204 -0
  285. package/library/plugins/materio/assets/actions/literature-review.md +199 -0
  286. package/library/plugins/materio/assets/actions/pause-research.md +34 -0
  287. package/library/plugins/materio/assets/actions/progress.md +125 -0
  288. package/library/plugins/materio/assets/actions/remove-task.md +82 -0
  289. package/library/plugins/materio/assets/actions/resume-research.md +84 -0
  290. package/library/plugins/materio/assets/actions/settings.md +38 -0
  291. package/library/plugins/materio/assets/actions/status.md +112 -0
  292. package/library/plugins/materio/assets/actions/upload-data.md +123 -0
  293. package/library/plugins/materio/assets/actions/wtfp.md +179 -0
  294. package/library/plugins/materio/assets/references/research-domains.md +134 -0
  295. package/library/plugins/materio/assets/references/research-policy.md +77 -0
  296. package/library/plugins/materio/assets/references/traditional-workflows.md +146 -0
  297. package/library/plugins/materio/assets/scripts/check_physics.py +271 -0
  298. package/library/plugins/materio/assets/scripts/check_scripts.py +248 -0
  299. package/library/plugins/materio/assets/scripts/project_plugin.py +165 -0
  300. package/library/plugins/materio/assets/scripts/research_state.py +400 -0
  301. package/library/plugins/materio/assets/scripts/verify_citations.py +616 -0
  302. package/library/plugins/materio/assets/templates/RESEARCH.md +39 -0
  303. package/library/plugins/materio/assets/templates/VIRTUAL-LAB.md +120 -0
  304. package/library/plugins/materio/assets/templates/WORKFLOW.md +42 -0
  305. package/library/plugins/materio/assets/templates/config.json +5 -0
  306. package/library/plugins/materio/evals/scripts.yaml +29 -0
  307. package/library/plugins/materio/plugin.json +530 -0
  308. package/library/plugins/materio/skills/materio-lab-definer/SKILL.md +74 -0
  309. package/library/plugins/materio/skills/materio-literature-reviewer/SKILL.md +64 -0
  310. package/library/plugins/materio/skills/materio-research-explorer/SKILL.md +74 -0
  311. package/library/plugins/materio/skills/materio-task-executor/SKILL.md +214 -0
  312. package/library/plugins/materio/skills/materio-task-verifier/SKILL.md +46 -0
  313. package/library/plugins/materio/skills/materio-workflow-planner/SKILL.md +79 -0
  314. package/library/plugins/materio/tests/test_check_physics.py +139 -0
  315. package/library/plugins/materio/tests/test_check_scripts.py +140 -0
  316. package/library/plugins/materio/tests/test_research_state.py +291 -0
  317. package/library/plugins/materio/tests/test_verify_citations.py +337 -0
  318. package/library/prompts/README.md +7 -0
  319. package/library/registry.yaml +921 -0
  320. package/library/skills/README.md +120 -0
  321. package/{skills → library/skills}/coding/ast-grep/SKILL.md +1 -1
  322. package/{skills → library/skills}/coding/ast-grep/evals.md +1 -1
  323. package/library/skills/coding/ast-grep/plugin.json +23 -0
  324. package/{skills → library/skills}/coding/coding-standards/SKILL.md +1 -1
  325. package/{skills → library/skills}/coding/coding-standards/evals.md +1 -1
  326. package/library/skills/coding/coding-standards/plugin.json +23 -0
  327. package/{skills → library/skills}/coding/prototype/SKILL.md +1 -1
  328. package/{skills → library/skills}/coding/prototype/evals.md +1 -1
  329. package/library/skills/coding/prototype/plugin.json +23 -0
  330. package/{skills → library/skills}/coding/tdd/SKILL.md +1 -1
  331. package/{skills → library/skills}/coding/tdd/evals.md +1 -1
  332. package/library/skills/coding/tdd/plugin.json +23 -0
  333. package/{skills → library/skills}/context/context-handoff/SKILL.md +1 -1
  334. package/{skills → library/skills}/context/context-handoff/evals.md +1 -1
  335. package/library/skills/context/context-handoff/plugin.json +23 -0
  336. package/{skills → library/skills}/context/context-prime/SKILL.md +1 -1
  337. package/{skills → library/skills}/context/context-prime/evals.md +1 -1
  338. package/library/skills/context/context-prime/plugin.json +23 -0
  339. package/{skills → library/skills}/git/branch-closeout/SKILL.md +1 -1
  340. package/library/skills/git/branch-closeout/plugin.json +23 -0
  341. package/{skills → library/skills}/git/file-ticket/SKILL.md +1 -1
  342. package/library/skills/git/file-ticket/plugin.json +23 -0
  343. package/{skills → library/skills}/git/fix-issue/SKILL.md +1 -1
  344. package/library/skills/git/fix-issue/plugin.json +23 -0
  345. package/{skills → library/skills}/git/resolve-merge-conflicts/SKILL.md +1 -1
  346. package/{skills → library/skills}/git/resolve-merge-conflicts/evals.md +1 -1
  347. package/library/skills/git/resolve-merge-conflicts/plugin.json +23 -0
  348. package/{skills → library/skills}/git/ship/SKILL.md +1 -1
  349. package/library/skills/git/ship/plugin.json +23 -0
  350. package/{skills → library/skills}/git/worktree-create/SKILL.md +1 -1
  351. package/library/skills/git/worktree-create/plugin.json +23 -0
  352. package/{skills → library/skills}/git/worktree-merge/SKILL.md +1 -1
  353. package/library/skills/git/worktree-merge/plugin.json +23 -0
  354. package/{skills → library/skills}/meta/clio-coder-dev/SKILL.md +1 -1
  355. package/{skills → library/skills}/meta/clio-coder-dev/evals.md +1 -1
  356. package/library/skills/meta/clio-coder-dev/plugin.json +23 -0
  357. package/{skills → library/skills}/meta/clio-coder-test/SKILL.md +1 -1
  358. package/{skills → library/skills}/meta/clio-coder-test/evals.md +1 -1
  359. package/library/skills/meta/clio-coder-test/plugin.json +23 -0
  360. package/{skills → library/skills}/meta/credentials/SKILL.md +1 -1
  361. package/{skills → library/skills}/meta/credentials/evals.md +1 -1
  362. package/library/skills/meta/credentials/plugin.json +23 -0
  363. package/library/skills/meta/find-skills/SKILL.md +85 -0
  364. package/library/skills/meta/find-skills/evals.md +65 -0
  365. package/library/skills/meta/find-skills/plugin.json +23 -0
  366. package/{skills → library/skills}/meta/herdr/SKILL.md +1 -1
  367. package/{skills → library/skills}/meta/herdr/evals.md +1 -1
  368. package/library/skills/meta/herdr/plugin.json +23 -0
  369. package/{skills → library/skills}/meta/skill-craft/SKILL.md +23 -9
  370. package/{skills → library/skills}/meta/skill-craft/evals.md +11 -3
  371. package/library/skills/meta/skill-craft/plugin.json +23 -0
  372. package/{skills → library/skills}/planning/archify/SKILL.md +13 -13
  373. package/library/skills/planning/archify/plugin.json +23 -0
  374. package/{skills → library/skills}/planning/architecture/SKILL.md +1 -1
  375. package/{skills → library/skills}/planning/architecture/evals.md +1 -1
  376. package/library/skills/planning/architecture/plugin.json +23 -0
  377. package/{skills → library/skills}/planning/backlog/SKILL.md +1 -1
  378. package/{skills → library/skills}/planning/backlog/evals.md +1 -1
  379. package/library/skills/planning/backlog/plugin.json +23 -0
  380. package/{skills → library/skills}/planning/prd/SKILL.md +1 -1
  381. package/{skills → library/skills}/planning/prd/evals.md +1 -1
  382. package/library/skills/planning/prd/plugin.json +23 -0
  383. package/{skills → library/skills}/planning/product-intent/SKILL.md +1 -1
  384. package/{skills → library/skills}/planning/product-intent/evals.md +1 -1
  385. package/library/skills/planning/product-intent/plugin.json +23 -0
  386. package/{skills → library/skills}/planning/tech-spec/SKILL.md +1 -1
  387. package/{skills → library/skills}/planning/tech-spec/evals.md +1 -1
  388. package/library/skills/planning/tech-spec/plugin.json +23 -0
  389. package/{skills → library/skills}/registry.yaml +7 -7
  390. package/{skills → library/skills}/remote.yaml +1 -1
  391. package/{skills → library/skills}/research/arxiv-literature/SKILL.md +1 -1
  392. package/{skills → library/skills}/research/arxiv-literature/evals.md +1 -1
  393. package/library/skills/research/arxiv-literature/plugin.json +23 -0
  394. package/{skills → library/skills}/research/experiment-protocol/SKILL.md +1 -1
  395. package/{skills → library/skills}/research/experiment-protocol/evals.md +1 -1
  396. package/library/skills/research/experiment-protocol/plugin.json +23 -0
  397. package/{skills → library/skills}/research/scientific-debugging/SKILL.md +1 -1
  398. package/{skills → library/skills}/research/scientific-debugging/evals.md +1 -1
  399. package/library/skills/research/scientific-debugging/plugin.json +23 -0
  400. package/{skills → library/skills}/research/scientific-modernization/SKILL.md +1 -1
  401. package/{skills → library/skills}/research/scientific-modernization/evals.md +1 -1
  402. package/library/skills/research/scientific-modernization/plugin.json +23 -0
  403. package/{skills → library/skills}/skill-marketplace.json +37 -37
  404. package/{skills → library/skills}/workflow/cut-it/SKILL.md +1 -1
  405. package/{skills → library/skills}/workflow/cut-it/evals.md +1 -1
  406. package/library/skills/workflow/cut-it/plugin.json +23 -0
  407. package/{skills → library/skills}/workflow/design-council/SKILL.md +1 -1
  408. package/{skills → library/skills}/workflow/design-council/evals.md +1 -1
  409. package/library/skills/workflow/design-council/plugin.json +23 -0
  410. package/{skills → library/skills}/workflow/grill-me/SKILL.md +1 -1
  411. package/{skills → library/skills}/workflow/grill-me/evals.md +1 -1
  412. package/library/skills/workflow/grill-me/plugin.json +23 -0
  413. package/{skills → library/skills}/workflow/workflow-distiller/SKILL.md +14 -11
  414. package/{skills → library/skills}/workflow/workflow-distiller/evals.md +14 -6
  415. package/library/skills/workflow/workflow-distiller/plugin.json +23 -0
  416. package/package.json +12 -5
  417. package/src/cli/agents.ts +1 -1
  418. package/src/cli/config-inspect.ts +1 -1
  419. package/src/cli/configure.ts +2 -2
  420. package/src/cli/eval.ts +40 -6
  421. package/src/cli/extensions.ts +74 -8
  422. package/src/cli/fleet-preflight.ts +2 -0
  423. package/src/cli/fleet.ts +2 -0
  424. package/src/cli/index.ts +1 -3
  425. package/src/cli/interop-inspect.ts +61 -33
  426. package/src/cli/interop.ts +79 -9
  427. package/src/cli/library-import.ts +139 -0
  428. package/src/cli/library.ts +418 -120
  429. package/src/cli/run.ts +26 -9
  430. package/src/cli/skills-eval.ts +43 -6
  431. package/src/cli/skills-inventory.ts +6 -2
  432. package/src/cli/skills.ts +44 -491
  433. package/src/core/bus-events.ts +5 -0
  434. package/src/core/defaults.ts +1 -1
  435. package/src/core/recent-models.ts +2 -2
  436. package/src/core/session-routing.ts +3 -3
  437. package/src/core/state-file-lock.ts +1 -1
  438. package/src/core/tool-names.ts +5 -0
  439. package/src/domains/agents/extension.ts +42 -6
  440. package/src/domains/agents/fleet-commands.ts +92 -1
  441. package/src/domains/agents/fleet-contract.ts +87 -19
  442. package/src/domains/agents/recipe.ts +5 -4
  443. package/src/domains/agents/registry.ts +80 -24
  444. package/src/domains/config/keybindings.ts +155 -95
  445. package/src/domains/context/worker/contract.ts +91 -0
  446. package/src/domains/context/worker/pressure.ts +120 -0
  447. package/src/domains/context/worker/recall.ts +62 -0
  448. package/src/domains/context/worker/select.ts +164 -0
  449. package/src/domains/context/worker/snapshot.ts +35 -0
  450. package/src/domains/context/worker/store.ts +16 -0
  451. package/src/domains/context/working-set/replay/synthetic.ts +2 -1
  452. package/src/domains/dispatch/active-route-planner.ts +2 -0
  453. package/src/domains/dispatch/backoff.ts +1 -0
  454. package/src/domains/dispatch/code-step.ts +12 -2
  455. package/src/domains/dispatch/contract.ts +3 -0
  456. package/src/domains/dispatch/execution-plan.ts +2 -0
  457. package/src/domains/dispatch/extension.ts +109 -27
  458. package/src/domains/dispatch/fleet-plan.ts +10 -0
  459. package/src/domains/dispatch/fleet-run.ts +1 -0
  460. package/src/domains/dispatch/orphan-recovery.ts +1 -0
  461. package/src/domains/dispatch/receipt-integrity.ts +4 -0
  462. package/src/domains/dispatch/state.ts +1 -0
  463. package/src/domains/dispatch/types.ts +5 -0
  464. package/src/domains/dispatch/validation.ts +12 -0
  465. package/src/domains/dispatch/workspace-checkpoint.ts +1 -1
  466. package/src/domains/evidence/failure-attribution.ts +1 -0
  467. package/src/domains/evidence/trust-status.ts +22 -3
  468. package/src/domains/extensions/command-schema.ts +145 -0
  469. package/src/domains/extensions/command-tools.ts +15 -0
  470. package/src/domains/extensions/compatibility.ts +7 -0
  471. package/src/domains/extensions/contract.ts +0 -4
  472. package/src/domains/extensions/discovery.ts +69 -205
  473. package/src/domains/extensions/extension.ts +0 -4
  474. package/src/domains/extensions/index.ts +1 -5
  475. package/src/domains/extensions/manager.ts +1 -6
  476. package/src/domains/extensions/operator-commands.ts +29 -0
  477. package/src/domains/extensions/operator-runtime.ts +483 -0
  478. package/src/domains/extensions/public-api.ts +53 -0
  479. package/src/domains/extensions/runtime-child.mjs +114 -0
  480. package/src/domains/extensions/runtime-process.ts +306 -0
  481. package/src/domains/extensions/runtime-schema.ts +146 -0
  482. package/src/domains/extensions/{resources.ts → snapshot-access.ts} +1 -17
  483. package/src/domains/extensions/snapshot.ts +4 -32
  484. package/src/domains/extensions/state.ts +5 -83
  485. package/src/domains/extensions/types.ts +33 -34
  486. package/src/domains/interop/adopt.ts +546 -0
  487. package/src/domains/interop/detect.ts +50 -12
  488. package/src/domains/interop/foreign.ts +554 -0
  489. package/src/domains/interop/import.ts +277 -0
  490. package/src/domains/interop/index.ts +24 -0
  491. package/src/domains/interop/install.ts +6 -0
  492. package/src/domains/interop/inventory.ts +351 -0
  493. package/src/domains/interop/projection.ts +360 -0
  494. package/src/domains/interop/registry.ts +106 -3
  495. package/src/domains/interop/types.ts +51 -0
  496. package/src/domains/lifecycle/migrations/index.ts +0 -2
  497. package/src/domains/lifecycle/naming-resources.ts +1 -1
  498. package/src/domains/middleware/marketplace-offer.ts +1 -1
  499. package/src/domains/mux/contract.ts +1 -1
  500. package/src/domains/plugins/catalog.ts +204 -0
  501. package/src/domains/plugins/contract.ts +24 -0
  502. package/src/domains/plugins/discovery.ts +316 -0
  503. package/src/domains/plugins/extension.ts +40 -0
  504. package/src/domains/plugins/index.ts +77 -0
  505. package/src/domains/plugins/integrity.ts +6 -0
  506. package/src/domains/plugins/manifest.ts +3 -0
  507. package/src/domains/plugins/resources.ts +102 -0
  508. package/src/domains/plugins/state.ts +753 -0
  509. package/src/domains/plugins/types.ts +217 -0
  510. package/src/domains/prompts/extension.ts +9 -2
  511. package/src/domains/prompts/fragments/operating/skills.md +10 -10
  512. package/src/domains/resources/common-loader.ts +9 -6
  513. package/src/domains/resources/index.ts +67 -0
  514. package/src/domains/resources/library-actions.ts +836 -0
  515. package/src/domains/resources/library-evals.ts +38 -0
  516. package/src/domains/resources/library-inventory.ts +1048 -0
  517. package/src/domains/resources/library-types.ts +50 -0
  518. package/src/domains/resources/library-validation.ts +634 -0
  519. package/src/domains/resources/library.ts +437 -156
  520. package/src/domains/resources/package-references.ts +66 -0
  521. package/src/domains/resources/prompts/loader.ts +75 -41
  522. package/src/domains/resources/skills/install.ts +2 -2
  523. package/src/domains/resources/skills/loader.ts +77 -22
  524. package/src/domains/resources/skills/marketplace.ts +48 -57
  525. package/src/domains/resources/skills/promotion.ts +2 -2
  526. package/src/domains/resources/skills/provenance-pin.ts +17 -4
  527. package/src/domains/safety/action-classifier.ts +2 -2
  528. package/src/domains/safety/default-path-policy.ts +3 -1
  529. package/src/domains/safety/policy-engine.ts +1 -1
  530. package/src/domains/safety/protected-artifacts.ts +21 -5
  531. package/src/domains/safety/skill-authority.ts +5 -2
  532. package/src/domains/share/archive.ts +1 -1
  533. package/src/engine/apis/openai-completions.ts +52 -2
  534. package/src/engine/notices/pi-tui-LICENSE +21 -0
  535. package/src/engine/tui.ts +3 -0
  536. package/src/engine/worker-runtime.ts +58 -14
  537. package/src/engine/worker-tools.ts +5 -0
  538. package/src/entry/orchestrator.ts +26 -5
  539. package/src/entry/plugin-reload.ts +18 -0
  540. package/src/interactive/application-controller.ts +67 -21
  541. package/src/interactive/chat-loop.ts +32 -5
  542. package/src/interactive/chat-panel.ts +5 -1
  543. package/src/interactive/clio-editor.ts +53 -21
  544. package/src/interactive/command-output.ts +56 -1
  545. package/src/interactive/editor-submit.ts +65 -28
  546. package/src/interactive/fleet-run-preview.ts +2 -0
  547. package/src/interactive/follow-up-queue-panel.ts +3 -3
  548. package/src/interactive/footer/dashboard.ts +4 -1
  549. package/src/interactive/footer/notifications.ts +2 -2
  550. package/src/interactive/footer/widgets.ts +2 -2
  551. package/src/interactive/interactive-application.ts +209 -21
  552. package/src/interactive/interactive-input-runtime.ts +254 -7
  553. package/src/interactive/interactive-presentation.ts +41 -12
  554. package/src/interactive/interactive-slash-runtime.ts +37 -8
  555. package/src/interactive/keybinding-manager.ts +156 -79
  556. package/src/interactive/keyboard-owner.ts +37 -0
  557. package/src/interactive/leader-key.ts +49 -102
  558. package/src/interactive/leader-menu.ts +45 -0
  559. package/src/interactive/overlay-ask-user-lifecycle.ts +9 -1
  560. package/src/interactive/overlay-frame.ts +15 -0
  561. package/src/interactive/overlay-key-routing.ts +46 -47
  562. package/src/interactive/overlay-lifecycle.ts +30 -15
  563. package/src/interactive/overlay-resource-openers.ts +56 -46
  564. package/src/interactive/overlays/ask-user.ts +630 -556
  565. package/src/interactive/overlays/extension-panel.ts +70 -0
  566. package/src/interactive/overlays/extensions.ts +28 -5
  567. package/src/interactive/overlays/fleet-run-approval.ts +7 -3
  568. package/src/interactive/overlays/help-reference.ts +89 -40
  569. package/src/interactive/overlays/interop.ts +122 -3
  570. package/src/interactive/overlays/keybinding-detail.ts +2 -2
  571. package/src/interactive/overlays/library-lifecycle.ts +90 -0
  572. package/src/interactive/overlays/library-model.ts +574 -0
  573. package/src/interactive/overlays/library-review.ts +557 -0
  574. package/src/interactive/overlays/library-tabs.ts +3 -15
  575. package/src/interactive/overlays/library.ts +602 -0
  576. package/src/interactive/overlays/list-overlay.ts +218 -39
  577. package/src/interactive/overlays/model-selector.ts +28 -25
  578. package/src/interactive/overlays/session-selector.ts +9 -3
  579. package/src/interactive/overlays/settings.ts +25 -18
  580. package/src/interactive/overlays/tree-selector.ts +16 -11
  581. package/src/interactive/permission-hint.ts +13 -0
  582. package/src/interactive/permission-overlay.ts +77 -28
  583. package/src/interactive/prompt-source-label.ts +21 -0
  584. package/src/interactive/renderers/reference-card.ts +35 -0
  585. package/src/interactive/renderers/worker-entry.ts +35 -3
  586. package/src/interactive/slash-autocomplete.ts +99 -1
  587. package/src/interactive/slash-commands.ts +390 -67
  588. package/src/interactive/slash-spec.ts +0 -1
  589. package/src/interactive/terminal-lease.ts +44 -12
  590. package/src/interactive/turn-queues.ts +8 -7
  591. package/src/interactive/turn-runtime.ts +1 -1
  592. package/src/interactive/view/view-overlay.ts +19 -14
  593. package/src/interactive/welcome-dashboard.ts +525 -408
  594. package/src/tools/bootstrap.ts +8 -0
  595. package/src/tools/builtin-tool-catalog.ts +7 -2
  596. package/src/tools/context/index.ts +58 -5
  597. package/src/tools/context/library.ts +465 -0
  598. package/src/tools/context/surface.ts +20 -6
  599. package/src/tools/core-bootstrap.ts +3 -0
  600. package/src/tools/dispatch-admission.ts +24 -1
  601. package/src/tools/dispatch-arguments.ts +8 -0
  602. package/src/tools/dispatch-plan.ts +32 -0
  603. package/src/tools/dispatch-schema.ts +31 -1
  604. package/src/tools/dispatch-types.ts +3 -0
  605. package/src/tools/dispatch.ts +1 -1
  606. package/src/tools/harness-extensions.ts +169 -0
  607. package/src/tools/observation.ts +4 -0
  608. package/src/tools/policy.ts +7 -1
  609. package/src/tools/registry.ts +19 -1
  610. package/src/tools/worker-evidence.ts +5 -0
  611. package/src/worker/context-seed.ts +192 -0
  612. package/src/worker/entry.ts +1 -0
  613. package/src/worker/spec-contract.ts +8 -1
  614. package/dist/chunk-3UW3KU4A.js +0 -21
  615. package/dist/chunk-536HXRFE.js +0 -1257
  616. package/dist/chunk-B3MOMLJ4.js +0 -433
  617. package/dist/chunk-CXQ37WJH.js +0 -45
  618. package/dist/chunk-KTFSFCVN.js +0 -46
  619. package/dist/chunk-QCOV5DFY.js +0 -911
  620. package/dist/chunk-QRFXEO6Y.js +0 -17
  621. package/dist/chunk-VAHLPXPY.js +0 -399
  622. package/dist/interop-RVCAYECG.js +0 -115
  623. package/dist/library-CTKZA7K3.js +0 -226
  624. package/dist/skills-OXFEAWMT.js +0 -510
  625. package/skills/README.md +0 -418
  626. package/skills/meta/find-skills/SKILL.md +0 -78
  627. package/skills/meta/find-skills/evals.md +0 -47
  628. package/src/domains/extensions/resource-path.ts +0 -27
  629. package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +0 -27
  630. package/src/interactive/overlays/agents.ts +0 -70
  631. package/src/interactive/overlays/library-install-confirm.ts +0 -152
  632. package/src/interactive/overlays/prompts.ts +0 -89
  633. package/src/interactive/overlays/skills-hub.ts +0 -615
  634. /package/{skills → library/skills}/coding/ast-grep/references/rule_reference.md +0 -0
  635. /package/{skills → library/skills}/coding/prototype/references/LOGIC.md +0 -0
  636. /package/{skills → library/skills}/coding/prototype/references/UI.md +0 -0
  637. /package/{skills → library/skills}/coding/tdd/references/mocking.md +0 -0
  638. /package/{skills → library/skills}/coding/tdd/references/tests.md +0 -0
  639. /package/{skills → library/skills}/context/context-handoff/scripts/new-handoff.sh +0 -0
  640. /package/{skills → library/skills}/git/branch-closeout/evals.md +0 -0
  641. /package/{skills → library/skills}/git/branch-closeout/references/closeout-checklist.md +0 -0
  642. /package/{skills → library/skills}/git/file-ticket/assets/issue-template.md +0 -0
  643. /package/{skills → library/skills}/git/file-ticket/evals.md +0 -0
  644. /package/{skills → library/skills}/git/file-ticket/references/issue-discovery.md +0 -0
  645. /package/{skills → library/skills}/git/fix-issue/evals.md +0 -0
  646. /package/{skills → library/skills}/git/fix-issue/references/diagnosis-and-rca.md +0 -0
  647. /package/{skills → library/skills}/git/resolve-merge-conflicts/references/conflict-matrix.md +0 -0
  648. /package/{skills → library/skills}/git/ship/assets/pr-template.md +0 -0
  649. /package/{skills → library/skills}/git/ship/evals.md +0 -0
  650. /package/{skills → library/skills}/git/ship/references/remote-and-branch-policy.md +0 -0
  651. /package/{skills → library/skills}/git/worktree-create/evals.md +0 -0
  652. /package/{skills → library/skills}/git/worktree-create/references/worktree-setup.md +0 -0
  653. /package/{skills → library/skills}/git/worktree-merge/evals.md +0 -0
  654. /package/{skills → library/skills}/git/worktree-merge/references/merge-strategies.md +0 -0
  655. /package/{skills → library/skills}/meta/clio-coder-test/references/harness.md +0 -0
  656. /package/{skills → library/skills}/meta/clio-coder-test/references/test-map.md +0 -0
  657. /package/{skills → library/skills}/planning/archify/evals.md +0 -0
@@ -54,6 +54,7 @@ import {
54
54
  wrapTextWithAnsi,
55
55
  } from "../../engine/tui.js";
56
56
  import { clockLocal } from "../format-time.js";
57
+ import { localKey } from "../keyboard-owner.js";
57
58
  import { buildHint, DEFAULT_SELECT_THEME, showClioOverlayFrame } from "../overlay-frame.js";
58
59
  import { barSep, clioTheme, GLYPH, padAnsi, rule, screenTitle } from "../theme/index.js";
59
60
  import { modelsForTarget } from "./model-selector.js";
@@ -119,6 +120,7 @@ const SELECT_DOWN = "\u001b[B";
119
120
  /** Settings pickers accept the same j/k navigation as the rows that open them. */
120
121
  class SettingsSelectList extends SelectList {
121
122
  override handleInput(data: string): void {
123
+ data = localKey(data);
122
124
  super.handleInput(data === "j" ? SELECT_DOWN : data === "k" ? SELECT_UP : data);
123
125
  }
124
126
  }
@@ -149,7 +151,7 @@ const SETTINGS_SECTION_DESCRIPTIONS = {
149
151
  orchestrator: "Interactive chat routing, prompt pre-warm, and the optional proactive-memory model plane.",
150
152
  fleet: "Defaults, profiles, agent bindings, and route activation for dispatched workers, and where they run.",
151
153
  targets: "Configured inference targets: which one chat and the fleet use, and whether each answers.",
152
- models: "The /model picker, favorites, and Alt+J / Alt+K cycling.",
154
+ models: "The /model picker, favorites, and configured model cycling.",
153
155
  budget: "Cost ceiling, per-turn output budget, worker concurrency, and the guardrail backstops.",
154
156
  compaction: "When and how the context window is evicted and summarized under pressure.",
155
157
  retry: "Automatic recovery from transient provider, network, and stalled-stream errors.",
@@ -422,7 +424,7 @@ const SETTINGS_DESCRIPTIONS_BY_ID = {
422
424
  "panes.yazi.profile": "Use Clio's managed, themed engine profile or the operator's own file-manager configuration.",
423
425
  "panes.yazi.followCwd": "Push the conversation directory into an already-open companion pane.",
424
426
  "panes.yazi.ratio": "Share of the height the files dock takes, at most half.",
425
- scope: "Alt+J and Alt+K model cycle set.",
427
+ scope: "Configured model-cycle action set.",
426
428
  "modelSelector.recentLimit": "How many recently used models /model remembers.",
427
429
  "modelSelector.favorites": "Exact target/model refs pinned in /model.",
428
430
  "budget.sessionCeilingUsd": "Per-session cost cap.",
@@ -540,7 +542,8 @@ const SETTINGS_HELP_BY_ID: Partial<Record<EditableSettingId, string>> = {
540
542
  "Bind base, custom, and shadow native agents such as scout, researcher, and provenance to profiles. ACP delegation agents cannot be bound.",
541
543
  "delegation.defaults.toolGovernance":
542
544
  "clio-coder-policy gates the agent through Clio's safety net; agent-managed trusts the agent; deny-all blocks every tool.",
543
- scope: "Choose target-level or exact target/model refs. Alt+J / Alt+K step the chat target through this list.",
545
+ scope:
546
+ "Choose target-level or exact target/model refs. Explicit model-cycle bindings step the chat target through this list.",
544
547
  runtimePlugins: "Comma-separated package names, loaded at startup. Restart Clio after changing.",
545
548
  "terminal.notify":
546
549
  "OSC 777, or OSC 9 on iTerm2, Windows Terminal, and ConEmu. Interactive TTY runs only; the body never carries prompt text, file paths, or model output.",
@@ -835,6 +838,7 @@ export class SubmenuWrapper implements Component {
835
838
  }
836
839
 
837
840
  handleInput(data: string): void {
841
+ data = localKey(data);
838
842
  this.child.handleInput?.(data);
839
843
  }
840
844
 
@@ -1253,6 +1257,7 @@ class ScopedModelChecklist implements Component {
1253
1257
  }
1254
1258
 
1255
1259
  handleInput(data: string): void {
1260
+ data = localKey(data);
1256
1261
  const kb = getKeybindings();
1257
1262
  if (kb.matches(data, "tui.select.up") || data === "k") {
1258
1263
  this.selectedRow = this.nextEntryIndex(this.selectedRow - 1, -1);
@@ -3037,10 +3042,6 @@ function fixedLines(lines: readonly string[], width: number, height: number): st
3037
3042
  }
3038
3043
 
3039
3044
  /** Typed text, as opposed to an escape sequence or a control byte. */
3040
- function isPrintableInput(data: string): boolean {
3041
- if (data.length === 0 || data.startsWith("\u001b")) return false;
3042
- return Array.from(data).every((character) => character >= " " && character !== "\u007f");
3043
- }
3044
3045
 
3045
3046
  function scrollWindow(total: number, selected: number, height: number): [number, number] {
3046
3047
  if (height <= 0 || total <= height) return [0, total];
@@ -3303,6 +3304,17 @@ export class SettingsCenter implements Component {
3303
3304
  * Enter commits it and Esc restores the committed query.
3304
3305
  */
3305
3306
  private filterDraft: string | null = null;
3307
+ private readonly filterInput = new Input();
3308
+ get keyboardScope(): "edit" | "review" {
3309
+ return this.filterDraft !== null ? "edit" : "review";
3310
+ }
3311
+ undoInput(): boolean {
3312
+ if (this.filterDraft === null) return false;
3313
+ this.filterInput.applyEdit("undo");
3314
+ this.filterDraft = this.filterInput.getValue();
3315
+ this.normalizeSelection();
3316
+ return true;
3317
+ }
3306
3318
  /** Local cycle preview for the selected row; committed on Enter. */
3307
3319
  private pendingValue: string | null = null;
3308
3320
 
@@ -3360,6 +3372,7 @@ export class SettingsCenter implements Component {
3360
3372
  * presses and do nothing.
3361
3373
  */
3362
3374
  handleInput(data: string): void {
3375
+ data = localKey(data);
3363
3376
  if (isKeyRelease(data)) return;
3364
3377
  if (matchesKey(data, "escape")) {
3365
3378
  this.back();
@@ -3376,6 +3389,7 @@ export class SettingsCenter implements Component {
3376
3389
  const kb = getKeybindings();
3377
3390
  if (data === "/") {
3378
3391
  this.filterDraft = this.filterQuery;
3392
+ this.filterInput.setValue(this.filterDraft);
3379
3393
  return;
3380
3394
  }
3381
3395
  if (matchesKey(data, "tab")) {
@@ -3459,17 +3473,10 @@ export class SettingsCenter implements Component {
3459
3473
  this.options.requestRender?.();
3460
3474
  return;
3461
3475
  }
3462
- if (data === "\x7f" || data === "\b") {
3463
- this.filterDraft = draft.slice(0, -1);
3464
- this.normalizeSelection();
3465
- this.options.requestRender?.();
3466
- return;
3467
- }
3468
- if (isPrintableInput(data)) {
3469
- this.filterDraft = draft + data;
3470
- this.normalizeSelection();
3471
- this.options.requestRender?.();
3472
- }
3476
+ this.filterInput.handleInput(data);
3477
+ this.filterDraft = this.filterInput.getValue();
3478
+ this.normalizeSelection();
3479
+ this.options.requestRender?.();
3473
3480
  }
3474
3481
 
3475
3482
  /** The query the catalog is narrowed by right now: the live draft while the
@@ -2,6 +2,7 @@ import type { SessionContract } from "../../domains/session/contract.js";
2
2
  import type { TreeSnapshot, TreeSnapshotNode } from "../../domains/session/tree/navigator.js";
3
3
  import {
4
4
  type Component,
5
+ Input,
5
6
  matchesKey,
6
7
  type OverlayHandle,
7
8
  type TUI,
@@ -9,6 +10,7 @@ import {
9
10
  visibleWidth,
10
11
  } from "../../engine/tui.js";
11
12
  import { clockLocal, dateLocal } from "../format-time.js";
13
+ import { localKey } from "../keyboard-owner.js";
12
14
  import { buildHint, clioError, FocusBox, showClioOverlayFrame } from "../overlay-frame.js";
13
15
  import { type ClioTheme, clioTheme, GLYPH } from "../theme/index.js";
14
16
 
@@ -204,6 +206,13 @@ export class TreeOverlayView implements Component {
204
206
  private showTimestamps = false;
205
207
  private submode: Submode = "browse";
206
208
  private labelBuffer = "";
209
+ private readonly labelInput = new Input();
210
+ undoInput(): boolean {
211
+ if (this.submode !== "edit-label") return false;
212
+ this.labelInput.applyEdit("undo");
213
+ this.labelBuffer = this.labelInput.getValue();
214
+ return true;
215
+ }
207
216
  private status = "";
208
217
  private statusKind: "info" | "error" = "info";
209
218
 
@@ -300,7 +309,11 @@ export class TreeOverlayView implements Component {
300
309
 
301
310
  invalidate(): void {}
302
311
 
312
+ get keyboardScope(): "edit" | "browse" {
313
+ return this.submode === "edit-label" ? "edit" : "browse";
314
+ }
303
315
  handleInput(data: string): void {
316
+ data = localKey(data);
304
317
  if (this.submode === "edit-label") {
305
318
  this.handleLabelInput(data);
306
319
  return;
@@ -344,6 +357,7 @@ export class TreeOverlayView implements Component {
344
357
  if (data === "e") {
345
358
  this.submode = "edit-label";
346
359
  this.labelBuffer = this.currentRow()?.node.label ?? "";
360
+ this.labelInput.setValue(this.labelBuffer);
347
361
  this.setStatus("");
348
362
  return;
349
363
  }
@@ -375,17 +389,8 @@ export class TreeOverlayView implements Component {
375
389
  this.refresh();
376
390
  return;
377
391
  }
378
- // Backspace: DEL (0x7f) or BS (0x08).
379
- if (data === "\x7f" || data === "\b") {
380
- this.labelBuffer = this.labelBuffer.slice(0, -1);
381
- return;
382
- }
383
- // Swallow other control sequences (arrows, etc.) so they do not end up
384
- // in the label buffer.
385
- if (data.length === 0) return;
386
- // Accept printable chars (including multi-byte UTF-8 runs).
387
- if (data.charCodeAt(0) < 0x20) return;
388
- this.labelBuffer += data;
392
+ this.labelInput.handleInput(data);
393
+ this.labelBuffer = this.labelInput.getValue();
389
394
  }
390
395
 
391
396
  private setStatus(status: string, kind: "info" | "error" = "info"): void {
@@ -14,6 +14,12 @@ export const MUTATION_PREVIEW_KEY = "v";
14
14
  */
15
15
  export type PermissionInspectionHint = "none" | "closed" | "open";
16
16
 
17
+ /** The key that folds and unfolds the standing approval terms on the card. */
18
+ export const PERMISSION_TERMS_KEY = "?";
19
+
20
+ /** Whether the terms are open. The composer rail never shows this key, so it defaults closed there. */
21
+ export type PermissionTermsHint = "closed" | "open";
22
+
17
23
  /**
18
24
  * The keys that answer a parked call, as data, so the dialog footer and the
19
25
  * composer rail render the same policy at any width.
@@ -46,11 +52,18 @@ export type PermissionInspectionHint = "none" | "closed" | "open";
46
52
  export function permissionHintEntries(
47
53
  composerHasDraft = false,
48
54
  inspection: PermissionInspectionHint = "none",
55
+ terms?: PermissionTermsHint,
49
56
  ): HintEntry[] {
50
57
  return [
51
58
  composerHasDraft
52
59
  ? { key: "Backspace", verb: "clear the draft to allow", short: "clear draft", critical: true }
53
60
  : { key: "Enter", verb: "allow once", short: "allow", critical: true },
61
+ // The terms key is the card's own and the most droppable entry: the folded
62
+ // card already states what the keys do in one row. It sits before the
63
+ // inspect key so the narrowing drops it first.
64
+ ...(terms === undefined
65
+ ? []
66
+ : [{ key: PERMISSION_TERMS_KEY, verb: terms === "open" ? "hide terms" : "terms", short: "terms", critical: false }]),
54
67
  ...(inspection === "none"
55
68
  ? []
56
69
  : inspection === "open"
@@ -15,12 +15,24 @@ import {
15
15
  mutationPreviewWindow,
16
16
  } from "./mutation-preview.js";
17
17
  import { fitHintEntries } from "./overlay-frame.js";
18
- import { MUTATION_PREVIEW_KEY, type PermissionInspectionHint, permissionHintEntries } from "./permission-hint.js";
18
+ import {
19
+ MUTATION_PREVIEW_KEY,
20
+ PERMISSION_TERMS_KEY,
21
+ type PermissionInspectionHint,
22
+ type PermissionTermsHint,
23
+ permissionHintEntries,
24
+ } from "./permission-hint.js";
19
25
  import type { ClioToken } from "./theme/index.js";
20
26
 
21
27
  export { type AskAxis, askAxis } from "../domains/safety/approval-axis.js";
22
28
  export { describeCallTarget, sanitizeCallTargetText } from "../domains/safety/call-target.js";
23
- export { MUTATION_PREVIEW_KEY, type PermissionInspectionHint, permissionHintEntries } from "./permission-hint.js";
29
+ export {
30
+ MUTATION_PREVIEW_KEY,
31
+ PERMISSION_TERMS_KEY,
32
+ type PermissionInspectionHint,
33
+ type PermissionTermsHint,
34
+ permissionHintEntries,
35
+ } from "./permission-hint.js";
24
36
 
25
37
  export interface ApprovalRequestView {
26
38
  requestId: string;
@@ -106,12 +118,16 @@ export interface PermissionOverlayBodyHandle extends Component {
106
118
  isInspecting(): boolean;
107
119
  toggleInspect(): void;
108
120
  scrollInspect(delta: number): void;
121
+ /** The standing approval terms, folded behind `?` (see `permissionOverlayLines`). */
122
+ isShowingTerms(): boolean;
123
+ toggleTerms(): void;
109
124
  }
110
125
 
111
126
  class PermissionOverlayBody implements PermissionOverlayBodyHandle {
112
127
  private preview: MutationPreview | null = null;
113
128
  private scroll = 0;
114
129
  private lastLineCount = 0;
130
+ private terms = false;
115
131
 
116
132
  constructor(
117
133
  private readonly view: ApprovalRequestView,
@@ -143,8 +159,16 @@ class PermissionOverlayBody implements PermissionOverlayBodyHandle {
143
159
  this.scroll = Math.max(0, Math.min(this.scroll + delta, maxScroll));
144
160
  }
145
161
 
162
+ isShowingTerms(): boolean {
163
+ return this.terms;
164
+ }
165
+
166
+ toggleTerms(): void {
167
+ this.terms = !this.terms;
168
+ }
169
+
146
170
  render(width: number): string[] {
147
- if (this.preview === null) return permissionOverlayLines(this.view, width);
171
+ if (this.preview === null) return permissionOverlayLines(this.view, width, this.terms);
148
172
  const rendered = permissionInspectionLines(this.view, this.preview, width, this.scroll);
149
173
  this.lastLineCount = rendered.wrappedLineCount;
150
174
  return rendered.lines;
@@ -153,13 +177,18 @@ class PermissionOverlayBody implements PermissionOverlayBodyHandle {
153
177
  invalidate(): void {}
154
178
  }
155
179
 
156
- function truncate(value: string, max: number): string {
157
- return value.length <= max ? value : `${value.slice(0, Math.max(0, max - 1))}…`;
158
- }
159
-
160
- /** `label: value`, with the value ellipsized to what the box actually has. */
161
- function field(label: string, value: string, width: number): string {
162
- return `${label}${truncate(value, Math.max(1, width - label.length))}`;
180
+ /**
181
+ * `label: value`, folded under the label rather than ellipsized.
182
+ *
183
+ * The target used to end in an ellipsis at the box edge, so a deep path lost
184
+ * its file name, which is the one token that says what the write touches. The
185
+ * value now wraps at spaces and hard-folds a token longer than the row, and a
186
+ * continuation row hangs under the value's first column.
187
+ */
188
+ function field(label: string, value: string, width: number): string[] {
189
+ const indent = " ".repeat(label.length);
190
+ const rows = wrapSentence(value, Math.max(1, width - label.length));
191
+ return rows.map((row, index) => `${index === 0 ? label : indent}${row}`);
163
192
  }
164
193
 
165
194
  /**
@@ -235,8 +264,9 @@ export function permissionOverlayHint(
235
264
  innerWidth: number,
236
265
  composerHasDraft = false,
237
266
  inspection: PermissionInspectionHint = "none",
267
+ terms: PermissionTermsHint = "closed",
238
268
  ): string {
239
- return fitHintEntries(permissionHintEntries(composerHasDraft, inspection), innerWidth - 3);
269
+ return fitHintEntries(permissionHintEntries(composerHasDraft, inspection, terms), innerWidth - 3);
240
270
  }
241
271
 
242
272
  /** The tools whose parked call mutates a file, so a card without a preview owes the operator a reason. */
@@ -287,8 +317,8 @@ function permissionInspectionLines(
287
317
  if (preview.neutralized) notes.push("control characters shown as ·");
288
318
  if (preview.tabsExpanded) notes.push("tabs shown as spaces");
289
319
  const lines = [
290
- field("Tool: ", `${view.tool} · Action: ${view.actionClass}`, content),
291
- ...(view.target !== undefined && view.target.length > 0 ? [field("Target: ", view.target, content)] : []),
320
+ ...field("Tool: ", `${view.tool} · Action: ${view.actionClass}`, content),
321
+ ...(view.target !== undefined && view.target.length > 0 ? field("Target: ", view.target, content) : []),
292
322
  ...wrapSentence(`Mutation: ${mutationFactsLine(preview.facts)}`, content),
293
323
  "",
294
324
  ...wrapSentence(preview.heading, content),
@@ -299,6 +329,16 @@ function permissionInspectionLines(
299
329
  return { lines, wrappedLineCount: wrapped.length };
300
330
  }
301
331
 
332
+ /**
333
+ * The one-row statement of what the three keys do, in the presentation's own
334
+ * words, so the folded card still says what allow, deny, and stop mean.
335
+ */
336
+ function termsSummary(presentation: DecisionPresentation, actionClass: string): string {
337
+ const stop = presentation.requiredActions.find((action) => action.id === "stop");
338
+ const stopWords = stop?.consequence.includes("main-agent turn") ? "ends the main-agent turn" : "ends the turn";
339
+ return `Allow runs this one ${actionClass} call and leaves the autonomy level alone. Deny skips it. Stop ${stopWords}. Press ${PERMISSION_TERMS_KEY} for the full terms.`;
340
+ }
341
+
302
342
  /**
303
343
  * The overlay's body, laid out for the width the frame gives it.
304
344
  *
@@ -306,8 +346,14 @@ function permissionInspectionLines(
306
346
  * rest, so a 40-column terminal saw the safety sentences end mid-word and an
307
347
  * 80-column one saw the command being authorized end mid-argument, both with
308
348
  * nothing marking the cut.
349
+ *
350
+ * Seven of the card's thirteen rows were then the same on every call: the
351
+ * approval, consequence, reversibility, deny, stop, and hard-block sentences.
352
+ * They are the terms of the decision, not the decision, so they fold behind
353
+ * `?` and the card leads with what changes per call: the tool, the target in
354
+ * full, the mutation facts, and who asked.
309
355
  */
310
- function permissionOverlayLines(view: ApprovalRequestView, width: number): string[] {
356
+ function permissionOverlayLines(view: ApprovalRequestView, width: number, terms = false): string[] {
311
357
  const content = Math.max(8, Math.floor(width));
312
358
  const presentation = permissionDecisionPresentation(view);
313
359
  // The parked call is awaiting a decision, not blocked: the raw rejection
@@ -315,19 +361,18 @@ function permissionOverlayLines(view: ApprovalRequestView, width: number): strin
315
361
  // wording contradicts the ask. Tool, Target, Action, and the asking axis
316
362
  // carry everything the operator needs to decide.
317
363
  const lines = [
318
- field("Tool: ", `${view.tool} · Action: ${view.actionClass}`, content),
319
- ...(view.target !== undefined && view.target.length > 0 ? [field("Target: ", view.target, content)] : []),
364
+ ...field("Tool: ", `${view.tool} · Action: ${view.actionClass}`, content),
365
+ ...(view.target !== undefined && view.target.length > 0 ? field("Target: ", view.target, content) : []),
320
366
  // Size and digest stay on the collapsed card whether or not the operator
321
367
  // opens the mutation, so the decision always carries the identity of the
322
- // bytes it applies to.
323
- // Wrapped, never ellipsized: at 40 columns the digest is the tail of the
324
- // line, and ellipsizing it would drop the one fact that ties the decision
325
- // to the bytes it applies to.
368
+ // bytes it applies to. Wrapped, never ellipsized: at 40 columns the digest
369
+ // is the tail of the line, and ellipsizing it would drop the one fact that
370
+ // ties the decision to the bytes it applies to.
326
371
  ...(view.mutation !== undefined
327
- ? [
328
- ...wrapSentence(`Mutation: ${mutationFactsLine(view.mutation)}`, content),
329
- ...wrapSentence(`Press ${MUTATION_PREVIEW_KEY} to read it before deciding.`, content),
330
- ]
372
+ ? wrapSentence(
373
+ `Mutation: ${mutationFactsLine(view.mutation)} · press ${MUTATION_PREVIEW_KEY} to read it before deciding`,
374
+ content,
375
+ )
331
376
  : []),
332
377
  ...(view.mutation === undefined && view.origin.kind === "worker" && isFileMutationTool(view.tool)
333
378
  ? wrapSentence(
@@ -336,6 +381,7 @@ function permissionOverlayLines(view: ApprovalRequestView, width: number): strin
336
381
  )
337
382
  : []),
338
383
  ...wrapSentence(`Requested by: ${presentation.requestedByCopy}`, content),
384
+ ...(view.queueDepth !== undefined && view.queueDepth > 1 ? [`1 of ${view.queueDepth} parked`] : []),
339
385
  ...(view.artifact !== undefined
340
386
  ? [
341
387
  "",
@@ -344,16 +390,19 @@ function permissionOverlayLines(view: ApprovalRequestView, width: number): strin
344
390
  ]
345
391
  : []),
346
392
  "",
393
+ ];
394
+ if (!terms) {
395
+ lines.push(...wrapSentence(termsSummary(presentation, view.actionClass), content));
396
+ return lines;
397
+ }
398
+ lines.push(
347
399
  ...wrapSentence(`Approval: ${presentation.authorizationCopy}`, content),
348
400
  ...wrapSentence(`Consequence: ${presentation.consequenceCopy}`, content),
349
401
  ...wrapSentence(presentation.reversibilityCopy, content),
350
402
  ...wrapSentence(`Deny: ${actionConsequence(presentation, "deny")}`, content),
351
403
  ...wrapSentence(`Stop: ${actionConsequence(presentation, "stop")}`, content),
352
404
  ...wrapSentence("Hard-blocked actions remain blocked.", content),
353
- ];
354
- if (view.queueDepth !== undefined && view.queueDepth > 1) {
355
- lines.splice(lines.indexOf(""), 0, `1 of ${view.queueDepth} parked`);
356
- }
405
+ );
357
406
  return lines;
358
407
  }
359
408
 
@@ -0,0 +1,21 @@
1
+ import type { ResourceSourceInfo } from "../domains/resources/collision.js";
2
+
3
+ /**
4
+ * The package a prompt came from, in the words the operator installed it by.
5
+ * A plugin root's source is `plugin:<scope>:<id>`; the rest are Clio's own
6
+ * roots and the foreign roots it reads, which carry the agent kind and scope.
7
+ * A leaf on purpose: the slash registry names the source in a card and must
8
+ * stay off the render graph.
9
+ */
10
+ export function promptSourceLabel(sourceInfo: Pick<ResourceSourceInfo, "source" | "scope">): string {
11
+ const source = sourceInfo.source;
12
+ if (source === undefined) return `${sourceInfo.scope} prompts`;
13
+ const plugin = /^plugin:(?:[^:]+):(.+)$/u.exec(source);
14
+ if (plugin?.[1]) return `plugin ${plugin[1]}`;
15
+ if (source === "config") return "user prompts";
16
+ if (source === "project") return "project prompts";
17
+ if (source === "library") return "library";
18
+ const foreign = /^([a-z0-9-]+)-(user|project)$/u.exec(source);
19
+ if (foreign?.[1] && foreign[2]) return `${foreign[1]} ${foreign[2]} prompts`;
20
+ return source;
21
+ }
@@ -0,0 +1,35 @@
1
+ import { wrapTextWithAnsi } from "../../engine/tui.js";
2
+ import type { PromptReferenceCard } from "../slash-commands.js";
3
+ import { clioTheme, GLYPH } from "../theme/index.js";
4
+
5
+ /** Matches the transcript's prose gutter so the card's body aligns with turns. */
6
+ const CARD_GUTTER = " ";
7
+ const TAB_WIDTH = 4;
8
+
9
+ /**
10
+ * An operator card: a header naming the command and where it came from, then
11
+ * the body wrapped to the width with nothing cut. Box-drawing rows that outrun
12
+ * the width fold onto a second row rather than losing their tail, which is the
13
+ * one rendering rule the card exists for: the words that carry the information
14
+ * are at the ends of the sentences.
15
+ */
16
+ export function renderReferenceCard(card: PromptReferenceCard, width: number): string[] {
17
+ const theme = clioTheme();
18
+ const safeWidth = Math.max(8, width);
19
+ const header = `${theme.fg("dim", GLYPH.user)} ${theme.style("title", `/${card.command}`, { bold: true })} ${theme.fg(
20
+ "dim",
21
+ `reference · ${card.source}`,
22
+ )}`;
23
+ const lines = wrapTextWithAnsi(header, safeWidth);
24
+ const bodyWidth = Math.max(4, safeWidth - CARD_GUTTER.length);
25
+ for (const raw of card.text.split("\n")) {
26
+ const expanded = raw.replace(/\t/g, " ".repeat(TAB_WIDTH)).trimEnd();
27
+ if (expanded.length === 0) {
28
+ lines.push("");
29
+ continue;
30
+ }
31
+ for (const wrapped of wrapTextWithAnsi(expanded, bodyWidth)) lines.push(`${CARD_GUTTER}${wrapped}`);
32
+ }
33
+ lines.push("");
34
+ return lines;
35
+ }
@@ -75,6 +75,26 @@ function outcomeUnit(receipt: WorkerReceiptSummary, word: boolean): string {
75
75
  return theme.fg("error", `${GLYPH.error} ${receipt.outcomeCode ?? receipt.outcome}`);
76
76
  }
77
77
 
78
+ /**
79
+ * A settled worker whose answer is a question for the operator.
80
+ *
81
+ * Materio and WTF-P workers return `needs_input: checkpoint:decision` (or
82
+ * `task_blocked`, or a `## CHECKPOINT REACHED` heading) followed by the
83
+ * questions the orchestrator has to relay. That is a prose convention, not a
84
+ * receipt field, so the transcript reads the first line of the answer.
85
+ */
86
+ const CHECKPOINT_PREFIX = /^\s*(?:needs_input\b|task_blocked\b|##\s*CHECKPOINT REACHED\b|##\s*BLOCKED\b)/iu;
87
+ /** Rows a checkpoint's body keeps on the folded row: the questions are the point of the entry. */
88
+ const CHECKPOINT_PREVIEW_ROWS = 16;
89
+
90
+ export function workerNeedsInput(entry: Pick<WorkerEntryState, "text" | "receipt">): boolean {
91
+ return entry.receipt !== undefined && entry.receipt.stillRunning !== true && CHECKPOINT_PREFIX.test(entry.text);
92
+ }
93
+
94
+ function needsInputUnit(): string {
95
+ return theme.fg("warning", `${GLYPH.phaseBlocked} needs input`);
96
+ }
97
+
78
98
  /** A block with no settled receipt yet: a spinner-free, honest "running". */
79
99
  function pendingUnit(entry: WorkerEntryState): string {
80
100
  return theme.fg(
@@ -100,6 +120,7 @@ function isPending(entry: WorkerEntryState): boolean {
100
120
  */
101
121
  function footerUnits(entry: WorkerEntryState, receipt: WorkerReceiptSummary): string[] {
102
122
  const units = [outcomeUnit(receipt, true)];
123
+ if (workerNeedsInput(entry)) units.push(needsInputUnit());
103
124
  if (receipt.exitCode !== undefined && receipt.exitCode !== 0) {
104
125
  units.push(theme.fg("error", `exit=${receipt.exitCode}`));
105
126
  }
@@ -374,7 +395,11 @@ function footerLine(entry: WorkerEntryState, width: number): string {
374
395
  function actionLine(entry: WorkerEntryState, width: number): string {
375
396
  const identity = `${originGlyph(entry)} ${identityUnits(entry).join(dim(SEPARATOR))}`;
376
397
  const status =
377
- isPending(entry) || entry.receipt === undefined ? pendingUnit(entry) : outcomeUnit(entry.receipt, false);
398
+ isPending(entry) || entry.receipt === undefined
399
+ ? pendingUnit(entry)
400
+ : workerNeedsInput(entry)
401
+ ? needsInputUnit()
402
+ : outcomeUnit(entry.receipt, false);
378
403
  const elapsed =
379
404
  entry.receipt?.durationMs === undefined ? "" : dim(`${SEPARATOR}${formatCompactMs(entry.receipt.durationMs)}`);
380
405
  const full = ` ${status}${elapsed}`;
@@ -413,7 +438,14 @@ export function renderWorkerEntryLines(
413
438
  ].map(redactSecretString);
414
439
  }
415
440
  const budget = (limit: number) => previewBudget(limit, options.terminalRows);
416
- const summary = bodySourceLines(entry).flatMap((line) => railLines(redactSecretString(line), "muted", safeWidth));
441
+ // A checkpoint's body is the question the operator answers next, so it keeps
442
+ // its rows whatever the transcript preset hides of an ordinary answer, and
443
+ // it renders in the warning token rather than as folded prose.
444
+ const needsInput = workerNeedsInput(entry);
445
+ const summaryRows = needsInput ? CHECKPOINT_PREVIEW_ROWS : budget(detail.workerRows);
446
+ const summary = bodySourceLines(entry).flatMap((line) =>
447
+ railLines(redactSecretString(line), needsInput ? "warning" : "muted", safeWidth),
448
+ );
417
449
  const actions = entry.progress
418
450
  ? [...entry.progress.recentActions]
419
451
  .reverse()
@@ -431,7 +463,7 @@ export function renderWorkerEntryLines(
431
463
  const presented = presentedContractAnswer(entry)?.footer;
432
464
  return [
433
465
  actionLine(entry, safeWidth),
434
- ...(detail.workerRows > 0 ? previewRows(summary, budget(detail.workerRows), safeWidth, entry.pending) : []),
466
+ ...(detail.workerRows > 0 || needsInput ? previewRows(summary, summaryRows, safeWidth, entry.pending) : []),
435
467
  ...previewRows(attemptLines(entry, safeWidth), budget(detail.errorRows), safeWidth, true),
436
468
  ...(tools ? [tools] : []),
437
469
  ...(detail.workerActivity ? previewRows(trail, budget(4), safeWidth, true) : []),