@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.
Files changed (601) hide show
  1. package/CHANGELOG.md +233 -373
  2. package/CONTRIBUTING.md +23 -23
  3. package/README.md +284 -613
  4. package/dist/{acp-FPR54DGL.js → acp-P2AQILE2.js} +43 -53
  5. package/dist/{agents-OGPIHPJH.js → agents-72W3BI7I.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-2DJ2KNFG.js +2095 -0
  9. package/dist/{chunk-IS3ONKU3.js → chunk-2IR2NMPA.js} +6 -4
  10. package/dist/chunk-2SFS6XQE.js +122 -0
  11. package/dist/{chunk-PV4JUBVJ.js → chunk-2TLUCQVG.js} +40 -21
  12. package/dist/chunk-2VTFPG5O.js +48 -0
  13. package/dist/chunk-4BJ5BYCE.js +61 -0
  14. package/dist/{chunk-474KN5II.js → chunk-4BPJXDWC.js} +111 -181
  15. package/dist/chunk-4VP4KH3K.js +962 -0
  16. package/dist/chunk-4XUGQOHA.js +797 -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-4QKXUHSR.js → chunk-5UFT4SUX.js} +70 -20
  21. package/dist/{chunk-OLBBMFRD.js → chunk-5UUP6MWO.js} +24 -62
  22. package/dist/chunk-65DEGPJ6.js +52 -0
  23. package/dist/chunk-6EJMN2Y3.js +17 -0
  24. package/dist/chunk-6N5PTWMY.js +136 -0
  25. package/dist/chunk-6SGHMWE3.js +277 -0
  26. package/dist/chunk-6XLNIQDB.js +27 -0
  27. package/dist/chunk-7CR24IG7.js +242 -0
  28. package/dist/chunk-7MNJORFF.js +22 -0
  29. package/dist/{chunk-KY56HMHH.js → chunk-A3CYT5EX.js} +125 -31
  30. package/dist/chunk-AGYYIBLL.js +1069 -0
  31. package/dist/{chunk-GB6QRBXN.js → chunk-APJ265NV.js} +54 -1187
  32. package/dist/{chunk-673JJUWJ.js → chunk-BMEMKKIT.js} +2 -2
  33. package/dist/chunk-CBCAPZAA.js +229 -0
  34. package/dist/chunk-CMZWFGD2.js +352 -0
  35. package/dist/chunk-COU2UHX6.js +400 -0
  36. package/dist/chunk-DSELYM6W.js +1077 -0
  37. package/dist/chunk-DUYJ5IO6.js +644 -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-FCSXB6T2.js +338 -0
  42. package/dist/chunk-FJ3H4MN5.js +48 -0
  43. package/dist/{chunk-RPTR2H26.js → chunk-FNTMWMX5.js} +21 -15
  44. package/dist/chunk-FQ4SKYE4.js +29 -0
  45. package/dist/chunk-G4BMMOKF.js +182 -0
  46. package/dist/{chunk-ZPY3JZ5E.js → chunk-GGXXDWE4.js} +183 -1233
  47. package/dist/chunk-HC4CLZ2Y.js +68 -0
  48. package/dist/{chunk-LU4TK2PR.js → chunk-HFSBBKSQ.js} +5 -56
  49. package/dist/{chunk-PIUMUEMV.js → chunk-HKIYEGME.js} +10 -6
  50. package/dist/chunk-I4HZDVNP.js +73 -0
  51. package/dist/chunk-IKCO5N3L.js +162 -0
  52. package/dist/chunk-IR4CFBFN.js +56 -0
  53. package/dist/{chunk-R5KLMSBV.js → chunk-J5Q24KAG.js} +2 -2
  54. package/dist/chunk-J7CWMCQD.js +255 -0
  55. package/dist/{chunk-K5XEMXTI.js → chunk-JVCV3ICN.js} +1 -1
  56. package/dist/chunk-KZWTDYJF.js +217 -0
  57. package/dist/chunk-LBMZMYH2.js +285 -0
  58. package/dist/{chunk-G34LV2PF.js → chunk-LM5TQCJZ.js} +84 -170
  59. package/dist/chunk-LW6DSM3M.js +5135 -0
  60. package/dist/chunk-LWLEKMDQ.js +3482 -0
  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-FST4FYJB.js → chunk-MFFY33HR.js} +99 -140
  64. package/dist/{chunk-BSU2YIWB.js → chunk-MVVUPGPW.js} +131 -136
  65. package/dist/chunk-OAO4GE4M.js +619 -0
  66. package/dist/{chunk-Q3RUPKEJ.js → chunk-OC7FIQPC.js} +58 -189
  67. package/dist/chunk-OKGUZO2U.js +34 -0
  68. package/dist/{chunk-GAEBEQVI.js → chunk-OOJYHWRB.js} +32 -346
  69. package/dist/{chunk-Q5WJOSJ7.js → chunk-OQ33BKR3.js} +2 -1
  70. package/dist/chunk-OQE5J4C6.js +73 -0
  71. package/dist/{chunk-KKNLWXI6.js → chunk-ORBHGJC5.js} +8 -8
  72. package/dist/{chunk-MAR7Y6HW.js → chunk-PAJK6MAQ.js} +23 -16
  73. package/dist/{chunk-M5T5VO65.js → chunk-PIWWS5BL.js} +837 -635
  74. package/dist/chunk-POHLU5DW.js +1186 -0
  75. package/dist/chunk-QKMUKYO7.js +4961 -0
  76. package/dist/chunk-SRDMMSEP.js +16405 -0
  77. package/dist/chunk-SST6Z5JA.js +80 -0
  78. package/dist/chunk-STBPMHSX.js +2456 -0
  79. package/dist/chunk-T6YILFSB.js +80 -0
  80. package/dist/chunk-TZK7PACC.js +174 -0
  81. package/dist/chunk-TZTZS7QK.js +227 -0
  82. package/dist/{chunk-ASND7OZK.js → chunk-UFIIWP2H.js} +13 -13
  83. package/dist/chunk-UOV2BYIW.js +107 -0
  84. package/dist/{chunk-PFEFKVGL.js → chunk-V6RTAOC2.js} +13 -11
  85. package/dist/chunk-VAKQQHWR.js +434 -0
  86. package/dist/chunk-VG7TBQIY.js +128 -0
  87. package/dist/chunk-VJWL6YS5.js +244 -0
  88. package/dist/{chunk-EYOKLTMF.js → chunk-VPAYEGVX.js} +17 -3
  89. package/dist/chunk-WEH5XRJQ.js +32 -0
  90. package/dist/chunk-X4RCMKVQ.js +641 -0
  91. package/dist/{chunk-TEKV33Q5.js → chunk-X6IAEBZR.js} +65 -33
  92. package/dist/chunk-XBXAASKX.js +18 -0
  93. package/dist/chunk-XN3L4EYL.js +46 -0
  94. package/dist/{chunk-RDLVBZEO.js → chunk-YCWGATWI.js} +6 -4
  95. package/dist/chunk-YHZX5GEU.js +193 -0
  96. package/dist/chunk-YXLYO42X.js +91 -0
  97. package/dist/{chunk-NMOX6HFD.js → chunk-ZDOOVTXZ.js} +29 -77
  98. package/dist/chunk-ZI647VB5.js +37 -0
  99. package/dist/{chunk-C4PTHK7P.js → chunk-ZWLZP4ZT.js} +5 -5
  100. package/dist/chunk-ZWMF7253.js +1882 -0
  101. package/dist/cli/index.js +62 -54
  102. package/dist/clio-JOU4FXVA.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-XCDVKR23.js} +92 -55
  108. package/dist/configure-4GAP54ZW.js +42 -0
  109. package/dist/{context-5RADCKTR.js → context-4UOGGLQ5.js} +71 -35
  110. package/dist/context-5VKGUVJJ.js +866 -0
  111. package/dist/{context-3KWFLHJG.js → context-77FM5DV5.js} +15 -13
  112. package/dist/{context-clear-7TSNPAAI.js → context-clear-XXJRLCJJ.js} +54 -28
  113. package/dist/{context-index-W4RLWOQH.js → context-index-BZ4UYMTC.js} +30 -24
  114. package/dist/dispatch-runner-QPRDDBDX.js +1997 -0
  115. package/dist/{docs-5AWSPS37.js → docs-2C2LTVT2.js} +23 -10
  116. package/dist/{doctor-UC5NAJYQ.js → doctor-HR46URBJ.js} +27 -17
  117. package/dist/{eval-U6TJHRLX.js → eval-XSSNATB4.js} +29 -16
  118. package/dist/{evidence-YEGUW4L3.js → evidence-6HG2PY2B.js} +46 -26
  119. package/dist/{evolve-TXARCTPG.js → evolve-K7YU3NCY.js} +45 -25
  120. package/dist/{extensions-OZFJ3A3G.js → extensions-QVDOHDGJ.js} +16 -7
  121. package/dist/{fleet-6G3DHNYE.js → fleet-VY3HHKN6.js} +163 -54
  122. package/dist/{fleet-preflight-DSNT37JK.js → fleet-preflight-DDN536IT.js} +7 -4
  123. package/dist/{init-KZ5QTF6M.js → init-JYGXI3FK.js} +69 -32
  124. package/dist/{memory-73ESV5YC.js → memory-WFZMGYHX.js} +48 -27
  125. package/dist/{models-A4PVNWJK.js → models-I5QWSEOM.js} +39 -25
  126. package/dist/monitor-GE4ID3IA.js +661 -0
  127. package/dist/{chunk-FCIH3BIZ.js → orchestrator-EM5MC3HM.js} +15979 -12407
  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-ZU3QMZPZ.js} +101 -61
  132. package/dist/{share-YIFFV4NQ.js → share-S5BZQC5I.js} +15 -8
  133. package/dist/{skills-2V6RA3OQ.js → skills-X5VXCRNQ.js} +34 -14
  134. package/dist/{skills-eval-S2TVJO4F.js → skills-eval-WKIHWTHR.js} +70 -34
  135. package/dist/steer-GGWFUJUD.js +77 -0
  136. package/dist/{targets-TYXLPB23.js → targets-SNCPI2NR.js} +43 -27
  137. package/dist/terminal-lease-BNAHVHBS.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-JQHHPQ4K.js} +45 -25
  142. package/dist/{usage-ZAFSXKKG.js → usage-OR4O5SMZ.js} +62 -31
  143. package/dist/verify-375KUB3Y.js +716 -0
  144. package/dist/web-fetch-2YHJ3KTG.js +638 -0
  145. package/dist/{wiki-generate-NUQCVOQ3.js → wiki-generate-UEXP2ARI.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 +387 -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 +45 -9
  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 +715 -278
  444. package/src/interactive/chat-renderer.ts +306 -85
  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 +253 -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 +42 -22
  456. package/src/interactive/footer-panel.ts +8 -3
  457. package/src/interactive/format-time.ts +14 -2
  458. package/src/interactive/interactive-application.ts +203 -17
  459. package/src/interactive/interactive-event-projection.ts +18 -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 +184 -117
  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/ask-user.ts +146 -24
  474. package/src/interactive/overlays/decisions.ts +300 -0
  475. package/src/interactive/overlays/help-reference.ts +15 -10
  476. package/src/interactive/overlays/model-selector.ts +34 -16
  477. package/src/interactive/overlays/session-selector.ts +18 -0
  478. package/src/interactive/overlays/settings.ts +105 -17
  479. package/src/interactive/overlays/skills-hub.ts +4 -4
  480. package/src/interactive/overlays/tree-selector.ts +41 -6
  481. package/src/interactive/render-trace.ts +499 -90
  482. package/src/interactive/renderers/compaction-summary.ts +2 -2
  483. package/src/interactive/renderers/diff.ts +115 -104
  484. package/src/interactive/renderers/mermaid.ts +53 -0
  485. package/src/interactive/renderers/tool-execution.ts +516 -168
  486. package/src/interactive/renderers/worker-entry.ts +20 -4
  487. package/src/interactive/session-switch-settlement.ts +10 -0
  488. package/src/interactive/slash-autocomplete.ts +6 -114
  489. package/src/interactive/slash-commands.ts +135 -47
  490. package/src/interactive/slash-spec.ts +9 -38
  491. package/src/interactive/status/controller.ts +5 -1
  492. package/src/interactive/status/index.ts +12 -1
  493. package/src/interactive/status/reasoning.ts +87 -0
  494. package/src/interactive/status/summary.ts +13 -2
  495. package/src/interactive/stdout-backpressure.ts +99 -0
  496. package/src/interactive/stream-pacer.ts +530 -0
  497. package/src/interactive/stream-pacing-policy.ts +66 -0
  498. package/src/interactive/tasks-overlay.ts +368 -14
  499. package/src/interactive/terminal-lease.ts +485 -0
  500. package/src/interactive/theme/tokens.ts +1 -1
  501. package/src/interactive/transcript-detail.ts +120 -0
  502. package/src/interactive/turn-context.ts +4 -3
  503. package/src/interactive/turn-persistence.ts +30 -13
  504. package/src/interactive/turn-queues.ts +12 -0
  505. package/src/interactive/turn-recovery.ts +25 -8
  506. package/src/interactive/turn-runtime.ts +79 -12
  507. package/src/interactive/turn-state.ts +10 -0
  508. package/src/interactive/view/artifacts.ts +114 -4
  509. package/src/interactive/view/view-overlay.ts +3 -0
  510. package/src/interactive/welcome-dashboard.ts +17 -16
  511. package/src/interactive/worker-receipts.ts +52 -3
  512. package/src/interactive/worker-stream.ts +5 -1
  513. package/src/tools/agent-tools.ts +23 -3
  514. package/src/tools/artifact.ts +2 -2
  515. package/src/tools/ask-user.ts +23 -13
  516. package/src/tools/bash.ts +30 -2
  517. package/src/tools/bootstrap.ts +34 -431
  518. package/src/tools/builtin-tool-catalog.ts +271 -0
  519. package/src/tools/codewiki/code-nav-surface.ts +29 -0
  520. package/src/tools/codewiki/code-nav.ts +8 -22
  521. package/src/tools/codewiki/shared.ts +41 -38
  522. package/src/tools/context/docs-engine.ts +14 -3
  523. package/src/tools/context/index.ts +107 -28
  524. package/src/tools/context/surface.ts +19 -0
  525. package/src/tools/core-bootstrap.ts +168 -0
  526. package/src/tools/credential-present.ts +5 -5
  527. package/src/tools/dispatch-admission.ts +533 -0
  528. package/src/tools/dispatch-background.ts +54 -0
  529. package/src/tools/dispatch-event-text.ts +6 -0
  530. package/src/tools/dispatch-plan.ts +9 -4
  531. package/src/tools/dispatch-run-events.ts +238 -0
  532. package/src/tools/dispatch-runner.ts +2370 -0
  533. package/src/tools/dispatch-scout-admission.ts +295 -0
  534. package/src/tools/dispatch-types.ts +77 -0
  535. package/src/tools/dispatch.ts +67 -3161
  536. package/src/tools/find.ts +4 -2
  537. package/src/tools/grep.ts +2 -2
  538. package/src/tools/lazy-tool.ts +60 -0
  539. package/src/tools/ledger.ts +3 -3
  540. package/src/tools/monitor-surface.ts +36 -0
  541. package/src/tools/monitor.ts +2 -32
  542. package/src/tools/observers.ts +2 -2
  543. package/src/tools/presentation.ts +107 -0
  544. package/src/tools/registry.ts +45 -27
  545. package/src/tools/safe-exec.ts +2 -2
  546. package/src/tools/steer-surface.ts +17 -0
  547. package/src/tools/steer.ts +2 -13
  548. package/src/tools/tasks.ts +108 -11
  549. package/src/tools/truncate.ts +25 -184
  550. package/src/tools/verify/frontend.ts +3 -1
  551. package/src/tools/verify/index.ts +3 -38
  552. package/src/tools/verify/surface.ts +46 -0
  553. package/src/tools/web-fetch-surface.ts +23 -0
  554. package/src/tools/web-fetch.ts +2 -20
  555. package/src/tools/write.ts +7 -2
  556. package/src/worker/entry.ts +39 -2
  557. package/src/worker/spec-contract.ts +26 -5
  558. package/dist/chunk-7SS2CTV2.js +0 -61361
  559. package/dist/chunk-DKGKUHFA.js +0 -924
  560. package/dist/chunk-GEP36Y4X.js +0 -12796
  561. package/dist/chunk-XYWBQRDM.js +0 -137
  562. package/dist/clio-BZVGEUFJ.js +0 -58
  563. package/dist/configure-S7S6F6CL.js +0 -32
  564. package/docs/html/agents_blueprint.html +0 -936
  565. package/docs/html/alcf_blueprint.html +0 -324
  566. package/docs/html/architecture_blueprint.html +0 -850
  567. package/docs/html/commands_blueprint.html +0 -939
  568. package/docs/html/config_knobs_audit_blueprint.html +0 -178
  569. package/docs/html/configuration_blueprint.html +0 -1080
  570. package/docs/html/context_blueprint.html +0 -603
  571. package/docs/html/documentation_blueprint.html +0 -832
  572. package/docs/html/environment_blueprint.html +0 -404
  573. package/docs/html/eval_blueprint.html +0 -743
  574. package/docs/html/evals_internal_blueprint.html +0 -190
  575. package/docs/html/evolution_blueprint.html +0 -674
  576. package/docs/html/extensions_blueprint.html +0 -2065
  577. package/docs/html/fleet_dispatch_blueprint.html +0 -286
  578. package/docs/html/index.html +0 -919
  579. package/docs/html/lifecycle_blueprint.html +0 -723
  580. package/docs/html/memory_blueprint.html +0 -699
  581. package/docs/html/middleware_blueprint.html +0 -664
  582. package/docs/html/models_blueprint.html +0 -2366
  583. package/docs/html/observability_blueprint.html +0 -683
  584. package/docs/html/provider_adapter_blueprint.html +0 -245
  585. package/docs/html/safety_blueprint.html +0 -1386
  586. package/docs/html/shared.css +0 -571
  587. package/docs/html/shared.js +0 -143
  588. package/docs/html/skills_blueprint.html +0 -671
  589. package/docs/html/soak_blueprint.html +0 -182
  590. package/docs/html/tool_usage_blueprint.html +0 -350
  591. package/docs/html/tools_blueprint.html +0 -2249
  592. package/docs/html/trace_blueprint.html +0 -235
  593. package/docs/html/tui_design_blueprint.html +0 -374
  594. package/docs/html/validation_blueprint.html +0 -961
  595. package/docs/html/worker_dispatch_blueprint.html +0 -231
  596. package/src/core/release.ts +0 -2
  597. package/src/domains/providers/runtimes/common/lmstudio-logger.ts +0 -32
  598. package/src/domains/providers/runtimes/local-native/lmstudio-native.ts +0 -491
  599. package/src/engine/apis/lmstudio-native.ts +0 -1438
  600. package/src/engine/apis/thinking-replay.ts +0 -11
  601. package/src/tools/string-enum.ts +0 -15
@@ -1,20 +1,22 @@
1
1
  import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
2
  import {
3
- TASK_MEMORY_CONTENT_MAX_CHARS,
4
- TASK_MEMORY_DEFAULT_KNOWLEDGE_CAP,
5
- TASK_MEMORY_DEFAULT_PROCEDURAL_CAP,
6
3
  inspectEvidence
7
- } from "./chunk-7SS2CTV2.js";
4
+ } from "./chunk-SRDMMSEP.js";
8
5
  import {
9
6
  createRedactionTally,
10
7
  redactSecretsText
11
- } from "./chunk-LU4TK2PR.js";
8
+ } from "./chunk-4BJ5BYCE.js";
9
+ import {
10
+ TASK_MEMORY_CONTENT_MAX_CHARS,
11
+ TASK_MEMORY_DEFAULT_KNOWLEDGE_CAP,
12
+ TASK_MEMORY_DEFAULT_PROCEDURAL_CAP
13
+ } from "./chunk-OAO4GE4M.js";
12
14
  import {
13
15
  canonicalizeExistingPath
14
- } from "./chunk-OLBBMFRD.js";
16
+ } from "./chunk-ECH6PKUQ.js";
15
17
  import {
16
18
  ceilChars
17
- } from "./chunk-H6F6BYOH.js";
19
+ } from "./chunk-LZSJBIVT.js";
18
20
  import {
19
21
  safeResourceWrite
20
22
  } from "./chunk-WEPFGWHJ.js";
@@ -693,9 +695,6 @@ function compareStrings2(a, b) {
693
695
  return a.localeCompare(b);
694
696
  }
695
697
 
696
- // src/domains/memory/index.ts
697
- init_esm_shims();
698
-
699
698
  // src/domains/memory/task-memory-handoff.ts
700
699
  init_esm_shims();
701
700
  import { existsSync, readdirSync, readFileSync as readFileSync2, statSync } from "node:fs";
@@ -908,6 +907,9 @@ function truncate(value) {
908
907
  return value.length <= TRACE_TEXT_MAX_CHARS ? value : `${value.slice(0, TRACE_TEXT_MAX_CHARS)}\u2026[truncated]`;
909
908
  }
910
909
 
910
+ // src/domains/memory/index.ts
911
+ init_esm_shims();
912
+
911
913
  export {
912
914
  memoryStorePath,
913
915
  loadMemoryRecords,
@@ -927,4 +929,4 @@ export {
927
929
  taskMemoryTracePath,
928
930
  createTaskMemoryTrace
929
931
  };
930
- //# sourceMappingURL=chunk-PFEFKVGL.js.map
932
+ //# sourceMappingURL=chunk-V6RTAOC2.js.map
@@ -0,0 +1,434 @@
1
+ import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ byteLength,
4
+ truncateUtf8
5
+ } from "./chunk-6XLNIQDB.js";
6
+ import {
7
+ GUARDRAIL_DEFAULTS,
8
+ GUARDRAIL_ENV_VARS,
9
+ resolveGuardrail
10
+ } from "./chunk-4ZG3XFUR.js";
11
+ import {
12
+ clioStateDir
13
+ } from "./chunk-BNAZZHFG.js";
14
+ import {
15
+ init_esm_shims
16
+ } from "./chunk-3R73A4XB.js";
17
+
18
+ // src/tools/truncate.ts
19
+ init_esm_shims();
20
+
21
+ // src/engine/truncate.ts
22
+ init_esm_shims();
23
+ import {
24
+ formatSize,
25
+ GREP_MAX_LINE_LENGTH,
26
+ truncateHead,
27
+ truncateLine,
28
+ truncateTail
29
+ } from "@earendil-works/pi-agent-core";
30
+
31
+ // src/tools/truncate.ts
32
+ var DEFAULT_MAX_LINES = 2e3;
33
+ var DEFAULT_MAX_BYTES = 16 * 1024;
34
+ function splitLinesForCounting(content) {
35
+ if (content.length === 0) return [];
36
+ const lines = content.split("\n");
37
+ if (content.endsWith("\n")) lines.pop();
38
+ return lines;
39
+ }
40
+ function withClioDefaults(options) {
41
+ return {
42
+ maxLines: options.maxLines ?? DEFAULT_MAX_LINES,
43
+ maxBytes: options.maxBytes ?? DEFAULT_MAX_BYTES
44
+ };
45
+ }
46
+ function truncateHead2(content, options = {}) {
47
+ return truncateHead(content, withClioDefaults(options));
48
+ }
49
+ function truncateTail2(content, options = {}) {
50
+ return truncateTail(content, withClioDefaults(options));
51
+ }
52
+
53
+ // src/tools/observation.ts
54
+ init_esm_shims();
55
+
56
+ // src/tools/result-shaping.ts
57
+ init_esm_shims();
58
+ import { mkdirSync, writeFileSync } from "node:fs";
59
+ import { isAbsolute, join, relative, resolve } from "node:path";
60
+ var DEFAULT_TOOL_RESULT_MAX_BYTES = DEFAULT_MAX_BYTES + 2 * 1024;
61
+ var RESULT_TRUNCATION_MARKER = "\n[tool result truncated]";
62
+ var RESULT_OFFLOAD_MAX_BYTES = 10 * 1024 * 1024;
63
+ function mergeDetails(details, resultSize) {
64
+ return { ...details ?? {}, resultSize };
65
+ }
66
+ function maxBytesFor(spec) {
67
+ const configured = spec.metadata?.resultSizePolicy?.maxBytes;
68
+ return typeof configured === "number" && Number.isFinite(configured) && configured > 0 ? Math.floor(configured) : DEFAULT_TOOL_RESULT_MAX_BYTES;
69
+ }
70
+ function followUpHint(spec) {
71
+ return spec.metadata?.resultSizePolicy?.followUpHint ?? "Use a narrower query, offset/limit arguments, or a more specific tool call to inspect the omitted content.";
72
+ }
73
+ function detailsRecord(details, key) {
74
+ const candidate = details?.[key];
75
+ return candidate !== null && typeof candidate === "object" && !Array.isArray(candidate) ? candidate : null;
76
+ }
77
+ function existingOffloadPath(details) {
78
+ const fromResultSize = detailsRecord(details, "resultSize")?.offloadPath;
79
+ if (typeof fromResultSize === "string" && fromResultSize.length > 0) return fromResultSize;
80
+ const fromObservation = detailsRecord(details, "observation")?.offloadPath;
81
+ return typeof fromObservation === "string" && fromObservation.length > 0 ? fromObservation : null;
82
+ }
83
+ function safePathSegment(value) {
84
+ const safe = value.trim().replace(/[^A-Za-z0-9._-]/g, "_").slice(0, 128);
85
+ return safe.length > 0 ? safe : "unnamed";
86
+ }
87
+ function timestampSegment() {
88
+ return (/* @__PURE__ */ new Date()).toISOString().replace(/[^A-Za-z0-9._-]/g, "_");
89
+ }
90
+ function offloadBody(text, bytes, maxBytes) {
91
+ if (bytes <= maxBytes) return text;
92
+ const notice = `
93
+ [clio-coder scratch output truncated at ${maxBytes} bytes; original size ${bytes} bytes]`;
94
+ const prefixBudget = maxBytes - byteLength(notice);
95
+ return `${truncateUtf8(text, Math.max(0, prefixBudget), "")}${notice}`;
96
+ }
97
+ function writeToolOffload(text, context, maxBytes = RESULT_OFFLOAD_MAX_BYTES) {
98
+ try {
99
+ const bytes = byteLength(text);
100
+ const sessionId = safePathSegment(context?.sessionId ?? "no-session");
101
+ const callId = safePathSegment(context?.toolCallId ?? timestampSegment());
102
+ const dir = join(clioStateDir(), "scratch", sessionId);
103
+ const path = join(dir, `${callId}.txt`);
104
+ mkdirSync(dir, { recursive: true });
105
+ writeFileSync(path, offloadBody(text, bytes, maxBytes), "utf8");
106
+ return path;
107
+ } catch {
108
+ return null;
109
+ }
110
+ }
111
+ var OFFLOAD_POINTER_NOTE = "overflow copy, read-only; not the workspace";
112
+ function offloadPointer(offloadPath) {
113
+ return `full: ${offloadPath} (${OFFLOAD_POINTER_NOTE})`;
114
+ }
115
+ function isSessionOffloadPath(filePath, sessionId) {
116
+ const dir = join(clioStateDir(), "scratch", safePathSegment(sessionId ?? "no-session"));
117
+ const rel = relative(dir, resolve(filePath));
118
+ return rel.length > 0 && !rel.startsWith("..") && !isAbsolute(rel);
119
+ }
120
+ function bracketedHint(spec, offloadPath) {
121
+ const hint = followUpHint(spec);
122
+ if (offloadPath === null) return hint;
123
+ return `${hint} ${offloadPointer(offloadPath)}; read it with offset and limit to inspect the rest.`;
124
+ }
125
+ function shapeJsonOverflow(spec, result, text, bytes, maxBytes, context) {
126
+ const observation = detailsRecord(result.details, "observation");
127
+ const offloadPath = writeToolOffload(text, context);
128
+ const next = typeof observation?.next === "string" && observation.next.length > 0 ? observation.next : followUpHint(spec);
129
+ const stub = JSON.stringify({
130
+ error: `result exceeded ${maxBytes} bytes`,
131
+ ...offloadPath !== null ? { offloadPath, offloadPathNote: OFFLOAD_POINTER_NOTE } : {},
132
+ next
133
+ });
134
+ const resultSize = {
135
+ bytes,
136
+ shownBytes: byteLength(stub),
137
+ maxBytes,
138
+ truncated: true,
139
+ policy: spec.metadata?.resultSizePolicy?.kind ?? "truncate",
140
+ followUpHint: followUpHint(spec),
141
+ ...offloadPath !== null ? { offloadPath } : {}
142
+ };
143
+ if (result.kind === "ok") {
144
+ return { ...result, output: stub, details: mergeDetails(result.details, resultSize) };
145
+ }
146
+ return { ...result, message: stub, details: mergeDetails(result.details, resultSize) };
147
+ }
148
+ function shapeToolResult(spec, result, context) {
149
+ if (existingOffloadPath(result.details) !== null) return result;
150
+ const maxBytes = maxBytesFor(spec);
151
+ const text = result.kind === "ok" ? result.output : result.message;
152
+ const bytes = byteLength(text);
153
+ if (bytes <= maxBytes) return result;
154
+ const observation = detailsRecord(result.details, "observation");
155
+ if (observation?.format === "json") return shapeJsonOverflow(spec, result, text, bytes, maxBytes, context);
156
+ const truncated = truncateUtf8(text, maxBytes, RESULT_TRUNCATION_MARKER);
157
+ const offloadPath = writeToolOffload(text, context);
158
+ const resultSize = {
159
+ bytes,
160
+ shownBytes: byteLength(truncated),
161
+ maxBytes,
162
+ truncated: true,
163
+ policy: spec.metadata?.resultSizePolicy?.kind ?? "truncate",
164
+ followUpHint: followUpHint(spec),
165
+ ...offloadPath !== null ? { offloadPath } : {}
166
+ };
167
+ if (result.kind === "ok") {
168
+ return {
169
+ ...result,
170
+ output: `${truncated}
171
+
172
+ [${bracketedHint(spec, offloadPath)}]`,
173
+ details: mergeDetails(result.details, resultSize)
174
+ };
175
+ }
176
+ return {
177
+ ...result,
178
+ message: `${truncated}
179
+
180
+ [${bracketedHint(spec, offloadPath)}]`,
181
+ details: mergeDetails(result.details, resultSize)
182
+ };
183
+ }
184
+
185
+ // src/tools/observation.ts
186
+ var OBSERVATION_POLICY_SLACK_BYTES = 2 * 1024;
187
+ var OBSERVE_SELF_CAPS = {
188
+ grepContent: 16 * 1024,
189
+ grepFilesCount: 8 * 1024,
190
+ find: 8 * 1024,
191
+ ls: 8 * 1024,
192
+ codeNav: 16 * 1024,
193
+ contextDocs: 16 * 1024,
194
+ contextSkills: 50 * 1024,
195
+ contextWorkspace: 50 * 1024
196
+ };
197
+ var DEFAULT_OBSERVATION_TURN_BUDGET_BYTES = GUARDRAIL_DEFAULTS.observationTurnBudgetBytes;
198
+ var OBSERVATION_TURN_BUDGET_ENV = GUARDRAIL_ENV_VARS.observationTurnBudgetBytes;
199
+ var MIN_BUDGET_SLICE_BYTES = 1024;
200
+ var BUDGET_TRACK_LIMIT = 256;
201
+ var turnBudgets = /* @__PURE__ */ new Map();
202
+ var MAX_CONTINUATION_CHARS = 200;
203
+ function boundContinuation(next) {
204
+ if (next === void 0 || next.length <= MAX_CONTINUATION_CHARS) return next;
205
+ return `${Array.from(next).slice(0, MAX_CONTINUATION_CHARS).join("")}\u2026`;
206
+ }
207
+ function observationTurnBudgetLimit(env = process.env) {
208
+ return Math.max(MIN_BUDGET_SLICE_BYTES, resolveGuardrail("observationTurnBudgetBytes", env));
209
+ }
210
+ function budgetKey(options) {
211
+ const turnId = options?.turnId?.trim();
212
+ if (!turnId) return null;
213
+ const sessionId = options?.sessionId?.trim() || "no-session";
214
+ return `${sessionId}:${turnId}`;
215
+ }
216
+ function pruneBudgetMap() {
217
+ while (turnBudgets.size > BUDGET_TRACK_LIMIT) {
218
+ let oldestKey = null;
219
+ let oldestSeen = Number.POSITIVE_INFINITY;
220
+ for (const [key, state] of turnBudgets) {
221
+ if (state.lastSeenAt >= oldestSeen) continue;
222
+ oldestKey = key;
223
+ oldestSeen = state.lastSeenAt;
224
+ }
225
+ if (oldestKey === null) break;
226
+ turnBudgets.delete(oldestKey);
227
+ }
228
+ }
229
+ function reserveObservation(selfCapBytes, options) {
230
+ const key = budgetKey(options);
231
+ if (key === null) {
232
+ return {
233
+ key,
234
+ limitBytes: observationTurnBudgetLimit(),
235
+ usedBeforeBytes: 0,
236
+ selfCapBytes,
237
+ callCapBytes: selfCapBytes,
238
+ limited: false,
239
+ exhausted: false,
240
+ committed: false,
241
+ settled: false
242
+ };
243
+ }
244
+ const limitBytes = observationTurnBudgetLimit();
245
+ const state = turnBudgets.get(key) ?? { usedBytes: 0, lastSeenAt: Date.now() };
246
+ state.lastSeenAt = Date.now();
247
+ turnBudgets.set(key, state);
248
+ pruneBudgetMap();
249
+ const remaining = Math.max(0, limitBytes - state.usedBytes);
250
+ if (remaining < MIN_BUDGET_SLICE_BYTES) {
251
+ return {
252
+ key,
253
+ limitBytes,
254
+ usedBeforeBytes: state.usedBytes,
255
+ selfCapBytes,
256
+ callCapBytes: 0,
257
+ limited: true,
258
+ exhausted: true,
259
+ committed: false,
260
+ settled: false
261
+ };
262
+ }
263
+ const callCapBytes = Math.min(selfCapBytes, remaining);
264
+ return {
265
+ key,
266
+ limitBytes,
267
+ usedBeforeBytes: state.usedBytes,
268
+ selfCapBytes,
269
+ callCapBytes,
270
+ limited: callCapBytes < selfCapBytes,
271
+ exhausted: false,
272
+ committed: false,
273
+ settled: false
274
+ };
275
+ }
276
+ function commitObservationReservation(reservation) {
277
+ if (reservation.key === null || reservation.committed || reservation.settled) return;
278
+ if (reservation.callCapBytes <= 0) return;
279
+ reservation.committed = true;
280
+ const state = turnBudgets.get(reservation.key) ?? {
281
+ usedBytes: reservation.usedBeforeBytes,
282
+ lastSeenAt: Date.now()
283
+ };
284
+ state.usedBytes += reservation.callCapBytes;
285
+ state.lastSeenAt = Date.now();
286
+ turnBudgets.set(reservation.key, state);
287
+ }
288
+ function releaseObservation(reservation) {
289
+ if (reservation.key === null || reservation.settled) return;
290
+ reservation.settled = true;
291
+ if (!reservation.committed) return;
292
+ const state = turnBudgets.get(reservation.key);
293
+ if (state === void 0) return;
294
+ state.usedBytes = Math.max(0, state.usedBytes - reservation.callCapBytes);
295
+ state.lastSeenAt = Date.now();
296
+ turnBudgets.set(reservation.key, state);
297
+ }
298
+ function recordSpentBytes(reservation, bytes) {
299
+ if (reservation.key === null || reservation.settled) return;
300
+ reservation.settled = true;
301
+ const committedBytes = reservation.committed ? reservation.callCapBytes : 0;
302
+ const state = turnBudgets.get(reservation.key) ?? {
303
+ usedBytes: reservation.usedBeforeBytes + committedBytes,
304
+ lastSeenAt: Date.now()
305
+ };
306
+ state.usedBytes = Math.max(0, state.usedBytes + bytes - committedBytes);
307
+ state.lastSeenAt = Date.now();
308
+ turnBudgets.set(reservation.key, state);
309
+ }
310
+ function budgetDetails(reservation) {
311
+ if (reservation.key === null) return null;
312
+ return {
313
+ limitBytes: reservation.limitBytes,
314
+ usedBeforeBytes: reservation.usedBeforeBytes,
315
+ exhausted: reservation.exhausted
316
+ };
317
+ }
318
+ function observationBudgetExhausted(input) {
319
+ const { tool, unit, reservation, subject, hint } = input;
320
+ const output = `[observation budget exhausted for this turn before ${tool} ${subject}: ${formatSize(
321
+ reservation.usedBeforeBytes
322
+ )} already returned of ${formatSize(reservation.limitBytes)}. ${hint}]`;
323
+ const shownBytes = byteLength(output);
324
+ recordSpentBytes(reservation, shownBytes);
325
+ const budget = budgetDetails(reservation);
326
+ const observation = {
327
+ tool,
328
+ unit,
329
+ shownCount: 0,
330
+ totalCount: null,
331
+ shownBytes,
332
+ // The notice message is the whole rendering here (the search never ran), so
333
+ // the full size is the message itself; keep totalBytes >= shownBytes.
334
+ totalBytes: shownBytes,
335
+ truncated: true,
336
+ format: "text",
337
+ ...budget !== null ? { budget } : {}
338
+ };
339
+ return { kind: "ok", output, details: { observation } };
340
+ }
341
+ function noticeLine(input, bodyBytes, totalBytes, offloadPath, next) {
342
+ const totalSegment = input.totalCount === null ? `${input.shownCount}+` : String(input.totalCount);
343
+ const parts = [
344
+ `${input.tool}: ${input.shownCount}/${totalSegment} ${input.unit} shown (${formatSize(bodyBytes)} of ${formatSize(totalBytes)})`
345
+ ];
346
+ if (offloadPath !== null) parts.push(offloadPointer(offloadPath));
347
+ if (next !== void 0 && next.length > 0) parts.push(`next: ${next}`);
348
+ return `[${parts.join(" | ")}]`;
349
+ }
350
+ function limitedBudgetNote(reservation) {
351
+ return `[Per-turn observation budget: ${formatSize(reservation.usedBeforeBytes)} already returned of ${formatSize(
352
+ reservation.limitBytes
353
+ )} before this call. Use narrower arguments or continue in a follow-up turn for more content.]`;
354
+ }
355
+ function jsonStubBudgetNote(reservation) {
356
+ return `per-turn observation budget nearly exhausted: ${formatSize(reservation.usedBeforeBytes)} of ${formatSize(reservation.limitBytes)} already returned this turn. Do not retry this call; answer from what you have gathered, or continue in a follow-up turn.`;
357
+ }
358
+ function finalizeObservation(input) {
359
+ const format = input.format ?? "text";
360
+ let output = input.output;
361
+ let truncated = input.truncated;
362
+ let shownCount = input.shownCount;
363
+ let offloadPath = null;
364
+ const bodyBytes = byteLength(output);
365
+ const totalBytes = input.totalBytes ?? byteLength(input.fullOutput ?? input.output);
366
+ const next = boundContinuation(input.next);
367
+ if (format === "json" && bodyBytes > input.reservation.callCapBytes) {
368
+ truncated = true;
369
+ shownCount = 0;
370
+ offloadPath = writeToolOffload(input.fullOutput ?? output, input.options);
371
+ const poolBound = input.reservation.limited;
372
+ output = JSON.stringify({
373
+ error: `result exceeded ${formatSize(input.reservation.callCapBytes)}`,
374
+ ...poolBound ? { budget: jsonStubBudgetNote(input.reservation) } : {},
375
+ ...offloadPath !== null ? { offloadPath } : {},
376
+ ...!poolBound && next !== void 0 && next.length > 0 ? { next } : {}
377
+ });
378
+ } else if (truncated && input.fullOutput !== void 0) {
379
+ offloadPath = writeToolOffload(input.fullOutput, input.options);
380
+ }
381
+ if (format === "text") {
382
+ if (truncated && input.omitNotice !== true)
383
+ output += `
384
+
385
+ ${noticeLine(input, bodyBytes, totalBytes, offloadPath, next)}`;
386
+ if (input.reservation.limited && !input.reservation.exhausted) {
387
+ output += `
388
+
389
+ ${limitedBudgetNote(input.reservation)}`;
390
+ }
391
+ }
392
+ const shownBytes = byteLength(output);
393
+ recordSpentBytes(input.reservation, shownBytes);
394
+ const budget = budgetDetails(input.reservation);
395
+ const observation = {
396
+ tool: input.tool,
397
+ unit: input.unit,
398
+ shownCount,
399
+ totalCount: input.totalCount,
400
+ shownBytes,
401
+ // shownBytes counts the appended notice/limited-budget lines; totalBytes
402
+ // measured only the pre-notice rendering (and equals it when a count-limited
403
+ // tool like ls offloads nothing). Floor the full-rendering size at the bytes
404
+ // actually returned so the envelope invariant totalBytes >= shownBytes holds.
405
+ totalBytes: Math.max(totalBytes, shownBytes),
406
+ truncated,
407
+ format,
408
+ ...next !== void 0 && next.length > 0 ? { next } : {},
409
+ ...offloadPath !== null ? { offloadPath } : {},
410
+ ...budget !== null ? { budget } : {}
411
+ };
412
+ return { kind: "ok", output, details: { ...input.details ?? {}, observation } };
413
+ }
414
+
415
+ export {
416
+ formatSize,
417
+ GREP_MAX_LINE_LENGTH,
418
+ truncateLine,
419
+ DEFAULT_MAX_LINES,
420
+ splitLinesForCounting,
421
+ truncateHead2 as truncateHead,
422
+ truncateTail2 as truncateTail,
423
+ writeToolOffload,
424
+ isSessionOffloadPath,
425
+ shapeToolResult,
426
+ OBSERVATION_POLICY_SLACK_BYTES,
427
+ OBSERVE_SELF_CAPS,
428
+ reserveObservation,
429
+ commitObservationReservation,
430
+ releaseObservation,
431
+ observationBudgetExhausted,
432
+ finalizeObservation
433
+ };
434
+ //# sourceMappingURL=chunk-VAKQQHWR.js.map
@@ -0,0 +1,128 @@
1
+ import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ toPosixPath
4
+ } from "./chunk-OQE5J4C6.js";
5
+ import {
6
+ init_esm_shims
7
+ } from "./chunk-3R73A4XB.js";
8
+
9
+ // src/tools/ignore-policy.ts
10
+ init_esm_shims();
11
+ import { existsSync } from "node:fs";
12
+ import { dirname, join } from "node:path";
13
+ var ALWAYS_EXCLUDED_DIRS = [".clio-coder", ".fallow", ".git"];
14
+ var GENERATED_DIRS = [
15
+ ".cache",
16
+ ".next",
17
+ ".pytest_cache",
18
+ ".turbo",
19
+ ".venv",
20
+ "build",
21
+ "coverage",
22
+ "dist",
23
+ "node_modules",
24
+ "target"
25
+ ];
26
+ function isInsideGitRepo(startPath) {
27
+ let current = startPath;
28
+ for (; ; ) {
29
+ if (existsSync(join(current, ".git"))) return true;
30
+ const parent = dirname(current);
31
+ if (parent === current) return false;
32
+ current = parent;
33
+ }
34
+ }
35
+ function excludedDirsFor(searchPath, includeIgnored) {
36
+ const segments = new Set(
37
+ toPosixPath(searchPath).split("/").filter((segment) => segment.length > 0)
38
+ );
39
+ const dirs = includeIgnored ? ALWAYS_EXCLUDED_DIRS : [...ALWAYS_EXCLUDED_DIRS, ...GENERATED_DIRS];
40
+ return dirs.filter((dir) => !segments.has(dir));
41
+ }
42
+ function rgIgnoreArgs(searchPath, includeIgnored) {
43
+ const args = ["--hidden"];
44
+ if (includeIgnored) args.push("--no-ignore");
45
+ else if (!isInsideGitRepo(searchPath)) args.push("--no-require-git");
46
+ for (const dir of excludedDirsFor(searchPath, includeIgnored)) args.push("--glob", `!**/${dir}/**`);
47
+ return args;
48
+ }
49
+ function fdIgnoreArgs(searchPath, includeIgnored) {
50
+ const args = ["--hidden"];
51
+ if (includeIgnored) args.push("--no-ignore");
52
+ else if (!isInsideGitRepo(searchPath)) args.push("--no-require-git");
53
+ for (const dir of excludedDirsFor(searchPath, includeIgnored)) args.push("--exclude", dir);
54
+ return args;
55
+ }
56
+ function fallbackIgnoredDirs(includeIgnored) {
57
+ return new Set(includeIgnored ? ALWAYS_EXCLUDED_DIRS : [...ALWAYS_EXCLUDED_DIRS, ...GENERATED_DIRS]);
58
+ }
59
+ function escapeRegExp(value) {
60
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
61
+ }
62
+ function escapeRegexChar(ch) {
63
+ return /[\\^$+?.()|{}]/.test(ch) ? `\\${ch}` : ch;
64
+ }
65
+ function escapeClassChar(ch) {
66
+ return /[\\\]^-]/.test(ch) ? `\\${ch}` : ch;
67
+ }
68
+ function normalizeGlobInput(input) {
69
+ return input.replace(/\\/g, "/");
70
+ }
71
+ function compileGlobRegex(pattern) {
72
+ const normalized = normalizeGlobInput(pattern);
73
+ if (normalized.length === 0) {
74
+ throw new Error("glob: pattern must not be empty");
75
+ }
76
+ let regex = "^";
77
+ for (let i = 0; i < normalized.length; ) {
78
+ const ch = normalized[i];
79
+ if (ch === void 0) break;
80
+ if (ch === "*") {
81
+ if (normalized[i + 1] === "*") {
82
+ if (normalized[i + 2] === "/") {
83
+ regex += "(?:.*\\/)?";
84
+ i += 3;
85
+ continue;
86
+ }
87
+ regex += ".*";
88
+ i += 2;
89
+ continue;
90
+ }
91
+ regex += "[^/]*";
92
+ i += 1;
93
+ continue;
94
+ }
95
+ if (ch === "?") {
96
+ regex += "[^/]";
97
+ i += 1;
98
+ continue;
99
+ }
100
+ if (ch === "[") {
101
+ const end = normalized.indexOf("]", i + 1);
102
+ if (end === -1) {
103
+ throw new Error(`glob: invalid pattern (unclosed character class): ${pattern}`);
104
+ }
105
+ const content = normalized.slice(i + 1, end);
106
+ if (content.length === 0) {
107
+ throw new Error(`glob: invalid pattern (empty character class): ${pattern}`);
108
+ }
109
+ regex += `[${Array.from(content).map(escapeClassChar).join("")}]`;
110
+ i = end + 1;
111
+ continue;
112
+ }
113
+ regex += escapeRegexChar(ch);
114
+ i += 1;
115
+ }
116
+ regex += "$";
117
+ return new RegExp(regex);
118
+ }
119
+
120
+ export {
121
+ rgIgnoreArgs,
122
+ fdIgnoreArgs,
123
+ fallbackIgnoredDirs,
124
+ escapeRegExp,
125
+ normalizeGlobInput,
126
+ compileGlobRegex
127
+ };
128
+ //# sourceMappingURL=chunk-VG7TBQIY.js.map