homegraph 1.1.3 → 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 (246) hide show
  1. package/README.md +43 -18
  2. package/dist/arkts/ohos-api-index.d.ts +15 -0
  3. package/dist/arkts/ohos-api-index.d.ts.map +1 -0
  4. package/dist/arkts/ohos-api-index.js +190 -0
  5. package/dist/arkts/ohos-api-index.js.map +1 -0
  6. package/dist/arkts/ohos-sdk-input.d.ts +36 -0
  7. package/dist/arkts/ohos-sdk-input.d.ts.map +1 -0
  8. package/dist/arkts/ohos-sdk-input.js +214 -0
  9. package/dist/arkts/ohos-sdk-input.js.map +1 -0
  10. package/dist/bin/command-supervision.d.ts +12 -0
  11. package/dist/bin/command-supervision.d.ts.map +1 -0
  12. package/dist/bin/command-supervision.js +86 -0
  13. package/dist/bin/command-supervision.js.map +1 -0
  14. package/dist/bin/homegraph.d.ts +1 -1
  15. package/dist/bin/homegraph.js +706 -168
  16. package/dist/bin/homegraph.js.map +1 -1
  17. package/dist/db/index.d.ts +20 -0
  18. package/dist/db/index.d.ts.map +1 -1
  19. package/dist/db/index.js +39 -0
  20. package/dist/db/index.js.map +1 -1
  21. package/dist/db/migrations.d.ts +1 -1
  22. package/dist/db/migrations.d.ts.map +1 -1
  23. package/dist/db/migrations.js +40 -1
  24. package/dist/db/migrations.js.map +1 -1
  25. package/dist/db/queries.d.ts +14 -0
  26. package/dist/db/queries.d.ts.map +1 -1
  27. package/dist/db/queries.js +174 -3
  28. package/dist/db/queries.js.map +1 -1
  29. package/dist/db/schema.sql +20 -0
  30. package/dist/directory.d.ts +32 -0
  31. package/dist/directory.d.ts.map +1 -1
  32. package/dist/directory.js +83 -0
  33. package/dist/directory.js.map +1 -1
  34. package/dist/extraction/arkts-batch-worker.d.ts +2 -0
  35. package/dist/extraction/arkts-batch-worker.d.ts.map +1 -0
  36. package/dist/extraction/arkts-batch-worker.js +28 -0
  37. package/dist/extraction/arkts-batch-worker.js.map +1 -0
  38. package/dist/extraction/context.d.ts +11 -0
  39. package/dist/extraction/context.d.ts.map +1 -1
  40. package/dist/extraction/context.js +20 -0
  41. package/dist/extraction/context.js.map +1 -1
  42. package/dist/extraction/index.d.ts +16 -2
  43. package/dist/extraction/index.d.ts.map +1 -1
  44. package/dist/extraction/index.js +619 -380
  45. package/dist/extraction/index.js.map +1 -1
  46. package/dist/extraction/languages/arkts-state-decorators.d.ts +13 -0
  47. package/dist/extraction/languages/arkts-state-decorators.d.ts.map +1 -0
  48. package/dist/extraction/languages/arkts-state-decorators.js +26 -0
  49. package/dist/extraction/languages/arkts-state-decorators.js.map +1 -0
  50. package/dist/extraction/languages/arkts-viewtree.d.ts +4 -2
  51. package/dist/extraction/languages/arkts-viewtree.d.ts.map +1 -1
  52. package/dist/extraction/languages/arkts-viewtree.js +21 -6
  53. package/dist/extraction/languages/arkts-viewtree.js.map +1 -1
  54. package/dist/extraction/languages/arkts.d.ts +98 -2
  55. package/dist/extraction/languages/arkts.d.ts.map +1 -1
  56. package/dist/extraction/languages/arkts.js +1290 -61
  57. package/dist/extraction/languages/arkts.js.map +1 -1
  58. package/dist/extraction/languages/c-cpp.d.ts +56 -0
  59. package/dist/extraction/languages/c-cpp.d.ts.map +1 -1
  60. package/dist/extraction/languages/c-cpp.js +198 -1
  61. package/dist/extraction/languages/c-cpp.js.map +1 -1
  62. package/dist/extraction/languages/ohos-api-consumer.d.ts +34 -0
  63. package/dist/extraction/languages/ohos-api-consumer.d.ts.map +1 -0
  64. package/dist/extraction/languages/ohos-api-consumer.js +283 -0
  65. package/dist/extraction/languages/ohos-api-consumer.js.map +1 -0
  66. package/dist/extraction/parse-pool.d.ts +126 -0
  67. package/dist/extraction/parse-pool.d.ts.map +1 -0
  68. package/dist/extraction/parse-pool.js +319 -0
  69. package/dist/extraction/parse-pool.js.map +1 -0
  70. package/dist/extraction/tree-sitter-types.d.ts +17 -0
  71. package/dist/extraction/tree-sitter-types.d.ts.map +1 -1
  72. package/dist/extraction/tree-sitter.d.ts +21 -0
  73. package/dist/extraction/tree-sitter.d.ts.map +1 -1
  74. package/dist/extraction/tree-sitter.js +198 -27
  75. package/dist/extraction/tree-sitter.js.map +1 -1
  76. package/dist/graph/traversal.d.ts.map +1 -1
  77. package/dist/graph/traversal.js +76 -17
  78. package/dist/graph/traversal.js.map +1 -1
  79. package/dist/index.d.ts +25 -0
  80. package/dist/index.d.ts.map +1 -1
  81. package/dist/index.js +78 -4
  82. package/dist/index.js.map +1 -1
  83. package/dist/mcp/daemon-paths.d.ts +30 -3
  84. package/dist/mcp/daemon-paths.d.ts.map +1 -1
  85. package/dist/mcp/daemon-paths.js +50 -10
  86. package/dist/mcp/daemon-paths.js.map +1 -1
  87. package/dist/mcp/daemon-registry.d.ts.map +1 -1
  88. package/dist/mcp/daemon-registry.js +7 -3
  89. package/dist/mcp/daemon-registry.js.map +1 -1
  90. package/dist/mcp/daemon.d.ts +48 -0
  91. package/dist/mcp/daemon.d.ts.map +1 -1
  92. package/dist/mcp/daemon.js +196 -32
  93. package/dist/mcp/daemon.js.map +1 -1
  94. package/dist/mcp/engine.d.ts +17 -0
  95. package/dist/mcp/engine.d.ts.map +1 -1
  96. package/dist/mcp/engine.js +73 -1
  97. package/dist/mcp/engine.js.map +1 -1
  98. package/dist/mcp/index.d.ts.map +1 -1
  99. package/dist/mcp/index.js +25 -43
  100. package/dist/mcp/index.js.map +1 -1
  101. package/dist/mcp/ppid-watchdog.d.ts +18 -0
  102. package/dist/mcp/ppid-watchdog.d.ts.map +1 -1
  103. package/dist/mcp/ppid-watchdog.js +37 -0
  104. package/dist/mcp/ppid-watchdog.js.map +1 -1
  105. package/dist/mcp/query-cache.d.ts +25 -0
  106. package/dist/mcp/query-cache.d.ts.map +1 -0
  107. package/dist/mcp/query-cache.js +191 -0
  108. package/dist/mcp/query-cache.js.map +1 -0
  109. package/dist/mcp/query-pool.d.ts +94 -0
  110. package/dist/mcp/query-pool.d.ts.map +1 -0
  111. package/dist/mcp/query-pool.js +297 -0
  112. package/dist/mcp/query-pool.js.map +1 -0
  113. package/dist/mcp/query-worker.d.ts +24 -0
  114. package/dist/mcp/query-worker.d.ts.map +1 -0
  115. package/dist/mcp/query-worker.js +87 -0
  116. package/dist/mcp/query-worker.js.map +1 -0
  117. package/dist/mcp/server-instructions.d.ts +5 -7
  118. package/dist/mcp/server-instructions.d.ts.map +1 -1
  119. package/dist/mcp/server-instructions.js +12 -14
  120. package/dist/mcp/server-instructions.js.map +1 -1
  121. package/dist/mcp/tools.d.ts +77 -0
  122. package/dist/mcp/tools.d.ts.map +1 -1
  123. package/dist/mcp/tools.js +696 -60
  124. package/dist/mcp/tools.js.map +1 -1
  125. package/dist/project-config.d.ts +20 -0
  126. package/dist/project-config.d.ts.map +1 -1
  127. package/dist/project-config.js +42 -2
  128. package/dist/project-config.js.map +1 -1
  129. package/dist/reasoning/login.js +1 -1
  130. package/dist/reasoning/login.js.map +1 -1
  131. package/dist/resolution/c-fnptr-synthesizer.d.ts +0 -28
  132. package/dist/resolution/c-fnptr-synthesizer.d.ts.map +1 -1
  133. package/dist/resolution/c-fnptr-synthesizer.js +765 -79
  134. package/dist/resolution/c-fnptr-synthesizer.js.map +1 -1
  135. package/dist/resolution/callback-synthesizer.d.ts +1 -1
  136. package/dist/resolution/callback-synthesizer.d.ts.map +1 -1
  137. package/dist/resolution/callback-synthesizer.js +72 -11
  138. package/dist/resolution/callback-synthesizer.js.map +1 -1
  139. package/dist/resolution/cooperative-yield.d.ts +32 -0
  140. package/dist/resolution/cooperative-yield.d.ts.map +1 -0
  141. package/dist/resolution/cooperative-yield.js +42 -0
  142. package/dist/resolution/cooperative-yield.js.map +1 -0
  143. package/dist/resolution/index.d.ts +11 -2
  144. package/dist/resolution/index.d.ts.map +1 -1
  145. package/dist/resolution/index.js +72 -4
  146. package/dist/resolution/index.js.map +1 -1
  147. package/dist/resolution/name-matcher.d.ts +22 -0
  148. package/dist/resolution/name-matcher.d.ts.map +1 -1
  149. package/dist/resolution/name-matcher.js +317 -20
  150. package/dist/resolution/name-matcher.js.map +1 -1
  151. package/dist/spec/config.d.ts +7 -11
  152. package/dist/spec/config.d.ts.map +1 -1
  153. package/dist/spec/config.js +77 -48
  154. package/dist/spec/config.js.map +1 -1
  155. package/dist/spec/db/fragment-node.d.ts +1 -0
  156. package/dist/spec/db/fragment-node.d.ts.map +1 -1
  157. package/dist/spec/db/fragment-node.js +8 -0
  158. package/dist/spec/db/fragment-node.js.map +1 -1
  159. package/dist/spec/db/fts.d.ts +14 -0
  160. package/dist/spec/db/fts.d.ts.map +1 -1
  161. package/dist/spec/db/fts.js +43 -4
  162. package/dist/spec/db/fts.js.map +1 -1
  163. package/dist/spec/db/schema.d.ts +6 -3
  164. package/dist/spec/db/schema.d.ts.map +1 -1
  165. package/dist/spec/db/schema.js +36 -4
  166. package/dist/spec/db/schema.js.map +1 -1
  167. package/dist/spec/db/schema.sql +11 -1
  168. package/dist/spec/evolve/logic-checker.d.ts +2 -2
  169. package/dist/spec/evolve/logic-checker.d.ts.map +1 -1
  170. package/dist/spec/evolve/logic-checker.js +3 -27
  171. package/dist/spec/evolve/logic-checker.js.map +1 -1
  172. package/dist/spec/evolve/pipeline.d.ts +21 -19
  173. package/dist/spec/evolve/pipeline.d.ts.map +1 -1
  174. package/dist/spec/evolve/pipeline.js +284 -31
  175. package/dist/spec/evolve/pipeline.js.map +1 -1
  176. package/dist/spec/evolve/spec-rewriter.d.ts +2 -2
  177. package/dist/spec/evolve/spec-rewriter.d.ts.map +1 -1
  178. package/dist/spec/evolve/spec-rewriter.js +7 -31
  179. package/dist/spec/evolve/spec-rewriter.js.map +1 -1
  180. package/dist/spec/graph/queries.d.ts +97 -0
  181. package/dist/spec/graph/queries.d.ts.map +1 -1
  182. package/dist/spec/graph/queries.js +225 -0
  183. package/dist/spec/graph/queries.js.map +1 -1
  184. package/dist/spec/llm/client.d.ts +29 -0
  185. package/dist/spec/llm/client.d.ts.map +1 -0
  186. package/dist/spec/llm/client.js +123 -0
  187. package/dist/spec/llm/client.js.map +1 -0
  188. package/dist/spec/llm/index.d.ts +3 -0
  189. package/dist/spec/llm/index.d.ts.map +1 -0
  190. package/dist/spec/llm/index.js +11 -0
  191. package/dist/spec/llm/index.js.map +1 -0
  192. package/dist/spec/llm/prompts.d.ts +13 -0
  193. package/dist/spec/llm/prompts.d.ts.map +1 -0
  194. package/dist/spec/llm/prompts.js +75 -0
  195. package/dist/spec/llm/prompts.js.map +1 -0
  196. package/dist/spec/mining/git-scanner.d.ts +12 -0
  197. package/dist/spec/mining/git-scanner.d.ts.map +1 -1
  198. package/dist/spec/mining/git-scanner.js +41 -0
  199. package/dist/spec/mining/git-scanner.js.map +1 -1
  200. package/dist/spec/mining/pipeline.d.ts.map +1 -1
  201. package/dist/spec/mining/pipeline.js +14 -1
  202. package/dist/spec/mining/pipeline.js.map +1 -1
  203. package/dist/spec/utils.d.ts +2 -1
  204. package/dist/spec/utils.d.ts.map +1 -1
  205. package/dist/spec/utils.js +3 -1
  206. package/dist/spec/utils.js.map +1 -1
  207. package/dist/sync/worktree.d.ts +9 -0
  208. package/dist/sync/worktree.d.ts.map +1 -1
  209. package/dist/sync/worktree.js +40 -0
  210. package/dist/sync/worktree.js.map +1 -1
  211. package/dist/types.d.ts +6 -1
  212. package/dist/types.d.ts.map +1 -1
  213. package/dist/ui/shimmer-progress.d.ts +2 -0
  214. package/dist/ui/shimmer-progress.d.ts.map +1 -1
  215. package/dist/ui/shimmer-progress.js +19 -2
  216. package/dist/ui/shimmer-progress.js.map +1 -1
  217. package/dist/upgrade/index.js +1 -1
  218. package/dist/upgrade/index.js.map +1 -1
  219. package/package.json +3 -3
  220. package/scripts/agent-eval/repro-concurrent-explore.mjs +119 -0
  221. package/scripts/agent-eval/repro-daemon-clients.mjs +125 -0
  222. package/scripts/exp_boundary_eval/README.md +247 -0
  223. package/scripts/exp_boundary_eval/__pycache__/_utils.cpython-310.pyc +0 -0
  224. package/scripts/exp_boundary_eval/__pycache__/analyze.cpython-310.pyc +0 -0
  225. package/scripts/exp_boundary_eval/__pycache__/deveco_arm.cpython-310.pyc +0 -0
  226. package/scripts/exp_boundary_eval/__pycache__/run_one.cpython-310.pyc +0 -0
  227. package/scripts/exp_boundary_eval/__pycache__/run_session.cpython-310.pyc +0 -0
  228. package/scripts/exp_boundary_eval/__pycache__/setup.cpython-310.pyc +0 -0
  229. package/scripts/exp_boundary_eval/_test_mcp_chain.py +78 -0
  230. package/scripts/exp_boundary_eval/_test_stdin.py +8 -0
  231. package/scripts/exp_boundary_eval/_utils.py +1116 -0
  232. package/scripts/exp_boundary_eval/analyze.py +1313 -0
  233. package/scripts/exp_boundary_eval/data/agents.json +109 -0
  234. package/scripts/exp_boundary_eval/data/experiments.json +140 -0
  235. package/scripts/exp_boundary_eval/deveco_arm.py +519 -0
  236. package/scripts/exp_boundary_eval/run_all.py +378 -0
  237. package/scripts/exp_boundary_eval/run_one.py +165 -0
  238. package/scripts/exp_boundary_eval/run_session.py +158 -0
  239. package/scripts/exp_boundary_eval/setup.py +120 -0
  240. package/scripts/exp_boundary_eval/win_mcp_launcher.py +73 -0
  241. package/scripts/exp_boundary_eval/win_mcp_stdio_wrap.js +36 -0
  242. package/scripts/exp_boundary_eval/win_node_launcher.py +24 -0
  243. package/scripts/npm-shim.js +25 -3
  244. package/scripts/ohos-sdk-publish.mjs +133 -0
  245. package/scripts/qa_eval/README.md +1 -1
  246. package/scripts/qa_eval/agent_runner.py +1 -1
package/README.md CHANGED
@@ -134,33 +134,57 @@ homegraph uninit # 删除当前项目的 .homegraph/ 索引
134
134
  ## 常用命令
135
135
 
136
136
  ```bash
137
- homegraph install # 配置 AI 助手
138
- homegraph init -i [path] # 初始化并索引项目
139
- homegraph index [path] # 全量索引(--force 强制重建)
140
- homegraph sync [path] # 增量同步变更
141
- homegraph status [path] # 查看索引状态
142
- homegraph query <关键词> # 搜索符号
143
- homegraph callers <符号> # 谁调用了它
144
- homegraph callees <符号> # 它调用了谁
145
- homegraph impact <符号> # 修改该符号的影响范围
146
- homegraph serve --mcp # 启动 MCP 服务(一般由 Agent 自动拉起)
137
+ homegraph install # 配置 AI 助手
138
+ homegraph init -i [path] # 初始化并索引项目
139
+ homegraph index [path] # 全量索引(--force 强制重建)
140
+ homegraph sync [path] # 增量同步变更
141
+ homegraph status [path] # 查看索引状态
142
+ homegraph query <关键词> # 搜索符号
143
+ homegraph explore <查询> # 探索区域(与 MCP homegraph_explore 相同输出)
144
+ homegraph node <符号或文件> # 读取符号/文件(与 MCP homegraph_node 相同输出)
145
+ homegraph files # 已索引文件树
146
+ homegraph callers <符号> # 谁调用了它
147
+ homegraph callees <符号> # 它调用了谁
148
+ homegraph impact <符号> # 修改该符号的影响范围
149
+ homegraph affected [files...] # 根据变更文件查找受影响的测试(支持 --stdin)
150
+ homegraph spec mine # 从 Git 历史挖掘规格知识图谱(Commit4Spec)
151
+ homegraph spec match <文本> # 搜索相似历史规格
152
+ homegraph spec evolve install # 安装 post-commit 钩子,提交后自动演化规格
153
+ homegraph serve --mcp # 启动 MCP 服务(一般由 Agent 自动拉起)
147
154
  ```
148
155
 
156
+ `explore` / `node` 等命令与同名 MCP 工具共享同一套输出,适合没有 MCP 的子 Agent 或脚本直接调用。
157
+
149
158
  ---
150
159
 
151
160
  ## MCP 工具
152
161
 
153
- Agent 侧工具名前缀为 `homegraph_`:
162
+ Agent 侧工具名前缀为 `homegraph_`。
163
+
164
+ **暴露规则:** 默认注册全部工具。索引文件数 **少于 500** 的小项目会自动收缩为三个核心工具(`explore` / `search` / `node`)。可通过环境变量 `HOMEGRAPH_MCP_TOOLS`(逗号分隔短名,如 `explore,node`)自定义暴露列表。
165
+
166
+ **跨项目查询:** 所有工具均支持可选参数 `projectPath`(绝对路径),用于在 monorepo 中查询子项目,或当 MCP 服务器根目录没有索引时指定目标项目。
154
167
 
155
168
  | 工具 | 用途 |
156
169
  |------|------|
157
- | `homegraph_explore` | 主要工具:一次返回相关符号源码与调用关系 |
158
- | `homegraph_search` | 按名称快速定位符号 |
170
+ | `homegraph_explore` | **主工具**:一次调用返回相关符号的完整源码、调用路径与影响范围;支持自然语言问题或符号/文件名列表 |
171
+ | `homegraph_search` | 按名称快速搜索符号(仅返回位置,不含源码) |
172
+ | `homegraph_node` | 读取单个符号或整个文件的源码(带行号)及调用关系;可替代 Read 读文件 |
159
173
  | `homegraph_callers` / `homegraph_callees` | 查看调用方 / 被调用方 |
160
- | `homegraph_impact` | 变更影响分析 |
161
- | `homegraph_node` | 单个符号的完整源码与上下文 |
162
- | `homegraph_files` | 已索引的文件结构 |
163
- | `homegraph_status` | 索引健康状态 |
174
+ | `homegraph_impact` | 变更影响分析(重构前使用) |
175
+ | `homegraph_files` | 已索引的文件树(支持 glob 过滤、按语言分组) |
176
+ | `homegraph_status` | 索引健康状态(调试用) |
177
+ | `homegraph_spec_match` | 将新需求描述与 Commit4Spec 规格知识图谱做全文匹配,返回相似历史规格及关联提交与代码片段 |
178
+
179
+ ### Commit4Spec(规格知识图谱)
180
+
181
+ `homegraph_spec_match` 与 `homegraph spec` 子命令基于 Commit4Spec:从 Git 历史中的 `.spec` 目录反向挖掘规格、提交与代码片段,存入 `.homegraph/commit4spec/commit4spec.db`。典型流程:
182
+
183
+ ```bash
184
+ homegraph spec mine # 首次挖掘
185
+ homegraph spec match "用户登录" # CLI 侧搜索(与 MCP spec_match 相同能力)
186
+ homegraph spec evolve install # 可选:每次 commit 后自动更新规格图谱
187
+ ```
164
188
 
165
189
  ---
166
190
 
@@ -168,7 +192,7 @@ Agent 侧工具名前缀为 `homegraph_`:
168
192
 
169
193
  继承上游多语言 tree-sitter 解析,包括但不限于:
170
194
 
171
- TypeScript / JavaScript、Python、Go、Rust、Java、C#、PHP、Ruby、C / C++、Objective-C、Swift、Kotlin、Scala、Dart、Lua、Luau、Svelte、Vue、Liquid、Pascal / Delphi 等。
195
+ TypeScript / JavaScript、Python、Go、Rust、Java、C#、PHP、Ruby、C / C++、Objective-C、Swift、Kotlin、Scala、Dart、Lua、Luau、R、Svelte、Vue、Astro、Liquid、Razor、Pascal / Delphi 等。
172
196
 
173
197
  **HomeGraph 新增:**
174
198
 
@@ -235,6 +259,7 @@ Cursor 等项目级配置写入 `./.cursor/mcp.json`,格式相同。推荐使
235
259
 
236
260
  - Node.js **22.5+**(推荐 22 LTS 或 24;使用 Node 内置 `node:sqlite`)
237
261
  - 首次索引时会对项目源码做 AST 解析,大型仓库首次 `init -i` 可能需要数分钟
262
+ - WSL2 下若项目位于 Windows 盘符(`/mnt/c` 等)且 MCP 连接不稳定,可设置 `HOMEGRAPH_NO_DAEMON=1` 跳过共享后台服务,每个会话独立运行
238
263
 
239
264
  ---
240
265
 
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Build a standalone OHOS API symbol database from an SDK `ets` tree.
3
+ */
4
+ import type { IndexProgress, IndexResult } from '../extraction';
5
+ export interface OhosApiIndexOptions {
6
+ sdkHome: string;
7
+ version: string;
8
+ outputPath?: string;
9
+ onProgress?: (progress: IndexProgress) => void;
10
+ }
11
+ /**
12
+ * Index OpenHarmony (and optional HMS) SDK API declarations into a SQLite db.
13
+ */
14
+ export declare function indexOhosApiDb(options: OhosApiIndexOptions): Promise<IndexResult>;
15
+ //# sourceMappingURL=ohos-api-index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ohos-api-index.d.ts","sourceRoot":"","sources":["../../src/arkts/ohos-api-index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAMhE,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,KAAK,IAAI,CAAC;CAChD;AAkED;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,WAAW,CAAC,CAoFvF"}
@@ -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"}