@iowarp/clio-coder 0.4.1 → 0.4.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 +92 -0
- package/CONTRIBUTING.md +59 -36
- package/README.md +404 -472
- package/SECURITY.md +2 -1
- package/dist/{acp-ZILU3AUO.js → acp-TMDQZDIG.js} +7 -7
- package/dist/{agents-HYWGBGQR.js → agents-5N5NG3XG.js} +28 -28
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-N3QT7CBO.js → auth-Z5CCBXKQ.js} +8 -9
- package/dist/{builtins-UJLMOVOV.js → builtins-K6TNDT24.js} +4 -4
- package/dist/{chunk-GVQJ5CCZ.js → chunk-2HFQNRV3.js} +7 -7
- package/dist/{chunk-QMXC4JB7.js → chunk-2NHR3NAY.js} +163 -1401
- package/dist/chunk-2X4RYJTJ.js +39 -0
- package/dist/{chunk-Y45G3AXC.js → chunk-2Z2IKEXI.js} +6 -10
- package/dist/{chunk-EIMVLWB3.js → chunk-34BHNEE3.js} +7 -3
- package/dist/{chunk-GIZNH63R.js → chunk-35MSIRKH.js} +9 -4
- package/dist/chunk-3EBYEESD.js +314 -0
- package/dist/{chunk-CTJ4RNAA.js → chunk-3F7VUY77.js} +2 -2
- package/dist/{chunk-AP73CFDC.js → chunk-3KIPBMUA.js} +2 -2
- package/dist/{chunk-J5LZHVIT.js → chunk-3M6DQK6S.js} +113 -35
- package/dist/{chunk-VEGN6WIQ.js → chunk-462T4EGZ.js} +2 -2
- package/dist/{chunk-AFKWHWXF.js → chunk-4JDLP6ZS.js} +33 -16
- package/dist/{chunk-6FN3E6KX.js → chunk-4O6MANBS.js} +2 -2
- package/dist/{chunk-AKB4GYDL.js → chunk-54ODD65L.js} +5 -5
- package/dist/{chunk-BBTJOK6Y.js → chunk-5KW52TEP.js} +3 -3
- package/dist/{chunk-6CCS4G3W.js → chunk-5PFYMY2V.js} +2 -2
- package/dist/chunk-77QIVUZB.js +1334 -0
- package/dist/{chunk-7OBGU7UB.js → chunk-7BHIY2MW.js} +7 -13
- package/dist/{chunk-3QSOM6PA.js → chunk-AZ4WMN4W.js} +2 -2
- package/dist/{chunk-6NJQITNH.js → chunk-B74PXLU7.js} +6 -3
- package/dist/{chunk-R23Z6K6I.js → chunk-B7HM5Z7T.js} +15 -15
- package/dist/{chunk-R32CLGZ6.js → chunk-BO7Y52RY.js} +81 -20
- package/dist/{chunk-UEDMSP56.js → chunk-BYMNWQ7O.js} +123 -148
- package/dist/{chunk-ZJLUDYFY.js → chunk-CRFOIAX3.js} +4 -4
- package/dist/{chunk-2NM363SV.js → chunk-CYZW7JHJ.js} +7 -7
- package/dist/{chunk-6HMJX2VU.js → chunk-DYHAXKHD.js} +38 -10
- package/dist/{chunk-THYWACCR.js → chunk-DZAW46HP.js} +3 -3
- package/dist/{chunk-FYUN5KZ3.js → chunk-DZEK6CJN.js} +17 -17
- package/dist/{chunk-3I5NY75V.js → chunk-E7GT7O5N.js} +5 -5
- package/dist/{chunk-VKFQTNDV.js → chunk-F2I26BDK.js} +4 -4
- package/dist/{chunk-HLW2MRKE.js → chunk-F4EKGO4N.js} +3 -1
- package/dist/{chunk-IXJT6DCX.js → chunk-FVDGR2ZL.js} +3 -3
- package/dist/{chunk-TZSKNMZG.js → chunk-GTUD2WMY.js} +2 -1
- package/dist/{chunk-7EPLI7VL.js → chunk-HIICAHCJ.js} +2 -2
- package/dist/{chunk-E67WX76H.js → chunk-HKMD33FO.js} +29 -80
- package/dist/chunk-HLAFFSEK.js +360 -0
- package/dist/{chunk-UAPGZHYC.js → chunk-I64IFBLB.js} +9 -2
- package/dist/{chunk-XKA2ICR3.js → chunk-I66ZTYNP.js} +440 -175
- package/dist/{chunk-7PWAODYW.js → chunk-I7XBWTYH.js} +2 -2
- package/dist/{chunk-PVAMAVBB.js → chunk-IDNA72AH.js} +102 -2
- package/dist/{chunk-GCSMB2KY.js → chunk-IKOZFYBN.js} +1 -1
- package/dist/{chunk-2VG7KLYV.js → chunk-IKSLQ4XV.js} +5460 -3241
- package/dist/{chunk-QKIFBZKT.js → chunk-IMXMHHMQ.js} +166 -25
- package/dist/{chunk-74YWRRU5.js → chunk-JBCS7CRR.js} +2 -2
- package/dist/{chunk-BDPT6GTK.js → chunk-JWJGP5DQ.js} +2 -2
- package/dist/{chunk-K6BF4U2H.js → chunk-KKOJXO6R.js} +62 -14
- package/dist/chunk-KPXDY6QF.js +47 -0
- package/dist/{chunk-ABLSQ6JX.js → chunk-LJID3DYZ.js} +7 -1
- package/dist/{chunk-VKRH2TCS.js → chunk-M2DAX4F6.js} +2 -2
- package/dist/{chunk-6I5ILFOF.js → chunk-M2WXEHER.js} +2 -2
- package/dist/{chunk-YPI3QQCF.js → chunk-MCEPRMZW.js} +2 -4
- package/dist/{chunk-N5UK64DP.js → chunk-MCMZMDAC.js} +2 -2
- package/dist/{chunk-Y4CAGMM6.js → chunk-MNJGS2IN.js} +5 -6
- package/dist/{chunk-TVHHYFHE.js → chunk-NEDJ26B5.js} +2 -2
- package/dist/{chunk-U2WB7TZS.js → chunk-NMJXSHBJ.js} +97 -85
- package/dist/{chunk-HUAS7ITX.js → chunk-O3YUNJZ2.js} +13 -21
- package/dist/{chunk-MA3H6DM5.js → chunk-P75RZCJW.js} +25 -3
- package/dist/{chunk-IG7BCQBA.js → chunk-PGF63K6I.js} +2 -2
- package/dist/chunk-PJX3WQUQ.js +42 -0
- package/dist/{chunk-6DWBAZ5U.js → chunk-Q4XWMHX6.js} +4 -6
- package/dist/{chunk-OJTRZGR3.js → chunk-QQLGQY2A.js} +8 -8
- package/dist/{chunk-J4HBWF6Y.js → chunk-RLYRBIYQ.js} +115 -20
- package/dist/{chunk-NLFAQR7Z.js → chunk-S66XZJOF.js} +3 -23
- package/dist/{chunk-C537JADH.js → chunk-SSEYRH53.js} +6 -7
- package/dist/chunk-SZAA6XDG.js +30 -0
- package/dist/{chunk-MOPSG2X7.js → chunk-TPEQIQIE.js} +6 -6
- package/dist/{chunk-JA5QWE4Z.js → chunk-UBRFI4HS.js} +1879 -1650
- package/dist/{chunk-BTGG6BG2.js → chunk-UH347SHR.js} +154 -15
- package/dist/{chunk-5YHDIDBP.js → chunk-UH632ZYL.js} +2 -2
- package/dist/{chunk-BWW4HLO4.js → chunk-UXCU4E3T.js} +8 -6
- package/dist/{chunk-6VC4OV3Z.js → chunk-VIA6RFQZ.js} +3 -11
- package/dist/{chunk-ZAZB4JMW.js → chunk-VKPAQYEB.js} +27 -8
- package/dist/{chunk-UXN6JT4W.js → chunk-W4YEMFBX.js} +2 -2
- package/dist/{chunk-TD3PGPQA.js → chunk-W6NIE6OW.js} +2 -2
- package/dist/{chunk-TVH4ONAM.js → chunk-X7IARSHT.js} +3 -3
- package/dist/{chunk-PJJ6MY27.js → chunk-XE3PCIXH.js} +3 -3
- package/dist/{chunk-FEFIFZTL.js → chunk-XGDPUNND.js} +2 -2
- package/dist/{chunk-SCYB3HA4.js → chunk-XOXV5GKE.js} +51 -16
- package/dist/{chunk-QTFGO774.js → chunk-XQRY4DTA.js} +24 -11
- package/dist/{chunk-BJGUKIG4.js → chunk-YJISEZKC.js} +2 -2
- package/dist/{chunk-GPPB3JBE.js → chunk-ZGNYYXQ6.js} +2 -2
- package/dist/{chunk-SINK3QR6.js → chunk-ZNT2M6TG.js} +7 -7
- package/dist/{chunk-7RY5VZPH.js → chunk-ZW4HH5JJ.js} +6 -6
- package/dist/cli/index.js +33 -32
- package/dist/{clio-IT3G3VQH.js → clio-7VB377CC.js} +7 -7
- package/dist/{code-nav-RK6S7F6E.js → code-nav-YVLCYA7V.js} +85 -17
- package/dist/{config-3QZRWZJF.js → config-4HVOS65E.js} +88 -43
- package/dist/{configure-FL7Y3KJF.js → configure-PIWO7B24.js} +10 -10
- package/dist/{context-5HE7ODYK.js → context-IYEHL3WQ.js} +33 -31
- package/dist/{context-XNHL75JV.js → context-KQYIWPWT.js} +47 -34
- package/dist/{context-KYQFRVDC.js → context-N6ZE3LGJ.js} +11 -11
- package/dist/{context-clear-N545L53A.js → context-clear-G4OGZJDS.js} +33 -31
- package/dist/{context-working-set-QHKXSV2F.js → context-working-set-BWLF6LJP.js} +7 -7
- package/dist/{dispatch-runner-RGIE5PCT.js → dispatch-runner-2QQAITS3.js} +38 -38
- package/dist/{docs-5NAF6AU7.js → docs-PD3EXDKU.js} +21 -20
- package/dist/{doctor-ZGPEGHIP.js → doctor-LHBD36VU.js} +23 -22
- package/dist/{eval-GXLL44RD.js → eval-C45FYRJ6.js} +21 -20
- package/dist/{eval-inventory-HBWSWQOK.js → eval-inventory-6DEJPLBF.js} +2 -2
- package/dist/{evidence-HWLBRH3Q.js → evidence-6SHONYAF.js} +30 -28
- package/dist/{evolve-FTZBMNVW.js → evolve-KRKMV72X.js} +30 -28
- package/dist/{extensions-VHRBEID7.js → extensions-KPZ2UHBB.js} +5 -3
- package/dist/{fleet-CKZHJWZJ.js → fleet-IVTCKDHT.js} +62 -61
- package/dist/{fleet-commands-EXDXBMV6.js → fleet-commands-EDWL3IT7.js} +5 -5
- package/dist/{fleet-decisions-OTHB6KRL.js → fleet-decisions-YP3YEFGK.js} +4 -4
- package/dist/{fleet-graph-YTEZUCUT.js → fleet-graph-ZFWKHY2M.js} +16 -14
- package/dist/{fleet-inspect-SS6YMDCK.js → fleet-inspect-FVUNCBML.js} +31 -29
- package/dist/{fleet-preflight-PBY4VYOM.js → fleet-preflight-UN5XED4R.js} +2 -2
- package/dist/{fleet-validate-KMEM5L3S.js → fleet-validate-XOWC4HSX.js} +17 -15
- package/dist/{fleet-verify-QD5M7E7Q.js → fleet-verify-UN3SODEL.js} +30 -28
- package/dist/{fleet-view-WAMJYNDT.js → fleet-view-TWHJKCN6.js} +31 -29
- package/dist/{init-5XQRBOFV.js → init-T2QORQ3Y.js} +50 -49
- package/dist/{interop-34TVO25M.js → interop-IN5I2A66.js} +5 -5
- package/dist/{library-3QY6KF57.js → library-LSCATDLZ.js} +15 -13
- package/dist/{memory-L4UTIIIW.js → memory-HYOKAGGJ.js} +31 -29
- package/dist/{models-ZVX3QOWE.js → models-2GPMFYCM.js} +22 -21
- package/dist/{monitor-CEKVSYTS.js → monitor-E4ASVUJH.js} +34 -32
- package/dist/{orchestrator-77BAP6BC.js → orchestrator-DDMPR3PY.js} +984 -583
- package/dist/{panes-7STHOAUJ.js → panes-E3RUXOW5.js} +4 -4
- package/dist/{panes-SHAUIRXY.js → panes-IXKLOKA2.js} +23 -8
- package/dist/{reset-EOLM7GVE.js → reset-OAQP3W4O.js} +4 -4
- package/dist/{resources-74GKTLSF.js → resources-OTRSN34L.js} +15 -13
- package/dist/{run-HBAUJNNZ.js → run-5DEYH5QK.js} +60 -59
- package/dist/{share-G3APVLVP.js → share-IHWTLO3M.js} +19 -15
- package/dist/{skills-35HHUKCR.js → skills-IYMXMKW4.js} +17 -15
- package/dist/{skills-eval-QN4HSHDC.js → skills-eval-DROHSJAR.js} +36 -36
- package/dist/{skills-inventory-J357J34F.js → skills-inventory-D7X4L4ZX.js} +15 -13
- package/dist/{slash-commands-JZZCQA32.js → slash-commands-QBM7UZ3B.js} +21 -18
- package/dist/{steer-XAVHJM22.js → steer-Z5DO23FJ.js} +2 -2
- package/dist/{targets-DSM6CY3M.js → targets-P2FUC4IL.js} +25 -28
- package/dist/{terminal-lease-JOPFUVEM.js → terminal-lease-YREJ3JX2.js} +5 -5
- package/dist/{tools-MKNWVPBH.js → tools-5B7RO6MV.js} +4 -4
- package/dist/{trace-ECQ7TIYZ.js → trace-YMGMUM6A.js} +55 -7
- package/dist/{upgrade-H7TOM7YL.js → upgrade-PXK3S2YM.js} +11 -9
- package/dist/{usage-X52N3IDJ.js → usage-ME5MPXGX.js} +36 -34
- package/dist/{verifiers-EJTVVSMA.js → verifiers-BVZ7IWOO.js} +5 -5
- package/dist/{verify-YJL6XET2.js → verify-5K7ZKQFC.js} +4 -4
- package/dist/{web-fetch-MPIFL3LL.js → web-fetch-MPARV2K7.js} +2 -2
- package/dist/{wiki-generate-4NDZTQ4B.js → wiki-generate-F5W5QTYY.js} +48 -47
- package/dist/{with-panes-OBOBFIIR.js → with-panes-BYOJCLAM.js} +51 -255
- package/dist/worker/entry.js +45 -30
- package/docs/README.md +176 -81
- package/docs/{acp.md → architecture/acp.md} +36 -20
- package/docs/{alcf-provider.md → architecture/alcf-provider.md} +8 -5
- package/docs/{architecture.md → architecture/architecture.md} +43 -22
- package/docs/{artifact-placement.md → architecture/artifact-placement.md} +26 -23
- package/docs/architecture/artifact-versions.md +90 -0
- package/docs/{capacity-and-scheduling.md → architecture/capacity-and-scheduling.md} +26 -13
- package/docs/{context-engine.md → architecture/context-engine.md} +25 -25
- package/docs/{context-working-set.md → architecture/context-working-set.md} +13 -10
- package/docs/{dispatch-architecture-rationale.md → architecture/dispatch-architecture-rationale.md} +12 -9
- package/docs/{dispatch-typed-intent.md → architecture/dispatch-typed-intent.md} +68 -46
- package/docs/{evidence-and-memory.md → architecture/evidence-and-memory.md} +23 -16
- package/docs/{middleware-and-components.md → architecture/middleware-and-components.md} +11 -5
- package/docs/{model-catalog.md → architecture/model-catalog.md} +40 -17
- package/docs/{observability.md → architecture/observability.md} +26 -13
- package/docs/{pi-boundary.md → architecture/pi-boundary.md} +24 -11
- package/docs/{prompt-envelope-and-tools.md → architecture/prompt-envelope-and-tools.md} +55 -20
- package/docs/{provider-adapter-cookbook.md → architecture/provider-adapter-cookbook.md} +35 -24
- package/docs/{safety-model.md → architecture/safety-model.md} +20 -15
- package/docs/{session-lifecycle.md → architecture/session-lifecycle.md} +8 -5
- package/docs/architecture/time-conventions.md +125 -0
- package/docs/{trace-store.md → architecture/trace-store.md} +13 -5
- package/docs/{tui-design.md → architecture/tui-design.md} +13 -13
- package/docs/{worker-dispatch-mechanics.md → architecture/worker-dispatch-mechanics.md} +27 -30
- package/docs/{built-in-agents.md → guide/built-in-agents.md} +50 -34
- package/docs/{commands-and-modes.md → guide/commands-and-modes.md} +65 -60
- package/docs/{configuration-and-targets.md → guide/configuration-and-targets.md} +227 -289
- package/docs/guide/configuration-reference.md +1158 -0
- package/docs/{environment-variables.md → guide/environment-variables.md} +31 -28
- package/docs/{exit-codes-and-output.md → guide/exit-codes-and-output.md} +6 -3
- package/docs/{extensions-and-sharing.md → guide/extensions-and-sharing.md} +41 -14
- package/docs/{fleet-dispatch.md → guide/fleet-dispatch.md} +39 -43
- package/docs/{glossary.md → guide/glossary.md} +14 -11
- package/docs/{installation-and-lifecycle.md → guide/installation-and-lifecycle.md} +44 -13
- package/docs/guide/panes-and-files.md +290 -0
- package/docs/{proactive-memory.md → guide/proactive-memory.md} +79 -66
- package/docs/{resource-library.md → guide/resource-library.md} +13 -4
- package/docs/{skills-marketplace.md → guide/skills-marketplace.md} +7 -3
- package/docs/{tool-usage.md → guide/tool-usage.md} +87 -23
- package/docs/{troubleshooting.md → guide/troubleshooting.md} +9 -4
- package/docs/{config-knobs-audit.md → history/config-knobs-audit.md} +11 -11
- package/docs/{release-cut-checklist.md → history/release-cut-checklist.md} +29 -2
- package/docs/{development-pipeline.md → process/development-pipeline.md} +24 -26
- package/docs/process/documentation-coverage.md +100 -0
- package/docs/process/documentation-guide.md +187 -0
- package/docs/{eval-runner.md → process/eval-runner.md} +41 -50
- package/docs/{evals-internal.md → process/evals-internal.md} +10 -10
- package/docs/{evolution.md → process/evolution.md} +2 -2
- package/docs/{fleet-demo-runbook.md → process/fleet-demo-runbook.md} +11 -7
- package/docs/{git-commit-provenance.md → process/git-commit-provenance.md} +11 -4
- package/docs/{performance-methodology.md → process/performance-methodology.md} +87 -69
- package/docs/{scientific-validation.md → process/scientific-validation.md} +4 -4
- package/evals/README.md +2 -2
- package/package.json +9 -7
- package/skills/README.md +46 -37
- package/skills/coding/ast-grep/SKILL.md +2 -2
- package/skills/coding/coding-standards/SKILL.md +2 -2
- package/skills/coding/prototype/SKILL.md +2 -2
- package/skills/coding/tdd/SKILL.md +2 -2
- package/skills/context/context-handoff/SKILL.md +2 -2
- package/skills/context/context-prime/SKILL.md +2 -2
- package/skills/git/file-ticket/SKILL.md +2 -2
- package/skills/git/fix-issue/SKILL.md +3 -3
- package/skills/git/resolve-merge-conflicts/SKILL.md +2 -2
- package/skills/git/ship/SKILL.md +2 -2
- package/skills/git/worktree-create/SKILL.md +2 -2
- package/skills/git/worktree-merge/SKILL.md +2 -2
- package/skills/meta/clio-coder-dev/SKILL.md +9 -5
- package/skills/meta/clio-coder-dev/evals.md +3 -2
- package/skills/meta/clio-coder-test/SKILL.md +102 -95
- package/skills/meta/clio-coder-test/evals.md +9 -4
- package/skills/meta/clio-coder-test/references/harness.md +100 -124
- package/skills/meta/clio-coder-test/references/test-map.md +77 -50
- package/skills/meta/credentials/SKILL.md +2 -2
- package/skills/meta/find-skills/SKILL.md +2 -2
- package/skills/meta/herdr/SKILL.md +2 -2
- package/skills/meta/skill-craft/SKILL.md +22 -16
- package/skills/planning/architecture/SKILL.md +2 -2
- package/skills/planning/backlog/SKILL.md +2 -2
- package/skills/planning/prd/SKILL.md +2 -2
- package/skills/planning/product-intent/SKILL.md +2 -2
- package/skills/planning/tech-spec/SKILL.md +2 -2
- package/skills/registry.yaml +62 -62
- package/skills/research/arxiv-literature/SKILL.md +2 -2
- package/skills/research/experiment-protocol/SKILL.md +2 -2
- package/skills/research/scientific-debugging/SKILL.md +2 -2
- package/skills/research/scientific-modernization/SKILL.md +2 -2
- package/skills/skill-marketplace.json +62 -62
- package/skills/workflow/cut-it/SKILL.md +2 -2
- package/skills/workflow/design-council/SKILL.md +2 -2
- package/skills/workflow/grill-me/SKILL.md +2 -2
- package/skills/workflow/workflow-distiller/SKILL.md +2 -2
- package/src/cli/args.ts +2 -2
- package/src/cli/bootstrap-generate.ts +1 -1
- package/src/cli/config-inspect.ts +65 -12
- package/src/cli/configure.ts +0 -4
- package/src/cli/docs.ts +22 -14
- package/src/cli/doctor-naming.ts +5 -5
- package/src/cli/doctor-toolchain.ts +3 -3
- package/src/cli/eval.ts +1 -2
- package/src/cli/extensions.ts +2 -1
- package/src/cli/fleet.ts +1 -1
- package/src/cli/index.ts +2 -1
- package/src/cli/internal-dispatch.ts +3 -4
- package/src/cli/panes.ts +19 -5
- package/src/cli/run.ts +2 -2
- package/src/cli/share.ts +5 -1
- package/src/cli/skills-eval.ts +3 -3
- package/src/cli/targets.ts +2 -6
- package/src/cli/trace.ts +55 -4
- package/src/cli/wiki-generate.ts +1 -1
- package/src/core/artifact-paths.ts +1 -1
- package/src/core/bash-exec.ts +131 -86
- package/src/core/bus-events.ts +51 -6
- package/src/core/config.ts +5 -1
- package/src/core/defaults.ts +7 -4
- package/src/core/dispatch-outcome.ts +16 -0
- package/src/core/guardrails.ts +10 -49
- package/src/core/prompt-hint.ts +9 -0
- package/src/domains/agents/builtins/architect.md +2 -3
- package/src/domains/agents/builtins/coder.md +3 -2
- package/src/domains/agents/builtins/debugger.md +2 -2
- package/src/domains/agents/builtins/documenter.md +2 -2
- package/src/domains/agents/builtins/git-master.md +1 -1
- package/src/domains/agents/builtins/oracle.md +1 -1
- package/src/domains/agents/builtins/provenance.md +1 -1
- package/src/domains/agents/builtins/researcher.md +1 -1
- package/src/domains/agents/builtins/scout.md +1 -1
- package/src/domains/agents/builtins/tester.md +2 -2
- package/src/domains/agents/builtins/verifier.md +2 -2
- package/src/domains/agents/builtins/wiki-writer.md +1 -1
- package/src/domains/agents/catalog.ts +12 -14
- package/src/domains/agents/contract.ts +2 -0
- package/src/domains/agents/extension.ts +23 -1
- package/src/domains/config/keybindings.ts +8 -0
- package/src/domains/context/extension.ts +0 -3
- package/src/domains/context/working-set/path-index.ts +1 -0
- package/src/domains/dispatch/capability-match.ts +10 -0
- package/src/domains/dispatch/extension.ts +105 -22
- package/src/domains/dispatch/host-verification.ts +435 -39
- package/src/domains/dispatch/intent-requirements.ts +10 -0
- package/src/domains/dispatch/intent.ts +18 -1
- package/src/domains/dispatch/path-scope.ts +235 -24
- package/src/domains/dispatch/run-event-journal.ts +4 -15
- package/src/domains/dispatch/state.ts +2 -3
- package/src/domains/dispatch/transport.ts +45 -21
- package/src/domains/dispatch/types.ts +55 -3
- package/src/domains/eval/artifacts/store.ts +5 -0
- package/src/domains/eval/store.ts +8 -1
- package/src/domains/evidence/trust-status.ts +10 -1
- package/src/domains/extensions/contract.ts +15 -1
- package/src/domains/extensions/discovery.ts +238 -41
- package/src/domains/extensions/extension.ts +105 -6
- package/src/domains/extensions/index.ts +24 -0
- package/src/domains/extensions/integrity.ts +189 -0
- package/src/domains/extensions/manager.ts +17 -1
- package/src/domains/extensions/resource-path.ts +27 -0
- package/src/domains/extensions/resources.ts +18 -38
- package/src/domains/extensions/snapshot-store.ts +39 -0
- package/src/domains/extensions/snapshot.ts +180 -0
- package/src/domains/extensions/state.ts +385 -57
- package/src/domains/extensions/types.ts +118 -1
- package/src/domains/lifecycle/migrations/2026-09-01-extension-install-digests.ts +27 -0
- package/src/domains/lifecycle/migrations/index.ts +2 -0
- package/src/domains/lifecycle/naming-resources.ts +19 -4
- package/src/domains/lifecycle/naming-yazi.ts +10 -5
- package/src/domains/middleware/contract.ts +26 -0
- package/src/domains/middleware/extension.ts +24 -24
- package/src/domains/middleware/hook-receipts.ts +27 -4
- package/src/domains/middleware/hooks-io.ts +65 -32
- package/src/domains/middleware/hooks.ts +64 -0
- package/src/domains/middleware/index.ts +28 -4
- package/src/domains/middleware/registrations.ts +326 -0
- package/src/domains/middleware/runtime.ts +28 -0
- package/src/domains/middleware/snapshot.ts +20 -7
- package/src/domains/mux/contract.ts +38 -0
- package/src/domains/mux/detect.ts +6 -13
- package/src/domains/mux/index.ts +1 -1
- package/src/domains/mux/operations.ts +44 -5
- package/src/domains/mux/yazi/assets/yazi.toml +2 -2
- package/src/domains/mux/yazi/session.ts +53 -4
- package/src/domains/mux/yazi/theme.ts +117 -17
- package/src/domains/observability/contract.ts +10 -11
- package/src/domains/observability/extension.ts +11 -3
- package/src/domains/observability/projection.ts +14 -90
- package/src/domains/observability/trace-store.ts +43 -7
- package/src/domains/prompts/compiler.ts +73 -53
- package/src/domains/prompts/contract.ts +15 -3
- package/src/domains/prompts/extension.ts +97 -9
- package/src/domains/prompts/fragments/identity/clio-worker.md +1 -3
- package/src/domains/prompts/fragments/identity/clio.md +6 -12
- package/src/domains/prompts/fragments/identity/docs-routing.md +1 -2
- package/src/domains/prompts/fragments/identity/self-awareness.md +3 -11
- package/src/domains/prompts/fragments/operating/contract.md +7 -15
- package/src/domains/prompts/fragments/operating/delegation.md +32 -34
- package/src/domains/prompts/fragments/operating/skills.md +10 -24
- package/src/domains/prompts/fragments/operating/worker.md +1 -8
- package/src/domains/providers/index.ts +1 -1
- package/src/domains/providers/model-runtime-capabilities.ts +85 -21
- package/src/domains/providers/models/local-models/clio-coder-local-coding-targets.yaml +669 -104
- package/src/domains/providers/runtime-resolution.ts +31 -0
- package/src/domains/providers/runtimes/common/probe-helpers.ts +7 -2
- package/src/domains/providers/runtimes/local-native/llamacpp.ts +9 -1
- package/src/domains/providers/types/cost-provenance.ts +19 -0
- package/src/domains/providers/types/local-model-quirks.ts +85 -37
- package/src/domains/resources/skills/loader.ts +16 -19
- package/src/domains/safety/call-target.ts +1 -1
- package/src/domains/safety/loop-detector.ts +7 -4
- package/src/domains/session/task-board.ts +10 -9
- package/src/domains/share/archive.ts +164 -7
- package/src/engine/acp/server.ts +62 -9
- package/src/engine/apis/llamacpp-residency.ts +3 -4
- package/src/engine/apis/lmstudio.ts +3 -3
- package/src/engine/apis/ollama-native.ts +6 -6
- package/src/engine/apis/openai-completions.ts +28 -25
- package/src/engine/apis/output-budget.ts +8 -18
- package/src/engine/apis/residency.ts +8 -27
- package/src/engine/gemma-channel-filter.ts +19 -0
- package/src/engine/loop-guard.ts +92 -12
- package/src/engine/worker-runtime.ts +40 -11
- package/src/engine/worker-tools.ts +3 -1
- package/src/entry/extension-hook-sources.ts +28 -0
- package/src/entry/extension-reload.ts +309 -0
- package/src/entry/orchestrator.ts +59 -35
- package/src/interactive/application-controller.ts +2 -1
- package/src/interactive/bus-notices.ts +8 -1
- package/src/interactive/chat-loop-messages.ts +3 -13
- package/src/interactive/chat-loop.ts +10 -1
- package/src/interactive/chat-panel.ts +36 -13
- package/src/interactive/chat-renderer.ts +71 -7
- package/src/interactive/dispatch-board.ts +6 -11
- package/src/interactive/footer/widgets.ts +13 -0
- package/src/interactive/interactive-application.ts +39 -4
- package/src/interactive/interactive-input-runtime.ts +4 -0
- package/src/interactive/interactive-presentation.ts +2 -2
- package/src/interactive/interactive-slash-runtime.ts +2 -0
- package/src/interactive/overlays/extensions.ts +9 -1
- package/src/interactive/overlays/help-reference.ts +13 -0
- package/src/interactive/overlays/settings.ts +27 -16
- package/src/interactive/panes-runtime.ts +111 -35
- package/src/interactive/prompt-cache-identity.ts +88 -0
- package/src/interactive/slash-commands.ts +129 -14
- package/src/interactive/stream-pacing-policy.ts +0 -23
- package/src/interactive/turn-context.ts +30 -15
- package/src/interactive/yazi-bridge.ts +60 -6
- package/src/tools/agent-tools.ts +30 -1
- package/src/tools/artifact.ts +2 -2
- package/src/tools/ask-user.ts +3 -3
- package/src/tools/bash.ts +1 -1
- package/src/tools/bootstrap.ts +4 -0
- package/src/tools/builtin-tool-catalog.ts +52 -22
- package/src/tools/codewiki/code-nav-surface.ts +6 -0
- package/src/tools/codewiki/code-nav.ts +99 -13
- package/src/tools/context/docs-engine.ts +20 -7
- package/src/tools/context/index.ts +29 -12
- package/src/tools/core-bootstrap.ts +28 -6
- package/src/tools/credential-present.ts +1 -2
- package/src/tools/dispatch-arguments.ts +5 -1
- package/src/tools/dispatch-plan.ts +48 -4
- package/src/tools/dispatch-run-events.ts +1 -1
- package/src/tools/dispatch-schema.ts +338 -0
- package/src/tools/dispatch-types.ts +3 -0
- package/src/tools/dispatch.ts +9 -254
- package/src/tools/ledger.ts +3 -5
- package/src/tools/monitor-surface.ts +5 -13
- package/src/tools/observation.ts +4 -5
- package/src/tools/panes-surface.ts +4 -11
- package/src/tools/panes.ts +4 -2
- package/src/tools/policy.ts +15 -2
- package/src/tools/read.ts +5 -6
- package/src/tools/registry.ts +30 -7
- package/src/tools/result-shaping.ts +18 -14
- package/src/tools/steer-surface.ts +1 -1
- package/src/tools/tasks.ts +1 -1
- package/src/tools/truncate.ts +6 -5
- package/src/tools/verify/surface.ts +6 -12
- package/src/tools/web-fetch-surface.ts +1 -3
- package/dist/chunk-5QIAJV2D.js +0 -48
- package/dist/chunk-JZWT5J3Y.js +0 -814
- package/dist/chunk-K7VKOLQQ.js +0 -15
- package/dist/chunk-PMZCIOCJ.js +0 -25
- package/dist/chunk-SUW5DORT.js +0 -819
- package/dist/chunk-UOV2BYIW.js +0 -107
- package/dist/chunk-WR6U3OVP.js +0 -45
- package/docs/artifact-versions.md +0 -67
- package/docs/documentation-coverage.md +0 -46
- package/docs/documentation-guide.md +0 -167
- package/docs/time-conventions.md +0 -101
|
@@ -16,7 +16,7 @@ import { basename, join } from "node:path";
|
|
|
16
16
|
import type { ClioSettings } from "../core/config.js";
|
|
17
17
|
import { resolvePackageRoot } from "../core/package-root.js";
|
|
18
18
|
import { readLayeredSettings, type SettingsOrigin, settingsSourceFor } from "../core/settings-layers.js";
|
|
19
|
-
import { clioDataDir } from "../core/xdg.js";
|
|
19
|
+
import { clioDataDir, clioStateDir } from "../core/xdg.js";
|
|
20
20
|
import {
|
|
21
21
|
loadOperatorProfile,
|
|
22
22
|
loadProjectClioMd,
|
|
@@ -24,12 +24,18 @@ import {
|
|
|
24
24
|
renderOperatorProfile,
|
|
25
25
|
renderPromptContext,
|
|
26
26
|
} from "../domains/context/index.js";
|
|
27
|
-
import { listInstalledExtensions } from "../domains/extensions/index.js";
|
|
27
|
+
import { extensionSnapshotFor, listInstalledExtensions } from "../domains/extensions/index.js";
|
|
28
28
|
import { loadMemoryRecordsSync, memoryStorePath } from "../domains/memory/index.js";
|
|
29
|
-
import {
|
|
29
|
+
import {
|
|
30
|
+
HOOK_RECEIPT_LOG_CAPACITY,
|
|
31
|
+
loadUserHooks,
|
|
32
|
+
readHookSources,
|
|
33
|
+
readPersistedHookReceipts,
|
|
34
|
+
} from "../domains/middleware/index.js";
|
|
30
35
|
import { classifyProjectPreload } from "../domains/prompts/preload.js";
|
|
31
36
|
import { defaultScopedResourceRoots } from "../domains/resources/common-loader.js";
|
|
32
37
|
import { ceilChars } from "../domains/session/context-accounting.js";
|
|
38
|
+
import { capturedHookSourcesFor } from "../entry/extension-hook-sources.js";
|
|
33
39
|
|
|
34
40
|
export type CustomizationCategory =
|
|
35
41
|
| "settings"
|
|
@@ -45,7 +51,8 @@ export type CustomizationCategory =
|
|
|
45
51
|
| "safety"
|
|
46
52
|
| "memory";
|
|
47
53
|
|
|
48
|
-
|
|
54
|
+
/** `reload` means an explicit `/resources extensions reload` (or a restart) publishes the change. */
|
|
55
|
+
export type ReloadClass = "hot" | "next-turn" | "reload" | "restart" | "n/a";
|
|
49
56
|
|
|
50
57
|
export interface CustomizationEntry {
|
|
51
58
|
category: CustomizationCategory;
|
|
@@ -203,10 +210,13 @@ function inspectOperatorProfile(cwd: string, graph: CustomizationGraph): void {
|
|
|
203
210
|
|
|
204
211
|
function inspectHooks(cwd: string, graph: CustomizationGraph): void {
|
|
205
212
|
try {
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
const { batches, fileIssues } = readHookSources({
|
|
213
|
+
// Extension declarations come from the same captured bytes a booted
|
|
214
|
+
// session admits; an inspecting process without a bound store builds an
|
|
215
|
+
// ephemeral generation-0 projection.
|
|
216
|
+
const { batches, fileIssues } = readHookSources({
|
|
217
|
+
cwd,
|
|
218
|
+
capturedSources: capturedHookSourcesFor(extensionSnapshotFor(cwd)),
|
|
219
|
+
});
|
|
210
220
|
for (const issue of fileIssues) graph.issues.push(`hook ${issue.source.origin}: ${issue.message}`);
|
|
211
221
|
const loaded = loadUserHooks(batches, { workspaceRoot: cwd });
|
|
212
222
|
for (const issue of loaded.issues) {
|
|
@@ -221,7 +231,7 @@ function inspectHooks(cwd: string, graph: CustomizationGraph): void {
|
|
|
221
231
|
hash: hook.hash,
|
|
222
232
|
trust: hook.source.origin === "extension" ? "untrusted" : "trusted",
|
|
223
233
|
precedence: "winner",
|
|
224
|
-
reloadClass: "
|
|
234
|
+
reloadClass: "reload",
|
|
225
235
|
detail: { on: hook.on, kind: hook.spec.kind, enabled: hook.enabled, ...(hook.tools ? { tools: hook.tools } : {}) },
|
|
226
236
|
});
|
|
227
237
|
}
|
|
@@ -234,7 +244,7 @@ function inspectHooks(cwd: string, graph: CustomizationGraph): void {
|
|
|
234
244
|
hash: loser.hash,
|
|
235
245
|
trust: loser.source.origin === "extension" ? "untrusted" : "trusted",
|
|
236
246
|
precedence: "loser",
|
|
237
|
-
reloadClass: "
|
|
247
|
+
reloadClass: "reload",
|
|
238
248
|
detail: { on: loser.on, kind: loser.spec.kind },
|
|
239
249
|
});
|
|
240
250
|
}
|
|
@@ -243,6 +253,42 @@ function inspectHooks(cwd: string, graph: CustomizationGraph): void {
|
|
|
243
253
|
}
|
|
244
254
|
}
|
|
245
255
|
|
|
256
|
+
/**
|
|
257
|
+
* Rolls up the durable hook-execution receipt log (`<stateDir>/hook-receipts.json`,
|
|
258
|
+
* written by `createHookReceiptLog` in `src/domains/middleware/hook-receipts.ts`)
|
|
259
|
+
* into one entry, since this process never held the live in-memory ring a
|
|
260
|
+
* running session's own invocation writes through. One entry rather than one
|
|
261
|
+
* per receipt: this graph explains configuration provenance, and a couple
|
|
262
|
+
* hundred execution rows would swamp that rather than answer it.
|
|
263
|
+
*/
|
|
264
|
+
function inspectHookReceipts(graph: CustomizationGraph): void {
|
|
265
|
+
const path = join(clioStateDir(), "hook-receipts.json");
|
|
266
|
+
try {
|
|
267
|
+
const receipts = existsSync(path) ? readPersistedHookReceipts(path) : [];
|
|
268
|
+
const outcomes: Record<string, number> = {};
|
|
269
|
+
for (const receipt of receipts) outcomes[receipt.outcome] = (outcomes[receipt.outcome] ?? 0) + 1;
|
|
270
|
+
const last = receipts.at(-1);
|
|
271
|
+
graph.entries.push({
|
|
272
|
+
category: "hook",
|
|
273
|
+
id: "hook-receipts",
|
|
274
|
+
scope: "user",
|
|
275
|
+
sourcePath: path,
|
|
276
|
+
reloadClass: "n/a",
|
|
277
|
+
trust: "n/a",
|
|
278
|
+
precedence: "single",
|
|
279
|
+
detail: {
|
|
280
|
+
present: existsSync(path),
|
|
281
|
+
count: receipts.length,
|
|
282
|
+
capacity: HOOK_RECEIPT_LOG_CAPACITY,
|
|
283
|
+
outcomes,
|
|
284
|
+
...(last === undefined ? {} : { mostRecent: { at: last.at, hookId: last.hookId, outcome: last.outcome } }),
|
|
285
|
+
},
|
|
286
|
+
});
|
|
287
|
+
} catch (err) {
|
|
288
|
+
graph.issues.push(`hook-receipts: ${err instanceof Error ? err.message : String(err)}`);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
|
|
246
292
|
function inspectExtensions(cwd: string, graph: CustomizationGraph): void {
|
|
247
293
|
try {
|
|
248
294
|
for (const ext of listInstalledExtensions(cwd, { all: true })) {
|
|
@@ -254,8 +300,14 @@ function inspectExtensions(cwd: string, graph: CustomizationGraph): void {
|
|
|
254
300
|
hash: shortHash(`${ext.id}@${ext.version}`),
|
|
255
301
|
trust: "untrusted",
|
|
256
302
|
precedence: ext.effective ? "winner" : "loser",
|
|
257
|
-
reloadClass: "
|
|
258
|
-
detail: {
|
|
303
|
+
reloadClass: "reload",
|
|
304
|
+
detail: {
|
|
305
|
+
version: ext.version,
|
|
306
|
+
enabled: ext.enabled,
|
|
307
|
+
valid: ext.valid,
|
|
308
|
+
effective: ext.effective,
|
|
309
|
+
loadable: ext.loadable,
|
|
310
|
+
},
|
|
259
311
|
});
|
|
260
312
|
}
|
|
261
313
|
} catch (err) {
|
|
@@ -356,6 +408,7 @@ export function buildCustomizationGraph(cwd: string): CustomizationGraph {
|
|
|
356
408
|
inspectRules(cwd, graph);
|
|
357
409
|
inspectOperatorProfile(cwd, graph);
|
|
358
410
|
inspectHooks(cwd, graph);
|
|
411
|
+
inspectHookReceipts(graph);
|
|
359
412
|
inspectExtensions(cwd, graph);
|
|
360
413
|
inspectResourceRoots(cwd, graph);
|
|
361
414
|
inspectSafetyAndMemory(cwd, graph);
|
package/src/cli/configure.ts
CHANGED
|
@@ -200,15 +200,12 @@ function parseSetupArgs(argv: ReadonlyArray<string>): ParsedArgs {
|
|
|
200
200
|
out.backgroundModel = need();
|
|
201
201
|
break;
|
|
202
202
|
case "--fleet-model":
|
|
203
|
-
case "--worker-model":
|
|
204
203
|
out.workerModel = need();
|
|
205
204
|
break;
|
|
206
205
|
case "--agent-profile":
|
|
207
|
-
case "--worker-profile":
|
|
208
206
|
out.workerProfile = need();
|
|
209
207
|
break;
|
|
210
208
|
case "--agent-profile-model":
|
|
211
|
-
case "--worker-profile-model":
|
|
212
209
|
out.workerProfileModel = need();
|
|
213
210
|
break;
|
|
214
211
|
case "--api-key-env":
|
|
@@ -238,7 +235,6 @@ function parseSetupArgs(argv: ReadonlyArray<string>): ParsedArgs {
|
|
|
238
235
|
out.setBackground = true;
|
|
239
236
|
break;
|
|
240
237
|
case "--set-fleet-default":
|
|
241
|
-
case "--set-worker-default":
|
|
242
238
|
out.setWorkerDefault = true;
|
|
243
239
|
break;
|
|
244
240
|
case "--context-window": {
|
package/src/cli/docs.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { spawn } from "node:child_process";
|
|
2
|
-
import { createReadStream, readdirSync, statSync } from "node:fs";
|
|
2
|
+
import { createReadStream, readdirSync, realpathSync, statSync } from "node:fs";
|
|
3
3
|
import { createServer, type IncomingMessage, type Server, type ServerResponse } from "node:http";
|
|
4
4
|
import type { AddressInfo } from "node:net";
|
|
5
5
|
import { relative, resolve } from "node:path";
|
|
6
6
|
import chalk from "chalk";
|
|
7
7
|
import { resolvePackageRoot } from "../core/package-root.js";
|
|
8
|
-
import { printError, printHeader } from "./
|
|
8
|
+
import { printError, printHeader } from "./argv.js";
|
|
9
9
|
|
|
10
|
-
// Human-facing viewer over the
|
|
10
|
+
// Human-facing viewer over the source-checkout HTML blueprints. It binds an ephemeral
|
|
11
11
|
// static file server to 127.0.0.1 only, serves docs/html/index.html as the
|
|
12
12
|
// menu plus the blueprint pages, prints the URL, and runs until SIGINT. It
|
|
13
13
|
// uses only Node's built-in http and fs: zero new dependencies, no daemon, no
|
|
@@ -21,7 +21,8 @@ const HELP = `clio-coder docs [topic] [--no-open]
|
|
|
21
21
|
|
|
22
22
|
Serve Clio Coder's interactive HTML documentation locally and open it in a
|
|
23
23
|
browser. The blueprints live in docs/html of a source checkout; the npm package
|
|
24
|
-
ships the Markdown
|
|
24
|
+
ships the categorized Markdown reference tree under docs/ and excludes HTML.
|
|
25
|
+
The server binds an ephemeral port on
|
|
25
26
|
127.0.0.1, keeps no state, runs no daemon, and reaches no external network.
|
|
26
27
|
Press Ctrl+C to stop it.
|
|
27
28
|
|
|
@@ -64,7 +65,7 @@ export interface DocsMenuEntry {
|
|
|
64
65
|
label: string;
|
|
65
66
|
}
|
|
66
67
|
|
|
67
|
-
/** Resolve
|
|
68
|
+
/** Resolve the source-checkout HTML root. The npm package deliberately excludes it. */
|
|
68
69
|
function resolveDocsHtmlDir(): string {
|
|
69
70
|
return resolve(resolvePackageRoot(), "docs", "html");
|
|
70
71
|
}
|
|
@@ -159,8 +160,8 @@ function listHtmlFiles(htmlDir: string): string[] {
|
|
|
159
160
|
}
|
|
160
161
|
|
|
161
162
|
/** Build the static request handler for one html root. */
|
|
162
|
-
function createDocsRequestHandler(htmlDir: string): (req: IncomingMessage, res: ServerResponse) => void {
|
|
163
|
-
const root = resolve(htmlDir);
|
|
163
|
+
export function createDocsRequestHandler(htmlDir: string): (req: IncomingMessage, res: ServerResponse) => void {
|
|
164
|
+
const root = realpathSync(resolve(htmlDir));
|
|
164
165
|
return (req, res) => {
|
|
165
166
|
if (req.method !== "GET" && req.method !== "HEAD") {
|
|
166
167
|
res.writeHead(405, { "content-type": "text/plain; charset=utf-8", allow: "GET, HEAD" });
|
|
@@ -174,20 +175,27 @@ function createDocsRequestHandler(htmlDir: string): (req: IncomingMessage, res:
|
|
|
174
175
|
res.end(resolved.reason);
|
|
175
176
|
return;
|
|
176
177
|
}
|
|
177
|
-
const
|
|
178
|
-
if (!isWithin(
|
|
178
|
+
const requestedTarget = resolve(root, resolved.relative);
|
|
179
|
+
if (!isWithin(requestedTarget, root)) {
|
|
179
180
|
res.writeHead(403, { "content-type": "text/plain; charset=utf-8" });
|
|
180
181
|
res.end("forbidden");
|
|
181
182
|
return;
|
|
182
183
|
}
|
|
183
184
|
let size: number | null = null;
|
|
185
|
+
let target: string | null = null;
|
|
184
186
|
try {
|
|
187
|
+
target = realpathSync(requestedTarget);
|
|
188
|
+
if (!isWithin(target, root)) {
|
|
189
|
+
res.writeHead(403, { "content-type": "text/plain; charset=utf-8" });
|
|
190
|
+
res.end("forbidden");
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
185
193
|
const stat = statSync(target);
|
|
186
194
|
if (stat.isFile()) size = stat.size;
|
|
187
195
|
} catch {
|
|
188
196
|
size = null;
|
|
189
197
|
}
|
|
190
|
-
if (size === null) {
|
|
198
|
+
if (size === null || target === null) {
|
|
191
199
|
res.writeHead(404, { "content-type": "text/plain; charset=utf-8" });
|
|
192
200
|
res.end("not found");
|
|
193
201
|
return;
|
|
@@ -263,7 +271,7 @@ function openBrowser(url: string): void {
|
|
|
263
271
|
}
|
|
264
272
|
}
|
|
265
273
|
|
|
266
|
-
function waitForShutdown(): Promise<void> {
|
|
274
|
+
export function waitForShutdown(): Promise<void> {
|
|
267
275
|
return new Promise((resolveShutdown) => {
|
|
268
276
|
const onSignal = (): void => {
|
|
269
277
|
process.removeListener("SIGINT", onSignal);
|
|
@@ -304,14 +312,14 @@ export async function runDocsCommand(args: ReadonlyArray<string> = []): Promise<
|
|
|
304
312
|
try {
|
|
305
313
|
htmlDir = resolveDocsHtmlDir();
|
|
306
314
|
} catch (err) {
|
|
307
|
-
printError(`could not resolve
|
|
315
|
+
printError(`could not resolve the docs HTML root: ${err instanceof Error ? err.message : String(err)}`);
|
|
308
316
|
return 1;
|
|
309
317
|
}
|
|
310
318
|
const files = listHtmlFiles(htmlDir);
|
|
311
319
|
if (files.length === 0) {
|
|
312
320
|
printError(`no HTML docs at ${htmlDir}`);
|
|
313
321
|
process.stdout.write(
|
|
314
|
-
` the npm package ships the Markdown
|
|
322
|
+
` the npm package ships only the categorized Markdown reference tree: ${resolve(resolvePackageRoot(), "docs")}\n` +
|
|
315
323
|
" the interactive blueprints are in a source checkout and at https://github.com/iowarp/clio-coder/tree/main/docs/html\n",
|
|
316
324
|
);
|
|
317
325
|
return 1;
|
|
@@ -333,7 +341,7 @@ export async function runDocsCommand(args: ReadonlyArray<string> = []): Promise<
|
|
|
333
341
|
const handle = await startDocsServer({ htmlDir });
|
|
334
342
|
const landingUrl = landing === "index.html" ? handle.url : `${handle.url}${landing}`;
|
|
335
343
|
printHeader("Clio docs viewer");
|
|
336
|
-
process.stdout.write(` serving ${htmlDir}\n`);
|
|
344
|
+
process.stdout.write(` serving HTML root ${htmlDir}\n`);
|
|
337
345
|
process.stdout.write(` open ${chalk.cyan(landingUrl)}\n`);
|
|
338
346
|
process.stdout.write(" bound to 127.0.0.1 only: no external network, no daemon, no state.\n");
|
|
339
347
|
process.stdout.write(" press Ctrl+C to stop.\n");
|
package/src/cli/doctor-naming.ts
CHANGED
|
@@ -88,7 +88,7 @@ function namingResourceFindings(options: NamingDoctorOptions): DoctorFinding[] {
|
|
|
88
88
|
`${renamed} proven skills renamed`,
|
|
89
89
|
`${renamable} proven skills await doctor --fix`,
|
|
90
90
|
`${conflicts} modified/conflicting skills left untouched`,
|
|
91
|
-
`${skillMetadata.length} legacy skill metadata keys`,
|
|
91
|
+
`${skillMetadata.length} legacy skill metadata keys${skillMetadata.length > 0 ? ` (rename \`clio:\` to \`clio-coder:\` in ${skillMetadata.map((entry) => entry.path).join(", ")})` : ""}`,
|
|
92
92
|
`${overlays.length} legacy model overlay files/metadata (manual migration required)`,
|
|
93
93
|
].join("; "),
|
|
94
94
|
},
|
|
@@ -145,7 +145,7 @@ function yaziNamingFinding(fix: boolean, enabled: boolean): DoctorFinding {
|
|
|
145
145
|
if (!enabled) {
|
|
146
146
|
return {
|
|
147
147
|
ok: true,
|
|
148
|
-
name: "naming
|
|
148
|
+
name: "naming files profile",
|
|
149
149
|
detail: "disabled by settings",
|
|
150
150
|
};
|
|
151
151
|
}
|
|
@@ -154,7 +154,7 @@ function yaziNamingFinding(fix: boolean, enabled: boolean): DoctorFinding {
|
|
|
154
154
|
if (legacy === 0) {
|
|
155
155
|
return {
|
|
156
156
|
ok: true,
|
|
157
|
-
name: "naming
|
|
157
|
+
name: "naming files profile",
|
|
158
158
|
detail: inspection.present
|
|
159
159
|
? `${inspection.profileDir} uses canonical event and environment identifiers`
|
|
160
160
|
: `${inspection.profileDir} is absent; the next managed open will generate canonical identifiers`,
|
|
@@ -164,7 +164,7 @@ function yaziNamingFinding(fix: boolean, enabled: boolean): DoctorFinding {
|
|
|
164
164
|
return {
|
|
165
165
|
ok: true,
|
|
166
166
|
level: "warn",
|
|
167
|
-
name: "naming
|
|
167
|
+
name: "naming files profile",
|
|
168
168
|
detail: `${inspection.profileDir}: ${inspection.legacyEvents} legacy events and ${inspection.legacyEnvironmentNames} legacy environment names (run \`clio-coder doctor --fix\`)`,
|
|
169
169
|
};
|
|
170
170
|
}
|
|
@@ -172,7 +172,7 @@ function yaziNamingFinding(fix: boolean, enabled: boolean): DoctorFinding {
|
|
|
172
172
|
return {
|
|
173
173
|
ok: report.status !== "regeneration-failed",
|
|
174
174
|
...(report.status === "regeneration-failed" ? {} : { level: "ok" as const }),
|
|
175
|
-
name: "naming
|
|
175
|
+
name: "naming files profile",
|
|
176
176
|
detail: report.detail,
|
|
177
177
|
};
|
|
178
178
|
}
|
|
@@ -16,7 +16,7 @@ function yaziProfileFinding(enabled: boolean): DoctorFinding {
|
|
|
16
16
|
if (!enabled) {
|
|
17
17
|
return {
|
|
18
18
|
ok: true,
|
|
19
|
-
name: "
|
|
19
|
+
name: "files pane profile",
|
|
20
20
|
detail: "disabled by settings",
|
|
21
21
|
};
|
|
22
22
|
}
|
|
@@ -24,14 +24,14 @@ function yaziProfileFinding(enabled: boolean): DoctorFinding {
|
|
|
24
24
|
const profile = inspectCurrentYaziProfile();
|
|
25
25
|
return {
|
|
26
26
|
ok: true,
|
|
27
|
-
name: "
|
|
27
|
+
name: "files pane profile",
|
|
28
28
|
detail: describeYaziProfile(profile),
|
|
29
29
|
level: profile.state === "current" ? "ok" : "warn",
|
|
30
30
|
};
|
|
31
31
|
} catch (error) {
|
|
32
32
|
return {
|
|
33
33
|
ok: true,
|
|
34
|
-
name: "
|
|
34
|
+
name: "files pane profile",
|
|
35
35
|
level: "warn",
|
|
36
36
|
detail: `${yaziProfileDir()} could not be inspected (${error instanceof Error ? error.message : String(error)}); user config ${userYaziConfigDir()} is separate and untouched`,
|
|
37
37
|
};
|
package/src/cli/eval.ts
CHANGED
|
@@ -115,8 +115,7 @@ function parseEvalArgs(args: ReadonlyArray<string>): ParsedEvalArgs {
|
|
|
115
115
|
index += 1;
|
|
116
116
|
continue;
|
|
117
117
|
}
|
|
118
|
-
|
|
119
|
-
if (arg === "--clio-coder-entry" || arg === "--clio-entry") {
|
|
118
|
+
if (arg === "--clio-coder-entry") {
|
|
120
119
|
parsed.clioEntry = requiredValue(args, index, arg);
|
|
121
120
|
index += 1;
|
|
122
121
|
continue;
|
package/src/cli/extensions.ts
CHANGED
|
@@ -91,10 +91,11 @@ function resourceSummary(extension: InstalledExtension): string {
|
|
|
91
91
|
}
|
|
92
92
|
|
|
93
93
|
function stateLabel(extension: InstalledExtension): string {
|
|
94
|
+
if (!extension.valid) return "invalid";
|
|
94
95
|
if (!extension.compatible) return "incompatible";
|
|
95
96
|
if (!extension.enabled) return "disabled";
|
|
96
97
|
if (!extension.effective) return `shadowed:${extension.overriddenBy ?? "higher"}`;
|
|
97
|
-
return "active";
|
|
98
|
+
return extension.loadable ? "active" : "inactive";
|
|
98
99
|
}
|
|
99
100
|
|
|
100
101
|
function printList(items: ReadonlyArray<InstalledExtension>): void {
|
package/src/cli/fleet.ts
CHANGED
|
@@ -373,7 +373,7 @@ async function runFleet(args: ReadonlyArray<string>): Promise<number> {
|
|
|
373
373
|
return fail("required domains unavailable (dispatch/agents/safety)");
|
|
374
374
|
}
|
|
375
375
|
const fleetSettings = config?.get() ?? readSettings();
|
|
376
|
-
// Install `
|
|
376
|
+
// Install `fleet.history.journal` the same way the interactive composition root
|
|
377
377
|
// does, so a fleet run honours the setting without the journal ever reading
|
|
378
378
|
// settings.yaml from the dispatch event path.
|
|
379
379
|
configureRunEventJournal(fleetSettings.fleet.history.journal);
|
package/src/cli/index.ts
CHANGED
|
@@ -48,6 +48,7 @@ Usage:
|
|
|
48
48
|
clio-coder auth list|status|login|logout [target-or-runtime]
|
|
49
49
|
clio-coder doctor [--fix] diagnose state; --fix creates or repairs it
|
|
50
50
|
clio-coder paths [--json] print resolved config/data/cache directories
|
|
51
|
+
clio-coder config inspect [--json] inspect effective customization and provenance
|
|
51
52
|
clio-coder reset recover or wipe Clio Coder state
|
|
52
53
|
clio-coder context show project context status (CLIO-CODER.md, preload, codewiki)
|
|
53
54
|
clio-coder context init [--yes] [--preview|--heuristic] explore the repo and bootstrap CLIO-CODER.md and codewiki
|
|
@@ -72,7 +73,7 @@ Usage:
|
|
|
72
73
|
clio-coder verifiers discover, inspect, author, validate, edit, or dry-run project checks
|
|
73
74
|
clio-coder tools list|status|install|remove <id> pinned external programs Clio can drive
|
|
74
75
|
clio-coder interop inspect --json detected external coding agents and how far each one is wired
|
|
75
|
-
clio-coder panes install
|
|
76
|
+
clio-coder panes install|theme install the pane multiplexer (alias for 'tools install herdr'), or print Clio's theme as a herdr block
|
|
76
77
|
clio-coder docs [topic] serve the HTML docs of a source checkout on 127.0.0.1 (--no-open to skip browser)
|
|
77
78
|
clio-coder dev <command> harness instruments; run 'clio-coder dev' for the list
|
|
78
79
|
clio-coder --help, -h this message
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* operator cancel.
|
|
10
10
|
*/
|
|
11
11
|
|
|
12
|
-
import {
|
|
12
|
+
import { resolveGuardrail } from "../core/guardrails.js";
|
|
13
13
|
import type { DispatchContract } from "../domains/dispatch/contract.js";
|
|
14
14
|
|
|
15
15
|
export interface InternalDispatchDeadline {
|
|
@@ -25,10 +25,9 @@ export function armInternalDispatchDeadline(
|
|
|
25
25
|
dispatch: DispatchContract,
|
|
26
26
|
runId: string,
|
|
27
27
|
label: string,
|
|
28
|
-
env: NodeJS.ProcessEnv = process.env,
|
|
29
28
|
maxTimeoutMs?: number,
|
|
30
29
|
): InternalDispatchDeadline {
|
|
31
|
-
const configuredTimeoutMs = resolveGuardrail("internalDispatchTimeoutMs"
|
|
30
|
+
const configuredTimeoutMs = resolveGuardrail("internalDispatchTimeoutMs");
|
|
32
31
|
const timeoutMs =
|
|
33
32
|
maxTimeoutMs === undefined ? configuredTimeoutMs : Math.min(configuredTimeoutMs, Math.max(1, maxTimeoutMs));
|
|
34
33
|
const productCapped = timeoutMs < configuredTimeoutMs;
|
|
@@ -50,6 +49,6 @@ export function armInternalDispatchDeadline(
|
|
|
50
49
|
productCapped
|
|
51
50
|
? `${label} exceeded its ${Math.round(timeoutMs / 1000)}s latency ceiling and was aborted.`
|
|
52
51
|
: `${label} timed out after ${Math.round(timeoutMs / 1000)}s and was aborted. ` +
|
|
53
|
-
|
|
52
|
+
"Raise fleet.limits.internalRunTimeoutMs for slower targets.",
|
|
54
53
|
};
|
|
55
54
|
}
|
package/src/cli/panes.ts
CHANGED
|
@@ -1,16 +1,22 @@
|
|
|
1
|
+
import { renderHerdrThemeBlock } from "../domains/mux/yazi/theme.js";
|
|
1
2
|
import { printError } from "./shared.js";
|
|
2
3
|
import { runToolsCommand } from "./tools.js";
|
|
3
4
|
|
|
4
5
|
const HELP = `clio-coder panes install [--force] [--json]
|
|
6
|
+
clio-coder panes theme
|
|
5
7
|
|
|
6
|
-
Install the pane multiplexer Clio drives. This is an alias for
|
|
7
|
-
\`clio-coder tools install herdr\`; the toolchain command is where every
|
|
8
|
-
external program is managed, and \`clio-coder tools status herdr\`
|
|
9
|
-
which copy Clio would run.
|
|
8
|
+
install Install the pane multiplexer Clio drives. This is an alias for
|
|
9
|
+
\`clio-coder tools install herdr\`; the toolchain command is where every
|
|
10
|
+
pinned external program is managed, and \`clio-coder tools status herdr\`
|
|
11
|
+
explains which copy Clio would run.
|
|
12
|
+
theme Print Clio's theme tokens as a herdr [theme.custom] block. herdr styles
|
|
13
|
+
its own chrome from its config.toml and offers no per-pane styling, so
|
|
14
|
+
Clio prints the block for you to paste rather than editing another
|
|
15
|
+
program's configuration. The files pane itself is themed by Clio at open.
|
|
10
16
|
`;
|
|
11
17
|
|
|
12
18
|
/**
|
|
13
|
-
* The user-facing
|
|
19
|
+
* The user-facing verbs for the pane layer's setup.
|
|
14
20
|
*
|
|
15
21
|
* Panes are the feature; herdr is the program behind it. Naming the program in
|
|
16
22
|
* a command an operator types is a leak, so the alias exists and routes to the
|
|
@@ -26,6 +32,14 @@ export async function runPanesCommand(argv: ReadonlyArray<string> = []): Promise
|
|
|
26
32
|
process.stdout.write(HELP);
|
|
27
33
|
return 2;
|
|
28
34
|
}
|
|
35
|
+
if (subcommand === "theme") {
|
|
36
|
+
if (rest.length > 0) {
|
|
37
|
+
printError(`panes theme takes no arguments, got: ${rest.join(" ")}`);
|
|
38
|
+
return 2;
|
|
39
|
+
}
|
|
40
|
+
process.stdout.write(renderHerdrThemeBlock());
|
|
41
|
+
return 0;
|
|
42
|
+
}
|
|
29
43
|
if (subcommand !== "install") {
|
|
30
44
|
printError(`unknown panes command: ${subcommand}`);
|
|
31
45
|
process.stderr.write(HELP);
|
package/src/cli/run.ts
CHANGED
|
@@ -261,7 +261,7 @@ export async function runClioRun(
|
|
|
261
261
|
// A mistyped slash command is a usage error, not a task. Refusing it
|
|
262
262
|
// here keeps it from booting a session and spending a model turn on a
|
|
263
263
|
// command that was never run, which is what the TUI has always done
|
|
264
|
-
// and what docs/extensions-and-sharing.md documents for both surfaces.
|
|
264
|
+
// and what docs/guide/extensions-and-sharing.md documents for both surfaces.
|
|
265
265
|
const slashRefusal = await unknownSlashCommandRefusal(assembled.prompt);
|
|
266
266
|
if (slashRefusal !== null) {
|
|
267
267
|
process.stderr.write(`clio-coder run: ${slashRefusal}\n`);
|
|
@@ -372,7 +372,7 @@ async function runDispatch(
|
|
|
372
372
|
]);
|
|
373
373
|
const config = loaded.getContract<ConfigContract>("config");
|
|
374
374
|
const baseSettings = config?.get() ?? readSettings();
|
|
375
|
-
// Install `
|
|
375
|
+
// Install `fleet.history.journal` the same way the interactive composition root
|
|
376
376
|
// does. The journal never reads settings.yaml itself: it sits on the
|
|
377
377
|
// dispatch event path, where a settings read would be both a cost and a
|
|
378
378
|
// throw site.
|
package/src/cli/share.ts
CHANGED
|
@@ -142,7 +142,11 @@ function printDiagnostics(diagnostics: ReadonlyArray<ShareDiagnostic>): void {
|
|
|
142
142
|
|
|
143
143
|
function printRecovery(plan: ShareImportPlan): void {
|
|
144
144
|
if (!plan.recovery) return;
|
|
145
|
-
process.stderr.write(
|
|
145
|
+
process.stderr.write(
|
|
146
|
+
plan.recovery.failed
|
|
147
|
+
? "recovery: import stopped after a write failure\n"
|
|
148
|
+
: "recovery: import completed with preserved backups\n",
|
|
149
|
+
);
|
|
146
150
|
process.stderr.write("written files:\n");
|
|
147
151
|
if (plan.recovery.written.length === 0) process.stderr.write(" none\n");
|
|
148
152
|
else {
|
package/src/cli/skills-eval.ts
CHANGED
|
@@ -51,9 +51,9 @@ const DEFAULT_RUN_TIMEOUT_MS = 600_000;
|
|
|
51
51
|
*
|
|
52
52
|
* A headless `clio-coder run` has no operator to answer a permission ask, so below
|
|
53
53
|
* full-auto every exec-class call in an arm dies with the harness's own denial
|
|
54
|
-
* and the judge scores a skill that was never allowed to act.
|
|
55
|
-
*
|
|
56
|
-
*
|
|
54
|
+
* and the judge scores a skill that was never allowed to act. The 2026-08-13
|
|
55
|
+
* harness decision is that eval arms run full-auto because their workspaces
|
|
56
|
+
* are per-run copies created under a
|
|
57
57
|
* private temp root and removed when the scenario ends. The judge arm is
|
|
58
58
|
* excluded: it scores text and is instructed to call no tools, so granting it
|
|
59
59
|
* unattended write and exec buys nothing.
|
package/src/cli/targets.ts
CHANGED
|
@@ -51,10 +51,6 @@ Usage:
|
|
|
51
51
|
clio-coder targets convert <id> --runtime <runtimeId>
|
|
52
52
|
clio-coder targets remove <id>
|
|
53
53
|
clio-coder targets rename <old> <new>
|
|
54
|
-
|
|
55
|
-
Aliases:
|
|
56
|
-
--worker-target and --worker-model are accepted for --fleet-target and
|
|
57
|
-
--fleet-model, carried over from before the worker/fleet rename.
|
|
58
54
|
`;
|
|
59
55
|
|
|
60
56
|
const USE_USAGE =
|
|
@@ -249,11 +245,11 @@ function parseUseArgs(args: ReadonlyArray<string>): UseArgs | null {
|
|
|
249
245
|
parsed.backgroundModel = need();
|
|
250
246
|
continue;
|
|
251
247
|
}
|
|
252
|
-
if (arg === "--fleet-model"
|
|
248
|
+
if (arg === "--fleet-model") {
|
|
253
249
|
parsed.workerModel = need();
|
|
254
250
|
continue;
|
|
255
251
|
}
|
|
256
|
-
if (arg === "--fleet-target"
|
|
252
|
+
if (arg === "--fleet-target") {
|
|
257
253
|
parsed.workerTarget = need();
|
|
258
254
|
continue;
|
|
259
255
|
}
|