@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,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