@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
@@ -1,3 +1,6 @@
1
+ import type { TranscriptDetailPolicy } from "../transcript-detail.js";
2
+ import { transcriptDetail } from "../transcript-detail.js";
3
+ import { previewBudget, previewRows } from "./preview.js";
1
4
  /**
2
5
  * Structured renderer for tool-execution chat segments (Slice A of the
3
6
  * pi-coding-agent parity work). pi-coding-agent renders every tool call as
@@ -48,10 +51,7 @@ const ARG_PREVIEW_LIMIT = 60;
48
51
  const WEB_FETCH_ARG_PREVIEW_LIMIT = 140;
49
52
  const FULL_RESULT_PREVIEW_LIMIT = 60_000;
50
53
  const FULL_RESULT_ROW_LIMIT = 120;
51
- const STREAMING_RESULT_ROW_LIMIT = 20;
52
54
  const ARGS_BODY_LINE_LIMIT = 24;
53
- /** Rows of mutation diff a folded edit/write row keeps visible before it defers to the body. */
54
- const FOLDED_DIFF_ROW_LIMIT = 24;
55
55
  const STATUS_OK_GLYPH = GLYPH.ok;
56
56
  const STATUS_ERROR_GLYPH = GLYPH.error;
57
57
 
@@ -111,6 +111,8 @@ export interface ToolBodyRenderOptions {
111
111
  unbounded?: boolean;
112
112
  /** Live rows color mutation diffs; replay and export deliberately use plain text. */
113
113
  diffStyle?: "color" | "plain";
114
+ detail?: TranscriptDetailPolicy;
115
+ terminalRows?: number;
114
116
  }
115
117
 
116
118
  /** Row cap for a tool body: unbounded lifts both the row and char limits. */
@@ -1110,30 +1112,6 @@ function renderResultBlock(
1110
1112
  return renderOutputRows(resultText(unwrapped, resultCharLimit(opts)), width, isError, resultRowLimit(opts));
1111
1113
  }
1112
1114
 
1113
- /**
1114
- * Header-only render for a tool call that has not yet finished. Used by the
1115
- * live chat panel from streamed argument formation through execution. The
1116
- * lifecycle tail distinguishes a forming call, a ready call, and a running
1117
- * call without inventing execution time before Pi starts the tool.
1118
- */
1119
- export function renderToolCallHeader(call: ToolExecutionStart, width: number): string[] {
1120
- return wrap(
1121
- headerLine(call.toolName, call.args, call.phase ?? "running", {
1122
- elapsedMs: call.elapsedMs,
1123
- }),
1124
- width,
1125
- );
1126
- }
1127
-
1128
- /** Running-only footer used when an operator pauses live output; execution continues. */
1129
- export function renderToolRunningStatus(call: ToolExecutionStart, width: number): string[] {
1130
- const elapsed = optionalCompactMs(call.elapsedMs);
1131
- return [
1132
- ...renderToolCallHeader(call, width),
1133
- ...indentAndWrap(dim(elapsed ? `live output paused · ${elapsed}` : "live output paused"), width, false),
1134
- ];
1135
- }
1136
-
1137
1115
  function sublineStatus(call: ToolExecutionStart | ToolExecutionFinished): HeaderStatus {
1138
1116
  // Discriminate on `result` rather than `isError`: only `ToolExecutionFinished`
1139
1117
  // carries a `result` field, so a `ToolExecutionStart` with a stray
@@ -1143,59 +1121,8 @@ function sublineStatus(call: ToolExecutionStart | ToolExecutionFinished): Header
1143
1121
  return call.isError ? "error" : "ok";
1144
1122
  }
1145
1123
 
1146
- /**
1147
- * One-line subline form of a tool call. Format:
1148
- * ▸ <body><status>
1149
- * `status` is "" for in-flight, " ✓" green for success, " ✗" red for error.
1150
- * Output is width-wrapped via wrapTextWithAnsi.
1151
- *
1152
- * When `expandKey` is supplied AND the call has finished, a dim ` (<key>)`
1153
- * discoverability hint rides at the very end of the atomic status tail so users
1154
- * see how to expand the collapsed block. Composing the full line (facts, status
1155
- * glyph, duration, offload, and hint) before wrapping keeps the status glyph
1156
- * and duration together on one row. The hint is suppressed for in-flight calls
1157
- * (still running, no useful body to expand yet) and when `expandKey` is
1158
- * empty/undefined (no key bound, hint would be misleading). The renderer never
1159
- * imports the keybindings manager directly; the caller resolves the key string
1160
- * and passes it in to keep this module pure.
1161
- */
1162
- export interface ToolSublineRenderOptions {
1163
- /** Live rows color the folded mutation diff; replay and export request plain rows. */
1164
- diffStyle?: "color" | "plain";
1165
- /**
1166
- * Whether the folded row carries the extras its tool's presentation asks
1167
- * for (today the bounded mutation diff). The bare subline level drops them;
1168
- * the failure excerpt is not one of them and always rides the row.
1169
- */
1170
- foldedExtras?: "per-tool" | "none";
1171
- }
1172
-
1173
- /**
1174
- * The bounded diff a folded mutation row keeps under itself, when the tool's
1175
- * presentation asks for one and the result carries one. A folded `edit` that
1176
- * hid its change told the operator nothing they could act on.
1177
- */
1178
- function foldedDiffRows(finished: ToolExecutionFinished, width: number, opts: ToolSublineRenderOptions): string[] {
1179
- if (opts.foldedExtras === "none") return [];
1180
- if (finished.isError || isNonExecutedOutcome(finished.outcome)) return [];
1181
- const presentation =
1182
- toolResultPresentationPolicy(finished.result) ?? toolPresentationPolicy(finished.toolName, finished.args);
1183
- if (!presentation.showDiffWhenFolded) return [];
1184
- const diff = resultDiff(finished.result);
1185
- if (diff === null) return [];
1186
- return truncateRowsMiddle(
1187
- renderMutationDiffBlock(diff, width, opts.diffStyle !== "plain"),
1188
- FOLDED_DIFF_ROW_LIMIT,
1189
- false,
1190
- );
1191
- }
1192
-
1193
- export function renderToolSubline(
1194
- call: ToolExecutionStart | ToolExecutionFinished,
1195
- width: number,
1196
- expandKey?: string,
1197
- opts: ToolSublineRenderOptions = {},
1198
- ): string[] {
1124
+ /** Stable action identity, outcome, and captured-result metadata. */
1125
+ export function renderToolSubline(call: ToolExecutionStart | ToolExecutionFinished, width: number): string[] {
1199
1126
  const status = sublineStatus(call);
1200
1127
  const meta: StatusMeta =
1201
1128
  "result" in call
@@ -1208,11 +1135,7 @@ export function renderToolSubline(
1208
1135
  : { elapsedMs: call.elapsedMs };
1209
1136
  const parts = sublineParts(call, status, meta);
1210
1137
  const excerpt = "result" in call ? failureExcerpt(call, width) : "";
1211
- const showHint = "result" in call && expandKey !== undefined && expandKey.length > 0;
1212
- const tail = showHint ? `${parts.tail}${dim(` (${expandKey})`)}` : parts.tail;
1213
- const lines = wrapSublineWithTail(`${parts.lead}${excerpt}`, tail, width);
1214
- if ("result" in call) lines.push(...foldedDiffRows(call, width, opts));
1215
- return lines;
1138
+ return wrapSublineWithTail(`${parts.lead}${excerpt}`, parts.tail, width);
1216
1139
  }
1217
1140
 
1218
1141
  /**
@@ -1300,6 +1223,7 @@ export function renderToolResultOnly(
1300
1223
  width: number,
1301
1224
  opts: ToolBodyRenderOptions = {},
1302
1225
  ): string[] {
1226
+ if (!opts.unbounded && opts.detail) return renderToolPreview(finished, width, opts.detail, opts);
1303
1227
  const status: HeaderStatus = finished.isError ? "error" : "ok";
1304
1228
  const statusMeta: StatusMeta = {
1305
1229
  durationMs: finished.durationMs,
@@ -1315,50 +1239,6 @@ export function renderToolResultOnly(
1315
1239
  return out;
1316
1240
  }
1317
1241
 
1318
- /**
1319
- * Streaming render for an in-flight tool call whose expanded block should
1320
- * surface the latest partial output. Used by the chat panel between
1321
- * `tool_execution_start` and `tool_execution_end` when the user has expanded
1322
- * the tool segment. The header carries the running lifecycle tail, secondary
1323
- * arguments remain visible, and the latest cumulative Pi result renders under
1324
- * a labeled live-output rail capped at the streaming row limit. An empty result renders
1325
- * `(no output yet)` so the user can distinguish a slow start from a stalled
1326
- * call.
1327
- */
1328
- export function renderToolStreamingExecution(
1329
- call: ToolExecutionStart,
1330
- width: number,
1331
- partialResult: unknown,
1332
- ): string[] {
1333
- const out: string[] = [];
1334
- out.push(...renderToolCallHeader({ ...call, phase: "running" }, width));
1335
- out.push(...renderArgsBody(call.toolName, call.args, width, false));
1336
- const partial: ToolExecutionFinished = {
1337
- toolCallId: call.toolCallId,
1338
- toolName: call.toolName,
1339
- args: call.args,
1340
- result: partialResult,
1341
- isError: false,
1342
- };
1343
- out.push(...renderOutputMeta(partial, width, false, "live output"));
1344
- const partialOutput = unwrapResultEnvelope(partialResult);
1345
- if (isEmptyResult(partialOutput)) {
1346
- out.push(...indentAndWrap(dim("(no output yet)"), width, false));
1347
- } else {
1348
- if (call.toolName === "bash") {
1349
- const bashArgs = asBashArgs(redactToolArgs(call.args));
1350
- if (bashArgs !== null) {
1351
- const commandLine = `${cyanBold("$")} ${highlightBashCommand(stripShellWrapperForDisplay(bashArgs.command))}`;
1352
- out.push(...indentAndWrap(commandLine, width, false));
1353
- }
1354
- }
1355
- out.push(
1356
- ...renderOutputRows(resultText(partialOutput, FULL_RESULT_PREVIEW_LIMIT), width, false, STREAMING_RESULT_ROW_LIMIT),
1357
- );
1358
- }
1359
- return out;
1360
- }
1361
-
1362
1242
  /** Display-only lifecycle for operator-issued `!` and `!!` bash commands. */
1363
1243
  export interface BashTranscriptExecution {
1364
1244
  command: string;
@@ -1372,13 +1252,6 @@ export interface BashTranscriptExecution {
1372
1252
  fullOutputPath?: string | undefined;
1373
1253
  excludeFromContext?: boolean | undefined;
1374
1254
  error?: string | undefined;
1375
- /**
1376
- * Whether the block draws its one-line row instead of the full body. The
1377
- * caller resolves this from the transcript detail policy and the operator's
1378
- * override, the same way the panel resolves a model bash call. Omitted means
1379
- * folded.
1380
- */
1381
- folded?: boolean | undefined;
1382
1255
  }
1383
1256
 
1384
1257
  /**
@@ -1389,7 +1262,7 @@ export interface BashTranscriptExecution {
1389
1262
  export function renderBashTranscriptExecution(
1390
1263
  execution: BashTranscriptExecution,
1391
1264
  width: number,
1392
- expandKey?: string,
1265
+ _expandKey?: string,
1393
1266
  bodyOptions: ToolBodyRenderOptions = {},
1394
1267
  ): string[] {
1395
1268
  const shownBytes = Buffer.byteLength(execution.output, "utf8");
@@ -1409,30 +1282,12 @@ export function renderBashTranscriptExecution(
1409
1282
  content: [{ type: "text", text: execution.output }],
1410
1283
  details,
1411
1284
  };
1412
- const folded = execution.folded !== false;
1413
1285
  if (execution.running) {
1414
- if (folded) {
1415
- return renderToolSubline(
1416
- {
1417
- toolCallId: "local-bash",
1418
- toolName: "bash",
1419
- args,
1420
- elapsedMs: execution.elapsedMs,
1421
- phase: "running",
1422
- },
1423
- width,
1424
- );
1425
- }
1426
- return renderToolStreamingExecution(
1427
- {
1428
- toolCallId: "local-bash",
1429
- toolName: "bash",
1430
- args,
1431
- elapsedMs: execution.elapsedMs,
1432
- phase: "running",
1433
- },
1286
+ return renderToolPreview(
1287
+ { toolCallId: "local-bash", toolName: "bash", args, phase: "running", elapsedMs: execution.elapsedMs },
1434
1288
  width,
1435
- result,
1289
+ bodyOptions.detail ?? transcriptDetail(),
1290
+ { ...bodyOptions, operator: true, partialResult: result },
1436
1291
  );
1437
1292
  }
1438
1293
  const message = execution.error?.trim();
@@ -1454,5 +1309,57 @@ export function renderBashTranscriptExecution(
1454
1309
  ...(execution.fullOutputPath !== undefined ? { offloadPath: execution.fullOutputPath } : {}),
1455
1310
  },
1456
1311
  };
1457
- return folded ? renderToolSubline(finished, width, expandKey) : renderToolExecution(finished, width, bodyOptions);
1312
+ return bodyOptions.unbounded
1313
+ ? renderToolExecution(finished, width, bodyOptions)
1314
+ : renderToolPreview(finished, width, bodyOptions.detail ?? transcriptDetail(), { ...bodyOptions, operator: true });
1315
+ }
1316
+
1317
+ /** One action identity plus a bounded result; arguments and full output belong in /view. */
1318
+ export function renderToolPreview(
1319
+ call: ToolExecutionStart | ToolExecutionFinished,
1320
+ width: number,
1321
+ detail: TranscriptDetailPolicy,
1322
+ options: ToolBodyRenderOptions & { terminalRows?: number; partialResult?: unknown; operator?: boolean } = {},
1323
+ ): string[] {
1324
+ const finished = "result" in call ? call : undefined;
1325
+ const failure = finished?.isError === true || finished?.outcome !== undefined;
1326
+ const limit = previewBudget(
1327
+ failure
1328
+ ? detail.errorRows
1329
+ : options.operator
1330
+ ? detail.operatorBashRows
1331
+ : call.toolName === "bash"
1332
+ ? detail.bashRows
1333
+ : detail.resultRows,
1334
+ options.terminalRows,
1335
+ );
1336
+ const rows = renderToolSubline(call, width);
1337
+ const result = finished?.result ?? options.partialResult;
1338
+ const diff = finished && !failure ? resultDiff(result) : null;
1339
+ if (diff !== null && detail.diffRows > 0) {
1340
+ rows.push(
1341
+ ...previewRows(
1342
+ renderMutationDiffBlock(redactSecretString(diff), width, options.diffStyle !== "plain"),
1343
+ previewBudget(detail.diffRows, options.terminalRows),
1344
+ width,
1345
+ ),
1346
+ );
1347
+ } else if (limit > 0 && result !== undefined) {
1348
+ const text = resultText(unwrapResultEnvelope(result), Number.POSITIVE_INFINITY);
1349
+ const body = indentAndWrap(redactSecretString(text), width, failure);
1350
+ rows.push(...previewRows(body, limit, width, call.toolName === "bash" || !finished));
1351
+ }
1352
+ return rows;
1353
+ }
1354
+
1355
+ /** Only ordinary successful observations can lose their individual metadata rows. */
1356
+ export function canGroupObservation(call: ToolExecutionFinished): boolean {
1357
+ return (
1358
+ ["read", "grep", "find", "ls"].includes(call.toolName) &&
1359
+ !call.isError &&
1360
+ !call.outcome &&
1361
+ !call.evictedReason &&
1362
+ !isTruncatedResult(call) &&
1363
+ offloadPathOf(call) === null
1364
+ );
1458
1365
  }
@@ -1,27 +1,8 @@
1
- /**
2
- * Renderer for a worker's transcript block: the attributed stream a `/run`,
3
- * `/delegate`, or model-driven dispatch produces.
4
- *
5
- * One shape serves every runtime. A local Clio worker, a Claude subprocess, and
6
- * a delegated ACP peer differ only in what the header can name about their
7
- * route, so the body, the tool line, and the receipt footer are identical and
8
- * an operator learns one grammar. The origin glyph is the only thing that says
9
- * who asked, which is the same rule the board and the footer chip follow.
10
- *
11
- * ◇ coder · node-a/example-coder-model · run 2mkas6s
12
- * │ Hello! I'm the coder worker.
13
- * │ ⚙ read · artifact
14
- * └ ✓ execution ok · 4.8k tok · 9.6s · contract pass
15
- * │ quality: grounded
16
- *
17
- * Folded (the default for a run the model asked for) keeps identity and
18
- * execution on a tool-style subline, followed by the settled quality fact:
19
- *
20
- * ◆ scout · node-b/example-scout-model · run 3nc18jo ✓ execution ok · 41s (Ctrl+O)
21
- * │ quality: validation failed
22
- *
23
- * Pure: no I/O, no module-level mutable state beyond the shared theme handle.
24
- */
1
+ import { redactSecretString } from "../../domains/safety/redaction.js";
2
+ import type { TranscriptDetailPolicy } from "../transcript-detail.js";
3
+ import { transcriptDetail } from "../transcript-detail.js";
4
+ import { previewBudget, previewRows } from "./preview.js";
5
+ /** Bounded worker summaries share the main transcript's output style. */
25
6
 
26
7
  import { parseJsonObjectPayload } from "../../core/json-payload.js";
27
8
  import { trustStateWord } from "../../domains/evidence/trust-projection.js";
@@ -48,10 +29,8 @@ const SEPARATOR = " · ";
48
29
  const BODY_LINE_LIMIT = 80;
49
30
 
50
31
  export interface WorkerEntryRenderOptions {
51
- /** Collapsed to the header line plus outcome. Default for a run the model asked for. */
52
- folded: boolean;
53
- /** Key hint appended to a folded header, e.g. "Ctrl+O". Omitted when unknown. */
54
- expandKey?: string | undefined;
32
+ detail?: TranscriptDetailPolicy;
33
+ terminalRows?: number;
55
34
  /** Render the full body without the line cap; `/export` sets this. */
56
35
  unbounded?: boolean;
57
36
  }
@@ -96,6 +75,26 @@ function outcomeUnit(receipt: WorkerReceiptSummary, word: boolean): string {
96
75
  return theme.fg("error", `${GLYPH.error} ${receipt.outcomeCode ?? receipt.outcome}`);
97
76
  }
98
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
+
99
98
  /** A block with no settled receipt yet: a spinner-free, honest "running". */
100
99
  function pendingUnit(entry: WorkerEntryState): string {
101
100
  return theme.fg(
@@ -121,6 +120,7 @@ function isPending(entry: WorkerEntryState): boolean {
121
120
  */
122
121
  function footerUnits(entry: WorkerEntryState, receipt: WorkerReceiptSummary): string[] {
123
122
  const units = [outcomeUnit(receipt, true)];
123
+ if (workerNeedsInput(entry)) units.push(needsInputUnit());
124
124
  if (receipt.exitCode !== undefined && receipt.exitCode !== 0) {
125
125
  units.push(theme.fg("error", `exit=${receipt.exitCode}`));
126
126
  }
@@ -392,15 +392,18 @@ function footerLine(entry: WorkerEntryState, width: number): string {
392
392
  * renders only when the caller resolved a key binding for it, so a rebound or
393
393
  * unbound key never advertises a wrong chord.
394
394
  */
395
- function foldedLine(entry: WorkerEntryState, width: number, expandKey: string | undefined): string {
395
+ function actionLine(entry: WorkerEntryState, width: number): string {
396
396
  const identity = `${originGlyph(entry)} ${identityUnits(entry).join(dim(SEPARATOR))}`;
397
397
  const status =
398
- 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);
399
403
  const elapsed =
400
404
  entry.receipt?.durationMs === undefined ? "" : dim(`${SEPARATOR}${formatCompactMs(entry.receipt.durationMs)}`);
401
- const hint = expandKey === undefined || expandKey.length === 0 ? "" : dim(` (${expandKey})`);
402
- const full = ` ${status}${elapsed}${hint}`;
403
- let tail = visibleWidth(identity) + visibleWidth(full) <= width ? full : ` ${status}${hint}`;
405
+ const full = ` ${status}${elapsed}`;
406
+ let tail = visibleWidth(identity) + visibleWidth(full) <= width ? full : ` ${status}`;
404
407
  // Reserve one identity cell. The optional hint yields before execution
405
408
  // status when the suffix alone would exhaust the header's width.
406
409
  if (visibleWidth(tail) >= width) tail = ` ${status}`;
@@ -421,15 +424,60 @@ export function renderWorkerEntryLines(
421
424
  "muted",
422
425
  safeWidth,
423
426
  );
424
- if (options.folded) return [foldedLine(entry, safeWidth, options.expandKey), ...quality];
425
- const tools = toolLine(entry, safeWidth);
427
+ const detail = options.detail ?? transcriptDetail();
428
+ if (options.unbounded) {
429
+ const tools = toolLine(entry, safeWidth);
430
+ return [
431
+ headerLine(entry, safeWidth),
432
+ ...bodyLines(entry, safeWidth, true),
433
+ ...attemptLines(entry, safeWidth),
434
+ ...(tools ? [tools] : []),
435
+ ...failureLines(entry, safeWidth),
436
+ footerLine(entry, safeWidth),
437
+ ...quality,
438
+ ].map(redactSecretString);
439
+ }
440
+ const budget = (limit: number) => previewBudget(limit, options.terminalRows);
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
+ );
449
+ const actions = entry.progress
450
+ ? [...entry.progress.recentActions]
451
+ .reverse()
452
+ .concat(entry.progress.currentAction ? [entry.progress.currentAction] : [])
453
+ : [];
454
+ const trail = actions.flatMap((action) =>
455
+ railLines(
456
+ `${GLYPH.phaseTool} ${action.descriptor ? `${action.descriptor.verb} ${action.descriptor.object}` : action.tool}`,
457
+ "muted",
458
+ safeWidth,
459
+ ),
460
+ );
461
+ const tools = detail.workerActivity && trail.length === 0 ? toolLine(entry, safeWidth) : null;
462
+ const failure = previewRows(failureLines(entry, safeWidth), budget(detail.errorRows), safeWidth);
463
+ const presented = presentedContractAnswer(entry)?.footer;
426
464
  return [
427
- headerLine(entry, safeWidth),
428
- ...bodyLines(entry, safeWidth, options.unbounded === true),
429
- ...attemptLines(entry, safeWidth),
430
- ...(tools === null ? [] : [tools]),
431
- ...failureLines(entry, safeWidth),
432
- footerLine(entry, safeWidth),
465
+ actionLine(entry, safeWidth),
466
+ ...(detail.workerRows > 0 || needsInput ? previewRows(summary, summaryRows, safeWidth, entry.pending) : []),
467
+ ...previewRows(attemptLines(entry, safeWidth), budget(detail.errorRows), safeWidth, true),
468
+ ...(tools ? [tools] : []),
469
+ ...(detail.workerActivity ? previewRows(trail, budget(4), safeWidth, true) : []),
470
+ ...failure,
471
+ ...(presented ? railLines(presented, "muted", safeWidth) : []),
472
+ ...(entry.receipt?.abandonedDetail ? railLines(entry.receipt.abandonedDetail, "warning", safeWidth) : []),
473
+ ...(entry.receipt?.receiptUnavailable ? railLines("receipt unavailable", "warning", safeWidth) : []),
474
+ ...(entry.droppedLines
475
+ ? railLines(
476
+ `… ${entry.droppedLines} earlier lines unavailable here · /view dispatch:${entry.runId}`,
477
+ "muted",
478
+ safeWidth,
479
+ )
480
+ : []),
433
481
  ...quality,
434
- ];
482
+ ].map(redactSecretString);
435
483
  }
@@ -1,3 +1,4 @@
1
+ import { type ExtensionCommandRow, resolveExtensionCommands } from "../domains/extensions/operator-commands.js";
1
2
  import {
2
3
  type AutocompleteItem,
3
4
  type AutocompleteProvider,
@@ -66,9 +67,29 @@ export interface SlashCompletionItem extends AutocompleteItem {
66
67
  cursorOffset?: number;
67
68
  }
68
69
 
70
+ /** The slice of a loaded prompt template that the composer needs to offer it as a slash command. */
71
+ export interface PromptCommandTemplate {
72
+ name: string;
73
+ description: string;
74
+ argumentHint?: string;
75
+ unavailable?: string;
76
+ /** Rendered for the operator on submit; the model never sees it. */
77
+ displayOnly?: boolean;
78
+ }
79
+
80
+ /** The marker a display-only template carries in the menu, beside its description. */
81
+ export const REFERENCE_TEMPLATE_MARKER = "reference";
82
+
69
83
  export interface SlashAutocompleteOptions {
84
+ extensionCommands?: () => ReadonlyArray<ExtensionCommandRow>;
70
85
  basePath?: string;
71
86
  fdPath?: string | null;
87
+ /**
88
+ * Live view of the prompt templates discovered for the current workspace
89
+ * (user, project, and installed plugin roots). Read on every completion so a
90
+ * plugin reload or install shows up without rebuilding the provider.
91
+ */
92
+ promptTemplates?: () => ReadonlyArray<PromptCommandTemplate>;
72
93
  /** Read-only runtime values for the named grammar slots. */
73
94
  completionSources?: CompletionSources;
74
95
  /** Replace the default workspace-aware `@` source without adding a second composer provider. */
@@ -128,7 +149,6 @@ export const COMPLETION_SLOT_MANIFEST: Readonly<Record<string, CompletionSlotNam
128
149
  "panes/show:pos:run-or-agent": "pane-runs-agents",
129
150
  "panes/open:pos:preset-or-argv": "pane-presets",
130
151
  "panes/close:pos:target": "pane-targets",
131
- "resources/library:pos:kind": "library-tabs",
132
152
  "model:pos:pattern": "models",
133
153
  "thinking:pos:level": "thinking-levels",
134
154
  "settings:pos:area": "settings-areas",
@@ -154,12 +174,7 @@ function completionGrammar(command: string, args: CommandArgsSpec): CommandArgsS
154
174
  ? {
155
175
  positionals: spec.positionals.map((pos) => {
156
176
  const completionSlot = COMPLETION_SLOT_MANIFEST[`${path}:pos:${pos.name}`];
157
- const values =
158
- command === "output" && pos.name === "verbosity"
159
- ? (["minimal", "default", "verbose"] as const)
160
- : command === "settings" && pos.name === "area"
161
- ? SETTINGS_AREA_IDS
162
- : undefined;
177
+ const values = command === "settings" && pos.name === "area" ? SETTINGS_AREA_IDS : undefined;
163
178
  return { ...pos, ...(completionSlot ? { completionSlot } : {}), ...(values ? { values } : {}) };
164
179
  }),
165
180
  }
@@ -296,6 +311,7 @@ class ClioAutocompleteProvider implements AutocompleteProvider {
296
311
  private readonly files: CombinedAutocompleteProvider;
297
312
  private readonly fileReferences: FileReferenceCompletionSource;
298
313
  private readonly sourceBySlot: Record<CompletionSlotName, CompletionSource>;
314
+ private readonly promptTemplates: () => ReadonlyArray<PromptCommandTemplate>;
299
315
  private generation = 0;
300
316
 
301
317
  constructor(
@@ -303,10 +319,60 @@ class ClioAutocompleteProvider implements AutocompleteProvider {
303
319
  fdPath: string | null,
304
320
  sources: CompletionSources,
305
321
  fileReferenceSource?: FileReferenceCompletionSource,
322
+ promptTemplates?: () => ReadonlyArray<PromptCommandTemplate>,
323
+ private extensionCommands: () => ReadonlyArray<ExtensionCommandRow> = () => [],
306
324
  ) {
307
325
  this.files = new CombinedAutocompleteProvider([], basePath, fdPath);
308
326
  this.fileReferences = fileReferenceSource ?? createFileReferenceCompletionSource({ basePath });
309
327
  this.sourceBySlot = { ...emptyCompletionSources(), ...sources };
328
+ this.promptTemplates = promptTemplates ?? (() => []);
329
+ }
330
+
331
+ /**
332
+ * Prompt templates as slash commands, after the built-in reference so a
333
+ * template can never shadow a built-in spelling in the menu. Namespaced
334
+ * plugin prompts (`wtfp:help`, `materio:status`) sort with their package.
335
+ */
336
+ private promptCommandItems(
337
+ prefix: string,
338
+ builtinNames: ReadonlySet<string>,
339
+ range: { start: number; end: number },
340
+ ): SlashCompletionItem[] {
341
+ const lowered = prefix.toLowerCase();
342
+ const seen = new Set<string>();
343
+ const items: SlashCompletionItem[] = [];
344
+ const templates = [...this.promptTemplates()].sort((a, b) => a.name.localeCompare(b.name));
345
+ for (const template of templates) {
346
+ const name = template.name;
347
+ if (!name || builtinNames.has(name.toLowerCase()) || seen.has(name)) continue;
348
+ if (!name.toLowerCase().startsWith(lowered) || name === prefix) continue;
349
+ seen.add(name);
350
+ const hint = template.argumentHint?.trim();
351
+ const summary = template.unavailable
352
+ ? `unavailable: ${template.unavailable}`
353
+ : template.displayOnly
354
+ ? `${REFERENCE_TEMPLATE_MARKER} · ${template.description}`
355
+ : template.description;
356
+ const description = compactDescription(`${hint ? `${hint} — ` : ""}${summary}`);
357
+ const item: SlashCompletionItem = {
358
+ id: `prompt:${name}`,
359
+ kind: "command",
360
+ value: name,
361
+ label: name,
362
+ effectDescription: template.unavailable
363
+ ? `Prompt template unavailable: ${template.unavailable}`
364
+ : template.displayOnly
365
+ ? `Reference card shown to you; nothing is sent to the model: ${template.description}`
366
+ : `Prompt template: ${summary}`,
367
+ replacement: range,
368
+ appendSpace: Boolean(hint),
369
+ };
370
+ if (description) item.description = description;
371
+ if (hint) item.remainingGrammar = truncateToWidth(hint, ARGUMENT_HINT_BUDGET);
372
+ if (template.unavailable) item.disabledReason = template.unavailable;
373
+ items.push(item);
374
+ }
375
+ return items;
310
376
  }
311
377
 
312
378
  async getSuggestions(
@@ -406,6 +472,31 @@ class ClioAutocompleteProvider implements AutocompleteProvider {
406
472
  if (remainingGrammar) item.remainingGrammar = remainingGrammar;
407
473
  return item;
408
474
  });
475
+ items.push(
476
+ ...this.promptCommandItems(prefix, new Set(refs.map((ref) => ref.name.toLowerCase())), {
477
+ start: context.commandStart,
478
+ end: context.commandEnd,
479
+ }),
480
+ );
481
+ const promptNames = this.promptTemplates().map((prompt) => prompt.name);
482
+ for (const row of resolveExtensionCommands(this.extensionCommands(), promptNames)) {
483
+ if (
484
+ !row.invocation.toLowerCase().startsWith(prefix.toLowerCase()) ||
485
+ promptNames.some((name) => name.toLowerCase() === row.invocation.toLowerCase())
486
+ )
487
+ continue;
488
+ items.push({
489
+ id: `extension:${row.invocation}`,
490
+ kind: "command",
491
+ value: row.invocation,
492
+ label: row.invocation,
493
+ description: `extension (${row.scope}): ${row.description}`,
494
+ effectDescription: "Runs installed operator extension code; output is local to you",
495
+ replacement: { start: context.commandStart, end: context.commandEnd },
496
+ appendSpace: true,
497
+ ...(!row.available ? { disabledReason: row.reason ?? "runtime unavailable" } : {}),
498
+ });
499
+ }
409
500
  return items.length ? { items, prefix } : null;
410
501
  }
411
502
 
@@ -539,5 +630,7 @@ export function createSlashCommandAutocompleteProvider(options: SlashAutocomplet
539
630
  options.fdPath === undefined ? resolveFdBinary() : options.fdPath,
540
631
  options.completionSources ?? {},
541
632
  options.fileReferenceSource,
633
+ options.promptTemplates,
634
+ options.extensionCommands,
542
635
  );
543
636
  }