@iowarp/clio-coder 0.3.1 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +233 -373
- package/CONTRIBUTING.md +23 -23
- package/README.md +284 -613
- package/dist/{acp-FPR54DGL.js → acp-P2AQILE2.js} +43 -53
- package/dist/{agents-OGPIHPJH.js → agents-72W3BI7I.js} +43 -26
- package/dist/assets/codewiki.json +1 -1
- package/dist/{auth-IC3K6NIZ.js → auth-5TWEIYDN.js} +20 -12
- package/dist/chunk-2DJ2KNFG.js +2095 -0
- package/dist/{chunk-IS3ONKU3.js → chunk-2IR2NMPA.js} +6 -4
- package/dist/chunk-2SFS6XQE.js +122 -0
- package/dist/{chunk-PV4JUBVJ.js → chunk-2TLUCQVG.js} +40 -21
- package/dist/chunk-2VTFPG5O.js +48 -0
- package/dist/chunk-4BJ5BYCE.js +61 -0
- package/dist/{chunk-474KN5II.js → chunk-4BPJXDWC.js} +111 -181
- package/dist/chunk-4VP4KH3K.js +962 -0
- package/dist/chunk-4XUGQOHA.js +797 -0
- package/dist/chunk-4ZG3XFUR.js +77 -0
- package/dist/chunk-5B2AEOW5.js +5407 -0
- package/dist/{chunk-K2ITRMHZ.js → chunk-5TSRNF4G.js} +6 -138
- package/dist/{chunk-4QKXUHSR.js → chunk-5UFT4SUX.js} +70 -20
- package/dist/{chunk-OLBBMFRD.js → chunk-5UUP6MWO.js} +24 -62
- package/dist/chunk-65DEGPJ6.js +52 -0
- package/dist/chunk-6EJMN2Y3.js +17 -0
- package/dist/chunk-6N5PTWMY.js +136 -0
- package/dist/chunk-6SGHMWE3.js +277 -0
- package/dist/chunk-6XLNIQDB.js +27 -0
- package/dist/chunk-7CR24IG7.js +242 -0
- package/dist/chunk-7MNJORFF.js +22 -0
- package/dist/{chunk-KY56HMHH.js → chunk-A3CYT5EX.js} +125 -31
- package/dist/chunk-AGYYIBLL.js +1069 -0
- package/dist/{chunk-GB6QRBXN.js → chunk-APJ265NV.js} +54 -1187
- package/dist/{chunk-673JJUWJ.js → chunk-BMEMKKIT.js} +2 -2
- package/dist/chunk-CBCAPZAA.js +229 -0
- package/dist/chunk-CMZWFGD2.js +352 -0
- package/dist/chunk-COU2UHX6.js +400 -0
- package/dist/chunk-DSELYM6W.js +1077 -0
- package/dist/chunk-DUYJ5IO6.js +644 -0
- package/dist/chunk-ECH6PKUQ.js +39 -0
- package/dist/chunk-ED4KHGC3.js +143 -0
- package/dist/chunk-EKMEHE4H.js +340 -0
- package/dist/chunk-FCSXB6T2.js +338 -0
- package/dist/chunk-FJ3H4MN5.js +48 -0
- package/dist/{chunk-RPTR2H26.js → chunk-FNTMWMX5.js} +21 -15
- package/dist/chunk-FQ4SKYE4.js +29 -0
- package/dist/chunk-G4BMMOKF.js +182 -0
- package/dist/{chunk-ZPY3JZ5E.js → chunk-GGXXDWE4.js} +183 -1233
- package/dist/chunk-HC4CLZ2Y.js +68 -0
- package/dist/{chunk-LU4TK2PR.js → chunk-HFSBBKSQ.js} +5 -56
- package/dist/{chunk-PIUMUEMV.js → chunk-HKIYEGME.js} +10 -6
- package/dist/chunk-I4HZDVNP.js +73 -0
- package/dist/chunk-IKCO5N3L.js +162 -0
- package/dist/chunk-IR4CFBFN.js +56 -0
- package/dist/{chunk-R5KLMSBV.js → chunk-J5Q24KAG.js} +2 -2
- package/dist/chunk-J7CWMCQD.js +255 -0
- package/dist/{chunk-K5XEMXTI.js → chunk-JVCV3ICN.js} +1 -1
- package/dist/chunk-KZWTDYJF.js +217 -0
- package/dist/chunk-LBMZMYH2.js +285 -0
- package/dist/{chunk-G34LV2PF.js → chunk-LM5TQCJZ.js} +84 -170
- package/dist/chunk-LW6DSM3M.js +5135 -0
- package/dist/chunk-LWLEKMDQ.js +3482 -0
- package/dist/{chunk-H6F6BYOH.js → chunk-LZSJBIVT.js} +7003 -7434
- package/dist/{chunk-HQQID6OA.js → chunk-M6SHUN7Q.js} +5 -5
- package/dist/{chunk-FST4FYJB.js → chunk-MFFY33HR.js} +99 -140
- package/dist/{chunk-BSU2YIWB.js → chunk-MVVUPGPW.js} +131 -136
- package/dist/chunk-OAO4GE4M.js +619 -0
- package/dist/{chunk-Q3RUPKEJ.js → chunk-OC7FIQPC.js} +58 -189
- package/dist/chunk-OKGUZO2U.js +34 -0
- package/dist/{chunk-GAEBEQVI.js → chunk-OOJYHWRB.js} +32 -346
- package/dist/{chunk-Q5WJOSJ7.js → chunk-OQ33BKR3.js} +2 -1
- package/dist/chunk-OQE5J4C6.js +73 -0
- package/dist/{chunk-KKNLWXI6.js → chunk-ORBHGJC5.js} +8 -8
- package/dist/{chunk-MAR7Y6HW.js → chunk-PAJK6MAQ.js} +23 -16
- package/dist/{chunk-M5T5VO65.js → chunk-PIWWS5BL.js} +837 -635
- package/dist/chunk-POHLU5DW.js +1186 -0
- package/dist/chunk-QKMUKYO7.js +4961 -0
- package/dist/chunk-SRDMMSEP.js +16405 -0
- package/dist/chunk-SST6Z5JA.js +80 -0
- package/dist/chunk-STBPMHSX.js +2456 -0
- package/dist/chunk-T6YILFSB.js +80 -0
- package/dist/chunk-TZK7PACC.js +174 -0
- package/dist/chunk-TZTZS7QK.js +227 -0
- package/dist/{chunk-ASND7OZK.js → chunk-UFIIWP2H.js} +13 -13
- package/dist/chunk-UOV2BYIW.js +107 -0
- package/dist/{chunk-PFEFKVGL.js → chunk-V6RTAOC2.js} +13 -11
- package/dist/chunk-VAKQQHWR.js +434 -0
- package/dist/chunk-VG7TBQIY.js +128 -0
- package/dist/chunk-VJWL6YS5.js +244 -0
- package/dist/{chunk-EYOKLTMF.js → chunk-VPAYEGVX.js} +17 -3
- package/dist/chunk-WEH5XRJQ.js +32 -0
- package/dist/chunk-X4RCMKVQ.js +641 -0
- package/dist/{chunk-TEKV33Q5.js → chunk-X6IAEBZR.js} +65 -33
- package/dist/chunk-XBXAASKX.js +18 -0
- package/dist/chunk-XN3L4EYL.js +46 -0
- package/dist/{chunk-RDLVBZEO.js → chunk-YCWGATWI.js} +6 -4
- package/dist/chunk-YHZX5GEU.js +193 -0
- package/dist/chunk-YXLYO42X.js +91 -0
- package/dist/{chunk-NMOX6HFD.js → chunk-ZDOOVTXZ.js} +29 -77
- package/dist/chunk-ZI647VB5.js +37 -0
- package/dist/{chunk-C4PTHK7P.js → chunk-ZWLZP4ZT.js} +5 -5
- package/dist/chunk-ZWMF7253.js +1882 -0
- package/dist/cli/index.js +62 -54
- package/dist/clio-JOU4FXVA.js +25 -0
- package/dist/code-nav-7AX6FYE6.js +600 -0
- package/dist/codewiki/build-worker.js +66 -0
- package/dist/compile-cache-CVJMMODC.js +18 -0
- package/dist/{components-DMAOEKFB.js → components-KELWS457.js} +11 -6
- package/dist/{config-IRUQ7SE4.js → config-XCDVKR23.js} +92 -55
- package/dist/configure-4GAP54ZW.js +42 -0
- package/dist/{context-5RADCKTR.js → context-4UOGGLQ5.js} +71 -35
- package/dist/context-5VKGUVJJ.js +866 -0
- package/dist/{context-3KWFLHJG.js → context-77FM5DV5.js} +15 -13
- package/dist/{context-clear-7TSNPAAI.js → context-clear-XXJRLCJJ.js} +54 -28
- package/dist/{context-index-W4RLWOQH.js → context-index-BZ4UYMTC.js} +30 -24
- package/dist/dispatch-runner-QPRDDBDX.js +1997 -0
- package/dist/{docs-5AWSPS37.js → docs-2C2LTVT2.js} +23 -10
- package/dist/{doctor-UC5NAJYQ.js → doctor-HR46URBJ.js} +27 -17
- package/dist/{eval-U6TJHRLX.js → eval-XSSNATB4.js} +29 -16
- package/dist/{evidence-YEGUW4L3.js → evidence-6HG2PY2B.js} +46 -26
- package/dist/{evolve-TXARCTPG.js → evolve-K7YU3NCY.js} +45 -25
- package/dist/{extensions-OZFJ3A3G.js → extensions-QVDOHDGJ.js} +16 -7
- package/dist/{fleet-6G3DHNYE.js → fleet-VY3HHKN6.js} +163 -54
- package/dist/{fleet-preflight-DSNT37JK.js → fleet-preflight-DDN536IT.js} +7 -4
- package/dist/{init-KZ5QTF6M.js → init-JYGXI3FK.js} +69 -32
- package/dist/{memory-73ESV5YC.js → memory-WFZMGYHX.js} +48 -27
- package/dist/{models-A4PVNWJK.js → models-I5QWSEOM.js} +39 -25
- package/dist/monitor-GE4ID3IA.js +661 -0
- package/dist/{chunk-FCIH3BIZ.js → orchestrator-EM5MC3HM.js} +15979 -12407
- package/dist/{paths-C4H6IV77.js → paths-UXLN5YYZ.js} +10 -5
- package/dist/{preload-6WVMHX3A.js → preload-P6DGH2PZ.js} +2 -2
- package/dist/{reset-BGW6OGMV.js → reset-L2FQEE3E.js} +16 -10
- package/dist/{run-YTPEYQOH.js → run-ZU3QMZPZ.js} +101 -61
- package/dist/{share-YIFFV4NQ.js → share-S5BZQC5I.js} +15 -8
- package/dist/{skills-2V6RA3OQ.js → skills-X5VXCRNQ.js} +34 -14
- package/dist/{skills-eval-S2TVJO4F.js → skills-eval-WKIHWTHR.js} +70 -34
- package/dist/steer-GGWFUJUD.js +77 -0
- package/dist/{targets-TYXLPB23.js → targets-SNCPI2NR.js} +43 -27
- package/dist/terminal-lease-BNAHVHBS.js +395 -0
- package/dist/{trace-GGOJ6Q6Z.js → trace-PNCASAXC.js} +41 -16
- package/dist/{chunk-N6F52NLF.js → tree-sitter-HGKH6LG4.js} +28 -2306
- package/dist/{uninstall-LLLT4F4W.js → uninstall-FZCQCDKC.js} +10 -5
- package/dist/{upgrade-33G2LMM5.js → upgrade-JQHHPQ4K.js} +45 -25
- package/dist/{usage-ZAFSXKKG.js → usage-OR4O5SMZ.js} +62 -31
- package/dist/verify-375KUB3Y.js +716 -0
- package/dist/web-fetch-2YHJ3KTG.js +638 -0
- package/dist/{wiki-generate-NUQCVOQ3.js → wiki-generate-UEXP2ARI.js} +74 -34
- package/dist/worker/entry.js +221 -36
- package/dist/workspace-G4ZWUIPR.js +22 -0
- package/docs/README.md +22 -17
- package/docs/acp.md +168 -16
- package/docs/alcf-provider.md +1 -1
- package/docs/architecture.md +136 -7
- package/docs/artifact-versions.md +1 -1
- package/docs/built-in-agents.md +1 -1
- package/docs/capacity-and-scheduling.md +1 -1
- package/docs/commands-and-modes.md +114 -71
- package/docs/config-knobs-audit.md +1 -3
- package/docs/configuration-and-targets.md +174 -46
- package/docs/context-engine.md +29 -6
- package/docs/development-pipeline.md +26 -1
- package/docs/dispatch-architecture-rationale.md +1 -1
- package/docs/documentation-coverage.md +2 -2
- package/docs/documentation-guide.md +1 -1
- package/docs/environment-variables.md +13 -5
- package/docs/eval-runner.md +1 -1
- package/docs/evals-internal.md +1 -1
- package/docs/evidence-and-memory.md +6 -2
- package/docs/evolution.md +2 -2
- package/docs/exit-codes-and-output.md +15 -9
- package/docs/extensions-and-sharing.md +9 -9
- package/docs/fleet-dispatch.md +7 -5
- package/docs/git-commit-provenance.md +120 -0
- package/docs/glossary.md +1 -1
- package/docs/installation-and-lifecycle.md +34 -27
- package/docs/middleware-and-components.md +1 -1
- package/docs/model-catalog.md +45 -14
- package/docs/observability.md +8 -5
- package/docs/performance-methodology.md +491 -0
- package/docs/pi-boundary.md +72 -0
- package/docs/proactive-memory.md +3 -3
- package/docs/prompt-envelope-and-tools.md +24 -3
- package/docs/provider-adapter-cookbook.md +57 -4
- package/docs/release-cut-checklist.md +129 -115
- package/docs/safety-model.md +9 -5
- package/docs/scientific-validation.md +3 -3
- package/docs/session-lifecycle.md +55 -12
- package/docs/skills-marketplace.md +12 -8
- package/docs/time-conventions.md +1 -1
- package/docs/tool-usage.md +3 -3
- package/docs/trace-store.md +1 -1
- package/docs/troubleshooting.md +10 -7
- package/docs/tui-design.md +47 -10
- package/docs/worker-dispatch-mechanics.md +1 -1
- package/package.json +19 -22
- package/skills/coding/ast-grep/SKILL.md +136 -0
- package/skills/coding/ast-grep/evals.md +56 -0
- package/skills/coding/ast-grep/references/rule_reference.md +297 -0
- package/skills/coding/coding-standards/SKILL.md +113 -0
- package/skills/coding/coding-standards/evals.md +34 -0
- package/skills/coding/prototype/SKILL.md +86 -0
- package/skills/coding/prototype/evals.md +42 -0
- package/skills/coding/prototype/references/LOGIC.md +67 -0
- package/skills/coding/prototype/references/UI.md +112 -0
- package/skills/coding/tdd/SKILL.md +101 -0
- package/skills/coding/tdd/evals.md +41 -0
- package/skills/coding/tdd/references/mocking.md +59 -0
- package/skills/coding/tdd/references/tests.md +77 -0
- package/skills/context/context-handoff/SKILL.md +126 -0
- package/skills/context/context-handoff/evals.md +57 -0
- package/skills/context/context-handoff/scripts/new-handoff.sh +26 -0
- package/skills/context/context-prime/SKILL.md +95 -0
- package/skills/context/context-prime/evals.md +54 -0
- package/skills/meta/clio-dev/SKILL.md +91 -0
- package/skills/meta/clio-dev/evals.md +45 -0
- package/skills/meta/clio-test/SKILL.md +130 -0
- package/skills/meta/clio-test/evals.md +43 -0
- package/skills/meta/clio-test/references/harness.md +97 -0
- package/skills/meta/clio-test/references/test-map.md +59 -0
- package/skills/meta/credentials/SKILL.md +125 -0
- package/skills/meta/credentials/evals.md +104 -0
- package/skills/meta/find-skills/SKILL.md +72 -0
- package/skills/meta/find-skills/evals.md +47 -0
- package/skills/meta/herdr/SKILL.md +127 -0
- package/skills/meta/herdr/evals.md +38 -0
- package/skills/meta/skill-craft/SKILL.md +102 -0
- package/skills/meta/skill-craft/evals.md +41 -0
- package/skills/planning/architecture/SKILL.md +129 -0
- package/skills/planning/architecture/evals.md +36 -0
- package/skills/planning/backlog/SKILL.md +90 -0
- package/skills/planning/backlog/evals.md +43 -0
- package/skills/planning/prd/SKILL.md +82 -0
- package/skills/planning/prd/evals.md +49 -0
- package/skills/planning/product-intent/SKILL.md +112 -0
- package/skills/planning/product-intent/evals.md +36 -0
- package/skills/planning/tech-spec/SKILL.md +115 -0
- package/skills/planning/tech-spec/evals.md +47 -0
- package/skills/registry.yaml +136 -0
- package/skills/research/arxiv-literature/SKILL.md +104 -0
- package/skills/research/arxiv-literature/evals.md +58 -0
- package/skills/research/experiment-protocol/SKILL.md +122 -0
- package/skills/research/experiment-protocol/evals.md +91 -0
- package/skills/research/scientific-debugging/SKILL.md +119 -0
- package/skills/research/scientific-debugging/evals.md +138 -0
- package/skills/research/scientific-modernization/SKILL.md +138 -0
- package/skills/research/scientific-modernization/evals.md +84 -0
- package/skills/workflow/design-council/SKILL.md +139 -0
- package/skills/workflow/design-council/evals.md +97 -0
- package/skills/workflow/grill-me/SKILL.md +186 -0
- package/skills/workflow/grill-me/evals.md +78 -0
- package/skills/workflow/workflow-distiller/SKILL.md +136 -0
- package/skills/workflow/workflow-distiller/evals.md +107 -0
- package/src/cli/acp.ts +31 -4
- package/src/cli/clio.ts +68 -6
- package/src/cli/config-inspect.ts +28 -22
- package/src/cli/configure.ts +47 -9
- package/src/cli/context-clear.ts +2 -2
- package/src/cli/context-index.ts +21 -23
- package/src/cli/context.ts +13 -8
- package/src/cli/default-target.ts +9 -17
- package/src/cli/docs.ts +11 -5
- package/src/cli/evidence.ts +4 -1
- package/src/cli/extensions.ts +10 -1
- package/src/cli/fleet.ts +47 -6
- package/src/cli/index.ts +55 -26
- package/src/cli/memory.ts +3 -1
- package/src/cli/models.ts +1 -1
- package/src/cli/modes/json-stream.ts +37 -1
- package/src/cli/modes/print.ts +24 -9
- package/src/cli/run.ts +2 -2
- package/src/cli/skills-eval.ts +23 -8
- package/src/cli/skills.ts +19 -4
- package/src/cli/targets.ts +4 -0
- package/src/cli/text-layout.ts +15 -5
- package/src/cli/trace.ts +62 -14
- package/src/cli/upgrade.ts +18 -2
- package/src/cli/usage.ts +10 -3
- package/src/cli/wiki-generate.ts +2 -1
- package/src/core/agent-environment.ts +7 -0
- package/src/core/bash-exec.ts +72 -1
- package/src/core/boot-trace.ts +9 -4
- package/src/core/bus-events.ts +20 -4
- package/src/core/commit-attribution.ts +157 -0
- package/src/core/compile-cache.ts +159 -0
- package/src/core/config.ts +131 -2
- package/src/core/defaults.ts +39 -5
- package/src/core/domain-loader.ts +12 -5
- package/src/core/git-commit-attribution.ts +387 -0
- package/src/core/incomplete-installation.ts +45 -0
- package/src/core/response-schema.ts +1 -1
- package/src/core/safe-exec.ts +13 -1
- package/src/core/settings-layers.ts +155 -21
- package/src/core/skill-activation.ts +1 -1
- package/src/core/startup-timer.ts +3 -3
- package/src/core/state-file-lock.ts +13 -1
- package/src/core/termination.ts +78 -5
- package/src/domains/config/classify.ts +15 -3
- package/src/domains/config/extension.ts +19 -13
- package/src/domains/config/index.ts +10 -0
- package/src/domains/config/keybindings.ts +45 -9
- package/src/domains/context/bootstrap-prompt.ts +1 -1
- package/src/domains/context/bootstrap.ts +111 -18
- package/src/domains/context/clear.ts +16 -11
- package/src/domains/context/clio-md.ts +111 -9
- package/src/domains/context/codewiki/artifact.ts +400 -0
- package/src/domains/context/codewiki/build-worker-protocol.ts +24 -0
- package/src/domains/context/codewiki/build-worker.ts +54 -0
- package/src/domains/context/codewiki/coordinator.ts +182 -0
- package/src/domains/context/codewiki/indexer.ts +59 -144
- package/src/domains/context/codewiki/paths.ts +67 -0
- package/src/domains/context/codewiki/schema.ts +80 -0
- package/src/domains/context/codewiki/tree-sitter.ts +1 -1
- package/src/domains/context/contract.ts +11 -5
- package/src/domains/context/extension.ts +94 -143
- package/src/domains/context/fingerprint.ts +3 -1
- package/src/domains/context/index.ts +12 -22
- package/src/domains/context/project-metadata.ts +19 -0
- package/src/domains/context/prompt-context.ts +9 -10
- package/src/domains/context/refresh.ts +29 -21
- package/src/domains/context/runtime.ts +17 -0
- package/src/domains/context/wiki/generate.ts +39 -34
- package/src/domains/context/wiki/plan.ts +1 -1
- package/src/domains/context/wiki/prompts.ts +21 -8
- package/src/domains/dispatch/code-step.ts +20 -1
- package/src/domains/dispatch/extension.ts +158 -21
- package/src/domains/dispatch/failure-classification.ts +6 -0
- package/src/domains/dispatch/fleet-commit-attribution.ts +56 -0
- package/src/domains/dispatch/orphan-recovery.ts +50 -8
- package/src/domains/dispatch/receipt-integrity.ts +5 -0
- package/src/domains/dispatch/state.ts +31 -6
- package/src/domains/dispatch/transport.ts +2 -1
- package/src/domains/dispatch/types.ts +14 -0
- package/src/domains/dispatch/worker-spawn.ts +21 -2
- package/src/domains/eval/metrics/context.ts +1 -1
- package/src/domains/eval/types.ts +0 -1
- package/src/domains/evidence/build.ts +41 -1
- package/src/domains/lifecycle/migrations/2026-08-18-lmstudio-runtime-id.ts +52 -0
- package/src/domains/lifecycle/migrations/index.ts +24 -4
- package/src/domains/middleware/hooks-io.ts +12 -0
- package/src/domains/middleware/skills-reminder.ts +30 -15
- package/src/domains/prompts/compiler.ts +142 -84
- package/src/domains/prompts/contract.ts +18 -2
- package/src/domains/prompts/extension.ts +39 -7
- package/src/domains/prompts/fragment-loader.ts +0 -1
- package/src/domains/prompts/fragments/identity/clio.md +2 -4
- package/src/domains/prompts/fragments/identity/docs-routing.md +10 -0
- package/src/domains/prompts/fragments/identity/self-awareness.md +1 -45
- package/src/domains/prompts/fragments/operating/contract.md +4 -50
- package/src/domains/prompts/fragments/operating/delegation.md +42 -0
- package/src/domains/prompts/fragments/operating/skills.md +26 -0
- package/src/domains/prompts/fragments/operating/worker.md +16 -0
- package/src/domains/prompts/fragments/safety/auto-edit.md +5 -5
- package/src/domains/prompts/fragments/safety/full-auto.md +3 -3
- package/src/domains/prompts/fragments/safety/read-only.md +4 -4
- package/src/domains/prompts/fragments/safety/suggest.md +2 -2
- package/src/domains/prompts/fragments/wiki/page.md +10 -0
- package/src/domains/prompts/fragments/wiki/plan.md +10 -0
- package/src/domains/prompts/preload.ts +3 -3
- package/src/domains/providers/auth/api-key.ts +1 -1
- package/src/domains/providers/auth/backend-file.ts +20 -10
- package/src/domains/providers/auth/backend-memory.ts +59 -4
- package/src/domains/providers/auth/boot-status.ts +65 -0
- package/src/domains/providers/auth/oauth.ts +2 -1
- package/src/domains/providers/auth/storage.ts +97 -38
- package/src/domains/providers/capabilities.ts +12 -4
- package/src/domains/providers/contract.ts +15 -4
- package/src/domains/providers/extension.ts +18 -6
- package/src/domains/providers/model-runtime-capabilities.ts +15 -4
- package/src/domains/providers/models/local-models/clio-local-coding-targets.yaml +118 -35
- package/src/domains/providers/plugins.ts +5 -3
- package/src/domains/providers/probe/fingerprint.ts +25 -5
- package/src/domains/providers/registry.ts +31 -10
- package/src/domains/providers/runtimes/boot-manifest.ts +55 -0
- package/src/domains/providers/runtimes/builtins.ts +2 -2
- package/src/domains/providers/runtimes/common/lmstudio-http.ts +423 -0
- package/src/domains/providers/runtimes/common/local-synth.ts +6 -7
- package/src/domains/providers/runtimes/local-native/lmstudio.ts +241 -0
- package/src/domains/providers/support.ts +6 -3
- package/src/domains/providers/types/local-model-quirks.ts +7 -9
- package/src/domains/providers/types/runtime-descriptor.ts +12 -1
- package/src/domains/providers/types/target-descriptor.ts +22 -0
- package/src/domains/resources/contract.ts +0 -1
- package/src/domains/resources/extension.ts +1 -3
- package/src/domains/resources/loader.ts +3 -4
- package/src/domains/resources/prompts/loader.ts +16 -2
- package/src/domains/resources/prompts/substitute.ts +1 -65
- package/src/domains/resources/skills/content-hash.ts +2 -0
- package/src/domains/resources/skills/install.ts +17 -0
- package/src/domains/resources/skills/loader.ts +17 -10
- package/src/domains/resources/skills/marketplace.ts +55 -9
- package/src/domains/safety/action-classifier.ts +4 -2
- package/src/domains/safety/audit.ts +8 -2
- package/src/domains/safety/extension.ts +1 -1
- package/src/domains/session/compaction/branch-summary.ts +3 -2
- package/src/domains/session/compaction/cut-point.ts +2 -1
- package/src/domains/session/compaction/tokens.ts +2 -1
- package/src/domains/session/context-ledger.ts +14 -0
- package/src/domains/session/contract.ts +15 -0
- package/src/domains/session/decision-board.ts +190 -0
- package/src/domains/session/entries.ts +66 -3
- package/src/domains/session/extension.ts +93 -12
- package/src/domains/session/retry.ts +10 -18
- package/src/domains/session/session-artifacts.ts +107 -0
- package/src/domains/session/task-board.ts +207 -13
- package/src/domains/session/tree/active-path.ts +44 -5
- package/src/domains/session/tree/fork.ts +26 -27
- package/src/domains/session/tree/preview.ts +2 -2
- package/src/domains/session/workspace/git-probe.ts +17 -11
- package/src/domains/user-tasks/store.ts +297 -0
- package/src/engine/acp/errors.ts +96 -0
- package/src/engine/acp/server.ts +1728 -146
- package/src/engine/acp/transport.ts +135 -14
- package/src/engine/acp/types.ts +26 -0
- package/src/engine/agent.ts +3 -3
- package/src/engine/ai.ts +32 -27
- package/src/engine/alcf-oauth.ts +26 -19
- package/src/engine/api-registry.ts +223 -0
- package/src/engine/apis/index.ts +3 -7
- package/src/engine/apis/llamacpp-residency.ts +49 -9
- package/src/engine/apis/lmstudio-residency.ts +5 -21
- package/src/engine/apis/lmstudio.ts +243 -0
- package/src/engine/apis/ollama-native.ts +24 -3
- package/src/engine/apis/openai-completions.ts +170 -91
- package/src/engine/apis/residency.ts +139 -3
- package/src/engine/apis/types.ts +16 -0
- package/src/engine/env-api-keys.ts +98 -0
- package/src/engine/gemma-channel-filter.ts +223 -0
- package/src/engine/instrumented-tui.ts +192 -0
- package/src/engine/messages.ts +14 -0
- package/src/engine/models.ts +42 -0
- package/src/engine/oauth.ts +16 -12
- package/src/engine/prompt-templates.ts +1 -0
- package/src/engine/provider-payload.ts +16 -59
- package/src/engine/strip-tokenizer-sentinels.ts +1 -1
- package/src/engine/truncate.ts +9 -0
- package/src/engine/tui.ts +17 -9
- package/src/engine/types.ts +3 -6
- package/src/engine/worker-runtime-capabilities.ts +5 -0
- package/src/engine/worker-runtime.ts +1 -1
- package/src/engine/worker-tools.ts +9 -4
- package/src/entry/boot-options.ts +50 -0
- package/src/entry/orchestrator.ts +288 -150
- package/src/interactive/application-controller.ts +89 -2
- package/src/interactive/chat-loop.ts +266 -41
- package/src/interactive/chat-panel.ts +715 -278
- package/src/interactive/chat-renderer.ts +306 -85
- package/src/interactive/clio-editor.ts +3 -8
- package/src/interactive/command-fallbacks.ts +2 -2
- package/src/interactive/context-overlay.ts +27 -1
- package/src/interactive/editor-submit.ts +253 -24
- package/src/interactive/export-html/ansi-to-html.ts +161 -0
- package/src/interactive/export-html/index.ts +51 -0
- package/src/interactive/export-html/template.ts +45 -0
- package/src/interactive/export-html/tool-renderer.ts +54 -0
- package/src/interactive/footer/dashboard.ts +4 -0
- package/src/interactive/footer/notifications.ts +1 -1
- package/src/interactive/footer/widgets.ts +42 -22
- package/src/interactive/footer-panel.ts +8 -3
- package/src/interactive/format-time.ts +14 -2
- package/src/interactive/interactive-application.ts +203 -17
- package/src/interactive/interactive-event-projection.ts +18 -1
- package/src/interactive/interactive-input-runtime.ts +50 -4
- package/src/interactive/interactive-presentation.ts +151 -19
- package/src/interactive/interactive-shell.ts +268 -14
- package/src/interactive/interactive-slash-runtime.ts +184 -117
- package/src/interactive/interactive-tickers.ts +38 -7
- package/src/interactive/keybinding-manager.ts +1 -1
- package/src/interactive/layout.ts +40 -3
- package/src/interactive/overlay-frame.ts +1 -1
- package/src/interactive/overlay-general-openers.ts +58 -1
- package/src/interactive/overlay-key-routing.ts +3 -0
- package/src/interactive/overlay-lifecycle.ts +13 -0
- package/src/interactive/overlay-permission-lifecycle.ts +2 -1
- package/src/interactive/overlay-session-lifecycle.ts +69 -12
- package/src/interactive/overlays/ask-user.ts +146 -24
- package/src/interactive/overlays/decisions.ts +300 -0
- package/src/interactive/overlays/help-reference.ts +15 -10
- package/src/interactive/overlays/model-selector.ts +34 -16
- package/src/interactive/overlays/session-selector.ts +18 -0
- package/src/interactive/overlays/settings.ts +105 -17
- package/src/interactive/overlays/skills-hub.ts +4 -4
- package/src/interactive/overlays/tree-selector.ts +41 -6
- package/src/interactive/render-trace.ts +499 -90
- package/src/interactive/renderers/compaction-summary.ts +2 -2
- package/src/interactive/renderers/diff.ts +115 -104
- package/src/interactive/renderers/mermaid.ts +53 -0
- package/src/interactive/renderers/tool-execution.ts +516 -168
- package/src/interactive/renderers/worker-entry.ts +20 -4
- package/src/interactive/session-switch-settlement.ts +10 -0
- package/src/interactive/slash-autocomplete.ts +6 -114
- package/src/interactive/slash-commands.ts +135 -47
- package/src/interactive/slash-spec.ts +9 -38
- package/src/interactive/status/controller.ts +5 -1
- package/src/interactive/status/index.ts +12 -1
- package/src/interactive/status/reasoning.ts +87 -0
- package/src/interactive/status/summary.ts +13 -2
- package/src/interactive/stdout-backpressure.ts +99 -0
- package/src/interactive/stream-pacer.ts +530 -0
- package/src/interactive/stream-pacing-policy.ts +66 -0
- package/src/interactive/tasks-overlay.ts +368 -14
- package/src/interactive/terminal-lease.ts +485 -0
- package/src/interactive/theme/tokens.ts +1 -1
- package/src/interactive/transcript-detail.ts +120 -0
- package/src/interactive/turn-context.ts +4 -3
- package/src/interactive/turn-persistence.ts +30 -13
- package/src/interactive/turn-queues.ts +12 -0
- package/src/interactive/turn-recovery.ts +25 -8
- package/src/interactive/turn-runtime.ts +79 -12
- package/src/interactive/turn-state.ts +10 -0
- package/src/interactive/view/artifacts.ts +114 -4
- package/src/interactive/view/view-overlay.ts +3 -0
- package/src/interactive/welcome-dashboard.ts +17 -16
- package/src/interactive/worker-receipts.ts +52 -3
- package/src/interactive/worker-stream.ts +5 -1
- package/src/tools/agent-tools.ts +23 -3
- package/src/tools/artifact.ts +2 -2
- package/src/tools/ask-user.ts +23 -13
- package/src/tools/bash.ts +30 -2
- package/src/tools/bootstrap.ts +34 -431
- package/src/tools/builtin-tool-catalog.ts +271 -0
- package/src/tools/codewiki/code-nav-surface.ts +29 -0
- package/src/tools/codewiki/code-nav.ts +8 -22
- package/src/tools/codewiki/shared.ts +41 -38
- package/src/tools/context/docs-engine.ts +14 -3
- package/src/tools/context/index.ts +107 -28
- package/src/tools/context/surface.ts +19 -0
- package/src/tools/core-bootstrap.ts +168 -0
- package/src/tools/credential-present.ts +5 -5
- package/src/tools/dispatch-admission.ts +533 -0
- package/src/tools/dispatch-background.ts +54 -0
- package/src/tools/dispatch-event-text.ts +6 -0
- package/src/tools/dispatch-plan.ts +9 -4
- package/src/tools/dispatch-run-events.ts +238 -0
- package/src/tools/dispatch-runner.ts +2370 -0
- package/src/tools/dispatch-scout-admission.ts +295 -0
- package/src/tools/dispatch-types.ts +77 -0
- package/src/tools/dispatch.ts +67 -3161
- package/src/tools/find.ts +4 -2
- package/src/tools/grep.ts +2 -2
- package/src/tools/lazy-tool.ts +60 -0
- package/src/tools/ledger.ts +3 -3
- package/src/tools/monitor-surface.ts +36 -0
- package/src/tools/monitor.ts +2 -32
- package/src/tools/observers.ts +2 -2
- package/src/tools/presentation.ts +107 -0
- package/src/tools/registry.ts +45 -27
- package/src/tools/safe-exec.ts +2 -2
- package/src/tools/steer-surface.ts +17 -0
- package/src/tools/steer.ts +2 -13
- package/src/tools/tasks.ts +108 -11
- package/src/tools/truncate.ts +25 -184
- package/src/tools/verify/frontend.ts +3 -1
- package/src/tools/verify/index.ts +3 -38
- package/src/tools/verify/surface.ts +46 -0
- package/src/tools/web-fetch-surface.ts +23 -0
- package/src/tools/web-fetch.ts +2 -20
- package/src/tools/write.ts +7 -2
- package/src/worker/entry.ts +39 -2
- package/src/worker/spec-contract.ts +26 -5
- package/dist/chunk-7SS2CTV2.js +0 -61361
- package/dist/chunk-DKGKUHFA.js +0 -924
- package/dist/chunk-GEP36Y4X.js +0 -12796
- package/dist/chunk-XYWBQRDM.js +0 -137
- package/dist/clio-BZVGEUFJ.js +0 -58
- package/dist/configure-S7S6F6CL.js +0 -32
- package/docs/html/agents_blueprint.html +0 -936
- package/docs/html/alcf_blueprint.html +0 -324
- package/docs/html/architecture_blueprint.html +0 -850
- package/docs/html/commands_blueprint.html +0 -939
- package/docs/html/config_knobs_audit_blueprint.html +0 -178
- package/docs/html/configuration_blueprint.html +0 -1080
- package/docs/html/context_blueprint.html +0 -603
- package/docs/html/documentation_blueprint.html +0 -832
- package/docs/html/environment_blueprint.html +0 -404
- package/docs/html/eval_blueprint.html +0 -743
- package/docs/html/evals_internal_blueprint.html +0 -190
- package/docs/html/evolution_blueprint.html +0 -674
- package/docs/html/extensions_blueprint.html +0 -2065
- package/docs/html/fleet_dispatch_blueprint.html +0 -286
- package/docs/html/index.html +0 -919
- package/docs/html/lifecycle_blueprint.html +0 -723
- package/docs/html/memory_blueprint.html +0 -699
- package/docs/html/middleware_blueprint.html +0 -664
- package/docs/html/models_blueprint.html +0 -2366
- package/docs/html/observability_blueprint.html +0 -683
- package/docs/html/provider_adapter_blueprint.html +0 -245
- package/docs/html/safety_blueprint.html +0 -1386
- package/docs/html/shared.css +0 -571
- package/docs/html/shared.js +0 -143
- package/docs/html/skills_blueprint.html +0 -671
- package/docs/html/soak_blueprint.html +0 -182
- package/docs/html/tool_usage_blueprint.html +0 -350
- package/docs/html/tools_blueprint.html +0 -2249
- package/docs/html/trace_blueprint.html +0 -235
- package/docs/html/tui_design_blueprint.html +0 -374
- package/docs/html/validation_blueprint.html +0 -961
- package/docs/html/worker_dispatch_blueprint.html +0 -231
- package/src/core/release.ts +0 -2
- package/src/domains/providers/runtimes/common/lmstudio-logger.ts +0 -32
- package/src/domains/providers/runtimes/local-native/lmstudio-native.ts +0 -491
- package/src/engine/apis/lmstudio-native.ts +0 -1438
- package/src/engine/apis/thinking-replay.ts +0 -11
- package/src/tools/string-enum.ts +0 -15
|
@@ -0,0 +1,491 @@
|
|
|
1
|
+
# Performance Measurement Methodology
|
|
2
|
+
|
|
3
|
+
Clio Coder treats performance observations as diagnostic evidence, not as a
|
|
4
|
+
reason to weaken behavior. Event ordering, persistence, permissions, terminal
|
|
5
|
+
restoration, accessibility, output contracts, and installed-package behavior
|
|
6
|
+
remain blocking correctness gates. The millisecond observations below are
|
|
7
|
+
targets and point-in-time measurements; they are not CI timing thresholds.
|
|
8
|
+
|
|
9
|
+
## Endpoint vocabulary
|
|
10
|
+
|
|
11
|
+
- **First stdout commit** is the first real TUI render transaction after all of
|
|
12
|
+
that frame's `stdout.write()` calls have returned. It is the event reported as
|
|
13
|
+
`first TUI paint` by the historical boot trace, but its actual endpoint is
|
|
14
|
+
stdout enqueue rather than a displayed pixel.
|
|
15
|
+
- **Stage 0 shell commit** is the first stdout commit from the minimal
|
|
16
|
+
single-owner interactive shell. **Stage 1 hydration** is the first committed
|
|
17
|
+
frame after the full application has atomically adopted that same terminal,
|
|
18
|
+
renderer, root host, and editor.
|
|
19
|
+
- **Ingress-to-stdout-commit** and **input-to-stdout-commit** correlate a
|
|
20
|
+
canonical event or input sequence with the first committed frame whose high
|
|
21
|
+
water includes that sequence.
|
|
22
|
+
- **PTY-observed frame** ends when an external pseudo-terminal reader receives
|
|
23
|
+
the frame bytes. This includes the child-to-PTY boundary, but still does not
|
|
24
|
+
measure terminal-emulator parsing, a remote SSH hop, or monitor presentation.
|
|
25
|
+
- **Glass latency** is reserved for an emulator/display harness that observes
|
|
26
|
+
the rendered result. Clio's in-process timestamps do not make that claim.
|
|
27
|
+
|
|
28
|
+
## Render trace
|
|
29
|
+
|
|
30
|
+
Set `CLIO_CODER_RENDER_TRACE` to a JSONL path before starting an interactive
|
|
31
|
+
session. Version 2 records no conversation text. It records:
|
|
32
|
+
|
|
33
|
+
- canonical text/thinking ingress sequence, generation, content index, byte
|
|
34
|
+
count, and cumulative UTF-16/grapheme ranges;
|
|
35
|
+
- projection-queue admission and dequeue, panel high water, and panel render
|
|
36
|
+
metrics;
|
|
37
|
+
- input sequence, semantic action class, byte count, and visual expectation;
|
|
38
|
+
- one explicit `frameId` per TUI render transaction, dimensions, regular or
|
|
39
|
+
fullscreen mode, component/layout time, overlay composition, normalization,
|
|
40
|
+
cursor extraction, the combined viewport/diff/ANSI/cursor remainder, and
|
|
41
|
+
terminal-enqueue time;
|
|
42
|
+
- every `stdout.write()` return value, including writes outside a frame,
|
|
43
|
+
backpressure, and the matching `drain`;
|
|
44
|
+
- every terminal write grouped under its frame, including hardware-cursor and
|
|
45
|
+
IME writes.
|
|
46
|
+
|
|
47
|
+
The writer truncates the requested path before TUI startup, then uses one
|
|
48
|
+
bounded asynchronous queue. Slow storage drops old trace records and emits a
|
|
49
|
+
drop count instead of growing without bound. Append failures and append
|
|
50
|
+
timeouts disable tracing without failing the application. Normal shutdown
|
|
51
|
+
awaits the bounded final flush.
|
|
52
|
+
|
|
53
|
+
With the instant shell active, textual `[clio:boot]` lines retain timestamps
|
|
54
|
+
captured at the Stage 0 commit and Stage 1 committed hydration frame, but their
|
|
55
|
+
stderr output is deliberately deferred until after the TUI stops and terminal
|
|
56
|
+
protocols are restored. The PTY harness detects the visible Stage 0 bytes and
|
|
57
|
+
Stage 1 frame directly, then parses those buffered timestamps after process
|
|
58
|
+
exit. This keeps diagnostic output from corrupting the temporary shell without
|
|
59
|
+
changing the measured endpoints.
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
CLIO_CODER_RENDER_TRACE=/tmp/clio-render.jsonl \
|
|
63
|
+
CLIO_CODER_TRACE_BOOT=1 \
|
|
64
|
+
CLIO_CODER_INTERACTIVE=1 \
|
|
65
|
+
node dist/cli/index.js
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
The deterministic contracts are
|
|
69
|
+
`tests/contracts/render-pipeline-trace.test.ts`. The real built-CLI acceptance
|
|
70
|
+
harness is `tests/smoke/render-trace-pty.test.ts`; it covers first frame, input
|
|
71
|
+
correlation, resize, grouped writes, paused PTY output, adaptive pacing against
|
|
72
|
+
a chunked hermetic provider, a controlled `stdout.write() === false`/`drain`
|
|
73
|
+
boundary, final-frame settlement, and bounded process cleanup. Set
|
|
74
|
+
`CLIO_CODER_PERF_REPORT=1` while running that test to print its observation
|
|
75
|
+
records. Real PTY acceptance is currently unavailable on Windows; the
|
|
76
|
+
fake-stream frame/backpressure contracts remain cross-platform.
|
|
77
|
+
|
|
78
|
+
## Import-graph method
|
|
79
|
+
|
|
80
|
+
The full interactive implementation is the generated `dist/clio-*.js` entry,
|
|
81
|
+
not the small fast-path CLI dispatcher. Measure its import with V8's compile
|
|
82
|
+
cache disabled when comparing graph cuts:
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
entry=$(find dist -maxdepth 1 -type f -name 'clio-*.js' -print -quit)
|
|
86
|
+
NODE_DISABLE_COMPILE_CACHE=1 node --input-type=module -e \
|
|
87
|
+
'const t=performance.now(); await import(new URL(process.argv[1], `file://${process.cwd()}/`)); console.log(performance.now()-t)' \
|
|
88
|
+
"$entry"
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
For cache fill versus hit, create one empty temporary directory, set it as
|
|
92
|
+
`NODE_COMPILE_CACHE`, import once to fill it, and import a second time without
|
|
93
|
+
changing the build or Node version. Use a different empty directory for each
|
|
94
|
+
pair. A warm hit is not a cold-disk measurement. Record the operating-system
|
|
95
|
+
page-cache state separately.
|
|
96
|
+
|
|
97
|
+
Module counts come from unique file URLs in `NODE_DEBUG=esm` lines matching
|
|
98
|
+
`Translating StandardModule` or `Translating CJSModule`. Generated chunks are
|
|
99
|
+
located by stable source markers or source maps, never by assuming a hashed
|
|
100
|
+
chunk name. Every lazy-graph contract must prove the heavyweight marker absent
|
|
101
|
+
before first use and present after a real invocation, then repeat from a packed
|
|
102
|
+
installation in a foreign working directory.
|
|
103
|
+
|
|
104
|
+
## Corrected 0.3.3 baseline
|
|
105
|
+
|
|
106
|
+
These observations were recorded on 2026-08-19 in WSL2 Linux
|
|
107
|
+
`6.18.33.2-microsoft-standard-WSL2`, x86-64, with an 80x24 `xterm-256color`
|
|
108
|
+
PTY, a declared localhost target that was never contacted, warm operating-system
|
|
109
|
+
page cache, and the built source checkout at the corrected-instrumentation
|
|
110
|
+
slice. Samples are independent processes. `p90` over five samples is the
|
|
111
|
+
largest observation and is included only to describe this small sample, not to
|
|
112
|
+
claim a population percentile.
|
|
113
|
+
|
|
114
|
+
With `NODE_DISABLE_COMPILE_CACHE=1`, five real-PTY samples produced:
|
|
115
|
+
|
|
116
|
+
| Node | First stdout commit median / p90 | PTY-observed frame median / p90 | First-frame build median | Writes in first frame |
|
|
117
|
+
| --- | ---: | ---: | ---: | ---: |
|
|
118
|
+
| 22.22.3 | 1013.9 / 1120.3 ms | 1030.615 / 1136.960 ms | 7.068 ms | 3 |
|
|
119
|
+
| 24.9.0 | 1061.5 / 1082.3 ms | 1079.001 / 1102.019 ms | 6.549 ms | 3 |
|
|
120
|
+
|
|
121
|
+
The corresponding command was:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
NODE_DISABLE_COMPILE_CACHE=1 CLIO_CODER_PERF_REPORT=1 \
|
|
125
|
+
node --import tsx --import ./tests/harness/tmp-root.ts --test \
|
|
126
|
+
tests/smoke/render-trace-pty.test.ts
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
One fresh compile-cache fill followed by five warm-cache PTY samples produced
|
|
130
|
+
the following noisy observations. The first-fill column is one observation;
|
|
131
|
+
the warm column is the median of five. These are recorded so cache state is not
|
|
132
|
+
silently conflated with boot improvements.
|
|
133
|
+
|
|
134
|
+
| Node | First stdout commit, fill / warm | PTY-observed frame, fill / warm |
|
|
135
|
+
| --- | ---: | ---: |
|
|
136
|
+
| 22.22.3 | 1506.0 / 1139.6 ms | 1526.995 / 1157.743 ms |
|
|
137
|
+
| 24.9.0 | 1165.0 / 980.0 ms | 1186.487 / 997.062 ms |
|
|
138
|
+
|
|
139
|
+
Ten direct full-entry imports with V8 compile caching disabled, and five fresh
|
|
140
|
+
fill/hit pairs, produced:
|
|
141
|
+
|
|
142
|
+
| Node | Disabled median / p90 | Fresh-cache fill median | Warm-cache hit median |
|
|
143
|
+
| --- | ---: | ---: | ---: |
|
|
144
|
+
| 22.22.3 | 670.680 / 803.053 ms | 733.324 ms | 527.618 ms |
|
|
145
|
+
| 24.9.0 | 656.781 / 674.592 ms | 740.214 ms | 570.765 ms |
|
|
146
|
+
|
|
147
|
+
The pre-graph-cut built entry translated 1,332 unique file-backed modules: 54
|
|
148
|
+
Clio `dist/` modules, 128 `pi-ai` modules, 660 modules from `pi-ai`'s nested
|
|
149
|
+
TypeBox graph, 40 `pi-agent-core` modules, and 37 `pi-tui` modules. Built
|
|
150
|
+
JavaScript was 93 files and 6,859,244 bytes. `npm pack --dry-run --json`
|
|
151
|
+
reported 6,273,921 packed bytes, 37,637,776 unpacked bytes, and 1,081 entries.
|
|
152
|
+
The eager Undici-bearing chunk was 2,552,692 bytes and the eager
|
|
153
|
+
tree-sitter/codewiki chunk was 295,539 bytes.
|
|
154
|
+
|
|
155
|
+
The former 1,054 ms “first TUI paint” figure is not a before value: that mark
|
|
156
|
+
was taken before `startInteractive()` and therefore did not measure a frame.
|
|
157
|
+
It must not be compared numerically with this corrected baseline.
|
|
158
|
+
|
|
159
|
+
## Graph-cut observations
|
|
160
|
+
|
|
161
|
+
Each graph reduction is measured and committed independently. Counts below use
|
|
162
|
+
the import-graph method above with V8 compile caching disabled and a warm
|
|
163
|
+
operating-system page cache. An unchanged translated-module count can still
|
|
164
|
+
hide a meaningful bundled-code reduction: esbuild represents all bundled
|
|
165
|
+
sources in one translated Clio chunk.
|
|
166
|
+
|
|
167
|
+
### Node built-in fetch
|
|
168
|
+
|
|
169
|
+
Replacing the eager userland Undici import with Node's supported built-in
|
|
170
|
+
`fetch` left the translated file-module count unchanged at 1,332 (54 Clio
|
|
171
|
+
modules), because Undici had been embedded inside one existing Clio chunk. It
|
|
172
|
+
did remove every `node_modules/undici/` source marker and reduced built
|
|
173
|
+
JavaScript from 6,859,244 to 5,801,755 bytes. The eager tool-bearing chunk
|
|
174
|
+
containing `web_fetch` changed from 2,552,692 to 1,494,333 bytes, a 1,058,359
|
|
175
|
+
byte reduction.
|
|
176
|
+
|
|
177
|
+
Ten full-entry imports changed as follows:
|
|
178
|
+
|
|
179
|
+
| Node | Before median / p90 | After median / p90 | Observation |
|
|
180
|
+
| --- | ---: | ---: | --- |
|
|
181
|
+
| 22.22.3 | 670.680 / 803.053 ms | 605.907 / 646.730 ms | lower in this sample |
|
|
182
|
+
| 24.9.0 | 656.781 / 674.592 ms | 668.652 / 896.238 ms | no reproducible timing improvement; host noise dominated |
|
|
183
|
+
|
|
184
|
+
The cut is justified by the deterministic graph and package-size reduction,
|
|
185
|
+
not by claiming a universal boot saving. Localhost transport contracts cover
|
|
186
|
+
methods, headers, bodies, redirects, streamed UTF-8 truncation and cancellation,
|
|
187
|
+
external abort, timeout, HTTP preview errors, binary rejection, and transport
|
|
188
|
+
errors on Node 22 and Node 24. The packed-install test invokes `web_fetch`
|
|
189
|
+
through a real installed headless tool turn from a foreign working directory
|
|
190
|
+
and asserts that neither the packed chunks nor the installed dependency tree
|
|
191
|
+
contains userland Undici.
|
|
192
|
+
|
|
193
|
+
### Lazy codewiki and tree-sitter
|
|
194
|
+
|
|
195
|
+
Codewiki's schema, artifact parser, synchronous/asynchronous cached reads, and
|
|
196
|
+
path classification are now separate from the builder. Interactive startup
|
|
197
|
+
loads those lightweight surfaces but does not evaluate the builder or the
|
|
198
|
+
bundled tree-sitter runtime. A real build runs in a dedicated worker thread,
|
|
199
|
+
which dynamically imports tree-sitter and the requested grammar. Session-start
|
|
200
|
+
freshness, parallel `code_nav` demand, incremental mutations, explicit index and
|
|
201
|
+
refresh, bootstrap checkpoints, wiki grounding, and reset share one
|
|
202
|
+
per-workspace FIFO plus a cross-process file lease. The artifact and its state
|
|
203
|
+
metadata commit under that lease, shutdown drains admitted session work, and a
|
|
204
|
+
reset cannot be overtaken by an older build.
|
|
205
|
+
|
|
206
|
+
The deterministic runtime-graph test locates the generated tree-sitter chunk by
|
|
207
|
+
its bundled source marker, never its hash. V8 coverage proves that nested
|
|
208
|
+
`context index --help` reaches the built index command without evaluating that
|
|
209
|
+
chunk or creating `.clio-coder`, while a real one-file build evaluates it and
|
|
210
|
+
extracts a generator declaration the regex fallback does not recognize. The
|
|
211
|
+
same proof runs against an installed tarball from a foreign working directory.
|
|
212
|
+
|
|
213
|
+
The after-Undici graph was the before point for this cut. The translated module
|
|
214
|
+
count changed from 1,332 files (54 Clio chunks) to 1,336 (58 Clio chunks): the
|
|
215
|
+
new lightweight coordinator/worker boundary adds four file modules, while the
|
|
216
|
+
formerly bundled tree-sitter code was already represented by one Clio chunk.
|
|
217
|
+
The useful deterministic reduction is evaluation, not file count: the former
|
|
218
|
+
295,539-byte eager tree-sitter/codewiki chunk is absent from the interactive
|
|
219
|
+
graph, and the now-lazy tree-sitter runtime is a 217,988-byte chunk loaded only
|
|
220
|
+
inside the build worker. The current interactive import evaluates 5,015,343
|
|
221
|
+
bytes across its 58 Clio files. Total built JavaScript is 99 files and
|
|
222
|
+
5,812,402 bytes; keeping the worker and lazy chunk in the package is required
|
|
223
|
+
for first-use correctness, so total package bytes are not expected to fall.
|
|
224
|
+
|
|
225
|
+
Ten independent full-entry imports, with V8 compile caching disabled and a warm
|
|
226
|
+
operating-system page cache on the same WSL2 host, produced:
|
|
227
|
+
|
|
228
|
+
| Node | Before median / p90 | After median / p90 | Observation |
|
|
229
|
+
| --- | ---: | ---: | --- |
|
|
230
|
+
| 22.22.3 | 605.907 / 646.730 ms | 525.656 / 539.633 ms | lower in this sample |
|
|
231
|
+
| 24.9.0 | 668.652 / 896.238 ms | 539.056 / 574.139 ms | lower in this sample |
|
|
232
|
+
|
|
233
|
+
These are local import observations, not a universal startup saving or a CI
|
|
234
|
+
threshold. `npm pack --dry-run --json` at this slice reports 6.08 MB packed,
|
|
235
|
+
36.65 MB unpacked, and 1,095 entries. The independently blocking
|
|
236
|
+
evidence is the source-built and installed runtime-coverage contract plus the
|
|
237
|
+
coordinator's generation-order, reset-resurrection, lease-failure, demand,
|
|
238
|
+
incremental, wiki, refresh, and shutdown suites.
|
|
239
|
+
|
|
240
|
+
### Lazy heavyweight tool implementations
|
|
241
|
+
|
|
242
|
+
`context`, `code_nav`, `verify`, and `web_fetch` now register immutable schema
|
|
243
|
+
and policy surfaces while importing their implementations only after registry
|
|
244
|
+
admission. The runtime-graph harness makes a real tool-capable provider request
|
|
245
|
+
and asserts that all four schemas were serialized while every implementation
|
|
246
|
+
file stayed absent from V8 coverage. Four fresh processes then invoke one tool
|
|
247
|
+
each, assert its implementation is covered and its semantic result reaches the
|
|
248
|
+
provider, and assert the other three remain absent. The exact same harness runs
|
|
249
|
+
against an installed tarball from a foreign working directory. A second copied
|
|
250
|
+
install deletes the emitted `web_fetch` implementation by stable behavior
|
|
251
|
+
provenance and proves the resulting tool error names the missing chunk and the
|
|
252
|
+
two standard reinstall commands. No hash, size, source-map, or timing value is
|
|
253
|
+
used as a correctness assertion.
|
|
254
|
+
|
|
255
|
+
The after-codewiki graph is the before point for this cut. Translated modules
|
|
256
|
+
changed from 1,336 files (58 Clio chunks) to 1,357 files (79 Clio chunks), as
|
|
257
|
+
the split surfaces and dynamic-import boundaries create more, smaller generated
|
|
258
|
+
modules. The evaluated Clio JavaScript nevertheless fell from 5,015,343 to
|
|
259
|
+
4,929,030 bytes. The four discoverable implementation entries total 104,804
|
|
260
|
+
bytes (`context` 33,919; `web_fetch` 24,979; `verify` 24,063; `code_nav`
|
|
261
|
+
21,843) and are absent until invoked. Total built JavaScript rose from 99 files
|
|
262
|
+
and 5,812,402 bytes to 125 files and 5,840,309 bytes because the package must
|
|
263
|
+
ship every first-use path. `npm pack --dry-run --json` reports approximately
|
|
264
|
+
6.09 MB packed, 36.69 MB unpacked, and 1,127 entries, versus the previous
|
|
265
|
+
rounded 6.08 MB, 36.65 MB, and 1,095 entries.
|
|
266
|
+
|
|
267
|
+
Ten independent full-entry imports, with V8 compile caching disabled and a warm
|
|
268
|
+
operating-system page cache on the same WSL2 host, produced:
|
|
269
|
+
|
|
270
|
+
| Node | Before median / p90 | After median / p90 | Observation |
|
|
271
|
+
| --- | ---: | ---: | --- |
|
|
272
|
+
| 22.22.3 | 525.656 / 539.633 ms | 545.576 / 565.551 ms | no timing improvement in this sample |
|
|
273
|
+
| 24.9.0 | 539.056 / 574.139 ms | 553.733 / 582.703 ms | no timing improvement in this sample |
|
|
274
|
+
|
|
275
|
+
The cut is justified by the deterministic absence/presence contract and the
|
|
276
|
+
smaller evaluated graph, not by a startup-time claim. Registration, listing,
|
|
277
|
+
provider serialization, and a safety-rejected call are separately held against
|
|
278
|
+
loading in the registry contract; surface parity, single-flight first use,
|
|
279
|
+
ordinary exception semantics, and Clio-owned versus external missing-module
|
|
280
|
+
diagnostics are covered there as well.
|
|
281
|
+
|
|
282
|
+
### Narrow Pi API registration and dispatch
|
|
283
|
+
|
|
284
|
+
Ordinary engine startup no longer evaluates the deprecated `pi-ai/compat`
|
|
285
|
+
aggregate. Clio composes the ten supported lazy API factories in Pi's canonical
|
|
286
|
+
order and constructs a `Models` collection from the nine provider factories
|
|
287
|
+
backing Clio's current built-in runtimes: Bedrock, Anthropic, DeepSeek, Google,
|
|
288
|
+
Groq, Mistral, OpenAI, OpenAI Codex, and OpenRouter. Their full model catalogs,
|
|
289
|
+
Bedrock path, OAuth flows, image registration, and provider-owned request policy
|
|
290
|
+
remain Pi-owned. Clio's synchronous environment-key mapping is pinned to Pi 0.84
|
|
291
|
+
and parity-tested for every provider id, Anthropic precedence, Vertex ADC, and
|
|
292
|
+
Bedrock ambient credentials. A configured external runtime activates a dynamic
|
|
293
|
+
bridge before plugin evaluation; it deliberately restores the shared Pi
|
|
294
|
+
registry universe only for that plugin-bearing process.
|
|
295
|
+
|
|
296
|
+
The source-built and installed-tarball foreign-working-directory harness runs
|
|
297
|
+
real OpenAI-compatible turns under V8 coverage. It proves `compat.js` and
|
|
298
|
+
`legacy-api-aliases.js` are absent, the invoked OpenAI implementation is
|
|
299
|
+
present, and unrelated Anthropic, Bedrock, Google, Mistral, OAuth, and image
|
|
300
|
+
implementation files remain absent. It also proves `providers/all` and sample
|
|
301
|
+
unconfigured provider catalogs remain absent. A separate fresh-process contract
|
|
302
|
+
registers a known-API override from an out-of-tree module and proves its result
|
|
303
|
+
wins after the bridge; the installed-tarball lane repeats that semantic and
|
|
304
|
+
coverage proof from a foreign working directory.
|
|
305
|
+
|
|
306
|
+
The after-lazy-tools graph is the before point for this cut. Translated modules
|
|
307
|
+
changed from 1,357 files (79 evaluated Clio chunks) to 1,289 files (80 Clio
|
|
308
|
+
chunks); direct `pi-ai/dist` evaluation fell from 128 files to 59. Evaluated
|
|
309
|
+
Clio JavaScript changed from 4,929,030 to 4,941,023 bytes because the local
|
|
310
|
+
dispatcher and explicit configured-provider boundary are auditable Clio code.
|
|
311
|
+
Total built JavaScript is 126 files and 5,853,293 bytes. `npm pack --dry-run
|
|
312
|
+
--json` reports approximately 6.11 MB packed, 36.73 MB unpacked, and 1,132
|
|
313
|
+
entries. Package bytes are not the success criterion;
|
|
314
|
+
all Pi packages remain external and every first-use implementation still ships.
|
|
315
|
+
|
|
316
|
+
Ten independent full-entry imports used `NODE_DISABLE_COMPILE_CACHE=1`, a warm
|
|
317
|
+
operating-system page cache, and the same WSL2 host as the preceding cuts:
|
|
318
|
+
|
|
319
|
+
| Node | Before median / p90 | After median / p90 | Observation |
|
|
320
|
+
| --- | ---: | ---: | --- |
|
|
321
|
+
| 22.22.3 | 545.576 / 565.551 ms | 518.345 / 534.925 ms | lower in this sample |
|
|
322
|
+
| 24.9.0 | 553.733 / 582.703 ms | 522.001 / 554.388 ms | lower in this sample |
|
|
323
|
+
|
|
324
|
+
These are local import observations, not a startup guarantee or CI threshold.
|
|
325
|
+
The independently blocking evidence is the absence/presence graph contract,
|
|
326
|
+
credential parity, plugin registry identity, provider behavior suites, and the
|
|
327
|
+
installed foreign-cwd turn.
|
|
328
|
+
|
|
329
|
+
### Lazy orchestrator controls and worker graph separation
|
|
330
|
+
|
|
331
|
+
`dispatch`, `monitor`, and `steer` now advertise their unchanged schemas,
|
|
332
|
+
descriptions, source provenance, policy metadata, and execution modes without
|
|
333
|
+
evaluating their runners. Dispatch keeps synchronous plan admission in a
|
|
334
|
+
lightweight controller: the exact argument object and its six identity-sensitive
|
|
335
|
+
WeakMap/WeakSet stores cross into the first-use runner, so dynamic loading cannot
|
|
336
|
+
reconstruct an approval, parsed request, Scout plan, or capacity reservation. A
|
|
337
|
+
deeply frozen discriminated snapshot selects list, ordinary dispatch, or winner
|
|
338
|
+
application and pins the admission-time plan view, normalized requests,
|
|
339
|
+
review/compete settings, detach, timeout, output limit, winner branch, and
|
|
340
|
+
absolute repository destination. The destination is rendered into the approval
|
|
341
|
+
text and hash, so middleware or a permission observer cannot substitute it after
|
|
342
|
+
the prompt.
|
|
343
|
+
The registry owns admission disposal across middleware guard blocks and runner
|
|
344
|
+
settlement. Monitor and steer use the same immutable-surface loader as the
|
|
345
|
+
earlier four lazy tools. The worker entry imports the core bootstrap directly
|
|
346
|
+
and therefore never registers or evaluates these orchestrator-only runners.
|
|
347
|
+
|
|
348
|
+
The V8 coverage harness now advertises all seven lazy tool schemas in one real
|
|
349
|
+
provider request, proves every implementation root absent, and invokes each in
|
|
350
|
+
a fresh process. For the three orchestrator controls it recursively follows the
|
|
351
|
+
emitted static-import graph, classifies the surface/worker-shared closure, and
|
|
352
|
+
proves the whole runner-exclusive closure absent before admission and present
|
|
353
|
+
after invocation. The three discoverable runner entries total 113,983 bytes
|
|
354
|
+
(`dispatch` 83,800; `monitor` 27,209; `steer` 2,974). A separate run of the real
|
|
355
|
+
built worker entry proves both those roots and their runner-exclusive closures
|
|
356
|
+
absent. The complete proof repeats from an installed tarball in a foreign
|
|
357
|
+
working directory; stable behavior markers, rather than chunk hashes or file
|
|
358
|
+
sizes, identify each entry. Shared dispatch-domain modules are reported as
|
|
359
|
+
shared and are not misrepresented as runner-exclusive savings.
|
|
360
|
+
|
|
361
|
+
The after-Pi graph is the before point for this cut. Translated modules changed
|
|
362
|
+
from 1,289 files (80 evaluated Clio chunks) to 1,307 files (98 Clio chunks), as
|
|
363
|
+
the stable catalog, worker/core split, admission controller, and first-use
|
|
364
|
+
boundaries add small independently testable modules. Evaluated Clio JavaScript
|
|
365
|
+
fell from 4,941,023 to 4,874,478 bytes because the three runner entries are no
|
|
366
|
+
longer evaluated at startup. Total built JavaScript changed from 126 files and
|
|
367
|
+
5,853,293 bytes to 148 files and 5,914,960 bytes; the package must still ship
|
|
368
|
+
every first-use path. `npm pack --dry-run --json` reports 6,143,415 packed
|
|
369
|
+
bytes, 36,873,628 unpacked bytes, and 1,169 entries.
|
|
370
|
+
|
|
371
|
+
Ten independent full-entry imports used `NODE_DISABLE_COMPILE_CACHE=1`, a warm
|
|
372
|
+
operating-system page cache, and the same WSL2 host as the preceding cuts:
|
|
373
|
+
|
|
374
|
+
| Node | Before median / p90 | After median / p90 | Observation |
|
|
375
|
+
| --- | ---: | ---: | --- |
|
|
376
|
+
| 22.22.3 | 518.345 / 534.925 ms | 541.559 / 556.417 ms | no timing improvement in this sample |
|
|
377
|
+
| 24.9.0 | 522.001 / 554.388 ms | 529.888 / 558.958 ms | no timing improvement in this sample |
|
|
378
|
+
|
|
379
|
+
These are import observations, not a startup claim or CI threshold. This cut is
|
|
380
|
+
justified by the deterministic absence/presence and worker-exclusion contracts,
|
|
381
|
+
the smaller evaluated graph, exact registration-order and surface contracts,
|
|
382
|
+
and the dispatch reservation, approval, gate, detach, monitor, and steer suites.
|
|
383
|
+
|
|
384
|
+
## Adaptive stream-pacer observations
|
|
385
|
+
|
|
386
|
+
`terminal.smoothStreaming` is presentation-only. `off` is the exact existing
|
|
387
|
+
16 ms coalescer and remains the 0.3.3 default. `auto` uses the pacer only on a
|
|
388
|
+
capable local TTY with no accessibility, remote/multiplexer, CI, or observed
|
|
389
|
+
backpressure signal. `on` requests pacing, but frame construction still stops
|
|
390
|
+
behind stdout backpressure. The pacer never republishes slices on the public
|
|
391
|
+
event bus: canonical events, persistence, replay/export, tool formation, and
|
|
392
|
+
cumulative tool state remain synchronous while one presentation queue owns
|
|
393
|
+
only derived visible text/thinking mutations.
|
|
394
|
+
|
|
395
|
+
The deterministic fake-clock contracts cover semantic classification, FIFO
|
|
396
|
+
generation/epoch ordering, abort and stale-admission rejection, grapheme
|
|
397
|
+
clusters, fractional arrival credit, event-loop suspension, catch-up, the
|
|
398
|
+
oldest-visible deadline, absolute queue byte/grapheme bounds, idle shutdown,
|
|
399
|
+
folded-thinking fidelity, reset/discard accounting, mode changes, final-frame
|
|
400
|
+
settlement, fullscreen frozen scrolling through resize, and bounded no-drain
|
|
401
|
+
cleanup. The PTY arm uses a built CLI, a four-delta localhost provider, a
|
|
402
|
+
4 KiB reply, an 80x24 `xterm-256color` PTY whose reader is paused, and a
|
|
403
|
+
test-only writable shim that makes exactly one real child `stdout.write()`
|
|
404
|
+
return `false` before emitting a delayed `drain`. This is deterministic
|
|
405
|
+
backpressure acceptance, not a claim about a particular SSH kernel buffer.
|
|
406
|
+
|
|
407
|
+
Five independent processes per supported Node line were measured on the same
|
|
408
|
+
2026-08-19 WSL2 host as the corrected baseline, with the operating-system page
|
|
409
|
+
cache warm and V8 compile caching disabled. Values are median / largest of the
|
|
410
|
+
five observations; they are diagnostic observations, not timing gates.
|
|
411
|
+
|
|
412
|
+
| Node | Input-to-stdout commit | First ingress-to-stdout commit | Final ingress-to-stdout commit | Controlled backpressure wait |
|
|
413
|
+
| --- | ---: | ---: | ---: | ---: |
|
|
414
|
+
| 22.22.3 | 5.530 / 8.896 ms | 62.909 / 70.274 ms | 37.798 / 56.412 ms | 403.809 / 426.570 ms |
|
|
415
|
+
| 24.9.0 | 5.468 / 7.225 ms | 67.878 / 74.021 ms | 27.901 / 35.750 ms | 402.582 / 418.783 ms |
|
|
416
|
+
|
|
417
|
+
The command was:
|
|
418
|
+
|
|
419
|
+
```bash
|
|
420
|
+
NODE_DISABLE_COMPILE_CACHE=1 CLIO_CODER_PERF_REPORT=1 \
|
|
421
|
+
node --import tsx --import ./tests/harness/tmp-root.ts --test \
|
|
422
|
+
--test-name-pattern 'paces provider deltas' \
|
|
423
|
+
tests/smoke/render-trace-pty.test.ts
|
|
424
|
+
```
|
|
425
|
+
|
|
426
|
+
These endpoints end at stdout commit. Even the PTY reader assertion stops at
|
|
427
|
+
the pseudo-terminal boundary; none of these values is literal token-to-glass
|
|
428
|
+
latency.
|
|
429
|
+
|
|
430
|
+
## Instant-shell observations
|
|
431
|
+
|
|
432
|
+
The instant-shell slice uses one `TerminalLease`; Stage 1 does not start a
|
|
433
|
+
second terminal or reconstruct editor state. The built Stage 0 static closure
|
|
434
|
+
is 5 JavaScript chunks and 90,654 bytes. Its regression limit is 6 chunks and
|
|
435
|
+
110,000 bytes, and the closure must contain no orchestrator, provider, tool,
|
|
436
|
+
codewiki, tree-sitter, or Pi implementation marker. The pre-Stage 0 target/auth
|
|
437
|
+
check uses a data-only runtime manifest, checked against every canonical
|
|
438
|
+
built-in descriptor, and a read-only credential-presence path; it evaluates no
|
|
439
|
+
provider implementation or OAuth flow.
|
|
440
|
+
|
|
441
|
+
Five independent processes per supported Node line were measured on the same
|
|
442
|
+
2026-08-19 WSL2 x86-64 host, built source checkout, 80x24 `xterm-256color` PTY,
|
|
443
|
+
declared unreachable localhost target, warm operating-system page cache, and
|
|
444
|
+
`NODE_DISABLE_COMPILE_CACHE=1`. Values are median / largest of five diagnostic
|
|
445
|
+
observations, never CI timing gates.
|
|
446
|
+
|
|
447
|
+
| Node | Stage 0 stdout commit | PTY-observed Stage 0 frame | Stage 1 hydration | Stage 0 frame build |
|
|
448
|
+
| --- | ---: | ---: | ---: | ---: |
|
|
449
|
+
| 22.22.3 | 147.9 / 155.3 ms | 162.946 / 172.604 ms | 926.2 / 956.9 ms | 5.240 / 5.860 ms |
|
|
450
|
+
| 24.9.0 | 148.4 / 157.8 ms | 164.809 / 172.480 ms | 959.7 / 1001.9 ms | 5.386 / 5.791 ms |
|
|
451
|
+
|
|
452
|
+
The comparable corrected pre-instant-shell first stdout commit baseline was
|
|
453
|
+
1013.9 / 1120.3 ms on Node 22.22.3 and 1061.5 / 1082.3 ms on Node 24.9.0 under
|
|
454
|
+
the same compile-cache-disabled, warm-page-cache method. Stage 1 remains a full
|
|
455
|
+
hydration endpoint; the earlier visible/editor-ready Stage 0 does not erase or
|
|
456
|
+
rename that work.
|
|
457
|
+
|
|
458
|
+
The command was run five times for each explicit Node binary:
|
|
459
|
+
|
|
460
|
+
```bash
|
|
461
|
+
NODE_DISABLE_COMPILE_CACHE=1 CLIO_CODER_PERF_REPORT=1 \
|
|
462
|
+
/path/to/node --import tsx --import ./tests/harness/tmp-root.ts --test \
|
|
463
|
+
--test-name-pattern 'correlates input and resize' \
|
|
464
|
+
tests/smoke/render-trace-pty.test.ts
|
|
465
|
+
```
|
|
466
|
+
|
|
467
|
+
The built-CLI PTY suite additionally covers immediate typing, multiple
|
|
468
|
+
submit-before-hydration admissions, a retained post-submit draft, resize across
|
|
469
|
+
hydration, Ctrl+C on both sides of attachment, SIGTERM during hydration,
|
|
470
|
+
injected Stage 1 failure, protocol-query single execution, raw-mode
|
|
471
|
+
restoration, diagnostics, and bounded process cleanup. The fake lease contract
|
|
472
|
+
checks object identity, FIFO admission, epoch rejection, signal-delegate
|
|
473
|
+
transfer, and idempotent close. PTY receipt is still not literal glass latency.
|
|
474
|
+
|
|
475
|
+
## Reporting checklist
|
|
476
|
+
|
|
477
|
+
Every published observation records:
|
|
478
|
+
|
|
479
|
+
1. commit and whether the measurement used a source build or packed install;
|
|
480
|
+
2. operating system, architecture, terminal mode and dimensions;
|
|
481
|
+
3. exact Node version;
|
|
482
|
+
4. V8 compile-cache state: disabled, fresh fill, or warm hit;
|
|
483
|
+
5. operating-system page-cache state, without calling a warm page cache cold;
|
|
484
|
+
6. sample count and summary statistic;
|
|
485
|
+
7. endpoint name from the vocabulary above;
|
|
486
|
+
8. whether PTY, emulator, SSH, or backpressured-output behavior was involved;
|
|
487
|
+
9. the correctness and package gates run beside the observation.
|
|
488
|
+
|
|
489
|
+
Stage 0 shell commit and Stage 1 hydration are separate endpoints. A report
|
|
490
|
+
must state whether `CLIO_CODER_INSTANT_SHELL` selected the lease or the legacy
|
|
491
|
+
fully hydrated first-frame path.
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Pi SDK Boundary
|
|
2
|
+
|
|
3
|
+
Clio Coder uses Pi 0.84.0 as its provider, agent-loop, and terminal SDK. This
|
|
4
|
+
page records where Pi owns a reusable primitive and where Clio deliberately
|
|
5
|
+
keeps product behavior. Review this table on every Pi upgrade. An action marked
|
|
6
|
+
`Keep` is an explicit boundary decision, not an invitation to replace the
|
|
7
|
+
Clio-owned surface during a dependency bump.
|
|
8
|
+
|
|
9
|
+
## Boundary table
|
|
10
|
+
|
|
11
|
+
| Pi export or surface | Clio file or function | Action | Reason |
|
|
12
|
+
| --- | --- | --- | --- |
|
|
13
|
+
| pi-agent-core `truncateHead`, `truncateTail`, `truncateLine`, and `formatSize` | `src/tools/truncate.ts` | Route through Pi. | Pi owns UTF-8-safe truncation. Clio retains its 16 KiB default and `splitLinesForCounting`, which Pi does not export. |
|
|
14
|
+
| pi-ai `StringEnum` | `src/engine/ai.ts` and the `src/tools/string-enum.ts` adapter | Route through Pi. | The former TypeBox implementation duplicated Pi's compact provider-safe schema. |
|
|
15
|
+
| pi-agent-core `COMPACTION_SUMMARY_PREFIX`, `COMPACTION_SUMMARY_SUFFIX`, `BRANCH_SUMMARY_PREFIX`, `BRANCH_SUMMARY_SUFFIX`, and `bashExecutionToText` | `src/interactive/chat-renderer.ts` through `src/engine/messages.ts` | Route through Pi. | Replay text must match Pi's `convertToLlm` wording while Clio keeps its `SessionEntry` mapping and replay bounds. |
|
|
16
|
+
| pi-tui `stripTerminalSequences` | `src/domains/session/tree/preview.ts` | Keep the Clio sanitizer. | Pi removes SGR and OSC sequences but intentionally leaves private-mode CSI and character-set escapes that may occur in captured tool output. |
|
|
17
|
+
| pi-ai `isRetryableAssistantError` | `src/domains/session/retry.ts` | Route generic classification through Pi and keep the Clio delta. | Clio additionally recognizes self-hosted model loading and enforces its separate 15-second floor. |
|
|
18
|
+
| pi-ai `retryAssistantCall` and pi-agent-core `AgentHarness` retry | `src/interactive/chat-loop.ts` and `src/interactive/turn-recovery.ts` | Keep Clio orchestration. | Clio retries `agent.continue()` with a visible cancellable countdown. `retryAssistantCall` wraps one completion, and `AgentHarness` requires Pi's session repository. |
|
|
19
|
+
| pi-ai `StreamOptions.samplingParams`, `OpenAICompletionsOptions.thinkingBudgets`, and `supportsThinkingTokenBudget` | `src/engine/apis/openai-completions.ts` | Route request controls through Pi. | Clio retains only catalog-to-option selection and runtime-specific payload fields. |
|
|
20
|
+
| pi-ai `compat.thinkingFormat` | `src/engine/apis/openai-completions.ts` payload adapters | Keep the LM Studio and llama.cpp deltas. | Pi has no LM Studio TTL or draft-model field and no llama.cpp `cache_prompt` field. |
|
|
21
|
+
| pi-agent-core `validateToolArguments` | `src/engine/apis/openai-completions.ts` malformed-call guard | Keep the Clio diagnostic. | Pi returns a validation result so a model can retry. Clio stops a turn from a repeatedly malformed local server and gives the operator a runtime-specific remedy. |
|
|
22
|
+
| pi-ai `Usage.reasoning` | `src/engine/apis/openai-completions.ts` reasoning estimate | Keep the Clio fallback. | Some self-hosted servers stream thinking but report no reasoning usage. Clio fills only an absent value. |
|
|
23
|
+
| No Pi equivalent | `src/engine/apis/openai-completions.ts` sentinel filters, `src/engine/harmony-response.ts`, and `src/engine/gemma-channel-filter.ts` | Keep Clio ownership. | Pi has no Harmony or Gemma channel parser and no tokenizer-sentinel stream filter. |
|
|
24
|
+
| pi-ai `clampMaxTokensToContext` | `src/engine/apis/output-budget.ts` | Keep the Clio outer budget. | Clio adds its default output budget, a llama.cpp tool-turn cap, and the loaded context window. Pi's conservative clamp still runs underneath. |
|
|
25
|
+
| pi-ai Anthropic `streamSimple` request assembly | `src/engine/provider-payload.ts` Anthropic thinking patch | Delete the Clio rewrite and route through Pi. | Pi produces the same adaptive effort and token-budget fields from the active thinking level. |
|
|
26
|
+
| pi-ai `OpenAIResponsesOptions.reasoningSummary` | `src/engine/provider-payload.ts` OpenAI reasoning-summary patch | Keep the Clio patch. | Pi's `Agent` path calls `streamSimple`, which fixes this field to `auto` and exposes no caller option. |
|
|
27
|
+
| No Pi equivalent | `src/engine/apis/ollama-native.ts`, `src/engine/apis/lmstudio.ts`, and `src/engine/apis/llamacpp-residency.ts` | Keep Clio ownership. | Pi's Ollama provider uses OpenAI completions and has no target residency manager. |
|
|
28
|
+
| pi-ai `CredentialStore` and `Models.getAuth` | `src/domains/providers/auth/storage.ts` | Keep Clio ownership. | Clio's locked YAML store, damage control, target-first registry, and runtime overrides are product boundaries. |
|
|
29
|
+
| pi-ai `createModels`, `createProvider`, and `ModelsStore` | `src/domains/providers/**` | Keep Clio ownership. | Targets, nodes, probing, residency, ALCF, and fleet placement are Clio concepts rather than provider-keyed SDK state. |
|
|
30
|
+
| pi-ai `Provider.auth.oauth` | `src/engine/oauth.ts` | Route built-in OAuth through Pi and keep ALCF. | Pi owns provider OAuth implementations. Clio adds the ALCF science-provider flow. |
|
|
31
|
+
| pi-agent-core application cut-point helpers | `src/domains/session/compaction/cut-point.ts` | Keep Clio ownership. | The published SDK does not export these helpers, and Clio operates on its larger `SessionEntry` union with a tested small-session fallback. |
|
|
32
|
+
| pi-agent-core `estimateTokens` and `estimateContextTokens` | `src/domains/session/compaction/tokens.ts` and `src/domains/session/context-accounting.ts` | Keep Clio ownership. | Clio accounts for message overhead, images, tool-schema splits, and provider-usage reconciliation beyond Pi's character estimate. |
|
|
33
|
+
| pi-agent-core `SUMMARIZATION_SYSTEM_PROMPT`, `generateSummary`, and `serializeConversation` | `src/domains/session/compaction/compact.ts` and `src/domains/session/compaction/branch-summary.ts` | Keep Clio ownership. | Pi's functions require Pi v4 entries and `Models`; Clio compacts its ledger with cumulative checkpoints and turn-prefix summaries. |
|
|
34
|
+
| pi-agent-core `JsonlSessionRepo`, v4 `Session`, and `AgentHarness` | `src/engine/session.ts` and `src/domains/session/**` | Keep Clio ownership. | The on-disk ledger, active tree, fork behavior, receipts, and evidence are Clio's durable spine. |
|
|
35
|
+
| pi-agent-core `loadSkills`, `loadPromptTemplates`, `parseCommandArgs`, `substituteArgs`, and `formatSkillsForSystemPrompt` | `src/domains/resources/skills/loader.ts` and `src/domains/resources/prompts/loader.ts` | Keep Clio loaders and reuse leaf primitives when compatible. | Clio owns marketplace pinning, trust, evals, activation records, and prompt-source policy. Argument substitution can use Pi without replacing the loader. |
|
|
36
|
+
| pi-agent-core harness tools, `executeShellWithCapture`, and `sanitizeBinaryOutput` | `src/tools/**` | Keep Clio ownership. | Tool admission, observation budgets, safety rails, and result shaping apply across interactive, headless, ACP, and worker runs. |
|
|
37
|
+
| No Pi equivalent | `src/engine/loop-guard.ts`, `src/domains/safety/**`, `src/domains/dispatch/**`, and `src/domains/evidence/**` | Keep Clio ownership. | These surfaces enforce Clio's safety, fleet, receipt, and evidence contracts. |
|
|
38
|
+
| pi-tui `wrapTextWithAnsi` | `src/core/termination.ts` | Keep the small ASCII wrapper. | Core cannot import Pi across the engine boundary, and the shutdown notice does not justify another adapter. |
|
|
39
|
+
| No pi-tui transcript model | `src/interactive/chat-panel.ts` and `src/interactive/worker-stream.ts` | Keep Clio ownership. | Transcript folding, worker cards, and tool-output collapse are application policy. |
|
|
40
|
+
| pi-tui `CombinedAutocompleteProvider` | `src/interactive/slash-autocomplete.ts` | Keep Clio command composition. | Clio's declarative slash specification owns parsing, help, and completion consistency. |
|
|
41
|
+
| pi-tui `KeybindingsManager`, `TUI_KEYBINDINGS`, and `Editor.addToHistory` | `src/domains/config/keybindings.ts` and interactive editor wiring | Route terminal actions through Pi. | Pi owns editor behavior while Clio owns the configured bindings and accepted-input policy. |
|
|
42
|
+
| pi-tui `Markdown`, `renderLatex`, `visibleWidth`, `truncateToWidth`, `wrapTextWithAnsi`, and `stripTerminalSequences` | Interactive Markdown, Mermaid, layout, and width wiring | Route terminal primitives through Pi. | Clio retains theme tokens, Mermaid span styling, and application layout only. |
|
|
43
|
+
|
|
44
|
+
## Thin-wrapper watch list
|
|
45
|
+
|
|
46
|
+
Review these files first when Pi changes. They intentionally contain little
|
|
47
|
+
behavior and should not grow another implementation of an SDK primitive.
|
|
48
|
+
|
|
49
|
+
- `src/engine/api-registry.ts` owns Clio's ordered dispatcher using Pi's public lazy API factories and full built-in provider catalog. Its dynamic `/compat` bridge exists only for configured out-of-tree runtime plugins that require Pi's process-global registry identity.
|
|
50
|
+
- `src/engine/env-api-keys.ts` pins Pi 0.84's synchronous environment-key and ambient-credential discovery behind a parity contract; revisit it on every Pi upgrade until Pi exports that helper directly.
|
|
51
|
+
- `src/engine/apis/openai-completions.ts` maps compatibility flags, sampling parameters, and thinking budgets. Its Clio deltas are the local-runtime guards and sentinel, Harmony, and Gemma filters.
|
|
52
|
+
- `src/engine/provider-payload.ts` retains only the OpenAI Responses reasoning-summary patch.
|
|
53
|
+
- `src/engine/types.ts` and `src/engine/ai.ts` expose erased Pi types and `StringEnum` behind the engine boundary.
|
|
54
|
+
- `src/domains/session/retry.ts` wraps `isRetryableAssistantError` and adds the local-model loading rule.
|
|
55
|
+
- `src/interactive/chat-renderer.ts` consumes Pi's compaction, branch, and bash replay wording through `src/engine/messages.ts`.
|
|
56
|
+
- Interactive Markdown, Mermaid, LaTeX, fullscreen, alternate-screen, and keybinding glue should continue to compose pi-tui primitives.
|
|
57
|
+
|
|
58
|
+
## Pi regression net
|
|
59
|
+
|
|
60
|
+
Run these contracts first on a Pi bump, before the full gate:
|
|
61
|
+
|
|
62
|
+
- `tests/contracts/thinking-runtime.test.ts`
|
|
63
|
+
- `tests/contracts/openai-completions.test.ts`
|
|
64
|
+
- `tests/contracts/lmstudio.test.ts`
|
|
65
|
+
- `tests/contracts/lmstudio-instance-resolution.test.ts`
|
|
66
|
+
- `tests/contracts/replay-pi-message-text.test.ts`
|
|
67
|
+
- `tests/contracts/tool-string-enum.test.ts`
|
|
68
|
+
- `tests/smoke/tui-width-matrix.test.ts`
|
|
69
|
+
- The headless JSON stream contracts under `tests/contracts/`.
|
|
70
|
+
|
|
71
|
+
The complete upgrade procedure lives in
|
|
72
|
+
[Development Pipeline](development-pipeline.md#inheriting-a-pi-release).
|
package/docs/proactive-memory.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Proactive task memory
|
|
2
2
|
|
|
3
|
-
> **Interactive Spec Available:** An interactive memory lifecycle dashboard and simulator is located at [docs/html/memory_blueprint.html](html/memory_blueprint.html) (Version: 0.3.
|
|
3
|
+
> **Interactive Spec Available:** An interactive memory lifecycle dashboard and simulator is located at [docs/html/memory_blueprint.html](html/memory_blueprint.html) (Version: 0.3.3).
|
|
4
4
|
|
|
5
5
|
Clio's proactive task memory protects long-running work from behavioral state
|
|
6
6
|
decay: a requirement, environment fact, failed attempt, or diagnosis can still
|
|
@@ -159,7 +159,7 @@ records one telemetry row, not two.
|
|
|
159
159
|
|
|
160
160
|
## Background steps never hold a turn open
|
|
161
161
|
|
|
162
|
-
The
|
|
162
|
+
The agent loop does not become idle until every `agent_end` listener settles, so a
|
|
163
163
|
memory step awaited at that boundary would add its full latency to the visible
|
|
164
164
|
end of every triggered turn. Measured on the reference route below, step latency
|
|
165
165
|
has a median of 18.6 seconds and ranges up to 220.8 seconds. This makes an awaited
|
|
@@ -290,7 +290,7 @@ tier usable anyway.
|
|
|
290
290
|
Size `timeoutMs` off that tail rather than off the median. The shipped 180000
|
|
291
291
|
captures roughly the whole distribution on this route. A 20000 setting looks
|
|
292
292
|
generous against an 18.6-second median and in practice discarded about half of
|
|
293
|
-
all steps, since the
|
|
293
|
+
all steps, since the request is aborted on timeout and its work is thrown
|
|
294
294
|
away. A route whose steps mostly record `timeout` is a misconfigured deadline
|
|
295
295
|
before it is a slow model.
|
|
296
296
|
|