onbuzz 4.7.2 → 4.8.1

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 (994) hide show
  1. package/package.json +1 -1
  2. package/scripts/grounding-bench/bench.mjs +300 -0
  3. package/scripts/grounding-bench/cases.js +173 -0
  4. package/scripts/grounding-bench/imageBuilder.js +119 -0
  5. package/src/core/__tests__/agentScheduler.nativePromptPick.test.js +319 -0
  6. package/src/core/__tests__/agentScheduler.test.js +74 -0
  7. package/src/core/agentPool.js +12 -0
  8. package/src/core/agentScheduler.js +233 -7
  9. package/src/index.js +36 -0
  10. package/src/interfaces/webServer.js +42 -0
  11. package/src/services/__tests__/memoryService.test.js +521 -450
  12. package/src/services/__tests__/modelRouterNaming.test.js +111 -0
  13. package/src/services/__tests__/modelRouterService.test.js +477 -388
  14. package/src/services/aiService.js +136 -1
  15. package/src/services/grounding/GroundingModel.js +116 -0
  16. package/src/services/grounding/KimiAdapter.js +427 -0
  17. package/src/services/grounding/MockAdapter.js +125 -0
  18. package/src/services/grounding/__tests__/KimiAdapter.test.js +475 -0
  19. package/src/services/grounding/__tests__/MockAdapter.test.js +66 -0
  20. package/src/services/grounding/__tests__/groundingMetrics.test.js +156 -0
  21. package/src/services/grounding/__tests__/registry.test.js +122 -0
  22. package/src/services/grounding/constants.js +121 -0
  23. package/src/services/grounding/groundingMetrics.js +121 -0
  24. package/src/services/grounding/index.js +53 -0
  25. package/src/services/grounding/registry.js +125 -0
  26. package/src/services/grounding/types.js +108 -0
  27. package/src/services/memoryService.js +559 -521
  28. package/src/services/modelRouterService.js +433 -364
  29. package/src/services/tokenCountingService.js +2 -2
  30. package/src/tools/__tests__/agentCommunicationTool.test.js +752 -717
  31. package/src/tools/__tests__/baseTool.test.js +164 -0
  32. package/src/tools/__tests__/codeMapTool.test.js +388 -0
  33. package/src/tools/__tests__/foundryWebSearchTool.test.js +252 -0
  34. package/src/tools/__tests__/memoryTool.reminisce.test.js +364 -363
  35. package/src/tools/__tests__/memoryTool.test.js +391 -297
  36. package/src/tools/__tests__/parserHelpers.test.js +233 -0
  37. package/src/tools/__tests__/webTool.e2e.test.js +13 -1
  38. package/src/tools/agentCommunicationTool.js +1399 -1385
  39. package/src/tools/baseTool.js +102 -5
  40. package/src/tools/codeMapTool.js +794 -130
  41. package/src/tools/desktop/DesktopTool.js +638 -0
  42. package/src/tools/desktop/__tests__/DesktopTool.e2e.test.js +306 -0
  43. package/src/tools/desktop/__tests__/DesktopTool.test.js +507 -0
  44. package/src/tools/desktop/__tests__/osCapabilities.test.js +106 -0
  45. package/src/tools/desktop/__tests__/osController.test.js +364 -0
  46. package/src/tools/desktop/osCapabilities.js +248 -0
  47. package/src/tools/desktop/osController.js +491 -0
  48. package/src/tools/foundryWebSearchTool.js +273 -0
  49. package/src/tools/memoryTool.js +892 -820
  50. package/src/tools/openaiFunctionSchemas.js +14 -0
  51. package/src/tools/parserHelpers.js +296 -0
  52. package/src/tools/skillsTool.js +282 -277
  53. package/src/utilities/__tests__/planInjection.test.js +125 -0
  54. package/src/utilities/__tests__/tagParser.test.js +943 -887
  55. package/src/utilities/constants.js +19 -1
  56. package/src/utilities/planInjection.js +103 -0
  57. package/src/utilities/tagParser.js +918 -896
  58. package/web-ui/build/index.html +2 -2
  59. package/web-ui/build/static/1c-DGpIT7i5.js +1 -0
  60. package/web-ui/build/static/abap-5wFDdWLh.js +1 -0
  61. package/web-ui/build/static/abnf-BP1dpNSE.js +1 -0
  62. package/web-ui/build/static/abnf-DBEIAl8g.js +1 -0
  63. package/web-ui/build/static/accesslog-CWSM_T5E.js +1 -0
  64. package/web-ui/build/static/actionscript-DONkco1J.js +1 -0
  65. package/web-ui/build/static/actionscript-FqBYk5er.js +1 -0
  66. package/web-ui/build/static/ada-C2JLRIaM.js +1 -0
  67. package/web-ui/build/static/ada-gKiygTRK.js +1 -0
  68. package/web-ui/build/static/agda-CkSODqK2.js +1 -0
  69. package/web-ui/build/static/al-BJ_YR6p7.js +1 -0
  70. package/web-ui/build/static/angelscript-Dg2byMGg.js +1 -0
  71. package/web-ui/build/static/antlr4-BnpyaFNr.js +1 -0
  72. package/web-ui/build/static/apache-Dffxsd7O.js +1 -0
  73. package/web-ui/build/static/apacheconf-DLitjtWj.js +1 -0
  74. package/web-ui/build/static/apex-Drr_IvU2.js +1 -0
  75. package/web-ui/build/static/apl-CF6qxmXG.js +1 -0
  76. package/web-ui/build/static/applescript-CjOlw3b_.js +1 -0
  77. package/web-ui/build/static/applescript-DjkSl1Ry.js +1 -0
  78. package/web-ui/build/static/aql-KwVmK1gP.js +1 -0
  79. package/web-ui/build/static/arcade-CENSXx0R.js +1 -0
  80. package/web-ui/build/static/arduino-B3Ta9Fll.js +1 -0
  81. package/web-ui/build/static/arduino-CzcsaB9_.js +1 -0
  82. package/web-ui/build/static/arff-CMJSVt_O.js +1 -0
  83. package/web-ui/build/static/armasm-0zSgSPB4.js +1 -0
  84. package/web-ui/build/static/asciidoc-B8K5ctWq.js +1 -0
  85. package/web-ui/build/static/asciidoc-bk2Sg6b6.js +1 -0
  86. package/web-ui/build/static/asm6502-ji6zm4FQ.js +1 -0
  87. package/web-ui/build/static/asmatmel-DJqObM4Y.js +1 -0
  88. package/web-ui/build/static/aspectj-DqQKI7J5.js +1 -0
  89. package/web-ui/build/static/aspnet-9cenTxW7.js +1 -0
  90. package/web-ui/build/static/autohotkey-C6EhiZvl.js +1 -0
  91. package/web-ui/build/static/autohotkey-sTGJOvMM.js +1 -0
  92. package/web-ui/build/static/autoit-B0Im8iQ1.js +1 -0
  93. package/web-ui/build/static/autoit-CO6pUD0H.js +1 -0
  94. package/web-ui/build/static/avisynth-OvOHTfj5.js +1 -0
  95. package/web-ui/build/static/avrasm-BLWZ5Mye.js +1 -0
  96. package/web-ui/build/static/avro-idl-BB2ODvnw.js +1 -0
  97. package/web-ui/build/static/awk-_jhMabQ0.js +1 -0
  98. package/web-ui/build/static/axapta-DdBRgoYy.js +1 -0
  99. package/web-ui/build/static/bash-CsaRGXBQ.js +1 -0
  100. package/web-ui/build/static/bash-CxLFkwAC.js +1 -0
  101. package/web-ui/build/static/basic-BJyy7JJE.js +1 -0
  102. package/web-ui/build/static/basic-CrMb-gv0.js +1 -0
  103. package/web-ui/build/static/batch-BvcykMe5.js +1 -0
  104. package/web-ui/build/static/bbcode-EOBuY5Y6.js +1 -0
  105. package/web-ui/build/static/bicep-QkDJBA34.js +1 -0
  106. package/web-ui/build/static/birb-TAOxKurn.js +1 -0
  107. package/web-ui/build/static/bison-BEK6cnad.js +1 -0
  108. package/web-ui/build/static/bnf-DfEODxsr.js +1 -0
  109. package/web-ui/build/static/bnf-DhbMjsuA.js +1 -0
  110. package/web-ui/build/static/brainfuck-BoVocOa7.js +1 -0
  111. package/web-ui/build/static/brainfuck-DDC5QXPK.js +1 -0
  112. package/web-ui/build/static/brightscript-DNN598w2.js +1 -0
  113. package/web-ui/build/static/bro-Cn_jjZ8P.js +1 -0
  114. package/web-ui/build/static/bsl-CMCN75Gu.js +1 -0
  115. package/web-ui/build/static/c-DbOGQnEJ.js +1 -0
  116. package/web-ui/build/static/c-kggwYFsy.js +1 -0
  117. package/web-ui/build/static/c-like-BIsuUvof.js +1 -0
  118. package/web-ui/build/static/cal-DpgMsBZE.js +1 -0
  119. package/web-ui/build/static/capnproto-C1AHYI-M.js +1 -0
  120. package/web-ui/build/static/ceylon-pvJffDe1.js +1 -0
  121. package/web-ui/build/static/cfscript-C1qylu52.js +1 -0
  122. package/web-ui/build/static/chaiscript-D417WKRI.js +1 -0
  123. package/web-ui/build/static/cil-CjbZHbcY.js +1 -0
  124. package/web-ui/build/static/clean-Dvc6R-F2.js +1 -0
  125. package/web-ui/build/static/clojure-CSVRQPMQ.js +1 -0
  126. package/web-ui/build/static/clojure-ig1Vkg7X.js +1 -0
  127. package/web-ui/build/static/clojure-repl-C1uyEabk.js +1 -0
  128. package/web-ui/build/static/cmake-DSbVcAB3.js +1 -0
  129. package/web-ui/build/static/cmake-Zp8kPwnH.js +1 -0
  130. package/web-ui/build/static/cobol-OsZSiK_P.js +1 -0
  131. package/web-ui/build/static/coffeescript-D8r0416S.js +1 -0
  132. package/web-ui/build/static/coffeescript-DCpgClxh.js +1 -0
  133. package/web-ui/build/static/concurnas-DKnsxUOc.js +1 -0
  134. package/web-ui/build/static/coq-BQFlywVI.js +1 -0
  135. package/web-ui/build/static/coq-BvS9mQB2.js +1 -0
  136. package/web-ui/build/static/cos-D3ze2791.js +1 -0
  137. package/web-ui/build/static/cpp-Bw-cV3P1.js +1 -0
  138. package/web-ui/build/static/cpp-vi1p7XpB.js +1 -0
  139. package/web-ui/build/static/crmsh-BClnJTeQ.js +1 -0
  140. package/web-ui/build/static/crystal-DGzOUYZq.js +1 -0
  141. package/web-ui/build/static/crystal-DMzk6EvA.js +1 -0
  142. package/web-ui/build/static/csharp-BTom8s2X.js +1 -0
  143. package/web-ui/build/static/csharp-Cp2V3jfR.js +1 -0
  144. package/web-ui/build/static/cshtml-Dmtt9Kto.js +1 -0
  145. package/web-ui/build/static/csp-WPVsLe9_.js +1 -0
  146. package/web-ui/build/static/csp-qddj5fu_.js +1 -0
  147. package/web-ui/build/static/css-B0FAm7kj.js +1 -0
  148. package/web-ui/build/static/css-extras-Bx3pvjiG.js +1 -0
  149. package/web-ui/build/static/csv-CH-edgS5.js +1 -0
  150. package/web-ui/build/static/cypher-c3G8Leew.js +1 -0
  151. package/web-ui/build/static/d-BMDSy22_.js +1 -0
  152. package/web-ui/build/static/d-BdH4oW8-.js +1 -0
  153. package/web-ui/build/static/dart-C-r72q-O.js +1 -0
  154. package/web-ui/build/static/dart-CwpBMrKa.js +1 -0
  155. package/web-ui/build/static/dataweave-BPvqdt4k.js +1 -0
  156. package/web-ui/build/static/dax-Eyy6ixcN.js +1 -0
  157. package/web-ui/build/static/delphi-DhEbPj_5.js +1 -0
  158. package/web-ui/build/static/dhall-Ct1L8sN1.js +1 -0
  159. package/web-ui/build/static/diff-CSTqCgwn.js +1 -0
  160. package/web-ui/build/static/diff-Da97B5vW.js +1 -0
  161. package/web-ui/build/static/django-DGit_lCg.js +1 -0
  162. package/web-ui/build/static/django-DPgqFB8k.js +1 -0
  163. package/web-ui/build/static/dns-DUyXuZ-a.js +1 -0
  164. package/web-ui/build/static/dns-zone-file-D79MDxVG.js +1 -0
  165. package/web-ui/build/static/docker-DTiy4o38.js +1 -0
  166. package/web-ui/build/static/dockerfile-CvwPP8wE.js +1 -0
  167. package/web-ui/build/static/dos-CaIUWxvb.js +1 -0
  168. package/web-ui/build/static/dot-D3504w6Y.js +1 -0
  169. package/web-ui/build/static/dsconfig-Smy1eeX_.js +1 -0
  170. package/web-ui/build/static/dts-DyTYSXZj.js +1 -0
  171. package/web-ui/build/static/dust-CrJyi6qA.js +1 -0
  172. package/web-ui/build/static/ebnf-C8nqfkBH.js +1 -0
  173. package/web-ui/build/static/ebnf-Cuh5Vh2-.js +1 -0
  174. package/web-ui/build/static/editorconfig-C7pTGl6n.js +1 -0
  175. package/web-ui/build/static/eiffel-C75MSJCA.js +1 -0
  176. package/web-ui/build/static/ejs-Dyo7DF5w.js +1 -0
  177. package/web-ui/build/static/elixir-D4yJefOc.js +1 -0
  178. package/web-ui/build/static/elixir-DKRow2SJ.js +1 -0
  179. package/web-ui/build/static/elm-CgbdDlkT.js +1 -0
  180. package/web-ui/build/static/elm-D3N-UgU0.js +1 -0
  181. package/web-ui/build/static/erb-BsITh8qW.js +1 -0
  182. package/web-ui/build/static/erb-lY_LyKyS.js +1 -0
  183. package/web-ui/build/static/erlang-BCnPiYmB.js +1 -0
  184. package/web-ui/build/static/erlang-JEghiPXc.js +1 -0
  185. package/web-ui/build/static/erlang-repl-DzU97ugC.js +1 -0
  186. package/web-ui/build/static/etlua-CsBo8cJa.js +1 -0
  187. package/web-ui/build/static/excel-formula-C2piiCYa.js +1 -0
  188. package/web-ui/build/static/excel-kqNypwQD.js +1 -0
  189. package/web-ui/build/static/factor-DZTOhkyU.js +1 -0
  190. package/web-ui/build/static/false-yLjhfaSw.js +1 -0
  191. package/web-ui/build/static/firestore-security-rules-oaQNoH8l.js +1 -0
  192. package/web-ui/build/static/fix-C9IfnTuS.js +1 -0
  193. package/web-ui/build/static/flix-EmJ_JhPo.js +1 -0
  194. package/web-ui/build/static/flow-DCUl7IAQ.js +1 -0
  195. package/web-ui/build/static/fortran-DvyxJmFN.js +1 -0
  196. package/web-ui/build/static/fortran-EEP9R3S5.js +1 -0
  197. package/web-ui/build/static/fsharp-D_98s3RX.js +1 -0
  198. package/web-ui/build/static/fsharp-Dt9jOO5G.js +1 -0
  199. package/web-ui/build/static/ftl-C8gMHWLo.js +1 -0
  200. package/web-ui/build/static/gams-BHxVPb4z.js +1 -0
  201. package/web-ui/build/static/gap-DFtyHk-q.js +1 -0
  202. package/web-ui/build/static/gauss-BwhJWUcg.js +1 -0
  203. package/web-ui/build/static/gcode-BvmXwp09.js +1 -0
  204. package/web-ui/build/static/gcode-gWcD6Vc7.js +1 -0
  205. package/web-ui/build/static/gdscript-btHoX8RE.js +1 -0
  206. package/web-ui/build/static/gedcom-MgPs9iqh.js +1 -0
  207. package/web-ui/build/static/gherkin-B9c_Q16A.js +1 -0
  208. package/web-ui/build/static/gherkin-BvOgkK6h.js +1 -0
  209. package/web-ui/build/static/git-D9XWOVcQ.js +1 -0
  210. package/web-ui/build/static/glsl-CshBHxHY.js +1 -0
  211. package/web-ui/build/static/glsl-fNRUMTDr.js +1 -0
  212. package/web-ui/build/static/gml-B78deHK8.js +1 -0
  213. package/web-ui/build/static/gml-Cj7d2u8O.js +1 -0
  214. package/web-ui/build/static/gn-CJLD-mF1.js +1 -0
  215. package/web-ui/build/static/go-CT93BEkL.js +1 -0
  216. package/web-ui/build/static/go-CTTlNuQO.js +1 -0
  217. package/web-ui/build/static/go-module-BgnXboUE.js +1 -0
  218. package/web-ui/build/static/golo-2S5tXS-l.js +1 -0
  219. package/web-ui/build/static/gradle-8W8DCcWJ.js +1 -0
  220. package/web-ui/build/static/graphql-DZfp6FNU.js +1 -0
  221. package/web-ui/build/static/groovy-BfsyMb3X.js +1 -0
  222. package/web-ui/build/static/groovy-Dxov7ENz.js +1 -0
  223. package/web-ui/build/static/haml-BlUFsdVV.js +1 -0
  224. package/web-ui/build/static/haml-CjVj6vvW.js +1 -0
  225. package/web-ui/build/static/handlebars-DxrQFkyA.js +1 -0
  226. package/web-ui/build/static/handlebars-FE6fotYl.js +1 -0
  227. package/web-ui/build/static/haskell-B6z0RCD_.js +1 -0
  228. package/web-ui/build/static/haskell-JBFmJTRy.js +1 -0
  229. package/web-ui/build/static/haxe-BtMZMi-_.js +1 -0
  230. package/web-ui/build/static/haxe-C1J8n-fH.js +1 -0
  231. package/web-ui/build/static/hcl-DJP-bFWE.js +1 -0
  232. package/web-ui/build/static/hlsl-DrGjhs1b.js +1 -0
  233. package/web-ui/build/static/hoon-Cg-ZhqIT.js +1 -0
  234. package/web-ui/build/static/hpkp-D07vgmoZ.js +1 -0
  235. package/web-ui/build/static/hsp-CsypPWoA.js +1 -0
  236. package/web-ui/build/static/hsts-B6DMRxvP.js +1 -0
  237. package/web-ui/build/static/htmlbars-BI7_Hw4e.js +1 -0
  238. package/web-ui/build/static/http-90ihEi4s.js +1 -0
  239. package/web-ui/build/static/http-Dp4QXj9E.js +1 -0
  240. package/web-ui/build/static/hy-BMgKvP4K.js +1 -0
  241. package/web-ui/build/static/ichigojam-D6wKvJDb.js +1 -0
  242. package/web-ui/build/static/icon-CrgkmCwl.js +1 -0
  243. package/web-ui/build/static/icu-message-format-Bi2JxCXs.js +1 -0
  244. package/web-ui/build/static/idris-DbUsyZt5.js +1 -0
  245. package/web-ui/build/static/iecst-CQZ9t8fW.js +1 -0
  246. package/web-ui/build/static/ignore-BaFgtNMs.js +1 -0
  247. package/web-ui/build/static/index-DEWSWosh.css +1 -0
  248. package/web-ui/build/static/index-Di1bjCFA.js +13 -0
  249. package/web-ui/build/static/index-otR_WSsL.js +1 -0
  250. package/web-ui/build/static/index-whZPU4as.js +1183 -0
  251. package/web-ui/build/static/inform7-ClyX1Gro.js +1 -0
  252. package/web-ui/build/static/inform7-tZHBS5XP.js +1 -0
  253. package/web-ui/build/static/ini-BrP5JNYL.js +1 -0
  254. package/web-ui/build/static/ini-CVkrAhwV.js +1 -0
  255. package/web-ui/build/static/io-BJ1Y6Bdc.js +1 -0
  256. package/web-ui/build/static/irpf90-fjjcKS_8.js +1 -0
  257. package/web-ui/build/static/isbl-ClpvfUIz.js +1 -0
  258. package/web-ui/build/static/j-CICW77xS.js +1 -0
  259. package/web-ui/build/static/java-B9DFK-0E.js +1 -0
  260. package/web-ui/build/static/java-BL_6rYko.js +1 -0
  261. package/web-ui/build/static/javadoc-Cc4HKpKK.js +1 -0
  262. package/web-ui/build/static/javadoclike-CgNkUDOm.js +1 -0
  263. package/web-ui/build/static/javascript-CM40ZECq.js +1 -0
  264. package/web-ui/build/static/javastacktrace-BHSqXfG5.js +1 -0
  265. package/web-ui/build/static/jboss-cli-Bv5NhVSZ.js +1 -0
  266. package/web-ui/build/static/jexl--Ohk_keA.js +1 -0
  267. package/web-ui/build/static/jolie-DMTN5Vdf.js +1 -0
  268. package/web-ui/build/static/jq-nXRLldXX.js +1 -0
  269. package/web-ui/build/static/js-extras-eLwv3frs.js +1 -0
  270. package/web-ui/build/static/js-templates-Ca0owlrg.js +1 -0
  271. package/web-ui/build/static/jsdoc-KERXp0da.js +1 -0
  272. package/web-ui/build/static/json-BTjLaRsy.js +1 -0
  273. package/web-ui/build/static/json-p7pU0qdW.js +1 -0
  274. package/web-ui/build/static/json5-Cxjy1udc.js +1 -0
  275. package/web-ui/build/static/jsonp-CO52H7Gy.js +1 -0
  276. package/web-ui/build/static/jsstacktrace-8YKfoyJP.js +1 -0
  277. package/web-ui/build/static/jsx-Ct_05KbM.js +1 -0
  278. package/web-ui/build/static/julia-23I1ubCE.js +1 -0
  279. package/web-ui/build/static/julia-d8rVGed_.js +1 -0
  280. package/web-ui/build/static/julia-repl-mwnHedW_.js +1 -0
  281. package/web-ui/build/static/keepalived-E85Rx_fF.js +1 -0
  282. package/web-ui/build/static/keyman-aWd3QUDq.js +1 -0
  283. package/web-ui/build/static/kotlin-Cu370hQq.js +1 -0
  284. package/web-ui/build/static/kotlin-DoJ2WnmZ.js +1 -0
  285. package/web-ui/build/static/kumir-oiOgqcQO.js +1 -0
  286. package/web-ui/build/static/kusto-Bp-B02K5.js +1 -0
  287. package/web-ui/build/static/lasso-BxoQVwOO.js +1 -0
  288. package/web-ui/build/static/latex-CANm5vsX.js +1 -0
  289. package/web-ui/build/static/latex-PMroeNch.js +1 -0
  290. package/web-ui/build/static/latte-2ErU_2XF.js +1 -0
  291. package/web-ui/build/static/ldif-ChPn_F7o.js +1 -0
  292. package/web-ui/build/static/leaf-UkCugDgG.js +1 -0
  293. package/web-ui/build/static/less-CCH5RA89.js +1 -0
  294. package/web-ui/build/static/less-CGZbVU1g.js +1 -0
  295. package/web-ui/build/static/lilypond-BoyM37sv.js +1 -0
  296. package/web-ui/build/static/liquid-DGJVpRBi.js +1 -0
  297. package/web-ui/build/static/lisp-93nne61u.js +1 -0
  298. package/web-ui/build/static/lisp-DYjIRsXz.js +1 -0
  299. package/web-ui/build/static/livecodeserver-CfNaxIE4.js +1 -0
  300. package/web-ui/build/static/livescript-C8kDlQkz.js +1 -0
  301. package/web-ui/build/static/livescript-CoarnRHq.js +1 -0
  302. package/web-ui/build/static/llvm-CBVyNmAh.js +1 -0
  303. package/web-ui/build/static/llvm-DGxq8a7u.js +1 -0
  304. package/web-ui/build/static/log-BivgwFql.js +1 -0
  305. package/web-ui/build/static/lolcode-l5sK2cZz.js +1 -0
  306. package/web-ui/build/static/lsl-Xm44xLRQ.js +1 -0
  307. package/web-ui/build/static/lua-CGvrzfKp.js +1 -0
  308. package/web-ui/build/static/lua-nHwXeY4c.js +1 -0
  309. package/web-ui/build/static/magma-DmNItmna.js +1 -0
  310. package/web-ui/build/static/makefile-CKJNNHGb.js +1 -0
  311. package/web-ui/build/static/makefile-DI6y5Qml.js +1 -0
  312. package/web-ui/build/static/markdown-BgpbxKd-.js +1 -0
  313. package/web-ui/build/static/markdown-CvcxA4yk.js +1 -0
  314. package/web-ui/build/static/markup-templating-DijqesiA.js +1 -0
  315. package/web-ui/build/static/mathematica-Cxll1Q10.js +1 -0
  316. package/web-ui/build/static/matlab-BJo2T1A-.js +1 -0
  317. package/web-ui/build/static/matlab-C6DlZX4l.js +1 -0
  318. package/web-ui/build/static/maxima-DJXO4sbL.js +1 -0
  319. package/web-ui/build/static/maxscript-DdLpUYBs.js +1 -0
  320. package/web-ui/build/static/mel-BIpfnSyZ.js +1 -0
  321. package/web-ui/build/static/mel-BYcTUZJW.js +1 -0
  322. package/web-ui/build/static/mercury-C_LSpbD8.js +1 -0
  323. package/web-ui/build/static/mermaid-D9yBWnrT.js +1 -0
  324. package/web-ui/build/static/mipsasm-nR_K2Ue-.js +1 -0
  325. package/web-ui/build/static/mizar-BeLUPncD.js +1 -0
  326. package/web-ui/build/static/mizar-BesIbZd9.js +1 -0
  327. package/web-ui/build/static/mojolicious-cBx3OWa-.js +1 -0
  328. package/web-ui/build/static/mongodb-DTWKy9ac.js +1 -0
  329. package/web-ui/build/static/monkey-B72bZC3c.js +1 -0
  330. package/web-ui/build/static/monkey-G9XELYPQ.js +1 -0
  331. package/web-ui/build/static/moonscript-BXYVQiqj.js +1 -0
  332. package/web-ui/build/static/moonscript-sDd-5knz.js +1 -0
  333. package/web-ui/build/static/n1ql-0vKSfFAO.js +1 -0
  334. package/web-ui/build/static/n1ql-C9_BSZfz.js +1 -0
  335. package/web-ui/build/static/n4js-B7Ct8dds.js +1 -0
  336. package/web-ui/build/static/nand2tetris-hdl-p9gpphTM.js +1 -0
  337. package/web-ui/build/static/naniscript-6ZVr8Aug.js +1 -0
  338. package/web-ui/build/static/nasm-Ca73yTUt.js +1 -0
  339. package/web-ui/build/static/neon-DNP49oyX.js +1 -0
  340. package/web-ui/build/static/nevod-Qhgt7Bce.js +1 -0
  341. package/web-ui/build/static/nginx-D5e7lu62.js +1 -0
  342. package/web-ui/build/static/nginx-DobnyESB.js +1 -0
  343. package/web-ui/build/static/nim-BPBivUOV.js +1 -0
  344. package/web-ui/build/static/nim-Baoug1Wa.js +1 -0
  345. package/web-ui/build/static/nix-CSPTQs5y.js +1 -0
  346. package/web-ui/build/static/nix-Dk4eNw49.js +1 -0
  347. package/web-ui/build/static/node-repl-NJNL8VFR.js +1 -0
  348. package/web-ui/build/static/nsis-BZ0oMzEw.js +1 -0
  349. package/web-ui/build/static/nsis-CKPCjtCU.js +1 -0
  350. package/web-ui/build/static/objectivec-BkfIRhhV.js +1 -0
  351. package/web-ui/build/static/objectivec-CnQgqhbJ.js +1 -0
  352. package/web-ui/build/static/ocaml-9rGNzRrK.js +1 -0
  353. package/web-ui/build/static/ocaml-CTolCqxL.js +1 -0
  354. package/web-ui/build/static/opencl-9Q3vRDxv.js +1 -0
  355. package/web-ui/build/static/openqasm-D2QiuFBp.js +1 -0
  356. package/web-ui/build/static/openscad-C3HyuzpB.js +1 -0
  357. package/web-ui/build/static/oxygene-4gi-VYy_.js +1 -0
  358. package/web-ui/build/static/oz-BGDEB-1A.js +1 -0
  359. package/web-ui/build/static/parigp-CfZzp1uE.js +1 -0
  360. package/web-ui/build/static/parser-UbGteTcy.js +1 -0
  361. package/web-ui/build/static/parser3-C-Jx-fy7.js +1 -0
  362. package/web-ui/build/static/pascal-D1_R0gW-.js +1 -0
  363. package/web-ui/build/static/pascaligo-B8C-98Np.js +1 -0
  364. package/web-ui/build/static/pcaxis-TGnlUKNs.js +1 -0
  365. package/web-ui/build/static/peoplecode-C5Vf1AH0.js +1 -0
  366. package/web-ui/build/static/perl-CBp1N62T.js +1 -0
  367. package/web-ui/build/static/perl-Z59j904t.js +1 -0
  368. package/web-ui/build/static/pf-Cq8B_xwQ.js +1 -0
  369. package/web-ui/build/static/pgsql-ofJbUHkL.js +1 -0
  370. package/web-ui/build/static/php-OlH7HLQJ.js +1 -0
  371. package/web-ui/build/static/php-extras-GqtrxLuk.js +1 -0
  372. package/web-ui/build/static/php-r09kMDOB.js +1 -0
  373. package/web-ui/build/static/php-template-18uT97Qo.js +1 -0
  374. package/web-ui/build/static/phpdoc-9tRFvup9.js +1 -0
  375. package/web-ui/build/static/plaintext-DsYT6Mu-.js +1 -0
  376. package/web-ui/build/static/plsql-RhWQNJVb.js +1 -0
  377. package/web-ui/build/static/pony-DD6JMLYI.js +1 -0
  378. package/web-ui/build/static/powerquery-CALow-bt.js +1 -0
  379. package/web-ui/build/static/powershell-C2QvIuKF.js +1 -0
  380. package/web-ui/build/static/powershell-yrbJEhCh.js +1 -0
  381. package/web-ui/build/static/processing-1T5w_Q03.js +1 -0
  382. package/web-ui/build/static/processing-DBim_dO-.js +1 -0
  383. package/web-ui/build/static/profile-Cdloh8mZ.js +1 -0
  384. package/web-ui/build/static/prolog-DRSsNnns.js +1 -0
  385. package/web-ui/build/static/prolog-D_ajweDr.js +1 -0
  386. package/web-ui/build/static/promql-BRuwn6Bn.js +1 -0
  387. package/web-ui/build/static/properties-D5Wyl4X4.js +1 -0
  388. package/web-ui/build/static/properties-kn4fl1bl.js +1 -0
  389. package/web-ui/build/static/protobuf-BMO76zWi.js +1 -0
  390. package/web-ui/build/static/protobuf-CTUCF-U-.js +1 -0
  391. package/web-ui/build/static/psl-CiqYdQbY.js +1 -0
  392. package/web-ui/build/static/pug-BLE2Qayj.js +1 -0
  393. package/web-ui/build/static/puppet-CFKLWXft.js +1 -0
  394. package/web-ui/build/static/puppet-DQci0Dl5.js +1 -0
  395. package/web-ui/build/static/pure-D2h_GynV.js +1 -0
  396. package/web-ui/build/static/purebasic-BF8MVw8V.js +1 -0
  397. package/web-ui/build/static/purebasic-BTtHiCkh.js +1 -0
  398. package/web-ui/build/static/purescript-D1ZSh-sH.js +1 -0
  399. package/web-ui/build/static/python-Cp9_Vdhb.js +1 -0
  400. package/web-ui/build/static/python-DdgNw8IW.js +1 -0
  401. package/web-ui/build/static/python-repl-DvK89VMC.js +1 -0
  402. package/web-ui/build/static/q-COaIgwhT.js +1 -0
  403. package/web-ui/build/static/q-Cm0dQkW8.js +1 -0
  404. package/web-ui/build/static/qml-BpsOqqJM.js +1 -0
  405. package/web-ui/build/static/qml-BziQXlU4.js +1 -0
  406. package/web-ui/build/static/qore-Cutz6g-2.js +1 -0
  407. package/web-ui/build/static/qsharp-B16619X1.js +1 -0
  408. package/web-ui/build/static/r-CFUIj5Hd.js +1 -0
  409. package/web-ui/build/static/r-CPrwCi5w.js +1 -0
  410. package/web-ui/build/static/racket-Bh08DFXF.js +1 -0
  411. package/web-ui/build/static/reason-BxjDq4e-.js +1 -0
  412. package/web-ui/build/static/reasonml-Ds5SsGP8.js +1 -0
  413. package/web-ui/build/static/regex-DhBIDIMI.js +1 -0
  414. package/web-ui/build/static/rego-DCwxZXcB.js +1 -0
  415. package/web-ui/build/static/renpy-C2fuQfqb.js +1 -0
  416. package/web-ui/build/static/rest-C52ZpxWQ.js +1 -0
  417. package/web-ui/build/static/rib-Cbl2Mzyj.js +1 -0
  418. package/web-ui/build/static/rip-BTOu5ZIE.js +1 -0
  419. package/web-ui/build/static/roboconf-3Oi2wuVk.js +1 -0
  420. package/web-ui/build/static/roboconf-ndLZLE39.js +1 -0
  421. package/web-ui/build/static/robotframework-BzHXiIj1.js +1 -0
  422. package/web-ui/build/static/routeros-CkpPoqx-.js +1 -0
  423. package/web-ui/build/static/rsl-C0bwOQ38.js +1 -0
  424. package/web-ui/build/static/ruby-C_hIhtuQ.js +1 -0
  425. package/web-ui/build/static/ruby-DvKfZPzj.js +1 -0
  426. package/web-ui/build/static/ruleslanguage-CbZJlddz.js +1 -0
  427. package/web-ui/build/static/rust-BFPIhB-X.js +1 -0
  428. package/web-ui/build/static/rust-sBpUq-qE.js +1 -0
  429. package/web-ui/build/static/sas-BCXvYN9x.js +1 -0
  430. package/web-ui/build/static/sas-D7GAsTY3.js +1 -0
  431. package/web-ui/build/static/sass-BdaErGMN.js +1 -0
  432. package/web-ui/build/static/scala-Cj81oCl9.js +1 -0
  433. package/web-ui/build/static/scala-CvbksfY6.js +1 -0
  434. package/web-ui/build/static/scheme-BM5ZqKnl.js +1 -0
  435. package/web-ui/build/static/scheme-BPvlu9Tk.js +1 -0
  436. package/web-ui/build/static/scilab-CJanLKQN.js +1 -0
  437. package/web-ui/build/static/scss-C53YF_7f.js +1 -0
  438. package/web-ui/build/static/scss-DPp8UZbr.js +1 -0
  439. package/web-ui/build/static/shell-CC9bQXMe.js +1 -0
  440. package/web-ui/build/static/shell-session-CuR3fbf-.js +1 -0
  441. package/web-ui/build/static/smali-CUgLls3D.js +1 -0
  442. package/web-ui/build/static/smali-YODSX8qt.js +1 -0
  443. package/web-ui/build/static/smalltalk-BMJQ4bbs.js +1 -0
  444. package/web-ui/build/static/smalltalk-BVGY3CTl.js +1 -0
  445. package/web-ui/build/static/smarty-C9aNt4-p.js +1 -0
  446. package/web-ui/build/static/sml-C3BIHhfq.js +1 -0
  447. package/web-ui/build/static/sml-DTipyRmY.js +1 -0
  448. package/web-ui/build/static/solidity-1yuPUqoC.js +1 -0
  449. package/web-ui/build/static/solution-file-BgzK4GOU.js +1 -0
  450. package/web-ui/build/static/soy-CFJXRvqc.js +1 -0
  451. package/web-ui/build/static/sparql-CAosYMpl.js +1 -0
  452. package/web-ui/build/static/splunk-spl-DkINtWr8.js +1 -0
  453. package/web-ui/build/static/sqf-DbrWIS2M.js +1 -0
  454. package/web-ui/build/static/sqf-nq8Q9J2W.js +1 -0
  455. package/web-ui/build/static/sql-9bwClhZQ.js +1 -0
  456. package/web-ui/build/static/sql-CqPkY-lX.js +1 -0
  457. package/web-ui/build/static/sql_more-CsY5ts77.js +1 -0
  458. package/web-ui/build/static/squirrel-BuqtzRBD.js +1 -0
  459. package/web-ui/build/static/stan-BNxBSglc.js +1 -0
  460. package/web-ui/build/static/stan-CZVMc34l.js +1 -0
  461. package/web-ui/build/static/stata-DKnVdHCd.js +1 -0
  462. package/web-ui/build/static/step21-Cu_TaBGF.js +1 -0
  463. package/web-ui/build/static/stylus-BS7-OJew.js +1 -0
  464. package/web-ui/build/static/stylus-DtFrp1Nk.js +1 -0
  465. package/web-ui/build/static/subunit-DDCoWkkc.js +1 -0
  466. package/web-ui/build/static/swift-BaguUZbl.js +1 -0
  467. package/web-ui/build/static/swift-mwBsb8Bx.js +1 -0
  468. package/web-ui/build/static/systemd-D6PpyDKk.js +1 -0
  469. package/web-ui/build/static/t4-cs-Cem8g4Ck.js +1 -0
  470. package/web-ui/build/static/t4-templating-BZo-HjmD.js +1 -0
  471. package/web-ui/build/static/t4-vb-B4oVnKa4.js +1 -0
  472. package/web-ui/build/static/taggerscript-DweAZ5pw.js +1 -0
  473. package/web-ui/build/static/tap-DpuvKHHF.js +1 -0
  474. package/web-ui/build/static/tap-hUKmJObZ.js +1 -0
  475. package/web-ui/build/static/tcl-BUvhAi7u.js +1 -0
  476. package/web-ui/build/static/tcl-Dsck63d8.js +1 -0
  477. package/web-ui/build/static/textile-CgKbqJ-j.js +1 -0
  478. package/web-ui/build/static/thrift-B5H6rApp.js +1 -0
  479. package/web-ui/build/static/toml-DggTpfOo.js +1 -0
  480. package/web-ui/build/static/tp-CazB2P2X.js +1 -0
  481. package/web-ui/build/static/tremor-B1jy7S5p.js +1 -0
  482. package/web-ui/build/static/tsx-BqF2lVDi.js +1 -0
  483. package/web-ui/build/static/tt2-BNoNXpEe.js +1 -0
  484. package/web-ui/build/static/turtle-B0evd5mn.js +1 -0
  485. package/web-ui/build/static/twig-B5A7nMdv.js +1 -0
  486. package/web-ui/build/static/twig-DZnLWvh8.js +1 -0
  487. package/web-ui/build/static/typescript-Bbe_P093.js +1 -0
  488. package/web-ui/build/static/typescript-BfhvmSSG.js +1 -0
  489. package/web-ui/build/static/typoscript-BjuZEIgw.js +1 -0
  490. package/web-ui/build/static/unrealscript-C3iUCFRi.js +1 -0
  491. package/web-ui/build/static/uorazor-CbZXwzIj.js +1 -0
  492. package/web-ui/build/static/uri-xMPSnp6m.js +1 -0
  493. package/web-ui/build/static/v-BKcGo5I6.js +1 -0
  494. package/web-ui/build/static/vala-BRoBE4am.js +1 -0
  495. package/web-ui/build/static/vala-B__Iyrma.js +1 -0
  496. package/web-ui/build/static/vbnet-DBxlMRvN.js +1 -0
  497. package/web-ui/build/static/vbnet-DjAXt5BE.js +1 -0
  498. package/web-ui/build/static/vbscript-BNA4oANi.js +1 -0
  499. package/web-ui/build/static/vbscript-html-o8ckLPKG.js +1 -0
  500. package/web-ui/build/static/velocity-D7sc5ggA.js +1 -0
  501. package/web-ui/build/static/verilog-BWJfMIng.js +1 -0
  502. package/web-ui/build/static/verilog-jW2GPC--.js +1 -0
  503. package/web-ui/build/static/vhdl-BIVlXRPa.js +1 -0
  504. package/web-ui/build/static/vhdl-BeqdhhxD.js +1 -0
  505. package/web-ui/build/static/vim-712lI4-g.js +1 -0
  506. package/web-ui/build/static/vim-DMROTzr0.js +1 -0
  507. package/web-ui/build/static/visual-basic-CQfbM-ta.js +1 -0
  508. package/web-ui/build/static/warpscript-DFAvCXFQ.js +1 -0
  509. package/web-ui/build/static/wasm-CiYoxBl0.js +1 -0
  510. package/web-ui/build/static/web-idl-DoCkPK8y.js +1 -0
  511. package/web-ui/build/static/wiki-bvz0AGzB.js +1 -0
  512. package/web-ui/build/static/wolfram-fBuyFEgU.js +1 -0
  513. package/web-ui/build/static/wren-DvATFxjF.js +1 -0
  514. package/web-ui/build/static/x86asm-r4bPbUR_.js +1 -0
  515. package/web-ui/build/static/xeora-B6iOnDJY.js +1 -0
  516. package/web-ui/build/static/xl-Ce6B5slc.js +1 -0
  517. package/web-ui/build/static/xml-DNjyPmhQ.js +1 -0
  518. package/web-ui/build/static/xml-doc-DydogmZD.js +1 -0
  519. package/web-ui/build/static/xojo-DCQLltvr.js +1 -0
  520. package/web-ui/build/static/xquery-C-fAnA0H.js +1 -0
  521. package/web-ui/build/static/xquery-CNeqzhLO.js +1 -0
  522. package/web-ui/build/static/yaml-BsVaGsk5.js +1 -0
  523. package/web-ui/build/static/yaml-kVZvwv_C.js +1 -0
  524. package/web-ui/build/static/yang-B_gq9JEq.js +1 -0
  525. package/web-ui/build/static/zephir-ECIXgXhX.js +1 -0
  526. package/web-ui/build/static/zig-DY325EKG.js +1 -0
  527. package/web-ui/build/static/1c-BLo2-5GS.js +0 -1
  528. package/web-ui/build/static/abap-BjUneMMr.js +0 -1
  529. package/web-ui/build/static/abnf-CZTz-l7P.js +0 -1
  530. package/web-ui/build/static/abnf-ITJ5mkBo.js +0 -1
  531. package/web-ui/build/static/accesslog-Dj78lZOU.js +0 -1
  532. package/web-ui/build/static/actionscript-Chivtu59.js +0 -1
  533. package/web-ui/build/static/actionscript-CrvMFXnx.js +0 -1
  534. package/web-ui/build/static/ada-DdJtyoYe.js +0 -1
  535. package/web-ui/build/static/ada-GIvogaLi.js +0 -1
  536. package/web-ui/build/static/agda-DbPp4fQi.js +0 -1
  537. package/web-ui/build/static/al-BZ24KwRS.js +0 -1
  538. package/web-ui/build/static/angelscript-DzsFypYt.js +0 -1
  539. package/web-ui/build/static/antlr4-3qb4rD3S.js +0 -1
  540. package/web-ui/build/static/apache-DF0P5ZRm.js +0 -1
  541. package/web-ui/build/static/apacheconf-C8KuNf9c.js +0 -1
  542. package/web-ui/build/static/apex-CPV-DeVE.js +0 -1
  543. package/web-ui/build/static/apl-C60bVxxW.js +0 -1
  544. package/web-ui/build/static/applescript-uz0i0tu1.js +0 -1
  545. package/web-ui/build/static/applescript-xcPRUBia.js +0 -1
  546. package/web-ui/build/static/aql-CRh4IGkA.js +0 -1
  547. package/web-ui/build/static/arcade-CmLedeqc.js +0 -1
  548. package/web-ui/build/static/arduino-3pr1BvXB.js +0 -1
  549. package/web-ui/build/static/arduino-C2BejAip.js +0 -1
  550. package/web-ui/build/static/arff-DE6Wr9MU.js +0 -1
  551. package/web-ui/build/static/armasm-DXodTfP4.js +0 -1
  552. package/web-ui/build/static/asciidoc-BU2BDFme.js +0 -1
  553. package/web-ui/build/static/asciidoc-CgvtvdeC.js +0 -1
  554. package/web-ui/build/static/asm6502-BMuYCKmP.js +0 -1
  555. package/web-ui/build/static/asmatmel-Dwxzg4kq.js +0 -1
  556. package/web-ui/build/static/aspectj-XZIldIRI.js +0 -1
  557. package/web-ui/build/static/aspnet-UxY2bZ9O.js +0 -1
  558. package/web-ui/build/static/autohotkey-BdZoQT7s.js +0 -1
  559. package/web-ui/build/static/autohotkey-DLWs6p8o.js +0 -1
  560. package/web-ui/build/static/autoit-CxcZx_kh.js +0 -1
  561. package/web-ui/build/static/autoit-HY_BHh1p.js +0 -1
  562. package/web-ui/build/static/avisynth-4Q4be9zq.js +0 -1
  563. package/web-ui/build/static/avrasm-CFqVJML2.js +0 -1
  564. package/web-ui/build/static/avro-idl-DVTV2YZm.js +0 -1
  565. package/web-ui/build/static/awk-C1Udi4As.js +0 -1
  566. package/web-ui/build/static/axapta-B9lexIDC.js +0 -1
  567. package/web-ui/build/static/bash-DDZrx0R1.js +0 -1
  568. package/web-ui/build/static/bash-Uuijyc_K.js +0 -1
  569. package/web-ui/build/static/basic-B29QFWwp.js +0 -1
  570. package/web-ui/build/static/basic-DKDOc42O.js +0 -1
  571. package/web-ui/build/static/batch-CA3q9wRr.js +0 -1
  572. package/web-ui/build/static/bbcode-DkUDcqrp.js +0 -1
  573. package/web-ui/build/static/bicep-AHSQiVgQ.js +0 -1
  574. package/web-ui/build/static/birb-BsAnN1j3.js +0 -1
  575. package/web-ui/build/static/bison-BIq5-ZXo.js +0 -1
  576. package/web-ui/build/static/bnf-BexLm6hz.js +0 -1
  577. package/web-ui/build/static/bnf-Dm46EM5S.js +0 -1
  578. package/web-ui/build/static/brainfuck-CBG8MHhD.js +0 -1
  579. package/web-ui/build/static/brainfuck-DrHuUFVv.js +0 -1
  580. package/web-ui/build/static/brightscript-CoQ7s_l3.js +0 -1
  581. package/web-ui/build/static/bro-Cz5RmvoK.js +0 -1
  582. package/web-ui/build/static/bsl-C9wXomkX.js +0 -1
  583. package/web-ui/build/static/c-BZFEFWwC.js +0 -1
  584. package/web-ui/build/static/c-CfFWLEL7.js +0 -1
  585. package/web-ui/build/static/c-like-CvIii1QP.js +0 -1
  586. package/web-ui/build/static/cal-be-Dz3GC.js +0 -1
  587. package/web-ui/build/static/capnproto-Bcaxak1e.js +0 -1
  588. package/web-ui/build/static/ceylon-QH_iQXnW.js +0 -1
  589. package/web-ui/build/static/cfscript-BRgBlxCO.js +0 -1
  590. package/web-ui/build/static/chaiscript-DSBx5kyN.js +0 -1
  591. package/web-ui/build/static/cil-C90LIbge.js +0 -1
  592. package/web-ui/build/static/clean-D2X3fSKw.js +0 -1
  593. package/web-ui/build/static/clojure-CvKE0e-3.js +0 -1
  594. package/web-ui/build/static/clojure-Cy3Zg4vZ.js +0 -1
  595. package/web-ui/build/static/clojure-repl-D0kONHv2.js +0 -1
  596. package/web-ui/build/static/cmake-DIDVe3n_.js +0 -1
  597. package/web-ui/build/static/cmake-DPijEs9c.js +0 -1
  598. package/web-ui/build/static/cobol-BPEjLjGY.js +0 -1
  599. package/web-ui/build/static/coffeescript-CoSx9MQU.js +0 -1
  600. package/web-ui/build/static/coffeescript-L5CBXrnP.js +0 -1
  601. package/web-ui/build/static/concurnas-q5sXhVU4.js +0 -1
  602. package/web-ui/build/static/coq-BAEq82zI.js +0 -1
  603. package/web-ui/build/static/coq-BBgtQZwi.js +0 -1
  604. package/web-ui/build/static/cos-9FdwfBC5.js +0 -1
  605. package/web-ui/build/static/cpp-CYt8UYn2.js +0 -1
  606. package/web-ui/build/static/cpp-CZ2lOXlm.js +0 -1
  607. package/web-ui/build/static/crmsh-C_TZWkES.js +0 -1
  608. package/web-ui/build/static/crystal-BDf_0NDz.js +0 -1
  609. package/web-ui/build/static/crystal-BrTR9dGT.js +0 -1
  610. package/web-ui/build/static/csharp-BSBrba50.js +0 -1
  611. package/web-ui/build/static/csharp-Cerqyqbn.js +0 -1
  612. package/web-ui/build/static/cshtml-heNA_ya5.js +0 -1
  613. package/web-ui/build/static/csp-CJprtNTl.js +0 -1
  614. package/web-ui/build/static/csp-CyYfNNga.js +0 -1
  615. package/web-ui/build/static/css-ClMfqSLF.js +0 -1
  616. package/web-ui/build/static/css-extras-BRU-Fmfk.js +0 -1
  617. package/web-ui/build/static/csv-VxPQSCnT.js +0 -1
  618. package/web-ui/build/static/cypher-COR7lVoB.js +0 -1
  619. package/web-ui/build/static/d-CjJIoaqU.js +0 -1
  620. package/web-ui/build/static/d-DrTea74c.js +0 -1
  621. package/web-ui/build/static/dart-Dx1CtbrO.js +0 -1
  622. package/web-ui/build/static/dart-Kqlt_5Iy.js +0 -1
  623. package/web-ui/build/static/dataweave-DpoRPYaa.js +0 -1
  624. package/web-ui/build/static/dax-BdRNDjXh.js +0 -1
  625. package/web-ui/build/static/delphi-C6ZfxFVF.js +0 -1
  626. package/web-ui/build/static/dhall-DZrga6Gc.js +0 -1
  627. package/web-ui/build/static/diff-BuMvzPYe.js +0 -1
  628. package/web-ui/build/static/diff-DZYXzKCb.js +0 -1
  629. package/web-ui/build/static/django-D_vRowuc.js +0 -1
  630. package/web-ui/build/static/django-NYcglI2i.js +0 -1
  631. package/web-ui/build/static/dns-Cd7tDS1i.js +0 -1
  632. package/web-ui/build/static/dns-zone-file-C3-2vwxy.js +0 -1
  633. package/web-ui/build/static/docker-DQ7ZFefk.js +0 -1
  634. package/web-ui/build/static/dockerfile-BpU0w0F-.js +0 -1
  635. package/web-ui/build/static/dos-B1_ZGbVG.js +0 -1
  636. package/web-ui/build/static/dot-BGB_tXU7.js +0 -1
  637. package/web-ui/build/static/dsconfig-BbDxyV_e.js +0 -1
  638. package/web-ui/build/static/dts-BfjOjY8l.js +0 -1
  639. package/web-ui/build/static/dust-BdwQ-7T_.js +0 -1
  640. package/web-ui/build/static/ebnf-BQTMmaYU.js +0 -1
  641. package/web-ui/build/static/ebnf-BwwBWilG.js +0 -1
  642. package/web-ui/build/static/editorconfig-DWS4VSOM.js +0 -1
  643. package/web-ui/build/static/eiffel-DVvlc0AI.js +0 -1
  644. package/web-ui/build/static/ejs-DsD496m-.js +0 -1
  645. package/web-ui/build/static/elixir-CLxuo9eh.js +0 -1
  646. package/web-ui/build/static/elixir-Cnyg3Ezx.js +0 -1
  647. package/web-ui/build/static/elm-CMAIkLMI.js +0 -1
  648. package/web-ui/build/static/elm-DZBnlwPV.js +0 -1
  649. package/web-ui/build/static/erb-B5xezjly.js +0 -1
  650. package/web-ui/build/static/erb-CJr8Ab4S.js +0 -1
  651. package/web-ui/build/static/erlang-BKy_rMFs.js +0 -1
  652. package/web-ui/build/static/erlang-DtaEL15_.js +0 -1
  653. package/web-ui/build/static/erlang-repl-CC5OZ0oZ.js +0 -1
  654. package/web-ui/build/static/etlua-1AfbSbi_.js +0 -1
  655. package/web-ui/build/static/excel-AEWYaJMN.js +0 -1
  656. package/web-ui/build/static/excel-formula-DXCH31eV.js +0 -1
  657. package/web-ui/build/static/factor-BvZsNxRC.js +0 -1
  658. package/web-ui/build/static/false-Y69sPjTa.js +0 -1
  659. package/web-ui/build/static/firestore-security-rules-BAYXaIU_.js +0 -1
  660. package/web-ui/build/static/fix-D7wVox5L.js +0 -1
  661. package/web-ui/build/static/flix-xYG3kZl-.js +0 -1
  662. package/web-ui/build/static/flow-zBPh0c8a.js +0 -1
  663. package/web-ui/build/static/fortran-C7OgAOwk.js +0 -1
  664. package/web-ui/build/static/fortran-D7HqnRra.js +0 -1
  665. package/web-ui/build/static/fsharp-Dz8jq_YD.js +0 -1
  666. package/web-ui/build/static/fsharp-wem8e879.js +0 -1
  667. package/web-ui/build/static/ftl-BNZhFjQT.js +0 -1
  668. package/web-ui/build/static/gams-C0WL3JTk.js +0 -1
  669. package/web-ui/build/static/gap-C3QTJPj2.js +0 -1
  670. package/web-ui/build/static/gauss-HDeDt6Js.js +0 -1
  671. package/web-ui/build/static/gcode-B6xVa-Q4.js +0 -1
  672. package/web-ui/build/static/gcode-KfjFk59Y.js +0 -1
  673. package/web-ui/build/static/gdscript-CZWTW6OT.js +0 -1
  674. package/web-ui/build/static/gedcom-DGTBZtDe.js +0 -1
  675. package/web-ui/build/static/gherkin-BM2fti5q.js +0 -1
  676. package/web-ui/build/static/gherkin-BsD-keLP.js +0 -1
  677. package/web-ui/build/static/git-CwXnrvg5.js +0 -1
  678. package/web-ui/build/static/glsl-CEL-DKdu.js +0 -1
  679. package/web-ui/build/static/glsl-DClg1hhL.js +0 -1
  680. package/web-ui/build/static/gml-BuyC2nUx.js +0 -1
  681. package/web-ui/build/static/gml-CaV0fexF.js +0 -1
  682. package/web-ui/build/static/gn-RZ4XHU09.js +0 -1
  683. package/web-ui/build/static/go-2fZP5dFL.js +0 -1
  684. package/web-ui/build/static/go-B-2r4QAR.js +0 -1
  685. package/web-ui/build/static/go-module-DSWZUUGo.js +0 -1
  686. package/web-ui/build/static/golo-BLZaLyU5.js +0 -1
  687. package/web-ui/build/static/gradle--RLe7WtU.js +0 -1
  688. package/web-ui/build/static/graphql-Dersm5rs.js +0 -1
  689. package/web-ui/build/static/groovy-BhCtzyFe.js +0 -1
  690. package/web-ui/build/static/groovy-CvbHavu3.js +0 -1
  691. package/web-ui/build/static/haml-CQhB89Xl.js +0 -1
  692. package/web-ui/build/static/haml-CemWzAX2.js +0 -1
  693. package/web-ui/build/static/handlebars-B39jLKjQ.js +0 -1
  694. package/web-ui/build/static/handlebars-Cl4dI91M.js +0 -1
  695. package/web-ui/build/static/haskell-CO9Ug-Kw.js +0 -1
  696. package/web-ui/build/static/haskell-EXme4CFR.js +0 -1
  697. package/web-ui/build/static/haxe-BDkCyqBy.js +0 -1
  698. package/web-ui/build/static/haxe-ahczQlFA.js +0 -1
  699. package/web-ui/build/static/hcl-liOTbdHr.js +0 -1
  700. package/web-ui/build/static/hlsl-Bnkb1zrP.js +0 -1
  701. package/web-ui/build/static/hoon-DCXHuTNp.js +0 -1
  702. package/web-ui/build/static/hpkp-CPJOGDF_.js +0 -1
  703. package/web-ui/build/static/hsp-BdeT0enM.js +0 -1
  704. package/web-ui/build/static/hsts-BoIN2VGK.js +0 -1
  705. package/web-ui/build/static/htmlbars-B5Ruf2zT.js +0 -1
  706. package/web-ui/build/static/http-BacVzmeC.js +0 -1
  707. package/web-ui/build/static/http-DifjpER4.js +0 -1
  708. package/web-ui/build/static/hy-DQ-M6mjk.js +0 -1
  709. package/web-ui/build/static/ichigojam-CcVrpthd.js +0 -1
  710. package/web-ui/build/static/icon-B4N1Fnx2.js +0 -1
  711. package/web-ui/build/static/icu-message-format-aDIl6Oaf.js +0 -1
  712. package/web-ui/build/static/idris-DKvV6i27.js +0 -1
  713. package/web-ui/build/static/iecst-zqZH79Dw.js +0 -1
  714. package/web-ui/build/static/ignore-BBbP-u2O.js +0 -1
  715. package/web-ui/build/static/index-CkhVK4lF.js +0 -1164
  716. package/web-ui/build/static/index-Cm1gK3R7.css +0 -1
  717. package/web-ui/build/static/index-D9JNKR2k.js +0 -13
  718. package/web-ui/build/static/index-DqZhvIWG.js +0 -1
  719. package/web-ui/build/static/inform7-BwvEArfL.js +0 -1
  720. package/web-ui/build/static/inform7-YkPDg57k.js +0 -1
  721. package/web-ui/build/static/ini-DU4drXRb.js +0 -1
  722. package/web-ui/build/static/ini-OhDTn0L5.js +0 -1
  723. package/web-ui/build/static/io-4thQGR-r.js +0 -1
  724. package/web-ui/build/static/irpf90-BnhmotbX.js +0 -1
  725. package/web-ui/build/static/isbl-BKcWS-M5.js +0 -1
  726. package/web-ui/build/static/j-Bw6CUCl9.js +0 -1
  727. package/web-ui/build/static/java-8IzvJ-mZ.js +0 -1
  728. package/web-ui/build/static/java-_jaQp1m2.js +0 -1
  729. package/web-ui/build/static/javadoc-D6KaHkhq.js +0 -1
  730. package/web-ui/build/static/javadoclike-B-DnR3Tl.js +0 -1
  731. package/web-ui/build/static/javascript-CfOOSye9.js +0 -1
  732. package/web-ui/build/static/javastacktrace-DHyDfhlB.js +0 -1
  733. package/web-ui/build/static/jboss-cli-zEH5UaRS.js +0 -1
  734. package/web-ui/build/static/jexl-CRpgdJ2f.js +0 -1
  735. package/web-ui/build/static/jolie-C5S16-nE.js +0 -1
  736. package/web-ui/build/static/jq-Dy-2LJZM.js +0 -1
  737. package/web-ui/build/static/js-extras-CNfXr3kE.js +0 -1
  738. package/web-ui/build/static/js-templates-DCJ1syUw.js +0 -1
  739. package/web-ui/build/static/jsdoc-BamyoRCh.js +0 -1
  740. package/web-ui/build/static/json-Buz-eeND.js +0 -1
  741. package/web-ui/build/static/json-D4xr_AK1.js +0 -1
  742. package/web-ui/build/static/json5-CS3uAaJP.js +0 -1
  743. package/web-ui/build/static/jsonp-CmEAdOcH.js +0 -1
  744. package/web-ui/build/static/jsstacktrace-D35jXpCN.js +0 -1
  745. package/web-ui/build/static/jsx-DRMEK-Qn.js +0 -1
  746. package/web-ui/build/static/julia-BgYJV7ho.js +0 -1
  747. package/web-ui/build/static/julia-CRsGDmxp.js +0 -1
  748. package/web-ui/build/static/julia-repl-D0vTZKUn.js +0 -1
  749. package/web-ui/build/static/keepalived-BlhBatvM.js +0 -1
  750. package/web-ui/build/static/keyman-B_-J66sg.js +0 -1
  751. package/web-ui/build/static/kotlin-B7HqYBGK.js +0 -1
  752. package/web-ui/build/static/kotlin-CszxhoS4.js +0 -1
  753. package/web-ui/build/static/kumir-B_wpMfXS.js +0 -1
  754. package/web-ui/build/static/kusto-BrHkOiE1.js +0 -1
  755. package/web-ui/build/static/lasso-xizuiq1s.js +0 -1
  756. package/web-ui/build/static/latex-62pryLTa.js +0 -1
  757. package/web-ui/build/static/latex-D7Tnbs2l.js +0 -1
  758. package/web-ui/build/static/latte-B_8xJj-y.js +0 -1
  759. package/web-ui/build/static/ldif-B69eIciC.js +0 -1
  760. package/web-ui/build/static/leaf-DPnh4k7N.js +0 -1
  761. package/web-ui/build/static/less-Bg3xuki-.js +0 -1
  762. package/web-ui/build/static/less-Cm-zhk4i.js +0 -1
  763. package/web-ui/build/static/lilypond-BFSXmrKQ.js +0 -1
  764. package/web-ui/build/static/liquid-D_jMXN_8.js +0 -1
  765. package/web-ui/build/static/lisp-CDWjXhWU.js +0 -1
  766. package/web-ui/build/static/lisp-DAu9fWrQ.js +0 -1
  767. package/web-ui/build/static/livecodeserver-BNgd6rBu.js +0 -1
  768. package/web-ui/build/static/livescript-C6sYNsdz.js +0 -1
  769. package/web-ui/build/static/livescript-CMOawYYt.js +0 -1
  770. package/web-ui/build/static/llvm-Yx2vcmJw.js +0 -1
  771. package/web-ui/build/static/llvm-w4vVb6qs.js +0 -1
  772. package/web-ui/build/static/log-CqhluDSP.js +0 -1
  773. package/web-ui/build/static/lolcode-Ck0rxP3x.js +0 -1
  774. package/web-ui/build/static/lsl-BwPX-Qjm.js +0 -1
  775. package/web-ui/build/static/lua-4H_Ijh4D.js +0 -1
  776. package/web-ui/build/static/lua-dDdlvQ6u.js +0 -1
  777. package/web-ui/build/static/magma-2nRRraug.js +0 -1
  778. package/web-ui/build/static/makefile-C887R9mV.js +0 -1
  779. package/web-ui/build/static/makefile-hlNtZePL.js +0 -1
  780. package/web-ui/build/static/markdown-DCALPnuW.js +0 -1
  781. package/web-ui/build/static/markdown-DGM_Z5tW.js +0 -1
  782. package/web-ui/build/static/markup-templating-PAvYDmBZ.js +0 -1
  783. package/web-ui/build/static/mathematica-CGL-Gomp.js +0 -1
  784. package/web-ui/build/static/matlab-C46ZZzlH.js +0 -1
  785. package/web-ui/build/static/matlab-WUgx8roJ.js +0 -1
  786. package/web-ui/build/static/maxima-Dd_TIy4H.js +0 -1
  787. package/web-ui/build/static/maxscript-f8SP9Ybn.js +0 -1
  788. package/web-ui/build/static/mel-6l2ZAh7F.js +0 -1
  789. package/web-ui/build/static/mel-BYdNMJzZ.js +0 -1
  790. package/web-ui/build/static/mercury-CdHf1buq.js +0 -1
  791. package/web-ui/build/static/mermaid-IRgUMtb1.js +0 -1
  792. package/web-ui/build/static/mipsasm-CRPpDKP4.js +0 -1
  793. package/web-ui/build/static/mizar-B4DBCLSi.js +0 -1
  794. package/web-ui/build/static/mizar-DiuZyDh7.js +0 -1
  795. package/web-ui/build/static/mojolicious-ChuQv8wb.js +0 -1
  796. package/web-ui/build/static/mongodb-CE5Epj0T.js +0 -1
  797. package/web-ui/build/static/monkey-BAz4pIwb.js +0 -1
  798. package/web-ui/build/static/monkey-i_g3gMkJ.js +0 -1
  799. package/web-ui/build/static/moonscript-BNaNpboV.js +0 -1
  800. package/web-ui/build/static/moonscript-uHlQVjxf.js +0 -1
  801. package/web-ui/build/static/n1ql-CBDLma2D.js +0 -1
  802. package/web-ui/build/static/n1ql-u4YLlLfk.js +0 -1
  803. package/web-ui/build/static/n4js-IVFjZEMP.js +0 -1
  804. package/web-ui/build/static/nand2tetris-hdl-Ba72aD32.js +0 -1
  805. package/web-ui/build/static/naniscript-CjMhybrb.js +0 -1
  806. package/web-ui/build/static/nasm-DjKhk70h.js +0 -1
  807. package/web-ui/build/static/neon-JEhMoh8P.js +0 -1
  808. package/web-ui/build/static/nevod-6tgpQVCA.js +0 -1
  809. package/web-ui/build/static/nginx-C6NwXcw_.js +0 -1
  810. package/web-ui/build/static/nginx-CquSTZbP.js +0 -1
  811. package/web-ui/build/static/nim-0bOOYxfL.js +0 -1
  812. package/web-ui/build/static/nim-aCQGMs_4.js +0 -1
  813. package/web-ui/build/static/nix-BV4kRCY_.js +0 -1
  814. package/web-ui/build/static/nix-FvSL2V8j.js +0 -1
  815. package/web-ui/build/static/node-repl-GtjTvb93.js +0 -1
  816. package/web-ui/build/static/nsis-DsftItKH.js +0 -1
  817. package/web-ui/build/static/nsis-pu7O80Pq.js +0 -1
  818. package/web-ui/build/static/objectivec-Bx7Bj0U_.js +0 -1
  819. package/web-ui/build/static/objectivec-GtO6Znp9.js +0 -1
  820. package/web-ui/build/static/ocaml-B71sR3qa.js +0 -1
  821. package/web-ui/build/static/ocaml-BlhoK75p.js +0 -1
  822. package/web-ui/build/static/opencl-40JZ6XXw.js +0 -1
  823. package/web-ui/build/static/openqasm-cDL6l7w3.js +0 -1
  824. package/web-ui/build/static/openscad-BQ0gNGv9.js +0 -1
  825. package/web-ui/build/static/oxygene-1fX2ftBa.js +0 -1
  826. package/web-ui/build/static/oz-Cgq2yQZq.js +0 -1
  827. package/web-ui/build/static/parigp-DfRO3DxU.js +0 -1
  828. package/web-ui/build/static/parser-hZcHrq-n.js +0 -1
  829. package/web-ui/build/static/parser3-Cf2p4Ryg.js +0 -1
  830. package/web-ui/build/static/pascal-C6tg_yvS.js +0 -1
  831. package/web-ui/build/static/pascaligo-9U9PdOS6.js +0 -1
  832. package/web-ui/build/static/pcaxis-B5EnEKrt.js +0 -1
  833. package/web-ui/build/static/peoplecode-Cf2sGzFJ.js +0 -1
  834. package/web-ui/build/static/perl-C9FNSHZx.js +0 -1
  835. package/web-ui/build/static/perl-uzSwl6wJ.js +0 -1
  836. package/web-ui/build/static/pf-C7Bjci1q.js +0 -1
  837. package/web-ui/build/static/pgsql-IBD1Cka7.js +0 -1
  838. package/web-ui/build/static/php-19XvqtTQ.js +0 -1
  839. package/web-ui/build/static/php-CUjVuQ1J.js +0 -1
  840. package/web-ui/build/static/php-extras-GWBU2Qbm.js +0 -1
  841. package/web-ui/build/static/php-template-Chtii014.js +0 -1
  842. package/web-ui/build/static/phpdoc-BLcJXgrV.js +0 -1
  843. package/web-ui/build/static/plaintext-BX3hHjdj.js +0 -1
  844. package/web-ui/build/static/plsql-tCcTmmsx.js +0 -1
  845. package/web-ui/build/static/pony-CKD16QkU.js +0 -1
  846. package/web-ui/build/static/powerquery-DXj7kqMe.js +0 -1
  847. package/web-ui/build/static/powershell-0jB2gvRR.js +0 -1
  848. package/web-ui/build/static/powershell-Ca6UjZV2.js +0 -1
  849. package/web-ui/build/static/processing-CPjwH4wc.js +0 -1
  850. package/web-ui/build/static/processing-ItKy7l8u.js +0 -1
  851. package/web-ui/build/static/profile-6N_Rzycx.js +0 -1
  852. package/web-ui/build/static/prolog-BV3TgLfG.js +0 -1
  853. package/web-ui/build/static/prolog-C5UoVyBz.js +0 -1
  854. package/web-ui/build/static/promql-CZot8Bw3.js +0 -1
  855. package/web-ui/build/static/properties-C_r_5f7N.js +0 -1
  856. package/web-ui/build/static/properties-qycKL1T0.js +0 -1
  857. package/web-ui/build/static/protobuf-BmdKEOw6.js +0 -1
  858. package/web-ui/build/static/protobuf-CxWC8PvT.js +0 -1
  859. package/web-ui/build/static/psl-CFSNRM7z.js +0 -1
  860. package/web-ui/build/static/pug-8dv12FtI.js +0 -1
  861. package/web-ui/build/static/puppet-CNjskGXn.js +0 -1
  862. package/web-ui/build/static/puppet-Cf6xZODN.js +0 -1
  863. package/web-ui/build/static/pure-exFir566.js +0 -1
  864. package/web-ui/build/static/purebasic-Bm6QaKku.js +0 -1
  865. package/web-ui/build/static/purebasic-lfzND9Qp.js +0 -1
  866. package/web-ui/build/static/purescript-D1xRYVQG.js +0 -1
  867. package/web-ui/build/static/python-DgkOjU0T.js +0 -1
  868. package/web-ui/build/static/python-o7BJVaX6.js +0 -1
  869. package/web-ui/build/static/python-repl-6SyonvH1.js +0 -1
  870. package/web-ui/build/static/q-CiQ2AFzU.js +0 -1
  871. package/web-ui/build/static/q-g7rEIWgm.js +0 -1
  872. package/web-ui/build/static/qml-ARc9Akfg.js +0 -1
  873. package/web-ui/build/static/qml-rVumxss_.js +0 -1
  874. package/web-ui/build/static/qore-CUXpqOSx.js +0 -1
  875. package/web-ui/build/static/qsharp-DMPNcgaz.js +0 -1
  876. package/web-ui/build/static/r-DCIo6joW.js +0 -1
  877. package/web-ui/build/static/r-nUBzz4LB.js +0 -1
  878. package/web-ui/build/static/racket--fPY_Q4o.js +0 -1
  879. package/web-ui/build/static/reason-CeVN9vJx.js +0 -1
  880. package/web-ui/build/static/reasonml-49SEasi3.js +0 -1
  881. package/web-ui/build/static/regex-BS97XMMk.js +0 -1
  882. package/web-ui/build/static/rego-Brc7DU11.js +0 -1
  883. package/web-ui/build/static/renpy-C2sPWAHv.js +0 -1
  884. package/web-ui/build/static/rest-DlZ7ycRe.js +0 -1
  885. package/web-ui/build/static/rib-C8WsA4on.js +0 -1
  886. package/web-ui/build/static/rip-dd9bS3Ar.js +0 -1
  887. package/web-ui/build/static/roboconf-CAEw-rS3.js +0 -1
  888. package/web-ui/build/static/roboconf-D0TfrLeu.js +0 -1
  889. package/web-ui/build/static/robotframework-CkgVY4bX.js +0 -1
  890. package/web-ui/build/static/routeros-DIek1v-Z.js +0 -1
  891. package/web-ui/build/static/rsl-DExhHtA1.js +0 -1
  892. package/web-ui/build/static/ruby-BjvzODgO.js +0 -1
  893. package/web-ui/build/static/ruby-Dflr1gcA.js +0 -1
  894. package/web-ui/build/static/ruleslanguage-BgzP6UBl.js +0 -1
  895. package/web-ui/build/static/rust-DxIro-GW.js +0 -1
  896. package/web-ui/build/static/rust-qWzP5Jcw.js +0 -1
  897. package/web-ui/build/static/sas-BrCJWU_w.js +0 -1
  898. package/web-ui/build/static/sas-itaOGZ-D.js +0 -1
  899. package/web-ui/build/static/sass-BTk1_hyU.js +0 -1
  900. package/web-ui/build/static/scala-DEtImhEo.js +0 -1
  901. package/web-ui/build/static/scala-DdZCH_nS.js +0 -1
  902. package/web-ui/build/static/scheme-CiOCQffl.js +0 -1
  903. package/web-ui/build/static/scheme-WaU-JPJX.js +0 -1
  904. package/web-ui/build/static/scilab-03tyg0ft.js +0 -1
  905. package/web-ui/build/static/scss-DXl2WSdH.js +0 -1
  906. package/web-ui/build/static/scss-movJ3vcX.js +0 -1
  907. package/web-ui/build/static/shell-DWmlNcrf.js +0 -1
  908. package/web-ui/build/static/shell-session-lHcfQbT0.js +0 -1
  909. package/web-ui/build/static/smali-7RKwn9RZ.js +0 -1
  910. package/web-ui/build/static/smali-TEMQ7bRM.js +0 -1
  911. package/web-ui/build/static/smalltalk-B_nVEfab.js +0 -1
  912. package/web-ui/build/static/smalltalk-BsA9wucb.js +0 -1
  913. package/web-ui/build/static/smarty-DSf4s_8v.js +0 -1
  914. package/web-ui/build/static/sml-BDO_Hmie.js +0 -1
  915. package/web-ui/build/static/sml-DKuy82zG.js +0 -1
  916. package/web-ui/build/static/solidity-jtWv6laA.js +0 -1
  917. package/web-ui/build/static/solution-file-DcfiquuJ.js +0 -1
  918. package/web-ui/build/static/soy-DmBVrDYd.js +0 -1
  919. package/web-ui/build/static/sparql-_JOxZ7fM.js +0 -1
  920. package/web-ui/build/static/splunk-spl-CHeBtp33.js +0 -1
  921. package/web-ui/build/static/sqf-9wI8rp5o.js +0 -1
  922. package/web-ui/build/static/sqf-BuKh30bG.js +0 -1
  923. package/web-ui/build/static/sql-ClFFHGMY.js +0 -1
  924. package/web-ui/build/static/sql-DVXtimpW.js +0 -1
  925. package/web-ui/build/static/sql_more-CNw-JJON.js +0 -1
  926. package/web-ui/build/static/squirrel-Bdi8LbT5.js +0 -1
  927. package/web-ui/build/static/stan-Brcz64A8.js +0 -1
  928. package/web-ui/build/static/stan-C9Q08Juk.js +0 -1
  929. package/web-ui/build/static/stata-ES8hryw_.js +0 -1
  930. package/web-ui/build/static/step21-Cfmoq4Lb.js +0 -1
  931. package/web-ui/build/static/stylus-DMKHLSvm.js +0 -1
  932. package/web-ui/build/static/stylus-Dcs8vyW2.js +0 -1
  933. package/web-ui/build/static/subunit-DRjv565H.js +0 -1
  934. package/web-ui/build/static/swift-0x_T9zx8.js +0 -1
  935. package/web-ui/build/static/swift-CUvpRg4a.js +0 -1
  936. package/web-ui/build/static/systemd-Dl8xGVv9.js +0 -1
  937. package/web-ui/build/static/t4-cs-DqvXuZwc.js +0 -1
  938. package/web-ui/build/static/t4-templating-DjN2N1uM.js +0 -1
  939. package/web-ui/build/static/t4-vb-CZQn9IVK.js +0 -1
  940. package/web-ui/build/static/taggerscript-CPCJkC2t.js +0 -1
  941. package/web-ui/build/static/tap-BPfuLhe7.js +0 -1
  942. package/web-ui/build/static/tap-CSdsd38Q.js +0 -1
  943. package/web-ui/build/static/tcl-4BqhAKLC.js +0 -1
  944. package/web-ui/build/static/tcl-Bh0Jg8jj.js +0 -1
  945. package/web-ui/build/static/textile-BiD4awlU.js +0 -1
  946. package/web-ui/build/static/thrift-Br1-10xh.js +0 -1
  947. package/web-ui/build/static/toml-QlLCqVpQ.js +0 -1
  948. package/web-ui/build/static/tp-B2Ef9EBz.js +0 -1
  949. package/web-ui/build/static/tremor-DuZdAfVr.js +0 -1
  950. package/web-ui/build/static/tsx-W3KEjccO.js +0 -1
  951. package/web-ui/build/static/tt2-D_tdF-56.js +0 -1
  952. package/web-ui/build/static/turtle-DxrQkFoq.js +0 -1
  953. package/web-ui/build/static/twig-DD44ApyU.js +0 -1
  954. package/web-ui/build/static/twig-vA3ZwAxn.js +0 -1
  955. package/web-ui/build/static/typescript-BfbcKNOu.js +0 -1
  956. package/web-ui/build/static/typescript-CvKtq1ix.js +0 -1
  957. package/web-ui/build/static/typoscript-BEu84JpE.js +0 -1
  958. package/web-ui/build/static/unrealscript-ohUNsJGM.js +0 -1
  959. package/web-ui/build/static/uorazor-BWer-chm.js +0 -1
  960. package/web-ui/build/static/uri-CPLTr_NY.js +0 -1
  961. package/web-ui/build/static/v-gAkMRmmI.js +0 -1
  962. package/web-ui/build/static/vala-Bktj5SNB.js +0 -1
  963. package/web-ui/build/static/vala-D1fDPFxI.js +0 -1
  964. package/web-ui/build/static/vbnet-Cn0g0ohh.js +0 -1
  965. package/web-ui/build/static/vbnet-TiYHF2WM.js +0 -1
  966. package/web-ui/build/static/vbscript-BUV-Kjvs.js +0 -1
  967. package/web-ui/build/static/vbscript-html-s1RgByjf.js +0 -1
  968. package/web-ui/build/static/velocity-DTy-TOwB.js +0 -1
  969. package/web-ui/build/static/verilog-4jk4MMXN.js +0 -1
  970. package/web-ui/build/static/verilog-aR4U-DJX.js +0 -1
  971. package/web-ui/build/static/vhdl-D72XnBZR.js +0 -1
  972. package/web-ui/build/static/vhdl-DFdtG28B.js +0 -1
  973. package/web-ui/build/static/vim-BMqsbQ-a.js +0 -1
  974. package/web-ui/build/static/vim-Cc3UuKOs.js +0 -1
  975. package/web-ui/build/static/visual-basic-CyC2kNGV.js +0 -1
  976. package/web-ui/build/static/warpscript-DpKFeISB.js +0 -1
  977. package/web-ui/build/static/wasm-SPljCkFH.js +0 -1
  978. package/web-ui/build/static/web-idl-Cie2yHU9.js +0 -1
  979. package/web-ui/build/static/wiki-BfYfwsBk.js +0 -1
  980. package/web-ui/build/static/wolfram-Dgi1K2gQ.js +0 -1
  981. package/web-ui/build/static/wren-CFQxgLld.js +0 -1
  982. package/web-ui/build/static/x86asm-CBIt2r64.js +0 -1
  983. package/web-ui/build/static/xeora-e5JHDF1T.js +0 -1
  984. package/web-ui/build/static/xl-CPZe-czl.js +0 -1
  985. package/web-ui/build/static/xml-BEuPuoS1.js +0 -1
  986. package/web-ui/build/static/xml-doc-DTOJGYE2.js +0 -1
  987. package/web-ui/build/static/xojo-ByMSKdYJ.js +0 -1
  988. package/web-ui/build/static/xquery--5iaD5oE.js +0 -1
  989. package/web-ui/build/static/xquery-DJp5PXZo.js +0 -1
  990. package/web-ui/build/static/yaml-CH8EnM9M.js +0 -1
  991. package/web-ui/build/static/yaml-mKr8oN1v.js +0 -1
  992. package/web-ui/build/static/yang-Nqdvm2mQ.js +0 -1
  993. package/web-ui/build/static/zephir-BJZaDzrW.js +0 -1
  994. package/web-ui/build/static/zig-DRkhvZLn.js +0 -1
@@ -9,9 +9,33 @@
9
9
  import { BaseTool } from './baseTool.js';
10
10
  import fs from 'fs';
11
11
  import path from 'path';
12
+ import {
13
+ isWhitespace,
14
+ skipWhitespace,
15
+ readIdent,
16
+ startsWithKeyword,
17
+ consumeKeyword,
18
+ consumeAnyKeyword,
19
+ trimmedStartsWithAny,
20
+ indexOfWord,
21
+ containsWord,
22
+ stripStringsAndLineComments,
23
+ countChar,
24
+ consumeDottedAssignTail,
25
+ trimmedEndsWith,
26
+ isIdentStart,
27
+ isWordChar,
28
+ } from './parserHelpers.js';
12
29
 
13
30
  const CODE_MAP_CONFIG = {
14
- SUPPORTED_EXTENSIONS: new Set(['.js', '.ts', '.jsx', '.tsx', '.mjs', '.cjs', '.py']),
31
+ SUPPORTED_EXTENSIONS: new Set([
32
+ '.js', '.ts', '.jsx', '.tsx', '.mjs', '.cjs', '.py',
33
+ // C / C++ via a focused regex pass — see _parseC below. The
34
+ // proper tree-sitter migration that would replace the JS + Python
35
+ // regex parsers also covers these and adds full accuracy; this
36
+ // pass is the v1 that unblocks `code-map` on C/CPP codebases today.
37
+ '.c', '.h', '.cc', '.cpp', '.cxx', '.hpp', '.hh', '.hxx',
38
+ ]),
15
39
  MAX_FILES: 500,
16
40
  MAX_FILE_SIZE: 5 * 1024 * 1024, // 5MB per file
17
41
  MAX_READ_RANGE: 500, // Max lines per read-range call
@@ -43,7 +67,7 @@ SKELETON LEVELS:
43
67
  - B.0: All signatures (public + private + methods) — DEFAULT
44
68
  - B.1: All signatures + comments/docstrings
45
69
 
46
- Supported files: .js, .ts, .jsx, .tsx, .mjs, .cjs, .py
70
+ Supported files: .js, .ts, .jsx, .tsx, .mjs, .cjs, .py, .c, .h, .cc, .cpp, .cxx, .hpp, .hh, .hxx
47
71
  Respects .gitignore rules. Skips node_modules, __pycache__, .git, dist, build.
48
72
 
49
73
  USAGE — Skeleton scan:
@@ -270,7 +294,7 @@ XML format also supported:
270
294
  totalFiles: 0,
271
295
  totalEntries: 0,
272
296
  message: 'No supported files found in the specified path.',
273
- guidance: 'Try a different path or verify the directory contains .js, .ts, .jsx, .tsx, .mjs, .cjs, or .py files.'
297
+ guidance: 'Try a different path or verify the directory contains supported files (.js, .ts, .jsx, .tsx, .mjs, .cjs, .py, .c, .h, .cc, .cpp, .cxx, .hpp, .hh, .hxx).'
274
298
  };
275
299
  }
276
300
 
@@ -291,9 +315,10 @@ XML format also supported:
291
315
  const lines = content.replace(/\r\n/g, '\n').replace(/\r/g, '\n').split('\n');
292
316
  const lang = this._langOf(file);
293
317
 
294
- const entries = lang === 'python'
295
- ? this._parsePython(lines, parseOptions)
296
- : this._parseJS(lines, parseOptions);
318
+ const entries =
319
+ lang === 'python' ? this._parsePython(lines, parseOptions) :
320
+ lang === 'c' ? this._parseC(lines, parseOptions) :
321
+ this._parseJS(lines, parseOptions);
297
322
 
298
323
  if (entries.length === 0) continue;
299
324
 
@@ -564,10 +589,371 @@ XML format also supported:
564
589
  // ── Language detection ────────────────────────────────────────────────────
565
590
 
566
591
  _langOf(file) {
567
- return path.extname(file).toLowerCase() === '.py' ? 'python' : 'js';
592
+ const ext = path.extname(file).toLowerCase();
593
+ if (ext === '.py') return 'python';
594
+ if (['.c', '.h', '.cc', '.cpp', '.cxx', '.hpp', '.hh', '.hxx'].includes(ext)) return 'c';
595
+ return 'js';
568
596
  }
569
597
 
570
598
  // ── JS / TS parser ────────────────────────────────────────────────────────
599
+ //
600
+ // No-regex implementation. Pattern matchers below each return either
601
+ // `true`/`false` or `null`/idx, using the primitives from
602
+ // parserHelpers.js. This trades five lines of regex for ten lines of
603
+ // explicit cursor-walking, but the result is far more debuggable and
604
+ // every behavior is locked by parserHelpers.test.js + codeMapTool.test.js.
605
+
606
+ // Modifier keywords that can precede a class-method name (used by the
607
+ // "method inside class" matcher).
608
+ static _METHOD_MODIFIERS = new Set([
609
+ 'private', 'protected', 'public', 'readonly', 'abstract',
610
+ 'override', 'async', 'static', 'get', 'set',
611
+ ]);
612
+
613
+ // Reserved words that look like methods but aren't — `if (x) {` etc.
614
+ static _METHOD_KEYWORD_EXCLUDE = new Set([
615
+ 'if', 'for', 'while', 'switch', 'catch', 'return', 'throw', 'new',
616
+ 'typeof', 'delete', 'void', 'await', 'class', 'function',
617
+ 'const', 'let', 'var', 'super', 'this',
618
+ ]);
619
+
620
+ /**
621
+ * Does the RHS of an assignment (starting at idx) look like a function
622
+ * or arrow expression? Recognizes:
623
+ * function …
624
+ * async function …
625
+ * () => … or (a, b) => …
626
+ * ident => … or async ident => …
627
+ *
628
+ * Returns true on hit. Allocation-free.
629
+ */
630
+ _rhsLooksLikeFunction(s, idx) {
631
+ let i = skipWhitespace(s, idx);
632
+ // optional `async`
633
+ const afterAsync = consumeKeyword(s, 'async', i);
634
+ if (afterAsync !== -1) i = skipWhitespace(s, afterAsync);
635
+ if (startsWithKeyword(s, 'function', i)) return true;
636
+
637
+ // `(…) =>` — find a balanced paren run, then `=>`
638
+ if (s[i] === '(') {
639
+ let depth = 1; let j = i + 1;
640
+ while (j < s.length && depth > 0) {
641
+ if (s[j] === '(') depth += 1;
642
+ else if (s[j] === ')') depth -= 1;
643
+ j += 1;
644
+ }
645
+ const k = skipWhitespace(s, j);
646
+ if (s[k] === '=' && s[k + 1] === '>') return true;
647
+ return false;
648
+ }
649
+
650
+ // `ident =>`
651
+ const id = readIdent(s, i);
652
+ if (id) {
653
+ const k = skipWhitespace(s, id.nextIdx);
654
+ if (s[k] === '=' && s[k + 1] === '>') return true;
655
+ }
656
+ return false;
657
+ }
658
+
659
+ /** Line is `import ...` (ESM). */
660
+ _isImportLine(raw) {
661
+ const i = skipWhitespace(raw, 0);
662
+ return startsWithKeyword(raw, 'import', i);
663
+ }
664
+ /** Line contains `require(` as a whole word call. */
665
+ _hasRequireCall(raw) {
666
+ const i = indexOfWord(raw, 'require');
667
+ if (i === -1) return false;
668
+ const j = skipWhitespace(raw, i + 'require'.length);
669
+ return raw[j] === '(';
670
+ }
671
+
672
+ /** Walks across the prefix keywords `export default abstract async ...`. */
673
+ _skipDecoratorPrefix(raw) {
674
+ let i = skipWhitespace(raw, 0);
675
+ // export, then optional `default`
676
+ const afterExport = consumeKeyword(raw, 'export', i);
677
+ if (afterExport !== -1) i = skipWhitespace(raw, afterExport);
678
+ const afterDefault = consumeKeyword(raw, 'default', i);
679
+ if (afterDefault !== -1) i = skipWhitespace(raw, afterDefault);
680
+ const afterAbstract = consumeKeyword(raw, 'abstract', i);
681
+ if (afterAbstract !== -1) i = skipWhitespace(raw, afterAbstract);
682
+ const afterAsync = consumeKeyword(raw, 'async', i);
683
+ if (afterAsync !== -1) i = skipWhitespace(raw, afterAsync);
684
+ return i;
685
+ }
686
+
687
+ /**
688
+ * The line starts with one of these declaration keywords (after the
689
+ * optional `export [default] [abstract] [async]` prefix run):
690
+ * function | class | const | let | var | enum | interface | type
691
+ *
692
+ * Returns true if so.
693
+ */
694
+ _isExportableDecl(raw) {
695
+ const i = this._skipDecoratorPrefix(raw);
696
+ return (
697
+ startsWithKeyword(raw, 'function', i) ||
698
+ startsWithKeyword(raw, 'class', i) ||
699
+ startsWithKeyword(raw, 'const', i) ||
700
+ startsWithKeyword(raw, 'let', i) ||
701
+ startsWithKeyword(raw, 'var', i) ||
702
+ startsWithKeyword(raw, 'enum', i) ||
703
+ startsWithKeyword(raw, 'interface', i) ||
704
+ startsWithKeyword(raw, 'type', i) ||
705
+ startsWithKeyword(raw, 'abstract', i) // bare `export abstract foo`
706
+ );
707
+ }
708
+
709
+ /** `module.exports = …` (whole or property: `module.exports.foo = …`). */
710
+ _isModuleExportsAssign(raw) {
711
+ const i = skipWhitespace(raw, 0);
712
+ if (!startsWithKeyword(raw, 'module', i)) return false;
713
+ let j = i + 'module'.length;
714
+ if (raw[j] !== '.') return false;
715
+ j += 1;
716
+ if (!startsWithKeyword(raw, 'exports', j)) return false;
717
+ j += 'exports'.length;
718
+ // optional `.ident`
719
+ if (raw[j] === '.') {
720
+ const id = readIdent(raw, j + 1);
721
+ if (!id) return false;
722
+ j = id.nextIdx;
723
+ }
724
+ j = skipWhitespace(raw, j);
725
+ return raw[j] === '=' && raw[j + 1] !== '=';
726
+ }
727
+
728
+ /** `exports.foo = …` */
729
+ _isExportsAssign(raw) {
730
+ const i = skipWhitespace(raw, 0);
731
+ if (!startsWithKeyword(raw, 'exports', i)) return false;
732
+ let j = i + 'exports'.length;
733
+ if (raw[j] !== '.') return false;
734
+ const id = readIdent(raw, j + 1);
735
+ if (!id) return false;
736
+ j = skipWhitespace(raw, id.nextIdx);
737
+ return raw[j] === '=' && raw[j + 1] !== '=';
738
+ }
739
+
740
+ /** `(async) function name(…)` top-level form. */
741
+ _isTopLevelFunctionDecl(raw) {
742
+ let i = skipWhitespace(raw, 0);
743
+ const aa = consumeKeyword(raw, 'async', i);
744
+ if (aa !== -1) i = skipWhitespace(raw, aa);
745
+ if (!startsWithKeyword(raw, 'function', i)) return false;
746
+ i = skipWhitespace(raw, i + 'function'.length);
747
+ return readIdent(raw, i) !== null;
748
+ }
749
+
750
+ /** `(abstract) class Name`. */
751
+ _isTopLevelClassDecl(raw) {
752
+ let i = skipWhitespace(raw, 0);
753
+ const aa = consumeKeyword(raw, 'abstract', i);
754
+ if (aa !== -1) i = skipWhitespace(raw, aa);
755
+ if (!startsWithKeyword(raw, 'class', i)) return false;
756
+ i = skipWhitespace(raw, i + 'class'.length);
757
+ return readIdent(raw, i) !== null;
758
+ }
759
+
760
+ /** `const|let|var name = <function-ish>`. */
761
+ _isConstAssignedFunction(raw) {
762
+ let i = skipWhitespace(raw, 0);
763
+ const dk = consumeAnyKeyword(raw, ['const', 'let', 'var'], i);
764
+ if (!dk) return false;
765
+ i = skipWhitespace(raw, dk.nextIdx);
766
+ const id = readIdent(raw, i);
767
+ if (!id) return false;
768
+ i = skipWhitespace(raw, id.nextIdx);
769
+ if (raw[i] !== '=' || raw[i + 1] === '=' || raw[i + 1] === '>') return false;
770
+ return this._rhsLooksLikeFunction(raw, i + 1);
771
+ }
772
+
773
+ /** Class-with-an-opening-brace check for the brace stack. */
774
+ _isClassDeclWithOpenBrace(raw, opens) {
775
+ if (opens <= 0) return false;
776
+ let i = skipWhitespace(raw, 0);
777
+ const ex = consumeKeyword(raw, 'export', i);
778
+ if (ex !== -1) i = skipWhitespace(raw, ex);
779
+ const df = consumeKeyword(raw, 'default', i);
780
+ if (df !== -1) i = skipWhitespace(raw, df);
781
+ const ab = consumeKeyword(raw, 'abstract', i);
782
+ if (ab !== -1) i = skipWhitespace(raw, ab);
783
+ return startsWithKeyword(raw, 'class', i);
784
+ }
785
+
786
+ /** IIFE prefix-op form: `!function`, `+function`, `~function`, `-function`. */
787
+ _isIifePrefixOp(raw) {
788
+ const i = skipWhitespace(raw, 0);
789
+ const ch = raw[i];
790
+ if (ch !== '!' && ch !== '+' && ch !== '~' && ch !== '-') return false;
791
+ let j = skipWhitespace(raw, i + 1);
792
+ const aa = consumeKeyword(raw, 'async', j);
793
+ if (aa !== -1) j = skipWhitespace(raw, aa);
794
+ return startsWithKeyword(raw, 'function', j);
795
+ }
796
+
797
+ /** IIFE paren-wrapped form: `(function ...)` or `(async function ...)`. */
798
+ _isIifeParens(raw) {
799
+ const i = skipWhitespace(raw, 0);
800
+ if (raw[i] !== '(') return false;
801
+ let j = skipWhitespace(raw, i + 1);
802
+ const aa = consumeKeyword(raw, 'async', j);
803
+ if (aa !== -1) j = skipWhitespace(raw, aa);
804
+ return startsWithKeyword(raw, 'function', j);
805
+ }
806
+
807
+ /**
808
+ * Global/namespace assignment of a function-ish value:
809
+ * window.X.Y = function / globalThis.X = () => / MyApp.foo = …
810
+ * Conditions:
811
+ * - LHS head is `window|globalThis|self` (and optional dotted tail)
812
+ * OR a TitleCase identifier followed by AT LEAST one dotted tail
813
+ * segment (so we don't grab bare `Foo = …`)
814
+ * - RHS is function or arrow
815
+ */
816
+ _isGlobalAssign(raw) {
817
+ let i = skipWhitespace(raw, 0);
818
+ const headKw = consumeAnyKeyword(raw, ['window', 'globalThis', 'self'], i);
819
+ let after;
820
+ let hadGlobalHead = false;
821
+ if (headKw) {
822
+ hadGlobalHead = true;
823
+ after = consumeDottedAssignTail(raw, headKw.nextIdx);
824
+ } else {
825
+ // TitleCase ident + at least one dotted tail
826
+ const id = readIdent(raw, i);
827
+ if (!id) return false;
828
+ // TitleCase = uppercase first char
829
+ const first = id.ident[0];
830
+ if (first < 'A' || first > 'Z') return false;
831
+ // Need at least one '.ident' before '='
832
+ if (raw[id.nextIdx] !== '.') return false;
833
+ after = consumeDottedAssignTail(raw, id.nextIdx);
834
+ }
835
+ if (after === -1) return false;
836
+ return this._rhsLooksLikeFunction(raw, after);
837
+ }
838
+
839
+ /**
840
+ * Prototype-method assignment: `Foo.prototype.bar = function|=>…`.
841
+ * Note: leverages `_isGlobalAssign`'s tail logic but requires
842
+ * `.prototype.<ident>` somewhere in the LHS.
843
+ */
844
+ _isPrototypeAssign(raw) {
845
+ let i = skipWhitespace(raw, 0);
846
+ const id = readIdent(raw, i);
847
+ if (!id) return false;
848
+ let j = id.nextIdx;
849
+ // walk `.ident*` until we hit `.prototype`
850
+ let sawPrototype = false;
851
+ while (raw[j] === '.') {
852
+ // peek the next ident
853
+ if (startsWithKeyword(raw, 'prototype', j + 1)) {
854
+ sawPrototype = true;
855
+ j = j + 1 + 'prototype'.length;
856
+ break;
857
+ }
858
+ const more = readIdent(raw, j + 1);
859
+ if (!more) return false;
860
+ j = more.nextIdx;
861
+ }
862
+ if (!sawPrototype) return false;
863
+ // Need `.ident` + `=` + function-ish
864
+ if (raw[j] !== '.') return false;
865
+ const methodId = readIdent(raw, j + 1);
866
+ if (!methodId) return false;
867
+ j = skipWhitespace(raw, methodId.nextIdx);
868
+ if (raw[j] !== '=' || raw[j + 1] === '=') return false;
869
+ return this._rhsLooksLikeFunction(raw, j + 1);
870
+ }
871
+
872
+ /** jQuery-style plugin: `$.fn.X = function …` / `jQuery.fn.X = function …`. */
873
+ _isJqueryPluginAssign(raw) {
874
+ let i = skipWhitespace(raw, 0);
875
+ let afterHead;
876
+ if (raw[i] === '$') {
877
+ afterHead = i + 1;
878
+ } else if (startsWithKeyword(raw, 'jQuery', i)) {
879
+ afterHead = i + 'jQuery'.length;
880
+ } else {
881
+ return false;
882
+ }
883
+ if (raw[afterHead] !== '.') return false;
884
+ if (!startsWithKeyword(raw, 'fn', afterHead + 1)) return false;
885
+ let j = afterHead + 1 + 'fn'.length;
886
+ if (raw[j] !== '.') return false;
887
+ const id = readIdent(raw, j + 1);
888
+ if (!id) return false;
889
+ j = skipWhitespace(raw, id.nextIdx);
890
+ if (raw[j] !== '=' || raw[j + 1] === '=') return false;
891
+ // We only insist on `function` here (matches the original regex).
892
+ let r = skipWhitespace(raw, j + 1);
893
+ const aa = consumeKeyword(raw, 'async', r);
894
+ if (aa !== -1) r = skipWhitespace(raw, aa);
895
+ return startsWithKeyword(raw, 'function', r);
896
+ }
897
+
898
+ /** `document.addEventListener(` or `window.addEventListener(`. */
899
+ _isAddEventListenerCall(raw) {
900
+ const i = skipWhitespace(raw, 0);
901
+ const head = consumeAnyKeyword(raw, ['document', 'window'], i);
902
+ if (!head) return false;
903
+ let j = head.nextIdx;
904
+ if (raw[j] !== '.') return false;
905
+ if (!startsWithKeyword(raw, 'addEventListener', j + 1)) return false;
906
+ j = skipWhitespace(raw, j + 1 + 'addEventListener'.length);
907
+ return raw[j] === '(';
908
+ }
909
+
910
+ /**
911
+ * Method inside a class. Caller already established `classDepth > 0`
912
+ * and `braceDepthBeforeLine === methodDepth`. We just decide if the
913
+ * line LOOKS like a method declaration vs a method call.
914
+ *
915
+ * Returns the method name or null.
916
+ */
917
+ _detectMethodName(raw) {
918
+ // Must start with at least one space (methods are indented).
919
+ if (raw[0] !== ' ' && raw[0] !== '\t') return null;
920
+ let i = skipWhitespace(raw, 0);
921
+ // Walk through any sequence of modifier keywords.
922
+ while (true) {
923
+ const id = readIdent(raw, i);
924
+ if (!id) return null;
925
+ if (!CodeMapTool._METHOD_MODIFIERS.has(id.ident)) {
926
+ // This is the method name candidate.
927
+ const afterName = skipWhitespace(raw, id.nextIdx);
928
+ if (raw[afterName] !== '(' && raw[afterName] !== '<') return null;
929
+ // Excluded reserved words (`if`, `for`, …)
930
+ if (CodeMapTool._METHOD_KEYWORD_EXCLUDE.has(id.ident)) return null;
931
+ // Is this a call rather than a definition?
932
+ // Calls end with `)` (optionally `;`) and have NO `) {` or `) : …`.
933
+ const trimmed = raw.trim();
934
+ const endsWithClose = trimmedEndsWith(trimmed, ')');
935
+ const endsWithCloseBrace = trimmedEndsWith(trimmed, ') {');
936
+ // `): Type` — a TS-style return-type annotation continuation
937
+ const hasReturnTypeAnnotation = (() => {
938
+ // Walk past the open paren to find the matching `)`, then check
939
+ // if the next non-ws char is `:` followed by a non-empty token.
940
+ let k = afterName + 1;
941
+ let depth = 1;
942
+ while (k < raw.length && depth > 0) {
943
+ if (raw[k] === '(') depth += 1;
944
+ else if (raw[k] === ')') depth -= 1;
945
+ k += 1;
946
+ }
947
+ k = skipWhitespace(raw, k);
948
+ return raw[k] === ':' && raw[k + 1] !== '\0' && raw[k + 1] !== undefined;
949
+ })();
950
+ if (endsWithClose && !endsWithCloseBrace && !hasReturnTypeAnnotation) return null;
951
+ return id.ident;
952
+ }
953
+ // It WAS a modifier — consume + continue.
954
+ i = skipWhitespace(raw, id.nextIdx);
955
+ }
956
+ }
571
957
 
572
958
  _parseJS(lines, { publicOnly, withComments, includeImports }) {
573
959
  const entries = [];
@@ -580,25 +966,24 @@ XML format also supported:
580
966
  let braceDepth = 0;
581
967
  let methodDepths = [];
582
968
 
583
- for (let i = 0; i < lines.length; i++) {
969
+ for (let i = 0; i < lines.length; i += 1) {
584
970
  const lineNum = i + 1;
585
971
  const raw = lines[i];
586
- const trimmed = raw.trim();
972
+ const start = skipWhitespace(raw, 0);
587
973
 
588
974
  // block-comment tracking
589
975
  if (inBlockComment) {
590
976
  blockCommentLines.push({ line: lineNum, text: raw, kind: 'comment' });
591
- if (trimmed.includes('*/')) {
977
+ if (raw.includes('*/')) {
592
978
  inBlockComment = false;
593
979
  pendingComments = blockCommentLines;
594
980
  blockCommentLines = [];
595
981
  }
596
982
  continue;
597
983
  }
598
-
599
- if (trimmed.startsWith('/*')) {
984
+ if (raw[start] === '/' && raw[start + 1] === '*') {
600
985
  blockCommentLines = [{ line: lineNum, text: raw, kind: 'comment' }];
601
- if (trimmed.includes('*/')) {
986
+ if (raw.slice(start + 2).includes('*/')) {
602
987
  pendingComments = blockCommentLines;
603
988
  blockCommentLines = [];
604
989
  } else {
@@ -606,88 +991,75 @@ XML format also supported:
606
991
  }
607
992
  continue;
608
993
  }
609
-
610
- if (trimmed.startsWith('//')) {
994
+ if (raw[start] === '/' && raw[start + 1] === '/') {
611
995
  pendingComments.push({ line: lineNum, text: raw, kind: 'comment' });
612
996
  continue;
613
997
  }
614
998
 
615
999
  // imports
616
1000
  if (includeImports) {
617
- if (/^\s*import\s/.test(raw) || /\brequire\s*\(/.test(raw)) {
1001
+ if (this._isImportLine(raw) || this._hasRequireCall(raw)) {
618
1002
  entries.push({ line: lineNum, text: raw, kind: 'import' });
619
1003
  pendingComments = [];
620
1004
  continue;
621
1005
  }
622
1006
  }
623
1007
 
624
- // brace tracking for class context
625
- const stripped = trimmed
626
- .replace(/\/\/.*$/, '')
627
- .replace(/`[^`]*`/g, '')
628
- .replace(/"(?:[^"\\]|\\.)*"/g, '')
629
- .replace(/'(?:[^'\\]|\\.)*'/g, '');
630
- const opens = (stripped.match(/\{/g) || []).length;
631
- const closes = (stripped.match(/\}/g) || []).length;
632
-
1008
+ // Brace tracking for class context — mask strings + line comments
1009
+ // before counting so e.g. `var s = "class Foo {"` doesn't push a
1010
+ // bogus class frame.
1011
+ const masked = stripStringsAndLineComments(raw);
1012
+ const opens = countChar(masked, '{');
1013
+ const closes = countChar(masked, '}');
633
1014
  const braceDepthBeforeLine = braceDepth;
634
1015
 
635
- if (/^\s*(export\s+)?(default\s+)?(abstract\s+)?class\s/.test(raw) && opens > 0) {
1016
+ if (this._isClassDeclWithOpenBrace(raw, opens)) {
636
1017
  braceStack.push({ depth: braceDepth, type: 'class' });
637
1018
  methodDepths.push(braceDepth + 1);
638
- classDepth++;
1019
+ classDepth += 1;
639
1020
  }
640
-
641
1021
  braceDepth += opens - closes;
642
-
643
1022
  while (braceStack.length > 0 && braceDepth <= braceStack[braceStack.length - 1].depth) {
644
1023
  const popped = braceStack.pop();
645
1024
  if (popped.type === 'class') {
646
- classDepth--;
1025
+ classDepth -= 1;
647
1026
  methodDepths.pop();
648
1027
  }
649
1028
  }
650
1029
 
651
- // detect signatures
652
- const isExport = /^\s*export\s/.test(raw);
653
- const isModuleExports = /^\s*module\.exports(\.\w+)?\s*=/.test(raw);
654
- const isExportsAssign = /^\s*exports\.\w+\s*=/.test(raw);
655
- const isPublic = isExport || isModuleExports || isExportsAssign;
1030
+ // Signature detection
1031
+ const isExport = startsWithKeyword(raw, 'export', start);
1032
+ const isModuleExports = this._isModuleExportsAssign(raw);
1033
+ const isExportsAssign = this._isExportsAssign(raw);
1034
+ const isPublic = isExport || isModuleExports || isExportsAssign;
656
1035
 
657
1036
  let matched = false;
658
1037
 
659
- if (isExport) {
660
- if (/^\s*export\s+(default\s+)?(async\s+)?(function\b|class\b|const\b|let\b|var\b|enum\b|interface\b|type\b|abstract\b)/.test(raw)) {
661
- matched = true;
662
- }
663
- }
664
-
665
- if (isModuleExports || isExportsAssign) {
666
- matched = true;
667
- }
1038
+ if (isExport && this._isExportableDecl(raw)) matched = true;
1039
+ if (isModuleExports || isExportsAssign) matched = true;
668
1040
 
669
1041
  if (!matched && !publicOnly) {
670
- if (/^\s*(async\s+)?function\s+\w+/.test(raw)) matched = true;
671
- if (/^\s*(abstract\s+)?class\s+\w+/.test(raw)) matched = true;
672
- if (/^\s*(const|let|var)\s+\w+\s*=\s*(async\s+)?\(/.test(raw) && raw.includes('=>')) matched = true;
673
- if (/^\s*(const|let|var)\s+\w+\s*=\s*(async\s+)?function/.test(raw)) matched = true;
674
- if (/^\s*(const|let|var)\s+\w+\s*=\s*(async\s+)?\w+\s*=>/.test(raw)) matched = true;
675
-
676
- // method inside class
677
- const atMethodDepth = methodDepths.length > 0 && braceDepthBeforeLine === methodDepths[methodDepths.length - 1];
678
- if (classDepth > 0 && atMethodDepth && /^\s+(?:(?:private|protected|public|readonly|abstract|override|async|static|get|set)\s+)*(\w+)\s*[\(<]/.test(raw) && !isExport) {
679
- const methodMatch = raw.match(/^\s+(?:(?:private|protected|public|readonly|abstract|override|async|static|get|set)\s+)*(\w+)\s*[\(<]/);
680
- if (methodMatch) {
681
- const name = methodMatch[1];
682
- const isCall = /\)\s*;?\s*$/.test(trimmed) && !/\)\s*\{/.test(trimmed) && !/\)\s*:\s*\S/.test(trimmed);
683
- const excluded = ['if', 'for', 'while', 'switch', 'catch', 'return', 'throw', 'new', 'typeof', 'delete', 'void', 'await', 'class', 'function', 'const', 'let', 'var', 'super', 'this'];
684
- if (!isCall && !excluded.includes(name)) matched = true;
685
- }
1042
+ if (this._isTopLevelFunctionDecl(raw)) matched = true;
1043
+ if (this._isTopLevelClassDecl(raw)) matched = true;
1044
+ if (this._isConstAssignedFunction(raw)) matched = true;
1045
+
1046
+ // Browser-JS / pre-ESM patterns
1047
+ if (this._isIifePrefixOp(raw)) matched = true;
1048
+ if (this._isIifeParens(raw)) matched = true;
1049
+ if (this._isGlobalAssign(raw)) matched = true;
1050
+ if (this._isPrototypeAssign(raw)) matched = true;
1051
+ if (this._isJqueryPluginAssign(raw)) matched = true;
1052
+ if (this._isAddEventListenerCall(raw)) matched = true;
1053
+
1054
+ // Method inside class
1055
+ const atMethodDepth = methodDepths.length > 0 &&
1056
+ braceDepthBeforeLine === methodDepths[methodDepths.length - 1];
1057
+ if (classDepth > 0 && atMethodDepth && !isExport) {
1058
+ if (this._detectMethodName(raw)) matched = true;
686
1059
  }
687
1060
  }
688
1061
 
689
1062
  if (!matched && isPublic) matched = true;
690
-
691
1063
  if (matched && publicOnly && !isPublic) {
692
1064
  pendingComments = [];
693
1065
  continue;
@@ -703,11 +1075,58 @@ XML format also supported:
703
1075
  pendingComments = [];
704
1076
  }
705
1077
  }
706
-
707
1078
  return entries;
708
1079
  }
709
1080
 
710
1081
  // ── Python parser ─────────────────────────────────────────────────────────
1082
+ //
1083
+ // No-regex implementation. Identifiers are ASCII per PEP 8's
1084
+ // recommendation; this is a documented tradeoff vs. the previous
1085
+ // Unicode-aware (\p{L}) regex. The alternative — bundling a Unicode
1086
+ // category table — adds ~50 KB for a feature ~0.1 % of Python
1087
+ // codebases use. If users surface a non-ASCII-identifier Python
1088
+ // codebase the fix is to bring in tree-sitter (already planned for
1089
+ // #5 follow-on) which is Unicode-correct by default.
1090
+
1091
+ /** Try to read a `def` or `async def` head. Returns the function name or null. */
1092
+ _readPythonDefName(raw) {
1093
+ let i = skipWhitespace(raw, 0);
1094
+ // optional `async`
1095
+ const aa = consumeKeyword(raw, 'async', i);
1096
+ if (aa !== -1) i = skipWhitespace(raw, aa);
1097
+ if (!startsWithKeyword(raw, 'def', i)) return null;
1098
+ i = skipWhitespace(raw, i + 'def'.length);
1099
+ const id = readIdent(raw, i);
1100
+ if (!id) return null;
1101
+ i = skipWhitespace(raw, id.nextIdx);
1102
+ if (raw[i] !== '(') return null;
1103
+ return id.ident;
1104
+ }
1105
+ /** Try to read a `class Foo` head. Returns class name or null. */
1106
+ _readPythonClassName(raw) {
1107
+ let i = skipWhitespace(raw, 0);
1108
+ if (!startsWithKeyword(raw, 'class', i)) return null;
1109
+ i = skipWhitespace(raw, i + 'class'.length);
1110
+ const id = readIdent(raw, i);
1111
+ return id ? id.ident : null;
1112
+ }
1113
+
1114
+ /**
1115
+ * Returns true if `s` (at or after leading whitespace) starts with a
1116
+ * Python triple-quote prefix (`"""` or `'''`). Returns null otherwise.
1117
+ * On hit returns the 3-char quote string.
1118
+ */
1119
+ _pythonTripleQuoteAtStart(s) {
1120
+ const i = skipWhitespace(s, 0);
1121
+ if (s[i] === '"' && s[i + 1] === '"' && s[i + 2] === '"') return '"""';
1122
+ if (s[i] === "'" && s[i + 1] === "'" && s[i + 2] === "'") return "'''";
1123
+ return null;
1124
+ }
1125
+ /** True if the single-line docstring on a triple-quote line is closed on the same line. */
1126
+ _pythonTripleQuoteClosedOnLine(s, quote) {
1127
+ const i = skipWhitespace(s, 0);
1128
+ return s.indexOf(quote, i + 3) !== -1;
1129
+ }
711
1130
 
712
1131
  _parsePython(lines, { publicOnly, withComments, includeImports }) {
713
1132
  const entries = [];
@@ -717,52 +1136,81 @@ XML format also supported:
717
1136
  while (i < lines.length) {
718
1137
  const lineNum = i + 1;
719
1138
  const raw = lines[i];
720
- const trimmed = raw.trim();
1139
+ const start = skipWhitespace(raw, 0);
721
1140
 
722
- // imports
1141
+ // imports — `import …` or `from <module> import …`
723
1142
  if (includeImports) {
724
- if (/^\s*(import\s|from\s+\S+\s+import\s)/.test(raw)) {
1143
+ if (startsWithKeyword(raw, 'import', start)) {
725
1144
  entries.push({ line: lineNum, text: raw, kind: 'import' });
726
1145
  pendingComments = [];
727
- i++;
728
- continue;
1146
+ i += 1; continue;
1147
+ }
1148
+ if (startsWithKeyword(raw, 'from', start)) {
1149
+ // require a non-empty module then `import`
1150
+ let j = skipWhitespace(raw, start + 'from'.length);
1151
+ // Read the dotted module path; allow leading dots (relative).
1152
+ let progressed = false;
1153
+ while (j < raw.length && raw[j] === '.') { j += 1; progressed = true; }
1154
+ const id = readIdent(raw, j);
1155
+ if (id) { j = id.nextIdx; progressed = true; }
1156
+ while (raw[j] === '.') {
1157
+ const more = readIdent(raw, j + 1);
1158
+ if (!more) { progressed = true; break; }
1159
+ j = more.nextIdx;
1160
+ }
1161
+ j = skipWhitespace(raw, j);
1162
+ if (progressed && startsWithKeyword(raw, 'import', j)) {
1163
+ entries.push({ line: lineNum, text: raw, kind: 'import' });
1164
+ pendingComments = [];
1165
+ i += 1; continue;
1166
+ }
729
1167
  }
730
1168
  }
731
1169
 
732
1170
  // # comments
733
- if (trimmed.startsWith('#')) {
1171
+ if (raw[start] === '#') {
734
1172
  pendingComments.push({ line: lineNum, text: raw, kind: 'comment' });
735
- i++;
736
- continue;
1173
+ i += 1; continue;
737
1174
  }
738
-
739
1175
  // decorators
740
- if (trimmed.startsWith('@')) {
1176
+ if (raw[start] === '@') {
741
1177
  pendingComments.push({ line: lineNum, text: raw, kind: 'decorator' });
742
- i++;
743
- continue;
1178
+ i += 1; continue;
744
1179
  }
745
1180
 
746
1181
  // def / async def / class
747
- const ID = /[\p{L}\p{N}_]+/u.source;
748
- const defMatch = raw.match(new RegExp(`^(\\s*)(async\\s+)?def\\s+(${ID})\\s*\\(`, 'u'));
749
- const classMatch = !defMatch ? raw.match(new RegExp(`^(\\s*)(class)\\s+(${ID})`, 'u')) : null;
750
- const sigMatch = defMatch || classMatch;
1182
+ const defName = this._readPythonDefName(raw);
1183
+ const className = defName ? null : this._readPythonClassName(raw);
1184
+ const name = defName || className;
751
1185
 
752
- if (sigMatch) {
753
- const name = sigMatch[3];
1186
+ if (name) {
754
1187
  const isPublic = !name.startsWith('_');
755
1188
 
1189
+ // Helper: continuation lines for a multi-line signature like
1190
+ // def foo(
1191
+ // x: int,
1192
+ // y: int,
1193
+ // ) -> int:
1194
+ // The original advanced past the line that closes with `):` or
1195
+ // a line starting with `)` containing `:`. Preserve that logic.
1196
+ const advancePastMultilineSig = () => {
1197
+ // Only def's have parameter parens; class doesn't.
1198
+ if (!defName) return;
1199
+ if (raw.includes('):')) return;
1200
+ if (raw.includes(')')) return;
1201
+ // walk forward
1202
+ while (i < lines.length) {
1203
+ const pline = lines[i].trim();
1204
+ i += 1;
1205
+ if (pline.includes('):') ||
1206
+ (pline.startsWith(')') && pline.includes(':'))) break;
1207
+ }
1208
+ };
1209
+
756
1210
  if (publicOnly && !isPublic) {
757
1211
  pendingComments = [];
758
- i++;
759
- if (defMatch && !raw.includes('):') && !raw.includes(')')) {
760
- while (i < lines.length) {
761
- const pline = lines[i].trim();
762
- i++;
763
- if (pline.includes('):') || (pline.startsWith(')') && pline.includes(':'))) break;
764
- }
765
- }
1212
+ i += 1;
1213
+ advancePastMultilineSig();
766
1214
  i = this._skipPythonDocstring(lines, i);
767
1215
  continue;
768
1216
  }
@@ -772,15 +1220,8 @@ XML format also supported:
772
1220
  }
773
1221
  entries.push({ line: lineNum, text: raw, kind: 'signature' });
774
1222
  pendingComments = [];
775
- i++;
776
-
777
- if (defMatch && !raw.includes('):') && !raw.includes(')')) {
778
- while (i < lines.length) {
779
- const pline = lines[i].trim();
780
- i++;
781
- if (pline.includes('):') || (pline.startsWith(')') && pline.includes(':'))) break;
782
- }
783
- }
1223
+ i += 1;
1224
+ advancePastMultilineSig();
784
1225
 
785
1226
  if (withComments) {
786
1227
  const dsLines = this._collectPythonDocstring(lines, i);
@@ -792,26 +1233,34 @@ XML format also supported:
792
1233
  continue;
793
1234
  }
794
1235
 
795
- // top-level assignments
796
- if (/^\S/.test(raw) && new RegExp(`^[\\p{L}_][\\p{L}\\p{N}_]*\\s*=\\s*.+`, 'u').test(trimmed)) {
797
- const varMatch = trimmed.match(new RegExp(`^([\\p{L}_][\\p{L}\\p{N}_]*)\\s*=`, 'u'));
798
- if (varMatch) {
799
- const varName = varMatch[1];
800
- const isPublicVar = !varName.startsWith('_');
801
- if (!publicOnly || isPublicVar) {
802
- if (withComments && pendingComments.length > 0) {
803
- for (const c of pendingComments) entries.push(c);
1236
+ // Top-level assignments (data lines):
1237
+ // ident = expr (only when starting at column 0; indented
1238
+ // lines are method-internal and ignored)
1239
+ if (raw.length > 0 && !isWhitespace(raw[0]) && raw[0] !== '\n') {
1240
+ const id = readIdent(raw, 0);
1241
+ if (id) {
1242
+ let j = skipWhitespace(raw, id.nextIdx);
1243
+ if (raw[j] === '=' && raw[j + 1] !== '=') {
1244
+ // looks like `ident = …`
1245
+ // require there to BE an RHS — `name =` alone is invalid
1246
+ const afterEq = skipWhitespace(raw, j + 1);
1247
+ if (afterEq < raw.length) {
1248
+ const isPublicVar = !id.ident.startsWith('_');
1249
+ if (!publicOnly || isPublicVar) {
1250
+ if (withComments && pendingComments.length > 0) {
1251
+ for (const c of pendingComments) entries.push(c);
1252
+ }
1253
+ entries.push({ line: lineNum, text: raw, kind: 'data' });
1254
+ }
1255
+ pendingComments = [];
1256
+ i += 1; continue;
804
1257
  }
805
- entries.push({ line: lineNum, text: raw, kind: 'data' });
806
1258
  }
807
1259
  }
808
- pendingComments = [];
809
- i++;
810
- continue;
811
1260
  }
812
1261
 
813
1262
  pendingComments = [];
814
- i++;
1263
+ i += 1;
815
1264
  }
816
1265
 
817
1266
  return entries;
@@ -819,18 +1268,16 @@ XML format also supported:
819
1268
 
820
1269
  _collectPythonDocstring(lines, startIdx) {
821
1270
  if (startIdx >= lines.length) return [];
822
- const first = lines[startIdx].trim();
823
-
824
- if (/^("""|''').*\1\s*$/.test(first)) {
825
- return [{ line: startIdx + 1, text: lines[startIdx], kind: 'comment' }];
1271
+ const first = lines[startIdx];
1272
+ const quote = this._pythonTripleQuoteAtStart(first);
1273
+ if (!quote) return [];
1274
+ // single-line case: triple-quote opens AND closes on the same line
1275
+ if (this._pythonTripleQuoteClosedOnLine(first, quote)) {
1276
+ return [{ line: startIdx + 1, text: first, kind: 'comment' }];
826
1277
  }
827
-
828
- const tripleMatch = first.match(/^("""|''')/);
829
- if (!tripleMatch) return [];
830
-
831
- const quote = tripleMatch[1];
832
- const result = [{ line: startIdx + 1, text: lines[startIdx], kind: 'comment' }];
833
- for (let j = startIdx + 1; j < lines.length; j++) {
1278
+ // multi-line: collect until the closing triple-quote
1279
+ const result = [{ line: startIdx + 1, text: first, kind: 'comment' }];
1280
+ for (let j = startIdx + 1; j < lines.length; j += 1) {
834
1281
  result.push({ line: j + 1, text: lines[j], kind: 'comment' });
835
1282
  if (lines[j].includes(quote)) break;
836
1283
  }
@@ -839,18 +1286,235 @@ XML format also supported:
839
1286
 
840
1287
  _skipPythonDocstring(lines, startIdx) {
841
1288
  if (startIdx >= lines.length) return startIdx;
842
- const first = lines[startIdx].trim();
1289
+ const first = lines[startIdx];
1290
+ const quote = this._pythonTripleQuoteAtStart(first);
1291
+ if (!quote) return startIdx;
1292
+ if (this._pythonTripleQuoteClosedOnLine(first, quote)) return startIdx + 1;
1293
+ for (let j = startIdx + 1; j < lines.length; j += 1) {
1294
+ if (lines[j].includes(quote)) return j + 1;
1295
+ }
1296
+ return lines.length;
1297
+ }
1298
+
1299
+ // ── C / C++ parser ────────────────────────────────────────────────────────
1300
+ //
1301
+ // Regex-based, same approach as the JS path: walk lines, match a set
1302
+ // of declaration patterns. Mirrors what _parseJS does for JS — gets
1303
+ // the agent a high-level skeleton of any C/CPP file (functions,
1304
+ // classes/structs, includes, top-level macros) without bringing in
1305
+ // a full C parser. The proper tree-sitter migration (see #5 plan)
1306
+ // replaces this for full accuracy on edge cases like multi-line
1307
+ // function signatures, templated declarations, and trailing return
1308
+ // types — those work in 90 % of real code already because most
1309
+ // declarations fit on one line.
1310
+ //
1311
+ // Patterns covered:
1312
+ // - #include <...> / #include "..." → 'import' kind
1313
+ // - #define MACRO ... → 'signature' kind
1314
+ // - class Foo { → 'signature'
1315
+ // - struct Foo { → 'signature'
1316
+ // - enum class Foo { → 'signature'
1317
+ // - namespace foo { → 'signature'
1318
+ // - typedef … name; → 'signature'
1319
+ // - using name = …; → 'signature'
1320
+ // - free-function: `<type> name(args) {` → 'signature'
1321
+ // - method: `<type> Class::name(args) {` → 'signature'
1322
+ // - constructor: `Class::Class(args) {` → 'signature'
1323
+ // - destructor: `Class::~Class()` → 'signature'
1324
+ //
1325
+ // Skipped (intentional):
1326
+ // - Function prototypes (declarations w/o body) — too noisy in
1327
+ // headers; the user usually wants the definitions
1328
+ // - Lambdas — covered by treating the enclosing function as the
1329
+ // signature
1330
+ _parseC(lines, { publicOnly, withComments, includeImports }) {
1331
+ const entries = [];
1332
+ let pendingComments = [];
1333
+ let inBlockComment = false;
1334
+
1335
+ // C/C++ tokens we accept at the head of a function/type declaration.
1336
+ // The classifier walks them one at a time using consumeKeyword —
1337
+ // no regex. After the keyword run we require at least one
1338
+ // additional token before the `(` so we don't misidentify a bare
1339
+ // function call as a definition.
1340
+ const C_TYPE_KEYWORDS = [
1341
+ 'static', 'inline', 'extern', 'constexpr', 'virtual', 'explicit',
1342
+ 'friend', 'const', 'mutable', 'register', 'volatile',
1343
+ 'signed', 'unsigned', 'short', 'long',
1344
+ // Built-in primitive types — frequently followed by an ident.
1345
+ 'void', 'bool', 'char', 'int', 'float', 'double',
1346
+ 'auto', 'wchar_t', 'char16_t', 'char32_t',
1347
+ ];
1348
+
1349
+ for (let i = 0; i < lines.length; i += 1) {
1350
+ const lineNum = i + 1;
1351
+ const raw = lines[i];
1352
+ const start = skipWhitespace(raw, 0);
843
1353
 
844
- if (/^("""|''').*\1\s*$/.test(first)) return startIdx + 1;
1354
+ // ── block + line comments ────────────────────────────────────
1355
+ if (inBlockComment) {
1356
+ if (withComments) pendingComments.push({ line: lineNum, text: raw, kind: 'comment' });
1357
+ if (raw.includes('*/')) inBlockComment = false;
1358
+ continue;
1359
+ }
1360
+ if (raw[start] === '/' && raw[start + 1] === '*') {
1361
+ if (withComments) pendingComments.push({ line: lineNum, text: raw, kind: 'comment' });
1362
+ // The block-comment scan checks anywhere on the line; templates
1363
+ // / preproc lines don't typically contain '*/' so this is safe.
1364
+ if (!raw.slice(start + 2).includes('*/')) inBlockComment = true;
1365
+ continue;
1366
+ }
1367
+ if (raw[start] === '/' && raw[start + 1] === '/') {
1368
+ if (withComments) pendingComments.push({ line: lineNum, text: raw, kind: 'comment' });
1369
+ continue;
1370
+ }
845
1371
 
846
- const tripleMatch = first.match(/^("""|''')/);
847
- if (!tripleMatch) return startIdx;
1372
+ // ── #include ─────────────────────────────────────────────────
1373
+ if (includeImports && raw[start] === '#') {
1374
+ const afterHash = skipWhitespace(raw, start + 1);
1375
+ if (startsWithKeyword(raw, 'include', afterHash)) {
1376
+ entries.push({ line: lineNum, text: raw, kind: 'import' });
1377
+ pendingComments = [];
1378
+ continue;
1379
+ }
1380
+ }
848
1381
 
849
- const quote = tripleMatch[1];
850
- for (let j = startIdx + 1; j < lines.length; j++) {
851
- if (lines[j].includes(quote)) return j + 1;
1382
+ let matched = false;
1383
+
1384
+ // ── #define MACRO ──────────────────────────────────────────
1385
+ if (raw[start] === '#') {
1386
+ const afterHash = skipWhitespace(raw, start + 1);
1387
+ if (startsWithKeyword(raw, 'define', afterHash)) {
1388
+ const afterKw = skipWhitespace(raw, afterHash + 'define'.length);
1389
+ if (readIdent(raw, afterKw)) matched = true;
1390
+ }
1391
+ }
1392
+
1393
+ // ── namespace / class / struct / union / enum (incl. `enum class`) ──
1394
+ // Tip: also handle a leading `template <…>` by skipping over it.
1395
+ let probeIdx = start;
1396
+ if (startsWithKeyword(raw, 'template', probeIdx)) {
1397
+ // skip "template" + optional whitespace + `<…>` if present
1398
+ let j = skipWhitespace(raw, probeIdx + 'template'.length);
1399
+ if (raw[j] === '<') {
1400
+ let depth = 1;
1401
+ j += 1;
1402
+ while (j < raw.length && depth > 0) {
1403
+ if (raw[j] === '<') depth += 1;
1404
+ else if (raw[j] === '>') depth -= 1;
1405
+ j += 1;
1406
+ }
1407
+ probeIdx = skipWhitespace(raw, j);
1408
+ }
1409
+ }
1410
+ const typeHit = consumeAnyKeyword(raw, ['class', 'struct', 'union', 'enum', 'namespace'], probeIdx);
1411
+ if (typeHit) {
1412
+ let after = skipWhitespace(raw, typeHit.nextIdx);
1413
+ // `enum class Color` — accept either form
1414
+ if (typeHit.keyword === 'enum' && startsWithKeyword(raw, 'class', after)) {
1415
+ after = skipWhitespace(raw, after + 'class'.length);
1416
+ }
1417
+ if (readIdent(raw, after)) matched = true;
1418
+ }
1419
+
1420
+ // ── typedef … name; ──────────────────────────────────────────
1421
+ if (!matched && startsWithKeyword(raw, 'typedef', start)) {
1422
+ // very permissive — just require a `;` somewhere after typedef
1423
+ if (raw.indexOf(';', start) !== -1) matched = true;
1424
+ }
1425
+
1426
+ // ── using name = … ───────────────────────────────────────────
1427
+ if (!matched && startsWithKeyword(raw, 'using', start)) {
1428
+ const afterKw = skipWhitespace(raw, start + 'using'.length);
1429
+ const id = readIdent(raw, afterKw);
1430
+ if (id) {
1431
+ const afterId = skipWhitespace(raw, id.nextIdx);
1432
+ if (raw[afterId] === '=' && raw[afterId + 1] !== '=') matched = true;
1433
+ }
1434
+ }
1435
+
1436
+ // ── Function definition: <type-tokens> name(…) ───────────────
1437
+ // Walk past at least one type-ish token before the function name.
1438
+ // The "type-ish" tokens are either keywords from C_TYPE_KEYWORDS
1439
+ // or any plain identifier (could be a user-defined type) — we
1440
+ // require AT LEAST TWO tokens before the `(` so a bare call
1441
+ // `foo(x)` isn't misidentified.
1442
+ if (!matched) {
1443
+ let j = probeIdx;
1444
+ let tokensBeforeParen = 0;
1445
+ let lastWasIdent = false;
1446
+ while (j < raw.length) {
1447
+ // pointer / reference / qualifiers in between tokens
1448
+ if (raw[j] === '*' || raw[j] === '&') { j += 1; continue; }
1449
+ j = skipWhitespace(raw, j);
1450
+ if (j >= raw.length) break;
1451
+ if (raw[j] === '(') break;
1452
+ // accept a templated type like `vector<int>` — skip the `<…>`
1453
+ if (raw[j] === '<' && lastWasIdent) {
1454
+ let depth = 1; j += 1;
1455
+ while (j < raw.length && depth > 0) {
1456
+ if (raw[j] === '<') depth += 1;
1457
+ else if (raw[j] === '>') depth -= 1;
1458
+ j += 1;
1459
+ }
1460
+ continue;
1461
+ }
1462
+ // qualifier keyword?
1463
+ const kw = consumeAnyKeyword(raw, C_TYPE_KEYWORDS, j);
1464
+ if (kw) { j = kw.nextIdx; tokensBeforeParen += 1; lastWasIdent = false; continue; }
1465
+ // plain identifier (possibly `Foo::bar`)
1466
+ const id = readIdent(raw, j);
1467
+ if (!id) break;
1468
+ j = id.nextIdx;
1469
+ // handle `Foo::bar` and similar
1470
+ while (raw[j] === ':' && raw[j + 1] === ':') {
1471
+ j += 2;
1472
+ const more = readIdent(raw, j);
1473
+ if (!more) break;
1474
+ j = more.nextIdx;
1475
+ }
1476
+ tokensBeforeParen += 1;
1477
+ lastWasIdent = true;
1478
+ }
1479
+ if (raw[j] === '(' && tokensBeforeParen >= 2) {
1480
+ // Reject "looks like a call" — `name(args);` ending tail.
1481
+ // For a definition we expect either `) {` or just `,` (multi-line)
1482
+ // or `)` ending the line. A call ends with `);`.
1483
+ const endsWithCallSemi = trimmedEndsWith(raw, ');');
1484
+ if (!endsWithCallSemi) matched = true;
1485
+ }
1486
+ }
1487
+
1488
+ // ── Constructor / destructor: `Foo::Foo(...)` / `Foo::~Foo(...)` ──
1489
+ if (!matched) {
1490
+ const id1 = readIdent(raw, start);
1491
+ if (id1 && raw[id1.nextIdx] === ':' && raw[id1.nextIdx + 1] === ':') {
1492
+ let k = id1.nextIdx + 2;
1493
+ if (raw[k] === '~') k += 1;
1494
+ const id2 = readIdent(raw, k);
1495
+ if (id2) {
1496
+ const afterName = skipWhitespace(raw, id2.nextIdx);
1497
+ if (raw[afterName] === '(') matched = true;
1498
+ }
1499
+ }
1500
+ }
1501
+
1502
+ // publicOnly is a no-op for C — left intact for API parity with
1503
+ // _parseJS. Could later mean "header-public only".
1504
+ void publicOnly;
1505
+
1506
+ if (matched) {
1507
+ if (withComments && pendingComments.length > 0) {
1508
+ for (const c of pendingComments) entries.push(c);
1509
+ }
1510
+ entries.push({ line: lineNum, text: raw, kind: 'signature' });
1511
+ pendingComments = [];
1512
+ } else {
1513
+ pendingComments = [];
1514
+ }
852
1515
  }
853
- return lines.length;
1516
+
1517
+ return entries;
854
1518
  }
855
1519
  }
856
1520