@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,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cut-point detection for compaction (Phase 12 slice 12c).
|
|
3
|
+
*
|
|
4
|
+
* Walks an entry list newest-to-oldest, accumulating estimated tokens, and
|
|
5
|
+
* reports where to slice so the suffix carries at least `keepRecentTokens`
|
|
6
|
+
* tokens of recent context. Ports pi-coding-agent's `findCutPoint` +
|
|
7
|
+
* `findTurnStartIndex` (pi-mono/packages/coding-agent/src/core/compaction/
|
|
8
|
+
* compaction.ts) against Clio's SessionEntry union.
|
|
9
|
+
*
|
|
10
|
+
* Invariant: the returned cut never lands on a `tool_result` message. Tool
|
|
11
|
+
* results must stay attached to the tool call that produced them, otherwise
|
|
12
|
+
* the replayed context shows a result with no originating call.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import type { SessionEntry } from "../entries.js";
|
|
16
|
+
import { estimateTokens } from "./tokens.js";
|
|
17
|
+
|
|
18
|
+
export interface CutPointResult {
|
|
19
|
+
/** Index of the first entry to keep (start of the retained suffix). */
|
|
20
|
+
firstKeptEntryIndex: number;
|
|
21
|
+
/**
|
|
22
|
+
* When the cut falls mid-turn (cut point is not a user turn start), the
|
|
23
|
+
* index of the user message that started the turn being split. -1 when
|
|
24
|
+
* the cut already lands on a turn boundary.
|
|
25
|
+
*/
|
|
26
|
+
turnStartIndex: number;
|
|
27
|
+
/** True when the cut splits a turn; `turnStartIndex` is valid in that case. */
|
|
28
|
+
isSplitTurn: boolean;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface FindCutPointOptions {
|
|
32
|
+
/** Inclusive lower bound on the search window. Defaults to 0. */
|
|
33
|
+
startIndex?: number;
|
|
34
|
+
/** Exclusive upper bound on the search window. Defaults to entries.length. */
|
|
35
|
+
endIndex?: number;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Scan backwards from `entryIndex` until we hit the user (or bashExecution)
|
|
40
|
+
* message that opened the current turn. Returns -1 when no such start is
|
|
41
|
+
* found inside the supplied window. `branchSummary` entries count as turn
|
|
42
|
+
* starts because they replace the upstream history at a fork point.
|
|
43
|
+
*/
|
|
44
|
+
function findTurnStartIndex(entries: ReadonlyArray<SessionEntry>, entryIndex: number, startIndex = 0): number {
|
|
45
|
+
for (let i = entryIndex; i >= startIndex; i--) {
|
|
46
|
+
const entry = entries[i];
|
|
47
|
+
if (!entry) continue;
|
|
48
|
+
if (entry.kind === "branchSummary") return i;
|
|
49
|
+
if (entry.kind === "bashExecution") return i;
|
|
50
|
+
if (entry.kind === "message" && entry.role === "user") return i;
|
|
51
|
+
}
|
|
52
|
+
return -1;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/** Entries we can cut at. `tool_result` is the only role we must NOT cut at. */
|
|
56
|
+
function isValidCutPoint(entry: SessionEntry): boolean {
|
|
57
|
+
switch (entry.kind) {
|
|
58
|
+
case "message":
|
|
59
|
+
return entry.role !== "tool_result";
|
|
60
|
+
case "bashExecution":
|
|
61
|
+
case "custom":
|
|
62
|
+
case "skillActivation":
|
|
63
|
+
case "branchSummary":
|
|
64
|
+
case "compactionSummary":
|
|
65
|
+
return true;
|
|
66
|
+
case "modelChange":
|
|
67
|
+
case "thinkingLevelChange":
|
|
68
|
+
case "fileEntry":
|
|
69
|
+
case "sessionInfo":
|
|
70
|
+
case "label":
|
|
71
|
+
case "protectedArtifact":
|
|
72
|
+
case "taskLedger":
|
|
73
|
+
case "workerRun":
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function findValidCutPoints(entries: ReadonlyArray<SessionEntry>, startIndex: number, endIndex: number): number[] {
|
|
79
|
+
const cuts: number[] = [];
|
|
80
|
+
for (let i = startIndex; i < endIndex; i++) {
|
|
81
|
+
const entry = entries[i];
|
|
82
|
+
if (!entry) continue;
|
|
83
|
+
if (isValidCutPoint(entry)) cuts.push(i);
|
|
84
|
+
}
|
|
85
|
+
return cuts;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Find the cut point that keeps at least `keepRecentTokens` tokens in the
|
|
90
|
+
* retained suffix. Never cuts at a `tool_result`. When walking forward from
|
|
91
|
+
* the chosen cut would swallow non-message bookkeeping entries (modelChange,
|
|
92
|
+
* thinkingLevelChange, fileEntry, sessionInfo), the cut is widened so those
|
|
93
|
+
* entries ride along with the suffix instead of being summarized.
|
|
94
|
+
*
|
|
95
|
+
* Small-session fallback: when the walker exhausts `entries` without ever
|
|
96
|
+
* accumulating `keepRecentTokens`, the pi-coding-agent reference left
|
|
97
|
+
* `cutIndex` at the oldest valid cut, which made `compact()` produce an
|
|
98
|
+
* empty `pre` slice and the chat-loop report "nothing to compact" on
|
|
99
|
+
* populated sessions below the keep-recent window. Clio's manual `/compact`
|
|
100
|
+
* expects to summarize whatever older history exists, so when no suffix
|
|
101
|
+
* crosses the threshold the cut falls back to the newest turn start (user
|
|
102
|
+
* message, bashExecution, or branchSummary). Sessions with only a single
|
|
103
|
+
* turn still land the cut at index 0. `pre` stays empty and the caller
|
|
104
|
+
* surfaces the honest "nothing to compact" notice.
|
|
105
|
+
*/
|
|
106
|
+
export function findCutPoint(
|
|
107
|
+
entries: ReadonlyArray<SessionEntry>,
|
|
108
|
+
keepRecentTokens: number,
|
|
109
|
+
opts: FindCutPointOptions = {},
|
|
110
|
+
): CutPointResult {
|
|
111
|
+
const startIndex = opts.startIndex ?? 0;
|
|
112
|
+
const endIndex = opts.endIndex ?? entries.length;
|
|
113
|
+
const cutPoints = findValidCutPoints(entries, startIndex, endIndex);
|
|
114
|
+
if (cutPoints.length === 0) {
|
|
115
|
+
return { firstKeptEntryIndex: startIndex, turnStartIndex: -1, isSplitTurn: false };
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
let accumulated = 0;
|
|
119
|
+
let cutIndex = -1;
|
|
120
|
+
for (let i = endIndex - 1; i >= startIndex; i--) {
|
|
121
|
+
const entry = entries[i];
|
|
122
|
+
if (!entry) continue;
|
|
123
|
+
accumulated += estimateTokens(entry);
|
|
124
|
+
if (accumulated >= keepRecentTokens) {
|
|
125
|
+
for (const candidate of cutPoints) {
|
|
126
|
+
if (candidate >= i) {
|
|
127
|
+
cutIndex = candidate;
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
if (cutIndex === -1) {
|
|
136
|
+
// Walker never crossed keepRecentTokens, or crossed but found no valid
|
|
137
|
+
// cut at/after the stop index (all valid cuts precede the tool_result
|
|
138
|
+
// tail). Prefer the newest turn start so older turns still feed the
|
|
139
|
+
// summary prompt. Absent any turn start, fall back to the oldest valid
|
|
140
|
+
// cut. That matches the pre-fix behavior, so pre stays empty and the
|
|
141
|
+
// orchestrator reports nothing to compact.
|
|
142
|
+
const lastTurnStart = findTurnStartIndex(entries, endIndex - 1, startIndex);
|
|
143
|
+
cutIndex = lastTurnStart !== -1 ? lastTurnStart : (cutPoints[0] ?? startIndex);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Scan backwards from cutIndex to fold bookkeeping entries into the suffix.
|
|
147
|
+
while (cutIndex > startIndex) {
|
|
148
|
+
const prev = entries[cutIndex - 1];
|
|
149
|
+
if (!prev) break;
|
|
150
|
+
if (prev.kind === "compactionSummary") break;
|
|
151
|
+
if (
|
|
152
|
+
prev.kind === "message" ||
|
|
153
|
+
prev.kind === "bashExecution" ||
|
|
154
|
+
prev.kind === "custom" ||
|
|
155
|
+
prev.kind === "skillActivation" ||
|
|
156
|
+
prev.kind === "branchSummary"
|
|
157
|
+
) {
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
cutIndex--;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
const cutEntry = entries[cutIndex];
|
|
164
|
+
const cutIsUserTurn = !!cutEntry && cutEntry.kind === "message" && cutEntry.role === "user";
|
|
165
|
+
const turnStartIndex = cutIsUserTurn ? -1 : findTurnStartIndex(entries, cutIndex, startIndex);
|
|
166
|
+
return {
|
|
167
|
+
firstKeptEntryIndex: cutIndex,
|
|
168
|
+
turnStartIndex,
|
|
169
|
+
isSplitTurn: !cutIsUserTurn && turnStartIndex !== -1,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compaction settings: user-visible defaults.
|
|
3
|
+
*
|
|
4
|
+
* The public settings block is a single pressure threshold plus the recent-turn
|
|
5
|
+
* protection horizon. The structural type lives in `src/core/defaults.ts`
|
|
6
|
+
* alongside the rest of the settings tree so core code stays free of a
|
|
7
|
+
* backward domain dependency; this module pairs that type with the value the
|
|
8
|
+
* DEFAULT_SETTINGS tree and the chat-loop read at runtime.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type { CompactionSettings } from "../../../core/defaults.js";
|
|
12
|
+
|
|
13
|
+
export type { CompactionSettings } from "../../../core/defaults.js";
|
|
14
|
+
|
|
15
|
+
export const DEFAULT_COMPACTION_SETTINGS: CompactionSettings = {
|
|
16
|
+
auto: true,
|
|
17
|
+
threshold: 0.8,
|
|
18
|
+
excludeLastTurns: 6,
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Tokens held in reserve for the summary response. Ported from
|
|
23
|
+
* pi-coding-agent's `DEFAULT_COMPACTION_SETTINGS.reserveTokens`; kept as an
|
|
24
|
+
* engine-level constant so adjusting it later does not require a settings
|
|
25
|
+
* migration.
|
|
26
|
+
*/
|
|
27
|
+
export const DEFAULT_RESERVE_TOKENS = 16_384;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Minimum tokens of recent context the cut-point must keep. The estimator
|
|
31
|
+
* walks backwards until it has accumulated at least this many tokens, then
|
|
32
|
+
* cuts at the nearest valid boundary.
|
|
33
|
+
*/
|
|
34
|
+
export const DEFAULT_KEEP_RECENT_TOKENS = 20_000;
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cheap pre-stage for compaction: mask the bodies of tool results older than
|
|
3
|
+
* the protected recent-turn horizon. Tool call/result pairing and metadata
|
|
4
|
+
* survive so replay dependencies stay intact; only the observation body is
|
|
5
|
+
* replaced with a short marker telling the model how to re-fetch.
|
|
6
|
+
*
|
|
7
|
+
* The same pass drops thinking blocks from assistant messages older than the
|
|
8
|
+
* horizon. Prior-turn reasoning is replayed by the local engine adapters
|
|
9
|
+
* (lmstudio `<think>` text, ollama `thinking`, llama.cpp `reasoning_content`)
|
|
10
|
+
* and counted by the pressure estimator, yet has no forward value once the
|
|
11
|
+
* turn is past the protected window; the Anthropic API drops it after every
|
|
12
|
+
* turn. No marker replaces it: thinking is model-internal and a marker would
|
|
13
|
+
* spend tokens to say nothing. Recent turns keep their thinking untouched so
|
|
14
|
+
* same-model signature replay still works where it matters.
|
|
15
|
+
*
|
|
16
|
+
* Entries that already carry a `contextCompaction` marker (from any earlier
|
|
17
|
+
* compaction run) are never rewritten again; thinking masking is naturally
|
|
18
|
+
* idempotent (a stripped message has no thinking blocks left) and stamps
|
|
19
|
+
* `mask_thinking` so the ledger records why the reasoning vanished.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import type { MessageEntry, SessionEntry } from "../entries.js";
|
|
23
|
+
import { calculateContextTokens } from "./tokens.js";
|
|
24
|
+
|
|
25
|
+
export interface MaskObservationsResult {
|
|
26
|
+
entries: SessionEntry[];
|
|
27
|
+
changed: boolean;
|
|
28
|
+
tokensBefore: number;
|
|
29
|
+
tokensAfter: number;
|
|
30
|
+
maskedObservations: number;
|
|
31
|
+
maskedThinkingBlocks: number;
|
|
32
|
+
maskedThinkingChars: number;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function isRecord(value: unknown): value is Record<string, unknown> {
|
|
36
|
+
return !!value && typeof value === "object" && !Array.isArray(value);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function cloneEntry(entry: SessionEntry): SessionEntry {
|
|
40
|
+
return structuredClone(entry) as SessionEntry;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function textFromContent(content: unknown): string {
|
|
44
|
+
if (!Array.isArray(content)) return "";
|
|
45
|
+
const parts: string[] = [];
|
|
46
|
+
for (const block of content) {
|
|
47
|
+
if (!isRecord(block)) continue;
|
|
48
|
+
if (block.type === "text" && typeof block.text === "string") parts.push(block.text);
|
|
49
|
+
}
|
|
50
|
+
return parts.join("");
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function stringifyPreview(value: unknown, limit = 10_000): string {
|
|
54
|
+
if (value === undefined || value === null) return "";
|
|
55
|
+
if (typeof value === "string") return value.length <= limit ? value : `${value.slice(0, limit - 3)}...`;
|
|
56
|
+
try {
|
|
57
|
+
const text = JSON.stringify(value);
|
|
58
|
+
if (!text) return "";
|
|
59
|
+
return text.length <= limit ? text : `${text.slice(0, limit - 3)}...`;
|
|
60
|
+
} catch {
|
|
61
|
+
const text = String(value);
|
|
62
|
+
return text.length <= limit ? text : `${text.slice(0, limit - 3)}...`;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
function resultText(result: unknown): string {
|
|
67
|
+
if (typeof result === "string") return result;
|
|
68
|
+
if (!isRecord(result)) return stringifyPreview(result);
|
|
69
|
+
const contentText = textFromContent(result.content);
|
|
70
|
+
if (contentText.length > 0) return contentText;
|
|
71
|
+
if (typeof result.text === "string") return result.text;
|
|
72
|
+
if (typeof result.output === "string") return result.output;
|
|
73
|
+
if (typeof result.message === "string") return result.message;
|
|
74
|
+
return stringifyPreview(result);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function extractToolResultPayload(payload: unknown): {
|
|
78
|
+
obj: Record<string, unknown>;
|
|
79
|
+
result: unknown;
|
|
80
|
+
toolName: string;
|
|
81
|
+
} {
|
|
82
|
+
const obj = isRecord(payload) ? payload : { result: payload };
|
|
83
|
+
const result = obj.result ?? obj.output ?? obj.out ?? obj.content ?? payload;
|
|
84
|
+
const toolName =
|
|
85
|
+
(typeof obj.toolName === "string" && obj.toolName) ||
|
|
86
|
+
(typeof obj.name === "string" && obj.name) ||
|
|
87
|
+
(typeof obj.tool === "string" && obj.tool) ||
|
|
88
|
+
"tool";
|
|
89
|
+
return { obj, result, toolName };
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function lineCount(text: string): number {
|
|
93
|
+
if (text.length === 0) return 0;
|
|
94
|
+
return text.split(/\r\n|\r|\n/).length;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function observationMarker(toolName: string, text: string): string {
|
|
98
|
+
const preview = text.trim().replace(/\s+/g, " ").slice(0, 160);
|
|
99
|
+
const suffix = preview.length > 0 ? ` Preview: ${preview}` : "";
|
|
100
|
+
return `[Observation masked: ${toolName} output was ${lineCount(text)} lines, ${text.length} chars - contents masked to save context. Re-run the tool for current content.]${suffix}`;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function maskedToolResult(original: unknown, marker: string): Record<string, unknown> {
|
|
104
|
+
const details = isRecord(original) && isRecord(original.details) ? { ...original.details } : {};
|
|
105
|
+
return {
|
|
106
|
+
content: [{ type: "text", text: marker }],
|
|
107
|
+
details: {
|
|
108
|
+
...details,
|
|
109
|
+
contextCompaction: { stage: "mask_observations", at: new Date().toISOString() },
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
function alreadyCompacted(payload: unknown): boolean {
|
|
115
|
+
if (!isRecord(payload)) return false;
|
|
116
|
+
if (isRecord(payload.contextCompaction)) return true;
|
|
117
|
+
const summary = payload.resultSummary;
|
|
118
|
+
if (isRecord(summary) && isRecord(summary.contextCompaction)) return true;
|
|
119
|
+
const result = payload.result ?? payload.output ?? payload.out;
|
|
120
|
+
if (isRecord(result) && isRecord(result.details) && isRecord(result.details.contextCompaction)) return true;
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
function maskObservation(entry: MessageEntry): MessageEntry {
|
|
125
|
+
const next = cloneEntry(entry) as MessageEntry;
|
|
126
|
+
const { obj, result, toolName } = extractToolResultPayload(next.payload);
|
|
127
|
+
const text = resultText(result);
|
|
128
|
+
const marker = observationMarker(toolName, text);
|
|
129
|
+
next.payload = {
|
|
130
|
+
...obj,
|
|
131
|
+
result: maskedToolResult(result, marker),
|
|
132
|
+
output: undefined,
|
|
133
|
+
out: undefined,
|
|
134
|
+
content: undefined,
|
|
135
|
+
resultSummary: {
|
|
136
|
+
...(isRecord(obj.resultSummary) ? obj.resultSummary : {}),
|
|
137
|
+
bytes: 0,
|
|
138
|
+
truncated: true,
|
|
139
|
+
contextCompaction: {
|
|
140
|
+
stage: "mask_observations",
|
|
141
|
+
originalChars: text.length,
|
|
142
|
+
originalLines: lineCount(text),
|
|
143
|
+
at: new Date().toISOString(),
|
|
144
|
+
},
|
|
145
|
+
},
|
|
146
|
+
};
|
|
147
|
+
return next;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
interface MaskedThinking {
|
|
151
|
+
entry: MessageEntry;
|
|
152
|
+
blocks: number;
|
|
153
|
+
chars: number;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Strip thinking content from a stale assistant message. Returns null when
|
|
158
|
+
* the message carries no thinking (the no-op case, which keeps `changed`
|
|
159
|
+
* honest and makes reruns naturally idempotent). Handles both shapes the
|
|
160
|
+
* session ledger contains: `content` blocks of type `thinking` and the
|
|
161
|
+
* payload-level `thinking` string some engine paths persist.
|
|
162
|
+
*/
|
|
163
|
+
function maskThinking(entry: MessageEntry): MaskedThinking | null {
|
|
164
|
+
const obj = isRecord(entry.payload) ? entry.payload : null;
|
|
165
|
+
if (!obj) return null;
|
|
166
|
+
let blocks = 0;
|
|
167
|
+
let chars = 0;
|
|
168
|
+
let content: unknown[] | undefined;
|
|
169
|
+
if (Array.isArray(obj.content)) {
|
|
170
|
+
content = obj.content.filter((block) => {
|
|
171
|
+
if (!isRecord(block) || block.type !== "thinking") return true;
|
|
172
|
+
blocks += 1;
|
|
173
|
+
if (typeof block.thinking === "string") chars += block.thinking.length;
|
|
174
|
+
return false;
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
if (typeof obj.thinking === "string" && obj.thinking.length > 0) {
|
|
178
|
+
blocks += 1;
|
|
179
|
+
chars += obj.thinking.length;
|
|
180
|
+
}
|
|
181
|
+
if (blocks === 0) return null;
|
|
182
|
+
const next = cloneEntry(entry) as MessageEntry;
|
|
183
|
+
next.payload = {
|
|
184
|
+
...obj,
|
|
185
|
+
...(content !== undefined ? { content } : {}),
|
|
186
|
+
thinking: undefined,
|
|
187
|
+
contextCompaction: {
|
|
188
|
+
...(isRecord(obj.contextCompaction) ? obj.contextCompaction : {}),
|
|
189
|
+
stage: "mask_thinking",
|
|
190
|
+
maskedThinkingChars: chars,
|
|
191
|
+
at: new Date().toISOString(),
|
|
192
|
+
},
|
|
193
|
+
};
|
|
194
|
+
return { entry: next, blocks, chars };
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
function isTurnStart(entry: SessionEntry): boolean {
|
|
198
|
+
if (entry.kind === "bashExecution" || entry.kind === "branchSummary") return true;
|
|
199
|
+
return entry.kind === "message" && entry.role === "user";
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
function recentTurnCutoff(entries: ReadonlyArray<SessionEntry>, excludeLastTurns: number): number {
|
|
203
|
+
const horizon = Math.max(1, Math.floor(excludeLastTurns));
|
|
204
|
+
let seen = 0;
|
|
205
|
+
for (let i = entries.length - 1; i >= 0; i -= 1) {
|
|
206
|
+
const entry = entries[i];
|
|
207
|
+
if (!entry || !isTurnStart(entry)) continue;
|
|
208
|
+
seen += 1;
|
|
209
|
+
if (seen >= horizon) return i;
|
|
210
|
+
}
|
|
211
|
+
return 0;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
function invalidateUsage(entry: SessionEntry): SessionEntry {
|
|
215
|
+
if (entry.kind !== "message" || entry.role !== "assistant") return entry;
|
|
216
|
+
const obj = isRecord(entry.payload) ? entry.payload : null;
|
|
217
|
+
if (!obj || obj.contextUsageInvalidated === true) return entry;
|
|
218
|
+
const next = cloneEntry(entry) as MessageEntry;
|
|
219
|
+
next.payload = {
|
|
220
|
+
...obj,
|
|
221
|
+
contextUsageInvalidated: true,
|
|
222
|
+
};
|
|
223
|
+
return next;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
export function maskStaleObservations(
|
|
227
|
+
entries: ReadonlyArray<SessionEntry>,
|
|
228
|
+
excludeLastTurns: number,
|
|
229
|
+
): MaskObservationsResult {
|
|
230
|
+
const tokensBefore = calculateContextTokens(entries);
|
|
231
|
+
const cutoff = recentTurnCutoff(entries, excludeLastTurns);
|
|
232
|
+
let changed = false;
|
|
233
|
+
let maskedObservations = 0;
|
|
234
|
+
let maskedThinkingBlocks = 0;
|
|
235
|
+
let maskedThinkingChars = 0;
|
|
236
|
+
const next = entries.map((entry, index) => {
|
|
237
|
+
if (index >= cutoff || entry.kind !== "message") return entry;
|
|
238
|
+
if (entry.role === "tool_result") {
|
|
239
|
+
if (alreadyCompacted(entry.payload)) return entry;
|
|
240
|
+
changed = true;
|
|
241
|
+
maskedObservations += 1;
|
|
242
|
+
return maskObservation(entry);
|
|
243
|
+
}
|
|
244
|
+
if (entry.role === "assistant") {
|
|
245
|
+
const masked = maskThinking(entry);
|
|
246
|
+
if (!masked) return entry;
|
|
247
|
+
changed = true;
|
|
248
|
+
maskedThinkingBlocks += masked.blocks;
|
|
249
|
+
maskedThinkingChars += masked.chars;
|
|
250
|
+
return masked.entry;
|
|
251
|
+
}
|
|
252
|
+
return entry;
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
const finalEntries = changed ? next.map(invalidateUsage) : next;
|
|
256
|
+
return {
|
|
257
|
+
entries: finalEntries,
|
|
258
|
+
changed,
|
|
259
|
+
tokensBefore,
|
|
260
|
+
tokensAfter: calculateContextTokens(finalEntries),
|
|
261
|
+
maskedObservations,
|
|
262
|
+
maskedThinkingBlocks,
|
|
263
|
+
maskedThinkingChars,
|
|
264
|
+
};
|
|
265
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { isSessionEntry, type SessionEntry } from "../entries.js";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Validate session ledger records and return the structured entry sequence.
|
|
5
|
+
* The session header is removed by engine readers before this collector runs.
|
|
6
|
+
*/
|
|
7
|
+
export function collectSessionEntries(turns: ReadonlyArray<unknown>, filePath: string): SessionEntry[] {
|
|
8
|
+
const out: SessionEntry[] = [];
|
|
9
|
+
for (const raw of turns) {
|
|
10
|
+
if (!isSessionEntry(raw)) {
|
|
11
|
+
throw new Error(
|
|
12
|
+
`session ledger contains an unreadable entry (missing kind discriminant): ${filePath}. Remove or compact the session to reset.`,
|
|
13
|
+
);
|
|
14
|
+
}
|
|
15
|
+
out.push(raw);
|
|
16
|
+
}
|
|
17
|
+
return out;
|
|
18
|
+
}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Token estimation for session entries (Phase 12 slice 12c).
|
|
3
|
+
*
|
|
4
|
+
* Ports pi-coding-agent's chars/4 heuristic verbatim (reference:
|
|
5
|
+
* pi-mono/packages/coding-agent/src/core/compaction/compaction.ts:232
|
|
6
|
+
* `estimateTokens`). Pure functions, no I/O.
|
|
7
|
+
*
|
|
8
|
+
* Rationale for the heuristic (plan §3):
|
|
9
|
+
* - Conservative by design: over-estimating trips compaction earlier,
|
|
10
|
+
* never later. Missing a trigger and hitting provider overflow is
|
|
11
|
+
* expensive; running a compaction on 80k when actual was 95k is cheap.
|
|
12
|
+
* - pi-coding-agent ships it at scale, so we adopt the
|
|
13
|
+
* known ceiling rather than introduce a new numeric contract.
|
|
14
|
+
* - Exact per-provider counts (Anthropic /count_tokens, tiktoken) are
|
|
15
|
+
* parked. The `TokenEstimator` interface below keeps them a drop-in
|
|
16
|
+
* swap for a later phase.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import type { Usage } from "../../../engine/types.js";
|
|
20
|
+
import { ceilChars, contentChars, estimateAgentMessageTokens } from "../context-accounting.js";
|
|
21
|
+
import type {
|
|
22
|
+
BashExecutionEntry,
|
|
23
|
+
BranchSummaryEntry,
|
|
24
|
+
CompactionSummaryEntry,
|
|
25
|
+
CustomEntry,
|
|
26
|
+
MessageEntry,
|
|
27
|
+
SessionEntry,
|
|
28
|
+
} from "../entries.js";
|
|
29
|
+
|
|
30
|
+
/** Contract future alternate estimators must satisfy. */
|
|
31
|
+
export interface TokenEstimator {
|
|
32
|
+
estimateEntry(entry: SessionEntry): number;
|
|
33
|
+
calculateContextTokens(entries: ReadonlyArray<SessionEntry>, lastUsage?: Usage): number;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function estimateMessage(entry: MessageEntry): number {
|
|
37
|
+
return estimateAgentMessageTokens(entry);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function estimateBashExecution(entry: BashExecutionEntry): number {
|
|
41
|
+
return ceilChars(entry.command.length + entry.output.length);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function estimateCustom(entry: CustomEntry): number {
|
|
45
|
+
if (entry.data === undefined) return 0;
|
|
46
|
+
return ceilChars(contentChars(entry.data));
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function estimateSummary(entry: BranchSummaryEntry | CompactionSummaryEntry): number {
|
|
50
|
+
return ceilChars(entry.summary.length);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Estimate the token load of a single session entry. Non-context-bearing
|
|
55
|
+
* kinds (modelChange, thinkingLevelChange, fileEntry, sessionInfo,
|
|
56
|
+
* label, protectedArtifact, taskLedger, workerRun) return 0 so they never
|
|
57
|
+
* distort the context budget.
|
|
58
|
+
*/
|
|
59
|
+
export function estimateTokens(entry: SessionEntry): number {
|
|
60
|
+
switch (entry.kind) {
|
|
61
|
+
case "message":
|
|
62
|
+
return estimateMessage(entry);
|
|
63
|
+
case "bashExecution":
|
|
64
|
+
return estimateBashExecution(entry);
|
|
65
|
+
case "custom":
|
|
66
|
+
return estimateCustom(entry);
|
|
67
|
+
case "skillActivation":
|
|
68
|
+
return ceilChars(JSON.stringify(entry.activation).length);
|
|
69
|
+
case "branchSummary":
|
|
70
|
+
case "compactionSummary":
|
|
71
|
+
return estimateSummary(entry);
|
|
72
|
+
case "modelChange":
|
|
73
|
+
case "thinkingLevelChange":
|
|
74
|
+
case "fileEntry":
|
|
75
|
+
case "sessionInfo":
|
|
76
|
+
case "label":
|
|
77
|
+
case "protectedArtifact":
|
|
78
|
+
case "taskLedger":
|
|
79
|
+
case "workerRun":
|
|
80
|
+
return 0;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
function usageTotalTokens(usage: Usage): number {
|
|
85
|
+
return usage.totalTokens || usage.input + usage.output + usage.cacheRead + usage.cacheWrite;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function extractUsage(payload: unknown): Usage | undefined {
|
|
89
|
+
if (!payload || typeof payload !== "object") return undefined;
|
|
90
|
+
const p = payload as { usage?: unknown; stopReason?: unknown; contextUsageInvalidated?: unknown };
|
|
91
|
+
if (p.contextUsageInvalidated === true) return undefined;
|
|
92
|
+
if (p.stopReason === "aborted" || p.stopReason === "error") return undefined;
|
|
93
|
+
const u = p.usage;
|
|
94
|
+
if (!u || typeof u !== "object") return undefined;
|
|
95
|
+
const usage = u as Partial<Usage>;
|
|
96
|
+
if (typeof usage.input !== "number" || typeof usage.output !== "number") return undefined;
|
|
97
|
+
return usage as Usage;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Walk entries from newest to oldest, returning the first assistant message
|
|
102
|
+
* whose payload carries a valid usage block. Aborted/error assistant turns
|
|
103
|
+
* are skipped because their usage is not meaningful for context accounting.
|
|
104
|
+
*/
|
|
105
|
+
export function getLastAssistantUsage(entries: ReadonlyArray<SessionEntry>): Usage | undefined {
|
|
106
|
+
for (let i = entries.length - 1; i >= 0; i--) {
|
|
107
|
+
const entry = entries[i];
|
|
108
|
+
if (entry?.kind !== "message" || entry?.role !== "assistant") continue;
|
|
109
|
+
const usage = extractUsage(entry.payload);
|
|
110
|
+
if (usage) return usage;
|
|
111
|
+
}
|
|
112
|
+
return undefined;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
function findLastAssistantUsageIndex(entries: ReadonlyArray<SessionEntry>): number {
|
|
116
|
+
for (let i = entries.length - 1; i >= 0; i--) {
|
|
117
|
+
const entry = entries[i];
|
|
118
|
+
if (entry?.kind !== "message" || entry?.role !== "assistant") continue;
|
|
119
|
+
if (extractUsage(entry.payload)) return i;
|
|
120
|
+
}
|
|
121
|
+
return -1;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Total context tokens for the supplied entry list. When `lastUsage` is
|
|
126
|
+
* provided (or derivable from the entries), uses its totalTokens as the
|
|
127
|
+
* anchor and only estimates the entries that followed it. This matches
|
|
128
|
+
* pi-coding-agent's `estimateContextTokens` behavior and keeps the number
|
|
129
|
+
* accurate for sessions whose most recent assistant turn carried real
|
|
130
|
+
* provider usage data.
|
|
131
|
+
*/
|
|
132
|
+
export function calculateContextTokens(entries: ReadonlyArray<SessionEntry>, lastUsage?: Usage): number {
|
|
133
|
+
const usage = lastUsage ?? getLastAssistantUsage(entries);
|
|
134
|
+
if (usage) {
|
|
135
|
+
const anchorTokens = usageTotalTokens(usage);
|
|
136
|
+
const anchorIndex = findLastAssistantUsageIndex(entries);
|
|
137
|
+
let trailing = 0;
|
|
138
|
+
for (let i = anchorIndex + 1; i < entries.length; i++) {
|
|
139
|
+
const entry = entries[i];
|
|
140
|
+
if (entry) trailing += estimateTokens(entry);
|
|
141
|
+
}
|
|
142
|
+
return anchorTokens + trailing;
|
|
143
|
+
}
|
|
144
|
+
let total = 0;
|
|
145
|
+
for (const entry of entries) total += estimateTokens(entry);
|
|
146
|
+
return total;
|
|
147
|
+
}
|