@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
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { type Dirent, readdirSync } from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
-
import { Type } from "typebox";
|
|
4
3
|
import { SKILL_SUGGESTION_ANCHOR } from "../../core/skill-activation.js";
|
|
5
4
|
import { ToolNames } from "../../core/tool-names.js";
|
|
6
5
|
import {
|
|
7
6
|
checkSkillDrift,
|
|
7
|
+
discoverMarketplaceSkills,
|
|
8
8
|
type LoadSkillsInput,
|
|
9
9
|
loadSkills,
|
|
10
|
+
type MarketplaceSkill,
|
|
10
11
|
modelVisibleSkills,
|
|
11
12
|
type Skill,
|
|
12
13
|
} from "../../domains/resources/index.js";
|
|
@@ -19,9 +20,9 @@ import {
|
|
|
19
20
|
reserveObservation,
|
|
20
21
|
} from "../observation.js";
|
|
21
22
|
import type { ToolInvokeOptions, ToolResult, ToolSpec } from "../registry.js";
|
|
22
|
-
import { stringEnum } from "../string-enum.js";
|
|
23
23
|
import { truncateHead } from "../truncate.js";
|
|
24
24
|
import { listDocsCorpus, searchDocs } from "./docs-engine.js";
|
|
25
|
+
import { contextToolSurface } from "./surface.js";
|
|
25
26
|
|
|
26
27
|
/**
|
|
27
28
|
* The context tool: one OBSERVE entry point for material about the working
|
|
@@ -49,6 +50,13 @@ export interface ContextToolDeps {
|
|
|
49
50
|
>;
|
|
50
51
|
/** Absent in worker registries without a session; scope=workspace errors cleanly. */
|
|
51
52
|
workspace?: ContextWorkspaceDeps;
|
|
53
|
+
/**
|
|
54
|
+
* Whether scope=skills may list marketplace entries beside installed
|
|
55
|
+
* skills. Worker registries set false: a worker can neither install a
|
|
56
|
+
* skill nor address the operator who could, so installable rows would only
|
|
57
|
+
* invite a load the pending-skill policy rejects. Undefined means true.
|
|
58
|
+
*/
|
|
59
|
+
skillMarketplace?: boolean;
|
|
52
60
|
}
|
|
53
61
|
|
|
54
62
|
function cwdFromDeps(deps?: ContextToolDeps): string {
|
|
@@ -187,14 +195,69 @@ function renderPendingSkillTask(name: string, options: ToolInvokeOptions | undef
|
|
|
187
195
|
return lines;
|
|
188
196
|
}
|
|
189
197
|
|
|
190
|
-
|
|
191
|
-
|
|
198
|
+
/**
|
|
199
|
+
* Marketplace rows the listing may show. Absent for every worker registry
|
|
200
|
+
* (`skillMarketplace: false`), when discovery is switched off for the run
|
|
201
|
+
* (a `--no-skills` run), and for a recipe-bound policy, whose
|
|
202
|
+
* context(scope=skills) admits exactly its bound names: none of these can
|
|
203
|
+
* install anything, so installable rows would only invite a load the policy
|
|
204
|
+
* rejects. Whatever discovery reports as broken stays out of the listing; the
|
|
205
|
+
* CLI and the hub carry those diagnostics.
|
|
206
|
+
*/
|
|
207
|
+
function marketplaceRowsFor(
|
|
208
|
+
deps: ContextToolDeps,
|
|
209
|
+
installed: ReadonlyArray<Skill>,
|
|
210
|
+
options: ToolInvokeOptions | undefined,
|
|
211
|
+
): MarketplaceSkill[] {
|
|
212
|
+
if (deps.skillMarketplace === false) return [];
|
|
213
|
+
if (deps.getSkillLoaderOptions?.().disableDiscovery === true) return [];
|
|
214
|
+
const policy = options?.pendingSkillPolicy;
|
|
215
|
+
if (policy && policyIsRecipeBound(policy)) return [];
|
|
216
|
+
const installedNames = new Set(installed.map((skill) => skill.name));
|
|
217
|
+
try {
|
|
218
|
+
return discoverMarketplaceSkills({ cwd: cwdFromDeps(deps) }).skills.filter(
|
|
219
|
+
(entry) => !installedNames.has(entry.name),
|
|
220
|
+
);
|
|
221
|
+
} catch {
|
|
222
|
+
return [];
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
function renderSkillsList(
|
|
227
|
+
skills: ReadonlyArray<Skill>,
|
|
228
|
+
marketplace: ReadonlyArray<MarketplaceSkill>,
|
|
229
|
+
marketplaceOffered: boolean,
|
|
230
|
+
): string {
|
|
231
|
+
if (skills.length === 0 && marketplace.length === 0) {
|
|
232
|
+
// A registry that never offers the marketplace (a worker) must not
|
|
233
|
+
// claim none is configured; it simply has nothing to list.
|
|
234
|
+
return marketplaceOffered ? "No skills are installed and no marketplace is configured." : "No skills are installed.";
|
|
235
|
+
}
|
|
192
236
|
const lines = [
|
|
193
|
-
"Available skills. Match the current task against the descriptions below: when one fits, suggest the operator run /skill
|
|
237
|
+
"Available skills. Match the current task against the descriptions below: when one fits, suggest the operator run /skill <name>; when several compose, suggest the sequence in order. Skill bodies load only after an explicit operator request; never load one without it.",
|
|
194
238
|
"",
|
|
195
239
|
];
|
|
196
|
-
|
|
197
|
-
lines.push(
|
|
240
|
+
if (skills.length > 0) {
|
|
241
|
+
lines.push("Installed:");
|
|
242
|
+
for (const skill of skills) {
|
|
243
|
+
lines.push(`- ${skill.name} (${skill.scope}): ${skill.description}`);
|
|
244
|
+
}
|
|
245
|
+
} else {
|
|
246
|
+
lines.push("Installed: none.");
|
|
247
|
+
}
|
|
248
|
+
if (marketplace.length > 0) {
|
|
249
|
+
// Installable rows are suggested exactly like installed ones: the
|
|
250
|
+
// operator's /skill <name> prompts to install before it runs, so the
|
|
251
|
+
// model's move is the same suggest-and-wait. Only the body is out of
|
|
252
|
+
// reach until then, which is why the description is all that appears.
|
|
253
|
+
lines.push(
|
|
254
|
+
"",
|
|
255
|
+
"Marketplace (not installed; /skill <name> offers to install, or `clio-coder skills install <name>`). Suggest these the same way when one matches; their bodies cannot be loaded until the operator installs them:",
|
|
256
|
+
);
|
|
257
|
+
for (const entry of marketplace) {
|
|
258
|
+
const category = entry.category ? ` [${entry.category}]` : "";
|
|
259
|
+
lines.push(`- ${entry.name}${category}: ${entry.description}`);
|
|
260
|
+
}
|
|
198
261
|
}
|
|
199
262
|
// Recency anchor with an exact reply shape: literal models act on an output
|
|
200
263
|
// template where they skip conditional prose in the header.
|
|
@@ -237,17 +300,20 @@ function runWorkspaceScope(
|
|
|
237
300
|
}
|
|
238
301
|
|
|
239
302
|
function withSkillsPointer(deps: ContextToolDeps, snap: WorkspaceSnapshot): Record<string, unknown> {
|
|
240
|
-
let
|
|
303
|
+
let installed = 0;
|
|
304
|
+
let installable = 0;
|
|
241
305
|
try {
|
|
242
306
|
const list = loadSkills({ cwd: cwdFromDeps(deps), ...(deps.getSkillLoaderOptions?.() ?? {}) });
|
|
243
|
-
|
|
307
|
+
const visible = modelVisibleSkills(list.items);
|
|
308
|
+
installed = visible.length;
|
|
309
|
+
installable = marketplaceRowsFor(deps, visible, undefined).length;
|
|
244
310
|
} catch {
|
|
245
311
|
return { ...snap };
|
|
246
312
|
}
|
|
247
|
-
if (
|
|
313
|
+
if (installed === 0 && installable === 0) return { ...snap };
|
|
248
314
|
return {
|
|
249
315
|
...snap,
|
|
250
|
-
skills: `
|
|
316
|
+
skills: `Skills: ${installed} installed, ${installable} installable from the marketplace. If one matches this task, or the operator names a skill, list them with context(scope="skills") and suggest /skill <name> to the operator; load only on operator request.`,
|
|
251
317
|
};
|
|
252
318
|
}
|
|
253
319
|
|
|
@@ -303,14 +369,28 @@ function runSkillsScope(
|
|
|
303
369
|
if (name.length === 0) {
|
|
304
370
|
const list = loadSkills({ cwd: cwdFromDeps(deps), ...(deps.getSkillLoaderOptions?.() ?? {}) });
|
|
305
371
|
const visible = modelVisibleSkills(list.items);
|
|
372
|
+
const marketplace = marketplaceRowsFor(deps, visible, options);
|
|
373
|
+
const rendered = renderSkillsList(visible, marketplace, deps.skillMarketplace !== false);
|
|
374
|
+
// The catalog is bounded but not small: the whole listing must fit the
|
|
375
|
+
// per-call cap like any observation, and a cut list says so instead of
|
|
376
|
+
// silently dropping the marketplace tail.
|
|
377
|
+
const truncation = truncateHead(rendered, { maxBytes: reservation.callCapBytes, maxLines: Number.MAX_SAFE_INTEGER });
|
|
378
|
+
const total = visible.length + marketplace.length;
|
|
306
379
|
return finalizeObservation({
|
|
307
380
|
tool: ToolNames.Context,
|
|
308
381
|
unit: "entries",
|
|
309
|
-
output:
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
382
|
+
output: truncation.content,
|
|
383
|
+
...(truncation.truncated ? { fullOutput: rendered } : {}),
|
|
384
|
+
shownCount: total,
|
|
385
|
+
totalCount: total,
|
|
386
|
+
truncated: truncation.truncated,
|
|
387
|
+
details: {
|
|
388
|
+
skills: visible.map((skill) => ({ name: skill.name, scope: skill.scope })),
|
|
389
|
+
marketplace: marketplace.map((entry) => ({
|
|
390
|
+
name: entry.name,
|
|
391
|
+
...(entry.category ? { category: entry.category } : {}),
|
|
392
|
+
})),
|
|
393
|
+
},
|
|
314
394
|
reservation,
|
|
315
395
|
...(options ? { options } : {}),
|
|
316
396
|
});
|
|
@@ -321,6 +401,16 @@ function runSkillsScope(
|
|
|
321
401
|
const visible = modelVisibleSkills(list.items);
|
|
322
402
|
const skill = visible.find((item) => item.name === name);
|
|
323
403
|
if (!skill) {
|
|
404
|
+
// A marketplace entry is a skill that exists and is not installed. Saying
|
|
405
|
+
// "unknown skill" about it denies the operator a thing the listing just
|
|
406
|
+
// offered; name the state and the one move that changes it.
|
|
407
|
+
const installable = marketplaceRowsFor(deps, visible, options).some((entry) => entry.name === name);
|
|
408
|
+
if (installable) {
|
|
409
|
+
return {
|
|
410
|
+
kind: "error",
|
|
411
|
+
message: `context: skill "${name}" is not installed; it is available in the marketplace. Ask the operator to run /skill ${name}, which offers to install it, and wait. Do not retry this load.`,
|
|
412
|
+
};
|
|
413
|
+
}
|
|
324
414
|
const available = visible.map((item) => item.name).join(", ");
|
|
325
415
|
const suffix = available.length > 0 ? ` Available skills: ${available}.` : " No skills are currently available.";
|
|
326
416
|
return { kind: "error", message: `context: unknown skill "${name}".${suffix}` };
|
|
@@ -394,18 +484,7 @@ function runSkillsScope(
|
|
|
394
484
|
|
|
395
485
|
export function createContextTool(deps: ContextToolDeps = {}): ToolSpec {
|
|
396
486
|
return {
|
|
397
|
-
|
|
398
|
-
description:
|
|
399
|
-
"Environment context: scope=workspace returns the git/project snapshot, scope=docs searches Clio's bundled documentation (omit query to list the corpus), scope=skills lists available skills or loads one by name. For repository code and the repo's generated wiki use code_nav (mode=wiki).",
|
|
400
|
-
parameters: Type.Object({
|
|
401
|
-
scope: stringEnum(["workspace", "docs", "skills"], "Context source."),
|
|
402
|
-
query: Type.Optional(Type.String({ description: "scope=docs: question or terms; omit to list the corpus." })),
|
|
403
|
-
name: Type.Optional(Type.String({ description: "scope=skills: skill name to load; omit to list." })),
|
|
404
|
-
limit: Type.Optional(Type.Number({ description: "scope=docs: max sections (default 5, max 12)." })),
|
|
405
|
-
include_tree: Type.Optional(Type.Boolean({ description: "scope=skills: list files under the skill base_dir." })),
|
|
406
|
-
}),
|
|
407
|
-
baseActionClass: "read",
|
|
408
|
-
executionMode: "parallel",
|
|
487
|
+
...contextToolSurface,
|
|
409
488
|
async run(args, options): Promise<ToolResult> {
|
|
410
489
|
const scope = typeof args.scope === "string" ? args.scope : "";
|
|
411
490
|
if (scope !== "workspace" && scope !== "docs" && scope !== "skills") {
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Type } from "typebox";
|
|
2
|
+
import { ToolNames } from "../../core/tool-names.js";
|
|
3
|
+
import { StringEnum } from "../../engine/ai.js";
|
|
4
|
+
import type { ToolSurface } from "../lazy-tool.js";
|
|
5
|
+
|
|
6
|
+
export const contextToolSurface = {
|
|
7
|
+
name: ToolNames.Context,
|
|
8
|
+
description:
|
|
9
|
+
"Environment context: scope=workspace returns the git/project snapshot, scope=docs searches Clio's bundled documentation (omit query to list the corpus), scope=skills lists installed and marketplace skills or loads an installed one by name. For repository code and the repo's generated wiki use code_nav (mode=wiki).",
|
|
10
|
+
parameters: Type.Object({
|
|
11
|
+
scope: StringEnum(["workspace", "docs", "skills"], { description: "Context source." }),
|
|
12
|
+
query: Type.Optional(Type.String({ description: "scope=docs: question or terms; omit to list the corpus." })),
|
|
13
|
+
name: Type.Optional(Type.String({ description: "scope=skills: skill name to load; omit to list." })),
|
|
14
|
+
limit: Type.Optional(Type.Number({ description: "scope=docs: max sections (default 5, max 12)." })),
|
|
15
|
+
include_tree: Type.Optional(Type.Boolean({ description: "scope=skills: list files under the skill base_dir." })),
|
|
16
|
+
}),
|
|
17
|
+
baseActionClass: "read",
|
|
18
|
+
executionMode: "parallel",
|
|
19
|
+
} satisfies ToolSurface;
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import type { LoadSkillsInput } from "../domains/resources/index.js";
|
|
2
|
+
import type { SessionContract } from "../domains/session/contract.js";
|
|
3
|
+
import { createTaskBoardStore, type TaskBoardStore } from "../domains/session/task-board.js";
|
|
4
|
+
import type { UserTasksStore } from "../domains/user-tasks/store.js";
|
|
5
|
+
import type { AgentLedgerPort } from "../worker/protocol.js";
|
|
6
|
+
import { createArtifactTool } from "./artifact.js";
|
|
7
|
+
import { type AskUserHandler, createAskUserTool } from "./ask-user.js";
|
|
8
|
+
import { bashTool } from "./bash.js";
|
|
9
|
+
import { builtin } from "./builtin-tool-catalog.js";
|
|
10
|
+
import { codeNavToolSurface } from "./codewiki/code-nav-surface.js";
|
|
11
|
+
import { contextToolSurface } from "./context/surface.js";
|
|
12
|
+
import { credentialPresentTool } from "./credential-present.js";
|
|
13
|
+
import { editTool } from "./edit.js";
|
|
14
|
+
import { findTool } from "./find.js";
|
|
15
|
+
import { grepTool } from "./grep.js";
|
|
16
|
+
import { lazyTool } from "./lazy-tool.js";
|
|
17
|
+
import { createLedgerTool } from "./ledger.js";
|
|
18
|
+
import { lsTool } from "./ls.js";
|
|
19
|
+
import { networkToolsDisabled } from "./network-policy.js";
|
|
20
|
+
import { assertBuiltinToolPolicy } from "./policy.js";
|
|
21
|
+
import { readTool } from "./read.js";
|
|
22
|
+
import type { ToolRegistry } from "./registry.js";
|
|
23
|
+
import { gitTool } from "./safe-exec.js";
|
|
24
|
+
import { createTasksTool } from "./tasks.js";
|
|
25
|
+
import { verifyToolSurface } from "./verify/surface.js";
|
|
26
|
+
import { webFetchToolSurface } from "./web-fetch-surface.js";
|
|
27
|
+
import { writeTool } from "./write.js";
|
|
28
|
+
|
|
29
|
+
export interface CoreToolBootstrapDeps {
|
|
30
|
+
session?: SessionContract;
|
|
31
|
+
askUser?: AskUserHandler;
|
|
32
|
+
taskBoard?: TaskBoardStore;
|
|
33
|
+
userTasks?: UserTasksStore;
|
|
34
|
+
agentLedger?: AgentLedgerPort;
|
|
35
|
+
getSkillLoaderOptions?: () => Pick<
|
|
36
|
+
LoadSkillsInput,
|
|
37
|
+
"trustProjectCompatRoots" | "disableDiscovery" | "explicitSkillPaths"
|
|
38
|
+
>;
|
|
39
|
+
skillMarketplace?: boolean;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export interface CoreToolRegistration {
|
|
43
|
+
includeNetworkTools: boolean;
|
|
44
|
+
includeSessionTools: boolean;
|
|
45
|
+
includeInteractiveTools: boolean;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export function registerCoreTools(registry: ToolRegistry, deps: CoreToolBootstrapDeps = {}): CoreToolRegistration {
|
|
49
|
+
const includeNetworkTools = !networkToolsDisabled();
|
|
50
|
+
registry.register({
|
|
51
|
+
...builtin(readTool, { path: "src/tools/read.ts", scope: "core" }),
|
|
52
|
+
});
|
|
53
|
+
registry.register({
|
|
54
|
+
...builtin(writeTool, { path: "src/tools/write.ts", scope: "core" }),
|
|
55
|
+
});
|
|
56
|
+
registry.register({
|
|
57
|
+
...builtin(editTool, { path: "src/tools/edit.ts", scope: "core" }),
|
|
58
|
+
});
|
|
59
|
+
registry.register({
|
|
60
|
+
...builtin(bashTool, { path: "src/tools/bash.ts", scope: "core" }),
|
|
61
|
+
});
|
|
62
|
+
registry.register({
|
|
63
|
+
...builtin(grepTool, { path: "src/tools/grep.ts", scope: "core" }),
|
|
64
|
+
});
|
|
65
|
+
registry.register({
|
|
66
|
+
...builtin(findTool, { path: "src/tools/find.ts", scope: "core" }),
|
|
67
|
+
});
|
|
68
|
+
registry.register({
|
|
69
|
+
...builtin(lsTool, { path: "src/tools/ls.ts", scope: "core" }),
|
|
70
|
+
});
|
|
71
|
+
if (includeNetworkTools) {
|
|
72
|
+
registry.register({
|
|
73
|
+
...builtin(
|
|
74
|
+
lazyTool(webFetchToolSurface, async () => (await import("./web-fetch.js")).webFetchTool),
|
|
75
|
+
{ path: "src/tools/web-fetch.ts", scope: "core" },
|
|
76
|
+
),
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
registry.register({
|
|
80
|
+
...builtin(gitTool, { path: "src/tools/safe-exec.ts", scope: "core" }),
|
|
81
|
+
});
|
|
82
|
+
registry.register({
|
|
83
|
+
...builtin(
|
|
84
|
+
lazyTool(verifyToolSurface, async () => (await import("./verify/index.js")).verifyTool),
|
|
85
|
+
{ path: "src/tools/verify/index.ts", scope: "core" },
|
|
86
|
+
),
|
|
87
|
+
});
|
|
88
|
+
registry.register({
|
|
89
|
+
...builtin(
|
|
90
|
+
lazyTool(codeNavToolSurface, async () => (await import("./codewiki/code-nav.js")).codeNavTool),
|
|
91
|
+
{ path: "src/tools/codewiki/code-nav.ts", scope: "core" },
|
|
92
|
+
),
|
|
93
|
+
});
|
|
94
|
+
const skillToolDeps = {
|
|
95
|
+
getCwd: () => deps.session?.current()?.cwd ?? process.cwd(),
|
|
96
|
+
...(deps.getSkillLoaderOptions ? { getSkillLoaderOptions: deps.getSkillLoaderOptions } : {}),
|
|
97
|
+
...(deps.skillMarketplace !== undefined ? { skillMarketplace: deps.skillMarketplace } : {}),
|
|
98
|
+
};
|
|
99
|
+
if (deps.askUser) {
|
|
100
|
+
registry.register({
|
|
101
|
+
...builtin(createAskUserTool({ askUser: deps.askUser }), {
|
|
102
|
+
path: "src/tools/ask-user.ts",
|
|
103
|
+
scope: "core",
|
|
104
|
+
}),
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
registry.register({
|
|
108
|
+
...builtin(credentialPresentTool, { path: "src/tools/credential-present.ts", scope: "core" }),
|
|
109
|
+
});
|
|
110
|
+
const session = deps.session;
|
|
111
|
+
registry.register({
|
|
112
|
+
...builtin(
|
|
113
|
+
lazyTool(contextToolSurface, async () => {
|
|
114
|
+
const { createContextTool } = await import("./context/index.js");
|
|
115
|
+
if (!session) return createContextTool(skillToolDeps);
|
|
116
|
+
const { probeWorkspace } = await import("../domains/session/workspace/index.js");
|
|
117
|
+
return createContextTool({
|
|
118
|
+
...skillToolDeps,
|
|
119
|
+
workspace: {
|
|
120
|
+
hasSession: () => session.current() !== null,
|
|
121
|
+
getSnapshot: () => session.current()?.workspace ?? null,
|
|
122
|
+
probeWorkspace: () => probeWorkspace(session.current()?.cwd ?? process.cwd()),
|
|
123
|
+
saveSnapshot: (snap) => {
|
|
124
|
+
const meta = session.current();
|
|
125
|
+
if (meta) meta.workspace = snap;
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
});
|
|
129
|
+
}),
|
|
130
|
+
{ path: "src/tools/context/index.ts", scope: "core" },
|
|
131
|
+
),
|
|
132
|
+
});
|
|
133
|
+
registry.register({
|
|
134
|
+
...builtin(createArtifactTool({ getCwd: skillToolDeps.getCwd }), { path: "src/tools/artifact.ts", scope: "core" }),
|
|
135
|
+
});
|
|
136
|
+
registry.register({
|
|
137
|
+
...builtin(createLedgerTool(deps.agentLedger ? { agentLedger: deps.agentLedger } : {}), {
|
|
138
|
+
path: "src/tools/ledger.ts",
|
|
139
|
+
scope: "core",
|
|
140
|
+
}),
|
|
141
|
+
});
|
|
142
|
+
registry.register({
|
|
143
|
+
...builtin(
|
|
144
|
+
createTasksTool({
|
|
145
|
+
board: deps.taskBoard ?? createTaskBoardStore(),
|
|
146
|
+
...(deps.userTasks ? { userTasks: deps.userTasks } : {}),
|
|
147
|
+
getSessionId: () => deps.session?.current()?.id ?? null,
|
|
148
|
+
}),
|
|
149
|
+
{
|
|
150
|
+
path: "src/tools/tasks.ts",
|
|
151
|
+
scope: "core",
|
|
152
|
+
},
|
|
153
|
+
),
|
|
154
|
+
});
|
|
155
|
+
return {
|
|
156
|
+
includeNetworkTools,
|
|
157
|
+
includeSessionTools: Boolean(session),
|
|
158
|
+
includeInteractiveTools: Boolean(deps.askUser),
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
export function assertRegisteredBuiltinTools(
|
|
163
|
+
registry: ToolRegistry,
|
|
164
|
+
registration: CoreToolRegistration,
|
|
165
|
+
includeDispatchTools: boolean,
|
|
166
|
+
): void {
|
|
167
|
+
assertBuiltinToolPolicy(registry.listAll(), { ...registration, includeDispatchTools });
|
|
168
|
+
}
|
|
@@ -2,9 +2,9 @@ import { createReadStream } from "node:fs";
|
|
|
2
2
|
import { createInterface } from "node:readline";
|
|
3
3
|
import { Type } from "typebox";
|
|
4
4
|
import { ToolNames } from "../core/tool-names.js";
|
|
5
|
+
import { StringEnum } from "../engine/ai.js";
|
|
5
6
|
import { resolveReadPath } from "./path-utils.js";
|
|
6
7
|
import type { ToolResult, ToolSpec } from "./registry.js";
|
|
7
|
-
import { stringEnum } from "./string-enum.js";
|
|
8
8
|
|
|
9
9
|
type CredentialPresenceSource = "auto" | "environment" | "file";
|
|
10
10
|
type CredentialPresenceResultSource = "environment" | "file" | "both" | "none";
|
|
@@ -91,10 +91,10 @@ export const credentialPresentTool: ToolSpec = {
|
|
|
91
91
|
parameters: Type.Object({
|
|
92
92
|
name: Type.String({ description: "Credential key name, e.g. OPENAI_API_KEY." }),
|
|
93
93
|
source: Type.Optional(
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
),
|
|
94
|
+
StringEnum(["auto", "environment", "env", "file"], {
|
|
95
|
+
description:
|
|
96
|
+
"auto checks the environment and the file when file is supplied; environment/env checks only the process environment; file checks only the file.",
|
|
97
|
+
}),
|
|
98
98
|
),
|
|
99
99
|
file: Type.Optional(Type.String({ description: "Env-style file to check for NAME=, e.g. .env." })),
|
|
100
100
|
}),
|