@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.
- package/CHANGELOG.md +102 -0
- package/NOTICE +33 -0
- package/README.md +12 -3
- package/dist/{acp-U67UHUK2.js → acp-G5WJBNCT.js} +13 -12
- package/dist/{agents-YU6SGALZ.js → agents-FMV2Q5G4.js} +41 -36
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-5ZPJOIVG.js → auth-3IDSJEIK.js} +18 -18
- package/dist/{builtins-C6JMZVV6.js → builtins-XCZWXSC7.js} +5 -5
- package/dist/{chunk-IFBNV6H6.js → chunk-2ANTL7MR.js} +3 -3
- package/dist/{chunk-5FR74PWO.js → chunk-2JDWVJND.js} +2 -2
- package/dist/{chunk-XWSF374K.js → chunk-2OQE55CK.js} +3 -3
- package/dist/{chunk-5H3GB5BO.js → chunk-32KWKNSF.js} +8 -384
- package/dist/{chunk-KTYTFRMB.js → chunk-36EJLSQQ.js} +34 -36
- package/dist/{chunk-FHJEP5SW.js → chunk-3BT2XMV4.js} +19 -13
- package/dist/chunk-3DPEIQKN.js +113 -0
- package/dist/{chunk-GU2UIAFZ.js → chunk-3URVFKWK.js} +7 -7
- package/dist/{chunk-WEH5XRJQ.js → chunk-3XML7CDN.js} +3 -3
- package/dist/chunk-42FMPA75.js +101 -0
- package/dist/{chunk-A2NJGIB3.js → chunk-5LXZXPKX.js} +2 -2
- package/dist/{chunk-VCBR6CU7.js → chunk-5PSMVOLM.js} +2 -2
- package/dist/{chunk-NMPKI6XL.js → chunk-6DB53AJS.js} +203 -25
- package/dist/{chunk-3BINW3FP.js → chunk-76ONBSIA.js} +2 -2
- package/dist/{chunk-26LEYJZH.js → chunk-7MCTRUCE.js} +2 -2
- package/dist/{chunk-TYPGUK6W.js → chunk-AB44T6BB.js} +111 -5
- package/dist/{chunk-K4XHGFR5.js → chunk-B7OBL7PK.js} +317 -721
- package/dist/{chunk-B5CSFE7B.js → chunk-BBVJUZHB.js} +2 -2
- package/dist/{chunk-EQ63NRB7.js → chunk-BBVYXMFO.js} +2 -2
- package/dist/{chunk-ZVJ5BLO2.js → chunk-BKFJHQCA.js} +154 -16
- package/dist/chunk-BKFM6EJV.js +462 -0
- package/dist/chunk-BMS5RKQY.js +27 -0
- package/dist/{chunk-ZNLWCMVZ.js → chunk-BPKCPIL7.js} +2 -2
- package/dist/{chunk-TLQJPP24.js → chunk-BUMFYQFY.js} +1394 -1349
- package/dist/{chunk-BNAZZHFG.js → chunk-BYP5D4HI.js} +1 -1
- package/dist/chunk-C2LTL2W6.js +2447 -0
- package/dist/{chunk-ME6CCNFO.js → chunk-CODPRO7Q.js} +8 -8
- package/dist/{chunk-E77JEWSD.js → chunk-CTJ4RNAA.js} +7 -37
- package/dist/{chunk-ODFEOB4F.js → chunk-CY6FY24N.js} +26 -8
- package/dist/{chunk-7RFXX52T.js → chunk-DQITNCXG.js} +642 -172
- package/dist/{chunk-TTHACPOM.js → chunk-DYJP44XW.js} +578 -117
- package/dist/{chunk-2HFZQUHL.js → chunk-F4CKPOEQ.js} +18 -8
- package/dist/{chunk-DGSYXYMX.js → chunk-FEFIFZTL.js} +3 -3
- package/dist/{chunk-GWS3VEIW.js → chunk-FWDFM5ZU.js} +24 -3
- package/dist/{chunk-MV3K5QF2.js → chunk-GCSMB2KY.js} +2 -2
- package/dist/chunk-GKF55TAZ.js +391 -0
- package/dist/{chunk-VWZOAB7K.js → chunk-GR5G2PVF.js} +9 -8
- package/dist/{chunk-4DGYLA73.js → chunk-GXNLGKAB.js} +80 -9
- package/dist/chunk-HHV2GANA.js +88 -0
- package/dist/{chunk-IIZWH4XA.js → chunk-HI63TFOG.js} +5 -4
- package/dist/{chunk-WLFILSD5.js → chunk-HJJTYUHX.js} +113 -83
- package/dist/{chunk-TT36MB5S.js → chunk-HLW2MRKE.js} +3 -1
- package/dist/{chunk-PMDBGQSJ.js → chunk-HWHKMHUA.js} +7 -7
- package/dist/chunk-HZHHCK24.js +1631 -0
- package/dist/{chunk-WSB3FPX7.js → chunk-I5VEOC6I.js} +39 -143
- package/dist/chunk-IBEBSCYA.js +564 -0
- package/dist/chunk-IQ7KR472.js +362 -0
- package/dist/{chunk-A3WNZD3P.js → chunk-J4W7KFM7.js} +949 -972
- package/dist/{chunk-TB5666IT.js → chunk-JDG2WCRO.js} +5 -5
- package/dist/{chunk-N22QMJKY.js → chunk-K5C3NCBD.js} +4 -4
- package/dist/{chunk-CGKSTWHD.js → chunk-K6BSR66V.js} +2 -1
- package/dist/{chunk-5C3AQNDW.js → chunk-KFZI4NIL.js} +216 -38
- package/dist/chunk-KMVISBZR.js +132 -0
- package/dist/{chunk-WXY7KU3G.js → chunk-LDQ2ZF2M.js} +2 -2
- package/dist/{chunk-XN3L4EYL.js → chunk-LQ3DZAMX.js} +3 -3
- package/dist/{chunk-U6MBIEMB.js → chunk-LY4S7GJC.js} +173 -144
- package/dist/{chunk-4SPRNWDE.js → chunk-MLKNTWH2.js} +19 -19
- package/dist/{chunk-MVVUPGPW.js → chunk-MXHC5QYU.js} +6 -6
- package/dist/chunk-NEKRRTYW.js +56 -0
- package/dist/{chunk-SPULKLCF.js → chunk-NHCZP4K7.js} +3 -3
- package/dist/chunk-NHLBIGRH.js +1506 -0
- package/dist/chunk-NQQH3YT7.js +302 -0
- package/dist/chunk-NYS75XW5.js +15 -0
- package/dist/{chunk-GN57SG4G.js → chunk-O4XIVISU.js} +10 -8
- package/dist/{chunk-EMYUUSFG.js → chunk-O6TL7WWY.js} +6 -6
- package/dist/chunk-OQBA45DZ.js +97 -0
- package/dist/{chunk-LU7P4LHA.js → chunk-P3FOHJT4.js} +2 -2
- package/dist/chunk-PMZCIOCJ.js +25 -0
- package/dist/{chunk-I4HZDVNP.js → chunk-PQEFIJ36.js} +2 -2
- package/dist/{chunk-J3YUBZWY.js → chunk-QBJA7R7N.js} +62 -6
- package/dist/chunk-QDC3K2U3.js +262 -0
- package/dist/{chunk-2HEJ2F35.js → chunk-QLFS5GO2.js} +22 -10
- package/dist/{chunk-7RGZWPB6.js → chunk-QLL7ILRG.js} +95 -32
- package/dist/{chunk-YS5VLNH5.js → chunk-QREDIESB.js} +6 -6
- package/dist/chunk-QSNYB6ZV.js +195 -0
- package/dist/{chunk-GOXNB3AO.js → chunk-RAPCMZL4.js} +75 -4
- package/dist/chunk-RKKLTLYB.js +45 -0
- package/dist/{chunk-P43ETTHK.js → chunk-SJ5ZKQ4S.js} +2 -2
- package/dist/{chunk-GPIEI3LY.js → chunk-SP2RXXYO.js} +6 -54
- package/dist/chunk-SUCTJL45.js +45 -0
- package/dist/{chunk-DYIM5TJT.js → chunk-SUW5DORT.js} +263 -7
- package/dist/chunk-T56WDKA5.js +183 -0
- package/dist/chunk-TVHHYFHE.js +255 -0
- package/dist/{chunk-FJ3H4MN5.js → chunk-TZ3SGWZZ.js} +3 -3
- package/dist/{chunk-MXKJU4JB.js → chunk-U77AMWDL.js} +91 -10
- package/dist/{chunk-5DHKRSMQ.js → chunk-ULC6OTWO.js} +11 -7
- package/dist/{chunk-RWSI4YD7.js → chunk-UM7N4G5A.js} +33 -12
- package/dist/{chunk-FCSXB6T2.js → chunk-UOSL25KY.js} +14 -2
- package/dist/{chunk-IGWKHNIQ.js → chunk-UXMFQ54G.js} +44 -37
- package/dist/{chunk-HFSBBKSQ.js → chunk-V5DHCITQ.js} +171 -3
- package/dist/{chunk-5WIGXA4T.js → chunk-VAZSBTKF.js} +111 -4
- package/dist/{chunk-VHN4MY6O.js → chunk-VEO4AP2K.js} +2 -2
- package/dist/{chunk-IJ7RPIYJ.js → chunk-VFA6GDY5.js} +65 -4
- package/dist/{chunk-PT7HYKEM.js → chunk-VO2LKSTM.js} +2 -2
- package/dist/chunk-VO67MWHC.js +75 -0
- package/dist/{chunk-XK56QHLX.js → chunk-VPKWYKEY.js} +19 -5
- package/dist/{chunk-TANS5ZJS.js → chunk-VYMXRQI6.js} +36 -22
- package/dist/{chunk-WWCZ5F23.js → chunk-W5VSYASO.js} +77 -16
- package/dist/{chunk-WNIJTQQK.js → chunk-WZR7K7ZX.js} +72 -116
- package/dist/{chunk-5Q2VVUKB.js → chunk-X3YGUTOB.js} +4 -4
- package/dist/chunk-X75E3D2N.js +686 -0
- package/dist/{chunk-VAWNZU7Z.js → chunk-YDFRH54B.js} +4 -4
- package/dist/chunk-YJX4SHTD.js +40 -0
- package/dist/{chunk-ZI647VB5.js → chunk-YPI3QQCF.js} +2 -2
- package/dist/chunk-Z2RR6MAK.js +127 -0
- package/dist/{chunk-FBVTI2TJ.js → chunk-Z4TXYIEG.js} +12 -131
- package/dist/cli/index.js +47 -36
- package/dist/{clio-QVTYJ57A.js → clio-2JXHBBY5.js} +7 -7
- package/dist/{code-nav-FGGFIE7L.js → code-nav-3YYRMYNF.js} +8 -8
- package/dist/{compile-cache-CVJMMODC.js → compile-cache-7FPE6PS3.js} +3 -3
- package/dist/{components-ZFA3SAER.js → components-RYZV4JGP.js} +5 -5
- package/dist/{config-LW5IJFQN.js → config-QZPCMYSO.js} +99 -63
- package/dist/{configure-7XIZCOU4.js → configure-TEGEBYCA.js} +23 -22
- package/dist/{context-Y6Y7QPR6.js → context-AV7OEZ4D.js} +12 -12
- package/dist/{context-L3WL3X7K.js → context-E6H5RNMC.js} +56 -47
- package/dist/{context-N52ZA626.js → context-GSXUE4CT.js} +29 -27
- package/dist/{context-clear-MBQRLSDQ.js → context-clear-SHIBYK6T.js} +55 -46
- package/dist/{context-index-HVMFQHK3.js → context-index-HNG3MOME.js} +2 -2
- package/dist/{context-working-set-GS6DSO7F.js → context-working-set-5ZGKPGZQ.js} +13 -13
- package/dist/{dispatch-runner-22ZCNOM3.js → dispatch-runner-EFMJT4LD.js} +93 -64
- package/dist/{docs-7LQ23DLM.js → docs-23KQS3XK.js} +5 -5
- package/dist/doctor-QOA5FNY5.js +313 -0
- package/dist/{eval-BEC2WHDA.js → eval-TFBYQH4H.js} +2032 -156
- package/dist/eval-inventory-SXH7PDKX.js +316 -0
- package/dist/{evidence-REJUMSKM.js → evidence-ERGESKGN.js} +203 -48
- package/dist/{evolve-PY5ZBA5K.js → evolve-VDXTSYCJ.js} +52 -43
- package/dist/{extensions-HVKU65YU.js → extensions-7BGBHN57.js} +13 -7
- package/dist/{fleet-7WZEWRFA.js → fleet-2RRVDF2V.js} +228 -108
- package/dist/{fleet-commands-UVHWM76J.js → fleet-commands-VJ726XIA.js} +11 -11
- package/dist/fleet-decisions-EPAPM3XJ.js +157 -0
- package/dist/{fleet-graph-6ULH7PES.js → fleet-graph-JF5QOATM.js} +18 -15
- package/dist/fleet-inspect-VLY4S7QM.js +442 -0
- package/dist/{fleet-preflight-J53T6CCE.js → fleet-preflight-AIZUEJOY.js} +5 -5
- package/dist/{fleet-validate-72PC4SLA.js → fleet-validate-AJRPDMDV.js} +22 -19
- package/dist/fleet-verify-JFEL2L3H.js +175 -0
- package/dist/fleet-view-ZCON35AG.js +102 -0
- package/dist/{init-OG3TPGQG.js → init-DN2WWLFE.js} +72 -62
- package/dist/install-XGLBQY5E.js +13 -0
- package/dist/interop-OZBKXAYL.js +114 -0
- package/dist/{library-CNTMPLRF.js → library-YWZG7IMW.js} +21 -18
- package/dist/{memory-6IS7F275.js → memory-I4C4HMLW.js} +54 -45
- package/dist/{models-ENRJDA5W.js → models-CEYXJBO6.js} +33 -30
- package/dist/{monitor-XLDVO7TN.js → monitor-NZ6GCI3P.js} +59 -52
- package/dist/{orchestrator-6KSPYRHA.js → orchestrator-GCGQ4N5I.js} +7827 -7328
- package/dist/panes-HMABYVO4.js +58 -0
- package/dist/panes-KY6W3V2E.js +103 -0
- package/dist/{paths-DBXMZMDU.js → paths-II4K7DNR.js} +5 -5
- package/dist/{reset-RZ4ER727.js → reset-DQ6FGCSH.js} +13 -11
- package/dist/resources-BB3MVJMD.js +111 -0
- package/dist/{run-Y2CNK5RU.js → run-H2GQDUER.js} +119 -87
- package/dist/{share-A55GYP6Z.js → share-GTJN6A5O.js} +20 -17
- package/dist/{skills-ALC5J6AT.js → skills-L55TEW6R.js} +33 -24
- package/dist/{skills-eval-JPBEBYQU.js → skills-eval-XVXPH2JI.js} +67 -56
- package/dist/skills-inventory-S4MXPJFV.js +126 -0
- package/dist/slash-commands-ZSGASKJC.js +77 -0
- package/dist/{steer-GGWFUJUD.js → steer-RZGSCY4R.js} +4 -4
- package/dist/{support-MIETYA5E.js → support-PKEUNNQL.js} +6 -6
- package/dist/{targets-VGNXIR3S.js → targets-NCPZ644J.js} +68 -40
- package/dist/{terminal-lease-WOBR64YA.js → terminal-lease-44SV3YCN.js} +6 -4
- package/dist/tools-DAF3DI3C.js +27 -0
- package/dist/{trace-PNCASAXC.js → trace-FYVW2MQA.js} +207 -10
- package/dist/tui-primitives-2AKXQNZK.js +13 -0
- package/dist/{uninstall-ZJF5H5ZN.js → uninstall-DW2PNOIC.js} +5 -5
- package/dist/{upgrade-FUSUAGHR.js → upgrade-3XPP6OQL.js} +27 -24
- package/dist/{usage-N4MKVHKD.js → usage-3NLHGTU2.js} +114 -62
- package/dist/{verifiers-YAWOJ3H2.js → verifiers-SSQONKRT.js} +172 -13
- package/dist/{verify-LTDHYBGY.js → verify-3U6J7FZI.js} +10 -10
- package/dist/{web-fetch-2YHJ3KTG.js → web-fetch-S7RR6GZ7.js} +3 -3
- package/dist/{wiki-generate-6M7GHTBJ.js → wiki-generate-CEHYGPGQ.js} +75 -65
- package/dist/with-panes-MKB46MPQ.js +782 -0
- package/dist/worker/entry.js +106 -75
- package/docs/README.md +3 -2
- package/docs/acp.md +24 -3
- package/docs/alcf-provider.md +1 -1
- package/docs/architecture.md +2 -2
- package/docs/artifact-versions.md +9 -1
- package/docs/built-in-agents.md +1 -1
- package/docs/capacity-and-scheduling.md +62 -3
- package/docs/commands-and-modes.md +31 -2
- package/docs/configuration-and-targets.md +69 -12
- package/docs/context-engine.md +63 -4
- package/docs/development-pipeline.md +19 -0
- package/docs/dispatch-typed-intent.md +385 -0
- package/docs/documentation-coverage.md +5 -5
- package/docs/documentation-guide.md +1 -1
- package/docs/environment-variables.md +3 -0
- package/docs/eval-runner.md +262 -11
- package/docs/evals-internal.md +72 -2
- package/docs/evidence-and-memory.md +12 -11
- package/docs/evolution.md +1 -1
- package/docs/exit-codes-and-output.md +1 -1
- package/docs/extensions-and-sharing.md +27 -1
- package/docs/fleet-dispatch.md +25 -4
- package/docs/installation-and-lifecycle.md +15 -2
- package/docs/middleware-and-components.md +1 -1
- package/docs/model-catalog.md +10 -1
- package/docs/observability.md +55 -4
- package/docs/proactive-memory.md +127 -14
- package/docs/prompt-envelope-and-tools.md +19 -1
- package/docs/provider-adapter-cookbook.md +1 -1
- package/docs/release-cut-checklist.md +19 -3
- package/docs/safety-model.md +2 -2
- package/docs/scientific-validation.md +3 -3
- package/docs/session-lifecycle.md +1 -1
- package/docs/skills-marketplace.md +1 -1
- package/docs/tool-usage.md +18 -8
- package/docs/trace-store.md +1 -1
- package/docs/troubleshooting.md +88 -1
- package/docs/tui-design.md +1 -1
- package/docs/worker-dispatch-mechanics.md +1 -1
- package/package.json +5 -2
- package/src/cli/acp.ts +6 -2
- package/src/cli/agents.ts +1 -1
- package/src/cli/argv.ts +25 -0
- package/src/cli/config-inspect.ts +33 -6
- package/src/cli/config.ts +1 -1
- package/src/cli/configure.ts +23 -21
- package/src/cli/doctor-panes.ts +124 -0
- package/src/cli/doctor-state-size.ts +82 -0
- package/src/cli/doctor-toolchain.ts +57 -0
- package/src/cli/doctor.ts +22 -1
- package/src/cli/eval-inventory.ts +436 -0
- package/src/cli/eval.ts +93 -16
- package/src/cli/evidence-detail.ts +88 -0
- package/src/cli/evidence-inventory.ts +183 -0
- package/src/cli/evidence.ts +30 -5
- package/src/cli/extensions.ts +5 -1
- package/src/cli/fleet-decisions.ts +69 -0
- package/src/cli/fleet-inspect.ts +334 -0
- package/src/cli/fleet-verify.ts +133 -0
- package/src/cli/fleet-view.ts +810 -0
- package/src/cli/fleet.ts +179 -39
- package/src/cli/index.ts +14 -2
- package/src/cli/interop-inspect.ts +128 -0
- package/src/cli/interop.ts +34 -0
- package/src/cli/panes.ts +35 -0
- package/src/cli/reset.ts +5 -2
- package/src/cli/run.ts +58 -0
- package/src/cli/skills-inventory.ts +185 -0
- package/src/cli/skills.ts +16 -13
- package/src/cli/targets.ts +44 -13
- package/src/cli/tools.ts +321 -0
- package/src/cli/trace-inspect.ts +252 -0
- package/src/cli/trace.ts +85 -5
- package/src/cli/usage.ts +63 -14
- package/src/cli/verifiers-inspect.ts +347 -0
- package/src/cli/verifiers.ts +9 -0
- package/src/core/bus-events.ts +33 -1
- package/src/core/cache-telemetry.ts +42 -0
- package/src/core/config.ts +67 -0
- package/src/core/defaults.ts +124 -8
- package/src/core/endpoint-key.ts +27 -0
- package/src/core/residency-target-key.ts +25 -0
- package/src/core/response-schema.ts +80 -6
- package/src/core/theme-token-hex.ts +43 -0
- package/src/core/tool-names.ts +2 -1
- package/src/core/xdg.ts +1 -1
- package/src/domains/agents/fleets/build-review.md +0 -3
- package/src/domains/agents/fleets/build-test.md +0 -3
- package/src/domains/agents/result-contract-filesystem.ts +32 -0
- package/src/domains/agents/result-contract.ts +164 -35
- package/src/domains/config/classify.ts +6 -0
- package/src/domains/context/codewiki/coordinator.ts +12 -4
- package/src/domains/dispatch/admission-error.ts +9 -0
- package/src/domains/dispatch/admission.ts +52 -14
- package/src/domains/dispatch/capacity-lease.ts +118 -9
- package/src/domains/dispatch/contract.ts +11 -0
- package/src/domains/dispatch/council-topology.ts +398 -0
- package/src/domains/dispatch/execution-plan.ts +44 -4
- package/src/domains/dispatch/extension.ts +378 -82
- package/src/domains/dispatch/fleet-node-prompt.ts +62 -0
- package/src/domains/dispatch/fleet-plan.ts +7 -2
- package/src/domains/dispatch/fleet-run.ts +87 -4
- package/src/domains/dispatch/gate-decisions.ts +11 -1
- package/src/domains/dispatch/gate-role-prompts.ts +9 -0
- package/src/domains/dispatch/gate-topology.ts +289 -0
- package/src/domains/dispatch/heartbeat.ts +32 -8
- package/src/domains/dispatch/index.ts +22 -0
- package/src/domains/dispatch/intent-compatibility.ts +330 -0
- package/src/domains/dispatch/intent.ts +85 -1
- package/src/domains/dispatch/orphan-recovery.ts +5 -0
- package/src/domains/dispatch/reservation-store.ts +139 -11
- package/src/domains/dispatch/run-event-journal-bridge.ts +149 -0
- package/src/domains/dispatch/run-event-journal.ts +598 -0
- package/src/domains/dispatch/state.ts +49 -1
- package/src/domains/dispatch/types.ts +13 -0
- package/src/domains/dispatch/validation.ts +33 -8
- package/src/domains/dispatch/worker-spawn.ts +25 -11
- package/src/domains/dispatch/write-boundary-enforcer.ts +20 -3
- package/src/domains/dispatch/write-boundary.ts +62 -1
- package/src/domains/eval/artifacts/store.ts +62 -0
- package/src/domains/eval/compare/behavioral.ts +224 -0
- package/src/domains/eval/compare/compare.ts +342 -2
- package/src/domains/eval/compare/envelope.ts +128 -0
- package/src/domains/eval/compare/gates.ts +24 -6
- package/src/domains/eval/compare/thresholds.ts +30 -3
- package/src/domains/eval/execution-provenance.ts +240 -0
- package/src/domains/eval/inventory.ts +113 -0
- package/src/domains/eval/metrics/aggregate.ts +136 -0
- package/src/domains/eval/metrics/call-ledger-stream.ts +112 -0
- package/src/domains/eval/metrics/tracked.ts +413 -0
- package/src/domains/eval/provenance.ts +117 -0
- package/src/domains/eval/reports/comparison.ts +128 -0
- package/src/domains/eval/reports/junit.ts +17 -3
- package/src/domains/eval/reports/markdown.ts +3 -3
- package/src/domains/eval/reports/text.ts +14 -0
- package/src/domains/eval/run-compare.ts +20 -0
- package/src/domains/eval/runners/clio-run.ts +127 -0
- package/src/domains/eval/runners/external-command.ts +28 -3
- package/src/domains/eval/schema/adapter.ts +111 -0
- package/src/domains/eval/schema/artifact.ts +20 -0
- package/src/domains/eval/schema/behavioral-metrics.ts +204 -0
- package/src/domains/eval/schema/behavioral.ts +520 -0
- package/src/domains/eval/schema/execution-envelope.ts +194 -0
- package/src/domains/eval/schema/serving.ts +105 -0
- package/src/domains/eval/schema/suite.ts +38 -8
- package/src/domains/eval/schema/validate.ts +58 -3
- package/src/domains/eval/schema/verdict.ts +237 -0
- package/src/domains/eval/suites/resolve.ts +2 -0
- package/src/domains/eval/suites/run.ts +264 -33
- package/src/domains/eval/verifiers/command.ts +2 -1
- package/src/domains/eval/workspaces/temp-copy.ts +145 -13
- package/src/domains/evidence/build.ts +2 -13
- package/src/domains/evidence/eval.ts +2 -12
- package/src/domains/evidence/findings-markdown.ts +33 -0
- package/src/domains/evidence/run-trust.ts +7 -113
- package/src/domains/evidence/store.ts +6 -0
- package/src/domains/evidence/trust-projection.ts +2 -2
- package/src/domains/extensions/compatibility.ts +285 -0
- package/src/domains/extensions/discovery.ts +38 -3
- package/src/domains/extensions/resources.ts +1 -1
- package/src/domains/extensions/state.ts +12 -3
- package/src/domains/extensions/types.ts +2 -0
- package/src/domains/lifecycle/doctor.ts +69 -1
- package/src/domains/memory/index.ts +14 -1
- package/src/domains/memory/task-bank-promotion.ts +64 -0
- package/src/domains/memory/task-memory-policy.ts +82 -17
- package/src/domains/memory/task-memory-spend.ts +131 -0
- package/src/domains/memory/task-memory-status.ts +7 -0
- package/src/domains/memory/task-memory-telemetry.ts +3 -0
- package/src/domains/middleware/index.ts +1 -0
- package/src/domains/middleware/memory-intervention.ts +97 -21
- package/src/domains/middleware/memory-step-endpoint.ts +71 -0
- package/src/domains/mux/contract.ts +434 -0
- package/src/domains/mux/detect.ts +158 -0
- package/src/domains/mux/extension.ts +47 -0
- package/src/domains/mux/index.ts +96 -0
- package/src/domains/mux/manifest.ts +6 -0
- package/src/domains/mux/operations.ts +164 -0
- package/src/domains/mux/pane-registry.ts +90 -0
- package/src/domains/mux/protocol.ts +49 -0
- package/src/domains/mux/socket-client.ts +816 -0
- package/src/domains/mux/types.ts +222 -0
- package/src/domains/mux/viewer-command.ts +59 -0
- package/src/domains/mux/yazi/assets/init.lua +2 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/LICENSE +21 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/README.md +78 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/main.lua +255 -0
- package/src/domains/mux/yazi/assets/plugins/git.yazi/types.lua +12 -0
- package/src/domains/mux/yazi/assets/yazi.toml +17 -0
- package/src/domains/mux/yazi/event-stream.ts +180 -0
- package/src/domains/mux/yazi/profile.ts +299 -0
- package/src/domains/mux/yazi/session.ts +228 -0
- package/src/domains/mux/yazi/theme.ts +30 -0
- package/src/domains/observability/background-memory-usage.ts +140 -0
- package/src/domains/observability/cost.ts +22 -1
- package/src/domains/observability/index.ts +9 -0
- package/src/domains/observability/out-of-turn-usage.ts +51 -2
- package/src/domains/observability/trace-store.ts +234 -2
- package/src/domains/prompts/compiler.ts +100 -13
- package/src/domains/providers/endpoint-capacity.ts +228 -0
- package/src/domains/providers/endpoint-slots-store.ts +189 -0
- package/src/domains/providers/extension.ts +20 -3
- package/src/domains/providers/index.ts +32 -0
- package/src/domains/providers/model-runtime-capabilities.ts +32 -0
- package/src/domains/providers/models/local-models/clio-local-coding-targets.yaml +243 -1
- package/src/domains/providers/runtime-resolution.ts +8 -1
- package/src/domains/providers/runtimes/boot-manifest.ts +1 -0
- package/src/domains/providers/runtimes/builtins.ts +2 -0
- package/src/domains/providers/runtimes/common/probe-helpers.ts +31 -9
- package/src/domains/providers/runtimes/local-native/llamacpp-anthropic.ts +1 -1
- package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +1 -1
- package/src/domains/providers/runtimes/local-native/llamacpp-embed.ts +1 -1
- package/src/domains/providers/runtimes/local-native/llamacpp-rerank.ts +1 -1
- package/src/domains/providers/runtimes/local-native/llamacpp.ts +4 -1
- package/src/domains/providers/runtimes/local-native/lmstudio.ts +4 -1
- package/src/domains/providers/runtimes/local-native/ollama-native.ts +6 -1
- package/src/domains/providers/runtimes/protocol/litellm.ts +375 -0
- package/src/domains/providers/support.ts +1 -0
- package/src/domains/providers/target-model-cache.ts +124 -0
- package/src/domains/providers/types/capability-flags.ts +2 -0
- package/src/domains/providers/types/target-descriptor.ts +2 -0
- package/src/domains/resources/index.ts +3 -0
- package/src/domains/resources/prompts/loader.ts +95 -33
- package/src/domains/resources/skills/loader.ts +33 -0
- package/src/domains/safety/action-classifier.ts +6 -0
- package/src/domains/safety/call-target.ts +52 -0
- package/src/domains/safety/run-effects.ts +35 -4
- package/src/domains/session/context-accounting.ts +52 -1
- package/src/domains/session/context-ledger.ts +37 -13
- package/src/domains/session/index.ts +6 -0
- package/src/domains/session/prompt-cache.ts +140 -0
- package/src/domains/session/prompt-manifest.ts +42 -0
- package/src/domains/toolchain/archive.ts +175 -0
- package/src/domains/toolchain/contract.ts +28 -0
- package/src/domains/toolchain/extension.ts +47 -0
- package/src/domains/toolchain/index.ts +39 -0
- package/src/domains/toolchain/install.ts +327 -0
- package/src/domains/toolchain/manifest.ts +8 -0
- package/src/domains/toolchain/paths.ts +34 -0
- package/src/domains/toolchain/registry.ts +265 -0
- package/src/domains/toolchain/remove.ts +218 -0
- package/src/domains/toolchain/resolve.ts +182 -0
- package/src/domains/toolchain/types.ts +113 -0
- package/src/domains/toolchain/version.ts +88 -0
- package/src/engine/acp/adapter.ts +18 -3
- package/src/engine/acp/server.ts +413 -70
- package/src/engine/acp/types.ts +19 -1
- package/src/engine/ai.ts +35 -0
- package/src/engine/apis/llamacpp-residency.ts +55 -3
- package/src/engine/apis/lmstudio.ts +25 -5
- package/src/engine/apis/ollama-native.ts +2 -1
- package/src/engine/apis/openai-completions.ts +80 -17
- package/src/engine/apis/residency-lock.ts +3 -1
- package/src/engine/apis/residency.ts +34 -1
- package/src/engine/claude/sdk-module.ts +98 -0
- package/src/engine/claude/sdk-runtime.ts +19 -11
- package/src/engine/provider-payload.ts +29 -1
- package/src/engine/tui-primitives.ts +21 -0
- package/src/engine/tui.ts +1 -0
- package/src/engine/worker-runtime.ts +2 -13
- package/src/entry/boot-options.ts +2 -0
- package/src/entry/orchestrator.ts +279 -35
- package/src/entry/panes-activation.ts +31 -0
- package/src/entry/with-panes.ts +20 -0
- package/src/interactive/chat-loop-messages.ts +26 -7
- package/src/interactive/chat-loop.ts +318 -41
- package/src/interactive/chat-panel.ts +62 -8
- package/src/interactive/clio-editor.ts +45 -8
- package/src/interactive/context-activity.ts +5 -1
- package/src/interactive/context-meter.ts +1 -1
- package/src/interactive/context-overlay.ts +41 -10
- package/src/interactive/cost-overlay.ts +66 -6
- package/src/interactive/council-grid.ts +1 -3
- package/src/interactive/council.ts +11 -0
- package/src/interactive/dispatch-board.ts +102 -20
- package/src/interactive/fleet-run-preview.ts +41 -15
- package/src/interactive/handoff-round.ts +41 -2
- package/src/interactive/interactive-application.ts +177 -7
- package/src/interactive/interactive-input-runtime.ts +15 -0
- package/src/interactive/interactive-presentation.ts +4 -0
- package/src/interactive/interactive-shell.ts +20 -17
- package/src/interactive/interactive-slash-runtime.ts +63 -10
- package/src/interactive/memory-overlay.ts +9 -0
- package/src/interactive/modal-marker.ts +170 -0
- package/src/interactive/mutation-preview.ts +295 -0
- package/src/interactive/mux-bridge.ts +214 -0
- package/src/interactive/overlay-frame.ts +58 -2
- package/src/interactive/overlay-general-openers.ts +17 -0
- package/src/interactive/overlay-key-routing.ts +52 -3
- package/src/interactive/overlay-lifecycle.ts +56 -7
- package/src/interactive/overlay-model-selectors.ts +40 -3
- package/src/interactive/overlay-permission-lifecycle.ts +112 -24
- package/src/interactive/overlay-session-lifecycle.ts +73 -9
- package/src/interactive/overlay-transitions.ts +18 -4
- package/src/interactive/overlays/agents.ts +1 -0
- package/src/interactive/overlays/ask-user.ts +227 -49
- package/src/interactive/overlays/auth-dialog.ts +1 -0
- package/src/interactive/overlays/context-reset.ts +1 -0
- package/src/interactive/overlays/cwd-fallback.ts +1 -0
- package/src/interactive/overlays/decisions.ts +11 -11
- package/src/interactive/overlays/extensions.ts +1 -0
- package/src/interactive/overlays/fleet-run-approval.ts +1 -0
- package/src/interactive/overlays/handoff-review.ts +1 -0
- package/src/interactive/overlays/help-reference.ts +6 -0
- package/src/interactive/overlays/interop.ts +1 -0
- package/src/interactive/overlays/library-install-confirm.ts +1 -0
- package/src/interactive/overlays/library-tabs.ts +28 -0
- package/src/interactive/overlays/list-overlay.ts +10 -1
- package/src/interactive/overlays/message-picker.ts +1 -0
- package/src/interactive/overlays/model-scope.ts +86 -0
- package/src/interactive/overlays/model-selector.ts +1 -0
- package/src/interactive/overlays/prompts.ts +12 -1
- package/src/interactive/overlays/session-selector.ts +1 -0
- package/src/interactive/overlays/settings-sections.ts +30 -0
- package/src/interactive/overlays/settings.ts +614 -45
- package/src/interactive/overlays/side-question.ts +1 -0
- package/src/interactive/overlays/skills-hub.ts +3 -11
- package/src/interactive/overlays/tree-selector.ts +1 -0
- package/src/interactive/pane-policy.ts +46 -0
- package/src/interactive/panes-runtime.ts +292 -0
- package/src/interactive/permission-hint.ts +34 -2
- package/src/interactive/permission-overlay.ts +159 -9
- package/src/interactive/prewarm.ts +197 -0
- package/src/interactive/render-trace.ts +162 -15
- package/src/interactive/renderers/compaction-summary.ts +29 -0
- package/src/interactive/renderers/tool-execution.ts +4 -0
- package/src/interactive/renderers/worker-entry.ts +122 -14
- package/src/interactive/side-question.ts +58 -1
- package/src/interactive/slash-commands.ts +251 -15
- package/src/interactive/status/controller.ts +11 -0
- package/src/interactive/status/state-machine.ts +54 -2
- package/src/interactive/status/types.ts +7 -0
- package/src/interactive/tasks-overlay.ts +1 -0
- package/src/interactive/terminal-lease.ts +2 -0
- package/src/interactive/theme/tokens.ts +3 -14
- package/src/interactive/turn-context.ts +346 -33
- package/src/interactive/turn-persistence.ts +14 -4
- package/src/interactive/turn-prewarm.ts +364 -0
- package/src/interactive/turn-queues.ts +7 -4
- package/src/interactive/turn-runtime.ts +8 -1
- package/src/interactive/turn-state.ts +23 -0
- package/src/interactive/view/artifacts.ts +109 -1
- package/src/interactive/view/view-overlay.ts +29 -3
- package/src/interactive/watch-pane.ts +152 -0
- package/src/interactive/worker-progress.ts +7 -1
- package/src/interactive/worker-receipts.ts +19 -1
- package/src/interactive/worker-stream.ts +5 -0
- package/src/interactive/yazi-bridge.ts +444 -0
- package/src/tools/ask-user.ts +43 -2
- package/src/tools/bootstrap.ts +26 -2
- package/src/tools/builtin-tool-catalog.ts +15 -0
- package/src/tools/compete-worktrees.ts +83 -2
- package/src/tools/core-bootstrap.ts +2 -1
- package/src/tools/dispatch-admission.ts +14 -3
- package/src/tools/dispatch-arguments.ts +20 -20
- package/src/tools/dispatch-plan.ts +17 -9
- package/src/tools/dispatch-run-events.ts +134 -19
- package/src/tools/dispatch-runner.ts +29 -7
- package/src/tools/dispatch-scout.ts +1 -1
- package/src/tools/dispatch-types.ts +15 -3
- package/src/tools/dispatch.ts +1 -1
- package/src/tools/executables.ts +17 -14
- package/src/tools/observation.ts +54 -4
- package/src/tools/panes-surface.ts +38 -0
- package/src/tools/panes.ts +112 -0
- package/src/tools/policy.ts +10 -1
- package/src/tools/presentation.ts +1 -0
- package/src/tools/registry.ts +16 -0
- package/dist/chunk-AOCYTWAV.js +0 -449
- package/dist/chunk-HLE42MG7.js +0 -37
- package/dist/chunk-HWUFFB6L.js +0 -83
- package/dist/chunk-JOZYP4GM.js +0 -279
- package/dist/doctor-M7YEDGAE.js +0 -91
|
@@ -7,6 +7,7 @@ import {
|
|
|
7
7
|
type TUI,
|
|
8
8
|
truncateToWidth,
|
|
9
9
|
visibleWidth,
|
|
10
|
+
wrapTextWithAnsi,
|
|
10
11
|
} from "../../engine/tui.js";
|
|
11
12
|
import { clockLocal } from "../format-time.js";
|
|
12
13
|
import { buildHint, showClioOverlayFrame } from "../overlay-frame.js";
|
|
@@ -359,6 +360,30 @@ export function buildArtifactHeader(
|
|
|
359
360
|
return padAnsi(parts.join(" "), width, ELLIPSIS);
|
|
360
361
|
}
|
|
361
362
|
|
|
363
|
+
/** Put verification on wrapped rows so a canonical receipt verdict is never reduced to a prefix. */
|
|
364
|
+
export function buildArtifactHeaderLines(
|
|
365
|
+
artifact: ViewArtifact | undefined,
|
|
366
|
+
verification: ViewVerificationState | undefined,
|
|
367
|
+
width: number,
|
|
368
|
+
): string[] {
|
|
369
|
+
const metadata = buildArtifactHeader(artifact, undefined, width);
|
|
370
|
+
const verify = verificationText(verification);
|
|
371
|
+
if (artifact === undefined || verify.length === 0) return [metadata];
|
|
372
|
+
const theme = clioTheme();
|
|
373
|
+
const token =
|
|
374
|
+
verification?.status === "ok"
|
|
375
|
+
? "success"
|
|
376
|
+
: verification?.status === "fail"
|
|
377
|
+
? "error"
|
|
378
|
+
: verification?.status === "retired"
|
|
379
|
+
? "warning"
|
|
380
|
+
: "info";
|
|
381
|
+
return [
|
|
382
|
+
metadata,
|
|
383
|
+
...wrapTextWithAnsi(theme.fg(token, verify), Math.max(1, width)).map((line) => padAnsi(line, width, ELLIPSIS)),
|
|
384
|
+
];
|
|
385
|
+
}
|
|
386
|
+
|
|
362
387
|
export function viewFooterHint(focus: ViewPaneFocus, canVerify: boolean, innerWidth?: number): string {
|
|
363
388
|
// One pane at a time means Tab is how the other one is reached, so the
|
|
364
389
|
// narrow footer states it. The generic elider drops middle entries, and Tab
|
|
@@ -569,8 +594,8 @@ export class ViewOverlayView implements Component {
|
|
|
569
594
|
this.ensureContentLoaded(artifact);
|
|
570
595
|
this.lastContentWidth = width;
|
|
571
596
|
const verification = artifact ? this.verifications.get(artifactKey(artifact)) : undefined;
|
|
572
|
-
const header =
|
|
573
|
-
const bodyHeight = Math.max(0, height -
|
|
597
|
+
const header = buildArtifactHeaderLines(artifact, verification, width);
|
|
598
|
+
const bodyHeight = Math.max(0, height - header.length);
|
|
574
599
|
this.lastContentBodyHeight = Math.max(1, bodyHeight);
|
|
575
600
|
const body = this.renderedContentLines(width);
|
|
576
601
|
const maxOffset = Math.max(0, body.length - Math.max(1, bodyHeight));
|
|
@@ -578,7 +603,7 @@ export class ViewOverlayView implements Component {
|
|
|
578
603
|
const visible = body
|
|
579
604
|
.slice(this.contentScrollOffset, this.contentScrollOffset + bodyHeight)
|
|
580
605
|
.map((line) => padAnsi(line, width, ELLIPSIS));
|
|
581
|
-
const lines = [header, ...visible];
|
|
606
|
+
const lines = [...header, ...visible];
|
|
582
607
|
return this.fixedLines(lines, width, height);
|
|
583
608
|
}
|
|
584
609
|
|
|
@@ -739,6 +764,7 @@ export function openViewOverlay(
|
|
|
739
764
|
width: VIEW_OVERLAY_WIDTH,
|
|
740
765
|
maxHeight: VIEW_OVERLAY_MAX_HEIGHT,
|
|
741
766
|
margin: VIEW_OVERLAY_MARGIN,
|
|
767
|
+
markerId: "view",
|
|
742
768
|
title: "View",
|
|
743
769
|
footerHint: (innerWidth) => view.getHint(innerWidth),
|
|
744
770
|
});
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The workers-view watch pane: one pane, beside Clio's own, rendering whatever
|
|
3
|
+
* run the operator points at.
|
|
4
|
+
*
|
|
5
|
+
* The pane hosts `clio-coder fleet view --watch <selection-file>` (see
|
|
6
|
+
* src/cli/fleet-view.ts), a durable-state viewer that re-reads the selection
|
|
7
|
+
* file on every poll. Retargeting is therefore one small atomic file write:
|
|
8
|
+
* arrow keys in the Alt+W board follow the cursor with zero socket traffic and
|
|
9
|
+
* zero pane churn, which is what makes the navigation feel like part of the
|
|
10
|
+
* board rather than like driving a terminal multiplexer.
|
|
11
|
+
*
|
|
12
|
+
* Pane creation is deliberately lazy, but reclamation is eager. A surviving
|
|
13
|
+
* pane is adopted as soon as the controller starts so the relaunched session's
|
|
14
|
+
* inventory owns it before the next watch command. A new pane still opens only
|
|
15
|
+
* on the first watch (operator Enter, `/panes show`, or the panes tool), and is
|
|
16
|
+
* never closed by navigation: leaving the workers view parks it on the last
|
|
17
|
+
* selection, and it goes away when the operator quits the viewer (`q`), closes
|
|
18
|
+
* the pane, or runs `/panes close watch`.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import { mkdirSync, renameSync, writeFileSync } from "node:fs";
|
|
22
|
+
import { dirname, join } from "node:path";
|
|
23
|
+
import { type ClioDirs, clioCacheDir, clioConfigDir, clioDataDir, clioStateDir } from "../core/xdg.js";
|
|
24
|
+
import type { MuxContract } from "../domains/mux/index.js";
|
|
25
|
+
import type { PanesWatchController, PanesWatchResult } from "../domains/mux/operations.js";
|
|
26
|
+
import { watchViewerCommand } from "../domains/mux/viewer-command.js";
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* One selection file per state root, deliberately not per session: every
|
|
30
|
+
* session over a state root shares one run ledger, so a surviving watch pane
|
|
31
|
+
* from a crashed session keeps working the moment a new session writes the
|
|
32
|
+
* same file.
|
|
33
|
+
*/
|
|
34
|
+
function watchSelectionPath(stateDir: string = clioStateDir()): string {
|
|
35
|
+
return join(stateDir, "watch-selection");
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface WatchPaneDeps {
|
|
39
|
+
mux: MuxContract;
|
|
40
|
+
getCwd: () => string;
|
|
41
|
+
/** Selection-file override for tests. */
|
|
42
|
+
selectionPath?: string;
|
|
43
|
+
/** Resolved-layout override for tests. Production pins this process's four cached roots. */
|
|
44
|
+
dirs?: Readonly<ClioDirs>;
|
|
45
|
+
/** Command override for tests; production runs this install's own CLI. */
|
|
46
|
+
command?: (selectionPath: string, dirs: Readonly<ClioDirs>) => ReadonlyArray<string>;
|
|
47
|
+
writeFile?: (path: string, content: string) => void;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/** Replace-by-rename so the viewer's poll never reads a torn line. */
|
|
51
|
+
function atomicWrite(path: string, content: string): void {
|
|
52
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
53
|
+
const tmp = `${path}.tmp`;
|
|
54
|
+
writeFileSync(tmp, content, "utf8");
|
|
55
|
+
renameSync(tmp, path);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export function createWatchPaneController(deps: WatchPaneDeps): PanesWatchController {
|
|
59
|
+
const selectionPath = deps.selectionPath ?? watchSelectionPath();
|
|
60
|
+
const dirs =
|
|
61
|
+
deps.dirs ??
|
|
62
|
+
Object.freeze({
|
|
63
|
+
config: clioConfigDir(),
|
|
64
|
+
data: clioDataDir(),
|
|
65
|
+
state: clioStateDir(),
|
|
66
|
+
cache: clioCacheDir(),
|
|
67
|
+
});
|
|
68
|
+
const command = deps.command ?? ((path, layout) => watchViewerCommand(path, { dirs: layout }));
|
|
69
|
+
const write = deps.writeFile ?? atomicWrite;
|
|
70
|
+
|
|
71
|
+
let paneId: string | null = null;
|
|
72
|
+
let disposed = false;
|
|
73
|
+
let adoptionInFlight: Promise<boolean> | null = null;
|
|
74
|
+
const unsubscribe = deps.mux.onPaneGone((record) => {
|
|
75
|
+
if (record.ref.paneId === paneId) paneId = null;
|
|
76
|
+
});
|
|
77
|
+
const adoptExistingPane = (): Promise<boolean> => {
|
|
78
|
+
if (disposed || paneId !== null) return Promise.resolve(true);
|
|
79
|
+
if (adoptionInFlight !== null) return adoptionInFlight;
|
|
80
|
+
const attempt = Promise.resolve()
|
|
81
|
+
.then(() => deps.mux.adoptPane({ purpose: "watch", label: "watch" }))
|
|
82
|
+
.then((adopted) => {
|
|
83
|
+
if (!disposed && paneId === null && adopted !== null) paneId = adopted.paneId;
|
|
84
|
+
return true;
|
|
85
|
+
})
|
|
86
|
+
.catch(() => {
|
|
87
|
+
// Startup reclamation is best effort. An explicit watch retries the
|
|
88
|
+
// scan before it opens a replacement pane.
|
|
89
|
+
return false;
|
|
90
|
+
})
|
|
91
|
+
.finally(() => {
|
|
92
|
+
if (adoptionInFlight === attempt) adoptionInFlight = null;
|
|
93
|
+
});
|
|
94
|
+
adoptionInFlight = attempt;
|
|
95
|
+
return attempt;
|
|
96
|
+
};
|
|
97
|
+
|
|
98
|
+
const writeSelection = (runId: string): boolean => {
|
|
99
|
+
try {
|
|
100
|
+
write(selectionPath, `${runId}\n`);
|
|
101
|
+
return true;
|
|
102
|
+
} catch {
|
|
103
|
+
return false;
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
// Reclaim durable ownership for inventory and navigation immediately. The
|
|
108
|
+
// scan remains best effort and never opens a replacement pane on its own.
|
|
109
|
+
void adoptExistingPane();
|
|
110
|
+
|
|
111
|
+
return {
|
|
112
|
+
async watch(runId: string): Promise<PanesWatchResult> {
|
|
113
|
+
if (!writeSelection(runId)) {
|
|
114
|
+
return { status: "unavailable", reason: `cannot write the watch selection at ${selectionPath}` };
|
|
115
|
+
}
|
|
116
|
+
if (paneId !== null) return { status: "watching", runId, paneId, opened: false };
|
|
117
|
+
const scanned = await adoptExistingPane();
|
|
118
|
+
if (!scanned) await adoptExistingPane();
|
|
119
|
+
if (paneId !== null) return { status: "watching", runId, paneId, opened: false };
|
|
120
|
+
const opened = await deps.mux.openUtilityPane({
|
|
121
|
+
argv: command(selectionPath, dirs),
|
|
122
|
+
cwd: deps.getCwd(),
|
|
123
|
+
label: "watch",
|
|
124
|
+
title: "clio watch",
|
|
125
|
+
purpose: "watch",
|
|
126
|
+
direction: "right",
|
|
127
|
+
});
|
|
128
|
+
if (opened === null) {
|
|
129
|
+
return { status: "unavailable", reason: "the pane host refused to open the watch pane" };
|
|
130
|
+
}
|
|
131
|
+
paneId = opened.paneId;
|
|
132
|
+
return { status: "watching", runId, paneId, opened: true };
|
|
133
|
+
},
|
|
134
|
+
|
|
135
|
+
follow(runId: string): boolean {
|
|
136
|
+
// Navigation never opens anything; a closed watch pane stays closed
|
|
137
|
+
// until the operator asks again with Enter.
|
|
138
|
+
if (paneId === null) return false;
|
|
139
|
+
return writeSelection(runId);
|
|
140
|
+
},
|
|
141
|
+
|
|
142
|
+
isOpen(): boolean {
|
|
143
|
+
return paneId !== null;
|
|
144
|
+
},
|
|
145
|
+
|
|
146
|
+
dispose(): void {
|
|
147
|
+
// The pane parks; only the subscription goes.
|
|
148
|
+
disposed = true;
|
|
149
|
+
unsubscribe();
|
|
150
|
+
},
|
|
151
|
+
};
|
|
152
|
+
}
|
|
@@ -261,6 +261,8 @@ export function createWorkerProgressFold(): WorkerProgressFold {
|
|
|
261
261
|
const toolNames: string[] = [];
|
|
262
262
|
let settled = false;
|
|
263
263
|
let durable = "";
|
|
264
|
+
/** True after one assistant message ended and before the next message emits prose. */
|
|
265
|
+
let betweenAssistantMessages = false;
|
|
264
266
|
/** Starts still awaiting a finish, oldest first. */
|
|
265
267
|
const pendingActions: WorkerAction[] = [];
|
|
266
268
|
/** New streams resolve exact starts through this index. */
|
|
@@ -340,7 +342,9 @@ export function createWorkerProgressFold(): WorkerProgressFold {
|
|
|
340
342
|
|
|
341
343
|
const delta = workerTextDelta(event);
|
|
342
344
|
if (delta.length > 0) {
|
|
343
|
-
|
|
345
|
+
const separator = betweenAssistantMessages && tailText.length > 0 && !tailText.endsWith("\n") ? "\n\n" : "";
|
|
346
|
+
betweenAssistantMessages = false;
|
|
347
|
+
changed = appendTail(admitDelta(`${separator}${delta}`, nowMs)) || changed;
|
|
344
348
|
changed = setPhase("writing") || changed;
|
|
345
349
|
} else if (isThinkingEvent(event)) {
|
|
346
350
|
// The phase moves and nothing else: reasoning content is never kept.
|
|
@@ -355,6 +359,7 @@ export function createWorkerProgressFold(): WorkerProgressFold {
|
|
|
355
359
|
if (delta.length === 0 && tailText.trim().length === 0) {
|
|
356
360
|
changed = appendTail(durableText) || changed;
|
|
357
361
|
}
|
|
362
|
+
betweenAssistantMessages = true;
|
|
358
363
|
}
|
|
359
364
|
|
|
360
365
|
const action = toolEventAction(event);
|
|
@@ -412,6 +417,7 @@ export function createWorkerProgressFold(): WorkerProgressFold {
|
|
|
412
417
|
pendingActions.length = 0;
|
|
413
418
|
pendingActionsById.clear();
|
|
414
419
|
durable = "";
|
|
420
|
+
betweenAssistantMessages = false;
|
|
415
421
|
settled = false;
|
|
416
422
|
phase = "starting";
|
|
417
423
|
touch();
|
|
@@ -19,7 +19,7 @@ import { clioStateDir } from "../core/xdg.js";
|
|
|
19
19
|
import type { RunEnvelope, RunReceipt } from "../domains/dispatch/types.js";
|
|
20
20
|
import { inspectRunReceiptTrustStatus } from "../domains/evidence/trust-status.js";
|
|
21
21
|
import { receiptFilePath } from "./view/artifacts.js";
|
|
22
|
-
import type { WorkerReceiptFacts, WorkerResultContract } from "./worker-stream.js";
|
|
22
|
+
import type { WorkerPresentedResultContract, WorkerReceiptFacts, WorkerResultContract } from "./worker-stream.js";
|
|
23
23
|
|
|
24
24
|
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
25
25
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
@@ -55,6 +55,22 @@ function contractFrom(receipt: Record<string, unknown>): WorkerResultContract |
|
|
|
55
55
|
return conformance === "pass" || conformance === "fail" || conformance === "not-reached" ? conformance : undefined;
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
+
const PRESENTED_RESULT_CONTRACTS: ReadonlyArray<WorkerPresentedResultContract> = [
|
|
59
|
+
"debugger-report",
|
|
60
|
+
"verifier-report",
|
|
61
|
+
"research-report",
|
|
62
|
+
"scout-report",
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
/** The kind is integrity-covered inside the validator source id on current receipts. */
|
|
66
|
+
function contractKindFrom(receipt: Record<string, unknown>): WorkerPresentedResultContract | undefined {
|
|
67
|
+
const quality = isRecord(receipt.quality) ? receipt.quality : null;
|
|
68
|
+
const fact = quality !== null && isRecord(quality.resultContract) ? quality.resultContract : null;
|
|
69
|
+
const sourceId = optionalString(fact?.sourceId);
|
|
70
|
+
if (sourceId === undefined) return undefined;
|
|
71
|
+
return PRESENTED_RESULT_CONTRACTS.find((kind) => sourceId.startsWith(`agent-result-contract:${kind}:`));
|
|
72
|
+
}
|
|
73
|
+
|
|
58
74
|
/**
|
|
59
75
|
* Project a parsed receipt onto the facts a worker block renders. The input is
|
|
60
76
|
* whatever JSON the file held, not a typed {@link RunReceipt}: receipts written
|
|
@@ -66,6 +82,7 @@ export function workerReceiptFacts(receipt: Record<string, unknown>): WorkerRece
|
|
|
66
82
|
if (outcome === undefined) return null;
|
|
67
83
|
const output = isRecord(receipt.output) ? receipt.output : null;
|
|
68
84
|
const contract = contractFrom(receipt);
|
|
85
|
+
const contractKind = contractKindFrom(receipt);
|
|
69
86
|
const text = optionalString(output?.text);
|
|
70
87
|
const failureMessage = optionalString(receipt.failureMessage);
|
|
71
88
|
const outcomeCode = optionalString(receipt.outcomeCode);
|
|
@@ -82,6 +99,7 @@ export function workerReceiptFacts(receipt: Record<string, unknown>): WorkerRece
|
|
|
82
99
|
...(durationMs !== undefined ? { durationMs } : {}),
|
|
83
100
|
...(toolCalls !== undefined ? { toolCalls } : {}),
|
|
84
101
|
...(contract !== undefined ? { contract } : {}),
|
|
102
|
+
...(contractKind !== undefined ? { contractKind } : {}),
|
|
85
103
|
...(text !== undefined ? { text } : {}),
|
|
86
104
|
};
|
|
87
105
|
}
|
|
@@ -61,6 +61,9 @@ export interface WorkerAttempt {
|
|
|
61
61
|
|
|
62
62
|
export type WorkerResultContract = "pass" | "fail" | "not-reached" | "unmeasured";
|
|
63
63
|
|
|
64
|
+
/** Result kinds whose parsed envelopes have a dedicated transcript presentation. */
|
|
65
|
+
export type WorkerPresentedResultContract = "debugger-report" | "verifier-report" | "research-report" | "scout-report";
|
|
66
|
+
|
|
64
67
|
/**
|
|
65
68
|
* Terminal facts a worker block reports. Sealed by the receipt when it can be
|
|
66
69
|
* read, carried by the terminal event otherwise. Every unit is optional and
|
|
@@ -76,6 +79,8 @@ export interface WorkerReceiptSummary {
|
|
|
76
79
|
durationMs?: number;
|
|
77
80
|
toolCalls?: number;
|
|
78
81
|
contract?: WorkerResultContract;
|
|
82
|
+
/** Parsed from the receipt's result-contract source id; absent on legacy and untyped receipts. */
|
|
83
|
+
contractKind?: WorkerPresentedResultContract;
|
|
79
84
|
/** From an abort marker rather than a sealed terminal event; a later DispatchCompleted/DispatchFailed replaces it. */
|
|
80
85
|
provisional?: boolean;
|
|
81
86
|
/** The run is over, but no receipt could be read for it, and the ledger row could not explain why either. */
|