@holoscript/core 7.0.0 → 8.0.0

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 (345) hide show
  1. package/README.md +2 -2
  2. package/bin/holoscript.cjs +3 -0
  3. package/dist/GLTFPipeline-276GE64O.js +16 -0
  4. package/dist/GLTFPipeline-M7WSSJED.cjs +37 -0
  5. package/dist/HoloScriptPlusParser-7FBIFUFC.js +693 -0
  6. package/dist/HoloScriptPlusParser-A2W7OCN2.cjs +698 -0
  7. package/dist/HoloScriptPlusParser-F2Z56FJR.js +10 -0
  8. package/dist/HoloScriptPlusParser-WKHRIH6T.cjs +27 -0
  9. package/dist/HoloScriptRuntime-3URVTKPJ.js +10 -0
  10. package/dist/HoloScriptRuntime-SXEAEU2N.cjs +19 -0
  11. package/dist/USDZExporter-3FWJ25JI.cjs +1037 -0
  12. package/dist/USDZExporter-D2HQLQYK.js +1035 -0
  13. package/dist/agents/index.cjs +19 -0
  14. package/dist/agents/index.d.ts +100 -0
  15. package/dist/agents/index.js +17 -0
  16. package/dist/chunk-23J755AR.js +1046 -0
  17. package/dist/chunk-253GBQZY.cjs +627 -0
  18. package/dist/chunk-25IQCHTO.cjs +781 -0
  19. package/dist/chunk-2BSMSUCE.js +1941 -0
  20. package/dist/chunk-2M2DPHKB.js +762 -0
  21. package/dist/chunk-2YSNA2F2.cjs +1274 -0
  22. package/dist/chunk-3AO425MZ.cjs +886 -0
  23. package/dist/chunk-3FOKASKO.cjs +348 -0
  24. package/dist/chunk-3HYYMEXI.cjs +56578 -0
  25. package/dist/chunk-3NFFOWGG.js +4287 -0
  26. package/dist/chunk-3WZEJHUQ.cjs +116 -0
  27. package/dist/chunk-4C57PR42.js +468 -0
  28. package/dist/chunk-4N4SXXWF.js +769 -0
  29. package/dist/chunk-4PDEPEQW.cjs +41 -0
  30. package/dist/chunk-4R6SBXDB.js +45 -0
  31. package/dist/chunk-4V2E7U7Q.cjs +2015 -0
  32. package/dist/chunk-5FSKKMR7.cjs +2092 -0
  33. package/dist/chunk-5GLCTO44.js +161 -0
  34. package/dist/chunk-5JEU52DW.js +382 -0
  35. package/dist/chunk-5S7RKFGR.cjs +446 -0
  36. package/dist/chunk-5WUNN6ZN.cjs +428 -0
  37. package/dist/chunk-62FBK3B7.js +70 -0
  38. package/dist/chunk-6CTRH7HT.cjs +1985 -0
  39. package/dist/chunk-6DPSFNJB.cjs +847 -0
  40. package/dist/chunk-6EX3I5P4.cjs +130 -0
  41. package/dist/chunk-73FELZVJ.cjs +611 -0
  42. package/dist/chunk-7CUEMLDZ.cjs +6445 -0
  43. package/dist/chunk-7HIASF7S.cjs +814 -0
  44. package/dist/chunk-A6KINLZJ.js +236 -0
  45. package/dist/chunk-AIA52I7T.cjs +543 -0
  46. package/dist/chunk-ANXZFVY2.js +113 -0
  47. package/dist/chunk-AYBXB26F.js +2176 -0
  48. package/dist/chunk-B4TFTDG4.js +449 -0
  49. package/dist/chunk-BE4UJCQT.js +623 -0
  50. package/dist/chunk-BRQJKJGT.cjs +20 -0
  51. package/dist/chunk-C2A5DUMF.cjs +689 -0
  52. package/dist/chunk-C37BHB7N.cjs +636 -0
  53. package/dist/chunk-CBJY23VL.js +126 -0
  54. package/dist/chunk-CIWWXYHZ.cjs +50 -0
  55. package/dist/chunk-CXFDRBQU.cjs +672 -0
  56. package/dist/chunk-D54CNIAJ.cjs +413 -0
  57. package/dist/chunk-DAJXW4KX.js +725 -0
  58. package/dist/chunk-DTGBOSEM.cjs +319 -0
  59. package/dist/chunk-E7JP3BS3.cjs +61 -0
  60. package/dist/chunk-EKBKLK7P.js +1169 -0
  61. package/dist/chunk-EKYL4PE3.cjs +404 -0
  62. package/dist/chunk-EUDQTK7N.cjs +4310 -0
  63. package/dist/chunk-EXKSFGSX.cjs +274 -0
  64. package/dist/chunk-EXUP2BUM.cjs +1173 -0
  65. package/dist/chunk-F43YAA34.js +623 -0
  66. package/dist/chunk-FDSGHPAK.js +130 -0
  67. package/dist/chunk-FEWUHQNM.cjs +144 -0
  68. package/dist/chunk-FGGJQRLZ.js +270 -0
  69. package/dist/chunk-FHP6LXJS.js +415 -0
  70. package/dist/chunk-FJPADH77.cjs +666 -0
  71. package/dist/chunk-FYSPZT4V.cjs +169 -0
  72. package/dist/chunk-GIOYPNTH.js +5575 -0
  73. package/dist/chunk-GJNCFRJU.cjs +125 -0
  74. package/dist/chunk-GMP623FG.cjs +1508 -0
  75. package/dist/chunk-GQHQOPXZ.cjs +5580 -0
  76. package/dist/chunk-GQT4TYKY.cjs +4381 -0
  77. package/dist/chunk-GTU2Z2WW.cjs +262 -0
  78. package/dist/chunk-GYZE55MO.js +2007 -0
  79. package/dist/chunk-GZG4KA4E.js +529 -0
  80. package/dist/chunk-H652NHX5.js +600 -0
  81. package/dist/chunk-HCCQLAA4.cjs +74 -0
  82. package/dist/chunk-HINXWAOD.cjs +1049 -0
  83. package/dist/chunk-HYNTS5CP.js +422 -0
  84. package/dist/chunk-HZSPDCXV.cjs +457 -0
  85. package/dist/chunk-HZTDET3N.js +1399 -0
  86. package/dist/chunk-I6XZ5DZF.cjs +488 -0
  87. package/dist/chunk-ILRBGFVD.cjs +72 -0
  88. package/dist/chunk-IPWSXCCN.js +1183 -0
  89. package/dist/chunk-IUTY5WQ2.cjs +424 -0
  90. package/dist/chunk-IVSZDECV.js +882 -0
  91. package/dist/chunk-IVY74O6C.js +247 -0
  92. package/dist/chunk-IZM5VQZD.js +714 -0
  93. package/dist/chunk-J32ZJZJH.js +554 -0
  94. package/dist/chunk-J6M4FPK5.js +421 -0
  95. package/dist/chunk-JC5YBPSF.cjs +984 -0
  96. package/dist/chunk-JCLBKPMX.js +3813 -0
  97. package/dist/chunk-JD7CIZ33.js +1949 -0
  98. package/dist/chunk-JIYN45TV.cjs +2525 -0
  99. package/dist/chunk-JJBE3TIH.cjs +1189 -0
  100. package/dist/chunk-JX7YL6ZE.js +2252 -0
  101. package/dist/chunk-K4VVR7CN.cjs +2433 -0
  102. package/dist/chunk-KEFNV2WM.cjs +2257 -0
  103. package/dist/chunk-KH4CNH66.cjs +424 -0
  104. package/dist/chunk-KJLB4OPV.js +5731 -0
  105. package/dist/chunk-KKFZ3B6J.cjs +557 -0
  106. package/dist/chunk-KKP7JKN4.cjs +6002 -0
  107. package/dist/chunk-KPJL34Y7.cjs +186 -0
  108. package/dist/chunk-KQCN6AKJ.cjs +3042 -0
  109. package/dist/chunk-KVRSTFNH.cjs +72 -0
  110. package/dist/chunk-LICPB5HZ.cjs +1409 -0
  111. package/dist/chunk-LM2VU56C.cjs +37 -0
  112. package/dist/chunk-M56JSP4A.js +400 -0
  113. package/dist/chunk-MBOOR7X4.js +18 -0
  114. package/dist/chunk-MGE5Z4GS.js +608 -0
  115. package/dist/chunk-MXFUTKCO.js +56 -0
  116. package/dist/chunk-MYY4PMWX.cjs +264 -0
  117. package/dist/chunk-N75IH2HY.js +258 -0
  118. package/dist/chunk-NBMHU6SW.js +669 -0
  119. package/dist/chunk-NG77ATEW.cjs +778 -0
  120. package/dist/chunk-NGKREZ36.js +6384 -0
  121. package/dist/chunk-NHWSN2SD.cjs +718 -0
  122. package/dist/chunk-NV4VMVXU.js +421 -0
  123. package/dist/chunk-NW5G5FBQ.js +215 -0
  124. package/dist/chunk-NXZFOPVD.cjs +5737 -0
  125. package/dist/chunk-OBIYPYYS.cjs +1993 -0
  126. package/dist/chunk-OIQYIIO3.cjs +473 -0
  127. package/dist/chunk-OL46QLBJ.js +61 -0
  128. package/dist/chunk-OMXII44L.js +5386 -0
  129. package/dist/chunk-OR4Q2BGL.cjs +759 -0
  130. package/dist/chunk-OSYNRVOV.cjs +243 -0
  131. package/dist/chunk-PGANYCAG.cjs +220 -0
  132. package/dist/chunk-PHENW4MQ.js +65 -0
  133. package/dist/chunk-PHVRG4I2.js +844 -0
  134. package/dist/chunk-Q56TT7IL.js +483 -0
  135. package/dist/chunk-QPOQ7VPI.js +1491 -0
  136. package/dist/chunk-QPSKHBJP.js +5963 -0
  137. package/dist/chunk-QXH7QDSZ.js +1989 -0
  138. package/dist/chunk-R75BSDH7.cjs +50 -0
  139. package/dist/chunk-RARB3MBR.js +207 -0
  140. package/dist/chunk-RVBHAXFG.js +56160 -0
  141. package/dist/chunk-S3MDHNKB.cjs +490 -0
  142. package/dist/chunk-S4W6Z2MN.js +2426 -0
  143. package/dist/chunk-S6YWHCKV.cjs +410 -0
  144. package/dist/chunk-SIEXCILW.js +229 -0
  145. package/dist/chunk-SJBGLS25.cjs +2196 -0
  146. package/dist/chunk-SLU6UPJI.cjs +410 -0
  147. package/dist/chunk-SMIWS6DE.cjs +212 -0
  148. package/dist/chunk-T2QCTZMO.js +811 -0
  149. package/dist/chunk-T5J7ZKP3.cjs +4885 -0
  150. package/dist/chunk-TDCNJHWO.js +341 -0
  151. package/dist/chunk-TG7O4WBC.js +406 -0
  152. package/dist/chunk-THCK6ECW.js +2085 -0
  153. package/dist/chunk-TJHVSBP2.js +439 -0
  154. package/dist/chunk-TVHSPJ4N.cjs +606 -0
  155. package/dist/chunk-U44IKGG7.cjs +5390 -0
  156. package/dist/chunk-UJXISJBN.js +487 -0
  157. package/dist/chunk-UM6C3CGK.js +4375 -0
  158. package/dist/chunk-UMABK6SI.js +686 -0
  159. package/dist/chunk-UOIGFQXC.cjs +9750 -0
  160. package/dist/chunk-URG2SJLK.js +2521 -0
  161. package/dist/chunk-V6MKC2FZ.js +979 -0
  162. package/dist/chunk-VECQYRXL.js +474 -0
  163. package/dist/chunk-VJ3L7CHT.cjs +169 -0
  164. package/dist/chunk-VMLKSV26.js +1216 -0
  165. package/dist/chunk-VVKVQZI6.js +55 -0
  166. package/dist/chunk-W6RW64BB.cjs +1219 -0
  167. package/dist/chunk-W7VDOASB.cjs +639 -0
  168. package/dist/chunk-WDT3JTGM.cjs +483 -0
  169. package/dist/chunk-WJIHFLMJ.js +404 -0
  170. package/dist/chunk-WKX5AMOY.js +309 -0
  171. package/dist/chunk-WNNE3PO3.js +34 -0
  172. package/dist/chunk-WRKUDAZJ.js +3038 -0
  173. package/dist/chunk-WRLUBRKS.cjs +1943 -0
  174. package/dist/chunk-WRNEH5MO.js +3169 -0
  175. package/dist/chunk-WRWEX5ZF.js +658 -0
  176. package/dist/chunk-X3GJPRVK.cjs +3246 -0
  177. package/dist/chunk-XHIV6326.cjs +793 -0
  178. package/dist/chunk-XIVIE43A.cjs +729 -0
  179. package/dist/chunk-XJAN7CZG.cjs +432 -0
  180. package/dist/chunk-XKTPFXGA.js +164 -0
  181. package/dist/chunk-XL6INWKT.js +121 -0
  182. package/dist/chunk-XSFNHP2E.js +632 -0
  183. package/dist/chunk-XT6JY5W5.js +9684 -0
  184. package/dist/chunk-XUILI4KB.cjs +430 -0
  185. package/dist/chunk-XUUVDHIF.cjs +3962 -0
  186. package/dist/chunk-YF2I3MV3.js +46 -0
  187. package/dist/chunk-YIMN575O.js +4847 -0
  188. package/dist/chunk-YIVFJNYV.js +176 -0
  189. package/dist/chunk-YKGPCZEE.cjs +237 -0
  190. package/dist/chunk-YN6V7R3L.cjs +327 -0
  191. package/dist/chunk-YQELFNJV.js +39 -0
  192. package/dist/chunk-YYXH45E2.js +426 -0
  193. package/dist/chunk-ZBQXLH2L.js +756 -0
  194. package/dist/chunk-ZDSYWBIE.cjs +69 -0
  195. package/dist/chunk-ZU7NIRT6.js +325 -0
  196. package/dist/chunk-ZZ7RO2UQ.js +1243 -0
  197. package/dist/chunk-ZZEI7MV4.js +778 -0
  198. package/dist/cli/holoscript-runner.cjs +2255 -0
  199. package/dist/cli/holoscript-runner.js +2230 -0
  200. package/dist/codebase/index.cjs +336 -0
  201. package/dist/codebase/index.js +331 -0
  202. package/dist/compiler/agent-inference.cjs +31 -0
  203. package/dist/compiler/agent-inference.js +8 -0
  204. package/dist/compiler/android-xr.cjs +24 -0
  205. package/dist/compiler/android-xr.js +14 -0
  206. package/dist/compiler/android.cjs +24 -0
  207. package/dist/compiler/android.js +14 -0
  208. package/dist/compiler/ar.cjs +23 -0
  209. package/dist/compiler/ar.js +11 -0
  210. package/dist/compiler/babylon.cjs +21 -0
  211. package/dist/compiler/babylon.js +15 -0
  212. package/dist/compiler/business-quest.cjs +43 -0
  213. package/dist/compiler/business-quest.js +4 -0
  214. package/dist/compiler/coco.cjs +27 -0
  215. package/dist/compiler/coco.js +4 -0
  216. package/dist/compiler/context.cjs +25 -0
  217. package/dist/compiler/context.d.ts +28 -0
  218. package/dist/compiler/context.js +8 -0
  219. package/dist/compiler/domain-block-utils.cjs +605 -0
  220. package/dist/compiler/domain-block-utils.js +11 -0
  221. package/dist/compiler/dtdl.cjs +27 -0
  222. package/dist/compiler/dtdl.js +11 -0
  223. package/dist/compiler/gltf-pipeline.cjs +39 -0
  224. package/dist/compiler/gltf-pipeline.js +4 -0
  225. package/dist/compiler/godot.cjs +18 -0
  226. package/dist/compiler/godot.js +12 -0
  227. package/dist/compiler/incremental.cjs +34 -0
  228. package/dist/compiler/incremental.js +9 -0
  229. package/dist/compiler/index.cjs +5860 -0
  230. package/dist/compiler/index.d.ts +322 -21
  231. package/dist/compiler/index.js +5525 -0
  232. package/dist/compiler/ios.cjs +23 -0
  233. package/dist/compiler/ios.js +13 -0
  234. package/dist/compiler/llm-provider-capabilities.cjs +25 -0
  235. package/dist/compiler/llm-provider-capabilities.d.ts +43 -0
  236. package/dist/compiler/llm-provider-capabilities.js +8 -0
  237. package/dist/compiler/multi-layer.cjs +24 -0
  238. package/dist/compiler/multi-layer.js +15 -0
  239. package/dist/compiler/nodetoy.cjs +23 -0
  240. package/dist/compiler/nodetoy.js +4 -0
  241. package/dist/compiler/openxr.cjs +19 -0
  242. package/dist/compiler/openxr.js +13 -0
  243. package/dist/compiler/playcanvas.cjs +19 -0
  244. package/dist/compiler/playcanvas.js +13 -0
  245. package/dist/compiler/r3f.cjs +38 -0
  246. package/dist/compiler/r3f.d.ts +22 -0
  247. package/dist/compiler/r3f.js +16 -0
  248. package/dist/compiler/remotion.cjs +23 -0
  249. package/dist/compiler/remotion.js +4 -0
  250. package/dist/compiler/reproducibility.cjs +39 -0
  251. package/dist/compiler/reproducibility.js +4 -0
  252. package/dist/compiler/sdf.cjs +24 -0
  253. package/dist/compiler/sdf.js +12 -0
  254. package/dist/compiler/semantic-scene.cjs +31 -0
  255. package/dist/compiler/semantic-scene.js +4 -0
  256. package/dist/compiler/state.cjs +21 -0
  257. package/dist/compiler/state.js +11 -0
  258. package/dist/compiler/trait-composition.cjs +30 -0
  259. package/dist/compiler/trait-composition.js +9 -0
  260. package/dist/compiler/unity.cjs +19 -0
  261. package/dist/compiler/unity.js +13 -0
  262. package/dist/compiler/unreal.cjs +23 -0
  263. package/dist/compiler/unreal.js +13 -0
  264. package/dist/compiler/urdf.cjs +52 -0
  265. package/dist/compiler/urdf.js +12 -0
  266. package/dist/compiler/usd-physics.cjs +26 -0
  267. package/dist/compiler/usd-physics.js +9 -0
  268. package/dist/compiler/visionos.cjs +19 -0
  269. package/dist/compiler/visionos.js +13 -0
  270. package/dist/compiler/vrchat.cjs +22 -0
  271. package/dist/compiler/vrchat.js +12 -0
  272. package/dist/compiler/vrr.cjs +24 -0
  273. package/dist/compiler/vrr.js +12 -0
  274. package/dist/compiler/wasm.cjs +36 -0
  275. package/dist/compiler/wasm.js +12 -0
  276. package/dist/compiler/webgpu.cjs +18 -0
  277. package/dist/compiler/webgpu.js +12 -0
  278. package/dist/coordinators/index.cjs +1266 -0
  279. package/dist/coordinators/index.d.ts +72 -1
  280. package/dist/coordinators/index.js +1259 -0
  281. package/dist/debugger.cjs +24 -0
  282. package/dist/debugger.js +11 -0
  283. package/dist/entries/interop.cjs +64 -0
  284. package/dist/entries/interop.js +7 -0
  285. package/dist/entries/scripting.cjs +55 -0
  286. package/dist/entries/scripting.js +10 -0
  287. package/dist/hololand/index.cjs +146 -0
  288. package/dist/hololand/index.d.ts +70 -0
  289. package/dist/hololand/index.js +5 -0
  290. package/dist/index.cjs +43233 -0
  291. package/dist/index.d.ts +976 -21
  292. package/dist/index.js +39995 -0
  293. package/dist/math/tropical-spmv.cjs +45 -0
  294. package/dist/math/tropical-spmv.js +4 -0
  295. package/dist/math/vec3.cjs +57 -0
  296. package/dist/math/vec3.js +4 -0
  297. package/dist/ml-dsa-FSKBTE3W.cjs +1265 -0
  298. package/dist/ml-dsa-Z7JDKW4L.js +1265 -0
  299. package/dist/paper-0c-spike/index.cjs +150 -0
  300. package/dist/paper-0c-spike/index.js +141 -0
  301. package/dist/parser.cjs +61 -0
  302. package/dist/parser.d.ts +11 -0
  303. package/dist/parser.js +12 -0
  304. package/dist/playwright-3AT3AKTV.cjs +98673 -0
  305. package/dist/playwright-VZPDVUEQ.js +98660 -0
  306. package/dist/reconstruction/index.cjs +153 -0
  307. package/dist/reconstruction/index.d.ts +29 -2
  308. package/dist/reconstruction/index.js +8 -0
  309. package/dist/runtime.cjs +316 -0
  310. package/dist/runtime.d.ts +61 -0
  311. package/dist/runtime.js +31 -0
  312. package/dist/self-improvement/index.cjs +563 -0
  313. package/dist/self-improvement/index.js +545 -0
  314. package/dist/storage/index.cjs +38 -0
  315. package/dist/storage/index.js +5 -0
  316. package/dist/testing.cjs +25 -0
  317. package/dist/testing.d.ts +70 -0
  318. package/dist/testing.js +4 -0
  319. package/dist/traitDocs/traitDocs.cjs +33 -0
  320. package/dist/traitDocs/traitDocs.js +7 -0
  321. package/dist/traits/botanical-lotus.cjs +41 -0
  322. package/dist/traits/botanical-lotus.d.ts +172 -0
  323. package/dist/traits/botanical-lotus.js +4 -0
  324. package/dist/traits/engines/index.cjs +520 -0
  325. package/dist/traits/engines/index.js +380 -0
  326. package/dist/traits/index.cjs +24409 -0
  327. package/dist/traits/index.d.ts +171 -35
  328. package/dist/traits/index.js +21634 -0
  329. package/dist/traits/simulation-solver-factory.cjs +13 -0
  330. package/dist/traits/simulation-solver-factory.d.ts +23 -0
  331. package/dist/traits/simulation-solver-factory.js +4 -0
  332. package/dist/traits/webcam-gaze.cjs +35 -0
  333. package/dist/traits/webcam-gaze.d.ts +17 -0
  334. package/dist/traits/webcam-gaze.js +4 -0
  335. package/dist/type-checker.cjs +19 -0
  336. package/dist/type-checker.js +6 -0
  337. package/dist/world/index.cjs +947 -0
  338. package/dist/world/index.d.ts +147 -0
  339. package/dist/world/index.js +939 -0
  340. package/dist/world-model/index.cjs +1446 -0
  341. package/dist/world-model/index.d.ts +119 -0
  342. package/dist/world-model/index.js +1414 -0
  343. package/dist/wot/index.cjs +29 -0
  344. package/dist/wot/index.js +4 -0
  345. package/package.json +93 -49
@@ -0,0 +1,336 @@
1
+ 'use strict';
2
+
3
+ require('../chunk-HCCQLAA4.cjs');
4
+ var crypto = require('crypto');
5
+
6
+ var DEFAULT_CONFIG = {
7
+ semanticThreshold: 0.92,
8
+ numHashFunctions: 128,
9
+ numBands: 16,
10
+ shingleSize: 3,
11
+ qualityWeighted: true
12
+ };
13
+ var DedupFilter = class {
14
+ constructor(config) {
15
+ this.config = { ...DEFAULT_CONFIG, ...config };
16
+ }
17
+ /**
18
+ * Run full dedup pipeline on a set of items
19
+ */
20
+ dedup(items) {
21
+ const startTime = Date.now();
22
+ const removals = [];
23
+ const { unique: exactUnique, removals: exactRemovals } = this.exactDedup(items);
24
+ removals.push(...exactRemovals);
25
+ const { unique: semanticUnique, removals: semanticRemovals } = this.semanticDedup(exactUnique);
26
+ removals.push(...semanticRemovals);
27
+ const report = {
28
+ totalInput: items.length,
29
+ exactDuplicates: exactRemovals.length,
30
+ semanticDuplicates: semanticRemovals.length,
31
+ retained: semanticUnique.length,
32
+ removedDetails: removals,
33
+ processingTimeMs: Date.now() - startTime
34
+ };
35
+ return { retained: semanticUnique, report };
36
+ }
37
+ /**
38
+ * Layer 1: Exact dedup via SHA-256 hash
39
+ */
40
+ exactDedup(items) {
41
+ const hashMap = /* @__PURE__ */ new Map();
42
+ const removals = [];
43
+ for (const item of items) {
44
+ const hash = this.sha256(item.content);
45
+ const existing = hashMap.get(hash);
46
+ if (existing) {
47
+ if (this.config.qualityWeighted && (item.quality ?? 0) > (existing.quality ?? 0)) {
48
+ removals.push({ removedId: existing.id, keptId: item.id, reason: "exact" });
49
+ hashMap.set(hash, item);
50
+ } else {
51
+ removals.push({ removedId: item.id, keptId: existing.id, reason: "exact" });
52
+ }
53
+ } else {
54
+ hashMap.set(hash, item);
55
+ }
56
+ }
57
+ return { unique: Array.from(hashMap.values()), removals };
58
+ }
59
+ /**
60
+ * Layer 2: Semantic near-dedup via MinHash LSH (Jaccard similarity)
61
+ */
62
+ semanticDedup(items) {
63
+ if (items.length <= 1) return { unique: items, removals: [] };
64
+ const removals = [];
65
+ const removed = /* @__PURE__ */ new Set();
66
+ const signatures = items.map((item) => ({
67
+ item,
68
+ shingles: this.shingle(item.content),
69
+ minhash: this.minhash(this.shingle(item.content))
70
+ }));
71
+ const bandSize = Math.floor(this.config.numHashFunctions / this.config.numBands);
72
+ const candidatePairs = /* @__PURE__ */ new Set();
73
+ for (let band = 0; band < this.config.numBands; band++) {
74
+ const buckets = /* @__PURE__ */ new Map();
75
+ const start = band * bandSize;
76
+ const end = start + bandSize;
77
+ for (let i = 0; i < signatures.length; i++) {
78
+ const bandHash = signatures[i].minhash.slice(start, end).join(",");
79
+ const bucket = buckets.get(bandHash) ?? [];
80
+ bucket.push(i);
81
+ buckets.set(bandHash, bucket);
82
+ }
83
+ for (const bucket of buckets.values()) {
84
+ for (let i = 0; i < bucket.length; i++) {
85
+ for (let j = i + 1; j < bucket.length; j++) {
86
+ const key = `${Math.min(bucket[i], bucket[j])},${Math.max(bucket[i], bucket[j])}`;
87
+ candidatePairs.add(key);
88
+ }
89
+ }
90
+ }
91
+ }
92
+ for (const pair of candidatePairs) {
93
+ const [iStr, jStr] = pair.split(",");
94
+ const i = parseInt(iStr, 10);
95
+ const j = parseInt(jStr, 10);
96
+ if (removed.has(signatures[i].item.id) || removed.has(signatures[j].item.id)) continue;
97
+ const similarity = this.jaccardSimilarity(signatures[i].shingles, signatures[j].shingles);
98
+ if (similarity >= this.config.semanticThreshold) {
99
+ const itemA = signatures[i].item;
100
+ const itemB = signatures[j].item;
101
+ if (this.config.qualityWeighted && (itemA.quality ?? 0) >= (itemB.quality ?? 0)) {
102
+ removed.add(itemB.id);
103
+ removals.push({ removedId: itemB.id, keptId: itemA.id, reason: "semantic", similarity });
104
+ } else {
105
+ removed.add(itemA.id);
106
+ removals.push({ removedId: itemA.id, keptId: itemB.id, reason: "semantic", similarity });
107
+ }
108
+ }
109
+ }
110
+ const unique = items.filter((item) => !removed.has(item.id));
111
+ return { unique, removals };
112
+ }
113
+ // ---- Private helpers ----
114
+ sha256(content) {
115
+ return crypto.createHash("sha256").update(content).digest("hex");
116
+ }
117
+ shingle(text) {
118
+ const shingles = /* @__PURE__ */ new Set();
119
+ const words = text.toLowerCase().split(/\s+/);
120
+ for (let i = 0; i <= words.length - this.config.shingleSize; i++) {
121
+ shingles.add(words.slice(i, i + this.config.shingleSize).join(" "));
122
+ }
123
+ return shingles;
124
+ }
125
+ minhash(shingles) {
126
+ const signature = new Array(this.config.numHashFunctions).fill(Infinity);
127
+ for (const shingle of shingles) {
128
+ for (let i = 0; i < this.config.numHashFunctions; i++) {
129
+ const hash = this.hashWithSeed(shingle, i);
130
+ if (hash < signature[i]) {
131
+ signature[i] = hash;
132
+ }
133
+ }
134
+ }
135
+ return signature;
136
+ }
137
+ hashWithSeed(value, seed) {
138
+ let hash = 2166136261 ^ seed;
139
+ for (let i = 0; i < value.length; i++) {
140
+ hash ^= value.charCodeAt(i);
141
+ hash = Math.imul(hash, 16777619);
142
+ }
143
+ return hash >>> 0;
144
+ }
145
+ jaccardSimilarity(a, b) {
146
+ let intersection = 0;
147
+ for (const item of a) {
148
+ if (b.has(item)) intersection++;
149
+ }
150
+ const union = a.size + b.size - intersection;
151
+ return union === 0 ? 0 : intersection / union;
152
+ }
153
+ };
154
+ function createDedupFilter(config) {
155
+ return new DedupFilter(config);
156
+ }
157
+
158
+ // src/codebase/GodFileDetector.ts
159
+ var DEFAULT_THRESHOLDS = {
160
+ loc_warning: 500,
161
+ loc_god: 1e3,
162
+ functions_warning: 20,
163
+ functions_god: 40,
164
+ complexity_god: 50,
165
+ imports_god: 30
166
+ };
167
+ var GodFileDetector = class {
168
+ constructor(thresholds) {
169
+ this.thresholds = { ...DEFAULT_THRESHOLDS, ...thresholds };
170
+ }
171
+ /**
172
+ * Analyze a file's content and produce metrics + classification
173
+ */
174
+ analyze(filePath, content) {
175
+ const metrics = this.computeMetrics(filePath, content);
176
+ const reasons = [];
177
+ let classification = "normal";
178
+ if (metrics.loc >= this.thresholds.loc_god) {
179
+ reasons.push(`LOC ${metrics.loc} >= ${this.thresholds.loc_god} (god file threshold)`);
180
+ classification = "god_file";
181
+ } else if (metrics.loc >= this.thresholds.loc_warning) {
182
+ reasons.push(`LOC ${metrics.loc} >= ${this.thresholds.loc_warning} (warning threshold)`);
183
+ classification = "warning";
184
+ }
185
+ if (metrics.functionCount >= this.thresholds.functions_god) {
186
+ reasons.push(
187
+ `Functions ${metrics.functionCount} >= ${this.thresholds.functions_god} (god file threshold)`
188
+ );
189
+ classification = "god_file";
190
+ } else if (metrics.functionCount >= this.thresholds.functions_warning) {
191
+ reasons.push(
192
+ `Functions ${metrics.functionCount} >= ${this.thresholds.functions_warning} (warning threshold)`
193
+ );
194
+ if (classification !== "god_file") classification = "warning";
195
+ }
196
+ if (metrics.cyclomaticComplexity >= this.thresholds.complexity_god) {
197
+ reasons.push(
198
+ `Cyclomatic complexity ${metrics.cyclomaticComplexity} >= ${this.thresholds.complexity_god}`
199
+ );
200
+ classification = "god_file";
201
+ }
202
+ if (metrics.importCount >= this.thresholds.imports_god) {
203
+ reasons.push(`Imports ${metrics.importCount} >= ${this.thresholds.imports_god}`);
204
+ if (classification !== "god_file") classification = "warning";
205
+ }
206
+ const report = {
207
+ filePath,
208
+ classification,
209
+ metrics,
210
+ reasons
211
+ };
212
+ if (classification === "god_file") {
213
+ report.splitPlan = this.suggestSplit(filePath, content, metrics);
214
+ }
215
+ return report;
216
+ }
217
+ /**
218
+ * Compute metrics for a file
219
+ */
220
+ computeMetrics(filePath, content) {
221
+ const lines = content.split("\n");
222
+ const loc = lines.filter((l) => l.trim().length > 0 && !l.trim().startsWith("//")).length;
223
+ const functionPattern = /\b(function\s+\w+|(?:async\s+)?(?:get|set)?\s*\w+\s*\(.*\)\s*(?::\s*\w[\w<>,\s|]*\s*)?{|\w+\s*=\s*(?:async\s+)?(?:\(.*\)|[\w]+)\s*=>)/g;
224
+ const functionCount = (content.match(functionPattern) || []).length;
225
+ const importPattern = /\bimport\s+(?:type\s+)?(?:{[^}]*}|\*\s+as\s+\w+|\w+)\s+from/g;
226
+ const importCount = (content.match(importPattern) || []).length;
227
+ const exportPattern = /\bexport\s+(?:default\s+)?(?:class|function|const|let|var|interface|type|enum)/g;
228
+ const exportCount = (content.match(exportPattern) || []).length;
229
+ const classPattern = /\bclass\s+\w+/g;
230
+ const classCount = (content.match(classPattern) || []).length;
231
+ const complexityPatterns = /\b(if|else if|for|while|do|switch|case|catch|\?\?|&&|\|\||ternary)\b|\?(?!=)/g;
232
+ const cyclomaticComplexity = (content.match(complexityPatterns) || []).length + 1;
233
+ return {
234
+ filePath,
235
+ loc,
236
+ functionCount,
237
+ importCount,
238
+ exportCount,
239
+ classCount,
240
+ cyclomaticComplexity
241
+ };
242
+ }
243
+ /**
244
+ * Suggest a virtual split plan for a god file.
245
+ * Only splits at top-level declaration boundaries (G.GAP.05 prevention).
246
+ */
247
+ suggestSplit(filePath, content, metrics) {
248
+ const lines = content.split("\n");
249
+ const segments = [];
250
+ const baseName = filePath.replace(/\.[^.]+$/, "").split(/[/\\]/).pop() || "module";
251
+ let currentStart = 0;
252
+ let currentType = "module";
253
+ let currentName = "";
254
+ let symbolCount = 0;
255
+ let braceDepth = 0;
256
+ for (let i = 0; i < lines.length; i++) {
257
+ const line = lines[i];
258
+ const trimmed = line.trim();
259
+ for (const ch of line) {
260
+ if (ch === "{") braceDepth++;
261
+ if (ch === "}") braceDepth--;
262
+ }
263
+ const classMatch = trimmed.match(/^(?:export\s+)?(?:abstract\s+)?class\s+(\w+)/);
264
+ if (classMatch && braceDepth <= 1) {
265
+ if (i > currentStart + 5) {
266
+ segments.push({
267
+ suggestedName: currentName || `${baseName}-segment-${segments.length}`,
268
+ startLine: currentStart + 1,
269
+ endLine: i,
270
+ type: currentType,
271
+ symbolCount,
272
+ description: `Lines ${currentStart + 1}-${i}`
273
+ });
274
+ }
275
+ currentStart = i;
276
+ currentType = "class";
277
+ currentName = classMatch[1];
278
+ symbolCount = 0;
279
+ }
280
+ if (trimmed.match(/^(?:export\s+)?(?:const|let|var|function|class|interface|type|enum)\s/)) {
281
+ symbolCount++;
282
+ }
283
+ }
284
+ if (currentStart < lines.length - 1) {
285
+ segments.push({
286
+ suggestedName: currentName || `${baseName}-segment-${segments.length}`,
287
+ startLine: currentStart + 1,
288
+ endLine: lines.length,
289
+ type: currentType,
290
+ symbolCount,
291
+ description: `Lines ${currentStart + 1}-${lines.length}`
292
+ });
293
+ }
294
+ if (segments.length <= 1) {
295
+ return this.splitByFunctionGroups(filePath, content, metrics, baseName);
296
+ }
297
+ return {
298
+ originalPath: filePath,
299
+ segments,
300
+ totalSegments: segments.length
301
+ };
302
+ }
303
+ splitByFunctionGroups(filePath, content, _metrics, baseName) {
304
+ const lines = content.split("\n");
305
+ const segmentSize = Math.ceil(lines.length / 3);
306
+ const segments = [];
307
+ for (let i = 0; i < 3; i++) {
308
+ const start = i * segmentSize;
309
+ const end = Math.min((i + 1) * segmentSize, lines.length);
310
+ if (start >= lines.length) break;
311
+ segments.push({
312
+ suggestedName: `${baseName}-part-${i + 1}`,
313
+ startLine: start + 1,
314
+ endLine: end,
315
+ type: "function-group",
316
+ symbolCount: 0,
317
+ description: `Lines ${start + 1}-${end}`
318
+ });
319
+ }
320
+ return {
321
+ originalPath: filePath,
322
+ segments,
323
+ totalSegments: segments.length
324
+ };
325
+ }
326
+ };
327
+ function createGodFileDetector(thresholds) {
328
+ return new GodFileDetector(thresholds);
329
+ }
330
+
331
+ exports.DedupFilter = DedupFilter;
332
+ exports.GodFileDetector = GodFileDetector;
333
+ exports.createDedupFilter = createDedupFilter;
334
+ exports.createGodFileDetector = createGodFileDetector;
335
+ //# sourceMappingURL=index.cjs.map
336
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1,331 @@
1
+ import '../chunk-OL46QLBJ.js';
2
+ import { createHash } from 'crypto';
3
+
4
+ var DEFAULT_CONFIG = {
5
+ semanticThreshold: 0.92,
6
+ numHashFunctions: 128,
7
+ numBands: 16,
8
+ shingleSize: 3,
9
+ qualityWeighted: true
10
+ };
11
+ var DedupFilter = class {
12
+ constructor(config) {
13
+ this.config = { ...DEFAULT_CONFIG, ...config };
14
+ }
15
+ /**
16
+ * Run full dedup pipeline on a set of items
17
+ */
18
+ dedup(items) {
19
+ const startTime = Date.now();
20
+ const removals = [];
21
+ const { unique: exactUnique, removals: exactRemovals } = this.exactDedup(items);
22
+ removals.push(...exactRemovals);
23
+ const { unique: semanticUnique, removals: semanticRemovals } = this.semanticDedup(exactUnique);
24
+ removals.push(...semanticRemovals);
25
+ const report = {
26
+ totalInput: items.length,
27
+ exactDuplicates: exactRemovals.length,
28
+ semanticDuplicates: semanticRemovals.length,
29
+ retained: semanticUnique.length,
30
+ removedDetails: removals,
31
+ processingTimeMs: Date.now() - startTime
32
+ };
33
+ return { retained: semanticUnique, report };
34
+ }
35
+ /**
36
+ * Layer 1: Exact dedup via SHA-256 hash
37
+ */
38
+ exactDedup(items) {
39
+ const hashMap = /* @__PURE__ */ new Map();
40
+ const removals = [];
41
+ for (const item of items) {
42
+ const hash = this.sha256(item.content);
43
+ const existing = hashMap.get(hash);
44
+ if (existing) {
45
+ if (this.config.qualityWeighted && (item.quality ?? 0) > (existing.quality ?? 0)) {
46
+ removals.push({ removedId: existing.id, keptId: item.id, reason: "exact" });
47
+ hashMap.set(hash, item);
48
+ } else {
49
+ removals.push({ removedId: item.id, keptId: existing.id, reason: "exact" });
50
+ }
51
+ } else {
52
+ hashMap.set(hash, item);
53
+ }
54
+ }
55
+ return { unique: Array.from(hashMap.values()), removals };
56
+ }
57
+ /**
58
+ * Layer 2: Semantic near-dedup via MinHash LSH (Jaccard similarity)
59
+ */
60
+ semanticDedup(items) {
61
+ if (items.length <= 1) return { unique: items, removals: [] };
62
+ const removals = [];
63
+ const removed = /* @__PURE__ */ new Set();
64
+ const signatures = items.map((item) => ({
65
+ item,
66
+ shingles: this.shingle(item.content),
67
+ minhash: this.minhash(this.shingle(item.content))
68
+ }));
69
+ const bandSize = Math.floor(this.config.numHashFunctions / this.config.numBands);
70
+ const candidatePairs = /* @__PURE__ */ new Set();
71
+ for (let band = 0; band < this.config.numBands; band++) {
72
+ const buckets = /* @__PURE__ */ new Map();
73
+ const start = band * bandSize;
74
+ const end = start + bandSize;
75
+ for (let i = 0; i < signatures.length; i++) {
76
+ const bandHash = signatures[i].minhash.slice(start, end).join(",");
77
+ const bucket = buckets.get(bandHash) ?? [];
78
+ bucket.push(i);
79
+ buckets.set(bandHash, bucket);
80
+ }
81
+ for (const bucket of buckets.values()) {
82
+ for (let i = 0; i < bucket.length; i++) {
83
+ for (let j = i + 1; j < bucket.length; j++) {
84
+ const key = `${Math.min(bucket[i], bucket[j])},${Math.max(bucket[i], bucket[j])}`;
85
+ candidatePairs.add(key);
86
+ }
87
+ }
88
+ }
89
+ }
90
+ for (const pair of candidatePairs) {
91
+ const [iStr, jStr] = pair.split(",");
92
+ const i = parseInt(iStr, 10);
93
+ const j = parseInt(jStr, 10);
94
+ if (removed.has(signatures[i].item.id) || removed.has(signatures[j].item.id)) continue;
95
+ const similarity = this.jaccardSimilarity(signatures[i].shingles, signatures[j].shingles);
96
+ if (similarity >= this.config.semanticThreshold) {
97
+ const itemA = signatures[i].item;
98
+ const itemB = signatures[j].item;
99
+ if (this.config.qualityWeighted && (itemA.quality ?? 0) >= (itemB.quality ?? 0)) {
100
+ removed.add(itemB.id);
101
+ removals.push({ removedId: itemB.id, keptId: itemA.id, reason: "semantic", similarity });
102
+ } else {
103
+ removed.add(itemA.id);
104
+ removals.push({ removedId: itemA.id, keptId: itemB.id, reason: "semantic", similarity });
105
+ }
106
+ }
107
+ }
108
+ const unique = items.filter((item) => !removed.has(item.id));
109
+ return { unique, removals };
110
+ }
111
+ // ---- Private helpers ----
112
+ sha256(content) {
113
+ return createHash("sha256").update(content).digest("hex");
114
+ }
115
+ shingle(text) {
116
+ const shingles = /* @__PURE__ */ new Set();
117
+ const words = text.toLowerCase().split(/\s+/);
118
+ for (let i = 0; i <= words.length - this.config.shingleSize; i++) {
119
+ shingles.add(words.slice(i, i + this.config.shingleSize).join(" "));
120
+ }
121
+ return shingles;
122
+ }
123
+ minhash(shingles) {
124
+ const signature = new Array(this.config.numHashFunctions).fill(Infinity);
125
+ for (const shingle of shingles) {
126
+ for (let i = 0; i < this.config.numHashFunctions; i++) {
127
+ const hash = this.hashWithSeed(shingle, i);
128
+ if (hash < signature[i]) {
129
+ signature[i] = hash;
130
+ }
131
+ }
132
+ }
133
+ return signature;
134
+ }
135
+ hashWithSeed(value, seed) {
136
+ let hash = 2166136261 ^ seed;
137
+ for (let i = 0; i < value.length; i++) {
138
+ hash ^= value.charCodeAt(i);
139
+ hash = Math.imul(hash, 16777619);
140
+ }
141
+ return hash >>> 0;
142
+ }
143
+ jaccardSimilarity(a, b) {
144
+ let intersection = 0;
145
+ for (const item of a) {
146
+ if (b.has(item)) intersection++;
147
+ }
148
+ const union = a.size + b.size - intersection;
149
+ return union === 0 ? 0 : intersection / union;
150
+ }
151
+ };
152
+ function createDedupFilter(config) {
153
+ return new DedupFilter(config);
154
+ }
155
+
156
+ // src/codebase/GodFileDetector.ts
157
+ var DEFAULT_THRESHOLDS = {
158
+ loc_warning: 500,
159
+ loc_god: 1e3,
160
+ functions_warning: 20,
161
+ functions_god: 40,
162
+ complexity_god: 50,
163
+ imports_god: 30
164
+ };
165
+ var GodFileDetector = class {
166
+ constructor(thresholds) {
167
+ this.thresholds = { ...DEFAULT_THRESHOLDS, ...thresholds };
168
+ }
169
+ /**
170
+ * Analyze a file's content and produce metrics + classification
171
+ */
172
+ analyze(filePath, content) {
173
+ const metrics = this.computeMetrics(filePath, content);
174
+ const reasons = [];
175
+ let classification = "normal";
176
+ if (metrics.loc >= this.thresholds.loc_god) {
177
+ reasons.push(`LOC ${metrics.loc} >= ${this.thresholds.loc_god} (god file threshold)`);
178
+ classification = "god_file";
179
+ } else if (metrics.loc >= this.thresholds.loc_warning) {
180
+ reasons.push(`LOC ${metrics.loc} >= ${this.thresholds.loc_warning} (warning threshold)`);
181
+ classification = "warning";
182
+ }
183
+ if (metrics.functionCount >= this.thresholds.functions_god) {
184
+ reasons.push(
185
+ `Functions ${metrics.functionCount} >= ${this.thresholds.functions_god} (god file threshold)`
186
+ );
187
+ classification = "god_file";
188
+ } else if (metrics.functionCount >= this.thresholds.functions_warning) {
189
+ reasons.push(
190
+ `Functions ${metrics.functionCount} >= ${this.thresholds.functions_warning} (warning threshold)`
191
+ );
192
+ if (classification !== "god_file") classification = "warning";
193
+ }
194
+ if (metrics.cyclomaticComplexity >= this.thresholds.complexity_god) {
195
+ reasons.push(
196
+ `Cyclomatic complexity ${metrics.cyclomaticComplexity} >= ${this.thresholds.complexity_god}`
197
+ );
198
+ classification = "god_file";
199
+ }
200
+ if (metrics.importCount >= this.thresholds.imports_god) {
201
+ reasons.push(`Imports ${metrics.importCount} >= ${this.thresholds.imports_god}`);
202
+ if (classification !== "god_file") classification = "warning";
203
+ }
204
+ const report = {
205
+ filePath,
206
+ classification,
207
+ metrics,
208
+ reasons
209
+ };
210
+ if (classification === "god_file") {
211
+ report.splitPlan = this.suggestSplit(filePath, content, metrics);
212
+ }
213
+ return report;
214
+ }
215
+ /**
216
+ * Compute metrics for a file
217
+ */
218
+ computeMetrics(filePath, content) {
219
+ const lines = content.split("\n");
220
+ const loc = lines.filter((l) => l.trim().length > 0 && !l.trim().startsWith("//")).length;
221
+ const functionPattern = /\b(function\s+\w+|(?:async\s+)?(?:get|set)?\s*\w+\s*\(.*\)\s*(?::\s*\w[\w<>,\s|]*\s*)?{|\w+\s*=\s*(?:async\s+)?(?:\(.*\)|[\w]+)\s*=>)/g;
222
+ const functionCount = (content.match(functionPattern) || []).length;
223
+ const importPattern = /\bimport\s+(?:type\s+)?(?:{[^}]*}|\*\s+as\s+\w+|\w+)\s+from/g;
224
+ const importCount = (content.match(importPattern) || []).length;
225
+ const exportPattern = /\bexport\s+(?:default\s+)?(?:class|function|const|let|var|interface|type|enum)/g;
226
+ const exportCount = (content.match(exportPattern) || []).length;
227
+ const classPattern = /\bclass\s+\w+/g;
228
+ const classCount = (content.match(classPattern) || []).length;
229
+ const complexityPatterns = /\b(if|else if|for|while|do|switch|case|catch|\?\?|&&|\|\||ternary)\b|\?(?!=)/g;
230
+ const cyclomaticComplexity = (content.match(complexityPatterns) || []).length + 1;
231
+ return {
232
+ filePath,
233
+ loc,
234
+ functionCount,
235
+ importCount,
236
+ exportCount,
237
+ classCount,
238
+ cyclomaticComplexity
239
+ };
240
+ }
241
+ /**
242
+ * Suggest a virtual split plan for a god file.
243
+ * Only splits at top-level declaration boundaries (G.GAP.05 prevention).
244
+ */
245
+ suggestSplit(filePath, content, metrics) {
246
+ const lines = content.split("\n");
247
+ const segments = [];
248
+ const baseName = filePath.replace(/\.[^.]+$/, "").split(/[/\\]/).pop() || "module";
249
+ let currentStart = 0;
250
+ let currentType = "module";
251
+ let currentName = "";
252
+ let symbolCount = 0;
253
+ let braceDepth = 0;
254
+ for (let i = 0; i < lines.length; i++) {
255
+ const line = lines[i];
256
+ const trimmed = line.trim();
257
+ for (const ch of line) {
258
+ if (ch === "{") braceDepth++;
259
+ if (ch === "}") braceDepth--;
260
+ }
261
+ const classMatch = trimmed.match(/^(?:export\s+)?(?:abstract\s+)?class\s+(\w+)/);
262
+ if (classMatch && braceDepth <= 1) {
263
+ if (i > currentStart + 5) {
264
+ segments.push({
265
+ suggestedName: currentName || `${baseName}-segment-${segments.length}`,
266
+ startLine: currentStart + 1,
267
+ endLine: i,
268
+ type: currentType,
269
+ symbolCount,
270
+ description: `Lines ${currentStart + 1}-${i}`
271
+ });
272
+ }
273
+ currentStart = i;
274
+ currentType = "class";
275
+ currentName = classMatch[1];
276
+ symbolCount = 0;
277
+ }
278
+ if (trimmed.match(/^(?:export\s+)?(?:const|let|var|function|class|interface|type|enum)\s/)) {
279
+ symbolCount++;
280
+ }
281
+ }
282
+ if (currentStart < lines.length - 1) {
283
+ segments.push({
284
+ suggestedName: currentName || `${baseName}-segment-${segments.length}`,
285
+ startLine: currentStart + 1,
286
+ endLine: lines.length,
287
+ type: currentType,
288
+ symbolCount,
289
+ description: `Lines ${currentStart + 1}-${lines.length}`
290
+ });
291
+ }
292
+ if (segments.length <= 1) {
293
+ return this.splitByFunctionGroups(filePath, content, metrics, baseName);
294
+ }
295
+ return {
296
+ originalPath: filePath,
297
+ segments,
298
+ totalSegments: segments.length
299
+ };
300
+ }
301
+ splitByFunctionGroups(filePath, content, _metrics, baseName) {
302
+ const lines = content.split("\n");
303
+ const segmentSize = Math.ceil(lines.length / 3);
304
+ const segments = [];
305
+ for (let i = 0; i < 3; i++) {
306
+ const start = i * segmentSize;
307
+ const end = Math.min((i + 1) * segmentSize, lines.length);
308
+ if (start >= lines.length) break;
309
+ segments.push({
310
+ suggestedName: `${baseName}-part-${i + 1}`,
311
+ startLine: start + 1,
312
+ endLine: end,
313
+ type: "function-group",
314
+ symbolCount: 0,
315
+ description: `Lines ${start + 1}-${end}`
316
+ });
317
+ }
318
+ return {
319
+ originalPath: filePath,
320
+ segments,
321
+ totalSegments: segments.length
322
+ };
323
+ }
324
+ };
325
+ function createGodFileDetector(thresholds) {
326
+ return new GodFileDetector(thresholds);
327
+ }
328
+
329
+ export { DedupFilter, GodFileDetector, createDedupFilter, createGodFileDetector };
330
+ //# sourceMappingURL=index.js.map
331
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,31 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var chunkJC5YBPSF_cjs = require('../chunk-JC5YBPSF.cjs');
6
+ require('../chunk-KKP7JKN4.cjs');
7
+ require('../chunk-5FSKKMR7.cjs');
8
+ require('../chunk-GTU2Z2WW.cjs');
9
+ require('../chunk-E7JP3BS3.cjs');
10
+ require('../chunk-HCCQLAA4.cjs');
11
+
12
+
13
+
14
+ Object.defineProperty(exports, "AgentInferenceCompiler", {
15
+ enumerable: true,
16
+ get: function () { return chunkJC5YBPSF_cjs.AgentInferenceCompiler; }
17
+ });
18
+ Object.defineProperty(exports, "createAgentInferenceCompiler", {
19
+ enumerable: true,
20
+ get: function () { return chunkJC5YBPSF_cjs.createAgentInferenceCompiler; }
21
+ });
22
+ Object.defineProperty(exports, "createPythonAgentInferenceCompiler", {
23
+ enumerable: true,
24
+ get: function () { return chunkJC5YBPSF_cjs.createPythonAgentInferenceCompiler; }
25
+ });
26
+ Object.defineProperty(exports, "default", {
27
+ enumerable: true,
28
+ get: function () { return chunkJC5YBPSF_cjs.AgentInferenceExportTarget_default; }
29
+ });
30
+ //# sourceMappingURL=agent-inference.cjs.map
31
+ //# sourceMappingURL=agent-inference.cjs.map