@iowarp/clio-coder 0.4.6 → 0.4.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (657) hide show
  1. package/.claude-plugin/marketplace.json +283 -0
  2. package/CHANGELOG.md +50 -0
  3. package/CONTRIBUTING.md +102 -29
  4. package/NOTICE +8 -0
  5. package/README.md +37 -5
  6. package/dist/{acp-UVEVWSDL.js → acp-W3Y3TRHD.js} +12 -12
  7. package/dist/{agents-VWY37DTK.js → agents-J4ICNLQ3.js} +52 -52
  8. package/dist/assets/codewiki.json +1 -1
  9. package/dist/assets/tui-notices/get-east-asian-width-LICENSE +9 -0
  10. package/dist/assets/tui-notices/marked-LICENSE +44 -0
  11. package/dist/assets/tui-notices/pi-tui-LICENSE +21 -0
  12. package/dist/{auth-PCV2XQDV.js → auth-X2UJUMOC.js} +24 -24
  13. package/dist/{builtins-PD652MTK.js → builtins-XLXWWSRF.js} +6 -6
  14. package/dist/{chunk-DZK63TZJ.js → chunk-24S3DN22.js} +336 -612
  15. package/dist/{chunk-NTK3WTHM.js → chunk-24TOGHPO.js} +2 -2
  16. package/dist/{chunk-M6TAYK66.js → chunk-2O2LVQQK.js} +11 -4
  17. package/dist/{chunk-OQM5IVJY.js → chunk-34XHRVKG.js} +3 -3
  18. package/dist/{chunk-LY4N4TTL.js → chunk-3LXJOICS.js} +2 -2
  19. package/dist/{chunk-3BJGMT2D.js → chunk-3XE4NRLF.js} +1 -1
  20. package/dist/{chunk-N2OKBREN.js → chunk-4MFBBY2Z.js} +3 -3
  21. package/dist/{chunk-5VTJP36Q.js → chunk-4N2RZ4TO.js} +2 -2
  22. package/dist/{chunk-WNGF5AJX.js → chunk-4QKAITQT.js} +3 -3
  23. package/dist/chunk-4UHVS5T7.js +207 -0
  24. package/dist/{chunk-GLYBJ4RQ.js → chunk-5AJPUR72.js} +6 -6
  25. package/dist/{chunk-5CY4Q6QI.js → chunk-5EQO5NWP.js} +105 -3
  26. package/dist/{chunk-6HAO6X5B.js → chunk-65BGHOUR.js} +8 -5
  27. package/dist/{chunk-6VRRJT7L.js → chunk-6CA2BHOR.js} +2 -2
  28. package/dist/{chunk-HL26ADLH.js → chunk-6CB2IL4N.js} +2 -1
  29. package/dist/{chunk-E7RF4KBO.js → chunk-6LRLOJHQ.js} +3 -3
  30. package/dist/{chunk-HXHFDHB6.js → chunk-6TAATXXH.js} +6 -6
  31. package/dist/{chunk-P6M7RKMI.js → chunk-6YHPAAZR.js} +3 -3
  32. package/dist/{chunk-5QRX7SLS.js → chunk-7EEGBKV4.js} +7 -7
  33. package/dist/{chunk-BS4GAMUB.js → chunk-A67NR5AT.js} +2 -2
  34. package/dist/{chunk-WJIMKGD6.js → chunk-BAU36233.js} +8 -8
  35. package/dist/{chunk-PZN2LQY6.js → chunk-BO4XV5VX.js} +4 -4
  36. package/dist/{chunk-I2K2NCZQ.js → chunk-BQQ5MXUC.js} +6 -6
  37. package/dist/{chunk-X3BI7HTV.js → chunk-C3G5PNUO.js} +21 -21
  38. package/dist/{chunk-SRZOW5L2.js → chunk-C6GEXX4L.js} +1 -1
  39. package/dist/{chunk-6RYDAVQT.js → chunk-CE64C5K5.js} +219 -64
  40. package/dist/chunk-CP3HIR5H.js +2119 -0
  41. package/dist/{chunk-BBV5TKE6.js → chunk-CPXGJI2A.js} +2 -2
  42. package/dist/{chunk-IGLVVNEG.js → chunk-CULVKYTK.js} +4 -4
  43. package/dist/{chunk-DXLUVUD4.js → chunk-D2T66PDV.js} +5 -5
  44. package/dist/{chunk-NF3BK5WR.js → chunk-DACXIVVF.js} +5 -5
  45. package/dist/{chunk-IKRWLEDA.js → chunk-DLIYANB7.js} +20 -15
  46. package/dist/{chunk-RGZNQ5CT.js → chunk-DO7M3LSX.js} +9 -9
  47. package/dist/{chunk-2QPI3TR3.js → chunk-DVJL77SO.js} +2 -2
  48. package/dist/{chunk-ODUTYZIU.js → chunk-EUEXGXXR.js} +5 -5
  49. package/dist/{chunk-WKUYQBCG.js → chunk-EUZRMP4Y.js} +18 -16
  50. package/dist/{chunk-JMPL7NUB.js → chunk-G4LGUTOE.js} +4 -4
  51. package/dist/{chunk-CBSKDFWL.js → chunk-GEVQNST4.js} +2 -2
  52. package/dist/{chunk-NNWJYUNO.js → chunk-GFQ7P2UF.js} +7 -7
  53. package/dist/{chunk-SXQKNKRA.js → chunk-GI5RRMAH.js} +14 -14
  54. package/dist/{chunk-HPTJF6DG.js → chunk-GVZFCJHE.js} +336 -83
  55. package/dist/{chunk-ACCKVSHU.js → chunk-GXIWHXDB.js} +3 -3
  56. package/dist/{chunk-LUL5Z66S.js → chunk-HOX4YZ2K.js} +6 -5
  57. package/dist/chunk-HRAKUPIH.js +57 -0
  58. package/dist/{chunk-F5Z7EWMN.js → chunk-IJMW64DX.js} +50 -50
  59. package/dist/{chunk-QNWRHOMF.js → chunk-IMOD2YPV.js} +16 -9
  60. package/dist/{chunk-HZ2T2YED.js → chunk-IQCNVLO6.js} +28 -8
  61. package/dist/{chunk-HZFBVU5X.js → chunk-ISNCCX42.js} +8 -8
  62. package/dist/{chunk-7JSSKXG2.js → chunk-IZYTT3CD.js} +7 -3
  63. package/dist/chunk-KKEYGFX4.js +915 -0
  64. package/dist/{chunk-HHVJNVUJ.js → chunk-KS7ETA3P.js} +2 -2
  65. package/dist/{chunk-BLTEAUCB.js → chunk-L3Z5ANCV.js} +7 -7
  66. package/dist/{chunk-4VMV6OS6.js → chunk-LBFQMYS3.js} +2 -2
  67. package/dist/{chunk-URBGEOH3.js → chunk-M6Z2V6YU.js} +5 -5
  68. package/dist/{chunk-BT7HGDOX.js → chunk-MBJO5VNZ.js} +12 -12
  69. package/dist/chunk-MNQN3X6Y.js +595 -0
  70. package/dist/{chunk-3QKXHCGS.js → chunk-MZHXENL7.js} +5 -5
  71. package/dist/chunk-MZNWZUJM.js +1801 -0
  72. package/dist/{chunk-7YJWEF2L.js → chunk-N37QC5FV.js} +5 -5
  73. package/dist/{chunk-TJFDL26W.js → chunk-NCCQ6DVS.js} +7 -7
  74. package/dist/{chunk-P5JMBPDJ.js → chunk-NO7J45X6.js} +162 -47
  75. package/dist/chunk-OH3YYA3B.js +15 -0
  76. package/dist/{chunk-22PQ4TX4.js → chunk-P4DL2LM5.js} +16 -77
  77. package/dist/{chunk-LIN2K3EL.js → chunk-PFLOULP3.js} +4 -4
  78. package/dist/{chunk-QXFBABFJ.js → chunk-QKWL7SYE.js} +11 -11
  79. package/dist/chunk-RFCKPS2V.js +26 -0
  80. package/dist/{chunk-ZS43Y2FT.js → chunk-RTLNFZMD.js} +12 -4
  81. package/dist/{chunk-U7H5WRG5.js → chunk-RXFPB32E.js} +8 -6
  82. package/dist/{chunk-Q7NNUHQV.js → chunk-SEDI5K5B.js} +16 -16
  83. package/dist/{chunk-WV6TDAPN.js → chunk-SELG4SUR.js} +7 -7
  84. package/dist/{chunk-3WBALRQH.js → chunk-SER7RRAE.js} +27 -832
  85. package/dist/{chunk-K2HL3GBL.js → chunk-T4TY5GG3.js} +165 -15
  86. package/dist/chunk-T7QQBNLH.js +691 -0
  87. package/dist/{chunk-6OII3LOK.js → chunk-TLTGZTXI.js} +3 -3
  88. package/dist/chunk-TZ6UVP2H.js +637 -0
  89. package/dist/{chunk-3JLFK5MW.js → chunk-TZHN5ITX.js} +13 -41
  90. package/dist/{chunk-VANN3GDP.js → chunk-U3TPUXOQ.js} +399 -234
  91. package/dist/{chunk-VHMX7SXF.js → chunk-UA3W4FGC.js} +6 -6
  92. package/dist/{chunk-3O2ZAUGQ.js → chunk-UA6W4XFJ.js} +2 -2
  93. package/dist/chunk-UWD3JD5X.js +709 -0
  94. package/dist/chunk-V4ZKOKRB.js +13433 -0
  95. package/dist/{chunk-NC4KV7EL.js → chunk-VCRVEDUC.js} +5 -5
  96. package/dist/{chunk-4DU2TVI4.js → chunk-VMATUZB6.js} +12 -10
  97. package/dist/{chunk-J2FYEQ5L.js → chunk-VTYHHQ57.js} +2 -2
  98. package/dist/chunk-WB7POC6M.js +891 -0
  99. package/dist/{chunk-3HQVBIKD.js → chunk-WBVKKTUT.js} +2 -2
  100. package/dist/{chunk-EHOSNVVM.js → chunk-WLHX3MM5.js} +6 -2
  101. package/dist/{chunk-24T2YZ7A.js → chunk-WN552PKN.js} +553 -298
  102. package/dist/{chunk-4U4TKZFR.js → chunk-WT5TRMO4.js} +51 -26
  103. package/dist/{chunk-XWMSPJYN.js → chunk-WURGVOZJ.js} +56 -12
  104. package/dist/{chunk-7WUZEB2M.js → chunk-XR3XJN2M.js} +2 -2
  105. package/dist/chunk-XW2UZICE.js +372 -0
  106. package/dist/{chunk-2AKYFREM.js → chunk-XZ6UFQ52.js} +11 -11
  107. package/dist/chunk-Y3JU5RPK.js +8 -0
  108. package/dist/chunk-YKRJTYNP.js +1143 -0
  109. package/dist/{chunk-PWWSIB2A.js → chunk-ZGIGW4ZG.js} +5 -5
  110. package/dist/cli/index.js +34 -36
  111. package/dist/{clio-QQCMTUZE.js → clio-L2P7S2R2.js} +9 -9
  112. package/dist/{code-nav-GUPM6766.js → code-nav-B5LNX4KU.js} +25 -25
  113. package/dist/{components-TNIKXCBH.js → components-63MMQKUT.js} +6 -6
  114. package/dist/{config-IIM7YOD3.js → config-YXARKGTX.js} +70 -67
  115. package/dist/{configure-4ZM5HWJX.js → configure-LMVQJ46J.js} +47 -35
  116. package/dist/{context-OL5P3HEP.js → context-7HJEWTTP.js} +87 -44
  117. package/dist/{context-44BZLJ3J.js → context-XSZKKFBW.js} +14 -14
  118. package/dist/{context-AIDVQKMW.js → context-YG2LZDYZ.js} +60 -58
  119. package/dist/{context-clear-OQV76MYP.js → context-clear-AC5NXHM2.js} +57 -55
  120. package/dist/{context-index-HP2JFUWA.js → context-index-KKTPRV5G.js} +3 -3
  121. package/dist/{context-map-INTXD54D.js → context-map-T7ROR5D5.js} +4 -4
  122. package/dist/{context-working-set-ZUW3EGLS.js → context-working-set-F4Q4J3NS.js} +12 -10
  123. package/dist/{detail-UXPWRANG.js → detail-H73BEF2N.js} +58 -56
  124. package/dist/{dispatch-runner-P3ZW6G77.js → dispatch-runner-3RY5FSJC.js} +74 -72
  125. package/dist/{doctor-JJVGPZWT.js → doctor-EQYJOGUG.js} +44 -30
  126. package/dist/{eval-V2RTN3UH.js → eval-4P7O6CCE.js} +109 -46
  127. package/dist/{evidence-35PYWGSO.js → evidence-D6GUSYJW.js} +57 -55
  128. package/dist/{evidence-CIGGKI6J.js → evidence-O76QF7TZ.js} +62 -59
  129. package/dist/{evolve-33SM3NJP.js → evolve-H47BCETS.js} +58 -56
  130. package/dist/{extensions-YVRHX6ZI.js → extensions-NNL3ZOCU.js} +98 -20
  131. package/dist/{fleet-LFO7SIPC.js → fleet-KMNS6NOM.js} +106 -99
  132. package/dist/{fleet-commands-RLK72GU3.js → fleet-commands-DOWSYCBX.js} +14 -14
  133. package/dist/{fleet-decisions-3SBSCTCW.js → fleet-decisions-S3PTZV2D.js} +9 -9
  134. package/dist/{fleet-graph-JZIBCGMW.js → fleet-graph-F2DE2TME.js} +26 -24
  135. package/dist/{fleet-inspect-2L5YGGZJ.js → fleet-inspect-EN2Q6IVB.js} +60 -57
  136. package/dist/{fleet-preflight-QRSHIIDE.js → fleet-preflight-FRLETDD3.js} +3 -3
  137. package/dist/{fleet-validate-LIAVKDUU.js → fleet-validate-B2XDLS57.js} +28 -29
  138. package/dist/{fleet-verify-JIK3OQZR.js → fleet-verify-4JKUWGJ7.js} +57 -55
  139. package/dist/{fleet-view-IWHYGQKK.js → fleet-view-BHJFW26B.js} +60 -57
  140. package/dist/{init-NJEDOTQW.js → init-XAT5N5YM.js} +79 -74
  141. package/dist/interop-FVECHFKG.js +246 -0
  142. package/dist/{inventory-74UL7UHU.js → inventory-7KFQGLCV.js} +60 -57
  143. package/dist/library-NY2XOT75.js +492 -0
  144. package/dist/library-QAPAO23R.js +306 -0
  145. package/dist/library-import-5Y6MAS3R.js +183 -0
  146. package/dist/library-inventory-JT6HWITQ.js +56 -0
  147. package/dist/library-validation-EQUH25DC.js +42 -0
  148. package/dist/{memory-I76I5VUH.js → memory-DYVTTCP6.js} +58 -56
  149. package/dist/{models-D4YDIQZQ.js → models-MASFJ6Y2.js} +48 -36
  150. package/dist/{monitor-NKVD55HX.js → monitor-YMP4NXJJ.js} +64 -61
  151. package/dist/{orchestrator-I6OATVPK.js → orchestrator-AFQRRTEI.js} +3685 -1841
  152. package/dist/{panes-7BTYH3XQ.js → panes-D3Y2KFG5.js} +4 -4
  153. package/dist/{panes-WPOMEMRH.js → panes-NICTHQCV.js} +7 -7
  154. package/dist/{paths-J3KN7UAO.js → paths-PSFAUIGO.js} +5 -5
  155. package/dist/{preload-EJAWJEIO.js → preload-5Q7VXRFJ.js} +57 -55
  156. package/dist/{reset-4XMQKDNZ.js → reset-7NKZK7JN.js} +9 -9
  157. package/dist/{resources-TVYVXK3Q.js → resources-NILSIZAT.js} +94 -38
  158. package/dist/{run-OWQNNSJU.js → run-BPZGEBZV.js} +121 -105
  159. package/dist/{share-NPZZMUXG.js → share-EZ6ERBMH.js} +31 -28
  160. package/dist/skills-BTVVNYVM.js +100 -0
  161. package/dist/{skills-eval-J5TCKSJA.js → skills-eval-UY34MNK7.js} +110 -72
  162. package/dist/{skills-inventory-7II4DM57.js → skills-inventory-JDHSIA7I.js} +30 -25
  163. package/dist/{slash-commands-MDSDSWYF.js → slash-commands-K4FNQ2AT.js} +49 -46
  164. package/dist/{steer-S7D7IKPU.js → steer-2B3EQGFH.js} +4 -4
  165. package/dist/{support-5VAEC32W.js → support-L2SOL3IE.js} +7 -7
  166. package/dist/{targets-KILZEOCE.js → targets-44VKGFLN.js} +64 -58
  167. package/dist/{tasks-R6P6OV22.js → tasks-3KODKFU7.js} +12 -12
  168. package/dist/{terminal-lease-LZCG2KN3.js → terminal-lease-LXA7MMPO.js} +32 -19
  169. package/dist/{tools-6OCQ6SVB.js → tools-3UB7TEVR.js} +7 -7
  170. package/dist/{trace-JHLXWUMN.js → trace-TAMIU4OJ.js} +5 -4
  171. package/dist/{tui-primitives-RCY2HN7G.js → tui-primitives-A6MUW32V.js} +3 -2
  172. package/dist/{uninstall-FXYMFFRT.js → uninstall-QYVRPEM4.js} +9 -9
  173. package/dist/{upgrade-D2OZH6IQ.js → upgrade-7PMKM2JH.js} +15 -16
  174. package/dist/{usage-PIASNUS4.js → usage-6EQV7EQK.js} +70 -67
  175. package/dist/{verifiers-LTHUY2PX.js → verifiers-JLITWSHU.js} +15 -15
  176. package/dist/{verify-HYF7KBVE.js → verify-T7NAEVIG.js} +13 -13
  177. package/dist/{web-fetch-MQN4FH3X.js → web-fetch-W4TNW4Q7.js} +4 -4
  178. package/dist/{wiki-generate-RK7JQ5NP.js → wiki-generate-T2TJQJUA.js} +81 -76
  179. package/dist/{with-panes-OFTNAR4Y.js → with-panes-CHFC7HGI.js} +4 -4
  180. package/dist/worker/entry.js +283 -76
  181. package/docs/README.md +43 -0
  182. package/docs/architecture/architecture.md +8 -7
  183. package/docs/architecture/artifact-versions.md +3 -3
  184. package/docs/architecture/context-engine.md +35 -1
  185. package/docs/architecture/library.md +32 -0
  186. package/docs/architecture/middleware-and-components.md +1 -1
  187. package/docs/architecture/model-catalog.md +21 -1
  188. package/docs/architecture/pi-boundary.md +18 -0
  189. package/docs/architecture/prompt-envelope-and-tools.md +5 -5
  190. package/docs/architecture/safety-model.md +21 -2
  191. package/docs/architecture/session-lifecycle.md +12 -1
  192. package/docs/architecture/tui-design.md +108 -9
  193. package/docs/architecture/worker-context.md +106 -0
  194. package/docs/guide/authoring-plugins.md +160 -0
  195. package/docs/guide/built-in-agents.md +5 -5
  196. package/docs/guide/commands-and-modes.md +161 -56
  197. package/docs/guide/configuration-and-targets.md +1 -1
  198. package/docs/guide/configuration-reference.md +27 -34
  199. package/docs/guide/environment-variables.md +2 -2
  200. package/docs/guide/exit-codes-and-output.md +1 -1
  201. package/docs/guide/extensions-and-sharing.md +93 -53
  202. package/docs/guide/fleet-dispatch.md +31 -4
  203. package/docs/guide/glossary.md +1 -1
  204. package/docs/guide/harness-extensions.md +291 -0
  205. package/docs/guide/installation-and-lifecycle.md +9 -9
  206. package/docs/guide/interop.md +243 -0
  207. package/docs/guide/panes-and-files.md +3 -3
  208. package/docs/guide/plugins.md +80 -0
  209. package/docs/guide/resource-library.md +111 -45
  210. package/docs/guide/skills-marketplace.md +35 -72
  211. package/docs/guide/tool-usage.md +19 -7
  212. package/docs/guide/troubleshooting.md +1 -1
  213. package/docs/process/development-pipeline.md +14 -14
  214. package/docs/process/documentation-coverage.md +28 -1
  215. package/docs/process/documentation-guide.md +15 -7
  216. package/docs/process/eval-runner.md +8 -3
  217. package/docs/process/performance-methodology.md +1 -1
  218. package/docs/process/release-cut-checklist.md +4 -0
  219. package/docs/process/scientific-validation.md +23 -0
  220. package/evals/scalar-decision-machinery.ts +1 -1
  221. package/examples/extensions/README.md +67 -0
  222. package/examples/extensions/lab-status/clio-coder-extension.json +14 -0
  223. package/examples/extensions/lab-status/extension.mjs +68 -0
  224. package/examples/extensions/lab-status/jobs.synthetic.json +9 -0
  225. package/examples/extensions/measurements/clio-coder-extension.json +28 -0
  226. package/examples/extensions/measurements/summarize.cjs +23 -0
  227. package/library/README.md +109 -0
  228. package/library/_authoring/templates/agent/README.md +28 -0
  229. package/library/_authoring/templates/agent/agents/benchmark-scout.md +30 -0
  230. package/library/_authoring/templates/agent/plugin.json +23 -0
  231. package/library/_authoring/templates/fleet/README.md +29 -0
  232. package/library/_authoring/templates/fleet/fleets/pipeline-review.md +31 -0
  233. package/library/_authoring/templates/fleet/plugin.json +23 -0
  234. package/library/_authoring/templates/plugin/README.md +37 -0
  235. package/library/_authoring/templates/plugin/agents/data-curator.md +31 -0
  236. package/library/_authoring/templates/plugin/assets/curation-guide.md +22 -0
  237. package/library/_authoring/templates/plugin/plugin.json +42 -0
  238. package/library/_authoring/templates/plugin/prompts/inspect-dataset.md +15 -0
  239. package/library/_authoring/templates/plugin/skills/dataset-curation/SKILL.md +36 -0
  240. package/library/_authoring/templates/plugin/skills/dataset-curation/evals.md +17 -0
  241. package/library/_authoring/templates/prompt/README.md +28 -0
  242. package/library/_authoring/templates/prompt/plugin.json +23 -0
  243. package/library/_authoring/templates/prompt/prompts/paper-summary.md +26 -0
  244. package/library/_authoring/templates/skill/README.md +24 -0
  245. package/library/_authoring/templates/skill/SKILL.md +39 -0
  246. package/library/_authoring/templates/skill/evals.md +30 -0
  247. package/library/_authoring/templates/skill/plugin.json +23 -0
  248. package/library/agents/README.md +7 -0
  249. package/library/fleets/README.md +7 -0
  250. package/library/plugins/materio/README.md +137 -0
  251. package/library/plugins/materio/ai.iowarp.clio/agents/materio-lab-definer.md +208 -0
  252. package/library/plugins/materio/ai.iowarp.clio/agents/materio-literature-reviewer.md +308 -0
  253. package/library/plugins/materio/ai.iowarp.clio/agents/materio-research-explorer.md +249 -0
  254. package/library/plugins/materio/ai.iowarp.clio/agents/materio-task-executor.md +416 -0
  255. package/library/plugins/materio/ai.iowarp.clio/agents/materio-task-verifier.md +60 -0
  256. package/library/plugins/materio/ai.iowarp.clio/agents/materio-workflow-planner.md +238 -0
  257. package/library/plugins/materio/ai.iowarp.clio/fleets/materio-execute-task.md +50 -0
  258. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/add-task.md +66 -0
  259. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/archive-task.md +65 -0
  260. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/checkpoint.md +26 -0
  261. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/define-research-tasks.md +230 -0
  262. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/define-virtual-lab.md +181 -0
  263. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/execute-task.md +292 -0
  264. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/help.md +129 -0
  265. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/identify-research.md +206 -0
  266. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/literature-review.md +201 -0
  267. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/pause-research.md +12 -0
  268. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/progress.md +105 -0
  269. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/remove-task.md +63 -0
  270. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/resume-research.md +64 -0
  271. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/settings.md +16 -0
  272. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/status.md +92 -0
  273. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/upload-data.md +104 -0
  274. package/library/plugins/materio/ai.iowarp.clio/prompts/materio/wtfp.md +145 -0
  275. package/library/plugins/materio/ai.iowarp.clio/references/execution.md +56 -0
  276. package/library/plugins/materio/ai.iowarp.portability/provenance.json +9 -0
  277. package/library/plugins/materio/assets/actions/add-task.md +86 -0
  278. package/library/plugins/materio/assets/actions/archive-task.md +84 -0
  279. package/library/plugins/materio/assets/actions/checkpoint.md +47 -0
  280. package/library/plugins/materio/assets/actions/define-research-tasks.md +228 -0
  281. package/library/plugins/materio/assets/actions/define-virtual-lab.md +179 -0
  282. package/library/plugins/materio/assets/actions/execute-task.md +290 -0
  283. package/library/plugins/materio/assets/actions/help.md +140 -0
  284. package/library/plugins/materio/assets/actions/identify-research.md +204 -0
  285. package/library/plugins/materio/assets/actions/literature-review.md +199 -0
  286. package/library/plugins/materio/assets/actions/pause-research.md +34 -0
  287. package/library/plugins/materio/assets/actions/progress.md +125 -0
  288. package/library/plugins/materio/assets/actions/remove-task.md +82 -0
  289. package/library/plugins/materio/assets/actions/resume-research.md +84 -0
  290. package/library/plugins/materio/assets/actions/settings.md +38 -0
  291. package/library/plugins/materio/assets/actions/status.md +112 -0
  292. package/library/plugins/materio/assets/actions/upload-data.md +123 -0
  293. package/library/plugins/materio/assets/actions/wtfp.md +179 -0
  294. package/library/plugins/materio/assets/references/research-domains.md +134 -0
  295. package/library/plugins/materio/assets/references/research-policy.md +77 -0
  296. package/library/plugins/materio/assets/references/traditional-workflows.md +146 -0
  297. package/library/plugins/materio/assets/scripts/check_physics.py +271 -0
  298. package/library/plugins/materio/assets/scripts/check_scripts.py +248 -0
  299. package/library/plugins/materio/assets/scripts/project_plugin.py +165 -0
  300. package/library/plugins/materio/assets/scripts/research_state.py +400 -0
  301. package/library/plugins/materio/assets/scripts/verify_citations.py +616 -0
  302. package/library/plugins/materio/assets/templates/RESEARCH.md +39 -0
  303. package/library/plugins/materio/assets/templates/VIRTUAL-LAB.md +120 -0
  304. package/library/plugins/materio/assets/templates/WORKFLOW.md +42 -0
  305. package/library/plugins/materio/assets/templates/config.json +5 -0
  306. package/library/plugins/materio/evals/scripts.yaml +29 -0
  307. package/library/plugins/materio/plugin.json +530 -0
  308. package/library/plugins/materio/skills/materio-lab-definer/SKILL.md +74 -0
  309. package/library/plugins/materio/skills/materio-literature-reviewer/SKILL.md +64 -0
  310. package/library/plugins/materio/skills/materio-research-explorer/SKILL.md +74 -0
  311. package/library/plugins/materio/skills/materio-task-executor/SKILL.md +214 -0
  312. package/library/plugins/materio/skills/materio-task-verifier/SKILL.md +46 -0
  313. package/library/plugins/materio/skills/materio-workflow-planner/SKILL.md +79 -0
  314. package/library/plugins/materio/tests/test_check_physics.py +139 -0
  315. package/library/plugins/materio/tests/test_check_scripts.py +140 -0
  316. package/library/plugins/materio/tests/test_research_state.py +291 -0
  317. package/library/plugins/materio/tests/test_verify_citations.py +337 -0
  318. package/library/prompts/README.md +7 -0
  319. package/library/registry.yaml +921 -0
  320. package/library/skills/README.md +120 -0
  321. package/{skills → library/skills}/coding/ast-grep/SKILL.md +1 -1
  322. package/{skills → library/skills}/coding/ast-grep/evals.md +1 -1
  323. package/library/skills/coding/ast-grep/plugin.json +23 -0
  324. package/{skills → library/skills}/coding/coding-standards/SKILL.md +1 -1
  325. package/{skills → library/skills}/coding/coding-standards/evals.md +1 -1
  326. package/library/skills/coding/coding-standards/plugin.json +23 -0
  327. package/{skills → library/skills}/coding/prototype/SKILL.md +1 -1
  328. package/{skills → library/skills}/coding/prototype/evals.md +1 -1
  329. package/library/skills/coding/prototype/plugin.json +23 -0
  330. package/{skills → library/skills}/coding/tdd/SKILL.md +1 -1
  331. package/{skills → library/skills}/coding/tdd/evals.md +1 -1
  332. package/library/skills/coding/tdd/plugin.json +23 -0
  333. package/{skills → library/skills}/context/context-handoff/SKILL.md +1 -1
  334. package/{skills → library/skills}/context/context-handoff/evals.md +1 -1
  335. package/library/skills/context/context-handoff/plugin.json +23 -0
  336. package/{skills → library/skills}/context/context-prime/SKILL.md +1 -1
  337. package/{skills → library/skills}/context/context-prime/evals.md +1 -1
  338. package/library/skills/context/context-prime/plugin.json +23 -0
  339. package/{skills → library/skills}/git/branch-closeout/SKILL.md +1 -1
  340. package/library/skills/git/branch-closeout/plugin.json +23 -0
  341. package/{skills → library/skills}/git/file-ticket/SKILL.md +1 -1
  342. package/library/skills/git/file-ticket/plugin.json +23 -0
  343. package/{skills → library/skills}/git/fix-issue/SKILL.md +1 -1
  344. package/library/skills/git/fix-issue/plugin.json +23 -0
  345. package/{skills → library/skills}/git/resolve-merge-conflicts/SKILL.md +1 -1
  346. package/{skills → library/skills}/git/resolve-merge-conflicts/evals.md +1 -1
  347. package/library/skills/git/resolve-merge-conflicts/plugin.json +23 -0
  348. package/{skills → library/skills}/git/ship/SKILL.md +1 -1
  349. package/library/skills/git/ship/plugin.json +23 -0
  350. package/{skills → library/skills}/git/worktree-create/SKILL.md +1 -1
  351. package/library/skills/git/worktree-create/plugin.json +23 -0
  352. package/{skills → library/skills}/git/worktree-merge/SKILL.md +1 -1
  353. package/library/skills/git/worktree-merge/plugin.json +23 -0
  354. package/{skills → library/skills}/meta/clio-coder-dev/SKILL.md +1 -1
  355. package/{skills → library/skills}/meta/clio-coder-dev/evals.md +1 -1
  356. package/library/skills/meta/clio-coder-dev/plugin.json +23 -0
  357. package/{skills → library/skills}/meta/clio-coder-test/SKILL.md +1 -1
  358. package/{skills → library/skills}/meta/clio-coder-test/evals.md +1 -1
  359. package/library/skills/meta/clio-coder-test/plugin.json +23 -0
  360. package/{skills → library/skills}/meta/credentials/SKILL.md +1 -1
  361. package/{skills → library/skills}/meta/credentials/evals.md +1 -1
  362. package/library/skills/meta/credentials/plugin.json +23 -0
  363. package/library/skills/meta/find-skills/SKILL.md +85 -0
  364. package/library/skills/meta/find-skills/evals.md +65 -0
  365. package/library/skills/meta/find-skills/plugin.json +23 -0
  366. package/{skills → library/skills}/meta/herdr/SKILL.md +1 -1
  367. package/{skills → library/skills}/meta/herdr/evals.md +1 -1
  368. package/library/skills/meta/herdr/plugin.json +23 -0
  369. package/{skills → library/skills}/meta/skill-craft/SKILL.md +23 -9
  370. package/{skills → library/skills}/meta/skill-craft/evals.md +11 -3
  371. package/library/skills/meta/skill-craft/plugin.json +23 -0
  372. package/{skills → library/skills}/planning/archify/SKILL.md +13 -13
  373. package/library/skills/planning/archify/plugin.json +23 -0
  374. package/{skills → library/skills}/planning/architecture/SKILL.md +1 -1
  375. package/{skills → library/skills}/planning/architecture/evals.md +1 -1
  376. package/library/skills/planning/architecture/plugin.json +23 -0
  377. package/{skills → library/skills}/planning/backlog/SKILL.md +1 -1
  378. package/{skills → library/skills}/planning/backlog/evals.md +1 -1
  379. package/library/skills/planning/backlog/plugin.json +23 -0
  380. package/{skills → library/skills}/planning/prd/SKILL.md +1 -1
  381. package/{skills → library/skills}/planning/prd/evals.md +1 -1
  382. package/library/skills/planning/prd/plugin.json +23 -0
  383. package/{skills → library/skills}/planning/product-intent/SKILL.md +1 -1
  384. package/{skills → library/skills}/planning/product-intent/evals.md +1 -1
  385. package/library/skills/planning/product-intent/plugin.json +23 -0
  386. package/{skills → library/skills}/planning/tech-spec/SKILL.md +1 -1
  387. package/{skills → library/skills}/planning/tech-spec/evals.md +1 -1
  388. package/library/skills/planning/tech-spec/plugin.json +23 -0
  389. package/{skills → library/skills}/registry.yaml +7 -7
  390. package/{skills → library/skills}/remote.yaml +1 -1
  391. package/{skills → library/skills}/research/arxiv-literature/SKILL.md +1 -1
  392. package/{skills → library/skills}/research/arxiv-literature/evals.md +1 -1
  393. package/library/skills/research/arxiv-literature/plugin.json +23 -0
  394. package/{skills → library/skills}/research/experiment-protocol/SKILL.md +1 -1
  395. package/{skills → library/skills}/research/experiment-protocol/evals.md +1 -1
  396. package/library/skills/research/experiment-protocol/plugin.json +23 -0
  397. package/{skills → library/skills}/research/scientific-debugging/SKILL.md +1 -1
  398. package/{skills → library/skills}/research/scientific-debugging/evals.md +1 -1
  399. package/library/skills/research/scientific-debugging/plugin.json +23 -0
  400. package/{skills → library/skills}/research/scientific-modernization/SKILL.md +1 -1
  401. package/{skills → library/skills}/research/scientific-modernization/evals.md +1 -1
  402. package/library/skills/research/scientific-modernization/plugin.json +23 -0
  403. package/{skills → library/skills}/skill-marketplace.json +37 -37
  404. package/{skills → library/skills}/workflow/cut-it/SKILL.md +1 -1
  405. package/{skills → library/skills}/workflow/cut-it/evals.md +1 -1
  406. package/library/skills/workflow/cut-it/plugin.json +23 -0
  407. package/{skills → library/skills}/workflow/design-council/SKILL.md +1 -1
  408. package/{skills → library/skills}/workflow/design-council/evals.md +1 -1
  409. package/library/skills/workflow/design-council/plugin.json +23 -0
  410. package/{skills → library/skills}/workflow/grill-me/SKILL.md +1 -1
  411. package/{skills → library/skills}/workflow/grill-me/evals.md +1 -1
  412. package/library/skills/workflow/grill-me/plugin.json +23 -0
  413. package/{skills → library/skills}/workflow/workflow-distiller/SKILL.md +14 -11
  414. package/{skills → library/skills}/workflow/workflow-distiller/evals.md +14 -6
  415. package/library/skills/workflow/workflow-distiller/plugin.json +23 -0
  416. package/package.json +12 -5
  417. package/src/cli/agents.ts +1 -1
  418. package/src/cli/config-inspect.ts +1 -1
  419. package/src/cli/configure.ts +2 -2
  420. package/src/cli/eval.ts +40 -6
  421. package/src/cli/extensions.ts +74 -8
  422. package/src/cli/fleet-preflight.ts +2 -0
  423. package/src/cli/fleet.ts +2 -0
  424. package/src/cli/index.ts +1 -3
  425. package/src/cli/interop-inspect.ts +61 -33
  426. package/src/cli/interop.ts +79 -9
  427. package/src/cli/library-import.ts +139 -0
  428. package/src/cli/library.ts +418 -120
  429. package/src/cli/run.ts +26 -9
  430. package/src/cli/skills-eval.ts +43 -6
  431. package/src/cli/skills-inventory.ts +6 -2
  432. package/src/cli/skills.ts +44 -491
  433. package/src/core/bus-events.ts +5 -0
  434. package/src/core/defaults.ts +1 -1
  435. package/src/core/recent-models.ts +2 -2
  436. package/src/core/session-routing.ts +3 -3
  437. package/src/core/state-file-lock.ts +1 -1
  438. package/src/core/tool-names.ts +5 -0
  439. package/src/domains/agents/extension.ts +42 -6
  440. package/src/domains/agents/fleet-commands.ts +92 -1
  441. package/src/domains/agents/fleet-contract.ts +87 -19
  442. package/src/domains/agents/recipe.ts +5 -4
  443. package/src/domains/agents/registry.ts +80 -24
  444. package/src/domains/config/keybindings.ts +155 -95
  445. package/src/domains/context/worker/contract.ts +91 -0
  446. package/src/domains/context/worker/pressure.ts +120 -0
  447. package/src/domains/context/worker/recall.ts +62 -0
  448. package/src/domains/context/worker/select.ts +164 -0
  449. package/src/domains/context/worker/snapshot.ts +35 -0
  450. package/src/domains/context/worker/store.ts +16 -0
  451. package/src/domains/context/working-set/replay/synthetic.ts +2 -1
  452. package/src/domains/dispatch/active-route-planner.ts +2 -0
  453. package/src/domains/dispatch/backoff.ts +1 -0
  454. package/src/domains/dispatch/code-step.ts +12 -2
  455. package/src/domains/dispatch/contract.ts +3 -0
  456. package/src/domains/dispatch/execution-plan.ts +2 -0
  457. package/src/domains/dispatch/extension.ts +109 -27
  458. package/src/domains/dispatch/fleet-plan.ts +10 -0
  459. package/src/domains/dispatch/fleet-run.ts +1 -0
  460. package/src/domains/dispatch/orphan-recovery.ts +1 -0
  461. package/src/domains/dispatch/receipt-integrity.ts +4 -0
  462. package/src/domains/dispatch/state.ts +1 -0
  463. package/src/domains/dispatch/types.ts +5 -0
  464. package/src/domains/dispatch/validation.ts +12 -0
  465. package/src/domains/dispatch/workspace-checkpoint.ts +1 -1
  466. package/src/domains/evidence/failure-attribution.ts +1 -0
  467. package/src/domains/evidence/trust-status.ts +22 -3
  468. package/src/domains/extensions/command-schema.ts +145 -0
  469. package/src/domains/extensions/command-tools.ts +15 -0
  470. package/src/domains/extensions/compatibility.ts +7 -0
  471. package/src/domains/extensions/contract.ts +0 -4
  472. package/src/domains/extensions/discovery.ts +69 -205
  473. package/src/domains/extensions/extension.ts +0 -4
  474. package/src/domains/extensions/index.ts +1 -5
  475. package/src/domains/extensions/manager.ts +1 -6
  476. package/src/domains/extensions/operator-commands.ts +29 -0
  477. package/src/domains/extensions/operator-runtime.ts +483 -0
  478. package/src/domains/extensions/public-api.ts +53 -0
  479. package/src/domains/extensions/runtime-child.mjs +114 -0
  480. package/src/domains/extensions/runtime-process.ts +306 -0
  481. package/src/domains/extensions/runtime-schema.ts +146 -0
  482. package/src/domains/extensions/{resources.ts → snapshot-access.ts} +1 -17
  483. package/src/domains/extensions/snapshot.ts +4 -32
  484. package/src/domains/extensions/state.ts +5 -83
  485. package/src/domains/extensions/types.ts +33 -34
  486. package/src/domains/interop/adopt.ts +546 -0
  487. package/src/domains/interop/detect.ts +50 -12
  488. package/src/domains/interop/foreign.ts +554 -0
  489. package/src/domains/interop/import.ts +277 -0
  490. package/src/domains/interop/index.ts +24 -0
  491. package/src/domains/interop/install.ts +6 -0
  492. package/src/domains/interop/inventory.ts +351 -0
  493. package/src/domains/interop/projection.ts +360 -0
  494. package/src/domains/interop/registry.ts +106 -3
  495. package/src/domains/interop/types.ts +51 -0
  496. package/src/domains/lifecycle/migrations/index.ts +0 -2
  497. package/src/domains/lifecycle/naming-resources.ts +1 -1
  498. package/src/domains/middleware/marketplace-offer.ts +1 -1
  499. package/src/domains/mux/contract.ts +1 -1
  500. package/src/domains/plugins/catalog.ts +204 -0
  501. package/src/domains/plugins/contract.ts +24 -0
  502. package/src/domains/plugins/discovery.ts +316 -0
  503. package/src/domains/plugins/extension.ts +40 -0
  504. package/src/domains/plugins/index.ts +77 -0
  505. package/src/domains/plugins/integrity.ts +6 -0
  506. package/src/domains/plugins/manifest.ts +3 -0
  507. package/src/domains/plugins/resources.ts +102 -0
  508. package/src/domains/plugins/state.ts +753 -0
  509. package/src/domains/plugins/types.ts +217 -0
  510. package/src/domains/prompts/extension.ts +9 -2
  511. package/src/domains/prompts/fragments/operating/skills.md +10 -10
  512. package/src/domains/resources/common-loader.ts +9 -6
  513. package/src/domains/resources/index.ts +67 -0
  514. package/src/domains/resources/library-actions.ts +836 -0
  515. package/src/domains/resources/library-evals.ts +38 -0
  516. package/src/domains/resources/library-inventory.ts +1048 -0
  517. package/src/domains/resources/library-types.ts +50 -0
  518. package/src/domains/resources/library-validation.ts +634 -0
  519. package/src/domains/resources/library.ts +437 -156
  520. package/src/domains/resources/package-references.ts +66 -0
  521. package/src/domains/resources/prompts/loader.ts +75 -41
  522. package/src/domains/resources/skills/install.ts +2 -2
  523. package/src/domains/resources/skills/loader.ts +77 -22
  524. package/src/domains/resources/skills/marketplace.ts +48 -57
  525. package/src/domains/resources/skills/promotion.ts +2 -2
  526. package/src/domains/resources/skills/provenance-pin.ts +17 -4
  527. package/src/domains/safety/action-classifier.ts +2 -2
  528. package/src/domains/safety/default-path-policy.ts +3 -1
  529. package/src/domains/safety/policy-engine.ts +1 -1
  530. package/src/domains/safety/protected-artifacts.ts +21 -5
  531. package/src/domains/safety/skill-authority.ts +5 -2
  532. package/src/domains/share/archive.ts +1 -1
  533. package/src/engine/apis/openai-completions.ts +52 -2
  534. package/src/engine/notices/pi-tui-LICENSE +21 -0
  535. package/src/engine/tui.ts +3 -0
  536. package/src/engine/worker-runtime.ts +58 -14
  537. package/src/engine/worker-tools.ts +5 -0
  538. package/src/entry/orchestrator.ts +26 -5
  539. package/src/entry/plugin-reload.ts +18 -0
  540. package/src/interactive/application-controller.ts +67 -21
  541. package/src/interactive/chat-loop.ts +32 -5
  542. package/src/interactive/chat-panel.ts +5 -1
  543. package/src/interactive/clio-editor.ts +53 -21
  544. package/src/interactive/command-output.ts +56 -1
  545. package/src/interactive/editor-submit.ts +65 -28
  546. package/src/interactive/fleet-run-preview.ts +2 -0
  547. package/src/interactive/follow-up-queue-panel.ts +3 -3
  548. package/src/interactive/footer/dashboard.ts +4 -1
  549. package/src/interactive/footer/notifications.ts +2 -2
  550. package/src/interactive/footer/widgets.ts +2 -2
  551. package/src/interactive/interactive-application.ts +209 -21
  552. package/src/interactive/interactive-input-runtime.ts +254 -7
  553. package/src/interactive/interactive-presentation.ts +41 -12
  554. package/src/interactive/interactive-slash-runtime.ts +37 -8
  555. package/src/interactive/keybinding-manager.ts +156 -79
  556. package/src/interactive/keyboard-owner.ts +37 -0
  557. package/src/interactive/leader-key.ts +49 -102
  558. package/src/interactive/leader-menu.ts +45 -0
  559. package/src/interactive/overlay-ask-user-lifecycle.ts +9 -1
  560. package/src/interactive/overlay-frame.ts +15 -0
  561. package/src/interactive/overlay-key-routing.ts +46 -47
  562. package/src/interactive/overlay-lifecycle.ts +30 -15
  563. package/src/interactive/overlay-resource-openers.ts +56 -46
  564. package/src/interactive/overlays/ask-user.ts +630 -556
  565. package/src/interactive/overlays/extension-panel.ts +70 -0
  566. package/src/interactive/overlays/extensions.ts +28 -5
  567. package/src/interactive/overlays/fleet-run-approval.ts +7 -3
  568. package/src/interactive/overlays/help-reference.ts +89 -40
  569. package/src/interactive/overlays/interop.ts +122 -3
  570. package/src/interactive/overlays/keybinding-detail.ts +2 -2
  571. package/src/interactive/overlays/library-lifecycle.ts +90 -0
  572. package/src/interactive/overlays/library-model.ts +574 -0
  573. package/src/interactive/overlays/library-review.ts +557 -0
  574. package/src/interactive/overlays/library-tabs.ts +3 -15
  575. package/src/interactive/overlays/library.ts +602 -0
  576. package/src/interactive/overlays/list-overlay.ts +218 -39
  577. package/src/interactive/overlays/model-selector.ts +28 -25
  578. package/src/interactive/overlays/session-selector.ts +9 -3
  579. package/src/interactive/overlays/settings.ts +25 -18
  580. package/src/interactive/overlays/tree-selector.ts +16 -11
  581. package/src/interactive/permission-hint.ts +13 -0
  582. package/src/interactive/permission-overlay.ts +77 -28
  583. package/src/interactive/prompt-source-label.ts +21 -0
  584. package/src/interactive/renderers/reference-card.ts +35 -0
  585. package/src/interactive/renderers/worker-entry.ts +35 -3
  586. package/src/interactive/slash-autocomplete.ts +99 -1
  587. package/src/interactive/slash-commands.ts +390 -67
  588. package/src/interactive/slash-spec.ts +0 -1
  589. package/src/interactive/terminal-lease.ts +44 -12
  590. package/src/interactive/turn-queues.ts +8 -7
  591. package/src/interactive/turn-runtime.ts +1 -1
  592. package/src/interactive/view/view-overlay.ts +19 -14
  593. package/src/interactive/welcome-dashboard.ts +525 -408
  594. package/src/tools/bootstrap.ts +8 -0
  595. package/src/tools/builtin-tool-catalog.ts +7 -2
  596. package/src/tools/context/index.ts +58 -5
  597. package/src/tools/context/library.ts +465 -0
  598. package/src/tools/context/surface.ts +20 -6
  599. package/src/tools/core-bootstrap.ts +3 -0
  600. package/src/tools/dispatch-admission.ts +24 -1
  601. package/src/tools/dispatch-arguments.ts +8 -0
  602. package/src/tools/dispatch-plan.ts +32 -0
  603. package/src/tools/dispatch-schema.ts +31 -1
  604. package/src/tools/dispatch-types.ts +3 -0
  605. package/src/tools/dispatch.ts +1 -1
  606. package/src/tools/harness-extensions.ts +169 -0
  607. package/src/tools/observation.ts +4 -0
  608. package/src/tools/policy.ts +7 -1
  609. package/src/tools/registry.ts +19 -1
  610. package/src/tools/worker-evidence.ts +5 -0
  611. package/src/worker/context-seed.ts +192 -0
  612. package/src/worker/entry.ts +1 -0
  613. package/src/worker/spec-contract.ts +8 -1
  614. package/dist/chunk-3UW3KU4A.js +0 -21
  615. package/dist/chunk-536HXRFE.js +0 -1257
  616. package/dist/chunk-B3MOMLJ4.js +0 -433
  617. package/dist/chunk-CXQ37WJH.js +0 -45
  618. package/dist/chunk-KTFSFCVN.js +0 -46
  619. package/dist/chunk-QCOV5DFY.js +0 -911
  620. package/dist/chunk-QRFXEO6Y.js +0 -17
  621. package/dist/chunk-VAHLPXPY.js +0 -399
  622. package/dist/interop-RVCAYECG.js +0 -115
  623. package/dist/library-CTKZA7K3.js +0 -226
  624. package/dist/skills-OXFEAWMT.js +0 -510
  625. package/skills/README.md +0 -418
  626. package/skills/meta/find-skills/SKILL.md +0 -78
  627. package/skills/meta/find-skills/evals.md +0 -47
  628. package/src/domains/extensions/resource-path.ts +0 -27
  629. package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +0 -27
  630. package/src/interactive/overlays/agents.ts +0 -70
  631. package/src/interactive/overlays/library-install-confirm.ts +0 -152
  632. package/src/interactive/overlays/prompts.ts +0 -89
  633. package/src/interactive/overlays/skills-hub.ts +0 -615
  634. /package/{skills → library/skills}/coding/ast-grep/references/rule_reference.md +0 -0
  635. /package/{skills → library/skills}/coding/prototype/references/LOGIC.md +0 -0
  636. /package/{skills → library/skills}/coding/prototype/references/UI.md +0 -0
  637. /package/{skills → library/skills}/coding/tdd/references/mocking.md +0 -0
  638. /package/{skills → library/skills}/coding/tdd/references/tests.md +0 -0
  639. /package/{skills → library/skills}/context/context-handoff/scripts/new-handoff.sh +0 -0
  640. /package/{skills → library/skills}/git/branch-closeout/evals.md +0 -0
  641. /package/{skills → library/skills}/git/branch-closeout/references/closeout-checklist.md +0 -0
  642. /package/{skills → library/skills}/git/file-ticket/assets/issue-template.md +0 -0
  643. /package/{skills → library/skills}/git/file-ticket/evals.md +0 -0
  644. /package/{skills → library/skills}/git/file-ticket/references/issue-discovery.md +0 -0
  645. /package/{skills → library/skills}/git/fix-issue/evals.md +0 -0
  646. /package/{skills → library/skills}/git/fix-issue/references/diagnosis-and-rca.md +0 -0
  647. /package/{skills → library/skills}/git/resolve-merge-conflicts/references/conflict-matrix.md +0 -0
  648. /package/{skills → library/skills}/git/ship/assets/pr-template.md +0 -0
  649. /package/{skills → library/skills}/git/ship/evals.md +0 -0
  650. /package/{skills → library/skills}/git/ship/references/remote-and-branch-policy.md +0 -0
  651. /package/{skills → library/skills}/git/worktree-create/evals.md +0 -0
  652. /package/{skills → library/skills}/git/worktree-create/references/worktree-setup.md +0 -0
  653. /package/{skills → library/skills}/git/worktree-merge/evals.md +0 -0
  654. /package/{skills → library/skills}/git/worktree-merge/references/merge-strategies.md +0 -0
  655. /package/{skills → library/skills}/meta/clio-coder-test/references/harness.md +0 -0
  656. /package/{skills → library/skills}/meta/clio-coder-test/references/test-map.md +0 -0
  657. /package/{skills → library/skills}/planning/archify/evals.md +0 -0
@@ -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
  /**
@@ -30,6 +30,7 @@ export interface ClioAppKeybindings {
30
30
  "clio-coder.decisions.open": true;
31
31
  "clio-coder.dispatch.background": true;
32
32
  "clio-coder.model.select": true;
33
+ "clio-coder.library.toggle": true;
33
34
  "clio-coder.model.cycleForward": true;
34
35
  "clio-coder.model.cycleBackward": true;
35
36
  "clio-coder.editor.external": true;
@@ -52,129 +53,188 @@ declare module "@earendil-works/pi-tui" {
52
53
  interface Keybindings extends ClioAppKeybindings {}
53
54
  }
54
55
 
55
- /**
56
- * Built-in defaults. Users override via `settings.yaml.keybindings`; the
57
- * manager reads those and patches this table before the TUI starts.
58
- *
59
- * Clio's app bindings follow one scheme: `Alt + <key>` (with `shift+tab`,
60
- * `ctrl+d`, and the portable `ctrl+g` leader retained because every terminal
61
- * already transmits them). `Alt + <letter>` decodes from the legacy
62
- * `ESC <letter>` sequence on meta-capable terminals. The chosen letters avoid
63
- * pi-tui's editor reserves except for the approved `Alt+B` and `Alt+D`
64
- * application-boundary overrides. They open the task and decision boards
65
- * before the editor can interpret those chords as word-back or word-delete.
66
- * The CSI-u/reserved-key detector in `keybinding-manager.ts` stays as a safety
67
- * net for user rebinds.
68
- */
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
+ }
69
65
  export const CLIO_APP_KEYBINDINGS = {
70
- "clio-coder.thinking.cycle": {
71
- defaultKeys: "shift+tab",
72
- 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",
73
73
  },
74
- "clio-coder.exit": {
75
- defaultKeys: "ctrl+d",
76
- 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",
77
89
  },
78
90
  "clio-coder.status.toggle": {
79
91
  defaultKeys: "alt+u",
80
- description: "Toggle the footer dashboard (compact / expanded)",
81
- },
82
- "clio-coder.session.tree": {
83
- defaultKeys: "alt+t",
84
- description: "Open the /tree navigator",
92
+ description: "Dashboard",
93
+ scope: "composer",
94
+ kind: "toggle",
95
+ repeat: false,
96
+ leader: "u",
85
97
  },
86
98
  "clio-coder.dispatchBoard.toggle": {
87
99
  defaultKeys: "alt+w",
88
- description: "Toggle the dispatch (workers) board overlay",
100
+ description: "Workers",
101
+ scope: "composer",
102
+ kind: "toggle",
103
+ repeat: false,
104
+ leader: "w",
89
105
  },
90
106
  "clio-coder.files.toggle": {
91
- // Alt+F is a pi-tui editor reserve (word-forward), so the files pane
92
- // takes the next letter that reads as "explorer" and stays inside the
93
- // Alt+<letter> scheme, which also earns it the Ctrl+G leader fallback.
94
107
  defaultKeys: "alt+e",
95
- 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,
96
151
  },
97
152
  "clio-coder.tasks.open": {
98
- // Approved application-boundary override of pi-tui editor word-back.
99
- defaultKeys: "alt+b",
100
- description: "Open the composite session and operator task board",
153
+ defaultKeys: [],
154
+ description: "Tasks (/tasks)",
155
+ scope: "composer",
156
+ kind: "toggle",
157
+ repeat: false,
101
158
  },
102
159
  "clio-coder.decisions.open": {
103
- // Approved application-boundary override of pi-tui editor word-delete.
104
- defaultKeys: "alt+d",
105
- description: "Open the settled interview decision board",
106
- },
107
- "clio-coder.dispatch.background": {
108
- // Ctrl+B alone is pi-tui's editor cursor-left, so the Claude Code chord
109
- // cannot be the primary here. Alt+S ("send to background") keeps the app
110
- // scheme and earns the Ctrl+G leader fallback, which only alt+<letter>
111
- // bindings get; Ctrl+Alt+B stays for the b-for-background muscle memory.
112
- defaultKeys: ["alt+s", "ctrl+alt+b"],
113
- 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,
114
165
  },
115
- "clio-coder.model.select": {
116
- defaultKeys: "alt+l",
117
- 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,
118
172
  },
119
173
  "clio-coder.model.cycleForward": {
120
- defaultKeys: "alt+j",
121
- description: "Cycle to next scoped model",
174
+ defaultKeys: [],
175
+ description: "Next scoped model",
176
+ scope: "composer",
177
+ kind: "cycle",
178
+ repeat: false,
122
179
  },
123
180
  "clio-coder.model.cycleBackward": {
124
- defaultKeys: "alt+k",
125
- description: "Cycle to previous scoped model",
181
+ defaultKeys: [],
182
+ description: "Previous scoped model",
183
+ scope: "composer",
184
+ kind: "cycle",
185
+ repeat: false,
126
186
  },
127
- "clio-coder.output.cycle": {
128
- defaultKeys: "alt+o",
129
- description: "Cycle output style: Compact, Standard, Detailed",
130
- },
131
- "clio-coder.editor.external": {
132
- defaultKeys: "alt+g",
133
- description: "Open the current input in an external editor",
134
- },
135
- "clio-coder.message.followUp": {
136
- defaultKeys: "alt+enter",
137
- description:
138
- "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",
139
194
  },
140
195
  "clio-coder.message.interrupt": {
141
- // Alt+I keeps the app scheme and earns the Ctrl+G leader fallback. A
142
- // Ctrl+Enter chord was rejected because legacy terminals send it as a
143
- // plain Enter, which would turn every send into a cancel.
144
- defaultKeys: "alt+i",
145
- description:
146
- "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",
147
202
  },
148
- "clio-coder.message.dequeue": {
149
- defaultKeys: "alt+up",
150
- 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",
151
210
  },
152
211
  "clio-coder.notifications.dismiss": {
153
- defaultKeys: "alt+x",
154
- description: "Dismiss footer notifications",
155
- },
156
- "clio-coder.leader": {
157
- defaultKeys: "ctrl+g",
158
- description: "Start portable leader-key fallback for Alt shortcuts",
159
- },
160
- } 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>;
161
220
 
162
- /**
163
- * Full definition table = pi-tui editor/select defaults + Clio app ids.
164
- * pi-tui 0.84 supplies dedicated prompt-history actions but leaves them
165
- * unbound for applications to place. Clio uses the readline-style Ctrl+P and
166
- * Ctrl+N pair because its model cycling already lives on Alt+J and Alt+K.
167
- */
168
221
  export const CLIO_KEYBINDINGS = {
169
222
  ...TUI_KEYBINDINGS,
170
- "tui.editor.historyPrevious": {
171
- ...TUI_KEYBINDINGS["tui.editor.historyPrevious"],
172
- defaultKeys: "ctrl+p",
173
- },
174
- "tui.editor.historyNext": {
175
- ...TUI_KEYBINDINGS["tui.editor.historyNext"],
176
- defaultKeys: "ctrl+n",
177
- },
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" },
178
238
  ...CLIO_APP_KEYBINDINGS,
179
239
  } as const satisfies KeybindingDefinitions;
180
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
+ }
@@ -0,0 +1,120 @@
1
+ import type { AgentMessage } from "../../../engine/types.js";
2
+ import { estimateAgentContextBreakdown, estimateAgentMessageTokens } from "../../session/context-accounting.js";
3
+ import { contextHash, messageToolCalls } from "./snapshot.js";
4
+
5
+ interface WorkerPressureInput {
6
+ messages: ReadonlyArray<AgentMessage>;
7
+ systemPrompt: string;
8
+ tools: ReadonlyArray<unknown>;
9
+ contextWindow: number;
10
+ outputReserve: number;
11
+ threshold?: number;
12
+ autoEvict?: boolean;
13
+ }
14
+
15
+ export class WorkerContextExhaustedError extends Error {}
16
+
17
+ /** Per-worker reversible projection. Stable markers never rewrite its raw history. */
18
+ export function createWorkerContextGuard(archive: (ref: string, message: AgentMessage) => string) {
19
+ const evicted = new Map<string, AgentMessage>();
20
+ let calls = 0;
21
+ let firstInputLength = 0;
22
+ let lastRequestTokens = 0;
23
+ let anchorKey = "";
24
+ let anchorUsage = 0;
25
+ let anchorFootprint = 0;
26
+ return (input: WorkerPressureInput): AgentMessage[] => {
27
+ const ceiling = Math.min(
28
+ Math.floor(input.contextWindow * (input.threshold ?? 0.8)),
29
+ input.contextWindow - input.outputReserve,
30
+ );
31
+ const key = (message: AgentMessage) => contextHash(message);
32
+ const messages = input.messages.map((message) => evicted.get(key(message)) ?? message);
33
+
34
+ const breakdown = estimateAgentContextBreakdown({ systemPrompt: input.systemPrompt, tools: input.tools, messages });
35
+ let structural = Object.values(breakdown).reduce((sum, value) => sum + value, 0);
36
+
37
+ // Parent usage never anchors a child. Only a response to this worker's own request can do so.
38
+ if (calls === 0) firstInputLength = input.messages.length;
39
+ else {
40
+ for (let index = messages.length - 1; index >= firstInputLength; index--) {
41
+ const message = messages[index];
42
+ if (
43
+ message?.role !== "assistant" ||
44
+ !message.usage ||
45
+ message.stopReason === "error" ||
46
+ message.stopReason === "aborted"
47
+ )
48
+ continue;
49
+ const usage = message.usage;
50
+ const actual = usage.input + usage.output + usage.cacheRead + usage.cacheWrite;
51
+ const nextKey = key(message);
52
+ if (nextKey !== anchorKey) {
53
+ anchorKey = nextKey;
54
+ anchorUsage = Number.isFinite(actual) && actual > 0 ? actual : 0;
55
+ // Usage describes the previous projected request plus this answer.
56
+ // Keep that footprint stable across repeated projection of the same answer.
57
+ anchorFootprint = lastRequestTokens + estimateAgentMessageTokens(message);
58
+ }
59
+ break;
60
+ }
61
+ }
62
+ const count = () => Math.max(structural, anchorUsage > 0 ? anchorUsage + structural - anchorFootprint : 0);
63
+ const accepted = () => {
64
+ calls++;
65
+ lastRequestTokens = structural;
66
+ return messages;
67
+ };
68
+ const replace = (index: number, original: AgentMessage, projected: AgentMessage) => {
69
+ const saved = estimateAgentMessageTokens(original) - estimateAgentMessageTokens(projected);
70
+ if (saved <= 0) return;
71
+ evicted.set(key(original), projected);
72
+ messages[index] = projected;
73
+ structural -= saved;
74
+ };
75
+
76
+ if (count() <= ceiling) return accepted();
77
+ // The first request must honor the selected fork; never auto-trim it into a splice.
78
+ if (calls === 0)
79
+ throw new WorkerContextExhaustedError(
80
+ "worker context: initial request leaves insufficient context headroom; use a smaller splice",
81
+ );
82
+ if (input.autoEvict === false)
83
+ throw new WorkerContextExhaustedError("worker context: context budget exhausted with automatic eviction disabled");
84
+ const assistantIndices = input.messages.flatMap((message, index) => (message.role === "assistant" ? [index] : []));
85
+ const cutoff = assistantIndices[Math.max(0, assistantIndices.length - 2)] ?? 0;
86
+ const toolCalls = new Map(input.messages.flatMap(messageToolCalls).map((call) => [call.id, call]));
87
+ for (let index = 0; index < cutoff && count() > ceiling; index++) {
88
+ const message = input.messages[index];
89
+ if (!message || evicted.has(key(message))) continue;
90
+ if (message.role === "assistant") {
91
+ const content = message.content.filter((block) => block.type !== "thinking");
92
+ if (content.length === 0 || content.length === message.content.length) continue;
93
+ const projected = { ...message, content };
94
+ replace(index, message, projected);
95
+ } else if (message.role === "toolResult" && !message.isError) {
96
+ const name = toolCalls.get(message.toolCallId)?.name;
97
+ // Only observations with known read semantics. Preserve mutations and opaque tools.
98
+ if (!name || !["read", "grep", "find", "ls", "code_nav", "web_fetch"].includes(name)) continue;
99
+ if (JSON.stringify(message.content).length < 1000) continue;
100
+ const ref = key(message);
101
+ const file = archive(ref, structuredClone(message));
102
+ const projected = {
103
+ ...message,
104
+ content: [
105
+ {
106
+ type: "text" as const,
107
+ text: `[Worker context observation worker:${ref} evicted. Recover with context(scope="recall", ref="worker:${ref}"). Exact historical result: ${file}. Read that file if needed; reread the source for current contents.]`,
108
+ },
109
+ ],
110
+ };
111
+ replace(index, message, projected);
112
+ }
113
+ }
114
+ if (count() > ceiling)
115
+ throw new WorkerContextExhaustedError(
116
+ "worker context: protected task context exceeds available headroom after reversible eviction",
117
+ );
118
+ return accepted();
119
+ };
120
+ }
@@ -0,0 +1,62 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ import { safeResourceWrite } from "../../../core/safe-resource-write.js";
4
+ import { clioStateDir } from "../../../core/xdg.js";
5
+ import type { AgentMessage } from "../../../engine/types.js";
6
+ import { contextHash } from "./snapshot.js";
7
+
8
+ export type WorkerRecallResult =
9
+ | { error: string }
10
+ | { body: string; total: number; shown: number; nextOffset?: number };
11
+ export type WorkerRecall = (args: Record<string, unknown>) => WorkerRecallResult;
12
+
13
+ /** The in-memory allowlist is the capability. A ref never grants arbitrary file or parent-ledger access. */
14
+ export function createWorkerObservationStore(): {
15
+ archive(ref: string, message: AgentMessage): string;
16
+ recall: WorkerRecall;
17
+ } {
18
+ const records = new Map<string, { file: string; label: string }>();
19
+ return {
20
+ archive(ref, message) {
21
+ if (contextHash(message) !== ref) throw new Error("worker context: observation digest mismatch");
22
+ const file = join(clioStateDir(), "context-observations", `${ref}.json`);
23
+ safeResourceWrite(file, `${JSON.stringify(message)}\n`, { mode: 0o600 });
24
+ records.set(`worker:${ref}`, { file, label: message.role === "toolResult" ? message.toolName : message.role });
25
+ return file;
26
+ },
27
+ recall(args) {
28
+ if (args.ref !== undefined) {
29
+ const ref = typeof args.ref === "string" ? args.ref.trim() : "";
30
+ const record = records.get(ref);
31
+ if (!record) return { error: "ref is not an evicted observation from this worker run" };
32
+ try {
33
+ const body = readFileSync(record.file, "utf8");
34
+ if (`worker:${contextHash(JSON.parse(body))}` !== ref) return { error: "observation digest mismatch" };
35
+ return { body: `Historical observation ${ref}; this is not a new source read.\n${body}`, total: 1, shown: 1 };
36
+ } catch {
37
+ return { error: "persisted worker observation is unavailable or malformed" };
38
+ }
39
+ }
40
+ const query = typeof args.query === "string" ? args.query.trim().toLowerCase() : "";
41
+ const limit =
42
+ typeof args.limit === "number" && Number.isSafeInteger(args.limit) ? Math.max(1, Math.min(12, args.limit)) : 8;
43
+ const offset = typeof args.offset === "number" && Number.isSafeInteger(args.offset) ? Math.max(0, args.offset) : 0;
44
+ const matches = [...records]
45
+ .map(([ref, item]) => `${ref} ${item.label}`)
46
+ .filter((line) => line.toLowerCase().includes(query));
47
+ const page = matches.slice(offset, offset + limit);
48
+ const nextOffset = offset + page.length < matches.length ? offset + page.length : undefined;
49
+ return {
50
+ body: [
51
+ ...page,
52
+ nextOffset === undefined
53
+ ? "End of this worker's evicted observations."
54
+ : `More observations: offset=${nextOffset}.`,
55
+ ].join("\n"),
56
+ total: matches.length,
57
+ shown: page.length,
58
+ ...(nextOffset === undefined ? {} : { nextOffset }),
59
+ };
60
+ },
61
+ };
62
+ }