@iowarp/clio-coder 0.3.8 → 0.4.0

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 (552) hide show
  1. package/CHANGELOG.md +102 -0
  2. package/NOTICE +33 -0
  3. package/README.md +12 -3
  4. package/dist/{acp-U67UHUK2.js → acp-G5WJBNCT.js} +13 -12
  5. package/dist/{agents-YU6SGALZ.js → agents-FMV2Q5G4.js} +41 -36
  6. package/dist/assets/codewiki.json +1 -1
  7. package/dist/{auth-5ZPJOIVG.js → auth-3IDSJEIK.js} +18 -18
  8. package/dist/{builtins-C6JMZVV6.js → builtins-XCZWXSC7.js} +5 -5
  9. package/dist/{chunk-IFBNV6H6.js → chunk-2ANTL7MR.js} +3 -3
  10. package/dist/{chunk-5FR74PWO.js → chunk-2JDWVJND.js} +2 -2
  11. package/dist/{chunk-XWSF374K.js → chunk-2OQE55CK.js} +3 -3
  12. package/dist/{chunk-5H3GB5BO.js → chunk-32KWKNSF.js} +8 -384
  13. package/dist/{chunk-KTYTFRMB.js → chunk-36EJLSQQ.js} +34 -36
  14. package/dist/{chunk-FHJEP5SW.js → chunk-3BT2XMV4.js} +19 -13
  15. package/dist/chunk-3DPEIQKN.js +113 -0
  16. package/dist/{chunk-GU2UIAFZ.js → chunk-3URVFKWK.js} +7 -7
  17. package/dist/{chunk-WEH5XRJQ.js → chunk-3XML7CDN.js} +3 -3
  18. package/dist/chunk-42FMPA75.js +101 -0
  19. package/dist/{chunk-A2NJGIB3.js → chunk-5LXZXPKX.js} +2 -2
  20. package/dist/{chunk-VCBR6CU7.js → chunk-5PSMVOLM.js} +2 -2
  21. package/dist/{chunk-NMPKI6XL.js → chunk-6DB53AJS.js} +203 -25
  22. package/dist/{chunk-3BINW3FP.js → chunk-76ONBSIA.js} +2 -2
  23. package/dist/{chunk-26LEYJZH.js → chunk-7MCTRUCE.js} +2 -2
  24. package/dist/{chunk-TYPGUK6W.js → chunk-AB44T6BB.js} +111 -5
  25. package/dist/{chunk-K4XHGFR5.js → chunk-B7OBL7PK.js} +317 -721
  26. package/dist/{chunk-B5CSFE7B.js → chunk-BBVJUZHB.js} +2 -2
  27. package/dist/{chunk-EQ63NRB7.js → chunk-BBVYXMFO.js} +2 -2
  28. package/dist/{chunk-ZVJ5BLO2.js → chunk-BKFJHQCA.js} +154 -16
  29. package/dist/chunk-BKFM6EJV.js +462 -0
  30. package/dist/chunk-BMS5RKQY.js +27 -0
  31. package/dist/{chunk-ZNLWCMVZ.js → chunk-BPKCPIL7.js} +2 -2
  32. package/dist/{chunk-TLQJPP24.js → chunk-BUMFYQFY.js} +1394 -1349
  33. package/dist/{chunk-BNAZZHFG.js → chunk-BYP5D4HI.js} +1 -1
  34. package/dist/chunk-C2LTL2W6.js +2447 -0
  35. package/dist/{chunk-ME6CCNFO.js → chunk-CODPRO7Q.js} +8 -8
  36. package/dist/{chunk-E77JEWSD.js → chunk-CTJ4RNAA.js} +7 -37
  37. package/dist/{chunk-ODFEOB4F.js → chunk-CY6FY24N.js} +26 -8
  38. package/dist/{chunk-7RFXX52T.js → chunk-DQITNCXG.js} +642 -172
  39. package/dist/{chunk-TTHACPOM.js → chunk-DYJP44XW.js} +578 -117
  40. package/dist/{chunk-2HFZQUHL.js → chunk-F4CKPOEQ.js} +18 -8
  41. package/dist/{chunk-DGSYXYMX.js → chunk-FEFIFZTL.js} +3 -3
  42. package/dist/{chunk-GWS3VEIW.js → chunk-FWDFM5ZU.js} +24 -3
  43. package/dist/{chunk-MV3K5QF2.js → chunk-GCSMB2KY.js} +2 -2
  44. package/dist/chunk-GKF55TAZ.js +391 -0
  45. package/dist/{chunk-VWZOAB7K.js → chunk-GR5G2PVF.js} +9 -8
  46. package/dist/{chunk-4DGYLA73.js → chunk-GXNLGKAB.js} +80 -9
  47. package/dist/chunk-HHV2GANA.js +88 -0
  48. package/dist/{chunk-IIZWH4XA.js → chunk-HI63TFOG.js} +5 -4
  49. package/dist/{chunk-WLFILSD5.js → chunk-HJJTYUHX.js} +113 -83
  50. package/dist/{chunk-TT36MB5S.js → chunk-HLW2MRKE.js} +3 -1
  51. package/dist/{chunk-PMDBGQSJ.js → chunk-HWHKMHUA.js} +7 -7
  52. package/dist/chunk-HZHHCK24.js +1631 -0
  53. package/dist/{chunk-WSB3FPX7.js → chunk-I5VEOC6I.js} +39 -143
  54. package/dist/chunk-IBEBSCYA.js +564 -0
  55. package/dist/chunk-IQ7KR472.js +362 -0
  56. package/dist/{chunk-A3WNZD3P.js → chunk-J4W7KFM7.js} +949 -972
  57. package/dist/{chunk-TB5666IT.js → chunk-JDG2WCRO.js} +5 -5
  58. package/dist/{chunk-N22QMJKY.js → chunk-K5C3NCBD.js} +4 -4
  59. package/dist/{chunk-CGKSTWHD.js → chunk-K6BSR66V.js} +2 -1
  60. package/dist/{chunk-5C3AQNDW.js → chunk-KFZI4NIL.js} +216 -38
  61. package/dist/chunk-KMVISBZR.js +132 -0
  62. package/dist/{chunk-WXY7KU3G.js → chunk-LDQ2ZF2M.js} +2 -2
  63. package/dist/{chunk-XN3L4EYL.js → chunk-LQ3DZAMX.js} +3 -3
  64. package/dist/{chunk-U6MBIEMB.js → chunk-LY4S7GJC.js} +173 -144
  65. package/dist/{chunk-4SPRNWDE.js → chunk-MLKNTWH2.js} +19 -19
  66. package/dist/{chunk-MVVUPGPW.js → chunk-MXHC5QYU.js} +6 -6
  67. package/dist/chunk-NEKRRTYW.js +56 -0
  68. package/dist/{chunk-SPULKLCF.js → chunk-NHCZP4K7.js} +3 -3
  69. package/dist/chunk-NHLBIGRH.js +1506 -0
  70. package/dist/chunk-NQQH3YT7.js +302 -0
  71. package/dist/chunk-NYS75XW5.js +15 -0
  72. package/dist/{chunk-GN57SG4G.js → chunk-O4XIVISU.js} +10 -8
  73. package/dist/{chunk-EMYUUSFG.js → chunk-O6TL7WWY.js} +6 -6
  74. package/dist/chunk-OQBA45DZ.js +97 -0
  75. package/dist/{chunk-LU7P4LHA.js → chunk-P3FOHJT4.js} +2 -2
  76. package/dist/chunk-PMZCIOCJ.js +25 -0
  77. package/dist/{chunk-I4HZDVNP.js → chunk-PQEFIJ36.js} +2 -2
  78. package/dist/{chunk-J3YUBZWY.js → chunk-QBJA7R7N.js} +62 -6
  79. package/dist/chunk-QDC3K2U3.js +262 -0
  80. package/dist/{chunk-2HEJ2F35.js → chunk-QLFS5GO2.js} +22 -10
  81. package/dist/{chunk-7RGZWPB6.js → chunk-QLL7ILRG.js} +95 -32
  82. package/dist/{chunk-YS5VLNH5.js → chunk-QREDIESB.js} +6 -6
  83. package/dist/chunk-QSNYB6ZV.js +195 -0
  84. package/dist/{chunk-GOXNB3AO.js → chunk-RAPCMZL4.js} +75 -4
  85. package/dist/chunk-RKKLTLYB.js +45 -0
  86. package/dist/{chunk-P43ETTHK.js → chunk-SJ5ZKQ4S.js} +2 -2
  87. package/dist/{chunk-GPIEI3LY.js → chunk-SP2RXXYO.js} +6 -54
  88. package/dist/chunk-SUCTJL45.js +45 -0
  89. package/dist/{chunk-DYIM5TJT.js → chunk-SUW5DORT.js} +263 -7
  90. package/dist/chunk-T56WDKA5.js +183 -0
  91. package/dist/chunk-TVHHYFHE.js +255 -0
  92. package/dist/{chunk-FJ3H4MN5.js → chunk-TZ3SGWZZ.js} +3 -3
  93. package/dist/{chunk-MXKJU4JB.js → chunk-U77AMWDL.js} +91 -10
  94. package/dist/{chunk-5DHKRSMQ.js → chunk-ULC6OTWO.js} +11 -7
  95. package/dist/{chunk-RWSI4YD7.js → chunk-UM7N4G5A.js} +33 -12
  96. package/dist/{chunk-FCSXB6T2.js → chunk-UOSL25KY.js} +14 -2
  97. package/dist/{chunk-IGWKHNIQ.js → chunk-UXMFQ54G.js} +44 -37
  98. package/dist/{chunk-HFSBBKSQ.js → chunk-V5DHCITQ.js} +171 -3
  99. package/dist/{chunk-5WIGXA4T.js → chunk-VAZSBTKF.js} +111 -4
  100. package/dist/{chunk-VHN4MY6O.js → chunk-VEO4AP2K.js} +2 -2
  101. package/dist/{chunk-IJ7RPIYJ.js → chunk-VFA6GDY5.js} +65 -4
  102. package/dist/{chunk-PT7HYKEM.js → chunk-VO2LKSTM.js} +2 -2
  103. package/dist/chunk-VO67MWHC.js +75 -0
  104. package/dist/{chunk-XK56QHLX.js → chunk-VPKWYKEY.js} +19 -5
  105. package/dist/{chunk-TANS5ZJS.js → chunk-VYMXRQI6.js} +36 -22
  106. package/dist/{chunk-WWCZ5F23.js → chunk-W5VSYASO.js} +77 -16
  107. package/dist/{chunk-WNIJTQQK.js → chunk-WZR7K7ZX.js} +72 -116
  108. package/dist/{chunk-5Q2VVUKB.js → chunk-X3YGUTOB.js} +4 -4
  109. package/dist/chunk-X75E3D2N.js +686 -0
  110. package/dist/{chunk-VAWNZU7Z.js → chunk-YDFRH54B.js} +4 -4
  111. package/dist/chunk-YJX4SHTD.js +40 -0
  112. package/dist/{chunk-ZI647VB5.js → chunk-YPI3QQCF.js} +2 -2
  113. package/dist/chunk-Z2RR6MAK.js +127 -0
  114. package/dist/{chunk-FBVTI2TJ.js → chunk-Z4TXYIEG.js} +12 -131
  115. package/dist/cli/index.js +47 -36
  116. package/dist/{clio-QVTYJ57A.js → clio-2JXHBBY5.js} +7 -7
  117. package/dist/{code-nav-FGGFIE7L.js → code-nav-3YYRMYNF.js} +8 -8
  118. package/dist/{compile-cache-CVJMMODC.js → compile-cache-7FPE6PS3.js} +3 -3
  119. package/dist/{components-ZFA3SAER.js → components-RYZV4JGP.js} +5 -5
  120. package/dist/{config-LW5IJFQN.js → config-QZPCMYSO.js} +99 -63
  121. package/dist/{configure-7XIZCOU4.js → configure-TEGEBYCA.js} +23 -22
  122. package/dist/{context-Y6Y7QPR6.js → context-AV7OEZ4D.js} +12 -12
  123. package/dist/{context-L3WL3X7K.js → context-E6H5RNMC.js} +56 -47
  124. package/dist/{context-N52ZA626.js → context-GSXUE4CT.js} +29 -27
  125. package/dist/{context-clear-MBQRLSDQ.js → context-clear-SHIBYK6T.js} +55 -46
  126. package/dist/{context-index-HVMFQHK3.js → context-index-HNG3MOME.js} +2 -2
  127. package/dist/{context-working-set-GS6DSO7F.js → context-working-set-5ZGKPGZQ.js} +13 -13
  128. package/dist/{dispatch-runner-22ZCNOM3.js → dispatch-runner-EFMJT4LD.js} +93 -64
  129. package/dist/{docs-7LQ23DLM.js → docs-23KQS3XK.js} +5 -5
  130. package/dist/doctor-QOA5FNY5.js +313 -0
  131. package/dist/{eval-BEC2WHDA.js → eval-TFBYQH4H.js} +2032 -156
  132. package/dist/eval-inventory-SXH7PDKX.js +316 -0
  133. package/dist/{evidence-REJUMSKM.js → evidence-ERGESKGN.js} +203 -48
  134. package/dist/{evolve-PY5ZBA5K.js → evolve-VDXTSYCJ.js} +52 -43
  135. package/dist/{extensions-HVKU65YU.js → extensions-7BGBHN57.js} +13 -7
  136. package/dist/{fleet-7WZEWRFA.js → fleet-2RRVDF2V.js} +228 -108
  137. package/dist/{fleet-commands-UVHWM76J.js → fleet-commands-VJ726XIA.js} +11 -11
  138. package/dist/fleet-decisions-EPAPM3XJ.js +157 -0
  139. package/dist/{fleet-graph-6ULH7PES.js → fleet-graph-JF5QOATM.js} +18 -15
  140. package/dist/fleet-inspect-VLY4S7QM.js +442 -0
  141. package/dist/{fleet-preflight-J53T6CCE.js → fleet-preflight-AIZUEJOY.js} +5 -5
  142. package/dist/{fleet-validate-72PC4SLA.js → fleet-validate-AJRPDMDV.js} +22 -19
  143. package/dist/fleet-verify-JFEL2L3H.js +175 -0
  144. package/dist/fleet-view-ZCON35AG.js +102 -0
  145. package/dist/{init-OG3TPGQG.js → init-DN2WWLFE.js} +72 -62
  146. package/dist/install-XGLBQY5E.js +13 -0
  147. package/dist/interop-OZBKXAYL.js +114 -0
  148. package/dist/{library-CNTMPLRF.js → library-YWZG7IMW.js} +21 -18
  149. package/dist/{memory-6IS7F275.js → memory-I4C4HMLW.js} +54 -45
  150. package/dist/{models-ENRJDA5W.js → models-CEYXJBO6.js} +33 -30
  151. package/dist/{monitor-XLDVO7TN.js → monitor-NZ6GCI3P.js} +59 -52
  152. package/dist/{orchestrator-6KSPYRHA.js → orchestrator-GCGQ4N5I.js} +7827 -7328
  153. package/dist/panes-HMABYVO4.js +58 -0
  154. package/dist/panes-KY6W3V2E.js +103 -0
  155. package/dist/{paths-DBXMZMDU.js → paths-II4K7DNR.js} +5 -5
  156. package/dist/{reset-RZ4ER727.js → reset-DQ6FGCSH.js} +13 -11
  157. package/dist/resources-BB3MVJMD.js +111 -0
  158. package/dist/{run-Y2CNK5RU.js → run-H2GQDUER.js} +119 -87
  159. package/dist/{share-A55GYP6Z.js → share-GTJN6A5O.js} +20 -17
  160. package/dist/{skills-ALC5J6AT.js → skills-L55TEW6R.js} +33 -24
  161. package/dist/{skills-eval-JPBEBYQU.js → skills-eval-XVXPH2JI.js} +67 -56
  162. package/dist/skills-inventory-S4MXPJFV.js +126 -0
  163. package/dist/slash-commands-ZSGASKJC.js +77 -0
  164. package/dist/{steer-GGWFUJUD.js → steer-RZGSCY4R.js} +4 -4
  165. package/dist/{support-MIETYA5E.js → support-PKEUNNQL.js} +6 -6
  166. package/dist/{targets-VGNXIR3S.js → targets-NCPZ644J.js} +68 -40
  167. package/dist/{terminal-lease-WOBR64YA.js → terminal-lease-44SV3YCN.js} +6 -4
  168. package/dist/tools-DAF3DI3C.js +27 -0
  169. package/dist/{trace-PNCASAXC.js → trace-FYVW2MQA.js} +207 -10
  170. package/dist/tui-primitives-2AKXQNZK.js +13 -0
  171. package/dist/{uninstall-ZJF5H5ZN.js → uninstall-DW2PNOIC.js} +5 -5
  172. package/dist/{upgrade-FUSUAGHR.js → upgrade-3XPP6OQL.js} +27 -24
  173. package/dist/{usage-N4MKVHKD.js → usage-3NLHGTU2.js} +114 -62
  174. package/dist/{verifiers-YAWOJ3H2.js → verifiers-SSQONKRT.js} +172 -13
  175. package/dist/{verify-LTDHYBGY.js → verify-3U6J7FZI.js} +10 -10
  176. package/dist/{web-fetch-2YHJ3KTG.js → web-fetch-S7RR6GZ7.js} +3 -3
  177. package/dist/{wiki-generate-6M7GHTBJ.js → wiki-generate-CEHYGPGQ.js} +75 -65
  178. package/dist/with-panes-MKB46MPQ.js +782 -0
  179. package/dist/worker/entry.js +106 -75
  180. package/docs/README.md +3 -2
  181. package/docs/acp.md +24 -3
  182. package/docs/alcf-provider.md +1 -1
  183. package/docs/architecture.md +2 -2
  184. package/docs/artifact-versions.md +9 -1
  185. package/docs/built-in-agents.md +1 -1
  186. package/docs/capacity-and-scheduling.md +62 -3
  187. package/docs/commands-and-modes.md +31 -2
  188. package/docs/configuration-and-targets.md +69 -12
  189. package/docs/context-engine.md +63 -4
  190. package/docs/development-pipeline.md +19 -0
  191. package/docs/dispatch-typed-intent.md +385 -0
  192. package/docs/documentation-coverage.md +5 -5
  193. package/docs/documentation-guide.md +1 -1
  194. package/docs/environment-variables.md +3 -0
  195. package/docs/eval-runner.md +262 -11
  196. package/docs/evals-internal.md +72 -2
  197. package/docs/evidence-and-memory.md +12 -11
  198. package/docs/evolution.md +1 -1
  199. package/docs/exit-codes-and-output.md +1 -1
  200. package/docs/extensions-and-sharing.md +27 -1
  201. package/docs/fleet-dispatch.md +25 -4
  202. package/docs/installation-and-lifecycle.md +15 -2
  203. package/docs/middleware-and-components.md +1 -1
  204. package/docs/model-catalog.md +10 -1
  205. package/docs/observability.md +55 -4
  206. package/docs/proactive-memory.md +127 -14
  207. package/docs/prompt-envelope-and-tools.md +19 -1
  208. package/docs/provider-adapter-cookbook.md +1 -1
  209. package/docs/release-cut-checklist.md +19 -3
  210. package/docs/safety-model.md +2 -2
  211. package/docs/scientific-validation.md +3 -3
  212. package/docs/session-lifecycle.md +1 -1
  213. package/docs/skills-marketplace.md +1 -1
  214. package/docs/tool-usage.md +18 -8
  215. package/docs/trace-store.md +1 -1
  216. package/docs/troubleshooting.md +88 -1
  217. package/docs/tui-design.md +1 -1
  218. package/docs/worker-dispatch-mechanics.md +1 -1
  219. package/package.json +5 -2
  220. package/src/cli/acp.ts +6 -2
  221. package/src/cli/agents.ts +1 -1
  222. package/src/cli/argv.ts +25 -0
  223. package/src/cli/config-inspect.ts +33 -6
  224. package/src/cli/config.ts +1 -1
  225. package/src/cli/configure.ts +23 -21
  226. package/src/cli/doctor-panes.ts +124 -0
  227. package/src/cli/doctor-state-size.ts +82 -0
  228. package/src/cli/doctor-toolchain.ts +57 -0
  229. package/src/cli/doctor.ts +22 -1
  230. package/src/cli/eval-inventory.ts +436 -0
  231. package/src/cli/eval.ts +93 -16
  232. package/src/cli/evidence-detail.ts +88 -0
  233. package/src/cli/evidence-inventory.ts +183 -0
  234. package/src/cli/evidence.ts +30 -5
  235. package/src/cli/extensions.ts +5 -1
  236. package/src/cli/fleet-decisions.ts +69 -0
  237. package/src/cli/fleet-inspect.ts +334 -0
  238. package/src/cli/fleet-verify.ts +133 -0
  239. package/src/cli/fleet-view.ts +810 -0
  240. package/src/cli/fleet.ts +179 -39
  241. package/src/cli/index.ts +14 -2
  242. package/src/cli/interop-inspect.ts +128 -0
  243. package/src/cli/interop.ts +34 -0
  244. package/src/cli/panes.ts +35 -0
  245. package/src/cli/reset.ts +5 -2
  246. package/src/cli/run.ts +58 -0
  247. package/src/cli/skills-inventory.ts +185 -0
  248. package/src/cli/skills.ts +16 -13
  249. package/src/cli/targets.ts +44 -13
  250. package/src/cli/tools.ts +321 -0
  251. package/src/cli/trace-inspect.ts +252 -0
  252. package/src/cli/trace.ts +85 -5
  253. package/src/cli/usage.ts +63 -14
  254. package/src/cli/verifiers-inspect.ts +347 -0
  255. package/src/cli/verifiers.ts +9 -0
  256. package/src/core/bus-events.ts +33 -1
  257. package/src/core/cache-telemetry.ts +42 -0
  258. package/src/core/config.ts +67 -0
  259. package/src/core/defaults.ts +124 -8
  260. package/src/core/endpoint-key.ts +27 -0
  261. package/src/core/residency-target-key.ts +25 -0
  262. package/src/core/response-schema.ts +80 -6
  263. package/src/core/theme-token-hex.ts +43 -0
  264. package/src/core/tool-names.ts +2 -1
  265. package/src/core/xdg.ts +1 -1
  266. package/src/domains/agents/fleets/build-review.md +0 -3
  267. package/src/domains/agents/fleets/build-test.md +0 -3
  268. package/src/domains/agents/result-contract-filesystem.ts +32 -0
  269. package/src/domains/agents/result-contract.ts +164 -35
  270. package/src/domains/config/classify.ts +6 -0
  271. package/src/domains/context/codewiki/coordinator.ts +12 -4
  272. package/src/domains/dispatch/admission-error.ts +9 -0
  273. package/src/domains/dispatch/admission.ts +52 -14
  274. package/src/domains/dispatch/capacity-lease.ts +118 -9
  275. package/src/domains/dispatch/contract.ts +11 -0
  276. package/src/domains/dispatch/council-topology.ts +398 -0
  277. package/src/domains/dispatch/execution-plan.ts +44 -4
  278. package/src/domains/dispatch/extension.ts +378 -82
  279. package/src/domains/dispatch/fleet-node-prompt.ts +62 -0
  280. package/src/domains/dispatch/fleet-plan.ts +7 -2
  281. package/src/domains/dispatch/fleet-run.ts +87 -4
  282. package/src/domains/dispatch/gate-decisions.ts +11 -1
  283. package/src/domains/dispatch/gate-role-prompts.ts +9 -0
  284. package/src/domains/dispatch/gate-topology.ts +289 -0
  285. package/src/domains/dispatch/heartbeat.ts +32 -8
  286. package/src/domains/dispatch/index.ts +22 -0
  287. package/src/domains/dispatch/intent-compatibility.ts +330 -0
  288. package/src/domains/dispatch/intent.ts +85 -1
  289. package/src/domains/dispatch/orphan-recovery.ts +5 -0
  290. package/src/domains/dispatch/reservation-store.ts +139 -11
  291. package/src/domains/dispatch/run-event-journal-bridge.ts +149 -0
  292. package/src/domains/dispatch/run-event-journal.ts +598 -0
  293. package/src/domains/dispatch/state.ts +49 -1
  294. package/src/domains/dispatch/types.ts +13 -0
  295. package/src/domains/dispatch/validation.ts +33 -8
  296. package/src/domains/dispatch/worker-spawn.ts +25 -11
  297. package/src/domains/dispatch/write-boundary-enforcer.ts +20 -3
  298. package/src/domains/dispatch/write-boundary.ts +62 -1
  299. package/src/domains/eval/artifacts/store.ts +62 -0
  300. package/src/domains/eval/compare/behavioral.ts +224 -0
  301. package/src/domains/eval/compare/compare.ts +342 -2
  302. package/src/domains/eval/compare/envelope.ts +128 -0
  303. package/src/domains/eval/compare/gates.ts +24 -6
  304. package/src/domains/eval/compare/thresholds.ts +30 -3
  305. package/src/domains/eval/execution-provenance.ts +240 -0
  306. package/src/domains/eval/inventory.ts +113 -0
  307. package/src/domains/eval/metrics/aggregate.ts +136 -0
  308. package/src/domains/eval/metrics/call-ledger-stream.ts +112 -0
  309. package/src/domains/eval/metrics/tracked.ts +413 -0
  310. package/src/domains/eval/provenance.ts +117 -0
  311. package/src/domains/eval/reports/comparison.ts +128 -0
  312. package/src/domains/eval/reports/junit.ts +17 -3
  313. package/src/domains/eval/reports/markdown.ts +3 -3
  314. package/src/domains/eval/reports/text.ts +14 -0
  315. package/src/domains/eval/run-compare.ts +20 -0
  316. package/src/domains/eval/runners/clio-run.ts +127 -0
  317. package/src/domains/eval/runners/external-command.ts +28 -3
  318. package/src/domains/eval/schema/adapter.ts +111 -0
  319. package/src/domains/eval/schema/artifact.ts +20 -0
  320. package/src/domains/eval/schema/behavioral-metrics.ts +204 -0
  321. package/src/domains/eval/schema/behavioral.ts +520 -0
  322. package/src/domains/eval/schema/execution-envelope.ts +194 -0
  323. package/src/domains/eval/schema/serving.ts +105 -0
  324. package/src/domains/eval/schema/suite.ts +38 -8
  325. package/src/domains/eval/schema/validate.ts +58 -3
  326. package/src/domains/eval/schema/verdict.ts +237 -0
  327. package/src/domains/eval/suites/resolve.ts +2 -0
  328. package/src/domains/eval/suites/run.ts +264 -33
  329. package/src/domains/eval/verifiers/command.ts +2 -1
  330. package/src/domains/eval/workspaces/temp-copy.ts +145 -13
  331. package/src/domains/evidence/build.ts +2 -13
  332. package/src/domains/evidence/eval.ts +2 -12
  333. package/src/domains/evidence/findings-markdown.ts +33 -0
  334. package/src/domains/evidence/run-trust.ts +7 -113
  335. package/src/domains/evidence/store.ts +6 -0
  336. package/src/domains/evidence/trust-projection.ts +2 -2
  337. package/src/domains/extensions/compatibility.ts +285 -0
  338. package/src/domains/extensions/discovery.ts +38 -3
  339. package/src/domains/extensions/resources.ts +1 -1
  340. package/src/domains/extensions/state.ts +12 -3
  341. package/src/domains/extensions/types.ts +2 -0
  342. package/src/domains/lifecycle/doctor.ts +69 -1
  343. package/src/domains/memory/index.ts +14 -1
  344. package/src/domains/memory/task-bank-promotion.ts +64 -0
  345. package/src/domains/memory/task-memory-policy.ts +82 -17
  346. package/src/domains/memory/task-memory-spend.ts +131 -0
  347. package/src/domains/memory/task-memory-status.ts +7 -0
  348. package/src/domains/memory/task-memory-telemetry.ts +3 -0
  349. package/src/domains/middleware/index.ts +1 -0
  350. package/src/domains/middleware/memory-intervention.ts +97 -21
  351. package/src/domains/middleware/memory-step-endpoint.ts +71 -0
  352. package/src/domains/mux/contract.ts +434 -0
  353. package/src/domains/mux/detect.ts +158 -0
  354. package/src/domains/mux/extension.ts +47 -0
  355. package/src/domains/mux/index.ts +96 -0
  356. package/src/domains/mux/manifest.ts +6 -0
  357. package/src/domains/mux/operations.ts +164 -0
  358. package/src/domains/mux/pane-registry.ts +90 -0
  359. package/src/domains/mux/protocol.ts +49 -0
  360. package/src/domains/mux/socket-client.ts +816 -0
  361. package/src/domains/mux/types.ts +222 -0
  362. package/src/domains/mux/viewer-command.ts +59 -0
  363. package/src/domains/mux/yazi/assets/init.lua +2 -0
  364. package/src/domains/mux/yazi/assets/plugins/git.yazi/LICENSE +21 -0
  365. package/src/domains/mux/yazi/assets/plugins/git.yazi/README.md +78 -0
  366. package/src/domains/mux/yazi/assets/plugins/git.yazi/main.lua +255 -0
  367. package/src/domains/mux/yazi/assets/plugins/git.yazi/types.lua +12 -0
  368. package/src/domains/mux/yazi/assets/yazi.toml +17 -0
  369. package/src/domains/mux/yazi/event-stream.ts +180 -0
  370. package/src/domains/mux/yazi/profile.ts +299 -0
  371. package/src/domains/mux/yazi/session.ts +228 -0
  372. package/src/domains/mux/yazi/theme.ts +30 -0
  373. package/src/domains/observability/background-memory-usage.ts +140 -0
  374. package/src/domains/observability/cost.ts +22 -1
  375. package/src/domains/observability/index.ts +9 -0
  376. package/src/domains/observability/out-of-turn-usage.ts +51 -2
  377. package/src/domains/observability/trace-store.ts +234 -2
  378. package/src/domains/prompts/compiler.ts +100 -13
  379. package/src/domains/providers/endpoint-capacity.ts +228 -0
  380. package/src/domains/providers/endpoint-slots-store.ts +189 -0
  381. package/src/domains/providers/extension.ts +20 -3
  382. package/src/domains/providers/index.ts +32 -0
  383. package/src/domains/providers/model-runtime-capabilities.ts +32 -0
  384. package/src/domains/providers/models/local-models/clio-local-coding-targets.yaml +243 -1
  385. package/src/domains/providers/runtime-resolution.ts +8 -1
  386. package/src/domains/providers/runtimes/boot-manifest.ts +1 -0
  387. package/src/domains/providers/runtimes/builtins.ts +2 -0
  388. package/src/domains/providers/runtimes/common/probe-helpers.ts +31 -9
  389. package/src/domains/providers/runtimes/local-native/llamacpp-anthropic.ts +1 -1
  390. package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
  391. package/src/domains/providers/runtimes/local-native/llamacpp-embed.ts +1 -1
  392. package/src/domains/providers/runtimes/local-native/llamacpp-rerank.ts +1 -1
  393. package/src/domains/providers/runtimes/local-native/llamacpp.ts +4 -1
  394. package/src/domains/providers/runtimes/local-native/lmstudio.ts +4 -1
  395. package/src/domains/providers/runtimes/local-native/ollama-native.ts +6 -1
  396. package/src/domains/providers/runtimes/protocol/litellm.ts +375 -0
  397. package/src/domains/providers/support.ts +1 -0
  398. package/src/domains/providers/target-model-cache.ts +124 -0
  399. package/src/domains/providers/types/capability-flags.ts +2 -0
  400. package/src/domains/providers/types/target-descriptor.ts +2 -0
  401. package/src/domains/resources/index.ts +3 -0
  402. package/src/domains/resources/prompts/loader.ts +95 -33
  403. package/src/domains/resources/skills/loader.ts +33 -0
  404. package/src/domains/safety/action-classifier.ts +6 -0
  405. package/src/domains/safety/call-target.ts +52 -0
  406. package/src/domains/safety/run-effects.ts +35 -4
  407. package/src/domains/session/context-accounting.ts +52 -1
  408. package/src/domains/session/context-ledger.ts +37 -13
  409. package/src/domains/session/index.ts +6 -0
  410. package/src/domains/session/prompt-cache.ts +140 -0
  411. package/src/domains/session/prompt-manifest.ts +42 -0
  412. package/src/domains/toolchain/archive.ts +175 -0
  413. package/src/domains/toolchain/contract.ts +28 -0
  414. package/src/domains/toolchain/extension.ts +47 -0
  415. package/src/domains/toolchain/index.ts +39 -0
  416. package/src/domains/toolchain/install.ts +327 -0
  417. package/src/domains/toolchain/manifest.ts +8 -0
  418. package/src/domains/toolchain/paths.ts +34 -0
  419. package/src/domains/toolchain/registry.ts +265 -0
  420. package/src/domains/toolchain/remove.ts +218 -0
  421. package/src/domains/toolchain/resolve.ts +182 -0
  422. package/src/domains/toolchain/types.ts +113 -0
  423. package/src/domains/toolchain/version.ts +88 -0
  424. package/src/engine/acp/adapter.ts +18 -3
  425. package/src/engine/acp/server.ts +413 -70
  426. package/src/engine/acp/types.ts +19 -1
  427. package/src/engine/ai.ts +35 -0
  428. package/src/engine/apis/llamacpp-residency.ts +55 -3
  429. package/src/engine/apis/lmstudio.ts +25 -5
  430. package/src/engine/apis/ollama-native.ts +2 -1
  431. package/src/engine/apis/openai-completions.ts +80 -17
  432. package/src/engine/apis/residency-lock.ts +3 -1
  433. package/src/engine/apis/residency.ts +34 -1
  434. package/src/engine/claude/sdk-module.ts +98 -0
  435. package/src/engine/claude/sdk-runtime.ts +19 -11
  436. package/src/engine/provider-payload.ts +29 -1
  437. package/src/engine/tui-primitives.ts +21 -0
  438. package/src/engine/tui.ts +1 -0
  439. package/src/engine/worker-runtime.ts +2 -13
  440. package/src/entry/boot-options.ts +2 -0
  441. package/src/entry/orchestrator.ts +279 -35
  442. package/src/entry/panes-activation.ts +31 -0
  443. package/src/entry/with-panes.ts +20 -0
  444. package/src/interactive/chat-loop-messages.ts +26 -7
  445. package/src/interactive/chat-loop.ts +318 -41
  446. package/src/interactive/chat-panel.ts +62 -8
  447. package/src/interactive/clio-editor.ts +45 -8
  448. package/src/interactive/context-activity.ts +5 -1
  449. package/src/interactive/context-meter.ts +1 -1
  450. package/src/interactive/context-overlay.ts +41 -10
  451. package/src/interactive/cost-overlay.ts +66 -6
  452. package/src/interactive/council-grid.ts +1 -3
  453. package/src/interactive/council.ts +11 -0
  454. package/src/interactive/dispatch-board.ts +102 -20
  455. package/src/interactive/fleet-run-preview.ts +41 -15
  456. package/src/interactive/handoff-round.ts +41 -2
  457. package/src/interactive/interactive-application.ts +177 -7
  458. package/src/interactive/interactive-input-runtime.ts +15 -0
  459. package/src/interactive/interactive-presentation.ts +4 -0
  460. package/src/interactive/interactive-shell.ts +20 -17
  461. package/src/interactive/interactive-slash-runtime.ts +63 -10
  462. package/src/interactive/memory-overlay.ts +9 -0
  463. package/src/interactive/modal-marker.ts +170 -0
  464. package/src/interactive/mutation-preview.ts +295 -0
  465. package/src/interactive/mux-bridge.ts +214 -0
  466. package/src/interactive/overlay-frame.ts +58 -2
  467. package/src/interactive/overlay-general-openers.ts +17 -0
  468. package/src/interactive/overlay-key-routing.ts +52 -3
  469. package/src/interactive/overlay-lifecycle.ts +56 -7
  470. package/src/interactive/overlay-model-selectors.ts +40 -3
  471. package/src/interactive/overlay-permission-lifecycle.ts +112 -24
  472. package/src/interactive/overlay-session-lifecycle.ts +73 -9
  473. package/src/interactive/overlay-transitions.ts +18 -4
  474. package/src/interactive/overlays/agents.ts +1 -0
  475. package/src/interactive/overlays/ask-user.ts +227 -49
  476. package/src/interactive/overlays/auth-dialog.ts +1 -0
  477. package/src/interactive/overlays/context-reset.ts +1 -0
  478. package/src/interactive/overlays/cwd-fallback.ts +1 -0
  479. package/src/interactive/overlays/decisions.ts +11 -11
  480. package/src/interactive/overlays/extensions.ts +1 -0
  481. package/src/interactive/overlays/fleet-run-approval.ts +1 -0
  482. package/src/interactive/overlays/handoff-review.ts +1 -0
  483. package/src/interactive/overlays/help-reference.ts +6 -0
  484. package/src/interactive/overlays/interop.ts +1 -0
  485. package/src/interactive/overlays/library-install-confirm.ts +1 -0
  486. package/src/interactive/overlays/library-tabs.ts +28 -0
  487. package/src/interactive/overlays/list-overlay.ts +10 -1
  488. package/src/interactive/overlays/message-picker.ts +1 -0
  489. package/src/interactive/overlays/model-scope.ts +86 -0
  490. package/src/interactive/overlays/model-selector.ts +1 -0
  491. package/src/interactive/overlays/prompts.ts +12 -1
  492. package/src/interactive/overlays/session-selector.ts +1 -0
  493. package/src/interactive/overlays/settings-sections.ts +30 -0
  494. package/src/interactive/overlays/settings.ts +614 -45
  495. package/src/interactive/overlays/side-question.ts +1 -0
  496. package/src/interactive/overlays/skills-hub.ts +3 -11
  497. package/src/interactive/overlays/tree-selector.ts +1 -0
  498. package/src/interactive/pane-policy.ts +46 -0
  499. package/src/interactive/panes-runtime.ts +292 -0
  500. package/src/interactive/permission-hint.ts +34 -2
  501. package/src/interactive/permission-overlay.ts +159 -9
  502. package/src/interactive/prewarm.ts +197 -0
  503. package/src/interactive/render-trace.ts +162 -15
  504. package/src/interactive/renderers/compaction-summary.ts +29 -0
  505. package/src/interactive/renderers/tool-execution.ts +4 -0
  506. package/src/interactive/renderers/worker-entry.ts +122 -14
  507. package/src/interactive/side-question.ts +58 -1
  508. package/src/interactive/slash-commands.ts +251 -15
  509. package/src/interactive/status/controller.ts +11 -0
  510. package/src/interactive/status/state-machine.ts +54 -2
  511. package/src/interactive/status/types.ts +7 -0
  512. package/src/interactive/tasks-overlay.ts +1 -0
  513. package/src/interactive/terminal-lease.ts +2 -0
  514. package/src/interactive/theme/tokens.ts +3 -14
  515. package/src/interactive/turn-context.ts +346 -33
  516. package/src/interactive/turn-persistence.ts +14 -4
  517. package/src/interactive/turn-prewarm.ts +364 -0
  518. package/src/interactive/turn-queues.ts +7 -4
  519. package/src/interactive/turn-runtime.ts +8 -1
  520. package/src/interactive/turn-state.ts +23 -0
  521. package/src/interactive/view/artifacts.ts +109 -1
  522. package/src/interactive/view/view-overlay.ts +29 -3
  523. package/src/interactive/watch-pane.ts +152 -0
  524. package/src/interactive/worker-progress.ts +7 -1
  525. package/src/interactive/worker-receipts.ts +19 -1
  526. package/src/interactive/worker-stream.ts +5 -0
  527. package/src/interactive/yazi-bridge.ts +444 -0
  528. package/src/tools/ask-user.ts +43 -2
  529. package/src/tools/bootstrap.ts +26 -2
  530. package/src/tools/builtin-tool-catalog.ts +15 -0
  531. package/src/tools/compete-worktrees.ts +83 -2
  532. package/src/tools/core-bootstrap.ts +2 -1
  533. package/src/tools/dispatch-admission.ts +14 -3
  534. package/src/tools/dispatch-arguments.ts +20 -20
  535. package/src/tools/dispatch-plan.ts +17 -9
  536. package/src/tools/dispatch-run-events.ts +134 -19
  537. package/src/tools/dispatch-runner.ts +29 -7
  538. package/src/tools/dispatch-scout.ts +1 -1
  539. package/src/tools/dispatch-types.ts +15 -3
  540. package/src/tools/dispatch.ts +1 -1
  541. package/src/tools/executables.ts +17 -14
  542. package/src/tools/observation.ts +54 -4
  543. package/src/tools/panes-surface.ts +38 -0
  544. package/src/tools/panes.ts +112 -0
  545. package/src/tools/policy.ts +10 -1
  546. package/src/tools/presentation.ts +1 -0
  547. package/src/tools/registry.ts +16 -0
  548. package/dist/chunk-AOCYTWAV.js +0 -449
  549. package/dist/chunk-HLE42MG7.js +0 -37
  550. package/dist/chunk-HWUFFB6L.js +0 -83
  551. package/dist/chunk-JOZYP4GM.js +0 -279
  552. package/dist/doctor-M7YEDGAE.js +0 -91
@@ -0,0 +1,222 @@
1
+ /**
2
+ * Clio-owned vocabulary for the pane layer.
3
+ *
4
+ * Nothing in this file names a herdr wire shape. `socket-client.ts` is the only
5
+ * module that reads the newline-delimited JSON coming off the socket, and it
6
+ * maps every response into the types declared here before anything else in the
7
+ * process sees it. That keeps the blast radius of a herdr protocol bump inside
8
+ * one file and keeps `npm run lint`'s boundary check honest about what the mux
9
+ * domain exports to the rest of Clio.
10
+ */
11
+
12
+ /** Which capability ladder rung the mux resolved to at interactive boot. */
13
+ export type MuxMode = "embedded" | "guest" | "none";
14
+
15
+ /** Locates one pane inside a herdr session. */
16
+ export interface MuxPaneRef {
17
+ paneId: string;
18
+ tabId: string;
19
+ workspaceId: string;
20
+ }
21
+
22
+ /**
23
+ * Semantic agent state as the pane layer reports and reads it.
24
+ *
25
+ * `done` and `unknown` only ever arrive from the server; Clio reports the three
26
+ * states in {@link MuxReportableAgentState}.
27
+ */
28
+ export type MuxAgentState = "idle" | "working" | "blocked" | "done" | "unknown";
29
+
30
+ /** The subset of {@link MuxAgentState} Clio is allowed to assert about a pane. */
31
+ export type MuxReportableAgentState = "idle" | "working" | "blocked";
32
+
33
+ /** One pane, projected from the server's pane record. */
34
+ export interface MuxPane {
35
+ paneId: string;
36
+ tabId: string;
37
+ workspaceId: string;
38
+ focused: boolean;
39
+ agentState: MuxAgentState;
40
+ revision: number;
41
+ label: string | null;
42
+ title: string | null;
43
+ cwd: string | null;
44
+ agent: string | null;
45
+ tokens: Readonly<Record<string, string>>;
46
+ }
47
+
48
+ /** One tab, projected from the server's tab record. */
49
+ export interface MuxTab {
50
+ tabId: string;
51
+ workspaceId: string;
52
+ number: number;
53
+ label: string;
54
+ focused: boolean;
55
+ paneCount: number;
56
+ agentState: MuxAgentState;
57
+ }
58
+
59
+ /** Git worktree metadata projected from herdr's worktree API. */
60
+ export interface MuxWorktree {
61
+ path: string;
62
+ branch: string | null;
63
+ isBare: boolean;
64
+ isDetached: boolean;
65
+ isPrunable: boolean;
66
+ isLinkedWorktree: boolean;
67
+ openWorkspaceId: string | null;
68
+ label: string;
69
+ }
70
+
71
+ /** Repository identity accompanying a `worktree.list` result. */
72
+ export interface MuxWorktreeSource {
73
+ repoKey: string;
74
+ repoName: string;
75
+ repoRoot: string;
76
+ sourceCheckoutPath: string;
77
+ sourceWorkspaceId: string | null;
78
+ }
79
+
80
+ /** Identity and capability facts recorded from the `ping` handshake. */
81
+ export interface MuxServerInfo {
82
+ version: string;
83
+ protocol: number;
84
+ }
85
+
86
+ /**
87
+ * Bootstrap state. The documented herdr pattern is to take one snapshot and
88
+ * then trust the event stream, so the client refetches this after every
89
+ * reconnect rather than trying to replay missed events.
90
+ */
91
+ export interface MuxSnapshot {
92
+ server: MuxServerInfo;
93
+ focusedPaneId: string | null;
94
+ focusedTabId: string | null;
95
+ focusedWorkspaceId: string | null;
96
+ panes: ReadonlyArray<MuxPane>;
97
+ tabs: ReadonlyArray<MuxTab>;
98
+ }
99
+
100
+ /** Lifecycle event kinds Phase 1 subscribes to. */
101
+ export type MuxEventKind = "pane.closed" | "pane.exited";
102
+
103
+ /** One pushed lifecycle event. */
104
+ export interface MuxEvent {
105
+ kind: MuxEventKind;
106
+ paneId: string;
107
+ workspaceId: string;
108
+ }
109
+
110
+ /** Where Clio's own pane lives, read from the herdr environment. */
111
+ export interface MuxSelfLocation {
112
+ workspaceId: string | null;
113
+ tabId: string | null;
114
+ paneId: string | null;
115
+ }
116
+
117
+ /**
118
+ * Typed failure classes. `unknown` carries the server's own code through
119
+ * untouched so a herdr version that grows a new code is legible in logs
120
+ * without a Clio release.
121
+ */
122
+ export type MuxErrorKind =
123
+ | "not_found"
124
+ | "invalid_params"
125
+ | "agent_blocked"
126
+ | "feature_disabled"
127
+ | "agent_prompt_stalled"
128
+ | "timeout"
129
+ | "transport"
130
+ | "protocol"
131
+ | "unknown";
132
+
133
+ /** Every failure the mux domain raises. */
134
+ export class MuxError extends Error {
135
+ readonly kind: MuxErrorKind;
136
+ /** The server's raw error code, when the failure came back over the wire. */
137
+ readonly wireCode: string | null;
138
+ readonly method: string | null;
139
+
140
+ constructor(kind: MuxErrorKind, message: string, options: { wireCode?: string; method?: string } = {}) {
141
+ super(message);
142
+ this.name = "MuxError";
143
+ this.kind = kind;
144
+ this.wireCode = options.wireCode ?? null;
145
+ this.method = options.method ?? null;
146
+ }
147
+ }
148
+
149
+ /** A request that never got a response line inside its budget. */
150
+ export class MuxRequestTimeout extends MuxError {
151
+ readonly timeoutMs: number;
152
+
153
+ constructor(method: string, timeoutMs: number) {
154
+ super("timeout", `mux request ${method} timed out after ${timeoutMs}ms`, { method });
155
+ this.name = "MuxRequestTimeout";
156
+ this.timeoutMs = timeoutMs;
157
+ }
158
+ }
159
+
160
+ /**
161
+ * Codes herdr returns today that mean the same thing as one of our kinds.
162
+ * Anything absent falls through the suffix and prefix rules in
163
+ * {@link muxErrorKind}, and anything those miss stays `unknown`.
164
+ */
165
+ const ERROR_KIND_BY_WIRE_CODE: Readonly<Record<string, MuxErrorKind>> = {
166
+ agent_blocked: "agent_blocked",
167
+ agent_prompt_stalled: "agent_prompt_stalled",
168
+ feature_disabled: "feature_disabled",
169
+ invalid_params: "invalid_params",
170
+ invalid_request: "invalid_params",
171
+ not_found: "not_found",
172
+ };
173
+
174
+ /** Classify one server error code into a Clio failure kind. */
175
+ export function muxErrorKind(wireCode: string): MuxErrorKind {
176
+ const mapped = ERROR_KIND_BY_WIRE_CODE[wireCode];
177
+ if (mapped) return mapped;
178
+ if (wireCode.endsWith("_not_found")) return "not_found";
179
+ if (wireCode.startsWith("invalid_")) return "invalid_params";
180
+ return "unknown";
181
+ }
182
+
183
+ /** Diagnostic sink. The mux never throws at its callers, so this is how failures surface. */
184
+ export type MuxLog = (level: "debug" | "info" | "warning", message: string) => void;
185
+
186
+ /** The three sounds `notification.show` accepts, per protocol 17's schema. */
187
+ export type MuxNotificationSound = "none" | "done" | "request";
188
+
189
+ /** What Clio reports about its own hosting pane in guest mode (SA-3). */
190
+ export interface MuxSelfReport {
191
+ state: MuxReportableAgentState;
192
+ /** Short human line herdr may show beside the state. */
193
+ message?: string;
194
+ /** Presentation tokens; a null value clears that token. */
195
+ tokens?: Readonly<Record<string, string | null>>;
196
+ /** Per-state sidebar label overrides, e.g. `{ blocked: "needs approval" }`. */
197
+ stateLabels?: Readonly<Record<string, string>>;
198
+ /** Expiry for this report's tokens, 1..86400000 ms. */
199
+ ttlMs?: number;
200
+ }
201
+
202
+ /**
203
+ * Why Clio created a pane. `watch` is the workers-view watch pane; everything
204
+ * else (presets, operator argv, the yazi companion) is `utility`. The purpose
205
+ * doubles as the pane's `role` metadata token so a restarted session can adopt
206
+ * a surviving watch pane by scanning one snapshot.
207
+ */
208
+ export type MuxPanePurpose = "watch" | "utility";
209
+
210
+ /** One pane Clio created and therefore may act on. */
211
+ export interface MuxPaneRecord {
212
+ ref: MuxPaneRef;
213
+ purpose: MuxPanePurpose;
214
+ label: string;
215
+ openedAt: number;
216
+ /**
217
+ * True when the record was adopted from a snapshot at boot rather than
218
+ * created in this process, so a resumed session reuses the pane it found
219
+ * instead of opening a second one.
220
+ */
221
+ adopted?: boolean;
222
+ }
@@ -0,0 +1,59 @@
1
+ /**
2
+ * What the workers-view watch pane runs.
3
+ *
4
+ * The argv is `node <this install's dist CLI> fleet view --watch <file>`
5
+ * rather than the `clio-coder` bin name. Resolving through PATH would run
6
+ * whatever copy of Clio the operator's PATH points at, which in a worktree or a
7
+ * multi-install machine is routinely not the one that opened the pane, and the
8
+ * viewer would then read a different install's state root. This is the same
9
+ * self-invocation shape `worker-spawn.ts:589` uses for the same reason.
10
+ *
11
+ * A per-run viewer command (`fleet view <runId> --follow`) used to live here
12
+ * for the per-dispatch viewer panes; those panes are gone, and the one pane
13
+ * that renders runs now follows a selection file so the TUI can retarget it
14
+ * without respawning anything.
15
+ */
16
+
17
+ import { join } from "node:path";
18
+ import { resolvePackageRoot } from "../../core/package-root.js";
19
+ import type { ClioDirs } from "../../core/xdg.js";
20
+
21
+ /** Built CLI entry point, matching the `bin` field in `package.json`. */
22
+ export function clioCliEntryPath(): string {
23
+ return join(resolvePackageRoot(), "dist/cli/index.js");
24
+ }
25
+
26
+ export interface ViewerCommandOptions {
27
+ /** Override for tests and for a caller that already resolved the entry. */
28
+ entryPath?: string;
29
+ /** Node binary to run it with; defaults to the one running this process. */
30
+ execPath?: string;
31
+ /** Exact parent-process layout; pinned on argv so a new pane cannot re-resolve it. */
32
+ dirs?: Readonly<ClioDirs>;
33
+ }
34
+
35
+ /** The argv the watch pane executes: one viewer process following a selection file. */
36
+ export function watchViewerCommand(selectionPath: string, options: ViewerCommandOptions = {}): ReadonlyArray<string> {
37
+ const layout =
38
+ options.dirs === undefined
39
+ ? []
40
+ : [
41
+ "--config-dir",
42
+ options.dirs.config,
43
+ "--data-dir",
44
+ options.dirs.data,
45
+ "--state-dir",
46
+ options.dirs.state,
47
+ "--cache-dir",
48
+ options.dirs.cache,
49
+ ];
50
+ return [
51
+ options.execPath ?? process.execPath,
52
+ options.entryPath ?? clioCliEntryPath(),
53
+ "fleet",
54
+ "view",
55
+ ...layout,
56
+ "--watch",
57
+ selectionPath,
58
+ ];
59
+ }
@@ -0,0 +1,2 @@
1
+ -- Yazi init for orchestration TUI
2
+ require("git"):setup()
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023 yazi-rs
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,78 @@
1
+ # git.yazi
2
+
3
+ Show the status of Git file changes as linemode in the file list.
4
+
5
+ https://github.com/user-attachments/assets/34976be9-a871-4ffe-9d5a-c4cdd0bf4576
6
+
7
+ ## Installation
8
+
9
+ ```sh
10
+ ya pkg add yazi-rs/plugins:git
11
+ ```
12
+
13
+ ## Setup
14
+
15
+ Add the following to your `~/.config/yazi/init.lua`:
16
+
17
+ ```lua
18
+ require("git"):setup()
19
+ ```
20
+
21
+ And register it as fetchers in your `~/.config/yazi/yazi.toml`:
22
+
23
+ ```toml
24
+ [[plugin.prepend_fetchers]]
25
+ id = "git"
26
+ url = "*"
27
+ run = "git"
28
+
29
+ [[plugin.prepend_fetchers]]
30
+ id = "git"
31
+ url = "*/"
32
+ run = "git"
33
+ ```
34
+
35
+ ## Advanced
36
+
37
+ > [!NOTE]
38
+ > The following configuration must be put before `require("git"):setup()`
39
+
40
+ You can customize the [Style](https://yazi-rs.github.io/docs/plugins/layout#style) of the status sign with:
41
+
42
+ - `th.git.modified`
43
+ - `th.git.added`
44
+ - `th.git.untracked`
45
+ - `th.git.ignored`
46
+ - `th.git.deleted`
47
+ - `th.git.updated`
48
+
49
+ For example:
50
+
51
+ ```lua
52
+ -- ~/.config/yazi/init.lua
53
+ th.git = th.git or {}
54
+ th.git.modified = ui.Style():fg("blue")
55
+ th.git.deleted = ui.Style():fg("red"):bold()
56
+ ```
57
+
58
+ You can also customize the text of the status sign with:
59
+
60
+ - `th.git.modified_sign`
61
+ - `th.git.added_sign`
62
+ - `th.git.untracked_sign`
63
+ - `th.git.ignored_sign`
64
+ - `th.git.deleted_sign`
65
+ - `th.git.updated_sign`
66
+
67
+ For example:
68
+
69
+ ```lua
70
+ -- ~/.config/yazi/init.lua
71
+ th.git = th.git or {}
72
+ th.git.modified_sign = "M"
73
+ th.git.deleted_sign = "D"
74
+ ```
75
+
76
+ ## License
77
+
78
+ This plugin is MIT-licensed. For more information check the [LICENSE](LICENSE) file.
@@ -0,0 +1,255 @@
1
+ --- @since 25.12.29
2
+
3
+ local WINDOWS = ya.target_family() == "windows"
4
+
5
+ -- The code of supported git status,
6
+ -- also used to determine which status to show for directories when they contain different statuses
7
+ -- see `bubble_up`
8
+ ---@enum CODES
9
+ local CODES = {
10
+ excluded = 100, -- ignored directory
11
+ ignored = 6, -- ignored file
12
+ untracked = 5,
13
+ modified = 4,
14
+ added = 3,
15
+ deleted = 2,
16
+ updated = 1,
17
+ unknown = 0,
18
+ }
19
+
20
+ local PATTERNS = {
21
+ { "!$", CODES.ignored },
22
+ { "?$", CODES.untracked },
23
+ { "[MT]", CODES.modified },
24
+ { "[AC]", CODES.added },
25
+ { "D", CODES.deleted },
26
+ { "U", CODES.updated },
27
+ { "[AD][AD]", CODES.updated },
28
+ }
29
+
30
+ ---@param line string
31
+ ---@return CODES, string
32
+ local function match(line)
33
+ local signs = line:sub(1, 2)
34
+ for _, p in ipairs(PATTERNS) do
35
+ local path, pattern, code = nil, p[1], p[2]
36
+ if signs:find(pattern) then
37
+ path = line:sub(4, 4) == '"' and line:sub(5, -2) or line:sub(4)
38
+ path = WINDOWS and path:gsub("/", "\\") or path
39
+ end
40
+ if not path then
41
+ elseif path:find("[/\\]$") then
42
+ -- Mark the ignored directory as `excluded`, so we can process it further within `propagate_down`
43
+ return code == CODES.ignored and CODES.excluded or code, path:sub(1, -2)
44
+ else
45
+ return code, path
46
+ end
47
+ ---@diagnostic disable-next-line: missing-return
48
+ end
49
+ end
50
+
51
+ ---@param cwd Url
52
+ ---@return string?
53
+ local function root(cwd)
54
+ local is_worktree = function(url)
55
+ local file, head = io.open(tostring(url)), nil
56
+ if file then
57
+ head = file:read(8)
58
+ file:close()
59
+ end
60
+ return head == "gitdir: "
61
+ end
62
+
63
+ repeat
64
+ local next = cwd:join(".git")
65
+ local cha = fs.cha(next)
66
+ if cha and (cha.is_dir or is_worktree(next)) then
67
+ return tostring(cwd)
68
+ end
69
+ cwd = cwd.parent
70
+ until not cwd
71
+ end
72
+
73
+ ---@param changed Changes
74
+ ---@return Changes
75
+ local function bubble_up(changed)
76
+ local new, empty = {}, Url("")
77
+ for path, code in pairs(changed) do
78
+ if code ~= CODES.ignored then
79
+ local url = Url(path).parent
80
+ while url and url ~= empty do
81
+ local s = tostring(url)
82
+ new[s] = (new[s] or CODES.unknown) > code and new[s] or code
83
+ url = url.parent
84
+ end
85
+ end
86
+ end
87
+ return new
88
+ end
89
+
90
+ ---@param excluded string[]
91
+ ---@param cwd Url
92
+ ---@param repo Url
93
+ ---@return Changes
94
+ local function propagate_down(excluded, cwd, repo)
95
+ local new, rel = {}, cwd:strip_prefix(repo)
96
+ for _, path in ipairs(excluded) do
97
+ if rel:starts_with(path) then
98
+ -- If `cwd` is a subdirectory of an excluded directory, also mark it as `excluded`
99
+ new[tostring(cwd)] = CODES.excluded
100
+ elseif cwd == repo:join(path).parent then
101
+ -- If `path` is a direct subdirectory of `cwd`, mark it as `ignored`
102
+ new[path] = CODES.ignored
103
+ else
104
+ -- Skipping, we only care about `cwd` itself and its direct subdirectories for maximum performance
105
+ end
106
+ end
107
+ return new
108
+ end
109
+
110
+ ---@param cwd string
111
+ ---@param repo string
112
+ ---@param changed Changes
113
+ local add = ya.sync(function(st, cwd, repo, changed)
114
+ ---@cast st State
115
+
116
+ st.dirs[cwd] = repo
117
+ st.repos[repo] = st.repos[repo] or {}
118
+ for path, code in pairs(changed) do
119
+ if code == CODES.unknown then
120
+ st.repos[repo][path] = nil
121
+ elseif code == CODES.excluded then
122
+ -- Mark the directory with a special value `excluded` so that it can be distinguished during UI rendering
123
+ st.dirs[path] = CODES.excluded
124
+ else
125
+ st.repos[repo][path] = code
126
+ end
127
+ end
128
+ ui.render()
129
+ end)
130
+
131
+ ---@param cwd string
132
+ local remove = ya.sync(function(st, cwd)
133
+ ---@cast st State
134
+
135
+ local repo = st.dirs[cwd]
136
+ if not repo then
137
+ return
138
+ end
139
+
140
+ ui.render()
141
+ st.dirs[cwd] = nil
142
+ if not st.repos[repo] then
143
+ return
144
+ end
145
+
146
+ for _, r in pairs(st.dirs) do
147
+ if r == repo then
148
+ return
149
+ end
150
+ end
151
+ st.repos[repo] = nil
152
+ end)
153
+
154
+ ---@param st State
155
+ ---@param opts Options
156
+ local function setup(st, opts)
157
+ st.dirs = {}
158
+ st.repos = {}
159
+
160
+ opts = opts or {}
161
+ opts.order = opts.order or 1500
162
+
163
+ local t = th.git or {}
164
+ local styles = {
165
+ [CODES.ignored] = t.ignored and ui.Style(t.ignored) or ui.Style():fg("darkgray"),
166
+ [CODES.untracked] = t.untracked and ui.Style(t.untracked) or ui.Style():fg("magenta"),
167
+ [CODES.modified] = t.modified and ui.Style(t.modified) or ui.Style():fg("yellow"),
168
+ [CODES.added] = t.added and ui.Style(t.added) or ui.Style():fg("green"),
169
+ [CODES.deleted] = t.deleted and ui.Style(t.deleted) or ui.Style():fg("red"),
170
+ [CODES.updated] = t.updated and ui.Style(t.updated) or ui.Style():fg("yellow"),
171
+ }
172
+ local signs = {
173
+ [CODES.ignored] = t.ignored_sign or " ",
174
+ [CODES.untracked] = t.untracked_sign or "? ",
175
+ [CODES.modified] = t.modified_sign or " ",
176
+ [CODES.added] = t.added_sign or " ",
177
+ [CODES.deleted] = t.deleted_sign or " ",
178
+ [CODES.updated] = t.updated_sign or " ",
179
+ }
180
+
181
+ Linemode:children_add(function(self)
182
+ if not self._file.in_current then
183
+ return ""
184
+ end
185
+
186
+ local url = self._file.url
187
+ local repo = st.dirs[tostring(url.base or url.parent)]
188
+ local code
189
+ if repo then
190
+ code = repo == CODES.excluded and CODES.ignored or st.repos[repo][tostring(url):sub(#repo + 2)]
191
+ end
192
+
193
+ if not code or signs[code] == "" then
194
+ return ""
195
+ elseif self._file.is_hovered then
196
+ return ui.Line { " ", signs[code] }
197
+ else
198
+ return ui.Line { " ", ui.Span(signs[code]):style(styles[code]) }
199
+ end
200
+ end, opts.order)
201
+ end
202
+
203
+ ---@type UnstableFetcher
204
+ local function fetch(_, job)
205
+ local cwd = job.files[1].url.base or job.files[1].url.parent
206
+ local repo = root(cwd)
207
+ if not repo then
208
+ remove(tostring(cwd))
209
+ return true
210
+ end
211
+
212
+ local paths = {}
213
+ for _, file in ipairs(job.files) do
214
+ paths[#paths + 1] = tostring(file.url)
215
+ end
216
+
217
+ -- stylua: ignore
218
+ local output, err = Command("git")
219
+ :cwd(tostring(cwd))
220
+ :arg({ "--no-optional-locks", "-c", "core.quotePath=", "status", "--porcelain", "-unormal", "--no-renames", "--ignored=matching" })
221
+ :arg(paths)
222
+ :stdout(Command.PIPED)
223
+ :output()
224
+ if not output then
225
+ return true, Err("Cannot spawn `git` command, error: %s", err)
226
+ end
227
+
228
+ local changed, excluded = {}, {}
229
+ for line in output.stdout:gmatch("[^\r\n]+") do
230
+ local code, path = match(line)
231
+ if code == CODES.excluded then
232
+ excluded[#excluded + 1] = path
233
+ else
234
+ changed[path] = code
235
+ end
236
+ end
237
+
238
+ if job.files[1].cha.is_dir then
239
+ ya.dict_merge(changed, bubble_up(changed))
240
+ end
241
+ ya.dict_merge(changed, propagate_down(excluded, cwd, Url(repo)))
242
+
243
+ -- Reset the status of any files that don't appear in the output of `git status` to `unknown`,
244
+ -- so that cleaning up outdated statuses from `st.repos`
245
+ for _, path in ipairs(paths) do
246
+ local s = path:sub(#repo + 2)
247
+ changed[s] = changed[s] or CODES.unknown
248
+ end
249
+
250
+ add(tostring(cwd), repo, changed)
251
+
252
+ return false
253
+ end
254
+
255
+ return { setup = setup, fetch = fetch }
@@ -0,0 +1,12 @@
1
+ ---@class State
2
+ ---@field dirs table<string, string|CODES> Mapping between a directory and its corresponding repository
3
+ ---@field repos table<string, Changes> Mapping between a repository and the status of each of its files
4
+
5
+ ---@class Options
6
+ ---@field order number The order in which the status is displayed
7
+ ---@field renamed boolean Whether to include renamed files in the status (or treat them as modified)
8
+
9
+ -- TODO: move this to `types.yazi` once it's get stable
10
+ ---@alias UnstableFetcher fun(self: unknown, job: { files: File[] }): boolean, Error?
11
+
12
+ ---@alias Changes table<string, CODES>
@@ -0,0 +1,17 @@
1
+ # Yazi config for orchestration TUI
2
+ # Git status integration
3
+
4
+ [mgr]
5
+ show_hidden = true
6
+
7
+ [[plugin.prepend_fetchers]]
8
+ id = "git"
9
+ group = "git"
10
+ url = "*"
11
+ run = "git"
12
+
13
+ [[plugin.prepend_fetchers]]
14
+ id = "git"
15
+ group = "git"
16
+ url = "*/"
17
+ run = "git"