@iowarp/clio-coder 0.3.1 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (601) hide show
  1. package/CHANGELOG.md +233 -373
  2. package/CONTRIBUTING.md +23 -23
  3. package/README.md +284 -613
  4. package/dist/{acp-FPR54DGL.js → acp-P2AQILE2.js} +43 -53
  5. package/dist/{agents-OGPIHPJH.js → agents-72W3BI7I.js} +43 -26
  6. package/dist/assets/codewiki.json +1 -1
  7. package/dist/{auth-IC3K6NIZ.js → auth-5TWEIYDN.js} +20 -12
  8. package/dist/chunk-2DJ2KNFG.js +2095 -0
  9. package/dist/{chunk-IS3ONKU3.js → chunk-2IR2NMPA.js} +6 -4
  10. package/dist/chunk-2SFS6XQE.js +122 -0
  11. package/dist/{chunk-PV4JUBVJ.js → chunk-2TLUCQVG.js} +40 -21
  12. package/dist/chunk-2VTFPG5O.js +48 -0
  13. package/dist/chunk-4BJ5BYCE.js +61 -0
  14. package/dist/{chunk-474KN5II.js → chunk-4BPJXDWC.js} +111 -181
  15. package/dist/chunk-4VP4KH3K.js +962 -0
  16. package/dist/chunk-4XUGQOHA.js +797 -0
  17. package/dist/chunk-4ZG3XFUR.js +77 -0
  18. package/dist/chunk-5B2AEOW5.js +5407 -0
  19. package/dist/{chunk-K2ITRMHZ.js → chunk-5TSRNF4G.js} +6 -138
  20. package/dist/{chunk-4QKXUHSR.js → chunk-5UFT4SUX.js} +70 -20
  21. package/dist/{chunk-OLBBMFRD.js → chunk-5UUP6MWO.js} +24 -62
  22. package/dist/chunk-65DEGPJ6.js +52 -0
  23. package/dist/chunk-6EJMN2Y3.js +17 -0
  24. package/dist/chunk-6N5PTWMY.js +136 -0
  25. package/dist/chunk-6SGHMWE3.js +277 -0
  26. package/dist/chunk-6XLNIQDB.js +27 -0
  27. package/dist/chunk-7CR24IG7.js +242 -0
  28. package/dist/chunk-7MNJORFF.js +22 -0
  29. package/dist/{chunk-KY56HMHH.js → chunk-A3CYT5EX.js} +125 -31
  30. package/dist/chunk-AGYYIBLL.js +1069 -0
  31. package/dist/{chunk-GB6QRBXN.js → chunk-APJ265NV.js} +54 -1187
  32. package/dist/{chunk-673JJUWJ.js → chunk-BMEMKKIT.js} +2 -2
  33. package/dist/chunk-CBCAPZAA.js +229 -0
  34. package/dist/chunk-CMZWFGD2.js +352 -0
  35. package/dist/chunk-COU2UHX6.js +400 -0
  36. package/dist/chunk-DSELYM6W.js +1077 -0
  37. package/dist/chunk-DUYJ5IO6.js +644 -0
  38. package/dist/chunk-ECH6PKUQ.js +39 -0
  39. package/dist/chunk-ED4KHGC3.js +143 -0
  40. package/dist/chunk-EKMEHE4H.js +340 -0
  41. package/dist/chunk-FCSXB6T2.js +338 -0
  42. package/dist/chunk-FJ3H4MN5.js +48 -0
  43. package/dist/{chunk-RPTR2H26.js → chunk-FNTMWMX5.js} +21 -15
  44. package/dist/chunk-FQ4SKYE4.js +29 -0
  45. package/dist/chunk-G4BMMOKF.js +182 -0
  46. package/dist/{chunk-ZPY3JZ5E.js → chunk-GGXXDWE4.js} +183 -1233
  47. package/dist/chunk-HC4CLZ2Y.js +68 -0
  48. package/dist/{chunk-LU4TK2PR.js → chunk-HFSBBKSQ.js} +5 -56
  49. package/dist/{chunk-PIUMUEMV.js → chunk-HKIYEGME.js} +10 -6
  50. package/dist/chunk-I4HZDVNP.js +73 -0
  51. package/dist/chunk-IKCO5N3L.js +162 -0
  52. package/dist/chunk-IR4CFBFN.js +56 -0
  53. package/dist/{chunk-R5KLMSBV.js → chunk-J5Q24KAG.js} +2 -2
  54. package/dist/chunk-J7CWMCQD.js +255 -0
  55. package/dist/{chunk-K5XEMXTI.js → chunk-JVCV3ICN.js} +1 -1
  56. package/dist/chunk-KZWTDYJF.js +217 -0
  57. package/dist/chunk-LBMZMYH2.js +285 -0
  58. package/dist/{chunk-G34LV2PF.js → chunk-LM5TQCJZ.js} +84 -170
  59. package/dist/chunk-LW6DSM3M.js +5135 -0
  60. package/dist/chunk-LWLEKMDQ.js +3482 -0
  61. package/dist/{chunk-H6F6BYOH.js → chunk-LZSJBIVT.js} +7003 -7434
  62. package/dist/{chunk-HQQID6OA.js → chunk-M6SHUN7Q.js} +5 -5
  63. package/dist/{chunk-FST4FYJB.js → chunk-MFFY33HR.js} +99 -140
  64. package/dist/{chunk-BSU2YIWB.js → chunk-MVVUPGPW.js} +131 -136
  65. package/dist/chunk-OAO4GE4M.js +619 -0
  66. package/dist/{chunk-Q3RUPKEJ.js → chunk-OC7FIQPC.js} +58 -189
  67. package/dist/chunk-OKGUZO2U.js +34 -0
  68. package/dist/{chunk-GAEBEQVI.js → chunk-OOJYHWRB.js} +32 -346
  69. package/dist/{chunk-Q5WJOSJ7.js → chunk-OQ33BKR3.js} +2 -1
  70. package/dist/chunk-OQE5J4C6.js +73 -0
  71. package/dist/{chunk-KKNLWXI6.js → chunk-ORBHGJC5.js} +8 -8
  72. package/dist/{chunk-MAR7Y6HW.js → chunk-PAJK6MAQ.js} +23 -16
  73. package/dist/{chunk-M5T5VO65.js → chunk-PIWWS5BL.js} +837 -635
  74. package/dist/chunk-POHLU5DW.js +1186 -0
  75. package/dist/chunk-QKMUKYO7.js +4961 -0
  76. package/dist/chunk-SRDMMSEP.js +16405 -0
  77. package/dist/chunk-SST6Z5JA.js +80 -0
  78. package/dist/chunk-STBPMHSX.js +2456 -0
  79. package/dist/chunk-T6YILFSB.js +80 -0
  80. package/dist/chunk-TZK7PACC.js +174 -0
  81. package/dist/chunk-TZTZS7QK.js +227 -0
  82. package/dist/{chunk-ASND7OZK.js → chunk-UFIIWP2H.js} +13 -13
  83. package/dist/chunk-UOV2BYIW.js +107 -0
  84. package/dist/{chunk-PFEFKVGL.js → chunk-V6RTAOC2.js} +13 -11
  85. package/dist/chunk-VAKQQHWR.js +434 -0
  86. package/dist/chunk-VG7TBQIY.js +128 -0
  87. package/dist/chunk-VJWL6YS5.js +244 -0
  88. package/dist/{chunk-EYOKLTMF.js → chunk-VPAYEGVX.js} +17 -3
  89. package/dist/chunk-WEH5XRJQ.js +32 -0
  90. package/dist/chunk-X4RCMKVQ.js +641 -0
  91. package/dist/{chunk-TEKV33Q5.js → chunk-X6IAEBZR.js} +65 -33
  92. package/dist/chunk-XBXAASKX.js +18 -0
  93. package/dist/chunk-XN3L4EYL.js +46 -0
  94. package/dist/{chunk-RDLVBZEO.js → chunk-YCWGATWI.js} +6 -4
  95. package/dist/chunk-YHZX5GEU.js +193 -0
  96. package/dist/chunk-YXLYO42X.js +91 -0
  97. package/dist/{chunk-NMOX6HFD.js → chunk-ZDOOVTXZ.js} +29 -77
  98. package/dist/chunk-ZI647VB5.js +37 -0
  99. package/dist/{chunk-C4PTHK7P.js → chunk-ZWLZP4ZT.js} +5 -5
  100. package/dist/chunk-ZWMF7253.js +1882 -0
  101. package/dist/cli/index.js +62 -54
  102. package/dist/clio-JOU4FXVA.js +25 -0
  103. package/dist/code-nav-7AX6FYE6.js +600 -0
  104. package/dist/codewiki/build-worker.js +66 -0
  105. package/dist/compile-cache-CVJMMODC.js +18 -0
  106. package/dist/{components-DMAOEKFB.js → components-KELWS457.js} +11 -6
  107. package/dist/{config-IRUQ7SE4.js → config-XCDVKR23.js} +92 -55
  108. package/dist/configure-4GAP54ZW.js +42 -0
  109. package/dist/{context-5RADCKTR.js → context-4UOGGLQ5.js} +71 -35
  110. package/dist/context-5VKGUVJJ.js +866 -0
  111. package/dist/{context-3KWFLHJG.js → context-77FM5DV5.js} +15 -13
  112. package/dist/{context-clear-7TSNPAAI.js → context-clear-XXJRLCJJ.js} +54 -28
  113. package/dist/{context-index-W4RLWOQH.js → context-index-BZ4UYMTC.js} +30 -24
  114. package/dist/dispatch-runner-QPRDDBDX.js +1997 -0
  115. package/dist/{docs-5AWSPS37.js → docs-2C2LTVT2.js} +23 -10
  116. package/dist/{doctor-UC5NAJYQ.js → doctor-HR46URBJ.js} +27 -17
  117. package/dist/{eval-U6TJHRLX.js → eval-XSSNATB4.js} +29 -16
  118. package/dist/{evidence-YEGUW4L3.js → evidence-6HG2PY2B.js} +46 -26
  119. package/dist/{evolve-TXARCTPG.js → evolve-K7YU3NCY.js} +45 -25
  120. package/dist/{extensions-OZFJ3A3G.js → extensions-QVDOHDGJ.js} +16 -7
  121. package/dist/{fleet-6G3DHNYE.js → fleet-VY3HHKN6.js} +163 -54
  122. package/dist/{fleet-preflight-DSNT37JK.js → fleet-preflight-DDN536IT.js} +7 -4
  123. package/dist/{init-KZ5QTF6M.js → init-JYGXI3FK.js} +69 -32
  124. package/dist/{memory-73ESV5YC.js → memory-WFZMGYHX.js} +48 -27
  125. package/dist/{models-A4PVNWJK.js → models-I5QWSEOM.js} +39 -25
  126. package/dist/monitor-GE4ID3IA.js +661 -0
  127. package/dist/{chunk-FCIH3BIZ.js → orchestrator-EM5MC3HM.js} +15979 -12407
  128. package/dist/{paths-C4H6IV77.js → paths-UXLN5YYZ.js} +10 -5
  129. package/dist/{preload-6WVMHX3A.js → preload-P6DGH2PZ.js} +2 -2
  130. package/dist/{reset-BGW6OGMV.js → reset-L2FQEE3E.js} +16 -10
  131. package/dist/{run-YTPEYQOH.js → run-ZU3QMZPZ.js} +101 -61
  132. package/dist/{share-YIFFV4NQ.js → share-S5BZQC5I.js} +15 -8
  133. package/dist/{skills-2V6RA3OQ.js → skills-X5VXCRNQ.js} +34 -14
  134. package/dist/{skills-eval-S2TVJO4F.js → skills-eval-WKIHWTHR.js} +70 -34
  135. package/dist/steer-GGWFUJUD.js +77 -0
  136. package/dist/{targets-TYXLPB23.js → targets-SNCPI2NR.js} +43 -27
  137. package/dist/terminal-lease-BNAHVHBS.js +395 -0
  138. package/dist/{trace-GGOJ6Q6Z.js → trace-PNCASAXC.js} +41 -16
  139. package/dist/{chunk-N6F52NLF.js → tree-sitter-HGKH6LG4.js} +28 -2306
  140. package/dist/{uninstall-LLLT4F4W.js → uninstall-FZCQCDKC.js} +10 -5
  141. package/dist/{upgrade-33G2LMM5.js → upgrade-JQHHPQ4K.js} +45 -25
  142. package/dist/{usage-ZAFSXKKG.js → usage-OR4O5SMZ.js} +62 -31
  143. package/dist/verify-375KUB3Y.js +716 -0
  144. package/dist/web-fetch-2YHJ3KTG.js +638 -0
  145. package/dist/{wiki-generate-NUQCVOQ3.js → wiki-generate-UEXP2ARI.js} +74 -34
  146. package/dist/worker/entry.js +221 -36
  147. package/dist/workspace-G4ZWUIPR.js +22 -0
  148. package/docs/README.md +22 -17
  149. package/docs/acp.md +168 -16
  150. package/docs/alcf-provider.md +1 -1
  151. package/docs/architecture.md +136 -7
  152. package/docs/artifact-versions.md +1 -1
  153. package/docs/built-in-agents.md +1 -1
  154. package/docs/capacity-and-scheduling.md +1 -1
  155. package/docs/commands-and-modes.md +114 -71
  156. package/docs/config-knobs-audit.md +1 -3
  157. package/docs/configuration-and-targets.md +174 -46
  158. package/docs/context-engine.md +29 -6
  159. package/docs/development-pipeline.md +26 -1
  160. package/docs/dispatch-architecture-rationale.md +1 -1
  161. package/docs/documentation-coverage.md +2 -2
  162. package/docs/documentation-guide.md +1 -1
  163. package/docs/environment-variables.md +13 -5
  164. package/docs/eval-runner.md +1 -1
  165. package/docs/evals-internal.md +1 -1
  166. package/docs/evidence-and-memory.md +6 -2
  167. package/docs/evolution.md +2 -2
  168. package/docs/exit-codes-and-output.md +15 -9
  169. package/docs/extensions-and-sharing.md +9 -9
  170. package/docs/fleet-dispatch.md +7 -5
  171. package/docs/git-commit-provenance.md +120 -0
  172. package/docs/glossary.md +1 -1
  173. package/docs/installation-and-lifecycle.md +34 -27
  174. package/docs/middleware-and-components.md +1 -1
  175. package/docs/model-catalog.md +45 -14
  176. package/docs/observability.md +8 -5
  177. package/docs/performance-methodology.md +491 -0
  178. package/docs/pi-boundary.md +72 -0
  179. package/docs/proactive-memory.md +3 -3
  180. package/docs/prompt-envelope-and-tools.md +24 -3
  181. package/docs/provider-adapter-cookbook.md +57 -4
  182. package/docs/release-cut-checklist.md +129 -115
  183. package/docs/safety-model.md +9 -5
  184. package/docs/scientific-validation.md +3 -3
  185. package/docs/session-lifecycle.md +55 -12
  186. package/docs/skills-marketplace.md +12 -8
  187. package/docs/time-conventions.md +1 -1
  188. package/docs/tool-usage.md +3 -3
  189. package/docs/trace-store.md +1 -1
  190. package/docs/troubleshooting.md +10 -7
  191. package/docs/tui-design.md +47 -10
  192. package/docs/worker-dispatch-mechanics.md +1 -1
  193. package/package.json +19 -22
  194. package/skills/coding/ast-grep/SKILL.md +136 -0
  195. package/skills/coding/ast-grep/evals.md +56 -0
  196. package/skills/coding/ast-grep/references/rule_reference.md +297 -0
  197. package/skills/coding/coding-standards/SKILL.md +113 -0
  198. package/skills/coding/coding-standards/evals.md +34 -0
  199. package/skills/coding/prototype/SKILL.md +86 -0
  200. package/skills/coding/prototype/evals.md +42 -0
  201. package/skills/coding/prototype/references/LOGIC.md +67 -0
  202. package/skills/coding/prototype/references/UI.md +112 -0
  203. package/skills/coding/tdd/SKILL.md +101 -0
  204. package/skills/coding/tdd/evals.md +41 -0
  205. package/skills/coding/tdd/references/mocking.md +59 -0
  206. package/skills/coding/tdd/references/tests.md +77 -0
  207. package/skills/context/context-handoff/SKILL.md +126 -0
  208. package/skills/context/context-handoff/evals.md +57 -0
  209. package/skills/context/context-handoff/scripts/new-handoff.sh +26 -0
  210. package/skills/context/context-prime/SKILL.md +95 -0
  211. package/skills/context/context-prime/evals.md +54 -0
  212. package/skills/meta/clio-dev/SKILL.md +91 -0
  213. package/skills/meta/clio-dev/evals.md +45 -0
  214. package/skills/meta/clio-test/SKILL.md +130 -0
  215. package/skills/meta/clio-test/evals.md +43 -0
  216. package/skills/meta/clio-test/references/harness.md +97 -0
  217. package/skills/meta/clio-test/references/test-map.md +59 -0
  218. package/skills/meta/credentials/SKILL.md +125 -0
  219. package/skills/meta/credentials/evals.md +104 -0
  220. package/skills/meta/find-skills/SKILL.md +72 -0
  221. package/skills/meta/find-skills/evals.md +47 -0
  222. package/skills/meta/herdr/SKILL.md +127 -0
  223. package/skills/meta/herdr/evals.md +38 -0
  224. package/skills/meta/skill-craft/SKILL.md +102 -0
  225. package/skills/meta/skill-craft/evals.md +41 -0
  226. package/skills/planning/architecture/SKILL.md +129 -0
  227. package/skills/planning/architecture/evals.md +36 -0
  228. package/skills/planning/backlog/SKILL.md +90 -0
  229. package/skills/planning/backlog/evals.md +43 -0
  230. package/skills/planning/prd/SKILL.md +82 -0
  231. package/skills/planning/prd/evals.md +49 -0
  232. package/skills/planning/product-intent/SKILL.md +112 -0
  233. package/skills/planning/product-intent/evals.md +36 -0
  234. package/skills/planning/tech-spec/SKILL.md +115 -0
  235. package/skills/planning/tech-spec/evals.md +47 -0
  236. package/skills/registry.yaml +136 -0
  237. package/skills/research/arxiv-literature/SKILL.md +104 -0
  238. package/skills/research/arxiv-literature/evals.md +58 -0
  239. package/skills/research/experiment-protocol/SKILL.md +122 -0
  240. package/skills/research/experiment-protocol/evals.md +91 -0
  241. package/skills/research/scientific-debugging/SKILL.md +119 -0
  242. package/skills/research/scientific-debugging/evals.md +138 -0
  243. package/skills/research/scientific-modernization/SKILL.md +138 -0
  244. package/skills/research/scientific-modernization/evals.md +84 -0
  245. package/skills/workflow/design-council/SKILL.md +139 -0
  246. package/skills/workflow/design-council/evals.md +97 -0
  247. package/skills/workflow/grill-me/SKILL.md +186 -0
  248. package/skills/workflow/grill-me/evals.md +78 -0
  249. package/skills/workflow/workflow-distiller/SKILL.md +136 -0
  250. package/skills/workflow/workflow-distiller/evals.md +107 -0
  251. package/src/cli/acp.ts +31 -4
  252. package/src/cli/clio.ts +68 -6
  253. package/src/cli/config-inspect.ts +28 -22
  254. package/src/cli/configure.ts +47 -9
  255. package/src/cli/context-clear.ts +2 -2
  256. package/src/cli/context-index.ts +21 -23
  257. package/src/cli/context.ts +13 -8
  258. package/src/cli/default-target.ts +9 -17
  259. package/src/cli/docs.ts +11 -5
  260. package/src/cli/evidence.ts +4 -1
  261. package/src/cli/extensions.ts +10 -1
  262. package/src/cli/fleet.ts +47 -6
  263. package/src/cli/index.ts +55 -26
  264. package/src/cli/memory.ts +3 -1
  265. package/src/cli/models.ts +1 -1
  266. package/src/cli/modes/json-stream.ts +37 -1
  267. package/src/cli/modes/print.ts +24 -9
  268. package/src/cli/run.ts +2 -2
  269. package/src/cli/skills-eval.ts +23 -8
  270. package/src/cli/skills.ts +19 -4
  271. package/src/cli/targets.ts +4 -0
  272. package/src/cli/text-layout.ts +15 -5
  273. package/src/cli/trace.ts +62 -14
  274. package/src/cli/upgrade.ts +18 -2
  275. package/src/cli/usage.ts +10 -3
  276. package/src/cli/wiki-generate.ts +2 -1
  277. package/src/core/agent-environment.ts +7 -0
  278. package/src/core/bash-exec.ts +72 -1
  279. package/src/core/boot-trace.ts +9 -4
  280. package/src/core/bus-events.ts +20 -4
  281. package/src/core/commit-attribution.ts +157 -0
  282. package/src/core/compile-cache.ts +159 -0
  283. package/src/core/config.ts +131 -2
  284. package/src/core/defaults.ts +39 -5
  285. package/src/core/domain-loader.ts +12 -5
  286. package/src/core/git-commit-attribution.ts +387 -0
  287. package/src/core/incomplete-installation.ts +45 -0
  288. package/src/core/response-schema.ts +1 -1
  289. package/src/core/safe-exec.ts +13 -1
  290. package/src/core/settings-layers.ts +155 -21
  291. package/src/core/skill-activation.ts +1 -1
  292. package/src/core/startup-timer.ts +3 -3
  293. package/src/core/state-file-lock.ts +13 -1
  294. package/src/core/termination.ts +78 -5
  295. package/src/domains/config/classify.ts +15 -3
  296. package/src/domains/config/extension.ts +19 -13
  297. package/src/domains/config/index.ts +10 -0
  298. package/src/domains/config/keybindings.ts +45 -9
  299. package/src/domains/context/bootstrap-prompt.ts +1 -1
  300. package/src/domains/context/bootstrap.ts +111 -18
  301. package/src/domains/context/clear.ts +16 -11
  302. package/src/domains/context/clio-md.ts +111 -9
  303. package/src/domains/context/codewiki/artifact.ts +400 -0
  304. package/src/domains/context/codewiki/build-worker-protocol.ts +24 -0
  305. package/src/domains/context/codewiki/build-worker.ts +54 -0
  306. package/src/domains/context/codewiki/coordinator.ts +182 -0
  307. package/src/domains/context/codewiki/indexer.ts +59 -144
  308. package/src/domains/context/codewiki/paths.ts +67 -0
  309. package/src/domains/context/codewiki/schema.ts +80 -0
  310. package/src/domains/context/codewiki/tree-sitter.ts +1 -1
  311. package/src/domains/context/contract.ts +11 -5
  312. package/src/domains/context/extension.ts +94 -143
  313. package/src/domains/context/fingerprint.ts +3 -1
  314. package/src/domains/context/index.ts +12 -22
  315. package/src/domains/context/project-metadata.ts +19 -0
  316. package/src/domains/context/prompt-context.ts +9 -10
  317. package/src/domains/context/refresh.ts +29 -21
  318. package/src/domains/context/runtime.ts +17 -0
  319. package/src/domains/context/wiki/generate.ts +39 -34
  320. package/src/domains/context/wiki/plan.ts +1 -1
  321. package/src/domains/context/wiki/prompts.ts +21 -8
  322. package/src/domains/dispatch/code-step.ts +20 -1
  323. package/src/domains/dispatch/extension.ts +158 -21
  324. package/src/domains/dispatch/failure-classification.ts +6 -0
  325. package/src/domains/dispatch/fleet-commit-attribution.ts +56 -0
  326. package/src/domains/dispatch/orphan-recovery.ts +50 -8
  327. package/src/domains/dispatch/receipt-integrity.ts +5 -0
  328. package/src/domains/dispatch/state.ts +31 -6
  329. package/src/domains/dispatch/transport.ts +2 -1
  330. package/src/domains/dispatch/types.ts +14 -0
  331. package/src/domains/dispatch/worker-spawn.ts +21 -2
  332. package/src/domains/eval/metrics/context.ts +1 -1
  333. package/src/domains/eval/types.ts +0 -1
  334. package/src/domains/evidence/build.ts +41 -1
  335. package/src/domains/lifecycle/migrations/2026-08-18-lmstudio-runtime-id.ts +52 -0
  336. package/src/domains/lifecycle/migrations/index.ts +24 -4
  337. package/src/domains/middleware/hooks-io.ts +12 -0
  338. package/src/domains/middleware/skills-reminder.ts +30 -15
  339. package/src/domains/prompts/compiler.ts +142 -84
  340. package/src/domains/prompts/contract.ts +18 -2
  341. package/src/domains/prompts/extension.ts +39 -7
  342. package/src/domains/prompts/fragment-loader.ts +0 -1
  343. package/src/domains/prompts/fragments/identity/clio.md +2 -4
  344. package/src/domains/prompts/fragments/identity/docs-routing.md +10 -0
  345. package/src/domains/prompts/fragments/identity/self-awareness.md +1 -45
  346. package/src/domains/prompts/fragments/operating/contract.md +4 -50
  347. package/src/domains/prompts/fragments/operating/delegation.md +42 -0
  348. package/src/domains/prompts/fragments/operating/skills.md +26 -0
  349. package/src/domains/prompts/fragments/operating/worker.md +16 -0
  350. package/src/domains/prompts/fragments/safety/auto-edit.md +5 -5
  351. package/src/domains/prompts/fragments/safety/full-auto.md +3 -3
  352. package/src/domains/prompts/fragments/safety/read-only.md +4 -4
  353. package/src/domains/prompts/fragments/safety/suggest.md +2 -2
  354. package/src/domains/prompts/fragments/wiki/page.md +10 -0
  355. package/src/domains/prompts/fragments/wiki/plan.md +10 -0
  356. package/src/domains/prompts/preload.ts +3 -3
  357. package/src/domains/providers/auth/api-key.ts +1 -1
  358. package/src/domains/providers/auth/backend-file.ts +20 -10
  359. package/src/domains/providers/auth/backend-memory.ts +59 -4
  360. package/src/domains/providers/auth/boot-status.ts +65 -0
  361. package/src/domains/providers/auth/oauth.ts +2 -1
  362. package/src/domains/providers/auth/storage.ts +97 -38
  363. package/src/domains/providers/capabilities.ts +12 -4
  364. package/src/domains/providers/contract.ts +15 -4
  365. package/src/domains/providers/extension.ts +18 -6
  366. package/src/domains/providers/model-runtime-capabilities.ts +15 -4
  367. package/src/domains/providers/models/local-models/clio-local-coding-targets.yaml +118 -35
  368. package/src/domains/providers/plugins.ts +5 -3
  369. package/src/domains/providers/probe/fingerprint.ts +25 -5
  370. package/src/domains/providers/registry.ts +31 -10
  371. package/src/domains/providers/runtimes/boot-manifest.ts +55 -0
  372. package/src/domains/providers/runtimes/builtins.ts +2 -2
  373. package/src/domains/providers/runtimes/common/lmstudio-http.ts +423 -0
  374. package/src/domains/providers/runtimes/common/local-synth.ts +6 -7
  375. package/src/domains/providers/runtimes/local-native/lmstudio.ts +241 -0
  376. package/src/domains/providers/support.ts +6 -3
  377. package/src/domains/providers/types/local-model-quirks.ts +7 -9
  378. package/src/domains/providers/types/runtime-descriptor.ts +12 -1
  379. package/src/domains/providers/types/target-descriptor.ts +22 -0
  380. package/src/domains/resources/contract.ts +0 -1
  381. package/src/domains/resources/extension.ts +1 -3
  382. package/src/domains/resources/loader.ts +3 -4
  383. package/src/domains/resources/prompts/loader.ts +16 -2
  384. package/src/domains/resources/prompts/substitute.ts +1 -65
  385. package/src/domains/resources/skills/content-hash.ts +2 -0
  386. package/src/domains/resources/skills/install.ts +17 -0
  387. package/src/domains/resources/skills/loader.ts +17 -10
  388. package/src/domains/resources/skills/marketplace.ts +55 -9
  389. package/src/domains/safety/action-classifier.ts +4 -2
  390. package/src/domains/safety/audit.ts +8 -2
  391. package/src/domains/safety/extension.ts +1 -1
  392. package/src/domains/session/compaction/branch-summary.ts +3 -2
  393. package/src/domains/session/compaction/cut-point.ts +2 -1
  394. package/src/domains/session/compaction/tokens.ts +2 -1
  395. package/src/domains/session/context-ledger.ts +14 -0
  396. package/src/domains/session/contract.ts +15 -0
  397. package/src/domains/session/decision-board.ts +190 -0
  398. package/src/domains/session/entries.ts +66 -3
  399. package/src/domains/session/extension.ts +93 -12
  400. package/src/domains/session/retry.ts +10 -18
  401. package/src/domains/session/session-artifacts.ts +107 -0
  402. package/src/domains/session/task-board.ts +207 -13
  403. package/src/domains/session/tree/active-path.ts +44 -5
  404. package/src/domains/session/tree/fork.ts +26 -27
  405. package/src/domains/session/tree/preview.ts +2 -2
  406. package/src/domains/session/workspace/git-probe.ts +17 -11
  407. package/src/domains/user-tasks/store.ts +297 -0
  408. package/src/engine/acp/errors.ts +96 -0
  409. package/src/engine/acp/server.ts +1728 -146
  410. package/src/engine/acp/transport.ts +135 -14
  411. package/src/engine/acp/types.ts +26 -0
  412. package/src/engine/agent.ts +3 -3
  413. package/src/engine/ai.ts +32 -27
  414. package/src/engine/alcf-oauth.ts +26 -19
  415. package/src/engine/api-registry.ts +223 -0
  416. package/src/engine/apis/index.ts +3 -7
  417. package/src/engine/apis/llamacpp-residency.ts +49 -9
  418. package/src/engine/apis/lmstudio-residency.ts +5 -21
  419. package/src/engine/apis/lmstudio.ts +243 -0
  420. package/src/engine/apis/ollama-native.ts +24 -3
  421. package/src/engine/apis/openai-completions.ts +170 -91
  422. package/src/engine/apis/residency.ts +139 -3
  423. package/src/engine/apis/types.ts +16 -0
  424. package/src/engine/env-api-keys.ts +98 -0
  425. package/src/engine/gemma-channel-filter.ts +223 -0
  426. package/src/engine/instrumented-tui.ts +192 -0
  427. package/src/engine/messages.ts +14 -0
  428. package/src/engine/models.ts +42 -0
  429. package/src/engine/oauth.ts +16 -12
  430. package/src/engine/prompt-templates.ts +1 -0
  431. package/src/engine/provider-payload.ts +16 -59
  432. package/src/engine/strip-tokenizer-sentinels.ts +1 -1
  433. package/src/engine/truncate.ts +9 -0
  434. package/src/engine/tui.ts +17 -9
  435. package/src/engine/types.ts +3 -6
  436. package/src/engine/worker-runtime-capabilities.ts +5 -0
  437. package/src/engine/worker-runtime.ts +1 -1
  438. package/src/engine/worker-tools.ts +9 -4
  439. package/src/entry/boot-options.ts +50 -0
  440. package/src/entry/orchestrator.ts +288 -150
  441. package/src/interactive/application-controller.ts +89 -2
  442. package/src/interactive/chat-loop.ts +266 -41
  443. package/src/interactive/chat-panel.ts +715 -278
  444. package/src/interactive/chat-renderer.ts +306 -85
  445. package/src/interactive/clio-editor.ts +3 -8
  446. package/src/interactive/command-fallbacks.ts +2 -2
  447. package/src/interactive/context-overlay.ts +27 -1
  448. package/src/interactive/editor-submit.ts +253 -24
  449. package/src/interactive/export-html/ansi-to-html.ts +161 -0
  450. package/src/interactive/export-html/index.ts +51 -0
  451. package/src/interactive/export-html/template.ts +45 -0
  452. package/src/interactive/export-html/tool-renderer.ts +54 -0
  453. package/src/interactive/footer/dashboard.ts +4 -0
  454. package/src/interactive/footer/notifications.ts +1 -1
  455. package/src/interactive/footer/widgets.ts +42 -22
  456. package/src/interactive/footer-panel.ts +8 -3
  457. package/src/interactive/format-time.ts +14 -2
  458. package/src/interactive/interactive-application.ts +203 -17
  459. package/src/interactive/interactive-event-projection.ts +18 -1
  460. package/src/interactive/interactive-input-runtime.ts +50 -4
  461. package/src/interactive/interactive-presentation.ts +151 -19
  462. package/src/interactive/interactive-shell.ts +268 -14
  463. package/src/interactive/interactive-slash-runtime.ts +184 -117
  464. package/src/interactive/interactive-tickers.ts +38 -7
  465. package/src/interactive/keybinding-manager.ts +1 -1
  466. package/src/interactive/layout.ts +40 -3
  467. package/src/interactive/overlay-frame.ts +1 -1
  468. package/src/interactive/overlay-general-openers.ts +58 -1
  469. package/src/interactive/overlay-key-routing.ts +3 -0
  470. package/src/interactive/overlay-lifecycle.ts +13 -0
  471. package/src/interactive/overlay-permission-lifecycle.ts +2 -1
  472. package/src/interactive/overlay-session-lifecycle.ts +69 -12
  473. package/src/interactive/overlays/ask-user.ts +146 -24
  474. package/src/interactive/overlays/decisions.ts +300 -0
  475. package/src/interactive/overlays/help-reference.ts +15 -10
  476. package/src/interactive/overlays/model-selector.ts +34 -16
  477. package/src/interactive/overlays/session-selector.ts +18 -0
  478. package/src/interactive/overlays/settings.ts +105 -17
  479. package/src/interactive/overlays/skills-hub.ts +4 -4
  480. package/src/interactive/overlays/tree-selector.ts +41 -6
  481. package/src/interactive/render-trace.ts +499 -90
  482. package/src/interactive/renderers/compaction-summary.ts +2 -2
  483. package/src/interactive/renderers/diff.ts +115 -104
  484. package/src/interactive/renderers/mermaid.ts +53 -0
  485. package/src/interactive/renderers/tool-execution.ts +516 -168
  486. package/src/interactive/renderers/worker-entry.ts +20 -4
  487. package/src/interactive/session-switch-settlement.ts +10 -0
  488. package/src/interactive/slash-autocomplete.ts +6 -114
  489. package/src/interactive/slash-commands.ts +135 -47
  490. package/src/interactive/slash-spec.ts +9 -38
  491. package/src/interactive/status/controller.ts +5 -1
  492. package/src/interactive/status/index.ts +12 -1
  493. package/src/interactive/status/reasoning.ts +87 -0
  494. package/src/interactive/status/summary.ts +13 -2
  495. package/src/interactive/stdout-backpressure.ts +99 -0
  496. package/src/interactive/stream-pacer.ts +530 -0
  497. package/src/interactive/stream-pacing-policy.ts +66 -0
  498. package/src/interactive/tasks-overlay.ts +368 -14
  499. package/src/interactive/terminal-lease.ts +485 -0
  500. package/src/interactive/theme/tokens.ts +1 -1
  501. package/src/interactive/transcript-detail.ts +120 -0
  502. package/src/interactive/turn-context.ts +4 -3
  503. package/src/interactive/turn-persistence.ts +30 -13
  504. package/src/interactive/turn-queues.ts +12 -0
  505. package/src/interactive/turn-recovery.ts +25 -8
  506. package/src/interactive/turn-runtime.ts +79 -12
  507. package/src/interactive/turn-state.ts +10 -0
  508. package/src/interactive/view/artifacts.ts +114 -4
  509. package/src/interactive/view/view-overlay.ts +3 -0
  510. package/src/interactive/welcome-dashboard.ts +17 -16
  511. package/src/interactive/worker-receipts.ts +52 -3
  512. package/src/interactive/worker-stream.ts +5 -1
  513. package/src/tools/agent-tools.ts +23 -3
  514. package/src/tools/artifact.ts +2 -2
  515. package/src/tools/ask-user.ts +23 -13
  516. package/src/tools/bash.ts +30 -2
  517. package/src/tools/bootstrap.ts +34 -431
  518. package/src/tools/builtin-tool-catalog.ts +271 -0
  519. package/src/tools/codewiki/code-nav-surface.ts +29 -0
  520. package/src/tools/codewiki/code-nav.ts +8 -22
  521. package/src/tools/codewiki/shared.ts +41 -38
  522. package/src/tools/context/docs-engine.ts +14 -3
  523. package/src/tools/context/index.ts +107 -28
  524. package/src/tools/context/surface.ts +19 -0
  525. package/src/tools/core-bootstrap.ts +168 -0
  526. package/src/tools/credential-present.ts +5 -5
  527. package/src/tools/dispatch-admission.ts +533 -0
  528. package/src/tools/dispatch-background.ts +54 -0
  529. package/src/tools/dispatch-event-text.ts +6 -0
  530. package/src/tools/dispatch-plan.ts +9 -4
  531. package/src/tools/dispatch-run-events.ts +238 -0
  532. package/src/tools/dispatch-runner.ts +2370 -0
  533. package/src/tools/dispatch-scout-admission.ts +295 -0
  534. package/src/tools/dispatch-types.ts +77 -0
  535. package/src/tools/dispatch.ts +67 -3161
  536. package/src/tools/find.ts +4 -2
  537. package/src/tools/grep.ts +2 -2
  538. package/src/tools/lazy-tool.ts +60 -0
  539. package/src/tools/ledger.ts +3 -3
  540. package/src/tools/monitor-surface.ts +36 -0
  541. package/src/tools/monitor.ts +2 -32
  542. package/src/tools/observers.ts +2 -2
  543. package/src/tools/presentation.ts +107 -0
  544. package/src/tools/registry.ts +45 -27
  545. package/src/tools/safe-exec.ts +2 -2
  546. package/src/tools/steer-surface.ts +17 -0
  547. package/src/tools/steer.ts +2 -13
  548. package/src/tools/tasks.ts +108 -11
  549. package/src/tools/truncate.ts +25 -184
  550. package/src/tools/verify/frontend.ts +3 -1
  551. package/src/tools/verify/index.ts +3 -38
  552. package/src/tools/verify/surface.ts +46 -0
  553. package/src/tools/web-fetch-surface.ts +23 -0
  554. package/src/tools/web-fetch.ts +2 -20
  555. package/src/tools/write.ts +7 -2
  556. package/src/worker/entry.ts +39 -2
  557. package/src/worker/spec-contract.ts +26 -5
  558. package/dist/chunk-7SS2CTV2.js +0 -61361
  559. package/dist/chunk-DKGKUHFA.js +0 -924
  560. package/dist/chunk-GEP36Y4X.js +0 -12796
  561. package/dist/chunk-XYWBQRDM.js +0 -137
  562. package/dist/clio-BZVGEUFJ.js +0 -58
  563. package/dist/configure-S7S6F6CL.js +0 -32
  564. package/docs/html/agents_blueprint.html +0 -936
  565. package/docs/html/alcf_blueprint.html +0 -324
  566. package/docs/html/architecture_blueprint.html +0 -850
  567. package/docs/html/commands_blueprint.html +0 -939
  568. package/docs/html/config_knobs_audit_blueprint.html +0 -178
  569. package/docs/html/configuration_blueprint.html +0 -1080
  570. package/docs/html/context_blueprint.html +0 -603
  571. package/docs/html/documentation_blueprint.html +0 -832
  572. package/docs/html/environment_blueprint.html +0 -404
  573. package/docs/html/eval_blueprint.html +0 -743
  574. package/docs/html/evals_internal_blueprint.html +0 -190
  575. package/docs/html/evolution_blueprint.html +0 -674
  576. package/docs/html/extensions_blueprint.html +0 -2065
  577. package/docs/html/fleet_dispatch_blueprint.html +0 -286
  578. package/docs/html/index.html +0 -919
  579. package/docs/html/lifecycle_blueprint.html +0 -723
  580. package/docs/html/memory_blueprint.html +0 -699
  581. package/docs/html/middleware_blueprint.html +0 -664
  582. package/docs/html/models_blueprint.html +0 -2366
  583. package/docs/html/observability_blueprint.html +0 -683
  584. package/docs/html/provider_adapter_blueprint.html +0 -245
  585. package/docs/html/safety_blueprint.html +0 -1386
  586. package/docs/html/shared.css +0 -571
  587. package/docs/html/shared.js +0 -143
  588. package/docs/html/skills_blueprint.html +0 -671
  589. package/docs/html/soak_blueprint.html +0 -182
  590. package/docs/html/tool_usage_blueprint.html +0 -350
  591. package/docs/html/tools_blueprint.html +0 -2249
  592. package/docs/html/trace_blueprint.html +0 -235
  593. package/docs/html/tui_design_blueprint.html +0 -374
  594. package/docs/html/validation_blueprint.html +0 -961
  595. package/docs/html/worker_dispatch_blueprint.html +0 -231
  596. package/src/core/release.ts +0 -2
  597. package/src/domains/providers/runtimes/common/lmstudio-logger.ts +0 -32
  598. package/src/domains/providers/runtimes/local-native/lmstudio-native.ts +0 -491
  599. package/src/engine/apis/lmstudio-native.ts +0 -1438
  600. package/src/engine/apis/thinking-replay.ts +0 -11
  601. package/src/tools/string-enum.ts +0 -15
@@ -0,0 +1,1186 @@
1
+ import { createRequire as __clioCreateRequire } from "node:module"; const require = __clioCreateRequire(import.meta.url);
2
+ import {
3
+ createSlicer,
4
+ isIndexablePath,
5
+ languageForPath
6
+ } from "./chunk-VJWL6YS5.js";
7
+ import {
8
+ CODEWIKI_VERSION
9
+ } from "./chunk-LBMZMYH2.js";
10
+ import {
11
+ WORKSPACE_EXCLUDED_DIRS,
12
+ enumerateWorkspaceFilesAsync,
13
+ filterWorkspaceFileCandidates
14
+ } from "./chunk-EKMEHE4H.js";
15
+ import {
16
+ classifyCHeaderLanguage,
17
+ isAmbiguousHeaderPath
18
+ } from "./chunk-7CR24IG7.js";
19
+ import {
20
+ init_esm_shims
21
+ } from "./chunk-3R73A4XB.js";
22
+
23
+ // src/domains/context/codewiki/indexer.ts
24
+ init_esm_shims();
25
+ import { createHash } from "node:crypto";
26
+ import { existsSync, readFileSync, statSync } from "node:fs";
27
+ import { dirname, join, relative, resolve } from "node:path";
28
+
29
+ // src/domains/context/codewiki/cmake.ts
30
+ init_esm_shims();
31
+ var SOURCE_EXTENSIONS = /* @__PURE__ */ new Set([
32
+ ".c",
33
+ ".cc",
34
+ ".cpp",
35
+ ".cxx",
36
+ ".cu",
37
+ ".cuh",
38
+ ".h",
39
+ ".hh",
40
+ ".hpp",
41
+ ".hxx",
42
+ ".java",
43
+ ".js",
44
+ ".jsx",
45
+ ".mjs",
46
+ ".cjs",
47
+ ".mts",
48
+ ".cts",
49
+ ".py",
50
+ ".pyw",
51
+ ".rb",
52
+ ".rs",
53
+ ".cs",
54
+ ".ts",
55
+ ".tsx"
56
+ ]);
57
+ var TARGET_SOURCE_KEYWORDS = /* @__PURE__ */ new Set([
58
+ "PUBLIC",
59
+ "PRIVATE",
60
+ "INTERFACE",
61
+ "BEFORE",
62
+ "FILE_SET",
63
+ "TYPE",
64
+ "BASE_DIRS",
65
+ "FILES"
66
+ ]);
67
+ function compareStrings(a, b) {
68
+ return a.localeCompare(b);
69
+ }
70
+ function uniqueSorted(values) {
71
+ return [...new Set(values)].sort(compareStrings);
72
+ }
73
+ function lineStarts(text) {
74
+ const starts = [0];
75
+ for (let index = 0; index < text.length; index += 1) {
76
+ if (text[index] === "\n") starts.push(index + 1);
77
+ }
78
+ return starts;
79
+ }
80
+ function lineAt(starts, offset) {
81
+ let low = 0;
82
+ let high = starts.length;
83
+ while (low < high) {
84
+ const middle = Math.floor((low + high) / 2);
85
+ if ((starts[middle] ?? 0) <= offset) low = middle + 1;
86
+ else high = middle;
87
+ }
88
+ return Math.max(1, low);
89
+ }
90
+ function readBracketBlock(text, index) {
91
+ if (text[index] !== "[") return null;
92
+ let delimiterEnd = index + 1;
93
+ while (text[delimiterEnd] === "=") delimiterEnd += 1;
94
+ if (text[delimiterEnd] !== "[") return null;
95
+ const equals = text.slice(index + 1, delimiterEnd);
96
+ const close = `]${equals}]`;
97
+ const contentStart = delimiterEnd + 1;
98
+ const closeStart = text.indexOf(close, contentStart);
99
+ if (closeStart === -1) return null;
100
+ return {
101
+ content: text.slice(contentStart, closeStart),
102
+ end: closeStart + close.length
103
+ };
104
+ }
105
+ function skipComment(text, index) {
106
+ const bracket = readBracketBlock(text, index + 1);
107
+ if (bracket) return bracket.end;
108
+ const newline = text.indexOf("\n", index + 1);
109
+ return newline === -1 ? text.length : newline + 1;
110
+ }
111
+ function skipTrivia(text, start) {
112
+ let index = start;
113
+ while (index < text.length) {
114
+ if (/\s/.test(text[index] ?? "")) {
115
+ index += 1;
116
+ continue;
117
+ }
118
+ if (text[index] === "#") {
119
+ index = skipComment(text, index);
120
+ continue;
121
+ }
122
+ break;
123
+ }
124
+ return index;
125
+ }
126
+ function readQuotedArgument(text, start) {
127
+ let content = "";
128
+ for (let index = start + 1; index < text.length; index += 1) {
129
+ const current = text[index] ?? "";
130
+ if (current === '"') return { content, end: index + 1 };
131
+ if (current === "\\") {
132
+ const next = text[index + 1];
133
+ if (next === void 0) return null;
134
+ if (next === "\n") {
135
+ index += 1;
136
+ continue;
137
+ }
138
+ content += next;
139
+ index += 1;
140
+ continue;
141
+ }
142
+ content += current;
143
+ }
144
+ return null;
145
+ }
146
+ function parseInvocation(text, name, line, openParen) {
147
+ const args = [];
148
+ let current = "";
149
+ let depth = 1;
150
+ let index = openParen + 1;
151
+ const flush = () => {
152
+ if (current.length > 0) args.push(current);
153
+ current = "";
154
+ };
155
+ while (index < text.length) {
156
+ const char = text[index] ?? "";
157
+ if (/\s/.test(char)) {
158
+ flush();
159
+ index += 1;
160
+ continue;
161
+ }
162
+ if (char === "#") {
163
+ flush();
164
+ index = skipComment(text, index);
165
+ continue;
166
+ }
167
+ if (char === '"') {
168
+ const quoted = readQuotedArgument(text, index);
169
+ if (!quoted) return null;
170
+ current += quoted.content;
171
+ index = quoted.end;
172
+ continue;
173
+ }
174
+ if (char === "[") {
175
+ const bracket = readBracketBlock(text, index);
176
+ if (bracket) {
177
+ current += bracket.content;
178
+ index = bracket.end;
179
+ continue;
180
+ }
181
+ }
182
+ if (char === "\\") {
183
+ const next = text[index + 1];
184
+ if (next === void 0) return null;
185
+ if (next === "\n") {
186
+ index += 2;
187
+ continue;
188
+ }
189
+ current += next;
190
+ index += 2;
191
+ continue;
192
+ }
193
+ if (char === ";" && depth === 1) {
194
+ flush();
195
+ index += 1;
196
+ continue;
197
+ }
198
+ if (char === "(") {
199
+ depth += 1;
200
+ current += char;
201
+ index += 1;
202
+ continue;
203
+ }
204
+ if (char === ")") {
205
+ depth -= 1;
206
+ if (depth === 0) {
207
+ flush();
208
+ return {
209
+ invocation: { name, line, args },
210
+ end: index + 1
211
+ };
212
+ }
213
+ current += char;
214
+ index += 1;
215
+ continue;
216
+ }
217
+ current += char;
218
+ index += 1;
219
+ }
220
+ return null;
221
+ }
222
+ function scanInvocations(text) {
223
+ const invocations = [];
224
+ const starts = lineStarts(text);
225
+ let index = 0;
226
+ while (index < text.length) {
227
+ index = skipTrivia(text, index);
228
+ if (index >= text.length) break;
229
+ if (text[index] === '"') {
230
+ const quoted = readQuotedArgument(text, index);
231
+ index = quoted?.end ?? text.length;
232
+ continue;
233
+ }
234
+ if (text[index] === "[") {
235
+ const bracket = readBracketBlock(text, index);
236
+ if (bracket) {
237
+ index = bracket.end;
238
+ continue;
239
+ }
240
+ }
241
+ const name = /^[A-Za-z_][A-Za-z_0-9]*/.exec(text.slice(index))?.[0];
242
+ if (!name) {
243
+ index += 1;
244
+ continue;
245
+ }
246
+ const nameStart = index;
247
+ const openParen = skipTrivia(text, index + name.length);
248
+ if (text[openParen] !== "(") {
249
+ index += name.length;
250
+ continue;
251
+ }
252
+ const parsed = parseInvocation(text, name.toLowerCase(), lineAt(starts, nameStart), openParen);
253
+ if (!parsed) {
254
+ index = openParen + 1;
255
+ continue;
256
+ }
257
+ invocations.push(parsed.invocation);
258
+ index = parsed.end;
259
+ }
260
+ return invocations;
261
+ }
262
+ function literal(value) {
263
+ if (!value) return null;
264
+ const trimmed = value.trim();
265
+ if (trimmed.length === 0 || trimmed.includes("$")) return null;
266
+ return trimmed.replace(/\\/g, "/");
267
+ }
268
+ function literalTarget(value) {
269
+ const target = literal(value);
270
+ return target && /^[A-Za-z0-9_.:+-]+$/.test(target) ? target : null;
271
+ }
272
+ function relativeSpecifier(value) {
273
+ if (value.startsWith("/") || /^[A-Za-z]:\//.test(value)) return null;
274
+ const normalized = value.replace(/^\.\//, "").replace(/\/+$/g, "");
275
+ if (normalized.length === 0) return null;
276
+ return normalized.startsWith(".") ? normalized : `./${normalized}`;
277
+ }
278
+ function sourceSpecifier(value) {
279
+ const path = literal(value);
280
+ if (!path || path.includes(";") || path.startsWith("-") || TARGET_SOURCE_KEYWORDS.has(path.toUpperCase())) return null;
281
+ const withoutQuery = path.split(/[?#]/, 1)[0] ?? path;
282
+ const dot = withoutQuery.lastIndexOf(".");
283
+ if (dot === -1 || !SOURCE_EXTENSIONS.has(withoutQuery.slice(dot).toLowerCase())) return null;
284
+ return relativeSpecifier(path);
285
+ }
286
+ function childCMakeSpecifier(value) {
287
+ const directory = literal(value);
288
+ if (!directory) return null;
289
+ const relative2 = relativeSpecifier(directory);
290
+ if (!relative2) return null;
291
+ return `${relative2}/CMakeLists.txt`.replace(/\/\//g, "/");
292
+ }
293
+ function isCMakePath(path) {
294
+ const name = path.split("/").at(-1) ?? path;
295
+ return name === "CMakeLists.txt" || name.toLowerCase().endsWith(".cmake");
296
+ }
297
+ function extractCMake(text) {
298
+ const symbols = [];
299
+ const imports = [];
300
+ for (const invocation of scanInvocations(text)) {
301
+ if (invocation.name === "add_subdirectory") {
302
+ const child = childCMakeSpecifier(invocation.args[0]);
303
+ if (child) imports.push(child);
304
+ continue;
305
+ }
306
+ if (invocation.name === "add_library" || invocation.name === "add_executable") {
307
+ const target = literalTarget(invocation.args[0]);
308
+ if (!target) continue;
309
+ symbols.push({ name: target, kind: "const", line: invocation.line });
310
+ if (invocation.args[1]?.toUpperCase() === "ALIAS") continue;
311
+ for (const arg of invocation.args.slice(1)) {
312
+ const source = sourceSpecifier(arg);
313
+ if (source) imports.push(source);
314
+ }
315
+ continue;
316
+ }
317
+ if (invocation.name === "target_sources") {
318
+ if (!literalTarget(invocation.args[0])) continue;
319
+ for (const arg of invocation.args.slice(1)) {
320
+ const source = sourceSpecifier(arg);
321
+ if (source) imports.push(source);
322
+ }
323
+ }
324
+ }
325
+ return {
326
+ symbols: symbols.sort((a, b) => a.line - b.line || a.name.localeCompare(b.name)),
327
+ imports: uniqueSorted(imports)
328
+ };
329
+ }
330
+
331
+ // src/domains/context/codewiki/indexer.ts
332
+ var CODEWIKI_SYMBOL_KINDS_WITH_SIG = /* @__PURE__ */ new Set(["func", "class", "method", "type"]);
333
+ var treeSitterExtractorPromise = null;
334
+ function loadTreeSitterExtractor() {
335
+ treeSitterExtractorPromise ??= import("./tree-sitter-HGKH6LG4.js").then(
336
+ ({ createTreeSitterExtractor }) => createTreeSitterExtractor()
337
+ );
338
+ return treeSitterExtractorPromise;
339
+ }
340
+ var RESOLUTION_EXTENSIONS = [
341
+ ".ts",
342
+ ".tsx",
343
+ ".mts",
344
+ ".cts",
345
+ ".js",
346
+ ".jsx",
347
+ ".mjs",
348
+ ".cjs",
349
+ ".py",
350
+ ".go",
351
+ ".rs",
352
+ ".c",
353
+ ".h",
354
+ ".cc",
355
+ ".cpp",
356
+ ".cxx",
357
+ ".hpp",
358
+ ".hh",
359
+ ".hxx",
360
+ ".cu",
361
+ ".cuh",
362
+ ".java",
363
+ ".rb",
364
+ ".cs"
365
+ ];
366
+ function compareStrings2(a, b) {
367
+ return a.localeCompare(b);
368
+ }
369
+ function stableFileId(path) {
370
+ return `f_${createHash("sha256").update(path).digest("hex").slice(0, 16)}`;
371
+ }
372
+ function contentHash(text) {
373
+ return createHash("sha256").update(text).digest("hex").slice(0, 16);
374
+ }
375
+ function defaultReadFile(path) {
376
+ try {
377
+ return readFileSync(path, "utf8");
378
+ } catch {
379
+ return null;
380
+ }
381
+ }
382
+ function normalizeRel(cwd, filePath) {
383
+ return relative(cwd, filePath).split("\\").join("/");
384
+ }
385
+ function normalizeInputPath(path) {
386
+ return path.split("\\").join("/").replace(/^\.\//, "");
387
+ }
388
+ function lineCount(text) {
389
+ if (text.length === 0) return 0;
390
+ return text.endsWith("\n") ? text.split("\n").length - 1 : text.split("\n").length;
391
+ }
392
+ function roleFor(relPath, language) {
393
+ if (language === "config") return "config";
394
+ const lower = relPath.toLowerCase();
395
+ if (lower.includes("/test/") || lower.includes("/tests/") || /\.(test|spec)\.[cm]?[jt]sx?$/.test(lower) || /(^|\/)test_.*\.py$/.test(lower) || /(^|\/).*_test\.(go|rs|rb)$/.test(lower)) {
396
+ return "test";
397
+ }
398
+ if (/(^|\/)(index|main|server|cli|orchestrator|bootstrap)\.[^.]+$/.test(lower) || lower.endsWith("/__main__.py")) {
399
+ return "entry";
400
+ }
401
+ return "module";
402
+ }
403
+ function firstDocSummary(text) {
404
+ const jsDoc = /\/\*\*([\s\S]*?)\*\//.exec(text)?.[1];
405
+ const pythonDoc = /^\s*(?:"""([\s\S]*?)"""|'''([\s\S]*?)''')/.exec(text);
406
+ const raw = jsDoc ?? pythonDoc?.[1] ?? pythonDoc?.[2];
407
+ if (!raw) return null;
408
+ const cleaned = raw.split("\n").map((line) => line.replace(/^\s*\*\s?/, "").trim()).filter((line) => line.length > 0 && !line.startsWith("@")).join(" ").replace(/\s+/g, " ").trim();
409
+ return cleaned.length > 0 ? cleaned.slice(0, 160) : null;
410
+ }
411
+ function sanitizeSymbolName(value) {
412
+ return value.trim().replace(/^self\./, "").replace(/^this\./, "").slice(0, 160);
413
+ }
414
+ function addSymbol(target, seen, name, kind, line, sig) {
415
+ if (!name) return;
416
+ const clean = sanitizeSymbolName(name);
417
+ if (clean.length === 0) return;
418
+ const key = `${clean}\0${kind}\0${line}`;
419
+ if (seen.has(key)) return;
420
+ seen.add(key);
421
+ target.push({
422
+ name: clean,
423
+ kind,
424
+ line,
425
+ ...sig && sig.trim().length > 0 ? { sig: sig.trim().slice(0, 240) } : {}
426
+ });
427
+ }
428
+ function uniqueSorted2(values) {
429
+ return [...new Set([...values].filter((item) => item.length > 0))].sort(compareStrings2);
430
+ }
431
+ function extractWithLineRegex(text, patterns) {
432
+ const symbols = [];
433
+ const seen = /* @__PURE__ */ new Set();
434
+ const lines = text.split(/\r?\n/);
435
+ for (const [index, line] of lines.entries()) {
436
+ for (const pattern of patterns) {
437
+ const match = pattern.regex.exec(line);
438
+ if (!match) continue;
439
+ const name = match[pattern.nameIndex ?? 1];
440
+ addSymbol(symbols, seen, name, pattern.kind, index + 1, line.trim());
441
+ }
442
+ }
443
+ return symbols.sort(compareSymbols);
444
+ }
445
+ function compareSymbols(a, b) {
446
+ return a.line - b.line || a.name.localeCompare(b.name) || a.kind.localeCompare(b.kind);
447
+ }
448
+ function extractMatches(text, regex, group = 1) {
449
+ const out = [];
450
+ for (const match of text.matchAll(regex)) {
451
+ const value = match[group];
452
+ if (value) out.push(value);
453
+ }
454
+ return out;
455
+ }
456
+ function maskCFamilyCommentsAndStrings(text) {
457
+ const chars = text.split("");
458
+ let state = "code";
459
+ for (let index = 0; index < chars.length; index += 1) {
460
+ const current = chars[index] ?? "";
461
+ const next = chars[index + 1] ?? "";
462
+ if (state === "code") {
463
+ if (current === "/" && next === "/") {
464
+ chars[index] = " ";
465
+ chars[index + 1] = " ";
466
+ state = "line-comment";
467
+ index += 1;
468
+ } else if (current === "/" && next === "*") {
469
+ chars[index] = " ";
470
+ chars[index + 1] = " ";
471
+ state = "block-comment";
472
+ index += 1;
473
+ } else if (current === "'") {
474
+ chars[index] = " ";
475
+ state = "single-quote";
476
+ } else if (current === '"') {
477
+ chars[index] = " ";
478
+ state = "double-quote";
479
+ }
480
+ continue;
481
+ }
482
+ if (current === "\n") {
483
+ if (state === "line-comment") state = "code";
484
+ continue;
485
+ }
486
+ chars[index] = " ";
487
+ if (state === "block-comment" && current === "*" && next === "/") {
488
+ chars[index + 1] = " ";
489
+ state = "code";
490
+ index += 1;
491
+ continue;
492
+ }
493
+ if ((state === "single-quote" || state === "double-quote") && current === "\\") {
494
+ if (index + 1 < chars.length && chars[index + 1] !== "\n") {
495
+ chars[index + 1] = " ";
496
+ index += 1;
497
+ }
498
+ continue;
499
+ }
500
+ if (state === "single-quote" && current === "'") state = "code";
501
+ if (state === "double-quote" && current === '"') state = "code";
502
+ }
503
+ return chars.join("");
504
+ }
505
+ function cFamilyAliasStatements(text) {
506
+ const masked = maskCFamilyCommentsAndStrings(text);
507
+ const statements = [];
508
+ const token = /\b(?:typedef|using)\b/g;
509
+ for (let match = token.exec(masked); match; match = token.exec(masked)) {
510
+ const start = match.index;
511
+ const lineStart = masked.lastIndexOf("\n", start - 1) + 1;
512
+ if (masked.slice(lineStart, start).trimStart().startsWith("#")) continue;
513
+ let braces = 0;
514
+ let parentheses = 0;
515
+ let brackets = 0;
516
+ let end = -1;
517
+ for (let index = token.lastIndex; index < masked.length; index += 1) {
518
+ const current = masked[index];
519
+ if (current === "{") braces += 1;
520
+ else if (current === "}") braces = Math.max(0, braces - 1);
521
+ else if (current === "(") parentheses += 1;
522
+ else if (current === ")") parentheses = Math.max(0, parentheses - 1);
523
+ else if (current === "[") brackets += 1;
524
+ else if (current === "]") brackets = Math.max(0, brackets - 1);
525
+ else if (current === ";" && braces === 0 && parentheses === 0 && brackets === 0) {
526
+ end = index + 1;
527
+ break;
528
+ }
529
+ }
530
+ if (end === -1) continue;
531
+ statements.push({
532
+ text: text.slice(start, end),
533
+ masked: masked.slice(start, end),
534
+ line: 1 + Array.from(masked.slice(0, start).matchAll(/\n/g)).length
535
+ });
536
+ token.lastIndex = end;
537
+ }
538
+ return statements;
539
+ }
540
+ function stripCFamilyBraceBodies(statement) {
541
+ let depth = 0;
542
+ let result = "";
543
+ for (const current of statement) {
544
+ if (current === "{") {
545
+ depth += 1;
546
+ result += " ";
547
+ continue;
548
+ }
549
+ if (current === "}") {
550
+ depth = Math.max(0, depth - 1);
551
+ result += " ";
552
+ continue;
553
+ }
554
+ result += depth === 0 || current === "\n" ? current : " ";
555
+ }
556
+ return result;
557
+ }
558
+ function splitCFamilyDeclarators(value) {
559
+ const parts = [];
560
+ let start = 0;
561
+ let parentheses = 0;
562
+ let brackets = 0;
563
+ let angles = 0;
564
+ for (let index = 0; index < value.length; index += 1) {
565
+ const current = value[index];
566
+ if (current === "(") parentheses += 1;
567
+ else if (current === ")") parentheses = Math.max(0, parentheses - 1);
568
+ else if (current === "[") brackets += 1;
569
+ else if (current === "]") brackets = Math.max(0, brackets - 1);
570
+ else if (current === "<") angles += 1;
571
+ else if (current === ">") angles = Math.max(0, angles - 1);
572
+ else if (current === "," && parentheses === 0 && brackets === 0 && angles === 0) {
573
+ parts.push(value.slice(start, index));
574
+ start = index + 1;
575
+ }
576
+ }
577
+ parts.push(value.slice(start));
578
+ return parts;
579
+ }
580
+ var C_FAMILY_TYPE_WORDS = /* @__PURE__ */ new Set([
581
+ "typedef",
582
+ "const",
583
+ "volatile",
584
+ "restrict",
585
+ "signed",
586
+ "unsigned",
587
+ "short",
588
+ "long",
589
+ "void",
590
+ "char",
591
+ "int",
592
+ "float",
593
+ "double",
594
+ "struct",
595
+ "union",
596
+ "enum",
597
+ "class",
598
+ "typename",
599
+ "auto"
600
+ ]);
601
+ function stripTrailingCFamilyDeclaratorSuffixes(value) {
602
+ let end = value.length;
603
+ while (end > 0) {
604
+ while (end > 0 && /\s/.test(value[end - 1] ?? "")) end -= 1;
605
+ const close = value[end - 1];
606
+ if (close !== ")" && close !== "]") break;
607
+ const open = close === ")" ? "(" : "[";
608
+ let depth = 1;
609
+ let start = end - 1;
610
+ for (start -= 1; start >= 0; start -= 1) {
611
+ const current = value[start];
612
+ if (current === close) depth += 1;
613
+ else if (current === open) {
614
+ depth -= 1;
615
+ if (depth === 0) break;
616
+ }
617
+ }
618
+ if (start < 0) break;
619
+ if (start === 0 || !/[A-Za-z_0-9)\]]/.test(value[start - 1] ?? "")) break;
620
+ end = start;
621
+ }
622
+ return value.slice(0, end);
623
+ }
624
+ function cFamilyTypedefNames(maskedStatement) {
625
+ const withoutBodies = stripCFamilyBraceBodies(maskedStatement).replace(/^\s*typedef\b/, "").replace(/;\s*$/, "");
626
+ const names = [];
627
+ for (const declarator of splitCFamilyDeclarators(withoutBodies)) {
628
+ const functionPointerNames = Array.from(
629
+ declarator.matchAll(
630
+ /\(\s*(?:[A-Za-z_]\w*\s+)*[*&]+\s*(?:(?:const|volatile|restrict)\s+)*([A-Za-z_]\w*)\s*(?:\[[^\]]*\]\s*)*\)(?=\s*\()/g
631
+ ),
632
+ (match) => match[1] ?? ""
633
+ ).filter((name2) => name2.length > 0);
634
+ if (functionPointerNames.length > 0) {
635
+ names.push(...functionPointerNames);
636
+ continue;
637
+ }
638
+ const declaratorWithoutSuffixes = stripTrailingCFamilyDeclaratorSuffixes(declarator);
639
+ const identifiers = Array.from(declaratorWithoutSuffixes.matchAll(/\b[A-Za-z_]\w*\b/g), (match) => match[0]).filter(
640
+ (name2) => !C_FAMILY_TYPE_WORDS.has(name2)
641
+ );
642
+ const name = identifiers.at(-1);
643
+ if (name) names.push(name);
644
+ }
645
+ return uniqueSorted2(names);
646
+ }
647
+ function extractCFamilyAliasSymbols(text) {
648
+ const symbols = [];
649
+ const seen = /* @__PURE__ */ new Set();
650
+ for (const statement of cFamilyAliasStatements(text)) {
651
+ const usingName = /^\s*using\s+([A-Za-z_]\w*)\s*=/.exec(statement.masked)?.[1];
652
+ const names = usingName ? [usingName] : /^\s*typedef\b/.test(statement.masked) ? cFamilyTypedefNames(statement.masked) : [];
653
+ const signature = statement.text.replace(/\s+/g, " ").trim();
654
+ for (const name of names) addSymbol(symbols, seen, name, "type", statement.line, signature);
655
+ }
656
+ return symbols;
657
+ }
658
+ var tsJsExtractor = {
659
+ langs: ["typescript", "javascript"],
660
+ extractImports(_path, text) {
661
+ return uniqueSorted2([
662
+ ...extractMatches(text, /\bimport\s+(?:type\s+)?(?:[^'"]*?\s+from\s+)?["']([^"']+)["']/g),
663
+ ...extractMatches(text, /\bexport\s+[^'"]*?\s+from\s+["']([^"']+)["']/g),
664
+ ...extractMatches(text, /\brequire\s*\(\s*["']([^"']+)["']\s*\)/g),
665
+ ...extractMatches(text, /\bimport\s*\(\s*["']([^"']+)["']\s*\)/g)
666
+ ]);
667
+ },
668
+ extract(_path, text) {
669
+ const symbols = extractWithLineRegex(text, [
670
+ { regex: /^\s*export\s+default\s+(?:async\s+)?function\s+([A-Za-z_$][\w$]*)?/, kind: "func" },
671
+ { regex: /^\s*(?:export\s+)?(?:async\s+)?function\s+([A-Za-z_$][\w$]*)\s*\(/, kind: "func" },
672
+ { regex: /^\s*(?:export\s+)?class\s+([A-Za-z_$][\w$]*)\b/, kind: "class" },
673
+ { regex: /^\s*(?:export\s+)?interface\s+([A-Za-z_$][\w$]*)\b/, kind: "iface" },
674
+ { regex: /^\s*(?:export\s+)?type\s+([A-Za-z_$][\w$]*)\b/, kind: "type" },
675
+ { regex: /^\s*(?:export\s+)?enum\s+([A-Za-z_$][\w$]*)\b/, kind: "type" },
676
+ { regex: /^(?:\s*export\s+)?const\s+([A-Za-z_$][\w$]*)\b/, kind: "const" },
677
+ { regex: /^(?:\s*export\s+)?(?:let|var)\s+([A-Za-z_$][\w$]*)\b/, kind: "var" },
678
+ {
679
+ regex: /^(?: {2,}|\t+)(?:public\s+|private\s+|protected\s+|static\s+|override\s+|abstract\s+|async\s+|get\s+|set\s+)*(?!(?:if|for|while|switch|catch|return|typeof|else|do|new|await|yield)\b)([A-Za-z_$][\w$]*)\s*\([^)]*\)\s*\{?$/,
680
+ kind: "method"
681
+ }
682
+ ]);
683
+ return { symbols, imports: tsJsExtractor.extractImports?.(_path, text) ?? [] };
684
+ }
685
+ };
686
+ var pythonExtractor = {
687
+ langs: ["python"],
688
+ extractImports(_path, text) {
689
+ return uniqueSorted2([
690
+ ...extractMatches(text, /^\s*import\s+([A-Za-z_][\w.]*)(?:\s+as\s+\w+)?/gm),
691
+ ...extractMatches(text, /^\s*from\s+([.\w]+)\s+import\s+/gm)
692
+ ]);
693
+ },
694
+ extract(_path, text) {
695
+ const rawSymbols = extractWithLineRegex(text, [
696
+ { regex: /^(\s*)def\s+([A-Za-z_]\w*)\s*\(/, kind: "func", nameIndex: 2 },
697
+ { regex: /^(\s*)async\s+def\s+([A-Za-z_]\w*)\s*\(/, kind: "func", nameIndex: 2 },
698
+ { regex: /^\s*class\s+([A-Za-z_]\w*)\b/, kind: "class" },
699
+ { regex: /^([A-Z][A-Z0-9_]*)\s*=/, kind: "const" },
700
+ { regex: /^([A-Za-z_]\w*)\s*=/, kind: "var" }
701
+ ]);
702
+ const symbols = rawSymbols.map((symbol) => {
703
+ if ((symbol.kind === "func" || symbol.kind === "var") && /^\s+/.test(symbol.sig ?? "")) {
704
+ return { ...symbol, kind: symbol.kind === "func" ? "method" : symbol.kind };
705
+ }
706
+ return symbol;
707
+ });
708
+ return { symbols: symbols.sort(compareSymbols), imports: pythonExtractor.extractImports?.(_path, text) ?? [] };
709
+ }
710
+ };
711
+ var goExtractor = {
712
+ langs: ["go"],
713
+ extractImports(_path, text) {
714
+ return uniqueSorted2([
715
+ ...extractMatches(text, /^\s*import\s+"([^"]+)"/gm),
716
+ ...extractMatches(text, /^\s*"([^"]+)"\s*$/gm)
717
+ ]);
718
+ },
719
+ extract(_path, text) {
720
+ const rawSymbols = extractWithLineRegex(text, [
721
+ { regex: /^\s*func\s+(?:\([^)]*\)\s*)?([A-Za-z_]\w*)\s*\(/, kind: "func" },
722
+ { regex: /^\s*type\s+([A-Za-z_]\w*)\s+interface\b/, kind: "iface" },
723
+ { regex: /^\s*type\s+([A-Za-z_]\w*)\s+struct\b/, kind: "type" },
724
+ { regex: /^\s*type\s+([A-Za-z_]\w*)\b/, kind: "type" },
725
+ { regex: /^const\s+([A-Za-z_]\w*)\b/, kind: "const" },
726
+ { regex: /^var\s+([A-Za-z_]\w*)\b/, kind: "var" }
727
+ ]);
728
+ const symbols = rawSymbols.map((symbol) => {
729
+ if (symbol.kind === "func" && /^\s*func\s+\(/.test(symbol.sig ?? "")) return { ...symbol, kind: "method" };
730
+ return symbol;
731
+ });
732
+ return { symbols: symbols.sort(compareSymbols), imports: goExtractor.extractImports?.(_path, text) ?? [] };
733
+ }
734
+ };
735
+ var rustExtractor = {
736
+ langs: ["rust"],
737
+ extractImports(_path, text) {
738
+ return uniqueSorted2([
739
+ ...extractMatches(text, /^\s*use\s+([^;]+);/gm).map((item) => item.trim()),
740
+ ...extractMatches(text, /^\s*extern\s+crate\s+([A-Za-z_]\w*)/gm)
741
+ ]);
742
+ },
743
+ extract(_path, text) {
744
+ const symbols = extractWithLineRegex(text, [
745
+ { regex: /^\s*(?:pub(?:\([^)]*\))?\s+)?fn\s+([A-Za-z_]\w*)\s*[<(]/, kind: "func" },
746
+ { regex: /^\s*(?:pub(?:\([^)]*\))?\s+)?struct\s+([A-Za-z_]\w*)\b/, kind: "type" },
747
+ { regex: /^\s*(?:pub(?:\([^)]*\))?\s+)?enum\s+([A-Za-z_]\w*)\b/, kind: "type" },
748
+ { regex: /^\s*(?:pub(?:\([^)]*\))?\s+)?trait\s+([A-Za-z_]\w*)\b/, kind: "trait" },
749
+ { regex: /^\s*(?:pub(?:\([^)]*\))?\s+)?type\s+([A-Za-z_]\w*)\b/, kind: "type" },
750
+ { regex: /^(?:\s*pub(?:\([^)]*\))?\s+)?const\s+([A-Za-z_]\w*)\b/, kind: "const" },
751
+ { regex: /^(?:\s*pub(?:\([^)]*\))?\s+)?static\s+([A-Za-z_]\w*)\b/, kind: "var" }
752
+ ]);
753
+ return { symbols, imports: rustExtractor.extractImports?.(_path, text) ?? [] };
754
+ }
755
+ };
756
+ var cFamilyExtractor = {
757
+ langs: ["c", "c++"],
758
+ extractImports(_path, text) {
759
+ const imports = [];
760
+ for (const match of text.matchAll(/^\s*#\s*include\s*(?:"([^"]+)"|<([^>]+)>)/gm)) {
761
+ const quoted = match[1];
762
+ const system = match[2];
763
+ if (quoted) imports.push(quoted.startsWith(".") || quoted.startsWith("/") ? quoted : `./${quoted}`);
764
+ else if (system) imports.push(system);
765
+ }
766
+ return uniqueSorted2(imports);
767
+ },
768
+ extract(_path, text) {
769
+ const regexSymbols = extractWithLineRegex(text, [
770
+ { regex: /^\s*class\s+([A-Za-z_]\w*)\b/, kind: "class" },
771
+ {
772
+ regex: /^\s*(?:typedef\s+)?(?:struct\s+|union\s+|enum\s+(?:(?:class|struct)\s+)?)([A-Za-z_]\w*)\b/,
773
+ kind: "type"
774
+ },
775
+ {
776
+ regex: /^\s*(?!(?:typedef|using)\b)(?:template\s*<[^>]+>\s*)?(?:[A-Za-z_][\w:<>,*&\s]+\s+)+(?:(?:[A-Za-z_]\w*)::)*([~A-Za-z_]\w*)\s*\([^;]*\)\s*(?:const\s*)?(?:noexcept\s*)?(?:;|\{)?$/,
777
+ kind: "func"
778
+ },
779
+ { regex: /^(?:const\s+)?[A-Za-z_][\w:<>,*&\s]+\s+([A-Z][A-Z0-9_]*)\s*=/, kind: "const" }
780
+ ]);
781
+ const symbolsByKey = /* @__PURE__ */ new Map();
782
+ for (const symbol of [...regexSymbols, ...extractCFamilyAliasSymbols(text)]) {
783
+ const key = `${symbol.name}\0${symbol.kind}\0${symbol.line}`;
784
+ if (!symbolsByKey.has(key)) symbolsByKey.set(key, symbol);
785
+ }
786
+ const symbols = [...symbolsByKey.values()].sort(compareSymbols);
787
+ return { symbols, imports: cFamilyExtractor.extractImports?.(_path, text) ?? [] };
788
+ }
789
+ };
790
+ var javaExtractor = {
791
+ langs: ["java"],
792
+ extractImports(_path, text) {
793
+ return uniqueSorted2(extractMatches(text, /^\s*import\s+(?:static\s+)?([A-Za-z_][\w.*]*);/gm));
794
+ },
795
+ extract(_path, text) {
796
+ const symbols = extractWithLineRegex(text, [
797
+ { regex: /^\s*(?:public\s+|private\s+|protected\s+|abstract\s+|final\s+)*class\s+([A-Za-z_]\w*)\b/, kind: "class" },
798
+ {
799
+ regex: /^\s*(?:public\s+|private\s+|protected\s+|abstract\s+|final\s+)*interface\s+([A-Za-z_]\w*)\b/,
800
+ kind: "iface"
801
+ },
802
+ { regex: /^\s*(?:public\s+|private\s+|protected\s+|abstract\s+|final\s+)*enum\s+([A-Za-z_]\w*)\b/, kind: "type" },
803
+ {
804
+ regex: /^\s*(?:public\s+|private\s+|protected\s+|static\s+|final\s+|synchronized\s+)*[A-Za-z_][\w<>,[\]\s]*\s+([A-Za-z_]\w*)\s*\([^)]*\)\s*\{?$/,
805
+ kind: "method"
806
+ },
807
+ {
808
+ regex: /^\s*public\s+(?:static\s+|final\s+)*[A-Za-z_][\w<>,[\]\s]*\s+([A-Z][A-Z0-9_]*)\s*=/,
809
+ kind: "const"
810
+ }
811
+ ]);
812
+ return { symbols, imports: javaExtractor.extractImports?.(_path, text) ?? [] };
813
+ }
814
+ };
815
+ var rubyExtractor = {
816
+ langs: ["ruby"],
817
+ extractImports(_path, text) {
818
+ return uniqueSorted2([
819
+ ...extractMatches(text, /^\s*require\s+["']([^"']+)["']/gm),
820
+ ...extractMatches(text, /^\s*require_relative\s+["']([^"']+)["']/gm).map((item) => `./${item}`)
821
+ ]);
822
+ },
823
+ extract(_path, text) {
824
+ const symbols = extractWithLineRegex(text, [
825
+ { regex: /^\s*class\s+([A-Z]\w*(?:::[A-Z]\w*)*)\b/, kind: "class" },
826
+ { regex: /^\s*module\s+([A-Z]\w*(?:::[A-Z]\w*)*)\b/, kind: "type" },
827
+ { regex: /^\s*def\s+(?:self\.)?([A-Za-z_]\w*[!?=]?)\b/, kind: "func" },
828
+ { regex: /^([A-Z][A-Z0-9_]*)\s*=/, kind: "const" }
829
+ ]);
830
+ return { symbols, imports: rubyExtractor.extractImports?.(_path, text) ?? [] };
831
+ }
832
+ };
833
+ var csharpExtractor = {
834
+ langs: ["c#"],
835
+ extractImports(_path, text) {
836
+ return uniqueSorted2(
837
+ extractMatches(text, /^\s*using\s+(?:static\s+)?(?:[A-Za-z_]\w*\s*=\s*)?([A-Za-z_][\w.]*)\s*;/gm)
838
+ );
839
+ },
840
+ extract(_path, text) {
841
+ const symbols = extractWithLineRegex(text, [
842
+ {
843
+ regex: /^\s*(?:public\s+|private\s+|protected\s+|internal\s+|static\s+|sealed\s+|abstract\s+|partial\s+)*class\s+([A-Za-z_]\w*)\b/,
844
+ kind: "class"
845
+ },
846
+ {
847
+ regex: /^\s*(?:public\s+|private\s+|protected\s+|internal\s+|partial\s+)*interface\s+([A-Za-z_]\w*)\b/,
848
+ kind: "iface"
849
+ },
850
+ {
851
+ regex: /^\s*(?:public\s+|private\s+|protected\s+|internal\s+|readonly\s+|partial\s+)*(?:enum|struct|record)\s+([A-Za-z_]\w*)\b/,
852
+ kind: "type"
853
+ },
854
+ {
855
+ regex: /^\s*(?:public\s+|private\s+|protected\s+|internal\s+|static\s+|virtual\s+|override\s+|abstract\s+|sealed\s+|async\s+|partial\s+|new\s+)*(?!(?:if|for|foreach|while|switch|catch|return|using|else|do|new|class|interface|enum|struct|record|namespace|lock|throw)\b)[A-Za-z_][\w<>,[\].?\s]*\s+([A-Za-z_]\w*)\s*\([^)]*\)\s*\{?$/,
856
+ kind: "method"
857
+ },
858
+ {
859
+ regex: /^\s*(?:public\s+|private\s+|protected\s+|internal\s+|static\s+)*const\s+[A-Za-z_][\w<>,[\]\s]*\s+([A-Za-z_]\w*)\s*=/,
860
+ kind: "const"
861
+ }
862
+ ]);
863
+ return { symbols, imports: csharpExtractor.extractImports?.(_path, text) ?? [] };
864
+ }
865
+ };
866
+ var fallbackExtractors = [
867
+ tsJsExtractor,
868
+ pythonExtractor,
869
+ goExtractor,
870
+ rustExtractor,
871
+ cFamilyExtractor,
872
+ javaExtractor,
873
+ rubyExtractor,
874
+ csharpExtractor
875
+ ];
876
+ function extractWithExtractors(extractors, language, relPath, text) {
877
+ const symbols = /* @__PURE__ */ new Map();
878
+ const imports = [];
879
+ for (const extractor of extractors) {
880
+ if (!extractor.langs.includes(language)) continue;
881
+ const extracted = extractor.extract(relPath, text);
882
+ for (const symbol of extracted.symbols) {
883
+ const key = `${symbol.name}\0${symbol.kind}\0${symbol.line}`;
884
+ if (!symbols.has(key)) symbols.set(key, symbol);
885
+ }
886
+ imports.push(...extracted.imports);
887
+ }
888
+ return {
889
+ symbols: [...symbols.values()].sort(compareSymbols),
890
+ imports: uniqueSorted2(imports)
891
+ };
892
+ }
893
+ function extractImportsWithExtractors(extractors, language, relPath, text) {
894
+ const imports = [];
895
+ for (const extractor of extractors) {
896
+ if (!extractor.langs.includes(language) || !extractor.extractImports) continue;
897
+ imports.push(...extractor.extractImports(relPath, text));
898
+ }
899
+ return uniqueSorted2(imports);
900
+ }
901
+ function mergeTreeSitterWithRegexImports(language, relPath, text, extracted) {
902
+ const regexImports = extractImportsWithExtractors(fallbackExtractors, language, relPath, text);
903
+ return {
904
+ symbols: extracted.symbols.sort(compareSymbols),
905
+ imports: uniqueSorted2([...extracted.imports, ...regexImports])
906
+ };
907
+ }
908
+ function fallbackExtraction(language, relPath, text) {
909
+ return extractWithExtractors(fallbackExtractors, language, relPath, text);
910
+ }
911
+ var MAX_TREE_SITTER_SOURCE_CHARS = 512 * 1024;
912
+ function extractSourceFile(language, relPath, text, treeSitterExtractor) {
913
+ if (!treeSitterExtractor.langs.includes(language)) return fallbackExtraction(language, relPath, text);
914
+ if (text.length > MAX_TREE_SITTER_SOURCE_CHARS) return fallbackExtraction(language, relPath, text);
915
+ try {
916
+ return mergeTreeSitterWithRegexImports(language, relPath, text, treeSitterExtractor.extract(relPath, text));
917
+ } catch {
918
+ return fallbackExtraction(language, relPath, text);
919
+ }
920
+ }
921
+ function buildFile(cwd, relPath, treeSitterExtractor, readFile) {
922
+ const pathLanguage = languageForPath(relPath);
923
+ if (!pathLanguage) return null;
924
+ let text;
925
+ try {
926
+ text = readFile(join(cwd, relPath));
927
+ } catch {
928
+ return null;
929
+ }
930
+ if (text === null) return null;
931
+ const language = pathLanguage === "c" && isAmbiguousHeaderPath(relPath) ? classifyCHeaderLanguage(text) : pathLanguage;
932
+ const file = {
933
+ id: stableFileId(relPath),
934
+ path: relPath,
935
+ lang: language,
936
+ loc: lineCount(text),
937
+ role: roleFor(relPath, language),
938
+ hash: contentHash(text),
939
+ imports: []
940
+ };
941
+ if (text.trim().length === 0) return { file, symbols: [] };
942
+ const extracted = isCMakePath(relPath) ? extractCMake(text) : language !== "config" ? extractSourceFile(language, relPath, text, treeSitterExtractor) : null;
943
+ if (!extracted) return { file, symbols: [] };
944
+ const summary = firstDocSummary(text);
945
+ const sourceFile = {
946
+ ...file,
947
+ imports: extracted.imports,
948
+ ...summary ? { summary } : {}
949
+ };
950
+ const symbols = extracted.symbols.map((symbol) => ({
951
+ name: symbol.name,
952
+ kind: symbol.kind,
953
+ fileId: sourceFile.id,
954
+ line: symbol.line,
955
+ ...symbolSigFields(symbol.kind, symbol.sig)
956
+ }));
957
+ return {
958
+ file: sourceFile,
959
+ symbols
960
+ };
961
+ }
962
+ function candidatePathsForImport(cwd, fromRel, specifier) {
963
+ const fromDir = dirname(join(cwd, fromRel));
964
+ const cleaned = specifier.replace(/\\/g, "/");
965
+ const base = cleaned.startsWith(".") || cleaned.startsWith("/") ? resolve(fromDir, cleaned) : "";
966
+ if (!base) return [];
967
+ const candidates = [base];
968
+ for (const ext of RESOLUTION_EXTENSIONS) candidates.push(`${base}${ext}`);
969
+ for (const ext of RESOLUTION_EXTENSIONS) candidates.push(join(base, `index${ext}`));
970
+ if (cleaned.endsWith(".js")) {
971
+ const stripped = base.replace(/\.js$/, "");
972
+ for (const ext of [".ts", ".tsx", ".mts", ".cts"]) candidates.push(`${stripped}${ext}`);
973
+ }
974
+ if (/^[.]+[A-Za-z_]/.test(cleaned)) {
975
+ const pythonModule = cleaned.replace(/^\.+/, "").replace(/\./g, "/");
976
+ const pythonBase = resolve(fromDir, pythonModule);
977
+ candidates.push(`${pythonBase}.py`, join(pythonBase, "__init__.py"));
978
+ }
979
+ return uniqueSorted2(
980
+ candidates.map((candidate) => normalizeRel(cwd, candidate)).filter((candidate) => !candidate.startsWith(".."))
981
+ );
982
+ }
983
+ function createImportResolver(cwd) {
984
+ const candidatesByOrigin = /* @__PURE__ */ new Map();
985
+ const onDisk = /* @__PURE__ */ new Map();
986
+ const candidatesFor = (fromRel, specifier) => {
987
+ const key = `${dirname(fromRel)}\0${specifier}`;
988
+ let candidates = candidatesByOrigin.get(key);
989
+ if (!candidates) {
990
+ candidates = candidatePathsForImport(cwd, fromRel, specifier);
991
+ candidatesByOrigin.set(key, candidates);
992
+ }
993
+ return candidates;
994
+ };
995
+ const isFile = (candidate) => {
996
+ const cached = onDisk.get(candidate);
997
+ if (cached !== void 0) return cached;
998
+ let exists;
999
+ try {
1000
+ exists = statSync(join(cwd, candidate)).isFile();
1001
+ } catch {
1002
+ exists = false;
1003
+ }
1004
+ onDisk.set(candidate, exists);
1005
+ return exists;
1006
+ };
1007
+ return {
1008
+ resolve(fromRel, specifier, pathToId) {
1009
+ for (const candidate of candidatesFor(fromRel, specifier)) {
1010
+ if (pathToId.has(candidate)) return pathToId.get(candidate) ?? null;
1011
+ if (isFile(candidate)) return null;
1012
+ }
1013
+ return null;
1014
+ }
1015
+ };
1016
+ }
1017
+ async function buildEdges(cwd, files, slicer) {
1018
+ const pathToId = new Map(files.map((file) => [file.path, file.id]));
1019
+ const resolver = createImportResolver(cwd);
1020
+ const edges = [];
1021
+ const seen = /* @__PURE__ */ new Set();
1022
+ for (const file of files) {
1023
+ for (const specifier of file.imports) {
1024
+ await slicer.tick();
1025
+ const target = resolver.resolve(file.path, specifier, pathToId);
1026
+ const edge = target ? { fileId: file.id, toFileId: target } : { fileId: file.id, externalModule: specifier };
1027
+ const key = "toFileId" in edge ? `${edge.fileId}\0${edge.toFileId}` : `${edge.fileId}\0${edge.externalModule}`;
1028
+ if (seen.has(key)) continue;
1029
+ seen.add(key);
1030
+ edges.push(edge);
1031
+ }
1032
+ }
1033
+ return edges.sort(compareEdges);
1034
+ }
1035
+ function compareFiles(a, b) {
1036
+ return a.path.localeCompare(b.path);
1037
+ }
1038
+ function compareCodewikiSymbols(a, b) {
1039
+ const pathCmp = a.fileId.localeCompare(b.fileId);
1040
+ return pathCmp || a.line - b.line || a.name.localeCompare(b.name) || a.kind.localeCompare(b.kind);
1041
+ }
1042
+ function compareEdges(a, b) {
1043
+ const fileCmp = a.fileId.localeCompare(b.fileId);
1044
+ if (fileCmp !== 0) return fileCmp;
1045
+ const aTarget = "toFileId" in a ? a.toFileId : `~${a.externalModule}`;
1046
+ const bTarget = "toFileId" in b ? b.toFileId : `~${b.externalModule}`;
1047
+ return aTarget.localeCompare(bTarget);
1048
+ }
1049
+ function promoteSingleSourceEntry(files) {
1050
+ const sourceFiles = files.filter((file) => file.lang !== "config");
1051
+ if (sourceFiles.length !== 1) return files;
1052
+ const only = sourceFiles[0];
1053
+ if (only?.role !== "module") return files;
1054
+ return files.map((file) => file.id === only.id ? { ...file, role: "entry" } : file);
1055
+ }
1056
+ async function codewikiFromBuiltFiles(cwd, language, builtFiles, slicer) {
1057
+ const baseBuiltFiles = builtFiles.map((item) => ({
1058
+ ...item,
1059
+ file: { ...item.file, role: roleFor(item.file.path, item.file.lang) }
1060
+ }));
1061
+ const files = promoteSingleSourceEntry(baseBuiltFiles.map((item) => item.file).sort(compareFiles));
1062
+ const roleById = new Map(files.map((file) => [file.id, file.role]));
1063
+ const normalizedBuilt = baseBuiltFiles.map((item) => {
1064
+ const role = roleById.get(item.file.id);
1065
+ return role && role !== item.file.role ? { ...item, file: { ...item.file, role } } : item;
1066
+ });
1067
+ const normalizedFiles = normalizedBuilt.map((item) => item.file).sort(compareFiles);
1068
+ return {
1069
+ version: CODEWIKI_VERSION,
1070
+ language,
1071
+ files: normalizedFiles,
1072
+ symbols: normalizedBuilt.flatMap((item) => item.symbols).sort(compareCodewikiSymbols),
1073
+ edges: await buildEdges(cwd, normalizedFiles, slicer)
1074
+ };
1075
+ }
1076
+ async function buildFromPaths(cwd, language, relPaths, options = {}) {
1077
+ const slicer = options.slicer ?? createSlicer();
1078
+ const sortedPaths = [...relPaths].sort(compareStrings2);
1079
+ const treeSitterExtractor = await loadTreeSitterExtractor();
1080
+ await treeSitterExtractor.ensureGrammarsForPaths(sortedPaths);
1081
+ const readFile = options.readFile ?? defaultReadFile;
1082
+ const builtFiles = [];
1083
+ for (const relPath of sortedPaths) {
1084
+ await slicer.tick();
1085
+ const built = buildFile(cwd, relPath, treeSitterExtractor, readFile);
1086
+ if (built) builtFiles.push(built);
1087
+ }
1088
+ return codewikiFromBuiltFiles(cwd, language, builtFiles, slicer);
1089
+ }
1090
+ async function buildCodewiki(input, options = {}) {
1091
+ const slicer = options.slicer ?? createSlicer();
1092
+ const files = (await enumerateWorkspaceFilesAsync(input.cwd, WORKSPACE_EXCLUDED_DIRS, void 0, slicer)).filter(
1093
+ isIndexablePath
1094
+ );
1095
+ return buildFromPaths(input.cwd, input.language, files, { ...options, slicer });
1096
+ }
1097
+ async function updateCodewikiPaths(cwd, codewiki, paths, options = {}) {
1098
+ const normalizedPaths = uniqueSorted2(
1099
+ paths.map(normalizeInputPath).filter((path) => path.length > 0 && !path.startsWith(".."))
1100
+ );
1101
+ if (normalizedPaths.length === 0) return codewiki;
1102
+ if (normalizedPaths.some(
1103
+ (path) => path === ".gitignore" || path.endsWith("/.gitignore") || path === ".git/info/exclude" || path === ".git/index" || path === ".gitmodules"
1104
+ )) {
1105
+ return buildCodewiki({ cwd, language: codewiki.language }, options);
1106
+ }
1107
+ const slicer = options.slicer ?? createSlicer();
1108
+ const existingPaths = new Set(codewiki.files.map((file) => file.path));
1109
+ const visiblePaths = new Set(filterWorkspaceFileCandidates(cwd, normalizedPaths, WORKSPACE_EXCLUDED_DIRS));
1110
+ const readFile = options.readFile ?? defaultReadFile;
1111
+ const changedPathSet = new Set(normalizedPaths);
1112
+ const rebuildPaths = [];
1113
+ let hasIndexChange = false;
1114
+ for (const relPath of normalizedPaths) {
1115
+ const wasIndexed = existingPaths.has(relPath);
1116
+ const isCurrentIndexableFile = isIndexablePath(relPath) && visiblePaths.has(relPath);
1117
+ if (!wasIndexed && !isCurrentIndexableFile) continue;
1118
+ hasIndexChange = true;
1119
+ if (isCurrentIndexableFile) rebuildPaths.push(relPath);
1120
+ }
1121
+ if (!hasIndexChange) return codewiki;
1122
+ const rebuiltFiles = [];
1123
+ if (rebuildPaths.length > 0) {
1124
+ const treeSitterExtractor = await loadTreeSitterExtractor();
1125
+ await treeSitterExtractor.ensureGrammarsForPaths(rebuildPaths);
1126
+ for (const relPath of rebuildPaths) {
1127
+ await slicer.tick();
1128
+ const built = buildFile(cwd, relPath, treeSitterExtractor, readFile);
1129
+ if (built) rebuiltFiles.push(built);
1130
+ }
1131
+ }
1132
+ const removedFileIds = new Set(codewiki.files.filter((file) => changedPathSet.has(file.path)).map((file) => file.id));
1133
+ const symbolsByFileId = /* @__PURE__ */ new Map();
1134
+ for (const symbol of codewiki.symbols) {
1135
+ if (removedFileIds.has(symbol.fileId)) continue;
1136
+ const symbols = symbolsByFileId.get(symbol.fileId) ?? [];
1137
+ symbols.push(symbol);
1138
+ symbolsByFileId.set(symbol.fileId, symbols);
1139
+ }
1140
+ const keptFiles = codewiki.files.filter((file) => !changedPathSet.has(file.path)).map((file) => ({ file, symbols: symbolsByFileId.get(file.id) ?? [] }));
1141
+ return codewikiFromBuiltFiles(cwd, codewiki.language, [...keptFiles, ...rebuiltFiles], slicer);
1142
+ }
1143
+ async function syncCodewiki(cwd, codewiki, options = {}) {
1144
+ const slicer = options.slicer ?? createSlicer();
1145
+ const readFile = options.readFile ?? defaultReadFile;
1146
+ const currentPaths = (await enumerateWorkspaceFilesAsync(cwd, WORKSPACE_EXCLUDED_DIRS, void 0, slicer)).filter(
1147
+ isIndexablePath
1148
+ );
1149
+ const currentFiles = /* @__PURE__ */ new Map();
1150
+ const currentTexts = /* @__PURE__ */ new Map();
1151
+ for (const relPath of currentPaths) {
1152
+ await slicer.tick();
1153
+ const text = readFile(join(cwd, relPath));
1154
+ if (text !== null) {
1155
+ currentFiles.set(relPath, contentHash(text));
1156
+ currentTexts.set(relPath, text);
1157
+ }
1158
+ }
1159
+ const indexedFiles = new Map(codewiki.files.map((file) => [file.path, file]));
1160
+ const changedPaths = /* @__PURE__ */ new Set();
1161
+ for (const [relPath, hash] of currentFiles) {
1162
+ if (indexedFiles.get(relPath)?.hash !== hash) changedPaths.add(relPath);
1163
+ }
1164
+ for (const relPath of indexedFiles.keys()) {
1165
+ if (!currentFiles.has(relPath)) changedPaths.add(relPath);
1166
+ }
1167
+ if (changedPaths.size === 0) return codewiki;
1168
+ const syncOptions = {
1169
+ ...options,
1170
+ slicer,
1171
+ readFile: (path) => currentTexts.get(normalizeRel(cwd, path)) ?? readFile(path)
1172
+ };
1173
+ return updateCodewikiPaths(cwd, codewiki, [...changedPaths], syncOptions);
1174
+ }
1175
+ function symbolSigFields(kind, sig) {
1176
+ if (!CODEWIKI_SYMBOL_KINDS_WITH_SIG.has(kind)) return {};
1177
+ const clean = sig?.trim().slice(0, 240);
1178
+ return clean && clean.length > 0 ? { sig: clean } : {};
1179
+ }
1180
+
1181
+ export {
1182
+ buildCodewiki,
1183
+ updateCodewikiPaths,
1184
+ syncCodewiki
1185
+ };
1186
+ //# sourceMappingURL=chunk-POHLU5DW.js.map