@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,716 @@
1
+ import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ BROWSER_MODES,
4
+ maxOutputArg,
5
+ prepareVerifyArguments,
6
+ runVectorTool,
7
+ timeoutArg,
8
+ verifyToolSurface
9
+ } from "./chunk-ARBGF5F7.js";
10
+ import {
11
+ VERIFICATION_SCRIPT_FAMILY_HINT,
12
+ declaredVerificationScripts,
13
+ isVerificationScriptName
14
+ } from "./chunk-7MNJORFF.js";
15
+ import {
16
+ escapeRegExp
17
+ } from "./chunk-VG7TBQIY.js";
18
+ import {
19
+ resolveReadPath
20
+ } from "./chunk-OQE5J4C6.js";
21
+ import "./chunk-ECH6PKUQ.js";
22
+ import {
23
+ truncateUtf8
24
+ } from "./chunk-6XLNIQDB.js";
25
+ import "./chunk-5B2AEOW5.js";
26
+ import "./chunk-CGKSTWHD.js";
27
+ import {
28
+ combineSafeOutput,
29
+ resolveSafeCwd,
30
+ runCommandVector
31
+ } from "./chunk-SRF2PJNW.js";
32
+ import "./chunk-X75S7HFS.js";
33
+ import "./chunk-FQ4SKYE4.js";
34
+ import "./chunk-FCSXB6T2.js";
35
+ import "./chunk-YXLYO42X.js";
36
+ import "./chunk-BNAZZHFG.js";
37
+ import "./chunk-6EJMN2Y3.js";
38
+ import {
39
+ init_esm_shims
40
+ } from "./chunk-3R73A4XB.js";
41
+
42
+ // src/tools/verify/index.ts
43
+ init_esm_shims();
44
+
45
+ // src/tools/verify/frontend.ts
46
+ init_esm_shims();
47
+ import { existsSync, mkdtempSync, readFileSync, rmSync, statSync, writeFileSync } from "node:fs";
48
+ import { tmpdir } from "node:os";
49
+ import path from "node:path";
50
+ import { pathToFileURL } from "node:url";
51
+ import { Script } from "node:vm";
52
+ var VOID_HTML_TAGS = /* @__PURE__ */ new Set([
53
+ "area",
54
+ "base",
55
+ "br",
56
+ "col",
57
+ "embed",
58
+ "hr",
59
+ "img",
60
+ "input",
61
+ "link",
62
+ "meta",
63
+ "param",
64
+ "source",
65
+ "track",
66
+ "wbr"
67
+ ]);
68
+ var RAW_TEXT_TAGS = /* @__PURE__ */ new Set(["script", "style", "textarea", "title"]);
69
+ var OPTIONAL_END_TAGS = /* @__PURE__ */ new Set([
70
+ "li",
71
+ "dt",
72
+ "dd",
73
+ "p",
74
+ "td",
75
+ "th",
76
+ "tr",
77
+ "thead",
78
+ "tbody",
79
+ "tfoot",
80
+ "option",
81
+ "optgroup",
82
+ "caption",
83
+ "colgroup",
84
+ "rp",
85
+ "rt"
86
+ ]);
87
+ var JAVASCRIPT_TYPES = /* @__PURE__ */ new Set([
88
+ "",
89
+ "module",
90
+ "text/javascript",
91
+ "application/javascript",
92
+ "application/ecmascript",
93
+ "text/ecmascript"
94
+ ]);
95
+ async function runFrontendCheck(args, options) {
96
+ const pathArg = typeof args.path === "string" ? args.path.trim() : "";
97
+ if (pathArg.length === 0) return { kind: "error", message: "verify: check=frontend requires a path argument" };
98
+ let artifactPath;
99
+ try {
100
+ artifactPath = resolveReadPath(pathArg);
101
+ } catch (err) {
102
+ return { kind: "error", message: `verify: ${err instanceof Error ? err.message : String(err)}` };
103
+ }
104
+ if (!isInsideWorkspace(artifactPath)) {
105
+ return { kind: "error", message: `verify: path escapes workspace root: ${artifactPath}` };
106
+ }
107
+ if (!existsSync(artifactPath)) return { kind: "error", message: `verify: file not found: ${artifactPath}` };
108
+ if (!statSync(artifactPath).isFile()) return { kind: "error", message: `verify: not a file: ${artifactPath}` };
109
+ const browserMode = browserModeArg(args.browser);
110
+ const validateOptions = {
111
+ timeoutMs: timeoutArg(args),
112
+ maxOutputBytes: maxOutputArg(args)
113
+ };
114
+ if (options?.signal !== void 0) validateOptions.signal = options.signal;
115
+ const checks = [];
116
+ try {
117
+ await validateArtifact(artifactPath, checks, browserMode, validateOptions);
118
+ } catch (err) {
119
+ checks.push({
120
+ name: "validation",
121
+ status: "fail",
122
+ message: err instanceof Error ? err.message : String(err),
123
+ path: artifactPath
124
+ });
125
+ }
126
+ const failed = checks.filter((check) => check.status === "fail");
127
+ const details = resultDetails(artifactPath, browserMode, checks);
128
+ const output = renderChecks(artifactPath, checks);
129
+ if (failed.length > 0) {
130
+ return {
131
+ kind: "error",
132
+ message: `verify: ${failed.length} frontend check${failed.length === 1 ? "" : "s"} failed
133
+ ${output}`,
134
+ details
135
+ };
136
+ }
137
+ return { kind: "ok", output, details };
138
+ }
139
+ async function validateArtifact(artifactPath, checks, browserMode, options) {
140
+ const ext = path.extname(artifactPath).toLowerCase();
141
+ const content = readFileSync(artifactPath, "utf8");
142
+ if (ext === ".html" || ext === ".htm") {
143
+ await validateHtml(artifactPath, content, checks, browserMode, options);
144
+ return;
145
+ }
146
+ if (ext === ".css") {
147
+ validateCss(content, `${artifactPath}`, checks, artifactPath);
148
+ return;
149
+ }
150
+ if (isJavaScriptPath(artifactPath)) {
151
+ await validateJavaScriptFile(artifactPath, content, checks, options);
152
+ return;
153
+ }
154
+ checks.push({
155
+ name: "artifact type",
156
+ status: "fail",
157
+ message: "expected an .html, .htm, .css, .js, .mjs, or .cjs artifact",
158
+ path: artifactPath
159
+ });
160
+ }
161
+ async function validateHtml(artifactPath, content, checks, browserMode, options) {
162
+ validateHtmlStructure(content, checks, artifactPath);
163
+ await validateHtmlScripts(artifactPath, content, checks, options);
164
+ validateHtmlStyles(artifactPath, content, checks);
165
+ await validateBrowserLoad(artifactPath, browserMode, checks, options);
166
+ }
167
+ function validateHtmlStructure(content, checks, artifactPath) {
168
+ const scan = content.replace(/<!--[\s\S]*?-->/g, (m) => m.replace(/[^\n]/g, " "));
169
+ const tagRe = /<\/?\s*([a-zA-Z][\w:-]*)(?:\s[^<>]*)?>/g;
170
+ const stack = [];
171
+ for (let match = tagRe.exec(scan); match !== null; match = tagRe.exec(scan)) {
172
+ const raw = match[0];
173
+ if (/^<!|^<\?/u.test(raw)) continue;
174
+ const tag = (match[1] ?? "").toLowerCase();
175
+ const isClosing = /^<\//u.test(raw);
176
+ const selfClosing = /\/\s*>$/u.test(raw) || VOID_HTML_TAGS.has(tag);
177
+ if (isClosing) {
178
+ while (stack.length > 0 && stack[stack.length - 1]?.tag !== tag && OPTIONAL_END_TAGS.has(stack[stack.length - 1]?.tag ?? "")) {
179
+ stack.pop();
180
+ }
181
+ const last = stack[stack.length - 1];
182
+ if (last && last.tag === tag) {
183
+ stack.pop();
184
+ continue;
185
+ }
186
+ if (OPTIONAL_END_TAGS.has(tag)) continue;
187
+ const expected = last ? ` expected </${last.tag}> from line ${last.line}` : "";
188
+ checks.push({
189
+ name: "html structure",
190
+ status: "fail",
191
+ message: `unexpected </${tag}> on line ${lineAt(scan, match.index)}${expected}`,
192
+ path: artifactPath
193
+ });
194
+ return;
195
+ }
196
+ if (selfClosing) continue;
197
+ if (RAW_TEXT_TAGS.has(tag)) {
198
+ const closeRe = new RegExp(`</\\s*${escapeRegExp(tag)}\\s*>`, "giu");
199
+ closeRe.lastIndex = tagRe.lastIndex;
200
+ const close = closeRe.exec(scan);
201
+ if (!close) {
202
+ checks.push({
203
+ name: "html structure",
204
+ status: "fail",
205
+ message: `missing </${tag}> for opening tag on line ${lineAt(scan, match.index)}`,
206
+ path: artifactPath
207
+ });
208
+ return;
209
+ }
210
+ tagRe.lastIndex = close.index + close[0].length;
211
+ continue;
212
+ }
213
+ stack.push({ tag, line: lineAt(scan, match.index) });
214
+ }
215
+ while (stack.length > 0 && OPTIONAL_END_TAGS.has(stack[stack.length - 1]?.tag ?? "")) {
216
+ stack.pop();
217
+ }
218
+ const unclosed = stack.pop();
219
+ if (unclosed) {
220
+ checks.push({
221
+ name: "html structure",
222
+ status: "fail",
223
+ message: `missing </${unclosed.tag}> for opening tag on line ${unclosed.line}`,
224
+ path: artifactPath
225
+ });
226
+ return;
227
+ }
228
+ checks.push({ name: "html structure", status: "pass", message: "tag structure is balanced", path: artifactPath });
229
+ }
230
+ async function validateHtmlScripts(artifactPath, content, checks, options) {
231
+ const scriptRe = /<script\b([^>]*)>([\s\S]*?)<\/script\s*>/giu;
232
+ let count = 0;
233
+ for (let match = scriptRe.exec(content); match !== null; match = scriptRe.exec(content)) {
234
+ count += 1;
235
+ const attrs = parseAttributes(match[1] ?? "");
236
+ const type = normalizeScriptType(attrs.type);
237
+ const src = attrs.src;
238
+ if (src !== void 0) {
239
+ if (!JAVASCRIPT_TYPES.has(type)) {
240
+ checks.push({ name: "script reference", status: "skip", message: `non-JavaScript script type skipped: ${type}` });
241
+ continue;
242
+ }
243
+ const local = resolveLocalReference(artifactPath, src);
244
+ if (local === null) {
245
+ checks.push({
246
+ name: "script reference",
247
+ status: "skip",
248
+ message: `external or root-relative script skipped: ${src}`
249
+ });
250
+ continue;
251
+ }
252
+ if (!isInsideWorkspace(local)) {
253
+ checks.push({
254
+ name: "script reference",
255
+ status: "fail",
256
+ message: `script escapes workspace root: ${src}`,
257
+ path: local
258
+ });
259
+ continue;
260
+ }
261
+ if (!existsSync(local)) {
262
+ checks.push({ name: "script reference", status: "fail", message: `script not found: ${src}`, path: local });
263
+ continue;
264
+ }
265
+ await validateJavaScriptFile(local, readFileSync(local, "utf8"), checks, options);
266
+ continue;
267
+ }
268
+ if (!JAVASCRIPT_TYPES.has(type)) {
269
+ checks.push({ name: "inline script", status: "skip", message: `non-JavaScript script type skipped: ${type}` });
270
+ continue;
271
+ }
272
+ const source = (match[2] ?? "").trim();
273
+ if (source.length === 0) {
274
+ checks.push({ name: "inline script", status: "skip", message: `inline script ${count} is empty` });
275
+ continue;
276
+ }
277
+ await validateJavaScript(
278
+ source,
279
+ type === "module" ? "module" : "script",
280
+ `${artifactPath} inline script ${count}`,
281
+ checks,
282
+ options,
283
+ artifactPath
284
+ );
285
+ }
286
+ if (count === 0)
287
+ checks.push({ name: "script validation", status: "skip", message: "no script tags found", path: artifactPath });
288
+ }
289
+ function validateHtmlStyles(artifactPath, content, checks) {
290
+ const styleRe = /<style\b[^>]*>([\s\S]*?)<\/style\s*>/giu;
291
+ let styleCount = 0;
292
+ for (let styleMatch = styleRe.exec(content); styleMatch !== null; styleMatch = styleRe.exec(content)) {
293
+ styleCount += 1;
294
+ validateCss(styleMatch[1] ?? "", `${artifactPath} inline style ${styleCount}`, checks, artifactPath);
295
+ }
296
+ const linkRe = /<link\b([^>]*)>/giu;
297
+ let stylesheetCount = 0;
298
+ for (let linkMatch = linkRe.exec(content); linkMatch !== null; linkMatch = linkRe.exec(content)) {
299
+ const attrs = parseAttributes(linkMatch[1] ?? "");
300
+ if (!isStylesheetLink(attrs)) continue;
301
+ stylesheetCount += 1;
302
+ const href = attrs.href;
303
+ if (href === void 0) {
304
+ checks.push({
305
+ name: "stylesheet reference",
306
+ status: "fail",
307
+ message: "stylesheet link is missing href",
308
+ path: artifactPath
309
+ });
310
+ continue;
311
+ }
312
+ const local = resolveLocalReference(artifactPath, href);
313
+ if (local === null) {
314
+ checks.push({
315
+ name: "stylesheet reference",
316
+ status: "skip",
317
+ message: `external or root-relative stylesheet skipped: ${href}`
318
+ });
319
+ continue;
320
+ }
321
+ if (!isInsideWorkspace(local)) {
322
+ checks.push({
323
+ name: "stylesheet reference",
324
+ status: "fail",
325
+ message: `stylesheet escapes workspace root: ${href}`,
326
+ path: local
327
+ });
328
+ continue;
329
+ }
330
+ if (!existsSync(local)) {
331
+ checks.push({ name: "stylesheet reference", status: "fail", message: `stylesheet not found: ${href}`, path: local });
332
+ continue;
333
+ }
334
+ validateCss(readFileSync(local, "utf8"), `${local}`, checks, local);
335
+ }
336
+ if (styleCount === 0 && stylesheetCount === 0) {
337
+ checks.push({
338
+ name: "style validation",
339
+ status: "skip",
340
+ message: "no style tags or stylesheet links found",
341
+ path: artifactPath
342
+ });
343
+ }
344
+ }
345
+ async function validateJavaScriptFile(filePath, content, checks, options) {
346
+ const ext = path.extname(filePath).toLowerCase();
347
+ if (ext === ".mjs") {
348
+ await validateJavaScript(content, "module", filePath, checks, options, filePath);
349
+ return;
350
+ }
351
+ if (ext === ".cjs") {
352
+ await validateJavaScript(content, "script", filePath, checks, options, filePath);
353
+ return;
354
+ }
355
+ const scriptCheck = checkClassicJavaScript(content, filePath);
356
+ if (scriptCheck === null) {
357
+ checks.push({ name: "javascript syntax", status: "pass", message: "classic script syntax is valid", path: filePath });
358
+ return;
359
+ }
360
+ const moduleCheck = await checkModuleJavaScript(content, filePath, options);
361
+ if (moduleCheck === null) {
362
+ checks.push({ name: "javascript syntax", status: "pass", message: "module syntax is valid", path: filePath });
363
+ return;
364
+ }
365
+ checks.push({
366
+ name: "javascript syntax",
367
+ status: "fail",
368
+ message: `script parse failed: ${scriptCheck}; module parse failed: ${moduleCheck}`,
369
+ path: filePath
370
+ });
371
+ }
372
+ async function validateJavaScript(source, mode, label, checks, options, filePath) {
373
+ const error = mode === "module" ? await checkModuleJavaScript(source, label, options) : checkClassicJavaScript(source, label);
374
+ if (error === null) {
375
+ checks.push({
376
+ name: "javascript syntax",
377
+ status: "pass",
378
+ message: `${mode} syntax is valid: ${label}`,
379
+ ...filePath !== void 0 ? { path: filePath } : {}
380
+ });
381
+ return;
382
+ }
383
+ checks.push({
384
+ name: "javascript syntax",
385
+ status: "fail",
386
+ message: `${mode} syntax error in ${label}: ${error}`,
387
+ ...filePath !== void 0 ? { path: filePath } : {}
388
+ });
389
+ }
390
+ function checkClassicJavaScript(source, label) {
391
+ try {
392
+ new Script(source, { filename: label });
393
+ return null;
394
+ } catch (err) {
395
+ return err instanceof Error ? err.message : String(err);
396
+ }
397
+ }
398
+ async function checkModuleJavaScript(source, label, options) {
399
+ const dir = mkdtempSync(path.join(tmpdir(), "clio-frontend-check-"));
400
+ const file = path.join(dir, "module.mjs");
401
+ try {
402
+ writeFileSync(file, source, "utf8");
403
+ const result = await runCommandVector(process.execPath, ["--check", file], {
404
+ timeoutMs: options.timeoutMs,
405
+ maxOutputBytes: options.maxOutputBytes,
406
+ ...options.signal !== void 0 ? { signal: options.signal } : {}
407
+ });
408
+ if (result.exitCode === 0 && !result.timedOut && !result.aborted && !result.outputCapped) return null;
409
+ return `${label}: ${truncateUtf8(combineSafeOutput(result).trim(), 600, " [truncated]") || "node --check failed"}`;
410
+ } catch (err) {
411
+ return err instanceof Error ? err.message : String(err);
412
+ } finally {
413
+ rmSync(dir, { recursive: true, force: true });
414
+ }
415
+ }
416
+ function validateCss(source, label, checks, filePath) {
417
+ let depth = 0;
418
+ let quote = null;
419
+ let escaped = false;
420
+ let inComment = false;
421
+ for (let index = 0; index < source.length; index += 1) {
422
+ const char = source[index];
423
+ const next = source[index + 1];
424
+ if (inComment) {
425
+ if (char === "*" && next === "/") {
426
+ inComment = false;
427
+ index += 1;
428
+ }
429
+ continue;
430
+ }
431
+ if (quote !== null) {
432
+ if (escaped) {
433
+ escaped = false;
434
+ continue;
435
+ }
436
+ if (char === "\\") {
437
+ escaped = true;
438
+ continue;
439
+ }
440
+ if (char === quote) quote = null;
441
+ continue;
442
+ }
443
+ if (char === "/" && next === "*") {
444
+ inComment = true;
445
+ index += 1;
446
+ continue;
447
+ }
448
+ if (char === "'" || char === '"') {
449
+ quote = char;
450
+ continue;
451
+ }
452
+ if (char === "{") depth += 1;
453
+ if (char === "}") {
454
+ if (depth === 0) {
455
+ checks.push({
456
+ name: "css syntax",
457
+ status: "fail",
458
+ message: `unexpected } in ${label} on line ${lineAt(source, index)}`,
459
+ path: filePath
460
+ });
461
+ return;
462
+ }
463
+ depth -= 1;
464
+ }
465
+ }
466
+ if (inComment) {
467
+ checks.push({ name: "css syntax", status: "fail", message: `unterminated comment in ${label}`, path: filePath });
468
+ return;
469
+ }
470
+ if (quote !== null) {
471
+ checks.push({ name: "css syntax", status: "fail", message: `unterminated string in ${label}`, path: filePath });
472
+ return;
473
+ }
474
+ if (depth !== 0) {
475
+ checks.push({ name: "css syntax", status: "fail", message: `unclosed { block in ${label}`, path: filePath });
476
+ return;
477
+ }
478
+ checks.push({ name: "css syntax", status: "pass", message: `balanced CSS syntax: ${label}`, path: filePath });
479
+ }
480
+ async function validateBrowserLoad(artifactPath, browserMode, checks, options) {
481
+ if (browserMode === "off") {
482
+ checks.push({ name: "browser load", status: "skip", message: "browser check disabled", path: artifactPath });
483
+ return;
484
+ }
485
+ const browser = findBrowserExecutable();
486
+ if (browser === null) {
487
+ checks.push({
488
+ name: "browser load",
489
+ status: browserMode === "required" ? "fail" : "warn",
490
+ message: "no supported headless browser executable found on PATH",
491
+ path: artifactPath
492
+ });
493
+ return;
494
+ }
495
+ const result = await runCommandVector(
496
+ browser,
497
+ [
498
+ "--headless=new",
499
+ "--disable-gpu",
500
+ "--no-sandbox",
501
+ "--disable-dev-shm-usage",
502
+ "--dump-dom",
503
+ pathToFileURL(artifactPath).href
504
+ ],
505
+ {
506
+ timeoutMs: options.timeoutMs,
507
+ maxOutputBytes: options.maxOutputBytes,
508
+ ...options.signal !== void 0 ? { signal: options.signal } : {}
509
+ }
510
+ );
511
+ if (result.exitCode === 0 && !result.timedOut && !result.aborted && !result.outputCapped) {
512
+ checks.push({
513
+ name: "browser load",
514
+ status: "pass",
515
+ message: `loaded with ${path.basename(browser)}`,
516
+ path: artifactPath
517
+ });
518
+ return;
519
+ }
520
+ const output = truncateUtf8(combineSafeOutput(result).trim(), 800, " [truncated]");
521
+ checks.push({
522
+ name: "browser load",
523
+ status: "fail",
524
+ message: `headless browser exited with ${result.exitCode ?? result.signal ?? "unknown"}${output ? `: ${output}` : ""}`,
525
+ path: artifactPath
526
+ });
527
+ }
528
+ function parseAttributes(source) {
529
+ const attrs = {};
530
+ const attrRe = /([^\s"'<>/=]+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|([^\s"'=<>`]+)))?/g;
531
+ for (let match = attrRe.exec(source); match !== null; match = attrRe.exec(source)) {
532
+ const name = (match[1] ?? "").toLowerCase();
533
+ if (name.length === 0) continue;
534
+ attrs[name] = match[2] ?? match[3] ?? match[4] ?? "";
535
+ }
536
+ return attrs;
537
+ }
538
+ function normalizeScriptType(value) {
539
+ if (value === void 0) return "";
540
+ return value.split(";")[0]?.trim().toLowerCase() ?? "";
541
+ }
542
+ function isStylesheetLink(attrs) {
543
+ const rel = attrs.rel?.toLowerCase().split(/\s+/u) ?? [];
544
+ return rel.includes("stylesheet");
545
+ }
546
+ function resolveLocalReference(baseFile, raw) {
547
+ const trimmed = raw.trim();
548
+ if (trimmed.length === 0 || trimmed.startsWith("#")) return null;
549
+ if (/^(?:[a-z][a-z0-9+.-]*:)?\/\//iu.test(trimmed)) return null;
550
+ if (/^(?:data|mailto|tel|javascript):/iu.test(trimmed)) return null;
551
+ if (trimmed.startsWith("/")) return null;
552
+ const withoutFragment = trimmed.split("#")[0] ?? "";
553
+ const withoutQuery = withoutFragment.split("?")[0] ?? "";
554
+ if (withoutQuery.length === 0) return null;
555
+ try {
556
+ return path.resolve(path.dirname(baseFile), decodeURIComponent(withoutQuery));
557
+ } catch {
558
+ return path.resolve(path.dirname(baseFile), withoutQuery);
559
+ }
560
+ }
561
+ function isJavaScriptPath(filePath) {
562
+ const ext = path.extname(filePath).toLowerCase();
563
+ return ext === ".js" || ext === ".mjs" || ext === ".cjs";
564
+ }
565
+ function isInsideWorkspace(filePath) {
566
+ const rel = path.relative(process.cwd(), filePath);
567
+ return rel === "" || !rel.startsWith("..") && !path.isAbsolute(rel);
568
+ }
569
+ function browserModeArg(value) {
570
+ return typeof value === "string" && BROWSER_MODES.includes(value) ? value : "auto";
571
+ }
572
+ function resultDetails(artifactPath, browserMode, checks) {
573
+ return {
574
+ action: "verify",
575
+ check: "frontend",
576
+ path: artifactPath,
577
+ browserMode,
578
+ status: checks.some((check) => check.status === "fail") ? "failed" : "passed",
579
+ checks: checks.map((check) => ({ ...check }))
580
+ };
581
+ }
582
+ function renderChecks(artifactPath, checks) {
583
+ const lines = [
584
+ `frontend validation: ${checks.some((check) => check.status === "fail") ? "failed" : "ok"}`,
585
+ `artifact: ${artifactPath}`,
586
+ "checks:"
587
+ ];
588
+ for (const check of checks) {
589
+ const location = check.path ? ` (${check.path})` : "";
590
+ lines.push(`- ${check.status} ${check.name}${location}: ${check.message}`);
591
+ }
592
+ return `${lines.join("\n")}
593
+ `;
594
+ }
595
+ function findBrowserExecutable() {
596
+ const candidates = ["chromium", "chromium-browser", "google-chrome", "google-chrome-stable", "microsoft-edge"];
597
+ const pathEnv = process.env.PATH ?? "";
598
+ for (const dir of pathEnv.split(path.delimiter)) {
599
+ if (dir.length === 0) continue;
600
+ for (const candidate of candidates) {
601
+ const full = path.join(dir, candidate);
602
+ if (existsSync(full)) return full;
603
+ }
604
+ }
605
+ return null;
606
+ }
607
+ function lineAt(text, index) {
608
+ let line = 1;
609
+ for (let i = 0; i < index; i += 1) {
610
+ if (text.charCodeAt(i) === 10) line += 1;
611
+ }
612
+ return line;
613
+ }
614
+
615
+ // src/tools/verify/scripts.ts
616
+ init_esm_shims();
617
+ import { existsSync as existsSync2, readFileSync as readFileSync2 } from "node:fs";
618
+ import path2 from "node:path";
619
+ function declaredCheckSources(cwd) {
620
+ const pkgPath = path2.join(cwd, "package.json");
621
+ if (!existsSync2(pkgPath)) return [];
622
+ const pkg = parsePackageJson(pkgPath);
623
+ if (!pkg.ok) return [];
624
+ return [{ kind: "package.json", path: pkgPath, checks: declaredVerificationScripts(pkg.scripts) }];
625
+ }
626
+ function listChecks(cwdArg) {
627
+ let cwd;
628
+ try {
629
+ cwd = resolveSafeCwd(cwdArg, process.cwd());
630
+ } catch (err) {
631
+ return { kind: "error", message: `verify: ${err instanceof Error ? err.message : String(err)}` };
632
+ }
633
+ const sources = declaredCheckSources(cwd);
634
+ const lines = [];
635
+ if (sources.length === 0 || sources.every((source) => source.checks.length === 0)) {
636
+ lines.push("No declared verification checks found (no package.json verification scripts).");
637
+ } else {
638
+ lines.push("Declared verification checks:");
639
+ for (const source of sources) {
640
+ lines.push(`${source.kind}:`);
641
+ for (const check of source.checks) lines.push(`- ${check}`);
642
+ }
643
+ }
644
+ lines.push(
645
+ "",
646
+ 'Run one with verify(check="<name>"). verify(check="frontend", path=<file>) validates an HTML/CSS/JS artifact.'
647
+ );
648
+ return {
649
+ kind: "ok",
650
+ output: lines.join("\n"),
651
+ details: { sources: sources.map((source) => ({ ...source })) }
652
+ };
653
+ }
654
+ async function runScriptCheck(check, args, options) {
655
+ let cwd;
656
+ try {
657
+ cwd = resolveSafeCwd(typeof args.cwd === "string" && args.cwd.length > 0 ? args.cwd : void 0, process.cwd());
658
+ } catch (err) {
659
+ return { kind: "error", message: `verify: ${err instanceof Error ? err.message : String(err)}` };
660
+ }
661
+ const pkgPath = path2.join(cwd, "package.json");
662
+ if (!existsSync2(pkgPath)) return { kind: "error", message: `verify: package.json not found in ${cwd}` };
663
+ const pkg = parsePackageJson(pkgPath);
664
+ if (!pkg.ok) return { kind: "error", message: `verify: ${pkg.reason}` };
665
+ if (!Object.hasOwn(pkg.scripts, check)) {
666
+ const declared = declaredVerificationScripts(pkg.scripts);
667
+ const list = declared.length > 0 ? declared.join(", ") : "(none)";
668
+ return {
669
+ kind: "error",
670
+ message: `verify: package.json has no '${check}' script. Declared verification checks: ${list}.`
671
+ };
672
+ }
673
+ const extraArgs = Array.isArray(args.args) ? args.args.filter((entry) => typeof entry === "string") : [];
674
+ const vector = ["run", check];
675
+ if (extraArgs.length > 0) vector.push("--", ...extraArgs);
676
+ return runVectorTool("verify", "npm", vector, { ...args, cwd }, options);
677
+ }
678
+ function parsePackageJson(pkgPath) {
679
+ try {
680
+ const parsed = JSON.parse(readFileSync2(pkgPath, "utf8"));
681
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
682
+ return { ok: false, reason: "package.json root must be an object" };
683
+ }
684
+ const scripts = parsed.scripts;
685
+ if (!scripts || typeof scripts !== "object" || Array.isArray(scripts)) {
686
+ return { ok: false, reason: "package.json has no scripts object" };
687
+ }
688
+ return { ok: true, scripts };
689
+ } catch (err) {
690
+ return { ok: false, reason: err instanceof Error ? err.message : String(err) };
691
+ }
692
+ }
693
+
694
+ // src/tools/verify/index.ts
695
+ var verifyTool = {
696
+ ...verifyToolSurface,
697
+ async run(rawArgs, options) {
698
+ const args = prepareVerifyArguments(rawArgs);
699
+ const check = typeof args.check === "string" ? args.check.trim() : "";
700
+ if (check.length === 0) {
701
+ return listChecks(typeof args.cwd === "string" && args.cwd.length > 0 ? args.cwd : void 0);
702
+ }
703
+ if (check === "frontend") return runFrontendCheck(args, options);
704
+ if (!isVerificationScriptName(check)) {
705
+ return {
706
+ kind: "error",
707
+ message: `verify: '${check}' is not a verification check (${VERIFICATION_SCRIPT_FAMILY_HINT} or "frontend"); run it through bash.`
708
+ };
709
+ }
710
+ return runScriptCheck(check, args, options);
711
+ }
712
+ };
713
+ export {
714
+ verifyTool
715
+ };
716
+ //# sourceMappingURL=verify-G6V4D2G7.js.map