@iowarp/clio-coder 0.3.0 → 0.3.1
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 +33 -0
- package/README.md +50 -53
- package/dist/acp-FPR54DGL.js +138 -0
- package/dist/{agents-Q4MYPMUW.js → agents-OGPIHPJH.js} +33 -25
- package/dist/assets/codewiki.json +1 -0
- package/dist/assets/grammars/notices/@vscode__tree-sitter-wasm/LICENSE +21 -0
- package/dist/assets/grammars/notices/@vscode__tree-sitter-wasm/cgmanifest.json +16 -0
- package/dist/assets/grammars/notices/tree-sitter-wasms/LICENSE +24 -0
- package/dist/assets/grammars/tree-sitter-c-sharp.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-c.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-cpp.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-go.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-java.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-javascript.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-python.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-ruby.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-rust.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-tsx.wasm +0 -0
- package/dist/assets/grammars/tree-sitter-typescript.wasm +0 -0
- package/dist/assets/grammars/tree-sitter.wasm +0 -0
- package/dist/{auth-O6HYIJ6J.js → auth-IC3K6NIZ.js} +22 -15
- package/dist/{chunk-KKKPTZLM.js → chunk-2STGEDFV.js} +8 -1
- package/dist/chunk-3I7MS7N2.js +40 -0
- package/dist/chunk-3R73A4XB.js +69 -0
- package/dist/{chunk-26BZQOAD.js → chunk-474KN5II.js} +86 -115
- package/dist/{chunk-NI4DEJMC.js → chunk-4QKXUHSR.js} +26 -3
- package/dist/{chunk-X3BR7HWV.js → chunk-5WIGXA4T.js} +7 -1
- package/dist/{chunk-TFSSEXL6.js → chunk-673JJUWJ.js} +14 -4
- package/dist/{chunk-GNGDQYDU.js → chunk-7SS2CTV2.js} +27922 -1249
- package/dist/{chunk-7RBKDI66.js → chunk-ASND7OZK.js} +104 -12
- package/dist/{chunk-X3NE4WVW.js → chunk-BNAZZHFG.js} +7 -1
- package/dist/{chunk-RQDWMVRB.js → chunk-BSU2YIWB.js} +9 -3
- package/dist/{chunk-CLJ5HLUD.js → chunk-C4PTHK7P.js} +24 -5
- package/dist/{chunk-QV47YRF4.js → chunk-CGKSTWHD.js} +7 -1
- package/dist/{chunk-BYEU76JP.js → chunk-DKGKUHFA.js} +34 -9
- package/dist/chunk-EYOKLTMF.js +170 -0
- package/dist/{chunk-PS4PFJQP.js → chunk-FCIH3BIZ.js} +15258 -14130
- package/dist/{chunk-2J63S4SF.js → chunk-FST4FYJB.js} +82 -14
- package/dist/{chunk-3DANZDGR.js → chunk-G34LV2PF.js} +34 -9
- package/dist/{chunk-BBUH4VAA.js → chunk-GAEBEQVI.js} +34 -21
- package/dist/chunk-GB6QRBXN.js +8543 -0
- package/dist/chunk-GEP36Y4X.js +12796 -0
- package/dist/{chunk-TKHQ4DGZ.js → chunk-H6F6BYOH.js} +496 -121
- package/dist/{chunk-UGYAX5YI.js → chunk-HQQID6OA.js} +10 -5
- package/dist/chunk-IHXBNWMM.js +137 -0
- package/dist/{chunk-ME6DNWIU.js → chunk-IS3ONKU3.js} +7 -1
- package/dist/{chunk-DXQNI4PC.js → chunk-IWHMRKLL.js} +8 -1
- package/dist/chunk-K2ITRMHZ.js +642 -0
- package/dist/{chunk-KBR4MZZR.js → chunk-K5XEMXTI.js} +7 -1
- package/dist/{chunk-AMFR5YA3.js → chunk-KKNLWXI6.js} +24 -10
- package/dist/{chunk-JWHCJDCI.js → chunk-KY56HMHH.js} +145 -61
- package/dist/{chunk-E3NYWENM.js → chunk-LU4TK2PR.js} +52 -7
- package/dist/{chunk-UWIJNAOB.js → chunk-M5T5VO65.js} +109 -42
- package/dist/{chunk-JPOWPFCU.js → chunk-MAR7Y6HW.js} +38 -16
- package/dist/chunk-N6F52NLF.js +6951 -0
- package/dist/{chunk-UHTSULZS.js → chunk-NMOX6HFD.js} +20 -7
- package/dist/{chunk-WD6AJM35.js → chunk-OLBBMFRD.js} +30 -13
- package/dist/{chunk-VOO7NYPP.js → chunk-PFEFKVGL.js} +22 -6
- package/dist/{chunk-6CWDTGUC.js → chunk-PIUMUEMV.js} +7 -1
- package/dist/chunk-PV4JUBVJ.js +462 -0
- package/dist/{chunk-527KG6XR.js → chunk-Q3RUPKEJ.js} +22 -4
- package/dist/{chunk-D5YD55AR.js → chunk-Q5WJOSJ7.js} +11 -1
- package/dist/{chunk-5N2FG33Q.js → chunk-R346GLFC.js} +7 -1
- package/dist/{chunk-4UQA7NCT.js → chunk-R5KLMSBV.js} +7 -2
- package/dist/{chunk-PIDUD6M2.js → chunk-RDLVBZEO.js} +11 -6
- package/dist/{chunk-O4EJEDHO.js → chunk-RPTR2H26.js} +40 -31
- package/dist/{chunk-HBU5MTAM.js → chunk-SVNXH4L2.js} +7 -1
- package/dist/{chunk-XNISANGE.js → chunk-TEKV33Q5.js} +122 -57
- package/dist/chunk-TXOTCRLG.js +15 -0
- package/dist/{chunk-VPAWTYLY.js → chunk-WEPFGWHJ.js} +7 -1
- package/dist/{chunk-HMYNFFY4.js → chunk-XPLRXC72.js} +7 -2
- package/dist/{chunk-UU3R62TT.js → chunk-XYWBQRDM.js} +13 -4
- package/dist/{chunk-7BHLZB3A.js → chunk-ZPY3JZ5E.js} +32 -10
- package/dist/cli/index.js +39 -33
- package/dist/clio-BZVGEUFJ.js +58 -0
- package/dist/{components-JVHMUBEB.js → components-DMAOEKFB.js} +26 -9
- package/dist/{config-ZFCDBMDC.js → config-IRUQ7SE4.js} +42 -31
- package/dist/configure-S7S6F6CL.js +32 -0
- package/dist/{context-CDXTP2MP.js → context-3KWFLHJG.js} +17 -11
- package/dist/{context-E3KIFVXI.js → context-5RADCKTR.js} +33 -28
- package/dist/{context-clear-3F4PLXOS.js → context-clear-7TSNPAAI.js} +36 -28
- package/dist/{context-index-Q7YSYTR3.js → context-index-W4RLWOQH.js} +10 -4
- package/dist/{docs-YIETIWZI.js → docs-5AWSPS37.js} +16 -10
- package/dist/doctor-UC5NAJYQ.js +77 -0
- package/dist/{eval-B3KZZESM.js → eval-U6TJHRLX.js} +77 -24
- package/dist/{evidence-V67CHM35.js → evidence-YEGUW4L3.js} +34 -26
- package/dist/{evolve-YDZSUQYA.js → evolve-TXARCTPG.js} +39 -26
- package/dist/{extensions-SRG7XCAH.js → extensions-OZFJ3A3G.js} +13 -7
- package/dist/{fleet-CA2CRTVG.js → fleet-6G3DHNYE.js} +45 -37
- package/dist/fleet-preflight-DSNT37JK.js +23 -0
- package/dist/{init-2OZDJE2D.js → init-KZ5QTF6M.js} +42 -34
- package/dist/{memory-3PIQQAKX.js → memory-73ESV5YC.js} +35 -27
- package/dist/{models-DY35XI7Y.js → models-A4PVNWJK.js} +34 -23
- package/dist/{paths-5OMXW7Z4.js → paths-C4H6IV77.js} +12 -6
- package/dist/preload-6WVMHX3A.js +13 -0
- package/dist/{reset-PIFYNOS3.js → reset-BGW6OGMV.js} +17 -11
- package/dist/{run-3VSPP24F.js → run-YTPEYQOH.js} +60 -48
- package/dist/{share-D36RQCXM.js → share-YIFFV4NQ.js} +16 -10
- package/dist/{skills-F2MRLELY.js → skills-2V6RA3OQ.js} +18 -11
- package/dist/{skills-eval-E2ZTW4PL.js → skills-eval-S2TVJO4F.js} +45 -36
- package/dist/{targets-DZMEZAH4.js → targets-TYXLPB23.js} +61 -59
- package/dist/{trace-7NYCUI2J.js → trace-GGOJ6Q6Z.js} +9 -3
- package/dist/{uninstall-AD3JWHBB.js → uninstall-LLLT4F4W.js} +14 -8
- package/dist/{upgrade-WYYBKGDY.js → upgrade-33G2LMM5.js} +45 -23
- package/dist/{usage-ULIDAGFF.js → usage-ZAFSXKKG.js} +35 -27
- package/dist/version-KGEG7EPO.js +21 -0
- package/dist/{wiki-generate-PKFIX6OB.js → wiki-generate-NUQCVOQ3.js} +55 -45
- package/dist/worker/entry.js +101 -43
- package/docs/README.md +12 -9
- package/docs/acp.md +28 -5
- package/docs/alcf-provider.md +1 -1
- package/docs/architecture.md +23 -2
- package/docs/artifact-placement.md +101 -0
- package/docs/artifact-versions.md +1 -1
- package/docs/built-in-agents.md +4 -2
- package/docs/capacity-and-scheduling.md +1 -1
- package/docs/commands-and-modes.md +125 -41
- package/docs/configuration-and-targets.md +88 -18
- package/docs/context-engine.md +6 -2
- package/docs/development-pipeline.md +77 -0
- package/docs/documentation-coverage.md +4 -4
- package/docs/documentation-guide.md +3 -3
- package/docs/environment-variables.md +2 -1
- package/docs/eval-runner.md +3 -3
- package/docs/evals-internal.md +2 -2
- package/docs/evidence-and-memory.md +6 -2
- package/docs/evolution.md +1 -1
- package/docs/exit-codes-and-output.md +1 -1
- package/docs/extensions-and-sharing.md +18 -11
- package/docs/fleet-demo-runbook.md +22 -23
- package/docs/fleet-dispatch.md +111 -12
- package/docs/glossary.md +107 -15
- package/docs/html/agents_blueprint.html +3 -3
- package/docs/html/alcf_blueprint.html +3 -3
- package/docs/html/architecture_blueprint.html +3 -3
- package/docs/html/commands_blueprint.html +187 -42
- package/docs/html/configuration_blueprint.html +7 -7
- package/docs/html/context_blueprint.html +3 -3
- package/docs/html/documentation_blueprint.html +1 -1
- package/docs/html/environment_blueprint.html +3 -3
- package/docs/html/eval_blueprint.html +4 -4
- package/docs/html/evals_internal_blueprint.html +3 -3
- package/docs/html/evolution_blueprint.html +3 -3
- package/docs/html/extensions_blueprint.html +3 -3
- package/docs/html/fleet_dispatch_blueprint.html +8 -8
- package/docs/html/index.html +5 -5
- package/docs/html/lifecycle_blueprint.html +4 -4
- package/docs/html/memory_blueprint.html +3 -3
- package/docs/html/middleware_blueprint.html +3 -3
- package/docs/html/models_blueprint.html +2 -2
- package/docs/html/observability_blueprint.html +2 -2
- package/docs/html/provider_adapter_blueprint.html +3 -3
- package/docs/html/safety_blueprint.html +3 -3
- package/docs/html/skills_blueprint.html +2 -2
- package/docs/html/soak_blueprint.html +3 -3
- package/docs/html/tool_usage_blueprint.html +4 -4
- package/docs/html/tools_blueprint.html +2 -2
- package/docs/html/trace_blueprint.html +3 -3
- package/docs/html/tui_design_blueprint.html +100 -40
- package/docs/html/validation_blueprint.html +1 -1
- package/docs/html/worker_dispatch_blueprint.html +3 -3
- package/docs/installation-and-lifecycle.md +62 -11
- package/docs/middleware-and-components.md +1 -1
- package/docs/model-catalog.md +2 -2
- package/docs/observability.md +3 -3
- package/docs/proactive-memory.md +12 -12
- package/docs/prompt-envelope-and-tools.md +2 -2
- package/docs/provider-adapter-cookbook.md +1 -1
- package/docs/release-cut-checklist.md +4 -0
- package/docs/safety-model.md +21 -5
- package/docs/scientific-validation.md +3 -3
- package/docs/session-lifecycle.md +2 -2
- package/docs/skills-marketplace.md +1 -1
- package/docs/time-conventions.md +101 -0
- package/docs/tool-usage.md +5 -4
- package/docs/trace-store.md +1 -1
- package/docs/troubleshooting.md +1 -1
- package/docs/tui-design.md +83 -27
- package/docs/worker-dispatch-mechanics.md +3 -3
- package/package.json +16 -16
- package/skills/README.md +5 -6
- package/skills/git/file-ticket/SKILL.md +107 -0
- package/skills/git/file-ticket/evals.md +54 -0
- package/skills/git/fix-issue/SKILL.md +106 -0
- package/skills/git/fix-issue/evals.md +71 -0
- package/skills/git/ship/SKILL.md +92 -0
- package/skills/git/ship/evals.md +72 -0
- package/skills/skill-marketplace.json +12 -20
- package/src/cli/acp.ts +88 -0
- package/src/cli/agents.ts +60 -0
- package/src/cli/args.ts +280 -0
- package/src/cli/argv.ts +170 -0
- package/src/cli/ask.ts +34 -0
- package/src/cli/auth.ts +468 -0
- package/src/cli/bootstrap-generate.ts +498 -0
- package/src/cli/clio.ts +34 -0
- package/src/cli/components.ts +195 -0
- package/src/cli/config-inspect.ts +330 -0
- package/src/cli/config.ts +72 -0
- package/src/cli/configure-interop.ts +67 -0
- package/src/cli/configure-layout.ts +172 -0
- package/src/cli/configure.ts +1487 -0
- package/src/cli/context-clear.ts +76 -0
- package/src/cli/context-index.ts +102 -0
- package/src/cli/context.ts +316 -0
- package/src/cli/default-target.ts +63 -0
- package/src/cli/docs.ts +340 -0
- package/src/cli/doctor.ts +54 -0
- package/src/cli/eval.ts +315 -0
- package/src/cli/evidence.ts +222 -0
- package/src/cli/evolve.ts +219 -0
- package/src/cli/extensions.ts +205 -0
- package/src/cli/fleet.ts +827 -0
- package/src/cli/index.ts +309 -0
- package/src/cli/init.ts +219 -0
- package/src/cli/initial-message.ts +47 -0
- package/src/cli/internal-dispatch.ts +55 -0
- package/src/cli/memory.ts +180 -0
- package/src/cli/models.ts +257 -0
- package/src/cli/modes/json-stream.ts +85 -0
- package/src/cli/modes/jsonl.ts +9 -0
- package/src/cli/modes/print.ts +589 -0
- package/src/cli/oauth-manual-input.ts +72 -0
- package/src/cli/oauth-select.ts +36 -0
- package/src/cli/output-guard.ts +48 -0
- package/src/cli/paths.ts +44 -0
- package/src/cli/provider-target.ts +113 -0
- package/src/cli/removal.ts +72 -0
- package/src/cli/reset.ts +253 -0
- package/src/cli/run.ts +497 -0
- package/src/cli/share.ts +243 -0
- package/src/cli/shared.ts +60 -0
- package/src/cli/skills-eval.ts +1225 -0
- package/src/cli/skills.ts +470 -0
- package/src/cli/steer-channel.ts +86 -0
- package/src/cli/targets.ts +1150 -0
- package/src/cli/text-layout.ts +102 -0
- package/src/cli/trace.ts +274 -0
- package/src/cli/uninstall.ts +405 -0
- package/src/cli/upgrade.ts +270 -0
- package/src/cli/usage.ts +869 -0
- package/src/cli/validate-model.ts +28 -0
- package/src/cli/version.ts +7 -0
- package/src/cli/wiki-generate.ts +509 -0
- package/src/core/artifact-paths.ts +43 -0
- package/src/core/bash-exec.ts +242 -0
- package/src/core/boot-trace.ts +37 -0
- package/src/core/bus-events.ts +728 -0
- package/src/core/bus-trace.ts +53 -0
- package/src/core/c-header-language.ts +265 -0
- package/src/core/clio-repo.ts +78 -0
- package/src/core/config.ts +1593 -0
- package/src/core/context-floor.ts +33 -0
- package/src/core/defaults.ts +625 -0
- package/src/core/domain-loader.ts +170 -0
- package/src/core/event-bus.ts +94 -0
- package/src/core/file-references.ts +282 -0
- package/src/core/guardrails.ts +185 -0
- package/src/core/headless-permission.ts +21 -0
- package/src/core/init.ts +223 -0
- package/src/core/json-payload.ts +58 -0
- package/src/core/package-root.ts +54 -0
- package/src/core/path-canonical.ts +37 -0
- package/src/core/process-identity.ts +41 -0
- package/src/core/recent-models.ts +91 -0
- package/src/core/release.ts +2 -0
- package/src/core/residency-protection.ts +56 -0
- package/src/core/resolve-config-value.ts +88 -0
- package/src/core/response-schema.ts +279 -0
- package/src/core/run-overrides.ts +77 -0
- package/src/core/safe-exec.ts +193 -0
- package/src/core/safe-id.ts +37 -0
- package/src/core/safe-resource-write.ts +162 -0
- package/src/core/session-routing.ts +339 -0
- package/src/core/settings-layers.ts +220 -0
- package/src/core/shared-bus.ts +8 -0
- package/src/core/shell-quote.ts +26 -0
- package/src/core/skill-activation.ts +190 -0
- package/src/core/startup-timer.ts +37 -0
- package/src/core/state-file-lock.ts +207 -0
- package/src/core/termination.ts +202 -0
- package/src/core/timers.ts +38 -0
- package/src/core/tool-names.ts +65 -0
- package/src/core/verification-scripts.ts +13 -0
- package/src/core/workspace-files.ts +492 -0
- package/src/core/xdg.ts +177 -0
- package/src/domains/agents/builtins/architect.md +4 -4
- package/src/domains/agents/builtins/coder.md +3 -2
- package/src/domains/agents/builtins/debugger.md +1 -1
- package/src/domains/agents/builtins/documenter.md +1 -1
- package/src/domains/agents/builtins/git-master.md +3 -3
- package/src/domains/agents/builtins/provenance.md +1 -1
- package/src/domains/agents/builtins/researcher.md +1 -1
- package/src/domains/agents/builtins/scout.md +1 -1
- package/src/domains/agents/builtins/tester.md +1 -1
- package/src/domains/agents/builtins/verifier.md +1 -1
- package/src/domains/agents/builtins/wiki-writer.md +1 -1
- package/src/domains/agents/catalog.ts +172 -0
- package/src/domains/agents/contract.ts +16 -0
- package/src/domains/agents/extension.ts +110 -0
- package/src/domains/agents/fleet-commands.ts +154 -0
- package/src/domains/agents/fleet-contract.ts +797 -0
- package/src/domains/agents/frontmatter.ts +40 -0
- package/src/domains/agents/index.ts +102 -0
- package/src/domains/agents/manifest.ts +6 -0
- package/src/domains/agents/recipe-schema.ts +202 -0
- package/src/domains/agents/recipe.ts +125 -0
- package/src/domains/agents/registry.ts +111 -0
- package/src/domains/agents/result-contract.ts +1265 -0
- package/src/domains/agents/spec.ts +371 -0
- package/src/domains/agents/write-boundary.ts +109 -0
- package/src/domains/components/diff.ts +99 -0
- package/src/domains/components/hash.ts +21 -0
- package/src/domains/components/index.ts +3 -0
- package/src/domains/components/scan.ts +304 -0
- package/src/domains/components/snapshot.ts +108 -0
- package/src/domains/components/types.ts +82 -0
- package/src/domains/config/agent-namespace.ts +13 -0
- package/src/domains/config/classify.ts +94 -0
- package/src/domains/config/contract.ts +22 -0
- package/src/domains/config/extension.ts +136 -0
- package/src/domains/config/index.ts +13 -0
- package/src/domains/config/keybindings.ts +164 -0
- package/src/domains/config/manifest.ts +6 -0
- package/src/domains/config/watcher.ts +41 -0
- package/src/domains/context/adoption.ts +880 -0
- package/src/domains/context/bootstrap-prompt.ts +273 -0
- package/src/domains/context/bootstrap.ts +1409 -0
- package/src/domains/context/clear.ts +86 -0
- package/src/domains/context/clio-md.ts +327 -0
- package/src/domains/context/codewiki/cmake.ts +356 -0
- package/src/domains/context/codewiki/cooperative.ts +46 -0
- package/src/domains/context/codewiki/digest.ts +135 -0
- package/src/domains/context/codewiki/grammar-assets.ts +33 -0
- package/src/domains/context/codewiki/indexer.ts +1614 -0
- package/src/domains/context/codewiki/tree-sitter.ts +771 -0
- package/src/domains/context/contract.ts +62 -0
- package/src/domains/context/excluded-dirs.ts +1 -0
- package/src/domains/context/extension.ts +407 -0
- package/src/domains/context/fingerprint.ts +196 -0
- package/src/domains/context/index.ts +164 -0
- package/src/domains/context/init-options.ts +69 -0
- package/src/domains/context/manifest.ts +6 -0
- package/src/domains/context/operator-profile.ts +157 -0
- package/src/domains/context/project-metadata.ts +510 -0
- package/src/domains/context/project-rules.ts +227 -0
- package/src/domains/context/prompt-context.ts +62 -0
- package/src/domains/context/refresh.ts +170 -0
- package/src/domains/context/sibling-files.ts +10 -0
- package/src/domains/context/state.ts +237 -0
- package/src/domains/context/wiki/assemble.ts +303 -0
- package/src/domains/context/wiki/frontmatter.ts +210 -0
- package/src/domains/context/wiki/generate.ts +590 -0
- package/src/domains/context/wiki/layout.ts +111 -0
- package/src/domains/context/wiki/meta.ts +221 -0
- package/src/domains/context/wiki/plan-store.ts +217 -0
- package/src/domains/context/wiki/plan.ts +250 -0
- package/src/domains/context/wiki/prompts.ts +270 -0
- package/src/domains/context/wiki/staleness.ts +198 -0
- package/src/domains/dispatch/active-route-planner.ts +168 -0
- package/src/domains/dispatch/admission-queue.ts +150 -0
- package/src/domains/dispatch/admission.ts +334 -0
- package/src/domains/dispatch/agent-candidates.ts +307 -0
- package/src/domains/dispatch/agent-ledger-hub.ts +71 -0
- package/src/domains/dispatch/agent-ledger-store.ts +257 -0
- package/src/domains/dispatch/agent-ledger.ts +212 -0
- package/src/domains/dispatch/agent-plan-adapter.ts +85 -0
- package/src/domains/dispatch/assignment-events.ts +132 -0
- package/src/domains/dispatch/assignment-reconcile.ts +76 -0
- package/src/domains/dispatch/assignment-store.ts +162 -0
- package/src/domains/dispatch/assignment.ts +278 -0
- package/src/domains/dispatch/backoff.ts +59 -0
- package/src/domains/dispatch/batch-store.ts +134 -0
- package/src/domains/dispatch/batch-tracker.ts +66 -0
- package/src/domains/dispatch/capability-match.ts +155 -0
- package/src/domains/dispatch/capacity-lease.ts +413 -0
- package/src/domains/dispatch/code-step-store.ts +52 -0
- package/src/domains/dispatch/code-step.ts +368 -0
- package/src/domains/dispatch/contract.ts +278 -0
- package/src/domains/dispatch/dedup.ts +133 -0
- package/src/domains/dispatch/event-pump.ts +251 -0
- package/src/domains/dispatch/execution-handoff.ts +29 -0
- package/src/domains/dispatch/execution-plan.ts +328 -0
- package/src/domains/dispatch/execution-role.ts +277 -0
- package/src/domains/dispatch/execution-scheduler.ts +583 -0
- package/src/domains/dispatch/extension.ts +5869 -0
- package/src/domains/dispatch/failure-classification.ts +141 -0
- package/src/domains/dispatch/fleet-plan.ts +225 -0
- package/src/domains/dispatch/fleet-preflight.ts +394 -0
- package/src/domains/dispatch/gate-decisions.ts +1040 -0
- package/src/domains/dispatch/gate-role-prompts.ts +58 -0
- package/src/domains/dispatch/heartbeat.ts +27 -0
- package/src/domains/dispatch/index.ts +137 -0
- package/src/domains/dispatch/joint-route-adapter.ts +114 -0
- package/src/domains/dispatch/joint-route-resolver.ts +283 -0
- package/src/domains/dispatch/manifest.ts +6 -0
- package/src/domains/dispatch/orphan-recovery.ts +224 -0
- package/src/domains/dispatch/outcome.ts +109 -0
- package/src/domains/dispatch/phase-timing.ts +47 -0
- package/src/domains/dispatch/placement.ts +202 -0
- package/src/domains/dispatch/receipt-findings.ts +255 -0
- package/src/domains/dispatch/receipt-integrity.ts +378 -0
- package/src/domains/dispatch/recovery-candidates.ts +74 -0
- package/src/domains/dispatch/reproducibility.ts +48 -0
- package/src/domains/dispatch/reservation-store.ts +501 -0
- package/src/domains/dispatch/route-approval.ts +177 -0
- package/src/domains/dispatch/route-candidates.ts +57 -0
- package/src/domains/dispatch/route-decision.ts +1079 -0
- package/src/domains/dispatch/route-facts.ts +187 -0
- package/src/domains/dispatch/route-history.ts +238 -0
- package/src/domains/dispatch/route-observer.ts +488 -0
- package/src/domains/dispatch/route-policy.ts +327 -0
- package/src/domains/dispatch/route-quality.ts +256 -0
- package/src/domains/dispatch/route-readiness.ts +120 -0
- package/src/domains/dispatch/routing-intent.ts +287 -0
- package/src/domains/dispatch/run-identity.ts +56 -0
- package/src/domains/dispatch/scout-transition.ts +130 -0
- package/src/domains/dispatch/state.ts +277 -0
- package/src/domains/dispatch/tool-stats.ts +132 -0
- package/src/domains/dispatch/transport.ts +209 -0
- package/src/domains/dispatch/types.ts +785 -0
- package/src/domains/dispatch/validation-grounding.ts +154 -0
- package/src/domains/dispatch/validation.ts +721 -0
- package/src/domains/dispatch/worker-protocol.ts +275 -0
- package/src/domains/dispatch/worker-spawn.ts +566 -0
- package/src/domains/dispatch/write-boundary-enforcer.ts +97 -0
- package/src/domains/dispatch/write-boundary.ts +426 -0
- package/src/domains/eval/artifacts/redact.ts +42 -0
- package/src/domains/eval/artifacts/store.ts +173 -0
- package/src/domains/eval/compare/compare.ts +33 -0
- package/src/domains/eval/compare/gates.ts +66 -0
- package/src/domains/eval/compare/thresholds.ts +92 -0
- package/src/domains/eval/harness-metrics.ts +62 -0
- package/src/domains/eval/index.ts +66 -0
- package/src/domains/eval/metrics/chaos-stream.ts +93 -0
- package/src/domains/eval/metrics/context.ts +34 -0
- package/src/domains/eval/metrics/coverage.ts +21 -0
- package/src/domains/eval/metrics/evidence.ts +182 -0
- package/src/domains/eval/metrics/fleet-loop-stream.ts +196 -0
- package/src/domains/eval/metrics/invariants.ts +736 -0
- package/src/domains/eval/metrics/latency.ts +4 -0
- package/src/domains/eval/metrics/token-stream.ts +139 -0
- package/src/domains/eval/metrics/tokens.ts +51 -0
- package/src/domains/eval/metrics/tool-calls.ts +7 -0
- package/src/domains/eval/proactive-memory.ts +279 -0
- package/src/domains/eval/provenance.ts +35 -0
- package/src/domains/eval/report.ts +234 -0
- package/src/domains/eval/reports/json.ts +5 -0
- package/src/domains/eval/reports/junit.ts +23 -0
- package/src/domains/eval/reports/markdown.ts +20 -0
- package/src/domains/eval/reports/swe-jsonl.ts +16 -0
- package/src/domains/eval/reports/text.ts +25 -0
- package/src/domains/eval/run-compare.ts +274 -0
- package/src/domains/eval/runner.ts +244 -0
- package/src/domains/eval/runners/clio-run.ts +148 -0
- package/src/domains/eval/runners/context-index.ts +56 -0
- package/src/domains/eval/runners/context-init.ts +203 -0
- package/src/domains/eval/runners/external-command.ts +350 -0
- package/src/domains/eval/runtime-paths.ts +171 -0
- package/src/domains/eval/schema/artifact.ts +75 -0
- package/src/domains/eval/schema/suite.ts +235 -0
- package/src/domains/eval/schema/validate.ts +339 -0
- package/src/domains/eval/store.ts +392 -0
- package/src/domains/eval/suites/load.ts +74 -0
- package/src/domains/eval/suites/matrix.ts +19 -0
- package/src/domains/eval/suites/resolve.ts +44 -0
- package/src/domains/eval/suites/run.ts +325 -0
- package/src/domains/eval/task-file.ts +186 -0
- package/src/domains/eval/types.ts +141 -0
- package/src/domains/eval/verifiers/command.ts +27 -0
- package/src/domains/eval/verifiers/file-exists.ts +6 -0
- package/src/domains/eval/verifiers/patch.ts +22 -0
- package/src/domains/eval/workspaces/git.ts +41 -0
- package/src/domains/eval/workspaces/local.ts +17 -0
- package/src/domains/eval/workspaces/temp-copy.ts +29 -0
- package/src/domains/evidence/build.ts +1714 -0
- package/src/domains/evidence/eval.ts +605 -0
- package/src/domains/evidence/failure-attribution.ts +54 -0
- package/src/domains/evidence/finish-contract-map.ts +42 -0
- package/src/domains/evidence/index.ts +55 -0
- package/src/domains/evidence/provenance.ts +200 -0
- package/src/domains/evidence/redact.ts +81 -0
- package/src/domains/evidence/store.ts +291 -0
- package/src/domains/evidence/types.ts +325 -0
- package/src/domains/evolution/SELF_EDIT_GATE.md +91 -0
- package/src/domains/evolution/index.ts +26 -0
- package/src/domains/evolution/manifest.ts +154 -0
- package/src/domains/evolution/validate.ts +304 -0
- package/src/domains/extensions/contract.ts +22 -0
- package/src/domains/extensions/discovery.ts +193 -0
- package/src/domains/extensions/extension.ts +46 -0
- package/src/domains/extensions/index.ts +34 -0
- package/src/domains/extensions/manager.ts +30 -0
- package/src/domains/extensions/manifest.ts +6 -0
- package/src/domains/extensions/resources.ts +38 -0
- package/src/domains/extensions/state.ts +224 -0
- package/src/domains/extensions/types.ts +83 -0
- package/src/domains/interop/consent.ts +185 -0
- package/src/domains/interop/contract.ts +29 -0
- package/src/domains/interop/detect.ts +173 -0
- package/src/domains/interop/extension.ts +59 -0
- package/src/domains/interop/index.ts +34 -0
- package/src/domains/interop/manifest.ts +6 -0
- package/src/domains/interop/registry.ts +139 -0
- package/src/domains/interop/state.ts +92 -0
- package/src/domains/interop/types.ts +109 -0
- package/src/domains/lifecycle/contract.ts +11 -0
- package/src/domains/lifecycle/doctor.ts +536 -0
- package/src/domains/lifecycle/extension.ts +23 -0
- package/src/domains/lifecycle/index.ts +21 -0
- package/src/domains/lifecycle/install-method.ts +51 -0
- package/src/domains/lifecycle/manifest.ts +6 -0
- package/src/domains/lifecycle/migrations/index.ts +94 -0
- package/src/domains/lifecycle/state.ts +93 -0
- package/src/domains/lifecycle/upgrade-notice.ts +35 -0
- package/src/domains/lifecycle/version.ts +35 -0
- package/src/domains/memory/index.ts +128 -0
- package/src/domains/memory/operations.ts +143 -0
- package/src/domains/memory/prompt-section.ts +86 -0
- package/src/domains/memory/proposal.ts +180 -0
- package/src/domains/memory/store.ts +163 -0
- package/src/domains/memory/task-bank.ts +229 -0
- package/src/domains/memory/task-memory-handoff.ts +222 -0
- package/src/domains/memory/task-memory-policy.ts +602 -0
- package/src/domains/memory/task-memory-status.ts +58 -0
- package/src/domains/memory/task-memory-telemetry.ts +346 -0
- package/src/domains/memory/task-memory-trace.ts +89 -0
- package/src/domains/memory/types.ts +74 -0
- package/src/domains/memory/validate.ts +297 -0
- package/src/domains/middleware/budget.ts +216 -0
- package/src/domains/middleware/contract.ts +35 -0
- package/src/domains/middleware/dispatch-nudge.ts +469 -0
- package/src/domains/middleware/extension.ts +129 -0
- package/src/domains/middleware/hook-receipts.ts +70 -0
- package/src/domains/middleware/hooks-io.ts +174 -0
- package/src/domains/middleware/hooks.ts +432 -0
- package/src/domains/middleware/index.ts +154 -0
- package/src/domains/middleware/manifest.ts +6 -0
- package/src/domains/middleware/memory-intervention.ts +701 -0
- package/src/domains/middleware/rules.ts +42 -0
- package/src/domains/middleware/runtime.ts +333 -0
- package/src/domains/middleware/skills-reminder.ts +187 -0
- package/src/domains/middleware/snapshot.ts +71 -0
- package/src/domains/middleware/stalled-turn.ts +71 -0
- package/src/domains/middleware/task-board-reminder.ts +87 -0
- package/src/domains/middleware/task-nudge.ts +77 -0
- package/src/domains/middleware/tool-choice-control.ts +42 -0
- package/src/domains/middleware/types.ts +131 -0
- package/src/domains/middleware/validate.ts +329 -0
- package/src/domains/observability/accountability.ts +67 -0
- package/src/domains/observability/contract.ts +168 -0
- package/src/domains/observability/cost.ts +206 -0
- package/src/domains/observability/evidence-index.ts +123 -0
- package/src/domains/observability/extension.ts +281 -0
- package/src/domains/observability/index.ts +78 -0
- package/src/domains/observability/manifest.ts +10 -0
- package/src/domains/observability/metrics.ts +37 -0
- package/src/domains/observability/projection.ts +477 -0
- package/src/domains/observability/telemetry.ts +89 -0
- package/src/domains/observability/trace-store.ts +1454 -0
- package/src/domains/prompts/compiler.ts +556 -0
- package/src/domains/prompts/contract.ts +30 -0
- package/src/domains/prompts/extension.ts +304 -0
- package/src/domains/prompts/fragment-loader.ts +139 -0
- package/src/domains/prompts/fragments/identity/clio.md +3 -2
- package/src/domains/prompts/fragments/identity/self-awareness.md +63 -0
- package/src/domains/prompts/fragments/operating/contract.md +10 -1
- package/src/domains/prompts/hash.ts +73 -0
- package/src/domains/prompts/index.ts +32 -0
- package/src/domains/prompts/manifest.ts +8 -0
- package/src/domains/prompts/memory-intervention.ts +57 -0
- package/src/domains/prompts/preload.ts +82 -0
- package/src/domains/providers/auth/api-key.ts +47 -0
- package/src/domains/providers/auth/backend-file.ts +69 -0
- package/src/domains/providers/auth/backend-memory.ts +17 -0
- package/src/domains/providers/auth/index.ts +37 -0
- package/src/domains/providers/auth/oauth.ts +36 -0
- package/src/domains/providers/auth/storage.ts +667 -0
- package/src/domains/providers/capabilities.ts +50 -0
- package/src/domains/providers/catalog.ts +162 -0
- package/src/domains/providers/contract.ts +151 -0
- package/src/domains/providers/credentials.ts +20 -0
- package/src/domains/providers/eligibility.ts +24 -0
- package/src/domains/providers/errors.ts +64 -0
- package/src/domains/providers/extension.ts +536 -0
- package/src/domains/providers/index.ts +142 -0
- package/src/domains/providers/knowledge-base-path.ts +102 -0
- package/src/domains/providers/manifest.ts +6 -0
- package/src/domains/providers/model-capabilities.ts +136 -0
- package/src/domains/providers/model-discovery.ts +144 -0
- package/src/domains/providers/model-family.ts +32 -0
- package/src/domains/providers/model-runtime-capabilities.ts +712 -0
- package/src/domains/providers/models/local-models/clio-local-coding-targets.yaml +2 -2
- package/src/domains/providers/plugins.ts +59 -0
- package/src/domains/providers/probe/fingerprint.ts +44 -0
- package/src/domains/providers/probe/http.ts +114 -0
- package/src/domains/providers/probe/reasoning.ts +111 -0
- package/src/domains/providers/registry.ts +166 -0
- package/src/domains/providers/resolver.ts +156 -0
- package/src/domains/providers/runtime-resolution.ts +720 -0
- package/src/domains/providers/runtimes/antigravity/antigravity-code.ts +90 -0
- package/src/domains/providers/runtimes/builtins.ts +78 -0
- package/src/domains/providers/runtimes/claude/claude-code.ts +38 -0
- package/src/domains/providers/runtimes/claude/claude-sdk.ts +38 -0
- package/src/domains/providers/runtimes/claude/common.ts +55 -0
- package/src/domains/providers/runtimes/cloud/alcf.ts +171 -0
- package/src/domains/providers/runtimes/cloud/anthropic-max.ts +71 -0
- package/src/domains/providers/runtimes/cloud/anthropic.ts +43 -0
- package/src/domains/providers/runtimes/cloud/bedrock.ts +35 -0
- package/src/domains/providers/runtimes/cloud/deepseek.ts +50 -0
- package/src/domains/providers/runtimes/cloud/google.ts +41 -0
- package/src/domains/providers/runtimes/cloud/groq.ts +46 -0
- package/src/domains/providers/runtimes/cloud/mistral.ts +46 -0
- package/src/domains/providers/runtimes/cloud/openai-codex.ts +49 -0
- package/src/domains/providers/runtimes/cloud/openai.ts +46 -0
- package/src/domains/providers/runtimes/cloud/openrouter.ts +111 -0
- package/src/domains/providers/runtimes/common/lmstudio-logger.ts +32 -0
- package/src/domains/providers/runtimes/common/local-synth.ts +165 -0
- package/src/domains/providers/runtimes/common/probe-helpers.ts +474 -0
- package/src/domains/providers/runtimes/local-native/lemonade-anthropic.ts +27 -0
- package/src/domains/providers/runtimes/local-native/lemonade-openai.ts +26 -0
- package/src/domains/providers/runtimes/local-native/llamacpp-anthropic.ts +88 -0
- package/src/domains/providers/runtimes/local-native/llamacpp-completion.ts +207 -0
- package/src/domains/providers/runtimes/local-native/llamacpp-embed.ts +180 -0
- package/src/domains/providers/runtimes/local-native/llamacpp-rerank.ts +126 -0
- package/src/domains/providers/runtimes/local-native/llamacpp.ts +98 -0
- package/src/domains/providers/runtimes/local-native/lmstudio-native.ts +491 -0
- package/src/domains/providers/runtimes/local-native/ollama-native.ts +117 -0
- package/src/domains/providers/runtimes/local-native/sglang.ts +26 -0
- package/src/domains/providers/runtimes/local-native/vllm.ts +27 -0
- package/src/domains/providers/runtimes/protocol/anthropic-compat.ts +104 -0
- package/src/domains/providers/runtimes/protocol/anthropic-messages.ts +28 -0
- package/src/domains/providers/runtimes/protocol/bedrock.ts +26 -0
- package/src/domains/providers/runtimes/protocol/google.ts +27 -0
- package/src/domains/providers/runtimes/protocol/openai-compat.ts +145 -0
- package/src/domains/providers/support.ts +238 -0
- package/src/domains/providers/thinking-control-policy.ts +85 -0
- package/src/domains/providers/types/capability-flags.ts +114 -0
- package/src/domains/providers/types/cost-provenance.ts +7 -0
- package/src/domains/providers/types/inference.ts +41 -0
- package/src/domains/providers/types/knowledge-base.ts +156 -0
- package/src/domains/providers/types/local-model-quirks.ts +218 -0
- package/src/domains/providers/types/runtime-descriptor.ts +170 -0
- package/src/domains/providers/types/target-descriptor.ts +38 -0
- package/src/domains/resources/collision.ts +92 -0
- package/src/domains/resources/common-loader.ts +140 -0
- package/src/domains/resources/contract.ts +25 -0
- package/src/domains/resources/extension.ts +61 -0
- package/src/domains/resources/index.ts +74 -0
- package/src/domains/resources/loader.ts +86 -0
- package/src/domains/resources/manifest.ts +6 -0
- package/src/domains/resources/prompts/loader.ts +232 -0
- package/src/domains/resources/prompts/substitute.ts +65 -0
- package/src/domains/resources/skills/content-hash.ts +105 -0
- package/src/domains/resources/skills/evals.ts +175 -0
- package/src/domains/resources/skills/install.ts +410 -0
- package/src/domains/resources/skills/loader.ts +978 -0
- package/src/domains/resources/skills/marketplace.ts +255 -0
- package/src/domains/resources/skills/provenance-pin.ts +115 -0
- package/src/domains/safety/action-classifier.ts +268 -0
- package/src/domains/safety/approval-axis.ts +23 -0
- package/src/domains/safety/audit.ts +487 -0
- package/src/domains/safety/autonomy.ts +174 -0
- package/src/domains/safety/call-target.ts +59 -0
- package/src/domains/safety/contract.ts +65 -0
- package/src/domains/safety/damage-control.ts +44 -0
- package/src/domains/safety/default-path-policy.ts +117 -0
- package/src/domains/safety/extension.ts +383 -0
- package/src/domains/safety/finish-contract-registration.ts +128 -0
- package/src/domains/safety/finish-contract.ts +554 -0
- package/src/domains/safety/index.ts +44 -0
- package/src/domains/safety/loop-detector.ts +143 -0
- package/src/domains/safety/manifest.ts +6 -0
- package/src/domains/safety/path-policy.ts +164 -0
- package/src/domains/safety/policy-engine.ts +994 -0
- package/src/domains/safety/project-policy.ts +391 -0
- package/src/domains/safety/protected-artifacts-registration.ts +189 -0
- package/src/domains/safety/protected-artifacts.ts +993 -0
- package/src/domains/safety/rejection-feedback.ts +102 -0
- package/src/domains/safety/rigor.ts +72 -0
- package/src/domains/safety/rule-compiler.ts +48 -0
- package/src/domains/safety/rule-pack-loader.ts +92 -0
- package/src/domains/safety/run-effects.ts +197 -0
- package/src/domains/safety/scope.ts +61 -0
- package/src/domains/scheduling/budget.ts +35 -0
- package/src/domains/scheduling/cluster.ts +175 -0
- package/src/domains/scheduling/contract.ts +30 -0
- package/src/domains/scheduling/extension.ts +91 -0
- package/src/domains/scheduling/index.ts +12 -0
- package/src/domains/scheduling/manifest.ts +6 -0
- package/src/domains/session/archive-readers.ts +208 -0
- package/src/domains/session/checkpoint.ts +38 -0
- package/src/domains/session/compaction/auto.ts +89 -0
- package/src/domains/session/compaction/branch-summary.ts +186 -0
- package/src/domains/session/compaction/compact.ts +493 -0
- package/src/domains/session/compaction/cut-point.ts +171 -0
- package/src/domains/session/compaction/defaults.ts +34 -0
- package/src/domains/session/compaction/mask-observations.ts +265 -0
- package/src/domains/session/compaction/session-entries.ts +18 -0
- package/src/domains/session/compaction/tokens.ts +147 -0
- package/src/domains/session/context-accounting.ts +583 -0
- package/src/domains/session/context-ledger.ts +348 -0
- package/src/domains/session/contract.ts +144 -0
- package/src/domains/session/cwd-fallback.ts +65 -0
- package/src/domains/session/entries.ts +509 -0
- package/src/domains/session/extension.ts +322 -0
- package/src/domains/session/history.ts +172 -0
- package/src/domains/session/index.ts +84 -0
- package/src/domains/session/manager.ts +128 -0
- package/src/domains/session/manifest.ts +6 -0
- package/src/domains/session/migrations/index.ts +27 -0
- package/src/domains/session/prompt-manifest.ts +173 -0
- package/src/domains/session/protected-artifact-journal.ts +241 -0
- package/src/domains/session/protected-artifacts.ts +90 -0
- package/src/domains/session/retry.ts +238 -0
- package/src/domains/session/task-board.ts +375 -0
- package/src/domains/session/tree/active-path.ts +98 -0
- package/src/domains/session/tree/fork.ts +160 -0
- package/src/domains/session/tree/manager.ts +128 -0
- package/src/domains/session/tree/navigator.ts +177 -0
- package/src/domains/session/tree/preview.ts +259 -0
- package/src/domains/session/usage.ts +148 -0
- package/src/domains/session/workspace/git-probe.ts +161 -0
- package/src/domains/session/workspace/index.ts +4 -0
- package/src/domains/session/workspace/project-type.ts +217 -0
- package/src/domains/session/workspace/snapshot.ts +74 -0
- package/src/domains/share/archive.ts +684 -0
- package/src/domains/share/contract.ts +9 -0
- package/src/domains/share/extension.ts +26 -0
- package/src/domains/share/index.ts +28 -0
- package/src/domains/share/manifest.ts +6 -0
- package/src/engine/acp/adapter.ts +397 -0
- package/src/engine/acp/errors.ts +32 -0
- package/src/engine/acp/event-mapper.ts +154 -0
- package/src/engine/acp/server.ts +656 -0
- package/src/engine/acp/tool-mediator.ts +686 -0
- package/src/engine/acp/transport.ts +654 -0
- package/src/engine/acp/types.ts +170 -0
- package/src/engine/agent.ts +29 -0
- package/src/engine/ai.ts +202 -0
- package/src/engine/alcf-oauth.ts +198 -0
- package/src/engine/antigravity/subprocess-runtime.ts +205 -0
- package/src/engine/apis/degraded-inference.ts +95 -0
- package/src/engine/apis/index.ts +20 -0
- package/src/engine/apis/llamacpp-residency.ts +252 -0
- package/src/engine/apis/lmstudio-native.ts +1438 -0
- package/src/engine/apis/lmstudio-residency.ts +92 -0
- package/src/engine/apis/ollama-native.ts +507 -0
- package/src/engine/apis/openai-completions.ts +716 -0
- package/src/engine/apis/output-budget.ts +99 -0
- package/src/engine/apis/residency-lock.ts +29 -0
- package/src/engine/apis/residency.ts +640 -0
- package/src/engine/apis/resident-models.ts +42 -0
- package/src/engine/apis/sampling-overrides.ts +38 -0
- package/src/engine/apis/thinking-replay.ts +11 -0
- package/src/engine/claude/sdk-runtime.ts +685 -0
- package/src/engine/claude/session-id.ts +5 -0
- package/src/engine/claude/subprocess-runtime.ts +316 -0
- package/src/engine/claude/tool-safety.ts +400 -0
- package/src/engine/external-subprocess.ts +23 -0
- package/src/engine/harmony-response.ts +165 -0
- package/src/engine/loop-guard.ts +1127 -0
- package/src/engine/oauth.ts +192 -0
- package/src/engine/pi-mono-names.ts +13 -0
- package/src/engine/provider-payload.ts +315 -0
- package/src/engine/select-list.ts +53 -0
- package/src/engine/session.ts +834 -0
- package/src/engine/strip-tokenizer-sentinels.ts +125 -0
- package/src/engine/tui.ts +103 -0
- package/src/engine/types.ts +66 -0
- package/src/engine/worker-events.ts +100 -0
- package/src/engine/worker-runtime.ts +1022 -0
- package/src/engine/worker-tools.ts +203 -0
- package/src/entry/orchestrator.ts +1873 -0
- package/src/interactive/application-controller.ts +346 -0
- package/src/interactive/bus-notices.ts +265 -0
- package/src/interactive/chat-loop-messages.ts +626 -0
- package/src/interactive/chat-loop-policy.ts +18 -0
- package/src/interactive/chat-loop.ts +865 -0
- package/src/interactive/chat-panel.ts +1694 -0
- package/src/interactive/chat-renderer.ts +1038 -0
- package/src/interactive/clio-editor.ts +166 -0
- package/src/interactive/command-fallbacks.ts +23 -0
- package/src/interactive/command-output.ts +85 -0
- package/src/interactive/context-activity.ts +203 -0
- package/src/interactive/context-meter.ts +223 -0
- package/src/interactive/context-overlay.ts +220 -0
- package/src/interactive/cost-overlay.ts +279 -0
- package/src/interactive/dispatch-board.ts +1319 -0
- package/src/interactive/dispatch-steering.ts +86 -0
- package/src/interactive/editor-bash.ts +46 -0
- package/src/interactive/editor-steer.ts +51 -0
- package/src/interactive/editor-submit.ts +303 -0
- package/src/interactive/external-editor.ts +67 -0
- package/src/interactive/follow-up-queue-panel.ts +75 -0
- package/src/interactive/footer/dashboard.ts +534 -0
- package/src/interactive/footer/notifications.ts +275 -0
- package/src/interactive/footer/widgets.ts +1246 -0
- package/src/interactive/footer-panel.ts +187 -0
- package/src/interactive/format-time.ts +85 -0
- package/src/interactive/index.ts +11 -0
- package/src/interactive/interactive-application.ts +755 -0
- package/src/interactive/interactive-event-projection.ts +380 -0
- package/src/interactive/interactive-input-runtime.ts +261 -0
- package/src/interactive/interactive-presentation.ts +452 -0
- package/src/interactive/interactive-shell.ts +134 -0
- package/src/interactive/interactive-slash-runtime.ts +492 -0
- package/src/interactive/interactive-subscriptions.ts +111 -0
- package/src/interactive/interactive-tickers.ts +152 -0
- package/src/interactive/keybinding-manager.ts +496 -0
- package/src/interactive/layout.ts +20 -0
- package/src/interactive/leader-key.ts +143 -0
- package/src/interactive/loop-guard-interrupt.ts +101 -0
- package/src/interactive/memory-overlay.ts +280 -0
- package/src/interactive/overlay-ask-user-lifecycle.ts +110 -0
- package/src/interactive/overlay-auth-lifecycle.ts +308 -0
- package/src/interactive/overlay-frame.ts +502 -0
- package/src/interactive/overlay-general-openers.ts +217 -0
- package/src/interactive/overlay-key-routing.ts +213 -0
- package/src/interactive/overlay-lifecycle.ts +413 -0
- package/src/interactive/overlay-model-selectors.ts +127 -0
- package/src/interactive/overlay-permission-lifecycle.ts +344 -0
- package/src/interactive/overlay-resource-openers.ts +112 -0
- package/src/interactive/overlay-session-lifecycle.ts +270 -0
- package/src/interactive/overlay-transitions.ts +57 -0
- package/src/interactive/overlays/agents.ts +69 -0
- package/src/interactive/overlays/ask-user.ts +921 -0
- package/src/interactive/overlays/auth-dialog.ts +221 -0
- package/src/interactive/overlays/context-reset.ts +108 -0
- package/src/interactive/overlays/cwd-fallback.ts +141 -0
- package/src/interactive/overlays/extensions.ts +54 -0
- package/src/interactive/overlays/help-reference.ts +140 -0
- package/src/interactive/overlays/interop.ts +139 -0
- package/src/interactive/overlays/keybinding-detail.ts +90 -0
- package/src/interactive/overlays/list-overlay.ts +606 -0
- package/src/interactive/overlays/message-picker.ts +155 -0
- package/src/interactive/overlays/model-selector.ts +1091 -0
- package/src/interactive/overlays/prompts.ts +72 -0
- package/src/interactive/overlays/session-selector-search.ts +31 -0
- package/src/interactive/overlays/session-selector.ts +266 -0
- package/src/interactive/overlays/settings.ts +3363 -0
- package/src/interactive/overlays/skills-hub.ts +237 -0
- package/src/interactive/overlays/tree-selector.ts +387 -0
- package/src/interactive/permission-overlay.ts +170 -0
- package/src/interactive/render-trace.ts +125 -0
- package/src/interactive/renderers/branch-summary.ts +86 -0
- package/src/interactive/renderers/code-ink.ts +420 -0
- package/src/interactive/renderers/compaction-summary.ts +112 -0
- package/src/interactive/renderers/diff.ts +126 -0
- package/src/interactive/renderers/notice.ts +28 -0
- package/src/interactive/renderers/retry-status.ts +31 -0
- package/src/interactive/renderers/structured.ts +89 -0
- package/src/interactive/renderers/tool-execution.ts +1104 -0
- package/src/interactive/renderers/worker-entry.ts +264 -0
- package/src/interactive/session-last-turn.ts +186 -0
- package/src/interactive/session-transcript.ts +105 -0
- package/src/interactive/session-usage-reseed.ts +74 -0
- package/src/interactive/slash-autocomplete.ts +364 -0
- package/src/interactive/slash-commands.ts +1319 -0
- package/src/interactive/slash-spec.ts +453 -0
- package/src/interactive/status/controller.ts +256 -0
- package/src/interactive/status/index.ts +23 -0
- package/src/interactive/status/state-machine.ts +530 -0
- package/src/interactive/status/summary.ts +170 -0
- package/src/interactive/status/types.ts +121 -0
- package/src/interactive/status/verbs.ts +163 -0
- package/src/interactive/status/watchdog.ts +24 -0
- package/src/interactive/tasks-overlay.ts +186 -0
- package/src/interactive/theme/components.ts +55 -0
- package/src/interactive/theme/glyphs.ts +70 -0
- package/src/interactive/theme/index.ts +15 -0
- package/src/interactive/theme/labels.ts +88 -0
- package/src/interactive/theme/rules.ts +138 -0
- package/src/interactive/theme/segments.ts +88 -0
- package/src/interactive/theme/tokens.ts +121 -0
- package/src/interactive/thinking-level-policy.ts +6 -0
- package/src/interactive/tool-prose-loop.ts +122 -0
- package/src/interactive/tool-prose-registration.ts +48 -0
- package/src/interactive/turn-context.ts +854 -0
- package/src/interactive/turn-middleware.ts +283 -0
- package/src/interactive/turn-persistence.ts +441 -0
- package/src/interactive/turn-queues.ts +169 -0
- package/src/interactive/turn-recovery.ts +306 -0
- package/src/interactive/turn-runtime.ts +802 -0
- package/src/interactive/turn-state.ts +123 -0
- package/src/interactive/view/artifacts.ts +1342 -0
- package/src/interactive/view/view-overlay.ts +732 -0
- package/src/interactive/welcome-dashboard.ts +536 -0
- package/src/interactive/worker-receipts.ts +94 -0
- package/src/interactive/worker-replay.ts +111 -0
- package/src/interactive/worker-share.ts +100 -0
- package/src/interactive/worker-stream.ts +442 -0
- package/src/interactive/workspace-facts.ts +141 -0
- package/src/tools/agent-tools.ts +382 -0
- package/src/tools/artifact.ts +103 -0
- package/src/tools/ask-user.ts +656 -0
- package/src/tools/bash.ts +176 -0
- package/src/tools/bootstrap.ts +474 -0
- package/src/tools/codewiki/code-nav.ts +563 -0
- package/src/tools/codewiki/shared.ts +115 -0
- package/src/tools/compete-worktrees.ts +898 -0
- package/src/tools/context/docs-engine.ts +619 -0
- package/src/tools/context/index.ts +435 -0
- package/src/tools/credential-present.ts +151 -0
- package/src/tools/dispatch-arguments.ts +228 -0
- package/src/tools/dispatch-plan.ts +741 -0
- package/src/tools/dispatch-scout.ts +461 -0
- package/src/tools/dispatch.ts +3338 -0
- package/src/tools/edit-diff.ts +534 -0
- package/src/tools/edit.ts +128 -0
- package/src/tools/executables.ts +22 -0
- package/src/tools/file-mutation-queue.ts +35 -0
- package/src/tools/find.ts +292 -0
- package/src/tools/grep.ts +495 -0
- package/src/tools/ignore-policy.ts +169 -0
- package/src/tools/ledger.ts +206 -0
- package/src/tools/ls.ts +110 -0
- package/src/tools/monitor.ts +797 -0
- package/src/tools/network-policy.ts +29 -0
- package/src/tools/observation.ts +421 -0
- package/src/tools/observers.ts +99 -0
- package/src/tools/path-utils.ts +79 -0
- package/src/tools/policy.ts +154 -0
- package/src/tools/profiles.ts +108 -0
- package/src/tools/read.ts +173 -0
- package/src/tools/registry.ts +1157 -0
- package/src/tools/result-shaping.ts +204 -0
- package/src/tools/safe-exec.ts +128 -0
- package/src/tools/spawn-hygiene.ts +182 -0
- package/src/tools/steer.ts +88 -0
- package/src/tools/string-enum.ts +15 -0
- package/src/tools/tasks.ts +168 -0
- package/src/tools/truncate-utf8.ts +17 -0
- package/src/tools/truncate.ts +202 -0
- package/src/tools/verify/frontend.ts +685 -0
- package/src/tools/verify/index.ts +66 -0
- package/src/tools/verify/scripts.ts +108 -0
- package/src/tools/web-fetch.ts +777 -0
- package/src/tools/worker-evidence.ts +215 -0
- package/src/tools/write.ts +52 -0
- package/src/utils/exif-orientation.ts +192 -0
- package/src/utils/git.ts +24 -0
- package/src/utils/image-resize.ts +148 -0
- package/src/utils/photon.ts +103 -0
- package/src/worker/control-lane.ts +22 -0
- package/src/worker/entry.ts +257 -0
- package/src/worker/event-projection.ts +56 -0
- package/src/worker/heartbeat.ts +24 -0
- package/src/worker/ledger-mirror.ts +95 -0
- package/src/worker/ndjson.ts +40 -0
- package/src/worker/protocol.ts +529 -0
- package/src/worker/resource-facts.ts +79 -0
- package/src/worker/runtime-registry.ts +12 -0
- package/src/worker/spec-contract.ts +654 -0
- package/src/worker/stdin-demux.ts +316 -0
- package/dist/acp-UMLFVA3F.js +0 -92
- package/dist/chunk-262G75JS.js +0 -35
- package/dist/chunk-5LDRNKX2.js +0 -1063
- package/dist/chunk-67MTHP2E.js +0 -135
- package/dist/chunk-GOTUR54M.js +0 -9
- package/dist/chunk-TPOCL34A.js +0 -2876
- package/dist/chunk-XV4ZJ6ZM.js +0 -3177
- package/dist/clio-KIQ5SNDS.js +0 -53
- package/dist/configure-G4E3A2PG.js +0 -27
- package/dist/doctor-M5HJJZOL.js +0 -61
- package/dist/domains/agents/builtins/architect.md +0 -33
- package/dist/domains/agents/builtins/coder.md +0 -31
- package/dist/domains/agents/builtins/context-bootstrap.md +0 -38
- package/dist/domains/agents/builtins/debugger.md +0 -30
- package/dist/domains/agents/builtins/documenter.md +0 -31
- package/dist/domains/agents/builtins/git-master.md +0 -30
- package/dist/domains/agents/builtins/provenance.md +0 -30
- package/dist/domains/agents/builtins/researcher.md +0 -71
- package/dist/domains/agents/builtins/scout.md +0 -42
- package/dist/domains/agents/builtins/tester.md +0 -31
- package/dist/domains/agents/builtins/verifier.md +0 -30
- package/dist/domains/agents/builtins/wiki-writer.md +0 -41
- package/dist/fleet-preflight-CLIAX7YR.js +0 -21
- package/dist/preload-KZVHET2B.js +0 -11
- package/dist/version-ROZ6CZKH.js +0 -16
- package/skills/git/commit-crafting/SKILL.md +0 -79
- package/skills/git/commit-crafting/evals.md +0 -92
- package/skills/git/create-pr/SKILL.md +0 -116
- package/skills/git/create-pr/evals.md +0 -114
- package/skills/git/investigate-issue/SKILL.md +0 -139
- package/skills/git/investigate-issue/evals.md +0 -94
- package/skills/git/review-changes/SKILL.md +0 -103
- package/skills/git/review-changes/evals.md +0 -85
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface ValidateModelInput {
|
|
2
|
+
runtimeId: string;
|
|
3
|
+
modelId: string;
|
|
4
|
+
knownModels: ReadonlyArray<string>;
|
|
5
|
+
force: boolean;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export type ValidateModelResult =
|
|
9
|
+
| { ok: true; warning?: string }
|
|
10
|
+
| { ok: false; reason: string; knownModels: ReadonlyArray<string> };
|
|
11
|
+
|
|
12
|
+
export function validateModelChoice(input: ValidateModelInput): ValidateModelResult {
|
|
13
|
+
const { runtimeId, modelId, knownModels, force } = input;
|
|
14
|
+
if (knownModels.length === 0) return { ok: true };
|
|
15
|
+
if (knownModels.includes(modelId)) return { ok: true };
|
|
16
|
+
if (force) {
|
|
17
|
+
return {
|
|
18
|
+
ok: true,
|
|
19
|
+
warning: `model '${modelId}' not in ${runtimeId} catalog (use without --force to reject)`,
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
const sample = knownModels.slice(0, 10).join(", ");
|
|
23
|
+
return {
|
|
24
|
+
ok: false,
|
|
25
|
+
reason: `model '${modelId}' not in ${runtimeId} catalog. Known: ${sample}. Use --force to skip validation.`,
|
|
26
|
+
knownModels: knownModels.slice(0, 10),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
@@ -0,0 +1,509 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { performance } from "node:perf_hooks";
|
|
4
|
+
import { type LoadResult, loadDomains } from "../core/domain-loader.js";
|
|
5
|
+
import { ToolNames } from "../core/tool-names.js";
|
|
6
|
+
import { AgentsDomainModule } from "../domains/agents/index.js";
|
|
7
|
+
import type { ConfigContract } from "../domains/config/contract.js";
|
|
8
|
+
import { ConfigDomainModule } from "../domains/config/index.js";
|
|
9
|
+
import { ContextDomainModule, type WikiGenerate, type WikiGenerateInput } from "../domains/context/index.js";
|
|
10
|
+
import type { WikiPlan, WikiPlanPage } from "../domains/context/wiki/plan.js";
|
|
11
|
+
import {
|
|
12
|
+
MAX_PAGE_ATTEMPTS,
|
|
13
|
+
pendingPages,
|
|
14
|
+
readAuthoredWikiPlan,
|
|
15
|
+
writeWikiPlanFile,
|
|
16
|
+
} from "../domains/context/wiki/plan-store.js";
|
|
17
|
+
import { buildWikiPagePrompt, buildWikiPlanPrompt } from "../domains/context/wiki/prompts.js";
|
|
18
|
+
import type { DispatchContract } from "../domains/dispatch/contract.js";
|
|
19
|
+
import { DispatchDomainModule } from "../domains/dispatch/index.js";
|
|
20
|
+
import type { RunReceipt } from "../domains/dispatch/types.js";
|
|
21
|
+
import type { JobSpec, JobThinkingLevel } from "../domains/dispatch/validation.js";
|
|
22
|
+
import { MiddlewareDomainModule } from "../domains/middleware/index.js";
|
|
23
|
+
import { createObservabilityDomainModule } from "../domains/observability/index.js";
|
|
24
|
+
import { createPromptsDomainModule } from "../domains/prompts/index.js";
|
|
25
|
+
import { canonicalizeWireModelId, type ProvidersContract, ProvidersDomainModule } from "../domains/providers/index.js";
|
|
26
|
+
import { ResourcesDomainModule } from "../domains/resources/index.js";
|
|
27
|
+
import { SafetyDomainModule } from "../domains/safety/index.js";
|
|
28
|
+
import { SchedulingDomainModule } from "../domains/scheduling/index.js";
|
|
29
|
+
import { SessionDomainModule } from "../domains/session/index.js";
|
|
30
|
+
import { armInternalDispatchDeadline } from "./internal-dispatch.js";
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Model id recorded on wiki metadata when the documenter target cannot be
|
|
34
|
+
* resolved. It is only reached when no target is configured, in which case the
|
|
35
|
+
* dispatch also fails and no metadata is written, so it never lands on a real
|
|
36
|
+
* artifact; it exists so the resolver never throws.
|
|
37
|
+
*/
|
|
38
|
+
const UNRESOLVED_DOCUMENTER_MODEL = "unresolved-documenter-target";
|
|
39
|
+
|
|
40
|
+
/** The agent recipe that plans and writes pages. */
|
|
41
|
+
const WIKI_AGENT_ID = "wiki-writer";
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Wall-clock ceiling for one page dispatch, clamped against the configured
|
|
45
|
+
* internal-dispatch guardrail. A page is a small job: read a handful of named
|
|
46
|
+
* sources and write one file. Bounding it here is what keeps one degenerate
|
|
47
|
+
* page from consuming the time every other page needed, and losing it costs
|
|
48
|
+
* exactly that page because the plan records it as still owed.
|
|
49
|
+
*/
|
|
50
|
+
const PAGE_DEADLINE_MS = 6 * 60 * 1000;
|
|
51
|
+
|
|
52
|
+
/** Wall-clock ceiling for the single planning dispatch. */
|
|
53
|
+
const PLAN_DEADLINE_MS = 8 * 60 * 1000;
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Wall-clock budget for a whole generation, checked between page dispatches and
|
|
57
|
+
* never during one. Exceeding it ends the run cleanly with every finished page
|
|
58
|
+
* promoted and the rest recorded as owed, so a repository too large for one
|
|
59
|
+
* sitting is finished by the next run instead of failing forever.
|
|
60
|
+
*/
|
|
61
|
+
const RUN_BUDGET_MS = 60 * 60 * 1000;
|
|
62
|
+
|
|
63
|
+
export interface WikiModelRoute {
|
|
64
|
+
target?: string;
|
|
65
|
+
model?: string;
|
|
66
|
+
thinkingLevel?: JobThinkingLevel;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export interface ModelWikiGenerateOptions {
|
|
70
|
+
dispatch?: DispatchContract;
|
|
71
|
+
route?: WikiModelRoute;
|
|
72
|
+
/** Overrides the whole-run wall-clock budget. Tests use it to force an early stop. */
|
|
73
|
+
runBudgetMs?: number;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
77
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* The one place an operator's exact wiki route reaches a dispatch. The planner
|
|
82
|
+
* and every page writer are pinned identically, so a wiki never silently mixes
|
|
83
|
+
* models across its own pages.
|
|
84
|
+
*/
|
|
85
|
+
function routeFields(route: WikiModelRoute): Pick<JobSpec, "target" | "model" | "thinkingLevel"> {
|
|
86
|
+
return {
|
|
87
|
+
...(route.target !== undefined ? { target: route.target } : {}),
|
|
88
|
+
...(route.model !== undefined ? { model: route.model } : {}),
|
|
89
|
+
...(route.thinkingLevel !== undefined ? { thinkingLevel: route.thinkingLevel } : {}),
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
function eventPayloadString(event: unknown, key: string): string | null {
|
|
94
|
+
if (!isRecord(event) || !isRecord(event.payload)) return null;
|
|
95
|
+
const value = event.payload[key];
|
|
96
|
+
return typeof value === "string" && value.length > 0 ? value : null;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
function formatElapsed(ms: number): string {
|
|
100
|
+
if (!Number.isFinite(ms) || ms < 0) return "elapsed unknown";
|
|
101
|
+
if (ms < 1000) return `elapsed ${Math.round(ms)}ms`;
|
|
102
|
+
return `elapsed ${Math.round(ms / 1000)}s`;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const BLOCK_REASON_MAX_CHARS = 80;
|
|
106
|
+
|
|
107
|
+
/** First sentence of a block reason, bounded so one line stays one line. */
|
|
108
|
+
function summarizeBlockReason(reason: string): string {
|
|
109
|
+
const firstSentence = reason.split(/(?<=[.;])\s/, 1)[0]?.trim() ?? reason.trim();
|
|
110
|
+
const collapsed = firstSentence.replace(/\s+/g, " ");
|
|
111
|
+
return collapsed.length <= BLOCK_REASON_MAX_CHARS
|
|
112
|
+
? collapsed
|
|
113
|
+
: `${collapsed.slice(0, BLOCK_REASON_MAX_CHARS - 1).trimEnd()}…`;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
interface DispatchSummary {
|
|
117
|
+
tools: number;
|
|
118
|
+
errors: number;
|
|
119
|
+
blocked: number;
|
|
120
|
+
firstBlockReason: string | null;
|
|
121
|
+
mix: string;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Longest an in-flight phase may go without saying anything. The planner is
|
|
126
|
+
* allowed eight minutes and a page six, and the operator who reported this saw
|
|
127
|
+
* two lines in five minutes, concluded the command had deadlocked, and killed
|
|
128
|
+
* it. Narrating every tool call would scroll the terminal for nothing, so the
|
|
129
|
+
* heartbeat is throttled to this and carries only elapsed time and tool count.
|
|
130
|
+
*/
|
|
131
|
+
const HEARTBEAT_MS = 30_000;
|
|
132
|
+
|
|
133
|
+
/**
|
|
134
|
+
* Drain a dispatch's event stream, summarizing rather than narrating. One
|
|
135
|
+
* dispatch is one page, so a line per tool call would tell the operator
|
|
136
|
+
* nothing; the per-page line printed on completion carries the same facts.
|
|
137
|
+
* `onActivity` fires on every tool finish and its consumer decides how often
|
|
138
|
+
* that is worth a line.
|
|
139
|
+
*/
|
|
140
|
+
async function drainDispatchEvents(
|
|
141
|
+
events: AsyncIterable<unknown>,
|
|
142
|
+
onActivity?: (completed: number) => void,
|
|
143
|
+
): Promise<DispatchSummary> {
|
|
144
|
+
const tools = new Map<string, number>();
|
|
145
|
+
let completed = 0;
|
|
146
|
+
let errors = 0;
|
|
147
|
+
let blocked = 0;
|
|
148
|
+
let firstBlockReason: string | null = null;
|
|
149
|
+
// Every event is consumed so finalization cannot block on an unread iterator.
|
|
150
|
+
for await (const event of events) {
|
|
151
|
+
if (!isRecord(event) || event.type !== "clio_tool_finish") continue;
|
|
152
|
+
const tool = eventPayloadString(event, "tool");
|
|
153
|
+
if (!tool) continue;
|
|
154
|
+
const outcome = eventPayloadString(event, "outcome") ?? "done";
|
|
155
|
+
completed += 1;
|
|
156
|
+
tools.set(tool, (tools.get(tool) ?? 0) + 1);
|
|
157
|
+
if (outcome === "error") errors += 1;
|
|
158
|
+
if (outcome === "blocked") {
|
|
159
|
+
blocked += 1;
|
|
160
|
+
firstBlockReason ??= eventPayloadString(event, "reason");
|
|
161
|
+
}
|
|
162
|
+
onActivity?.(completed);
|
|
163
|
+
}
|
|
164
|
+
const mix = [...tools.entries()]
|
|
165
|
+
.sort(([left], [right]) => left.localeCompare(right))
|
|
166
|
+
.map(([tool, count]) => `${tool}=${count}`)
|
|
167
|
+
.join(", ");
|
|
168
|
+
return { tools: completed, errors, blocked, firstBlockReason, mix };
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
function summaryDetail(summary: DispatchSummary, startedAtClock: number): string {
|
|
172
|
+
const blockedDetail =
|
|
173
|
+
summary.blocked > 0
|
|
174
|
+
? `; blocked=${summary.blocked}${summary.firstBlockReason ? ` (${summarizeBlockReason(summary.firstBlockReason)})` : ""}`
|
|
175
|
+
: "";
|
|
176
|
+
return (
|
|
177
|
+
`${formatElapsed(performance.now() - startedAtClock)}; ${summary.mix || "no tools completed"}` +
|
|
178
|
+
`${summary.errors > 0 ? `; errors=${summary.errors}` : ""}${blockedDetail}`
|
|
179
|
+
);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
interface WikiDispatchOutcome {
|
|
183
|
+
ok: boolean;
|
|
184
|
+
detail: string;
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
/**
|
|
188
|
+
* Run one wiki dispatch to completion and report how it ended. It never
|
|
189
|
+
* throws: a failed page must not take down the pages around it, and whatever
|
|
190
|
+
* the run wrote before it stopped is already on disk.
|
|
191
|
+
*/
|
|
192
|
+
export async function runWikiDispatch(input: {
|
|
193
|
+
dispatch: DispatchContract;
|
|
194
|
+
cwd: string;
|
|
195
|
+
outputDir: string;
|
|
196
|
+
task: string;
|
|
197
|
+
route: WikiModelRoute;
|
|
198
|
+
deadlineMs: number;
|
|
199
|
+
label: string;
|
|
200
|
+
/** Liveness signal while the dispatch runs, already throttled by the caller. */
|
|
201
|
+
onHeartbeat?: (info: { elapsedMs: number; tools: number }) => void;
|
|
202
|
+
}): Promise<WikiDispatchOutcome> {
|
|
203
|
+
// `startedAt` is a wall anchor because the admission deadline below is one
|
|
204
|
+
// too; every elapsed figure spans the monotonic twin instead.
|
|
205
|
+
const startedAt = Date.now();
|
|
206
|
+
const startedAtClock = performance.now();
|
|
207
|
+
let handle: Awaited<ReturnType<DispatchContract["dispatch"]>>;
|
|
208
|
+
try {
|
|
209
|
+
handle = await input.dispatch.dispatch({
|
|
210
|
+
agentId: WIKI_AGENT_ID,
|
|
211
|
+
executionRole: "builder",
|
|
212
|
+
task: input.task,
|
|
213
|
+
cwd: input.cwd,
|
|
214
|
+
requestOrigin: "internal",
|
|
215
|
+
noSkills: true,
|
|
216
|
+
...routeFields(input.route),
|
|
217
|
+
// `git` cannot answer anything for this dispatch. The prompt already
|
|
218
|
+
// embeds `git status` and `git log` verbatim, and the staging dir is
|
|
219
|
+
// under the gitignored `.clio-coder/`, so `op=diff` cannot see the pages this
|
|
220
|
+
// run is writing.
|
|
221
|
+
denyTools: [ToolNames.Git],
|
|
222
|
+
// Containment: the worker safety seam blocks any write-class tool call
|
|
223
|
+
// whose target escapes the staging dir.
|
|
224
|
+
writeRoots: [input.outputDir],
|
|
225
|
+
// Admission patience must match execution patience. Without this the
|
|
226
|
+
// queue applies its 60s default while `deadlineMs` below allows six
|
|
227
|
+
// minutes to run, so a page waiting behind two in-flight writers was
|
|
228
|
+
// dropped before it ever started. Observed live: a 33-page plan lost
|
|
229
|
+
// `core.md` to `dispatch: admission timed_out` at 10/33 while every
|
|
230
|
+
// page ahead of it was taking 110 to 125 seconds. A page the caller is
|
|
231
|
+
// willing to wait six minutes for is a page it should be willing to
|
|
232
|
+
// queue for six minutes.
|
|
233
|
+
assignmentDeadlineAt: startedAt + input.deadlineMs,
|
|
234
|
+
});
|
|
235
|
+
} catch (err) {
|
|
236
|
+
return { ok: false, detail: err instanceof Error ? err.message : String(err) };
|
|
237
|
+
}
|
|
238
|
+
const deadline = armInternalDispatchDeadline(input.dispatch, handle.runId, input.label, process.env, input.deadlineMs);
|
|
239
|
+
let lastHeartbeatAt = startedAtClock;
|
|
240
|
+
try {
|
|
241
|
+
const summary = await drainDispatchEvents(handle.events, (tools) => {
|
|
242
|
+
const nowMs = performance.now();
|
|
243
|
+
if (!input.onHeartbeat || nowMs - lastHeartbeatAt < HEARTBEAT_MS) return;
|
|
244
|
+
lastHeartbeatAt = nowMs;
|
|
245
|
+
input.onHeartbeat({ elapsedMs: Math.round(nowMs - startedAtClock), tools });
|
|
246
|
+
});
|
|
247
|
+
const receipt = await handle.finalPromise;
|
|
248
|
+
if (deadline.timedOut()) return { ok: false, detail: `timed out; ${summaryDetail(summary, startedAtClock)}` };
|
|
249
|
+
if (receipt.exitCode !== 0) {
|
|
250
|
+
input.dispatch.abort(handle.runId);
|
|
251
|
+
return { ok: false, detail: `${receiptFailure(receipt)}; ${summaryDetail(summary, startedAtClock)}` };
|
|
252
|
+
}
|
|
253
|
+
return { ok: true, detail: summaryDetail(summary, startedAtClock) };
|
|
254
|
+
} catch (err) {
|
|
255
|
+
if (!deadline.timedOut()) input.dispatch.abort(handle.runId);
|
|
256
|
+
await handle.finalPromise.catch(() => undefined);
|
|
257
|
+
const reason = deadline.timedOut() ? "timed out" : err instanceof Error ? err.message : String(err);
|
|
258
|
+
return { ok: false, detail: `${reason}; ${formatElapsed(performance.now() - startedAtClock)}` };
|
|
259
|
+
} finally {
|
|
260
|
+
deadline.clear();
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
function receiptFailure(receipt: RunReceipt): string {
|
|
265
|
+
const code = receipt.outcomeCode ? ` (${receipt.outcomeCode})` : "";
|
|
266
|
+
return `exit ${receipt.exitCode}${code}`;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* The planning pass. It rewrites a plan file that already holds a usable
|
|
271
|
+
* candidate, so nothing here can fail the generation: a planner that errors,
|
|
272
|
+
* times out, or writes unparseable JSON simply leaves the candidate in place.
|
|
273
|
+
*/
|
|
274
|
+
async function runPlanPhase(
|
|
275
|
+
dispatch: DispatchContract,
|
|
276
|
+
input: WikiGenerateInput,
|
|
277
|
+
route: WikiModelRoute,
|
|
278
|
+
): Promise<WikiPlan> {
|
|
279
|
+
input.progress?.({ phase: "generate", status: "running", message: "planning wiki pages" });
|
|
280
|
+
const outcome = await runWikiDispatch({
|
|
281
|
+
dispatch,
|
|
282
|
+
cwd: input.cwd,
|
|
283
|
+
outputDir: input.outputDir,
|
|
284
|
+
task: buildWikiPlanPrompt({
|
|
285
|
+
cwd: input.cwd,
|
|
286
|
+
mode: input.mode,
|
|
287
|
+
codewiki: input.codewiki,
|
|
288
|
+
generation: input.generation,
|
|
289
|
+
plan: input.plan,
|
|
290
|
+
unclaimedAreas: input.unclaimedAreas,
|
|
291
|
+
outputDir: input.outputDir,
|
|
292
|
+
gitHead: input.gitHead ?? null,
|
|
293
|
+
}),
|
|
294
|
+
route,
|
|
295
|
+
deadlineMs: PLAN_DEADLINE_MS,
|
|
296
|
+
label: "wiki planner",
|
|
297
|
+
onHeartbeat: ({ elapsedMs, tools }) =>
|
|
298
|
+
input.progress?.({
|
|
299
|
+
phase: "generate",
|
|
300
|
+
status: "running",
|
|
301
|
+
message: `still planning (${formatElapsed(elapsedMs)}, ${tools} tool calls)`,
|
|
302
|
+
detail: `planner deadline ${Math.round(PLAN_DEADLINE_MS / 60000)}m`,
|
|
303
|
+
}),
|
|
304
|
+
});
|
|
305
|
+
const revised = readAuthoredWikiPlan(input.outputDir, input.plan);
|
|
306
|
+
const plan = revised ?? input.plan;
|
|
307
|
+
input.progress?.({
|
|
308
|
+
phase: "generate",
|
|
309
|
+
status: "running",
|
|
310
|
+
message: outcome.ok
|
|
311
|
+
? `plan has ${plan.pages.length} page${plan.pages.length === 1 ? "" : "s"}`
|
|
312
|
+
: "planner did not finish; using the indexed candidate plan",
|
|
313
|
+
detail: outcome.detail,
|
|
314
|
+
});
|
|
315
|
+
return plan;
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
/** Write one page, then checkpoint the plan so the work survives whatever follows. */
|
|
319
|
+
async function runPagePhase(
|
|
320
|
+
dispatch: DispatchContract,
|
|
321
|
+
input: WikiGenerateInput,
|
|
322
|
+
plan: WikiPlan,
|
|
323
|
+
page: WikiPlanPage,
|
|
324
|
+
route: WikiModelRoute,
|
|
325
|
+
position: { index: number; total: number },
|
|
326
|
+
): Promise<WikiPlan> {
|
|
327
|
+
const seeded = existsSync(join(input.outputDir, page.path));
|
|
328
|
+
const outcome = await runWikiDispatch({
|
|
329
|
+
dispatch,
|
|
330
|
+
cwd: input.cwd,
|
|
331
|
+
outputDir: input.outputDir,
|
|
332
|
+
task: buildWikiPagePrompt({
|
|
333
|
+
cwd: input.cwd,
|
|
334
|
+
mode: input.mode,
|
|
335
|
+
codewiki: input.codewiki,
|
|
336
|
+
page,
|
|
337
|
+
siblings: plan.pages,
|
|
338
|
+
outputDir: input.outputDir,
|
|
339
|
+
seeded,
|
|
340
|
+
}),
|
|
341
|
+
route,
|
|
342
|
+
deadlineMs: PAGE_DEADLINE_MS,
|
|
343
|
+
label: `wiki page ${page.path}`,
|
|
344
|
+
onHeartbeat: ({ elapsedMs, tools }) =>
|
|
345
|
+
input.progress?.({
|
|
346
|
+
phase: "generate",
|
|
347
|
+
status: "running",
|
|
348
|
+
message: `still writing ${page.path} (${position.index}/${position.total}, ${formatElapsed(elapsedMs)}, ${tools} tool calls)`,
|
|
349
|
+
detail: `page deadline ${Math.round(PAGE_DEADLINE_MS / 60000)}m`,
|
|
350
|
+
}),
|
|
351
|
+
});
|
|
352
|
+
// The file on disk is the postcondition, not what the writer reported. A run
|
|
353
|
+
// that ended on its budget after writing the page still wrote the page.
|
|
354
|
+
const written = existsSync(join(input.outputDir, page.path));
|
|
355
|
+
const next: WikiPlan = {
|
|
356
|
+
...plan,
|
|
357
|
+
pages: plan.pages.map((entry) =>
|
|
358
|
+
entry.path === page.path
|
|
359
|
+
? { ...entry, status: written ? ("written" as const) : ("pending" as const), attempts: entry.attempts + 1 }
|
|
360
|
+
: entry,
|
|
361
|
+
),
|
|
362
|
+
};
|
|
363
|
+
writeWikiPlanFile(input.outputDir, next);
|
|
364
|
+
input.progress?.({
|
|
365
|
+
phase: "generate",
|
|
366
|
+
status: "running",
|
|
367
|
+
message: `${written ? "wrote" : "could not write"} ${page.path} (${position.index}/${position.total})`,
|
|
368
|
+
detail: outcome.detail,
|
|
369
|
+
});
|
|
370
|
+
return next;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
export async function generateWikiWithDocumenter(
|
|
374
|
+
dispatch: DispatchContract,
|
|
375
|
+
input: WikiGenerateInput,
|
|
376
|
+
route: WikiModelRoute = {},
|
|
377
|
+
runBudgetMs: number = RUN_BUDGET_MS,
|
|
378
|
+
): Promise<void> {
|
|
379
|
+
const startedAtClock = performance.now();
|
|
380
|
+
const routeDetail = [route.target, route.model, route.thinkingLevel ? `thinking=${route.thinkingLevel}` : undefined]
|
|
381
|
+
.filter((value): value is string => value !== undefined)
|
|
382
|
+
.join("/");
|
|
383
|
+
input.progress?.({
|
|
384
|
+
phase: "generate",
|
|
385
|
+
status: "running",
|
|
386
|
+
message: "dispatching wiki writers",
|
|
387
|
+
detail: `one page per dispatch${routeDetail ? `; ${routeDetail}` : ""}`,
|
|
388
|
+
});
|
|
389
|
+
|
|
390
|
+
// A resumed run keeps the plan its finished pages were written against;
|
|
391
|
+
// re-planning would churn the paths those pages already link to. Every other
|
|
392
|
+
// run plans, including an update, which is the only thing allowed to change
|
|
393
|
+
// a wiki's shape as the repository grows.
|
|
394
|
+
let plan = input.resumed ? input.plan : await runPlanPhase(dispatch, input, route);
|
|
395
|
+
if (!input.resumed) writeWikiPlanFile(input.outputDir, plan);
|
|
396
|
+
|
|
397
|
+
const queue = pendingPages(plan);
|
|
398
|
+
if (queue.length === 0) {
|
|
399
|
+
input.progress?.({ phase: "generate", status: "running", message: "every planned page is already current" });
|
|
400
|
+
return;
|
|
401
|
+
}
|
|
402
|
+
// Say the shape of the wait before starting it. A 20-page wiki is 20 model
|
|
403
|
+
// runs and can legitimately take most of an hour, which is longer than any
|
|
404
|
+
// default command timeout an operator is likely to have wrapped around it.
|
|
405
|
+
{
|
|
406
|
+
const worstCaseMs = Math.min(runBudgetMs, queue.length * PAGE_DEADLINE_MS);
|
|
407
|
+
input.progress?.({
|
|
408
|
+
phase: "generate",
|
|
409
|
+
status: "running",
|
|
410
|
+
message: `${queue.length} page${queue.length === 1 ? "" : "s"} to write, one model run each`,
|
|
411
|
+
detail: `up to ${Math.round(worstCaseMs / 60000)}m; progress is reported at least every ${Math.round(HEARTBEAT_MS / 1000)}s and finished pages are kept if the run stops early`,
|
|
412
|
+
});
|
|
413
|
+
}
|
|
414
|
+
for (const [index, page] of queue.entries()) {
|
|
415
|
+
if (performance.now() - startedAtClock >= runBudgetMs) {
|
|
416
|
+
const left = queue.length - index;
|
|
417
|
+
input.progress?.({
|
|
418
|
+
phase: "generate",
|
|
419
|
+
status: "running",
|
|
420
|
+
message: `run budget reached with ${left} page${left === 1 ? "" : "s"} unwritten`,
|
|
421
|
+
detail: `${formatElapsed(performance.now() - startedAtClock)}; staged pages are kept and promoted`,
|
|
422
|
+
});
|
|
423
|
+
return;
|
|
424
|
+
}
|
|
425
|
+
const current = plan.pages.find((entry) => entry.path === page.path) ?? page;
|
|
426
|
+
if (current.status === "written" || current.attempts >= MAX_PAGE_ATTEMPTS) continue;
|
|
427
|
+
plan = await runPagePhase(dispatch, input, plan, current, route, {
|
|
428
|
+
index: index + 1,
|
|
429
|
+
total: queue.length,
|
|
430
|
+
});
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
async function loadWikiDispatch(): Promise<{ dispatch: DispatchContract; loaded: LoadResult }> {
|
|
435
|
+
const loaded = await loadDomains([
|
|
436
|
+
ConfigDomainModule,
|
|
437
|
+
ResourcesDomainModule,
|
|
438
|
+
ContextDomainModule,
|
|
439
|
+
ProvidersDomainModule,
|
|
440
|
+
SafetyDomainModule,
|
|
441
|
+
createPromptsDomainModule({ noContextFiles: true }),
|
|
442
|
+
AgentsDomainModule,
|
|
443
|
+
MiddlewareDomainModule,
|
|
444
|
+
SessionDomainModule,
|
|
445
|
+
createObservabilityDomainModule({ dispatchTrace: false }),
|
|
446
|
+
SchedulingDomainModule,
|
|
447
|
+
DispatchDomainModule,
|
|
448
|
+
]);
|
|
449
|
+
const dispatch = loaded.getContract<DispatchContract>("dispatch");
|
|
450
|
+
if (!dispatch) {
|
|
451
|
+
await loaded.stop();
|
|
452
|
+
throw new Error("wiki writer dispatch unavailable");
|
|
453
|
+
}
|
|
454
|
+
return { dispatch, loaded };
|
|
455
|
+
}
|
|
456
|
+
|
|
457
|
+
/**
|
|
458
|
+
* Resolve the wire model id the wiki dispatches will run on, so wiki metadata
|
|
459
|
+
* records the real model instead of a placeholder. Mirrors dispatch's
|
|
460
|
+
* default-target precedence for a request with no explicit target: agent
|
|
461
|
+
* binding profile, then the worker default, then the first configured target;
|
|
462
|
+
* the model follows the same profile/default/target.defaultModel order and is
|
|
463
|
+
* canonicalized through providers. This approximates dispatch resolution: it
|
|
464
|
+
* does not replicate the best-available health-ranking fallback that only
|
|
465
|
+
* matters when the primary target is unavailable. Best-effort and never throws.
|
|
466
|
+
*/
|
|
467
|
+
export async function resolveDocumenterModelId(route: WikiModelRoute = {}): Promise<string> {
|
|
468
|
+
const loaded = await loadDomains([ConfigDomainModule, ResourcesDomainModule, ProvidersDomainModule]);
|
|
469
|
+
try {
|
|
470
|
+
const config = loaded.getContract<ConfigContract>("config");
|
|
471
|
+
const providers = loaded.getContract<ProvidersContract>("providers");
|
|
472
|
+
if (!config || !providers) return UNRESOLVED_DOCUMENTER_MODEL;
|
|
473
|
+
const settings = config.get();
|
|
474
|
+
const workers = settings.workers;
|
|
475
|
+
// Keyed on the dispatched agent id and nothing else, because that is what
|
|
476
|
+
// `placement.ts` reads. Falling back to another agent's binding here would
|
|
477
|
+
// record a model in wiki metadata that no dispatch ever ran.
|
|
478
|
+
const bindingProfileName = workers?.agentBindings?.[WIKI_AGENT_ID];
|
|
479
|
+
const profile = bindingProfileName ? workers?.profiles?.[bindingProfileName] : undefined;
|
|
480
|
+
const targetId = route.target ?? profile?.target ?? workers?.default?.target ?? settings.targets?.[0]?.id ?? null;
|
|
481
|
+
if (!targetId) return UNRESOLVED_DOCUMENTER_MODEL;
|
|
482
|
+
const target = providers.getTarget(targetId);
|
|
483
|
+
const requestedModel = route.model ?? profile?.model ?? workers?.default?.model ?? target?.defaultModel ?? null;
|
|
484
|
+
if (!requestedModel) return UNRESOLVED_DOCUMENTER_MODEL;
|
|
485
|
+
const status = providers.list().find((entry) => entry.target.id === targetId);
|
|
486
|
+
return status ? canonicalizeWireModelId(status, requestedModel) : requestedModel;
|
|
487
|
+
} catch {
|
|
488
|
+
return UNRESOLVED_DOCUMENTER_MODEL;
|
|
489
|
+
} finally {
|
|
490
|
+
await loaded.stop();
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
export function modelWikiGenerate(options: ModelWikiGenerateOptions = {}): WikiGenerate {
|
|
495
|
+
return async (input) => {
|
|
496
|
+
let loaded: LoadResult | null = null;
|
|
497
|
+
try {
|
|
498
|
+
if (options.dispatch) {
|
|
499
|
+
await generateWikiWithDocumenter(options.dispatch, input, options.route, options.runBudgetMs);
|
|
500
|
+
return;
|
|
501
|
+
}
|
|
502
|
+
const lazy = await loadWikiDispatch();
|
|
503
|
+
loaded = lazy.loaded;
|
|
504
|
+
await generateWikiWithDocumenter(lazy.dispatch, input, options.route, options.runBudgetMs);
|
|
505
|
+
} finally {
|
|
506
|
+
if (loaded) await loaded.stop();
|
|
507
|
+
}
|
|
508
|
+
};
|
|
509
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where the terminal `artifact` tool writes when the caller names no path.
|
|
3
|
+
*
|
|
4
|
+
* The repo working tree holds files a human asked for. Everything Clio
|
|
5
|
+
* generates on its own goes to the project-local `.clio-coder/` directory,
|
|
6
|
+
* which is gitignored, so a turn that decides to write a report cannot litter
|
|
7
|
+
* the tree a person is working in. An explicit `path` argument still writes
|
|
8
|
+
* wherever the caller says, inside the workspace.
|
|
9
|
+
*
|
|
10
|
+
* The default is a pure function of the artifact kind, and it has to stay that
|
|
11
|
+
* way: the action classifier, the policy engine's write-root check, and the
|
|
12
|
+
* protected-artifacts guard all predict the path a pathless `artifact` call
|
|
13
|
+
* will write to, from the arguments alone. A default keyed on session id or a
|
|
14
|
+
* timestamp would make that prediction impossible, and the safety layer would
|
|
15
|
+
* be checking a path the tool never writes. One artifact per kind is therefore
|
|
16
|
+
* the contract; keep several by passing explicit paths.
|
|
17
|
+
*
|
|
18
|
+
* See docs/artifact-placement.md for the full taxonomy.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
/** Project-local directory holding everything Clio generates for one repo. */
|
|
22
|
+
export const CLIO_PROJECT_DIR = ".clio-coder";
|
|
23
|
+
|
|
24
|
+
/** Landing zone for terminal artifacts written without an explicit path. */
|
|
25
|
+
export const CLIO_ARTIFACT_DIR = `${CLIO_PROJECT_DIR}/artifacts`;
|
|
26
|
+
|
|
27
|
+
const KIND_FILENAMES: Record<string, string> = {
|
|
28
|
+
plan: "PLAN.md",
|
|
29
|
+
review: "REVIEW.md",
|
|
30
|
+
report: "REPORT.md",
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
const DEFAULT_FILENAME = KIND_FILENAMES.plan as string;
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* Workspace-relative path a pathless `artifact` call writes to. An unknown or
|
|
37
|
+
* missing kind resolves to the plan path, matching the tool's own fallback, so
|
|
38
|
+
* the safety layer and the tool never disagree about a malformed call.
|
|
39
|
+
*/
|
|
40
|
+
export function artifactDefaultPath(kind: unknown): string {
|
|
41
|
+
const filename = typeof kind === "string" ? (KIND_FILENAMES[kind] ?? DEFAULT_FILENAME) : DEFAULT_FILENAME;
|
|
42
|
+
return `${CLIO_ARTIFACT_DIR}/${filename}`;
|
|
43
|
+
}
|