homegraph 1.4.1 → 1.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (483) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +305 -268
  3. package/dist/bin/command-supervision.d.ts.map +1 -1
  4. package/dist/bin/command-supervision.js +7 -4
  5. package/dist/bin/command-supervision.js.map +1 -1
  6. package/dist/bin/homegraph.js +304 -81
  7. package/dist/bin/homegraph.js.map +1 -1
  8. package/dist/context/index.d.ts.map +1 -1
  9. package/dist/context/index.js +32 -11
  10. package/dist/context/index.js.map +1 -1
  11. package/dist/db/index.d.ts +143 -1
  12. package/dist/db/index.d.ts.map +1 -1
  13. package/dist/db/index.js +305 -28
  14. package/dist/db/index.js.map +1 -1
  15. package/dist/db/migrations.js +37 -37
  16. package/dist/db/queries.d.ts +43 -4
  17. package/dist/db/queries.d.ts.map +1 -1
  18. package/dist/db/queries.js +294 -170
  19. package/dist/db/queries.js.map +1 -1
  20. package/dist/db/schema.sql +203 -203
  21. package/dist/db/sqlite-adapter.d.ts +24 -17
  22. package/dist/db/sqlite-adapter.d.ts.map +1 -1
  23. package/dist/db/sqlite-adapter.js +292 -36
  24. package/dist/db/sqlite-adapter.js.map +1 -1
  25. package/dist/db/wal-valve.d.ts +15 -2
  26. package/dist/db/wal-valve.d.ts.map +1 -1
  27. package/dist/db/wal-valve.js +88 -6
  28. package/dist/db/wal-valve.js.map +1 -1
  29. package/dist/directory.js +5 -5
  30. package/dist/extraction/arkts-batch-worker.js +3 -2
  31. package/dist/extraction/arkts-batch-worker.js.map +1 -1
  32. package/dist/extraction/default-ignore.d.ts +39 -0
  33. package/dist/extraction/default-ignore.d.ts.map +1 -0
  34. package/dist/extraction/default-ignore.js +221 -0
  35. package/dist/extraction/default-ignore.js.map +1 -0
  36. package/dist/extraction/index.d.ts +9 -10
  37. package/dist/extraction/index.d.ts.map +1 -1
  38. package/dist/extraction/index.js +227 -323
  39. package/dist/extraction/index.js.map +1 -1
  40. package/dist/extraction/languages/arkts-viewtree.d.ts +2 -4
  41. package/dist/extraction/languages/arkts-viewtree.d.ts.map +1 -1
  42. package/dist/extraction/languages/arkts-viewtree.js +6 -21
  43. package/dist/extraction/languages/arkts-viewtree.js.map +1 -1
  44. package/dist/extraction/languages/arkts.d.ts +100 -6
  45. package/dist/extraction/languages/arkts.d.ts.map +1 -1
  46. package/dist/extraction/languages/arkts.js +1777 -173
  47. package/dist/extraction/languages/arkts.js.map +1 -1
  48. package/dist/extraction/store-worker.d.ts +20 -0
  49. package/dist/extraction/store-worker.d.ts.map +1 -0
  50. package/dist/extraction/store-worker.js +102 -0
  51. package/dist/extraction/store-worker.js.map +1 -0
  52. package/dist/extraction/store-writer.d.ts +48 -0
  53. package/dist/extraction/store-writer.d.ts.map +1 -0
  54. package/dist/extraction/store-writer.js +167 -0
  55. package/dist/extraction/store-writer.js.map +1 -0
  56. package/dist/extraction/tree-sitter.d.ts.map +1 -1
  57. package/dist/extraction/tree-sitter.js +47 -0
  58. package/dist/extraction/tree-sitter.js.map +1 -1
  59. package/dist/extraction/wasm/tree-sitter-c_sharp.wasm +0 -0
  60. package/dist/extraction/wasm/tree-sitter-cfml.wasm +0 -0
  61. package/dist/extraction/wasm/tree-sitter-cfquery.wasm +0 -0
  62. package/dist/extraction/wasm/tree-sitter-cfscript.wasm +0 -0
  63. package/dist/extraction/wasm/tree-sitter-cobol.wasm +0 -0
  64. package/dist/extraction/wasm/tree-sitter-erlang.wasm +0 -0
  65. package/dist/extraction/wasm/tree-sitter-nix.wasm +0 -0
  66. package/dist/extraction/wasm/tree-sitter-pascal.wasm +0 -0
  67. package/dist/extraction/wasm/tree-sitter-vbnet.wasm +0 -0
  68. package/dist/extraction/wasm-runtime-flags.d.ts +14 -4
  69. package/dist/extraction/wasm-runtime-flags.d.ts.map +1 -1
  70. package/dist/extraction/wasm-runtime-flags.js +55 -7
  71. package/dist/extraction/wasm-runtime-flags.js.map +1 -1
  72. package/dist/index.d.ts +16 -5
  73. package/dist/index.d.ts.map +1 -1
  74. package/dist/index.js +135 -97
  75. package/dist/index.js.map +1 -1
  76. package/dist/installer/instructions-template.js +9 -9
  77. package/dist/mcp/liveness-watchdog.d.ts +18 -0
  78. package/dist/mcp/liveness-watchdog.d.ts.map +1 -1
  79. package/dist/mcp/liveness-watchdog.js +185 -73
  80. package/dist/mcp/liveness-watchdog.js.map +1 -1
  81. package/dist/mcp/query-worker.d.ts +2 -2
  82. package/dist/mcp/query-worker.js +2 -2
  83. package/dist/mcp/server-instructions.js +47 -47
  84. package/dist/mcp/tools.d.ts.map +1 -1
  85. package/dist/mcp/tools.js +42 -26
  86. package/dist/mcp/tools.js.map +1 -1
  87. package/dist/reasoning/reasoner.js +32 -32
  88. package/dist/resolution/callback-synthesizer.d.ts +52 -16
  89. package/dist/resolution/callback-synthesizer.d.ts.map +1 -1
  90. package/dist/resolution/callback-synthesizer.js +234 -180
  91. package/dist/resolution/callback-synthesizer.js.map +1 -1
  92. package/dist/resolution/cooperative-yield.d.ts +10 -2
  93. package/dist/resolution/cooperative-yield.d.ts.map +1 -1
  94. package/dist/resolution/cooperative-yield.js +6 -4
  95. package/dist/resolution/cooperative-yield.js.map +1 -1
  96. package/dist/resolution/frameworks/go.d.ts.map +1 -1
  97. package/dist/resolution/frameworks/go.js +29 -6
  98. package/dist/resolution/frameworks/go.js.map +1 -1
  99. package/dist/resolution/import-resolver.d.ts +2 -3
  100. package/dist/resolution/import-resolver.d.ts.map +1 -1
  101. package/dist/resolution/import-resolver.js +166 -7
  102. package/dist/resolution/import-resolver.js.map +1 -1
  103. package/dist/resolution/index.d.ts +87 -2
  104. package/dist/resolution/index.d.ts.map +1 -1
  105. package/dist/resolution/index.js +739 -131
  106. package/dist/resolution/index.js.map +1 -1
  107. package/dist/resolution/memory-budget.d.ts +48 -0
  108. package/dist/resolution/memory-budget.d.ts.map +1 -0
  109. package/dist/resolution/memory-budget.js +162 -0
  110. package/dist/resolution/memory-budget.js.map +1 -0
  111. package/dist/resolution/name-matcher.d.ts +12 -1
  112. package/dist/resolution/name-matcher.d.ts.map +1 -1
  113. package/dist/resolution/name-matcher.js +439 -97
  114. package/dist/resolution/name-matcher.js.map +1 -1
  115. package/dist/resolution/resolver-pool.d.ts +106 -0
  116. package/dist/resolution/resolver-pool.d.ts.map +1 -0
  117. package/dist/resolution/resolver-pool.js +344 -0
  118. package/dist/resolution/resolver-pool.js.map +1 -0
  119. package/dist/resolution/resolver-worker.d.ts +17 -0
  120. package/dist/resolution/resolver-worker.d.ts.map +1 -0
  121. package/dist/resolution/resolver-worker.js +141 -0
  122. package/dist/resolution/resolver-worker.js.map +1 -0
  123. package/dist/resolution/types.d.ts +3 -0
  124. package/dist/resolution/types.d.ts.map +1 -1
  125. package/dist/spec/build/diff-parser.d.ts +55 -0
  126. package/dist/spec/build/diff-parser.d.ts.map +1 -0
  127. package/dist/spec/build/diff-parser.js +205 -0
  128. package/dist/spec/build/diff-parser.js.map +1 -0
  129. package/dist/spec/build/pipeline.d.ts +54 -0
  130. package/dist/spec/build/pipeline.d.ts.map +1 -0
  131. package/dist/spec/build/pipeline.js +170 -0
  132. package/dist/spec/build/pipeline.js.map +1 -0
  133. package/dist/spec/build/scan.d.ts +48 -0
  134. package/dist/spec/build/scan.d.ts.map +1 -0
  135. package/dist/spec/build/scan.js +89 -0
  136. package/dist/spec/build/scan.js.map +1 -0
  137. package/dist/spec/build/scope-resolver.d.ts +50 -0
  138. package/dist/spec/build/scope-resolver.d.ts.map +1 -0
  139. package/dist/spec/build/scope-resolver.js +105 -0
  140. package/dist/spec/build/scope-resolver.js.map +1 -0
  141. package/dist/spec/build/spec-extractor.d.ts +74 -0
  142. package/dist/spec/build/spec-extractor.d.ts.map +1 -0
  143. package/dist/spec/build/spec-extractor.js +344 -0
  144. package/dist/spec/build/spec-extractor.js.map +1 -0
  145. package/dist/spec/config.d.ts +35 -1
  146. package/dist/spec/config.d.ts.map +1 -1
  147. package/dist/spec/config.js +30 -5
  148. package/dist/spec/config.js.map +1 -1
  149. package/dist/spec/db/commit-node.js +4 -4
  150. package/dist/spec/db/fragment-node.js +10 -10
  151. package/dist/spec/db/fts.d.ts.map +1 -1
  152. package/dist/spec/db/fts.js +27 -58
  153. package/dist/spec/db/fts.js.map +1 -1
  154. package/dist/spec/db/index.d.ts +5 -3
  155. package/dist/spec/db/index.d.ts.map +1 -1
  156. package/dist/spec/db/index.js +16 -1
  157. package/dist/spec/db/index.js.map +1 -1
  158. package/dist/spec/db/persist.d.ts +45 -0
  159. package/dist/spec/db/persist.d.ts.map +1 -0
  160. package/dist/spec/db/persist.js +66 -0
  161. package/dist/spec/db/persist.js.map +1 -0
  162. package/dist/spec/db/relations.d.ts +80 -1
  163. package/dist/spec/db/relations.d.ts.map +1 -1
  164. package/dist/spec/db/relations.js +218 -47
  165. package/dist/spec/db/relations.js.map +1 -1
  166. package/dist/spec/db/schema.d.ts +4 -0
  167. package/dist/spec/db/schema.d.ts.map +1 -1
  168. package/dist/spec/db/schema.js +10 -6
  169. package/dist/spec/db/schema.js.map +1 -1
  170. package/dist/spec/db/schema.sql +121 -117
  171. package/dist/spec/db/spec-node.d.ts +5 -0
  172. package/dist/spec/db/spec-node.d.ts.map +1 -1
  173. package/dist/spec/db/spec-node.js +15 -9
  174. package/dist/spec/db/spec-node.js.map +1 -1
  175. package/dist/spec/db/sql-utils.d.ts +11 -0
  176. package/dist/spec/db/sql-utils.d.ts.map +1 -0
  177. package/dist/spec/db/sql-utils.js +19 -0
  178. package/dist/spec/db/sql-utils.js.map +1 -0
  179. package/dist/spec/evolve/cluster-context.d.ts +30 -0
  180. package/dist/spec/evolve/cluster-context.d.ts.map +1 -0
  181. package/dist/spec/evolve/cluster-context.js +78 -0
  182. package/dist/spec/evolve/cluster-context.js.map +1 -0
  183. package/dist/spec/evolve/commit-spec-analyzer.d.ts +51 -0
  184. package/dist/spec/evolve/commit-spec-analyzer.d.ts.map +1 -0
  185. package/dist/spec/evolve/commit-spec-analyzer.js +88 -0
  186. package/dist/spec/evolve/commit-spec-analyzer.js.map +1 -0
  187. package/dist/spec/evolve/commit-spec-persister.d.ts +53 -0
  188. package/dist/spec/evolve/commit-spec-persister.d.ts.map +1 -0
  189. package/dist/spec/evolve/commit-spec-persister.js +93 -0
  190. package/dist/spec/evolve/commit-spec-persister.js.map +1 -0
  191. package/dist/spec/evolve/impact-locator.d.ts +23 -7
  192. package/dist/spec/evolve/impact-locator.d.ts.map +1 -1
  193. package/dist/spec/evolve/impact-locator.js +58 -14
  194. package/dist/spec/evolve/impact-locator.js.map +1 -1
  195. package/dist/spec/evolve/pipeline.d.ts +62 -25
  196. package/dist/spec/evolve/pipeline.d.ts.map +1 -1
  197. package/dist/spec/evolve/pipeline.js +436 -457
  198. package/dist/spec/evolve/pipeline.js.map +1 -1
  199. package/dist/spec/evolve/spec-rewriter.d.ts +13 -13
  200. package/dist/spec/evolve/spec-rewriter.d.ts.map +1 -1
  201. package/dist/spec/evolve/spec-rewriter.js +45 -45
  202. package/dist/spec/evolve/spec-rewriter.js.map +1 -1
  203. package/dist/spec/git/commits.d.ts +85 -0
  204. package/dist/spec/git/commits.d.ts.map +1 -0
  205. package/dist/spec/git/commits.js +218 -0
  206. package/dist/spec/git/commits.js.map +1 -0
  207. package/dist/spec/git/exec.d.ts +13 -0
  208. package/dist/spec/git/exec.d.ts.map +1 -0
  209. package/dist/spec/git/exec.js +19 -0
  210. package/dist/spec/git/exec.js.map +1 -0
  211. package/dist/spec/git/index.d.ts +9 -0
  212. package/dist/spec/git/index.d.ts.map +1 -0
  213. package/dist/spec/git/index.js +22 -0
  214. package/dist/spec/git/index.js.map +1 -0
  215. package/dist/spec/graph/index.d.ts +8 -0
  216. package/dist/spec/graph/index.d.ts.map +1 -0
  217. package/dist/spec/graph/index.js +17 -0
  218. package/dist/spec/graph/index.js.map +1 -0
  219. package/dist/spec/graph/queries.d.ts +6 -35
  220. package/dist/spec/graph/queries.d.ts.map +1 -1
  221. package/dist/spec/graph/queries.js +71 -248
  222. package/dist/spec/graph/queries.js.map +1 -1
  223. package/dist/spec/llm/agent-client.d.ts +59 -0
  224. package/dist/spec/llm/agent-client.d.ts.map +1 -0
  225. package/dist/spec/llm/agent-client.js +213 -0
  226. package/dist/spec/llm/agent-client.js.map +1 -0
  227. package/dist/spec/llm/agents/claude-code.d.ts +32 -0
  228. package/dist/spec/llm/agents/claude-code.d.ts.map +1 -0
  229. package/dist/spec/llm/agents/claude-code.js +125 -0
  230. package/dist/spec/llm/agents/claude-code.js.map +1 -0
  231. package/dist/spec/llm/agents/codex.d.ts +32 -0
  232. package/dist/spec/llm/agents/codex.d.ts.map +1 -0
  233. package/dist/spec/llm/agents/codex.js +145 -0
  234. package/dist/spec/llm/agents/codex.js.map +1 -0
  235. package/dist/spec/llm/agents/detect-utils.d.ts +28 -0
  236. package/dist/spec/llm/agents/detect-utils.d.ts.map +1 -0
  237. package/dist/spec/llm/agents/detect-utils.js +91 -0
  238. package/dist/spec/llm/agents/detect-utils.js.map +1 -0
  239. package/dist/spec/llm/agents/deveco-code.d.ts +33 -0
  240. package/dist/spec/llm/agents/deveco-code.d.ts.map +1 -0
  241. package/dist/spec/llm/agents/deveco-code.js +165 -0
  242. package/dist/spec/llm/agents/deveco-code.js.map +1 -0
  243. package/dist/spec/llm/agents/index.d.ts +31 -0
  244. package/dist/spec/llm/agents/index.d.ts.map +1 -0
  245. package/dist/spec/llm/agents/index.js +65 -0
  246. package/dist/spec/llm/agents/index.js.map +1 -0
  247. package/dist/spec/llm/agents/types.d.ts +76 -0
  248. package/dist/spec/llm/agents/types.d.ts.map +1 -0
  249. package/dist/spec/llm/agents/types.js +15 -0
  250. package/dist/spec/llm/agents/types.js.map +1 -0
  251. package/dist/spec/llm/client.d.ts +31 -11
  252. package/dist/spec/llm/client.d.ts.map +1 -1
  253. package/dist/spec/llm/client.js +143 -81
  254. package/dist/spec/llm/client.js.map +1 -1
  255. package/dist/spec/llm/factory.d.ts +41 -0
  256. package/dist/spec/llm/factory.d.ts.map +1 -0
  257. package/dist/spec/llm/factory.js +80 -0
  258. package/dist/spec/llm/factory.js.map +1 -0
  259. package/dist/spec/llm/prompts.d.ts +24 -8
  260. package/dist/spec/llm/prompts.d.ts.map +1 -1
  261. package/dist/spec/llm/prompts.js +112 -62
  262. package/dist/spec/llm/prompts.js.map +1 -1
  263. package/dist/spec/llm/retry.d.ts +53 -0
  264. package/dist/spec/llm/retry.d.ts.map +1 -0
  265. package/dist/spec/llm/retry.js +153 -0
  266. package/dist/spec/llm/retry.js.map +1 -0
  267. package/dist/spec/mine/clustering/features.d.ts +38 -0
  268. package/dist/spec/mine/clustering/features.d.ts.map +1 -0
  269. package/dist/spec/mine/clustering/features.js +108 -0
  270. package/dist/spec/mine/clustering/features.js.map +1 -0
  271. package/dist/spec/mine/clustering/index.d.ts +62 -0
  272. package/dist/spec/mine/clustering/index.d.ts.map +1 -0
  273. package/dist/spec/mine/clustering/index.js +259 -0
  274. package/dist/spec/mine/clustering/index.js.map +1 -0
  275. package/dist/spec/mine/clustering/leiden.d.ts +61 -0
  276. package/dist/spec/mine/clustering/leiden.d.ts.map +1 -0
  277. package/dist/spec/mine/clustering/leiden.js +489 -0
  278. package/dist/spec/mine/clustering/leiden.js.map +1 -0
  279. package/dist/spec/mine/clustering/text-similarity.d.ts +22 -0
  280. package/dist/spec/mine/clustering/text-similarity.d.ts.map +1 -0
  281. package/dist/spec/mine/clustering/text-similarity.js +98 -0
  282. package/dist/spec/mine/clustering/text-similarity.js.map +1 -0
  283. package/dist/spec/mine/generator.d.ts +54 -0
  284. package/dist/spec/mine/generator.d.ts.map +1 -0
  285. package/dist/spec/mine/generator.js +267 -0
  286. package/dist/spec/mine/generator.js.map +1 -0
  287. package/dist/spec/mine/persist.d.ts +37 -0
  288. package/dist/spec/mine/persist.d.ts.map +1 -0
  289. package/dist/spec/mine/persist.js +170 -0
  290. package/dist/spec/mine/persist.js.map +1 -0
  291. package/dist/spec/mine/pipeline.d.ts +41 -0
  292. package/dist/spec/mine/pipeline.d.ts.map +1 -0
  293. package/dist/spec/mine/pipeline.js +236 -0
  294. package/dist/spec/mine/pipeline.js.map +1 -0
  295. package/dist/spec/mine/scanner.d.ts +59 -0
  296. package/dist/spec/mine/scanner.d.ts.map +1 -0
  297. package/dist/spec/mine/scanner.js +383 -0
  298. package/dist/spec/mine/scanner.js.map +1 -0
  299. package/dist/spec/types.d.ts +32 -0
  300. package/dist/spec/types.d.ts.map +1 -1
  301. package/dist/spec/ui/index.d.ts +9 -0
  302. package/dist/spec/ui/index.d.ts.map +1 -0
  303. package/dist/spec/ui/index.js +16 -0
  304. package/dist/spec/ui/index.js.map +1 -0
  305. package/dist/spec/ui/progress-handler.d.ts +33 -0
  306. package/dist/spec/ui/progress-handler.d.ts.map +1 -0
  307. package/dist/spec/ui/progress-handler.js +132 -0
  308. package/dist/spec/ui/progress-handler.js.map +1 -0
  309. package/dist/spec/ui/progress.d.ts +24 -0
  310. package/dist/spec/ui/progress.d.ts.map +1 -0
  311. package/dist/spec/ui/progress.js +13 -0
  312. package/dist/spec/ui/progress.js.map +1 -0
  313. package/dist/spec/utils/fs.d.ts +45 -0
  314. package/dist/spec/utils/fs.d.ts.map +1 -0
  315. package/dist/spec/utils/fs.js +163 -0
  316. package/dist/spec/utils/fs.js.map +1 -0
  317. package/dist/spec/utils/index.d.ts +12 -0
  318. package/dist/spec/utils/index.d.ts.map +1 -0
  319. package/dist/spec/utils/index.js +26 -0
  320. package/dist/spec/utils/index.js.map +1 -0
  321. package/dist/spec/utils/meta.d.ts +32 -0
  322. package/dist/spec/utils/meta.d.ts.map +1 -0
  323. package/dist/spec/utils/meta.js +122 -0
  324. package/dist/spec/utils/meta.js.map +1 -0
  325. package/dist/spec/utils/truncate.d.ts +86 -0
  326. package/dist/spec/utils/truncate.d.ts.map +1 -0
  327. package/dist/spec/utils/truncate.js +172 -0
  328. package/dist/spec/utils/truncate.js.map +1 -0
  329. package/dist/sync/watcher.d.ts +25 -1
  330. package/dist/sync/watcher.d.ts.map +1 -1
  331. package/dist/sync/watcher.js +76 -3
  332. package/dist/sync/watcher.js.map +1 -1
  333. package/dist/telemetry/index.js +3 -3
  334. package/dist/telemetry/index.js.map +1 -1
  335. package/dist/types.d.ts +3 -0
  336. package/dist/types.d.ts.map +1 -1
  337. package/package.json +62 -58
  338. package/scripts/_tmp-cfwk-resolve.log +0 -0
  339. package/scripts/_tmp-cfwk-sig.log +0 -0
  340. package/scripts/_tmp-cfwk-vt.log +0 -0
  341. package/scripts/add-lang/bench.sh +60 -60
  342. package/scripts/add-lang/check-grammar.mjs +75 -75
  343. package/scripts/add-lang/dump-ast.mjs +103 -103
  344. package/scripts/add-lang/verify-extraction.mjs +70 -70
  345. package/scripts/agent-eval/ab-adoption.sh +91 -91
  346. package/scripts/agent-eval/ab-hook.sh +86 -86
  347. package/scripts/agent-eval/ab-impl.sh +78 -78
  348. package/scripts/agent-eval/ab-new-vs-baseline.sh +102 -102
  349. package/scripts/agent-eval/ab-sufficiency.sh +78 -78
  350. package/scripts/agent-eval/arms-F.sh +21 -21
  351. package/scripts/agent-eval/arms-matrix.sh +37 -37
  352. package/scripts/agent-eval/audit.sh +68 -68
  353. package/scripts/agent-eval/bench-readme.sh +28 -28
  354. package/scripts/agent-eval/bench-why-repo.sh +22 -22
  355. package/scripts/agent-eval/block-read-hook.sh +19 -19
  356. package/scripts/agent-eval/hook-settings.json +15 -15
  357. package/scripts/agent-eval/itrun.sh +120 -120
  358. package/scripts/agent-eval/offload-eval-3arm.sh +72 -72
  359. package/scripts/agent-eval/offload-eval-cost.mjs +133 -133
  360. package/scripts/agent-eval/offload-eval-effort.mjs +108 -108
  361. package/scripts/agent-eval/offload-eval-frontload-matrix.sh +25 -25
  362. package/scripts/agent-eval/offload-eval-frontload.sh +47 -47
  363. package/scripts/agent-eval/offload-eval-ground-truth.json +18 -18
  364. package/scripts/agent-eval/offload-eval-hook.mjs +84 -84
  365. package/scripts/agent-eval/offload-eval-judge.mjs +103 -103
  366. package/scripts/agent-eval/offload-eval-matrix.sh +20 -20
  367. package/scripts/agent-eval/offload-eval-metrics.mjs +94 -94
  368. package/scripts/agent-eval/offload-eval-refs1.sh +50 -50
  369. package/scripts/agent-eval/offload-eval-setup.sh +24 -24
  370. package/scripts/agent-eval/offload-eval-styles.sh +71 -71
  371. package/scripts/agent-eval/offload-eval-summarize.mjs +68 -68
  372. package/scripts/agent-eval/offload-eval.md +76 -76
  373. package/scripts/agent-eval/parse-arms.mjs +116 -116
  374. package/scripts/agent-eval/parse-bench-readme.mjs +84 -84
  375. package/scripts/agent-eval/parse-run.mjs +45 -45
  376. package/scripts/agent-eval/parse-session.mjs +93 -93
  377. package/scripts/agent-eval/probe-context.mjs +21 -21
  378. package/scripts/agent-eval/probe-explore.mjs +40 -40
  379. package/scripts/agent-eval/probe-node.mjs +20 -20
  380. package/scripts/agent-eval/probe-sweep.mjs +119 -119
  381. package/scripts/agent-eval/probe-trace.mjs +20 -20
  382. package/scripts/agent-eval/redirect-read-hook.sh +38 -38
  383. package/scripts/agent-eval/repro-concurrent-explore.mjs +119 -119
  384. package/scripts/agent-eval/repro-daemon-clients.mjs +125 -125
  385. package/scripts/agent-eval/run-agent.sh +34 -34
  386. package/scripts/agent-eval/run-all.sh +75 -75
  387. package/scripts/agent-eval/run-arms.sh +56 -56
  388. package/scripts/agent-eval/seq-matrix.mjs +137 -137
  389. package/scripts/bench-arkts-init-rss.log +0 -0
  390. package/scripts/build-bundle.sh +123 -123
  391. package/scripts/exp_boundary_eval/README.md +247 -247
  392. package/scripts/exp_boundary_eval/__pycache__/_utils.cpython-310.pyc +0 -0
  393. package/scripts/exp_boundary_eval/__pycache__/_utils.cpython-38.pyc +0 -0
  394. package/scripts/exp_boundary_eval/__pycache__/analyze.cpython-310.pyc +0 -0
  395. package/scripts/exp_boundary_eval/__pycache__/analyze.cpython-38.pyc +0 -0
  396. package/scripts/exp_boundary_eval/__pycache__/deveco_arm.cpython-38.pyc +0 -0
  397. package/scripts/exp_boundary_eval/__pycache__/run_all.cpython-310.pyc +0 -0
  398. package/scripts/exp_boundary_eval/__pycache__/run_all.cpython-38.pyc +0 -0
  399. package/scripts/exp_boundary_eval/__pycache__/run_one.cpython-310.pyc +0 -0
  400. package/scripts/exp_boundary_eval/__pycache__/run_one.cpython-38.pyc +0 -0
  401. package/scripts/exp_boundary_eval/__pycache__/run_session.cpython-310.pyc +0 -0
  402. package/scripts/exp_boundary_eval/__pycache__/run_session.cpython-38.pyc +0 -0
  403. package/scripts/exp_boundary_eval/__pycache__/setup.cpython-310.pyc +0 -0
  404. package/scripts/exp_boundary_eval/__pycache__/setup.cpython-38.pyc +0 -0
  405. package/scripts/exp_boundary_eval/__pycache__/win_mcp_launcher.cpython-38.pyc +0 -0
  406. package/scripts/exp_boundary_eval/_test_mcp_chain.py +78 -78
  407. package/scripts/exp_boundary_eval/_test_stdin.py +8 -8
  408. package/scripts/exp_boundary_eval/_utils.py +1116 -1116
  409. package/scripts/exp_boundary_eval/analyze.py +1313 -1313
  410. package/scripts/exp_boundary_eval/deveco_arm.py +519 -519
  411. package/scripts/exp_boundary_eval/run_all.py +378 -378
  412. package/scripts/exp_boundary_eval/run_one.py +165 -165
  413. package/scripts/exp_boundary_eval/run_session.py +158 -158
  414. package/scripts/exp_boundary_eval/setup.py +120 -120
  415. package/scripts/exp_boundary_eval/win_mcp_launcher.py +73 -73
  416. package/scripts/exp_boundary_eval/win_mcp_stdio_wrap.js +36 -36
  417. package/scripts/exp_boundary_eval/win_node_launcher.py +24 -24
  418. package/scripts/extract-release-notes.mjs +130 -130
  419. package/scripts/local-install.sh +41 -41
  420. package/scripts/npm-sdk.js +75 -75
  421. package/scripts/npm-shim.js +275 -275
  422. package/scripts/ohos-sdk-publish.mjs +133 -133
  423. package/scripts/pack-npm.sh +119 -119
  424. package/scripts/prepare-release.mjs +270 -270
  425. package/scripts/probe-arkts-mem-why-run.log +0 -0
  426. package/scripts/probe-banner-livecard-ir.log +0 -0
  427. package/scripts/probe-cfwk-ast.stderr.log +0 -0
  428. package/scripts/probe-cfwk-ast.stdout.log +0 -0
  429. package/scripts/probe-cfwk-attr-shape.log +0 -0
  430. package/scripts/probe-cfwk-cfgdump.stderr.log +0 -0
  431. package/scripts/probe-cfwk-cfgdump.stdout.log +0 -0
  432. package/scripts/probe-cfwk-cvc.stderr.log +0 -0
  433. package/scripts/probe-cfwk-cvc.stdout.log +0 -0
  434. package/scripts/probe-cfwk-diag2.log +0 -0
  435. package/scripts/probe-cfwk-diag3.log +0 -0
  436. package/scripts/probe-cfwk-fedbg.stderr.log +0 -0
  437. package/scripts/probe-cfwk-fedbg.stdout.log +0 -0
  438. package/scripts/probe-cfwk-fileresult.log +0 -0
  439. package/scripts/probe-cfwk-fix.stderr.log +0 -0
  440. package/scripts/probe-cfwk-fix.stdout.log +0 -0
  441. package/scripts/probe-cfwk-fix2.stderr.log +0 -0
  442. package/scripts/probe-cfwk-fix2.stdout.log +0 -0
  443. package/scripts/probe-cfwk-fix3.stderr.log +0 -0
  444. package/scripts/probe-cfwk-fix3.stdout.log +0 -0
  445. package/scripts/probe-cfwk-foreach.log +0 -0
  446. package/scripts/probe-cfwk-getmethod-throw.log +0 -0
  447. package/scripts/probe-cfwk-hg-extract.log +0 -0
  448. package/scripts/probe-cfwk-pr1003-noprior.stderr.log +0 -0
  449. package/scripts/probe-cfwk-pr1003-noprior.stdout.log +0 -0
  450. package/scripts/probe-cfwk-pr1003.stderr.log +0 -0
  451. package/scripts/probe-cfwk-pr1003.stdout.log +0 -0
  452. package/scripts/probe-cfwk-preroot-noprior.stderr.log +0 -0
  453. package/scripts/probe-cfwk-preroot-noprior.stdout.log +0 -0
  454. package/scripts/probe-cfwk-preroot-prior.stderr.log +0 -0
  455. package/scripts/probe-cfwk-preroot-prior.stdout.log +0 -0
  456. package/scripts/probe-cfwk-preroot-skipstate.stderr.log +0 -0
  457. package/scripts/probe-cfwk-preroot-skipstate.stdout.log +0 -0
  458. package/scripts/probe-cfwk-resolve-sim.log +0 -0
  459. package/scripts/probe-cfwk-tree-shape.log +0 -0
  460. package/scripts/probe-cfwk-walk-abort.log +0 -0
  461. package/scripts/probe-cfwk.log +0 -0
  462. package/scripts/probe-force-index.log +0 -0
  463. package/scripts/probe-no-force-index.log +0 -0
  464. package/scripts/probe-samefile-ir.stderr.log +0 -0
  465. package/scripts/probe-samefile-ir.stdout.log +224 -0
  466. package/scripts/probe-sdk-vs-project.log +0 -0
  467. package/scripts/probe-viewtree-downgrade.log +0 -0
  468. package/dist/arkts/ohos-api-index.d.ts +0 -15
  469. package/dist/arkts/ohos-api-index.d.ts.map +0 -1
  470. package/dist/arkts/ohos-api-index.js +0 -190
  471. package/dist/arkts/ohos-api-index.js.map +0 -1
  472. package/dist/arkts/ohos-sdk-input.d.ts +0 -36
  473. package/dist/arkts/ohos-sdk-input.d.ts.map +0 -1
  474. package/dist/arkts/ohos-sdk-input.js +0 -214
  475. package/dist/arkts/ohos-sdk-input.js.map +0 -1
  476. package/dist/extraction/languages/arkts-state-decorators.d.ts +0 -13
  477. package/dist/extraction/languages/arkts-state-decorators.d.ts.map +0 -1
  478. package/dist/extraction/languages/arkts-state-decorators.js +0 -26
  479. package/dist/extraction/languages/arkts-state-decorators.js.map +0 -1
  480. package/dist/extraction/languages/ohos-api-consumer.d.ts +0 -34
  481. package/dist/extraction/languages/ohos-api-consumer.d.ts.map +0 -1
  482. package/dist/extraction/languages/ohos-api-consumer.js +0 -283
  483. package/dist/extraction/languages/ohos-api-consumer.js.map +0 -1
@@ -0,0 +1,259 @@
1
+ "use strict";
2
+ /**
3
+ * Commit Clusterer — multi-signal graph clustering for the `spec mine` pipeline.
4
+ *
5
+ * Groups commits by structural (AST symbol overlap), file-path, temporal,
6
+ * and commit-message similarity. Pure TypeScript implementation — no native
7
+ * dependencies required.
8
+ *
9
+ * Orchestrates the pieces in this directory:
10
+ * - `text-similarity` — tokenize / Jaccard / cosine / TF-IDF
11
+ * - `features` — per-commit feature extraction
12
+ * - `leiden` — generic Leiden community detection + tuning
13
+ *
14
+ * @module spec/mine/clustering
15
+ */
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.clusterCommits = clusterCommits;
18
+ const errors_1 = require("../../../errors");
19
+ const text_similarity_1 = require("./text-similarity");
20
+ const features_1 = require("./features");
21
+ const leiden_1 = require("./leiden");
22
+ // ---------------------------------------------------------------------------
23
+ // Similarity Computation
24
+ // ---------------------------------------------------------------------------
25
+ /**
26
+ * Compute multi-signal similarity between two commits.
27
+ *
28
+ * Weights:
29
+ * - Symbol overlap (Jaccard): 0.40
30
+ * - Spatial proximity (Jaccard): 0.15 (max of file-path and dir-prefix)
31
+ * - Message TF-IDF cosine: 0.25
32
+ * - Ticket reference overlap: 0.10
33
+ * - Temporal proximity: 0.10 (half-life 3 days)
34
+ *
35
+ * A cohesion penalty is applied as a multiplier when one commit has low
36
+ * symbol-per-file density (< 2.0), which is characteristic of mechanical
37
+ * refactors that should not bridge unrelated feature clusters.
38
+ */
39
+ function computeSimilarity(a, b, aSymbols, bSymbols, aFiles, bFiles, aDirs, bDirs, aTickets, bTickets, msgTfidfMatrix, aIdx, bIdx) {
40
+ // Symbol overlap — highest weight because AST-level diff is precise
41
+ const symbolSim = (0, text_similarity_1.jaccard)(aSymbols, bSymbols);
42
+ // Spatial proximity — max of exact file-path and module-level dir-prefix
43
+ // overlap, so same-file edits get full credit and same-module edits also
44
+ // connect, without double-counting the same spatial dimension.
45
+ const spatialSim = Math.max((0, text_similarity_1.jaccard)(aFiles, bFiles), (0, text_similarity_1.jaccard)(aDirs, bDirs));
46
+ // Message TF-IDF cosine
47
+ const msgSim = (0, text_similarity_1.cosineSimilarity)(msgTfidfMatrix[aIdx], msgTfidfMatrix[bIdx]);
48
+ // Ticket reference overlap
49
+ const ticketSim = (0, text_similarity_1.jaccard)(aTickets, bTickets);
50
+ // Temporal proximity — half-life 3 days (259200 seconds)
51
+ const halfLife = 3 * 24 * 60 * 60 * 1000;
52
+ const maxTimeSpan = Math.abs(a.timestamp - b.timestamp);
53
+ const timeSim = Math.exp(-maxTimeSpan / halfLife);
54
+ // Cohesion penalty: low cohesion (many files, few symbols) = refactor-like.
55
+ // Penalty multiplier: 0.6 at cohesion 0 → 1.0 at cohesion ≥ 2.0
56
+ const minCohesion = Math.min((0, features_1.computeCohesion)(a), (0, features_1.computeCohesion)(b));
57
+ const cohesionPenalty = minCohesion >= 2.0
58
+ ? 1.0
59
+ : 0.6 + 0.4 * (minCohesion / 2.0);
60
+ const rawScore = 0.40 * symbolSim +
61
+ 0.15 * spatialSim +
62
+ 0.25 * msgSim +
63
+ 0.10 * ticketSim +
64
+ 0.10 * timeSim;
65
+ return rawScore * cohesionPenalty;
66
+ }
67
+ // ---------------------------------------------------------------------------
68
+ // Public API
69
+ // ---------------------------------------------------------------------------
70
+ /**
71
+ * Cluster commits using Leiden community detection on a multi-signal
72
+ * similarity graph, with recursive sub-splitting for large clusters.
73
+ *
74
+ * The pipeline:
75
+ * 1. Build a weighted similarity graph from AST symbol, file-path,
76
+ * commit-message TF-IDF, ticket-reference, and temporal signals.
77
+ * 2. Run Leiden community detection with auto-tuned resolution γ.
78
+ * 3. Greedy-merge if still too many communities.
79
+ * 4. Recursively split large clusters (≥ 4 commits) by running
80
+ * Leiden on their sub-graphs.
81
+ *
82
+ * Replaces the previous Louvain (no refinement) and connected-components
83
+ * (single-linkage chaining) approaches.
84
+ *
85
+ * @param changes - AST change data for each commit.
86
+ * @param threshold - Minimum similarity (0-1) for considering an edge.
87
+ * @param maxClusters - Desired maximum number of top-level clusters.
88
+ * The resolution parameter γ is auto-tuned to approach
89
+ * this target. Recursive splitting may produce more
90
+ * clusters at finer granularities.
91
+ * @returns Clustered result with stats.
92
+ */
93
+ function clusterCommits(changes, threshold, maxClusters) {
94
+ const n = changes.length;
95
+ // Edge cases: 0 or 1 commit — avoid Leiden overhead.
96
+ if (n === 0) {
97
+ return {
98
+ clusters: [],
99
+ unclustered: [],
100
+ stats: { totalCommits: 0, clusteredCommits: 0, clusterCount: 0 },
101
+ };
102
+ }
103
+ if (n === 1) {
104
+ const c = changes[0];
105
+ const totalSymbols = (0, features_1.countChangedSymbols)(c);
106
+ if (totalSymbols < features_1.MIN_SYMBOLS_FOR_SOLO_CLUSTER && !(0, features_1.hasNewNonTestFiles)(c)) {
107
+ (0, errors_1.logDebug)('Clusterer: single commit below quality threshold', {
108
+ hash: c.commitHash.slice(0, 7),
109
+ changedSymbols: totalSymbols,
110
+ minRequired: features_1.MIN_SYMBOLS_FOR_SOLO_CLUSTER,
111
+ });
112
+ return {
113
+ clusters: [],
114
+ unclustered: [c],
115
+ stats: { totalCommits: 1, clusteredCommits: 0, clusterCount: 0 },
116
+ };
117
+ }
118
+ const syms = (0, features_1.collectSymbolNames)(c);
119
+ const files = (0, features_1.collectFilePaths)(c);
120
+ return {
121
+ clusters: [
122
+ {
123
+ id: 0,
124
+ commits: [c],
125
+ primaryFiles: files,
126
+ primarySymbols: syms,
127
+ summary: `1 commit: ${c.commitMessage}`,
128
+ timeRange: { start: c.timestamp, end: c.timestamp },
129
+ },
130
+ ],
131
+ unclustered: [],
132
+ stats: { totalCommits: 1, clusteredCommits: 1, clusterCount: 1 },
133
+ };
134
+ }
135
+ // n >= 2: full pipeline from here.
136
+ // --- Pre-compute per-commit feature vectors ---
137
+ const messages = [];
138
+ const allSymbols = [];
139
+ const allFiles = [];
140
+ const allDirs = [];
141
+ const allTickets = [];
142
+ for (const change of changes) {
143
+ messages.push((0, text_similarity_1.tokenize)(change.commitMessage));
144
+ allSymbols.push((0, features_1.collectSymbolNames)(change));
145
+ allFiles.push((0, features_1.collectFilePaths)(change));
146
+ allDirs.push((0, features_1.collectDirectoryPrefixes)(change));
147
+ allTickets.push((0, features_1.extractTicketRefs)(change.commitMessage));
148
+ }
149
+ // --- Build TF-IDF vectors for commit messages ---
150
+ const tfidf = new text_similarity_1.TfidfVectorizer();
151
+ tfidf.fit(messages);
152
+ const msgTfidfMatrix = messages.map((msg) => tfidf.transform(msg));
153
+ // --- Build weighted similarity graph ---
154
+ const graph = Array.from({ length: n }, () => new Array(n).fill(0));
155
+ for (let i = 0; i < n; i++) {
156
+ for (let j = i + 1; j < n; j++) {
157
+ const sim = computeSimilarity(changes[i], changes[j], allSymbols[i], allSymbols[j], allFiles[i], allFiles[j], allDirs[i], allDirs[j], allTickets[i], allTickets[j], msgTfidfMatrix, i, j);
158
+ if (sim >= threshold) {
159
+ graph[i][j] = sim;
160
+ graph[j][i] = sim;
161
+ }
162
+ }
163
+ }
164
+ // --- Leiden community detection with auto-tuned resolution ---
165
+ let components = (0, leiden_1.autoTuneResolution)(graph, maxClusters);
166
+ // --- Greedy merge if still too many communities ---
167
+ if (components.length > maxClusters) {
168
+ (0, errors_1.logDebug)('Clusterer: post-Leiden greedy merge', {
169
+ beforeMerge: components.length,
170
+ maxClusters,
171
+ });
172
+ components = (0, leiden_1.greedyMerge)(graph, components, maxClusters);
173
+ }
174
+ // --- Recursive sub-splitting for large clusters ---
175
+ components = (0, leiden_1.recursiveSubSplit)(graph, components);
176
+ // --- Sort by size descending for deterministic output ---
177
+ components.sort((a, b) => b.length - a.length);
178
+ // --- Filter: size-1 communities go to unclustered if < MIN_SYMBOLS ---
179
+ const validComponents = [];
180
+ const unclusteredIndices = [];
181
+ for (const comp of components) {
182
+ if (comp.length === 1) {
183
+ const idx = comp[0];
184
+ const c = changes[idx];
185
+ if ((0, features_1.countChangedSymbols)(c) < features_1.MIN_SYMBOLS_FOR_SOLO_CLUSTER && !(0, features_1.hasNewNonTestFiles)(c)) {
186
+ unclusteredIndices.push(idx);
187
+ continue;
188
+ }
189
+ }
190
+ validComponents.push(comp);
191
+ }
192
+ // --- Build cluster objects ---
193
+ const clustered = new Set();
194
+ const clusters = [];
195
+ for (let i = 0; i < validComponents.length; i++) {
196
+ const comp = validComponents[i];
197
+ const clusterCommits = comp.map((idx) => {
198
+ clustered.add(idx);
199
+ return changes[idx];
200
+ });
201
+ // Compute primary files (appear in >50% of cluster commits)
202
+ const fileCounts = new Map();
203
+ const symbolCounts = new Map();
204
+ const allTimes = clusterCommits
205
+ .map((c) => c.timestamp)
206
+ .filter((t) => t > 0);
207
+ for (const c of clusterCommits) {
208
+ for (const fp of (0, features_1.collectFilePaths)(c)) {
209
+ fileCounts.set(fp, (fileCounts.get(fp) || 0) + 1);
210
+ }
211
+ for (const s of (0, features_1.collectSymbolNames)(c)) {
212
+ symbolCounts.set(s, (symbolCounts.get(s) || 0) + 1);
213
+ }
214
+ }
215
+ const half = clusterCommits.length / 2;
216
+ const primaryFiles = Array.from(fileCounts.entries())
217
+ .filter(([, count]) => count >= half)
218
+ .sort((a, b) => b[1] - a[1])
219
+ .map(([fp]) => fp);
220
+ const primarySymbols = Array.from(symbolCounts.entries())
221
+ .sort((a, b) => b[1] - a[1])
222
+ .slice(0, 10)
223
+ .map(([s]) => s);
224
+ // Build summary
225
+ const fileSummary = primaryFiles.length > 0
226
+ ? `changing ${primaryFiles.slice(0, 3).join(', ')}`
227
+ : '';
228
+ const summary = `${clusterCommits.length} commits ${fileSummary}`.trim();
229
+ clusters.push({
230
+ id: i,
231
+ commits: clusterCommits,
232
+ primaryFiles,
233
+ primarySymbols,
234
+ summary,
235
+ timeRange: {
236
+ start: allTimes.length > 0 ? Math.min(...allTimes) : 0,
237
+ end: allTimes.length > 0 ? Math.max(...allTimes) : 0,
238
+ },
239
+ });
240
+ }
241
+ // --- Unclustered commits ---
242
+ const unclustered = changes.filter((_, i) => !clustered.has(i));
243
+ (0, errors_1.logDebug)('Clusterer result', {
244
+ totalCommits: n,
245
+ clusterCount: clusters.length,
246
+ clusteredCommits: n - unclustered.length,
247
+ unclustered: unclustered.length,
248
+ });
249
+ return {
250
+ clusters,
251
+ unclustered,
252
+ stats: {
253
+ totalCommits: n,
254
+ clusteredCommits: n - unclustered.length,
255
+ clusterCount: clusters.length,
256
+ },
257
+ };
258
+ }
259
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/spec/mine/clustering/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Leiden community detection on a weighted similarity graph — a generic
3
+ * graph-clustering implementation with no dependency on the commit domain.
4
+ *
5
+ * Replaces Louvain and connected-components (single-linkage) to avoid chaining
6
+ * all nodes into one giant cluster and to guarantee well-connected communities
7
+ * via the refinement phase. A resolution parameter γ is auto-tuned via
8
+ * multiplicative search so the output community count stays close to a target.
9
+ *
10
+ * @module spec/mine/clustering/leiden
11
+ */
12
+ /**
13
+ * Weighted adjacency matrix: graph[i][j] = similarity score (0 means no edge).
14
+ * Always symmetric: graph[i][j] === graph[j][i].
15
+ */
16
+ export type WeightedGraph = number[][];
17
+ /**
18
+ * Core Leiden algorithm: iterative local-moving + refinement + aggregation.
19
+ *
20
+ * Unlike Louvain (which feeds the Phase-1 partition directly into aggregation),
21
+ * Leiden inserts a refinement step that splits each Phase-1 community into
22
+ * well-connected sub-communities. Only the refined partition is aggregated.
23
+ * This guarantees internally-connected communities and avoids the
24
+ * "disconnected community" defect of Louvain.
25
+ *
26
+ * @param graph - Weighted undirected similarity graph.
27
+ * @param gamma - Resolution parameter (default 1.0).
28
+ * @param depth - Aggregation depth guard (internal use).
29
+ */
30
+ export declare function leiden(graph: WeightedGraph, gamma: number, depth?: number): number[][];
31
+ /**
32
+ * Recursively split large clusters by running Leiden on their sub-graphs.
33
+ *
34
+ * For each cluster with size > MIN_SUBSPLIT_SIZE, extracts its sub-graph,
35
+ * runs Leiden with auto-tuned γ (targeting up to min(5, floor(size/2))),
36
+ * and recursively splits further if sub-communities still have structure.
37
+ *
38
+ * Stop conditions:
39
+ * - Cluster size ≤ MIN_SUBSPLIT_SIZE
40
+ * - Sub-graph Leiden returns 1 community (no further structure)
41
+ * - Max recursion depth reached (MAX_SUBSPLIT_DEPTH)
42
+ *
43
+ * @param graph - Full original weighted graph.
44
+ * @param communities - Current partition (list of node-index arrays).
45
+ * @param depth - Current recursion depth (internal).
46
+ * @returns Flat list of leaf-community node-index arrays.
47
+ */
48
+ export declare function recursiveSubSplit(graph: WeightedGraph, communities: number[][], depth?: number): number[][];
49
+ /**
50
+ * Adjust the resolution parameter γ so that Leiden produces approximately
51
+ * `targetClusters` communities.
52
+ *
53
+ * Uses multiplicative search: higher γ → more communities, lower γ → fewer.
54
+ */
55
+ export declare function autoTuneResolution(graph: WeightedGraph, maxClusters: number): number[][];
56
+ /**
57
+ * Greedily merge communities until count ≤ maxClusters, by repeatedly
58
+ * merging the pair with the highest average inter-community similarity.
59
+ */
60
+ export declare function greedyMerge(graph: WeightedGraph, communities: number[][], maxClusters: number): number[][];
61
+ //# sourceMappingURL=leiden.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"leiden.d.ts","sourceRoot":"","sources":["../../../../src/spec/mine/clustering/leiden.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAIH;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,EAAE,EAAE,CAAC;AAoKvC;;;;;;;;;;;;GAYG;AACH,wBAAgB,MAAM,CACpB,KAAK,EAAE,aAAa,EACpB,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,MAAU,GAChB,MAAM,EAAE,EAAE,CAsGZ;AAqGD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,aAAa,EACpB,WAAW,EAAE,MAAM,EAAE,EAAE,EACvB,KAAK,GAAE,MAAU,GAChB,MAAM,EAAE,EAAE,CAiCZ;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,aAAa,EACpB,WAAW,EAAE,MAAM,GAClB,MAAM,EAAE,EAAE,CA2EZ;AAMD;;;GAGG;AACH,wBAAgB,WAAW,CACzB,KAAK,EAAE,aAAa,EACpB,WAAW,EAAE,MAAM,EAAE,EAAE,EACvB,WAAW,EAAE,MAAM,GAClB,MAAM,EAAE,EAAE,CAmCZ"}