@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
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Proactive task memory
|
|
2
2
|
|
|
3
|
-
> **
|
|
3
|
+
> **Visual blueprint:** The source checkout includes the complete
|
|
4
|
+
> [Proactive task memory visual reference](https://github.com/iowarp/clio-coder/blob/main/docs/html/proactive_memory_blueprint.html).
|
|
4
5
|
|
|
5
6
|
Clio's proactive task memory protects long-running work from behavioral state
|
|
6
7
|
decay: a requirement, environment fact, failed attempt, or diagnosis can still
|
|
@@ -10,10 +11,10 @@ Long-Horizon Agents* (2026), adapted to Clio's visible middleware and local-mode
|
|
|
10
11
|
routing.
|
|
11
12
|
|
|
12
13
|
The rules-only tier is enabled by default and makes no model calls. An LLM memory
|
|
13
|
-
tier is opt-in through the independent `
|
|
14
|
-
system prompt and tool surface
|
|
15
|
-
`memory.
|
|
16
|
-
reminders, handoff offers, and handoff seeding.
|
|
14
|
+
tier is opt-in through the independent `context.memory.target` and
|
|
15
|
+
`context.memory.model` route. The action agent's system prompt and tool surface
|
|
16
|
+
do not change, and disabling `context.memory.enabled` removes observation, bank
|
|
17
|
+
writes, model resolution, reminders, handoff offers, and handoff seeding.
|
|
17
18
|
|
|
18
19
|
## Architecture
|
|
19
20
|
|
|
@@ -116,11 +117,11 @@ than discarding the writes that came with it. A timeout, provider failure,
|
|
|
116
117
|
malformed response, or telemetry failure is silent and never blocks a tool.
|
|
117
118
|
|
|
118
119
|
### Intervention Defaults & Cadence Knobs
|
|
119
|
-
- `memory.
|
|
120
|
-
- `memory.
|
|
121
|
-
- `memory.
|
|
122
|
-
- `memory.
|
|
123
|
-
- `memory.
|
|
120
|
+
- `context.memory.enabled` (default `true`): Enables observation, task bank writes, and reminder injection.
|
|
121
|
+
- `context.memory.cadenceToolCalls` (default `10`): Minimum completed-tool interval between background interventions.
|
|
122
|
+
- `context.memory.trajectorySteps` (default `8`): Completed tool-trajectory window analyzed during background evaluation.
|
|
123
|
+
- `context.memory.maxOutputTokens` (default `2000`): Bounds the rendered memory-bank context and the ordinary policy-model completion. An always-on-thinking model receives additional reasoning headroom, at least `4,000` tokens when its model cap permits, so it can still reach the strict envelope.
|
|
124
|
+
- `context.memory.timeoutMs` (default `60000`): Wall-clock limit for one background memory-policy request. The step is detached, so this deadline never delays a turn, but it does hold a request slot on a real inference endpoint that your own turns and dispatched workers queue against. Raise it only after inspecting the timeout and hit-rate evidence for the selected route.
|
|
124
125
|
|
|
125
126
|
## Trigger semantics
|
|
126
127
|
|
|
@@ -130,7 +131,7 @@ it runs detached from it.
|
|
|
130
131
|
|
|
131
132
|
| Trigger | Behavior |
|
|
132
133
|
| --- | --- |
|
|
133
|
-
| Interval | After `memory.
|
|
134
|
+
| Interval | After `context.memory.cadenceToolCalls` completed tools since the last prompted step; default 10. This is the nondeterministic/citation-gated path. |
|
|
134
135
|
| Tool-error streak | Two consecutive error outcomes. A successful tool resets the streak. |
|
|
135
136
|
| Loop signal | Reuses the orchestrator loop guard's verdict; it does not infer a second competing loop detector. |
|
|
136
137
|
| Repeated failure | The rules tier records failed operation fingerprints and annotates the failing tool result once the same failure appears twice in the bounded trajectory. |
|
|
@@ -163,9 +164,9 @@ records one telemetry row, not two.
|
|
|
163
164
|
|
|
164
165
|
The agent loop does not become idle until every `agent_end` listener settles, so a
|
|
165
166
|
memory step awaited at that boundary would add its full latency to the visible
|
|
166
|
-
end of every triggered turn.
|
|
167
|
-
|
|
168
|
-
|
|
167
|
+
end of every triggered turn. Historical operator measurements below put a
|
|
168
|
+
typical step in the tens of seconds. This makes an awaited step intolerable as
|
|
169
|
+
an end-of-turn pause.
|
|
169
170
|
|
|
170
171
|
The prompted step is therefore detached. `evaluateAsync` starts it and returns
|
|
171
172
|
immediately; the turn ends on schedule. When the step resolves, its reminder is
|
|
@@ -217,8 +218,8 @@ hit rate.
|
|
|
217
218
|
|
|
218
219
|
### The measurement
|
|
219
220
|
|
|
220
|
-
From one operator's `steps.jsonl
|
|
221
|
-
a small local background route:
|
|
221
|
+
From one operator's dated `steps.jsonl` export, 274 rows spanning 2026-08-14 to
|
|
222
|
+
2026-08-29 on a small local background route:
|
|
222
223
|
|
|
223
224
|
| Figure | Value |
|
|
224
225
|
| --- | --- |
|
|
@@ -240,18 +241,19 @@ injections cost nothing.
|
|
|
240
241
|
The default does not change, and it is a deliberate default rather than an
|
|
241
242
|
unexamined one:
|
|
242
243
|
|
|
243
|
-
- `memory.
|
|
244
|
+
- `context.memory.enabled` stays `true`. It runs the rules tier, which makes
|
|
244
245
|
no model calls, spends no tokens, and produced 4 of the 10 injections.
|
|
245
|
-
- The LLM tier stays opt-in through `
|
|
246
|
+
- The LLM tier stays opt-in through `context.memory.target` and `context.memory.model`,
|
|
246
247
|
which is already the case: an unset background role never resolves a client.
|
|
247
248
|
A 10 percent hit rate at 22,868 tokens per injection does not earn a default-on
|
|
248
249
|
position, and it is not so poor that it earns removal from an operator who has
|
|
249
250
|
measured their own route and wants it.
|
|
250
|
-
-
|
|
251
|
-
|
|
252
|
-
53.6
|
|
253
|
-
not have been spent
|
|
254
|
-
may hold a shared local server for, not a
|
|
251
|
+
- `context.memory.timeoutMs` is `60000` in the current defaults. The dated study
|
|
252
|
+
considered a 30-second counterfactual: two of six observed injections, at
|
|
253
|
+
53.6 and 57.7 seconds, would have been cut, while 531 of 1,666 model seconds
|
|
254
|
+
would not have been spent. The current 60-second deadline is the source-backed
|
|
255
|
+
bound on what one optional call may hold a shared local server for, not a
|
|
256
|
+
prediction of when a route answers.
|
|
255
257
|
- A step that would run on the endpoint the chat target is streaming against is
|
|
256
258
|
skipped with reason `endpoint_busy`, and the skip is recorded. On a single-slot
|
|
257
259
|
llama.cpp router the alternative is queueing behind the operator's own decoding
|
|
@@ -260,7 +262,7 @@ unexamined one:
|
|
|
260
262
|
|
|
261
263
|
### What a background target costs on a shared local server
|
|
262
264
|
|
|
263
|
-
If `
|
|
265
|
+
If `context.memory.target` names the same server as `chat.target`, that
|
|
264
266
|
server's slots are shared. On a llama.cpp router started with `--parallel 1`
|
|
265
267
|
there is exactly one, and the memory step and the operator's turn contend for it.
|
|
266
268
|
|
|
@@ -289,8 +291,8 @@ arrangement the tier is designed for.
|
|
|
289
291
|
|
|
290
292
|
Memory reads a trajectory and writes a fixed envelope. It does not plan, and it
|
|
291
293
|
does not need to be clever. A small non-reasoning model is the right choice, and
|
|
292
|
-
Clio always requests the
|
|
293
|
-
|
|
294
|
+
Clio always requests the memory route with thinking off. Version 2 therefore
|
|
295
|
+
has no configurable memory thinking-level key.
|
|
294
296
|
|
|
295
297
|
That request reaches the wire wherever the runtime carries a thinking control:
|
|
296
298
|
llama.cpp reads `chat_template_kwargs.enable_thinking`, and LM Studio reads
|
|
@@ -298,7 +300,8 @@ llama.cpp reads `chat_template_kwargs.enable_thinking`, and LM Studio reads
|
|
|
298
300
|
|
|
299
301
|
A model that reasons anyway still works. Some genuinely cannot be silenced, and
|
|
300
302
|
the catalog records those as always-on so the level reads `forced` rather than
|
|
301
|
-
`off`; the shipped
|
|
303
|
+
`off`; the shipped model catalog classifies `qwopus3.5-9b-v3` that way. No model
|
|
304
|
+
is selected for background memory by default. Reasoning
|
|
302
305
|
blocks are discarded and only the envelope is kept, and the output budget is
|
|
303
306
|
sized to let a reasoning preamble run its course first. The cost is latency,
|
|
304
307
|
which the detached step absorbs.
|
|
@@ -328,52 +331,59 @@ KV caches, and parallel slots must all fit the target's available memory.
|
|
|
328
331
|
The shipped defaults are:
|
|
329
332
|
|
|
330
333
|
```yaml
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
model: null
|
|
334
|
-
thinkingLevel: off
|
|
335
|
-
|
|
336
|
-
memory:
|
|
337
|
-
intervention:
|
|
334
|
+
context:
|
|
335
|
+
memory:
|
|
338
336
|
enabled: true
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
337
|
+
target: null
|
|
338
|
+
model: null
|
|
339
|
+
cadenceToolCalls: 10
|
|
340
|
+
trajectorySteps: 8
|
|
341
|
+
maxOutputTokens: 2000
|
|
342
|
+
timeoutMs: 60000
|
|
343
343
|
```
|
|
344
344
|
|
|
345
|
-
With `
|
|
345
|
+
With `context.memory.target` and `context.memory.model` unset, Clio stays in the
|
|
346
346
|
zero-cost rules tier. `/memory` shows the current tier, last decision, approved
|
|
347
347
|
durable lessons, the live bank, and a bounded history of the last twenty memory
|
|
348
348
|
steps with their trigger, decision, write count, cited-entry count, tier, and
|
|
349
349
|
latency. That history is the only place a capture, a gate, or a timeout becomes
|
|
350
350
|
visible, since those outcomes produce no transcript entry by design; only an
|
|
351
351
|
actual injection reaches the transcript. It carries counts and outcomes only,
|
|
352
|
-
never bank or trajectory text. `/settings` exposes every key above;
|
|
352
|
+
never bank or trajectory text. `/settings` exposes controls for every key above;
|
|
353
|
+
its compact row labels retain shorter operator-facing names. The saved
|
|
353
354
|
background-memory target is the Memory target row in Settings → Orchestrator,
|
|
354
355
|
independent of the chat target and the fleet default. A running session owns
|
|
355
356
|
its routing snapshot, while the saved
|
|
356
357
|
selection becomes the default for new sessions.
|
|
357
358
|
|
|
358
|
-
The reference
|
|
359
|
-
|
|
359
|
+
The reference topology separates chat from memory work:
|
|
360
|
+
|
|
361
|
+
| Role | Target | Runtime and endpoint | Model | Capacity |
|
|
362
|
+
| --- | --- | --- | --- | --- |
|
|
363
|
+
| Chat | `dynamo` | LM Studio at `192.168.86.143:1234` | `qwen3.8-27b-dynamo` | Reported by the LM Studio probe |
|
|
364
|
+
| Background memory | `mini` | llama.cpp router at `192.168.86.141:8080` | `ornith1.5-35b-moe` | 4 parallel slots, 262,144 context tokens per slot |
|
|
365
|
+
|
|
366
|
+
The corresponding saved role selection is:
|
|
360
367
|
|
|
361
368
|
```yaml
|
|
362
|
-
|
|
363
|
-
target:
|
|
364
|
-
model:
|
|
365
|
-
|
|
369
|
+
chat:
|
|
370
|
+
target: dynamo
|
|
371
|
+
model: qwen3.8-27b-dynamo
|
|
372
|
+
context:
|
|
373
|
+
memory:
|
|
374
|
+
target: mini
|
|
375
|
+
model: ornith1.5-35b-moe
|
|
366
376
|
```
|
|
367
377
|
|
|
368
|
-
A
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
378
|
+
A smaller, efficient model is the intended shape for this role. The current
|
|
379
|
+
reference uses a separate multi-slot endpoint so memory does not compete with
|
|
380
|
+
the LM Studio chat stream. Capability is not the only constraint; latency and
|
|
381
|
+
endpoint contention still matter, and the detached step above bounds their
|
|
382
|
+
effect on the operator's turn.
|
|
373
383
|
|
|
374
384
|
The deadline is a bound on what an optional call may hold that server for, not a
|
|
375
|
-
figure sized to capture the tail. The shipped
|
|
376
|
-
|
|
385
|
+
figure sized to capture the tail. The shipped `60000` is a bounded compromise,
|
|
386
|
+
and a step that exceeds it records `timeout` with
|
|
377
387
|
its work discarded. A route whose steps mostly record `timeout` is a
|
|
378
388
|
misconfigured deadline before it is a slow model, so read the ledger before
|
|
379
389
|
raising it: `/memory` shows the hit rate the raise would be buying.
|
|
@@ -384,17 +394,19 @@ real target surfaces to verify the route:
|
|
|
384
394
|
|
|
385
395
|
```bash
|
|
386
396
|
clio-coder targets --probe
|
|
387
|
-
clio-coder models --target
|
|
397
|
+
clio-coder models --target mini
|
|
398
|
+
clio-coder models --target dynamo
|
|
388
399
|
clio-coder
|
|
389
400
|
```
|
|
390
401
|
|
|
391
|
-
Then inspect `/targets`, `/settings`, and `/memory`. Local co-residency still
|
|
402
|
+
Then inspect `/settings targets`, `/settings`, and `/memory`. Local co-residency still
|
|
392
403
|
matters: the background model, action model, their KV caches, and parallel slots
|
|
393
|
-
must fit the target's available memory. Increase `timeoutMs` for
|
|
394
|
-
slow local route; lowering `
|
|
395
|
-
|
|
404
|
+
must fit the target's available memory. Increase `context.memory.timeoutMs` for
|
|
405
|
+
a deliberately slow local route; lowering `context.memory.maxOutputTokens`
|
|
406
|
+
bounds the visible reminder and ordinary completion budget but does not change
|
|
407
|
+
the background model's strict output grammar.
|
|
396
408
|
|
|
397
|
-
For an immediate kill switch, set `memory.
|
|
409
|
+
For an immediate kill switch, set `context.memory.enabled` to `false` in
|
|
398
410
|
`/settings`. Removing the background target instead returns to rules-only
|
|
399
411
|
operation while leaving deterministic protection active.
|
|
400
412
|
|
|
@@ -533,15 +545,16 @@ trial. The report provides:
|
|
|
533
545
|
- total and baseline-relative added tokens and latency;
|
|
534
546
|
- an `alwaysNoisyRegression` verdict.
|
|
535
547
|
|
|
536
|
-
The
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
548
|
+
The source-level harness remains available to a runner adapter, and the eval
|
|
549
|
+
platform remains active. Its former dedicated contract test was retired, and
|
|
550
|
+
the current test tree has no direct reference to `runProactiveMemoryEval`.
|
|
551
|
+
There is therefore no maintained direct test coverage or standalone
|
|
552
|
+
`npm run test:file` invocation for this harness. Treat a live comparison as an
|
|
553
|
+
explicit measurement campaign.
|
|
541
554
|
|
|
542
555
|
For a live local comparison, an adapter should route only the `llm` variant
|
|
543
|
-
through the request's target/model (the reference is `
|
|
544
|
-
`
|
|
556
|
+
through the request's target/model (the reference memory route is `mini` /
|
|
557
|
+
`ornith1.5-35b-moe`), keep baseline memory telemetry empty, and run all
|
|
545
558
|
nine trials in equivalent isolated workspaces. Do not promote the LLM tier from
|
|
546
559
|
one anecdotal task. The evidence bar is a pass-rate gain from a small number of
|
|
547
560
|
specific, usually cited reminders at acceptable added token and latency cost.
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
# Resource Library
|
|
2
2
|
|
|
3
|
+
> **Visual blueprint:** The source checkout includes the complete
|
|
4
|
+
> [Resource Library visual reference](https://github.com/iowarp/clio-coder/blob/main/docs/html/resource_library_blueprint.html).
|
|
5
|
+
|
|
3
6
|
The resource library extends the existing local skills marketplace catalog to carry agent recipes, prompt templates, and fleet contracts. It does not change the Agent Skills format, discovery roots, trust gating, or existing skill installation sources.
|
|
4
7
|
|
|
5
8
|
## Catalog schema
|
|
@@ -21,11 +24,11 @@ skills:
|
|
|
21
24
|
|
|
22
25
|
## Private catalog and remote gating
|
|
23
26
|
|
|
24
|
-
`library.catalog` selects a private catalog and defaults to `<configDir>/library.yaml`. Relative sources in that file resolve beside the catalog. `library.remote` records an optional git remote URL. `library.sync` defaults to false, and no git process is started while it remains false.
|
|
27
|
+
`integrations.library.catalog` selects a private catalog and defaults to `<configDir>/library.yaml`. Relative sources in that file resolve beside the catalog. `integrations.library.remote` records an optional git remote URL. `integrations.library.sync` defaults to false, and no git process is started while it remains false.
|
|
25
28
|
|
|
26
|
-
The private catalog repository must name its git remote `library`. Clio checks it with `git remote get-url library`. Run `clio-coder library remote confirm <url>` once after reviewing the configured URL. When `library.remote` is unset, confirmation records the URL as both the configured and confirmed remote. A confirmation that differs from an existing `library.remote` refuses with `library_remote_mismatch`. A missing confirmation or a later settings change refuses synchronization and publishing with `library_remote_unconfirmed`.
|
|
29
|
+
The private catalog repository must name its git remote `library`. Clio checks it with `git remote get-url library`. Run `clio-coder library remote confirm <url>` once after reviewing the configured URL. When `integrations.library.remote` is unset, confirmation records the URL as both the configured and confirmed remote. A confirmation that differs from an existing `integrations.library.remote` refuses with `library_remote_mismatch`. A missing confirmation or a later settings change refuses synchronization and publishing with `library_remote_unconfirmed`.
|
|
27
30
|
|
|
28
|
-
When `library.sync` is false, both `library sync` and `library push` refuse with `library_sync_disabled` before any process starts. When synchronization is enabled, `library sync` runs `git fetch library` followed by `git merge --ff-only FETCH_HEAD`, and `library push` runs `git push library`. Both commands execute git as an argument vector without a shell.
|
|
31
|
+
When `integrations.library.sync` is false, both `library sync` and `library push` refuse with `library_sync_disabled` before any process starts. When synchronization is enabled, `library sync` runs `git fetch library` followed by `git merge --ff-only FETCH_HEAD`, and `library push` runs `git push library`. Both commands execute git as an argument vector without a shell.
|
|
29
32
|
|
|
30
33
|
## CLI
|
|
31
34
|
|
|
@@ -43,7 +46,13 @@ clio-coder library remote confirm <url>
|
|
|
43
46
|
|
|
44
47
|
## In the TUI
|
|
45
48
|
|
|
46
|
-
The Skills Hub carries one tab per kind. `/library <kind>` opens
|
|
49
|
+
The Skills Hub carries one tab per kind. `/resources library <kind>` opens the
|
|
50
|
+
requested tab, while `/skill` opens Skills. Each tab lists discovered entries
|
|
51
|
+
and any unresolved requirements. Installing from a row uses the same
|
|
52
|
+
plan-then-write path as `clio-coder library add`, behind a confirmation that
|
|
53
|
+
states every destination and hash and writes nothing when cancelled. `Enter`
|
|
54
|
+
on an installed row leads to its invocation surface. See
|
|
55
|
+
[Skills Marketplace](skills-marketplace.md) for the key table.
|
|
47
56
|
|
|
48
57
|
## Installation roots and validation
|
|
49
58
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Skills Marketplace
|
|
2
2
|
|
|
3
|
-
>
|
|
4
|
-
>
|
|
3
|
+
> **Visual blueprint:** The source checkout includes the complete
|
|
4
|
+
> [Skills Marketplace visual reference](https://github.com/iowarp/clio-coder/blob/main/docs/html/skills_blueprint.html).
|
|
5
5
|
|
|
6
6
|
The Skills Hub (`/skill`) shows project skills, user skills, and the marketplace. Every marketplace row comes from the same local lookup that `clio-coder skills install <name>` and `/skill <name>` resolve through, so the hub lists nothing it cannot install.
|
|
7
7
|
|
|
@@ -45,7 +45,11 @@ Invoking an uninstalled marketplace skill with `/skill <name>` prompts before in
|
|
|
45
45
|
|
|
46
46
|
## Tabs
|
|
47
47
|
|
|
48
|
-
The hub carries one tab per resource
|
|
48
|
+
The hub carries one tab per resource-library kind: Skills, Agents, Prompts, and
|
|
49
|
+
Fleets. `←` and `→` move between them. The frame title names the active tab and
|
|
50
|
+
the footer states its row count, so the numbers on screen always describe the
|
|
51
|
+
tab being read. `/skill` opens Skills; `/resources library <kind>` opens the
|
|
52
|
+
requested library tab.
|
|
49
53
|
|
|
50
54
|
The Skills tab is unchanged. The other three list the entries of their kind from `discoverLibrary()`, which is the same discovery `clio-coder library list --kind <kind>` reads, so the hub and the CLI never disagree about what exists. Each row carries the entry's origin and version, whether it is installed or available, the short form of its recorded pin hash, and, in the warning token, the names of any requirements it still needs. An entry the catalog refuses outright, because a requirement is missing, malformed, or cyclic, appears as a diagnostic row rather than being omitted.
|
|
51
55
|
|
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
# Tool Usage Reference
|
|
2
2
|
|
|
3
|
-
>
|
|
4
|
-
>
|
|
3
|
+
> **Visual blueprint:** The source checkout includes the complete
|
|
4
|
+
> [Tool Usage Reference visual reference](https://github.com/iowarp/clio-coder/blob/main/docs/html/tool_usage_blueprint.html).
|
|
5
5
|
|
|
6
6
|
This is the deep usage reference behind the deliberately terse tool descriptions in the prompt envelope. Toolkit v2 keeps rich guidance out of tool descriptions and puts it here, where `context(scope="docs", query=...)` retrieves it section by section. Each tool below has its own self-contained `##` section covering the argument surface, defaults, truncation and continuation behavior, and concrete calls. Source of truth is `src/tools/`.
|
|
7
7
|
|
|
8
|
-
In
|
|
8
|
+
In the current source tree, `src/tools/agent-tools.ts` serves as the single agent-tool adapter across both orchestrator and worker runtimes. Both surfaces resolve their executable tools through the exact same `effectiveToolNames` narrowing, ensuring that attested tool schemas never drift from the tools available at runtime. Tools are keyed strictly by the `ToolName` union with no alias table. Argument leniency for weak-model callers is provided exclusively by per-tool `prepareArguments` normalizers declared on `ToolSpec`.
|
|
9
9
|
|
|
10
10
|
## Observation envelope: truncation notices, offload, next hints, and the turn budget
|
|
11
11
|
|
|
12
|
-
The six OBSERVE tools (read, grep, find, ls, code_nav,
|
|
12
|
+
The six envelope-backed OBSERVE tools (read, grep, find, ls, code_nav,
|
|
13
|
+
context) share one result envelope, implemented in `src/tools/observation.ts`.
|
|
14
|
+
The OBSERVE policy plane also contains `credential_present`, whose deliberately
|
|
15
|
+
minimal result does not use that envelope.
|
|
13
16
|
|
|
14
|
-
Per-call byte caps: read 50KB (
|
|
17
|
+
Per-call byte caps: read 50KB (`safety.limits.readBytesPerCall`), grep 16KB for mode=content and 8KB for mode=files/count, find 8KB, ls 8KB, code_nav 16KB, context 16KB for scope=docs and 50KB for scope=skills/workspace.
|
|
15
18
|
|
|
16
19
|
Truncated text results append exactly one notice line:
|
|
17
20
|
|
|
@@ -25,7 +28,7 @@ Offload: when the byte cap cut content that was already collected, the complete
|
|
|
25
28
|
|
|
26
29
|
JSON-format results (code_nav, context scope=docs/workspace) never get an appended notice. An oversize JSON payload is replaced whole by the parseable stub `{"error":"result exceeded <cap>","offloadPath":"...","next":"..."}` so the model never receives JSON cut mid-document. Empty results are also valid JSON with empty arrays and `next` populated.
|
|
27
30
|
|
|
28
|
-
Turn budget: all six OBSERVE tools draw from one shared pool of 192KB per turn (
|
|
31
|
+
Turn budget: all six OBSERVE tools draw from one shared pool of 192KB per turn (`safety.limits.observationBytesPerTurn`, keyed on `sessionId:turnId`). When the remaining pool shrinks a call below its self cap, a note is appended naming the bytes already used. When the pool is exhausted, the call short-circuits with `[observation budget exhausted for this turn before <tool> ...]` instead of paying for a search whose output cannot be returned. Use narrower arguments or continue in a follow-up turn.
|
|
29
32
|
|
|
30
33
|
## read: page through a file with offset, limit, and tail
|
|
31
34
|
|
|
@@ -38,7 +41,7 @@ Arguments:
|
|
|
38
41
|
- `limit` (optional). Max lines to return.
|
|
39
42
|
- `tail` (optional). Return the last N lines (jump to EOF). Overrides offset/limit.
|
|
40
43
|
|
|
41
|
-
Each call is capped at 2000 lines or
|
|
44
|
+
Each call is capped at 2000 lines or `safety.limits.readBytesPerCall`, whichever hits first; the per-turn observation budget can shrink it further. Files larger than 20MB error outright; use grep/find to locate the relevant region instead. A missing file errors with a hint to locate it via code_nav, find, or ls.
|
|
42
45
|
|
|
43
46
|
Continuation: a truncated result's notice carries `next: offset=<first unshown line>`. read does not offload; the file itself is the continuation source. If a single line exceeds the byte cap, the result is that line's UTF-8 prefix plus an explanatory note suggesting grep with a narrower pattern or edit with exact surrounding text. An `offset` beyond EOF errors with the file's total line count.
|
|
44
47
|
|
|
@@ -234,26 +237,25 @@ Dispatches one or more tasks to Clio fleet agents and returns per-run receipt su
|
|
|
234
237
|
Arguments:
|
|
235
238
|
|
|
236
239
|
- `task` (required for the singular form unless `list:true`). One worker assignment/instruction string. It is distinct from briefing.
|
|
237
|
-
- `tasks` (required for the batch form unless `list:true`). Array of task strings or `{task, agent, target, model,
|
|
240
|
+
- `tasks` (required for the batch form unless `list:true`). Array of task strings or `{task, agent, target, model, node, briefing, intent, gate, budget, worktree}` objects. Per-item fields override the top-level defaults below; `persona`, `tool_profile`, `cwd`, and `apply` come from the batch defaults (an item that carries one is still honored, but the schema no longer advertises them per item). The `intent` and `budget` schemas are serialized once under `$defs` and referenced from the top level and from each item. Supplying both `task` and `tasks` is an error.
|
|
238
241
|
- `mode` (optional). `parallel` (default) runs items concurrently; `sequential` runs them one at a time, each completing before the next dispatches. `pipeline`, `compete`, and `council` select their named topologies. A single ordinary task always runs down the sequential path.
|
|
239
|
-
- `roster` (council only). Names one `
|
|
242
|
+
- `roster` (council only). Names one `fleet.rosters` entry. Supply exactly one of `roster` or `members`.
|
|
240
243
|
- `members` (council only). Supplies two to five inline `{label,target,model?,thinking?}` entries.
|
|
241
244
|
- `synthesis` (council only). Accepts `none`, `judge`, or `vote`; the default is `none`.
|
|
242
245
|
- `rounds` (council only). Accepts an integer from 1 through 3; the default is 1.
|
|
243
246
|
- `judge` (council only with judge synthesis, or compete). Accepts optional `agent`, `model`, `target`, and `node` route fields.
|
|
244
247
|
- `detach` (optional boolean). For parallel fan-out, returns the durable batch id and assignment ids after registration while the shared event consumer continues in the background. An assignment id equals its first attempt's run id. This is the parent model's route to mid-run monitor/steer; ordinary synchronous, sequential, and pipeline calls auto-wait for each assignment's terminal attempt.
|
|
245
248
|
- `list` (optional boolean). Returns the agent catalog instead of dispatching.
|
|
246
|
-
- `agent` (optional). Default agent recipe for items that do not name one; default `coder`. `agent_id` is
|
|
249
|
+
- `agent` (optional). Default agent recipe for items that do not name one; default `coder`. The retired `agent_id` spelling is rejected with a message to use `agent`.
|
|
247
250
|
- `target` (optional). Default configured target id.
|
|
248
251
|
- `model` (optional). Default model override.
|
|
249
252
|
- `node` (optional). Default fleet-node pin.
|
|
250
|
-
- `
|
|
251
|
-
- `allowed_candidates` (optional). Ordered exact `{agent, target, model, node}` tuples. Valid only with `failover:"approved"`; retries cannot escape this envelope.
|
|
253
|
+
- `routing` (optional). Hard route bounds include `maxCostUsd`, `deadlineMs`, and `requiredCapabilities`. When adaptive routing is configured, the schema also exposes `posture`, `minimumQuality`, `locality`, and `failover` (`none|approved`). Exact `target`, `model`, or `node` pins require manual posture and imply no failover. Top-level `failover`, `allowed_candidates`, and `allowedCandidates` are rejected; model-authored candidate envelopes are not accepted. Approved fallback candidates come from the admitted fleet route plan.
|
|
252
254
|
- `thinking_level` (optional). One of `off|minimal|low|medium|high|xhigh|max`, applied to all items.
|
|
253
255
|
- `cwd` (optional). Default agent working directory.
|
|
254
256
|
- `timeout_ms` (optional). Aborts the whole dispatch; in sequential mode remaining tasks are skipped and the skip is reported.
|
|
255
257
|
- `briefing` (optional string, top-level default or per-task override). Parent-composed context/data, not worker instructions: it cannot replace `task`. It is trimmed and omitted when blank, rejected above 12,000 UTF-8 bytes, sent as its own delimited untrusted dynamic message, and retained only as byte/hash provenance. The shared value applies to string tasks and object tasks without an override; an object-level briefing wins.
|
|
256
|
-
- `intent` (object, top-level default or per-task override, and the default way to dispatch). Declares `read_roots`, `write_roots`, `relevant_paths`, `expected_outputs`, and `verification`. Path arrays contain normalized repository-relative POSIX paths. Verification entries contain a declared `check` id and optional `timeout_ms`; ids are resolved from package scripts and `.clio-coder/verifiers.yaml` before approval. Checks are ids, not shell commands. Declared paths select the project rules that apply to them and pin worker context; omitting `intent` falls back to reading path-like tokens out of the task and briefing, which can miss an applicable rule. In a batch, per-task `intent` shallow-merges over the top-level object and is then checked against it as a ceiling: a task may narrow the shared scope and is refused with `intent_scope_widening` if it reaches outside. Declaring `write_roots` that disagree with a legacy `writeRoots`, an `expected_outputs` entry outside every declared write root, or an `intent.version` other than 2 are each terminal refusals carrying a stable reason code. See [dispatch-typed-intent.md](dispatch-typed-intent.md).
|
|
258
|
+
- `intent` (object, top-level default or per-task override, and the default way to dispatch). Declares `read_roots`, `write_roots`, `relevant_paths`, `expected_outputs`, and `verification`. Path arrays contain normalized repository-relative POSIX paths. Verification entries contain a declared `check` id and optional `timeout_ms`; ids are resolved from package scripts and `.clio-coder/verifiers.yaml` before approval. Checks are ids, not shell commands. Declared paths select the project rules that apply to them and pin worker context; omitting `intent` falls back to reading path-like tokens out of the task and briefing, which can miss an applicable rule. In a batch, per-task `intent` shallow-merges over the top-level object and is then checked against it as a ceiling: a task may narrow the shared scope and is refused with `intent_scope_widening` if it reaches outside. Declaring `write_roots` that disagree with a legacy `writeRoots`, an `expected_outputs` entry outside every declared write root, or an `intent.version` other than 2 are each terminal refusals carrying a stable reason code. See [dispatch-typed-intent.md](../architecture/dispatch-typed-intent.md).
|
|
257
259
|
- `gate` (optional string, top-level default or per-task override). Exact shorthand for `intent.verification=[{check: gate}]`. Supplying it together with `intent.verification` is refused.
|
|
258
260
|
- `max_output_bytes` (optional). Summary byte budget; default 20000, split across runs with at least 1024 bytes each.
|
|
259
261
|
|
|
@@ -261,7 +263,7 @@ Argument tolerance: `tasks` sent as a JSON string is parsed and a single object
|
|
|
261
263
|
|
|
262
264
|
Output is one batch-shaped summary even for a single task: a header `dispatch (<mode>) total=N failed=M`, the assignment id list, then one terminal-attempt receipt line per assignment (run id, agent, exit code, target, model, tokens, receipt path, verification state, failure message if any) followed by the worker's final assistant text. `details = {mode, assignmentIds, receiptCount, failedCount, runs[]}`, and each `runs[]` entry carries distinct `assignmentId` and terminal `runId` fields plus the structured `verification` state and `receiptIntegrity` result. There is no `runIds` compatibility alias. Any terminal attempt with a nonzero exit turns the whole result into an error carrying the same summary. A run that succeeded without a single successful tool call carries a `note=` marker; do not treat such a run as validated work.
|
|
263
265
|
|
|
264
|
-
The summary separates five things that must never be conflated: `receipt_integrity=verified/
|
|
266
|
+
The summary separates five things that must never be conflated: `receipt_integrity=verified/v20/sha256` comes only from verification against the ledger; `host_verification=<status>` describes orchestrator-executed declared checks; `evidence_verification=<state>/<basis>` describes worker-tool validation evidence; `briefing=bytes:<n> sha256:<hash>` authenticates parent-supplied data; and `project_context=...` authenticates the independently rendered bounded project message. A pre-v20 receipt is retired and cannot count as evidence. A tampered v20 receipt renders a head-anchored `RECEIPT INTEGRITY FAILED` banner. A read-only Scout can have verified integrity with `not_applicable/read-only-agent` evidence. Missing briefing is `briefing=none`, never a project-context hash.
|
|
265
267
|
|
|
266
268
|
Exit zero is insufficient without a durable deliverable. A successful native or ACP run must seal a nonempty `output.state="final"`. Otherwise it fails with `worker_final_output_missing`; any unfinished text remains partial diagnostics and automatic retry is suppressed. Live tool-use preambles never replace a missing receipt answer.
|
|
267
269
|
|
|
@@ -269,16 +271,16 @@ Sealed receipts are the durable evidence; worker prose remains advisory until ve
|
|
|
269
271
|
|
|
270
272
|
```text
|
|
271
273
|
dispatch(list=true)
|
|
272
|
-
dispatch(agent="debugger", task="Adversarially verify the strict
|
|
274
|
+
dispatch(agent="debugger", task="Adversarially verify the strict v20 receipt boundary", briefing="Prior receipt R1 cited receipt-integrity.ts and left these claims unresolved", intent={read_roots: ["src/domains/dispatch/"]}, detach=true)
|
|
273
275
|
dispatch(tasks=[
|
|
274
|
-
{task: "Run the contract tests in tests/contracts/dispatch.test.ts and report each failure with its assertion",
|
|
276
|
+
{task: "Run the contract tests in tests/contracts/dispatch-lifecycle.test.ts and report each failure with its assertion",
|
|
275
277
|
intent: {read_roots: ["tests/contracts/", "src/domains/dispatch/"], verification: [{check: "test"}]}}
|
|
276
278
|
])
|
|
277
279
|
dispatch(tasks=[
|
|
278
280
|
{agent: "researcher", task: "Map every caller of finalizeObservation and summarize the envelope shapes",
|
|
279
281
|
intent: {read_roots: ["src/domains/"]}},
|
|
280
|
-
{agent: "coder", task: "Fix the failing assertion in tests/contracts/safety.test.ts",
|
|
281
|
-
intent: {write_roots: ["tests/contracts/"], expected_outputs: ["tests/contracts/safety.test.ts"], verification: [{check: "test"}]}}
|
|
282
|
+
{agent: "coder", task: "Fix the failing assertion in tests/contracts/safety-gates.test.ts",
|
|
283
|
+
intent: {write_roots: ["tests/contracts/"], expected_outputs: ["tests/contracts/safety-gates.test.ts"], verification: [{check: "test"}]}}
|
|
282
284
|
], mode="parallel")
|
|
283
285
|
dispatch(
|
|
284
286
|
intent={read_roots: ["src/"], write_roots: ["src/domains/"]},
|
|
@@ -369,7 +371,7 @@ Prefer verify over bash for the verification family and project catalog: the typ
|
|
|
369
371
|
```text
|
|
370
372
|
verify()
|
|
371
373
|
verify(check="typecheck")
|
|
372
|
-
verify(check="test", args=["tests/contracts/dispatch.test.ts"])
|
|
374
|
+
verify(check="test", args=["tests/contracts/dispatch-lifecycle.test.ts"])
|
|
373
375
|
verify(check="rust-workspace")
|
|
374
376
|
verify(check="frontend", path="site/index.html", browser="off")
|
|
375
377
|
```
|
|
@@ -414,7 +416,10 @@ Arguments:
|
|
|
414
416
|
|
|
415
417
|
`scope="workspace"` returns the session's git/project snapshot as JSON, probing and caching it on first call. When model-visible skills are installed, the payload carries a one-line `skills` pointer (count plus the suggest protocol) so orientation surfaces the catalog; the pointer never includes catalog entries and never changes the load gate. It requires a bound session; worker registries without one get a clean error. 50KB cap.
|
|
416
418
|
|
|
417
|
-
`scope="docs"` runs deterministic, offline retrieval over Clio's
|
|
419
|
+
`scope="docs"` runs deterministic, offline retrieval over Clio's recursively
|
|
420
|
+
bundled Markdown tree under `docs/` plus README.md, CHANGELOG.md, and
|
|
421
|
+
CLIO-CODER.md, indexed as heading-delimited sections with light stemming, Clio
|
|
422
|
+
vocabulary aliases, phrase boosts, and BM25-style body scoring. The JSON payload carries `corpus`, the expanded `terms`, and ranked `results` with `file`, `heading`, `breadcrumb`, `anchor`, `lines`, `snippet`, `score`, `coverage`, `matchedTerms`, and `signals`, plus an `omitted` count. Follow the `followUp` guidance: read the cited file and line range when you need the full section. Empty results are still valid JSON with `next` populated (the closest vocabulary expansion, or `query=overview`). 16KB cap; an oversize payload is replaced by the parseable JSON stub. The old `docs_search` `file` filter was dropped in the consolidation. Omitting `query` returns the corpus listing (the file set plus doc and section counts, the same `corpus` shape a search carries) so the model can pick a term without wasting a round on a `requires query` error.
|
|
418
423
|
|
|
419
424
|
`scope="skills"` with no `name` lists installed skills with descriptions; the listing asks the model to match the current task against the catalog and, on a fit, to open its reply with `Suggested skill: /skill <name>` (a comma-separated sequence when skills compose) and wait for the operator. Loading a body is policy-gated: a skill loads only after an explicit `/skill <name> [task]` operator request, including one picked from the Skills Hub, and recipe-bound workers may load only their declared skills. A load attempt without a pending request is denied with the model's compliant next move spelled out: do not retry, open the reply with the `Suggested skill: /skill <name>` line and wait for the operator, or continue without skills. On the first substantive turn of a session with model-visible skills installed, a once-per-session middleware reminder in the user message teaches the same protocol. A pending request's task text is surfaced with the body. Marketplace-installed skills are drift-checked against their pinned hash; a mismatch annotates the result with a `skill_drift` warning but never blocks. 50KB cap; a truncated body offloads in full.
|
|
420
425
|
|
|
@@ -558,11 +563,70 @@ Dispatched runs link to the live board through the ledger's `activeRunIds` field
|
|
|
558
563
|
```text
|
|
559
564
|
tasks(action="plan", title="Fix the flaky scheduler test", tasks=["reproduce the failure", "isolate the race", "fix and verify"])
|
|
560
565
|
tasks(action="start", id="t1")
|
|
561
|
-
tasks(action="done", id="t1", note="reproduced 3/3 with CLIO_CODER_SEED=7; failure in tests/contracts/
|
|
566
|
+
tasks(action="done", id="t1", note="reproduced 3/3 with CLIO_CODER_SEED=7; failure in tests/contracts/dispatch-admission.test.ts:88")
|
|
562
567
|
tasks(action="block", id="t2", note="needs operator decision on the retry policy")
|
|
563
568
|
tasks(action="list")
|
|
564
569
|
```
|
|
565
570
|
|
|
571
|
+
## ledger: coordinate peer workers through typed entries
|
|
572
|
+
|
|
573
|
+
Reads or posts to the agent ledger shared by concurrent workers in one
|
|
574
|
+
dispatch. Source: `src/tools/ledger.ts`. Read class; sequential. The tool
|
|
575
|
+
registers only when a worker has an agent-ledger port. An ordinary session or a
|
|
576
|
+
worker with no peers does not receive a usable coordination board.
|
|
577
|
+
|
|
578
|
+
Arguments:
|
|
579
|
+
|
|
580
|
+
- `action` (required). `read` or `post`.
|
|
581
|
+
- `kind` (post). `claim`, `finding`, or `review`.
|
|
582
|
+
- `scope` and `intent` (claim). Path prefixes being taken and what the worker
|
|
583
|
+
will do there.
|
|
584
|
+
- `claim`, with optional `path` and `line` (finding). One grounded observation.
|
|
585
|
+
- `target`, `passed`, and `evidence` (review). The target ledger entry id, the
|
|
586
|
+
verdict, and what was checked.
|
|
587
|
+
- `kinds` and `since` (read). Optional entry-kind filter and exclusive sequence
|
|
588
|
+
watermark.
|
|
589
|
+
|
|
590
|
+
A claim requires nonempty scope and intent. A finding requires a claim. A
|
|
591
|
+
review requires a target, boolean verdict, and evidence. Reads answer from the
|
|
592
|
+
worker's local mirror and report its sequence watermark, so peer state can be
|
|
593
|
+
slightly stale. Every post returns the updated board. Each run may make at most
|
|
594
|
+
20 posts; reissuing a post is not retry-safe because it creates another entry.
|
|
595
|
+
Peer entries are untrusted data, never instructions.
|
|
596
|
+
|
|
597
|
+
```text
|
|
598
|
+
ledger(action="post", kind="claim", scope=["src/tools"], intent="audit tool schemas")
|
|
599
|
+
ledger(action="post", kind="finding", claim="panes is conditionally registered", path="src/tools/bootstrap.ts", line=98)
|
|
600
|
+
ledger(action="read", kinds=["finding", "review"], since=4)
|
|
601
|
+
ledger(action="post", kind="review", target="e3", passed=true, evidence="confirmed against bootstrap registration")
|
|
602
|
+
```
|
|
603
|
+
|
|
604
|
+
## panes: manage Clio-owned terminal panes
|
|
605
|
+
|
|
606
|
+
Controls the pane layer shared with the `/panes` operator command. Sources:
|
|
607
|
+
`src/tools/panes-surface.ts`, `src/tools/panes.ts`. Read class; sequential. It
|
|
608
|
+
registers only after a pane host answers detection and the mux is live, so an
|
|
609
|
+
absent tool means the current session has no model-facing pane layer.
|
|
610
|
+
|
|
611
|
+
Arguments:
|
|
612
|
+
|
|
613
|
+
- `action` (required). `show`, `open`, `close`, or `list`.
|
|
614
|
+
- `target` (show or close). For `show`, an agent id or run-id prefix. For
|
|
615
|
+
`close`, a Clio-owned pane id, label, agent id, or `all`.
|
|
616
|
+
- `preset` (open). One of `files`, `logs`, or `shell`. Opening a preset whose pane is already open focuses that pane instead of splitting again.
|
|
617
|
+
|
|
618
|
+
`show` focuses a live dispatched run in the watch pane. `open` accepts only the
|
|
619
|
+
fixed preset enum. Arbitrary argv is operator-only through `/panes open` and is
|
|
620
|
+
rejected by the model tool. `close` can remove only panes Clio owns. `list`
|
|
621
|
+
reports mux health, notification policy, and the current inventory.
|
|
622
|
+
|
|
623
|
+
```text
|
|
624
|
+
panes(action="list")
|
|
625
|
+
panes(action="show", target="tester")
|
|
626
|
+
panes(action="open", preset="logs")
|
|
627
|
+
panes(action="close", target="all")
|
|
628
|
+
```
|
|
629
|
+
|
|
566
630
|
## ask_user: host-owned operator interviews
|
|
567
631
|
|
|
568
632
|
Runs a host-owned interactive interview or single-question prompt with the operator, recording decisions and/or free-form answers. Source: `src/tools/ask-user.ts`. Read class; sequential.
|
|
@@ -579,7 +643,7 @@ Arguments:
|
|
|
579
643
|
- `decisions` (optional array). For `action="complete"`, key-value objects representing settled configurations.
|
|
580
644
|
- `summary` (optional). Closeout explanation for `action="complete"`.
|
|
581
645
|
- `max_rounds` (optional number). Round limit for this interview (default 6, max 24).
|
|
582
|
-
- `exposure` (optional). `local` (default) or `outward`. `outward` marks a gate whose answer publishes or sends something outside the workspace (filing an issue or PR, posting a comment, pushing, releasing). At autonomy `auto-edit` an outward gate parks for the operator instead of being answered automatically; `full-auto` answers it. See [safety-model.md](safety-model.md).
|
|
646
|
+
- `exposure` (optional). `local` (default) or `outward`. `outward` marks a gate whose answer publishes or sends something outside the workspace (filing an issue or PR, posting a comment, pushing, releasing). At autonomy `auto-edit` an outward gate parks for the operator instead of being answered automatically; `full-auto` answers it. See [safety-model.md](../architecture/safety-model.md).
|
|
583
647
|
|
|
584
648
|
The tool manages a stateful operator interview. The UI presents choices (with an implicit "Other" option for custom text input). Once completed, the final decisions are persisted as standard configurations in the session ledger, allowing the agent to proceed with operators' inputs or defaults.
|
|
585
649
|
|
|
@@ -601,7 +665,7 @@ Arguments:
|
|
|
601
665
|
- `title` (optional). Document title.
|
|
602
666
|
- `path` (optional). Override the default path under `.clio-coder/artifacts/`.
|
|
603
667
|
|
|
604
|
-
`kind=plan|review|report` writes a Markdown document to `.clio-coder/artifacts/PLAN.md`, `REVIEW.md`, or `REPORT.md` by default, so a turn nobody asked a file from never litters the working tree; `path` may override the destination but must stay inside the workspace. See [artifact-placement.md](artifact-placement.md) for the full contract. When `content` does not already start with `#`, a non-empty `title` is prepended as an H1. These kinds are TERMINAL: writing the artifact completes the turn and the harness skips the follow-up model call, so the artifact body itself is the answer. Put everything the reader needs in `content`; there is no closing message after the write.
|
|
668
|
+
`kind=plan|review|report` writes a Markdown document to `.clio-coder/artifacts/PLAN.md`, `REVIEW.md`, or `REPORT.md` by default, so a turn nobody asked a file from never litters the working tree; `path` may override the destination but must stay inside the workspace. See [artifact-placement.md](../architecture/artifact-placement.md) for the full contract. When `content` does not already start with `#`, a non-empty `title` is prepended as an H1. These kinds are TERMINAL: writing the artifact completes the turn and the harness skips the follow-up model call, so the artifact body itself is the answer. Put everything the reader needs in `content`; there is no closing message after the write.
|
|
605
669
|
|
|
606
670
|
Skills are not artifacts. A skill is a `SKILL.md` folder written with the ordinary write tool into `.clio-coder/skills/<name>/` (or the user skill store) and validated by the skills loader; the `skill-craft` shipped skill documents the format and craft rules.
|
|
607
671
|
|