@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
@@ -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.",
@@ -229,7 +231,7 @@ export const SETTINGS_LABELS_BY_ID = {
229
231
  "retry.maxDelayMs": "Max delay (ms)",
230
232
  "retry.streamStallMs": "Stream stall timeout (ms)",
231
233
  "terminal.showTerminalProgress": "Terminal progress badges",
232
- "terminal.outputVerbosity": "Output detail",
234
+ "terminal.outputVerbosity": "Output style",
233
235
  "terminal.tuiMode": "TUI mode",
234
236
  "terminal.fullscreenScrollbar": "Fullscreen scrollbar",
235
237
  "terminal.smoothStreaming": "Smooth streaming",
@@ -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.",
@@ -514,7 +516,8 @@ const SETTINGS_HELP_BY_ID: Partial<Record<EditableSettingId, string>> = {
514
516
  "Written by the confirm flow, not by hand, because confirming a remote here would be the record confirming itself. Sync refuses with library_remote_unconfirmed until this equals library.remote. Default: blank.",
515
517
  "library.sync":
516
518
  "Off means `clio-coder library sync` and `push` refuse before touching the network, whatever the remote says. Legal values: true, false · default: false.",
517
- "budget.concurrency": "auto sizes to your machine. A fixed number caps how many workers run at once.",
519
+ "budget.concurrency":
520
+ "auto allows four local workers. A fixed number caps how many workers run at once; the default is one.",
518
521
  "skills.trustProjectCompatRoots":
519
522
  "Project roots like .claude/skills and .codex/skills are untrusted by default; enabling exposes them to the model.",
520
523
  "attribution.gitCommits":
@@ -539,7 +542,8 @@ const SETTINGS_HELP_BY_ID: Partial<Record<EditableSettingId, string>> = {
539
542
  "Bind base, custom, and shadow native agents such as scout, researcher, and provenance to profiles. ACP delegation agents cannot be bound.",
540
543
  "delegation.defaults.toolGovernance":
541
544
  "clio-coder-policy gates the agent through Clio's safety net; agent-managed trusts the agent; deny-all blocks every tool.",
542
- 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.",
543
547
  runtimePlugins: "Comma-separated package names, loaded at startup. Restart Clio after changing.",
544
548
  "terminal.notify":
545
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.",
@@ -550,7 +554,7 @@ const SETTINGS_HELP_BY_ID: Partial<Record<EditableSettingId, string>> = {
550
554
  "watchdog.cadenceToolCalls":
551
555
  "Mid-turn firing is how scope drift becomes visible before the turn ends. Leave blank and the watchdog fires at turn end only.",
552
556
  keybindings:
553
- "Renderer controls: Alt+O newest tool or worker details, Ctrl+Alt+O or Alt+Shift+O all of them, Alt+P live tool output, Alt+R latest reasoning, Ctrl+Alt+R or Alt+Shift+R all reasoning. Override these in settings.yaml or use /help.",
557
+ "Alt+O cycles Output style: Compact, Standard, Detailed. Use /view for full reasoning and action details. Shift+Tab changes model thinking effort.",
554
558
  };
555
559
 
556
560
  /** Per-value meaning, surfaced for the current value of an enum knob. */
@@ -623,9 +627,9 @@ const SETTINGS_VALUE_HELP_BY_ID: Partial<Record<EditableSettingId, Record<string
623
627
  false: "no terminal progress badges",
624
628
  },
625
629
  "terminal.outputVerbosity": {
626
- minimal: "quiet transcript; tools stay to one-line outcomes and reasoning stays folded",
627
- default: "balanced transcript; unfold the latest tool, worker, or reasoning block on demand",
628
- verbose: "transparent transcript; reasoning, arguments, and live tool output stay visible",
630
+ compact: "quiet action summaries, answers, and visible failures",
631
+ standard: "short reasoning and change previews, clear action outcomes",
632
+ detailed: "larger bounded previews; full content is available in /view",
629
633
  },
630
634
  "terminal.tuiMode": {
631
635
  regular: "preserve terminal scrollback and render the composer below the transcript",
@@ -834,6 +838,7 @@ export class SubmenuWrapper implements Component {
834
838
  }
835
839
 
836
840
  handleInput(data: string): void {
841
+ data = localKey(data);
837
842
  this.child.handleInput?.(data);
838
843
  }
839
844
 
@@ -1252,6 +1257,7 @@ class ScopedModelChecklist implements Component {
1252
1257
  }
1253
1258
 
1254
1259
  handleInput(data: string): void {
1260
+ data = localKey(data);
1255
1261
  const kb = getKeybindings();
1256
1262
  if (kb.matches(data, "tui.select.up") || data === "k") {
1257
1263
  this.selectedRow = this.nextEntryIndex(this.selectedRow - 1, -1);
@@ -1923,7 +1929,7 @@ function buildSettingItems(settings: Readonly<ClioSettings>, options?: BuildSett
1923
1929
  values: ["false", "true"],
1924
1930
  }),
1925
1931
  settingItem("terminal.outputVerbosity", terminal.outputDetail, {
1926
- values: ["minimal", "default", "verbose"],
1932
+ values: ["compact", "standard", "detailed"],
1927
1933
  }),
1928
1934
  settingItem("terminal.tuiMode", terminal.mode, {
1929
1935
  values: ["regular", "fullscreen"],
@@ -2555,7 +2561,7 @@ function applySettingChange(settings: ClioSettings, id: string, value: string):
2555
2561
  if (value === "true" || value === "false") settings.interface.terminalProgress = value === "true";
2556
2562
  return;
2557
2563
  case "terminal.outputVerbosity":
2558
- if (value === "minimal" || value === "default" || value === "verbose") settings.interface.outputDetail = value;
2564
+ if (value === "compact" || value === "standard" || value === "detailed") settings.interface.outputDetail = value;
2559
2565
  return;
2560
2566
  case "terminal.tuiMode":
2561
2567
  if (value === "regular" || value === "fullscreen") settings.interface.mode = value;
@@ -3036,10 +3042,6 @@ function fixedLines(lines: readonly string[], width: number, height: number): st
3036
3042
  }
3037
3043
 
3038
3044
  /** Typed text, as opposed to an escape sequence or a control byte. */
3039
- function isPrintableInput(data: string): boolean {
3040
- if (data.length === 0 || data.startsWith("\u001b")) return false;
3041
- return Array.from(data).every((character) => character >= " " && character !== "\u007f");
3042
- }
3043
3045
 
3044
3046
  function scrollWindow(total: number, selected: number, height: number): [number, number] {
3045
3047
  if (height <= 0 || total <= height) return [0, total];
@@ -3302,6 +3304,17 @@ export class SettingsCenter implements Component {
3302
3304
  * Enter commits it and Esc restores the committed query.
3303
3305
  */
3304
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
+ }
3305
3318
  /** Local cycle preview for the selected row; committed on Enter. */
3306
3319
  private pendingValue: string | null = null;
3307
3320
 
@@ -3359,6 +3372,7 @@ export class SettingsCenter implements Component {
3359
3372
  * presses and do nothing.
3360
3373
  */
3361
3374
  handleInput(data: string): void {
3375
+ data = localKey(data);
3362
3376
  if (isKeyRelease(data)) return;
3363
3377
  if (matchesKey(data, "escape")) {
3364
3378
  this.back();
@@ -3375,6 +3389,7 @@ export class SettingsCenter implements Component {
3375
3389
  const kb = getKeybindings();
3376
3390
  if (data === "/") {
3377
3391
  this.filterDraft = this.filterQuery;
3392
+ this.filterInput.setValue(this.filterDraft);
3378
3393
  return;
3379
3394
  }
3380
3395
  if (matchesKey(data, "tab")) {
@@ -3458,17 +3473,10 @@ export class SettingsCenter implements Component {
3458
3473
  this.options.requestRender?.();
3459
3474
  return;
3460
3475
  }
3461
- if (data === "\x7f" || data === "\b") {
3462
- this.filterDraft = draft.slice(0, -1);
3463
- this.normalizeSelection();
3464
- this.options.requestRender?.();
3465
- return;
3466
- }
3467
- if (isPrintableInput(data)) {
3468
- this.filterDraft = draft + data;
3469
- this.normalizeSelection();
3470
- this.options.requestRender?.();
3471
- }
3476
+ this.filterInput.handleInput(data);
3477
+ this.filterDraft = this.filterInput.getValue();
3478
+ this.normalizeSelection();
3479
+ this.options.requestRender?.();
3472
3480
  }
3473
3481
 
3474
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,16 @@
1
+ import { truncateToWidth } from "../../engine/tui.js";
2
+ import { clioTheme } from "../theme/index.js";
3
+
4
+ /** Count terminal rows after wrapping, including the inspection hint. */
5
+ export function previewRows(rows: readonly string[], limit: number, width: number, tail = false): string[] {
6
+ if (rows.length <= limit) return [...rows];
7
+ if (limit <= 0) return [];
8
+ const count = Math.max(0, limit - 1);
9
+ const hint = clioTheme().fg("dim", truncateToWidth(`… ${rows.length - count} rows · /view`, Math.max(1, width)));
10
+ return tail ? [hint, ...rows.slice(rows.length - count)] : [...rows.slice(0, count), hint];
11
+ }
12
+
13
+ /** Leave room for the composer and action identity in a short terminal. */
14
+ export function previewBudget(limit: number, terminalRows = 40): number {
15
+ return Math.min(limit, Math.max(2, Math.floor((terminalRows - 8) / 2)));
16
+ }
@@ -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
+ }