homegraph 1.5.0 → 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 (214) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +305 -305
  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 +9 -9
  7. package/dist/db/index.js +36 -36
  8. package/dist/db/migrations.js +37 -37
  9. package/dist/db/queries.js +156 -156
  10. package/dist/db/schema.sql +203 -203
  11. package/dist/directory.js +5 -5
  12. package/dist/extraction/languages/arkts-viewtree.d.ts +2 -4
  13. package/dist/extraction/languages/arkts-viewtree.d.ts.map +1 -1
  14. package/dist/extraction/languages/arkts-viewtree.js +6 -21
  15. package/dist/extraction/languages/arkts-viewtree.js.map +1 -1
  16. package/dist/extraction/languages/arkts.d.ts +16 -6
  17. package/dist/extraction/languages/arkts.d.ts.map +1 -1
  18. package/dist/extraction/languages/arkts.js +174 -21
  19. package/dist/extraction/languages/arkts.js.map +1 -1
  20. package/dist/extraction/wasm/tree-sitter-c_sharp.wasm +0 -0
  21. package/dist/extraction/wasm/tree-sitter-cfml.wasm +0 -0
  22. package/dist/extraction/wasm/tree-sitter-cfquery.wasm +0 -0
  23. package/dist/extraction/wasm/tree-sitter-cfscript.wasm +0 -0
  24. package/dist/extraction/wasm/tree-sitter-cobol.wasm +0 -0
  25. package/dist/extraction/wasm/tree-sitter-erlang.wasm +0 -0
  26. package/dist/extraction/wasm/tree-sitter-nix.wasm +0 -0
  27. package/dist/extraction/wasm/tree-sitter-pascal.wasm +0 -0
  28. package/dist/extraction/wasm/tree-sitter-vbnet.wasm +0 -0
  29. package/dist/installer/instructions-template.js +9 -9
  30. package/dist/mcp/liveness-watchdog.d.ts +18 -0
  31. package/dist/mcp/liveness-watchdog.d.ts.map +1 -1
  32. package/dist/mcp/liveness-watchdog.js +185 -73
  33. package/dist/mcp/liveness-watchdog.js.map +1 -1
  34. package/dist/mcp/server-instructions.js +47 -47
  35. package/dist/reasoning/reasoner.js +32 -32
  36. package/dist/spec/db/commit-node.js +4 -4
  37. package/dist/spec/db/fragment-node.js +10 -10
  38. package/dist/spec/db/fts.js +8 -8
  39. package/dist/spec/db/relations.js +88 -88
  40. package/dist/spec/db/schema.js +6 -6
  41. package/dist/spec/db/schema.sql +121 -121
  42. package/dist/spec/db/spec-node.js +4 -4
  43. package/dist/spec/llm/prompts.js +53 -53
  44. package/dist/spec/utils.d.ts +16 -4
  45. package/dist/spec/utils.d.ts.map +1 -1
  46. package/dist/spec/utils.js +58 -6
  47. package/dist/spec/utils.js.map +1 -1
  48. package/package.json +62 -62
  49. package/scripts/_tmp-cfwk-resolve.log +0 -0
  50. package/scripts/_tmp-cfwk-sig.log +0 -0
  51. package/scripts/_tmp-cfwk-vt.log +0 -0
  52. package/scripts/add-lang/bench.sh +60 -60
  53. package/scripts/add-lang/check-grammar.mjs +75 -75
  54. package/scripts/add-lang/dump-ast.mjs +103 -103
  55. package/scripts/add-lang/verify-extraction.mjs +70 -70
  56. package/scripts/agent-eval/ab-adoption.sh +91 -91
  57. package/scripts/agent-eval/ab-hook.sh +86 -86
  58. package/scripts/agent-eval/ab-impl.sh +78 -78
  59. package/scripts/agent-eval/ab-new-vs-baseline.sh +102 -102
  60. package/scripts/agent-eval/ab-sufficiency.sh +78 -78
  61. package/scripts/agent-eval/arms-F.sh +21 -21
  62. package/scripts/agent-eval/arms-matrix.sh +37 -37
  63. package/scripts/agent-eval/audit.sh +68 -68
  64. package/scripts/agent-eval/bench-readme.sh +28 -28
  65. package/scripts/agent-eval/bench-why-repo.sh +22 -22
  66. package/scripts/agent-eval/block-read-hook.sh +19 -19
  67. package/scripts/agent-eval/hook-settings.json +15 -15
  68. package/scripts/agent-eval/itrun.sh +120 -120
  69. package/scripts/agent-eval/offload-eval-3arm.sh +72 -72
  70. package/scripts/agent-eval/offload-eval-cost.mjs +133 -133
  71. package/scripts/agent-eval/offload-eval-effort.mjs +108 -108
  72. package/scripts/agent-eval/offload-eval-frontload-matrix.sh +25 -25
  73. package/scripts/agent-eval/offload-eval-frontload.sh +47 -47
  74. package/scripts/agent-eval/offload-eval-ground-truth.json +18 -18
  75. package/scripts/agent-eval/offload-eval-hook.mjs +84 -84
  76. package/scripts/agent-eval/offload-eval-judge.mjs +103 -103
  77. package/scripts/agent-eval/offload-eval-matrix.sh +20 -20
  78. package/scripts/agent-eval/offload-eval-metrics.mjs +94 -94
  79. package/scripts/agent-eval/offload-eval-refs1.sh +50 -50
  80. package/scripts/agent-eval/offload-eval-setup.sh +24 -24
  81. package/scripts/agent-eval/offload-eval-styles.sh +71 -71
  82. package/scripts/agent-eval/offload-eval-summarize.mjs +68 -68
  83. package/scripts/agent-eval/offload-eval.md +76 -76
  84. package/scripts/agent-eval/parse-arms.mjs +116 -116
  85. package/scripts/agent-eval/parse-bench-readme.mjs +84 -84
  86. package/scripts/agent-eval/parse-run.mjs +45 -45
  87. package/scripts/agent-eval/parse-session.mjs +93 -93
  88. package/scripts/agent-eval/probe-context.mjs +21 -21
  89. package/scripts/agent-eval/probe-explore.mjs +40 -40
  90. package/scripts/agent-eval/probe-node.mjs +20 -20
  91. package/scripts/agent-eval/probe-sweep.mjs +119 -119
  92. package/scripts/agent-eval/probe-trace.mjs +20 -20
  93. package/scripts/agent-eval/redirect-read-hook.sh +38 -38
  94. package/scripts/agent-eval/repro-concurrent-explore.mjs +119 -119
  95. package/scripts/agent-eval/repro-daemon-clients.mjs +125 -125
  96. package/scripts/agent-eval/run-agent.sh +34 -34
  97. package/scripts/agent-eval/run-all.sh +75 -75
  98. package/scripts/agent-eval/run-arms.sh +56 -56
  99. package/scripts/agent-eval/seq-matrix.mjs +137 -137
  100. package/scripts/bench-arkts-init-rss.log +0 -0
  101. package/scripts/build-bundle.sh +123 -123
  102. package/scripts/exp_boundary_eval/README.md +247 -247
  103. package/scripts/exp_boundary_eval/__pycache__/_utils.cpython-310.pyc +0 -0
  104. package/scripts/exp_boundary_eval/__pycache__/_utils.cpython-38.pyc +0 -0
  105. package/scripts/exp_boundary_eval/__pycache__/analyze.cpython-310.pyc +0 -0
  106. package/scripts/exp_boundary_eval/__pycache__/analyze.cpython-38.pyc +0 -0
  107. package/scripts/exp_boundary_eval/__pycache__/deveco_arm.cpython-38.pyc +0 -0
  108. package/scripts/exp_boundary_eval/__pycache__/run_all.cpython-310.pyc +0 -0
  109. package/scripts/exp_boundary_eval/__pycache__/run_all.cpython-38.pyc +0 -0
  110. package/scripts/exp_boundary_eval/__pycache__/run_one.cpython-310.pyc +0 -0
  111. package/scripts/exp_boundary_eval/__pycache__/run_one.cpython-38.pyc +0 -0
  112. package/scripts/exp_boundary_eval/__pycache__/run_session.cpython-310.pyc +0 -0
  113. package/scripts/exp_boundary_eval/__pycache__/run_session.cpython-38.pyc +0 -0
  114. package/scripts/exp_boundary_eval/__pycache__/setup.cpython-310.pyc +0 -0
  115. package/scripts/exp_boundary_eval/__pycache__/setup.cpython-38.pyc +0 -0
  116. package/scripts/exp_boundary_eval/__pycache__/win_mcp_launcher.cpython-38.pyc +0 -0
  117. package/scripts/exp_boundary_eval/_test_mcp_chain.py +78 -78
  118. package/scripts/exp_boundary_eval/_test_stdin.py +8 -8
  119. package/scripts/exp_boundary_eval/_utils.py +1116 -1116
  120. package/scripts/exp_boundary_eval/analyze.py +1313 -1313
  121. package/scripts/exp_boundary_eval/deveco_arm.py +519 -519
  122. package/scripts/exp_boundary_eval/run_all.py +378 -378
  123. package/scripts/exp_boundary_eval/run_one.py +165 -165
  124. package/scripts/exp_boundary_eval/run_session.py +158 -158
  125. package/scripts/exp_boundary_eval/setup.py +120 -120
  126. package/scripts/exp_boundary_eval/win_mcp_launcher.py +73 -73
  127. package/scripts/exp_boundary_eval/win_mcp_stdio_wrap.js +36 -36
  128. package/scripts/exp_boundary_eval/win_node_launcher.py +24 -24
  129. package/scripts/extract-release-notes.mjs +130 -130
  130. package/scripts/local-install.sh +41 -41
  131. package/scripts/npm-sdk.js +75 -75
  132. package/scripts/npm-shim.js +275 -275
  133. package/scripts/ohos-sdk-publish.mjs +133 -133
  134. package/scripts/pack-npm.sh +119 -119
  135. package/scripts/prepare-release.mjs +270 -270
  136. package/scripts/probe-arkts-mem-why-run.log +0 -0
  137. package/scripts/probe-banner-livecard-ir.log +0 -0
  138. package/scripts/probe-cfwk-ast.stderr.log +0 -0
  139. package/scripts/probe-cfwk-ast.stdout.log +0 -0
  140. package/scripts/probe-cfwk-attr-shape.log +0 -0
  141. package/scripts/probe-cfwk-cfgdump.stderr.log +0 -0
  142. package/scripts/probe-cfwk-cfgdump.stdout.log +0 -0
  143. package/scripts/probe-cfwk-cvc.stderr.log +0 -0
  144. package/scripts/probe-cfwk-cvc.stdout.log +0 -0
  145. package/scripts/probe-cfwk-diag2.log +0 -0
  146. package/scripts/probe-cfwk-diag3.log +0 -0
  147. package/scripts/probe-cfwk-fedbg.stderr.log +0 -0
  148. package/scripts/probe-cfwk-fedbg.stdout.log +0 -0
  149. package/scripts/probe-cfwk-fileresult.log +0 -0
  150. package/scripts/probe-cfwk-fix.stderr.log +0 -0
  151. package/scripts/probe-cfwk-fix.stdout.log +0 -0
  152. package/scripts/probe-cfwk-fix2.stderr.log +0 -0
  153. package/scripts/probe-cfwk-fix2.stdout.log +0 -0
  154. package/scripts/probe-cfwk-fix3.stderr.log +0 -0
  155. package/scripts/probe-cfwk-fix3.stdout.log +0 -0
  156. package/scripts/probe-cfwk-foreach.log +0 -0
  157. package/scripts/probe-cfwk-getmethod-throw.log +0 -0
  158. package/scripts/probe-cfwk-hg-extract.log +0 -0
  159. package/scripts/probe-cfwk-pr1003-noprior.stderr.log +0 -0
  160. package/scripts/probe-cfwk-pr1003-noprior.stdout.log +0 -0
  161. package/scripts/probe-cfwk-pr1003.stderr.log +0 -0
  162. package/scripts/probe-cfwk-pr1003.stdout.log +0 -0
  163. package/scripts/probe-cfwk-preroot-noprior.stderr.log +0 -0
  164. package/scripts/probe-cfwk-preroot-noprior.stdout.log +0 -0
  165. package/scripts/probe-cfwk-preroot-prior.stderr.log +0 -0
  166. package/scripts/probe-cfwk-preroot-prior.stdout.log +0 -0
  167. package/scripts/probe-cfwk-preroot-skipstate.stderr.log +0 -0
  168. package/scripts/probe-cfwk-preroot-skipstate.stdout.log +0 -0
  169. package/scripts/probe-cfwk-resolve-sim.log +0 -0
  170. package/scripts/probe-cfwk-tree-shape.log +0 -0
  171. package/scripts/probe-cfwk-walk-abort.log +0 -0
  172. package/scripts/probe-cfwk.log +0 -0
  173. package/scripts/probe-force-index.log +0 -0
  174. package/scripts/probe-no-force-index.log +0 -0
  175. package/scripts/probe-samefile-ir.stderr.log +0 -0
  176. package/scripts/probe-samefile-ir.stdout.log +224 -0
  177. package/scripts/probe-sdk-vs-project.log +0 -0
  178. package/scripts/probe-viewtree-downgrade.log +0 -0
  179. package/dist/arkts/ohos-api-index.d.ts +0 -15
  180. package/dist/arkts/ohos-api-index.d.ts.map +0 -1
  181. package/dist/arkts/ohos-api-index.js +0 -190
  182. package/dist/arkts/ohos-api-index.js.map +0 -1
  183. package/dist/arkts/ohos-sdk-input.d.ts +0 -36
  184. package/dist/arkts/ohos-sdk-input.d.ts.map +0 -1
  185. package/dist/arkts/ohos-sdk-input.js +0 -214
  186. package/dist/arkts/ohos-sdk-input.js.map +0 -1
  187. package/dist/extraction/languages/arkts-state-decorators.d.ts +0 -13
  188. package/dist/extraction/languages/arkts-state-decorators.d.ts.map +0 -1
  189. package/dist/extraction/languages/arkts-state-decorators.js +0 -26
  190. package/dist/extraction/languages/arkts-state-decorators.js.map +0 -1
  191. package/dist/extraction/languages/ohos-api-consumer.d.ts +0 -34
  192. package/dist/extraction/languages/ohos-api-consumer.d.ts.map +0 -1
  193. package/dist/extraction/languages/ohos-api-consumer.js +0 -283
  194. package/dist/extraction/languages/ohos-api-consumer.js.map +0 -1
  195. package/dist/spec/build/git-scanner.d.ts +0 -93
  196. package/dist/spec/build/git-scanner.d.ts.map +0 -1
  197. package/dist/spec/build/git-scanner.js +0 -254
  198. package/dist/spec/build/git-scanner.js.map +0 -1
  199. package/dist/spec/git-utils.d.ts +0 -8
  200. package/dist/spec/git-utils.d.ts.map +0 -1
  201. package/dist/spec/git-utils.js +0 -14
  202. package/dist/spec/git-utils.js.map +0 -1
  203. package/dist/spec/mine/clusterer.d.ts +0 -63
  204. package/dist/spec/mine/clusterer.d.ts.map +0 -1
  205. package/dist/spec/mine/clusterer.js +0 -904
  206. package/dist/spec/mine/clusterer.js.map +0 -1
  207. package/dist/spec/mine/progress-handler.d.ts +0 -22
  208. package/dist/spec/mine/progress-handler.d.ts.map +0 -1
  209. package/dist/spec/mine/progress-handler.js +0 -108
  210. package/dist/spec/mine/progress-handler.js.map +0 -1
  211. package/dist/spec/mine/progress.d.ts +0 -23
  212. package/dist/spec/mine/progress.d.ts.map +0 -1
  213. package/dist/spec/mine/progress.js +0 -12
  214. package/dist/spec/mine/progress.js.map +0 -1
@@ -26,10 +26,13 @@ exports.installCommandSupervision = installCommandSupervision;
26
26
  * SYNCHRONOUSLY on this thread, and on a large repo that is legitimately many
27
27
  * seconds of work. So those spans yield cooperatively to the event loop
28
28
  * (`src/resolution/cooperative-yield.ts`) to keep the heartbeat alive; without
29
- * that the watchdog would SIGKILL a valid, in-progress index (#1091). The
30
- * distinction it must preserve kill a TRUE wedge, spare slow-but-progressing
31
- * work is exactly what cooperative yielding buys: a genuinely stuck span never
32
- * reaches its next yield, so it still trips the timeout.
29
+ * that the watchdog would SIGKILL a valid, in-progress index (#1091). ArkTS
30
+ * Scene builds cannot yield (opaque native ArkAnalyzer work), so they
31
+ * temporarily suspend the watchdog via `runWithoutLivenessWatchdog` instead.
32
+ * The distinction it must preserve kill a TRUE wedge, spare slow-but-progressing
33
+ * work — is exactly what cooperative yielding (and scoped suspend) buys: a
34
+ * genuinely stuck JS span never reaches its next yield, so it still trips the
35
+ * timeout.
33
36
  */
34
37
  const liveness_watchdog_1 = require("../mcp/liveness-watchdog");
35
38
  const ppid_watchdog_1 = require("../mcp/ppid-watchdog");
@@ -1 +1 @@
1
- {"version":3,"file":"command-supervision.js","sourceRoot":"","sources":["../../src/bin/command-supervision.ts"],"names":[],"mappings":";;AA8CA,8DAwCC;AAtFD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,gEAAqE;AACrE,wDAA6F;AAC7F,4DAAwD;AACxD,yEAAiE;AAOjE;;;;;GAKG;AACH,SAAgB,yBAAyB,CAAC,KAAa;IACrD,2EAA2E;IAC3E,2EAA2E;IAC3E,yBAAyB;IACzB,MAAM,QAAQ,GAAG,IAAA,6CAAyB,GAAE,CAAC;IAE7C,uEAAuE;IACvE,6EAA6E;IAC7E,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAClC,MAAM,QAAQ,GAAG,IAAA,6BAAa,EAAC,OAAO,CAAC,GAAG,CAAC,kCAAa,CAAC,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,IAAA,+BAAe,EAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACnE,IAAI,SAAS,GAA0C,IAAI,CAAC;IAC5D,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE;YAC3B,MAAM,MAAM,GAAG,IAAA,qCAAqB,EAAC;gBACnC,YAAY;gBACZ,WAAW,EAAE,OAAO,CAAC,IAAI;gBACzB,QAAQ;gBACR,OAAO,EAAE,gCAAc;aACxB,CAAC,CAAC;YACH,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC;oBACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,KAAK,4BAA4B,MAAM,gBAAgB,CAAC,CAAC;gBAC9F,CAAC;gBAAC,MAAM,CAAC,CAAC,+CAA+C,CAAC,CAAC;gBAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC,EAAE,MAAM,CAAC,CAAC;QACX,2EAA2E;QAC3E,SAAS,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,OAAO;QACL,IAAI;YACF,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,SAAS;gBAAE,aAAa,CAAC,SAAS,CAAC,CAAC;YACxC,QAAQ,EAAE,IAAI,EAAE,CAAC;QACnB,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"command-supervision.js","sourceRoot":"","sources":["../../src/bin/command-supervision.ts"],"names":[],"mappings":";;AAiDA,8DAwCC;AAzFD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,gEAAqE;AACrE,wDAA6F;AAC7F,4DAAwD;AACxD,yEAAiE;AAOjE;;;;;GAKG;AACH,SAAgB,yBAAyB,CAAC,KAAa;IACrD,2EAA2E;IAC3E,2EAA2E;IAC3E,yBAAyB;IACzB,MAAM,QAAQ,GAAG,IAAA,6CAAyB,GAAE,CAAC;IAE7C,uEAAuE;IACvE,6EAA6E;IAC7E,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAClC,MAAM,QAAQ,GAAG,IAAA,6BAAa,EAAC,OAAO,CAAC,GAAG,CAAC,kCAAa,CAAC,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,IAAA,+BAAe,EAAC,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACnE,IAAI,SAAS,GAA0C,IAAI,CAAC;IAC5D,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QACf,SAAS,GAAG,WAAW,CAAC,GAAG,EAAE;YAC3B,MAAM,MAAM,GAAG,IAAA,qCAAqB,EAAC;gBACnC,YAAY;gBACZ,WAAW,EAAE,OAAO,CAAC,IAAI;gBACzB,QAAQ;gBACR,OAAO,EAAE,gCAAc;aACxB,CAAC,CAAC;YACH,IAAI,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC;oBACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,KAAK,4BAA4B,MAAM,gBAAgB,CAAC,CAAC;gBAC9F,CAAC;gBAAC,MAAM,CAAC,CAAC,+CAA+C,CAAC,CAAC;gBAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC,EAAE,MAAM,CAAC,CAAC;QACX,2EAA2E;QAC3E,SAAS,CAAC,KAAK,EAAE,CAAC;IACpB,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,OAAO;QACL,IAAI;YACF,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,SAAS;gBAAE,aAAa,CAAC,SAAS,CAAC,CAAC;YACxC,QAAQ,EAAE,IAAI,EAAE,CAAC;QACnB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1491,15 +1491,15 @@ function main() {
1491
1491
  console.error(chalk.bold('\nHomeGraph MCP Server\n'));
1492
1492
  console.error(chalk.blue((0, glyphs_1.getGlyphs)().info) + ' Use --mcp flag to start the MCP server');
1493
1493
  console.error('\nTo use with Claude Code, add to your MCP configuration:');
1494
- console.error(chalk.dim(`
1495
- {
1496
- "mcpServers": {
1497
- "homegraph": {
1498
- "command": "homegraph",
1499
- "args": ["serve", "--mcp"]
1500
- }
1501
- }
1502
- }
1494
+ console.error(chalk.dim(`
1495
+ {
1496
+ "mcpServers": {
1497
+ "homegraph": {
1498
+ "command": "homegraph",
1499
+ "args": ["serve", "--mcp"]
1500
+ }
1501
+ }
1502
+ }
1503
1503
  `));
1504
1504
  console.error('Available tools:');
1505
1505
  console.error(chalk.cyan(' homegraph_explore') + ' - Primary: source of the relevant symbols for any question');
package/dist/db/index.js CHANGED
@@ -517,27 +517,27 @@ class DatabaseConnection {
517
517
  }
518
518
  try {
519
519
  const { Worker } = await Promise.resolve().then(() => __importStar(require('node:worker_threads')));
520
- const workerSource = `
521
- const { workerData, parentPort } = require('node:worker_threads');
522
- let row = null;
523
- let err = null;
524
- try {
525
- let db = null;
526
- try {
527
- const { DatabaseSync } = require('node:sqlite');
528
- db = new DatabaseSync(workerData.dbPath);
529
- } catch {
530
- const Database = require('better-sqlite3');
531
- db = new Database(workerData.dbPath);
532
- }
533
- const mode = workerData.mode === 'TRUNCATE' ? 'TRUNCATE' : 'PASSIVE';
534
- try {
535
- if (mode === 'TRUNCATE') db.exec('PRAGMA busy_timeout = 2000');
536
- row = db.prepare('PRAGMA wal_checkpoint(' + mode + ')').get();
537
- } catch (e) { err = String(e && e.message || e); }
538
- try { db.close(); } catch {}
539
- } catch (e) { err = err || String(e && e.message || e); }
540
- parentPort.postMessage({ row, err });
520
+ const workerSource = `
521
+ const { workerData, parentPort } = require('node:worker_threads');
522
+ let row = null;
523
+ let err = null;
524
+ try {
525
+ let db = null;
526
+ try {
527
+ const { DatabaseSync } = require('node:sqlite');
528
+ db = new DatabaseSync(workerData.dbPath);
529
+ } catch {
530
+ const Database = require('better-sqlite3');
531
+ db = new Database(workerData.dbPath);
532
+ }
533
+ const mode = workerData.mode === 'TRUNCATE' ? 'TRUNCATE' : 'PASSIVE';
534
+ try {
535
+ if (mode === 'TRUNCATE') db.exec('PRAGMA busy_timeout = 2000');
536
+ row = db.prepare('PRAGMA wal_checkpoint(' + mode + ')').get();
537
+ } catch (e) { err = String(e && e.message || e); }
538
+ try { db.close(); } catch {}
539
+ } catch (e) { err = err || String(e && e.message || e); }
540
+ parentPort.postMessage({ row, err });
541
541
  `;
542
542
  return await new Promise((resolve) => {
543
543
  let settled = false;
@@ -632,21 +632,21 @@ class DatabaseConnection {
632
632
  async runPragmasOffThread(pragmas, inlineFallback = []) {
633
633
  try {
634
634
  const { Worker } = await Promise.resolve().then(() => __importStar(require('node:worker_threads')));
635
- const workerSource = `
636
- const { workerData, parentPort } = require('node:worker_threads');
637
- try {
638
- let db = null;
639
- try {
640
- const { DatabaseSync } = require('node:sqlite');
641
- db = new DatabaseSync(workerData.dbPath);
642
- } catch {
643
- const Database = require('better-sqlite3');
644
- db = new Database(workerData.dbPath);
645
- }
646
- for (const p of workerData.pragmas) { try { db.exec(p); } catch {} }
647
- try { db.close(); } catch {}
648
- } catch {}
649
- parentPort.postMessage('done');
635
+ const workerSource = `
636
+ const { workerData, parentPort } = require('node:worker_threads');
637
+ try {
638
+ let db = null;
639
+ try {
640
+ const { DatabaseSync } = require('node:sqlite');
641
+ db = new DatabaseSync(workerData.dbPath);
642
+ } catch {
643
+ const Database = require('better-sqlite3');
644
+ db = new Database(workerData.dbPath);
645
+ }
646
+ for (const p of workerData.pragmas) { try { db.exec(p); } catch {} }
647
+ try { db.close(); } catch {}
648
+ } catch {}
649
+ parentPort.postMessage('done');
650
650
  `;
651
651
  await new Promise((resolve) => {
652
652
  let settled = false;
@@ -26,17 +26,17 @@ const migrations = [
26
26
  version: 2,
27
27
  description: 'Add project metadata, provenance tracking, and unresolved ref context',
28
28
  up: (db) => {
29
- db.exec(`
30
- CREATE TABLE IF NOT EXISTS project_metadata (
31
- key TEXT PRIMARY KEY,
32
- value TEXT NOT NULL,
33
- updated_at INTEGER NOT NULL
34
- );
35
- ALTER TABLE unresolved_refs ADD COLUMN file_path TEXT NOT NULL DEFAULT '';
36
- ALTER TABLE unresolved_refs ADD COLUMN language TEXT NOT NULL DEFAULT 'unknown';
37
- ALTER TABLE edges ADD COLUMN provenance TEXT DEFAULT NULL;
38
- CREATE INDEX IF NOT EXISTS idx_unresolved_file_path ON unresolved_refs(file_path);
39
- CREATE INDEX IF NOT EXISTS idx_edges_provenance ON edges(provenance);
29
+ db.exec(`
30
+ CREATE TABLE IF NOT EXISTS project_metadata (
31
+ key TEXT PRIMARY KEY,
32
+ value TEXT NOT NULL,
33
+ updated_at INTEGER NOT NULL
34
+ );
35
+ ALTER TABLE unresolved_refs ADD COLUMN file_path TEXT NOT NULL DEFAULT '';
36
+ ALTER TABLE unresolved_refs ADD COLUMN language TEXT NOT NULL DEFAULT 'unknown';
37
+ ALTER TABLE edges ADD COLUMN provenance TEXT DEFAULT NULL;
38
+ CREATE INDEX IF NOT EXISTS idx_unresolved_file_path ON unresolved_refs(file_path);
39
+ CREATE INDEX IF NOT EXISTS idx_edges_provenance ON edges(provenance);
40
40
  `);
41
41
  },
42
42
  },
@@ -44,8 +44,8 @@ const migrations = [
44
44
  version: 3,
45
45
  description: 'Add lower(name) expression index for memory-efficient case-insensitive lookups',
46
46
  up: (db) => {
47
- db.exec(`
48
- CREATE INDEX IF NOT EXISTS idx_nodes_lower_name ON nodes(lower(name));
47
+ db.exec(`
48
+ CREATE INDEX IF NOT EXISTS idx_nodes_lower_name ON nodes(lower(name));
49
49
  `);
50
50
  },
51
51
  },
@@ -53,9 +53,9 @@ const migrations = [
53
53
  version: 4,
54
54
  description: 'Drop redundant idx_edges_source / idx_edges_target (covered by source_kind / target_kind composites)',
55
55
  up: (db) => {
56
- db.exec(`
57
- DROP INDEX IF EXISTS idx_edges_source;
58
- DROP INDEX IF EXISTS idx_edges_target;
56
+ db.exec(`
57
+ DROP INDEX IF EXISTS idx_edges_source;
58
+ DROP INDEX IF EXISTS idx_edges_target;
59
59
  `);
60
60
  },
61
61
  },
@@ -63,8 +63,8 @@ const migrations = [
63
63
  version: 5,
64
64
  description: 'Add nodes.return_type — normalized return/result type for receiver-type inference (C++ singletons/factories, #645)',
65
65
  up: (db) => {
66
- db.exec(`
67
- ALTER TABLE nodes ADD COLUMN return_type TEXT;
66
+ db.exec(`
67
+ ALTER TABLE nodes ADD COLUMN return_type TEXT;
68
68
  `);
69
69
  },
70
70
  },
@@ -81,14 +81,14 @@ const migrations = [
81
81
  // and it MUST match the GROUP BY exactly, or the index creation would
82
82
  // fail on a pair the DELETE left behind. Idempotent: the index is
83
83
  // `IF NOT EXISTS` and the DELETE is a no-op once the table is unique.
84
- db.exec(`
85
- DELETE FROM edges
86
- WHERE id NOT IN (
87
- SELECT MIN(id) FROM edges
88
- GROUP BY source, target, kind, IFNULL(line, -1), IFNULL(col, -1)
89
- );
90
- CREATE UNIQUE INDEX IF NOT EXISTS idx_edges_identity
91
- ON edges(source, target, kind, IFNULL(line, -1), IFNULL(col, -1));
84
+ db.exec(`
85
+ DELETE FROM edges
86
+ WHERE id NOT IN (
87
+ SELECT MIN(id) FROM edges
88
+ GROUP BY source, target, kind, IFNULL(line, -1), IFNULL(col, -1)
89
+ );
90
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_edges_identity
91
+ ON edges(source, target, kind, IFNULL(line, -1), IFNULL(col, -1));
92
92
  `);
93
93
  },
94
94
  },
@@ -96,14 +96,14 @@ const migrations = [
96
96
  version: 7,
97
97
  description: 'Add mcp_query_cache table for MCP tool response caching',
98
98
  up: (db) => {
99
- db.exec(`
100
- CREATE TABLE IF NOT EXISTS mcp_query_cache (
101
- cache_key TEXT PRIMARY KEY,
102
- tool TEXT NOT NULL,
103
- response TEXT NOT NULL,
104
- created_at INTEGER NOT NULL
105
- );
106
- CREATE INDEX IF NOT EXISTS idx_mcp_query_cache_tool ON mcp_query_cache(tool);
99
+ db.exec(`
100
+ CREATE TABLE IF NOT EXISTS mcp_query_cache (
101
+ cache_key TEXT PRIMARY KEY,
102
+ tool TEXT NOT NULL,
103
+ response TEXT NOT NULL,
104
+ created_at INTEGER NOT NULL
105
+ );
106
+ CREATE INDEX IF NOT EXISTS idx_mcp_query_cache_tool ON mcp_query_cache(tool);
107
107
  `);
108
108
  },
109
109
  },
@@ -119,9 +119,9 @@ const migrations = [
119
119
  if (!hasColumn('name_tail')) {
120
120
  db.exec("ALTER TABLE unresolved_refs ADD COLUMN name_tail TEXT NOT NULL DEFAULT ''");
121
121
  }
122
- db.exec(`
123
- CREATE INDEX IF NOT EXISTS idx_unresolved_status ON unresolved_refs(status);
124
- CREATE INDEX IF NOT EXISTS idx_unresolved_failed_tail ON unresolved_refs(name_tail) WHERE status = 'failed';
122
+ db.exec(`
123
+ CREATE INDEX IF NOT EXISTS idx_unresolved_status ON unresolved_refs(status);
124
+ CREATE INDEX IF NOT EXISTS idx_unresolved_failed_tail ON unresolved_refs(name_tail) WHERE status = 'failed';
125
125
  `);
126
126
  },
127
127
  },