homegraph 0.9.10 → 1.1.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 (436) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +243 -193
  3. package/dist/bin/fatal-handler.d.ts +20 -0
  4. package/dist/bin/fatal-handler.d.ts.map +1 -0
  5. package/dist/bin/fatal-handler.js +118 -0
  6. package/dist/bin/fatal-handler.js.map +1 -0
  7. package/dist/bin/homegraph.d.ts +6 -6
  8. package/dist/bin/homegraph.js +532 -109
  9. package/dist/bin/homegraph.js.map +1 -1
  10. package/dist/bin/node-version-check.d.ts +4 -4
  11. package/dist/bin/node-version-check.js +12 -12
  12. package/dist/bin/uninstall.d.ts +1 -1
  13. package/dist/bin/uninstall.js +1 -1
  14. package/dist/context/index.d.ts.map +1 -1
  15. package/dist/context/index.js +8 -1
  16. package/dist/context/index.js.map +1 -1
  17. package/dist/db/index.d.ts +22 -1
  18. package/dist/db/index.d.ts.map +1 -1
  19. package/dist/db/index.js +48 -2
  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 +26 -17
  24. package/dist/db/migrations.js.map +1 -1
  25. package/dist/db/queries.d.ts +21 -1
  26. package/dist/db/queries.d.ts.map +1 -1
  27. package/dist/db/queries.js +180 -137
  28. package/dist/db/queries.js.map +1 -1
  29. package/dist/db/schema.sql +152 -151
  30. package/dist/db/sqlite-adapter.d.ts +1 -1
  31. package/dist/db/sqlite-adapter.js +3 -3
  32. package/dist/directory.d.ts +87 -6
  33. package/dist/directory.d.ts.map +1 -1
  34. package/dist/directory.js +319 -57
  35. package/dist/directory.js.map +1 -1
  36. package/dist/errors.d.ts +15 -15
  37. package/dist/errors.js +20 -20
  38. package/dist/extraction/astro-extractor.d.ts +79 -0
  39. package/dist/extraction/astro-extractor.d.ts.map +1 -0
  40. package/dist/extraction/astro-extractor.js +320 -0
  41. package/dist/extraction/astro-extractor.js.map +1 -0
  42. package/dist/extraction/context.d.ts +1 -1
  43. package/dist/extraction/context.js +1 -1
  44. package/dist/extraction/extraction-version.d.ts +2 -2
  45. package/dist/extraction/extraction-version.d.ts.map +1 -1
  46. package/dist/extraction/extraction-version.js +2 -2
  47. package/dist/extraction/extraction-version.js.map +1 -1
  48. package/dist/extraction/function-ref.d.ts +118 -0
  49. package/dist/extraction/function-ref.d.ts.map +1 -0
  50. package/dist/extraction/function-ref.js +727 -0
  51. package/dist/extraction/function-ref.js.map +1 -0
  52. package/dist/extraction/generated-detection.d.ts.map +1 -1
  53. package/dist/extraction/generated-detection.js +3 -0
  54. package/dist/extraction/generated-detection.js.map +1 -1
  55. package/dist/extraction/grammars.d.ts +15 -5
  56. package/dist/extraction/grammars.d.ts.map +1 -1
  57. package/dist/extraction/grammars.js +44 -10
  58. package/dist/extraction/grammars.js.map +1 -1
  59. package/dist/extraction/index.d.ts +37 -0
  60. package/dist/extraction/index.d.ts.map +1 -1
  61. package/dist/extraction/index.js +562 -70
  62. package/dist/extraction/index.js.map +1 -1
  63. package/dist/extraction/languages/arkts-viewtree.d.ts +22 -0
  64. package/dist/extraction/languages/arkts-viewtree.d.ts.map +1 -0
  65. package/dist/extraction/languages/arkts-viewtree.js +133 -0
  66. package/dist/extraction/languages/arkts-viewtree.js.map +1 -0
  67. package/dist/extraction/languages/arkts.d.ts.map +1 -1
  68. package/dist/extraction/languages/arkts.js +211 -20
  69. package/dist/extraction/languages/arkts.js.map +1 -1
  70. package/dist/extraction/languages/c-cpp.d.ts +8 -0
  71. package/dist/extraction/languages/c-cpp.d.ts.map +1 -1
  72. package/dist/extraction/languages/c-cpp.js +104 -2
  73. package/dist/extraction/languages/c-cpp.js.map +1 -1
  74. package/dist/extraction/languages/csharp.d.ts.map +1 -1
  75. package/dist/extraction/languages/csharp.js +58 -3
  76. package/dist/extraction/languages/csharp.js.map +1 -1
  77. package/dist/extraction/languages/dart.d.ts.map +1 -1
  78. package/dist/extraction/languages/dart.js +183 -1
  79. package/dist/extraction/languages/dart.js.map +1 -1
  80. package/dist/extraction/languages/go.d.ts.map +1 -1
  81. package/dist/extraction/languages/go.js +37 -0
  82. package/dist/extraction/languages/go.js.map +1 -1
  83. package/dist/extraction/languages/index.d.ts.map +1 -1
  84. package/dist/extraction/languages/index.js +2 -0
  85. package/dist/extraction/languages/index.js.map +1 -1
  86. package/dist/extraction/languages/java.d.ts.map +1 -1
  87. package/dist/extraction/languages/java.js +241 -0
  88. package/dist/extraction/languages/java.js.map +1 -1
  89. package/dist/extraction/languages/javascript.d.ts.map +1 -1
  90. package/dist/extraction/languages/javascript.js +16 -0
  91. package/dist/extraction/languages/javascript.js.map +1 -1
  92. package/dist/extraction/languages/kotlin.d.ts.map +1 -1
  93. package/dist/extraction/languages/kotlin.js +94 -0
  94. package/dist/extraction/languages/kotlin.js.map +1 -1
  95. package/dist/extraction/languages/objc.d.ts.map +1 -1
  96. package/dist/extraction/languages/objc.js +42 -0
  97. package/dist/extraction/languages/objc.js.map +1 -1
  98. package/dist/extraction/languages/pascal.d.ts.map +1 -1
  99. package/dist/extraction/languages/pascal.js +11 -0
  100. package/dist/extraction/languages/pascal.js.map +1 -1
  101. package/dist/extraction/languages/php.d.ts.map +1 -1
  102. package/dist/extraction/languages/php.js +77 -1
  103. package/dist/extraction/languages/php.js.map +1 -1
  104. package/dist/extraction/languages/r.d.ts +3 -0
  105. package/dist/extraction/languages/r.d.ts.map +1 -0
  106. package/dist/extraction/languages/r.js +314 -0
  107. package/dist/extraction/languages/r.js.map +1 -0
  108. package/dist/extraction/languages/rust.d.ts.map +1 -1
  109. package/dist/extraction/languages/rust.js +29 -0
  110. package/dist/extraction/languages/rust.js.map +1 -1
  111. package/dist/extraction/languages/scala.d.ts.map +1 -1
  112. package/dist/extraction/languages/scala.js +44 -9
  113. package/dist/extraction/languages/scala.js.map +1 -1
  114. package/dist/extraction/languages/swift.d.ts.map +1 -1
  115. package/dist/extraction/languages/swift.js +61 -0
  116. package/dist/extraction/languages/swift.js.map +1 -1
  117. package/dist/extraction/languages/typescript.d.ts +13 -0
  118. package/dist/extraction/languages/typescript.d.ts.map +1 -1
  119. package/dist/extraction/languages/typescript.js +38 -0
  120. package/dist/extraction/languages/typescript.js.map +1 -1
  121. package/dist/extraction/liquid-extractor.d.ts.map +1 -1
  122. package/dist/extraction/liquid-extractor.js +4 -1
  123. package/dist/extraction/liquid-extractor.js.map +1 -1
  124. package/dist/extraction/parse-worker.js +4 -1
  125. package/dist/extraction/parse-worker.js.map +1 -1
  126. package/dist/extraction/svelte-extractor.d.ts.map +1 -1
  127. package/dist/extraction/svelte-extractor.js +6 -3
  128. package/dist/extraction/svelte-extractor.js.map +1 -1
  129. package/dist/extraction/tree-sitter-helpers.d.ts.map +1 -1
  130. package/dist/extraction/tree-sitter-helpers.js +59 -10
  131. package/dist/extraction/tree-sitter-helpers.js.map +1 -1
  132. package/dist/extraction/tree-sitter-types.d.ts +29 -0
  133. package/dist/extraction/tree-sitter-types.d.ts.map +1 -1
  134. package/dist/extraction/tree-sitter.d.ts +192 -0
  135. package/dist/extraction/tree-sitter.d.ts.map +1 -1
  136. package/dist/extraction/tree-sitter.js +1553 -45
  137. package/dist/extraction/tree-sitter.js.map +1 -1
  138. package/dist/extraction/vue-extractor.d.ts.map +1 -1
  139. package/dist/extraction/vue-extractor.js +6 -3
  140. package/dist/extraction/vue-extractor.js.map +1 -1
  141. package/dist/extraction/wasm/tree-sitter-c_sharp.wasm +0 -0
  142. package/dist/extraction/wasm/tree-sitter-pascal.wasm +0 -0
  143. package/dist/extraction/wasm/tree-sitter-r.wasm +0 -0
  144. package/dist/graph/traversal.d.ts.map +1 -1
  145. package/dist/graph/traversal.js +11 -2
  146. package/dist/graph/traversal.js.map +1 -1
  147. package/dist/index.d.ts +64 -23
  148. package/dist/index.d.ts.map +1 -1
  149. package/dist/index.js +137 -41
  150. package/dist/index.js.map +1 -1
  151. package/dist/installer/config-writer.d.ts +1 -1
  152. package/dist/installer/config-writer.js +1 -1
  153. package/dist/installer/index.d.ts +4 -4
  154. package/dist/installer/index.d.ts.map +1 -1
  155. package/dist/installer/index.js +100 -73
  156. package/dist/installer/index.js.map +1 -1
  157. package/dist/installer/instructions-template.d.ts +34 -11
  158. package/dist/installer/instructions-template.d.ts.map +1 -1
  159. package/dist/installer/instructions-template.js +44 -12
  160. package/dist/installer/instructions-template.js.map +1 -1
  161. package/dist/installer/targets/antigravity.d.ts +6 -6
  162. package/dist/installer/targets/antigravity.js +14 -14
  163. package/dist/installer/targets/claude.d.ts +19 -13
  164. package/dist/installer/targets/claude.d.ts.map +1 -1
  165. package/dist/installer/targets/claude.js +97 -29
  166. package/dist/installer/targets/claude.js.map +1 -1
  167. package/dist/installer/targets/codebuddy.d.ts +17 -0
  168. package/dist/installer/targets/codebuddy.d.ts.map +1 -0
  169. package/dist/installer/targets/codebuddy.js +150 -0
  170. package/dist/installer/targets/codebuddy.js.map +1 -0
  171. package/dist/installer/targets/codex.js +5 -7
  172. package/dist/installer/targets/codex.js.map +1 -1
  173. package/dist/installer/targets/cursor.d.ts +1 -1
  174. package/dist/installer/targets/cursor.js +7 -7
  175. package/dist/installer/targets/deveco.d.ts +23 -0
  176. package/dist/installer/targets/deveco.d.ts.map +1 -0
  177. package/dist/installer/targets/deveco.js +217 -0
  178. package/dist/installer/targets/deveco.js.map +1 -0
  179. package/dist/installer/targets/gemini.js +5 -7
  180. package/dist/installer/targets/gemini.js.map +1 -1
  181. package/dist/installer/targets/hermes.js +15 -15
  182. package/dist/installer/targets/kiro.d.ts +1 -1
  183. package/dist/installer/targets/kiro.js +4 -4
  184. package/dist/installer/targets/opencode.d.ts +9 -1
  185. package/dist/installer/targets/opencode.d.ts.map +1 -1
  186. package/dist/installer/targets/opencode.js +92 -41
  187. package/dist/installer/targets/opencode.js.map +1 -1
  188. package/dist/installer/targets/registry.d.ts.map +1 -1
  189. package/dist/installer/targets/registry.js +4 -0
  190. package/dist/installer/targets/registry.js.map +1 -1
  191. package/dist/installer/targets/shared.d.ts +28 -4
  192. package/dist/installer/targets/shared.d.ts.map +1 -1
  193. package/dist/installer/targets/shared.js +32 -15
  194. package/dist/installer/targets/shared.js.map +1 -1
  195. package/dist/installer/targets/types.d.ts +9 -2
  196. package/dist/installer/targets/types.d.ts.map +1 -1
  197. package/dist/mcp/daemon-manager.d.ts +42 -0
  198. package/dist/mcp/daemon-manager.d.ts.map +1 -0
  199. package/dist/mcp/daemon-manager.js +129 -0
  200. package/dist/mcp/daemon-manager.js.map +1 -0
  201. package/dist/mcp/daemon-paths.d.ts +1 -1
  202. package/dist/mcp/daemon-paths.js +3 -3
  203. package/dist/mcp/daemon-registry.d.ts +47 -0
  204. package/dist/mcp/daemon-registry.d.ts.map +1 -0
  205. package/dist/mcp/daemon-registry.js +229 -0
  206. package/dist/mcp/daemon-registry.js.map +1 -0
  207. package/dist/mcp/daemon.d.ts.map +1 -1
  208. package/dist/mcp/daemon.js +27 -6
  209. package/dist/mcp/daemon.js.map +1 -1
  210. package/dist/mcp/dynamic-boundaries.d.ts +41 -0
  211. package/dist/mcp/dynamic-boundaries.d.ts.map +1 -0
  212. package/dist/mcp/dynamic-boundaries.js +359 -0
  213. package/dist/mcp/dynamic-boundaries.js.map +1 -0
  214. package/dist/mcp/engine.d.ts +4 -4
  215. package/dist/mcp/engine.d.ts.map +1 -1
  216. package/dist/mcp/engine.js +32 -24
  217. package/dist/mcp/engine.js.map +1 -1
  218. package/dist/mcp/index.d.ts +8 -7
  219. package/dist/mcp/index.d.ts.map +1 -1
  220. package/dist/mcp/index.js +39 -18
  221. package/dist/mcp/index.js.map +1 -1
  222. package/dist/mcp/liveness-watchdog.d.ts +18 -0
  223. package/dist/mcp/liveness-watchdog.d.ts.map +1 -0
  224. package/dist/mcp/liveness-watchdog.js +207 -0
  225. package/dist/mcp/liveness-watchdog.js.map +1 -0
  226. package/dist/mcp/proxy.d.ts +6 -0
  227. package/dist/mcp/proxy.d.ts.map +1 -1
  228. package/dist/mcp/proxy.js +75 -18
  229. package/dist/mcp/proxy.js.map +1 -1
  230. package/dist/mcp/server-instructions.d.ts +22 -7
  231. package/dist/mcp/server-instructions.d.ts.map +1 -1
  232. package/dist/mcp/server-instructions.js +91 -59
  233. package/dist/mcp/server-instructions.js.map +1 -1
  234. package/dist/mcp/session.d.ts +3 -1
  235. package/dist/mcp/session.d.ts.map +1 -1
  236. package/dist/mcp/session.js +43 -7
  237. package/dist/mcp/session.js.map +1 -1
  238. package/dist/mcp/stdin-teardown.d.ts +27 -0
  239. package/dist/mcp/stdin-teardown.d.ts.map +1 -0
  240. package/dist/mcp/stdin-teardown.js +49 -0
  241. package/dist/mcp/stdin-teardown.js.map +1 -0
  242. package/dist/mcp/tools.d.ts +137 -16
  243. package/dist/mcp/tools.d.ts.map +1 -1
  244. package/dist/mcp/tools.js +1271 -219
  245. package/dist/mcp/tools.js.map +1 -1
  246. package/dist/mcp/transport.d.ts +1 -1
  247. package/dist/mcp/transport.d.ts.map +1 -1
  248. package/dist/mcp/transport.js +20 -4
  249. package/dist/mcp/transport.js.map +1 -1
  250. package/dist/mcp/version.d.ts +1 -1
  251. package/dist/mcp/version.js +2 -2
  252. package/dist/project-config.d.ts +36 -0
  253. package/dist/project-config.d.ts.map +1 -0
  254. package/dist/project-config.js +235 -0
  255. package/dist/project-config.js.map +1 -0
  256. package/dist/reasoning/config.d.ts +45 -0
  257. package/dist/reasoning/config.d.ts.map +1 -0
  258. package/dist/reasoning/config.js +171 -0
  259. package/dist/reasoning/config.js.map +1 -0
  260. package/dist/reasoning/credentials.d.ts +5 -0
  261. package/dist/reasoning/credentials.d.ts.map +1 -0
  262. package/dist/reasoning/credentials.js +83 -0
  263. package/dist/reasoning/credentials.js.map +1 -0
  264. package/dist/reasoning/login.d.ts +21 -0
  265. package/dist/reasoning/login.d.ts.map +1 -0
  266. package/dist/reasoning/login.js +85 -0
  267. package/dist/reasoning/login.js.map +1 -0
  268. package/dist/reasoning/reasoner.d.ts +43 -0
  269. package/dist/reasoning/reasoner.d.ts.map +1 -0
  270. package/dist/reasoning/reasoner.js +308 -0
  271. package/dist/reasoning/reasoner.js.map +1 -0
  272. package/dist/resolution/c-fnptr-synthesizer.d.ts +33 -0
  273. package/dist/resolution/c-fnptr-synthesizer.d.ts.map +1 -0
  274. package/dist/resolution/c-fnptr-synthesizer.js +352 -0
  275. package/dist/resolution/c-fnptr-synthesizer.js.map +1 -0
  276. package/dist/resolution/callback-synthesizer.d.ts +6 -1
  277. package/dist/resolution/callback-synthesizer.d.ts.map +1 -1
  278. package/dist/resolution/callback-synthesizer.js +1197 -1
  279. package/dist/resolution/callback-synthesizer.js.map +1 -1
  280. package/dist/resolution/frameworks/arkts-entry.d.ts +12 -0
  281. package/dist/resolution/frameworks/arkts-entry.d.ts.map +1 -0
  282. package/dist/resolution/frameworks/arkts-entry.js +214 -0
  283. package/dist/resolution/frameworks/arkts-entry.js.map +1 -0
  284. package/dist/resolution/frameworks/arkts-napi.d.ts +3 -0
  285. package/dist/resolution/frameworks/arkts-napi.d.ts.map +1 -0
  286. package/dist/resolution/frameworks/arkts-napi.js +166 -0
  287. package/dist/resolution/frameworks/arkts-napi.js.map +1 -0
  288. package/dist/resolution/frameworks/astro.d.ts +9 -0
  289. package/dist/resolution/frameworks/astro.d.ts.map +1 -0
  290. package/dist/resolution/frameworks/astro.js +169 -0
  291. package/dist/resolution/frameworks/astro.js.map +1 -0
  292. package/dist/resolution/frameworks/goframe.d.ts +41 -0
  293. package/dist/resolution/frameworks/goframe.d.ts.map +1 -0
  294. package/dist/resolution/frameworks/goframe.js +112 -0
  295. package/dist/resolution/frameworks/goframe.js.map +1 -0
  296. package/dist/resolution/frameworks/index.d.ts +3 -0
  297. package/dist/resolution/frameworks/index.d.ts.map +1 -1
  298. package/dist/resolution/frameworks/index.js +17 -1
  299. package/dist/resolution/frameworks/index.js.map +1 -1
  300. package/dist/resolution/frameworks/java.js +6 -1
  301. package/dist/resolution/frameworks/java.js.map +1 -1
  302. package/dist/resolution/frameworks/react.d.ts.map +1 -1
  303. package/dist/resolution/frameworks/react.js +32 -63
  304. package/dist/resolution/frameworks/react.js.map +1 -1
  305. package/dist/resolution/frameworks/svelte.js +6 -2
  306. package/dist/resolution/frameworks/svelte.js.map +1 -1
  307. package/dist/resolution/frameworks/vue.js +24 -27
  308. package/dist/resolution/frameworks/vue.js.map +1 -1
  309. package/dist/resolution/goframe-synthesizer.d.ts +28 -0
  310. package/dist/resolution/goframe-synthesizer.d.ts.map +1 -0
  311. package/dist/resolution/goframe-synthesizer.js +158 -0
  312. package/dist/resolution/goframe-synthesizer.js.map +1 -0
  313. package/dist/resolution/import-resolver.d.ts +10 -0
  314. package/dist/resolution/import-resolver.d.ts.map +1 -1
  315. package/dist/resolution/import-resolver.js +125 -2
  316. package/dist/resolution/import-resolver.js.map +1 -1
  317. package/dist/resolution/index.d.ts +37 -0
  318. package/dist/resolution/index.d.ts.map +1 -1
  319. package/dist/resolution/index.js +306 -3
  320. package/dist/resolution/index.js.map +1 -1
  321. package/dist/resolution/name-matcher.d.ts +41 -0
  322. package/dist/resolution/name-matcher.d.ts.map +1 -1
  323. package/dist/resolution/name-matcher.js +519 -14
  324. package/dist/resolution/name-matcher.js.map +1 -1
  325. package/dist/resolution/strip-comments.d.ts +1 -1
  326. package/dist/resolution/strip-comments.d.ts.map +1 -1
  327. package/dist/resolution/strip-comments.js +2 -0
  328. package/dist/resolution/strip-comments.js.map +1 -1
  329. package/dist/resolution/types.d.ts +20 -3
  330. package/dist/resolution/types.d.ts.map +1 -1
  331. package/dist/search/query-utils.d.ts +17 -1
  332. package/dist/search/query-utils.d.ts.map +1 -1
  333. package/dist/search/query-utils.js +79 -10
  334. package/dist/search/query-utils.js.map +1 -1
  335. package/dist/sync/git-hooks.d.ts +4 -4
  336. package/dist/sync/git-hooks.js +5 -5
  337. package/dist/sync/watcher.d.ts +69 -2
  338. package/dist/sync/watcher.d.ts.map +1 -1
  339. package/dist/sync/watcher.js +226 -21
  340. package/dist/sync/watcher.js.map +1 -1
  341. package/dist/sync/worktree.d.ts +3 -3
  342. package/dist/sync/worktree.js +5 -5
  343. package/dist/telemetry/index.d.ts +143 -0
  344. package/dist/telemetry/index.d.ts.map +1 -0
  345. package/dist/telemetry/index.js +541 -0
  346. package/dist/telemetry/index.js.map +1 -0
  347. package/dist/types.d.ts +18 -3
  348. package/dist/types.d.ts.map +1 -1
  349. package/dist/types.js +3 -1
  350. package/dist/types.js.map +1 -1
  351. package/dist/upgrade/index.d.ts.map +1 -1
  352. package/dist/upgrade/index.js +46 -10
  353. package/dist/upgrade/index.js.map +1 -1
  354. package/dist/utils.d.ts +46 -27
  355. package/dist/utils.d.ts.map +1 -1
  356. package/dist/utils.js +87 -53
  357. package/dist/utils.js.map +1 -1
  358. package/package.json +57 -57
  359. package/scripts/add-lang/bench.sh +60 -60
  360. package/scripts/add-lang/check-grammar.mjs +75 -75
  361. package/scripts/add-lang/dump-ast.mjs +103 -103
  362. package/scripts/add-lang/verify-extraction.mjs +70 -70
  363. package/scripts/agent-eval/ab-adoption.sh +91 -0
  364. package/scripts/agent-eval/ab-hook.sh +86 -0
  365. package/scripts/agent-eval/ab-impl.sh +78 -0
  366. package/scripts/agent-eval/ab-new-vs-baseline.sh +102 -0
  367. package/scripts/agent-eval/ab-sufficiency.sh +78 -0
  368. package/scripts/agent-eval/arms-F.sh +21 -21
  369. package/scripts/agent-eval/arms-matrix.sh +37 -37
  370. package/scripts/agent-eval/audit.sh +68 -68
  371. package/scripts/agent-eval/bench-readme.sh +28 -28
  372. package/scripts/agent-eval/bench-why-repo.sh +22 -22
  373. package/scripts/agent-eval/block-read-hook.sh +19 -19
  374. package/scripts/agent-eval/hook-settings.json +15 -15
  375. package/scripts/agent-eval/itrun.sh +120 -120
  376. package/scripts/agent-eval/offload-eval-3arm.sh +72 -0
  377. package/scripts/agent-eval/offload-eval-cost.mjs +133 -0
  378. package/scripts/agent-eval/offload-eval-effort.mjs +108 -0
  379. package/scripts/agent-eval/offload-eval-frontload-matrix.sh +25 -0
  380. package/scripts/agent-eval/offload-eval-frontload.sh +47 -0
  381. package/scripts/agent-eval/offload-eval-ground-truth.json +18 -0
  382. package/scripts/agent-eval/offload-eval-hook.mjs +84 -0
  383. package/scripts/agent-eval/offload-eval-judge.mjs +103 -0
  384. package/scripts/agent-eval/offload-eval-matrix.sh +20 -0
  385. package/scripts/agent-eval/offload-eval-metrics.mjs +94 -0
  386. package/scripts/agent-eval/offload-eval-refs1.sh +50 -0
  387. package/scripts/agent-eval/offload-eval-setup.sh +24 -0
  388. package/scripts/agent-eval/offload-eval-styles.sh +72 -0
  389. package/scripts/agent-eval/offload-eval-summarize.mjs +68 -0
  390. package/scripts/agent-eval/offload-eval.md +76 -0
  391. package/scripts/agent-eval/parse-arms.mjs +116 -116
  392. package/scripts/agent-eval/parse-bench-readme.mjs +84 -84
  393. package/scripts/agent-eval/parse-run.mjs +45 -45
  394. package/scripts/agent-eval/parse-session.mjs +93 -93
  395. package/scripts/agent-eval/probe-context.mjs +21 -21
  396. package/scripts/agent-eval/probe-explore.mjs +40 -40
  397. package/scripts/agent-eval/probe-node.mjs +20 -20
  398. package/scripts/agent-eval/probe-sweep.mjs +119 -119
  399. package/scripts/agent-eval/probe-trace.mjs +20 -20
  400. package/scripts/agent-eval/redirect-read-hook.sh +38 -0
  401. package/scripts/agent-eval/run-agent.sh +34 -34
  402. package/scripts/agent-eval/run-all.sh +69 -67
  403. package/scripts/agent-eval/run-arms.sh +56 -56
  404. package/scripts/agent-eval/seq-matrix.mjs +137 -137
  405. package/scripts/build-bundle.sh +118 -118
  406. package/scripts/extract-release-notes.mjs +130 -130
  407. package/scripts/local-install.sh +41 -41
  408. package/scripts/npm-sdk.js +75 -75
  409. package/scripts/npm-shim.js +246 -246
  410. package/scripts/pack-npm.sh +119 -119
  411. package/scripts/prepare-release.mjs +270 -270
  412. package/scripts/qa_eval/README.md +400 -0
  413. package/scripts/qa_eval/agent_runner.py +526 -0
  414. package/scripts/qa_eval/data/.gitignore +4 -0
  415. package/scripts/qa_eval/data/test-set.jsonl +22 -0
  416. package/scripts/qa_eval/eval_metrics.py +233 -0
  417. package/scripts/qa_eval/external_agent.py +577 -0
  418. package/scripts/qa_eval/llm_config.py +92 -0
  419. package/scripts/qa_eval/memory_monitor.py +132 -0
  420. package/scripts/qa_eval/my_answer_accuracy.py +187 -0
  421. package/scripts/qa_eval/requirements.txt +2 -0
  422. package/scripts/qa_eval/run_pipeline.py +702 -0
  423. package/scripts/qa_eval/stats_efficiency.py +279 -0
  424. package/scripts/qa_eval/stats_scores.py +207 -0
  425. package/dist/bin/codegraph.d.ts +0 -26
  426. package/dist/bin/codegraph.d.ts.map +0 -1
  427. package/dist/bin/codegraph.js +0 -1572
  428. package/dist/bin/codegraph.js.map +0 -1
  429. package/dist/extraction/arkanalyzer-extractor.d.ts +0 -6
  430. package/dist/extraction/arkanalyzer-extractor.d.ts.map +0 -1
  431. package/dist/extraction/arkanalyzer-extractor.js +0 -11
  432. package/dist/extraction/arkanalyzer-extractor.js.map +0 -1
  433. package/dist/extraction/arkanalyzer-project.d.ts +0 -20
  434. package/dist/extraction/arkanalyzer-project.d.ts.map +0 -1
  435. package/dist/extraction/arkanalyzer-project.js +0 -596
  436. package/dist/extraction/arkanalyzer-project.js.map +0 -1
@@ -0,0 +1,400 @@
1
+ # QA Eval — 四段式 A/B 评测流水线
2
+
3
+ 内置多轮 Agent + Judge + 统计 + 报告,对齐 CodeGenie / Trae 评测框架:**Agent 跑题 → Judge 打分 → 分数统计 → 效率统计 → A/B 对比**。
4
+
5
+ - **国内可用**:Agent / Judge 均走 OpenAI 兼容接口,支持 **DashScope Qwen** 或 **智谱 GLM**
6
+ - **不依赖** Claude / ragas / langchain
7
+ - **被测仓库**:运行时用 `--repo` / `-r` 指定,无默认路径
8
+ ## 目录
9
+
10
+ ```
11
+ scripts/qa_eval/
12
+ ├── agent_runner.py # Stage 1:内置多轮 Agent(with / without 两路)
13
+ ├── my_answer_accuracy.py # Judge 指标(双 prompt 0–5 归一化)
14
+ ├── eval_metrics.py # Stage 2:对 JSONL 批量打分
15
+ ├── stats_scores.py # Stage 3:answer_accuracy_score 汇总
16
+ ├── stats_efficiency.py # Stage 4:解析 Agent 日志(首响应/轮次/耗时/Token/内存)
17
+ ├── memory_monitor.py # 进程树 RSS 采样(Linux /proc)
18
+ ├── external_agent.py # Claude Code / DevEco Code 外部 Agent 跑题
19
+ ├── run_pipeline.py # 编排 Stage 1–4 + A/B 报告
20
+ ├── requirements.txt
21
+ ├── data/ # 仅测试集 + 报告(可入库)
22
+ │ ├── test-set.jsonl
23
+ │ └── report-{host}.txt
24
+ └── log/ # 流水线中间产物(不入库)
25
+ ├── result-with-{host}.jsonl
26
+ ├── result-without-{host}.jsonl
27
+ ├── result-*-{host}-scored.jsonl
28
+ ├── agent-with-{host}.log
29
+ ├── agent-without-{host}.log
30
+ └── eval_metrics.log
31
+ ```
32
+
33
+ **Git 入库规则**
34
+
35
+ | 路径 | 是否提交 |
36
+ |------|----------|
37
+ | `scripts/qa_eval/*.py`、`README.md`、`requirements.txt` | 是 |
38
+ | `data/test-set.jsonl` | 是(测试集) |
39
+ | `data/report*.txt` | 否(报告,留在 data/ 但不入库) |
40
+ | `log/` 下全部 | 否 |
41
+ | `__pycache__/` | 否 |
42
+
43
+ ## 整体流程
44
+
45
+ ```
46
+ test-set.jsonl
47
+ ↓
48
+ Stage 1 agent_runner.py(run_pipeline ab 内置)
49
+ with : HomegraphQuery + ReadFile
50
+ without : SearchText(rg) + FindFiles + ReadFile
51
+ 产出: log/result-*-{host}.jsonl + log/agent-*-{host}.log
52
+ ↓
53
+ Stage 2 eval_metrics.py → log/result-*-{host}-scored.jsonl
54
+ ↓
55
+ Stage 3 stats_scores.py → 准确率汇总(并入 report-{host}.txt)
56
+ Stage 4 stats_efficiency.py → 效率汇总(终端 + report-{host}.txt)
57
+ ↓
58
+ run_pipeline.py ab → data/report-{host}.txt
59
+ ```
60
+
61
+ **A/B 唯一变量**:Agent 是否可用 homegraph。两臂使用**同一模型、同一 max_turns**;without **不是裸 LLM**,仍是多轮 grep/read Agent。
62
+
63
+ ## 快速开始
64
+
65
+ ```bash
66
+ pip install -r scripts/qa_eval/requirements.txt \
67
+ -i https://pypi.tuna.tsinghua.edu.cn/simple
68
+
69
+ export DASHSCOPE_API_KEY="sk-xxxxxxxx"
70
+ # 或使用智谱(Key 格式 id.secret,不要加 sk- 前缀):
71
+ # export ZHIPU_API_KEY="xxxxxxxx.yyyyyyyy"
72
+
73
+ cd /path/to/homegraph && npm run build
74
+ node dist/bin/homegraph.js sync /path/to/your/repo
75
+
76
+ python scripts/qa_eval/run_pipeline.py ab -r /path/to/your/repo
77
+ # 智谱显式指定:
78
+ # python scripts/qa_eval/run_pipeline.py ab -r /path/to/your/repo --provider zhipu
79
+ # python scripts/qa_eval/run_pipeline.py ab -r /path/to/your/repo --provider zhipu --model glm-4-flash```
80
+
81
+ ### Agent 宿主(`--agent-host`)
82
+
83
+ | 宿主 | 说明 | Agent 前置条件 | 报告文件 |
84
+ |------|------|----------------|----------|
85
+ | `builtin`(默认) | Python 内置多轮 Agent + 智谱/DashScope | `ZHIPU_API_KEY` 或 `DASHSCOPE_API_KEY` | `report-builtin.txt` |
86
+ | `claude-code` | **Claude Code CLI**(`claude -p` + MCP) | `claude login` 已登录 | `report-claude.txt` |
87
+ | `deveco-code` | **DevEco Code / opencode CLI** | `deveco` 在 PATH,且 **DevEco 自己的** provider 已登录(见下) | `report-deveco.txt` |
88
+
89
+ **注意**:`--provider zhipu` 只影响 **builtin Agent** 和 **Judge**;`deveco-code` / `claude-code` 使用各自 CLI 的账号与凭证,不会读取 `ZHIPU_API_KEY`。
90
+
91
+ DevEco 首次使用或换机后需配置模型:
92
+
93
+ ```bash
94
+ deveco providers reset # 若报 credentials cannot be decrypted
95
+ deveco # 打开 TUI,在设置里添加智谱等 provider
96
+ # 或
97
+ deveco providers login
98
+ ```
99
+
100
+ **Judge 打分**(Stage 2)三种宿主共用,仍需 `ZHIPU_API_KEY` 或 `DASHSCOPE_API_KEY`(与 `--provider` 一致)。
101
+
102
+ #### 怎么跑
103
+
104
+ ```bash
105
+ cd /path/to/homegraph
106
+ npm run build
107
+ node dist/bin/homegraph.js sync /path/to/your/repo
108
+
109
+ # ① 内置 Agent(智谱)
110
+ export ZHIPU_API_KEY="your-id.your-secret"
111
+ python scripts/qa_eval/run_pipeline.py ab -r /path/to/your/repo --provider zhipu --agent-host builtin
112
+ # → report-builtin.txt
113
+
114
+ # ② Claude Code(Agent 用 Claude 自己的账号,Judge 仍用上面的 Key)
115
+ which claude && claude login # 必须先登录,否则每题返回 Not logged in
116
+ python scripts/qa_eval/run_pipeline.py ab -r /path/to/your/repo --provider zhipu --agent-host claude-code
117
+ # → report-claude.txt
118
+
119
+ # ③ DevEco Code(Agent 用 DevEco 自己的 provider,Judge 仍用 ZHIPU_API_KEY)
120
+ where deveco
121
+ deveco providers reset # 仅凭证损坏/换机时需要
122
+ deveco # TUI 里配置智谱等模型后再跑评测
123
+ python scripts/qa_eval/run_pipeline.py ab -r /path/to/your/repo --provider zhipu --agent-host deveco-code
124
+ # → report-deveco.txt
125
+
126
+ # ④ 三种依次跑(各写各的报告,不会互相覆盖)
127
+ python scripts/qa_eval/run_pipeline.py hosts -r /path/to/your/repo --provider zhipu
128
+
129
+ # 等价于 hosts 的子集:
130
+ python scripts/qa_eval/run_pipeline.py hosts -r /path/to/your/repo --agent-hosts claude-code,deveco-code --provider zhipu```
131
+
132
+ 产出示例(每种宿主一套,互不覆盖):
133
+
134
+ | 宿主 | JSONL / 日志(`log/`) | 报告(`data/`) |
135
+ |------|------------------------|-----------------|
136
+ | builtin | `log/result-with-builtin.jsonl`、`log/agent-with-builtin.log` | `data/report-builtin.txt` |
137
+ | claude-code | `log/result-with-claude.jsonl`、`log/agent-with-claude.log` | `data/report-claude.txt` |
138
+ | deveco-code | `log/result-with-deveco.jsonl`、`log/agent-with-deveco.log` | `data/report-deveco.txt` |
139
+
140
+ (without 臂同理:`result-without-{host}.jsonl`、`agent-without-{host}.log`)
141
+
142
+ **若全局 `homegraph sync` 报 `Cannot find module 'arkanalyzer'`**:用本地 `dist/bin/homegraph.js`(pipeline 会自动优先找本地 build)。
143
+
144
+ ### `ab` 各阶段产出
145
+
146
+ | 阶段 | 终端 | 文件 |
147
+ |------|------|------|
148
+ | Stage 1 Agent | 每题进度 | `log/result-*.jsonl`、`log/agent-*.log` |
149
+ | Stage 2 Judge | eval_metrics 进度 | `log/result-*-scored.jsonl` |
150
+ | Stage 3–4 报告 | **效率明细**(两路任务列表 + 平均值) | **`data/report-{host}.txt`** |
151
+
152
+ 终端最后一行示例:
153
+
154
+ ```
155
+ A/B 完整报告已写入: .../scripts/qa_eval/data/report-deveco.txt
156
+ ```
157
+
158
+ ### `report-{host}.txt` 结构
159
+
160
+ ```
161
+ ################################################################################
162
+ # A/B 完整评测报告 #
163
+ ################################################################################
164
+
165
+ 【输入文件】
166
+ 【WITH homegraph】效率明细 ← 逐题 + 汇总(见下方「效率指标」)
167
+ 【WITHOUT homegraph】效率明细
168
+ 【WITH / WITHOUT homegraph】准确率统计 ← 见下方「准确率指标」
169
+ 按类别准确率 ← category_l1 分组 with/without 均分与 Δ
170
+ 逐题对比 ← 每题得分、答案摘要;末尾 with 赢/平/输 计数
171
+ 【A/B 汇总表】 ← 两臂核心指标并排 + Δ(with−without)
172
+ ```
173
+
174
+ 只重打报告、不重跑 Agent/Judge(无需 `--repo`):
175
+
176
+ ```bash
177
+ python scripts/qa_eval/run_pipeline.py ab --no-agent --no-judge
178
+ ```
179
+ ## Stage 1 — Agent(`agent_runner.py`)
180
+
181
+ 内置 Qwen 多轮工具 Agent,默认最多 **8 轮**(`--max-turns`)。
182
+
183
+ | 臂 | 工具 | 说明 |
184
+ |----|------|------|
185
+ | **with** | `HomegraphQuery`、`ReadFile` | 先 homegraph 检索符号,再读源码 |
186
+ | **without** | `SearchText`、`FindFiles`、`ReadFile` | rg 全文搜索 + glob 找文件 |
187
+
188
+ with 臂跑前会检查被测仓库已索引(`.homegraph/` 或 `.homegraph/`);without 臂不需要索引。
189
+
190
+ 每条 JSONL 写入字段示例:
191
+
192
+ ```json
193
+ {
194
+ "id": "R01",
195
+ "query": "getColorString 函数在哪个文件里定义?",
196
+ "reference_answer": "...",
197
+ "output_answer": "---\nHomegraphQuery\nquery: getColorString\n...\n---\n\n定义在 camera/common/.../ColorUtil.ets。",
198
+ "agent_backend": "agent-with-homegraph",
199
+ "agent_usage": { "total_tokens": 1296 },
200
+ "agent_duration_ms": 7830,
201
+ "agent_memory_mb": { "peak_rss_mb": 412.5, "avg_rss_mb": 380.2 }
202
+ }
203
+ ```
204
+
205
+ `agent_memory_mb` 为 Agent 进程树(含 homegraph MCP 子进程)在答题期间的 RSS 采样。
206
+
207
+ `output_answer` 中工具调用包在 `--- ... ---` 块里(与 CodeGenie 格式一致);Judge 会自动剥掉再打分。
208
+
209
+ ### Agent 日志格式(`agent-*.log`)
210
+
211
+ ```
212
+ 2026-06-23 09:25:21.052447 Evaluate 1:
213
+ 2026-06-23 09:25:21.052571 the 1 turn
214
+ 2026-06-23 09:25:22.321954 first token ← 第一次 LLM API 返回后写入
215
+ 2026-06-23 09:25:22.321954 totalTokenCount = 349
216
+ 2026-06-23 09:25:27.771606 the 2 turn
217
+ 2026-06-23 09:25:28.861895 totalTokenCount = 947
218
+ 2026-06-23 09:25:30.102441 peakRssMb = 412.5
219
+ 2026-06-23 09:25:30.102441 avgRssMb = 380.2
220
+ ...
221
+ ```
222
+
223
+ `stats_efficiency.py` 解析这些行得到逐题效率与**内存**。**首响应** = 从 `Evaluate N:` 到第一次 LLM API 返回的耗时;**峰值内存** = 该题进程树 RSS 峰值(MB,Linux `/proc`)。
224
+
225
+ ### 外部 Agent(可选)
226
+
227
+ 若用 CodeGenie / Trae 等外部 Agent 产出同格式 JSONL + 日志:
228
+
229
+ ```bash
230
+ python scripts/qa_eval/run_pipeline.py ab --no-agent
231
+ # 或只重打 Judge + 报告
232
+ python scripts/qa_eval/run_pipeline.py ab --no-agent --no-judge
233
+ ```
234
+
235
+ ## Stage 2 — Judge 打分(`eval_metrics.py`)
236
+
237
+ ```bash
238
+ python scripts/qa_eval/eval_metrics.py \
239
+ -i scripts/qa_eval/log/result-with-builtin.jsonl \
240
+ -o scripts/qa_eval/log/result-with-builtin-scored.jsonl \
241
+ -w 2
242
+ ```
243
+
244
+ | 参数 | 默认 | 说明 |
245
+ |------|------|------|
246
+ | `-i` / `--input` | — | Agent 产出 JSONL |
247
+ | `-o` / `--output` | `*-scored.jsonl` | 打分结果 |
248
+ | `-w` / `--workers` | `1` | 并发线程数 |
249
+ | `-m` / `--model` | `qwen3-235b-a22b-instruct-2507` | Judge 模型 |
250
+
251
+ 追加字段:`answer_accuracy_score`(0–1)、`evaluation_status`(`success` / `failed`)。
252
+
253
+ ## Stage 3 — 分数统计(`stats_scores.py`)
254
+
255
+ ```bash
256
+ python scripts/qa_eval/stats_scores.py \
257
+ -i scripts/qa_eval/log/result-with-builtin-scored.jsonl
258
+ ```
259
+
260
+ 输出(每臂各一份):总/成功/失败样本数,均值、中位数、最小/最大、标准差、方差,五档分数分布,评估成功率。`run_pipeline ab` 会将其并入 `report-{host}.txt`。
261
+
262
+ ## Stage 4 — 效率统计(`stats_efficiency.py`)
263
+
264
+ ```bash
265
+ python scripts/qa_eval/stats_efficiency.py \
266
+ -l scripts/qa_eval/log/agent-with-builtin.log
267
+ ```
268
+
269
+ 输出:
270
+
271
+ - **逐题**(任务明细):首响应、轮次、总时间、总 Token、**峰值内存 (MB)**
272
+ - **汇总**(统计结果):任务总数、平均首响应、平均轮次、平均总时间、平均总 Token、**平均/最大峰值内存**、合计总 Token
273
+
274
+ 日志缺失时回退为 JSONL 的 `agent_usage` 逐题 Token(无轮次/耗时/首响应)。
275
+
276
+ **homegraph 价值**:对比 with / without 汇总行的**平均轮次、平均总时间、平均总 Token**(汇总表同列);轮次越少、耗时越短、Token 越少,说明 homegraph 减少了盲目 grep/read。
277
+
278
+ ## `run_pipeline.py` 命令
279
+
280
+ ### `ab` — A/B 全流程
281
+
282
+ ```bash
283
+ python scripts/qa_eval/run_pipeline.py ab -r /path/to/your/repo [选项]
284
+ ```
285
+
286
+ | 参数 | 默认 | 说明 |
287
+ |------|------|------|
288
+ | `--repo`, `-r` | — | **被测仓库**(跑 Agent 时必填) || `--dataset`, `-d` | `data/test-set.jsonl` | 测试集 |
289
+ | `--with-jsonl` / `--without-jsonl` | `log/result-*.jsonl` | Agent 产出 |
290
+ | `--with-scored` / `--without-scored` | `log/result-*-scored.jsonl` | Judge 产出 |
291
+ | `--with-log` / `--without-log` | `log/agent-*.log` | Agent 日志 |
292
+ | `--report` | `data/report-{host}.txt` | 完整报告路径(默认随 `--agent-host`) |
293
+ | `--model`, `-m` | `qwen3-235b-a22b-instruct-2507` | Agent + Judge 模型 |
294
+ | `--workers`, `-w` | `1` | Judge 并发 |
295
+ | `--max-turns` | `8` | Agent 最多工具轮次(仅 builtin) |
296
+ | `--agent-host` | `builtin` | `builtin` / `claude-code` / `deveco-code` / `all` |
297
+ | `--homegraph-bin` | 自动检测 | 本地 `dist/bin/homegraph.js` 优先 |
298
+ | `--no-agent` | — | 跳过 Stage 1,沿用已有 JSONL |
299
+ | `--no-judge` | — | 跳过 Stage 2,沿用已有 scored |
300
+
301
+ ### `score` — 单路 Judge + 统计
302
+
303
+ ```bash
304
+ python scripts/qa_eval/run_pipeline.py score \
305
+ -i scripts/qa_eval/log/result-with-builtin.jsonl \
306
+ -l scripts/qa_eval/log/agent-with-builtin.log
307
+ ```
308
+
309
+ ## 测试集格式(`test-set.jsonl`)
310
+
311
+ 每行一条:
312
+
313
+ ```json
314
+ {
315
+ "id": "R01",
316
+ "query": "getColorString 函数在哪个文件里定义?",
317
+ "reference_answer": "getColorString 定义在 camera/common/src/main/ets/utils/ColorUtil.ets。",
318
+ "category_l1": "检索",
319
+ "category_l2": "函数",
320
+ "level0": "camera",
321
+ "level1": "ColorUtil",
322
+ "difficulty": "简单",
323
+ "language": "ArkTS"
324
+ }
325
+ ```
326
+
327
+ `category_*`、`level*`、`difficulty` 仅用于报告分组,Judge 不读取。
328
+
329
+ ## 结果怎么读
330
+
331
+ ### 【A/B 汇总表】— 核心对比(`report-{host}.txt` 末尾)
332
+
333
+ | 指标 | 含义 | A/B 怎么看 |
334
+ |------|------|------------|
335
+ | 准确率 均值 | Judge 给出的 `answer_accuracy_score`(0–1)全题平均 | Δ > 0 表示 with 答案质量更高 |
336
+ | 准确率 中位数 | 同上,中位数(抗极端值) | 与均值交叉验证 |
337
+ | Judge 成功/总数 | 成功打分的题数 / 总题数 | 应接近 100%;失败需查 API/JSONL |
338
+ | 平均轮次 | 每题 Agent 调用 LLM 的工具循环次数(日志 `the N turn` 的最大 N)再求平均 | **越低越好**;with 理想上更低 |
339
+ | 平均耗时 (秒) | 每题从 `Evaluate N:` 到下一题开始的端到端时间再求平均 | **越短越好** |
340
+ | 平均 Token (k) | 每题 Agent 消耗 Token(日志 `totalTokenCount` 累加)再求平均,单位 k | **越少越好** |
341
+ | 平均首响应 (秒) | 每题从 `Evaluate N:` 到第一次 LLM API 返回再求平均 | 参考项,非 homegraph 主指标 |
342
+ | 平均峰值内存 (MB) | 每题 Agent+MCP 进程树 RSS 峰值再求平均 | **越低越好**;with 不应显著高于 without |
343
+ | 最大峰值内存 (MB) | 单题 RSS 峰值的最大值 | 观察是否 OOM 风险 |
344
+
345
+ Δ 列均为 **with − without**(正数表示 with 更高/更多/更慢,视指标而定)。
346
+
347
+ ### 准确率明细(每臂「准确率统计」段)
348
+
349
+ | 指标 | 含义 |
350
+ |------|------|
351
+ | `answer_accuracy_score` 均值 / 中位数 | 该臂答案质量 |
352
+ | 最小值 / 最大值 | 最差、最好单题得分 |
353
+ | 标准差 / 方差 | 分数离散程度 |
354
+ | 分数分布(五档) | 0–0.2 … 0.8–1.0 各档题数与占比 |
355
+ | 评估成功率 | 成功 Judge 数 / 总样本数 |
356
+
357
+ ### 效率明细(每臂「效率明细」段)
358
+
359
+ | 粒度 | 指标 | 含义 |
360
+ |------|------|------|
361
+ | 逐题 | 首响应 | 该题第一次 LLM 返回耗时 |
362
+ | 逐题 | 轮次 | 该题 LLM 工具循环次数 |
363
+ | 逐题 | 总时间 | 该题端到端耗时 |
364
+ | 逐题 | 总 Token | 该题 Agent Token 消耗 |
365
+ | 逐题 | 峰值内存 | 该题进程树 RSS 峰值 (MB) |
366
+ | 汇总 | 平均峰值内存 / 最大峰值内存 | 内存占用汇总 |
367
+ | 汇总 | 平均首响应 / 平均轮次 / 平均总时间 / 平均总 Token | 上表逐题指标的平均值 |
368
+ | 汇总 | 合计总 Token | 该臂 20 题 Token 总和 |
369
+
370
+ ### 分组与逐题(report-{host}.txt 中部)
371
+
372
+ | 区块 | 内容 |
373
+ |------|------|
374
+ | 按类别准确率 | 按 `category_l1`(检索 / 解读 / 依赖)分组的 with/without 均分与 Δ |
375
+ | 逐题对比 | 每题 ID、类别、with/without 得分与 Δ、问题与答案摘要 |
376
+ | 逐题对比末尾 | **with 更高 / 持平 / without 更高** 题数统计 |
377
+
378
+ ## 常见问题
379
+
380
+ | 现象 | 处理 |
381
+ |------|------|
382
+ | Claude 准确率全 < 0.1 / `Not logged in` | Agent 未登录:`claude login` 后重跑;pipeline 现会在首题探测并 fail-fast |
383
+ | `deveco ... exit 1` / `credentials cannot be decrypted` | DevEco 凭证无效:`deveco providers reset` 后在 TUI 重新配置 provider;与 `ZHIPU_API_KEY` 无关 |
384
+ | `401` / Judge 全失败 | 检查 API Key:`DASHSCOPE_API_KEY`(DashScope)或 `ZHIPU_API_KEY`(智谱,格式 `id.secret`);智谱请加 `--provider zhipu`,勿把智谱 Key 设到 `DASHSCOPE_API_KEY` |
385
+ | `Cannot find module 'arkanalyzer'` | `npm run build`,用 `node dist/bin/homegraph.js sync` |
386
+ | `rg not found on PATH` | `sudo apt install ripgrep`(without 臂需要) |
387
+ | 日志解析 0 条任务 | 确认 log 含 `Evaluate N:` 行 |
388
+ | 首响应全为 0 | 旧 log bug;重跑 Agent 或依赖自动回退逻辑 |
389
+ | `claude` / `opencode` 未找到 | 安装 Claude Code 或 DevEco Code,并加入 PATH |
390
+ | 内存全为 N/A | Windows 无 `/proc`,内存采样自动跳过(不影响跑题);Linux/WSL 上才有峰值内存 || 分数偏低但答案看起来对 | 检查 `output_answer` 是否只剩工具块、无最终自然语言答案 |
391
+ | pip 慢 | 用清华镜像(见快速开始) |
392
+
393
+ ## 最小通路(仅 Judge 单条)
394
+
395
+ ```bash
396
+ export DASHSCOPE_API_KEY="sk-xxx"
397
+ head -1 scripts/qa_eval/log/result-with-builtin.jsonl > /tmp/one.jsonl
398
+ python scripts/qa_eval/eval_metrics.py -i /tmp/one.jsonl -o /tmp/one-scored.jsonl
399
+ python scripts/qa_eval/stats_scores.py -i /tmp/one-scored.jsonl
400
+ ```