@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,17 +1,17 @@
|
|
|
1
1
|
# Provider Adapter Cookbook
|
|
2
2
|
|
|
3
|
-
>
|
|
4
|
-
>
|
|
3
|
+
> **Visual blueprint:** The source checkout includes the complete
|
|
4
|
+
> [Provider Adapter Cookbook visual reference](https://github.com/iowarp/clio-coder/blob/main/docs/html/provider_adapter_blueprint.html).
|
|
5
5
|
|
|
6
6
|
This cookbook guides developers through implementing custom model runtimes and inference server integrations within Clio Coder. It explains the runtime descriptor interfaces, probing protocols, model synthesis, and how to configure reasoning and thinking behaviors.
|
|
7
7
|
|
|
8
8
|
Source of truth:
|
|
9
|
-
- Runtime descriptor types: [src/domains/providers/types/runtime-descriptor.ts](
|
|
10
|
-
- Registry loader: [src/domains/providers/registry.ts](
|
|
11
|
-
- Probe reasoning helpers: [src/domains/providers/probe/reasoning.ts](
|
|
12
|
-
- Model capabilities resolver: [src/domains/providers/model-capabilities.ts](
|
|
13
|
-
- Inference capability flags: [src/domains/providers/types/capability-flags.ts](
|
|
14
|
-
- Model target resolution: [src/domains/providers/runtime-resolution.ts](
|
|
9
|
+
- Runtime descriptor types: [src/domains/providers/types/runtime-descriptor.ts](../../src/domains/providers/types/runtime-descriptor.ts)
|
|
10
|
+
- Registry loader: [src/domains/providers/registry.ts](../../src/domains/providers/registry.ts)
|
|
11
|
+
- Probe reasoning helpers: [src/domains/providers/probe/reasoning.ts](../../src/domains/providers/probe/reasoning.ts)
|
|
12
|
+
- Model capabilities resolver: [src/domains/providers/model-capabilities.ts](../../src/domains/providers/model-capabilities.ts)
|
|
13
|
+
- Inference capability flags: [src/domains/providers/types/capability-flags.ts](../../src/domains/providers/types/capability-flags.ts)
|
|
14
|
+
- Model target resolution: [src/domains/providers/runtime-resolution.ts](../../src/domains/providers/runtime-resolution.ts)
|
|
15
15
|
|
|
16
16
|
---
|
|
17
17
|
|
|
@@ -72,12 +72,13 @@ export const myCustomRuntime: RuntimeDescriptor = {
|
|
|
72
72
|
|
|
73
73
|
## 2. Probing Mechanisms
|
|
74
74
|
|
|
75
|
-
Probes discover the current state of a target inference server when Clio starts
|
|
75
|
+
Probes discover the current state of a target inference server when Clio starts
|
|
76
|
+
or when `/settings targets` or `/model` is refreshed.
|
|
76
77
|
|
|
77
78
|
### 2.1 Endpoint Probing (`probe`)
|
|
78
79
|
The `probe` method validates endpoint reachability and collects loaded models:
|
|
79
80
|
|
|
80
|
-
* **Inputs:** `TargetDescriptor` (which holds target `url`, optional `
|
|
81
|
+
* **Inputs:** `TargetDescriptor` (which holds target `url`, optional `auth` metadata, and connection metadata) and `ProbeContext` (which provides timeout signals, credential-presence keys, and an optional resolved `authToken`). Request paths that resolve OAuth through `providers.auth.resolveForTarget` must pass `{ signal }`; Pi 0.84's `AuthOperationOptions` keeps cancellation attached while Clio waits for or mutates its credential store.
|
|
81
82
|
* **Return Value:** A `ProbeResult` indicating:
|
|
82
83
|
* `ok`: True if reachable.
|
|
83
84
|
* `serverVersion`: String identifier of the backend (e.g. `"Ollama/0.1.48"`).
|
|
@@ -87,7 +88,10 @@ The `probe` method validates endpoint reachability and collects loaded models:
|
|
|
87
88
|
### 2.2 Reasoning Probing (`probeReasoning`)
|
|
88
89
|
For local endpoints where models are loaded dynamically, the runtime can supply a `probeReasoning` method. It sends a short mock completion request to inspect whether the model outputs reasoning/thinking tags (such as `reasoning_content` in OpenAI completions or `<think>` tags in raw text streams).
|
|
89
90
|
|
|
90
|
-
Clio caches this result
|
|
91
|
+
Clio caches this result in the providers domain by exact target and model id for
|
|
92
|
+
the current process. Provider reinitialization, configuration reload, and target
|
|
93
|
+
disconnect paths clear the relevant cache rather than persisting it in a
|
|
94
|
+
session ledger.
|
|
91
95
|
|
|
92
96
|
### 2.3 Exact-ID Capability Selection (`probeCapabilitiesForModel`)
|
|
93
97
|
`probeCapabilitiesForModel` is the one exact-id selector during capability resolution. When a router target serves several models, `probeCapabilitiesForModel` matches `probeModelCapabilities` keyed strictly to the requested wire model ID. A router serving multiple models thus answers only from the `/v1/models` row keyed to its own wire model, preventing capability flags or token limits from bleeding across different models on the same target.
|
|
@@ -124,14 +128,14 @@ The `synthesizeModel` method acts as the factory that creates the `pi-ai` compat
|
|
|
124
128
|
): Model<Api>
|
|
125
129
|
```
|
|
126
130
|
* **Tasks:**
|
|
127
|
-
1.
|
|
128
|
-
2.
|
|
129
|
-
3.
|
|
131
|
+
1. Combine target, catalog, probe, and capability metadata into a `pi-ai` model descriptor.
|
|
132
|
+
2. Select the API family, endpoint, pricing, token limits, and Clio runtime metadata required by the streaming adapter.
|
|
133
|
+
3. Leave secrets and request-time authentication to `providers.auth.resolveForTarget` at the call site. Optional FIM support belongs to the descriptor's separate `infill` method rather than to prompt binding in `synthesizeModel`.
|
|
130
134
|
|
|
131
135
|
|
|
132
136
|
### 3.1 Stream Filters and Sentinel Stripping
|
|
133
137
|
|
|
134
|
-
When a model family requires response parsing or sentinel stripping before the payload reaches the core logic, Clio applies runtime-agnostic stream filters
|
|
138
|
+
When a model family requires response parsing or sentinel stripping before the payload reaches the core logic, Clio applies runtime-agnostic stream filters in the engine stream adapter after model synthesis. For example, if the resolved model family is `gemma-4`, a dedicated `createGemmaChannelFilter` intercepts and reclassifies `<|channel>thought` markers directly from the `text_delta` stream into `thinking_delta` events, dropping orphan channel closers and own-thought labels seamlessly.
|
|
135
139
|
|
|
136
140
|
### 3.2 OpenAI-compatible sampling and vLLM budgets
|
|
137
141
|
|
|
@@ -160,8 +164,10 @@ level onto `thinking.type: "adaptive"` plus `output_config.effort` (read from th
|
|
|
160
164
|
`thinkingLevelMap` and `compat.forceAdaptiveThinking`) or onto a bounded `budget_tokens` for
|
|
161
165
|
budget-based models. Clio's `onPayload` hook no longer rewrites those fields; it only sets the
|
|
162
166
|
OpenAI Responses `reasoning.summary` verbosity, which the agent loop cannot express as an option.
|
|
163
|
-
`tests/contracts/thinking-
|
|
164
|
-
|
|
167
|
+
`tests/contracts/thinking-off-wire.test.ts` locks the local LM Studio and
|
|
168
|
+
llama.cpp controls used when thinking is off. Anthropic request assembly is
|
|
169
|
+
inherited from the pinned Pi dependency; Clio no longer carries a separate
|
|
170
|
+
contract test that reconstructs Pi's whole adaptive or budget payload.
|
|
165
171
|
|
|
166
172
|
|
|
167
173
|
---
|
|
@@ -172,11 +178,16 @@ Clio supports diverse thinking mechanisms. If your model family uses a custom fo
|
|
|
172
178
|
|
|
173
179
|
| Mechanism | Behavior |
|
|
174
180
|
| --- | --- |
|
|
175
|
-
| `none` |
|
|
176
|
-
| `
|
|
177
|
-
| `
|
|
178
|
-
| `
|
|
179
|
-
| `
|
|
181
|
+
| `none` | The family does not reason; the effective level is `off` and thinking controls are omitted. |
|
|
182
|
+
| `effort-levels` | Named levels map to provider effort values, such as LM Studio `reasoning_effort`. |
|
|
183
|
+
| `budget-tokens` | Named levels map to explicit reasoning-token budgets. |
|
|
184
|
+
| `on-off` | The runtime exposes a binary thinking switch rather than graduated effort. |
|
|
185
|
+
| `always-on` | The model cannot disable reasoning; Clio reports the effective level as forced and allows extra completion headroom where required. |
|
|
186
|
+
|
|
187
|
+
Wire formats such as `anthropic-extended`, `qwen-chat-template`, and
|
|
188
|
+
`deepseek-r1` live in capability metadata. Runtime API families such as
|
|
189
|
+
`openai-completions` and `ollama-native` are separate descriptor fields; neither
|
|
190
|
+
set is a valid value for `quirks.thinking.mechanism`.
|
|
180
191
|
|
|
181
192
|
---
|
|
182
193
|
|
|
@@ -185,7 +196,7 @@ Clio supports diverse thinking mechanisms. If your model family uses a custom fo
|
|
|
185
196
|
Once your runtime adapter descriptor is implemented:
|
|
186
197
|
|
|
187
198
|
### 5.1 Static Built-in Registration
|
|
188
|
-
Add your descriptor to the static array export in [src/domains/providers/runtimes/builtins.ts](
|
|
199
|
+
Add your descriptor to the static array export in [src/domains/providers/runtimes/builtins.ts](../../src/domains/providers/runtimes/builtins.ts):
|
|
189
200
|
```typescript
|
|
190
201
|
import { myCustomRuntime } from "./custom/my-custom-runtime.js";
|
|
191
202
|
|
|
@@ -198,4 +209,4 @@ export const BUILTIN_RUNTIMES = [
|
|
|
198
209
|
### 5.2 Dynamic Plugin Loading
|
|
199
210
|
Clio's `RuntimeRegistry` can load custom runtimes dynamically at startup:
|
|
200
211
|
* **Directories:** Place compiled Javascript descriptors (`.js`) inside `$CLIO_CODER_CONFIG_DIR/runtimes/` (defaulting to `~/.config/clio-coder/runtimes/`).
|
|
201
|
-
* **Package exports:** Publish an npm package that exports a `clioRuntimes` array containing your runtime descriptors, then list the package name under `runtimePlugins` in your configuration settings.
|
|
212
|
+
* **Package exports:** Publish an npm package that exports a `clioRuntimes` array containing your runtime descriptors, then list the package name under `integrations.runtimePlugins` in your configuration settings.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Clio Coder Safety Model
|
|
2
2
|
|
|
3
|
-
>
|
|
4
|
-
>
|
|
3
|
+
> **Visual blueprint:** The source checkout includes the complete
|
|
4
|
+
> [Clio Coder Safety Model visual reference](https://github.com/iowarp/clio-coder/blob/main/docs/html/safety_blueprint.html).
|
|
5
5
|
|
|
6
6
|
Clio Coder's safety posture is code-enforced, not prompt-only. As the orchestrator coding agent in the [IOWarp](https://iowarp.ai) ecosystem developed by the [Gnosis Research Center](https://grc.iit.edu) at Illinois Tech under NSF Award [#2411318](https://www.nsf.gov/awardsearch/showAward?AWD_ID=2411318), Clio gates execution by target capabilities, the tool registry, the safety policy engine, project policies, protected-artifact checks, and audit receipts.
|
|
7
7
|
|
|
@@ -11,9 +11,9 @@ Source of truth: `src/domains/safety/**`, `src/tools/registry.ts`, `src/tools/bo
|
|
|
11
11
|
|
|
12
12
|
## Two axes: autonomy and the safety net
|
|
13
13
|
|
|
14
|
-
The `autonomy` setting (`read-only` | `suggest` | `auto-edit` | `full-auto`) is an enforced dial. It controls exactly one thing: which action classes run immediately, which park for operator approval, and which are auto-denied. The safety net (damage-control rules, path policy, protected artifacts, loop guard, dispatch scope admission) is independent of the dial and identical at every level. When a `[safety-net]` notice appears at full-auto, that is the always-on net working as designed, not a contradiction of the level.
|
|
14
|
+
The `safety.autonomy` setting (`read-only` | `suggest` | `auto-edit` | `full-auto`) is an enforced dial. It controls exactly one thing: which action classes run immediately, which park for operator approval, and which are auto-denied. The safety net (damage-control rules, path policy, protected artifacts, loop guard, dispatch scope admission) is independent of the dial and identical at every level. When a `[safety-net]` notice appears at full-auto, that is the always-on net working as designed, not a contradiction of the level.
|
|
15
15
|
|
|
16
|
-
In
|
|
16
|
+
In the current source tree, effective autonomy resolution is strictly centralized in `src/entry/orchestrator.ts` through `resolveEffectiveAutonomy` and `resolveBaselineAutonomy`. Every admission surface (tool registry admission, dispatch plan provenance, and ACP session snapshots) delegates to this pair of functions so that fallback paths cannot diverge across execution contexts. `resolveBaselineAutonomy` evaluates dispatch settings overrides, headless CLI options, and configuration settings before applying the default `auto-edit` level. `resolveEffectiveAutonomy` combines any active ACP session autonomy level with the baseline resolution.
|
|
17
17
|
|
|
18
18
|
### Autonomy levels
|
|
19
19
|
|
|
@@ -38,7 +38,7 @@ The exposure tier is the one row keyed by the call rather than by its action cla
|
|
|
38
38
|
|
|
39
39
|
The `system_modify` confirm is level-invariant, so it is enforced and attributed as a safety-net confirm rail: the overlay, notices, and audit ledger name the net (reason code `system-modify-confirm`, policy source `builtin-classifier`), not the autonomy level. The matrix row above is unchanged in outcome at every level; only `read-only` converts the ask to a denial. `unknown` remains in the autonomy mapping because the registry substitutes a registered tool's base action class after the net evaluates.
|
|
40
40
|
|
|
41
|
-
The level is persisted as `autonomy` in `settings.yaml`, hot-reloads, and is edited in the `/settings` Autonomy & Safety section.
|
|
41
|
+
The level is persisted as `safety.autonomy` in `settings.yaml`, hot-reloads, and is edited in the `/settings` Autonomy & Safety section.
|
|
42
42
|
|
|
43
43
|
### Consequence tier is presentation, not authority
|
|
44
44
|
|
|
@@ -69,7 +69,7 @@ Every tool call, orchestrator or worker, evaluates in this order:
|
|
|
69
69
|
|
|
70
70
|
1. **Safety net** (policy engine + middleware guards): `block` is final at every level; `ask` is a confirm rail (damage-control `ask` rules, project `requireConfirmation`, `system_modify`) that parks at every level; `pass` hands off to step 2. Blocks precede asks: a damage-control `ask` rule never bypasses a hard block, so confirming an ask-rule command that targets a zero-access path still blocks. The built-in path protection (which includes zero-access blocklists for critical files like `.git/config` and `credentials.yaml`, resolved with symlink canonicalization to prevent bypasses) is evaluated even when `.clio-coder/safety.yaml` is malformed, invalid, or attempts to override it. A malformed project policy cannot disable built-in default path protection, so credential protection never fails open.
|
|
71
71
|
2. **Autonomy mapping**: the action class plus the level produce allow, ask, or deny per the matrix above.
|
|
72
|
-
3. **Approvals**: whatever asked in step 1 or 2 parks interactively, denies deterministically headless, resolves per `
|
|
72
|
+
3. **Approvals**: whatever asked in step 1 or 2 parks interactively, denies deterministically headless, resolves per `fleet.permissions.mode` in workers, and non-stall denies in delegations.
|
|
73
73
|
|
|
74
74
|
```mermaid
|
|
75
75
|
graph TD
|
|
@@ -88,15 +88,20 @@ Net `confirm` is never auto-allowed by autonomy, including full-auto. Net `block
|
|
|
88
88
|
|
|
89
89
|
### Worker permission escalation
|
|
90
90
|
|
|
91
|
-
Dispatched workers run non-interactively, so step 3 resolves per `
|
|
91
|
+
Dispatched workers run non-interactively, so step 3 resolves per `fleet.permissions.mode`: `deny` turns the parked call into a structured denial, `fail` ends the run, and `escalate` hands the ask up to the interactive operator. Under `escalate` the worker parks the call, emits a `clio_coder_permission_escalated` event, and waits; dispatch republishes the ask on the bus tagged with the run id; the operator resolves it in the same permission overlay used for the main agent; and the decision returns down the worker's stdin. Resolution is human-only by construction: no model-facing tool can approve a worker permission, and the dispatch `resolveWorkerPermission` method is reachable only from the interactive layer. This preserves the receipt's honesty, since a model approving its own fleet's asks would collapse the audit trail.
|
|
92
92
|
|
|
93
|
-
Escalation can never hang a run. Every escalated ask resolves by an operator decision or by the `
|
|
93
|
+
Escalation can never hang a run. Every escalated ask resolves by an operator decision or by the `fleet.permissions.escalation` timeout fallback (`{ timeoutMs, fallback }`, defaults 120000 ms and `deny`); a headless session has no subscriber, so the timeout fallback always governs there. The worker keeps emitting heartbeats while parked, so the reconciler does not reap it, and every escalation and its resolution source (operator or timeout) is recorded on the receipt.
|
|
94
94
|
|
|
95
95
|
---
|
|
96
96
|
|
|
97
97
|
## Operating Posture and Visible Tools
|
|
98
98
|
|
|
99
|
-
Clio operates under a single operating posture
|
|
99
|
+
Clio operates under a single operating posture. The canonical catalog contains
|
|
100
|
+
21 built-in tools organized in seven planes; each plane is one policy unit for
|
|
101
|
+
action class, size posture, and concurrency, asserted at bootstrap by
|
|
102
|
+
`src/tools/policy.ts` so the classifier and registered specs cannot drift apart
|
|
103
|
+
silently. Dependency wiring, target capability, worker profile, and recipe
|
|
104
|
+
policy determine which subset is visible in a particular context.
|
|
100
105
|
|
|
101
106
|
| Plane | Tools | Action class |
|
|
102
107
|
| --- | --- | --- |
|
|
@@ -105,12 +110,12 @@ Clio operates under a single operating posture with a standard, unified visible
|
|
|
105
110
|
| EXECUTE | `bash`, `verify` | `execute` |
|
|
106
111
|
| EXECUTE | `git` | `read` |
|
|
107
112
|
| ORCHESTRATE | `dispatch`, `steer` | `dispatch` |
|
|
108
|
-
| ORCHESTRATE | `monitor`, `tasks` | `read` |
|
|
113
|
+
| ORCHESTRATE | `monitor`, `tasks`, `ledger`, `panes` | `read` |
|
|
109
114
|
| RETRIEVE | `web_fetch` | `read` |
|
|
110
115
|
| INTERACT | `ask_user` | `read` |
|
|
111
116
|
| ARTIFACT | `artifact` | `write` |
|
|
112
117
|
|
|
113
|
-
`git` is read-only inspection on the safe-exec spine, so it carries the read class despite living in the EXECUTE plane. `monitor` does not mutate a run or the workspace. The model-facing `tasks` tool is an intentional bookkeeping exception to the everyday meaning of "read": board mutations append full `taskLedger` snapshots to Clio's session ledger, and any action may reconcile the project-local `.clio-coder/user-tasks.json` inbox while `pick` and linked `done` update its durable correlation. Those Clio-owned ledger and inbox mutations intentionally remain audited with `actionClass: "read"`, so task planning and pickup stay available at every autonomy level without an approval card. This classification grants no source-workspace, command-execution, or run-mutation authority; those operations still require their own tools and action classes. `gateway` is a design-reserved name only (see `src/core/tool-names.ts`), not a registered tool.
|
|
118
|
+
`git` is read-only inspection on the safe-exec spine, so it carries the read class despite living in the EXECUTE plane. `monitor` does not mutate a run or the workspace. The model-facing `tasks` tool is an intentional bookkeeping exception to the everyday meaning of "read": board mutations append full `taskLedger` snapshots to Clio's session ledger, and any action may reconcile the project-local `.clio-coder/user-tasks.json` inbox while `pick` and linked `done` update its durable correlation. Those Clio-owned ledger and inbox mutations intentionally remain audited with `actionClass: "read"`, so task planning and pickup stay available at every autonomy level without an approval card. `ledger` reads a worker-local mirror and posts through the dispatch control lane; it registers only for a worker with an agent-ledger port. `panes` controls Clio-owned terminal panes and registers only when a pane host and live mux are available. Both are read class and sequential because their coordination state must not interleave. This classification grants no source-workspace, command-execution, or run-mutation authority; those operations still require their own tools and action classes. `gateway` is a design-reserved name only (see `src/core/tool-names.ts`), not a registered tool.
|
|
114
119
|
|
|
115
120
|
Target capability, dispatch tool profiles, and recipe constraints can further narrow the tools available to a run. That narrowing is convenience and budget control; safety still lives in code gates.
|
|
116
121
|
|
|
@@ -287,7 +292,7 @@ Dispatch workers can run the same HTTP or native runtimes as the orchestrator. C
|
|
|
287
292
|
|
|
288
293
|
Three integration paths exist for driving Claude Code, ranging from fully enforced to advisory gating:
|
|
289
294
|
|
|
290
|
-
- **`claude-sdk` (Enforced Safety):** Drives [@anthropic-ai/claude-agent-sdk](https://www.npmjs.com/package/@anthropic-ai/claude-agent-sdk) directly. This is the **strong safety path** because Clio enforces tool gating before execution. Clio registers a `PreToolUse` hook (which fires for all tool uses, including auto-allowed reads) and wraps `canUseTool` for permission paths. Every tool request is mapped into a Clio tool/action class, evaluated by the safety net, and passed through the active autonomy matrix. Because a dispatched worker is noninteractive, any `ask` decision is resolved as a non-stall denial (`
|
|
295
|
+
- **`claude-sdk` (Enforced Safety):** Drives [@anthropic-ai/claude-agent-sdk](https://www.npmjs.com/package/@anthropic-ai/claude-agent-sdk) directly. This is the **strong safety path** because Clio enforces tool gating before execution. Clio registers a `PreToolUse` hook (which fires for all tool uses, including auto-allowed reads) and wraps `canUseTool` for permission paths. Every tool request is mapped into a Clio tool/action class, evaluated by the safety net, and passed through the active autonomy matrix. Because a dispatched worker is noninteractive, any `ask` decision is resolved as a non-stall denial (`fleet.permissions.mode=deny` returns denial; `fleet.permissions.mode=fail` terminates the run with a permission-required code).
|
|
291
296
|
- **`claude-code` (Subprocess Gating):** Drives `claude -p` as a subprocess. Because the CLI lacks a direct callback hook, Clio cannot evaluate each tool invocation. Instead, Clio maps the active autonomy level to the binary's command-line parameters (such as `--permission-mode` and tool allowlists). Unrecognized tools are gated by the subprocess runtime itself. Dispatch at autonomy `suggest` is refused outright (the same applies to `antigravity-code`): a subprocess cannot park a tool call for approval, so `suggest` has no honest mapping and the runner fails closed before launching the external CLI. A dangerous bypass (`--allow-dangerously-skip-permissions`) is only sent when autonomy is `full-auto` and `CLIO_CODER_ALLOW_EXTERNAL_FULL_ACCESS=1`, and it is never silent: the run's receipt records it (see the enforcement grades below) and evidence raises an external-bypass finding.
|
|
292
297
|
- **Claude Code over ACP (Advisory Gating):** Drives Zed's `@zed-industries/claude-code-acp` (or `@agentclientprotocol/claude-agent-acp`) bridge as an [Agent Client Protocol (ACP)](https://agentclientprotocol.com) delegation agent. Clio's ACP mediator intercepts tool calls and filters them against the safety net, but gating is ultimately **advisory** as Claude governs its own runtime execution. For strict, code-enforced per-tool safety, `claude-sdk` is preferred over ACP.
|
|
293
298
|
|
|
@@ -330,8 +335,8 @@ When executing tasks in headless mode through `clio-coder run`, there is no term
|
|
|
330
335
|
|
|
331
336
|
### Workers and delegations
|
|
332
337
|
|
|
333
|
-
- **Workers** inherit the session's autonomy level, capped by dispatch scope admission. A worker ask resolves per `
|
|
334
|
-
- **Delegations (ACP)** under `clio-policy` governance evaluate through the same net and autonomy mapping; an ask resolves as a non-stall deny so the external agent never hangs waiting for an operator.
|
|
338
|
+
- **Workers** inherit the session's autonomy level, capped by dispatch scope admission. A worker ask resolves per `fleet.permissions.mode`: `deny` continues the run with a rejection; `fail` ends it; `escalate` forwards it to the interactive operator (see the escalation section above). All three values are editable in the `/settings` center.
|
|
339
|
+
- **Delegations (ACP)** under `clio-coder-policy` governance evaluate through the same net and autonomy mapping; an ask resolves as a non-stall deny so the external agent never hangs waiting for an operator.
|
|
335
340
|
- **ACP server sessions** (a remote client driving Clio) snapshot the autonomy level at `session/new`, so a mid-session settings change on the host cannot alter an in-flight remote session's admission decisions.
|
|
336
341
|
|
|
337
342
|
---
|
|
@@ -348,7 +353,7 @@ It is critical to distinguish these two control axes:
|
|
|
348
353
|
|
|
349
354
|
| Setting | Axis | Governed By | Handled In |
|
|
350
355
|
| --- | --- | --- | --- |
|
|
351
|
-
| **Autonomy** | Authority | `autonomy` settings dial, `CLIO_CODER_ALLOW_EXTERNAL_FULL_ACCESS` | `src/tools/registry.ts`, `src/domains/safety/` |
|
|
356
|
+
| **Autonomy** | Authority | `safety.autonomy` settings dial, `CLIO_CODER_ALLOW_EXTERNAL_FULL_ACCESS` | `src/tools/registry.ts`, `src/domains/safety/` |
|
|
352
357
|
| **Rigor** | Validation | `CLIO_CODER_RIGOR` override, workspace validation contracts | `src/domains/safety/rigor.ts`, `src/domains/safety/finish-contract-registration.ts` |
|
|
353
358
|
|
|
354
359
|
---
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
# Session Lifecycle
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
> **Visual blueprint:** The source checkout includes the complete
|
|
4
|
+
> [Session Lifecycle visual reference](https://github.com/iowarp/clio-coder/blob/main/docs/html/session_lifecycle_blueprint.html).
|
|
5
|
+
|
|
6
|
+
This document is the authoritative specification for Clio Coder interactive and headless session lifecycles, on-disk ledger structures, tree-based conversation branching, checkpoints, and recovery protocols in the current source tree.
|
|
4
7
|
|
|
5
8
|
Source implementations: `src/engine/session.ts` and `src/domains/session/`.
|
|
6
9
|
|
|
@@ -35,7 +38,7 @@ export interface ClioSessionMeta {
|
|
|
35
38
|
endedAt: string | null;
|
|
36
39
|
model: string | null;
|
|
37
40
|
target: string | null;
|
|
38
|
-
|
|
41
|
+
clioCoderVersion: string;
|
|
39
42
|
piMonoVersion: string;
|
|
40
43
|
platform: string;
|
|
41
44
|
nodeVersion: string;
|
|
@@ -43,7 +46,7 @@ export interface ClioSessionMeta {
|
|
|
43
46
|
}
|
|
44
47
|
```
|
|
45
48
|
|
|
46
|
-
Format version `CURRENT_SESSION_FORMAT_VERSION = 4` (`src/engine/session.ts`) is stamped on all sessions created since the working-set layer landed. Version 4 adds the `contextEviction` and `contextRecall` ledger kinds. `runMigrations` in `src/domains/session/migrations/`
|
|
49
|
+
Format version `CURRENT_SESSION_FORMAT_VERSION = 4` (`src/engine/session.ts`) is stamped on all sessions created since the working-set layer landed. Version 4 adds the `contextEviction` and `contextRecall` ledger kinds. `runMigrations` in `src/domains/session/migrations/` performs the one supported additive migration from version 3 to version 4. A missing version or a version below 3 names the remedy (remove the session directory), while a version above 4 says the session was written by a newer Clio and must not be read by this build.
|
|
47
50
|
|
|
48
51
|
---
|
|
49
52
|
|
|
@@ -56,7 +59,7 @@ The session ledger `current.jsonl` records all conversation events, model turns,
|
|
|
56
59
|
The first line of `current.jsonl` is the canonical session header:
|
|
57
60
|
|
|
58
61
|
```json
|
|
59
|
-
{"type":"session","version":
|
|
62
|
+
{"type":"session","version":4,"id":"01912a34-b567-7890-abcd-ef0123456789","timestamp":"2026-08-14T12:00:00.000Z","cwd":"/path/to/project"}
|
|
60
63
|
```
|
|
61
64
|
|
|
62
65
|
### Entry Taxonomy
|
|
@@ -171,7 +174,7 @@ When an operator issues `/new`, `/resume`, `/tree`, or `/fork` while an assistan
|
|
|
171
174
|
|
|
172
175
|
## 5. Session Resumption (`/resume`) & Working Directory Fallback
|
|
173
176
|
|
|
174
|
-
When resuming a session via `/resume` or `
|
|
177
|
+
When resuming a session via `/resume` or a headless `clio-coder run --session <id>` / `--continue`:
|
|
175
178
|
1. `src/domains/session/manager.ts:resumeSessionState` loads `meta.json` and runs migrations.
|
|
176
179
|
2. `src/domains/session/cwd-fallback.ts:resolveSessionCwd` probes the recorded `meta.cwd` against the filesystem.
|
|
177
180
|
3. If the directory is invalid, it returns a typed failure reason:
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# Time and Clock Conventions
|
|
2
|
+
|
|
3
|
+
> **Visual blueprint:** The source checkout includes the complete
|
|
4
|
+
> [Time and Clock Conventions visual reference](https://github.com/iowarp/clio-coder/blob/main/docs/html/time_conventions_blueprint.html).
|
|
5
|
+
|
|
6
|
+
This document describes the time practices implemented in the current Clio
|
|
7
|
+
Coder source tree. The code distinguishes process-local elapsed spans from
|
|
8
|
+
durable instants, but it does not impose one clock primitive on every module.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## 1. Choose a clock for the lifetime of the fact
|
|
13
|
+
|
|
14
|
+
| Fact | Current practice | Representative sources |
|
|
15
|
+
| --- | --- | --- |
|
|
16
|
+
| Process-local elapsed span | Use a monotonic source such as `performance.now()` or `process.hrtime.bigint()` when the start and finish occur in one process. | `src/domains/dispatch/heartbeat.ts`, `src/domains/dispatch/code-step.ts`, `src/core/startup-timer.ts` |
|
|
17
|
+
| Durable or cross-process instant | Store epoch milliseconds or canonical UTC from `new Date(...).toISOString()`. | Session entries, receipts, dispatch rows, audit rows |
|
|
18
|
+
| Persisted expiry, lock age, or restart-visible deadline | Some owners intentionally compare `Date.now()` values because the fact must survive a process boundary or is derived from filesystem metadata. | `src/core/state-file-lock.ts`, dispatch admission and recovery |
|
|
19
|
+
| Concurrent ordering | Prefer an explicit sequence or store order when the protocol supplies one; do not invent ordering from close timestamps. | `src/domains/dispatch/agent-ledger-store.ts`, `src/domains/dispatch/execution-scheduler.ts` |
|
|
20
|
+
|
|
21
|
+
This means neither `performance.now()` nor `Date.now()` is universally correct.
|
|
22
|
+
A monotonic value has meaning only within its clock origin and is the right
|
|
23
|
+
choice for a live heartbeat age or one process's latency. A wall-clock value is
|
|
24
|
+
necessary for a receipt timestamp, a persisted lease deadline, a filesystem
|
|
25
|
+
mtime age, or a record another process must read after restart.
|
|
26
|
+
|
|
27
|
+
### Combined anchor and span pattern
|
|
28
|
+
|
|
29
|
+
When a record needs both a human-readable anchor and an accurate in-process
|
|
30
|
+
duration, `src/domains/dispatch/code-step.ts` uses one wall anchor and one
|
|
31
|
+
monotonic span:
|
|
32
|
+
|
|
33
|
+
```ts
|
|
34
|
+
const startedAtMs = Date.now();
|
|
35
|
+
const clock = process.hrtime.bigint();
|
|
36
|
+
const startedAt = new Date(startedAtMs).toISOString();
|
|
37
|
+
// ... operation executes ...
|
|
38
|
+
const durationMs = Number((process.hrtime.bigint() - clock) / 1_000_000n);
|
|
39
|
+
const endedAt = new Date(startedAtMs + durationMs).toISOString();
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
The derived ending instant stays consistent with the measured duration even if
|
|
43
|
+
the wall clock changes during the operation.
|
|
44
|
+
|
|
45
|
+
### Cross-host and restart boundaries
|
|
46
|
+
|
|
47
|
+
Never subtract process-local monotonic values from different processes or
|
|
48
|
+
hosts. A restart has no shared monotonic origin with the worker it recovers;
|
|
49
|
+
`src/domains/dispatch/orphan-recovery.ts` first adjudicates the host-scoped
|
|
50
|
+
process identity and then uses the persisted heartbeat only as a display and
|
|
51
|
+
evidence bound. Transport protocols that need a durable anchor and live
|
|
52
|
+
liveness carry both. `HeartbeatStamp.current` is the wall-clock instant, while
|
|
53
|
+
`HeartbeatStamp.monotonic` is the value the live watchdog compares.
|
|
54
|
+
|
|
55
|
+
On a shared filesystem, a process record created by another host is not checked
|
|
56
|
+
against the local process table. Host, pid, and process-birth facts prevent pid
|
|
57
|
+
reuse and cross-host confusion. When exact event ordering matters, use a
|
|
58
|
+
protocol sequence, SQLite rowid, or append order defined by the owning store.
|
|
59
|
+
|
|
60
|
+
### Injectable seams are local contracts
|
|
61
|
+
|
|
62
|
+
Clock injection exists where deterministic timing tests or protocol logic need
|
|
63
|
+
it. Examples include the pure heartbeat classifier, dispatch admission queues,
|
|
64
|
+
capacity leases, fleet preflight, worker spawn, and the audit writer's date
|
|
65
|
+
function. Other modules read a platform clock directly. There is no global
|
|
66
|
+
test-clock harness; tests use the seam supplied by the owner under test or
|
|
67
|
+
exercise real passage explicitly.
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## 2. UTC storage and local rendering
|
|
72
|
+
|
|
73
|
+
Durable and wire timestamps use canonical ISO-8601 UTC strings produced by
|
|
74
|
+
`toISOString()` unless a schema explicitly owns epoch milliseconds. Localized
|
|
75
|
+
display strings do not belong in persisted models.
|
|
76
|
+
|
|
77
|
+
Operator-facing conversion is centralized in
|
|
78
|
+
`src/interactive/format-time.ts` for the surfaces that display session and
|
|
79
|
+
message instants:
|
|
80
|
+
|
|
81
|
+
| Function | Output | Purpose |
|
|
82
|
+
| --- | --- | --- |
|
|
83
|
+
| `clockLocal(instant)` | `HH:MM:SS` through `en-GB` with a 24-hour cycle | Local time of day |
|
|
84
|
+
| `dateLocal(instant)` | `YYYY-MM-DD` through `en-CA` | Local calendar date |
|
|
85
|
+
| `relative(instant, now)` | `3m ago`, `yesterday`, or a local date | Coarse recency |
|
|
86
|
+
|
|
87
|
+
The module keeps its `Intl.DateTimeFormat` instances at module scope and
|
|
88
|
+
rebuilds them when `process.env.TZ` changes. Machine-readable surfaces such as
|
|
89
|
+
structured logs, session records, and receipts bypass these formatters.
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
93
|
+
## 3. Receipt and audit integrity
|
|
94
|
+
|
|
95
|
+
Persisted receipt fields such as `startedAt` and `endedAt` participate in the
|
|
96
|
+
integrity digest owned by `src/domains/dispatch/receipt-integrity.ts`. Timestamp
|
|
97
|
+
normalization and duration derivation must finish before sealing. A sealed
|
|
98
|
+
receipt must not be rewritten merely to make its clocks look tidier.
|
|
99
|
+
|
|
100
|
+
Safety audit rows are written under:
|
|
101
|
+
|
|
102
|
+
```text
|
|
103
|
+
<stateDir>/audit/YYYY-MM-DD.jsonl
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
The filename date is the operator-local calendar date on which the writer
|
|
107
|
+
opened that generation. Each row still carries a canonical UTC `ts`. Concurrent
|
|
108
|
+
producers do not promise timestamp order in the raw file, so consumers sort by
|
|
109
|
+
`ts` when reconstructing time order. The local date label is not itself a
|
|
110
|
+
machine ordering key.
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## 4. Review checklist
|
|
115
|
+
|
|
116
|
+
When adding a timed fact:
|
|
117
|
+
|
|
118
|
+
1. Decide whether it is a process-local span, a durable instant, or a
|
|
119
|
+
restart-visible deadline.
|
|
120
|
+
2. Keep monotonic values inside their originating process.
|
|
121
|
+
3. Persist UTC anchors and the measured duration when both are useful.
|
|
122
|
+
4. Use host identity and process-birth evidence before consulting a local pid.
|
|
123
|
+
5. Add a narrow injectable seam when deterministic tests need one; do not imply
|
|
124
|
+
that an unrelated module shares it.
|
|
125
|
+
6. Normalize timestamps before sealing any receipt or evidence digest.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# Trace store contract
|
|
2
2
|
|
|
3
|
-
>
|
|
4
|
-
>
|
|
3
|
+
> **Visual blueprint:** The source checkout includes the complete
|
|
4
|
+
> [Trace store contract visual reference](https://github.com/iowarp/clio-coder/blob/main/docs/html/trace_blueprint.html).
|
|
5
5
|
|
|
6
6
|
Clio's trace database is a rebuildable, queryable mirror. Receipts, session
|
|
7
7
|
ledgers, gate artifacts, and evidence remain the source of truth. Removing
|
|
@@ -28,7 +28,12 @@ try to change it, because changing journal mode is a database write.
|
|
|
28
28
|
The seven Clio trace tables are `runs`, `phases`, `events`, `envelopes`,
|
|
29
29
|
`gate_results`, `agent_sessions`, and `processes`; `meta` carries the schema
|
|
30
30
|
version. Runs use terminal run ids. Interactive session turns are also recorded
|
|
31
|
-
as `runs` rows
|
|
31
|
+
as `runs` rows, distinguished by `runs.source` (`'dispatch'` or `'session'`;
|
|
32
|
+
a session turn also carries the historical sentinel `assignment_id =
|
|
33
|
+
"session"`, which predates the column and is unchanged). `runs.source` is an
|
|
34
|
+
additive column: a database created before it existed gains it in place on
|
|
35
|
+
next open, backfilled from that sentinel, the same way `processes.host` and
|
|
36
|
+
`processes.birth_token` were added without a schema-version bump. A phase belongs to a run and carries its
|
|
32
37
|
assignment/worker-facing name, kind, owner, attempt, timing, status, itemized
|
|
33
38
|
token spend, optional itemized dollar spend, total dollar spend, and context
|
|
34
39
|
occupancy. Missing historical or unavailable component costs are `NULL`, never
|
|
@@ -83,7 +88,7 @@ writes before slower evidence builds.
|
|
|
83
88
|
|
|
84
89
|
## CLI Commands
|
|
85
90
|
|
|
86
|
-
The `clio-coder trace` command surfaces
|
|
91
|
+
The `clio-coder trace` command surfaces 9 subcommands for inspecting, bounding, and querying the SQLite trace mirror, plus the code-step record files beside it:
|
|
87
92
|
|
|
88
93
|
```bash
|
|
89
94
|
clio-coder trace runs [--db PATH] [--limit N] [--json]
|
|
@@ -91,6 +96,7 @@ clio-coder trace inspect --json
|
|
|
91
96
|
clio-coder trace phases <runId> [--db PATH]
|
|
92
97
|
clio-coder trace tail <runId> [--follow] [--db PATH]
|
|
93
98
|
clio-coder trace procs <runId> [--db PATH]
|
|
99
|
+
clio-coder trace code-steps <rootId> [--json]
|
|
94
100
|
clio-coder trace prune [--max-age-days N] [--max-bytes N] [--db PATH] [--json]
|
|
95
101
|
clio-coder trace sql <SELECT query> [--db PATH]
|
|
96
102
|
clio-coder trace ui [--db PATH] [--port N]
|
|
@@ -98,6 +104,8 @@ clio-coder trace ui [--db PATH] [--port N]
|
|
|
98
104
|
|
|
99
105
|
`clio-coder trace --help` and every subcommand `--help` print usage and exit with code 0.
|
|
100
106
|
|
|
107
|
+
`trace code-steps` is the one subcommand that does not read the mirror. A deterministic fleet code step is a subprocess, not a model run, so `src/domains/dispatch/code-step-store.ts` writes its `CodeStepRecord` to `<stateDir>/code-steps/<rootId>/<runId>.json` instead of fabricating route rows in the ledger. The command reads those files back oldest first, prints the record verbatim under `--json`, and treats an absent root directory as the empty state with exit 0. `--db` is ignored.
|
|
108
|
+
|
|
101
109
|
### Database Resolution and Error Handling
|
|
102
110
|
|
|
103
111
|
When resolving the SQLite database path:
|
|
@@ -107,7 +115,7 @@ When resolving the SQLite database path:
|
|
|
107
115
|
|
|
108
116
|
### Subcommand Specifications
|
|
109
117
|
|
|
110
|
-
1. **`runs`**: Lists recent dispatch runs from the trace store. `--limit` sets maximum rows (1 to 500, default 50); `--json` emits the selected trace rows as an array. Formats status, start time, total tokens, total USD cost, and run ID in text mode.
|
|
118
|
+
1. **`runs`**: Lists recent dispatch runs and interactive session turns from the trace store. `--limit` sets maximum rows (1 to 500, default 50); `--json` emits the selected trace rows as an array. Formats status, `source` (`dispatch` or `session`), start time, total tokens, total USD cost, and run ID in text mode.
|
|
111
119
|
2. **`inspect`**: Emits only `--json`, from the default database, with no caller-controlled path or window. The version-1 snapshot carries at most eight newest runs and bounded phase, event-kind, and process-kind aggregates. It omits request text, phase error prose, event payloads, command lines, PIDs, hosts, and database paths, and distinguishes an unavailable database from an available empty one through `available`.
|
|
112
120
|
3. **`phases`**: Lists sequence phases for a designated `runId`. Displays status, attempt, owner, total tokens, USD cost, and phase name.
|
|
113
121
|
4. **`tail`**: Displays append-ordered event rows for a designated `runId`. When `--follow` is specified, polls for new events every 500 ms until two consecutive idle polls observe a finished run status.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# Clio TUI Design System
|
|
2
2
|
|
|
3
|
-
>
|
|
4
|
-
>
|
|
3
|
+
> **Visual blueprint:** The source checkout includes the complete
|
|
4
|
+
> [Clio TUI Design System visual reference](https://github.com/iowarp/clio-coder/blob/main/docs/html/tui_design_blueprint.html).
|
|
5
5
|
|
|
6
|
-
This document is the reference specification for the Clio Coder TUI visual layout, styling, and behavior. It describes color semantics, the glyph vocabulary, structural recipes, and state choreography for all surfaces under [src/interactive/](
|
|
6
|
+
This document is the reference specification for the Clio Coder TUI visual layout, styling, and behavior. It describes color semantics, the glyph vocabulary, structural recipes, and state choreography for all surfaces under [src/interactive/](../../src/interactive/).
|
|
7
7
|
|
|
8
8
|
The governing principle: **the user reads state from color, structure from frames, and identity from brand marks.** Everything that is not state or structure remains visually quiet.
|
|
9
9
|
|
|
@@ -11,7 +11,7 @@ The governing principle: **the user reads state from color, structure from frame
|
|
|
11
11
|
|
|
12
12
|
## 1. Color System
|
|
13
13
|
|
|
14
|
-
All color styling is defined in [src/interactive/theme/tokens.ts](
|
|
14
|
+
All color styling is defined in [src/interactive/theme/tokens.ts](../../src/interactive/theme/tokens.ts). No raw SGR sequences, `38;2;`/`38;5;` ANSI escape fragments, or hardcoded hex colors are allowed outside this theme module.
|
|
15
15
|
|
|
16
16
|
### 1.1 Color Tokens
|
|
17
17
|
|
|
@@ -43,7 +43,7 @@ All color styling is defined in [src/interactive/theme/tokens.ts](../src/interac
|
|
|
43
43
|
|
|
44
44
|
## 2. Glyph Vocabulary
|
|
45
45
|
|
|
46
|
-
All symbols are defined as constants in [src/interactive/theme/glyphs.ts](
|
|
46
|
+
All symbols are defined as constants in [src/interactive/theme/glyphs.ts](../../src/interactive/theme/glyphs.ts). Rendering code reference these names instead of embedding hardcoded glyph literals.
|
|
47
47
|
|
|
48
48
|
| Glyph | Name | Meaning | Used by |
|
|
49
49
|
|---|---|---|---|
|
|
@@ -82,7 +82,7 @@ All symbols are defined as constants in [src/interactive/theme/glyphs.ts](../src
|
|
|
82
82
|
|
|
83
83
|
## 3. Formatting Rules
|
|
84
84
|
|
|
85
|
-
Standardized formatters live in [src/interactive/theme/labels.ts](
|
|
85
|
+
Standardized formatters live in [src/interactive/theme/labels.ts](../../src/interactive/theme/labels.ts) and other shared UI modules:
|
|
86
86
|
|
|
87
87
|
- **Duration**: `formatCompactMs` is the unified duration formatter, yielding compact outputs (`860ms`, `4.2s`, `42s`, `1m36s`).
|
|
88
88
|
- **Token Counts**: `formatFooterTokens` formats footer and chip counts (`842`, `12.4k`, `1.2M`). Full numeric strings via `toLocaleString` are reserved for detailed tables like the context legend.
|
|
@@ -95,7 +95,7 @@ Standardized formatters live in [src/interactive/theme/labels.ts](../src/interac
|
|
|
95
95
|
|
|
96
96
|
### 4.1 The Island (Framed Block)
|
|
97
97
|
|
|
98
|
-
Rendered via `frame()` in [src/interactive/theme/rules.ts](
|
|
98
|
+
Rendered via `frame()` in [src/interactive/theme/rules.ts](../../src/interactive/theme/rules.ts):
|
|
99
99
|
|
|
100
100
|
```
|
|
101
101
|
┌─ Title ──────────────────────────── meta ─┐
|
|
@@ -165,11 +165,11 @@ The words carry the meaning when color is disabled. Permission copy states the e
|
|
|
165
165
|
|
|
166
166
|
## 5. Screen Surfaces & State Choreography
|
|
167
167
|
|
|
168
|
-
The Clio screen maintains a responsive, four-zone structure: the launchpad / session header, transcript, composer, and footer. `
|
|
168
|
+
The Clio screen maintains a responsive, four-zone structure: the launchpad / session header, transcript, composer, and footer. `interface.mode` chooses the renderer at startup. The default `regular` mode uses terminal scrollback. Opt-in `fullscreen` mode uses the alternate screen: the launchpad/header and transcript occupy an independently scrollable viewport while the follow-up queue, composer, and footer remain docked at the bottom.
|
|
169
169
|
|
|
170
|
-
In fullscreen mode, `PageUp` and `PageDown` scroll one viewport, `Home` and `End` jump to its bounds, `Ctrl+Shift+Up` and `Ctrl+Shift+Down` jump between semantic prompts, and the mouse wheel scrolls the transcript. Dragging the scrollbar thumb moves the viewport directly. `
|
|
170
|
+
In fullscreen mode, `PageUp` and `PageDown` scroll one viewport, `Home` and `End` jump to its bounds, `Ctrl+Shift+Up` and `Ctrl+Shift+Down` jump between semantic prompts, and the mouse wheel scrolls the transcript. Dragging the scrollbar thumb moves the viewport directly. `interface.fullscreenScrollbar` is `hidden`, `auto` (visible during interaction), or `always`. Manual scrolling suspends follow-end so new output does not steal the operator's position; returning to the bottom resumes it. Both fullscreen settings are restart-scoped because Clio constructs its terminal renderer and component graph once at startup.
|
|
171
171
|
|
|
172
|
-
`
|
|
172
|
+
`interface.smoothStreaming` controls presentation-only pacing of derived assistant text and thinking. The shipped `off` value uses the immediate 16 ms coalescer. `auto` paces only on a capable local TTY and bypasses pacing for non-TTY, SSH, multiplexers, CI, screen-reader/reduced-motion markers, or observed stdout backpressure. `on` explicitly requests grapheme-safe pacing, while still stopping frame production behind stdout backpressure. Raw provider wrappers never enter the panel, canonical events and persistence remain synchronous, and tool/message/turn/abort/retry/submit/teardown boundaries drain visible state before they continue.
|
|
173
173
|
|
|
174
174
|
Interactive startup uses one terminal lease across both boot stages. Stage 0 owns the terminal, renderer, root host, exact editor instance, input decoder, raw mode, resize subscription, protocol queries, signals, and stop lifecycle, and commits a measured minimal frame while services hydrate. Hydration synchronously swaps the root and input/signal delegates without reconstructing the editor or initializing terminal protocols again. Early Enter submissions become immutable, visibly queued admissions and drain once through the ordinary command pipeline; a later draft and cursor stay in the same editor. Boot failure or an early signal closes the lease exactly once, restores the terminal, and prints recoverable queued input and draft text. `CLIO_CODER_INSTANT_SHELL=0` selects the legacy fully hydrated first frame; ACP, headless, ordinary non-TTY invocation, and subcommand execution never acquire the lease. An explicit `CLIO_CODER_INTERACTIVE=1` retains its established force-interactive behavior on a non-TTY stream.
|
|
175
175
|
|
|
@@ -266,7 +266,7 @@ Turn usage receipts rendered at the bottom of completed turns respect the output
|
|
|
266
266
|
|
|
267
267
|
### 6.7 Code Ink (Syntax Highlighting)
|
|
268
268
|
|
|
269
|
-
Syntax highlighting within code blocks is handled by [src/interactive/renderers/code-ink.ts](
|
|
269
|
+
Syntax highlighting within code blocks is handled by [src/interactive/renderers/code-ink.ts](../../src/interactive/renderers/code-ink.ts). It maps a restricted set of four tokens to stay quiet:
|
|
270
270
|
|
|
271
271
|
- **Comments**: `dim`
|
|
272
272
|
- **String Literals**: `success`
|
|
@@ -305,7 +305,7 @@ The `/settings` overlay is a full-screen transactional control center:
|
|
|
305
305
|
- `Apply this session` (for live-capable settings)
|
|
306
306
|
- `Apply and save globally`
|
|
307
307
|
- `Cancel` (or `Esc`)
|
|
308
|
-
- Restart-required settings (`
|
|
308
|
+
- Restart-required settings (`fleet.concurrency`, `integrations.runtimePlugins`, `interface.mode`, and `interface.fullscreenScrollbar`) offer only global save and announce `Saved to settings.yaml · restart Clio to apply`.
|
|
309
309
|
- Destructive actions (target/profile removal) execute preflight analysis showing affected chat, fleet, and memory routes before confirmation.
|
|
310
310
|
- **Fleet Workbench**: Organizes fleet settings with dim group headers (`Defaults`, `Profiles`, `Agent routes`, `Placement`). Profiles render as one-row summaries with `◆ Edit` affordance; pressing `Enter` drills into profile fields (target, model, thinking level, placement) or destructive removal.
|
|
311
311
|
- **Targets Console Table**: Displays configured targets in an operational console table (`HEALTH`, `ID`, `ROLES`, `RUNTIME`, `LATENCY`) with an in-place action/detail drawer (URL, default model, last probe, failure reason). Actions include `Use`, `Connect`, `Probe`, and `Remove`. Active connect/probe operations show the single orange activity indicator.
|
|
@@ -335,7 +335,7 @@ Wrapping happens before the row cap, so the block is at most six rows tall at an
|
|
|
335
335
|
|
|
336
336
|
## 8. Shared Vocabulary
|
|
337
337
|
|
|
338
|
-
One quantity gets one word, and every surface that shows it uses that word. A user comparing the transcript, the footer, and an overlay is checking whether Clio is telling a consistent story; a synonym reads as a discrepancy. `
|
|
338
|
+
One quantity gets one word, and every surface that shows it uses that word. A user comparing the transcript, the footer, and an overlay is checking whether Clio is telling a consistent story; a synonym reads as a discrepancy. The current vocabulary is owned by `src/interactive/chat-panel.ts`, `src/interactive/cost-overlay.ts`, `src/interactive/status/reasoning.ts`, and `src/interactive/thinking-level-policy.ts`; there is no standalone `usage-vocabulary` contract test in the current tree.
|
|
339
339
|
|
|
340
340
|
| Concept | Word | Surfaces |
|
|
341
341
|
| --- | --- | --- |
|