@iowarp/clio-coder 0.3.1 → 0.3.3
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 +233 -373
- package/CONTRIBUTING.md +23 -23
- package/README.md +284 -613
- package/dist/{acp-FPR54DGL.js → acp-P2AQILE2.js} +43 -53
- package/dist/{agents-OGPIHPJH.js → agents-72W3BI7I.js} +43 -26
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-IC3K6NIZ.js → auth-5TWEIYDN.js} +20 -12
- package/dist/chunk-2DJ2KNFG.js +2095 -0
- package/dist/{chunk-IS3ONKU3.js → chunk-2IR2NMPA.js} +6 -4
- package/dist/chunk-2SFS6XQE.js +122 -0
- package/dist/{chunk-PV4JUBVJ.js → chunk-2TLUCQVG.js} +40 -21
- package/dist/chunk-2VTFPG5O.js +48 -0
- package/dist/chunk-4BJ5BYCE.js +61 -0
- package/dist/{chunk-474KN5II.js → chunk-4BPJXDWC.js} +111 -181
- package/dist/chunk-4VP4KH3K.js +962 -0
- package/dist/chunk-4XUGQOHA.js +797 -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-4QKXUHSR.js → chunk-5UFT4SUX.js} +70 -20
- 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-6N5PTWMY.js +136 -0
- package/dist/chunk-6SGHMWE3.js +277 -0
- package/dist/chunk-6XLNIQDB.js +27 -0
- package/dist/chunk-7CR24IG7.js +242 -0
- 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-GB6QRBXN.js → chunk-APJ265NV.js} +54 -1187
- 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-COU2UHX6.js +400 -0
- package/dist/chunk-DSELYM6W.js +1077 -0
- package/dist/chunk-DUYJ5IO6.js +644 -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-FCSXB6T2.js +338 -0
- package/dist/chunk-FJ3H4MN5.js +48 -0
- package/dist/{chunk-RPTR2H26.js → chunk-FNTMWMX5.js} +21 -15
- package/dist/chunk-FQ4SKYE4.js +29 -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-IKCO5N3L.js +162 -0
- package/dist/chunk-IR4CFBFN.js +56 -0
- package/dist/{chunk-R5KLMSBV.js → chunk-J5Q24KAG.js} +2 -2
- package/dist/chunk-J7CWMCQD.js +255 -0
- package/dist/{chunk-K5XEMXTI.js → chunk-JVCV3ICN.js} +1 -1
- package/dist/chunk-KZWTDYJF.js +217 -0
- package/dist/chunk-LBMZMYH2.js +285 -0
- package/dist/{chunk-G34LV2PF.js → chunk-LM5TQCJZ.js} +84 -170
- package/dist/chunk-LW6DSM3M.js +5135 -0
- package/dist/chunk-LWLEKMDQ.js +3482 -0
- package/dist/{chunk-H6F6BYOH.js → chunk-LZSJBIVT.js} +7003 -7434
- package/dist/{chunk-HQQID6OA.js → chunk-M6SHUN7Q.js} +5 -5
- package/dist/{chunk-FST4FYJB.js → chunk-MFFY33HR.js} +99 -140
- package/dist/{chunk-BSU2YIWB.js → chunk-MVVUPGPW.js} +131 -136
- package/dist/chunk-OAO4GE4M.js +619 -0
- package/dist/{chunk-Q3RUPKEJ.js → chunk-OC7FIQPC.js} +58 -189
- 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-MAR7Y6HW.js → chunk-PAJK6MAQ.js} +23 -16
- package/dist/{chunk-M5T5VO65.js → chunk-PIWWS5BL.js} +837 -635
- package/dist/chunk-POHLU5DW.js +1186 -0
- package/dist/chunk-QKMUKYO7.js +4961 -0
- package/dist/chunk-SRDMMSEP.js +16405 -0
- package/dist/chunk-SST6Z5JA.js +80 -0
- package/dist/chunk-STBPMHSX.js +2456 -0
- package/dist/chunk-T6YILFSB.js +80 -0
- package/dist/chunk-TZK7PACC.js +174 -0
- package/dist/chunk-TZTZS7QK.js +227 -0
- package/dist/{chunk-ASND7OZK.js → chunk-UFIIWP2H.js} +13 -13
- package/dist/chunk-UOV2BYIW.js +107 -0
- package/dist/{chunk-PFEFKVGL.js → chunk-V6RTAOC2.js} +13 -11
- package/dist/chunk-VAKQQHWR.js +434 -0
- package/dist/chunk-VG7TBQIY.js +128 -0
- package/dist/chunk-VJWL6YS5.js +244 -0
- package/dist/{chunk-EYOKLTMF.js → chunk-VPAYEGVX.js} +17 -3
- package/dist/chunk-WEH5XRJQ.js +32 -0
- package/dist/chunk-X4RCMKVQ.js +641 -0
- package/dist/{chunk-TEKV33Q5.js → chunk-X6IAEBZR.js} +65 -33
- package/dist/chunk-XBXAASKX.js +18 -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/chunk-ZWMF7253.js +1882 -0
- package/dist/cli/index.js +62 -54
- package/dist/clio-JOU4FXVA.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-XCDVKR23.js} +92 -55
- package/dist/configure-4GAP54ZW.js +42 -0
- package/dist/{context-5RADCKTR.js → context-4UOGGLQ5.js} +71 -35
- package/dist/context-5VKGUVJJ.js +866 -0
- package/dist/{context-3KWFLHJG.js → context-77FM5DV5.js} +15 -13
- package/dist/{context-clear-7TSNPAAI.js → context-clear-XXJRLCJJ.js} +54 -28
- package/dist/{context-index-W4RLWOQH.js → context-index-BZ4UYMTC.js} +30 -24
- package/dist/dispatch-runner-QPRDDBDX.js +1997 -0
- package/dist/{docs-5AWSPS37.js → docs-2C2LTVT2.js} +23 -10
- package/dist/{doctor-UC5NAJYQ.js → doctor-HR46URBJ.js} +27 -17
- package/dist/{eval-U6TJHRLX.js → eval-XSSNATB4.js} +29 -16
- package/dist/{evidence-YEGUW4L3.js → evidence-6HG2PY2B.js} +46 -26
- package/dist/{evolve-TXARCTPG.js → evolve-K7YU3NCY.js} +45 -25
- package/dist/{extensions-OZFJ3A3G.js → extensions-QVDOHDGJ.js} +16 -7
- package/dist/{fleet-6G3DHNYE.js → fleet-VY3HHKN6.js} +163 -54
- package/dist/{fleet-preflight-DSNT37JK.js → fleet-preflight-DDN536IT.js} +7 -4
- package/dist/{init-KZ5QTF6M.js → init-JYGXI3FK.js} +69 -32
- package/dist/{memory-73ESV5YC.js → memory-WFZMGYHX.js} +48 -27
- package/dist/{models-A4PVNWJK.js → models-I5QWSEOM.js} +39 -25
- package/dist/monitor-GE4ID3IA.js +661 -0
- package/dist/{chunk-FCIH3BIZ.js → orchestrator-EM5MC3HM.js} +15979 -12407
- 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-ZU3QMZPZ.js} +101 -61
- package/dist/{share-YIFFV4NQ.js → share-S5BZQC5I.js} +15 -8
- package/dist/{skills-2V6RA3OQ.js → skills-X5VXCRNQ.js} +34 -14
- package/dist/{skills-eval-S2TVJO4F.js → skills-eval-WKIHWTHR.js} +70 -34
- package/dist/steer-GGWFUJUD.js +77 -0
- package/dist/{targets-TYXLPB23.js → targets-SNCPI2NR.js} +43 -27
- package/dist/terminal-lease-BNAHVHBS.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-JQHHPQ4K.js} +45 -25
- package/dist/{usage-ZAFSXKKG.js → usage-OR4O5SMZ.js} +62 -31
- package/dist/verify-375KUB3Y.js +716 -0
- package/dist/web-fetch-2YHJ3KTG.js +638 -0
- package/dist/{wiki-generate-NUQCVOQ3.js → wiki-generate-UEXP2ARI.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 +387 -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 +45 -9
- 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 +715 -278
- package/src/interactive/chat-renderer.ts +306 -85
- 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 +253 -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 +42 -22
- package/src/interactive/footer-panel.ts +8 -3
- package/src/interactive/format-time.ts +14 -2
- package/src/interactive/interactive-application.ts +203 -17
- package/src/interactive/interactive-event-projection.ts +18 -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 +184 -117
- 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/ask-user.ts +146 -24
- 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 +516 -168
- 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/status/index.ts +12 -1
- package/src/interactive/status/reasoning.ts +87 -0
- package/src/interactive/status/summary.ts +13 -2
- 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/transcript-detail.ts +120 -0
- 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 +271 -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/presentation.ts +107 -0
- package/src/tools/registry.ts +45 -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,192 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Render-transaction hooks around pi-tui's two concrete renderers.
|
|
3
|
+
*
|
|
4
|
+
* pi-tui deliberately exposes `doRender`, overlay composition, and line
|
|
5
|
+
* normalization as protected seams. Clio uses those seams instead of
|
|
6
|
+
* inferring frames from terminal writes: one `doRender()` is one frame, while
|
|
7
|
+
* any number of terminal writes (including the regular renderer's IME cursor
|
|
8
|
+
* write) can belong to that frame.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { type Terminal, TuiAltScreen, type TuiAltScreenOptions, TuiMainScreen } from "@earendil-works/pi-tui";
|
|
12
|
+
|
|
13
|
+
export type TuiRenderPhase = "overlay" | "normalization" | "cursor";
|
|
14
|
+
|
|
15
|
+
export interface TuiRenderObserver {
|
|
16
|
+
/** Optional fast-path used after a one-shot observer has delivered its frame. */
|
|
17
|
+
isEnabled?(): boolean;
|
|
18
|
+
beginFrame(fields: { mode: "regular" | "fullscreen"; columns: number; rows: number }): unknown;
|
|
19
|
+
endFrame(frame: unknown): void;
|
|
20
|
+
beginPhase(frame: unknown, phase: TuiRenderPhase): unknown;
|
|
21
|
+
endPhase(frame: unknown, phase: TuiRenderPhase, phaseToken: unknown): void;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export interface TuiRenderAdmission {
|
|
25
|
+
readonly blocked: boolean;
|
|
26
|
+
onWritable(listener: () => void): () => void;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
class DeferredRenderAdmission {
|
|
30
|
+
private pending = false;
|
|
31
|
+
private force = false;
|
|
32
|
+
private release: (() => void) | null = null;
|
|
33
|
+
|
|
34
|
+
constructor(
|
|
35
|
+
private readonly admission: TuiRenderAdmission | undefined,
|
|
36
|
+
private readonly render: (force: boolean) => void,
|
|
37
|
+
) {}
|
|
38
|
+
|
|
39
|
+
request(force: boolean): boolean {
|
|
40
|
+
if (!this.admission?.blocked) return false;
|
|
41
|
+
this.pending = true;
|
|
42
|
+
this.force ||= force;
|
|
43
|
+
this.release ??= this.admission.onWritable(() => {
|
|
44
|
+
this.release?.();
|
|
45
|
+
this.release = null;
|
|
46
|
+
if (!this.pending) return;
|
|
47
|
+
const pendingForce = this.force;
|
|
48
|
+
this.pending = false;
|
|
49
|
+
this.force = false;
|
|
50
|
+
this.render(pendingForce);
|
|
51
|
+
});
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** A direct/final render supersedes any older request held behind the gate. */
|
|
56
|
+
settled(): void {
|
|
57
|
+
this.pending = false;
|
|
58
|
+
this.force = false;
|
|
59
|
+
this.release?.();
|
|
60
|
+
this.release = null;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export class InstrumentedTuiMainScreen extends TuiMainScreen {
|
|
65
|
+
constructor(
|
|
66
|
+
terminal: Terminal,
|
|
67
|
+
private readonly renderObserver: TuiRenderObserver,
|
|
68
|
+
showHardwareCursor?: boolean,
|
|
69
|
+
logDirectory?: string,
|
|
70
|
+
renderAdmission?: TuiRenderAdmission,
|
|
71
|
+
) {
|
|
72
|
+
super(terminal, showHardwareCursor, logDirectory);
|
|
73
|
+
this.deferredAdmission = new DeferredRenderAdmission(renderAdmission, (force) => super.requestRender(force));
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
override requestRender(force = false): void {
|
|
77
|
+
if (!this.deferredAdmission.request(force)) super.requestRender(force);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
protected override doRender(): void {
|
|
81
|
+
this.deferredAdmission.settled();
|
|
82
|
+
if (this.renderObserver.isEnabled?.() === false) {
|
|
83
|
+
super.doRender();
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
const frame = this.renderObserver.beginFrame({
|
|
87
|
+
mode: this.mode,
|
|
88
|
+
columns: this.terminal.columns,
|
|
89
|
+
rows: this.terminal.rows,
|
|
90
|
+
});
|
|
91
|
+
this.currentFrame = frame;
|
|
92
|
+
try {
|
|
93
|
+
super.doRender();
|
|
94
|
+
} finally {
|
|
95
|
+
this.currentFrame = undefined;
|
|
96
|
+
this.renderObserver.endFrame(frame);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
protected override compositeOverlays(lines: string[], termWidth: number, termHeight: number): string[] {
|
|
101
|
+
return this.measure("overlay", () => super.compositeOverlays(lines, termWidth, termHeight));
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
protected override applyLineResets(lines: string[]): string[] {
|
|
105
|
+
return this.measure("normalization", () => super.applyLineResets(lines));
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
protected override extractCursorPosition(lines: string[], height: number): { row: number; col: number } | null {
|
|
109
|
+
return this.measure("cursor", () => super.extractCursorPosition(lines, height));
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
private measure<T>(phase: TuiRenderPhase, operation: () => T): T {
|
|
113
|
+
if (this.renderObserver.isEnabled?.() === false) return operation();
|
|
114
|
+
const frame = this.currentFrame;
|
|
115
|
+
if (frame === undefined) return operation();
|
|
116
|
+
const phaseToken = this.renderObserver.beginPhase(frame, phase);
|
|
117
|
+
try {
|
|
118
|
+
return operation();
|
|
119
|
+
} finally {
|
|
120
|
+
this.renderObserver.endPhase(frame, phase, phaseToken);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
private currentFrame: unknown | undefined;
|
|
125
|
+
private readonly deferredAdmission: DeferredRenderAdmission;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
export class InstrumentedTuiAltScreen extends TuiAltScreen {
|
|
129
|
+
private currentFrame: unknown | undefined;
|
|
130
|
+
|
|
131
|
+
constructor(
|
|
132
|
+
terminal: Terminal,
|
|
133
|
+
private readonly renderObserver: TuiRenderObserver,
|
|
134
|
+
showHardwareCursor?: boolean,
|
|
135
|
+
logDirectory?: string,
|
|
136
|
+
options?: TuiAltScreenOptions,
|
|
137
|
+
renderAdmission?: TuiRenderAdmission,
|
|
138
|
+
) {
|
|
139
|
+
super(terminal, showHardwareCursor, logDirectory, options);
|
|
140
|
+
this.deferredAdmission = new DeferredRenderAdmission(renderAdmission, (force) => super.requestRender(force));
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
override requestRender(force = false): void {
|
|
144
|
+
if (!this.deferredAdmission.request(force)) super.requestRender(force);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
protected override doRender(): void {
|
|
148
|
+
this.deferredAdmission.settled();
|
|
149
|
+
if (this.renderObserver.isEnabled?.() === false) {
|
|
150
|
+
super.doRender();
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
const frame = this.renderObserver.beginFrame({
|
|
154
|
+
mode: this.mode,
|
|
155
|
+
columns: this.terminal.columns,
|
|
156
|
+
rows: this.terminal.rows,
|
|
157
|
+
});
|
|
158
|
+
this.currentFrame = frame;
|
|
159
|
+
try {
|
|
160
|
+
super.doRender();
|
|
161
|
+
} finally {
|
|
162
|
+
this.currentFrame = undefined;
|
|
163
|
+
this.renderObserver.endFrame(frame);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
protected override compositeOverlays(lines: string[], termWidth: number, termHeight: number): string[] {
|
|
168
|
+
return this.measure("overlay", () => super.compositeOverlays(lines, termWidth, termHeight));
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
protected override applyLineResets(lines: string[]): string[] {
|
|
172
|
+
return this.measure("normalization", () => super.applyLineResets(lines));
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
protected override extractCursorPosition(lines: string[], height: number): { row: number; col: number } | null {
|
|
176
|
+
return this.measure("cursor", () => super.extractCursorPosition(lines, height));
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
private measure<T>(phase: TuiRenderPhase, operation: () => T): T {
|
|
180
|
+
if (this.renderObserver.isEnabled?.() === false) return operation();
|
|
181
|
+
const frame = this.currentFrame;
|
|
182
|
+
if (frame === undefined) return operation();
|
|
183
|
+
const phaseToken = this.renderObserver.beginPhase(frame, phase);
|
|
184
|
+
try {
|
|
185
|
+
return operation();
|
|
186
|
+
} finally {
|
|
187
|
+
this.renderObserver.endPhase(frame, phase, phaseToken);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
private readonly deferredAdmission: DeferredRenderAdmission;
|
|
192
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pi-agent-core owns the text that custom agent messages (bash executions,
|
|
3
|
+
* branch and compaction summaries) become when they are replayed to a model.
|
|
4
|
+
* Clio's replay builder maps its own session entries onto these so the
|
|
5
|
+
* wording never drifts from pi's `convertToLlm`.
|
|
6
|
+
*/
|
|
7
|
+
export {
|
|
8
|
+
type BashExecutionMessage,
|
|
9
|
+
BRANCH_SUMMARY_PREFIX,
|
|
10
|
+
BRANCH_SUMMARY_SUFFIX,
|
|
11
|
+
bashExecutionToText,
|
|
12
|
+
COMPACTION_SUMMARY_PREFIX,
|
|
13
|
+
COMPACTION_SUMMARY_SUFFIX,
|
|
14
|
+
} from "@earendil-works/pi-agent-core";
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { type Api, createModels, type KnownProvider, type Model } from "@earendil-works/pi-ai";
|
|
2
|
+
import { amazonBedrockProvider } from "@earendil-works/pi-ai/providers/amazon-bedrock";
|
|
3
|
+
import { anthropicProvider } from "@earendil-works/pi-ai/providers/anthropic";
|
|
4
|
+
import { deepseekProvider } from "@earendil-works/pi-ai/providers/deepseek";
|
|
5
|
+
import { googleProvider } from "@earendil-works/pi-ai/providers/google";
|
|
6
|
+
import { groqProvider } from "@earendil-works/pi-ai/providers/groq";
|
|
7
|
+
import { mistralProvider } from "@earendil-works/pi-ai/providers/mistral";
|
|
8
|
+
import { openaiProvider } from "@earendil-works/pi-ai/providers/openai";
|
|
9
|
+
import { openaiCodexProvider } from "@earendil-works/pi-ai/providers/openai-codex";
|
|
10
|
+
import { openrouterProvider } from "@earendil-works/pi-ai/providers/openrouter";
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Pi providers backing Clio's built-in runtime descriptors. Keep this list in
|
|
14
|
+
* lockstep with CATALOG_PROVIDER_BY_RUNTIME_ID; out-of-tree runtimes join the
|
|
15
|
+
* external compatibility universe before their modules evaluate.
|
|
16
|
+
*/
|
|
17
|
+
const CONFIGURED_PROVIDER_FACTORIES = [
|
|
18
|
+
amazonBedrockProvider,
|
|
19
|
+
anthropicProvider,
|
|
20
|
+
deepseekProvider,
|
|
21
|
+
googleProvider,
|
|
22
|
+
groqProvider,
|
|
23
|
+
mistralProvider,
|
|
24
|
+
openaiProvider,
|
|
25
|
+
openaiCodexProvider,
|
|
26
|
+
openrouterProvider,
|
|
27
|
+
] as const;
|
|
28
|
+
|
|
29
|
+
export const engineModels = createModels();
|
|
30
|
+
for (const factory of CONFIGURED_PROVIDER_FACTORIES) engineModels.setProvider(factory());
|
|
31
|
+
|
|
32
|
+
export function engineModelProviders(): KnownProvider[] {
|
|
33
|
+
return engineModels.getProviders().map((provider) => provider.id as KnownProvider);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function engineModelsFor(provider: KnownProvider): Model<Api>[] {
|
|
37
|
+
return [...engineModels.getModels(provider)];
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export function getEngineModel(provider: KnownProvider, modelId: string): Model<Api> | undefined {
|
|
41
|
+
return engineModels.getModel(provider, modelId);
|
|
42
|
+
}
|
package/src/engine/oauth.ts
CHANGED
|
@@ -11,17 +11,20 @@
|
|
|
11
11
|
*/
|
|
12
12
|
|
|
13
13
|
import type {
|
|
14
|
-
AuthInteraction,
|
|
15
14
|
OAuthAuth,
|
|
16
15
|
OAuthCredentials,
|
|
17
16
|
OAuthLoginCallbacks,
|
|
18
17
|
OAuthSelectPrompt,
|
|
18
|
+
ProviderAuthInteraction,
|
|
19
19
|
} from "@earendil-works/pi-ai";
|
|
20
|
-
import { findEnvKeys as piFindEnvKeys, getEnvApiKey as piGetEnvApiKey } from "@earendil-works/pi-ai/compat";
|
|
21
20
|
import { anthropicProvider } from "@earendil-works/pi-ai/providers/anthropic";
|
|
22
21
|
import { githubCopilotProvider } from "@earendil-works/pi-ai/providers/github-copilot";
|
|
23
22
|
import { openaiCodexProvider } from "@earendil-works/pi-ai/providers/openai-codex";
|
|
24
23
|
import { alcfOAuthProvider } from "./alcf-oauth.js";
|
|
24
|
+
import {
|
|
25
|
+
findEngineEnvKeys as findEngineEnvKeysRaw,
|
|
26
|
+
getEngineEnvApiKey as getEngineEnvApiKeyRaw,
|
|
27
|
+
} from "./env-api-keys.js";
|
|
25
28
|
|
|
26
29
|
export type { OAuthCredentials, OAuthLoginCallbacks, OAuthSelectPrompt };
|
|
27
30
|
|
|
@@ -35,13 +38,14 @@ export interface EngineOAuthProvider {
|
|
|
35
38
|
name: string;
|
|
36
39
|
usesCallbackServer: boolean;
|
|
37
40
|
login(callbacks: OAuthLoginCallbacks): Promise<OAuthCredentials>;
|
|
38
|
-
refreshToken(credentials: OAuthCredentials): Promise<OAuthCredentials>;
|
|
41
|
+
refreshToken(credentials: OAuthCredentials, signal: AbortSignal): Promise<OAuthCredentials>;
|
|
39
42
|
getApiKey(credentials: OAuthCredentials): Promise<string>;
|
|
40
43
|
}
|
|
41
44
|
|
|
42
45
|
/** Adapt Clio's legacy login callbacks to pi's AuthInteraction. */
|
|
43
|
-
function interactionFromLoginCallbacks(callbacks: OAuthLoginCallbacks):
|
|
44
|
-
const interaction:
|
|
46
|
+
function interactionFromLoginCallbacks(callbacks: OAuthLoginCallbacks): ProviderAuthInteraction {
|
|
47
|
+
const interaction: ProviderAuthInteraction = {
|
|
48
|
+
signal: callbacks.signal ?? new AbortController().signal,
|
|
45
49
|
notify(event) {
|
|
46
50
|
switch (event.type) {
|
|
47
51
|
case "auth_url":
|
|
@@ -88,12 +92,11 @@ function interactionFromLoginCallbacks(callbacks: OAuthLoginCallbacks): AuthInte
|
|
|
88
92
|
}
|
|
89
93
|
},
|
|
90
94
|
};
|
|
91
|
-
if (callbacks.signal) interaction.signal = callbacks.signal;
|
|
92
95
|
return interaction;
|
|
93
96
|
}
|
|
94
97
|
|
|
95
98
|
function fromOAuthAuth(id: string, auth: OAuthAuth | undefined, usesCallbackServer: boolean): EngineOAuthProvider {
|
|
96
|
-
if (!auth) throw new Error(`
|
|
99
|
+
if (!auth) throw new Error(`provider "${id}" does not expose an OAuth flow`);
|
|
97
100
|
return {
|
|
98
101
|
id,
|
|
99
102
|
name: auth.name,
|
|
@@ -101,8 +104,8 @@ function fromOAuthAuth(id: string, auth: OAuthAuth | undefined, usesCallbackServ
|
|
|
101
104
|
async login(callbacks) {
|
|
102
105
|
return auth.login(interactionFromLoginCallbacks(callbacks));
|
|
103
106
|
},
|
|
104
|
-
async refreshToken(credentials) {
|
|
105
|
-
return auth.refresh({ ...credentials, type: "oauth" });
|
|
107
|
+
async refreshToken(credentials, signal) {
|
|
108
|
+
return auth.refresh({ ...credentials, type: "oauth" }, signal);
|
|
106
109
|
},
|
|
107
110
|
async getApiKey(credentials) {
|
|
108
111
|
const resolved = await auth.toAuth({ ...credentials, type: "oauth" });
|
|
@@ -133,7 +136,7 @@ function registry(): Map<string, EngineOAuthProvider> {
|
|
|
133
136
|
|
|
134
137
|
export function getEngineEnvApiKey(providerId: string): string | undefined {
|
|
135
138
|
try {
|
|
136
|
-
return
|
|
139
|
+
return getEngineEnvApiKeyRaw(providerId);
|
|
137
140
|
} catch {
|
|
138
141
|
return undefined;
|
|
139
142
|
}
|
|
@@ -141,7 +144,7 @@ export function getEngineEnvApiKey(providerId: string): string | undefined {
|
|
|
141
144
|
|
|
142
145
|
export function findEngineEnvKeys(providerId: string): string[] | undefined {
|
|
143
146
|
try {
|
|
144
|
-
return
|
|
147
|
+
return findEngineEnvKeysRaw(providerId);
|
|
145
148
|
} catch {
|
|
146
149
|
return undefined;
|
|
147
150
|
}
|
|
@@ -179,10 +182,11 @@ export async function loginWithEngineOAuthProvider(
|
|
|
179
182
|
export async function refreshEngineOAuthCredentials(
|
|
180
183
|
providerId: string,
|
|
181
184
|
credentials: OAuthCredentials,
|
|
185
|
+
signal: AbortSignal,
|
|
182
186
|
): Promise<OAuthCredentials> {
|
|
183
187
|
const provider = registry().get(providerId);
|
|
184
188
|
if (!provider) throw new Error(`unknown OAuth provider: ${providerId}`);
|
|
185
|
-
return provider.refreshToken(credentials);
|
|
189
|
+
return provider.refreshToken(credentials, signal);
|
|
186
190
|
}
|
|
187
191
|
|
|
188
192
|
export async function getEngineOAuthApiKey(providerId: string, credentials: OAuthCredentials): Promise<string> {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { parseCommandArgs, substituteArgs } from "@earendil-works/pi-agent-core";
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
import { RESPONSE_SCHEMA_RUNTIME_ID } from "../core/response-schema.js";
|
|
2
2
|
import type { ThinkingLevel } from "../domains/providers/index.js";
|
|
3
|
-
import {
|
|
4
|
-
defaultAnthropicBudgetForLevel,
|
|
5
|
-
defaultAnthropicEffortForLevel,
|
|
6
|
-
type ThinkingEffortByLevel,
|
|
7
|
-
} from "../domains/providers/thinking-control-policy.js";
|
|
8
3
|
import type { EngineModel } from "./types.js";
|
|
9
4
|
|
|
10
5
|
function reasoningSummaryForLevel(level: ThinkingLevel | undefined): "concise" | "detailed" | undefined {
|
|
@@ -17,6 +12,10 @@ function isOpenAIResponsesApi(api: string): boolean {
|
|
|
17
12
|
return api === "openai-codex-responses" || api === "openai-responses" || api === "azure-openai-responses";
|
|
18
13
|
}
|
|
19
14
|
|
|
15
|
+
function isAnthropicMessagesApi(api: string): boolean {
|
|
16
|
+
return api === "anthropic-messages";
|
|
17
|
+
}
|
|
18
|
+
|
|
20
19
|
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
21
20
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
22
21
|
}
|
|
@@ -45,10 +44,6 @@ function namedToolDefinitions(tools: unknown, toolName: string): unknown[] | nul
|
|
|
45
44
|
return narrowed.length > 0 ? narrowed : null;
|
|
46
45
|
}
|
|
47
46
|
|
|
48
|
-
function numberValue(value: unknown): number | undefined {
|
|
49
|
-
return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : undefined;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
47
|
function patchOpenAIReasoningSummaryPayload(
|
|
53
48
|
payload: unknown,
|
|
54
49
|
model: EngineModel,
|
|
@@ -69,65 +64,22 @@ function patchOpenAIReasoningSummaryPayload(
|
|
|
69
64
|
};
|
|
70
65
|
}
|
|
71
66
|
|
|
72
|
-
function isAnthropicMessagesApi(api: string): boolean {
|
|
73
|
-
return api === "anthropic-messages";
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
function anthropicThinkingLevelMap(model: EngineModel): ThinkingEffortByLevel | undefined {
|
|
77
|
-
return model.thinkingLevelMap as ThinkingEffortByLevel | undefined;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
function anthropicUsesAdaptiveThinking(model: EngineModel): boolean {
|
|
81
|
-
const compat = model.compat as { forceAdaptiveThinking?: boolean } | undefined;
|
|
82
|
-
return compat?.forceAdaptiveThinking === true;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
function patchAnthropicThinkingPayload(
|
|
86
|
-
payload: unknown,
|
|
87
|
-
model: EngineModel,
|
|
88
|
-
thinkingLevel: ThinkingLevel | undefined,
|
|
89
|
-
): unknown | undefined {
|
|
90
|
-
if (!isAnthropicMessagesApi(model.api) || model.reasoning !== true) return undefined;
|
|
91
|
-
if (!thinkingLevel || thinkingLevel === "off" || !isRecord(payload)) return undefined;
|
|
92
|
-
const record = payload;
|
|
93
|
-
const existingThinking = isRecord(record.thinking) ? record.thinking : {};
|
|
94
|
-
const display = typeof existingThinking.display === "string" ? existingThinking.display : "summarized";
|
|
95
|
-
|
|
96
|
-
if (anthropicUsesAdaptiveThinking(model)) {
|
|
97
|
-
const effort = defaultAnthropicEffortForLevel(thinkingLevel, anthropicThinkingLevelMap(model));
|
|
98
|
-
const existingOutputConfig = isRecord(record.output_config) ? record.output_config : {};
|
|
99
|
-
return {
|
|
100
|
-
...record,
|
|
101
|
-
thinking: { ...existingThinking, type: "adaptive", display },
|
|
102
|
-
...(effort ? { output_config: { ...existingOutputConfig, effort } } : {}),
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
const maxTokens = numberValue(record.max_tokens) ?? model.maxTokens;
|
|
107
|
-
const budgetTokens = defaultAnthropicBudgetForLevel(thinkingLevel, maxTokens);
|
|
108
|
-
if (budgetTokens === undefined) return undefined;
|
|
109
|
-
return {
|
|
110
|
-
...record,
|
|
111
|
-
thinking: { ...existingThinking, type: "enabled", budget_tokens: budgetTokens, display },
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
|
|
115
67
|
/**
|
|
116
68
|
* Align provider payloads with Clio's effective thinking level.
|
|
117
69
|
*
|
|
118
70
|
* OpenAI Responses defaults reasoning summaries to "auto", which can yield no
|
|
119
|
-
* visible thinking blocks
|
|
120
|
-
*
|
|
71
|
+
* visible thinking blocks, and the agent loop has no option for the summary
|
|
72
|
+
* field, so it is set here. Anthropic thinking is pi-owned: pi-ai's
|
|
73
|
+
* `streamSimple` maps the agent's thinking level onto adaptive effort (via
|
|
74
|
+
* `model.thinkingLevelMap` and `compat.forceAdaptiveThinking`) or a bounded
|
|
75
|
+
* `budget_tokens`, so the payload is left untouched for that API.
|
|
121
76
|
*/
|
|
122
77
|
export function patchProviderThinkingPayload(
|
|
123
78
|
payload: unknown,
|
|
124
79
|
model: EngineModel,
|
|
125
80
|
thinkingLevel: ThinkingLevel | undefined,
|
|
126
81
|
): unknown | undefined {
|
|
127
|
-
return (
|
|
128
|
-
patchOpenAIReasoningSummaryPayload(payload, model, thinkingLevel) ??
|
|
129
|
-
patchAnthropicThinkingPayload(payload, model, thinkingLevel)
|
|
130
|
-
);
|
|
82
|
+
return patchOpenAIReasoningSummaryPayload(payload, model, thinkingLevel);
|
|
131
83
|
}
|
|
132
84
|
|
|
133
85
|
/**
|
|
@@ -234,7 +186,12 @@ export function patchToolChoiceNamedPayload(
|
|
|
234
186
|
if (model.api === "mistral-conversations") {
|
|
235
187
|
return { ...payload, tools, toolChoice: { type: "function", function: { name: toolName } } };
|
|
236
188
|
}
|
|
237
|
-
|
|
189
|
+
// Generic OpenAI-compatible servers reject the object form outright: both LM
|
|
190
|
+
// Studio and llama.cpp answer HTTP 400 with "Invalid tool_choice type:
|
|
191
|
+
// 'object'. Supported string values: none, auto, required". The tool surface
|
|
192
|
+
// is already narrowed to the single named definition above, so "required" is
|
|
193
|
+
// equivalent here and is the only spelling every server accepts.
|
|
194
|
+
return { ...payload, tools, tool_choice: "required" };
|
|
238
195
|
}
|
|
239
196
|
|
|
240
197
|
/** Attach llama-server's native JSON-schema response constraint without changing its tool surface. */
|
|
@@ -83,7 +83,7 @@ function isSentinelPrefix(tail: string): boolean {
|
|
|
83
83
|
* at that point cannot be a sentinel and is emitted verbatim minus any
|
|
84
84
|
* complete sentinels still embedded in it.
|
|
85
85
|
*/
|
|
86
|
-
|
|
86
|
+
interface SentinelStripper {
|
|
87
87
|
/** Sanitize the next streamed chunk, returning the safe-to-emit prefix. */
|
|
88
88
|
push(chunk: string): string;
|
|
89
89
|
/** Drain the trailing buffer at end-of-stream. */
|
package/src/engine/tui.ts
CHANGED
|
@@ -9,24 +9,25 @@ export type {
|
|
|
9
9
|
AutocompleteProvider,
|
|
10
10
|
AutocompleteSuggestions,
|
|
11
11
|
Component,
|
|
12
|
-
EditorOptions,
|
|
13
12
|
EditorTheme,
|
|
14
|
-
ImageTheme,
|
|
15
13
|
Keybinding,
|
|
16
14
|
KeybindingConflict,
|
|
17
15
|
KeybindingDefinitions,
|
|
18
|
-
Keybindings,
|
|
19
16
|
KeybindingsConfig,
|
|
20
17
|
KeyId,
|
|
21
18
|
MarkdownTheme,
|
|
22
19
|
OverlayHandle,
|
|
23
20
|
OverlayOptions,
|
|
21
|
+
ScrollViewScrollbar,
|
|
24
22
|
SelectItem,
|
|
25
23
|
SelectListLayoutOptions,
|
|
26
24
|
SettingItem,
|
|
27
25
|
SettingsListTheme,
|
|
28
26
|
SlashCommand,
|
|
29
27
|
Terminal,
|
|
28
|
+
Tokens,
|
|
29
|
+
TUI,
|
|
30
|
+
TuiMode,
|
|
30
31
|
} from "@earendil-works/pi-tui";
|
|
31
32
|
|
|
32
33
|
/**
|
|
@@ -35,7 +36,7 @@ export type {
|
|
|
35
36
|
* module; consumers accept this narrower shape so the helper is unit-testable
|
|
36
37
|
* without a real ProcessTerminal.
|
|
37
38
|
*/
|
|
38
|
-
|
|
39
|
+
interface AgentProgressSink {
|
|
39
40
|
setProgress(active: boolean): void;
|
|
40
41
|
}
|
|
41
42
|
|
|
@@ -75,25 +76,32 @@ export {
|
|
|
75
76
|
Container,
|
|
76
77
|
Editor,
|
|
77
78
|
fuzzyFilter,
|
|
78
|
-
fuzzyMatch,
|
|
79
|
-
getCapabilities,
|
|
80
79
|
getKeybindings,
|
|
81
|
-
Image,
|
|
82
80
|
Input,
|
|
83
81
|
isKeyRelease,
|
|
84
82
|
KeybindingsManager,
|
|
85
|
-
Loader,
|
|
86
83
|
Markdown,
|
|
84
|
+
Marked,
|
|
87
85
|
matchesKey,
|
|
88
86
|
ProcessTerminal,
|
|
87
|
+
ScrollView,
|
|
89
88
|
setKeybindings,
|
|
89
|
+
stripTerminalSequences,
|
|
90
90
|
Text,
|
|
91
|
-
TUI,
|
|
92
91
|
TUI_KEYBINDINGS,
|
|
92
|
+
TuiAltScreen,
|
|
93
|
+
TuiMainScreen,
|
|
93
94
|
truncateToWidth,
|
|
95
|
+
VStack,
|
|
94
96
|
visibleWidth,
|
|
95
97
|
wrapTextWithAnsi,
|
|
96
98
|
} from "@earendil-works/pi-tui";
|
|
99
|
+
export {
|
|
100
|
+
InstrumentedTuiAltScreen,
|
|
101
|
+
InstrumentedTuiMainScreen,
|
|
102
|
+
type TuiRenderObserver,
|
|
103
|
+
type TuiRenderPhase,
|
|
104
|
+
} from "./instrumented-tui.js";
|
|
97
105
|
export type { SelectListTheme } from "./select-list.js";
|
|
98
106
|
/**
|
|
99
107
|
* SelectList ships from the engine as a thin subclass that honors a design
|
package/src/engine/types.ts
CHANGED
|
@@ -9,13 +9,10 @@
|
|
|
9
9
|
export type {
|
|
10
10
|
AgentEvent,
|
|
11
11
|
AgentMessage,
|
|
12
|
-
AgentOptions,
|
|
13
|
-
AgentState,
|
|
14
12
|
AgentTool,
|
|
15
13
|
AgentToolResult,
|
|
16
|
-
|
|
14
|
+
AgentToolUpdateCallback,
|
|
17
15
|
} from "@earendil-works/pi-agent-core";
|
|
18
|
-
export { Agent } from "@earendil-works/pi-agent-core";
|
|
19
16
|
|
|
20
17
|
import type { AgentState as PiAgentState } from "@earendil-works/pi-agent-core";
|
|
21
18
|
|
|
@@ -36,6 +33,7 @@ export type MutableAgentState = Omit<PiAgentState, "errorMessage"> & {
|
|
|
36
33
|
export type {
|
|
37
34
|
AnthropicMessagesCompat,
|
|
38
35
|
Api,
|
|
36
|
+
AuthOperationOptions,
|
|
39
37
|
ImageContent,
|
|
40
38
|
KnownProvider,
|
|
41
39
|
Model,
|
|
@@ -53,14 +51,13 @@ import type { Api as PiApi, Model as PiModel } from "@earendil-works/pi-ai";
|
|
|
53
51
|
*/
|
|
54
52
|
export type EngineModel = PiModel<PiApi>;
|
|
55
53
|
export type {
|
|
56
|
-
EditorOptions,
|
|
57
54
|
EditorTheme,
|
|
58
55
|
SelectItem,
|
|
59
56
|
SelectListLayoutOptions,
|
|
60
57
|
SettingItem,
|
|
61
58
|
SettingsListTheme,
|
|
59
|
+
TUI,
|
|
62
60
|
} from "@earendil-works/pi-tui";
|
|
63
|
-
export { TUI } from "@earendil-works/pi-tui";
|
|
64
61
|
// SelectListTheme carries the Clio design cursor as an engine augmentation; see
|
|
65
62
|
// ./select-list.ts. Re-export the augmented type so every engine surface agrees.
|
|
66
63
|
export type { SelectListTheme } from "./select-list.js";
|
|
@@ -377,7 +377,7 @@ export function startWorkerRun(input: WorkerRunInput, emit: WorkerEventEmit): Wo
|
|
|
377
377
|
// pi-ai is process-local. The orchestrator registers Clio API providers in
|
|
378
378
|
// providers/extension.ts, but the worker subprocess starts a fresh process,
|
|
379
379
|
// so it must register them here before any agent.prompt() touches a local
|
|
380
|
-
// runtime (lmstudio
|
|
380
|
+
// runtime (lmstudio, ollama-native).
|
|
381
381
|
registerClioApiProviders();
|
|
382
382
|
// The worker is a fresh process; mirror the orchestrator's global output
|
|
383
383
|
// budget so dispatched runs honor settings.defaults.maxTokens too. Use the
|
|
@@ -28,11 +28,13 @@ import {
|
|
|
28
28
|
} from "../domains/safety/protected-artifacts.js";
|
|
29
29
|
import { CONFIRMED_SCOPE, isSubset, READONLY_SCOPE, WORKSPACE_SCOPE } from "../domains/safety/scope.js";
|
|
30
30
|
import { effectiveToolNames } from "../tools/agent-tools.js";
|
|
31
|
-
import {
|
|
31
|
+
import { assertRegisteredBuiltinTools, registerCoreTools } from "../tools/core-bootstrap.js";
|
|
32
32
|
import type { ToolProfileName } from "../tools/profiles.js";
|
|
33
33
|
import { createRegistry, type RegistryDeps, type ToolRegistry } from "../tools/registry.js";
|
|
34
34
|
import { type AgentLedgerPort, toolSignatureOf } from "../worker/protocol.js";
|
|
35
35
|
|
|
36
|
+
export { WORKER_RUNTIME_MEDIATES_CLIO_DISPATCH } from "./worker-runtime-capabilities.js";
|
|
37
|
+
|
|
36
38
|
/**
|
|
37
39
|
* Build a worker-local SafetyContract that owns its own loop-detector state.
|
|
38
40
|
* The state is per-worker-run (one subprocess per run) so two concurrent
|
|
@@ -154,8 +156,12 @@ export function createWorkerToolRegistry(
|
|
|
154
156
|
// names a bare registry produces, so a conditional registration would drift
|
|
155
157
|
// the signature and fail admission; only the injected port varies, and a run
|
|
156
158
|
// without one answers that it has no coordination ledger.
|
|
157
|
-
|
|
159
|
+
const registration = registerCoreTools(registry, {
|
|
158
160
|
...(agentLedger ? { agentLedger } : {}),
|
|
161
|
+
// A worker cannot install a skill or reach the operator who could, so
|
|
162
|
+
// its skill listing carries installed (or bound) skills only; the
|
|
163
|
+
// marketplace is the orchestrator's to offer.
|
|
164
|
+
skillMarketplace: false,
|
|
159
165
|
getSkillLoaderOptions: () => ({
|
|
160
166
|
trustProjectCompatRoots: skillLoaderOptions?.trustProjectCompatRoots === true,
|
|
161
167
|
disableDiscovery: skillLoaderOptions?.noSkills === true,
|
|
@@ -164,6 +170,7 @@ export function createWorkerToolRegistry(
|
|
|
164
170
|
: {}),
|
|
165
171
|
}),
|
|
166
172
|
});
|
|
173
|
+
assertRegisteredBuiltinTools(registry, registration, false);
|
|
167
174
|
return registry;
|
|
168
175
|
}
|
|
169
176
|
|
|
@@ -172,8 +179,6 @@ export function createWorkerToolRegistry(
|
|
|
172
179
|
* mediates nested Clio dispatch. A constant, not a lookup: there is nothing to
|
|
173
180
|
* vary by runtime, and a parameter would imply otherwise.
|
|
174
181
|
*/
|
|
175
|
-
export const WORKER_RUNTIME_MEDIATES_CLIO_DISPATCH = false;
|
|
176
|
-
|
|
177
182
|
export interface AttestedToolIdentityInput {
|
|
178
183
|
allowedTools: ReadonlyArray<ToolName>;
|
|
179
184
|
/** False when the resolved runtime mediates no tool calls at all. */
|