@zbigniewsobiecki/squint 1.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 (649) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1065 -0
  3. package/bin/dev.js +5 -0
  4. package/bin/run.js +5 -0
  5. package/dist/commands/_shared/db-helper.d.ts +18 -0
  6. package/dist/commands/_shared/db-helper.d.ts.map +1 -0
  7. package/dist/commands/_shared/db-helper.js +72 -0
  8. package/dist/commands/_shared/db-helper.js.map +1 -0
  9. package/dist/commands/_shared/flags.d.ts +20 -0
  10. package/dist/commands/_shared/flags.d.ts.map +1 -0
  11. package/dist/commands/_shared/flags.js +38 -0
  12. package/dist/commands/_shared/flags.js.map +1 -0
  13. package/dist/commands/_shared/index.d.ts +6 -0
  14. package/dist/commands/_shared/index.d.ts.map +1 -0
  15. package/dist/commands/_shared/index.js +6 -0
  16. package/dist/commands/_shared/index.js.map +1 -0
  17. package/dist/commands/_shared/output.d.ts +22 -0
  18. package/dist/commands/_shared/output.d.ts.map +1 -0
  19. package/dist/commands/_shared/output.js +36 -0
  20. package/dist/commands/_shared/output.js.map +1 -0
  21. package/dist/commands/_shared/source-reader.d.ts +23 -0
  22. package/dist/commands/_shared/source-reader.d.ts.map +1 -0
  23. package/dist/commands/_shared/source-reader.js +45 -0
  24. package/dist/commands/_shared/source-reader.js.map +1 -0
  25. package/dist/commands/_shared/symbol-resolver.d.ts +35 -0
  26. package/dist/commands/_shared/symbol-resolver.d.ts.map +1 -0
  27. package/dist/commands/_shared/symbol-resolver.js +102 -0
  28. package/dist/commands/_shared/symbol-resolver.js.map +1 -0
  29. package/dist/commands/browse.d.ts +13 -0
  30. package/dist/commands/browse.d.ts.map +1 -0
  31. package/dist/commands/browse.js +106 -0
  32. package/dist/commands/browse.js.map +1 -0
  33. package/dist/commands/domains/create.d.ts +15 -0
  34. package/dist/commands/domains/create.d.ts.map +1 -0
  35. package/dist/commands/domains/create.js +34 -0
  36. package/dist/commands/domains/create.js.map +1 -0
  37. package/dist/commands/domains/delete.d.ts +14 -0
  38. package/dist/commands/domains/delete.d.ts.map +1 -0
  39. package/dist/commands/domains/delete.js +41 -0
  40. package/dist/commands/domains/delete.js.map +1 -0
  41. package/dist/commands/domains/index.d.ts +2 -0
  42. package/dist/commands/domains/index.d.ts.map +1 -0
  43. package/dist/commands/domains/index.js +2 -0
  44. package/dist/commands/domains/index.js.map +1 -0
  45. package/dist/commands/domains/list.d.ts +12 -0
  46. package/dist/commands/domains/list.d.ts.map +1 -0
  47. package/dist/commands/domains/list.js +67 -0
  48. package/dist/commands/domains/list.js.map +1 -0
  49. package/dist/commands/domains/merge.d.ts +14 -0
  50. package/dist/commands/domains/merge.d.ts.map +1 -0
  51. package/dist/commands/domains/merge.js +40 -0
  52. package/dist/commands/domains/merge.js.map +1 -0
  53. package/dist/commands/domains/rename.d.ts +14 -0
  54. package/dist/commands/domains/rename.d.ts.map +1 -0
  55. package/dist/commands/domains/rename.js +33 -0
  56. package/dist/commands/domains/rename.js.map +1 -0
  57. package/dist/commands/domains/show.d.ts +14 -0
  58. package/dist/commands/domains/show.d.ts.map +1 -0
  59. package/dist/commands/domains/show.js +47 -0
  60. package/dist/commands/domains/show.js.map +1 -0
  61. package/dist/commands/domains/sync.d.ts +11 -0
  62. package/dist/commands/domains/sync.d.ts.map +1 -0
  63. package/dist/commands/domains/sync.js +33 -0
  64. package/dist/commands/domains/sync.js.map +1 -0
  65. package/dist/commands/domains/update.d.ts +14 -0
  66. package/dist/commands/domains/update.d.ts.map +1 -0
  67. package/dist/commands/domains/update.js +28 -0
  68. package/dist/commands/domains/update.js.map +1 -0
  69. package/dist/commands/features/assign.d.ts +16 -0
  70. package/dist/commands/features/assign.d.ts.map +1 -0
  71. package/dist/commands/features/assign.js +51 -0
  72. package/dist/commands/features/assign.js.map +1 -0
  73. package/dist/commands/features/create.d.ts +15 -0
  74. package/dist/commands/features/create.d.ts.map +1 -0
  75. package/dist/commands/features/create.js +30 -0
  76. package/dist/commands/features/create.js.map +1 -0
  77. package/dist/commands/features/delete.d.ts +14 -0
  78. package/dist/commands/features/delete.d.ts.map +1 -0
  79. package/dist/commands/features/delete.js +37 -0
  80. package/dist/commands/features/delete.js.map +1 -0
  81. package/dist/commands/features/generate.d.ts +34 -0
  82. package/dist/commands/features/generate.d.ts.map +1 -0
  83. package/dist/commands/features/generate.js +178 -0
  84. package/dist/commands/features/generate.js.map +1 -0
  85. package/dist/commands/features/index.d.ts +2 -0
  86. package/dist/commands/features/index.d.ts.map +1 -0
  87. package/dist/commands/features/index.js +2 -0
  88. package/dist/commands/features/index.js.map +1 -0
  89. package/dist/commands/features/list.d.ts +11 -0
  90. package/dist/commands/features/list.d.ts.map +1 -0
  91. package/dist/commands/features/list.js +45 -0
  92. package/dist/commands/features/list.js.map +1 -0
  93. package/dist/commands/features/show.d.ts +15 -0
  94. package/dist/commands/features/show.d.ts.map +1 -0
  95. package/dist/commands/features/show.js +61 -0
  96. package/dist/commands/features/show.js.map +1 -0
  97. package/dist/commands/features/unassign.d.ts +16 -0
  98. package/dist/commands/features/unassign.d.ts.map +1 -0
  99. package/dist/commands/features/unassign.js +55 -0
  100. package/dist/commands/features/unassign.js.map +1 -0
  101. package/dist/commands/features/update.d.ts +16 -0
  102. package/dist/commands/features/update.d.ts.map +1 -0
  103. package/dist/commands/features/update.js +54 -0
  104. package/dist/commands/features/update.js.map +1 -0
  105. package/dist/commands/files/imported-by.d.ts +13 -0
  106. package/dist/commands/files/imported-by.d.ts.map +1 -0
  107. package/dist/commands/files/imported-by.js +40 -0
  108. package/dist/commands/files/imported-by.js.map +1 -0
  109. package/dist/commands/files/imports.d.ts +14 -0
  110. package/dist/commands/files/imports.d.ts.map +1 -0
  111. package/dist/commands/files/imports.js +48 -0
  112. package/dist/commands/files/imports.js.map +1 -0
  113. package/dist/commands/files/index.d.ts +2 -0
  114. package/dist/commands/files/index.d.ts.map +1 -0
  115. package/dist/commands/files/index.js +2 -0
  116. package/dist/commands/files/index.js.map +1 -0
  117. package/dist/commands/files/list.d.ts +11 -0
  118. package/dist/commands/files/list.d.ts.map +1 -0
  119. package/dist/commands/files/list.js +35 -0
  120. package/dist/commands/files/list.js.map +1 -0
  121. package/dist/commands/files/orphans.d.ts +12 -0
  122. package/dist/commands/files/orphans.d.ts.map +1 -0
  123. package/dist/commands/files/orphans.js +43 -0
  124. package/dist/commands/files/orphans.js.map +1 -0
  125. package/dist/commands/files/show.d.ts +14 -0
  126. package/dist/commands/files/show.d.ts.map +1 -0
  127. package/dist/commands/files/show.js +95 -0
  128. package/dist/commands/files/show.js.map +1 -0
  129. package/dist/commands/flows/add-step.d.ts +19 -0
  130. package/dist/commands/flows/add-step.d.ts.map +1 -0
  131. package/dist/commands/flows/add-step.js +46 -0
  132. package/dist/commands/flows/add-step.js.map +1 -0
  133. package/dist/commands/flows/create.d.ts +17 -0
  134. package/dist/commands/flows/create.d.ts.map +1 -0
  135. package/dist/commands/flows/create.js +39 -0
  136. package/dist/commands/flows/create.js.map +1 -0
  137. package/dist/commands/flows/delete.d.ts +14 -0
  138. package/dist/commands/flows/delete.d.ts.map +1 -0
  139. package/dist/commands/flows/delete.js +37 -0
  140. package/dist/commands/flows/delete.js.map +1 -0
  141. package/dist/commands/flows/generate.d.ts +50 -0
  142. package/dist/commands/flows/generate.d.ts.map +1 -0
  143. package/dist/commands/flows/generate.js +438 -0
  144. package/dist/commands/flows/generate.js.map +1 -0
  145. package/dist/commands/flows/index.d.ts +2 -0
  146. package/dist/commands/flows/index.d.ts.map +1 -0
  147. package/dist/commands/flows/index.js +2 -0
  148. package/dist/commands/flows/index.js.map +1 -0
  149. package/dist/commands/flows/list.d.ts +12 -0
  150. package/dist/commands/flows/list.d.ts.map +1 -0
  151. package/dist/commands/flows/list.js +98 -0
  152. package/dist/commands/flows/list.js.map +1 -0
  153. package/dist/commands/flows/remove-step.d.ts +18 -0
  154. package/dist/commands/flows/remove-step.d.ts.map +1 -0
  155. package/dist/commands/flows/remove-step.js +41 -0
  156. package/dist/commands/flows/remove-step.js.map +1 -0
  157. package/dist/commands/flows/show.d.ts +17 -0
  158. package/dist/commands/flows/show.d.ts.map +1 -0
  159. package/dist/commands/flows/show.js +136 -0
  160. package/dist/commands/flows/show.js.map +1 -0
  161. package/dist/commands/flows/trace.d.ts +22 -0
  162. package/dist/commands/flows/trace.d.ts.map +1 -0
  163. package/dist/commands/flows/trace.js +217 -0
  164. package/dist/commands/flows/trace.js.map +1 -0
  165. package/dist/commands/flows/update.d.ts +17 -0
  166. package/dist/commands/flows/update.d.ts.map +1 -0
  167. package/dist/commands/flows/update.js +60 -0
  168. package/dist/commands/flows/update.js.map +1 -0
  169. package/dist/commands/flows/verify.d.ts +21 -0
  170. package/dist/commands/flows/verify.d.ts.map +1 -0
  171. package/dist/commands/flows/verify.js +123 -0
  172. package/dist/commands/flows/verify.js.map +1 -0
  173. package/dist/commands/gaps.d.ts +14 -0
  174. package/dist/commands/gaps.d.ts.map +1 -0
  175. package/dist/commands/gaps.js +184 -0
  176. package/dist/commands/gaps.js.map +1 -0
  177. package/dist/commands/hierarchy/index.d.ts +20 -0
  178. package/dist/commands/hierarchy/index.d.ts.map +1 -0
  179. package/dist/commands/hierarchy/index.js +344 -0
  180. package/dist/commands/hierarchy/index.js.map +1 -0
  181. package/dist/commands/ingest.d.ts +23 -0
  182. package/dist/commands/ingest.d.ts.map +1 -0
  183. package/dist/commands/ingest.js +249 -0
  184. package/dist/commands/ingest.js.map +1 -0
  185. package/dist/commands/interactions/create.d.ts +16 -0
  186. package/dist/commands/interactions/create.d.ts.map +1 -0
  187. package/dist/commands/interactions/create.js +58 -0
  188. package/dist/commands/interactions/create.js.map +1 -0
  189. package/dist/commands/interactions/delete.d.ts +16 -0
  190. package/dist/commands/interactions/delete.d.ts.map +1 -0
  191. package/dist/commands/interactions/delete.js +28 -0
  192. package/dist/commands/interactions/delete.js.map +1 -0
  193. package/dist/commands/interactions/generate.d.ts +62 -0
  194. package/dist/commands/interactions/generate.d.ts.map +1 -0
  195. package/dist/commands/interactions/generate.js +870 -0
  196. package/dist/commands/interactions/generate.js.map +1 -0
  197. package/dist/commands/interactions/index.d.ts +2 -0
  198. package/dist/commands/interactions/index.d.ts.map +1 -0
  199. package/dist/commands/interactions/index.js +2 -0
  200. package/dist/commands/interactions/index.js.map +1 -0
  201. package/dist/commands/interactions/list.d.ts +15 -0
  202. package/dist/commands/interactions/list.d.ts.map +1 -0
  203. package/dist/commands/interactions/list.js +127 -0
  204. package/dist/commands/interactions/list.js.map +1 -0
  205. package/dist/commands/interactions/show.d.ts +17 -0
  206. package/dist/commands/interactions/show.d.ts.map +1 -0
  207. package/dist/commands/interactions/show.js +80 -0
  208. package/dist/commands/interactions/show.js.map +1 -0
  209. package/dist/commands/interactions/update.d.ts +20 -0
  210. package/dist/commands/interactions/update.d.ts.map +1 -0
  211. package/dist/commands/interactions/update.js +57 -0
  212. package/dist/commands/interactions/update.js.map +1 -0
  213. package/dist/commands/interactions/validate.d.ts +12 -0
  214. package/dist/commands/interactions/validate.d.ts.map +1 -0
  215. package/dist/commands/interactions/validate.js +94 -0
  216. package/dist/commands/interactions/validate.js.map +1 -0
  217. package/dist/commands/interactions/verify.d.ts +18 -0
  218. package/dist/commands/interactions/verify.d.ts.map +1 -0
  219. package/dist/commands/interactions/verify.js +127 -0
  220. package/dist/commands/interactions/verify.js.map +1 -0
  221. package/dist/commands/llm/_shared/base-llm-command.d.ts +44 -0
  222. package/dist/commands/llm/_shared/base-llm-command.d.ts.map +1 -0
  223. package/dist/commands/llm/_shared/base-llm-command.js +73 -0
  224. package/dist/commands/llm/_shared/base-llm-command.js.map +1 -0
  225. package/dist/commands/llm/_shared/coverage.d.ts +61 -0
  226. package/dist/commands/llm/_shared/coverage.d.ts.map +1 -0
  227. package/dist/commands/llm/_shared/coverage.js +161 -0
  228. package/dist/commands/llm/_shared/coverage.js.map +1 -0
  229. package/dist/commands/llm/_shared/csv-utils.d.ts +65 -0
  230. package/dist/commands/llm/_shared/csv-utils.d.ts.map +1 -0
  231. package/dist/commands/llm/_shared/csv-utils.js +231 -0
  232. package/dist/commands/llm/_shared/csv-utils.js.map +1 -0
  233. package/dist/commands/llm/_shared/csv.d.ts +44 -0
  234. package/dist/commands/llm/_shared/csv.d.ts.map +1 -0
  235. package/dist/commands/llm/_shared/csv.js +76 -0
  236. package/dist/commands/llm/_shared/csv.js.map +1 -0
  237. package/dist/commands/llm/_shared/entity-utils.d.ts +11 -0
  238. package/dist/commands/llm/_shared/entity-utils.d.ts.map +1 -0
  239. package/dist/commands/llm/_shared/entity-utils.js +87 -0
  240. package/dist/commands/llm/_shared/entity-utils.js.map +1 -0
  241. package/dist/commands/llm/_shared/flow-csv.d.ts +74 -0
  242. package/dist/commands/llm/_shared/flow-csv.d.ts.map +1 -0
  243. package/dist/commands/llm/_shared/flow-csv.js +198 -0
  244. package/dist/commands/llm/_shared/flow-csv.js.map +1 -0
  245. package/dist/commands/llm/_shared/flow-prompts.d.ts +61 -0
  246. package/dist/commands/llm/_shared/flow-prompts.d.ts.map +1 -0
  247. package/dist/commands/llm/_shared/flow-prompts.js +281 -0
  248. package/dist/commands/llm/_shared/flow-prompts.js.map +1 -0
  249. package/dist/commands/llm/_shared/flow-validation.d.ts +69 -0
  250. package/dist/commands/llm/_shared/flow-validation.d.ts.map +1 -0
  251. package/dist/commands/llm/_shared/flow-validation.js +176 -0
  252. package/dist/commands/llm/_shared/flow-validation.js.map +1 -0
  253. package/dist/commands/llm/_shared/llm-utils.d.ts +88 -0
  254. package/dist/commands/llm/_shared/llm-utils.d.ts.map +1 -0
  255. package/dist/commands/llm/_shared/llm-utils.js +256 -0
  256. package/dist/commands/llm/_shared/llm-utils.js.map +1 -0
  257. package/dist/commands/llm/_shared/module-csv.d.ts +76 -0
  258. package/dist/commands/llm/_shared/module-csv.d.ts.map +1 -0
  259. package/dist/commands/llm/_shared/module-csv.js +196 -0
  260. package/dist/commands/llm/_shared/module-csv.js.map +1 -0
  261. package/dist/commands/llm/_shared/module-prompts.d.ts +107 -0
  262. package/dist/commands/llm/_shared/module-prompts.d.ts.map +1 -0
  263. package/dist/commands/llm/_shared/module-prompts.js +395 -0
  264. package/dist/commands/llm/_shared/module-prompts.js.map +1 -0
  265. package/dist/commands/llm/_shared/process-utils.d.ts +52 -0
  266. package/dist/commands/llm/_shared/process-utils.d.ts.map +1 -0
  267. package/dist/commands/llm/_shared/process-utils.js +214 -0
  268. package/dist/commands/llm/_shared/process-utils.js.map +1 -0
  269. package/dist/commands/llm/_shared/prompts.d.ts +132 -0
  270. package/dist/commands/llm/_shared/prompts.d.ts.map +1 -0
  271. package/dist/commands/llm/_shared/prompts.js +391 -0
  272. package/dist/commands/llm/_shared/prompts.js.map +1 -0
  273. package/dist/commands/llm/_shared/pure-check.d.ts +10 -0
  274. package/dist/commands/llm/_shared/pure-check.d.ts.map +1 -0
  275. package/dist/commands/llm/_shared/pure-check.js +449 -0
  276. package/dist/commands/llm/_shared/pure-check.js.map +1 -0
  277. package/dist/commands/llm/_shared/verify/content-verifier.d.ts +40 -0
  278. package/dist/commands/llm/_shared/verify/content-verifier.d.ts.map +1 -0
  279. package/dist/commands/llm/_shared/verify/content-verifier.js +247 -0
  280. package/dist/commands/llm/_shared/verify/content-verifier.js.map +1 -0
  281. package/dist/commands/llm/_shared/verify/coverage-checker.d.ts +34 -0
  282. package/dist/commands/llm/_shared/verify/coverage-checker.d.ts.map +1 -0
  283. package/dist/commands/llm/_shared/verify/coverage-checker.js +1096 -0
  284. package/dist/commands/llm/_shared/verify/coverage-checker.js.map +1 -0
  285. package/dist/commands/llm/_shared/verify/verify-prompts.d.ts +30 -0
  286. package/dist/commands/llm/_shared/verify/verify-prompts.d.ts.map +1 -0
  287. package/dist/commands/llm/_shared/verify/verify-prompts.js +118 -0
  288. package/dist/commands/llm/_shared/verify/verify-prompts.js.map +1 -0
  289. package/dist/commands/llm/_shared/verify/verify-types.d.ts +47 -0
  290. package/dist/commands/llm/_shared/verify/verify-types.d.ts.map +1 -0
  291. package/dist/commands/llm/_shared/verify/verify-types.js +2 -0
  292. package/dist/commands/llm/_shared/verify/verify-types.js.map +1 -0
  293. package/dist/commands/llm/annotate.d.ts +7 -0
  294. package/dist/commands/llm/annotate.d.ts.map +1 -0
  295. package/dist/commands/llm/annotate.js +11 -0
  296. package/dist/commands/llm/annotate.js.map +1 -0
  297. package/dist/commands/llm/features/feature-grouper.d.ts +31 -0
  298. package/dist/commands/llm/features/feature-grouper.d.ts.map +1 -0
  299. package/dist/commands/llm/features/feature-grouper.js +223 -0
  300. package/dist/commands/llm/features/feature-grouper.js.map +1 -0
  301. package/dist/commands/llm/features/index.d.ts +6 -0
  302. package/dist/commands/llm/features/index.d.ts.map +1 -0
  303. package/dist/commands/llm/features/index.js +6 -0
  304. package/dist/commands/llm/features/index.js.map +1 -0
  305. package/dist/commands/llm/features/types.d.ts +10 -0
  306. package/dist/commands/llm/features/types.d.ts.map +1 -0
  307. package/dist/commands/llm/features/types.js +5 -0
  308. package/dist/commands/llm/features/types.js.map +1 -0
  309. package/dist/commands/llm/features.d.ts +7 -0
  310. package/dist/commands/llm/features.d.ts.map +1 -0
  311. package/dist/commands/llm/features.js +11 -0
  312. package/dist/commands/llm/features.js.map +1 -0
  313. package/dist/commands/llm/flows/atomic-flow-builder.d.ts +51 -0
  314. package/dist/commands/llm/flows/atomic-flow-builder.d.ts.map +1 -0
  315. package/dist/commands/llm/flows/atomic-flow-builder.js +247 -0
  316. package/dist/commands/llm/flows/atomic-flow-builder.js.map +1 -0
  317. package/dist/commands/llm/flows/dedup.d.ts +18 -0
  318. package/dist/commands/llm/flows/dedup.d.ts.map +1 -0
  319. package/dist/commands/llm/flows/dedup.js +76 -0
  320. package/dist/commands/llm/flows/dedup.js.map +1 -0
  321. package/dist/commands/llm/flows/entry-point-detector.d.ts +41 -0
  322. package/dist/commands/llm/flows/entry-point-detector.d.ts.map +1 -0
  323. package/dist/commands/llm/flows/entry-point-detector.js +388 -0
  324. package/dist/commands/llm/flows/entry-point-detector.js.map +1 -0
  325. package/dist/commands/llm/flows/flow-enhancer.d.ts +21 -0
  326. package/dist/commands/llm/flows/flow-enhancer.d.ts.map +1 -0
  327. package/dist/commands/llm/flows/flow-enhancer.js +166 -0
  328. package/dist/commands/llm/flows/flow-enhancer.js.map +1 -0
  329. package/dist/commands/llm/flows/flow-tracer.d.ts +50 -0
  330. package/dist/commands/llm/flows/flow-tracer.d.ts.map +1 -0
  331. package/dist/commands/llm/flows/flow-tracer.js +271 -0
  332. package/dist/commands/llm/flows/flow-tracer.js.map +1 -0
  333. package/dist/commands/llm/flows/flow-validator.d.ts +31 -0
  334. package/dist/commands/llm/flows/flow-validator.d.ts.map +1 -0
  335. package/dist/commands/llm/flows/flow-validator.js +262 -0
  336. package/dist/commands/llm/flows/flow-validator.js.map +1 -0
  337. package/dist/commands/llm/flows/gap-flow-generator.d.ts +13 -0
  338. package/dist/commands/llm/flows/gap-flow-generator.d.ts.map +1 -0
  339. package/dist/commands/llm/flows/gap-flow-generator.js +48 -0
  340. package/dist/commands/llm/flows/gap-flow-generator.js.map +1 -0
  341. package/dist/commands/llm/flows/index.d.ts +12 -0
  342. package/dist/commands/llm/flows/index.d.ts.map +1 -0
  343. package/dist/commands/llm/flows/index.js +12 -0
  344. package/dist/commands/llm/flows/index.js.map +1 -0
  345. package/dist/commands/llm/flows/types.d.ts +87 -0
  346. package/dist/commands/llm/flows/types.d.ts.map +1 -0
  347. package/dist/commands/llm/flows/types.js +5 -0
  348. package/dist/commands/llm/flows/types.js.map +1 -0
  349. package/dist/commands/llm/flows.d.ts +7 -0
  350. package/dist/commands/llm/flows.d.ts.map +1 -0
  351. package/dist/commands/llm/flows.js +11 -0
  352. package/dist/commands/llm/flows.js.map +1 -0
  353. package/dist/commands/llm/interactions.d.ts +7 -0
  354. package/dist/commands/llm/interactions.d.ts.map +1 -0
  355. package/dist/commands/llm/interactions.js +11 -0
  356. package/dist/commands/llm/interactions.js.map +1 -0
  357. package/dist/commands/llm/modules.d.ts +7 -0
  358. package/dist/commands/llm/modules.d.ts.map +1 -0
  359. package/dist/commands/llm/modules.js +11 -0
  360. package/dist/commands/llm/modules.js.map +1 -0
  361. package/dist/commands/llm/relationships.d.ts +7 -0
  362. package/dist/commands/llm/relationships.d.ts.map +1 -0
  363. package/dist/commands/llm/relationships.js +11 -0
  364. package/dist/commands/llm/relationships.js.map +1 -0
  365. package/dist/commands/modules/assign.d.ts +14 -0
  366. package/dist/commands/modules/assign.d.ts.map +1 -0
  367. package/dist/commands/modules/assign.js +54 -0
  368. package/dist/commands/modules/assign.js.map +1 -0
  369. package/dist/commands/modules/create.d.ts +16 -0
  370. package/dist/commands/modules/create.d.ts.map +1 -0
  371. package/dist/commands/modules/create.js +37 -0
  372. package/dist/commands/modules/create.js.map +1 -0
  373. package/dist/commands/modules/delete.d.ts +14 -0
  374. package/dist/commands/modules/delete.d.ts.map +1 -0
  375. package/dist/commands/modules/delete.js +54 -0
  376. package/dist/commands/modules/delete.js.map +1 -0
  377. package/dist/commands/modules/generate.d.ts +84 -0
  378. package/dist/commands/modules/generate.d.ts.map +1 -0
  379. package/dist/commands/modules/generate.js +1234 -0
  380. package/dist/commands/modules/generate.js.map +1 -0
  381. package/dist/commands/modules/index.d.ts +2 -0
  382. package/dist/commands/modules/index.d.ts.map +1 -0
  383. package/dist/commands/modules/index.js +2 -0
  384. package/dist/commands/modules/index.js.map +1 -0
  385. package/dist/commands/modules/list.d.ts +13 -0
  386. package/dist/commands/modules/list.d.ts.map +1 -0
  387. package/dist/commands/modules/list.js +92 -0
  388. package/dist/commands/modules/list.js.map +1 -0
  389. package/dist/commands/modules/prune.d.ts +10 -0
  390. package/dist/commands/modules/prune.d.ts.map +1 -0
  391. package/dist/commands/modules/prune.js +23 -0
  392. package/dist/commands/modules/prune.js.map +1 -0
  393. package/dist/commands/modules/show.d.ts +15 -0
  394. package/dist/commands/modules/show.d.ts.map +1 -0
  395. package/dist/commands/modules/show.js +95 -0
  396. package/dist/commands/modules/show.js.map +1 -0
  397. package/dist/commands/modules/unassign.d.ts +13 -0
  398. package/dist/commands/modules/unassign.d.ts.map +1 -0
  399. package/dist/commands/modules/unassign.js +49 -0
  400. package/dist/commands/modules/unassign.js.map +1 -0
  401. package/dist/commands/modules/update.d.ts +15 -0
  402. package/dist/commands/modules/update.d.ts.map +1 -0
  403. package/dist/commands/modules/update.js +50 -0
  404. package/dist/commands/modules/update.js.map +1 -0
  405. package/dist/commands/modules/verify.d.ts +18 -0
  406. package/dist/commands/modules/verify.d.ts.map +1 -0
  407. package/dist/commands/modules/verify.js +114 -0
  408. package/dist/commands/modules/verify.js.map +1 -0
  409. package/dist/commands/overview.d.ts +12 -0
  410. package/dist/commands/overview.d.ts.map +1 -0
  411. package/dist/commands/overview.js +219 -0
  412. package/dist/commands/overview.js.map +1 -0
  413. package/dist/commands/parse.d.ts +30 -0
  414. package/dist/commands/parse.d.ts.map +1 -0
  415. package/dist/commands/parse.js +211 -0
  416. package/dist/commands/parse.js.map +1 -0
  417. package/dist/commands/process-groups/index.d.ts +2 -0
  418. package/dist/commands/process-groups/index.d.ts.map +1 -0
  419. package/dist/commands/process-groups/index.js +2 -0
  420. package/dist/commands/process-groups/index.js.map +1 -0
  421. package/dist/commands/process-groups/list.d.ts +11 -0
  422. package/dist/commands/process-groups/list.d.ts.map +1 -0
  423. package/dist/commands/process-groups/list.js +98 -0
  424. package/dist/commands/process-groups/list.js.map +1 -0
  425. package/dist/commands/relationships/annotate.d.ts +27 -0
  426. package/dist/commands/relationships/annotate.d.ts.map +1 -0
  427. package/dist/commands/relationships/annotate.js +453 -0
  428. package/dist/commands/relationships/annotate.js.map +1 -0
  429. package/dist/commands/relationships/index.d.ts +2 -0
  430. package/dist/commands/relationships/index.d.ts.map +1 -0
  431. package/dist/commands/relationships/index.js +2 -0
  432. package/dist/commands/relationships/index.js.map +1 -0
  433. package/dist/commands/relationships/list.d.ts +18 -0
  434. package/dist/commands/relationships/list.d.ts.map +1 -0
  435. package/dist/commands/relationships/list.js +147 -0
  436. package/dist/commands/relationships/list.js.map +1 -0
  437. package/dist/commands/relationships/next.d.ts +17 -0
  438. package/dist/commands/relationships/next.d.ts.map +1 -0
  439. package/dist/commands/relationships/next.js +178 -0
  440. package/dist/commands/relationships/next.js.map +1 -0
  441. package/dist/commands/relationships/set.d.ts +19 -0
  442. package/dist/commands/relationships/set.d.ts.map +1 -0
  443. package/dist/commands/relationships/set.js +65 -0
  444. package/dist/commands/relationships/set.js.map +1 -0
  445. package/dist/commands/relationships/show.d.ts +13 -0
  446. package/dist/commands/relationships/show.d.ts.map +1 -0
  447. package/dist/commands/relationships/show.js +59 -0
  448. package/dist/commands/relationships/show.js.map +1 -0
  449. package/dist/commands/relationships/unset.d.ts +16 -0
  450. package/dist/commands/relationships/unset.d.ts.map +1 -0
  451. package/dist/commands/relationships/unset.js +62 -0
  452. package/dist/commands/relationships/unset.js.map +1 -0
  453. package/dist/commands/relationships/verify.d.ts +24 -0
  454. package/dist/commands/relationships/verify.d.ts.map +1 -0
  455. package/dist/commands/relationships/verify.js +328 -0
  456. package/dist/commands/relationships/verify.js.map +1 -0
  457. package/dist/commands/stats.d.ts +11 -0
  458. package/dist/commands/stats.d.ts.map +1 -0
  459. package/dist/commands/stats.js +207 -0
  460. package/dist/commands/stats.js.map +1 -0
  461. package/dist/commands/symbols/annotate.d.ts +32 -0
  462. package/dist/commands/symbols/annotate.d.ts.map +1 -0
  463. package/dist/commands/symbols/annotate.js +862 -0
  464. package/dist/commands/symbols/annotate.js.map +1 -0
  465. package/dist/commands/symbols/deps.d.ts +18 -0
  466. package/dist/commands/symbols/deps.d.ts.map +1 -0
  467. package/dist/commands/symbols/deps.js +104 -0
  468. package/dist/commands/symbols/deps.js.map +1 -0
  469. package/dist/commands/symbols/index.d.ts +2 -0
  470. package/dist/commands/symbols/index.d.ts.map +1 -0
  471. package/dist/commands/symbols/index.js +2 -0
  472. package/dist/commands/symbols/index.js.map +1 -0
  473. package/dist/commands/symbols/list.d.ts +17 -0
  474. package/dist/commands/symbols/list.d.ts.map +1 -0
  475. package/dist/commands/symbols/list.js +136 -0
  476. package/dist/commands/symbols/list.js.map +1 -0
  477. package/dist/commands/symbols/next.d.ts +15 -0
  478. package/dist/commands/symbols/next.d.ts.map +1 -0
  479. package/dist/commands/symbols/next.js +147 -0
  480. package/dist/commands/symbols/next.js.map +1 -0
  481. package/dist/commands/symbols/prereqs.d.ts +18 -0
  482. package/dist/commands/symbols/prereqs.d.ts.map +1 -0
  483. package/dist/commands/symbols/prereqs.js +107 -0
  484. package/dist/commands/symbols/prereqs.js.map +1 -0
  485. package/dist/commands/symbols/ready.d.ts +17 -0
  486. package/dist/commands/symbols/ready.d.ts.map +1 -0
  487. package/dist/commands/symbols/ready.js +126 -0
  488. package/dist/commands/symbols/ready.js.map +1 -0
  489. package/dist/commands/symbols/set.d.ts +27 -0
  490. package/dist/commands/symbols/set.d.ts.map +1 -0
  491. package/dist/commands/symbols/set.js +241 -0
  492. package/dist/commands/symbols/set.js.map +1 -0
  493. package/dist/commands/symbols/show.d.ts +19 -0
  494. package/dist/commands/symbols/show.d.ts.map +1 -0
  495. package/dist/commands/symbols/show.js +182 -0
  496. package/dist/commands/symbols/show.js.map +1 -0
  497. package/dist/commands/symbols/understood.d.ts +15 -0
  498. package/dist/commands/symbols/understood.d.ts.map +1 -0
  499. package/dist/commands/symbols/understood.js +101 -0
  500. package/dist/commands/symbols/understood.js.map +1 -0
  501. package/dist/commands/symbols/unset.d.ts +16 -0
  502. package/dist/commands/symbols/unset.d.ts.map +1 -0
  503. package/dist/commands/symbols/unset.js +48 -0
  504. package/dist/commands/symbols/unset.js.map +1 -0
  505. package/dist/commands/symbols/verify.d.ts +25 -0
  506. package/dist/commands/symbols/verify.d.ts.map +1 -0
  507. package/dist/commands/symbols/verify.js +360 -0
  508. package/dist/commands/symbols/verify.js.map +1 -0
  509. package/dist/db/connection.d.ts +14 -0
  510. package/dist/db/connection.d.ts.map +1 -0
  511. package/dist/db/connection.js +37 -0
  512. package/dist/db/connection.js.map +1 -0
  513. package/dist/db/database-facade.d.ts +125 -0
  514. package/dist/db/database-facade.d.ts.map +1 -0
  515. package/dist/db/database-facade.js +347 -0
  516. package/dist/db/database-facade.js.map +1 -0
  517. package/dist/db/database.d.ts +9 -0
  518. package/dist/db/database.d.ts.map +1 -0
  519. package/dist/db/database.js +11 -0
  520. package/dist/db/database.js.map +1 -0
  521. package/dist/db/index.d.ts +7 -0
  522. package/dist/db/index.d.ts.map +1 -0
  523. package/dist/db/index.js +11 -0
  524. package/dist/db/index.js.map +1 -0
  525. package/dist/db/repositories/_shared/call-graph-query.d.ts +10 -0
  526. package/dist/db/repositories/_shared/call-graph-query.d.ts.map +1 -0
  527. package/dist/db/repositories/_shared/call-graph-query.js +59 -0
  528. package/dist/db/repositories/_shared/call-graph-query.js.map +1 -0
  529. package/dist/db/repositories/call-graph-service.d.ts +28 -0
  530. package/dist/db/repositories/call-graph-service.d.ts.map +1 -0
  531. package/dist/db/repositories/call-graph-service.js +223 -0
  532. package/dist/db/repositories/call-graph-service.js.map +1 -0
  533. package/dist/db/repositories/definition-repository.d.ts +99 -0
  534. package/dist/db/repositories/definition-repository.d.ts.map +1 -0
  535. package/dist/db/repositories/definition-repository.js +317 -0
  536. package/dist/db/repositories/definition-repository.js.map +1 -0
  537. package/dist/db/repositories/dependency-repository.d.ts +78 -0
  538. package/dist/db/repositories/dependency-repository.d.ts.map +1 -0
  539. package/dist/db/repositories/dependency-repository.js +446 -0
  540. package/dist/db/repositories/dependency-repository.js.map +1 -0
  541. package/dist/db/repositories/domain-repository.d.ts +97 -0
  542. package/dist/db/repositories/domain-repository.d.ts.map +1 -0
  543. package/dist/db/repositories/domain-repository.js +261 -0
  544. package/dist/db/repositories/domain-repository.js.map +1 -0
  545. package/dist/db/repositories/feature-repository.d.ts +64 -0
  546. package/dist/db/repositories/feature-repository.d.ts.map +1 -0
  547. package/dist/db/repositories/feature-repository.js +189 -0
  548. package/dist/db/repositories/feature-repository.js.map +1 -0
  549. package/dist/db/repositories/file-repository.d.ts +67 -0
  550. package/dist/db/repositories/file-repository.d.ts.map +1 -0
  551. package/dist/db/repositories/file-repository.js +179 -0
  552. package/dist/db/repositories/file-repository.js.map +1 -0
  553. package/dist/db/repositories/flow-repository.d.ts +172 -0
  554. package/dist/db/repositories/flow-repository.d.ts.map +1 -0
  555. package/dist/db/repositories/flow-repository.js +599 -0
  556. package/dist/db/repositories/flow-repository.js.map +1 -0
  557. package/dist/db/repositories/graph-repository.d.ts +93 -0
  558. package/dist/db/repositories/graph-repository.d.ts.map +1 -0
  559. package/dist/db/repositories/graph-repository.js +413 -0
  560. package/dist/db/repositories/graph-repository.js.map +1 -0
  561. package/dist/db/repositories/index.d.ts +20 -0
  562. package/dist/db/repositories/index.d.ts.map +1 -0
  563. package/dist/db/repositories/index.js +15 -0
  564. package/dist/db/repositories/index.js.map +1 -0
  565. package/dist/db/repositories/interaction-analysis.d.ts +78 -0
  566. package/dist/db/repositories/interaction-analysis.d.ts.map +1 -0
  567. package/dist/db/repositories/interaction-analysis.js +340 -0
  568. package/dist/db/repositories/interaction-analysis.js.map +1 -0
  569. package/dist/db/repositories/interaction-repository.d.ts +145 -0
  570. package/dist/db/repositories/interaction-repository.d.ts.map +1 -0
  571. package/dist/db/repositories/interaction-repository.js +395 -0
  572. package/dist/db/repositories/interaction-repository.js.map +1 -0
  573. package/dist/db/repositories/metadata-repository.d.ts +110 -0
  574. package/dist/db/repositories/metadata-repository.d.ts.map +1 -0
  575. package/dist/db/repositories/metadata-repository.js +294 -0
  576. package/dist/db/repositories/metadata-repository.js.map +1 -0
  577. package/dist/db/repositories/module-repository.d.ts +162 -0
  578. package/dist/db/repositories/module-repository.d.ts.map +1 -0
  579. package/dist/db/repositories/module-repository.js +519 -0
  580. package/dist/db/repositories/module-repository.js.map +1 -0
  581. package/dist/db/repositories/relationship-repository.d.ts +98 -0
  582. package/dist/db/repositories/relationship-repository.d.ts.map +1 -0
  583. package/dist/db/repositories/relationship-repository.js +421 -0
  584. package/dist/db/repositories/relationship-repository.js.map +1 -0
  585. package/dist/db/schema-manager.d.ts +31 -0
  586. package/dist/db/schema-manager.d.ts.map +1 -0
  587. package/dist/db/schema-manager.js +398 -0
  588. package/dist/db/schema-manager.js.map +1 -0
  589. package/dist/db/schema.d.ts +404 -0
  590. package/dist/db/schema.d.ts.map +1 -0
  591. package/dist/db/schema.js +234 -0
  592. package/dist/db/schema.js.map +1 -0
  593. package/dist/db/utils/tree-builder.d.ts +25 -0
  594. package/dist/db/utils/tree-builder.d.ts.map +1 -0
  595. package/dist/db/utils/tree-builder.js +38 -0
  596. package/dist/db/utils/tree-builder.js.map +1 -0
  597. package/dist/index.d.ts +2 -0
  598. package/dist/index.d.ts.map +1 -0
  599. package/dist/index.js +2 -0
  600. package/dist/index.js.map +1 -0
  601. package/dist/parser/ast-parser.d.ts +23 -0
  602. package/dist/parser/ast-parser.d.ts.map +1 -0
  603. package/dist/parser/ast-parser.js +65 -0
  604. package/dist/parser/ast-parser.js.map +1 -0
  605. package/dist/parser/definition-extractor.d.ts +29 -0
  606. package/dist/parser/definition-extractor.d.ts.map +1 -0
  607. package/dist/parser/definition-extractor.js +379 -0
  608. package/dist/parser/definition-extractor.js.map +1 -0
  609. package/dist/parser/reference-extractor.d.ts +72 -0
  610. package/dist/parser/reference-extractor.d.ts.map +1 -0
  611. package/dist/parser/reference-extractor.js +759 -0
  612. package/dist/parser/reference-extractor.js.map +1 -0
  613. package/dist/utils/file-scanner.d.ts +6 -0
  614. package/dist/utils/file-scanner.d.ts.map +1 -0
  615. package/dist/utils/file-scanner.js +33 -0
  616. package/dist/utils/file-scanner.js.map +1 -0
  617. package/dist/web/api-transforms.d.ts +4 -0
  618. package/dist/web/api-transforms.d.ts.map +1 -0
  619. package/dist/web/api-transforms.js +4 -0
  620. package/dist/web/api-transforms.js.map +1 -0
  621. package/dist/web/server.d.ts +16 -0
  622. package/dist/web/server.d.ts.map +1 -0
  623. package/dist/web/server.js +229 -0
  624. package/dist/web/server.js.map +1 -0
  625. package/dist/web/server.test.d.ts +2 -0
  626. package/dist/web/server.test.d.ts.map +1 -0
  627. package/dist/web/server.test.js +505 -0
  628. package/dist/web/server.test.js.map +1 -0
  629. package/dist/web/transforms/flow-transforms.d.ts +117 -0
  630. package/dist/web/transforms/flow-transforms.d.ts.map +1 -0
  631. package/dist/web/transforms/flow-transforms.js +202 -0
  632. package/dist/web/transforms/flow-transforms.js.map +1 -0
  633. package/dist/web/transforms/index.d.ts +4 -0
  634. package/dist/web/transforms/index.d.ts.map +1 -0
  635. package/dist/web/transforms/index.js +4 -0
  636. package/dist/web/transforms/index.js.map +1 -0
  637. package/dist/web/transforms/module-transforms.d.ts +42 -0
  638. package/dist/web/transforms/module-transforms.d.ts.map +1 -0
  639. package/dist/web/transforms/module-transforms.js +64 -0
  640. package/dist/web/transforms/module-transforms.js.map +1 -0
  641. package/dist/web/transforms/symbol-transforms.d.ts +31 -0
  642. package/dist/web/transforms/symbol-transforms.d.ts.map +1 -0
  643. package/dist/web/transforms/symbol-transforms.js +95 -0
  644. package/dist/web/transforms/symbol-transforms.js.map +1 -0
  645. package/package.json +96 -0
  646. package/ui/dist/assets/index-DP3dRMlh.js +268 -0
  647. package/ui/dist/assets/index-DP3dRMlh.js.map +1 -0
  648. package/ui/dist/assets/index-Db204Xn1.css +1 -0
  649. package/ui/dist/index.html +67 -0
@@ -0,0 +1,395 @@
1
+ /**
2
+ * Prompt builders for the two-phase module tree LLM process.
3
+ */
4
+ /**
5
+ * Build the system prompt for Phase 1 (tree structure generation).
6
+ */
7
+ export function buildTreeSystemPrompt() {
8
+ return `You are a software architect designing a module structure for a codebase.
9
+ The root "project" module already exists. Propose child modules to organize the codebase.
10
+
11
+ ## Your Task
12
+ Analyze the provided domain/role information and directory structure to propose a hierarchical module tree.
13
+ The tree should reflect logical groupings of functionality, not just mirror the file system.
14
+
15
+ ## Output Format
16
+ Respond with **only** a CSV table:
17
+
18
+ \`\`\`csv
19
+ type,parent_path,slug,name,description,is_test
20
+ module,project,frontend,"Frontend","UI components and screens",false
21
+ module,project,backend,"Backend","Server-side logic and APIs",false
22
+ module,project,testing,"Testing","Test utilities and helpers",true
23
+ module,project.frontend,screens,"Screens","Application screens",false
24
+ module,project.frontend,components,"Components","Reusable UI components",false
25
+ module,project.backend,services,"Services","Business logic services",false
26
+ module,project.backend,api,"API","HTTP endpoint handlers",false
27
+ module,project.testing,factories,"Test Factories","Mock data generators for tests",true
28
+ \`\`\`
29
+
30
+ ## Test Classification
31
+ For each module, set is_test to "true" if the module exists solely to support testing:
32
+ - Test utilities, mock factories, fixture generators, test helpers
33
+ - Test data builders, spec runners, integration test support
34
+ - Anything that wouldn't ship in a production build
35
+
36
+ Set is_test to "false" for all production code modules.
37
+ Test classification is inherited: if a parent is test, children should also be test.
38
+
39
+ ## Slug Rules
40
+ - Must start with lowercase letter
41
+ - Only lowercase letters, numbers, and hyphens allowed
42
+ - No consecutive hyphens (e.g., "my--module" is invalid)
43
+ - No trailing hyphens (e.g., "my-module-" is invalid)
44
+ - Maximum 50 characters
45
+
46
+ ## Guidelines
47
+ - Create 3-5 levels of depth at most
48
+ - Group by functionality/domain, not by file type
49
+ - Use domain tags to inform module boundaries
50
+ - Consider architectural layers (e.g., presentation, business logic, data)
51
+ - Keep module names concise but descriptive
52
+ - Each parent_path must be a valid path (either "project" or a previously defined module)
53
+ - For API layers (controllers, routes, services), create entity-specific modules:
54
+ - backend.api.controllers.users (not just backend.api.controllers)
55
+ - backend.api.controllers.products
56
+ - backend.services.user-management
57
+ This enables accurate per-entity flow tracing.
58
+
59
+ ## Business Domain Parity (CRITICAL)
60
+ - Every business entity domain MUST be a first-class branch.
61
+ If the codebase has customers, vehicles, and sales — each gets equal treatment.
62
+ Do NOT bury one domain under "Infrastructure" or "Misc" while others get their own branch.
63
+ The domains list below tells you which business entities exist — ensure each one appears
64
+ in the tree at the same structural level.
65
+
66
+ ## Test Code Segregation
67
+ - Test/spec code MUST go in its own top-level branch (e.g., project.testing).
68
+ Do NOT mix test helpers, mocks, fixtures, or data generators into business domain branches.
69
+ Use the symbol names, file paths, purposes, and domain tags to determine what is test code —
70
+ look for test utilities, mock factories, fixture generators, and spec helpers.
71
+
72
+ ## Infrastructure Scope
73
+ - The "infrastructure" or "utility" branch should ONLY contain true cross-cutting concerns:
74
+ database connections, logging, configuration, error handling base classes.
75
+ Business logic services, controllers, and routes are NOT infrastructure —
76
+ they belong under their respective business domain branches.`;
77
+ }
78
+ /**
79
+ * Build the user prompt for Phase 1 (tree structure generation).
80
+ */
81
+ export function buildTreeUserPrompt(context) {
82
+ const parts = [];
83
+ parts.push('## Codebase Overview');
84
+ parts.push(`Total symbols: ${context.totalSymbolCount}`);
85
+ if (context.maxModules && context.maxModules > 0) {
86
+ const initialTarget = Math.floor(context.maxModules * 0.4);
87
+ parts.push(`Module budget: ${context.maxModules} total. Create ~${initialTarget} modules now — oversized leaves will be split automatically later. Focus on the top 2–3 levels.`);
88
+ }
89
+ parts.push('');
90
+ // Domains with sample symbols
91
+ parts.push(`## Domains Found (${context.domains.length})`);
92
+ parts.push('');
93
+ for (const domain of context.domains) {
94
+ parts.push(`### ${domain.domain} (${domain.count} symbols)`);
95
+ parts.push('Sample symbols:');
96
+ for (const sym of domain.sampleSymbols) {
97
+ const roleStr = sym.role ? ` [${sym.role}]` : '';
98
+ parts.push(`- ${sym.name} (${sym.kind})${roleStr}`);
99
+ }
100
+ parts.push('');
101
+ }
102
+ // Directory structure (full — the LLM needs the complete picture to design modules)
103
+ parts.push('## Directory Structure');
104
+ for (const dir of context.directoryStructure) {
105
+ parts.push(`- ${dir.path} (${dir.symbolCount} symbols)`);
106
+ }
107
+ parts.push('');
108
+ parts.push('Propose a module tree structure in CSV format.');
109
+ return parts.join('\n');
110
+ }
111
+ // ============================================================
112
+ // Helpers
113
+ // ============================================================
114
+ /**
115
+ * Check if a file path is a test file based on naming conventions.
116
+ */
117
+ export function isTestFile(filePath) {
118
+ const segments = filePath.split('/');
119
+ const fileName = segments[segments.length - 1] ?? '';
120
+ return (fileName.endsWith('.test.ts') ||
121
+ fileName.endsWith('.test.tsx') ||
122
+ fileName.endsWith('.spec.ts') ||
123
+ fileName.endsWith('.spec.tsx') ||
124
+ segments.includes('__tests__'));
125
+ }
126
+ /**
127
+ * Build the system prompt for Phase 2 (symbol assignment).
128
+ */
129
+ export function buildAssignmentSystemPrompt() {
130
+ return `You are a software architect assigning symbols to modules.
131
+ Each symbol must be assigned to exactly ONE module path.
132
+
133
+ ## Your Task
134
+ For each symbol, choose the most appropriate module based on:
135
+ 1. The symbol's purpose and role
136
+ 2. The symbol's domain tags
137
+ 3. The symbol's file path
138
+ 4. The module descriptions
139
+
140
+ ## Output Format
141
+ Respond with **only** a CSV table:
142
+
143
+ \`\`\`csv
144
+ type,symbol_id,module_path
145
+ assignment,42,project.frontend.screens.login
146
+ assignment,87,project.backend.services.auth
147
+ assignment,123,project.shared.utils
148
+ \`\`\`
149
+
150
+ ## Guidelines
151
+ - Every symbol must be assigned to exactly one module
152
+ - Module paths must match existing modules in the tree
153
+ - Prefer more specific modules over general ones
154
+ - Group related symbols together
155
+ - Consider the file path as a hint but prioritize functionality
156
+
157
+ ## Completeness Requirement
158
+ CRITICAL: Your response MUST contain exactly one assignment row for EVERY symbol listed.
159
+ If unsure about the best module, assign to the closest parent module. Never skip a symbol.
160
+
161
+ ## Test Symbol Rules
162
+ - Symbols from test files (*.test.ts, *.spec.ts) that are NOT exported are test-file-local.
163
+ Assign them to the nearest test module (project.testing.*) — never to production modules.
164
+ - Only exported symbols from dedicated test utility files (test/helpers/*, test/factories/*)
165
+ belong in specific test infrastructure modules (e.g., project.testing.factories.customers).
166
+ - Non-exported symbols from test files are inline mocks/fixtures — assign them to a general
167
+ test module like project.testing.helpers or project.testing.mocks, not to granular sub-modules.`;
168
+ }
169
+ /**
170
+ * Format module tree for display in user prompt.
171
+ */
172
+ export function formatModuleTreeForPrompt(modules, directoryHints) {
173
+ const lines = [];
174
+ // Sort by depth then path
175
+ const sorted = [...modules].sort((a, b) => {
176
+ if (a.depth !== b.depth)
177
+ return a.depth - b.depth;
178
+ return a.fullPath.localeCompare(b.fullPath);
179
+ });
180
+ for (const mod of sorted) {
181
+ const indent = ' '.repeat(mod.depth);
182
+ const desc = mod.description ? ` - ${mod.description}` : '';
183
+ const hints = directoryHints?.get(mod.id);
184
+ const hintStr = hints?.length ? ` [${hints.join(', ')}]` : '';
185
+ lines.push(`${indent}${mod.fullPath}: ${mod.name}${desc}${hintStr}`);
186
+ }
187
+ return lines.join('\n');
188
+ }
189
+ /**
190
+ * Build the user prompt for Phase 2 (symbol assignment batch).
191
+ */
192
+ export function buildAssignmentUserPrompt(modules, symbols, directoryHints) {
193
+ const parts = [];
194
+ // Module tree
195
+ parts.push('## Available Modules');
196
+ parts.push('');
197
+ parts.push(formatModuleTreeForPrompt(modules, directoryHints));
198
+ parts.push('');
199
+ // Symbols to assign
200
+ parts.push(`## Symbols to Assign (${symbols.length})`);
201
+ parts.push('');
202
+ for (const sym of symbols) {
203
+ parts.push(`### #${sym.id}: ${sym.name} (${sym.kind})`);
204
+ parts.push(`File: ${sym.filePath}`);
205
+ if (!sym.isExported) {
206
+ parts.push('Exported: no (file-local symbol)');
207
+ }
208
+ if (isTestFile(sym.filePath)) {
209
+ parts.push('Test file: yes');
210
+ }
211
+ if (sym.purpose) {
212
+ parts.push(`Purpose: ${sym.purpose}`);
213
+ }
214
+ if (sym.domain && sym.domain.length > 0) {
215
+ parts.push(`Domains: ${sym.domain.join(', ')}`);
216
+ }
217
+ if (sym.role) {
218
+ parts.push(`Role: ${sym.role}`);
219
+ }
220
+ parts.push('');
221
+ }
222
+ parts.push(`IMPORTANT: You MUST output exactly ${symbols.length} assignment rows — one for each of the ${symbols.length} symbols above. Do not skip any.`);
223
+ return parts.join('\n');
224
+ }
225
+ /**
226
+ * Convert AnnotatedSymbolInfo to SymbolForAssignment.
227
+ */
228
+ export function toSymbolForAssignment(sym) {
229
+ return {
230
+ id: sym.id,
231
+ name: sym.name,
232
+ kind: sym.kind,
233
+ filePath: sym.filePath,
234
+ isExported: sym.isExported,
235
+ purpose: sym.purpose,
236
+ domain: sym.domain,
237
+ role: sym.role,
238
+ };
239
+ }
240
+ /**
241
+ * Build the system prompt for Phase 3 (module deepening).
242
+ */
243
+ export function buildDeepenSystemPrompt() {
244
+ return `You are a software architect splitting a large module into smaller sub-modules.
245
+
246
+ ## Your Task
247
+ A module has too many members and needs to be split into 2-5 smaller sub-modules.
248
+ Analyze the member symbols and propose sub-modules based on patterns in:
249
+ - Names (e.g., use*Customer* → customers sub-module)
250
+ - File paths (same file often = same sub-module)
251
+ - Functionality (CRUD operations, queries, mutations, etc.)
252
+ - Entity/domain groupings (customers, sales, vehicles, etc.)
253
+
254
+ ## Output Format
255
+ Respond with **only** a CSV table with two row types:
256
+
257
+ \`\`\`csv
258
+ type,parent_path,slug,name,description,definition_id
259
+ module,project.frontend.hooks.data-fetching,customers,"Customer Hooks","Hooks for customer data",
260
+ module,project.frontend.hooks.data-fetching,sales,"Sales Hooks","Hooks for sales data",
261
+ reassign,project.frontend.hooks.data-fetching.customers,,,,42
262
+ reassign,project.frontend.hooks.data-fetching.customers,,,,43
263
+ reassign,project.frontend.hooks.data-fetching.sales,,,,87
264
+ \`\`\`
265
+
266
+ Row types:
267
+ - \`module\`: Creates a new sub-module. parent_path is the current module being split. Leave definition_id empty.
268
+ - \`reassign\`: Moves a symbol to a sub-module. parent_path is the target module path (new sub-module). definition_id is required, other fields empty.
269
+
270
+ ## Slug Rules
271
+ - Must start with lowercase letter
272
+ - Only lowercase letters, numbers, and hyphens allowed
273
+ - No consecutive hyphens
274
+ - No trailing hyphens
275
+ - Maximum 50 characters
276
+
277
+ ## Guidelines
278
+ - Create 2-5 sub-modules (not more)
279
+ - Every member MUST be reassigned to exactly one sub-module
280
+ - Group related symbols together
281
+ - Use clear, descriptive slugs based on the grouping pattern
282
+ - Do NOT leave any members in the parent module
283
+ - For API layer modules (controllers, routes, handlers), prioritize splitting by entity/domain
284
+ even if member count is low, because each entity typically has separate user flows`;
285
+ }
286
+ /**
287
+ * Build the user prompt for Phase 3 (module deepening).
288
+ */
289
+ export function buildDeepenUserPrompt(module) {
290
+ const parts = [];
291
+ parts.push('## Module to Split');
292
+ parts.push(`Path: ${module.fullPath}`);
293
+ parts.push(`Name: ${module.name}`);
294
+ parts.push(`Members (${module.members.length}):`);
295
+ parts.push('');
296
+ for (const member of module.members) {
297
+ const tags = [];
298
+ if (isTestFile(member.filePath))
299
+ tags.push('test-file');
300
+ if (!member.isExported)
301
+ tags.push('not exported');
302
+ const tagStr = tags.length > 0 ? ` [${tags.join(', ')}]` : '';
303
+ parts.push(`- #${member.definitionId}: ${member.name} (${member.kind}) from ${member.filePath}${tagStr}`);
304
+ }
305
+ parts.push('');
306
+ parts.push('Propose sub-modules and reassign all members to them.');
307
+ return parts.join('\n');
308
+ }
309
+ /**
310
+ * Build the system prompt for ancestor rebalancing.
311
+ */
312
+ export function buildRebalanceSystemPrompt() {
313
+ return `You are a software architect reviewing symbol assignments after a module was split into sub-modules.
314
+
315
+ ## Your Task
316
+ Symbols are currently assigned to ancestor (parent/grandparent) modules. New sub-modules have been created below.
317
+ Review each symbol and decide if it now fits better in one of the new sub-modules.
318
+ Only reassign symbols that clearly belong in a new sub-module — leave ambiguous ones where they are.
319
+
320
+ ## Output Format
321
+ Respond with **only** a CSV table. Only include rows for symbols you want to MOVE.
322
+ Symbols not mentioned will stay in their current module.
323
+
324
+ \`\`\`csv
325
+ type,symbol_id,module_path
326
+ assignment,42,project.frontend.hooks.customers
327
+ assignment,87,project.frontend.hooks.sales
328
+ \`\`\`
329
+
330
+ ## Guidelines
331
+ - Only move a symbol if the new sub-module is a clearly better fit
332
+ - Consider the symbol's name, kind, file path, and the sub-module descriptions
333
+ - When in doubt, leave the symbol where it is
334
+ - Module paths must match one of the new sub-modules listed below
335
+ - If no symbols should be moved, respond with just the CSV header`;
336
+ }
337
+ /**
338
+ * Build the system prompt for aggressive branch pushdown.
339
+ * Unlike rebalance (conservative), this pushes ALL direct members to children.
340
+ */
341
+ export function buildBranchPushdownSystemPrompt() {
342
+ return `You are a software architect pushing symbols from a parent module down to its children.
343
+
344
+ ## Your Task
345
+ A module has both direct members AND child modules. Every symbol should be moved to
346
+ the most appropriate child module. Only leave a symbol in the parent if NONE of the
347
+ children are even remotely relevant.
348
+
349
+ ## Output Format
350
+ Respond with **only** a CSV table. Include a row for EVERY symbol you want to move.
351
+
352
+ \`\`\`csv
353
+ type,symbol_id,module_path
354
+ assignment,42,project.frontend.hooks.customers
355
+ \`\`\`
356
+
357
+ ## Guidelines
358
+ - Move EVERY symbol to the most appropriate child module
359
+ - When choosing between children, prefer the child whose members share the same file or directory
360
+ - Consider symbol name, kind, and file path
361
+ - Module paths must match one of the child modules listed below
362
+ - Only leave a symbol in the parent if absolutely none of the children fit
363
+ - CRITICAL: Output a row for every symbol. Do not skip any.`;
364
+ }
365
+ /**
366
+ * Build the user prompt for ancestor rebalancing.
367
+ */
368
+ export function buildRebalanceUserPrompt(ancestorSymbols, newSubModules) {
369
+ const parts = [];
370
+ parts.push('## New Sub-Modules');
371
+ parts.push('');
372
+ for (const sub of newSubModules) {
373
+ const desc = sub.description ? ` - ${sub.description}` : '';
374
+ parts.push(`- ${sub.path}: ${sub.name}${desc}`);
375
+ }
376
+ parts.push('');
377
+ parts.push('## Symbols Currently in Ancestor Modules');
378
+ parts.push('');
379
+ for (const group of ancestorSymbols) {
380
+ parts.push(`### ${group.modulePath} (${group.symbols.length} symbols)`);
381
+ for (const sym of group.symbols) {
382
+ const tags = [];
383
+ if (isTestFile(sym.filePath))
384
+ tags.push('test-file');
385
+ if (!sym.isExported)
386
+ tags.push('not exported');
387
+ const tagStr = tags.length > 0 ? ` [${tags.join(', ')}]` : '';
388
+ parts.push(`- #${sym.id}: ${sym.name} (${sym.kind}) from ${sym.filePath}${tagStr}`);
389
+ }
390
+ parts.push('');
391
+ }
392
+ parts.push('Reassign any symbols that now fit better in the new sub-modules.');
393
+ return parts.join('\n');
394
+ }
395
+ //# sourceMappingURL=module-prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module-prompts.js","sourceRoot":"","sources":["../../../../src/commands/llm/_shared/module-prompts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Process group detection via import graph connectivity (union-find).
3
+ *
4
+ * Replaces the old layer-utils.ts which hardcoded frontend/backend classification.
5
+ * Instead of classifying modules by path keywords, we compute connected components
6
+ * in the non-type-only import graph. Modules whose files share a connected component
7
+ * are in the same OS process. Modules with no import connectivity are in separate
8
+ * processes and may communicate via runtime protocols (HTTP, IPC, queues, etc.).
9
+ */
10
+ import type { IndexDatabase } from '../../../db/database-facade.js';
11
+ import type { Module } from '../../../db/schema.js';
12
+ export interface ProcessGroups {
13
+ /** moduleId → groupId */
14
+ moduleToGroup: Map<number, number>;
15
+ /** groupId → modules in that group */
16
+ groupToModules: Map<number, Module[]>;
17
+ /** Number of distinct process groups */
18
+ groupCount: number;
19
+ }
20
+ /**
21
+ * Compute process groups from import graph connectivity.
22
+ *
23
+ * 1. Get all file→module mappings
24
+ * 2. Get runtime (non-type-only) import edges between files
25
+ * 3. Union-find on file IDs using the edges → each file gets a group representative
26
+ * 4. Map each module to its group via its files' representatives (majority vote)
27
+ * 5. Build the ProcessGroups result
28
+ */
29
+ export declare function computeProcessGroups(db: IndexDatabase): ProcessGroups;
30
+ /**
31
+ * Check if two modules are in the same process group.
32
+ */
33
+ export declare function areSameProcess(fromId: number, toId: number, groups: ProcessGroups): boolean;
34
+ /**
35
+ * Human-readable description of the process relationship between two modules.
36
+ */
37
+ export declare function getProcessDescription(fromId: number, toId: number, groups: ProcessGroups): string;
38
+ /**
39
+ * Derive a label for a process group from its modules' common ancestor path.
40
+ *
41
+ * - If all modules start with `project.frontend.*` → label is "frontend"
42
+ * - If mixed → use the depth-1 ancestors as the label (e.g., "backend, shared")
43
+ */
44
+ export declare function getProcessGroupLabel(modules: Module[]): string;
45
+ /**
46
+ * Get all pairs of process groups for cross-process inference.
47
+ * Returns pairs of (groupA modules, groupB modules) for each unique group pair.
48
+ * Excludes singleton groups — a single-module group has no internal structure
49
+ * worth inferring cross-process communication for.
50
+ */
51
+ export declare function getCrossProcessGroupPairs(groups: ProcessGroups): Array<[Module[], Module[]]>;
52
+ //# sourceMappingURL=process-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-utils.d.ts","sourceRoot":"","sources":["../../../../src/commands/llm/_shared/process-utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,WAAW,aAAa;IAC5B,yBAAyB;IACzB,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,sCAAsC;IACtC,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACtC,wCAAwC;IACxC,UAAU,EAAE,MAAM,CAAC;CACpB;AAmDD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAAC,EAAE,EAAE,aAAa,GAAG,aAAa,CAoErE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAQ3F;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,MAAM,CAKjG;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CA6C9D;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,aAAa,GAAG,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAkB5F"}
@@ -0,0 +1,214 @@
1
+ /**
2
+ * Process group detection via import graph connectivity (union-find).
3
+ *
4
+ * Replaces the old layer-utils.ts which hardcoded frontend/backend classification.
5
+ * Instead of classifying modules by path keywords, we compute connected components
6
+ * in the non-type-only import graph. Modules whose files share a connected component
7
+ * are in the same OS process. Modules with no import connectivity are in separate
8
+ * processes and may communicate via runtime protocols (HTTP, IPC, queues, etc.).
9
+ */
10
+ // ============================================================
11
+ // Union-Find
12
+ // ============================================================
13
+ class UnionFind {
14
+ parent = new Map();
15
+ rank = new Map();
16
+ find(x) {
17
+ if (!this.parent.has(x)) {
18
+ this.parent.set(x, x);
19
+ this.rank.set(x, 0);
20
+ }
21
+ let root = x;
22
+ while (this.parent.get(root) !== root) {
23
+ root = this.parent.get(root);
24
+ }
25
+ // Path compression
26
+ let current = x;
27
+ while (current !== root) {
28
+ const next = this.parent.get(current);
29
+ this.parent.set(current, root);
30
+ current = next;
31
+ }
32
+ return root;
33
+ }
34
+ union(a, b) {
35
+ const rootA = this.find(a);
36
+ const rootB = this.find(b);
37
+ if (rootA === rootB)
38
+ return;
39
+ const rankA = this.rank.get(rootA);
40
+ const rankB = this.rank.get(rootB);
41
+ if (rankA < rankB) {
42
+ this.parent.set(rootA, rootB);
43
+ }
44
+ else if (rankA > rankB) {
45
+ this.parent.set(rootB, rootA);
46
+ }
47
+ else {
48
+ this.parent.set(rootB, rootA);
49
+ this.rank.set(rootA, rankA + 1);
50
+ }
51
+ }
52
+ }
53
+ // ============================================================
54
+ // Public API
55
+ // ============================================================
56
+ /**
57
+ * Compute process groups from import graph connectivity.
58
+ *
59
+ * 1. Get all file→module mappings
60
+ * 2. Get runtime (non-type-only) import edges between files
61
+ * 3. Union-find on file IDs using the edges → each file gets a group representative
62
+ * 4. Map each module to its group via its files' representatives (majority vote)
63
+ * 5. Build the ProcessGroups result
64
+ */
65
+ export function computeProcessGroups(db) {
66
+ const fileToModule = db.interactions.getFileToModuleMap();
67
+ const importEdges = db.interactions.getRuntimeImportEdges();
68
+ const allModules = db.modules.getAll();
69
+ // Build union-find over file IDs
70
+ const uf = new UnionFind();
71
+ // Ensure all files with module assignments are in the UF
72
+ for (const fileId of fileToModule.keys()) {
73
+ uf.find(fileId);
74
+ }
75
+ // Union files connected by runtime imports
76
+ for (const edge of importEdges) {
77
+ uf.union(edge.fromFileId, edge.toFileId);
78
+ }
79
+ // Map each module to its group representative via its files
80
+ // A module's group = the representative of the majority of its files
81
+ const moduleFiles = new Map(); // moduleId → fileIds
82
+ for (const [fileId, moduleId] of fileToModule) {
83
+ const files = moduleFiles.get(moduleId) ?? [];
84
+ files.push(fileId);
85
+ moduleFiles.set(moduleId, files);
86
+ }
87
+ const moduleToGroup = new Map();
88
+ const groupToModules = new Map();
89
+ for (const mod of allModules) {
90
+ const files = moduleFiles.get(mod.id);
91
+ if (!files || files.length === 0) {
92
+ // Module has no files with definitions → assign to its own isolated group
93
+ const isolatedGroup = -mod.id; // negative to avoid collision with file-based groups
94
+ moduleToGroup.set(mod.id, isolatedGroup);
95
+ groupToModules.set(isolatedGroup, [mod]);
96
+ continue;
97
+ }
98
+ // Count representative occurrences to find majority group
99
+ const repCounts = new Map();
100
+ for (const fileId of files) {
101
+ const rep = uf.find(fileId);
102
+ repCounts.set(rep, (repCounts.get(rep) ?? 0) + 1);
103
+ }
104
+ // Pick the representative with the most files
105
+ let bestRep = -1;
106
+ let bestCount = 0;
107
+ for (const [rep, count] of repCounts) {
108
+ if (count > bestCount) {
109
+ bestRep = rep;
110
+ bestCount = count;
111
+ }
112
+ }
113
+ moduleToGroup.set(mod.id, bestRep);
114
+ const existing = groupToModules.get(bestRep) ?? [];
115
+ existing.push(mod);
116
+ groupToModules.set(bestRep, existing);
117
+ }
118
+ return {
119
+ moduleToGroup,
120
+ groupToModules,
121
+ groupCount: groupToModules.size,
122
+ };
123
+ }
124
+ /**
125
+ * Check if two modules are in the same process group.
126
+ */
127
+ export function areSameProcess(fromId, toId, groups) {
128
+ const fromGroup = groups.moduleToGroup.get(fromId);
129
+ const toGroup = groups.moduleToGroup.get(toId);
130
+ // If either module has no group, treat as same-process (conservative)
131
+ if (fromGroup === undefined || toGroup === undefined)
132
+ return true;
133
+ return fromGroup === toGroup;
134
+ }
135
+ /**
136
+ * Human-readable description of the process relationship between two modules.
137
+ */
138
+ export function getProcessDescription(fromId, toId, groups) {
139
+ if (areSameProcess(fromId, toId, groups)) {
140
+ return 'same-process (shared import graph)';
141
+ }
142
+ return 'separate-process (no import connectivity)';
143
+ }
144
+ /**
145
+ * Derive a label for a process group from its modules' common ancestor path.
146
+ *
147
+ * - If all modules start with `project.frontend.*` → label is "frontend"
148
+ * - If mixed → use the depth-1 ancestors as the label (e.g., "backend, shared")
149
+ */
150
+ export function getProcessGroupLabel(modules) {
151
+ if (modules.length === 0)
152
+ return 'empty';
153
+ if (modules.length === 1) {
154
+ const parts = modules[0].fullPath.split('.');
155
+ return parts.length > 1 ? parts[1] : parts[0];
156
+ }
157
+ // Find common path prefix segments
158
+ const allParts = modules.map((m) => m.fullPath.split('.'));
159
+ const minLen = Math.min(...allParts.map((p) => p.length));
160
+ let commonDepth = 0;
161
+ for (let i = 0; i < minLen; i++) {
162
+ const seg = allParts[0][i];
163
+ if (allParts.every((p) => p[i] === seg)) {
164
+ commonDepth = i + 1;
165
+ }
166
+ else {
167
+ break;
168
+ }
169
+ }
170
+ if (commonDepth > 1) {
171
+ // Use the deepest common segment as the label (skip project root)
172
+ const commonPath = allParts[0].slice(0, commonDepth).join('.');
173
+ const parts = commonPath.split('.');
174
+ return parts.slice(1).join('.');
175
+ }
176
+ // Root-only or no common prefix: use the most frequent depth-1 segment
177
+ const segCounts = new Map();
178
+ for (const parts of allParts) {
179
+ const seg = parts.length > 1 ? parts[1] : parts[0];
180
+ segCounts.set(seg, (segCounts.get(seg) ?? 0) + 1);
181
+ }
182
+ let bestSeg = '';
183
+ let bestCount = 0;
184
+ for (const [seg, count] of segCounts) {
185
+ if (count > bestCount) {
186
+ bestSeg = seg;
187
+ bestCount = count;
188
+ }
189
+ }
190
+ return bestSeg;
191
+ }
192
+ /**
193
+ * Get all pairs of process groups for cross-process inference.
194
+ * Returns pairs of (groupA modules, groupB modules) for each unique group pair.
195
+ * Excludes singleton groups — a single-module group has no internal structure
196
+ * worth inferring cross-process communication for.
197
+ */
198
+ export function getCrossProcessGroupPairs(groups) {
199
+ // Filter out all singleton groups regardless of ID sign
200
+ const groupIds = Array.from(groups.groupToModules.keys()).filter((gid) => {
201
+ const mods = groups.groupToModules.get(gid);
202
+ return mods.length > 1;
203
+ });
204
+ const pairs = [];
205
+ for (let i = 0; i < groupIds.length; i++) {
206
+ for (let j = i + 1; j < groupIds.length; j++) {
207
+ const modulesA = groups.groupToModules.get(groupIds[i]);
208
+ const modulesB = groups.groupToModules.get(groupIds[j]);
209
+ pairs.push([modulesA, modulesB]);
210
+ }
211
+ }
212
+ return pairs;
213
+ }
214
+ //# sourceMappingURL=process-utils.js.map