@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,259 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single-line preview generation for /tree overlay rows.
|
|
3
|
+
*
|
|
4
|
+
* The /tree overlay flattens a TreeSnapshot into one row per turn. The raw
|
|
5
|
+
* snapshot only carries kind + ids + label; this module computes a short,
|
|
6
|
+
* single-line description for each row from the underlying structured message
|
|
7
|
+
* payload so users can recognise turns at a glance instead of seeing a wall
|
|
8
|
+
* of generic `[role]` placeholders.
|
|
9
|
+
*
|
|
10
|
+
* The function is pure: it takes a turn-shape input and returns a string. No
|
|
11
|
+
* I/O, no time, no width-aware truncation (the overlay layer applies its own
|
|
12
|
+
* width budget after calling). It is defensive against the supported message
|
|
13
|
+
* payload shapes.
|
|
14
|
+
*/
|
|
15
|
+
import type { ClioTurnRecord } from "../../../engine/session.js";
|
|
16
|
+
import { stripTokenizerSentinels } from "../../../engine/strip-tokenizer-sentinels.js";
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* Maximum characters for the inline preview slice. Keeps a row readable on
|
|
20
|
+
* an 88-column overlay even after the role marker, indent, short turn id,
|
|
21
|
+
* and optional label suffix. Callers that need a tighter budget can clamp
|
|
22
|
+
* the output further.
|
|
23
|
+
*/
|
|
24
|
+
export const TURN_PREVIEW_MAX_CHARS = 60;
|
|
25
|
+
|
|
26
|
+
/** Minimal turn shape buildTurnPreview accepts. */
|
|
27
|
+
export type TurnPreviewInput = Pick<ClioTurnRecord, "kind" | "payload">;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Strip ANSI escape sequences. Tool outputs sometimes carry colour codes
|
|
31
|
+
* that survive into the persisted payload; rendering them inside a single
|
|
32
|
+
* row breaks the overlay's frame because pi-tui's truncateToWidth treats
|
|
33
|
+
* them as zero-width control bytes but our brandedContentRow padding then
|
|
34
|
+
* miscounts. The regexes are constructed from String.fromCharCode(0x1b) so
|
|
35
|
+
* the source file stays free of literal control bytes.
|
|
36
|
+
*/
|
|
37
|
+
const ESC = String.fromCharCode(0x1b);
|
|
38
|
+
const ANSI_CSI_RE = new RegExp(`${ESC}\\[[0-9;?]*[ -/]*[@-~]`, "g");
|
|
39
|
+
const ANSI_FALLBACK_RE = new RegExp(`${ESC}[@-_]`, "g");
|
|
40
|
+
|
|
41
|
+
function stripAnsi(text: string): string {
|
|
42
|
+
return text.replace(ANSI_CSI_RE, "").replace(ANSI_FALLBACK_RE, "");
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Collapse all whitespace runs (including newlines, tabs, and CR) into a
|
|
47
|
+
* single space and trim the ends. Combined with stripAnsi + sentinel
|
|
48
|
+
* stripping this guarantees a single-line preview suitable for a row.
|
|
49
|
+
*/
|
|
50
|
+
function collapseSingleLine(text: string): string {
|
|
51
|
+
return text.replace(/\s+/g, " ").trim();
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Apply every defensive cleanup pass we want on persisted text before it
|
|
56
|
+
* shows up in a row. Order matters: ANSI removal must run before whitespace
|
|
57
|
+
* collapse because some CSI sequences embed literal spaces.
|
|
58
|
+
*/
|
|
59
|
+
function sanitize(text: string): string {
|
|
60
|
+
return collapseSingleLine(stripTokenizerSentinels(stripAnsi(text)));
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function clamp(text: string, max: number): string {
|
|
64
|
+
if (text.length <= max) return text;
|
|
65
|
+
if (max <= 1) return text.slice(0, max);
|
|
66
|
+
return `${text.slice(0, max - 1)}…`;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* Pull user-authored or assistant text from supported message payloads.
|
|
71
|
+
* Payloads may be bare strings, objects with a text property, or pi-ai
|
|
72
|
+
* content blocks. Returns null when no usable text is found.
|
|
73
|
+
*/
|
|
74
|
+
function extractPlainText(payload: unknown): string | null {
|
|
75
|
+
if (typeof payload === "string") {
|
|
76
|
+
const sanitized = sanitize(payload);
|
|
77
|
+
return sanitized.length > 0 ? sanitized : null;
|
|
78
|
+
}
|
|
79
|
+
if (!payload || typeof payload !== "object") return null;
|
|
80
|
+
const obj = payload as Record<string, unknown>;
|
|
81
|
+
if (typeof obj.text === "string") {
|
|
82
|
+
const sanitized = sanitize(obj.text);
|
|
83
|
+
if (sanitized.length > 0) return sanitized;
|
|
84
|
+
}
|
|
85
|
+
if (Array.isArray(obj.content)) {
|
|
86
|
+
const parts: string[] = [];
|
|
87
|
+
for (const block of obj.content) {
|
|
88
|
+
if (!block || typeof block !== "object") continue;
|
|
89
|
+
const b = block as Record<string, unknown>;
|
|
90
|
+
if (b.type === "text" && typeof b.text === "string") parts.push(b.text);
|
|
91
|
+
}
|
|
92
|
+
if (parts.length > 0) {
|
|
93
|
+
const sanitized = sanitize(parts.join(" "));
|
|
94
|
+
if (sanitized.length > 0) return sanitized;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return null;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Identify the most distinguishing argument value for a tool call so the
|
|
102
|
+
* preview reads like a function call. The picked key is heuristic: known
|
|
103
|
+
* tool argument shapes route to their natural identifier; everything else
|
|
104
|
+
* falls back to the first scalar arg.
|
|
105
|
+
*/
|
|
106
|
+
function pickToolArg(toolName: string, args: unknown): string {
|
|
107
|
+
if (!args || typeof args !== "object") return "";
|
|
108
|
+
const a = args as Record<string, unknown>;
|
|
109
|
+
const preferred: Record<string, ReadonlyArray<string>> = {
|
|
110
|
+
read: ["path"],
|
|
111
|
+
write: ["path"],
|
|
112
|
+
edit: ["path"],
|
|
113
|
+
bash: ["command"],
|
|
114
|
+
code_nav: ["query", "mode"],
|
|
115
|
+
git: ["op"],
|
|
116
|
+
verify: ["check"],
|
|
117
|
+
grep: ["pattern", "query"],
|
|
118
|
+
search: ["query", "pattern"],
|
|
119
|
+
web_fetch: ["url"],
|
|
120
|
+
web_search: ["query"],
|
|
121
|
+
};
|
|
122
|
+
const order = preferred[toolName] ?? [];
|
|
123
|
+
for (const key of order) {
|
|
124
|
+
const value = a[key];
|
|
125
|
+
if (typeof value === "string" && value.length > 0) return sanitize(value);
|
|
126
|
+
if (typeof value === "number") return String(value);
|
|
127
|
+
}
|
|
128
|
+
// Fallback: first scalar arg, in declaration order.
|
|
129
|
+
for (const [, value] of Object.entries(a)) {
|
|
130
|
+
if (typeof value === "string" && value.length > 0) return sanitize(value);
|
|
131
|
+
if (typeof value === "number" || typeof value === "boolean") return String(value);
|
|
132
|
+
}
|
|
133
|
+
return "";
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
interface ToolCallShape {
|
|
137
|
+
toolName: string;
|
|
138
|
+
args: unknown;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
function extractToolCall(payload: unknown): ToolCallShape | null {
|
|
142
|
+
if (!payload || typeof payload !== "object") return null;
|
|
143
|
+
const p = payload as Record<string, unknown>;
|
|
144
|
+
const toolName = typeof p.name === "string" ? p.name : typeof p.toolName === "string" ? p.toolName : null;
|
|
145
|
+
if (!toolName) return null;
|
|
146
|
+
const args = p.args !== undefined ? p.args : (p.arguments ?? p.input);
|
|
147
|
+
return { toolName, args };
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
interface ToolResultShape {
|
|
151
|
+
isError: boolean;
|
|
152
|
+
text: string;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
function extractToolResult(payload: unknown): ToolResultShape | null {
|
|
156
|
+
if (!payload || typeof payload !== "object") return null;
|
|
157
|
+
const p = payload as Record<string, unknown>;
|
|
158
|
+
if (!("toolCallId" in p) && !("result" in p) && !("isError" in p)) return null;
|
|
159
|
+
const isError = p.isError === true;
|
|
160
|
+
let text = "";
|
|
161
|
+
const result = p.result;
|
|
162
|
+
if (typeof result === "string") text = result;
|
|
163
|
+
else if (result && typeof result === "object") {
|
|
164
|
+
const r = result as Record<string, unknown>;
|
|
165
|
+
if (Array.isArray(r.content)) {
|
|
166
|
+
const parts: string[] = [];
|
|
167
|
+
for (const block of r.content) {
|
|
168
|
+
if (!block || typeof block !== "object") continue;
|
|
169
|
+
const b = block as Record<string, unknown>;
|
|
170
|
+
if (b.type === "text" && typeof b.text === "string") parts.push(b.text);
|
|
171
|
+
}
|
|
172
|
+
text = parts.join(" ");
|
|
173
|
+
} else if (typeof r.text === "string") {
|
|
174
|
+
text = r.text;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
if (text.length === 0 && typeof p.errorMessage === "string") text = p.errorMessage;
|
|
178
|
+
return { isError, text: sanitize(text) };
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Detect the assistant aborted/error sentinel. Persisted assistant turns
|
|
183
|
+
* carry `stopReason` from the engine; `"aborted"` and `"error"` warrant
|
|
184
|
+
* dedicated markers because the text body is typically empty or partial in
|
|
185
|
+
* those states.
|
|
186
|
+
*/
|
|
187
|
+
function assistantStopMarker(payload: unknown): "(aborted)" | "(error)" | null {
|
|
188
|
+
if (!payload || typeof payload !== "object") return null;
|
|
189
|
+
const sr = (payload as { stopReason?: unknown }).stopReason;
|
|
190
|
+
if (sr === "aborted") return "(aborted)";
|
|
191
|
+
if (sr === "error") return "(error)";
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Compose the per-row preview for a turn. The string is single-line, ANSI-
|
|
197
|
+
* stripped, sentinel-stripped, and clamped to {@link TURN_PREVIEW_MAX_CHARS}.
|
|
198
|
+
* Empty / aborted / streaming-style states get a parenthesised marker so
|
|
199
|
+
* the row never reads as a duplicate of its neighbours.
|
|
200
|
+
*/
|
|
201
|
+
export function buildTurnPreview(turn: TurnPreviewInput, max: number = TURN_PREVIEW_MAX_CHARS): string {
|
|
202
|
+
const budget = Math.max(1, max);
|
|
203
|
+
switch (turn.kind) {
|
|
204
|
+
case "user": {
|
|
205
|
+
const text = extractPlainText(turn.payload);
|
|
206
|
+
return text === null ? "(empty)" : clamp(text, budget);
|
|
207
|
+
}
|
|
208
|
+
case "assistant": {
|
|
209
|
+
const stop = assistantStopMarker(turn.payload);
|
|
210
|
+
const text = extractPlainText(turn.payload);
|
|
211
|
+
if (text !== null) return clamp(text, budget);
|
|
212
|
+
if (stop !== null) return stop;
|
|
213
|
+
// No text content: typically a tool-call-only turn or a streaming
|
|
214
|
+
// shell that was persisted without a body.
|
|
215
|
+
if (
|
|
216
|
+
turn.payload &&
|
|
217
|
+
typeof turn.payload === "object" &&
|
|
218
|
+
Array.isArray((turn.payload as { content?: unknown }).content)
|
|
219
|
+
) {
|
|
220
|
+
const content = (turn.payload as { content: unknown[] }).content;
|
|
221
|
+
const toolCalls = content.filter(
|
|
222
|
+
(b) => b && typeof b === "object" && (b as { type?: unknown }).type === "toolCall",
|
|
223
|
+
);
|
|
224
|
+
if (toolCalls.length > 0) {
|
|
225
|
+
const names = toolCalls
|
|
226
|
+
.map((b) => (b as { name?: unknown }).name)
|
|
227
|
+
.filter((n): n is string => typeof n === "string");
|
|
228
|
+
if (names.length > 0) return clamp(`(tool calls) ${names.join(", ")}`, budget);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
return "(empty)";
|
|
232
|
+
}
|
|
233
|
+
case "tool_call": {
|
|
234
|
+
const call = extractToolCall(turn.payload);
|
|
235
|
+
if (!call) return "(empty)";
|
|
236
|
+
const arg = pickToolArg(call.toolName, call.args);
|
|
237
|
+
const inner = arg.length > 0 ? `"${clamp(arg, Math.max(8, budget - call.toolName.length - 4))}"` : "";
|
|
238
|
+
const composed = `${call.toolName}(${inner})`;
|
|
239
|
+
return clamp(composed, budget);
|
|
240
|
+
}
|
|
241
|
+
case "tool_result": {
|
|
242
|
+
const result = extractToolResult(turn.payload);
|
|
243
|
+
if (!result) return "(empty)";
|
|
244
|
+
const status = result.isError ? "err" : "ok";
|
|
245
|
+
const head = `[${status}]`;
|
|
246
|
+
if (result.text.length === 0) return head;
|
|
247
|
+
const remaining = Math.max(4, budget - head.length - 1);
|
|
248
|
+
return `${head} ${clamp(result.text, remaining)}`;
|
|
249
|
+
}
|
|
250
|
+
case "system": {
|
|
251
|
+
const text = extractPlainText(turn.payload);
|
|
252
|
+
return text === null ? "(system)" : clamp(text, budget);
|
|
253
|
+
}
|
|
254
|
+
case "checkpoint":
|
|
255
|
+
return "(checkpoint)";
|
|
256
|
+
default:
|
|
257
|
+
return `(${String(turn.kind)})`;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fold a session ledger's assistant turns into the per-call usage the rest of
|
|
3
|
+
* Clio reports: tokens in and out, cache reads and writes, reasoning tokens,
|
|
4
|
+
* and provider-reported cost, attributed to the target and wire model that
|
|
5
|
+
* served each call.
|
|
6
|
+
*
|
|
7
|
+
* This lives in the session domain because the ledger is the only durable
|
|
8
|
+
* record of what a session spent, and three surfaces read it: the `/cost`
|
|
9
|
+
* overlay and footer reseed from it on every session change, and `clio-coder usage
|
|
10
|
+
* report` folds it across sessions. It was written for the overlay first and
|
|
11
|
+
* sat under src/interactive; a headless report reaching into the TUI surface's
|
|
12
|
+
* directory for it would have made one surface's presentation a dependency of
|
|
13
|
+
* every surface's accounting, which is the same thing the tools/interactive
|
|
14
|
+
* boundary rule exists to prevent.
|
|
15
|
+
*
|
|
16
|
+
* Assistant turns marked aborted or error are skipped for the same reason the
|
|
17
|
+
* context estimator skips them: their usage is not a completed call. A
|
|
18
|
+
* cancelled partial persists a fully populated all-zero usage object, so
|
|
19
|
+
* counting it would add an API call worth nothing.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import type { SessionEntry } from "./entries.js";
|
|
23
|
+
|
|
24
|
+
/** One completed assistant API call, as the ledger recorded it. */
|
|
25
|
+
export interface LedgerUsageCall {
|
|
26
|
+
providerId: string;
|
|
27
|
+
modelId: string;
|
|
28
|
+
input: number;
|
|
29
|
+
output: number;
|
|
30
|
+
cacheRead: number;
|
|
31
|
+
cacheWrite: number;
|
|
32
|
+
reasoningTokens: number;
|
|
33
|
+
totalTokens: number;
|
|
34
|
+
costUsd: number;
|
|
35
|
+
/** API calls this row accounts for. Absent means one, which is every message row. */
|
|
36
|
+
apiCalls?: number;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/** The target and model a session ran under before any modelChange row. */
|
|
40
|
+
export interface SessionUsageDefaults {
|
|
41
|
+
target?: string | null;
|
|
42
|
+
model?: string | null;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function numberAt(source: Record<string, unknown>, key: string): number {
|
|
46
|
+
const value = source[key];
|
|
47
|
+
return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : 0;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function reasoningTokensOf(usage: Record<string, unknown>): number {
|
|
51
|
+
const direct = numberAt(usage, "reasoningTokens");
|
|
52
|
+
if (direct > 0) return direct;
|
|
53
|
+
const details = usage.outputTokensDetails ?? usage.completionTokensDetails;
|
|
54
|
+
if (details && typeof details === "object") return numberAt(details as Record<string, unknown>, "reasoningTokens");
|
|
55
|
+
return 0;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function stringAt(source: Record<string, unknown>, ...keys: string[]): string | null {
|
|
59
|
+
for (const key of keys) {
|
|
60
|
+
const value = source[key];
|
|
61
|
+
if (typeof value === "string" && value.trim().length > 0) return value;
|
|
62
|
+
}
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* One entry per completed assistant API call that carried provider usage.
|
|
68
|
+
*
|
|
69
|
+
* Attribution follows the live path, which records under the *target* id and
|
|
70
|
+
* the wire model rather than the runtime name. Reading the runtime out of the
|
|
71
|
+
* payload instead split one endpoint into two blocks in `/cost`, so a single
|
|
72
|
+
* `node-a` target on `llamacpp` rendered as two providers whose turn counts
|
|
73
|
+
* diverged with every resume. `modelChange` rows are replayed in order so a
|
|
74
|
+
* session that switched targets mid-way attributes each call to the one that
|
|
75
|
+
* served it.
|
|
76
|
+
*/
|
|
77
|
+
export function ledgerUsageCalls(
|
|
78
|
+
entries: ReadonlyArray<SessionEntry>,
|
|
79
|
+
defaults: SessionUsageDefaults = {},
|
|
80
|
+
): LedgerUsageCall[] {
|
|
81
|
+
const calls: LedgerUsageCall[] = [];
|
|
82
|
+
let currentTarget = defaults.target ?? null;
|
|
83
|
+
let currentModel = defaults.model ?? null;
|
|
84
|
+
for (const entry of entries) {
|
|
85
|
+
// A compaction summarizes history through a real model call, billed like
|
|
86
|
+
// any other. Its usage rides on the compactionSummary entry rather than on
|
|
87
|
+
// an assistant message, because the summary is context machinery and never
|
|
88
|
+
// enters the conversation; folding it here is what puts it on `/cost` and
|
|
89
|
+
// in `clio-coder usage report`.
|
|
90
|
+
if (entry?.kind === "compactionSummary") {
|
|
91
|
+
const usage = entry.usage;
|
|
92
|
+
if (!usage || usage.totalTokens <= 0) continue;
|
|
93
|
+
calls.push({
|
|
94
|
+
providerId: currentTarget ?? "unknown",
|
|
95
|
+
modelId: currentModel ?? "unknown",
|
|
96
|
+
input: usage.input,
|
|
97
|
+
output: usage.output,
|
|
98
|
+
cacheRead: usage.cacheRead,
|
|
99
|
+
cacheWrite: usage.cacheWrite,
|
|
100
|
+
reasoningTokens: usage.reasoning,
|
|
101
|
+
totalTokens: usage.totalTokens,
|
|
102
|
+
costUsd: usage.cost.total,
|
|
103
|
+
// A split turn runs two summarization streams under one entry; the
|
|
104
|
+
// provider served that many calls even though one row records them.
|
|
105
|
+
apiCalls: Math.max(1, Math.round(usage.apiCalls)),
|
|
106
|
+
});
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
if (entry?.kind === "modelChange") {
|
|
110
|
+
const change = entry as { target?: unknown; modelId?: unknown; provider?: unknown };
|
|
111
|
+
if (typeof change.target === "string" && change.target.length > 0) currentTarget = change.target;
|
|
112
|
+
else if (typeof change.provider === "string" && change.provider.length > 0) currentTarget = change.provider;
|
|
113
|
+
if (typeof change.modelId === "string" && change.modelId.length > 0) currentModel = change.modelId;
|
|
114
|
+
continue;
|
|
115
|
+
}
|
|
116
|
+
if (entry?.kind !== "message" || entry.role !== "assistant") continue;
|
|
117
|
+
const payload = entry.payload;
|
|
118
|
+
if (!payload || typeof payload !== "object" || Array.isArray(payload)) continue;
|
|
119
|
+
const record = payload as Record<string, unknown>;
|
|
120
|
+
const stopReason = record.stopReason;
|
|
121
|
+
if (stopReason === "aborted" || stopReason === "error") continue;
|
|
122
|
+
const rawUsage = record.usage;
|
|
123
|
+
if (!rawUsage || typeof rawUsage !== "object" || Array.isArray(rawUsage)) continue;
|
|
124
|
+
const usage = rawUsage as Record<string, unknown>;
|
|
125
|
+
const input = numberAt(usage, "input");
|
|
126
|
+
const output = numberAt(usage, "output");
|
|
127
|
+
const cacheRead = numberAt(usage, "cacheRead");
|
|
128
|
+
const cacheWrite = numberAt(usage, "cacheWrite");
|
|
129
|
+
const totalTokens = numberAt(usage, "totalTokens") || input + output + cacheRead + cacheWrite;
|
|
130
|
+
// An all-zero usage block is a call that never reported anything. Adding it
|
|
131
|
+
// would inflate the call count while contributing no tokens.
|
|
132
|
+
if (totalTokens === 0) continue;
|
|
133
|
+
const cost = usage.cost;
|
|
134
|
+
const costUsd = cost && typeof cost === "object" ? numberAt(cost as Record<string, unknown>, "total") : 0;
|
|
135
|
+
calls.push({
|
|
136
|
+
providerId: currentTarget ?? stringAt(record, "provider", "api") ?? "unknown",
|
|
137
|
+
modelId: currentModel ?? stringAt(record, "responseModel", "model") ?? "unknown",
|
|
138
|
+
input,
|
|
139
|
+
output,
|
|
140
|
+
cacheRead,
|
|
141
|
+
cacheWrite,
|
|
142
|
+
reasoningTokens: reasoningTokensOf(usage),
|
|
143
|
+
totalTokens,
|
|
144
|
+
costUsd,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
return calls;
|
|
148
|
+
}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
import { execFile, execFileSync } from "node:child_process";
|
|
2
|
+
import { promisify } from "node:util";
|
|
3
|
+
|
|
4
|
+
const execFileAsync = promisify(execFile);
|
|
5
|
+
|
|
6
|
+
const TIMEOUT_MS = 1000;
|
|
7
|
+
|
|
8
|
+
export interface GitProbeResult {
|
|
9
|
+
isGit: boolean;
|
|
10
|
+
branch: string | null;
|
|
11
|
+
dirty: boolean | null;
|
|
12
|
+
ahead: number | null;
|
|
13
|
+
behind: number | null;
|
|
14
|
+
recentCommits: ReadonlyArray<{ sha: string; subject: string }>;
|
|
15
|
+
remoteUrl: string | null;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* The subset a live status surface actually paints. Deliberately narrower than
|
|
20
|
+
* `GitProbeResult`: ahead/behind and recent commits cost two more subprocesses
|
|
21
|
+
* per poll and are only ever read by the workspace context tool, which probes
|
|
22
|
+
* once at session bind rather than on a timer.
|
|
23
|
+
*/
|
|
24
|
+
export interface GitStatusProbeResult {
|
|
25
|
+
isGit: boolean;
|
|
26
|
+
branch: string | null;
|
|
27
|
+
dirty: boolean | null;
|
|
28
|
+
remoteUrl: string | null;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const EMPTY_PROBE: GitProbeResult = {
|
|
32
|
+
isGit: false,
|
|
33
|
+
branch: null,
|
|
34
|
+
dirty: null,
|
|
35
|
+
ahead: null,
|
|
36
|
+
behind: null,
|
|
37
|
+
recentCommits: [],
|
|
38
|
+
remoteUrl: null,
|
|
39
|
+
};
|
|
40
|
+
|
|
41
|
+
const EMPTY_STATUS_PROBE: GitStatusProbeResult = { isGit: false, branch: null, dirty: null, remoteUrl: null };
|
|
42
|
+
|
|
43
|
+
function gitOk(cwd: string, args: string[]): string | null {
|
|
44
|
+
try {
|
|
45
|
+
const out = execFileSync("git", args, { cwd, timeout: TIMEOUT_MS, stdio: ["ignore", "pipe", "ignore"] });
|
|
46
|
+
return out.toString().trim();
|
|
47
|
+
} catch {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
async function gitOkAsync(cwd: string, args: string[]): Promise<string | null> {
|
|
53
|
+
try {
|
|
54
|
+
const { stdout } = await execFileAsync("git", args, { cwd, timeout: TIMEOUT_MS, encoding: "utf8" });
|
|
55
|
+
return stdout.trim();
|
|
56
|
+
} catch {
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function normalizeRemote(url: string): string {
|
|
62
|
+
let out = url.trim();
|
|
63
|
+
if (out.endsWith(".git")) out = out.slice(0, -4);
|
|
64
|
+
const sshMatch = /^git@([^:]+):(.+)$/.exec(out);
|
|
65
|
+
if (sshMatch) {
|
|
66
|
+
const [, host, path] = sshMatch;
|
|
67
|
+
return `https://${host}/${path}`;
|
|
68
|
+
}
|
|
69
|
+
return out;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function branchFrom(raw: string | null): string | null {
|
|
73
|
+
return raw && raw !== "HEAD" ? raw : null;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
function dirtyFrom(status: string | null): boolean | null {
|
|
77
|
+
return status === null ? null : status.length > 0;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function aheadBehindFrom(raw: string | null): { ahead: number | null; behind: number | null } {
|
|
81
|
+
if (!raw) return { ahead: null, behind: null };
|
|
82
|
+
const parts = raw.split(/\s+/);
|
|
83
|
+
const a = Number.parseInt(parts[0] ?? "", 10);
|
|
84
|
+
const b = Number.parseInt(parts[1] ?? "", 10);
|
|
85
|
+
return { ahead: Number.isFinite(a) ? a : null, behind: Number.isFinite(b) ? b : null };
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
function recentCommitsFrom(log: string | null): ReadonlyArray<{ sha: string; subject: string }> {
|
|
89
|
+
if (!log) return [];
|
|
90
|
+
return log
|
|
91
|
+
.split("\n")
|
|
92
|
+
.map((line) => {
|
|
93
|
+
const tab = line.indexOf("\t");
|
|
94
|
+
if (tab < 0) return null;
|
|
95
|
+
return { sha: line.slice(0, tab), subject: line.slice(tab + 1) };
|
|
96
|
+
})
|
|
97
|
+
.filter((commit): commit is { sha: string; subject: string } => commit !== null);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
function remoteFrom(raw: string | null): string | null {
|
|
101
|
+
return raw ? normalizeRemote(raw) : null;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export function probeGit(cwd: string): GitProbeResult {
|
|
105
|
+
const inside = gitOk(cwd, ["rev-parse", "--is-inside-work-tree"]);
|
|
106
|
+
if (inside !== "true") return EMPTY_PROBE;
|
|
107
|
+
const branch = branchFrom(gitOk(cwd, ["rev-parse", "--abbrev-ref", "HEAD"]));
|
|
108
|
+
const dirty = dirtyFrom(gitOk(cwd, ["status", "--porcelain"]));
|
|
109
|
+
const { ahead, behind } = aheadBehindFrom(gitOk(cwd, ["rev-list", "--left-right", "--count", "HEAD...@{u}"]));
|
|
110
|
+
const recentCommits = recentCommitsFrom(gitOk(cwd, ["log", "-5", "--format=%H%x09%s"]));
|
|
111
|
+
const remoteUrl = remoteFrom(gitOk(cwd, ["remote", "get-url", "origin"]));
|
|
112
|
+
return { isGit: true, branch, dirty, ahead, behind, recentCommits, remoteUrl };
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* The full probe without blocking the event loop. Six subprocesses cost 63-100 ms
|
|
117
|
+
* of blocked loop on a large repository; the five that follow the work-tree gate
|
|
118
|
+
* are independent, so they run concurrently and the caller waits on none of them.
|
|
119
|
+
*/
|
|
120
|
+
export async function probeGitAsync(cwd: string): Promise<GitProbeResult> {
|
|
121
|
+
const inside = await gitOkAsync(cwd, ["rev-parse", "--is-inside-work-tree"]);
|
|
122
|
+
if (inside !== "true") return EMPTY_PROBE;
|
|
123
|
+
const [branchRaw, status, aheadBehindRaw, log, remoteRaw] = await Promise.all([
|
|
124
|
+
gitOkAsync(cwd, ["rev-parse", "--abbrev-ref", "HEAD"]),
|
|
125
|
+
gitOkAsync(cwd, ["status", "--porcelain"]),
|
|
126
|
+
gitOkAsync(cwd, ["rev-list", "--left-right", "--count", "HEAD...@{u}"]),
|
|
127
|
+
gitOkAsync(cwd, ["log", "-5", "--format=%H%x09%s"]),
|
|
128
|
+
gitOkAsync(cwd, ["remote", "get-url", "origin"]),
|
|
129
|
+
]);
|
|
130
|
+
const { ahead, behind } = aheadBehindFrom(aheadBehindRaw);
|
|
131
|
+
return {
|
|
132
|
+
isGit: true,
|
|
133
|
+
branch: branchFrom(branchRaw),
|
|
134
|
+
dirty: dirtyFrom(status),
|
|
135
|
+
ahead,
|
|
136
|
+
behind,
|
|
137
|
+
recentCommits: recentCommitsFrom(log),
|
|
138
|
+
remoteUrl: remoteFrom(remoteRaw),
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* Branch, dirty flag, and remote only: four subprocesses instead of six, run
|
|
144
|
+
* concurrently and off the loop. This is what the interactive footer polls on
|
|
145
|
+
* its ticker and re-reads at the end of every turn.
|
|
146
|
+
*/
|
|
147
|
+
export async function probeGitStatusAsync(cwd: string): Promise<GitStatusProbeResult> {
|
|
148
|
+
const inside = await gitOkAsync(cwd, ["rev-parse", "--is-inside-work-tree"]);
|
|
149
|
+
if (inside !== "true") return EMPTY_STATUS_PROBE;
|
|
150
|
+
const [branchRaw, status, remoteRaw] = await Promise.all([
|
|
151
|
+
gitOkAsync(cwd, ["rev-parse", "--abbrev-ref", "HEAD"]),
|
|
152
|
+
gitOkAsync(cwd, ["status", "--porcelain"]),
|
|
153
|
+
gitOkAsync(cwd, ["remote", "get-url", "origin"]),
|
|
154
|
+
]);
|
|
155
|
+
return {
|
|
156
|
+
isGit: true,
|
|
157
|
+
branch: branchFrom(branchRaw),
|
|
158
|
+
dirty: dirtyFrom(status),
|
|
159
|
+
remoteUrl: remoteFrom(remoteRaw),
|
|
160
|
+
};
|
|
161
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export type { GitProbeResult, GitStatusProbeResult } from "./git-probe.js";
|
|
2
|
+
export { probeGit, probeGitAsync, probeGitStatusAsync } from "./git-probe.js";
|
|
3
|
+
export type { WorkspaceCommit, WorkspaceSnapshot } from "./snapshot.js";
|
|
4
|
+
export { emptyWorkspaceSnapshot, probeWorkspace, probeWorkspaceAsync } from "./snapshot.js";
|