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