homegraph 1.1.2 → 1.2.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 (361) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +268 -243
  3. package/dist/arkts/ohos-api-index.d.ts +15 -0
  4. package/dist/arkts/ohos-api-index.d.ts.map +1 -0
  5. package/dist/arkts/ohos-api-index.js +190 -0
  6. package/dist/arkts/ohos-api-index.js.map +1 -0
  7. package/dist/arkts/ohos-sdk-input.d.ts +36 -0
  8. package/dist/arkts/ohos-sdk-input.d.ts.map +1 -0
  9. package/dist/arkts/ohos-sdk-input.js +214 -0
  10. package/dist/arkts/ohos-sdk-input.js.map +1 -0
  11. package/dist/bin/command-supervision.d.ts +12 -0
  12. package/dist/bin/command-supervision.d.ts.map +1 -0
  13. package/dist/bin/command-supervision.js +86 -0
  14. package/dist/bin/command-supervision.js.map +1 -0
  15. package/dist/bin/homegraph.d.ts +1 -1
  16. package/dist/bin/homegraph.js +971 -71
  17. package/dist/bin/homegraph.js.map +1 -1
  18. package/dist/db/index.d.ts +20 -0
  19. package/dist/db/index.d.ts.map +1 -1
  20. package/dist/db/index.js +39 -0
  21. package/dist/db/index.js.map +1 -1
  22. package/dist/db/migrations.d.ts +1 -1
  23. package/dist/db/migrations.d.ts.map +1 -1
  24. package/dist/db/migrations.js +58 -19
  25. package/dist/db/migrations.js.map +1 -1
  26. package/dist/db/queries.d.ts +14 -0
  27. package/dist/db/queries.d.ts.map +1 -1
  28. package/dist/db/queries.js +314 -143
  29. package/dist/db/queries.js.map +1 -1
  30. package/dist/db/schema.sql +172 -152
  31. package/dist/directory.d.ts +32 -0
  32. package/dist/directory.d.ts.map +1 -1
  33. package/dist/directory.js +88 -5
  34. package/dist/directory.js.map +1 -1
  35. package/dist/extraction/arkts-batch-worker.d.ts +2 -0
  36. package/dist/extraction/arkts-batch-worker.d.ts.map +1 -0
  37. package/dist/extraction/arkts-batch-worker.js +28 -0
  38. package/dist/extraction/arkts-batch-worker.js.map +1 -0
  39. package/dist/extraction/context.d.ts +11 -0
  40. package/dist/extraction/context.d.ts.map +1 -1
  41. package/dist/extraction/context.js +20 -0
  42. package/dist/extraction/context.js.map +1 -1
  43. package/dist/extraction/index.d.ts +16 -2
  44. package/dist/extraction/index.d.ts.map +1 -1
  45. package/dist/extraction/index.js +619 -380
  46. package/dist/extraction/index.js.map +1 -1
  47. package/dist/extraction/languages/arkts-state-decorators.d.ts +13 -0
  48. package/dist/extraction/languages/arkts-state-decorators.d.ts.map +1 -0
  49. package/dist/extraction/languages/arkts-state-decorators.js +26 -0
  50. package/dist/extraction/languages/arkts-state-decorators.js.map +1 -0
  51. package/dist/extraction/languages/arkts-viewtree.d.ts +4 -2
  52. package/dist/extraction/languages/arkts-viewtree.d.ts.map +1 -1
  53. package/dist/extraction/languages/arkts-viewtree.js +21 -6
  54. package/dist/extraction/languages/arkts-viewtree.js.map +1 -1
  55. package/dist/extraction/languages/arkts.d.ts +98 -2
  56. package/dist/extraction/languages/arkts.d.ts.map +1 -1
  57. package/dist/extraction/languages/arkts.js +1290 -61
  58. package/dist/extraction/languages/arkts.js.map +1 -1
  59. package/dist/extraction/languages/c-cpp.d.ts +56 -0
  60. package/dist/extraction/languages/c-cpp.d.ts.map +1 -1
  61. package/dist/extraction/languages/c-cpp.js +198 -1
  62. package/dist/extraction/languages/c-cpp.js.map +1 -1
  63. package/dist/extraction/languages/ohos-api-consumer.d.ts +34 -0
  64. package/dist/extraction/languages/ohos-api-consumer.d.ts.map +1 -0
  65. package/dist/extraction/languages/ohos-api-consumer.js +283 -0
  66. package/dist/extraction/languages/ohos-api-consumer.js.map +1 -0
  67. package/dist/extraction/parse-pool.d.ts +126 -0
  68. package/dist/extraction/parse-pool.d.ts.map +1 -0
  69. package/dist/extraction/parse-pool.js +319 -0
  70. package/dist/extraction/parse-pool.js.map +1 -0
  71. package/dist/extraction/tree-sitter-types.d.ts +17 -0
  72. package/dist/extraction/tree-sitter-types.d.ts.map +1 -1
  73. package/dist/extraction/tree-sitter.d.ts +21 -0
  74. package/dist/extraction/tree-sitter.d.ts.map +1 -1
  75. package/dist/extraction/tree-sitter.js +198 -27
  76. package/dist/extraction/tree-sitter.js.map +1 -1
  77. package/dist/extraction/wasm/tree-sitter-c_sharp.wasm +0 -0
  78. package/dist/extraction/wasm/tree-sitter-pascal.wasm +0 -0
  79. package/dist/graph/traversal.d.ts.map +1 -1
  80. package/dist/graph/traversal.js +76 -17
  81. package/dist/graph/traversal.js.map +1 -1
  82. package/dist/index.d.ts +25 -0
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/index.js +78 -4
  85. package/dist/index.js.map +1 -1
  86. package/dist/installer/instructions-template.js +9 -9
  87. package/dist/installer/targets/shared.d.ts +5 -6
  88. package/dist/installer/targets/shared.d.ts.map +1 -1
  89. package/dist/installer/targets/shared.js +5 -6
  90. package/dist/installer/targets/shared.js.map +1 -1
  91. package/dist/mcp/daemon-paths.d.ts +30 -3
  92. package/dist/mcp/daemon-paths.d.ts.map +1 -1
  93. package/dist/mcp/daemon-paths.js +50 -10
  94. package/dist/mcp/daemon-paths.js.map +1 -1
  95. package/dist/mcp/daemon-registry.d.ts.map +1 -1
  96. package/dist/mcp/daemon-registry.js +7 -3
  97. package/dist/mcp/daemon-registry.js.map +1 -1
  98. package/dist/mcp/daemon.d.ts +48 -0
  99. package/dist/mcp/daemon.d.ts.map +1 -1
  100. package/dist/mcp/daemon.js +196 -32
  101. package/dist/mcp/daemon.js.map +1 -1
  102. package/dist/mcp/engine.d.ts +17 -0
  103. package/dist/mcp/engine.d.ts.map +1 -1
  104. package/dist/mcp/engine.js +73 -1
  105. package/dist/mcp/engine.js.map +1 -1
  106. package/dist/mcp/index.d.ts.map +1 -1
  107. package/dist/mcp/index.js +25 -43
  108. package/dist/mcp/index.js.map +1 -1
  109. package/dist/mcp/liveness-watchdog.js +16 -16
  110. package/dist/mcp/ppid-watchdog.d.ts +18 -0
  111. package/dist/mcp/ppid-watchdog.d.ts.map +1 -1
  112. package/dist/mcp/ppid-watchdog.js +37 -0
  113. package/dist/mcp/ppid-watchdog.js.map +1 -1
  114. package/dist/mcp/query-cache.d.ts +25 -0
  115. package/dist/mcp/query-cache.d.ts.map +1 -0
  116. package/dist/mcp/query-cache.js +191 -0
  117. package/dist/mcp/query-cache.js.map +1 -0
  118. package/dist/mcp/query-pool.d.ts +94 -0
  119. package/dist/mcp/query-pool.d.ts.map +1 -0
  120. package/dist/mcp/query-pool.js +297 -0
  121. package/dist/mcp/query-pool.js.map +1 -0
  122. package/dist/mcp/query-worker.d.ts +24 -0
  123. package/dist/mcp/query-worker.d.ts.map +1 -0
  124. package/dist/mcp/query-worker.js +87 -0
  125. package/dist/mcp/query-worker.js.map +1 -0
  126. package/dist/mcp/server-instructions.d.ts +5 -7
  127. package/dist/mcp/server-instructions.d.ts.map +1 -1
  128. package/dist/mcp/server-instructions.js +72 -74
  129. package/dist/mcp/server-instructions.js.map +1 -1
  130. package/dist/mcp/tools.d.ts +94 -4
  131. package/dist/mcp/tools.d.ts.map +1 -1
  132. package/dist/mcp/tools.js +877 -71
  133. package/dist/mcp/tools.js.map +1 -1
  134. package/dist/project-config.d.ts +20 -0
  135. package/dist/project-config.d.ts.map +1 -1
  136. package/dist/project-config.js +42 -2
  137. package/dist/project-config.js.map +1 -1
  138. package/dist/reasoning/login.js +1 -1
  139. package/dist/reasoning/login.js.map +1 -1
  140. package/dist/reasoning/reasoner.js +32 -32
  141. package/dist/resolution/c-fnptr-synthesizer.d.ts +0 -28
  142. package/dist/resolution/c-fnptr-synthesizer.d.ts.map +1 -1
  143. package/dist/resolution/c-fnptr-synthesizer.js +765 -79
  144. package/dist/resolution/c-fnptr-synthesizer.js.map +1 -1
  145. package/dist/resolution/callback-synthesizer.d.ts +1 -1
  146. package/dist/resolution/callback-synthesizer.d.ts.map +1 -1
  147. package/dist/resolution/callback-synthesizer.js +72 -11
  148. package/dist/resolution/callback-synthesizer.js.map +1 -1
  149. package/dist/resolution/cooperative-yield.d.ts +32 -0
  150. package/dist/resolution/cooperative-yield.d.ts.map +1 -0
  151. package/dist/resolution/cooperative-yield.js +42 -0
  152. package/dist/resolution/cooperative-yield.js.map +1 -0
  153. package/dist/resolution/index.d.ts +11 -2
  154. package/dist/resolution/index.d.ts.map +1 -1
  155. package/dist/resolution/index.js +72 -4
  156. package/dist/resolution/index.js.map +1 -1
  157. package/dist/resolution/name-matcher.d.ts +22 -0
  158. package/dist/resolution/name-matcher.d.ts.map +1 -1
  159. package/dist/resolution/name-matcher.js +317 -20
  160. package/dist/resolution/name-matcher.js.map +1 -1
  161. package/dist/spec/config.d.ts +39 -0
  162. package/dist/spec/config.d.ts.map +1 -0
  163. package/dist/spec/config.js +304 -0
  164. package/dist/spec/config.js.map +1 -0
  165. package/dist/spec/db/commit-node.d.ts +23 -0
  166. package/dist/spec/db/commit-node.d.ts.map +1 -0
  167. package/dist/spec/db/commit-node.js +62 -0
  168. package/dist/spec/db/commit-node.js.map +1 -0
  169. package/dist/spec/db/fragment-node.d.ts +24 -0
  170. package/dist/spec/db/fragment-node.d.ts.map +1 -0
  171. package/dist/spec/db/fragment-node.js +128 -0
  172. package/dist/spec/db/fragment-node.js.map +1 -0
  173. package/dist/spec/db/fts.d.ts +74 -0
  174. package/dist/spec/db/fts.d.ts.map +1 -0
  175. package/dist/spec/db/fts.js +324 -0
  176. package/dist/spec/db/fts.js.map +1 -0
  177. package/dist/spec/db/index.d.ts +13 -0
  178. package/dist/spec/db/index.d.ts.map +1 -0
  179. package/dist/spec/db/index.js +50 -0
  180. package/dist/spec/db/index.js.map +1 -0
  181. package/dist/spec/db/relations.d.ts +55 -0
  182. package/dist/spec/db/relations.d.ts.map +1 -0
  183. package/dist/spec/db/relations.js +158 -0
  184. package/dist/spec/db/relations.js.map +1 -0
  185. package/dist/spec/db/schema.d.ts +33 -0
  186. package/dist/spec/db/schema.d.ts.map +1 -0
  187. package/dist/spec/db/schema.js +119 -0
  188. package/dist/spec/db/schema.js.map +1 -0
  189. package/dist/spec/db/schema.sql +117 -0
  190. package/dist/spec/db/spec-node.d.ts +41 -0
  191. package/dist/spec/db/spec-node.d.ts.map +1 -0
  192. package/dist/spec/db/spec-node.js +114 -0
  193. package/dist/spec/db/spec-node.js.map +1 -0
  194. package/dist/spec/evolve/impact-locator.d.ts +13 -0
  195. package/dist/spec/evolve/impact-locator.d.ts.map +1 -0
  196. package/dist/spec/evolve/impact-locator.js +25 -0
  197. package/dist/spec/evolve/impact-locator.js.map +1 -0
  198. package/dist/spec/evolve/llm-client.d.ts +50 -0
  199. package/dist/spec/evolve/llm-client.d.ts.map +1 -0
  200. package/dist/spec/evolve/llm-client.js +176 -0
  201. package/dist/spec/evolve/llm-client.js.map +1 -0
  202. package/dist/spec/evolve/logic-checker.d.ts +12 -0
  203. package/dist/spec/evolve/logic-checker.d.ts.map +1 -0
  204. package/dist/spec/evolve/logic-checker.js +24 -0
  205. package/dist/spec/evolve/logic-checker.js.map +1 -0
  206. package/dist/spec/evolve/pipeline.d.ts +42 -0
  207. package/dist/spec/evolve/pipeline.d.ts.map +1 -0
  208. package/dist/spec/evolve/pipeline.js +567 -0
  209. package/dist/spec/evolve/pipeline.js.map +1 -0
  210. package/dist/spec/evolve/spec-rewriter.d.ts +42 -0
  211. package/dist/spec/evolve/spec-rewriter.d.ts.map +1 -0
  212. package/dist/spec/evolve/spec-rewriter.js +230 -0
  213. package/dist/spec/evolve/spec-rewriter.js.map +1 -0
  214. package/dist/spec/graph/queries.d.ts +155 -0
  215. package/dist/spec/graph/queries.d.ts.map +1 -0
  216. package/dist/spec/graph/queries.js +440 -0
  217. package/dist/spec/graph/queries.js.map +1 -0
  218. package/dist/spec/llm/client.d.ts +29 -0
  219. package/dist/spec/llm/client.d.ts.map +1 -0
  220. package/dist/spec/llm/client.js +123 -0
  221. package/dist/spec/llm/client.js.map +1 -0
  222. package/dist/spec/llm/index.d.ts +3 -0
  223. package/dist/spec/llm/index.d.ts.map +1 -0
  224. package/dist/spec/llm/index.js +11 -0
  225. package/dist/spec/llm/index.js.map +1 -0
  226. package/dist/spec/llm/prompts.d.ts +13 -0
  227. package/dist/spec/llm/prompts.d.ts.map +1 -0
  228. package/dist/spec/llm/prompts.js +75 -0
  229. package/dist/spec/llm/prompts.js.map +1 -0
  230. package/dist/spec/mining/diff-parser.d.ts +33 -0
  231. package/dist/spec/mining/diff-parser.d.ts.map +1 -0
  232. package/dist/spec/mining/diff-parser.js +166 -0
  233. package/dist/spec/mining/diff-parser.js.map +1 -0
  234. package/dist/spec/mining/git-scanner.d.ts +103 -0
  235. package/dist/spec/mining/git-scanner.d.ts.map +1 -0
  236. package/dist/spec/mining/git-scanner.js +307 -0
  237. package/dist/spec/mining/git-scanner.js.map +1 -0
  238. package/dist/spec/mining/pipeline.d.ts +53 -0
  239. package/dist/spec/mining/pipeline.d.ts.map +1 -0
  240. package/dist/spec/mining/pipeline.js +178 -0
  241. package/dist/spec/mining/pipeline.js.map +1 -0
  242. package/dist/spec/mining/scope-resolver.d.ts +45 -0
  243. package/dist/spec/mining/scope-resolver.d.ts.map +1 -0
  244. package/dist/spec/mining/scope-resolver.js +103 -0
  245. package/dist/spec/mining/scope-resolver.js.map +1 -0
  246. package/dist/spec/mining/spec-extractor.d.ts +69 -0
  247. package/dist/spec/mining/spec-extractor.d.ts.map +1 -0
  248. package/dist/spec/mining/spec-extractor.js +369 -0
  249. package/dist/spec/mining/spec-extractor.js.map +1 -0
  250. package/dist/spec/types.d.ts +149 -0
  251. package/dist/spec/types.d.ts.map +1 -0
  252. package/dist/spec/types.js +15 -0
  253. package/dist/spec/types.js.map +1 -0
  254. package/dist/spec/utils.d.ts +167 -0
  255. package/dist/spec/utils.d.ts.map +1 -0
  256. package/dist/spec/utils.js +463 -0
  257. package/dist/spec/utils.js.map +1 -0
  258. package/dist/sync/worktree.d.ts +9 -0
  259. package/dist/sync/worktree.d.ts.map +1 -1
  260. package/dist/sync/worktree.js +40 -0
  261. package/dist/sync/worktree.js.map +1 -1
  262. package/dist/types.d.ts +6 -1
  263. package/dist/types.d.ts.map +1 -1
  264. package/dist/ui/shimmer-progress.d.ts +2 -0
  265. package/dist/ui/shimmer-progress.d.ts.map +1 -1
  266. package/dist/ui/shimmer-progress.js +19 -2
  267. package/dist/ui/shimmer-progress.js.map +1 -1
  268. package/dist/upgrade/index.js +1 -1
  269. package/dist/upgrade/index.js.map +1 -1
  270. package/package.json +58 -57
  271. package/scripts/add-lang/bench.sh +60 -60
  272. package/scripts/add-lang/check-grammar.mjs +75 -75
  273. package/scripts/add-lang/dump-ast.mjs +103 -103
  274. package/scripts/add-lang/verify-extraction.mjs +70 -70
  275. package/scripts/agent-eval/ab-adoption.sh +91 -91
  276. package/scripts/agent-eval/ab-hook.sh +86 -86
  277. package/scripts/agent-eval/ab-impl.sh +78 -78
  278. package/scripts/agent-eval/ab-new-vs-baseline.sh +102 -102
  279. package/scripts/agent-eval/ab-sufficiency.sh +78 -78
  280. package/scripts/agent-eval/arms-F.sh +21 -21
  281. package/scripts/agent-eval/arms-matrix.sh +37 -37
  282. package/scripts/agent-eval/audit.sh +68 -68
  283. package/scripts/agent-eval/bench-readme.sh +28 -28
  284. package/scripts/agent-eval/bench-why-repo.sh +22 -22
  285. package/scripts/agent-eval/block-read-hook.sh +19 -19
  286. package/scripts/agent-eval/hook-settings.json +15 -15
  287. package/scripts/agent-eval/itrun.sh +120 -120
  288. package/scripts/agent-eval/offload-eval-3arm.sh +72 -72
  289. package/scripts/agent-eval/offload-eval-cost.mjs +133 -133
  290. package/scripts/agent-eval/offload-eval-effort.mjs +108 -108
  291. package/scripts/agent-eval/offload-eval-frontload-matrix.sh +25 -25
  292. package/scripts/agent-eval/offload-eval-frontload.sh +47 -47
  293. package/scripts/agent-eval/offload-eval-ground-truth.json +18 -18
  294. package/scripts/agent-eval/offload-eval-hook.mjs +84 -84
  295. package/scripts/agent-eval/offload-eval-judge.mjs +103 -103
  296. package/scripts/agent-eval/offload-eval-matrix.sh +20 -20
  297. package/scripts/agent-eval/offload-eval-metrics.mjs +94 -94
  298. package/scripts/agent-eval/offload-eval-refs1.sh +50 -50
  299. package/scripts/agent-eval/offload-eval-setup.sh +24 -24
  300. package/scripts/agent-eval/offload-eval-styles.sh +71 -71
  301. package/scripts/agent-eval/offload-eval-summarize.mjs +68 -68
  302. package/scripts/agent-eval/offload-eval.md +76 -76
  303. package/scripts/agent-eval/parse-arms.mjs +116 -116
  304. package/scripts/agent-eval/parse-bench-readme.mjs +84 -84
  305. package/scripts/agent-eval/parse-run.mjs +45 -45
  306. package/scripts/agent-eval/parse-session.mjs +93 -93
  307. package/scripts/agent-eval/probe-context.mjs +21 -21
  308. package/scripts/agent-eval/probe-explore.mjs +40 -40
  309. package/scripts/agent-eval/probe-node.mjs +20 -20
  310. package/scripts/agent-eval/probe-sweep.mjs +119 -119
  311. package/scripts/agent-eval/probe-trace.mjs +20 -20
  312. package/scripts/agent-eval/redirect-read-hook.sh +38 -38
  313. package/scripts/agent-eval/repro-concurrent-explore.mjs +119 -0
  314. package/scripts/agent-eval/repro-daemon-clients.mjs +125 -0
  315. package/scripts/agent-eval/run-agent.sh +34 -34
  316. package/scripts/agent-eval/run-all.sh +69 -69
  317. package/scripts/agent-eval/run-arms.sh +56 -56
  318. package/scripts/agent-eval/seq-matrix.mjs +137 -137
  319. package/scripts/build-bundle.sh +118 -118
  320. package/scripts/exp_boundary_eval/README.md +247 -0
  321. package/scripts/exp_boundary_eval/__pycache__/_utils.cpython-310.pyc +0 -0
  322. package/scripts/exp_boundary_eval/__pycache__/analyze.cpython-310.pyc +0 -0
  323. package/scripts/exp_boundary_eval/__pycache__/deveco_arm.cpython-310.pyc +0 -0
  324. package/scripts/exp_boundary_eval/__pycache__/run_one.cpython-310.pyc +0 -0
  325. package/scripts/exp_boundary_eval/__pycache__/run_session.cpython-310.pyc +0 -0
  326. package/scripts/exp_boundary_eval/__pycache__/setup.cpython-310.pyc +0 -0
  327. package/scripts/exp_boundary_eval/_test_mcp_chain.py +78 -0
  328. package/scripts/exp_boundary_eval/_test_stdin.py +8 -0
  329. package/scripts/exp_boundary_eval/_utils.py +1116 -0
  330. package/scripts/exp_boundary_eval/analyze.py +1313 -0
  331. package/scripts/exp_boundary_eval/data/agents.json +109 -0
  332. package/scripts/exp_boundary_eval/data/experiments.json +140 -0
  333. package/scripts/exp_boundary_eval/deveco_arm.py +519 -0
  334. package/scripts/exp_boundary_eval/run_all.py +378 -0
  335. package/scripts/exp_boundary_eval/run_one.py +165 -0
  336. package/scripts/exp_boundary_eval/run_session.py +158 -0
  337. package/scripts/exp_boundary_eval/setup.py +120 -0
  338. package/scripts/exp_boundary_eval/win_mcp_launcher.py +73 -0
  339. package/scripts/exp_boundary_eval/win_mcp_stdio_wrap.js +36 -0
  340. package/scripts/exp_boundary_eval/win_node_launcher.py +24 -0
  341. package/scripts/extract-release-notes.mjs +130 -130
  342. package/scripts/local-install.sh +41 -41
  343. package/scripts/npm-sdk.js +75 -75
  344. package/scripts/npm-shim.js +268 -246
  345. package/scripts/ohos-sdk-publish.mjs +133 -0
  346. package/scripts/pack-npm.sh +119 -119
  347. package/scripts/prepare-release.mjs +270 -270
  348. package/scripts/qa_eval/README.md +407 -404
  349. package/scripts/qa_eval/_test_deveco_probe.py +41 -41
  350. package/scripts/qa_eval/agent_runner.py +526 -526
  351. package/scripts/qa_eval/data/.gitignore +4 -4
  352. package/scripts/qa_eval/data/test-set.jsonl +2 -22
  353. package/scripts/qa_eval/eval_metrics.py +274 -233
  354. package/scripts/qa_eval/external_agent.py +976 -671
  355. package/scripts/qa_eval/llm_config.py +92 -92
  356. package/scripts/qa_eval/memory_monitor.py +132 -132
  357. package/scripts/qa_eval/my_answer_accuracy.py +187 -187
  358. package/scripts/qa_eval/requirements.txt +2 -2
  359. package/scripts/qa_eval/run_pipeline.py +804 -711
  360. package/scripts/qa_eval/stats_efficiency.py +279 -279
  361. package/scripts/qa_eval/stats_scores.py +207 -207
@@ -0,0 +1,190 @@
1
+ "use strict";
2
+ /**
3
+ * Build a standalone OHOS API symbol database from an SDK `ets` tree.
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.indexOhosApiDb = indexOhosApiDb;
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ const db_1 = require("../db");
43
+ const queries_1 = require("../db/queries");
44
+ const context_1 = require("../extraction/context");
45
+ const arkts_1 = require("../extraction/languages/arkts");
46
+ const extraction_version_1 = require("../extraction/extraction-version");
47
+ const version_1 = require("../mcp/version");
48
+ const ohos_sdk_input_1 = require("./ohos-sdk-input");
49
+ function scanFirstArkTsTriggerFile(etsRoot) {
50
+ let found = null;
51
+ function walk(dir) {
52
+ if (found)
53
+ return;
54
+ let entries;
55
+ try {
56
+ entries = fs.readdirSync(dir, { withFileTypes: true });
57
+ }
58
+ catch {
59
+ return;
60
+ }
61
+ for (const entry of entries) {
62
+ const full = path.join(dir, entry.name);
63
+ if (entry.isDirectory()) {
64
+ if (entry.name === 'node_modules' || entry.name === '.git')
65
+ continue;
66
+ walk(full);
67
+ }
68
+ else if (entry.isFile()) {
69
+ const lower = entry.name.toLowerCase();
70
+ if (lower.endsWith('.ets') ||
71
+ lower.endsWith('.d.ts') ||
72
+ lower.endsWith('.d.ets') ||
73
+ (lower.endsWith('.ts') && !lower.endsWith('.d.ts'))) {
74
+ found = path.relative(etsRoot, full).replace(/\\/g, '/');
75
+ return;
76
+ }
77
+ }
78
+ }
79
+ }
80
+ walk(etsRoot);
81
+ return found;
82
+ }
83
+ function countArkTsSources(etsRoot) {
84
+ let count = 0;
85
+ function walk(dir) {
86
+ let entries;
87
+ try {
88
+ entries = fs.readdirSync(dir, { withFileTypes: true });
89
+ }
90
+ catch {
91
+ return;
92
+ }
93
+ for (const entry of entries) {
94
+ const full = path.join(dir, entry.name);
95
+ if (entry.isDirectory()) {
96
+ if (entry.name === 'node_modules' || entry.name === '.git')
97
+ continue;
98
+ walk(full);
99
+ }
100
+ else if (entry.isFile()) {
101
+ const lower = entry.name.toLowerCase();
102
+ if (lower.endsWith('.ets') ||
103
+ lower.endsWith('.d.ts') ||
104
+ lower.endsWith('.d.ets') ||
105
+ (lower.endsWith('.ts') && !lower.endsWith('.d.ts'))) {
106
+ count++;
107
+ }
108
+ }
109
+ }
110
+ }
111
+ walk(etsRoot);
112
+ return count;
113
+ }
114
+ /**
115
+ * Index OpenHarmony (and optional HMS) SDK API declarations into a SQLite db.
116
+ */
117
+ async function indexOhosApiDb(options) {
118
+ const sdkHome = path.resolve(options.sdkHome);
119
+ if (!(0, ohos_sdk_input_1.hasOpenHarmonyEts)(sdkHome)) {
120
+ throw new Error(`SDK home is missing openharmony/ets: ${sdkHome}`);
121
+ }
122
+ const etsRoots = (0, ohos_sdk_input_1.listOhosApiEtsRoots)(sdkHome);
123
+ if (etsRoots.length === 0) {
124
+ throw new Error(`No API ets roots found under ${sdkHome}`);
125
+ }
126
+ const outputPath = path.resolve(options.outputPath ?? path.join(process.cwd(), (0, ohos_sdk_input_1.ohosApiDbFilename)(options.version)));
127
+ if (fs.existsSync(outputPath)) {
128
+ fs.unlinkSync(outputPath);
129
+ }
130
+ const startTime = Date.now();
131
+ const errors = [];
132
+ let filesIndexed = 0;
133
+ const db = db_1.DatabaseConnection.initialize(outputPath);
134
+ const queries = new queries_1.QueryBuilder(db.getDb());
135
+ try {
136
+ for (const etsRoot of etsRoots) {
137
+ const trigger = scanFirstArkTsTriggerFile(etsRoot);
138
+ if (!trigger) {
139
+ errors.push({
140
+ message: `No ArkTS sources under ${etsRoot}`,
141
+ severity: 'warning',
142
+ });
143
+ continue;
144
+ }
145
+ const total = countArkTsSources(etsRoot);
146
+ options.onProgress?.({
147
+ phase: 'arkts-batch',
148
+ current: 0,
149
+ total,
150
+ currentFile: etsRoot,
151
+ subphase: 'scene',
152
+ });
153
+ (0, arkts_1.resetArkTSBatch)();
154
+ (0, context_1.resetExtractionContext)();
155
+ (0, context_1.bindExtractionContext)(etsRoot, queries);
156
+ await (0, arkts_1.primeArkTSBatch)(etsRoot, queries, trigger);
157
+ filesIndexed += total;
158
+ options.onProgress?.({
159
+ phase: 'arkts-batch',
160
+ current: total,
161
+ total,
162
+ currentFile: etsRoot,
163
+ subphase: 'persist',
164
+ });
165
+ }
166
+ const counts = queries.getNodeAndEdgeCount();
167
+ queries.setMetadata('ohos_api_version', options.version);
168
+ queries.setMetadata('ohos_api_sdk_home', sdkHome);
169
+ queries.setMetadata('ohos_api_db_kind', 'homegraph-ohos-api-db');
170
+ queries.setMetadata('indexed_with_version', version_1.HomeGraphPackageVersion);
171
+ queries.setMetadata('indexed_with_extraction_version', String(extraction_version_1.EXTRACTION_VERSION));
172
+ db.runMaintenance();
173
+ return {
174
+ success: errors.every((e) => e.severity !== 'error'),
175
+ filesIndexed,
176
+ filesSkipped: 0,
177
+ filesErrored: errors.filter((e) => e.severity === 'error').length,
178
+ nodesCreated: counts.nodes,
179
+ edgesCreated: counts.edges,
180
+ errors,
181
+ durationMs: Date.now() - startTime,
182
+ };
183
+ }
184
+ finally {
185
+ (0, arkts_1.resetArkTSBatch)();
186
+ (0, context_1.resetExtractionContext)();
187
+ db.close();
188
+ }
189
+ }
190
+ //# sourceMappingURL=ohos-api-index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ohos-api-index.js","sourceRoot":"","sources":["../../src/arkts/ohos-api-index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Resolve HarmonyOS command-line-tools archives/directories and API db versions.
3
+ */
4
+ export declare class OhosSdkInputError extends Error {
5
+ constructor(message: string);
6
+ }
7
+ /** Parse `6.1.1.290` or `commandline-tools-linux-x64-6.1.1.290.zip` → `6.1.1`. */
8
+ export declare function parseOhosToolsVersionFromName(name: string): string | null;
9
+ export declare function isArchivePath(inputPath: string): boolean;
10
+ /**
11
+ * Locate `sdk/default` that contains `openharmony/ets` under an extracted tree.
12
+ */
13
+ export declare function findOhosSdkHome(searchRoot: string): string | null;
14
+ export declare function hasOpenHarmonyEts(sdkHome: string): boolean;
15
+ export declare function listOhosApiEtsRoots(sdkHome: string): string[];
16
+ export interface ResolvedOhosSdkInput {
17
+ sdkHome: string;
18
+ version: string;
19
+ sourcePath: string;
20
+ /** Present when the input archive was extracted to a temp directory. */
21
+ cleanup?: () => void;
22
+ }
23
+ export interface ResolveOhosSdkInputOptions {
24
+ inputPath: string;
25
+ /** When set, overrides any version parsed from the path name. */
26
+ versionOverride?: string;
27
+ }
28
+ /**
29
+ * Resolve a command-line-tools archive or directory to an SDK home + API db version.
30
+ */
31
+ export declare function resolveOhosSdkInput(options: ResolveOhosSdkInputOptions): ResolvedOhosSdkInput;
32
+ /** Default filename for a versioned OHOS API db. */
33
+ export declare function ohosApiDbFilename(version: string): string;
34
+ /** Target path under ~/.homegraph/api/ for a versioned db. */
35
+ export declare function ohosApiDbInstallPath(version: string): string;
36
+ //# sourceMappingURL=ohos-sdk-input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ohos-sdk-input.d.ts","sourceRoot":"","sources":["../../src/arkts/ohos-sdk-input.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,qBAAa,iBAAkB,SAAQ,KAAK;gBAC9B,OAAO,EAAE,MAAM;CAI5B;AAED,kFAAkF;AAClF,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAKzE;AAWD,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAGxD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAuCjE;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAW7D;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,0BAA0B,GAAG,oBAAoB,CAgD7F;AA8BD,oDAAoD;AACpD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,8DAA8D;AAC9D,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE5D"}
@@ -0,0 +1,214 @@
1
+ "use strict";
2
+ /**
3
+ * Resolve HarmonyOS command-line-tools archives/directories and API db versions.
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.OhosSdkInputError = void 0;
40
+ exports.parseOhosToolsVersionFromName = parseOhosToolsVersionFromName;
41
+ exports.isArchivePath = isArchivePath;
42
+ exports.findOhosSdkHome = findOhosSdkHome;
43
+ exports.hasOpenHarmonyEts = hasOpenHarmonyEts;
44
+ exports.listOhosApiEtsRoots = listOhosApiEtsRoots;
45
+ exports.resolveOhosSdkInput = resolveOhosSdkInput;
46
+ exports.ohosApiDbFilename = ohosApiDbFilename;
47
+ exports.ohosApiDbInstallPath = ohosApiDbInstallPath;
48
+ const fs = __importStar(require("fs"));
49
+ const os = __importStar(require("os"));
50
+ const path = __importStar(require("path"));
51
+ const child_process_1 = require("child_process");
52
+ const ARCHIVE_EXTENSIONS = ['.tar.gz', '.tgz', '.zip', '.tar'];
53
+ class OhosSdkInputError extends Error {
54
+ constructor(message) {
55
+ super(message);
56
+ this.name = 'OhosSdkInputError';
57
+ }
58
+ }
59
+ exports.OhosSdkInputError = OhosSdkInputError;
60
+ /** Parse `6.1.1.290` or `commandline-tools-linux-x64-6.1.1.290.zip` → `6.1.1`. */
61
+ function parseOhosToolsVersionFromName(name) {
62
+ const base = path.basename(name);
63
+ const withoutExt = stripArchiveExtension(base);
64
+ const match = withoutExt.match(/(\d+\.\d+\.\d+)(?:\.\d+)?$/);
65
+ return match?.[1] ?? null;
66
+ }
67
+ function stripArchiveExtension(filename) {
68
+ for (const ext of ARCHIVE_EXTENSIONS) {
69
+ if (filename.toLowerCase().endsWith(ext)) {
70
+ return filename.slice(0, -ext.length);
71
+ }
72
+ }
73
+ return filename;
74
+ }
75
+ function isArchivePath(inputPath) {
76
+ const lower = inputPath.toLowerCase();
77
+ return ARCHIVE_EXTENSIONS.some((ext) => lower.endsWith(ext));
78
+ }
79
+ /**
80
+ * Locate `sdk/default` that contains `openharmony/ets` under an extracted tree.
81
+ */
82
+ function findOhosSdkHome(searchRoot) {
83
+ const resolved = path.resolve(searchRoot);
84
+ const direct = [
85
+ path.join(resolved, 'sdk', 'default'),
86
+ path.join(resolved, 'command-line-tools', 'sdk', 'default'),
87
+ ];
88
+ for (const candidate of direct) {
89
+ if (hasOpenHarmonyEts(candidate)) {
90
+ return candidate;
91
+ }
92
+ }
93
+ const queue = [{ dir: resolved, depth: 0 }];
94
+ const seen = new Set();
95
+ while (queue.length > 0) {
96
+ const { dir, depth } = queue.shift();
97
+ if (seen.has(dir) || depth > 5)
98
+ continue;
99
+ seen.add(dir);
100
+ const sdkDefault = path.join(dir, 'sdk', 'default');
101
+ if (hasOpenHarmonyEts(sdkDefault)) {
102
+ return sdkDefault;
103
+ }
104
+ if (depth >= 5)
105
+ continue;
106
+ let entries;
107
+ try {
108
+ entries = fs.readdirSync(dir, { withFileTypes: true });
109
+ }
110
+ catch {
111
+ continue;
112
+ }
113
+ for (const entry of entries) {
114
+ if (!entry.isDirectory())
115
+ continue;
116
+ if (entry.name === 'node_modules' || entry.name === '.git')
117
+ continue;
118
+ queue.push({ dir: path.join(dir, entry.name), depth: depth + 1 });
119
+ }
120
+ }
121
+ return null;
122
+ }
123
+ function hasOpenHarmonyEts(sdkHome) {
124
+ return fs.existsSync(path.join(sdkHome, 'openharmony', 'ets'));
125
+ }
126
+ function listOhosApiEtsRoots(sdkHome) {
127
+ const roots = [];
128
+ const openharmony = path.join(sdkHome, 'openharmony', 'ets');
129
+ if (fs.existsSync(openharmony)) {
130
+ roots.push(openharmony);
131
+ }
132
+ const hms = path.join(sdkHome, 'hms', 'ets');
133
+ if (fs.existsSync(hms)) {
134
+ roots.push(hms);
135
+ }
136
+ return roots;
137
+ }
138
+ /**
139
+ * Resolve a command-line-tools archive or directory to an SDK home + API db version.
140
+ */
141
+ function resolveOhosSdkInput(options) {
142
+ const inputPath = path.resolve(options.inputPath);
143
+ if (!fs.existsSync(inputPath)) {
144
+ throw new OhosSdkInputError(`Path does not exist: ${inputPath}`);
145
+ }
146
+ let searchRoot = inputPath;
147
+ let cleanup;
148
+ if (fs.statSync(inputPath).isFile()) {
149
+ if (!isArchivePath(inputPath)) {
150
+ throw new OhosSdkInputError(`Unsupported file type: ${path.basename(inputPath)} (expected .zip, .tar.gz, .tgz, or .tar)`);
151
+ }
152
+ const extracted = extractArchive(inputPath);
153
+ searchRoot = extracted.dir;
154
+ cleanup = extracted.cleanup;
155
+ }
156
+ const sdkHome = findOhosSdkHome(searchRoot);
157
+ if (!sdkHome) {
158
+ cleanup?.();
159
+ throw new OhosSdkInputError(`Could not find sdk/default/openharmony/ets under ${inputPath}. ` +
160
+ 'Expected HarmonyOS command-line-tools layout.');
161
+ }
162
+ const version = options.versionOverride?.trim() ||
163
+ parseOhosToolsVersionFromName(inputPath) ||
164
+ parseOhosToolsVersionFromName(searchRoot);
165
+ if (!version) {
166
+ cleanup?.();
167
+ throw new OhosSdkInputError('Could not determine API db version. Use a path like commandline-tools-linux-x64-6.1.1.290.zip ' +
168
+ 'or pass the version as the second argument.');
169
+ }
170
+ return {
171
+ sdkHome,
172
+ version,
173
+ sourcePath: inputPath,
174
+ cleanup,
175
+ };
176
+ }
177
+ function extractArchive(archivePath) {
178
+ const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'homegraph-ohos-sdk-'));
179
+ const lower = archivePath.toLowerCase();
180
+ try {
181
+ if (lower.endsWith('.zip')) {
182
+ (0, child_process_1.execFileSync)('unzip', ['-q', archivePath, '-d', tempDir], { stdio: 'pipe' });
183
+ }
184
+ else if (lower.endsWith('.tar.gz') || lower.endsWith('.tgz')) {
185
+ (0, child_process_1.execFileSync)('tar', ['-xzf', archivePath, '-C', tempDir], { stdio: 'pipe' });
186
+ }
187
+ else if (lower.endsWith('.tar')) {
188
+ (0, child_process_1.execFileSync)('tar', ['-xf', archivePath, '-C', tempDir], { stdio: 'pipe' });
189
+ }
190
+ else {
191
+ throw new OhosSdkInputError(`Unsupported archive: ${path.basename(archivePath)}`);
192
+ }
193
+ }
194
+ catch (err) {
195
+ fs.rmSync(tempDir, { recursive: true, force: true });
196
+ const msg = err instanceof Error ? err.message : String(err);
197
+ throw new OhosSdkInputError(`Failed to extract ${archivePath}: ${msg}`);
198
+ }
199
+ return {
200
+ dir: tempDir,
201
+ cleanup: () => {
202
+ fs.rmSync(tempDir, { recursive: true, force: true });
203
+ },
204
+ };
205
+ }
206
+ /** Default filename for a versioned OHOS API db. */
207
+ function ohosApiDbFilename(version) {
208
+ return `ohos-api-${version}.db`;
209
+ }
210
+ /** Target path under ~/.homegraph/api/ for a versioned db. */
211
+ function ohosApiDbInstallPath(version) {
212
+ return path.join(os.homedir(), '.homegraph', 'api', ohosApiDbFilename(version));
213
+ }
214
+ //# sourceMappingURL=ohos-sdk-input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ohos-sdk-input.js","sourceRoot":"","sources":["../../src/arkts/ohos-sdk-input.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ export interface CommandSupervision {
2
+ /** Tear down both watchdogs. Idempotent; call when the command finishes. */
3
+ stop(): void;
4
+ }
5
+ /**
6
+ * Install the liveness + PPID watchdogs for the duration of a CLI command.
7
+ * `label` is used in the shutdown notice (e.g. `"index"`). Returns a handle
8
+ * whose `stop()` must be called when the command completes so neither watchdog
9
+ * outlives it.
10
+ */
11
+ export declare function installCommandSupervision(label: string): CommandSupervision;
12
+ //# sourceMappingURL=command-supervision.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-supervision.d.ts","sourceRoot":"","sources":["../../src/bin/command-supervision.ts"],"names":[],"mappings":"AAmCA,MAAM,WAAW,kBAAkB;IACjC,4EAA4E;IAC5E,IAAI,IAAI,IAAI,CAAC;CACd;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB,CAwC3E"}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.installCommandSupervision = installCommandSupervision;
4
+ /**
5
+ * Process supervision for long-running CLI commands (`index` / `init --index`).
6
+ *
7
+ * Indexing a large repo can run for a while on the main thread, and #999
8
+ * surfaced two ways that goes wrong when nothing is watching it:
9
+ *
10
+ * 1. **Orphaned worker.** `index` runs in a child re-exec'd with
11
+ * `--liftoff-only` (the WASM-flag relaunch). Its parent blocks in
12
+ * `spawnSync`, so when the parent shim is killed it cannot forward the
13
+ * signal — the child keeps running, now orphaned, pinning a core. The PPID
14
+ * watchdog (#277) notices the parent/host went away and exits the child.
15
+ * 2. **Wedged indexer.** The `#850` main-thread liveness watchdog — which
16
+ * SIGKILLs a process whose event loop stops turning — was wired only into
17
+ * the MCP `serve` path, so a wedged `index`/`init` was never auto-killed.
18
+ *
19
+ * Both reuse the exact mechanisms `serve` already uses; this just makes them
20
+ * available to a one-shot command. Best-effort and self-disabling: a missing
21
+ * watchdog never blocks the command from running. Both honour the same env
22
+ * switches as `serve` (`CODEGRAPH_NO_WATCHDOG`, `CODEGRAPH_PPID_POLL_MS=0`).
23
+ *
24
+ * Unlike the daemon — whose main thread only does fast, bounded work — the
25
+ * `index`/`init` path runs reference resolution and dynamic-edge synthesis
26
+ * SYNCHRONOUSLY on this thread, and on a large repo that is legitimately many
27
+ * seconds of work. So those spans yield cooperatively to the event loop
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.
33
+ */
34
+ const liveness_watchdog_1 = require("../mcp/liveness-watchdog");
35
+ const ppid_watchdog_1 = require("../mcp/ppid-watchdog");
36
+ const daemon_registry_1 = require("../mcp/daemon-registry");
37
+ const wasm_runtime_flags_1 = require("../extraction/wasm-runtime-flags");
38
+ /**
39
+ * Install the liveness + PPID watchdogs for the duration of a CLI command.
40
+ * `label` is used in the shutdown notice (e.g. `"index"`). Returns a handle
41
+ * whose `stop()` must be called when the command completes so neither watchdog
42
+ * outlives it.
43
+ */
44
+ function installCommandSupervision(label) {
45
+ // Liveness watchdog: a separate process that SIGKILLs us if our event loop
46
+ // stops turning for too long (a wedged synchronous loop). Self-disables on
47
+ // CODEGRAPH_NO_WATCHDOG.
48
+ const liveness = (0, liveness_watchdog_1.installMainThreadWatchdog)();
49
+ // PPID watchdog: detect that the parent (or the host threaded past the
50
+ // relaunch shim) died and we've been orphaned, then exit instead of leaking.
51
+ const originalPpid = process.ppid;
52
+ const hostPpid = (0, ppid_watchdog_1.parseHostPpid)(process.env[wasm_runtime_flags_1.HOST_PPID_ENV]);
53
+ const pollMs = (0, ppid_watchdog_1.parsePpidPollMs)(process.env.CODEGRAPH_PPID_POLL_MS);
54
+ let ppidTimer = null;
55
+ if (pollMs > 0) {
56
+ ppidTimer = setInterval(() => {
57
+ const reason = (0, ppid_watchdog_1.supervisionLostReason)({
58
+ originalPpid,
59
+ currentPpid: process.ppid,
60
+ hostPpid,
61
+ isAlive: daemon_registry_1.isProcessAlive,
62
+ });
63
+ if (reason) {
64
+ try {
65
+ process.stderr.write(`[CodeGraph ${label}] Parent process exited (${reason}); aborting.\n`);
66
+ }
67
+ catch { /* stderr gone with the parent — exit anyway */ }
68
+ process.exit(1);
69
+ }
70
+ }, pollMs);
71
+ // Never let the watchdog itself keep the process alive past its real work.
72
+ ppidTimer.unref();
73
+ }
74
+ let stopped = false;
75
+ return {
76
+ stop() {
77
+ if (stopped)
78
+ return;
79
+ stopped = true;
80
+ if (ppidTimer)
81
+ clearInterval(ppidTimer);
82
+ liveness?.stop();
83
+ },
84
+ };
85
+ }
86
+ //# sourceMappingURL=command-supervision.js.map
@@ -0,0 +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"}
@@ -19,7 +19,7 @@
19
19
  * homegraph callers <symbol> Find what calls a function/method
20
20
  * homegraph callees <symbol> Find what a function/method calls
21
21
  * homegraph impact <symbol> Analyze what code is affected by changing a symbol
22
- * homegraph affected [files] Find test files affected by changes
22
+ * homegraph index-api <tools> Build OHOS API db from command-line-tools
23
23
  * homegraph upgrade [version] Update HomeGraph to the latest release
24
24
  */
25
25
  export {};