@iowarp/clio-coder 0.3.1 → 0.3.2

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.
Files changed (595) hide show
  1. package/CHANGELOG.md +90 -2
  2. package/CONTRIBUTING.md +23 -23
  3. package/README.md +284 -613
  4. package/dist/{acp-FPR54DGL.js → acp-BIYHVZIM.js} +43 -53
  5. package/dist/{agents-OGPIHPJH.js → agents-YT6SSRIT.js} +43 -26
  6. package/dist/assets/codewiki.json +1 -1
  7. package/dist/{auth-IC3K6NIZ.js → auth-5TWEIYDN.js} +20 -12
  8. package/dist/{chunk-PV4JUBVJ.js → chunk-2EHAIA3X.js} +40 -21
  9. package/dist/{chunk-IS3ONKU3.js → chunk-2IR2NMPA.js} +6 -4
  10. package/dist/chunk-2SFS6XQE.js +122 -0
  11. package/dist/chunk-2VTFPG5O.js +48 -0
  12. package/dist/{chunk-MAR7Y6HW.js → chunk-3ZXDFGR5.js} +23 -16
  13. package/dist/chunk-4BJ5BYCE.js +61 -0
  14. package/dist/{chunk-474KN5II.js → chunk-4BPJXDWC.js} +111 -181
  15. package/dist/chunk-4KLWL3UC.js +18 -0
  16. package/dist/chunk-4VP4KH3K.js +962 -0
  17. package/dist/chunk-4ZG3XFUR.js +77 -0
  18. package/dist/chunk-5B2AEOW5.js +5407 -0
  19. package/dist/{chunk-K2ITRMHZ.js → chunk-5TSRNF4G.js} +6 -138
  20. package/dist/{chunk-OLBBMFRD.js → chunk-5UUP6MWO.js} +24 -62
  21. package/dist/chunk-65DEGPJ6.js +52 -0
  22. package/dist/chunk-6EJMN2Y3.js +17 -0
  23. package/dist/chunk-6EJV5X2W.js +16405 -0
  24. package/dist/chunk-6N5PTWMY.js +136 -0
  25. package/dist/chunk-6XLNIQDB.js +27 -0
  26. package/dist/{chunk-TEKV33Q5.js → chunk-77VKQEHF.js} +65 -33
  27. package/dist/chunk-7CR24IG7.js +242 -0
  28. package/dist/{chunk-M5T5VO65.js → chunk-7EYHLWU7.js} +837 -635
  29. package/dist/chunk-7MNJORFF.js +22 -0
  30. package/dist/{chunk-KY56HMHH.js → chunk-A3CYT5EX.js} +125 -31
  31. package/dist/chunk-AGYYIBLL.js +1069 -0
  32. package/dist/chunk-AO4RKG4M.js +277 -0
  33. package/dist/{chunk-GB6QRBXN.js → chunk-APJ265NV.js} +54 -1187
  34. package/dist/chunk-ARBGF5F7.js +174 -0
  35. package/dist/{chunk-673JJUWJ.js → chunk-BMEMKKIT.js} +2 -2
  36. package/dist/chunk-CBCAPZAA.js +229 -0
  37. package/dist/chunk-CMZWFGD2.js +352 -0
  38. package/dist/chunk-ECH6PKUQ.js +39 -0
  39. package/dist/chunk-ED4KHGC3.js +143 -0
  40. package/dist/chunk-EKMEHE4H.js +340 -0
  41. package/dist/{chunk-RPTR2H26.js → chunk-EPVUXGXG.js} +21 -15
  42. package/dist/chunk-FCSXB6T2.js +338 -0
  43. package/dist/chunk-FJ3H4MN5.js +48 -0
  44. package/dist/chunk-FQ4SKYE4.js +29 -0
  45. package/dist/chunk-G2DE3C7R.js +644 -0
  46. package/dist/chunk-G4BMMOKF.js +182 -0
  47. package/dist/{chunk-ZPY3JZ5E.js → chunk-GGXXDWE4.js} +183 -1233
  48. package/dist/chunk-HC4CLZ2Y.js +68 -0
  49. package/dist/{chunk-LU4TK2PR.js → chunk-HFSBBKSQ.js} +5 -56
  50. package/dist/{chunk-PIUMUEMV.js → chunk-HKIYEGME.js} +10 -6
  51. package/dist/chunk-I4HZDVNP.js +73 -0
  52. package/dist/{chunk-4QKXUHSR.js → chunk-IGLFWIYI.js} +70 -20
  53. package/dist/chunk-IKCO5N3L.js +162 -0
  54. package/dist/chunk-IR4CFBFN.js +56 -0
  55. package/dist/{chunk-PFEFKVGL.js → chunk-J5HN4RYU.js} +13 -11
  56. package/dist/{chunk-R5KLMSBV.js → chunk-J5Q24KAG.js} +2 -2
  57. package/dist/{chunk-K5XEMXTI.js → chunk-JVCV3ICN.js} +1 -1
  58. package/dist/chunk-KJ5LWLOE.js +1077 -0
  59. package/dist/chunk-LBMZMYH2.js +285 -0
  60. package/dist/{chunk-G34LV2PF.js → chunk-LBNRH5WM.js} +84 -170
  61. package/dist/{chunk-H6F6BYOH.js → chunk-LZSJBIVT.js} +7003 -7434
  62. package/dist/{chunk-HQQID6OA.js → chunk-M6SHUN7Q.js} +5 -5
  63. package/dist/chunk-MAW544W2.js +1882 -0
  64. package/dist/chunk-MBS4V7ZP.js +217 -0
  65. package/dist/{chunk-FST4FYJB.js → chunk-MFFY33HR.js} +99 -140
  66. package/dist/chunk-MNA4JGU4.js +255 -0
  67. package/dist/chunk-MQSRRFWA.js +3428 -0
  68. package/dist/{chunk-BSU2YIWB.js → chunk-MVVUPGPW.js} +131 -136
  69. package/dist/chunk-OAO4GE4M.js +619 -0
  70. package/dist/chunk-OHHN2SO4.js +5135 -0
  71. package/dist/chunk-OKGUZO2U.js +34 -0
  72. package/dist/{chunk-GAEBEQVI.js → chunk-OOJYHWRB.js} +32 -346
  73. package/dist/{chunk-Q5WJOSJ7.js → chunk-OQ33BKR3.js} +2 -1
  74. package/dist/chunk-OQE5J4C6.js +73 -0
  75. package/dist/{chunk-KKNLWXI6.js → chunk-ORBHGJC5.js} +8 -8
  76. package/dist/chunk-POHLU5DW.js +1186 -0
  77. package/dist/chunk-QKMUKYO7.js +4961 -0
  78. package/dist/{chunk-ASND7OZK.js → chunk-QTYWRVRA.js} +13 -13
  79. package/dist/{chunk-EYOKLTMF.js → chunk-SRF2PJNW.js} +17 -3
  80. package/dist/chunk-SST6Z5JA.js +80 -0
  81. package/dist/chunk-STBPMHSX.js +2456 -0
  82. package/dist/chunk-T6YILFSB.js +80 -0
  83. package/dist/chunk-TZTZS7QK.js +227 -0
  84. package/dist/chunk-UOV2BYIW.js +107 -0
  85. package/dist/{chunk-Q3RUPKEJ.js → chunk-V4RXGQ5Q.js} +58 -189
  86. package/dist/chunk-VAKQQHWR.js +434 -0
  87. package/dist/chunk-VG7TBQIY.js +128 -0
  88. package/dist/chunk-VJWL6YS5.js +244 -0
  89. package/dist/chunk-WEH5XRJQ.js +32 -0
  90. package/dist/chunk-WMSVI4G2.js +2095 -0
  91. package/dist/chunk-WVO7V2QY.js +797 -0
  92. package/dist/chunk-X4RCMKVQ.js +641 -0
  93. package/dist/chunk-X75S7HFS.js +374 -0
  94. package/dist/chunk-XN3L4EYL.js +46 -0
  95. package/dist/{chunk-RDLVBZEO.js → chunk-YCWGATWI.js} +6 -4
  96. package/dist/chunk-YHZX5GEU.js +193 -0
  97. package/dist/chunk-YXLYO42X.js +91 -0
  98. package/dist/{chunk-NMOX6HFD.js → chunk-ZDOOVTXZ.js} +29 -77
  99. package/dist/chunk-ZI647VB5.js +37 -0
  100. package/dist/{chunk-C4PTHK7P.js → chunk-ZWLZP4ZT.js} +5 -5
  101. package/dist/cli/index.js +62 -54
  102. package/dist/clio-4LY5K2AC.js +25 -0
  103. package/dist/code-nav-7AX6FYE6.js +600 -0
  104. package/dist/codewiki/build-worker.js +66 -0
  105. package/dist/compile-cache-CVJMMODC.js +18 -0
  106. package/dist/{components-DMAOEKFB.js → components-KELWS457.js} +11 -6
  107. package/dist/{config-IRUQ7SE4.js → config-GTLUW2PR.js} +92 -55
  108. package/dist/configure-R6A64DHX.js +42 -0
  109. package/dist/context-5VKGUVJJ.js +866 -0
  110. package/dist/{context-3KWFLHJG.js → context-JFZEJ7W5.js} +15 -13
  111. package/dist/{context-5RADCKTR.js → context-RW5HC47S.js} +71 -35
  112. package/dist/{context-clear-7TSNPAAI.js → context-clear-6ZHBAZZT.js} +54 -28
  113. package/dist/{context-index-W4RLWOQH.js → context-index-BZ4UYMTC.js} +30 -24
  114. package/dist/dispatch-runner-VKBRCWQC.js +1997 -0
  115. package/dist/{docs-5AWSPS37.js → docs-2C2LTVT2.js} +23 -10
  116. package/dist/{doctor-UC5NAJYQ.js → doctor-KI767GSN.js} +27 -17
  117. package/dist/{eval-U6TJHRLX.js → eval-XSSNATB4.js} +29 -16
  118. package/dist/{evidence-YEGUW4L3.js → evidence-UA6AWDQQ.js} +46 -26
  119. package/dist/{evolve-TXARCTPG.js → evolve-QNTFGV6Z.js} +45 -25
  120. package/dist/{extensions-OZFJ3A3G.js → extensions-QVDOHDGJ.js} +16 -7
  121. package/dist/{fleet-6G3DHNYE.js → fleet-Q7UOMUSG.js} +163 -54
  122. package/dist/{fleet-preflight-DSNT37JK.js → fleet-preflight-DDN536IT.js} +7 -4
  123. package/dist/{init-KZ5QTF6M.js → init-WBB65ZHQ.js} +69 -32
  124. package/dist/{memory-73ESV5YC.js → memory-MD3O64RI.js} +48 -27
  125. package/dist/{models-A4PVNWJK.js → models-BZU34YWD.js} +39 -25
  126. package/dist/monitor-MEQA5C3I.js +661 -0
  127. package/dist/{chunk-FCIH3BIZ.js → orchestrator-CGFKEP27.js} +11832 -8687
  128. package/dist/{paths-C4H6IV77.js → paths-UXLN5YYZ.js} +10 -5
  129. package/dist/{preload-6WVMHX3A.js → preload-P6DGH2PZ.js} +2 -2
  130. package/dist/{reset-BGW6OGMV.js → reset-L2FQEE3E.js} +16 -10
  131. package/dist/{run-YTPEYQOH.js → run-IV4Q6RLN.js} +101 -61
  132. package/dist/{share-YIFFV4NQ.js → share-S5BZQC5I.js} +15 -8
  133. package/dist/{skills-2V6RA3OQ.js → skills-LQEKRDTN.js} +34 -14
  134. package/dist/{skills-eval-S2TVJO4F.js → skills-eval-3DC4HEWS.js} +70 -34
  135. package/dist/steer-GGWFUJUD.js +77 -0
  136. package/dist/{targets-TYXLPB23.js → targets-C4SSGQOB.js} +43 -27
  137. package/dist/terminal-lease-IT5JW2NR.js +395 -0
  138. package/dist/{trace-GGOJ6Q6Z.js → trace-PNCASAXC.js} +41 -16
  139. package/dist/{chunk-N6F52NLF.js → tree-sitter-HGKH6LG4.js} +28 -2306
  140. package/dist/{uninstall-LLLT4F4W.js → uninstall-FZCQCDKC.js} +10 -5
  141. package/dist/{upgrade-33G2LMM5.js → upgrade-7TT7SQ3G.js} +45 -25
  142. package/dist/{usage-ZAFSXKKG.js → usage-GV4PKT3M.js} +62 -31
  143. package/dist/verify-G6V4D2G7.js +716 -0
  144. package/dist/web-fetch-2YHJ3KTG.js +638 -0
  145. package/dist/{wiki-generate-NUQCVOQ3.js → wiki-generate-DQF6Z66B.js} +74 -34
  146. package/dist/worker/entry.js +221 -36
  147. package/dist/workspace-G4ZWUIPR.js +22 -0
  148. package/docs/README.md +22 -17
  149. package/docs/acp.md +168 -16
  150. package/docs/alcf-provider.md +1 -1
  151. package/docs/architecture.md +136 -7
  152. package/docs/artifact-versions.md +1 -1
  153. package/docs/built-in-agents.md +1 -1
  154. package/docs/capacity-and-scheduling.md +1 -1
  155. package/docs/commands-and-modes.md +114 -71
  156. package/docs/config-knobs-audit.md +1 -3
  157. package/docs/configuration-and-targets.md +174 -46
  158. package/docs/context-engine.md +29 -6
  159. package/docs/development-pipeline.md +26 -1
  160. package/docs/dispatch-architecture-rationale.md +1 -1
  161. package/docs/documentation-coverage.md +2 -2
  162. package/docs/documentation-guide.md +1 -1
  163. package/docs/environment-variables.md +13 -5
  164. package/docs/eval-runner.md +1 -1
  165. package/docs/evals-internal.md +1 -1
  166. package/docs/evidence-and-memory.md +6 -2
  167. package/docs/evolution.md +2 -2
  168. package/docs/exit-codes-and-output.md +15 -9
  169. package/docs/extensions-and-sharing.md +9 -9
  170. package/docs/fleet-dispatch.md +7 -5
  171. package/docs/git-commit-provenance.md +120 -0
  172. package/docs/glossary.md +1 -1
  173. package/docs/installation-and-lifecycle.md +34 -27
  174. package/docs/middleware-and-components.md +1 -1
  175. package/docs/model-catalog.md +45 -14
  176. package/docs/observability.md +8 -5
  177. package/docs/performance-methodology.md +491 -0
  178. package/docs/pi-boundary.md +72 -0
  179. package/docs/proactive-memory.md +3 -3
  180. package/docs/prompt-envelope-and-tools.md +24 -3
  181. package/docs/provider-adapter-cookbook.md +57 -4
  182. package/docs/release-cut-checklist.md +129 -115
  183. package/docs/safety-model.md +9 -5
  184. package/docs/scientific-validation.md +3 -3
  185. package/docs/session-lifecycle.md +55 -12
  186. package/docs/skills-marketplace.md +12 -8
  187. package/docs/time-conventions.md +1 -1
  188. package/docs/tool-usage.md +3 -3
  189. package/docs/trace-store.md +1 -1
  190. package/docs/troubleshooting.md +10 -7
  191. package/docs/tui-design.md +47 -10
  192. package/docs/worker-dispatch-mechanics.md +1 -1
  193. package/package.json +19 -22
  194. package/skills/coding/ast-grep/SKILL.md +136 -0
  195. package/skills/coding/ast-grep/evals.md +56 -0
  196. package/skills/coding/ast-grep/references/rule_reference.md +297 -0
  197. package/skills/coding/coding-standards/SKILL.md +113 -0
  198. package/skills/coding/coding-standards/evals.md +34 -0
  199. package/skills/coding/prototype/SKILL.md +86 -0
  200. package/skills/coding/prototype/evals.md +42 -0
  201. package/skills/coding/prototype/references/LOGIC.md +67 -0
  202. package/skills/coding/prototype/references/UI.md +112 -0
  203. package/skills/coding/tdd/SKILL.md +101 -0
  204. package/skills/coding/tdd/evals.md +41 -0
  205. package/skills/coding/tdd/references/mocking.md +59 -0
  206. package/skills/coding/tdd/references/tests.md +77 -0
  207. package/skills/context/context-handoff/SKILL.md +126 -0
  208. package/skills/context/context-handoff/evals.md +57 -0
  209. package/skills/context/context-handoff/scripts/new-handoff.sh +26 -0
  210. package/skills/context/context-prime/SKILL.md +95 -0
  211. package/skills/context/context-prime/evals.md +54 -0
  212. package/skills/meta/clio-dev/SKILL.md +91 -0
  213. package/skills/meta/clio-dev/evals.md +45 -0
  214. package/skills/meta/clio-test/SKILL.md +130 -0
  215. package/skills/meta/clio-test/evals.md +43 -0
  216. package/skills/meta/clio-test/references/harness.md +97 -0
  217. package/skills/meta/clio-test/references/test-map.md +59 -0
  218. package/skills/meta/credentials/SKILL.md +125 -0
  219. package/skills/meta/credentials/evals.md +104 -0
  220. package/skills/meta/find-skills/SKILL.md +72 -0
  221. package/skills/meta/find-skills/evals.md +47 -0
  222. package/skills/meta/herdr/SKILL.md +127 -0
  223. package/skills/meta/herdr/evals.md +38 -0
  224. package/skills/meta/skill-craft/SKILL.md +102 -0
  225. package/skills/meta/skill-craft/evals.md +41 -0
  226. package/skills/planning/architecture/SKILL.md +129 -0
  227. package/skills/planning/architecture/evals.md +36 -0
  228. package/skills/planning/backlog/SKILL.md +90 -0
  229. package/skills/planning/backlog/evals.md +43 -0
  230. package/skills/planning/prd/SKILL.md +82 -0
  231. package/skills/planning/prd/evals.md +49 -0
  232. package/skills/planning/product-intent/SKILL.md +112 -0
  233. package/skills/planning/product-intent/evals.md +36 -0
  234. package/skills/planning/tech-spec/SKILL.md +115 -0
  235. package/skills/planning/tech-spec/evals.md +47 -0
  236. package/skills/registry.yaml +136 -0
  237. package/skills/research/arxiv-literature/SKILL.md +104 -0
  238. package/skills/research/arxiv-literature/evals.md +58 -0
  239. package/skills/research/experiment-protocol/SKILL.md +122 -0
  240. package/skills/research/experiment-protocol/evals.md +91 -0
  241. package/skills/research/scientific-debugging/SKILL.md +119 -0
  242. package/skills/research/scientific-debugging/evals.md +138 -0
  243. package/skills/research/scientific-modernization/SKILL.md +138 -0
  244. package/skills/research/scientific-modernization/evals.md +84 -0
  245. package/skills/workflow/design-council/SKILL.md +139 -0
  246. package/skills/workflow/design-council/evals.md +97 -0
  247. package/skills/workflow/grill-me/SKILL.md +186 -0
  248. package/skills/workflow/grill-me/evals.md +78 -0
  249. package/skills/workflow/workflow-distiller/SKILL.md +136 -0
  250. package/skills/workflow/workflow-distiller/evals.md +107 -0
  251. package/src/cli/acp.ts +31 -4
  252. package/src/cli/clio.ts +68 -6
  253. package/src/cli/config-inspect.ts +28 -22
  254. package/src/cli/configure.ts +47 -9
  255. package/src/cli/context-clear.ts +2 -2
  256. package/src/cli/context-index.ts +21 -23
  257. package/src/cli/context.ts +13 -8
  258. package/src/cli/default-target.ts +9 -17
  259. package/src/cli/docs.ts +11 -5
  260. package/src/cli/evidence.ts +4 -1
  261. package/src/cli/extensions.ts +10 -1
  262. package/src/cli/fleet.ts +47 -6
  263. package/src/cli/index.ts +55 -26
  264. package/src/cli/memory.ts +3 -1
  265. package/src/cli/models.ts +1 -1
  266. package/src/cli/modes/json-stream.ts +37 -1
  267. package/src/cli/modes/print.ts +24 -9
  268. package/src/cli/run.ts +2 -2
  269. package/src/cli/skills-eval.ts +23 -8
  270. package/src/cli/skills.ts +19 -4
  271. package/src/cli/targets.ts +4 -0
  272. package/src/cli/text-layout.ts +15 -5
  273. package/src/cli/trace.ts +62 -14
  274. package/src/cli/upgrade.ts +18 -2
  275. package/src/cli/usage.ts +10 -3
  276. package/src/cli/wiki-generate.ts +2 -1
  277. package/src/core/agent-environment.ts +7 -0
  278. package/src/core/bash-exec.ts +72 -1
  279. package/src/core/boot-trace.ts +9 -4
  280. package/src/core/bus-events.ts +20 -4
  281. package/src/core/commit-attribution.ts +157 -0
  282. package/src/core/compile-cache.ts +159 -0
  283. package/src/core/config.ts +131 -2
  284. package/src/core/defaults.ts +39 -5
  285. package/src/core/domain-loader.ts +12 -5
  286. package/src/core/git-commit-attribution.ts +362 -0
  287. package/src/core/incomplete-installation.ts +45 -0
  288. package/src/core/response-schema.ts +1 -1
  289. package/src/core/safe-exec.ts +13 -1
  290. package/src/core/settings-layers.ts +155 -21
  291. package/src/core/skill-activation.ts +1 -1
  292. package/src/core/startup-timer.ts +3 -3
  293. package/src/core/state-file-lock.ts +13 -1
  294. package/src/core/termination.ts +78 -5
  295. package/src/domains/config/classify.ts +15 -3
  296. package/src/domains/config/extension.ts +19 -13
  297. package/src/domains/config/index.ts +10 -0
  298. package/src/domains/config/keybindings.ts +42 -6
  299. package/src/domains/context/bootstrap-prompt.ts +1 -1
  300. package/src/domains/context/bootstrap.ts +111 -18
  301. package/src/domains/context/clear.ts +16 -11
  302. package/src/domains/context/clio-md.ts +111 -9
  303. package/src/domains/context/codewiki/artifact.ts +400 -0
  304. package/src/domains/context/codewiki/build-worker-protocol.ts +24 -0
  305. package/src/domains/context/codewiki/build-worker.ts +54 -0
  306. package/src/domains/context/codewiki/coordinator.ts +182 -0
  307. package/src/domains/context/codewiki/indexer.ts +59 -144
  308. package/src/domains/context/codewiki/paths.ts +67 -0
  309. package/src/domains/context/codewiki/schema.ts +80 -0
  310. package/src/domains/context/codewiki/tree-sitter.ts +1 -1
  311. package/src/domains/context/contract.ts +11 -5
  312. package/src/domains/context/extension.ts +94 -143
  313. package/src/domains/context/fingerprint.ts +3 -1
  314. package/src/domains/context/index.ts +12 -22
  315. package/src/domains/context/project-metadata.ts +19 -0
  316. package/src/domains/context/prompt-context.ts +9 -10
  317. package/src/domains/context/refresh.ts +29 -21
  318. package/src/domains/context/runtime.ts +17 -0
  319. package/src/domains/context/wiki/generate.ts +39 -34
  320. package/src/domains/context/wiki/plan.ts +1 -1
  321. package/src/domains/context/wiki/prompts.ts +21 -8
  322. package/src/domains/dispatch/code-step.ts +20 -1
  323. package/src/domains/dispatch/extension.ts +158 -21
  324. package/src/domains/dispatch/failure-classification.ts +6 -0
  325. package/src/domains/dispatch/fleet-commit-attribution.ts +56 -0
  326. package/src/domains/dispatch/orphan-recovery.ts +50 -8
  327. package/src/domains/dispatch/receipt-integrity.ts +5 -0
  328. package/src/domains/dispatch/state.ts +31 -6
  329. package/src/domains/dispatch/transport.ts +2 -1
  330. package/src/domains/dispatch/types.ts +14 -0
  331. package/src/domains/dispatch/worker-spawn.ts +21 -2
  332. package/src/domains/eval/metrics/context.ts +1 -1
  333. package/src/domains/eval/types.ts +0 -1
  334. package/src/domains/evidence/build.ts +41 -1
  335. package/src/domains/lifecycle/migrations/2026-08-18-lmstudio-runtime-id.ts +52 -0
  336. package/src/domains/lifecycle/migrations/index.ts +24 -4
  337. package/src/domains/middleware/hooks-io.ts +12 -0
  338. package/src/domains/middleware/skills-reminder.ts +30 -15
  339. package/src/domains/prompts/compiler.ts +142 -84
  340. package/src/domains/prompts/contract.ts +18 -2
  341. package/src/domains/prompts/extension.ts +39 -7
  342. package/src/domains/prompts/fragment-loader.ts +0 -1
  343. package/src/domains/prompts/fragments/identity/clio.md +2 -4
  344. package/src/domains/prompts/fragments/identity/docs-routing.md +10 -0
  345. package/src/domains/prompts/fragments/identity/self-awareness.md +1 -45
  346. package/src/domains/prompts/fragments/operating/contract.md +4 -50
  347. package/src/domains/prompts/fragments/operating/delegation.md +42 -0
  348. package/src/domains/prompts/fragments/operating/skills.md +26 -0
  349. package/src/domains/prompts/fragments/operating/worker.md +16 -0
  350. package/src/domains/prompts/fragments/safety/auto-edit.md +5 -5
  351. package/src/domains/prompts/fragments/safety/full-auto.md +3 -3
  352. package/src/domains/prompts/fragments/safety/read-only.md +4 -4
  353. package/src/domains/prompts/fragments/safety/suggest.md +2 -2
  354. package/src/domains/prompts/fragments/wiki/page.md +10 -0
  355. package/src/domains/prompts/fragments/wiki/plan.md +10 -0
  356. package/src/domains/prompts/preload.ts +3 -3
  357. package/src/domains/providers/auth/api-key.ts +1 -1
  358. package/src/domains/providers/auth/backend-file.ts +20 -10
  359. package/src/domains/providers/auth/backend-memory.ts +59 -4
  360. package/src/domains/providers/auth/boot-status.ts +65 -0
  361. package/src/domains/providers/auth/oauth.ts +2 -1
  362. package/src/domains/providers/auth/storage.ts +97 -38
  363. package/src/domains/providers/capabilities.ts +12 -4
  364. package/src/domains/providers/contract.ts +15 -4
  365. package/src/domains/providers/extension.ts +18 -6
  366. package/src/domains/providers/model-runtime-capabilities.ts +15 -4
  367. package/src/domains/providers/models/local-models/clio-local-coding-targets.yaml +118 -35
  368. package/src/domains/providers/plugins.ts +5 -3
  369. package/src/domains/providers/probe/fingerprint.ts +25 -5
  370. package/src/domains/providers/registry.ts +31 -10
  371. package/src/domains/providers/runtimes/boot-manifest.ts +55 -0
  372. package/src/domains/providers/runtimes/builtins.ts +2 -2
  373. package/src/domains/providers/runtimes/common/lmstudio-http.ts +423 -0
  374. package/src/domains/providers/runtimes/common/local-synth.ts +6 -7
  375. package/src/domains/providers/runtimes/local-native/lmstudio.ts +241 -0
  376. package/src/domains/providers/support.ts +6 -3
  377. package/src/domains/providers/types/local-model-quirks.ts +7 -9
  378. package/src/domains/providers/types/runtime-descriptor.ts +12 -1
  379. package/src/domains/providers/types/target-descriptor.ts +22 -0
  380. package/src/domains/resources/contract.ts +0 -1
  381. package/src/domains/resources/extension.ts +1 -3
  382. package/src/domains/resources/loader.ts +3 -4
  383. package/src/domains/resources/prompts/loader.ts +16 -2
  384. package/src/domains/resources/prompts/substitute.ts +1 -65
  385. package/src/domains/resources/skills/content-hash.ts +2 -0
  386. package/src/domains/resources/skills/install.ts +17 -0
  387. package/src/domains/resources/skills/loader.ts +17 -10
  388. package/src/domains/resources/skills/marketplace.ts +55 -9
  389. package/src/domains/safety/action-classifier.ts +4 -2
  390. package/src/domains/safety/audit.ts +8 -2
  391. package/src/domains/safety/extension.ts +1 -1
  392. package/src/domains/session/compaction/branch-summary.ts +3 -2
  393. package/src/domains/session/compaction/cut-point.ts +2 -1
  394. package/src/domains/session/compaction/tokens.ts +2 -1
  395. package/src/domains/session/context-ledger.ts +14 -0
  396. package/src/domains/session/contract.ts +15 -0
  397. package/src/domains/session/decision-board.ts +190 -0
  398. package/src/domains/session/entries.ts +66 -3
  399. package/src/domains/session/extension.ts +93 -12
  400. package/src/domains/session/retry.ts +10 -18
  401. package/src/domains/session/session-artifacts.ts +107 -0
  402. package/src/domains/session/task-board.ts +207 -13
  403. package/src/domains/session/tree/active-path.ts +44 -5
  404. package/src/domains/session/tree/fork.ts +26 -27
  405. package/src/domains/session/tree/preview.ts +2 -2
  406. package/src/domains/session/workspace/git-probe.ts +17 -11
  407. package/src/domains/user-tasks/store.ts +297 -0
  408. package/src/engine/acp/errors.ts +96 -0
  409. package/src/engine/acp/server.ts +1728 -146
  410. package/src/engine/acp/transport.ts +135 -14
  411. package/src/engine/acp/types.ts +26 -0
  412. package/src/engine/agent.ts +3 -3
  413. package/src/engine/ai.ts +32 -27
  414. package/src/engine/alcf-oauth.ts +26 -19
  415. package/src/engine/api-registry.ts +223 -0
  416. package/src/engine/apis/index.ts +3 -7
  417. package/src/engine/apis/llamacpp-residency.ts +49 -9
  418. package/src/engine/apis/lmstudio-residency.ts +5 -21
  419. package/src/engine/apis/lmstudio.ts +243 -0
  420. package/src/engine/apis/ollama-native.ts +24 -3
  421. package/src/engine/apis/openai-completions.ts +170 -91
  422. package/src/engine/apis/residency.ts +139 -3
  423. package/src/engine/apis/types.ts +16 -0
  424. package/src/engine/env-api-keys.ts +98 -0
  425. package/src/engine/gemma-channel-filter.ts +223 -0
  426. package/src/engine/instrumented-tui.ts +192 -0
  427. package/src/engine/messages.ts +14 -0
  428. package/src/engine/models.ts +42 -0
  429. package/src/engine/oauth.ts +16 -12
  430. package/src/engine/prompt-templates.ts +1 -0
  431. package/src/engine/provider-payload.ts +16 -59
  432. package/src/engine/strip-tokenizer-sentinels.ts +1 -1
  433. package/src/engine/truncate.ts +9 -0
  434. package/src/engine/tui.ts +17 -9
  435. package/src/engine/types.ts +3 -6
  436. package/src/engine/worker-runtime-capabilities.ts +5 -0
  437. package/src/engine/worker-runtime.ts +1 -1
  438. package/src/engine/worker-tools.ts +9 -4
  439. package/src/entry/boot-options.ts +50 -0
  440. package/src/entry/orchestrator.ts +288 -150
  441. package/src/interactive/application-controller.ts +89 -2
  442. package/src/interactive/chat-loop.ts +266 -41
  443. package/src/interactive/chat-panel.ts +173 -47
  444. package/src/interactive/chat-renderer.ts +262 -72
  445. package/src/interactive/clio-editor.ts +3 -8
  446. package/src/interactive/command-fallbacks.ts +2 -2
  447. package/src/interactive/context-overlay.ts +27 -1
  448. package/src/interactive/editor-submit.ts +228 -24
  449. package/src/interactive/export-html/ansi-to-html.ts +161 -0
  450. package/src/interactive/export-html/index.ts +51 -0
  451. package/src/interactive/export-html/template.ts +45 -0
  452. package/src/interactive/export-html/tool-renderer.ts +54 -0
  453. package/src/interactive/footer/dashboard.ts +4 -0
  454. package/src/interactive/footer/notifications.ts +1 -1
  455. package/src/interactive/footer/widgets.ts +20 -2
  456. package/src/interactive/footer-panel.ts +2 -2
  457. package/src/interactive/format-time.ts +14 -2
  458. package/src/interactive/interactive-application.ts +201 -17
  459. package/src/interactive/interactive-event-projection.ts +6 -1
  460. package/src/interactive/interactive-input-runtime.ts +50 -4
  461. package/src/interactive/interactive-presentation.ts +151 -19
  462. package/src/interactive/interactive-shell.ts +268 -14
  463. package/src/interactive/interactive-slash-runtime.ts +176 -114
  464. package/src/interactive/interactive-tickers.ts +38 -7
  465. package/src/interactive/keybinding-manager.ts +1 -1
  466. package/src/interactive/layout.ts +40 -3
  467. package/src/interactive/overlay-frame.ts +1 -1
  468. package/src/interactive/overlay-general-openers.ts +58 -1
  469. package/src/interactive/overlay-key-routing.ts +3 -0
  470. package/src/interactive/overlay-lifecycle.ts +13 -0
  471. package/src/interactive/overlay-permission-lifecycle.ts +2 -1
  472. package/src/interactive/overlay-session-lifecycle.ts +69 -12
  473. package/src/interactive/overlays/decisions.ts +300 -0
  474. package/src/interactive/overlays/help-reference.ts +15 -10
  475. package/src/interactive/overlays/model-selector.ts +34 -16
  476. package/src/interactive/overlays/session-selector.ts +18 -0
  477. package/src/interactive/overlays/settings.ts +105 -17
  478. package/src/interactive/overlays/skills-hub.ts +4 -4
  479. package/src/interactive/overlays/tree-selector.ts +41 -6
  480. package/src/interactive/render-trace.ts +499 -90
  481. package/src/interactive/renderers/compaction-summary.ts +2 -2
  482. package/src/interactive/renderers/diff.ts +115 -104
  483. package/src/interactive/renderers/mermaid.ts +53 -0
  484. package/src/interactive/renderers/tool-execution.ts +386 -133
  485. package/src/interactive/renderers/worker-entry.ts +20 -4
  486. package/src/interactive/session-switch-settlement.ts +10 -0
  487. package/src/interactive/slash-autocomplete.ts +6 -114
  488. package/src/interactive/slash-commands.ts +135 -47
  489. package/src/interactive/slash-spec.ts +9 -38
  490. package/src/interactive/status/controller.ts +5 -1
  491. package/src/interactive/stdout-backpressure.ts +99 -0
  492. package/src/interactive/stream-pacer.ts +530 -0
  493. package/src/interactive/stream-pacing-policy.ts +66 -0
  494. package/src/interactive/tasks-overlay.ts +368 -14
  495. package/src/interactive/terminal-lease.ts +485 -0
  496. package/src/interactive/theme/tokens.ts +1 -1
  497. package/src/interactive/turn-context.ts +4 -3
  498. package/src/interactive/turn-persistence.ts +30 -13
  499. package/src/interactive/turn-queues.ts +12 -0
  500. package/src/interactive/turn-recovery.ts +25 -8
  501. package/src/interactive/turn-runtime.ts +79 -12
  502. package/src/interactive/turn-state.ts +10 -0
  503. package/src/interactive/view/artifacts.ts +114 -4
  504. package/src/interactive/view/view-overlay.ts +3 -0
  505. package/src/interactive/welcome-dashboard.ts +17 -16
  506. package/src/interactive/worker-receipts.ts +52 -3
  507. package/src/interactive/worker-stream.ts +5 -1
  508. package/src/tools/agent-tools.ts +23 -3
  509. package/src/tools/artifact.ts +2 -2
  510. package/src/tools/ask-user.ts +23 -13
  511. package/src/tools/bash.ts +30 -2
  512. package/src/tools/bootstrap.ts +34 -431
  513. package/src/tools/builtin-tool-catalog.ts +265 -0
  514. package/src/tools/codewiki/code-nav-surface.ts +29 -0
  515. package/src/tools/codewiki/code-nav.ts +8 -22
  516. package/src/tools/codewiki/shared.ts +41 -38
  517. package/src/tools/context/docs-engine.ts +14 -3
  518. package/src/tools/context/index.ts +107 -28
  519. package/src/tools/context/surface.ts +19 -0
  520. package/src/tools/core-bootstrap.ts +168 -0
  521. package/src/tools/credential-present.ts +5 -5
  522. package/src/tools/dispatch-admission.ts +533 -0
  523. package/src/tools/dispatch-background.ts +54 -0
  524. package/src/tools/dispatch-event-text.ts +6 -0
  525. package/src/tools/dispatch-plan.ts +9 -4
  526. package/src/tools/dispatch-run-events.ts +238 -0
  527. package/src/tools/dispatch-runner.ts +2370 -0
  528. package/src/tools/dispatch-scout-admission.ts +295 -0
  529. package/src/tools/dispatch-types.ts +77 -0
  530. package/src/tools/dispatch.ts +67 -3161
  531. package/src/tools/find.ts +4 -2
  532. package/src/tools/grep.ts +2 -2
  533. package/src/tools/lazy-tool.ts +60 -0
  534. package/src/tools/ledger.ts +3 -3
  535. package/src/tools/monitor-surface.ts +36 -0
  536. package/src/tools/monitor.ts +2 -32
  537. package/src/tools/observers.ts +2 -2
  538. package/src/tools/registry.ts +39 -27
  539. package/src/tools/safe-exec.ts +2 -2
  540. package/src/tools/steer-surface.ts +17 -0
  541. package/src/tools/steer.ts +2 -13
  542. package/src/tools/tasks.ts +108 -11
  543. package/src/tools/truncate.ts +25 -184
  544. package/src/tools/verify/frontend.ts +3 -1
  545. package/src/tools/verify/index.ts +3 -38
  546. package/src/tools/verify/surface.ts +46 -0
  547. package/src/tools/web-fetch-surface.ts +23 -0
  548. package/src/tools/web-fetch.ts +2 -20
  549. package/src/tools/write.ts +7 -2
  550. package/src/worker/entry.ts +39 -2
  551. package/src/worker/spec-contract.ts +26 -5
  552. package/dist/chunk-7SS2CTV2.js +0 -61361
  553. package/dist/chunk-DKGKUHFA.js +0 -924
  554. package/dist/chunk-GEP36Y4X.js +0 -12796
  555. package/dist/chunk-XYWBQRDM.js +0 -137
  556. package/dist/clio-BZVGEUFJ.js +0 -58
  557. package/dist/configure-S7S6F6CL.js +0 -32
  558. package/docs/html/agents_blueprint.html +0 -936
  559. package/docs/html/alcf_blueprint.html +0 -324
  560. package/docs/html/architecture_blueprint.html +0 -850
  561. package/docs/html/commands_blueprint.html +0 -939
  562. package/docs/html/config_knobs_audit_blueprint.html +0 -178
  563. package/docs/html/configuration_blueprint.html +0 -1080
  564. package/docs/html/context_blueprint.html +0 -603
  565. package/docs/html/documentation_blueprint.html +0 -832
  566. package/docs/html/environment_blueprint.html +0 -404
  567. package/docs/html/eval_blueprint.html +0 -743
  568. package/docs/html/evals_internal_blueprint.html +0 -190
  569. package/docs/html/evolution_blueprint.html +0 -674
  570. package/docs/html/extensions_blueprint.html +0 -2065
  571. package/docs/html/fleet_dispatch_blueprint.html +0 -286
  572. package/docs/html/index.html +0 -919
  573. package/docs/html/lifecycle_blueprint.html +0 -723
  574. package/docs/html/memory_blueprint.html +0 -699
  575. package/docs/html/middleware_blueprint.html +0 -664
  576. package/docs/html/models_blueprint.html +0 -2366
  577. package/docs/html/observability_blueprint.html +0 -683
  578. package/docs/html/provider_adapter_blueprint.html +0 -245
  579. package/docs/html/safety_blueprint.html +0 -1386
  580. package/docs/html/shared.css +0 -571
  581. package/docs/html/shared.js +0 -143
  582. package/docs/html/skills_blueprint.html +0 -671
  583. package/docs/html/soak_blueprint.html +0 -182
  584. package/docs/html/tool_usage_blueprint.html +0 -350
  585. package/docs/html/tools_blueprint.html +0 -2249
  586. package/docs/html/trace_blueprint.html +0 -235
  587. package/docs/html/tui_design_blueprint.html +0 -374
  588. package/docs/html/validation_blueprint.html +0 -961
  589. package/docs/html/worker_dispatch_blueprint.html +0 -231
  590. package/src/core/release.ts +0 -2
  591. package/src/domains/providers/runtimes/common/lmstudio-logger.ts +0 -32
  592. package/src/domains/providers/runtimes/local-native/lmstudio-native.ts +0 -491
  593. package/src/engine/apis/lmstudio-native.ts +0 -1438
  594. package/src/engine/apis/thinking-replay.ts +0 -11
  595. 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.2 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.2 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).
@@ -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.1).
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.2).
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 pi agent does not become idle until every `agent_end` listener settles, so a
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 step still runs to completion and only its result is thrown
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