@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,139 +1,86 @@
1
- import type { ClioKeybinding } from "../domains/config/keybindings.js";
2
- import { isKeyRelease, type KeyId, matchesKey } from "../engine/tui.js";
1
+ import { decodePrintableKey, isKeyRelease, isKeyRepeat, type Keybinding, matchesKey } from "../engine/tui.js";
3
2
 
4
3
  export interface LeaderTarget {
5
4
  key: string;
6
- id: ClioKeybinding;
5
+ id: Keybinding;
6
+ label?: string;
7
+ disabledReason?: string;
7
8
  }
8
-
9
- export type LeaderKeyState = { status: "idle" } | { status: "pending"; expiresAt: number };
10
-
9
+ export type LeaderKeyState = { status: "idle" } | { status: "pending"; selected: number; notice?: string };
10
+ export const IDLE_LEADER_STATE: LeaderKeyState = { status: "idle" };
11
11
  export interface LeaderKeyRouteDeps {
12
- matchesLeader: (data: string) => boolean;
12
+ matchesLeader(data: string): boolean;
13
13
  leaderTargets: ReadonlyArray<LeaderTarget>;
14
- dispatchAction: (id: ClioKeybinding) => boolean;
15
- now: number;
16
- timeoutMs?: number;
14
+ dispatchAction(id: Keybinding): boolean;
17
15
  isRelease?: (data: string) => boolean;
18
16
  }
19
-
20
17
  export interface LeaderKeyRouteResult {
21
18
  state: LeaderKeyState;
22
19
  consumed: boolean;
23
20
  }
24
21
 
25
- export const LEADER_TIMEOUT_MS = 1500;
26
- export const IDLE_LEADER_STATE: LeaderKeyState = { status: "idle" };
27
-
28
- function baseLetterFromInput(data: string): string | null {
29
- if (data.length === 1) {
30
- const lower = data.toLowerCase();
31
- return lower >= "a" && lower <= "z" ? lower : null;
32
- }
33
- for (let code = 97; code <= 122; code += 1) {
34
- const key = String.fromCharCode(code) as KeyId;
35
- if (matchesKey(data, key) || matchesKey(data, `shift+${key}` as KeyId)) return key;
36
- }
37
- return null;
38
- }
39
-
40
- function isEscapeKey(data: string): boolean {
41
- return matchesKey(data, "escape") && !isKeyRelease(data);
42
- }
43
-
44
- /** Pure leader-key router: returns the next leader state and whether input was swallowed. */
45
22
  export function routeLeaderKey(data: string, state: LeaderKeyState, deps: LeaderKeyRouteDeps): LeaderKeyRouteResult {
46
- const timeoutMs = deps.timeoutMs ?? LEADER_TIMEOUT_MS;
47
- if (state.status === "pending") {
48
- if (deps.now > state.expiresAt) return { state: IDLE_LEADER_STATE, consumed: true };
49
- if (deps.isRelease?.(data) ?? false) return { state, consumed: true };
50
- if (isEscapeKey(data)) return { state: IDLE_LEADER_STATE, consumed: true };
51
- const base = baseLetterFromInput(data);
52
- const target = base ? deps.leaderTargets.find((entry) => entry.key === base) : undefined;
53
- if (target) {
54
- deps.dispatchAction(target.id);
55
- return { state: IDLE_LEADER_STATE, consumed: true };
56
- }
57
- return { state: IDLE_LEADER_STATE, consumed: true };
23
+ if (isKeyRelease(data)) return { state, consumed: state.status === "pending" };
24
+ if (matchesKey(data, "ctrl+c")) return { state: IDLE_LEADER_STATE, consumed: false };
25
+ if (state.status === "idle") {
26
+ return deps.matchesLeader(data) && !isKeyRepeat(data)
27
+ ? { state: { status: "pending", selected: 0 }, consumed: true }
28
+ : { state, consumed: false };
58
29
  }
59
- if (deps.isRelease?.(data) ?? false) return { state, consumed: false };
60
- if (!deps.matchesLeader(data)) return { state, consumed: false };
61
- return { state: { status: "pending", expiresAt: deps.now + timeoutMs }, consumed: true };
62
- }
63
-
64
- export interface LeaderKeyTimeout {
65
- unref?(): void;
30
+ if (isKeyRepeat(data) && !matchesKey(data, "up") && !matchesKey(data, "down")) return { state, consumed: true };
31
+ if (matchesKey(data, "escape") || deps.matchesLeader(data)) return { state: IDLE_LEADER_STATE, consumed: true };
32
+ const count = deps.leaderTargets.length;
33
+ if (matchesKey(data, "up") || matchesKey(data, "down")) {
34
+ const delta = matchesKey(data, "up") ? -1 : 1;
35
+ return {
36
+ state: { status: "pending", selected: count ? (state.selected + delta + count) % count : 0 },
37
+ consumed: true,
38
+ };
39
+ }
40
+ const key = data.includes("\x1b[200~")
41
+ ? null
42
+ : (decodePrintableKey(data) ?? (data.length === 1 ? data : undefined))?.toLowerCase();
43
+ const target = matchesKey(data, "enter")
44
+ ? deps.leaderTargets[state.selected]
45
+ : deps.leaderTargets.find(
46
+ (entry) =>
47
+ entry.key &&
48
+ (entry.key === key ||
49
+ (entry.key === "home" && matchesKey(data, "home")) ||
50
+ (entry.key === "end" && matchesKey(data, "end"))),
51
+ );
52
+ if (!target) return { state: { ...state, notice: "No action for this key" }, consumed: true };
53
+ if (target.disabledReason) return { state: { ...state, notice: target.disabledReason }, consumed: true };
54
+ deps.dispatchAction(target.id);
55
+ return { state: IDLE_LEADER_STATE, consumed: true };
66
56
  }
67
57
 
68
58
  export interface LeaderKeyControllerDeps {
69
- matchesLeader: (data: string) => boolean;
70
- leaderTargets: () => ReadonlyArray<LeaderTarget>;
71
- dispatchAction: (id: ClioKeybinding) => boolean;
59
+ matchesLeader(data: string): boolean;
60
+ leaderTargets(): ReadonlyArray<LeaderTarget>;
61
+ dispatchAction(id: Keybinding): boolean;
72
62
  isRelease: (data: string) => boolean;
73
- now?: () => number;
74
- timeoutMs?: number;
75
- scheduleTimeout?: (callback: () => void, delayMs: number) => LeaderKeyTimeout;
76
- clearScheduledTimeout?: (timeout: LeaderKeyTimeout) => void;
77
- /**
78
- * Fired when the leader arms or disarms, including on timeout.
79
- *
80
- * Ctrl+G is the fallback for terminals where Alt is broken, and the frame
81
- * between it and the next key was identical to the idle frame: nothing said
82
- * the leader had taken, on the one surface whose users cannot test it with a
83
- * working Alt shortcut.
84
- */
85
63
  onStateChange?: (pending: boolean) => void;
64
+ onMenuChange?: (state: LeaderKeyState, targets: ReadonlyArray<LeaderTarget>) => void;
86
65
  }
87
-
88
66
  export interface LeaderKeyController {
89
67
  isPending(): boolean;
90
68
  route(data: string): boolean;
91
69
  reset(): void;
92
70
  dispose(): void;
93
71
  }
94
-
95
72
  export function createLeaderKeyController(deps: LeaderKeyControllerDeps): LeaderKeyController {
96
- const now = deps.now ?? Date.now;
97
- const scheduleTimeout = deps.scheduleTimeout ?? ((callback, delayMs) => setTimeout(callback, delayMs));
98
- const clearScheduledTimeout =
99
- deps.clearScheduledTimeout ?? ((timeout: LeaderKeyTimeout) => clearTimeout(timeout as ReturnType<typeof setTimeout>));
100
73
  let state: LeaderKeyState = IDLE_LEADER_STATE;
101
- let timer: LeaderKeyTimeout | null = null;
102
-
103
74
  const setState = (next: LeaderKeyState): void => {
104
- const wasPending = state.status === "pending";
75
+ const changed = state.status !== next.status;
105
76
  state = next;
106
- if (timer) {
107
- clearScheduledTimeout(timer);
108
- timer = null;
109
- }
110
- if (next.status !== "pending") {
111
- if (wasPending) deps.onStateChange?.(false);
112
- return;
113
- }
114
- if (!wasPending) deps.onStateChange?.(true);
115
- timer = scheduleTimeout(
116
- () => {
117
- state = IDLE_LEADER_STATE;
118
- timer = null;
119
- deps.onStateChange?.(false);
120
- },
121
- Math.max(0, next.expiresAt - now()),
122
- );
123
- timer.unref?.();
77
+ deps.onMenuChange?.(state, deps.leaderTargets());
78
+ if (changed) deps.onStateChange?.(state.status === "pending");
124
79
  };
125
-
126
80
  return {
127
81
  isPending: () => state.status === "pending",
128
- route: (data) => {
129
- const result = routeLeaderKey(data, state, {
130
- matchesLeader: deps.matchesLeader,
131
- leaderTargets: deps.leaderTargets(),
132
- dispatchAction: deps.dispatchAction,
133
- now: now(),
134
- ...(deps.timeoutMs === undefined ? {} : { timeoutMs: deps.timeoutMs }),
135
- isRelease: deps.isRelease,
136
- });
82
+ route(data) {
83
+ const result = routeLeaderKey(data, state, { ...deps, leaderTargets: deps.leaderTargets() });
137
84
  if (result.state !== state) setState(result.state);
138
85
  return result.consumed;
139
86
  },
@@ -0,0 +1,45 @@
1
+ import { type Component, type OverlayHandle, type TUI, truncateToWidth } from "../engine/tui.js";
2
+ import type { LeaderKeyState, LeaderTarget } from "./leader-key.js";
3
+ import { showClioOverlayFrame } from "./overlay-frame.js";
4
+ import { clioTheme } from "./theme/index.js";
5
+
6
+ /** Noncapturing presentation: controller retains the underlying cancellation owner. */
7
+ export function createLeaderMenu(tui: TUI, scope: () => string, keyLabel: (id: LeaderTarget["id"]) => string) {
8
+ let handle: OverlayHandle | null = null;
9
+ let state: LeaderKeyState = { status: "idle" };
10
+ let targets: ReadonlyArray<LeaderTarget> = [];
11
+ const component: Component = {
12
+ render(width) {
13
+ if (state.status === "idle") return [];
14
+ const selected = state.selected;
15
+ const count = Math.max(1, Math.min(10, tui.terminal.rows - 8));
16
+ const start = Math.max(0, Math.min(selected - Math.floor(count / 2), targets.length - count));
17
+ return [
18
+ `${scope()} · letters select actions · close, then /help for commands`,
19
+ ...targets.slice(start, start + count).map((entry, index) => {
20
+ const text = `${start + index === selected ? "›" : " "} ${entry.key || "·"} ${entry.label ?? entry.id} ${keyLabel(entry.id)}${entry.disabledReason ? ` (${entry.disabledReason})` : ""}`;
21
+ return truncateToWidth(start + index === selected ? clioTheme().fg("accent", text) : text, width);
22
+ }),
23
+ `${targets.length ? `${selected + 1}/${targets.length}` : "No actions in this scope"} · ${state.notice ?? "Up/Down select · Enter run · Esc close · Ctrl+C cancel"}`,
24
+ ].map((line) => truncateToWidth(line, width));
25
+ },
26
+ invalidate() {},
27
+ };
28
+ return (next: LeaderKeyState, entries: ReadonlyArray<LeaderTarget>): void => {
29
+ state = next;
30
+ targets = entries;
31
+ if (state.status === "idle") {
32
+ handle?.hide();
33
+ handle = null;
34
+ } else if (!handle)
35
+ handle = showClioOverlayFrame(tui, component, {
36
+ title: "Actions",
37
+ markerId: "keyboard-actions",
38
+ anchor: "top-center",
39
+ width: 88,
40
+ nonCapturing: true,
41
+ footerHint: () => `${keyLabel("clio-coder.leader")} or Esc closes this menu`,
42
+ });
43
+ tui.requestRender();
44
+ };
45
+ }
@@ -1,5 +1,10 @@
1
1
  import type { TUI } from "../engine/tui.js";
2
- import { type AskUserHandler, cancelledAskUserResult } from "../tools/ask-user.js";
2
+ import {
3
+ type AskUserAnswer,
4
+ type AskUserHandler,
5
+ type AskUserQuestion,
6
+ cancelledAskUserResult,
7
+ } from "../tools/ask-user.js";
3
8
  import type { OverlayState } from "./overlay-key-routing.js";
4
9
  import { type AskUserOverlaySession, openAskUserOverlay } from "./overlays/ask-user.js";
5
10
 
@@ -19,6 +24,8 @@ export interface OverlayAskUserLifecycleDeps {
19
24
  * overlay session opens, not per question, so one interview notifies once.
20
25
  */
21
26
  onOperatorParked?(): void;
27
+ /** A round the operator answered, for the transcript record. Not fired on cancel. */
28
+ onRoundAnswered?(questions: ReadonlyArray<AskUserQuestion>, answers: ReadonlyArray<AskUserAnswer>): void;
22
29
  }
23
30
 
24
31
  export interface OverlayAskUserLifecycle {
@@ -84,6 +91,7 @@ export function createOverlayAskUserLifecycle(deps: OverlayAskUserLifecycleDeps)
84
91
  if (!activeSession) return cancelledAskUserResult();
85
92
  pendingCancel = cancel;
86
93
  const result = await activeSession.ask(questions, invokeOptions?.decisionPresentation);
94
+ if (result.cancelled !== true && result.answers.length > 0) deps.onRoundAnswered?.(questions, result.answers);
87
95
  if (result.cancelled === true || !toolBacked) {
88
96
  if (result.cancelled === true) cancelledForTurn = true;
89
97
  close();
@@ -11,6 +11,7 @@ import {
11
11
  truncateToWidth,
12
12
  visibleWidth,
13
13
  } from "../engine/tui.js";
14
+ import { keyboardOwner } from "./keyboard-owner.js";
14
15
  import { enterModal, type ModalMarkerSink } from "./modal-marker.js";
15
16
  import { type ClioToken, clioTheme, padAnsi, screenTitle, selectListTheme, settingsListTheme } from "./theme/index.js";
16
17
 
@@ -43,6 +44,13 @@ export class FocusBox extends Box {
43
44
  this.onInput = options?.onInput;
44
45
  }
45
46
 
47
+ get keyboardScope() {
48
+ return keyboardOwner(this.inputTarget).keyboardScope;
49
+ }
50
+ undoInput(): boolean {
51
+ return keyboardOwner(this.inputTarget).undoInput?.() ?? false;
52
+ }
53
+
46
54
  handleInput(data: string): void {
47
55
  if (this.onInput) {
48
56
  this.onInput(data);
@@ -427,6 +435,13 @@ export class ClioOverlayFrame implements Component {
427
435
  return lines;
428
436
  }
429
437
 
438
+ get keyboardScope() {
439
+ return keyboardOwner(this.child).keyboardScope;
440
+ }
441
+ undoInput(): boolean {
442
+ return keyboardOwner(this.child).undoInput?.() ?? false;
443
+ }
444
+
430
445
  handleInput(data: string): void {
431
446
  this.child.handleInput?.(data);
432
447
  }
@@ -47,6 +47,7 @@ import { type ArtifactProviderDeps, createDefaultArtifactProviders } from "./vie
47
47
  import { openViewOverlay } from "./view/view-overlay.js";
48
48
 
49
49
  export interface OverlayGeneralOpenersDeps {
50
+ readTranscript?: ArtifactProviderDeps["readTranscript"];
50
51
  tui: TUI;
51
52
  transitions: OverlayTransitions;
52
53
  observability: ObservabilityContract;
@@ -319,6 +320,7 @@ export function createOverlayGeneralOpeners(deps: OverlayGeneralOpenersDeps): Ov
319
320
  dispatch: deps.dispatch,
320
321
  sessionMeta: deps.getSessionMeta(),
321
322
  readSessionEntries: deps.readSessionEntries,
323
+ readTranscript: deps.readTranscript,
322
324
  }),
323
325
  ...(initialFilter ? { initialFilter } : {}),
324
326
  notice: deps.notify,
@@ -1,6 +1,6 @@
1
1
  import type { ClioKeybinding } from "../domains/config/keybindings.js";
2
- import { isKeyRelease, matchesKey } from "../engine/tui.js";
3
- import { MUTATION_PREVIEW_KEY } from "./permission-hint.js";
2
+ import { isKeyRelease, isKeyRepeat, matchesKey } from "../engine/tui.js";
3
+ import { MUTATION_PREVIEW_KEY, PERMISSION_TERMS_KEY } from "./permission-hint.js";
4
4
 
5
5
  export type OverlayState =
6
6
  | "closed"
@@ -23,8 +23,6 @@ export type OverlayState =
23
23
  | "cwd-fallback"
24
24
  | "ask-user"
25
25
  | "help"
26
- | "agents"
27
- | "prompts"
28
26
  | "extensions"
29
27
  | "interop"
30
28
  | "skills-hub"
@@ -48,12 +46,14 @@ export interface PermissionOverlayKeyDeps {
48
46
  * so the draft that makes Enter inert can be cleared without first denying
49
47
  * the call. Only the deletion keys in `isDraftEditKey` arrive here.
50
48
  */
51
- editDraft?: (data: string) => void;
49
+ editDraft?: (operation: DraftEditOperation) => void;
52
50
  /** Whether this card has a mutation the operator can read locally (issue #254). */
53
51
  canInspectMutation?: () => boolean;
54
52
  isInspectingMutation?: () => boolean;
55
53
  toggleMutationInspection?: () => void;
56
54
  scrollMutationInspection?: (delta: number) => void;
55
+ /** Fold or unfold the standing approval terms on the card. */
56
+ togglePermissionTerms?: () => void;
57
57
  }
58
58
 
59
59
  export interface DispatchBoardOverlayKeyDeps {
@@ -80,24 +80,29 @@ export interface AskUserOverlayKeyDeps {
80
80
  cancelAskUser: () => void;
81
81
  }
82
82
 
83
- export interface OverlayKeyDeps extends PermissionOverlayKeyDeps, DispatchBoardOverlayKeyDeps, AskUserOverlayKeyDeps {}
83
+ export interface OverlayKeyDeps extends PermissionOverlayKeyDeps, DispatchBoardOverlayKeyDeps, AskUserOverlayKeyDeps {
84
+ canToggleOwner?: () => boolean;
85
+ }
84
86
 
85
87
  export function isEscapeKey(data: string): boolean {
86
88
  return matchesKey(data, "escape") && !isKeyRelease(data);
87
89
  }
88
90
 
89
- const DRAFT_EDIT_KEYS = ["backspace", "delete", "ctrl+u", "ctrl+w", "alt+backspace", "ctrl+k"] as const;
90
-
91
- /**
92
- * The keys that only ever remove text from the composer. They are the one
93
- * class of input a pending permission prompt lets through, because they
94
- * cannot type a command, cannot submit, and are the way out of the inert-Enter
95
- * state a draft puts the prompt in.
96
- */
97
- function isDraftEditKey(data: string): boolean {
98
- return !isKeyRelease(data) && DRAFT_EDIT_KEYS.some((key) => matchesKey(data, key));
99
- }
100
-
91
+ export type DraftEditOperation =
92
+ | "deleteCharBackward"
93
+ | "deleteCharForward"
94
+ | "deleteToLineStart"
95
+ | "deleteToLineEnd"
96
+ | "deleteWordBackward";
97
+ const DRAFT_EDITS: ReadonlyArray<readonly [import("../engine/tui.js").KeyId, DraftEditOperation]> = [
98
+ ["backspace", "deleteCharBackward"],
99
+ ["delete", "deleteCharForward"],
100
+ ["ctrl+u", "deleteToLineStart"],
101
+ ["ctrl+k", "deleteToLineEnd"],
102
+ ["ctrl+w", "deleteWordBackward"],
103
+ ["alt+backspace", "deleteWordBackward"],
104
+ ["ctrl+backspace", "deleteWordBackward"],
105
+ ];
101
106
  /** Rows one page key moves the open mutation. Matches the window the card renders. */
102
107
  const MUTATION_PAGE_ROWS = 16;
103
108
 
@@ -119,8 +124,9 @@ function routePermissionOverlayKey(data: string, deps: PermissionOverlayKeyDeps)
119
124
  if (!(deps.composerHasDraft?.() ?? false)) deps.confirmPermission();
120
125
  return true;
121
126
  }
122
- if (deps.editDraft && isDraftEditKey(data)) {
123
- deps.editDraft(data);
127
+ const edit = DRAFT_EDITS.find(([key]) => matchesKey(data, key));
128
+ if (deps.editDraft && edit) {
129
+ deps.editDraft(edit[1]);
124
130
  return true;
125
131
  }
126
132
  // Reading the mutation is the one thing this dialog does that is not an
@@ -136,6 +142,14 @@ function routePermissionOverlayKey(data: string, deps: PermissionOverlayKeyDeps)
136
142
  deps.toggleMutationInspection();
137
143
  return true;
138
144
  }
145
+ if (
146
+ matchesKey(data, PERMISSION_TERMS_KEY) &&
147
+ deps.togglePermissionTerms &&
148
+ !(deps.isInspectingMutation?.() ?? false)
149
+ ) {
150
+ deps.togglePermissionTerms();
151
+ return true;
152
+ }
139
153
  if ((deps.isInspectingMutation?.() ?? false) && deps.scrollMutationInspection && !isKeyRelease(data)) {
140
154
  const delta = mutationScrollDelta(data);
141
155
  if (delta !== 0) {
@@ -208,15 +222,6 @@ function routeCostOverlayKey(data: string, deps: CloseOverlayKeyDeps): boolean {
208
222
  return false;
209
223
  }
210
224
 
211
- /** Pure overlay key router for the /model overlay. Esc closes; arrows and Enter fall through. */
212
- function routeModelOverlayKey(data: string, deps: CloseOverlayKeyDeps): boolean {
213
- if (isEscapeKey(data)) {
214
- deps.closeOverlay();
215
- return true;
216
- }
217
- return false;
218
- }
219
-
220
225
  /** Pure overlay key router for the /fork message-picker. */
221
226
  function routeMessagePickerOverlayKey(data: string, deps: CloseOverlayKeyDeps): boolean {
222
227
  if (isEscapeKey(data)) {
@@ -226,15 +231,6 @@ function routeMessagePickerOverlayKey(data: string, deps: CloseOverlayKeyDeps):
226
231
  return false;
227
232
  }
228
233
 
229
- /** Pure overlay key router for ask_user. */
230
- function routeAskUserOverlayKey(data: string, deps: AskUserOverlayKeyDeps): boolean {
231
- if (isEscapeKey(data)) {
232
- deps.cancelAskUser();
233
- return true;
234
- }
235
- return false;
236
- }
237
-
238
234
  export function overlayOwnsInput(overlayState: OverlayState): boolean {
239
235
  return overlayState !== "closed";
240
236
  }
@@ -246,12 +242,17 @@ export function routeOverlayKey(
246
242
  matches: (data: string, id: ClioKeybinding) => boolean,
247
243
  ): boolean {
248
244
  if (overlayState === "closed") return false;
245
+ if (isKeyRelease(data)) return true;
246
+ if (data.includes("\x1b[200~") && overlayState === "permission-confirm") return true;
249
247
  if (
250
- (overlayState === "dispatch-board" && matches(data, "clio-coder.dispatchBoard.toggle")) ||
251
- (overlayState === "tasks" && matches(data, "clio-coder.tasks.open")) ||
252
- (overlayState === "tree" && matches(data, "clio-coder.session.tree")) ||
253
- (overlayState === "model" && matches(data, "clio-coder.model.select")) ||
254
- (overlayState === "help" && matches(data, "clio-coder.leader"))
248
+ !isKeyRepeat(data) &&
249
+ (deps.canToggleOwner?.() ?? true) &&
250
+ ((overlayState === "dispatch-board" && matches(data, "clio-coder.dispatchBoard.toggle")) ||
251
+ (overlayState === "tasks" && matches(data, "clio-coder.tasks.open")) ||
252
+ (overlayState === "tree" && matches(data, "clio-coder.session.tree")) ||
253
+ (overlayState === "model" && matches(data, "clio-coder.model.select")) ||
254
+ (overlayState === "skills-hub" && matches(data, "clio-coder.library.toggle")) ||
255
+ false)
255
256
  ) {
256
257
  deps.closeOverlay();
257
258
  return true;
@@ -287,7 +288,7 @@ export function routeOverlayKey(
287
288
  if (overlayState === "decisions") return false;
288
289
  if (overlayState === "memory") return false;
289
290
  if (overlayState === "view") return false;
290
- if (overlayState === "model") return routeModelOverlayKey(data, deps);
291
+ if (overlayState === "model") return false;
291
292
  // The scope dialog owns Esc itself: cancelling it must leave the model where
292
293
  // it was, and a router-level close cannot say that to the caller waiting on it.
293
294
  if (overlayState === "model-scope") return false;
@@ -299,11 +300,9 @@ export function routeOverlayKey(
299
300
  if (overlayState === "tree") return false;
300
301
  if (overlayState === "message-picker") return routeMessagePickerOverlayKey(data, deps);
301
302
  if (overlayState === "cwd-fallback") return false;
302
- if (overlayState === "ask-user") return routeAskUserOverlayKey(data, deps);
303
+ if (overlayState === "ask-user") return false;
303
304
  if (
304
305
  overlayState === "help" ||
305
- overlayState === "agents" ||
306
- overlayState === "prompts" ||
307
306
  overlayState === "extensions" ||
308
307
  overlayState === "interop" ||
309
308
  overlayState === "skills-hub"
@@ -1,12 +1,12 @@
1
1
  import type { LibraryEntryKind } from "../domains/resources/index.js";
2
- import { appendNotice } from "./command-output.js";
2
+ import { appendInterviewRecord, appendNotice } from "./command-output.js";
3
3
  import { createOverlayAskUserLifecycle, type OverlayAskUserLifecycle } from "./overlay-ask-user-lifecycle.js";
4
4
  import { createOverlayAuthLifecycle } from "./overlay-auth-lifecycle.js";
5
5
  import { showClioOverlayFrame } from "./overlay-frame.js";
6
6
  import { createOverlayGeneralOpeners } from "./overlay-general-openers.js";
7
7
  import { createOverlayModelSelectors } from "./overlay-model-selectors.js";
8
8
  import { createOverlayPermissionLifecycle, type OverlayPermissionLifecycle } from "./overlay-permission-lifecycle.js";
9
- import { createOverlayResourceOpeners } from "./overlay-resource-openers.js";
9
+ import { createOverlayResourceOpeners, type LibraryOpenRequest } from "./overlay-resource-openers.js";
10
10
  import { createOverlaySessionLifecycle } from "./overlay-session-lifecycle.js";
11
11
  import { createOverlayTransitions } from "./overlay-transitions.js";
12
12
  import {
@@ -124,14 +124,13 @@ export interface OverlayLifecycleRuntimeDeps {
124
124
  openMemoryOverlay?: typeof import("./memory-overlay.js").openMemoryOverlay;
125
125
  openViewOverlay?: typeof import("./view/view-overlay.js").openViewOverlay;
126
126
  openHelpOverlay?: typeof import("./overlays/help-reference.js").openHelpOverlay;
127
- openAgentsOverlay?: typeof import("./overlays/agents.js").openAgentsOverlay;
128
- openSkillsHub?: typeof import("./overlays/skills-hub.js").openSkillsHub;
129
- openPromptsOverlay?: typeof import("./overlays/prompts.js").openPromptsOverlay;
127
+ openSkillsHub?: typeof import("./overlays/library.js").openLibraryOverlay;
130
128
  openExtensionsOverlay?: typeof import("./overlays/extensions.js").openExtensionsOverlay;
131
129
  openInteropOverlay?: typeof import("./overlays/interop.js").openInteropOverlay;
132
130
  }
133
131
 
134
132
  export interface OverlayLifecycleController {
133
+ openExtensionPanelState: import("./overlay-resource-openers.js").OverlayResourceOpeners["openExtensionPanelState"];
135
134
  getState(): OverlayState;
136
135
  closeOverlay(): void;
137
136
  finishAuthOverlay(dismiss: boolean): void;
@@ -161,9 +160,7 @@ export interface OverlayLifecycleController {
161
160
  openTreeOverlayState(): void;
162
161
  openMessagePickerOverlayState(): void;
163
162
  openHelpOverlayState(query?: string): void;
164
- openAgentsOverlayState(): void;
165
- openSkillsHubState(tab?: LibraryEntryKind): void;
166
- openPromptsOverlayState(): void;
163
+ openSkillsHubState(request?: LibraryOpenRequest | LibraryEntryKind): void;
167
164
  openExtensionsOverlayState(): void;
168
165
  openInteropOverlayState(): void;
169
166
  toggleDispatchBoardOverlay(): void;
@@ -175,6 +172,8 @@ export interface OverlayLifecycleController {
175
172
  isInspectingMutation(): boolean;
176
173
  toggleMutationInspection(): void;
177
174
  scrollMutationInspection(delta: number): void;
175
+ /** Fold or unfold the standing approval terms on the live permission card. */
176
+ togglePermissionTerms(): void;
178
177
  cancelAskUser(): void;
179
178
  dispose(): void;
180
179
  }
@@ -215,9 +214,7 @@ export function createOverlayLifecycle(deps: OverlayLifecycleRuntimeDeps): Overl
215
214
  openMemoryOverlay: openMemoryOverlayFactory,
216
215
  openViewOverlay: openViewOverlayFactory,
217
216
  openHelpOverlay: openHelpOverlayFactory,
218
- openAgentsOverlay: openAgentsOverlayFactory,
219
217
  openSkillsHub: openSkillsHubFactory,
220
- openPromptsOverlay: openPromptsOverlayFactory,
221
218
  openExtensionsOverlay: openExtensionsOverlayFactory,
222
219
  openInteropOverlay: openInteropOverlayFactory,
223
220
  } = deps;
@@ -289,7 +286,13 @@ export function createOverlayLifecycle(deps: OverlayLifecycleRuntimeDeps): Overl
289
286
  // Read per frame: the footer names what Enter does right now, and
290
287
  // that depends on whether the composer holds a draft and on whether
291
288
  // the mutation is open.
292
- footerHint: (innerWidth) => permissionOverlayHint(innerWidth, editor.getText().length > 0, inspectionHint()),
289
+ footerHint: (innerWidth) =>
290
+ permissionOverlayHint(
291
+ innerWidth,
292
+ editor.getText().length > 0,
293
+ inspectionHint(),
294
+ body.isShowingTerms() ? "open" : "closed",
295
+ ),
293
296
  });
294
297
  if (!overlayTransitions.showPermission(handle)) {
295
298
  handle.hide();
@@ -330,6 +333,17 @@ export function createOverlayLifecycle(deps: OverlayLifecycleRuntimeDeps): Overl
330
333
  ...(deps.app.registerAskUserHandler ? { registerHandler: deps.app.registerAskUserHandler } : {}),
331
334
  ...(openAskUserOverlayFactory ? { openAskUserOverlay: openAskUserOverlayFactory } : {}),
332
335
  ...(deps.onOperatorParked ? { onOperatorParked: deps.onOperatorParked } : {}),
336
+ onRoundAnswered: (questions, answers) =>
337
+ appendInterviewRecord(
338
+ answers.map((answer) => ({
339
+ label:
340
+ questions.find((question) => question.question === answer.question)?.header ??
341
+ answer.question.split("\n").find((line) => line.trim().length > 0) ??
342
+ answer.question,
343
+ answer: answer.answer,
344
+ })),
345
+ busNoticeSink,
346
+ ),
333
347
  });
334
348
 
335
349
  const overlayModelSelectors = createOverlayModelSelectors({
@@ -362,9 +376,7 @@ export function createOverlayLifecycle(deps: OverlayLifecycleRuntimeDeps): Overl
362
376
  ...(deps.app.resources ? { resources: deps.app.resources } : {}),
363
377
  closeOverlay,
364
378
  ...(openHelpOverlayFactory ? { openHelpOverlay: openHelpOverlayFactory } : {}),
365
- ...(openAgentsOverlayFactory ? { openAgentsOverlay: openAgentsOverlayFactory } : {}),
366
379
  ...(openSkillsHubFactory ? { openSkillsHub: openSkillsHubFactory } : {}),
367
- ...(openPromptsOverlayFactory ? { openPromptsOverlay: openPromptsOverlayFactory } : {}),
368
380
  ...(openExtensionsOverlayFactory ? { openExtensionsOverlay: openExtensionsOverlayFactory } : {}),
369
381
  ...(openInteropOverlayFactory ? { openInteropOverlay: openInteropOverlayFactory } : {}),
370
382
  });
@@ -399,6 +411,7 @@ export function createOverlayLifecycle(deps: OverlayLifecycleRuntimeDeps): Overl
399
411
 
400
412
  const scheduling = deps.app.scheduling;
401
413
  const overlayGeneralOpeners = createOverlayGeneralOpeners({
414
+ readTranscript: () => chatPanel.inspectionArtifacts(),
402
415
  tui,
403
416
  transitions: overlayTransitions,
404
417
  observability: deps.app.observability,
@@ -487,10 +500,9 @@ export function createOverlayLifecycle(deps: OverlayLifecycleRuntimeDeps): Overl
487
500
  openTreeOverlayState,
488
501
  openMessagePickerOverlayState,
489
502
  openHelpOverlayState: overlayResourceOpeners.openHelpOverlayState,
490
- openAgentsOverlayState: overlayResourceOpeners.openAgentsOverlayState,
491
503
  openSkillsHubState: overlayResourceOpeners.openSkillsHubState,
492
- openPromptsOverlayState: overlayResourceOpeners.openPromptsOverlayState,
493
504
  openExtensionsOverlayState: overlayResourceOpeners.openExtensionsOverlayState,
505
+ openExtensionPanelState: overlayResourceOpeners.openExtensionPanelState,
494
506
  openInteropOverlayState: overlayResourceOpeners.openInteropOverlayState,
495
507
  toggleDispatchBoardOverlay,
496
508
  confirmPermission: () => {
@@ -513,6 +525,10 @@ export function createOverlayLifecycle(deps: OverlayLifecycleRuntimeDeps): Overl
513
525
  permissionBody?.scrollInspect(delta);
514
526
  tui.requestRender();
515
527
  },
528
+ togglePermissionTerms: () => {
529
+ permissionBody?.toggleTerms();
530
+ tui.requestRender();
531
+ },
516
532
  cancelAskUser: overlayAskUser.cancel,
517
533
  dispose: () => {
518
534
  overlayPermission?.dispose();