@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
|
@@ -24,6 +24,7 @@ import {
|
|
|
24
24
|
type RunStatus,
|
|
25
25
|
runKindSupportsLiveSteering,
|
|
26
26
|
} from "../domains/dispatch/types.js";
|
|
27
|
+
import { describeWriteBoundaryAttributionDowngrade } from "../domains/dispatch/write-boundary.js";
|
|
27
28
|
import {
|
|
28
29
|
summarizeTrustStatus,
|
|
29
30
|
type TrustSummaryProjection,
|
|
@@ -36,17 +37,12 @@ import {
|
|
|
36
37
|
type ObservabilityNotice,
|
|
37
38
|
type ObservabilitySnapshot,
|
|
38
39
|
} from "../domains/observability/index.js";
|
|
39
|
-
import type
|
|
40
|
+
import { type CostProvenance, foregroundStreamUsage } from "../domains/providers/index.js";
|
|
40
41
|
import { sanitizeCallTargetText } from "../domains/safety/call-target.js";
|
|
41
42
|
import { type Component, truncateToWidth, visibleWidth, wrapTextWithAnsi } from "../engine/tui.js";
|
|
42
43
|
import { formatWorkerContextMeter } from "./context-meter.js";
|
|
43
|
-
import {
|
|
44
|
-
|
|
45
|
-
type CouncilGroupView,
|
|
46
|
-
type CouncilMemberView,
|
|
47
|
-
councilGroupBody,
|
|
48
|
-
councilIslandLines,
|
|
49
|
-
} from "./council-grid.js";
|
|
44
|
+
import { COUNCIL_SYNTHESIS_LABEL } from "./council.js";
|
|
45
|
+
import { type CouncilGroupView, type CouncilMemberView, councilGroupBody, councilIslandLines } from "./council-grid.js";
|
|
50
46
|
import { formatFooterTokens } from "./footer-panel.js";
|
|
51
47
|
import {
|
|
52
48
|
type ClioTheme,
|
|
@@ -88,6 +84,12 @@ export interface DispatchSteerAcknowledgement {
|
|
|
88
84
|
chars: number;
|
|
89
85
|
}
|
|
90
86
|
|
|
87
|
+
export interface DispatchWriteRecordDowngrade {
|
|
88
|
+
reason: "opaque_tool_succeeded";
|
|
89
|
+
tool: string;
|
|
90
|
+
toolCallId: string;
|
|
91
|
+
}
|
|
92
|
+
|
|
91
93
|
export interface DispatchBoardRow {
|
|
92
94
|
runId: string;
|
|
93
95
|
agentId: string;
|
|
@@ -97,6 +99,8 @@ export interface DispatchBoardRow {
|
|
|
97
99
|
runtimeId: string;
|
|
98
100
|
targetId: string;
|
|
99
101
|
wireModelId: string;
|
|
102
|
+
/** Canonical inference scheduler and its independent request-slot bound. */
|
|
103
|
+
endpoint?: { key: string; label: string; limit: number };
|
|
100
104
|
/** Sanitized, one-line summary of the task assigned to this run. */
|
|
101
105
|
taskSummary?: string;
|
|
102
106
|
/** Immutable budget admission provenance for this run. */
|
|
@@ -156,6 +160,8 @@ export interface DispatchBoardRow {
|
|
|
156
160
|
retry?: DispatchRetryPresentation;
|
|
157
161
|
/** Most recent worker delivery acknowledgement for an operator steer. */
|
|
158
162
|
steerAcknowledgement?: DispatchSteerAcknowledgement;
|
|
163
|
+
/** First successful opaque call that opened this run's write record. */
|
|
164
|
+
writeRecordDowngrade?: DispatchWriteRecordDowngrade;
|
|
159
165
|
/**
|
|
160
166
|
* Where this run sits in a fleet plan: the wave the step was scheduled in
|
|
161
167
|
* and the step id it executes. Present only for runs a fleet plan
|
|
@@ -598,13 +604,37 @@ function progressAnswerLines(
|
|
|
598
604
|
return body.map((row, index) => `${index === 0 ? cardKvKey(theme, "answer") : " ".repeat(gutter)}${row}`);
|
|
599
605
|
}
|
|
600
606
|
|
|
607
|
+
/** Keep the canonical tier and every summary clause visible by wrapping the value under its card key. */
|
|
608
|
+
function trustCardLines(theme: ClioTheme, row: DispatchBoardRow, contentWidth: number): string[] {
|
|
609
|
+
const gutter = CARD_KV_KEY_WIDTH + 1;
|
|
610
|
+
const valueWidth = Math.max(1, contentWidth - gutter);
|
|
611
|
+
const trust =
|
|
612
|
+
row.trust === undefined
|
|
613
|
+
? theme.fg("dim", isTerminalStatus(row.status) ? "receipt not read back" : "not sealed yet")
|
|
614
|
+
: theme.fg(
|
|
615
|
+
trustVerdictToken(row.trust.verdict),
|
|
616
|
+
`${trustVerdictGlyph(row.trust.verdict)} ${row.trust.verdict}; ${row.trust.text}`,
|
|
617
|
+
);
|
|
618
|
+
const host =
|
|
619
|
+
row.hostVerification === undefined ? "" : ` · ${theme.fg("muted", `host checks ${row.hostVerification}`)}`;
|
|
620
|
+
return wrapTextWithAnsi(`${trust}${host}`, valueWidth).map(
|
|
621
|
+
(line, index) => `${index === 0 ? cardKvKey(theme, "trust") : " ".repeat(gutter)}${line}`,
|
|
622
|
+
);
|
|
623
|
+
}
|
|
624
|
+
|
|
601
625
|
export function renderDispatchCard(
|
|
602
626
|
row: DispatchBoardRow,
|
|
603
627
|
width: number,
|
|
604
628
|
evidence?: RunEvidencePresentation,
|
|
605
|
-
options: {
|
|
629
|
+
options: {
|
|
630
|
+
selected?: boolean;
|
|
631
|
+
expanded?: boolean;
|
|
632
|
+
endpointActive?: number;
|
|
633
|
+
endpointQueued?: number;
|
|
634
|
+
theme?: ClioTheme;
|
|
635
|
+
} = {},
|
|
606
636
|
): string[] {
|
|
607
|
-
const theme = clioTheme();
|
|
637
|
+
const theme = options.theme ?? clioTheme();
|
|
608
638
|
const contentWidth = Math.max(0, width - 4);
|
|
609
639
|
const agentLabel = agentDisplayLabel(row);
|
|
610
640
|
const elapsed = formatCompactMs(row.elapsedMs);
|
|
@@ -653,6 +683,14 @@ export function renderDispatchCard(
|
|
|
653
683
|
const statusUnits = [
|
|
654
684
|
statusStr,
|
|
655
685
|
theme.fg("muted", `node ${row.node ?? "local"}`),
|
|
686
|
+
...(row.endpoint !== undefined
|
|
687
|
+
? [
|
|
688
|
+
theme.fg(
|
|
689
|
+
"info",
|
|
690
|
+
`slots ${options.endpointActive ?? 0}/${row.endpoint.limit}${(options.endpointQueued ?? 0) > 0 ? ` +${options.endpointQueued} queued` : ""} ${row.endpoint.label}`,
|
|
691
|
+
),
|
|
692
|
+
]
|
|
693
|
+
: []),
|
|
656
694
|
...(row.gate !== undefined ? [theme.fg("info", `gate ${row.gate.role} c${row.gate.cycle}`)] : []),
|
|
657
695
|
...(row.rerouteCount !== undefined && row.rerouteCount > 0
|
|
658
696
|
? [theme.fg("warning", `rerouted x${row.rerouteCount}`)]
|
|
@@ -663,15 +701,6 @@ export function renderDispatchCard(
|
|
|
663
701
|
`${theme.fg("dim", "ttft")} ${theme.fg("muted", ttft)}`,
|
|
664
702
|
`${theme.fg("dim", "cost")} ${theme.fg("muted", cost)}`,
|
|
665
703
|
];
|
|
666
|
-
// The trust line is the canonical projection, styled by its verdict tier;
|
|
667
|
-
// a host check is folded into that projection as validation grounding, so
|
|
668
|
-
// it is named as a secondary fact and never as independent verification.
|
|
669
|
-
const trustUnits = [
|
|
670
|
-
row.trust === undefined
|
|
671
|
-
? theme.fg("dim", isTerminalStatus(row.status) ? "trust: receipt not read back" : "trust: not sealed yet")
|
|
672
|
-
: theme.fg(trustVerdictToken(row.trust.verdict), `${trustVerdictGlyph(row.trust.verdict)} ${row.trust.text}`),
|
|
673
|
-
...(row.hostVerification !== undefined ? [theme.fg("muted", `host checks ${row.hostVerification}`)] : []),
|
|
674
|
-
];
|
|
675
704
|
const contextUnit = formatWorkerContextMeter(row.lastContextTokens ?? 0, row.contextWindow, theme);
|
|
676
705
|
// The phase column: a fleet step says which wave it belongs to and which
|
|
677
706
|
// step it is; every other run leaves the cell empty rather than inventing a
|
|
@@ -690,7 +719,7 @@ export function renderDispatchCard(
|
|
|
690
719
|
? [truncateToWidth(`${cardKvKey(theme, "task")}${theme.fg("muted", row.taskSummary)}`, contentWidth, "…", false)]
|
|
691
720
|
: []),
|
|
692
721
|
cardUnitsLine(theme, "status", statusUnits, contentWidth),
|
|
693
|
-
|
|
722
|
+
...trustCardLines(theme, row, contentWidth),
|
|
694
723
|
...(row.budget !== undefined
|
|
695
724
|
? [
|
|
696
725
|
truncateToWidth(
|
|
@@ -751,6 +780,16 @@ export function renderDispatchCard(
|
|
|
751
780
|
),
|
|
752
781
|
);
|
|
753
782
|
}
|
|
783
|
+
if (row.writeRecordDowngrade) {
|
|
784
|
+
const warning = describeWriteBoundaryAttributionDowngrade({
|
|
785
|
+
...row.writeRecordDowngrade,
|
|
786
|
+
runId: row.runId,
|
|
787
|
+
stepId: row.phase?.stepId ?? null,
|
|
788
|
+
});
|
|
789
|
+
bodyLines.push(
|
|
790
|
+
...wrapTextWithAnsi(`${cardKvKey(theme, "record")}${theme.fg("warning", `open: ${warning}`)}`, contentWidth),
|
|
791
|
+
);
|
|
792
|
+
}
|
|
754
793
|
// The proof row is present only when the observability projection knows an
|
|
755
794
|
// evidence state for this run; an unknown/none state adds no line, so cards
|
|
756
795
|
// without evidence keep their existing three-line body.
|
|
@@ -969,6 +1008,15 @@ export function formatDispatchBoardLines(
|
|
|
969
1008
|
});
|
|
970
1009
|
}
|
|
971
1010
|
|
|
1011
|
+
const endpointActive: Record<string, number> = { ...foregroundStreamUsage() };
|
|
1012
|
+
const endpointQueued: Record<string, number> = {};
|
|
1013
|
+
for (const row of rows) {
|
|
1014
|
+
if (row.endpoint === undefined) continue;
|
|
1015
|
+
if (row.status === "enqueued") endpointQueued[row.endpoint.key] = (endpointQueued[row.endpoint.key] ?? 0) + 1;
|
|
1016
|
+
else if (row.status === "running" || row.status === "stale" || row.status === "cancelling")
|
|
1017
|
+
endpointActive[row.endpoint.key] = (endpointActive[row.endpoint.key] ?? 0) + 1;
|
|
1018
|
+
}
|
|
1019
|
+
|
|
972
1020
|
// A council is one question asked of several members, so its rows render as
|
|
973
1021
|
// one card holding the whole group rather than as unrelated neighbours.
|
|
974
1022
|
const cards = dispatchBoardItems(rows, selectedRunId).map((item) =>
|
|
@@ -977,6 +1025,12 @@ export function formatDispatchBoardLines(
|
|
|
977
1025
|
: renderDispatchCard(item.row, width, deriveRunEvidenceState(observability, item.row.runId), {
|
|
978
1026
|
selected: item.row.runId === selectedRunId,
|
|
979
1027
|
expanded: detailExpanded && item.row.runId === selectedRunId,
|
|
1028
|
+
...(item.row.endpoint !== undefined
|
|
1029
|
+
? {
|
|
1030
|
+
endpointActive: endpointActive[item.row.endpoint.key] ?? 0,
|
|
1031
|
+
endpointQueued: endpointQueued[item.row.endpoint.key] ?? 0,
|
|
1032
|
+
}
|
|
1033
|
+
: {}),
|
|
980
1034
|
}),
|
|
981
1035
|
);
|
|
982
1036
|
const body: string[] = [];
|
|
@@ -1155,6 +1209,15 @@ function parseGateBadge(value: unknown): { role: string; cycle: number } | undef
|
|
|
1155
1209
|
return { role: record.role, cycle };
|
|
1156
1210
|
}
|
|
1157
1211
|
|
|
1212
|
+
function parseEndpointCapacity(value: unknown): DispatchBoardRow["endpoint"] | undefined {
|
|
1213
|
+
if (typeof value !== "object" || value === null) return undefined;
|
|
1214
|
+
const record = value as { key?: unknown; label?: unknown; limit?: unknown };
|
|
1215
|
+
const key = parseNonEmptyString(record.key);
|
|
1216
|
+
const label = parseNonEmptyString(record.label);
|
|
1217
|
+
const limit = parsePositiveInt(record.limit);
|
|
1218
|
+
return key === undefined || label === undefined || limit === undefined ? undefined : { key, label, limit };
|
|
1219
|
+
}
|
|
1220
|
+
|
|
1158
1221
|
function parseCouncilBadge(value: unknown): DispatchBoardRow["council"] | undefined {
|
|
1159
1222
|
if (typeof value !== "object" || value === null) return undefined;
|
|
1160
1223
|
const record = value as { group?: unknown; label?: unknown; color?: unknown; round?: unknown };
|
|
@@ -1351,6 +1414,7 @@ function toRow(entry: DispatchBoardEntry, now: number): DispatchBoardRow {
|
|
|
1351
1414
|
runtimeId: entry.runtimeId,
|
|
1352
1415
|
targetId: entry.targetId,
|
|
1353
1416
|
wireModelId: entry.wireModelId,
|
|
1417
|
+
...(entry.endpoint !== undefined ? { endpoint: { ...entry.endpoint } } : {}),
|
|
1354
1418
|
...(entry.taskSummary !== undefined ? { taskSummary: entry.taskSummary } : {}),
|
|
1355
1419
|
...(entry.budget !== undefined ? { budget: entry.budget } : {}),
|
|
1356
1420
|
status: retry ? "retrying" : entry.status,
|
|
@@ -1379,6 +1443,7 @@ function toRow(entry: DispatchBoardEntry, now: number): DispatchBoardRow {
|
|
|
1379
1443
|
recentTools: progress.recentActions.map((action) => action.tool),
|
|
1380
1444
|
...(retry ? { retry: { ...retry } } : {}),
|
|
1381
1445
|
...(entry.steerAcknowledgement ? { steerAcknowledgement: { ...entry.steerAcknowledgement } } : {}),
|
|
1446
|
+
...(entry.writeRecordDowngrade ? { writeRecordDowngrade: { ...entry.writeRecordDowngrade } } : {}),
|
|
1382
1447
|
};
|
|
1383
1448
|
}
|
|
1384
1449
|
|
|
@@ -1461,6 +1526,7 @@ export function createDispatchBoardStore(
|
|
|
1461
1526
|
const agentAudience = parseAgentAudience(raw.agentAudience, previous?.agentAudience);
|
|
1462
1527
|
const requestOrigin = parseRequestOrigin(raw.requestOrigin, previous?.requestOrigin);
|
|
1463
1528
|
const node = parseNonEmptyString(raw.node) ?? previous?.node;
|
|
1529
|
+
const endpoint = parseEndpointCapacity(raw.endpoint) ?? previous?.endpoint;
|
|
1464
1530
|
const gate = parseGateBadge(raw.gate) ?? previous?.gate;
|
|
1465
1531
|
const council = parseCouncilBadge(raw.council) ?? previous?.council;
|
|
1466
1532
|
const rerouteCount = parsePositiveInt(raw.rerouteCount) ?? previous?.rerouteCount;
|
|
@@ -1477,6 +1543,7 @@ export function createDispatchBoardStore(
|
|
|
1477
1543
|
runtimeId: parseText(raw.runtimeId, previous?.runtimeId ?? "-"),
|
|
1478
1544
|
targetId: parseText(raw.targetId, previous?.targetId ?? "-"),
|
|
1479
1545
|
wireModelId: parseText(raw.wireModelId, previous?.wireModelId ?? "-"),
|
|
1546
|
+
...(endpoint !== undefined ? { endpoint } : {}),
|
|
1480
1547
|
...(taskSummary !== undefined ? { taskSummary } : {}),
|
|
1481
1548
|
...(budget !== undefined ? { budget } : {}),
|
|
1482
1549
|
status,
|
|
@@ -1505,6 +1572,7 @@ export function createDispatchBoardStore(
|
|
|
1505
1572
|
progress: previous?.progress ?? createWorkerProgressFold(),
|
|
1506
1573
|
...(previous?.retry ? { retry: { ...previous.retry } } : {}),
|
|
1507
1574
|
...(previous?.steerAcknowledgement ? { steerAcknowledgement: { ...previous.steerAcknowledgement } } : {}),
|
|
1575
|
+
...(previous?.writeRecordDowngrade ? { writeRecordDowngrade: { ...previous.writeRecordDowngrade } } : {}),
|
|
1508
1576
|
};
|
|
1509
1577
|
entries.set(runId, entry);
|
|
1510
1578
|
pruneEntries(entries, (evicted) => fleetPhases.delete(evicted));
|
|
@@ -1654,6 +1722,20 @@ export function createDispatchBoardStore(
|
|
|
1654
1722
|
entry.ttftMs = Math.round(performance.now() - entry.startedAtClockMs);
|
|
1655
1723
|
}
|
|
1656
1724
|
}
|
|
1725
|
+
if (type === "clio_write_record_downgraded") {
|
|
1726
|
+
const rawPayload = (workerEvent as { payload?: unknown }).payload;
|
|
1727
|
+
const payload =
|
|
1728
|
+
typeof rawPayload === "object" && rawPayload !== null ? (rawPayload as Record<string, unknown>) : null;
|
|
1729
|
+
const tool = payload === null ? undefined : parseNonEmptyString(payload.tool);
|
|
1730
|
+
const toolCallId = payload === null ? undefined : parseNonEmptyString(payload.toolCallId);
|
|
1731
|
+
if (payload?.reason === "opaque_tool_succeeded" && tool !== undefined && toolCallId !== undefined) {
|
|
1732
|
+
entry.writeRecordDowngrade = {
|
|
1733
|
+
reason: "opaque_tool_succeeded",
|
|
1734
|
+
tool: sanitizeCallTargetText(tool),
|
|
1735
|
+
toolCallId: sanitizeCallTargetText(toolCallId),
|
|
1736
|
+
};
|
|
1737
|
+
}
|
|
1738
|
+
}
|
|
1657
1739
|
// The one fold that reads worker prose and tool activity. Everything the
|
|
1658
1740
|
// board says about what a worker is saying or touching comes from here,
|
|
1659
1741
|
// so the board and the transcript block cannot tell two stories.
|
|
@@ -26,7 +26,11 @@ import {
|
|
|
26
26
|
validateFleetGraph,
|
|
27
27
|
} from "../domains/agents/index.js";
|
|
28
28
|
import type { AgentSpec } from "../domains/agents/spec.js";
|
|
29
|
-
import
|
|
29
|
+
import {
|
|
30
|
+
bindExecutionPlanEndpoints,
|
|
31
|
+
type ExecutionPlan,
|
|
32
|
+
type ExecutionPlanStep,
|
|
33
|
+
} from "../domains/dispatch/execution-plan.js";
|
|
30
34
|
import {
|
|
31
35
|
type AgentRoleFactsResolver,
|
|
32
36
|
requestExecutionRole,
|
|
@@ -40,6 +44,7 @@ export interface FleetRunPreviewRoute {
|
|
|
40
44
|
targetId: string;
|
|
41
45
|
wireModelId: string;
|
|
42
46
|
nodeId: string;
|
|
47
|
+
endpoint?: { key: string; label: string; limit: number; foregroundHeld?: number };
|
|
43
48
|
}
|
|
44
49
|
|
|
45
50
|
export interface FleetRunPreviewStep {
|
|
@@ -207,6 +212,40 @@ export function compileFleetRunPreview(input: FleetRunPreviewInput): FleetRunPre
|
|
|
207
212
|
diagnostics.push(describeError(error));
|
|
208
213
|
return fail();
|
|
209
214
|
}
|
|
215
|
+
const routes = new Map<string, FleetRunPreviewRoute>();
|
|
216
|
+
if (input.resolveRoute !== undefined) {
|
|
217
|
+
for (const step of plan.steps) {
|
|
218
|
+
if (step.kind === "code") continue;
|
|
219
|
+
try {
|
|
220
|
+
const route = input.resolveRoute({
|
|
221
|
+
stepId: step.id,
|
|
222
|
+
agentId: step.agentId,
|
|
223
|
+
task: step.task,
|
|
224
|
+
scope: step.scope,
|
|
225
|
+
...(step.target !== undefined ? { target: step.target } : {}),
|
|
226
|
+
...(step.profile !== undefined ? { profile: step.profile } : {}),
|
|
227
|
+
});
|
|
228
|
+
if (route !== null) routes.set(step.id, route);
|
|
229
|
+
} catch (error) {
|
|
230
|
+
diagnostics.push(`step '${step.id}' route preflight failed: ${describeError(error)}`);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
plan = bindExecutionPlanEndpoints(
|
|
234
|
+
plan,
|
|
235
|
+
Object.fromEntries(
|
|
236
|
+
[...routes].map(([stepId, route]) => [
|
|
237
|
+
stepId,
|
|
238
|
+
route.endpoint === undefined
|
|
239
|
+
? undefined
|
|
240
|
+
: {
|
|
241
|
+
key: route.endpoint.key,
|
|
242
|
+
limit: route.endpoint.limit,
|
|
243
|
+
...(route.endpoint.foregroundHeld !== undefined ? { foregroundHeld: route.endpoint.foregroundHeld } : {}),
|
|
244
|
+
},
|
|
245
|
+
]),
|
|
246
|
+
),
|
|
247
|
+
);
|
|
248
|
+
}
|
|
210
249
|
|
|
211
250
|
// A declared boundary is verified against the checkout, so the checkout has
|
|
212
251
|
// to be one this can read. Refused here, before any dispatch, rather than
|
|
@@ -261,20 +300,7 @@ export function compileFleetRunPreview(input: FleetRunPreviewInput): FleetRunPre
|
|
|
261
300
|
},
|
|
262
301
|
];
|
|
263
302
|
}
|
|
264
|
-
|
|
265
|
-
try {
|
|
266
|
-
route =
|
|
267
|
-
input.resolveRoute?.({
|
|
268
|
-
stepId: step.id,
|
|
269
|
-
agentId: step.agentId,
|
|
270
|
-
task: step.task,
|
|
271
|
-
scope: step.scope,
|
|
272
|
-
...(step.target !== undefined ? { target: step.target } : {}),
|
|
273
|
-
...(step.profile !== undefined ? { profile: step.profile } : {}),
|
|
274
|
-
}) ?? null;
|
|
275
|
-
} catch (error) {
|
|
276
|
-
diagnostics.push(`step '${step.id}' route preflight failed: ${describeError(error)}`);
|
|
277
|
-
}
|
|
303
|
+
const route = routes.get(step.id) ?? null;
|
|
278
304
|
return [
|
|
279
305
|
{
|
|
280
306
|
...base,
|
|
@@ -34,6 +34,22 @@ export const HANDOFF_SYSTEM_PROMPT = [
|
|
|
34
34
|
/** A handoff record is a list of short entries, so the budget is modest. */
|
|
35
35
|
export const HANDOFF_MAX_TOKENS = 4096;
|
|
36
36
|
|
|
37
|
+
/** The name the wire dialect gives the schema, where it takes one. */
|
|
38
|
+
export const HANDOFF_SCHEMA_NAME = "handoff_record";
|
|
39
|
+
|
|
40
|
+
/** Characters of the refused answer quoted back to the model in the repair round. */
|
|
41
|
+
export const HANDOFF_REPAIR_QUOTE_CHARS = 600;
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* What the first round returned and why the parser refused it. The repair round
|
|
45
|
+
* shows the model both, because "return one JSON object" repeated verbatim is
|
|
46
|
+
* the instruction it already failed (issue #223).
|
|
47
|
+
*/
|
|
48
|
+
export interface HandoffRepairInput {
|
|
49
|
+
complaint: string;
|
|
50
|
+
previous: string;
|
|
51
|
+
}
|
|
52
|
+
|
|
37
53
|
export interface HandoffRoundInput {
|
|
38
54
|
model: EngineModel;
|
|
39
55
|
/** Read-only. The round copies before appending its own message. */
|
|
@@ -42,15 +58,38 @@ export interface HandoffRoundInput {
|
|
|
42
58
|
apiKey?: string;
|
|
43
59
|
signal?: AbortSignal;
|
|
44
60
|
maxTokens?: number;
|
|
61
|
+
/** Resolved runtime id, which decides whether the schema can be bound on the wire. */
|
|
62
|
+
runtimeId?: string;
|
|
63
|
+
/** Set on the second and last round, after the parser refused the first. */
|
|
64
|
+
repair?: HandoffRepairInput;
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function repairText(goal: string, repair: HandoffRepairInput): string {
|
|
68
|
+
const quoted = repair.previous.slice(0, HANDOFF_REPAIR_QUOTE_CHARS);
|
|
69
|
+
return [
|
|
70
|
+
`The next session's goal is: ${goal}`,
|
|
71
|
+
"",
|
|
72
|
+
"Your previous answer could not be read as a handoff record.",
|
|
73
|
+
`The parser said: ${repair.complaint}`,
|
|
74
|
+
"This is what you returned, verbatim:",
|
|
75
|
+
"---",
|
|
76
|
+
quoted.length > 0 ? quoted : "(nothing)",
|
|
77
|
+
"---",
|
|
78
|
+
"Answer again with one JSON object matching the schema and nothing else.",
|
|
79
|
+
"No prose before it, no prose after it, no code fence.",
|
|
80
|
+
].join("\n");
|
|
45
81
|
}
|
|
46
82
|
|
|
47
83
|
/** Run the round. Provider failures reject; the caller renders the reason. */
|
|
48
84
|
export async function runHandoffRound(input: HandoffRoundInput): Promise<SideQuestionResult> {
|
|
49
|
-
const { goal, ...rest } = input;
|
|
85
|
+
const { goal, repair, ...rest } = input;
|
|
50
86
|
return runOutOfTurnRound({
|
|
51
87
|
...rest,
|
|
52
88
|
maxTokens: input.maxTokens ?? HANDOFF_MAX_TOKENS,
|
|
53
89
|
systemPrompt: HANDOFF_SYSTEM_PROMPT,
|
|
54
|
-
|
|
90
|
+
responseSchema: { name: HANDOFF_SCHEMA_NAME, schema: HANDOFF_RESPONSE_SCHEMA },
|
|
91
|
+
userText: repair
|
|
92
|
+
? repairText(goal, repair)
|
|
93
|
+
: `The next session's goal is: ${goal}\n\nExtract the handoff record for that goal now.`,
|
|
55
94
|
});
|
|
56
95
|
}
|