@iowarp/clio-coder 0.3.1 → 0.3.2
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 +90 -2
- package/CONTRIBUTING.md +23 -23
- package/README.md +284 -613
- package/dist/{acp-FPR54DGL.js → acp-BIYHVZIM.js} +43 -53
- package/dist/{agents-OGPIHPJH.js → agents-YT6SSRIT.js} +43 -26
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-IC3K6NIZ.js → auth-5TWEIYDN.js} +20 -12
- package/dist/{chunk-PV4JUBVJ.js → chunk-2EHAIA3X.js} +40 -21
- package/dist/{chunk-IS3ONKU3.js → chunk-2IR2NMPA.js} +6 -4
- package/dist/chunk-2SFS6XQE.js +122 -0
- package/dist/chunk-2VTFPG5O.js +48 -0
- package/dist/{chunk-MAR7Y6HW.js → chunk-3ZXDFGR5.js} +23 -16
- package/dist/chunk-4BJ5BYCE.js +61 -0
- package/dist/{chunk-474KN5II.js → chunk-4BPJXDWC.js} +111 -181
- package/dist/chunk-4KLWL3UC.js +18 -0
- package/dist/chunk-4VP4KH3K.js +962 -0
- package/dist/chunk-4ZG3XFUR.js +77 -0
- package/dist/chunk-5B2AEOW5.js +5407 -0
- package/dist/{chunk-K2ITRMHZ.js → chunk-5TSRNF4G.js} +6 -138
- package/dist/{chunk-OLBBMFRD.js → chunk-5UUP6MWO.js} +24 -62
- package/dist/chunk-65DEGPJ6.js +52 -0
- package/dist/chunk-6EJMN2Y3.js +17 -0
- package/dist/chunk-6EJV5X2W.js +16405 -0
- package/dist/chunk-6N5PTWMY.js +136 -0
- package/dist/chunk-6XLNIQDB.js +27 -0
- package/dist/{chunk-TEKV33Q5.js → chunk-77VKQEHF.js} +65 -33
- package/dist/chunk-7CR24IG7.js +242 -0
- package/dist/{chunk-M5T5VO65.js → chunk-7EYHLWU7.js} +837 -635
- package/dist/chunk-7MNJORFF.js +22 -0
- package/dist/{chunk-KY56HMHH.js → chunk-A3CYT5EX.js} +125 -31
- package/dist/chunk-AGYYIBLL.js +1069 -0
- package/dist/chunk-AO4RKG4M.js +277 -0
- package/dist/{chunk-GB6QRBXN.js → chunk-APJ265NV.js} +54 -1187
- package/dist/chunk-ARBGF5F7.js +174 -0
- package/dist/{chunk-673JJUWJ.js → chunk-BMEMKKIT.js} +2 -2
- package/dist/chunk-CBCAPZAA.js +229 -0
- package/dist/chunk-CMZWFGD2.js +352 -0
- package/dist/chunk-ECH6PKUQ.js +39 -0
- package/dist/chunk-ED4KHGC3.js +143 -0
- package/dist/chunk-EKMEHE4H.js +340 -0
- package/dist/{chunk-RPTR2H26.js → chunk-EPVUXGXG.js} +21 -15
- package/dist/chunk-FCSXB6T2.js +338 -0
- package/dist/chunk-FJ3H4MN5.js +48 -0
- package/dist/chunk-FQ4SKYE4.js +29 -0
- package/dist/chunk-G2DE3C7R.js +644 -0
- package/dist/chunk-G4BMMOKF.js +182 -0
- package/dist/{chunk-ZPY3JZ5E.js → chunk-GGXXDWE4.js} +183 -1233
- package/dist/chunk-HC4CLZ2Y.js +68 -0
- package/dist/{chunk-LU4TK2PR.js → chunk-HFSBBKSQ.js} +5 -56
- package/dist/{chunk-PIUMUEMV.js → chunk-HKIYEGME.js} +10 -6
- package/dist/chunk-I4HZDVNP.js +73 -0
- package/dist/{chunk-4QKXUHSR.js → chunk-IGLFWIYI.js} +70 -20
- package/dist/chunk-IKCO5N3L.js +162 -0
- package/dist/chunk-IR4CFBFN.js +56 -0
- package/dist/{chunk-PFEFKVGL.js → chunk-J5HN4RYU.js} +13 -11
- package/dist/{chunk-R5KLMSBV.js → chunk-J5Q24KAG.js} +2 -2
- package/dist/{chunk-K5XEMXTI.js → chunk-JVCV3ICN.js} +1 -1
- package/dist/chunk-KJ5LWLOE.js +1077 -0
- package/dist/chunk-LBMZMYH2.js +285 -0
- package/dist/{chunk-G34LV2PF.js → chunk-LBNRH5WM.js} +84 -170
- package/dist/{chunk-H6F6BYOH.js → chunk-LZSJBIVT.js} +7003 -7434
- package/dist/{chunk-HQQID6OA.js → chunk-M6SHUN7Q.js} +5 -5
- package/dist/chunk-MAW544W2.js +1882 -0
- package/dist/chunk-MBS4V7ZP.js +217 -0
- package/dist/{chunk-FST4FYJB.js → chunk-MFFY33HR.js} +99 -140
- package/dist/chunk-MNA4JGU4.js +255 -0
- package/dist/chunk-MQSRRFWA.js +3428 -0
- package/dist/{chunk-BSU2YIWB.js → chunk-MVVUPGPW.js} +131 -136
- package/dist/chunk-OAO4GE4M.js +619 -0
- package/dist/chunk-OHHN2SO4.js +5135 -0
- package/dist/chunk-OKGUZO2U.js +34 -0
- package/dist/{chunk-GAEBEQVI.js → chunk-OOJYHWRB.js} +32 -346
- package/dist/{chunk-Q5WJOSJ7.js → chunk-OQ33BKR3.js} +2 -1
- package/dist/chunk-OQE5J4C6.js +73 -0
- package/dist/{chunk-KKNLWXI6.js → chunk-ORBHGJC5.js} +8 -8
- package/dist/chunk-POHLU5DW.js +1186 -0
- package/dist/chunk-QKMUKYO7.js +4961 -0
- package/dist/{chunk-ASND7OZK.js → chunk-QTYWRVRA.js} +13 -13
- package/dist/{chunk-EYOKLTMF.js → chunk-SRF2PJNW.js} +17 -3
- package/dist/chunk-SST6Z5JA.js +80 -0
- package/dist/chunk-STBPMHSX.js +2456 -0
- package/dist/chunk-T6YILFSB.js +80 -0
- package/dist/chunk-TZTZS7QK.js +227 -0
- package/dist/chunk-UOV2BYIW.js +107 -0
- package/dist/{chunk-Q3RUPKEJ.js → chunk-V4RXGQ5Q.js} +58 -189
- package/dist/chunk-VAKQQHWR.js +434 -0
- package/dist/chunk-VG7TBQIY.js +128 -0
- package/dist/chunk-VJWL6YS5.js +244 -0
- package/dist/chunk-WEH5XRJQ.js +32 -0
- package/dist/chunk-WMSVI4G2.js +2095 -0
- package/dist/chunk-WVO7V2QY.js +797 -0
- package/dist/chunk-X4RCMKVQ.js +641 -0
- package/dist/chunk-X75S7HFS.js +374 -0
- package/dist/chunk-XN3L4EYL.js +46 -0
- package/dist/{chunk-RDLVBZEO.js → chunk-YCWGATWI.js} +6 -4
- package/dist/chunk-YHZX5GEU.js +193 -0
- package/dist/chunk-YXLYO42X.js +91 -0
- package/dist/{chunk-NMOX6HFD.js → chunk-ZDOOVTXZ.js} +29 -77
- package/dist/chunk-ZI647VB5.js +37 -0
- package/dist/{chunk-C4PTHK7P.js → chunk-ZWLZP4ZT.js} +5 -5
- package/dist/cli/index.js +62 -54
- package/dist/clio-4LY5K2AC.js +25 -0
- package/dist/code-nav-7AX6FYE6.js +600 -0
- package/dist/codewiki/build-worker.js +66 -0
- package/dist/compile-cache-CVJMMODC.js +18 -0
- package/dist/{components-DMAOEKFB.js → components-KELWS457.js} +11 -6
- package/dist/{config-IRUQ7SE4.js → config-GTLUW2PR.js} +92 -55
- package/dist/configure-R6A64DHX.js +42 -0
- package/dist/context-5VKGUVJJ.js +866 -0
- package/dist/{context-3KWFLHJG.js → context-JFZEJ7W5.js} +15 -13
- package/dist/{context-5RADCKTR.js → context-RW5HC47S.js} +71 -35
- package/dist/{context-clear-7TSNPAAI.js → context-clear-6ZHBAZZT.js} +54 -28
- package/dist/{context-index-W4RLWOQH.js → context-index-BZ4UYMTC.js} +30 -24
- package/dist/dispatch-runner-VKBRCWQC.js +1997 -0
- package/dist/{docs-5AWSPS37.js → docs-2C2LTVT2.js} +23 -10
- package/dist/{doctor-UC5NAJYQ.js → doctor-KI767GSN.js} +27 -17
- package/dist/{eval-U6TJHRLX.js → eval-XSSNATB4.js} +29 -16
- package/dist/{evidence-YEGUW4L3.js → evidence-UA6AWDQQ.js} +46 -26
- package/dist/{evolve-TXARCTPG.js → evolve-QNTFGV6Z.js} +45 -25
- package/dist/{extensions-OZFJ3A3G.js → extensions-QVDOHDGJ.js} +16 -7
- package/dist/{fleet-6G3DHNYE.js → fleet-Q7UOMUSG.js} +163 -54
- package/dist/{fleet-preflight-DSNT37JK.js → fleet-preflight-DDN536IT.js} +7 -4
- package/dist/{init-KZ5QTF6M.js → init-WBB65ZHQ.js} +69 -32
- package/dist/{memory-73ESV5YC.js → memory-MD3O64RI.js} +48 -27
- package/dist/{models-A4PVNWJK.js → models-BZU34YWD.js} +39 -25
- package/dist/monitor-MEQA5C3I.js +661 -0
- package/dist/{chunk-FCIH3BIZ.js → orchestrator-CGFKEP27.js} +11832 -8687
- package/dist/{paths-C4H6IV77.js → paths-UXLN5YYZ.js} +10 -5
- package/dist/{preload-6WVMHX3A.js → preload-P6DGH2PZ.js} +2 -2
- package/dist/{reset-BGW6OGMV.js → reset-L2FQEE3E.js} +16 -10
- package/dist/{run-YTPEYQOH.js → run-IV4Q6RLN.js} +101 -61
- package/dist/{share-YIFFV4NQ.js → share-S5BZQC5I.js} +15 -8
- package/dist/{skills-2V6RA3OQ.js → skills-LQEKRDTN.js} +34 -14
- package/dist/{skills-eval-S2TVJO4F.js → skills-eval-3DC4HEWS.js} +70 -34
- package/dist/steer-GGWFUJUD.js +77 -0
- package/dist/{targets-TYXLPB23.js → targets-C4SSGQOB.js} +43 -27
- package/dist/terminal-lease-IT5JW2NR.js +395 -0
- package/dist/{trace-GGOJ6Q6Z.js → trace-PNCASAXC.js} +41 -16
- package/dist/{chunk-N6F52NLF.js → tree-sitter-HGKH6LG4.js} +28 -2306
- package/dist/{uninstall-LLLT4F4W.js → uninstall-FZCQCDKC.js} +10 -5
- package/dist/{upgrade-33G2LMM5.js → upgrade-7TT7SQ3G.js} +45 -25
- package/dist/{usage-ZAFSXKKG.js → usage-GV4PKT3M.js} +62 -31
- package/dist/verify-G6V4D2G7.js +716 -0
- package/dist/web-fetch-2YHJ3KTG.js +638 -0
- package/dist/{wiki-generate-NUQCVOQ3.js → wiki-generate-DQF6Z66B.js} +74 -34
- package/dist/worker/entry.js +221 -36
- package/dist/workspace-G4ZWUIPR.js +22 -0
- package/docs/README.md +22 -17
- package/docs/acp.md +168 -16
- package/docs/alcf-provider.md +1 -1
- package/docs/architecture.md +136 -7
- package/docs/artifact-versions.md +1 -1
- package/docs/built-in-agents.md +1 -1
- package/docs/capacity-and-scheduling.md +1 -1
- package/docs/commands-and-modes.md +114 -71
- package/docs/config-knobs-audit.md +1 -3
- package/docs/configuration-and-targets.md +174 -46
- package/docs/context-engine.md +29 -6
- package/docs/development-pipeline.md +26 -1
- package/docs/dispatch-architecture-rationale.md +1 -1
- package/docs/documentation-coverage.md +2 -2
- package/docs/documentation-guide.md +1 -1
- package/docs/environment-variables.md +13 -5
- package/docs/eval-runner.md +1 -1
- package/docs/evals-internal.md +1 -1
- package/docs/evidence-and-memory.md +6 -2
- package/docs/evolution.md +2 -2
- package/docs/exit-codes-and-output.md +15 -9
- package/docs/extensions-and-sharing.md +9 -9
- package/docs/fleet-dispatch.md +7 -5
- package/docs/git-commit-provenance.md +120 -0
- package/docs/glossary.md +1 -1
- package/docs/installation-and-lifecycle.md +34 -27
- package/docs/middleware-and-components.md +1 -1
- package/docs/model-catalog.md +45 -14
- package/docs/observability.md +8 -5
- package/docs/performance-methodology.md +491 -0
- package/docs/pi-boundary.md +72 -0
- package/docs/proactive-memory.md +3 -3
- package/docs/prompt-envelope-and-tools.md +24 -3
- package/docs/provider-adapter-cookbook.md +57 -4
- package/docs/release-cut-checklist.md +129 -115
- package/docs/safety-model.md +9 -5
- package/docs/scientific-validation.md +3 -3
- package/docs/session-lifecycle.md +55 -12
- package/docs/skills-marketplace.md +12 -8
- package/docs/time-conventions.md +1 -1
- package/docs/tool-usage.md +3 -3
- package/docs/trace-store.md +1 -1
- package/docs/troubleshooting.md +10 -7
- package/docs/tui-design.md +47 -10
- package/docs/worker-dispatch-mechanics.md +1 -1
- package/package.json +19 -22
- package/skills/coding/ast-grep/SKILL.md +136 -0
- package/skills/coding/ast-grep/evals.md +56 -0
- package/skills/coding/ast-grep/references/rule_reference.md +297 -0
- package/skills/coding/coding-standards/SKILL.md +113 -0
- package/skills/coding/coding-standards/evals.md +34 -0
- package/skills/coding/prototype/SKILL.md +86 -0
- package/skills/coding/prototype/evals.md +42 -0
- package/skills/coding/prototype/references/LOGIC.md +67 -0
- package/skills/coding/prototype/references/UI.md +112 -0
- package/skills/coding/tdd/SKILL.md +101 -0
- package/skills/coding/tdd/evals.md +41 -0
- package/skills/coding/tdd/references/mocking.md +59 -0
- package/skills/coding/tdd/references/tests.md +77 -0
- package/skills/context/context-handoff/SKILL.md +126 -0
- package/skills/context/context-handoff/evals.md +57 -0
- package/skills/context/context-handoff/scripts/new-handoff.sh +26 -0
- package/skills/context/context-prime/SKILL.md +95 -0
- package/skills/context/context-prime/evals.md +54 -0
- package/skills/meta/clio-dev/SKILL.md +91 -0
- package/skills/meta/clio-dev/evals.md +45 -0
- package/skills/meta/clio-test/SKILL.md +130 -0
- package/skills/meta/clio-test/evals.md +43 -0
- package/skills/meta/clio-test/references/harness.md +97 -0
- package/skills/meta/clio-test/references/test-map.md +59 -0
- package/skills/meta/credentials/SKILL.md +125 -0
- package/skills/meta/credentials/evals.md +104 -0
- package/skills/meta/find-skills/SKILL.md +72 -0
- package/skills/meta/find-skills/evals.md +47 -0
- package/skills/meta/herdr/SKILL.md +127 -0
- package/skills/meta/herdr/evals.md +38 -0
- package/skills/meta/skill-craft/SKILL.md +102 -0
- package/skills/meta/skill-craft/evals.md +41 -0
- package/skills/planning/architecture/SKILL.md +129 -0
- package/skills/planning/architecture/evals.md +36 -0
- package/skills/planning/backlog/SKILL.md +90 -0
- package/skills/planning/backlog/evals.md +43 -0
- package/skills/planning/prd/SKILL.md +82 -0
- package/skills/planning/prd/evals.md +49 -0
- package/skills/planning/product-intent/SKILL.md +112 -0
- package/skills/planning/product-intent/evals.md +36 -0
- package/skills/planning/tech-spec/SKILL.md +115 -0
- package/skills/planning/tech-spec/evals.md +47 -0
- package/skills/registry.yaml +136 -0
- package/skills/research/arxiv-literature/SKILL.md +104 -0
- package/skills/research/arxiv-literature/evals.md +58 -0
- package/skills/research/experiment-protocol/SKILL.md +122 -0
- package/skills/research/experiment-protocol/evals.md +91 -0
- package/skills/research/scientific-debugging/SKILL.md +119 -0
- package/skills/research/scientific-debugging/evals.md +138 -0
- package/skills/research/scientific-modernization/SKILL.md +138 -0
- package/skills/research/scientific-modernization/evals.md +84 -0
- package/skills/workflow/design-council/SKILL.md +139 -0
- package/skills/workflow/design-council/evals.md +97 -0
- package/skills/workflow/grill-me/SKILL.md +186 -0
- package/skills/workflow/grill-me/evals.md +78 -0
- package/skills/workflow/workflow-distiller/SKILL.md +136 -0
- package/skills/workflow/workflow-distiller/evals.md +107 -0
- package/src/cli/acp.ts +31 -4
- package/src/cli/clio.ts +68 -6
- package/src/cli/config-inspect.ts +28 -22
- package/src/cli/configure.ts +47 -9
- package/src/cli/context-clear.ts +2 -2
- package/src/cli/context-index.ts +21 -23
- package/src/cli/context.ts +13 -8
- package/src/cli/default-target.ts +9 -17
- package/src/cli/docs.ts +11 -5
- package/src/cli/evidence.ts +4 -1
- package/src/cli/extensions.ts +10 -1
- package/src/cli/fleet.ts +47 -6
- package/src/cli/index.ts +55 -26
- package/src/cli/memory.ts +3 -1
- package/src/cli/models.ts +1 -1
- package/src/cli/modes/json-stream.ts +37 -1
- package/src/cli/modes/print.ts +24 -9
- package/src/cli/run.ts +2 -2
- package/src/cli/skills-eval.ts +23 -8
- package/src/cli/skills.ts +19 -4
- package/src/cli/targets.ts +4 -0
- package/src/cli/text-layout.ts +15 -5
- package/src/cli/trace.ts +62 -14
- package/src/cli/upgrade.ts +18 -2
- package/src/cli/usage.ts +10 -3
- package/src/cli/wiki-generate.ts +2 -1
- package/src/core/agent-environment.ts +7 -0
- package/src/core/bash-exec.ts +72 -1
- package/src/core/boot-trace.ts +9 -4
- package/src/core/bus-events.ts +20 -4
- package/src/core/commit-attribution.ts +157 -0
- package/src/core/compile-cache.ts +159 -0
- package/src/core/config.ts +131 -2
- package/src/core/defaults.ts +39 -5
- package/src/core/domain-loader.ts +12 -5
- package/src/core/git-commit-attribution.ts +362 -0
- package/src/core/incomplete-installation.ts +45 -0
- package/src/core/response-schema.ts +1 -1
- package/src/core/safe-exec.ts +13 -1
- package/src/core/settings-layers.ts +155 -21
- package/src/core/skill-activation.ts +1 -1
- package/src/core/startup-timer.ts +3 -3
- package/src/core/state-file-lock.ts +13 -1
- package/src/core/termination.ts +78 -5
- package/src/domains/config/classify.ts +15 -3
- package/src/domains/config/extension.ts +19 -13
- package/src/domains/config/index.ts +10 -0
- package/src/domains/config/keybindings.ts +42 -6
- package/src/domains/context/bootstrap-prompt.ts +1 -1
- package/src/domains/context/bootstrap.ts +111 -18
- package/src/domains/context/clear.ts +16 -11
- package/src/domains/context/clio-md.ts +111 -9
- package/src/domains/context/codewiki/artifact.ts +400 -0
- package/src/domains/context/codewiki/build-worker-protocol.ts +24 -0
- package/src/domains/context/codewiki/build-worker.ts +54 -0
- package/src/domains/context/codewiki/coordinator.ts +182 -0
- package/src/domains/context/codewiki/indexer.ts +59 -144
- package/src/domains/context/codewiki/paths.ts +67 -0
- package/src/domains/context/codewiki/schema.ts +80 -0
- package/src/domains/context/codewiki/tree-sitter.ts +1 -1
- package/src/domains/context/contract.ts +11 -5
- package/src/domains/context/extension.ts +94 -143
- package/src/domains/context/fingerprint.ts +3 -1
- package/src/domains/context/index.ts +12 -22
- package/src/domains/context/project-metadata.ts +19 -0
- package/src/domains/context/prompt-context.ts +9 -10
- package/src/domains/context/refresh.ts +29 -21
- package/src/domains/context/runtime.ts +17 -0
- package/src/domains/context/wiki/generate.ts +39 -34
- package/src/domains/context/wiki/plan.ts +1 -1
- package/src/domains/context/wiki/prompts.ts +21 -8
- package/src/domains/dispatch/code-step.ts +20 -1
- package/src/domains/dispatch/extension.ts +158 -21
- package/src/domains/dispatch/failure-classification.ts +6 -0
- package/src/domains/dispatch/fleet-commit-attribution.ts +56 -0
- package/src/domains/dispatch/orphan-recovery.ts +50 -8
- package/src/domains/dispatch/receipt-integrity.ts +5 -0
- package/src/domains/dispatch/state.ts +31 -6
- package/src/domains/dispatch/transport.ts +2 -1
- package/src/domains/dispatch/types.ts +14 -0
- package/src/domains/dispatch/worker-spawn.ts +21 -2
- package/src/domains/eval/metrics/context.ts +1 -1
- package/src/domains/eval/types.ts +0 -1
- package/src/domains/evidence/build.ts +41 -1
- package/src/domains/lifecycle/migrations/2026-08-18-lmstudio-runtime-id.ts +52 -0
- package/src/domains/lifecycle/migrations/index.ts +24 -4
- package/src/domains/middleware/hooks-io.ts +12 -0
- package/src/domains/middleware/skills-reminder.ts +30 -15
- package/src/domains/prompts/compiler.ts +142 -84
- package/src/domains/prompts/contract.ts +18 -2
- package/src/domains/prompts/extension.ts +39 -7
- package/src/domains/prompts/fragment-loader.ts +0 -1
- package/src/domains/prompts/fragments/identity/clio.md +2 -4
- package/src/domains/prompts/fragments/identity/docs-routing.md +10 -0
- package/src/domains/prompts/fragments/identity/self-awareness.md +1 -45
- package/src/domains/prompts/fragments/operating/contract.md +4 -50
- package/src/domains/prompts/fragments/operating/delegation.md +42 -0
- package/src/domains/prompts/fragments/operating/skills.md +26 -0
- package/src/domains/prompts/fragments/operating/worker.md +16 -0
- package/src/domains/prompts/fragments/safety/auto-edit.md +5 -5
- package/src/domains/prompts/fragments/safety/full-auto.md +3 -3
- package/src/domains/prompts/fragments/safety/read-only.md +4 -4
- package/src/domains/prompts/fragments/safety/suggest.md +2 -2
- package/src/domains/prompts/fragments/wiki/page.md +10 -0
- package/src/domains/prompts/fragments/wiki/plan.md +10 -0
- package/src/domains/prompts/preload.ts +3 -3
- package/src/domains/providers/auth/api-key.ts +1 -1
- package/src/domains/providers/auth/backend-file.ts +20 -10
- package/src/domains/providers/auth/backend-memory.ts +59 -4
- package/src/domains/providers/auth/boot-status.ts +65 -0
- package/src/domains/providers/auth/oauth.ts +2 -1
- package/src/domains/providers/auth/storage.ts +97 -38
- package/src/domains/providers/capabilities.ts +12 -4
- package/src/domains/providers/contract.ts +15 -4
- package/src/domains/providers/extension.ts +18 -6
- package/src/domains/providers/model-runtime-capabilities.ts +15 -4
- package/src/domains/providers/models/local-models/clio-local-coding-targets.yaml +118 -35
- package/src/domains/providers/plugins.ts +5 -3
- package/src/domains/providers/probe/fingerprint.ts +25 -5
- package/src/domains/providers/registry.ts +31 -10
- package/src/domains/providers/runtimes/boot-manifest.ts +55 -0
- package/src/domains/providers/runtimes/builtins.ts +2 -2
- package/src/domains/providers/runtimes/common/lmstudio-http.ts +423 -0
- package/src/domains/providers/runtimes/common/local-synth.ts +6 -7
- package/src/domains/providers/runtimes/local-native/lmstudio.ts +241 -0
- package/src/domains/providers/support.ts +6 -3
- package/src/domains/providers/types/local-model-quirks.ts +7 -9
- package/src/domains/providers/types/runtime-descriptor.ts +12 -1
- package/src/domains/providers/types/target-descriptor.ts +22 -0
- package/src/domains/resources/contract.ts +0 -1
- package/src/domains/resources/extension.ts +1 -3
- package/src/domains/resources/loader.ts +3 -4
- package/src/domains/resources/prompts/loader.ts +16 -2
- package/src/domains/resources/prompts/substitute.ts +1 -65
- package/src/domains/resources/skills/content-hash.ts +2 -0
- package/src/domains/resources/skills/install.ts +17 -0
- package/src/domains/resources/skills/loader.ts +17 -10
- package/src/domains/resources/skills/marketplace.ts +55 -9
- package/src/domains/safety/action-classifier.ts +4 -2
- package/src/domains/safety/audit.ts +8 -2
- package/src/domains/safety/extension.ts +1 -1
- package/src/domains/session/compaction/branch-summary.ts +3 -2
- package/src/domains/session/compaction/cut-point.ts +2 -1
- package/src/domains/session/compaction/tokens.ts +2 -1
- package/src/domains/session/context-ledger.ts +14 -0
- package/src/domains/session/contract.ts +15 -0
- package/src/domains/session/decision-board.ts +190 -0
- package/src/domains/session/entries.ts +66 -3
- package/src/domains/session/extension.ts +93 -12
- package/src/domains/session/retry.ts +10 -18
- package/src/domains/session/session-artifacts.ts +107 -0
- package/src/domains/session/task-board.ts +207 -13
- package/src/domains/session/tree/active-path.ts +44 -5
- package/src/domains/session/tree/fork.ts +26 -27
- package/src/domains/session/tree/preview.ts +2 -2
- package/src/domains/session/workspace/git-probe.ts +17 -11
- package/src/domains/user-tasks/store.ts +297 -0
- package/src/engine/acp/errors.ts +96 -0
- package/src/engine/acp/server.ts +1728 -146
- package/src/engine/acp/transport.ts +135 -14
- package/src/engine/acp/types.ts +26 -0
- package/src/engine/agent.ts +3 -3
- package/src/engine/ai.ts +32 -27
- package/src/engine/alcf-oauth.ts +26 -19
- package/src/engine/api-registry.ts +223 -0
- package/src/engine/apis/index.ts +3 -7
- package/src/engine/apis/llamacpp-residency.ts +49 -9
- package/src/engine/apis/lmstudio-residency.ts +5 -21
- package/src/engine/apis/lmstudio.ts +243 -0
- package/src/engine/apis/ollama-native.ts +24 -3
- package/src/engine/apis/openai-completions.ts +170 -91
- package/src/engine/apis/residency.ts +139 -3
- package/src/engine/apis/types.ts +16 -0
- package/src/engine/env-api-keys.ts +98 -0
- package/src/engine/gemma-channel-filter.ts +223 -0
- package/src/engine/instrumented-tui.ts +192 -0
- package/src/engine/messages.ts +14 -0
- package/src/engine/models.ts +42 -0
- package/src/engine/oauth.ts +16 -12
- package/src/engine/prompt-templates.ts +1 -0
- package/src/engine/provider-payload.ts +16 -59
- package/src/engine/strip-tokenizer-sentinels.ts +1 -1
- package/src/engine/truncate.ts +9 -0
- package/src/engine/tui.ts +17 -9
- package/src/engine/types.ts +3 -6
- package/src/engine/worker-runtime-capabilities.ts +5 -0
- package/src/engine/worker-runtime.ts +1 -1
- package/src/engine/worker-tools.ts +9 -4
- package/src/entry/boot-options.ts +50 -0
- package/src/entry/orchestrator.ts +288 -150
- package/src/interactive/application-controller.ts +89 -2
- package/src/interactive/chat-loop.ts +266 -41
- package/src/interactive/chat-panel.ts +173 -47
- package/src/interactive/chat-renderer.ts +262 -72
- package/src/interactive/clio-editor.ts +3 -8
- package/src/interactive/command-fallbacks.ts +2 -2
- package/src/interactive/context-overlay.ts +27 -1
- package/src/interactive/editor-submit.ts +228 -24
- package/src/interactive/export-html/ansi-to-html.ts +161 -0
- package/src/interactive/export-html/index.ts +51 -0
- package/src/interactive/export-html/template.ts +45 -0
- package/src/interactive/export-html/tool-renderer.ts +54 -0
- package/src/interactive/footer/dashboard.ts +4 -0
- package/src/interactive/footer/notifications.ts +1 -1
- package/src/interactive/footer/widgets.ts +20 -2
- package/src/interactive/footer-panel.ts +2 -2
- package/src/interactive/format-time.ts +14 -2
- package/src/interactive/interactive-application.ts +201 -17
- package/src/interactive/interactive-event-projection.ts +6 -1
- package/src/interactive/interactive-input-runtime.ts +50 -4
- package/src/interactive/interactive-presentation.ts +151 -19
- package/src/interactive/interactive-shell.ts +268 -14
- package/src/interactive/interactive-slash-runtime.ts +176 -114
- package/src/interactive/interactive-tickers.ts +38 -7
- package/src/interactive/keybinding-manager.ts +1 -1
- package/src/interactive/layout.ts +40 -3
- package/src/interactive/overlay-frame.ts +1 -1
- package/src/interactive/overlay-general-openers.ts +58 -1
- package/src/interactive/overlay-key-routing.ts +3 -0
- package/src/interactive/overlay-lifecycle.ts +13 -0
- package/src/interactive/overlay-permission-lifecycle.ts +2 -1
- package/src/interactive/overlay-session-lifecycle.ts +69 -12
- package/src/interactive/overlays/decisions.ts +300 -0
- package/src/interactive/overlays/help-reference.ts +15 -10
- package/src/interactive/overlays/model-selector.ts +34 -16
- package/src/interactive/overlays/session-selector.ts +18 -0
- package/src/interactive/overlays/settings.ts +105 -17
- package/src/interactive/overlays/skills-hub.ts +4 -4
- package/src/interactive/overlays/tree-selector.ts +41 -6
- package/src/interactive/render-trace.ts +499 -90
- package/src/interactive/renderers/compaction-summary.ts +2 -2
- package/src/interactive/renderers/diff.ts +115 -104
- package/src/interactive/renderers/mermaid.ts +53 -0
- package/src/interactive/renderers/tool-execution.ts +386 -133
- package/src/interactive/renderers/worker-entry.ts +20 -4
- package/src/interactive/session-switch-settlement.ts +10 -0
- package/src/interactive/slash-autocomplete.ts +6 -114
- package/src/interactive/slash-commands.ts +135 -47
- package/src/interactive/slash-spec.ts +9 -38
- package/src/interactive/status/controller.ts +5 -1
- package/src/interactive/stdout-backpressure.ts +99 -0
- package/src/interactive/stream-pacer.ts +530 -0
- package/src/interactive/stream-pacing-policy.ts +66 -0
- package/src/interactive/tasks-overlay.ts +368 -14
- package/src/interactive/terminal-lease.ts +485 -0
- package/src/interactive/theme/tokens.ts +1 -1
- package/src/interactive/turn-context.ts +4 -3
- package/src/interactive/turn-persistence.ts +30 -13
- package/src/interactive/turn-queues.ts +12 -0
- package/src/interactive/turn-recovery.ts +25 -8
- package/src/interactive/turn-runtime.ts +79 -12
- package/src/interactive/turn-state.ts +10 -0
- package/src/interactive/view/artifacts.ts +114 -4
- package/src/interactive/view/view-overlay.ts +3 -0
- package/src/interactive/welcome-dashboard.ts +17 -16
- package/src/interactive/worker-receipts.ts +52 -3
- package/src/interactive/worker-stream.ts +5 -1
- package/src/tools/agent-tools.ts +23 -3
- package/src/tools/artifact.ts +2 -2
- package/src/tools/ask-user.ts +23 -13
- package/src/tools/bash.ts +30 -2
- package/src/tools/bootstrap.ts +34 -431
- package/src/tools/builtin-tool-catalog.ts +265 -0
- package/src/tools/codewiki/code-nav-surface.ts +29 -0
- package/src/tools/codewiki/code-nav.ts +8 -22
- package/src/tools/codewiki/shared.ts +41 -38
- package/src/tools/context/docs-engine.ts +14 -3
- package/src/tools/context/index.ts +107 -28
- package/src/tools/context/surface.ts +19 -0
- package/src/tools/core-bootstrap.ts +168 -0
- package/src/tools/credential-present.ts +5 -5
- package/src/tools/dispatch-admission.ts +533 -0
- package/src/tools/dispatch-background.ts +54 -0
- package/src/tools/dispatch-event-text.ts +6 -0
- package/src/tools/dispatch-plan.ts +9 -4
- package/src/tools/dispatch-run-events.ts +238 -0
- package/src/tools/dispatch-runner.ts +2370 -0
- package/src/tools/dispatch-scout-admission.ts +295 -0
- package/src/tools/dispatch-types.ts +77 -0
- package/src/tools/dispatch.ts +67 -3161
- package/src/tools/find.ts +4 -2
- package/src/tools/grep.ts +2 -2
- package/src/tools/lazy-tool.ts +60 -0
- package/src/tools/ledger.ts +3 -3
- package/src/tools/monitor-surface.ts +36 -0
- package/src/tools/monitor.ts +2 -32
- package/src/tools/observers.ts +2 -2
- package/src/tools/registry.ts +39 -27
- package/src/tools/safe-exec.ts +2 -2
- package/src/tools/steer-surface.ts +17 -0
- package/src/tools/steer.ts +2 -13
- package/src/tools/tasks.ts +108 -11
- package/src/tools/truncate.ts +25 -184
- package/src/tools/verify/frontend.ts +3 -1
- package/src/tools/verify/index.ts +3 -38
- package/src/tools/verify/surface.ts +46 -0
- package/src/tools/web-fetch-surface.ts +23 -0
- package/src/tools/web-fetch.ts +2 -20
- package/src/tools/write.ts +7 -2
- package/src/worker/entry.ts +39 -2
- package/src/worker/spec-contract.ts +26 -5
- package/dist/chunk-7SS2CTV2.js +0 -61361
- package/dist/chunk-DKGKUHFA.js +0 -924
- package/dist/chunk-GEP36Y4X.js +0 -12796
- package/dist/chunk-XYWBQRDM.js +0 -137
- package/dist/clio-BZVGEUFJ.js +0 -58
- package/dist/configure-S7S6F6CL.js +0 -32
- package/docs/html/agents_blueprint.html +0 -936
- package/docs/html/alcf_blueprint.html +0 -324
- package/docs/html/architecture_blueprint.html +0 -850
- package/docs/html/commands_blueprint.html +0 -939
- package/docs/html/config_knobs_audit_blueprint.html +0 -178
- package/docs/html/configuration_blueprint.html +0 -1080
- package/docs/html/context_blueprint.html +0 -603
- package/docs/html/documentation_blueprint.html +0 -832
- package/docs/html/environment_blueprint.html +0 -404
- package/docs/html/eval_blueprint.html +0 -743
- package/docs/html/evals_internal_blueprint.html +0 -190
- package/docs/html/evolution_blueprint.html +0 -674
- package/docs/html/extensions_blueprint.html +0 -2065
- package/docs/html/fleet_dispatch_blueprint.html +0 -286
- package/docs/html/index.html +0 -919
- package/docs/html/lifecycle_blueprint.html +0 -723
- package/docs/html/memory_blueprint.html +0 -699
- package/docs/html/middleware_blueprint.html +0 -664
- package/docs/html/models_blueprint.html +0 -2366
- package/docs/html/observability_blueprint.html +0 -683
- package/docs/html/provider_adapter_blueprint.html +0 -245
- package/docs/html/safety_blueprint.html +0 -1386
- package/docs/html/shared.css +0 -571
- package/docs/html/shared.js +0 -143
- package/docs/html/skills_blueprint.html +0 -671
- package/docs/html/soak_blueprint.html +0 -182
- package/docs/html/tool_usage_blueprint.html +0 -350
- package/docs/html/tools_blueprint.html +0 -2249
- package/docs/html/trace_blueprint.html +0 -235
- package/docs/html/tui_design_blueprint.html +0 -374
- package/docs/html/validation_blueprint.html +0 -961
- package/docs/html/worker_dispatch_blueprint.html +0 -231
- package/src/core/release.ts +0 -2
- package/src/domains/providers/runtimes/common/lmstudio-logger.ts +0 -32
- package/src/domains/providers/runtimes/local-native/lmstudio-native.ts +0 -491
- package/src/engine/apis/lmstudio-native.ts +0 -1438
- package/src/engine/apis/thinking-replay.ts +0 -11
- package/src/tools/string-enum.ts +0 -15
package/src/cli/configure.ts
CHANGED
|
@@ -26,6 +26,7 @@ import { probeCapabilitiesForModel } from "../domains/providers/model-capabiliti
|
|
|
26
26
|
import { fingerprintNativeRuntime } from "../domains/providers/probe/fingerprint.js";
|
|
27
27
|
import { getRuntimeRegistry } from "../domains/providers/registry.js";
|
|
28
28
|
import { registerBuiltinRuntimes } from "../domains/providers/runtimes/builtins.js";
|
|
29
|
+
import { greetLmStudio } from "../domains/providers/runtimes/common/lmstudio-http.js";
|
|
29
30
|
import type { ProbeContext, ProbeResult, RuntimeDescriptor } from "../domains/providers/types/runtime-descriptor.js";
|
|
30
31
|
import type { TargetDescriptor } from "../domains/providers/types/target-descriptor.js";
|
|
31
32
|
import { registerClioOAuthProviders } from "../engine/oauth.js";
|
|
@@ -88,6 +89,7 @@ const DEFAULT_PORTS: Record<string, number> = {
|
|
|
88
89
|
"llamacpp-embed": 8080,
|
|
89
90
|
"llamacpp-rerank": 8080,
|
|
90
91
|
"lmstudio-native": 1234,
|
|
92
|
+
lmstudio: 1234,
|
|
91
93
|
"ollama-native": 11434,
|
|
92
94
|
vllm: 8000,
|
|
93
95
|
sglang: 30000,
|
|
@@ -270,7 +272,8 @@ function normalizeUrl(input: string, runtimeId: string): string {
|
|
|
270
272
|
const trimmed = input.trim();
|
|
271
273
|
if (trimmed.length === 0) return defaultUrlFor(runtimeId);
|
|
272
274
|
const hasScheme = /^[a-z][a-z0-9+.-]*:\/\//i.test(trimmed);
|
|
273
|
-
|
|
275
|
+
let withScheme = hasScheme ? trimmed : `http://${trimmed}`;
|
|
276
|
+
if (runtimeId === "lmstudio") withScheme = withScheme.replace(/^ws:/u, "http:").replace(/^wss:/u, "https:");
|
|
274
277
|
try {
|
|
275
278
|
const parsed = new URL(withScheme);
|
|
276
279
|
if (!hasScheme && !parsed.port && DEFAULT_PORTS[runtimeId]) {
|
|
@@ -418,10 +421,15 @@ async function runtimeProbe(runtime: RuntimeDescriptor, target: TargetDescriptor
|
|
|
418
421
|
}
|
|
419
422
|
}
|
|
420
423
|
|
|
421
|
-
async function runtimeProbeModels(
|
|
424
|
+
async function runtimeProbeModels(
|
|
425
|
+
runtime: RuntimeDescriptor,
|
|
426
|
+
target: TargetDescriptor,
|
|
427
|
+
authToken?: string,
|
|
428
|
+
): Promise<string[]> {
|
|
422
429
|
if (typeof runtime.probeModels !== "function") return [];
|
|
423
430
|
try {
|
|
424
|
-
|
|
431
|
+
const context = await buildProbeContext(runtime, target);
|
|
432
|
+
return await runtime.probeModels(target, authToken === undefined ? context : { ...context, authToken });
|
|
425
433
|
} catch {
|
|
426
434
|
return [];
|
|
427
435
|
}
|
|
@@ -591,6 +599,7 @@ function buildDescriptor(
|
|
|
591
599
|
contextWindow?: number;
|
|
592
600
|
maxTokens?: number;
|
|
593
601
|
reasoning?: boolean;
|
|
602
|
+
lmstudio?: TargetDescriptor["lmstudio"];
|
|
594
603
|
},
|
|
595
604
|
): TargetDescriptor {
|
|
596
605
|
const descriptor: TargetDescriptor = { id, runtime: runtime.id };
|
|
@@ -615,6 +624,7 @@ function buildDescriptor(
|
|
|
615
624
|
if (parts.maxTokens !== undefined) caps.maxTokens = parts.maxTokens;
|
|
616
625
|
if (parts.reasoning !== undefined) caps.reasoning = parts.reasoning;
|
|
617
626
|
if (Object.keys(caps).length > 0) descriptor.capabilities = caps;
|
|
627
|
+
if (parts.lmstudio) descriptor.lmstudio = parts.lmstudio;
|
|
618
628
|
return descriptor;
|
|
619
629
|
}
|
|
620
630
|
|
|
@@ -673,10 +683,11 @@ async function resolveSupportedWireModels(
|
|
|
673
683
|
runtime: RuntimeDescriptor,
|
|
674
684
|
target: TargetDescriptor,
|
|
675
685
|
existing?: TargetDescriptor,
|
|
686
|
+
authToken?: string,
|
|
676
687
|
): Promise<string[]> {
|
|
677
688
|
const known = listKnownModelsForRuntime(runtime.id);
|
|
678
689
|
if (known.length > 0) return known;
|
|
679
|
-
const discovered = runtime.kind === "http" ? await runtimeProbeModels(runtime, target) : [];
|
|
690
|
+
const discovered = runtime.kind === "http" ? await runtimeProbeModels(runtime, target, authToken) : [];
|
|
680
691
|
if (discovered.length > 0) return discovered;
|
|
681
692
|
return existing?.wireModels ? [...existing.wireModels] : [];
|
|
682
693
|
}
|
|
@@ -712,7 +723,7 @@ async function askModelChoice(
|
|
|
712
723
|
*/
|
|
713
724
|
function refuseCatalogSeededModel(runtime: RuntimeDescriptor, support: ProviderSupportEntry): void {
|
|
714
725
|
printError(
|
|
715
|
-
`--model is required for ${runtime.id}: its ${support.modelHints.length} model ids come from the
|
|
726
|
+
`--model is required for ${runtime.id}: its ${support.modelHints.length} model ids come from the provider catalog in name order, which recommends none of them`,
|
|
716
727
|
);
|
|
717
728
|
process.stderr.write(
|
|
718
729
|
` run \`clio-coder configure --runtime ${runtime.id}\` with no other flags to choose from the full list\n`,
|
|
@@ -742,7 +753,7 @@ async function runNonInteractive(runtime: RuntimeDescriptor, args: ParsedArgs):
|
|
|
742
753
|
const auth = openAuthStorage();
|
|
743
754
|
const support = buildProviderSupportEntry(runtime);
|
|
744
755
|
const existing = settings.targets.find((e) => e.id === args.id);
|
|
745
|
-
if (existing && existing.runtime !== runtime.id) {
|
|
756
|
+
if (existing && (getRuntimeRegistry().get(existing.runtime)?.id ?? existing.runtime) !== runtime.id) {
|
|
746
757
|
printError(`target ${args.id} already exists with runtime ${existing.runtime}`);
|
|
747
758
|
return 2;
|
|
748
759
|
}
|
|
@@ -750,6 +761,16 @@ async function runNonInteractive(runtime: RuntimeDescriptor, args: ParsedArgs):
|
|
|
750
761
|
if (!url && support.supportsCustomUrl) {
|
|
751
762
|
url = defaultUrlFor(runtime.id);
|
|
752
763
|
}
|
|
764
|
+
if (url && runtime.id === "lmstudio") {
|
|
765
|
+
const greeting = await greetLmStudio(
|
|
766
|
+
{ id: args.id, runtime: runtime.id, url },
|
|
767
|
+
{ credentialsPresent: new Set(), httpTimeoutMs: 750 },
|
|
768
|
+
);
|
|
769
|
+
if (!greeting.ok) {
|
|
770
|
+
printError(`refusing to save LM Studio target '${args.id}': ${url} did not return the LM Studio greeting`);
|
|
771
|
+
return 2;
|
|
772
|
+
}
|
|
773
|
+
}
|
|
753
774
|
if (url && (runtime.id === "openai-compat" || runtime.id === "anthropic-compat")) {
|
|
754
775
|
const fingerprint = await fingerprintNativeRuntime(url);
|
|
755
776
|
if (fingerprint) {
|
|
@@ -787,8 +808,9 @@ async function runNonInteractive(runtime: RuntimeDescriptor, args: ParsedArgs):
|
|
|
787
808
|
...(args.contextWindow !== undefined ? { contextWindow: args.contextWindow } : {}),
|
|
788
809
|
...(args.maxTokens !== undefined ? { maxTokens: args.maxTokens } : {}),
|
|
789
810
|
...(args.reasoning !== undefined ? { reasoning: args.reasoning } : {}),
|
|
811
|
+
...(existing?.lmstudio ? { lmstudio: existing.lmstudio } : {}),
|
|
790
812
|
});
|
|
791
|
-
const wireModels = await resolveSupportedWireModels(runtime, seed, existing);
|
|
813
|
+
const wireModels = await resolveSupportedWireModels(runtime, seed, existing, args.apiKey);
|
|
792
814
|
const model =
|
|
793
815
|
args.model ??
|
|
794
816
|
existing?.defaultModel ??
|
|
@@ -816,6 +838,7 @@ async function runNonInteractive(runtime: RuntimeDescriptor, args: ParsedArgs):
|
|
|
816
838
|
...(args.contextWindow !== undefined ? { contextWindow: args.contextWindow } : {}),
|
|
817
839
|
...(args.maxTokens !== undefined ? { maxTokens: args.maxTokens } : {}),
|
|
818
840
|
...(args.reasoning !== undefined ? { reasoning: args.reasoning } : {}),
|
|
841
|
+
...(existing?.lmstudio ? { lmstudio: existing.lmstudio } : {}),
|
|
819
842
|
});
|
|
820
843
|
const setOrchestrator = args.setOrchestrator || args.orchestratorModel !== undefined;
|
|
821
844
|
const setBackground = args.setBackground || args.backgroundModel !== undefined;
|
|
@@ -933,7 +956,7 @@ async function pickRuntimeFromEntries(
|
|
|
933
956
|
}
|
|
934
957
|
}
|
|
935
958
|
|
|
936
|
-
const LOCAL_APP_RUNTIME_IDS: ReadonlySet<string> = new Set(["ollama-native", "lmstudio
|
|
959
|
+
const LOCAL_APP_RUNTIME_IDS: ReadonlySet<string> = new Set(["ollama-native", "lmstudio"]);
|
|
937
960
|
|
|
938
961
|
// Generic protocol-compatible runtimes. They are classified local-http (they
|
|
939
962
|
// carry a probe and no cloud catalog entry), but a hosted endpoint such as
|
|
@@ -1099,6 +1122,16 @@ async function runInteractive(
|
|
|
1099
1122
|
runtime = steered;
|
|
1100
1123
|
support = buildProviderSupportEntry(runtime);
|
|
1101
1124
|
}
|
|
1125
|
+
if (runtime.id === "lmstudio") {
|
|
1126
|
+
const greeting = await greetLmStudio(
|
|
1127
|
+
{ id: targetId, runtime: runtime.id, url },
|
|
1128
|
+
{ credentialsPresent: new Set(), httpTimeoutMs: 750 },
|
|
1129
|
+
);
|
|
1130
|
+
if (!greeting.ok) {
|
|
1131
|
+
printError(`refusing to save LM Studio target '${targetId}': ${url} did not return the LM Studio greeting`);
|
|
1132
|
+
return 2;
|
|
1133
|
+
}
|
|
1134
|
+
}
|
|
1102
1135
|
}
|
|
1103
1136
|
|
|
1104
1137
|
let apiKeyEnv: string | undefined;
|
|
@@ -1174,6 +1207,7 @@ async function runInteractive(
|
|
|
1174
1207
|
...(defaults.contextWindow !== undefined ? { contextWindow: defaults.contextWindow } : {}),
|
|
1175
1208
|
...(defaults.maxTokens !== undefined ? { maxTokens: defaults.maxTokens } : {}),
|
|
1176
1209
|
...(defaults.reasoning !== undefined ? { reasoning: defaults.reasoning } : {}),
|
|
1210
|
+
...(existing?.lmstudio ? { lmstudio: existing.lmstudio } : {}),
|
|
1177
1211
|
});
|
|
1178
1212
|
|
|
1179
1213
|
if (runtime.kind === "http") {
|
|
@@ -1190,7 +1224,7 @@ async function runInteractive(
|
|
|
1190
1224
|
process.stdout.write(` ${index + 1}. ${wireModel}${wireModel === model ? " [default]" : ""}\n`);
|
|
1191
1225
|
}
|
|
1192
1226
|
if (!model && catalogOrdered) {
|
|
1193
|
-
process.stdout.write(` listed in
|
|
1227
|
+
process.stdout.write(` listed in provider catalog order, which recommends none of them; pick one.\n`);
|
|
1194
1228
|
}
|
|
1195
1229
|
for (;;) {
|
|
1196
1230
|
const pickedModel = await askModelChoice(rl, "Default target model", wireModels, model);
|
|
@@ -1259,6 +1293,7 @@ async function runInteractive(
|
|
|
1259
1293
|
...(contextWindowChoice !== undefined ? { contextWindow: contextWindowChoice } : {}),
|
|
1260
1294
|
...(defaults.maxTokens !== undefined ? { maxTokens: defaults.maxTokens } : {}),
|
|
1261
1295
|
...(reasoningChoice !== undefined ? { reasoning: reasoningChoice } : {}),
|
|
1296
|
+
...(existing?.lmstudio ? { lmstudio: existing.lmstudio } : {}),
|
|
1262
1297
|
});
|
|
1263
1298
|
try {
|
|
1264
1299
|
assertOrchestratorReplacementEligible(settings, descriptor);
|
|
@@ -1441,6 +1476,9 @@ export async function runConfigureCommand(argv: ReadonlyArray<string>): Promise<
|
|
|
1441
1476
|
process.stdout.write("run `clio-coder configure --list` to see registered runtimes\n");
|
|
1442
1477
|
return 2;
|
|
1443
1478
|
}
|
|
1479
|
+
if (runtimeId === "lmstudio-native" && runtime.id === "lmstudio") {
|
|
1480
|
+
process.stderr.write("warning: runtime 'lmstudio-native' is deprecated; using 'lmstudio'\n");
|
|
1481
|
+
}
|
|
1444
1482
|
}
|
|
1445
1483
|
const hasTargetSetupFlag =
|
|
1446
1484
|
args.id !== undefined ||
|
package/src/cli/context-clear.ts
CHANGED
|
@@ -9,10 +9,10 @@ const HELP = `Usage:
|
|
|
9
9
|
Clear accumulated project context owned by the context engine:
|
|
10
10
|
.clio-coder/codewiki.json, .clio-coder/state.json, .clio-coder/handoffs/, and .clio-coder/proposals/.
|
|
11
11
|
|
|
12
|
-
Preserves by default: CLIO-CODER.md, .clio-coder/agents/, .clio-coder/skills/, and .clio-coder/wiki/.
|
|
12
|
+
Preserves by default: CLIO-CODER.md, CLIO-CODER.override.md, .clio-coder/agents/, .clio-coder/skills/, and .clio-coder/wiki/.
|
|
13
13
|
|
|
14
14
|
Options:
|
|
15
|
-
--all also remove CLIO-CODER.md after a second confirmation
|
|
15
|
+
--all also remove the local CLIO-CODER.md after a second confirmation; overrides stay human-owned
|
|
16
16
|
--yes, -y answer every confirmation, required when stdin is not a terminal
|
|
17
17
|
`;
|
|
18
18
|
|
package/src/cli/context-index.ts
CHANGED
|
@@ -1,11 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
codewikiPath,
|
|
5
|
-
structuralCodewikiHash,
|
|
6
|
-
writeCodewiki,
|
|
7
|
-
} from "../domains/context/codewiki/indexer.js";
|
|
8
|
-
import { computeFingerprint } from "../domains/context/fingerprint.js";
|
|
1
|
+
import { codewikiPath, structuralCodewikiHash } from "../domains/context/codewiki/artifact.js";
|
|
2
|
+
import { coordinateCodewikiWrite } from "../domains/context/codewiki/coordinator.js";
|
|
3
|
+
import type { Codewiki } from "../domains/context/codewiki/schema.js";
|
|
9
4
|
import { readClioState, statePath, writeClioState } from "../domains/context/state.js";
|
|
10
5
|
import { detectProjectProfile } from "../domains/session/workspace/project-type.js";
|
|
11
6
|
|
|
@@ -55,22 +50,25 @@ export async function runContextIndexCommand(args: string[]): Promise<number> {
|
|
|
55
50
|
const cwd = process.cwd();
|
|
56
51
|
const now = new Date().toISOString();
|
|
57
52
|
const profile = detectProjectProfile(cwd);
|
|
58
|
-
const
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
53
|
+
const coordinated = await coordinateCodewikiWrite(cwd, () => ({ kind: "build", cwd, language: profile.projectType }), {
|
|
54
|
+
afterCommit: ({ codewiki, fingerprint }, workspace) => {
|
|
55
|
+
const prev = readClioState(workspace);
|
|
56
|
+
writeClioState(workspace, {
|
|
57
|
+
version: 1,
|
|
58
|
+
projectType: profile.projectType,
|
|
59
|
+
fingerprint,
|
|
60
|
+
codewikiVersion: codewiki.version,
|
|
61
|
+
...(prev?.contextSources ? { contextSources: prev.contextSources } : {}),
|
|
62
|
+
...(prev?.contextSourceHash ? { contextSourceHash: prev.contextSourceHash } : {}),
|
|
63
|
+
...(prev?.lastBootstrap ? { lastBootstrap: prev.lastBootstrap } : {}),
|
|
64
|
+
...(prev?.lastInitAt ? { lastInitAt: prev.lastInitAt } : {}),
|
|
65
|
+
lastSessionAt: prev?.lastSessionAt ?? now,
|
|
66
|
+
lastIndexedAt: now,
|
|
67
|
+
});
|
|
68
|
+
},
|
|
73
69
|
});
|
|
70
|
+
if (!coordinated) throw new Error("codewiki index transaction did not commit");
|
|
71
|
+
const codewiki = coordinated.codewiki;
|
|
74
72
|
const indexed = indexedSourceCount(codewiki);
|
|
75
73
|
const coverage = profile.sourceFiles === 0 ? 1 : indexed / profile.sourceFiles;
|
|
76
74
|
const counts = languageCounts(profile);
|
package/src/cli/context.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { join, resolve } from "node:path";
|
|
1
2
|
import type { BootstrapProgressEvent } from "../domains/context/index.js";
|
|
2
3
|
import type { BootstrapGenerationState } from "../domains/context/state.js";
|
|
3
4
|
|
|
@@ -60,15 +61,19 @@ async function printContextStatus(): Promise<number> {
|
|
|
60
61
|
const preload = await import("../domains/prompts/preload.js");
|
|
61
62
|
const cwd = process.cwd();
|
|
62
63
|
|
|
63
|
-
const clio = context.
|
|
64
|
+
const clio = context.loadProjectClioMd(cwd);
|
|
64
65
|
const state = context.readClioState(cwd);
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
? "
|
|
69
|
-
:
|
|
70
|
-
? "
|
|
71
|
-
:
|
|
66
|
+
const localStandardIsEffective = clio.files.some((file) => file.path === join(resolve(cwd), "CLIO-CODER.md"));
|
|
67
|
+
const clioMdState =
|
|
68
|
+
clio.files.length === 0 && clio.errors.length === 0
|
|
69
|
+
? "none"
|
|
70
|
+
: clio.errors.length > 0
|
|
71
|
+
? "malformed"
|
|
72
|
+
: localStandardIsEffective &&
|
|
73
|
+
state?.contextSources !== undefined &&
|
|
74
|
+
context.adoptionSourcesChanged(state.contextSources, { cwd })
|
|
75
|
+
? "stale"
|
|
76
|
+
: "ok";
|
|
72
77
|
|
|
73
78
|
const prompt = context.renderPromptContext(cwd);
|
|
74
79
|
const preloadClass = preload.classifyProjectPreload({
|
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import { readSettings } from "../core/config.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import { getRuntimeRegistry } from "../domains/providers/registry.js";
|
|
5
|
-
import { registerBuiltinRuntimes } from "../domains/providers/runtimes/builtins.js";
|
|
1
|
+
import { type ClioSettings, readSettings } from "../core/config.js";
|
|
2
|
+
import { bootAuthStatus } from "../domains/providers/auth/boot-status.js";
|
|
3
|
+
import { findBuiltinRuntimeBootMetadata } from "../domains/providers/runtimes/boot-manifest.js";
|
|
6
4
|
|
|
7
5
|
/**
|
|
8
6
|
* Why the configured chat target cannot be used, in the operator's terms
|
|
@@ -25,8 +23,7 @@ export type DefaultTargetVerdict =
|
|
|
25
23
|
| { kind: "ineligible-runtime"; targetId: string; runtime: string }
|
|
26
24
|
| { kind: "missing-credential"; targetId: string; store: string };
|
|
27
25
|
|
|
28
|
-
export function classifyDefaultTarget(): DefaultTargetVerdict {
|
|
29
|
-
const settings = readSettings();
|
|
26
|
+
export function classifyDefaultTarget(settings: Readonly<ClioSettings> = readSettings()): DefaultTargetVerdict {
|
|
30
27
|
const targetId = settings.orchestrator.target;
|
|
31
28
|
if (!targetId) return { kind: "no-target" };
|
|
32
29
|
// A chat target naming an id that is not in `targets` cannot arrive here:
|
|
@@ -36,18 +33,13 @@ export function classifyDefaultTarget(): DefaultTargetVerdict {
|
|
|
36
33
|
// it would be a case no settings file can produce.
|
|
37
34
|
const target = settings.targets.find((entry) => entry.id === targetId);
|
|
38
35
|
if (!target) return { kind: "no-target" };
|
|
39
|
-
const
|
|
40
|
-
if (
|
|
41
|
-
const runtime = registry.get(target.runtime);
|
|
42
|
-
if (!runtime || !isOrchestratorEligibleRuntime(runtime)) {
|
|
36
|
+
const runtime = findBuiltinRuntimeBootMetadata(target.runtime);
|
|
37
|
+
if (runtime?.kind !== "http") {
|
|
43
38
|
return { kind: "ineligible-runtime", targetId, runtime: target.runtime };
|
|
44
39
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
return { kind: "usable" };
|
|
49
|
-
}
|
|
50
|
-
return { kind: "missing-credential", targetId, store: authTarget.providerId };
|
|
40
|
+
const auth = bootAuthStatus(target, runtime);
|
|
41
|
+
if (auth.available) return { kind: "usable" };
|
|
42
|
+
return { kind: "missing-credential", targetId, store: auth.providerId };
|
|
51
43
|
}
|
|
52
44
|
|
|
53
45
|
/** One sentence naming what is wrong, for the causes target selection can fix. */
|
package/src/cli/docs.ts
CHANGED
|
@@ -19,9 +19,11 @@ const HOST = "127.0.0.1";
|
|
|
19
19
|
|
|
20
20
|
const HELP = `clio-coder docs [topic] [--no-open]
|
|
21
21
|
|
|
22
|
-
Serve Clio Coder's
|
|
23
|
-
The
|
|
24
|
-
|
|
22
|
+
Serve Clio Coder's interactive HTML documentation locally and open it in a
|
|
23
|
+
browser. The blueprints live in docs/html of a source checkout; the npm package
|
|
24
|
+
ships the Markdown guides in docs/ only. The server binds an ephemeral port on
|
|
25
|
+
127.0.0.1, keeps no state, runs no daemon, and reaches no external network.
|
|
26
|
+
Press Ctrl+C to stop it.
|
|
25
27
|
|
|
26
28
|
Arguments:
|
|
27
29
|
[topic] deep-link a specific blueprint (for example: safety, configuration,
|
|
@@ -62,7 +64,7 @@ export interface DocsMenuEntry {
|
|
|
62
64
|
label: string;
|
|
63
65
|
}
|
|
64
66
|
|
|
65
|
-
/** Resolve
|
|
67
|
+
/** Resolve docs/html from the package root; present in a source checkout, absent from the npm package. */
|
|
66
68
|
export function resolveDocsHtmlDir(): string {
|
|
67
69
|
return resolve(resolvePackageRoot(), "docs", "html");
|
|
68
70
|
}
|
|
@@ -307,7 +309,11 @@ export async function runDocsCommand(args: ReadonlyArray<string> = []): Promise<
|
|
|
307
309
|
}
|
|
308
310
|
const files = listHtmlFiles(htmlDir);
|
|
309
311
|
if (files.length === 0) {
|
|
310
|
-
printError(`no
|
|
312
|
+
printError(`no HTML docs at ${htmlDir}`);
|
|
313
|
+
process.stdout.write(
|
|
314
|
+
` the npm package ships the Markdown guides only: ${resolve(resolvePackageRoot(), "docs")}\n` +
|
|
315
|
+
" the interactive blueprints are in a source checkout and at https://github.com/iowarp/clio-coder/tree/main/docs/html\n",
|
|
316
|
+
);
|
|
311
317
|
return 1;
|
|
312
318
|
}
|
|
313
319
|
|
package/src/cli/evidence.ts
CHANGED
|
@@ -110,7 +110,10 @@ export async function runEvidenceCommand(args: ReadonlyArray<string>): Promise<n
|
|
|
110
110
|
parsed = parseEvidenceArgs(args);
|
|
111
111
|
} catch (error) {
|
|
112
112
|
printError(error instanceof Error ? error.message : String(error));
|
|
113
|
-
|
|
113
|
+
// Usage that accompanies an error goes to stderr with it. Splitting the
|
|
114
|
+
// two put the error on stderr and the usage on stdout, so a caller
|
|
115
|
+
// capturing stdout for evidence output collected a help screen instead.
|
|
116
|
+
process.stderr.write(HELP);
|
|
114
117
|
return 2;
|
|
115
118
|
}
|
|
116
119
|
if (parsed.help) {
|
package/src/cli/extensions.ts
CHANGED
|
@@ -125,10 +125,19 @@ export function runExtensionsCommand(argv: ReadonlyArray<string>): number {
|
|
|
125
125
|
process.stderr.write(HELP);
|
|
126
126
|
return 2;
|
|
127
127
|
}
|
|
128
|
-
if (parsed.help
|
|
128
|
+
if (parsed.help) {
|
|
129
129
|
process.stdout.write(HELP);
|
|
130
130
|
return 0;
|
|
131
131
|
}
|
|
132
|
+
// A bare `clio-coder extensions` is a missing required argument, which the
|
|
133
|
+
// exit-code contract puts at 2 with the usage on stderr. It used to print the
|
|
134
|
+
// same help `--help` prints and exit 0, so a CI step gated on it went on to
|
|
135
|
+
// the next line; `eval`, `memory`, `evidence`, and `usage` all already
|
|
136
|
+
// answered 2 here.
|
|
137
|
+
if (!parsed.command) {
|
|
138
|
+
process.stderr.write(HELP);
|
|
139
|
+
return 2;
|
|
140
|
+
}
|
|
132
141
|
const scopeOptions = { ...(parsed.scope ? { scope: parsed.scope } : {}) };
|
|
133
142
|
switch (parsed.command) {
|
|
134
143
|
case "list": {
|
package/src/cli/fleet.ts
CHANGED
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
import { randomBytes } from "node:crypto";
|
|
16
16
|
import { readFileSync } from "node:fs";
|
|
17
17
|
import { join } from "node:path";
|
|
18
|
+
import { attributeCommitMessage } from "../core/commit-attribution.js";
|
|
18
19
|
import { loadDomains } from "../core/domain-loader.js";
|
|
19
20
|
import { clioStateDir } from "../core/xdg.js";
|
|
20
21
|
import type { AgentsContract } from "../domains/agents/contract.js";
|
|
@@ -33,8 +34,9 @@ import {
|
|
|
33
34
|
renderFleetPrompt,
|
|
34
35
|
resultContractAuthorship,
|
|
35
36
|
} from "../domains/agents/index.js";
|
|
37
|
+
import type { ConfigContract } from "../domains/config/contract.js";
|
|
36
38
|
import { ConfigDomainModule } from "../domains/config/index.js";
|
|
37
|
-
import { ContextDomainModule } from "../domains/context/
|
|
39
|
+
import { ContextDomainModule } from "../domains/context/runtime.js";
|
|
38
40
|
import { type CapacityDrain, capacityDrain, setCapacityDraining } from "../domains/dispatch/capacity-lease.js";
|
|
39
41
|
import { runCodeStep } from "../domains/dispatch/code-step.js";
|
|
40
42
|
import { codeStepDir, writeCodeStepRecord } from "../domains/dispatch/code-step-store.js";
|
|
@@ -51,6 +53,7 @@ import {
|
|
|
51
53
|
withAttemptRole,
|
|
52
54
|
} from "../domains/dispatch/execution-role.js";
|
|
53
55
|
import { type ExecutionPlanResult, executePlan } from "../domains/dispatch/execution-scheduler.js";
|
|
56
|
+
import { deriveFleetCommitAttribution } from "../domains/dispatch/fleet-commit-attribution.js";
|
|
54
57
|
import { compileFleetExecutionPlan } from "../domains/dispatch/fleet-plan.js";
|
|
55
58
|
import {
|
|
56
59
|
decideReviewGate,
|
|
@@ -162,7 +165,13 @@ function listingLine(entry: FleetContractListing, state: string, detail: string)
|
|
|
162
165
|
return `${entry.name} ${entry.source} ${state.padEnd(7)} ${detail}\n`;
|
|
163
166
|
}
|
|
164
167
|
|
|
165
|
-
function runList(): number {
|
|
168
|
+
function runList(args: ReadonlyArray<string>): number {
|
|
169
|
+
// `list` took no arguments and silently ignored whatever followed it, so
|
|
170
|
+
// `fleet list --bogus` exited 0 with the normal table and `fleet list --json`
|
|
171
|
+
// printed the human one. Its siblings status, drain, and resume all reject an
|
|
172
|
+
// unrecognised flag, and so do `agents` and `models`.
|
|
173
|
+
const unknown = args[0];
|
|
174
|
+
if (unknown !== undefined) return fail(`list: unknown flag: ${unknown}`);
|
|
166
175
|
const listings = listFleetContracts(process.cwd());
|
|
167
176
|
if (listings.length === 0) {
|
|
168
177
|
process.stdout.write("no fleet contracts found (.clio-coder/fleets/*.md)\n");
|
|
@@ -290,6 +299,7 @@ async function runFleet(args: ReadonlyArray<string>): Promise<number> {
|
|
|
290
299
|
]);
|
|
291
300
|
const dispatch = loaded.getContract<DispatchContract>("dispatch");
|
|
292
301
|
const agents = loaded.getContract<AgentsContract>("agents");
|
|
302
|
+
const config = loaded.getContract<ConfigContract>("config");
|
|
293
303
|
const safety = loaded.getContract<SafetyContract>("safety");
|
|
294
304
|
const scheduling = loaded.getContract<SchedulingContract>("scheduling");
|
|
295
305
|
if (!dispatch || !agents || !safety) {
|
|
@@ -360,6 +370,13 @@ async function runFleet(args: ReadonlyArray<string>): Promise<number> {
|
|
|
360
370
|
const receipts: RunReceipt[] = [];
|
|
361
371
|
const receiptsByStep = new Map<string, RunReceipt>();
|
|
362
372
|
const planStep = (stepId: string) => plan.steps.find((entry) => entry.id === stepId);
|
|
373
|
+
const attributionEnabled = config?.get().attribution.gitCommits ?? true;
|
|
374
|
+
// Freshness is coordinator-owned execution state. Worker prose cannot set
|
|
375
|
+
// either flag: a successful deterministic verification sets the first, and
|
|
376
|
+
// an integrity-valid independent gate decision sets the second. Any later
|
|
377
|
+
// workspace agent invalidates both before a commit may read them.
|
|
378
|
+
let validationFresh = false;
|
|
379
|
+
let independentReviewFresh = false;
|
|
363
380
|
|
|
364
381
|
/**
|
|
365
382
|
* The commit message is the words of the agent that produced the work, and
|
|
@@ -455,6 +472,10 @@ async function runFleet(args: ReadonlyArray<string>): Promise<number> {
|
|
|
455
472
|
return {
|
|
456
473
|
assignmentId: handle.runId,
|
|
457
474
|
result: handle.finalPromise.then((receipt) => {
|
|
475
|
+
if (step.scope === "workspace") {
|
|
476
|
+
validationFresh = false;
|
|
477
|
+
independentReviewFresh = false;
|
|
478
|
+
}
|
|
458
479
|
receipts.push(receipt);
|
|
459
480
|
receiptsByStep.set(step.id, receipt);
|
|
460
481
|
const envelope = dispatch.getRun(receipt.runId);
|
|
@@ -481,19 +502,37 @@ async function runFleet(args: ReadonlyArray<string>): Promise<number> {
|
|
|
481
502
|
const command = commands?.commands.get(step.commandId);
|
|
482
503
|
if (command === undefined) throw new Error(`fleet code step '${step.id}' has no registered command`);
|
|
483
504
|
const isCommit = step.commitFrom !== undefined;
|
|
505
|
+
const evidence = isCommit
|
|
506
|
+
? deriveFleetCommitAttribution({
|
|
507
|
+
plan,
|
|
508
|
+
step,
|
|
509
|
+
priorResults,
|
|
510
|
+
validationFresh,
|
|
511
|
+
independentReviewFresh,
|
|
512
|
+
})
|
|
513
|
+
: null;
|
|
514
|
+
if (!isCommit && step.scope === "workspace" && step.verification !== true) {
|
|
515
|
+
validationFresh = false;
|
|
516
|
+
independentReviewFresh = false;
|
|
517
|
+
}
|
|
518
|
+
const originalMessage = isCommit ? commitMessageFor(step, priorResults) : null;
|
|
484
519
|
const outcome = await runCodeStep({
|
|
485
520
|
stepId: step.id,
|
|
486
521
|
command,
|
|
487
522
|
workspaceRoot: process.cwd(),
|
|
488
523
|
artifactDir: codeStepDir(fleetRootId),
|
|
489
524
|
signal,
|
|
490
|
-
...(isCommit
|
|
525
|
+
...(isCommit && evidence !== null && originalMessage !== null
|
|
491
526
|
? {
|
|
492
|
-
substitutions: {
|
|
527
|
+
substitutions: {
|
|
528
|
+
commitMessage: attributeCommitMessage(originalMessage, evidence, attributionEnabled),
|
|
529
|
+
},
|
|
493
530
|
requireWorkspaceChanges: true,
|
|
531
|
+
commitAttribution: { enabled: attributionEnabled, evidence },
|
|
494
532
|
}
|
|
495
533
|
: {}),
|
|
496
534
|
});
|
|
535
|
+
if (step.verification === true) validationFresh = outcome.report.passed;
|
|
497
536
|
const recordPath = await writeCodeStepRecord(fleetRootId, outcome.record);
|
|
498
537
|
if (json) process.stdout.write(`${JSON.stringify({ codeStep: outcome.record })}\n`);
|
|
499
538
|
else
|
|
@@ -534,15 +573,17 @@ async function runFleet(args: ReadonlyArray<string>): Promise<number> {
|
|
|
534
573
|
needsDecision: `loop '${loop.id}' cycle ${attempt} has no sealed reviewer or subject receipt`,
|
|
535
574
|
};
|
|
536
575
|
}
|
|
576
|
+
const correlation = fleetGateCorrelation(subject, decider);
|
|
537
577
|
const decided = decideReviewGate({
|
|
538
578
|
group: `${fleetRootId}:${loop.id}`,
|
|
539
579
|
cycle: attempt,
|
|
540
580
|
terminalCycle: terminalAttempt,
|
|
541
581
|
subjects: [{ runId: subject.runId, digest: subject.integrity.digest }],
|
|
542
582
|
decider: { runId: decider.runId, digest: decider.integrity.digest },
|
|
543
|
-
correlation
|
|
583
|
+
correlation,
|
|
544
584
|
output: result.output,
|
|
545
585
|
});
|
|
586
|
+
independentReviewFresh = decided.verdict === "pass" && correlation.independent;
|
|
546
587
|
const staged = stagePendingGateDecision(decided.draft);
|
|
547
588
|
const { path: decisionPath } = materializePendingGateDecision(staged);
|
|
548
589
|
if (!json) {
|
|
@@ -810,7 +851,7 @@ export async function runFleetCommand(args: ReadonlyArray<string>): Promise<numb
|
|
|
810
851
|
}
|
|
811
852
|
switch (sub) {
|
|
812
853
|
case "list":
|
|
813
|
-
return runList();
|
|
854
|
+
return runList(args.slice(1));
|
|
814
855
|
case "run":
|
|
815
856
|
return runFleet(args.slice(1));
|
|
816
857
|
case "status":
|