@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,8 +1,10 @@
1
1
  import { existsSync, readdirSync, readFileSync, realpathSync } from "node:fs";
2
2
  import path from "node:path";
3
+ import { readSettings } from "../../core/config.js";
3
4
  import { resolvePackageRoot } from "../../core/package-root.js";
4
5
  import { clioConfigDir } from "../../core/xdg.js";
5
- import { enabledExtensionResourceRoots } from "../extensions/index.js";
6
+ import { enabledPluginResourceRoots } from "../plugins/index.js";
7
+ import { resolvePackageReferences } from "../resources/package-references.js";
6
8
  import { loadSkills } from "../resources/skills/loader.js";
7
9
  import { parseFrontmatter } from "./frontmatter.js";
8
10
  import { type AgentRecipe, type RecipeSource, recipeIdFromPath } from "./recipe.js";
@@ -15,6 +17,25 @@ export interface AgentRecipeDiagnostic {
15
17
  source: RecipeSource["source"];
16
18
  filepath: string;
17
19
  message: string;
20
+ /**
21
+ * Why a file is not in the catalog. `quarantine` is a parse/policy failure;
22
+ * `ignored` is a reserved or protected id; `overridden` lost same-id
23
+ * precedence to a later source. Absent on records from before this field.
24
+ */
25
+ kind?: "quarantine" | "ignored" | "overridden";
26
+ /** Recipe id when it was parsed; quarantined files may not have one. */
27
+ id?: string;
28
+ /** Source that won, for `overridden`. */
29
+ by?: RecipeSource["source"];
30
+ /** Parsed audience of an ignored/overridden recipe, so listings can keep hiding internal ones. */
31
+ audience?: AgentRecipe["audience"];
32
+ }
33
+
34
+ /** Diagnostics are a bounded inspection aid, never a second catalog. */
35
+ const MAX_AGENT_RECIPE_DIAGNOSTICS = 256;
36
+
37
+ function recordDiagnostic(diagnostics: AgentRecipeDiagnostic[], diagnostic: AgentRecipeDiagnostic): void {
38
+ if (diagnostics.length < MAX_AGENT_RECIPE_DIAGNOSTICS) diagnostics.push(diagnostic);
18
39
  }
19
40
 
20
41
  function resolveBoundSkills(recipe: AgentRecipe, source: RecipeSource): AgentRecipe {
@@ -22,31 +43,35 @@ function resolveBoundSkills(recipe: AgentRecipe, source: RecipeSource): AgentRec
22
43
  // Builtins may bind a package-owned skill. Custom recipes deliberately use
23
44
  // only the operator's discovered skill roots; a recipe cannot smuggle an
24
45
  // arbitrary filesystem path into worker context through a skill name.
25
- const packageSkills = path.resolve(source.dir, "..", "..", "..", "..", "skills");
26
- if (source.source === "extension" && source.skillRoot === undefined) {
27
- throw new Error(`agent recipe: ${recipe.filepath}: extension declares bound skills but no skills resource root`);
46
+ const packageSkills = path.resolve(source.dir, "..", "..", "..", "..", "library", "skills");
47
+ if (source.source === "plugin" && source.skillRoot === undefined) {
48
+ throw new Error(
49
+ `agent recipe: ${recipe.filepath}: ${source.source} declares bound skills but no skills resource root`,
50
+ );
28
51
  }
29
52
  const skills =
30
- source.source === "extension"
53
+ source.source === "plugin"
31
54
  ? loadSkills({
32
55
  cwd: source.cwd ?? process.cwd(),
56
+ trustProjectCompatRoots: readSettings().integrations.projectResources.trustProjectImports,
33
57
  disableDiscovery: true,
34
58
  explicitSkillPaths: source.skillRoot === undefined ? [] : [source.skillRoot],
35
59
  })
36
60
  : loadSkills({
37
61
  cwd: source.cwd ?? process.cwd(),
62
+ trustProjectCompatRoots: readSettings().integrations.projectResources.trustProjectImports,
38
63
  ...(source.source === "builtin" && existsSync(packageSkills) ? { explicitSkillPaths: [packageSkills] } : {}),
39
64
  });
40
- if (source.source === "extension" && source.skillRoot !== undefined) {
65
+ if (source.source === "plugin" && source.skillRoot !== undefined) {
41
66
  const canonicalRoot = realpathSync(source.skillRoot);
42
67
  for (const skill of skills.items) {
43
68
  const relative = path.relative(canonicalRoot, realpathSync(skill.filePath));
44
69
  if (relative === ".." || relative.startsWith(`..${path.sep}`) || path.isAbsolute(relative)) {
45
- throw new Error(`agent recipe: ${recipe.filepath}: bound skill escapes its extension: ${skill.filePath}`);
70
+ throw new Error(`agent recipe: ${recipe.filepath}: bound skill escapes its ${source.source}: ${skill.filePath}`);
46
71
  }
47
72
  }
48
73
  }
49
- const byName = new Map(skills.items.map((skill) => [skill.name, skill.filePath]));
74
+ const byName = new Map(skills.items.filter((skill) => skill.trusted).map((skill) => [skill.name, skill.filePath]));
50
75
  const missing = recipe.skills.filter((skill) => !byName.has(skill));
51
76
  if (missing.length > 0) {
52
77
  throw new Error(`agent recipe: ${recipe.filepath}: bound skill(s) unavailable: ${missing.join(", ")}`);
@@ -83,7 +108,11 @@ export function loadRecipesFromDir(
83
108
  try {
84
109
  const id = recipeIdFromPath(filepath, source.dir);
85
110
  const raw = readFileSync(filepath, "utf8");
86
- const { frontmatter, body } = parseFrontmatter(raw, filepath);
111
+ const { frontmatter, body: rawBody } = parseFrontmatter(raw, filepath);
112
+ const body = resolvePackageReferences(rawBody, {
113
+ ...(source.rootPath ? { rootPath: source.rootPath } : {}),
114
+ plugin: source.source === "plugin",
115
+ });
87
116
  const parsedRecipe = parseAgentRecipeSchema({ id, source: source.source, filepath, body, frontmatter });
88
117
  const recipe = resolveBoundSkills(parsedRecipe, source);
89
118
  // Policy validation runs before a recipe enters any catalog, prompt, or
@@ -93,7 +122,7 @@ export function loadRecipesFromDir(
93
122
  } catch (error) {
94
123
  if (source.source === "builtin") throw error;
95
124
  const message = error instanceof Error ? error.message : String(error);
96
- diagnostics.push({ source: source.source, filepath, message });
125
+ recordDiagnostic(diagnostics, { kind: "quarantine", source: source.source, filepath, message });
97
126
  process.stderr.write(`[clio-coder:agents] quarantine path=${filepath} source=${source.source} reason=${message}\n`);
98
127
  }
99
128
  }
@@ -102,7 +131,21 @@ export function loadRecipesFromDir(
102
131
  return recipes;
103
132
  }
104
133
 
105
- function mergeRecipes(...sources: ReadonlyArray<ReadonlyArray<AgentRecipe>>): ReadonlyArray<AgentRecipe> {
134
+ function mergeRecipes(
135
+ diagnostics: AgentRecipeDiagnostic[],
136
+ ...sources: ReadonlyArray<ReadonlyArray<AgentRecipe>>
137
+ ): ReadonlyArray<AgentRecipe> {
138
+ const ignored = (recipe: AgentRecipe, reason: string): void => {
139
+ process.stderr.write(`[clio-coder:agents] ignore id=${recipe.id} by=${recipe.source} reason=${reason}\n`);
140
+ recordDiagnostic(diagnostics, {
141
+ kind: "ignored",
142
+ id: recipe.id,
143
+ source: recipe.source,
144
+ audience: recipe.audience,
145
+ filepath: recipe.filepath,
146
+ message: `agent recipe ${recipe.id} from ${recipe.source} ignored: ${reason}`,
147
+ });
148
+ };
106
149
  const byId = new Map<string, AgentRecipe>();
107
150
  const builtinById = new Map<string, AgentRecipe>();
108
151
  for (const group of sources) {
@@ -113,23 +156,35 @@ function mergeRecipes(...sources: ReadonlyArray<ReadonlyArray<AgentRecipe>>): Re
113
156
  for (const group of sources) {
114
157
  for (const recipe of group) {
115
158
  if (recipe.source !== "builtin" && RESERVED_CUSTOM_AGENT_IDS.has(recipe.id)) {
116
- process.stderr.write(`[clio-coder:agents] ignore id=${recipe.id} by=${recipe.source} reason=reserved-agent-id\n`);
159
+ ignored(recipe, "reserved-agent-id");
117
160
  continue;
118
161
  }
119
162
  const builtin = builtinById.get(recipe.id);
120
- if (recipe.source === "extension" && builtin) {
121
- process.stderr.write(`[clio-coder:agents] ignore override id=${recipe.id} by=extension reason=reserved-builtin\n`);
163
+ if (recipe.source === "plugin" && builtin) {
164
+ ignored(recipe, "reserved-builtin");
122
165
  continue;
123
166
  }
124
167
  if (recipe.source === "user" && builtin && isShadowAgent(normalizeAgentSpec(builtin))) {
125
- process.stderr.write(`[clio-coder:agents] ignore override id=${recipe.id} by=user reason=reserved-shadow\n`);
168
+ ignored(recipe, "reserved-shadow");
126
169
  continue;
127
170
  }
128
171
  if (recipe.source === "project" && builtin) {
129
- process.stderr.write(`[clio-coder:agents] ignore override id=${recipe.id} by=project reason=reserved-builtin\n`);
172
+ ignored(recipe, "reserved-builtin");
130
173
  continue;
131
174
  }
132
- if (byId.has(recipe.id)) process.stderr.write(`[clio-coder:agents] override id=${recipe.id} by=${recipe.source}\n`);
175
+ const previous = byId.get(recipe.id);
176
+ if (previous) {
177
+ process.stderr.write(`[clio-coder:agents] override id=${recipe.id} by=${recipe.source}\n`);
178
+ recordDiagnostic(diagnostics, {
179
+ kind: "overridden",
180
+ id: previous.id,
181
+ source: previous.source,
182
+ audience: previous.audience,
183
+ by: recipe.source,
184
+ filepath: previous.filepath,
185
+ message: `agent recipe ${previous.id} from ${previous.source} overridden by ${recipe.source}`,
186
+ });
187
+ }
133
188
  byId.set(recipe.id, recipe);
134
189
  }
135
190
  }
@@ -138,9 +193,9 @@ function mergeRecipes(...sources: ReadonlyArray<ReadonlyArray<AgentRecipe>>): Re
138
193
 
139
194
  /**
140
195
  * Discover the one native-agent catalog used by listing, fleet admission, and
141
- * dispatch. Extension recipes occupy the same precedence slot as extension
142
- * fleets: after builtins and before operator/user and project recipes. Their
143
- * skill bindings remain constrained to the declaring extension's skill root.
196
+ * dispatch. Plugin recipes occupy the same precedence slot as plugin fleets:
197
+ * after builtins and before operator/user and project recipes. Their skill
198
+ * bindings remain constrained to the declaring plugin's skill root.
144
199
  */
145
200
  export function discoverAgentRecipes(
146
201
  cwd = process.cwd(),
@@ -154,15 +209,16 @@ export function discoverAgentRecipes(
154
209
  },
155
210
  diagnostics,
156
211
  );
157
- const skillRoots = new Map(enabledExtensionResourceRoots("skills", cwd).map((root) => [root.source, root.path]));
158
- const extensionRecipes = enabledExtensionResourceRoots("agents", cwd)
212
+ const skillRoots = new Map(enabledPluginResourceRoots("skills", cwd).map((root) => [root.source, root.path]));
213
+ const pluginRecipes = enabledPluginResourceRoots("agents", cwd)
159
214
  .sort((left, right) => left.source.localeCompare(right.source))
160
215
  .map((root) => {
161
216
  const skillRoot = skillRoots.get(root.source);
162
217
  return loadRecipesFromDir(
163
218
  {
164
219
  dir: root.path,
165
- source: "extension",
220
+ source: "plugin",
221
+ rootPath: root.rootPath,
166
222
  cwd,
167
223
  origin: root.source,
168
224
  ...(skillRoot === undefined ? {} : { skillRoot }),
@@ -175,5 +231,5 @@ export function discoverAgentRecipes(
175
231
  { dir: path.join(cwd, ".clio-coder", "agents"), source: "project", cwd },
176
232
  diagnostics,
177
233
  );
178
- return mergeRecipes(builtin, ...extensionRecipes, user, project);
234
+ return mergeRecipes(diagnostics, builtin, ...pluginRecipes, user, project);
179
235
  }
@@ -22,6 +22,7 @@ const HOT_RELOAD_FIELDS = new Set<string>([
22
22
  "interface.keybindings",
23
23
  "safety.autonomy",
24
24
  "chat.modelPicker",
25
+ "interface.outputDetail",
25
26
  "interface.smoothStreaming",
26
27
  "interface.panes.notifications",
27
28
  "integrations.git.commitAttribution",
@@ -49,7 +50,6 @@ const NEXT_TURN_FIELDS = new Set<string>([
49
50
  "fleet.history",
50
51
  "context",
51
52
  "safety.limits",
52
- "interface.outputDetail",
53
53
  "interface.terminalProgress",
54
54
  "interface.desktopNotifications",
55
55
  "integrations.projectResources",
@@ -9,7 +9,7 @@
9
9
  * complains.
10
10
  */
11
11
 
12
- import type { KeybindingDefinitions } from "../../engine/tui.js";
12
+ import type { KeybindingDefinitions, KeyId } from "../../engine/tui.js";
13
13
  import { TUI_KEYBINDINGS } from "../../engine/tui.js";
14
14
 
15
15
  /**
@@ -19,6 +19,7 @@ import { TUI_KEYBINDINGS } from "../../engine/tui.js";
19
19
  * live in `resolveCtrlCAction` and are not a simple keybinding.
20
20
  */
21
21
  export interface ClioAppKeybindings {
22
+ "clio-coder.output.cycle": true;
22
23
  "clio-coder.thinking.cycle": true;
23
24
  "clio-coder.exit": true;
24
25
  "clio-coder.status.toggle": true;
@@ -29,13 +30,9 @@ export interface ClioAppKeybindings {
29
30
  "clio-coder.decisions.open": true;
30
31
  "clio-coder.dispatch.background": true;
31
32
  "clio-coder.model.select": true;
33
+ "clio-coder.library.toggle": true;
32
34
  "clio-coder.model.cycleForward": true;
33
35
  "clio-coder.model.cycleBackward": true;
34
- "clio-coder.tool.expand": true;
35
- "clio-coder.tool.expandAll": true;
36
- "clio-coder.tool.liveOutput": true;
37
- "clio-coder.thinking.expand": true;
38
- "clio-coder.thinking.expandAll": true;
39
36
  "clio-coder.editor.external": true;
40
37
  "clio-coder.message.followUp": true;
41
38
  "clio-coder.message.interrupt": true;
@@ -56,153 +53,188 @@ declare module "@earendil-works/pi-tui" {
56
53
  interface Keybindings extends ClioAppKeybindings {}
57
54
  }
58
55
 
59
- /**
60
- * Built-in defaults. Users override via `settings.yaml.keybindings`; the
61
- * manager reads those and patches this table before the TUI starts.
62
- *
63
- * Clio's app bindings follow one scheme: `Alt + <key>` (with `shift+tab`,
64
- * `ctrl+d`, and the portable `ctrl+g` leader retained because every terminal
65
- * already transmits them). `Alt + <letter>` decodes from the legacy
66
- * `ESC <letter>` sequence on meta-capable terminals. The chosen letters avoid
67
- * pi-tui's editor reserves except for the approved `Alt+B` and `Alt+D`
68
- * application-boundary overrides. They open the task and decision boards
69
- * before the editor can interpret those chords as word-back or word-delete.
70
- * The CSI-u/reserved-key detector in `keybinding-manager.ts` stays as a safety
71
- * net for user rebinds.
72
- */
56
+ /** Stable application descriptors. Fixed leader suffixes never derive from overrides. */
57
+ interface AppActionDescriptor {
58
+ defaultKeys: KeyId | KeyId[];
59
+ description: string;
60
+ scope: "composer";
61
+ kind: "toggle" | "cycle" | "send" | "exit" | "edit" | "dismiss";
62
+ repeat: false;
63
+ leader?: string;
64
+ }
73
65
  export const CLIO_APP_KEYBINDINGS = {
74
- "clio-coder.thinking.cycle": {
75
- defaultKeys: "shift+tab",
76
- description: "Cycle orchestrator thinking level",
66
+ "clio-coder.library.toggle": {
67
+ defaultKeys: "alt+l",
68
+ description: "Library",
69
+ scope: "composer",
70
+ kind: "toggle",
71
+ repeat: false,
72
+ leader: "l",
77
73
  },
78
- "clio-coder.exit": {
79
- defaultKeys: "ctrl+d",
80
- description: "Exit when the editor is empty",
74
+ "clio-coder.model.select": {
75
+ defaultKeys: "alt+m",
76
+ description: "Model picker",
77
+ scope: "composer",
78
+ kind: "toggle",
79
+ repeat: false,
80
+ leader: "m",
81
+ },
82
+ "clio-coder.output.cycle": {
83
+ defaultKeys: "alt+o",
84
+ description: "Output style",
85
+ scope: "composer",
86
+ kind: "cycle",
87
+ repeat: false,
88
+ leader: "o",
81
89
  },
82
90
  "clio-coder.status.toggle": {
83
91
  defaultKeys: "alt+u",
84
- description: "Toggle the footer dashboard (compact / expanded)",
85
- },
86
- "clio-coder.session.tree": {
87
- defaultKeys: "alt+t",
88
- description: "Open the /tree navigator",
92
+ description: "Dashboard",
93
+ scope: "composer",
94
+ kind: "toggle",
95
+ repeat: false,
96
+ leader: "u",
89
97
  },
90
98
  "clio-coder.dispatchBoard.toggle": {
91
99
  defaultKeys: "alt+w",
92
- description: "Toggle the dispatch (workers) board overlay",
100
+ description: "Workers",
101
+ scope: "composer",
102
+ kind: "toggle",
103
+ repeat: false,
104
+ leader: "w",
93
105
  },
94
106
  "clio-coder.files.toggle": {
95
- // Alt+F is a pi-tui editor reserve (word-forward), so the files pane
96
- // takes the next letter that reads as "explorer" and stays inside the
97
- // Alt+<letter> scheme, which also earns it the Ctrl+G leader fallback.
98
107
  defaultKeys: "alt+e",
99
- description: "Toggle the files pane beside the session (a --with-panes session inside herdr)",
108
+ description: "Files (from Clio focus)",
109
+ scope: "composer",
110
+ kind: "toggle",
111
+ repeat: false,
112
+ leader: "e",
113
+ },
114
+ "clio-coder.thinking.cycle": {
115
+ defaultKeys: "shift+tab",
116
+ description: "Thinking effort",
117
+ scope: "composer",
118
+ kind: "cycle",
119
+ repeat: false,
120
+ leader: "t",
121
+ },
122
+ "clio-coder.message.followUp": {
123
+ defaultKeys: "ctrl+q",
124
+ description: "Send after the active run",
125
+ scope: "composer",
126
+ kind: "send",
127
+ repeat: false,
128
+ leader: "f",
129
+ },
130
+ "clio-coder.message.dequeue": {
131
+ defaultKeys: "alt+q",
132
+ description: "Restore queued messages",
133
+ scope: "composer",
134
+ kind: "send",
135
+ repeat: false,
136
+ leader: "q",
137
+ },
138
+ "clio-coder.exit": {
139
+ defaultKeys: "ctrl+d",
140
+ description: "Exit empty idle composer with no queued messages",
141
+ scope: "composer",
142
+ kind: "exit",
143
+ repeat: false,
144
+ },
145
+ "clio-coder.leader": {
146
+ defaultKeys: "ctrl+g",
147
+ description: "Open contextual action menu",
148
+ scope: "composer",
149
+ kind: "toggle",
150
+ repeat: false,
100
151
  },
101
152
  "clio-coder.tasks.open": {
102
- // Approved application-boundary override of pi-tui editor word-back.
103
- defaultKeys: "alt+b",
104
- description: "Open the composite session and operator task board",
153
+ defaultKeys: [],
154
+ description: "Tasks (/tasks)",
155
+ scope: "composer",
156
+ kind: "toggle",
157
+ repeat: false,
105
158
  },
106
159
  "clio-coder.decisions.open": {
107
- // Approved application-boundary override of pi-tui editor word-delete.
108
- defaultKeys: "alt+d",
109
- description: "Open the settled interview decision board",
110
- },
111
- "clio-coder.dispatch.background": {
112
- // Ctrl+B alone is pi-tui's editor cursor-left, so the Claude Code chord
113
- // cannot be the primary here. Alt+S ("send to background") keeps the app
114
- // scheme and earns the Ctrl+G leader fallback, which only alt+<letter>
115
- // bindings get; Ctrl+Alt+B stays for the b-for-background muscle memory.
116
- defaultKeys: ["alt+s", "ctrl+alt+b"],
117
- description: "Send the running attached dispatch to the background as a detached batch",
160
+ defaultKeys: [],
161
+ description: "Decisions (/decisions)",
162
+ scope: "composer",
163
+ kind: "toggle",
164
+ repeat: false,
118
165
  },
119
- "clio-coder.model.select": {
120
- defaultKeys: "alt+l",
121
- description: "Open the model + targets selector",
166
+ "clio-coder.session.tree": {
167
+ defaultKeys: [],
168
+ description: "Session tree (/tree)",
169
+ scope: "composer",
170
+ kind: "toggle",
171
+ repeat: false,
122
172
  },
123
173
  "clio-coder.model.cycleForward": {
124
- defaultKeys: "alt+j",
125
- description: "Cycle to next scoped model",
174
+ defaultKeys: [],
175
+ description: "Next scoped model",
176
+ scope: "composer",
177
+ kind: "cycle",
178
+ repeat: false,
126
179
  },
127
180
  "clio-coder.model.cycleBackward": {
128
- defaultKeys: "alt+k",
129
- description: "Cycle to previous scoped model",
130
- },
131
- "clio-coder.tool.expand": {
132
- defaultKeys: "alt+o",
133
- description:
134
- "Fold or unfold the newest tool call or worker block between its one-line summary and full details, overriding the /output level for that block",
135
- },
136
- "clio-coder.tool.expandAll": {
137
- // Alt+Shift+letter is commonly consumed by OS keyboard-layout switching.
138
- // Keep it discoverable, but pair it with the legacy-safe Ctrl+Alt form.
139
- defaultKeys: ["ctrl+alt+o", "alt+shift+o"],
140
- description:
141
- "Fold or unfold every tool call and worker block at once, overriding the /output level; changing /output clears the overrides",
142
- },
143
- "clio-coder.tool.liveOutput": {
144
- defaultKeys: "alt+p",
145
- description: "Toggle streaming partial tool output in expanded tool bodies",
146
- },
147
- "clio-coder.thinking.expand": {
148
- defaultKeys: "alt+r",
149
- description:
150
- "Toggle the latest thinking block between hidden marker and full body (no effect while /output verbose pins it open)",
151
- },
152
- "clio-coder.thinking.expandAll": {
153
- // Ctrl+Alt+R is the fallback for terminals/OSes that do not forward
154
- // Alt+Shift+R as a distinct key event.
155
- defaultKeys: ["ctrl+alt+r", "alt+shift+r"],
156
- description:
157
- "Toggle all thinking blocks between hidden markers and full bodies, overriding the /output level; changing /output clears the overrides",
181
+ defaultKeys: [],
182
+ description: "Previous scoped model",
183
+ scope: "composer",
184
+ kind: "cycle",
185
+ repeat: false,
158
186
  },
159
- "clio-coder.editor.external": {
160
- defaultKeys: "alt+g",
161
- description: "Open the current input in an external editor",
162
- },
163
- "clio-coder.message.followUp": {
164
- defaultKeys: "alt+enter",
165
- description:
166
- "End of turn: queue the current input for delivery when the active run settles (Enter delivers it at the next slot, between tool batches)",
187
+ "clio-coder.dispatch.background": {
188
+ defaultKeys: [],
189
+ description: "Background attached dispatch",
190
+ scope: "composer",
191
+ kind: "send",
192
+ repeat: false,
193
+ leader: "s",
167
194
  },
168
195
  "clio-coder.message.interrupt": {
169
- // Alt+I keeps the app scheme and earns the Ctrl+G leader fallback. A
170
- // Ctrl+Enter chord was rejected because legacy terminals send it as a
171
- // plain Enter, which would turn every send into a cancel.
172
- defaultKeys: "alt+i",
173
- description:
174
- "Interrupt: cancel the active run and deliver the current input now (refused while an attached dispatch runs or a permission ask is parked; the input then queues for the next slot)",
196
+ defaultKeys: [],
197
+ description: "Interrupt with draft",
198
+ scope: "composer",
199
+ kind: "send",
200
+ repeat: false,
201
+ leader: "i",
175
202
  },
176
- "clio-coder.message.dequeue": {
177
- defaultKeys: "alt+up",
178
- description: "Restore queued steering and follow-up messages to the editor",
203
+ "clio-coder.editor.external": {
204
+ defaultKeys: [],
205
+ description: "Edit expanded draft externally",
206
+ scope: "composer",
207
+ kind: "edit",
208
+ repeat: false,
209
+ leader: "g",
179
210
  },
180
211
  "clio-coder.notifications.dismiss": {
181
- defaultKeys: "alt+x",
182
- description: "Dismiss footer notifications",
183
- },
184
- "clio-coder.leader": {
185
- defaultKeys: "ctrl+g",
186
- description: "Start portable leader-key fallback for Alt shortcuts",
187
- },
188
- } as const satisfies KeybindingDefinitions;
212
+ defaultKeys: [],
213
+ description: "Dismiss oldest notification",
214
+ scope: "composer",
215
+ kind: "dismiss",
216
+ repeat: false,
217
+ leader: "x",
218
+ },
219
+ } as const satisfies Record<ClioKeybinding, AppActionDescriptor>;
189
220
 
190
- /**
191
- * Full definition table = pi-tui editor/select defaults + Clio app ids.
192
- * pi-tui 0.84 supplies dedicated prompt-history actions but leaves them
193
- * unbound for applications to place. Clio uses the readline-style Ctrl+P and
194
- * Ctrl+N pair because its model cycling already lives on Alt+J and Alt+K.
195
- */
196
221
  export const CLIO_KEYBINDINGS = {
197
222
  ...TUI_KEYBINDINGS,
198
- "tui.editor.historyPrevious": {
199
- ...TUI_KEYBINDINGS["tui.editor.historyPrevious"],
200
- defaultKeys: "ctrl+p",
201
- },
202
- "tui.editor.historyNext": {
203
- ...TUI_KEYBINDINGS["tui.editor.historyNext"],
204
- defaultKeys: "ctrl+n",
205
- },
223
+ "tui.editor.historyPrevious": { ...TUI_KEYBINDINGS["tui.editor.historyPrevious"], defaultKeys: "ctrl+p" },
224
+ "tui.editor.historyNext": { ...TUI_KEYBINDINGS["tui.editor.historyNext"], defaultKeys: "ctrl+n" },
225
+ "tui.editor.deleteWordBackward": {
226
+ ...TUI_KEYBINDINGS["tui.editor.deleteWordBackward"],
227
+ defaultKeys: ["ctrl+w", "alt+backspace", "ctrl+backspace"],
228
+ },
229
+ "tui.editor.undo": { ...TUI_KEYBINDINGS["tui.editor.undo"], defaultKeys: "ctrl+_" },
230
+ "tui.input.newLine": { ...TUI_KEYBINDINGS["tui.input.newLine"], defaultKeys: ["ctrl+j", "shift+enter"] },
231
+ "tui.altScreen.top": { ...TUI_KEYBINDINGS["tui.altScreen.top"], defaultKeys: [] },
232
+ "tui.altScreen.bottom": { ...TUI_KEYBINDINGS["tui.altScreen.bottom"], defaultKeys: [] },
233
+ "tui.altScreen.previousPrompt": { ...TUI_KEYBINDINGS["tui.altScreen.previousPrompt"], defaultKeys: "ctrl+up" },
234
+ "tui.altScreen.nextPrompt": { ...TUI_KEYBINDINGS["tui.altScreen.nextPrompt"], defaultKeys: "ctrl+down" },
235
+ "tui.altScreen.search": { ...TUI_KEYBINDINGS["tui.altScreen.search"], defaultKeys: "ctrl+r" },
236
+ "tui.altScreen.searchNext": { ...TUI_KEYBINDINGS["tui.altScreen.searchNext"], defaultKeys: "enter" },
237
+ "tui.altScreen.searchPrevious": { ...TUI_KEYBINDINGS["tui.altScreen.searchPrevious"], defaultKeys: "up" },
206
238
  ...CLIO_APP_KEYBINDINGS,
207
239
  } as const satisfies KeybindingDefinitions;
208
240
 
@@ -0,0 +1,91 @@
1
+ import type { AgentMessage } from "../../../engine/types.js";
2
+
3
+ /** Conversation inheritance is independent of dispatch's scheduling mode. */
4
+ export type WorkerContextPolicy =
5
+ | { mode: "isolated" }
6
+ | { mode: "fork"; max_tokens?: number }
7
+ | { mode: "splice"; max_tokens?: number; paths?: string[]; refs?: string[] };
8
+
9
+ export const WORKER_CONTEXT_SPLICE_TOKENS = 8_000;
10
+
11
+ export interface WorkerContextSource {
12
+ sessionId: string;
13
+ leafTurnId: string | null;
14
+ cwd: string;
15
+ }
16
+
17
+ /** Host-only snapshot of model-visible messages, never the raw session archive. */
18
+ export interface WorkerContextSnapshot {
19
+ version: 1;
20
+ source: WorkerContextSource;
21
+ messages: ReadonlyArray<AgentMessage>;
22
+ excludedTailMessages: number;
23
+ excludedInterruptedMessages: number;
24
+ contentHash: string;
25
+ }
26
+
27
+ /** Integrity-covered receipt metadata; the messages themselves live in a seed artifact. */
28
+ export interface WorkerContextProvenance {
29
+ version: 1;
30
+ mode: "fork" | "splice";
31
+ source: WorkerContextSource;
32
+ snapshotHash: string;
33
+ contentHash: string;
34
+ messageCount: number;
35
+ estimatedTokens: number;
36
+ bytes: number;
37
+ omittedMessages: number;
38
+ excludedTailMessages: number;
39
+ excludedInterruptedMessages: number;
40
+ selectedRefs: string[];
41
+ }
42
+
43
+ /** Self-contained seed, usable on a remote native worker without parent filesystem access. */
44
+ export interface WorkerContextSeed {
45
+ provenance: WorkerContextProvenance;
46
+ messages: AgentMessage[];
47
+ }
48
+
49
+ export function parseWorkerContextPolicy(value: unknown): WorkerContextPolicy {
50
+ if (!value || typeof value !== "object" || Array.isArray(value)) throw new Error("context must be an object");
51
+ const policy = value as Record<string, unknown>;
52
+ const mode = policy.mode;
53
+ if (mode !== "isolated" && mode !== "fork" && mode !== "splice")
54
+ throw new Error("context.mode must be isolated, fork, or splice");
55
+ const keys =
56
+ mode === "isolated" ? ["mode"] : mode === "fork" ? ["mode", "max_tokens"] : ["mode", "max_tokens", "paths", "refs"];
57
+ for (const key of Object.keys(policy))
58
+ if (!keys.includes(key)) throw new Error(`context.${key} is unsupported for ${mode}`);
59
+ if (mode === "isolated") return { mode };
60
+ const result: Exclude<WorkerContextPolicy, { mode: "isolated" }> = { mode };
61
+ if (policy.max_tokens !== undefined) {
62
+ if (
63
+ !Number.isSafeInteger(policy.max_tokens) ||
64
+ (policy.max_tokens as number) < 256 ||
65
+ (policy.max_tokens as number) > 262_144
66
+ )
67
+ throw new Error("context.max_tokens must be an integer between 256 and 262144");
68
+ result.max_tokens = policy.max_tokens as number;
69
+ }
70
+ if (result.mode === "splice") {
71
+ for (const key of ["paths", "refs"] as const) {
72
+ const items = policy[key];
73
+ if (items === undefined) continue;
74
+ if (
75
+ !Array.isArray(items) ||
76
+ items.length === 0 ||
77
+ items.length > 64 ||
78
+ items.some(
79
+ (item) =>
80
+ typeof item !== "string" ||
81
+ item.trim().length === 0 ||
82
+ item.length > 4096 ||
83
+ Array.from(item).some((char) => char.charCodeAt(0) < 32),
84
+ )
85
+ )
86
+ throw new Error(`context.${key} must contain 1 to 64 nonempty strings`);
87
+ result[key] = [...new Set((items as string[]).map((item) => item.trim()))];
88
+ }
89
+ }
90
+ return result;
91
+ }