@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,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fleet node registry: N machines become one addressable, pinnable capacity
|
|
3
|
+
* pool. Node configuration comes from `fleet.nodes` in settings (read fresh
|
|
4
|
+
* on every call so settings edits apply next dispatch); runtime state
|
|
5
|
+
* (channel health and last-seen observations) lives here. Durable capacity
|
|
6
|
+
* and admission draining are owned by the dispatch admission store.
|
|
7
|
+
*
|
|
8
|
+
* State semantics:
|
|
9
|
+
* - online channel healthy as far as this registry knows. Nodes start
|
|
10
|
+
* online; dispatch eligibility additionally requires a passing
|
|
11
|
+
* doctor preflight (durable, checked at placement).
|
|
12
|
+
* - offline classified dead after consecutive channel failures. Placement
|
|
13
|
+
* skips it; its in-flight runs are reaped for reroute by the
|
|
14
|
+
* dispatch domain. A later channel success restores it.
|
|
15
|
+
*
|
|
16
|
+
* Staleness is advisory: `lastSeenAt` records the last probe or worker
|
|
17
|
+
* heartbeat, but an idle node is never auto-offlined for silence, because no
|
|
18
|
+
* signal is expected from a node with no work.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
import type { FleetNodeSettings } from "../../core/defaults.js";
|
|
22
|
+
|
|
23
|
+
export type FleetNodeState = "online" | "offline";
|
|
24
|
+
|
|
25
|
+
export interface FleetNodeSnapshot {
|
|
26
|
+
id: string;
|
|
27
|
+
host: string;
|
|
28
|
+
kind: "local" | "ssh";
|
|
29
|
+
state: FleetNodeState;
|
|
30
|
+
stateReason: string | null;
|
|
31
|
+
activeWorkers: number;
|
|
32
|
+
maxWorkers: number;
|
|
33
|
+
labels: ReadonlyArray<string>;
|
|
34
|
+
lastSeenAt: string | null;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export interface FleetRegistry {
|
|
38
|
+
/** True when at least one remote node is configured. */
|
|
39
|
+
hasRemoteNodes(): boolean;
|
|
40
|
+
/** All nodes, implicit local first, then declaration order. */
|
|
41
|
+
list(): FleetNodeSnapshot[];
|
|
42
|
+
get(id: string): FleetNodeSnapshot | null;
|
|
43
|
+
/** Raw settings entry for a remote node; null for local/unknown ids. */
|
|
44
|
+
config(id: string): FleetNodeSettings | null;
|
|
45
|
+
/** Record a probe or worker heartbeat for staleness display. */
|
|
46
|
+
seen(id: string): void;
|
|
47
|
+
/**
|
|
48
|
+
* Channel failure accounting. Consecutive failures at or beyond the death
|
|
49
|
+
* threshold classify the node offline. Returns the resulting state.
|
|
50
|
+
*/
|
|
51
|
+
recordChannelFailure(id: string, reason: string): FleetNodeState;
|
|
52
|
+
recordChannelSuccess(id: string): void;
|
|
53
|
+
/**
|
|
54
|
+
* Attach the durable per-node usage source. The dispatch domain owns the
|
|
55
|
+
* capacity leases, so it binds the reader once at bundle construction; until
|
|
56
|
+
* then a snapshot reports zero rather than inventing a process-local count.
|
|
57
|
+
*/
|
|
58
|
+
bindActiveWorkers(source: (nodeId: string) => number): void;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export const LOCAL_NODE_ID = "local";
|
|
62
|
+
|
|
63
|
+
/** Consecutive channel failures before a node is classified dead. */
|
|
64
|
+
const NODE_DEATH_FAILURE_THRESHOLD = 2;
|
|
65
|
+
|
|
66
|
+
interface NodeRuntimeState {
|
|
67
|
+
state: FleetNodeState;
|
|
68
|
+
stateReason: string | null;
|
|
69
|
+
consecutiveFailures: number;
|
|
70
|
+
lastSeenMs: number | null;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export interface FleetRegistryOptions {
|
|
74
|
+
now?: () => number;
|
|
75
|
+
/** Display-only cap for the implicit local node. */
|
|
76
|
+
localMaxWorkers?: () => number;
|
|
77
|
+
/** Durable lease-derived usage; never a process-local counter. */
|
|
78
|
+
activeWorkers?: (nodeId: string) => number;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
function freshState(): NodeRuntimeState {
|
|
82
|
+
return { state: "online", stateReason: null, consecutiveFailures: 0, lastSeenMs: null };
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export function createFleetRegistry(
|
|
86
|
+
getNodes: () => ReadonlyArray<FleetNodeSettings>,
|
|
87
|
+
options?: FleetRegistryOptions,
|
|
88
|
+
): FleetRegistry {
|
|
89
|
+
const now = options?.now ?? (() => Date.now());
|
|
90
|
+
const runtime = new Map<string, NodeRuntimeState>();
|
|
91
|
+
let activeWorkers = options?.activeWorkers;
|
|
92
|
+
|
|
93
|
+
function stateFor(id: string): NodeRuntimeState {
|
|
94
|
+
let state = runtime.get(id);
|
|
95
|
+
if (!state) {
|
|
96
|
+
state = freshState();
|
|
97
|
+
runtime.set(id, state);
|
|
98
|
+
}
|
|
99
|
+
return state;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
function snapshotFor(id: string, config: FleetNodeSettings | null): FleetNodeSnapshot {
|
|
103
|
+
const state = stateFor(id);
|
|
104
|
+
if (config === null) {
|
|
105
|
+
return {
|
|
106
|
+
id: LOCAL_NODE_ID,
|
|
107
|
+
host: "localhost",
|
|
108
|
+
kind: "local",
|
|
109
|
+
state: state.state,
|
|
110
|
+
stateReason: state.stateReason,
|
|
111
|
+
activeWorkers: activeWorkers?.(LOCAL_NODE_ID) ?? 0,
|
|
112
|
+
maxWorkers: options?.localMaxWorkers?.() ?? Number.POSITIVE_INFINITY,
|
|
113
|
+
labels: [],
|
|
114
|
+
lastSeenAt: state.lastSeenMs !== null ? new Date(state.lastSeenMs).toISOString() : null,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
return {
|
|
118
|
+
id: config.id,
|
|
119
|
+
host: config.host,
|
|
120
|
+
kind: "ssh",
|
|
121
|
+
state: state.state,
|
|
122
|
+
stateReason: state.stateReason,
|
|
123
|
+
activeWorkers: activeWorkers?.(id) ?? 0,
|
|
124
|
+
maxWorkers: config.maxWorkers,
|
|
125
|
+
labels: [...(config.labels ?? [])],
|
|
126
|
+
lastSeenAt: state.lastSeenMs !== null ? new Date(state.lastSeenMs).toISOString() : null,
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
function findConfig(id: string): FleetNodeSettings | null {
|
|
131
|
+
return getNodes().find((node) => node.id === id) ?? null;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
return {
|
|
135
|
+
hasRemoteNodes() {
|
|
136
|
+
return getNodes().length > 0;
|
|
137
|
+
},
|
|
138
|
+
list() {
|
|
139
|
+
return [snapshotFor(LOCAL_NODE_ID, null), ...getNodes().map((node) => snapshotFor(node.id, node))];
|
|
140
|
+
},
|
|
141
|
+
get(id) {
|
|
142
|
+
if (id === LOCAL_NODE_ID) return snapshotFor(LOCAL_NODE_ID, null);
|
|
143
|
+
const config = findConfig(id);
|
|
144
|
+
return config ? snapshotFor(id, config) : null;
|
|
145
|
+
},
|
|
146
|
+
config(id) {
|
|
147
|
+
return id === LOCAL_NODE_ID ? null : findConfig(id);
|
|
148
|
+
},
|
|
149
|
+
seen(id) {
|
|
150
|
+
stateFor(id).lastSeenMs = now();
|
|
151
|
+
},
|
|
152
|
+
recordChannelFailure(id, reason) {
|
|
153
|
+
const state = stateFor(id);
|
|
154
|
+
state.consecutiveFailures += 1;
|
|
155
|
+
if (state.state === "online" && state.consecutiveFailures >= NODE_DEATH_FAILURE_THRESHOLD) {
|
|
156
|
+
state.state = "offline";
|
|
157
|
+
state.stateReason = `classified dead after ${state.consecutiveFailures} consecutive channel failures (${reason})`;
|
|
158
|
+
}
|
|
159
|
+
return state.state;
|
|
160
|
+
},
|
|
161
|
+
bindActiveWorkers(source) {
|
|
162
|
+
activeWorkers = source;
|
|
163
|
+
},
|
|
164
|
+
recordChannelSuccess(id) {
|
|
165
|
+
const state = stateFor(id);
|
|
166
|
+
state.consecutiveFailures = 0;
|
|
167
|
+
state.lastSeenMs = now();
|
|
168
|
+
if (state.state === "offline") {
|
|
169
|
+
// A node that just completed a run over its channel is alive again.
|
|
170
|
+
state.state = "online";
|
|
171
|
+
state.stateReason = null;
|
|
172
|
+
}
|
|
173
|
+
},
|
|
174
|
+
};
|
|
175
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { BudgetVerdict } from "./budget.js";
|
|
2
|
+
import type { FleetRegistry } from "./cluster.js";
|
|
3
|
+
|
|
4
|
+
export interface BudgetPreflight {
|
|
5
|
+
verdict: BudgetVerdict;
|
|
6
|
+
currentUsd: number;
|
|
7
|
+
ceilingUsd: number;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface SchedulingContract {
|
|
11
|
+
ceilingUsd(): number;
|
|
12
|
+
checkCeiling(currentUsd: number): BudgetVerdict;
|
|
13
|
+
raiseCeiling(newUsd: number): void;
|
|
14
|
+
/**
|
|
15
|
+
* Evaluate the running session cost against the ceiling. Scheduling owns the
|
|
16
|
+
* observability lookup so callers (notably dispatch) don't need to import it.
|
|
17
|
+
* Verdict is "under" when spend is below the ceiling, "at" when equal, "over"
|
|
18
|
+
* when above. Dispatch treats "at" and "over" as admission failures.
|
|
19
|
+
*/
|
|
20
|
+
preflight(): BudgetPreflight;
|
|
21
|
+
/** Configured global worker capacity; durable leases own active usage. */
|
|
22
|
+
maxWorkers(): number;
|
|
23
|
+
/**
|
|
24
|
+
* Fleet node registry backing multi-node placement: per-node states,
|
|
25
|
+
* capacity accounting, and channel-failure classification. Optional so
|
|
26
|
+
* minimal scheduling stubs remain valid; dispatch treats absence as a
|
|
27
|
+
* local-only fleet.
|
|
28
|
+
*/
|
|
29
|
+
fleet?: FleetRegistry;
|
|
30
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Scheduling domain wire-up. Seeds budget + concurrency state from settings and
|
|
3
|
+
* listens to dispatch.enqueued so it can fire budget.alert events when session
|
|
4
|
+
* spend meets or crosses the ceiling. Dispatch admission preflights this state
|
|
5
|
+
* and denies new dispatches at or over the ceiling; the alert is the TUI's
|
|
6
|
+
* explanation of those denials.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { type BudgetAlertPayload, BusChannels } from "../../core/bus-events.js";
|
|
10
|
+
import type { DomainBundle, DomainContext, DomainExtension } from "../../core/domain-loader.js";
|
|
11
|
+
import type { ConfigContract } from "../config/contract.js";
|
|
12
|
+
import type { ObservabilityContract } from "../observability/contract.js";
|
|
13
|
+
import { createBudgetState } from "./budget.js";
|
|
14
|
+
import { createFleetRegistry } from "./cluster.js";
|
|
15
|
+
import type { SchedulingContract } from "./contract.js";
|
|
16
|
+
|
|
17
|
+
const DEFAULT_MAX_WORKERS = 4;
|
|
18
|
+
|
|
19
|
+
function resolveMaxWorkers(concurrency: "auto" | number): number {
|
|
20
|
+
if (concurrency === "auto") return DEFAULT_MAX_WORKERS;
|
|
21
|
+
return Math.max(1, concurrency);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export function createSchedulingBundle(context: DomainContext): DomainBundle<SchedulingContract> {
|
|
25
|
+
const maybeConfig = context.getContract<ConfigContract>("config");
|
|
26
|
+
if (!maybeConfig) throw new Error("scheduling domain requires 'config' contract");
|
|
27
|
+
const config: ConfigContract = maybeConfig;
|
|
28
|
+
const observability = context.getContract<ObservabilityContract>("observability");
|
|
29
|
+
|
|
30
|
+
const settings = config.get();
|
|
31
|
+
let budget = createBudgetState(settings.budget.sessionCeilingUsd);
|
|
32
|
+
const fleet = createFleetRegistry(() => config.get().fleet?.nodes ?? [], {
|
|
33
|
+
localMaxWorkers: () => resolveMaxWorkers(config.get().budget.concurrency),
|
|
34
|
+
});
|
|
35
|
+
const unsubscribes: Array<() => void> = [];
|
|
36
|
+
|
|
37
|
+
function syncBudget(): void {
|
|
38
|
+
const nextCeiling = config.get().budget.sessionCeilingUsd;
|
|
39
|
+
if (nextCeiling === budget.ceilingUsd) return;
|
|
40
|
+
budget = createBudgetState(nextCeiling);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function evaluate(): { verdict: ReturnType<typeof budget.checkCeiling>; currentUsd: number } {
|
|
44
|
+
syncBudget();
|
|
45
|
+
const currentUsd = observability?.sessionCost() ?? 0;
|
|
46
|
+
return { verdict: budget.checkCeiling(currentUsd), currentUsd };
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const extension: DomainExtension = {
|
|
50
|
+
async start() {
|
|
51
|
+
unsubscribes.push(
|
|
52
|
+
context.bus.on(BusChannels.DispatchEnqueued, () => {
|
|
53
|
+
const { verdict, currentUsd } = evaluate();
|
|
54
|
+
if (verdict !== "under") {
|
|
55
|
+
context.bus.emit(BusChannels.BudgetAlert, {
|
|
56
|
+
level: verdict,
|
|
57
|
+
currentUsd,
|
|
58
|
+
ceilingUsd: budget.ceilingUsd,
|
|
59
|
+
} satisfies BudgetAlertPayload);
|
|
60
|
+
}
|
|
61
|
+
}),
|
|
62
|
+
);
|
|
63
|
+
},
|
|
64
|
+
async stop() {
|
|
65
|
+
for (const off of unsubscribes) off();
|
|
66
|
+
unsubscribes.length = 0;
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
const contract: SchedulingContract = {
|
|
71
|
+
ceilingUsd: () => {
|
|
72
|
+
syncBudget();
|
|
73
|
+
return budget.ceilingUsd;
|
|
74
|
+
},
|
|
75
|
+
checkCeiling: (current) => {
|
|
76
|
+
syncBudget();
|
|
77
|
+
return budget.checkCeiling(current);
|
|
78
|
+
},
|
|
79
|
+
raiseCeiling: (next) => {
|
|
80
|
+
budget = createBudgetState(next);
|
|
81
|
+
},
|
|
82
|
+
preflight: () => {
|
|
83
|
+
const { verdict, currentUsd } = evaluate();
|
|
84
|
+
return { verdict, currentUsd, ceilingUsd: budget.ceilingUsd };
|
|
85
|
+
},
|
|
86
|
+
maxWorkers: () => resolveMaxWorkers(config.get().budget.concurrency),
|
|
87
|
+
fleet,
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
return { extension, contract };
|
|
91
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { DomainModule } from "../../core/domain-loader.js";
|
|
2
|
+
import { createSchedulingBundle } from "./extension.js";
|
|
3
|
+
import { SchedulingManifest } from "./manifest.js";
|
|
4
|
+
|
|
5
|
+
export const SchedulingDomainModule: DomainModule = {
|
|
6
|
+
manifest: SchedulingManifest,
|
|
7
|
+
createExtension: createSchedulingBundle,
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export type { BudgetVerdict } from "./budget.js";
|
|
11
|
+
export type { SchedulingContract } from "./contract.js";
|
|
12
|
+
export { SchedulingManifest } from "./manifest.js";
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { readdir, readFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { isSessionEntry, isSessionHeader, type SessionEntry } from "./index.js";
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Shared read-only readers over the local usage archive: the per-day audit
|
|
7
|
+
* JSONL files and the per-session ledger files under the state dir. Evidence
|
|
8
|
+
* building and the cross-session usage report both consume these; they were
|
|
9
|
+
* factored out of evidence/build.ts so the parsers exist exactly once.
|
|
10
|
+
*
|
|
11
|
+
* The module lives in the session domain because that is its only dependency,
|
|
12
|
+
* and it is re-exported from the session index so consumers reach it through
|
|
13
|
+
* the barrel. It used to live under observability, where the barrel could not
|
|
14
|
+
* be used: the observability extension imports the evidence domain, so an
|
|
15
|
+
* evidence-side import through the observability index would cycle.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
export interface AuditJsonRow {
|
|
19
|
+
file: string;
|
|
20
|
+
line: number;
|
|
21
|
+
row: Record<string, unknown>;
|
|
22
|
+
ts: string | null;
|
|
23
|
+
auditKind: string;
|
|
24
|
+
correlationId: string;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export interface AuditReadResult {
|
|
28
|
+
rows: AuditJsonRow[];
|
|
29
|
+
errors: string[];
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface SessionReadResult {
|
|
33
|
+
entries: SessionEntry[];
|
|
34
|
+
missing: boolean;
|
|
35
|
+
errors: string[];
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/** A discovered session ledger file under <stateDir>/sessions/. */
|
|
39
|
+
export interface SessionLedgerRef {
|
|
40
|
+
cwdHash: string;
|
|
41
|
+
sessionId: string;
|
|
42
|
+
path: string;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Read every `<stateDir>/audit/<date>.jsonl` row. Malformed lines are skipped
|
|
47
|
+
* and reported in `errors` instead of failing the read.
|
|
48
|
+
*/
|
|
49
|
+
export async function readAuditRows(stateDir: string): Promise<AuditReadResult> {
|
|
50
|
+
const root = join(stateDir, "audit");
|
|
51
|
+
let files: string[];
|
|
52
|
+
try {
|
|
53
|
+
files = await readdir(root);
|
|
54
|
+
} catch (error) {
|
|
55
|
+
const err = error as NodeJS.ErrnoException;
|
|
56
|
+
if (err.code === "ENOENT") return { rows: [], errors: [] };
|
|
57
|
+
return { rows: [], errors: [`audit root read error: ${err.message ?? String(err)}`] };
|
|
58
|
+
}
|
|
59
|
+
const rows: AuditJsonRow[] = [];
|
|
60
|
+
const errors: string[] = [];
|
|
61
|
+
for (const file of files.filter((name) => name.endsWith(".jsonl")).sort(compareStrings)) {
|
|
62
|
+
const path = join(root, file);
|
|
63
|
+
let raw: string;
|
|
64
|
+
try {
|
|
65
|
+
raw = await readFile(path, "utf8");
|
|
66
|
+
} catch (error) {
|
|
67
|
+
const err = error as NodeJS.ErrnoException;
|
|
68
|
+
errors.push(`${path}: ${err.message ?? String(err)}`);
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
const lines = raw.split("\n");
|
|
72
|
+
for (let index = 0; index < lines.length; index += 1) {
|
|
73
|
+
const line = lines[index];
|
|
74
|
+
if (line === undefined || line.length === 0) continue;
|
|
75
|
+
let parsed: unknown;
|
|
76
|
+
try {
|
|
77
|
+
parsed = JSON.parse(line) as unknown;
|
|
78
|
+
} catch (error) {
|
|
79
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
80
|
+
errors.push(`${path}:${index + 1}: invalid JSON: ${message}`);
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
if (!isRecord(parsed)) {
|
|
84
|
+
errors.push(`${path}:${index + 1}: expected object`);
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
const auditKind = readOptionalString(parsed.kind) ?? "tool_call";
|
|
88
|
+
rows.push({
|
|
89
|
+
file,
|
|
90
|
+
line: index + 1,
|
|
91
|
+
row: parsed,
|
|
92
|
+
ts: readOptionalString(parsed.ts),
|
|
93
|
+
auditKind,
|
|
94
|
+
correlationId: readOptionalString(parsed.correlationId) ?? "",
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return { rows, errors };
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Find and parse the ledger for one session id by scanning the cwd-hash
|
|
103
|
+
* directories. `missing` is true when no ledger exists anywhere.
|
|
104
|
+
*/
|
|
105
|
+
export async function readSessionEntriesForId(stateDir: string, sessionId: string): Promise<SessionReadResult> {
|
|
106
|
+
const root = join(stateDir, "sessions");
|
|
107
|
+
let cwdHashes: string[];
|
|
108
|
+
try {
|
|
109
|
+
cwdHashes = await readdir(root);
|
|
110
|
+
} catch (error) {
|
|
111
|
+
const err = error as NodeJS.ErrnoException;
|
|
112
|
+
if (err.code === "ENOENT") return { entries: [], missing: true, errors: [] };
|
|
113
|
+
return { entries: [], missing: false, errors: [`session root read error: ${err.message ?? String(err)}`] };
|
|
114
|
+
}
|
|
115
|
+
for (const cwdHash of cwdHashes.sort(compareStrings)) {
|
|
116
|
+
const currentPath = join(root, cwdHash, sessionId, "current.jsonl");
|
|
117
|
+
let raw: string;
|
|
118
|
+
let source = currentPath;
|
|
119
|
+
try {
|
|
120
|
+
raw = await readFile(currentPath, "utf8");
|
|
121
|
+
} catch (error) {
|
|
122
|
+
const err = error as NodeJS.ErrnoException;
|
|
123
|
+
if (err.code === "ENOENT") {
|
|
124
|
+
const tmpPath = `${currentPath}.tmp`;
|
|
125
|
+
try {
|
|
126
|
+
raw = await readFile(tmpPath, "utf8");
|
|
127
|
+
source = tmpPath;
|
|
128
|
+
} catch {
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
} else if (err.code === "ENOTDIR") {
|
|
132
|
+
continue;
|
|
133
|
+
} else {
|
|
134
|
+
return { entries: [], missing: false, errors: [`${currentPath}: ${err.message ?? String(err)}`] };
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
return parseSessionEntries(raw, source);
|
|
138
|
+
}
|
|
139
|
+
return { entries: [], missing: true, errors: [] };
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/** Parse a session ledger containing a header and structured entries. */
|
|
143
|
+
export function parseSessionEntries(raw: string, source: string): SessionReadResult {
|
|
144
|
+
const entries: SessionEntry[] = [];
|
|
145
|
+
const errors: string[] = [];
|
|
146
|
+
const lines = raw.split("\n");
|
|
147
|
+
for (let index = 0; index < lines.length; index += 1) {
|
|
148
|
+
const line = lines[index];
|
|
149
|
+
if (line === undefined || line.trim().length === 0) continue;
|
|
150
|
+
let parsed: unknown;
|
|
151
|
+
try {
|
|
152
|
+
parsed = JSON.parse(line) as unknown;
|
|
153
|
+
} catch (error) {
|
|
154
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
155
|
+
errors.push(`${source}:${index + 1}: invalid JSON: ${message}`);
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
if (isSessionHeader(parsed)) continue;
|
|
159
|
+
if (isSessionEntry(parsed)) {
|
|
160
|
+
entries.push(parsed);
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
errors.push(
|
|
164
|
+
`session ledger contains an unreadable entry (missing kind discriminant): ${source}. Remove or compact the session to reset.`,
|
|
165
|
+
);
|
|
166
|
+
}
|
|
167
|
+
return { entries, missing: false, errors };
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Enumerate every session ledger under `<stateDir>/sessions/`, optionally
|
|
172
|
+
* restricted to one cwd hash. Read-only; missing roots yield an empty list.
|
|
173
|
+
*/
|
|
174
|
+
export async function listSessionLedgerRefs(stateDir: string, onlyCwdHash?: string): Promise<SessionLedgerRef[]> {
|
|
175
|
+
const root = join(stateDir, "sessions");
|
|
176
|
+
let cwdHashes: string[];
|
|
177
|
+
try {
|
|
178
|
+
cwdHashes = await readdir(root);
|
|
179
|
+
} catch {
|
|
180
|
+
return [];
|
|
181
|
+
}
|
|
182
|
+
const refs: SessionLedgerRef[] = [];
|
|
183
|
+
for (const cwdHash of cwdHashes.sort(compareStrings)) {
|
|
184
|
+
if (onlyCwdHash !== undefined && cwdHash !== onlyCwdHash) continue;
|
|
185
|
+
let sessionIds: string[];
|
|
186
|
+
try {
|
|
187
|
+
sessionIds = await readdir(join(root, cwdHash));
|
|
188
|
+
} catch {
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
for (const sessionId of sessionIds.sort(compareStrings)) {
|
|
192
|
+
refs.push({ cwdHash, sessionId, path: join(root, cwdHash, sessionId, "current.jsonl") });
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return refs;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
function readOptionalString(value: unknown): string | null {
|
|
199
|
+
return typeof value === "string" && value.length > 0 ? value : null;
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
203
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
function compareStrings(a: string, b: string): number {
|
|
207
|
+
return a.localeCompare(b);
|
|
208
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { stateRootRemoved } from "../../core/xdg.js";
|
|
2
|
+
import { atomicWrite, sessionPaths } from "../../engine/session.js";
|
|
3
|
+
import type { SessionMeta } from "./contract.js";
|
|
4
|
+
import type { SessionManagerState } from "./manager.js";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Three-stage atomic checkpoint:
|
|
8
|
+
* 1. current.jsonl appends are fsync'd by writer.persistTree() (the engine
|
|
9
|
+
* writer debounces fsync between checkpoints).
|
|
10
|
+
* 2. tree.json is written via writer.persistTree() (atomicWrite under the hood).
|
|
11
|
+
* 3. meta.json is rewritten with lastCheckpointAt / lastCheckpointReason via
|
|
12
|
+
* atomicWrite so the on-disk marker survives crashes.
|
|
13
|
+
*
|
|
14
|
+
* The engine writer closes over the same meta reference we hold in
|
|
15
|
+
* SessionManagerState.meta. Mutating it here keeps the writer's eventual
|
|
16
|
+
* close() in sync with the checkpoint-enriched fields.
|
|
17
|
+
*
|
|
18
|
+
* Nothing is written, and no checkpoint is claimed in memory, once `clio
|
|
19
|
+
* uninstall` has taken the state root away. The check sits before
|
|
20
|
+
* `sessionPaths()`, which mkdirs the session directory and so rebuilds the
|
|
21
|
+
* whole root on its way to a meta.json the operator just deleted. This is the
|
|
22
|
+
* writer that undid an uninstall roughly two minutes after it reported success,
|
|
23
|
+
* leaving behind a root holding meta.json and tree.json with
|
|
24
|
+
* `lastCheckpointReason: shutdown`.
|
|
25
|
+
*/
|
|
26
|
+
export async function performCheckpoint(state: SessionManagerState, reason?: string): Promise<void> {
|
|
27
|
+
await state.writer.persistTree();
|
|
28
|
+
if (stateRootRemoved()) return;
|
|
29
|
+
const paths = sessionPaths(state.meta);
|
|
30
|
+
const at = new Date().toISOString();
|
|
31
|
+
const enriched: SessionMeta = {
|
|
32
|
+
...state.meta,
|
|
33
|
+
lastCheckpointAt: at,
|
|
34
|
+
lastCheckpointReason: reason ?? null,
|
|
35
|
+
};
|
|
36
|
+
atomicWrite(paths.meta, JSON.stringify(enriched, null, 2));
|
|
37
|
+
Object.assign(state.meta, enriched);
|
|
38
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-compaction trigger.
|
|
3
|
+
*
|
|
4
|
+
* Pure pressure check + in-flight-debounced runner used by the chat-loop
|
|
5
|
+
* before every assistant request. `shouldCompact` reports whether the current
|
|
6
|
+
* context pressure crossed the single compaction threshold; the
|
|
7
|
+
* `AutoCompactionTrigger` wraps the actual task so two concurrent chat
|
|
8
|
+
* submissions cannot spawn overlapping compaction runs on the same session.
|
|
9
|
+
*
|
|
10
|
+
* Kept deliberately small so the chat-loop can call it on the hot path
|
|
11
|
+
* without new allocations per turn. No I/O here. The caller injects the work
|
|
12
|
+
* via `fire(task)`.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
export interface ContextCompactionVerdict {
|
|
16
|
+
shouldCompact: boolean;
|
|
17
|
+
pressure: number | null;
|
|
18
|
+
contextTokens: number;
|
|
19
|
+
contextWindow: number;
|
|
20
|
+
threshold: number;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export const DEFAULT_COMPACTION_THRESHOLD = 0.8;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Report whether `contextTokens / contextWindow` crossed `threshold`.
|
|
27
|
+
* Defensive behavior:
|
|
28
|
+
* - non-positive or NaN contextWindow returns a no-op verdict.
|
|
29
|
+
* - thresholds outside (0, 1] disable the trigger.
|
|
30
|
+
*/
|
|
31
|
+
export function shouldCompact(
|
|
32
|
+
contextTokens: number,
|
|
33
|
+
threshold: number,
|
|
34
|
+
contextWindow: number,
|
|
35
|
+
): ContextCompactionVerdict {
|
|
36
|
+
const base: ContextCompactionVerdict = {
|
|
37
|
+
shouldCompact: false,
|
|
38
|
+
pressure: null,
|
|
39
|
+
contextTokens,
|
|
40
|
+
contextWindow,
|
|
41
|
+
threshold,
|
|
42
|
+
};
|
|
43
|
+
if (!Number.isFinite(threshold) || threshold <= 0 || threshold > 1) return base;
|
|
44
|
+
if (!Number.isFinite(contextTokens) || contextTokens <= 0) return base;
|
|
45
|
+
if (!Number.isFinite(contextWindow) || contextWindow <= 0) return base;
|
|
46
|
+
|
|
47
|
+
const pressure = contextTokens / contextWindow;
|
|
48
|
+
return {
|
|
49
|
+
shouldCompact: pressure >= threshold,
|
|
50
|
+
pressure,
|
|
51
|
+
contextTokens,
|
|
52
|
+
contextWindow,
|
|
53
|
+
threshold,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Coalesces concurrent `fire(task)` calls onto a single in-flight Promise.
|
|
59
|
+
*
|
|
60
|
+
* A chat session can race a threshold-driven trigger and an overflow-recovery
|
|
61
|
+
* trigger inside the same tick. Both want to run compaction. The first fire
|
|
62
|
+
* starts the task and stores the Promise; subsequent fires observe the same
|
|
63
|
+
* Promise and await it instead of kicking off a second run. Once the task
|
|
64
|
+
* settles (resolve or reject), the slot clears so the next fire starts a
|
|
65
|
+
* fresh run.
|
|
66
|
+
*/
|
|
67
|
+
export class AutoCompactionTrigger<T> {
|
|
68
|
+
private inFlight: Promise<T> | null = null;
|
|
69
|
+
|
|
70
|
+
/** True while a task is in flight. Callers can short-circuit on this. */
|
|
71
|
+
isBusy(): boolean {
|
|
72
|
+
return this.inFlight !== null;
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* Run `task` unless one is already in flight. Returns the Promise the
|
|
77
|
+
* task is running under. Callers always get the eventual result of the
|
|
78
|
+
* first task, never a second call. Rejections clear the slot so a later
|
|
79
|
+
* fire can start fresh.
|
|
80
|
+
*/
|
|
81
|
+
fire(task: () => Promise<T>): Promise<T> {
|
|
82
|
+
if (this.inFlight) return this.inFlight;
|
|
83
|
+
const run = task().finally(() => {
|
|
84
|
+
this.inFlight = null;
|
|
85
|
+
});
|
|
86
|
+
this.inFlight = run;
|
|
87
|
+
return run;
|
|
88
|
+
}
|
|
89
|
+
}
|