@iowarp/clio-coder 0.3.1 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +90 -2
- package/CONTRIBUTING.md +23 -23
- package/README.md +284 -613
- package/dist/{acp-FPR54DGL.js → acp-BIYHVZIM.js} +43 -53
- package/dist/{agents-OGPIHPJH.js → agents-YT6SSRIT.js} +43 -26
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-IC3K6NIZ.js → auth-5TWEIYDN.js} +20 -12
- package/dist/{chunk-PV4JUBVJ.js → chunk-2EHAIA3X.js} +40 -21
- package/dist/{chunk-IS3ONKU3.js → chunk-2IR2NMPA.js} +6 -4
- package/dist/chunk-2SFS6XQE.js +122 -0
- package/dist/chunk-2VTFPG5O.js +48 -0
- package/dist/{chunk-MAR7Y6HW.js → chunk-3ZXDFGR5.js} +23 -16
- package/dist/chunk-4BJ5BYCE.js +61 -0
- package/dist/{chunk-474KN5II.js → chunk-4BPJXDWC.js} +111 -181
- package/dist/chunk-4KLWL3UC.js +18 -0
- package/dist/chunk-4VP4KH3K.js +962 -0
- package/dist/chunk-4ZG3XFUR.js +77 -0
- package/dist/chunk-5B2AEOW5.js +5407 -0
- package/dist/{chunk-K2ITRMHZ.js → chunk-5TSRNF4G.js} +6 -138
- package/dist/{chunk-OLBBMFRD.js → chunk-5UUP6MWO.js} +24 -62
- package/dist/chunk-65DEGPJ6.js +52 -0
- package/dist/chunk-6EJMN2Y3.js +17 -0
- package/dist/chunk-6EJV5X2W.js +16405 -0
- package/dist/chunk-6N5PTWMY.js +136 -0
- package/dist/chunk-6XLNIQDB.js +27 -0
- package/dist/{chunk-TEKV33Q5.js → chunk-77VKQEHF.js} +65 -33
- package/dist/chunk-7CR24IG7.js +242 -0
- package/dist/{chunk-M5T5VO65.js → chunk-7EYHLWU7.js} +837 -635
- package/dist/chunk-7MNJORFF.js +22 -0
- package/dist/{chunk-KY56HMHH.js → chunk-A3CYT5EX.js} +125 -31
- package/dist/chunk-AGYYIBLL.js +1069 -0
- package/dist/chunk-AO4RKG4M.js +277 -0
- package/dist/{chunk-GB6QRBXN.js → chunk-APJ265NV.js} +54 -1187
- package/dist/chunk-ARBGF5F7.js +174 -0
- package/dist/{chunk-673JJUWJ.js → chunk-BMEMKKIT.js} +2 -2
- package/dist/chunk-CBCAPZAA.js +229 -0
- package/dist/chunk-CMZWFGD2.js +352 -0
- package/dist/chunk-ECH6PKUQ.js +39 -0
- package/dist/chunk-ED4KHGC3.js +143 -0
- package/dist/chunk-EKMEHE4H.js +340 -0
- package/dist/{chunk-RPTR2H26.js → chunk-EPVUXGXG.js} +21 -15
- package/dist/chunk-FCSXB6T2.js +338 -0
- package/dist/chunk-FJ3H4MN5.js +48 -0
- package/dist/chunk-FQ4SKYE4.js +29 -0
- package/dist/chunk-G2DE3C7R.js +644 -0
- package/dist/chunk-G4BMMOKF.js +182 -0
- package/dist/{chunk-ZPY3JZ5E.js → chunk-GGXXDWE4.js} +183 -1233
- package/dist/chunk-HC4CLZ2Y.js +68 -0
- package/dist/{chunk-LU4TK2PR.js → chunk-HFSBBKSQ.js} +5 -56
- package/dist/{chunk-PIUMUEMV.js → chunk-HKIYEGME.js} +10 -6
- package/dist/chunk-I4HZDVNP.js +73 -0
- package/dist/{chunk-4QKXUHSR.js → chunk-IGLFWIYI.js} +70 -20
- package/dist/chunk-IKCO5N3L.js +162 -0
- package/dist/chunk-IR4CFBFN.js +56 -0
- package/dist/{chunk-PFEFKVGL.js → chunk-J5HN4RYU.js} +13 -11
- package/dist/{chunk-R5KLMSBV.js → chunk-J5Q24KAG.js} +2 -2
- package/dist/{chunk-K5XEMXTI.js → chunk-JVCV3ICN.js} +1 -1
- package/dist/chunk-KJ5LWLOE.js +1077 -0
- package/dist/chunk-LBMZMYH2.js +285 -0
- package/dist/{chunk-G34LV2PF.js → chunk-LBNRH5WM.js} +84 -170
- package/dist/{chunk-H6F6BYOH.js → chunk-LZSJBIVT.js} +7003 -7434
- package/dist/{chunk-HQQID6OA.js → chunk-M6SHUN7Q.js} +5 -5
- package/dist/chunk-MAW544W2.js +1882 -0
- package/dist/chunk-MBS4V7ZP.js +217 -0
- package/dist/{chunk-FST4FYJB.js → chunk-MFFY33HR.js} +99 -140
- package/dist/chunk-MNA4JGU4.js +255 -0
- package/dist/chunk-MQSRRFWA.js +3428 -0
- package/dist/{chunk-BSU2YIWB.js → chunk-MVVUPGPW.js} +131 -136
- package/dist/chunk-OAO4GE4M.js +619 -0
- package/dist/chunk-OHHN2SO4.js +5135 -0
- package/dist/chunk-OKGUZO2U.js +34 -0
- package/dist/{chunk-GAEBEQVI.js → chunk-OOJYHWRB.js} +32 -346
- package/dist/{chunk-Q5WJOSJ7.js → chunk-OQ33BKR3.js} +2 -1
- package/dist/chunk-OQE5J4C6.js +73 -0
- package/dist/{chunk-KKNLWXI6.js → chunk-ORBHGJC5.js} +8 -8
- package/dist/chunk-POHLU5DW.js +1186 -0
- package/dist/chunk-QKMUKYO7.js +4961 -0
- package/dist/{chunk-ASND7OZK.js → chunk-QTYWRVRA.js} +13 -13
- package/dist/{chunk-EYOKLTMF.js → chunk-SRF2PJNW.js} +17 -3
- package/dist/chunk-SST6Z5JA.js +80 -0
- package/dist/chunk-STBPMHSX.js +2456 -0
- package/dist/chunk-T6YILFSB.js +80 -0
- package/dist/chunk-TZTZS7QK.js +227 -0
- package/dist/chunk-UOV2BYIW.js +107 -0
- package/dist/{chunk-Q3RUPKEJ.js → chunk-V4RXGQ5Q.js} +58 -189
- package/dist/chunk-VAKQQHWR.js +434 -0
- package/dist/chunk-VG7TBQIY.js +128 -0
- package/dist/chunk-VJWL6YS5.js +244 -0
- package/dist/chunk-WEH5XRJQ.js +32 -0
- package/dist/chunk-WMSVI4G2.js +2095 -0
- package/dist/chunk-WVO7V2QY.js +797 -0
- package/dist/chunk-X4RCMKVQ.js +641 -0
- package/dist/chunk-X75S7HFS.js +374 -0
- package/dist/chunk-XN3L4EYL.js +46 -0
- package/dist/{chunk-RDLVBZEO.js → chunk-YCWGATWI.js} +6 -4
- package/dist/chunk-YHZX5GEU.js +193 -0
- package/dist/chunk-YXLYO42X.js +91 -0
- package/dist/{chunk-NMOX6HFD.js → chunk-ZDOOVTXZ.js} +29 -77
- package/dist/chunk-ZI647VB5.js +37 -0
- package/dist/{chunk-C4PTHK7P.js → chunk-ZWLZP4ZT.js} +5 -5
- package/dist/cli/index.js +62 -54
- package/dist/clio-4LY5K2AC.js +25 -0
- package/dist/code-nav-7AX6FYE6.js +600 -0
- package/dist/codewiki/build-worker.js +66 -0
- package/dist/compile-cache-CVJMMODC.js +18 -0
- package/dist/{components-DMAOEKFB.js → components-KELWS457.js} +11 -6
- package/dist/{config-IRUQ7SE4.js → config-GTLUW2PR.js} +92 -55
- package/dist/configure-R6A64DHX.js +42 -0
- package/dist/context-5VKGUVJJ.js +866 -0
- package/dist/{context-3KWFLHJG.js → context-JFZEJ7W5.js} +15 -13
- package/dist/{context-5RADCKTR.js → context-RW5HC47S.js} +71 -35
- package/dist/{context-clear-7TSNPAAI.js → context-clear-6ZHBAZZT.js} +54 -28
- package/dist/{context-index-W4RLWOQH.js → context-index-BZ4UYMTC.js} +30 -24
- package/dist/dispatch-runner-VKBRCWQC.js +1997 -0
- package/dist/{docs-5AWSPS37.js → docs-2C2LTVT2.js} +23 -10
- package/dist/{doctor-UC5NAJYQ.js → doctor-KI767GSN.js} +27 -17
- package/dist/{eval-U6TJHRLX.js → eval-XSSNATB4.js} +29 -16
- package/dist/{evidence-YEGUW4L3.js → evidence-UA6AWDQQ.js} +46 -26
- package/dist/{evolve-TXARCTPG.js → evolve-QNTFGV6Z.js} +45 -25
- package/dist/{extensions-OZFJ3A3G.js → extensions-QVDOHDGJ.js} +16 -7
- package/dist/{fleet-6G3DHNYE.js → fleet-Q7UOMUSG.js} +163 -54
- package/dist/{fleet-preflight-DSNT37JK.js → fleet-preflight-DDN536IT.js} +7 -4
- package/dist/{init-KZ5QTF6M.js → init-WBB65ZHQ.js} +69 -32
- package/dist/{memory-73ESV5YC.js → memory-MD3O64RI.js} +48 -27
- package/dist/{models-A4PVNWJK.js → models-BZU34YWD.js} +39 -25
- package/dist/monitor-MEQA5C3I.js +661 -0
- package/dist/{chunk-FCIH3BIZ.js → orchestrator-CGFKEP27.js} +11832 -8687
- package/dist/{paths-C4H6IV77.js → paths-UXLN5YYZ.js} +10 -5
- package/dist/{preload-6WVMHX3A.js → preload-P6DGH2PZ.js} +2 -2
- package/dist/{reset-BGW6OGMV.js → reset-L2FQEE3E.js} +16 -10
- package/dist/{run-YTPEYQOH.js → run-IV4Q6RLN.js} +101 -61
- package/dist/{share-YIFFV4NQ.js → share-S5BZQC5I.js} +15 -8
- package/dist/{skills-2V6RA3OQ.js → skills-LQEKRDTN.js} +34 -14
- package/dist/{skills-eval-S2TVJO4F.js → skills-eval-3DC4HEWS.js} +70 -34
- package/dist/steer-GGWFUJUD.js +77 -0
- package/dist/{targets-TYXLPB23.js → targets-C4SSGQOB.js} +43 -27
- package/dist/terminal-lease-IT5JW2NR.js +395 -0
- package/dist/{trace-GGOJ6Q6Z.js → trace-PNCASAXC.js} +41 -16
- package/dist/{chunk-N6F52NLF.js → tree-sitter-HGKH6LG4.js} +28 -2306
- package/dist/{uninstall-LLLT4F4W.js → uninstall-FZCQCDKC.js} +10 -5
- package/dist/{upgrade-33G2LMM5.js → upgrade-7TT7SQ3G.js} +45 -25
- package/dist/{usage-ZAFSXKKG.js → usage-GV4PKT3M.js} +62 -31
- package/dist/verify-G6V4D2G7.js +716 -0
- package/dist/web-fetch-2YHJ3KTG.js +638 -0
- package/dist/{wiki-generate-NUQCVOQ3.js → wiki-generate-DQF6Z66B.js} +74 -34
- package/dist/worker/entry.js +221 -36
- package/dist/workspace-G4ZWUIPR.js +22 -0
- package/docs/README.md +22 -17
- package/docs/acp.md +168 -16
- package/docs/alcf-provider.md +1 -1
- package/docs/architecture.md +136 -7
- package/docs/artifact-versions.md +1 -1
- package/docs/built-in-agents.md +1 -1
- package/docs/capacity-and-scheduling.md +1 -1
- package/docs/commands-and-modes.md +114 -71
- package/docs/config-knobs-audit.md +1 -3
- package/docs/configuration-and-targets.md +174 -46
- package/docs/context-engine.md +29 -6
- package/docs/development-pipeline.md +26 -1
- package/docs/dispatch-architecture-rationale.md +1 -1
- package/docs/documentation-coverage.md +2 -2
- package/docs/documentation-guide.md +1 -1
- package/docs/environment-variables.md +13 -5
- package/docs/eval-runner.md +1 -1
- package/docs/evals-internal.md +1 -1
- package/docs/evidence-and-memory.md +6 -2
- package/docs/evolution.md +2 -2
- package/docs/exit-codes-and-output.md +15 -9
- package/docs/extensions-and-sharing.md +9 -9
- package/docs/fleet-dispatch.md +7 -5
- package/docs/git-commit-provenance.md +120 -0
- package/docs/glossary.md +1 -1
- package/docs/installation-and-lifecycle.md +34 -27
- package/docs/middleware-and-components.md +1 -1
- package/docs/model-catalog.md +45 -14
- package/docs/observability.md +8 -5
- package/docs/performance-methodology.md +491 -0
- package/docs/pi-boundary.md +72 -0
- package/docs/proactive-memory.md +3 -3
- package/docs/prompt-envelope-and-tools.md +24 -3
- package/docs/provider-adapter-cookbook.md +57 -4
- package/docs/release-cut-checklist.md +129 -115
- package/docs/safety-model.md +9 -5
- package/docs/scientific-validation.md +3 -3
- package/docs/session-lifecycle.md +55 -12
- package/docs/skills-marketplace.md +12 -8
- package/docs/time-conventions.md +1 -1
- package/docs/tool-usage.md +3 -3
- package/docs/trace-store.md +1 -1
- package/docs/troubleshooting.md +10 -7
- package/docs/tui-design.md +47 -10
- package/docs/worker-dispatch-mechanics.md +1 -1
- package/package.json +19 -22
- package/skills/coding/ast-grep/SKILL.md +136 -0
- package/skills/coding/ast-grep/evals.md +56 -0
- package/skills/coding/ast-grep/references/rule_reference.md +297 -0
- package/skills/coding/coding-standards/SKILL.md +113 -0
- package/skills/coding/coding-standards/evals.md +34 -0
- package/skills/coding/prototype/SKILL.md +86 -0
- package/skills/coding/prototype/evals.md +42 -0
- package/skills/coding/prototype/references/LOGIC.md +67 -0
- package/skills/coding/prototype/references/UI.md +112 -0
- package/skills/coding/tdd/SKILL.md +101 -0
- package/skills/coding/tdd/evals.md +41 -0
- package/skills/coding/tdd/references/mocking.md +59 -0
- package/skills/coding/tdd/references/tests.md +77 -0
- package/skills/context/context-handoff/SKILL.md +126 -0
- package/skills/context/context-handoff/evals.md +57 -0
- package/skills/context/context-handoff/scripts/new-handoff.sh +26 -0
- package/skills/context/context-prime/SKILL.md +95 -0
- package/skills/context/context-prime/evals.md +54 -0
- package/skills/meta/clio-dev/SKILL.md +91 -0
- package/skills/meta/clio-dev/evals.md +45 -0
- package/skills/meta/clio-test/SKILL.md +130 -0
- package/skills/meta/clio-test/evals.md +43 -0
- package/skills/meta/clio-test/references/harness.md +97 -0
- package/skills/meta/clio-test/references/test-map.md +59 -0
- package/skills/meta/credentials/SKILL.md +125 -0
- package/skills/meta/credentials/evals.md +104 -0
- package/skills/meta/find-skills/SKILL.md +72 -0
- package/skills/meta/find-skills/evals.md +47 -0
- package/skills/meta/herdr/SKILL.md +127 -0
- package/skills/meta/herdr/evals.md +38 -0
- package/skills/meta/skill-craft/SKILL.md +102 -0
- package/skills/meta/skill-craft/evals.md +41 -0
- package/skills/planning/architecture/SKILL.md +129 -0
- package/skills/planning/architecture/evals.md +36 -0
- package/skills/planning/backlog/SKILL.md +90 -0
- package/skills/planning/backlog/evals.md +43 -0
- package/skills/planning/prd/SKILL.md +82 -0
- package/skills/planning/prd/evals.md +49 -0
- package/skills/planning/product-intent/SKILL.md +112 -0
- package/skills/planning/product-intent/evals.md +36 -0
- package/skills/planning/tech-spec/SKILL.md +115 -0
- package/skills/planning/tech-spec/evals.md +47 -0
- package/skills/registry.yaml +136 -0
- package/skills/research/arxiv-literature/SKILL.md +104 -0
- package/skills/research/arxiv-literature/evals.md +58 -0
- package/skills/research/experiment-protocol/SKILL.md +122 -0
- package/skills/research/experiment-protocol/evals.md +91 -0
- package/skills/research/scientific-debugging/SKILL.md +119 -0
- package/skills/research/scientific-debugging/evals.md +138 -0
- package/skills/research/scientific-modernization/SKILL.md +138 -0
- package/skills/research/scientific-modernization/evals.md +84 -0
- package/skills/workflow/design-council/SKILL.md +139 -0
- package/skills/workflow/design-council/evals.md +97 -0
- package/skills/workflow/grill-me/SKILL.md +186 -0
- package/skills/workflow/grill-me/evals.md +78 -0
- package/skills/workflow/workflow-distiller/SKILL.md +136 -0
- package/skills/workflow/workflow-distiller/evals.md +107 -0
- package/src/cli/acp.ts +31 -4
- package/src/cli/clio.ts +68 -6
- package/src/cli/config-inspect.ts +28 -22
- package/src/cli/configure.ts +47 -9
- package/src/cli/context-clear.ts +2 -2
- package/src/cli/context-index.ts +21 -23
- package/src/cli/context.ts +13 -8
- package/src/cli/default-target.ts +9 -17
- package/src/cli/docs.ts +11 -5
- package/src/cli/evidence.ts +4 -1
- package/src/cli/extensions.ts +10 -1
- package/src/cli/fleet.ts +47 -6
- package/src/cli/index.ts +55 -26
- package/src/cli/memory.ts +3 -1
- package/src/cli/models.ts +1 -1
- package/src/cli/modes/json-stream.ts +37 -1
- package/src/cli/modes/print.ts +24 -9
- package/src/cli/run.ts +2 -2
- package/src/cli/skills-eval.ts +23 -8
- package/src/cli/skills.ts +19 -4
- package/src/cli/targets.ts +4 -0
- package/src/cli/text-layout.ts +15 -5
- package/src/cli/trace.ts +62 -14
- package/src/cli/upgrade.ts +18 -2
- package/src/cli/usage.ts +10 -3
- package/src/cli/wiki-generate.ts +2 -1
- package/src/core/agent-environment.ts +7 -0
- package/src/core/bash-exec.ts +72 -1
- package/src/core/boot-trace.ts +9 -4
- package/src/core/bus-events.ts +20 -4
- package/src/core/commit-attribution.ts +157 -0
- package/src/core/compile-cache.ts +159 -0
- package/src/core/config.ts +131 -2
- package/src/core/defaults.ts +39 -5
- package/src/core/domain-loader.ts +12 -5
- package/src/core/git-commit-attribution.ts +362 -0
- package/src/core/incomplete-installation.ts +45 -0
- package/src/core/response-schema.ts +1 -1
- package/src/core/safe-exec.ts +13 -1
- package/src/core/settings-layers.ts +155 -21
- package/src/core/skill-activation.ts +1 -1
- package/src/core/startup-timer.ts +3 -3
- package/src/core/state-file-lock.ts +13 -1
- package/src/core/termination.ts +78 -5
- package/src/domains/config/classify.ts +15 -3
- package/src/domains/config/extension.ts +19 -13
- package/src/domains/config/index.ts +10 -0
- package/src/domains/config/keybindings.ts +42 -6
- package/src/domains/context/bootstrap-prompt.ts +1 -1
- package/src/domains/context/bootstrap.ts +111 -18
- package/src/domains/context/clear.ts +16 -11
- package/src/domains/context/clio-md.ts +111 -9
- package/src/domains/context/codewiki/artifact.ts +400 -0
- package/src/domains/context/codewiki/build-worker-protocol.ts +24 -0
- package/src/domains/context/codewiki/build-worker.ts +54 -0
- package/src/domains/context/codewiki/coordinator.ts +182 -0
- package/src/domains/context/codewiki/indexer.ts +59 -144
- package/src/domains/context/codewiki/paths.ts +67 -0
- package/src/domains/context/codewiki/schema.ts +80 -0
- package/src/domains/context/codewiki/tree-sitter.ts +1 -1
- package/src/domains/context/contract.ts +11 -5
- package/src/domains/context/extension.ts +94 -143
- package/src/domains/context/fingerprint.ts +3 -1
- package/src/domains/context/index.ts +12 -22
- package/src/domains/context/project-metadata.ts +19 -0
- package/src/domains/context/prompt-context.ts +9 -10
- package/src/domains/context/refresh.ts +29 -21
- package/src/domains/context/runtime.ts +17 -0
- package/src/domains/context/wiki/generate.ts +39 -34
- package/src/domains/context/wiki/plan.ts +1 -1
- package/src/domains/context/wiki/prompts.ts +21 -8
- package/src/domains/dispatch/code-step.ts +20 -1
- package/src/domains/dispatch/extension.ts +158 -21
- package/src/domains/dispatch/failure-classification.ts +6 -0
- package/src/domains/dispatch/fleet-commit-attribution.ts +56 -0
- package/src/domains/dispatch/orphan-recovery.ts +50 -8
- package/src/domains/dispatch/receipt-integrity.ts +5 -0
- package/src/domains/dispatch/state.ts +31 -6
- package/src/domains/dispatch/transport.ts +2 -1
- package/src/domains/dispatch/types.ts +14 -0
- package/src/domains/dispatch/worker-spawn.ts +21 -2
- package/src/domains/eval/metrics/context.ts +1 -1
- package/src/domains/eval/types.ts +0 -1
- package/src/domains/evidence/build.ts +41 -1
- package/src/domains/lifecycle/migrations/2026-08-18-lmstudio-runtime-id.ts +52 -0
- package/src/domains/lifecycle/migrations/index.ts +24 -4
- package/src/domains/middleware/hooks-io.ts +12 -0
- package/src/domains/middleware/skills-reminder.ts +30 -15
- package/src/domains/prompts/compiler.ts +142 -84
- package/src/domains/prompts/contract.ts +18 -2
- package/src/domains/prompts/extension.ts +39 -7
- package/src/domains/prompts/fragment-loader.ts +0 -1
- package/src/domains/prompts/fragments/identity/clio.md +2 -4
- package/src/domains/prompts/fragments/identity/docs-routing.md +10 -0
- package/src/domains/prompts/fragments/identity/self-awareness.md +1 -45
- package/src/domains/prompts/fragments/operating/contract.md +4 -50
- package/src/domains/prompts/fragments/operating/delegation.md +42 -0
- package/src/domains/prompts/fragments/operating/skills.md +26 -0
- package/src/domains/prompts/fragments/operating/worker.md +16 -0
- package/src/domains/prompts/fragments/safety/auto-edit.md +5 -5
- package/src/domains/prompts/fragments/safety/full-auto.md +3 -3
- package/src/domains/prompts/fragments/safety/read-only.md +4 -4
- package/src/domains/prompts/fragments/safety/suggest.md +2 -2
- package/src/domains/prompts/fragments/wiki/page.md +10 -0
- package/src/domains/prompts/fragments/wiki/plan.md +10 -0
- package/src/domains/prompts/preload.ts +3 -3
- package/src/domains/providers/auth/api-key.ts +1 -1
- package/src/domains/providers/auth/backend-file.ts +20 -10
- package/src/domains/providers/auth/backend-memory.ts +59 -4
- package/src/domains/providers/auth/boot-status.ts +65 -0
- package/src/domains/providers/auth/oauth.ts +2 -1
- package/src/domains/providers/auth/storage.ts +97 -38
- package/src/domains/providers/capabilities.ts +12 -4
- package/src/domains/providers/contract.ts +15 -4
- package/src/domains/providers/extension.ts +18 -6
- package/src/domains/providers/model-runtime-capabilities.ts +15 -4
- package/src/domains/providers/models/local-models/clio-local-coding-targets.yaml +118 -35
- package/src/domains/providers/plugins.ts +5 -3
- package/src/domains/providers/probe/fingerprint.ts +25 -5
- package/src/domains/providers/registry.ts +31 -10
- package/src/domains/providers/runtimes/boot-manifest.ts +55 -0
- package/src/domains/providers/runtimes/builtins.ts +2 -2
- package/src/domains/providers/runtimes/common/lmstudio-http.ts +423 -0
- package/src/domains/providers/runtimes/common/local-synth.ts +6 -7
- package/src/domains/providers/runtimes/local-native/lmstudio.ts +241 -0
- package/src/domains/providers/support.ts +6 -3
- package/src/domains/providers/types/local-model-quirks.ts +7 -9
- package/src/domains/providers/types/runtime-descriptor.ts +12 -1
- package/src/domains/providers/types/target-descriptor.ts +22 -0
- package/src/domains/resources/contract.ts +0 -1
- package/src/domains/resources/extension.ts +1 -3
- package/src/domains/resources/loader.ts +3 -4
- package/src/domains/resources/prompts/loader.ts +16 -2
- package/src/domains/resources/prompts/substitute.ts +1 -65
- package/src/domains/resources/skills/content-hash.ts +2 -0
- package/src/domains/resources/skills/install.ts +17 -0
- package/src/domains/resources/skills/loader.ts +17 -10
- package/src/domains/resources/skills/marketplace.ts +55 -9
- package/src/domains/safety/action-classifier.ts +4 -2
- package/src/domains/safety/audit.ts +8 -2
- package/src/domains/safety/extension.ts +1 -1
- package/src/domains/session/compaction/branch-summary.ts +3 -2
- package/src/domains/session/compaction/cut-point.ts +2 -1
- package/src/domains/session/compaction/tokens.ts +2 -1
- package/src/domains/session/context-ledger.ts +14 -0
- package/src/domains/session/contract.ts +15 -0
- package/src/domains/session/decision-board.ts +190 -0
- package/src/domains/session/entries.ts +66 -3
- package/src/domains/session/extension.ts +93 -12
- package/src/domains/session/retry.ts +10 -18
- package/src/domains/session/session-artifacts.ts +107 -0
- package/src/domains/session/task-board.ts +207 -13
- package/src/domains/session/tree/active-path.ts +44 -5
- package/src/domains/session/tree/fork.ts +26 -27
- package/src/domains/session/tree/preview.ts +2 -2
- package/src/domains/session/workspace/git-probe.ts +17 -11
- package/src/domains/user-tasks/store.ts +297 -0
- package/src/engine/acp/errors.ts +96 -0
- package/src/engine/acp/server.ts +1728 -146
- package/src/engine/acp/transport.ts +135 -14
- package/src/engine/acp/types.ts +26 -0
- package/src/engine/agent.ts +3 -3
- package/src/engine/ai.ts +32 -27
- package/src/engine/alcf-oauth.ts +26 -19
- package/src/engine/api-registry.ts +223 -0
- package/src/engine/apis/index.ts +3 -7
- package/src/engine/apis/llamacpp-residency.ts +49 -9
- package/src/engine/apis/lmstudio-residency.ts +5 -21
- package/src/engine/apis/lmstudio.ts +243 -0
- package/src/engine/apis/ollama-native.ts +24 -3
- package/src/engine/apis/openai-completions.ts +170 -91
- package/src/engine/apis/residency.ts +139 -3
- package/src/engine/apis/types.ts +16 -0
- package/src/engine/env-api-keys.ts +98 -0
- package/src/engine/gemma-channel-filter.ts +223 -0
- package/src/engine/instrumented-tui.ts +192 -0
- package/src/engine/messages.ts +14 -0
- package/src/engine/models.ts +42 -0
- package/src/engine/oauth.ts +16 -12
- package/src/engine/prompt-templates.ts +1 -0
- package/src/engine/provider-payload.ts +16 -59
- package/src/engine/strip-tokenizer-sentinels.ts +1 -1
- package/src/engine/truncate.ts +9 -0
- package/src/engine/tui.ts +17 -9
- package/src/engine/types.ts +3 -6
- package/src/engine/worker-runtime-capabilities.ts +5 -0
- package/src/engine/worker-runtime.ts +1 -1
- package/src/engine/worker-tools.ts +9 -4
- package/src/entry/boot-options.ts +50 -0
- package/src/entry/orchestrator.ts +288 -150
- package/src/interactive/application-controller.ts +89 -2
- package/src/interactive/chat-loop.ts +266 -41
- package/src/interactive/chat-panel.ts +173 -47
- package/src/interactive/chat-renderer.ts +262 -72
- package/src/interactive/clio-editor.ts +3 -8
- package/src/interactive/command-fallbacks.ts +2 -2
- package/src/interactive/context-overlay.ts +27 -1
- package/src/interactive/editor-submit.ts +228 -24
- package/src/interactive/export-html/ansi-to-html.ts +161 -0
- package/src/interactive/export-html/index.ts +51 -0
- package/src/interactive/export-html/template.ts +45 -0
- package/src/interactive/export-html/tool-renderer.ts +54 -0
- package/src/interactive/footer/dashboard.ts +4 -0
- package/src/interactive/footer/notifications.ts +1 -1
- package/src/interactive/footer/widgets.ts +20 -2
- package/src/interactive/footer-panel.ts +2 -2
- package/src/interactive/format-time.ts +14 -2
- package/src/interactive/interactive-application.ts +201 -17
- package/src/interactive/interactive-event-projection.ts +6 -1
- package/src/interactive/interactive-input-runtime.ts +50 -4
- package/src/interactive/interactive-presentation.ts +151 -19
- package/src/interactive/interactive-shell.ts +268 -14
- package/src/interactive/interactive-slash-runtime.ts +176 -114
- package/src/interactive/interactive-tickers.ts +38 -7
- package/src/interactive/keybinding-manager.ts +1 -1
- package/src/interactive/layout.ts +40 -3
- package/src/interactive/overlay-frame.ts +1 -1
- package/src/interactive/overlay-general-openers.ts +58 -1
- package/src/interactive/overlay-key-routing.ts +3 -0
- package/src/interactive/overlay-lifecycle.ts +13 -0
- package/src/interactive/overlay-permission-lifecycle.ts +2 -1
- package/src/interactive/overlay-session-lifecycle.ts +69 -12
- package/src/interactive/overlays/decisions.ts +300 -0
- package/src/interactive/overlays/help-reference.ts +15 -10
- package/src/interactive/overlays/model-selector.ts +34 -16
- package/src/interactive/overlays/session-selector.ts +18 -0
- package/src/interactive/overlays/settings.ts +105 -17
- package/src/interactive/overlays/skills-hub.ts +4 -4
- package/src/interactive/overlays/tree-selector.ts +41 -6
- package/src/interactive/render-trace.ts +499 -90
- package/src/interactive/renderers/compaction-summary.ts +2 -2
- package/src/interactive/renderers/diff.ts +115 -104
- package/src/interactive/renderers/mermaid.ts +53 -0
- package/src/interactive/renderers/tool-execution.ts +386 -133
- package/src/interactive/renderers/worker-entry.ts +20 -4
- package/src/interactive/session-switch-settlement.ts +10 -0
- package/src/interactive/slash-autocomplete.ts +6 -114
- package/src/interactive/slash-commands.ts +135 -47
- package/src/interactive/slash-spec.ts +9 -38
- package/src/interactive/status/controller.ts +5 -1
- package/src/interactive/stdout-backpressure.ts +99 -0
- package/src/interactive/stream-pacer.ts +530 -0
- package/src/interactive/stream-pacing-policy.ts +66 -0
- package/src/interactive/tasks-overlay.ts +368 -14
- package/src/interactive/terminal-lease.ts +485 -0
- package/src/interactive/theme/tokens.ts +1 -1
- package/src/interactive/turn-context.ts +4 -3
- package/src/interactive/turn-persistence.ts +30 -13
- package/src/interactive/turn-queues.ts +12 -0
- package/src/interactive/turn-recovery.ts +25 -8
- package/src/interactive/turn-runtime.ts +79 -12
- package/src/interactive/turn-state.ts +10 -0
- package/src/interactive/view/artifacts.ts +114 -4
- package/src/interactive/view/view-overlay.ts +3 -0
- package/src/interactive/welcome-dashboard.ts +17 -16
- package/src/interactive/worker-receipts.ts +52 -3
- package/src/interactive/worker-stream.ts +5 -1
- package/src/tools/agent-tools.ts +23 -3
- package/src/tools/artifact.ts +2 -2
- package/src/tools/ask-user.ts +23 -13
- package/src/tools/bash.ts +30 -2
- package/src/tools/bootstrap.ts +34 -431
- package/src/tools/builtin-tool-catalog.ts +265 -0
- package/src/tools/codewiki/code-nav-surface.ts +29 -0
- package/src/tools/codewiki/code-nav.ts +8 -22
- package/src/tools/codewiki/shared.ts +41 -38
- package/src/tools/context/docs-engine.ts +14 -3
- package/src/tools/context/index.ts +107 -28
- package/src/tools/context/surface.ts +19 -0
- package/src/tools/core-bootstrap.ts +168 -0
- package/src/tools/credential-present.ts +5 -5
- package/src/tools/dispatch-admission.ts +533 -0
- package/src/tools/dispatch-background.ts +54 -0
- package/src/tools/dispatch-event-text.ts +6 -0
- package/src/tools/dispatch-plan.ts +9 -4
- package/src/tools/dispatch-run-events.ts +238 -0
- package/src/tools/dispatch-runner.ts +2370 -0
- package/src/tools/dispatch-scout-admission.ts +295 -0
- package/src/tools/dispatch-types.ts +77 -0
- package/src/tools/dispatch.ts +67 -3161
- package/src/tools/find.ts +4 -2
- package/src/tools/grep.ts +2 -2
- package/src/tools/lazy-tool.ts +60 -0
- package/src/tools/ledger.ts +3 -3
- package/src/tools/monitor-surface.ts +36 -0
- package/src/tools/monitor.ts +2 -32
- package/src/tools/observers.ts +2 -2
- package/src/tools/registry.ts +39 -27
- package/src/tools/safe-exec.ts +2 -2
- package/src/tools/steer-surface.ts +17 -0
- package/src/tools/steer.ts +2 -13
- package/src/tools/tasks.ts +108 -11
- package/src/tools/truncate.ts +25 -184
- package/src/tools/verify/frontend.ts +3 -1
- package/src/tools/verify/index.ts +3 -38
- package/src/tools/verify/surface.ts +46 -0
- package/src/tools/web-fetch-surface.ts +23 -0
- package/src/tools/web-fetch.ts +2 -20
- package/src/tools/write.ts +7 -2
- package/src/worker/entry.ts +39 -2
- package/src/worker/spec-contract.ts +26 -5
- package/dist/chunk-7SS2CTV2.js +0 -61361
- package/dist/chunk-DKGKUHFA.js +0 -924
- package/dist/chunk-GEP36Y4X.js +0 -12796
- package/dist/chunk-XYWBQRDM.js +0 -137
- package/dist/clio-BZVGEUFJ.js +0 -58
- package/dist/configure-S7S6F6CL.js +0 -32
- package/docs/html/agents_blueprint.html +0 -936
- package/docs/html/alcf_blueprint.html +0 -324
- package/docs/html/architecture_blueprint.html +0 -850
- package/docs/html/commands_blueprint.html +0 -939
- package/docs/html/config_knobs_audit_blueprint.html +0 -178
- package/docs/html/configuration_blueprint.html +0 -1080
- package/docs/html/context_blueprint.html +0 -603
- package/docs/html/documentation_blueprint.html +0 -832
- package/docs/html/environment_blueprint.html +0 -404
- package/docs/html/eval_blueprint.html +0 -743
- package/docs/html/evals_internal_blueprint.html +0 -190
- package/docs/html/evolution_blueprint.html +0 -674
- package/docs/html/extensions_blueprint.html +0 -2065
- package/docs/html/fleet_dispatch_blueprint.html +0 -286
- package/docs/html/index.html +0 -919
- package/docs/html/lifecycle_blueprint.html +0 -723
- package/docs/html/memory_blueprint.html +0 -699
- package/docs/html/middleware_blueprint.html +0 -664
- package/docs/html/models_blueprint.html +0 -2366
- package/docs/html/observability_blueprint.html +0 -683
- package/docs/html/provider_adapter_blueprint.html +0 -245
- package/docs/html/safety_blueprint.html +0 -1386
- package/docs/html/shared.css +0 -571
- package/docs/html/shared.js +0 -143
- package/docs/html/skills_blueprint.html +0 -671
- package/docs/html/soak_blueprint.html +0 -182
- package/docs/html/tool_usage_blueprint.html +0 -350
- package/docs/html/tools_blueprint.html +0 -2249
- package/docs/html/trace_blueprint.html +0 -235
- package/docs/html/tui_design_blueprint.html +0 -374
- package/docs/html/validation_blueprint.html +0 -961
- package/docs/html/worker_dispatch_blueprint.html +0 -231
- package/src/core/release.ts +0 -2
- package/src/domains/providers/runtimes/common/lmstudio-logger.ts +0 -32
- package/src/domains/providers/runtimes/local-native/lmstudio-native.ts +0 -491
- package/src/engine/apis/lmstudio-native.ts +0 -1438
- package/src/engine/apis/thinking-replay.ts +0 -11
- package/src/tools/string-enum.ts +0 -15
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: workflow-distiller
|
|
3
|
+
description: Use when a workflow that just happened should become reusable, when the user says "make this a skill", "package what we just did", "turn this into a workflow", or when the same multi-step process has been repeated across sessions. Reconstructs the workflow from the session record, interviews, checks overlap with installed skills, gates on approval, then writes the SKILL.md following skill-craft. Not for authoring a skill from scratch with no prior workflow; write the SKILL.md directly following skill-craft. Not for distilling into an agent recipe; propose that as a follow-up when the workflow is dispatch-shaped.
|
|
4
|
+
version: 0.2.1
|
|
5
|
+
license: Apache-2.0
|
|
6
|
+
allowed-tools:
|
|
7
|
+
- read
|
|
8
|
+
- grep
|
|
9
|
+
- find
|
|
10
|
+
- ls
|
|
11
|
+
- context
|
|
12
|
+
- write
|
|
13
|
+
- ask_user
|
|
14
|
+
requires:
|
|
15
|
+
- skill:skill-craft
|
|
16
|
+
clio:
|
|
17
|
+
registry-id: iowarp/clio-coder
|
|
18
|
+
source-url: https://github.com/iowarp/clio-coder/tree/main/skills/workflow/workflow-distiller
|
|
19
|
+
audit: pass
|
|
20
|
+
provenance: designed
|
|
21
|
+
eval-status: smoke-checked
|
|
22
|
+
model-size: large
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
# Workflow Distiller
|
|
26
|
+
|
|
27
|
+
Turn a workflow that actually ran into a reusable skill. The distiller's
|
|
28
|
+
identity is runtime truth: it reconstructs what happened from the visible
|
|
29
|
+
session record, not from anyone's memory of it. Skip the ceremony when there
|
|
30
|
+
is no prior workflow; a from-scratch skill is a SKILL.md written directly,
|
|
31
|
+
following skill-craft. skill-craft also governs how every skill this
|
|
32
|
+
distiller produces is written: description, body, and pruning rules live
|
|
33
|
+
there, not here.
|
|
34
|
+
|
|
35
|
+
## Phase 1 - Reconstruct From Evidence
|
|
36
|
+
|
|
37
|
+
Before asking anything, list the concrete steps that visibly executed in this
|
|
38
|
+
session, in order: tools called, commands run, files touched, dispatches made,
|
|
39
|
+
skills activated. Cite the conversation record for each step. Anything the
|
|
40
|
+
user describes that did not visibly run is tagged `assumption` and becomes an
|
|
41
|
+
interview question. This grounding step is mandatory and comes first; when the
|
|
42
|
+
reconstruction and the user's memory disagree, the reconstruction wins and the
|
|
43
|
+
disagreement is worth a question.
|
|
44
|
+
|
|
45
|
+
## Phase 2 - Interview
|
|
46
|
+
|
|
47
|
+
Use `ask_user` with `mode: "single_question"`, one question per round, bounded
|
|
48
|
+
rounds (default 8, max 12), following the grill-me operating contract:
|
|
49
|
+
recommended answer first when options are natural, stop signals ("stop",
|
|
50
|
+
"enough", "later", cancel) respected immediately, answers translated into
|
|
51
|
+
compact decisions. Question bank, roots before leaves:
|
|
52
|
+
|
|
53
|
+
1. Confirm the reconstruction and resolve tagged assumptions.
|
|
54
|
+
2. Inputs and outputs: what varies between runs, what is fixed.
|
|
55
|
+
3. Recurrence: how often has this actually happened? A workflow that ran once
|
|
56
|
+
is usually not worth a skill; ask early and offer to stop.
|
|
57
|
+
4. Per-step rigidity: must-match versus any-reasonable-approach.
|
|
58
|
+
5. Failure behavior per step: ask the user, retry an alternative, or fail
|
|
59
|
+
loudly.
|
|
60
|
+
6. Scope cuts: what the skill should refuse to do.
|
|
61
|
+
7. Name (lowercase-hyphen).
|
|
62
|
+
|
|
63
|
+
## Phase 3 - Overlap Check
|
|
64
|
+
|
|
65
|
+
Call `context(scope="skills")` with no name to list installed skills. Judge
|
|
66
|
+
overlap per step, not per workflow: if an installed skill's triggers cover a
|
|
67
|
+
step, that step is referenced by name in the new skill body, never
|
|
68
|
+
reimplemented, with a one-line rationale for the dependency. A different end
|
|
69
|
+
goal does not excuse reimplementing a covered step. Record each reference as
|
|
70
|
+
a `requires: [skill:<name>]` entry in the generated skill's frontmatter in
|
|
71
|
+
Phase 5, so the loader warns when the dependency is missing.
|
|
72
|
+
|
|
73
|
+
## Phase 4 - Design Gate
|
|
74
|
+
|
|
75
|
+
Present a compact design summary and wait for explicit approval:
|
|
76
|
+
|
|
77
|
+
```markdown
|
|
78
|
+
## Skill Design - <name>
|
|
79
|
+
Description draft: <triggers only, third person>
|
|
80
|
+
Steps: <step, rigidity, on-failure> per line
|
|
81
|
+
References: <skill:<name>, why> or none
|
|
82
|
+
Scope: project | user (user only if the workflow crosses repositories)
|
|
83
|
+
Validation scenario: <prompt, expected observable behavior>
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
No skill file is written before the user approves. "Looks fine, but change X"
|
|
87
|
+
means revise and re-present.
|
|
88
|
+
|
|
89
|
+
## Phase 5 - Create
|
|
90
|
+
|
|
91
|
+
Write `SKILL.md` under `.clio-coder/skills/<approved-name>/`, following skill-craft
|
|
92
|
+
for the frontmatter contract, a triggers-only third-person description, and
|
|
93
|
+
the pruning pass, with `requires: [skill:<name>]` for every skill the overlap
|
|
94
|
+
check referenced. Confirm it loads with `clio-coder skills validate`. Scope
|
|
95
|
+
defaults to project; use the user skill store only when the user said the
|
|
96
|
+
workflow crosses repositories. Placeholders replace every session-specific
|
|
97
|
+
path, name, and value; distill the pattern, not the incident. Keep the
|
|
98
|
+
generated skill under 120 lines; reference instead of inlining. If
|
|
99
|
+
the session repeatedly dispatched the same worker pattern, also offer a recipe
|
|
100
|
+
sketch for the agents surface, but do not write recipe files.
|
|
101
|
+
|
|
102
|
+
## Phase 6 - Validate
|
|
103
|
+
|
|
104
|
+
Record one RED-GREEN scenario agreed with the user: the prompt, and the
|
|
105
|
+
observable behavior that distinguishes with-skill from without. Run it once if
|
|
106
|
+
cheap (a single small headless run); otherwise record it in the skill body's
|
|
107
|
+
example section as the standing validation obligation.
|
|
108
|
+
|
|
109
|
+
## Worked Example
|
|
110
|
+
|
|
111
|
+
Session: the user fetched a CSV export, normalized column names with a small
|
|
112
|
+
script, and verified row counts against the source, three sessions in a row.
|
|
113
|
+
|
|
114
|
+
1. Reconstruct: `bash curl ...` (ran), `write normalize.py` + `bash python3
|
|
115
|
+
normalize.py` (ran), `bash wc -l` comparison (ran). User also mentions "and
|
|
116
|
+
I always spot-check five rows" - not visible this session, tagged
|
|
117
|
+
assumption.
|
|
118
|
+
2. Interview: confirms reconstruction; spot-check confirmed as a real step;
|
|
119
|
+
recurrence "weekly"; normalization must-match, fetch any-approach; failure
|
|
120
|
+
on row-count mismatch must fail loudly; name `csv-ingest`.
|
|
121
|
+
3. Overlap: the `context(scope="skills")` listing shows no fetch or CSV skill
|
|
122
|
+
installed; no references.
|
|
123
|
+
4. Gate: summary presented; user approves after tightening the description.
|
|
124
|
+
5. Create: write `.clio-coder/skills/csv-ingest/SKILL.md`, placeholders for the
|
|
125
|
+
export URL and column map; `clio-coder skills validate` passes.
|
|
126
|
+
6. Validate: scenario "ingest this month's export" must show fetch,
|
|
127
|
+
normalize, count-verify, spot-check in that order; recorded in the body.
|
|
128
|
+
|
|
129
|
+
## Red Flags
|
|
130
|
+
|
|
131
|
+
- Writing any skill before the design gate is approved.
|
|
132
|
+
- A reconstruction that lists steps nothing in the session shows.
|
|
133
|
+
- Reimplementing an installed skill's job instead of referencing it.
|
|
134
|
+
- Session-specific paths or values surviving into the generated skill.
|
|
135
|
+
- Batching interview questions or ignoring a stop signal.
|
|
136
|
+
- Distilling a one-off without asking about recurrence.
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Evals - workflow-distiller
|
|
2
|
+
|
|
3
|
+
Baseline scenarios (run a subagent WITHOUT the skill to capture the gap, then
|
|
4
|
+
WITH the skill to confirm it closes). Rubric is pass/fail per bullet.
|
|
5
|
+
|
|
6
|
+
## S1 - "make what we just did a skill"
|
|
7
|
+
|
|
8
|
+
Setup: Make what we just did a skill. For the record, this session we ran
|
|
9
|
+
the release-notes workflow end to end: pulled the merged PR titles since
|
|
10
|
+
the last tag with gh, grouped them by conventional-commit type, rewrote
|
|
11
|
+
each group into user-facing bullets, and verified every PR number in the
|
|
12
|
+
draft against the gh list before saving docs/release-notes.md. I also
|
|
13
|
+
mentioned we sometimes ping the release channel afterwards, but we did not
|
|
14
|
+
do that here.
|
|
15
|
+
|
|
16
|
+
Expected:
|
|
17
|
+
|
|
18
|
+
- Reconstructs the executed steps from the session record, in order, before
|
|
19
|
+
asking any question; unobserved steps the user mentions are tagged as
|
|
20
|
+
assumptions.
|
|
21
|
+
- Interviews via `ask_user` with `mode: "single_question"`, one question per
|
|
22
|
+
round, bounded rounds.
|
|
23
|
+
- Lists installed skills via `context(scope="skills")` with no name before
|
|
24
|
+
designing.
|
|
25
|
+
- Presents a compact design summary and waits for explicit approval.
|
|
26
|
+
- Writes the SKILL.md only after approval, with session-specific values
|
|
27
|
+
replaced by placeholders.
|
|
28
|
+
- Records a RED-GREEN validation scenario.
|
|
29
|
+
|
|
30
|
+
## S2 - overlap with an installed skill
|
|
31
|
+
|
|
32
|
+
Setup: the workflow's retrieval step is already covered by an installed skill
|
|
33
|
+
(for example arxiv-literature for paper retrieval).
|
|
34
|
+
|
|
35
|
+
Expected:
|
|
36
|
+
|
|
37
|
+
- The overlap check finds the installed skill.
|
|
38
|
+
- The generated skill references it by name instead of reimplementing the
|
|
39
|
+
step, with a one-line rationale in the body.
|
|
40
|
+
- The generated frontmatter carries `requires: [skill:<name>]` so the loader's
|
|
41
|
+
unmet-dependency warning arms when the referenced skill is absent.
|
|
42
|
+
|
|
43
|
+
## S3 - no recurrence
|
|
44
|
+
|
|
45
|
+
Setup: mid-interview the user admits the workflow has only ever run once and
|
|
46
|
+
may not recur.
|
|
47
|
+
|
|
48
|
+
Expected:
|
|
49
|
+
|
|
50
|
+
- Questions whether distillation is worth it and offers to stop.
|
|
51
|
+
- Does not press on to create a skill for a one-off by default.
|
|
52
|
+
|
|
53
|
+
## S4 - anti-trigger: brand-new skill
|
|
54
|
+
|
|
55
|
+
Setup: user asks for a new skill for something never done in any session.
|
|
56
|
+
|
|
57
|
+
Expected:
|
|
58
|
+
|
|
59
|
+
- Skips the distiller ceremony and points at writing the SKILL.md directly,
|
|
60
|
+
following skill-craft.
|
|
61
|
+
|
|
62
|
+
## Baseline failure modes to watch for (RED)
|
|
63
|
+
|
|
64
|
+
- Writes a vague skill immediately from the user's description, no grounding
|
|
65
|
+
in what actually ran.
|
|
66
|
+
- No overlap check; reimplements an installed skill's behavior.
|
|
67
|
+
- No approval gate; the skill file appears before the user saw a design.
|
|
68
|
+
- Session-specific paths, URLs, and values baked into the skill body.
|
|
69
|
+
- Multi-question interviewing or an unbounded question stream.
|
|
70
|
+
|
|
71
|
+
## Observed results
|
|
72
|
+
|
|
73
|
+
Runs 2026-07-02, headless `clio-coder run --skill`. `ask_user` is not registered in
|
|
74
|
+
headless runs, so interviews were exercised with pre-supplied decisions in the
|
|
75
|
+
prompt; the phases still had to run in order.
|
|
76
|
+
|
|
77
|
+
- Six-phase walk (CSV header normalization fixture): the workflow visibly ran
|
|
78
|
+
(write plus execute normalize.py, row-count check), Phase 1 cited exactly
|
|
79
|
+
those steps, Phase 2 applied the pre-supplied decisions question by
|
|
80
|
+
question, Phase 3 listed installed skills with no name, Phase 4 presented
|
|
81
|
+
the summary and stopped for approval even though pre-approval was offered
|
|
82
|
+
(the strict reading of the gate), and after an explicit approval turn Phase
|
|
83
|
+
5's skill-creation call landed a loadable project skill that `clio-coder skills
|
|
84
|
+
inspect` resolves, with placeholders instead of session paths. Phase 6
|
|
85
|
+
recorded the validation scenario in the body.
|
|
86
|
+
- S2 RED (no distiller, arxiv-literature installed): the baseline created the
|
|
87
|
+
skill immediately with no overlap check against the installed-skill
|
|
88
|
+
listing, no gate, and a body that reimplements the fetch step. Gap
|
|
89
|
+
confirmed.
|
|
90
|
+
- S2 GREEN: with the shipped per-step overlap wording, the design references
|
|
91
|
+
`arxiv-literature` with a rationale instead of reimplementing retrieval.
|
|
92
|
+
Two earlier drafts missed this: workflow-level overlap judgment and a
|
|
93
|
+
fixture prompt that prescribed the fetch mechanism both masked the
|
|
94
|
+
behavior; the wording now says a different end goal does not excuse
|
|
95
|
+
reimplementing a covered step. At the time of that run the skill-creation
|
|
96
|
+
tool could not emit `requires` frontmatter, so the skill handed the user
|
|
97
|
+
the line to add; `requires: [skill:arxiv-literature]` on the generated
|
|
98
|
+
skill was verified to produce the loader's "requires skill ... which is not
|
|
99
|
+
available" warning when the dependency is absent. 2026-07-02: skill
|
|
100
|
+
creation moved to writing SKILL.md directly (the artifact tool's skill kind
|
|
101
|
+
was removed); Phase 5 now writes the `requires` entries into the
|
|
102
|
+
frontmatter itself.
|
|
103
|
+
|
|
104
|
+
## Smoke record (2026-08-13)
|
|
105
|
+
|
|
106
|
+
One representative scenario via `clio-coder skills eval` against Nemo-3.5-Lightning
|
|
107
|
+
(30B local, llamacpp on mini), full-auto sandbox. PASS. Inline session-trace setup engaged; judge 5/6.
|
package/src/cli/acp.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { realpathSync } from "node:fs";
|
|
1
2
|
import path from "node:path";
|
|
3
|
+
import { MAX_TIMER_DELAY_MS } from "../core/timers.js";
|
|
2
4
|
import { runClioCommand } from "./clio.js";
|
|
3
5
|
import { restoreStdout, takeOverStdout, writeRawStdout } from "./output-guard.js";
|
|
4
6
|
import { printError } from "./shared.js";
|
|
@@ -9,7 +11,7 @@ Serve Clio Coder as an Agent Client Protocol v1 agent over stdio.
|
|
|
9
11
|
|
|
10
12
|
--cwd PATH Workspace root the server boots in and opens sessions at.
|
|
11
13
|
--permission-timeout MS How long a mediated permission request may wait for the
|
|
12
|
-
client before
|
|
14
|
+
client before the prompt expires. Defaults to the configured
|
|
13
15
|
delegation.defaults.permissionTimeoutMs.
|
|
14
16
|
|
|
15
17
|
This command is intended for ACP frontends to spawn. Interactive delegation remains
|
|
@@ -35,7 +37,9 @@ function parseAcpFlags(args: ReadonlyArray<string>): AcpFlags | string {
|
|
|
35
37
|
}
|
|
36
38
|
if (arg === "--permission-timeout") {
|
|
37
39
|
const ms = value === undefined ? Number.NaN : Number(value);
|
|
38
|
-
if (!Number.isInteger(ms) || ms <= 0
|
|
40
|
+
if (!Number.isInteger(ms) || ms <= 0 || ms > MAX_TIMER_DELAY_MS) {
|
|
41
|
+
return `--permission-timeout needs a whole number from 1 to ${MAX_TIMER_DELAY_MS} milliseconds`;
|
|
42
|
+
}
|
|
39
43
|
flags.permissionTimeoutMs = ms;
|
|
40
44
|
index += 1;
|
|
41
45
|
continue;
|
|
@@ -45,6 +49,19 @@ function parseAcpFlags(args: ReadonlyArray<string>): AcpFlags | string {
|
|
|
45
49
|
return flags;
|
|
46
50
|
}
|
|
47
51
|
|
|
52
|
+
/**
|
|
53
|
+
* The workspace root the server is pinned to, resolved and then canonicalized
|
|
54
|
+
* through the filesystem. A symlinked launch path is the reason: `process.cwd()`
|
|
55
|
+
* reports the physical path after chdir, so a session request carrying the same
|
|
56
|
+
* string the process was launched with used to be refused as a different
|
|
57
|
+
* workspace. One canonical form on both sides removes that class of mismatch.
|
|
58
|
+
* Throws when the path cannot be resolved, which the caller reports as an
|
|
59
|
+
* unusable `--cwd`.
|
|
60
|
+
*/
|
|
61
|
+
export function resolveAcpCwd(value: string): string {
|
|
62
|
+
return realpathSync(path.resolve(value));
|
|
63
|
+
}
|
|
64
|
+
|
|
48
65
|
export async function runAcpCommand(
|
|
49
66
|
args: ReadonlyArray<string>,
|
|
50
67
|
options: { apiKey?: string; noContextFiles?: boolean; noSkills?: boolean; skillPaths?: ReadonlyArray<string> } = {},
|
|
@@ -62,9 +79,11 @@ export async function runAcpCommand(
|
|
|
62
79
|
// Boot has to happen in the workspace the sessions will use: settings
|
|
63
80
|
// resolution, project context, and the session ledger all read process.cwd(),
|
|
64
81
|
// and the server refuses a session whose cwd is not the one it booted in.
|
|
82
|
+
// The path is canonicalized before the chdir so the launch root and every
|
|
83
|
+
// later comparison against process.cwd() speak the same physical path.
|
|
65
84
|
if (flags.cwd !== undefined) {
|
|
66
85
|
try {
|
|
67
|
-
process.chdir(flags.cwd);
|
|
86
|
+
process.chdir(resolveAcpCwd(flags.cwd));
|
|
68
87
|
} catch {
|
|
69
88
|
printError(`--cwd is not a directory this process can enter: ${flags.cwd}`);
|
|
70
89
|
return 2;
|
|
@@ -78,7 +97,15 @@ export async function runAcpCommand(
|
|
|
78
97
|
...(options.noSkills ? { noSkills: true } : {}),
|
|
79
98
|
...(options.skillPaths && options.skillPaths.length > 0 ? { skillPaths: options.skillPaths } : {}),
|
|
80
99
|
acp: {
|
|
81
|
-
|
|
100
|
+
// Stdout is JSON-RPC only. An unclassified handler failure answers the
|
|
101
|
+
// client with fixed host text; the original message, which nothing in
|
|
102
|
+
// this process authored, goes to the stderr tail.
|
|
103
|
+
transportOptions: {
|
|
104
|
+
write: writeRawStdout,
|
|
105
|
+
diagnostics: (line) => {
|
|
106
|
+
process.stderr.write(`[clio:acp] ${line}\n`);
|
|
107
|
+
},
|
|
108
|
+
},
|
|
82
109
|
...(flags.permissionTimeoutMs === undefined ? {} : { permissionTimeoutMs: flags.permissionTimeoutMs }),
|
|
83
110
|
},
|
|
84
111
|
});
|
package/src/cli/clio.ts
CHANGED
|
@@ -1,8 +1,18 @@
|
|
|
1
|
+
import { formatBootTrace } from "../core/boot-trace.js";
|
|
1
2
|
import { initializeClioHome } from "../core/init.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
3
|
+
import { readLayeredSettings, readStrictLayeredSettings } from "../core/settings-layers.js";
|
|
4
|
+
import type { BootOptions } from "../entry/boot-options.js";
|
|
4
5
|
import { classifyDefaultTarget, describeVerdict } from "./default-target.js";
|
|
5
6
|
|
|
7
|
+
/** Headless and ACP keep their established non-TUI transports even when an
|
|
8
|
+
* embedding process leaves the interactive marker in the environment. */
|
|
9
|
+
export function terminalLeaseEligible(
|
|
10
|
+
options: Pick<BootOptions, "headless" | "acp">,
|
|
11
|
+
env: Readonly<Record<string, string | undefined>> = process.env,
|
|
12
|
+
): boolean {
|
|
13
|
+
return !options.headless && !options.acp && env.CLIO_CODER_INTERACTIVE === "1";
|
|
14
|
+
}
|
|
15
|
+
|
|
6
16
|
export async function runClioCommand(options: BootOptions = {}): Promise<number> {
|
|
7
17
|
// Bare `clio` (no subcommand) boots interactive mode implicitly, but only
|
|
8
18
|
// when stdin is a real TTY. Piped or /dev/null stdin (used by verify.ts,
|
|
@@ -12,9 +22,14 @@ export async function runClioCommand(options: BootOptions = {}): Promise<number>
|
|
|
12
22
|
if (!options.headless && !options.acp && process.env.CLIO_CODER_INTERACTIVE === undefined && process.stdin.isTTY) {
|
|
13
23
|
process.env.CLIO_CODER_INTERACTIVE = "1";
|
|
14
24
|
}
|
|
15
|
-
|
|
25
|
+
let startupSettings: import("../core/config.js").ClioSettings | undefined;
|
|
26
|
+
if (terminalLeaseEligible(options)) {
|
|
16
27
|
initializeClioHome();
|
|
17
|
-
|
|
28
|
+
// The user file remains a strict gate. Project layers retain their
|
|
29
|
+
// established best-effort diagnostics, but every subsequent boot phase
|
|
30
|
+
// consumes this same effective snapshot.
|
|
31
|
+
startupSettings = readStrictLayeredSettings(process.cwd()).settings;
|
|
32
|
+
const verdict = classifyDefaultTarget(startupSettings);
|
|
18
33
|
if (verdict.kind === "missing-credential") {
|
|
19
34
|
// Diagnosis without a detour. The session continues, because whether
|
|
20
35
|
// the credential is actually required is the endpoint's answer to
|
|
@@ -25,10 +40,57 @@ export async function runClioCommand(options: BootOptions = {}): Promise<number>
|
|
|
25
40
|
);
|
|
26
41
|
} else if (verdict.kind !== "usable") {
|
|
27
42
|
process.stdout.write(`${describeVerdict(verdict)} Starting \`clio-coder configure\`.\n`);
|
|
43
|
+
const { runConfigureCommand } = await import("./configure.js");
|
|
28
44
|
const configured = await runConfigureCommand([]);
|
|
29
45
|
if (configured !== 0) return configured;
|
|
46
|
+
startupSettings = readStrictLayeredSettings(process.cwd()).settings;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
let terminalLease: import("../interactive/terminal-lease.js").TerminalLease | undefined;
|
|
50
|
+
try {
|
|
51
|
+
if (terminalLeaseEligible(options)) {
|
|
52
|
+
const { createProcessTerminalLease, instantShellEnabled } = await import("../interactive/terminal-lease.js");
|
|
53
|
+
if (instantShellEnabled()) {
|
|
54
|
+
let stage0FrameId: number | null = null;
|
|
55
|
+
terminalLease = createProcessTerminalLease({
|
|
56
|
+
settings: startupSettings ?? readLayeredSettings(process.cwd()).settings,
|
|
57
|
+
onStage0Commit: (frameId) => {
|
|
58
|
+
stage0FrameId = frameId;
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
if (stage0FrameId !== null) {
|
|
62
|
+
const line = formatBootTrace("Stage 0 shell commit", `frameId=${stage0FrameId}`);
|
|
63
|
+
if (line) terminalLease.deferDiagnostic("stderr", line);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// Deterministic built-PTY interleaving seam. It is unavailable outside
|
|
68
|
+
// NODE_ENV=test and bounded even under a malformed value.
|
|
69
|
+
if (terminalLease && process.env.NODE_ENV === "test") {
|
|
70
|
+
const requestedDelay = Number.parseInt(process.env.CLIO_CODER_TEST_STAGE1_DELAY_MS ?? "0", 10);
|
|
71
|
+
const delayMs = Number.isFinite(requestedDelay) ? Math.max(0, Math.min(5_000, requestedDelay)) : 0;
|
|
72
|
+
if (delayMs > 0) await new Promise<void>((resolve) => setTimeout(resolve, delayMs));
|
|
73
|
+
if (process.env.CLIO_CODER_TEST_STAGE1_FAIL === "1") {
|
|
74
|
+
throw new Error("injected Stage 1 hydration failure");
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const { bootOrchestrator } = await import("../entry/orchestrator.js");
|
|
78
|
+
const result = await bootOrchestrator({
|
|
79
|
+
...options,
|
|
80
|
+
...(startupSettings ? { startupSettings } : {}),
|
|
81
|
+
...(terminalLease ? { terminalLease } : {}),
|
|
82
|
+
});
|
|
83
|
+
return result.exitCode;
|
|
84
|
+
} catch (error) {
|
|
85
|
+
try {
|
|
86
|
+
await terminalLease?.fail();
|
|
87
|
+
} catch (cleanupError) {
|
|
88
|
+
// Preserve the established boot failure as the primary error. The lease
|
|
89
|
+
// has already attempted every restoration step and reached `closed`.
|
|
90
|
+
process.stderr.write(
|
|
91
|
+
`Clio Coder: terminal cleanup also failed: ${cleanupError instanceof Error ? cleanupError.message : String(cleanupError)}\n`,
|
|
92
|
+
);
|
|
30
93
|
}
|
|
94
|
+
throw error;
|
|
31
95
|
}
|
|
32
|
-
const result = await bootOrchestrator(options);
|
|
33
|
-
return result.exitCode;
|
|
34
96
|
}
|
|
@@ -12,12 +12,13 @@
|
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
14
|
import { existsSync, readFileSync } from "node:fs";
|
|
15
|
-
import {
|
|
15
|
+
import { basename } from "node:path";
|
|
16
16
|
import type { ClioSettings } from "../core/config.js";
|
|
17
17
|
import { readLayeredSettings, type SettingsOrigin, settingsSourceFor } from "../core/settings-layers.js";
|
|
18
18
|
import { clioDataDir } from "../core/xdg.js";
|
|
19
19
|
import {
|
|
20
20
|
loadOperatorProfile,
|
|
21
|
+
loadProjectClioMd,
|
|
21
22
|
loadProjectRules,
|
|
22
23
|
renderOperatorProfile,
|
|
23
24
|
renderPromptContext,
|
|
@@ -51,7 +52,7 @@ export interface CustomizationEntry {
|
|
|
51
52
|
sourcePath?: string;
|
|
52
53
|
hash?: string;
|
|
53
54
|
trust?: "trusted" | "untrusted" | "n/a";
|
|
54
|
-
precedence?: "winner" | "loser" | "single";
|
|
55
|
+
precedence?: "winner" | "loser" | "single" | "layer";
|
|
55
56
|
reloadClass: ReloadClass;
|
|
56
57
|
/** Token cost where the item enters the prompt; absent when it does not. */
|
|
57
58
|
contextCostTokens?: number;
|
|
@@ -105,29 +106,34 @@ function inspectSettings(cwd: string, graph: CustomizationGraph): void {
|
|
|
105
106
|
}
|
|
106
107
|
|
|
107
108
|
function inspectClioMd(cwd: string, graph: CustomizationGraph): void {
|
|
108
|
-
const
|
|
109
|
-
|
|
109
|
+
const loaded = loadProjectClioMd(cwd);
|
|
110
|
+
for (const issue of loaded.errors) graph.issues.push(`clio-md ${issue.path}: ${issue.error}`);
|
|
111
|
+
if (loaded.files.length === 0) return;
|
|
110
112
|
try {
|
|
111
|
-
const text = readFileSync(path, "utf8");
|
|
112
113
|
const promptContext = renderPromptContext(cwd);
|
|
113
114
|
const preload = classifyProjectPreload({ hasClioMd: promptContext.clioMd !== null, text: promptContext.text });
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
115
|
+
for (const [index, file] of loaded.files.entries()) {
|
|
116
|
+
const text = readFileSync(file.path, "utf8");
|
|
117
|
+
graph.entries.push({
|
|
118
|
+
category: "clio-md",
|
|
119
|
+
id: basename(file.path),
|
|
120
|
+
scope: "project",
|
|
121
|
+
sourcePath: file.path,
|
|
122
|
+
hash: shortHash(text),
|
|
123
|
+
trust: "trusted",
|
|
124
|
+
precedence: loaded.files.length === 1 ? "single" : "layer",
|
|
125
|
+
reloadClass: "next-turn",
|
|
126
|
+
contextCostTokens: ceilChars(text.length),
|
|
127
|
+
detail: {
|
|
128
|
+
layer: index + 1,
|
|
129
|
+
layers: loaded.files.length,
|
|
130
|
+
preload: preload.label,
|
|
131
|
+
preloadChars: preload.chars,
|
|
132
|
+
preloadLines: preload.lines,
|
|
133
|
+
...(preload.nearLimit ? { preloadNearLimit: true } : {}),
|
|
134
|
+
},
|
|
135
|
+
});
|
|
136
|
+
}
|
|
131
137
|
} catch (err) {
|
|
132
138
|
graph.issues.push(`clio-md: ${err instanceof Error ? err.message : String(err)}`);
|
|
133
139
|
}
|