@vizalice/codegraph 1.5.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 (821) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +872 -0
  3. package/dist/bin/codegraph.d.ts +26 -0
  4. package/dist/bin/codegraph.d.ts.map +1 -0
  5. package/dist/bin/codegraph.js +2324 -0
  6. package/dist/bin/codegraph.js.map +1 -0
  7. package/dist/bin/command-supervision.d.ts +49 -0
  8. package/dist/bin/command-supervision.d.ts.map +1 -0
  9. package/dist/bin/command-supervision.js +95 -0
  10. package/dist/bin/command-supervision.js.map +1 -0
  11. package/dist/bin/fatal-handler.d.ts +20 -0
  12. package/dist/bin/fatal-handler.d.ts.map +1 -0
  13. package/dist/bin/fatal-handler.js +118 -0
  14. package/dist/bin/fatal-handler.js.map +1 -0
  15. package/dist/bin/node-version-check.d.ts +37 -0
  16. package/dist/bin/node-version-check.d.ts.map +1 -0
  17. package/dist/bin/node-version-check.js +79 -0
  18. package/dist/bin/node-version-check.js.map +1 -0
  19. package/dist/bin/uninstall.d.ts +14 -0
  20. package/dist/bin/uninstall.d.ts.map +1 -0
  21. package/dist/bin/uninstall.js +36 -0
  22. package/dist/bin/uninstall.js.map +1 -0
  23. package/dist/context/formatter.d.ts +36 -0
  24. package/dist/context/formatter.d.ts.map +1 -0
  25. package/dist/context/formatter.js +269 -0
  26. package/dist/context/formatter.js.map +1 -0
  27. package/dist/context/index.d.ts +119 -0
  28. package/dist/context/index.d.ts.map +1 -0
  29. package/dist/context/index.js +1333 -0
  30. package/dist/context/index.js.map +1 -0
  31. package/dist/context/markers.d.ts +19 -0
  32. package/dist/context/markers.d.ts.map +1 -0
  33. package/dist/context/markers.js +22 -0
  34. package/dist/context/markers.js.map +1 -0
  35. package/dist/db/index.d.ts +378 -0
  36. package/dist/db/index.d.ts.map +1 -0
  37. package/dist/db/index.js +831 -0
  38. package/dist/db/index.js.map +1 -0
  39. package/dist/db/migrations.d.ts +44 -0
  40. package/dist/db/migrations.d.ts.map +1 -0
  41. package/dist/db/migrations.js +236 -0
  42. package/dist/db/migrations.js.map +1 -0
  43. package/dist/db/queries.d.ts +705 -0
  44. package/dist/db/queries.d.ts.map +1 -0
  45. package/dist/db/queries.js +2435 -0
  46. package/dist/db/queries.js.map +1 -0
  47. package/dist/db/schema.sql +207 -0
  48. package/dist/db/sqlite-adapter.d.ts +55 -0
  49. package/dist/db/sqlite-adapter.d.ts.map +1 -0
  50. package/dist/db/sqlite-adapter.js +135 -0
  51. package/dist/db/sqlite-adapter.js.map +1 -0
  52. package/dist/db/wal-valve.d.ts +119 -0
  53. package/dist/db/wal-valve.d.ts.map +1 -0
  54. package/dist/db/wal-valve.js +290 -0
  55. package/dist/db/wal-valve.js.map +1 -0
  56. package/dist/directory.d.ts +183 -0
  57. package/dist/directory.d.ts.map +1 -0
  58. package/dist/directory.js +797 -0
  59. package/dist/directory.js.map +1 -0
  60. package/dist/errors.d.ts +136 -0
  61. package/dist/errors.d.ts.map +1 -0
  62. package/dist/errors.js +219 -0
  63. package/dist/errors.js.map +1 -0
  64. package/dist/extraction/astro-extractor.d.ts +79 -0
  65. package/dist/extraction/astro-extractor.d.ts.map +1 -0
  66. package/dist/extraction/astro-extractor.js +320 -0
  67. package/dist/extraction/astro-extractor.js.map +1 -0
  68. package/dist/extraction/cfml-extractor.d.ts +107 -0
  69. package/dist/extraction/cfml-extractor.d.ts.map +1 -0
  70. package/dist/extraction/cfml-extractor.js +494 -0
  71. package/dist/extraction/cfml-extractor.js.map +1 -0
  72. package/dist/extraction/dfm-extractor.d.ts +31 -0
  73. package/dist/extraction/dfm-extractor.d.ts.map +1 -0
  74. package/dist/extraction/dfm-extractor.js +151 -0
  75. package/dist/extraction/dfm-extractor.js.map +1 -0
  76. package/dist/extraction/extraction-version.d.ts +25 -0
  77. package/dist/extraction/extraction-version.d.ts.map +1 -0
  78. package/dist/extraction/extraction-version.js +28 -0
  79. package/dist/extraction/extraction-version.js.map +1 -0
  80. package/dist/extraction/function-ref.d.ts +118 -0
  81. package/dist/extraction/function-ref.d.ts.map +1 -0
  82. package/dist/extraction/function-ref.js +733 -0
  83. package/dist/extraction/function-ref.js.map +1 -0
  84. package/dist/extraction/generated-detection.d.ts +66 -0
  85. package/dist/extraction/generated-detection.d.ts.map +1 -0
  86. package/dist/extraction/generated-detection.js +248 -0
  87. package/dist/extraction/generated-detection.js.map +1 -0
  88. package/dist/extraction/grammars.d.ts +138 -0
  89. package/dist/extraction/grammars.d.ts.map +1 -0
  90. package/dist/extraction/grammars.js +694 -0
  91. package/dist/extraction/grammars.js.map +1 -0
  92. package/dist/extraction/index.d.ts +308 -0
  93. package/dist/extraction/index.d.ts.map +1 -0
  94. package/dist/extraction/index.js +2711 -0
  95. package/dist/extraction/index.js.map +1 -0
  96. package/dist/extraction/kernel/decode.d.ts +9 -0
  97. package/dist/extraction/kernel/decode.d.ts.map +1 -0
  98. package/dist/extraction/kernel/decode.js +162 -0
  99. package/dist/extraction/kernel/decode.js.map +1 -0
  100. package/dist/extraction/kernel/index.d.ts +64 -0
  101. package/dist/extraction/kernel/index.d.ts.map +1 -0
  102. package/dist/extraction/kernel/index.js +279 -0
  103. package/dist/extraction/kernel/index.js.map +1 -0
  104. package/dist/extraction/kernel/layout.d.ts +101 -0
  105. package/dist/extraction/kernel/layout.d.ts.map +1 -0
  106. package/dist/extraction/kernel/layout.js +104 -0
  107. package/dist/extraction/kernel/layout.js.map +1 -0
  108. package/dist/extraction/kernel/loader.d.ts +103 -0
  109. package/dist/extraction/kernel/loader.d.ts.map +1 -0
  110. package/dist/extraction/kernel/loader.js +146 -0
  111. package/dist/extraction/kernel/loader.js.map +1 -0
  112. package/dist/extraction/languages/arkts.d.ts +3 -0
  113. package/dist/extraction/languages/arkts.d.ts.map +1 -0
  114. package/dist/extraction/languages/arkts.js +127 -0
  115. package/dist/extraction/languages/arkts.js.map +1 -0
  116. package/dist/extraction/languages/c-cpp.d.ts +124 -0
  117. package/dist/extraction/languages/c-cpp.d.ts.map +1 -0
  118. package/dist/extraction/languages/c-cpp.js +1689 -0
  119. package/dist/extraction/languages/c-cpp.js.map +1 -0
  120. package/dist/extraction/languages/cfquery.d.ts +12 -0
  121. package/dist/extraction/languages/cfquery.d.ts.map +1 -0
  122. package/dist/extraction/languages/cfquery.js +28 -0
  123. package/dist/extraction/languages/cfquery.js.map +1 -0
  124. package/dist/extraction/languages/cfscript.d.ts +3 -0
  125. package/dist/extraction/languages/cfscript.d.ts.map +1 -0
  126. package/dist/extraction/languages/cfscript.js +73 -0
  127. package/dist/extraction/languages/cfscript.js.map +1 -0
  128. package/dist/extraction/languages/cobol.d.ts +33 -0
  129. package/dist/extraction/languages/cobol.d.ts.map +1 -0
  130. package/dist/extraction/languages/cobol.js +499 -0
  131. package/dist/extraction/languages/cobol.js.map +1 -0
  132. package/dist/extraction/languages/csharp.d.ts +25 -0
  133. package/dist/extraction/languages/csharp.d.ts.map +1 -0
  134. package/dist/extraction/languages/csharp.js +175 -0
  135. package/dist/extraction/languages/csharp.js.map +1 -0
  136. package/dist/extraction/languages/dart.d.ts +3 -0
  137. package/dist/extraction/languages/dart.d.ts.map +1 -0
  138. package/dist/extraction/languages/dart.js +374 -0
  139. package/dist/extraction/languages/dart.js.map +1 -0
  140. package/dist/extraction/languages/erlang.d.ts +3 -0
  141. package/dist/extraction/languages/erlang.d.ts.map +1 -0
  142. package/dist/extraction/languages/erlang.js +350 -0
  143. package/dist/extraction/languages/erlang.js.map +1 -0
  144. package/dist/extraction/languages/go.d.ts +3 -0
  145. package/dist/extraction/languages/go.d.ts.map +1 -0
  146. package/dist/extraction/languages/go.js +111 -0
  147. package/dist/extraction/languages/go.js.map +1 -0
  148. package/dist/extraction/languages/index.d.ts +10 -0
  149. package/dist/extraction/languages/index.d.ts.map +1 -0
  150. package/dist/extraction/languages/index.js +71 -0
  151. package/dist/extraction/languages/index.js.map +1 -0
  152. package/dist/extraction/languages/java.d.ts +3 -0
  153. package/dist/extraction/languages/java.d.ts.map +1 -0
  154. package/dist/extraction/languages/java.js +315 -0
  155. package/dist/extraction/languages/java.js.map +1 -0
  156. package/dist/extraction/languages/javascript.d.ts +3 -0
  157. package/dist/extraction/languages/javascript.d.ts.map +1 -0
  158. package/dist/extraction/languages/javascript.js +106 -0
  159. package/dist/extraction/languages/javascript.js.map +1 -0
  160. package/dist/extraction/languages/kotlin.d.ts +3 -0
  161. package/dist/extraction/languages/kotlin.d.ts.map +1 -0
  162. package/dist/extraction/languages/kotlin.js +379 -0
  163. package/dist/extraction/languages/kotlin.js.map +1 -0
  164. package/dist/extraction/languages/lua.d.ts +3 -0
  165. package/dist/extraction/languages/lua.d.ts.map +1 -0
  166. package/dist/extraction/languages/lua.js +150 -0
  167. package/dist/extraction/languages/lua.js.map +1 -0
  168. package/dist/extraction/languages/luau.d.ts +3 -0
  169. package/dist/extraction/languages/luau.d.ts.map +1 -0
  170. package/dist/extraction/languages/luau.js +37 -0
  171. package/dist/extraction/languages/luau.js.map +1 -0
  172. package/dist/extraction/languages/nix.d.ts +3 -0
  173. package/dist/extraction/languages/nix.d.ts.map +1 -0
  174. package/dist/extraction/languages/nix.js +294 -0
  175. package/dist/extraction/languages/nix.js.map +1 -0
  176. package/dist/extraction/languages/objc.d.ts +3 -0
  177. package/dist/extraction/languages/objc.d.ts.map +1 -0
  178. package/dist/extraction/languages/objc.js +179 -0
  179. package/dist/extraction/languages/objc.js.map +1 -0
  180. package/dist/extraction/languages/pascal.d.ts +3 -0
  181. package/dist/extraction/languages/pascal.d.ts.map +1 -0
  182. package/dist/extraction/languages/pascal.js +77 -0
  183. package/dist/extraction/languages/pascal.js.map +1 -0
  184. package/dist/extraction/languages/php.d.ts +3 -0
  185. package/dist/extraction/languages/php.d.ts.map +1 -0
  186. package/dist/extraction/languages/php.js +196 -0
  187. package/dist/extraction/languages/php.js.map +1 -0
  188. package/dist/extraction/languages/python.d.ts +3 -0
  189. package/dist/extraction/languages/python.d.ts.map +1 -0
  190. package/dist/extraction/languages/python.js +56 -0
  191. package/dist/extraction/languages/python.js.map +1 -0
  192. package/dist/extraction/languages/r.d.ts +3 -0
  193. package/dist/extraction/languages/r.d.ts.map +1 -0
  194. package/dist/extraction/languages/r.js +314 -0
  195. package/dist/extraction/languages/r.js.map +1 -0
  196. package/dist/extraction/languages/ruby.d.ts +3 -0
  197. package/dist/extraction/languages/ruby.d.ts.map +1 -0
  198. package/dist/extraction/languages/ruby.js +149 -0
  199. package/dist/extraction/languages/ruby.js.map +1 -0
  200. package/dist/extraction/languages/rust.d.ts +3 -0
  201. package/dist/extraction/languages/rust.d.ts.map +1 -0
  202. package/dist/extraction/languages/rust.js +145 -0
  203. package/dist/extraction/languages/rust.js.map +1 -0
  204. package/dist/extraction/languages/scala.d.ts +3 -0
  205. package/dist/extraction/languages/scala.d.ts.map +1 -0
  206. package/dist/extraction/languages/scala.js +209 -0
  207. package/dist/extraction/languages/scala.js.map +1 -0
  208. package/dist/extraction/languages/solidity.d.ts +3 -0
  209. package/dist/extraction/languages/solidity.d.ts.map +1 -0
  210. package/dist/extraction/languages/solidity.js +293 -0
  211. package/dist/extraction/languages/solidity.js.map +1 -0
  212. package/dist/extraction/languages/swift.d.ts +3 -0
  213. package/dist/extraction/languages/swift.d.ts.map +1 -0
  214. package/dist/extraction/languages/swift.js +152 -0
  215. package/dist/extraction/languages/swift.js.map +1 -0
  216. package/dist/extraction/languages/terraform.d.ts +3 -0
  217. package/dist/extraction/languages/terraform.d.ts.map +1 -0
  218. package/dist/extraction/languages/terraform.js +641 -0
  219. package/dist/extraction/languages/terraform.js.map +1 -0
  220. package/dist/extraction/languages/typescript.d.ts +16 -0
  221. package/dist/extraction/languages/typescript.d.ts.map +1 -0
  222. package/dist/extraction/languages/typescript.js +167 -0
  223. package/dist/extraction/languages/typescript.js.map +1 -0
  224. package/dist/extraction/languages/vbnet.d.ts +11 -0
  225. package/dist/extraction/languages/vbnet.d.ts.map +1 -0
  226. package/dist/extraction/languages/vbnet.js +141 -0
  227. package/dist/extraction/languages/vbnet.js.map +1 -0
  228. package/dist/extraction/liquid-extractor.d.ts +59 -0
  229. package/dist/extraction/liquid-extractor.d.ts.map +1 -0
  230. package/dist/extraction/liquid-extractor.js +357 -0
  231. package/dist/extraction/liquid-extractor.js.map +1 -0
  232. package/dist/extraction/mybatis-extractor.d.ts +68 -0
  233. package/dist/extraction/mybatis-extractor.d.ts.map +1 -0
  234. package/dist/extraction/mybatis-extractor.js +300 -0
  235. package/dist/extraction/mybatis-extractor.js.map +1 -0
  236. package/dist/extraction/parse-pool.d.ts +160 -0
  237. package/dist/extraction/parse-pool.d.ts.map +1 -0
  238. package/dist/extraction/parse-pool.js +402 -0
  239. package/dist/extraction/parse-pool.js.map +1 -0
  240. package/dist/extraction/parse-worker.d.ts +8 -0
  241. package/dist/extraction/parse-worker.d.ts.map +1 -0
  242. package/dist/extraction/parse-worker.js +138 -0
  243. package/dist/extraction/parse-worker.js.map +1 -0
  244. package/dist/extraction/razor-extractor.d.ts +42 -0
  245. package/dist/extraction/razor-extractor.d.ts.map +1 -0
  246. package/dist/extraction/razor-extractor.js +285 -0
  247. package/dist/extraction/razor-extractor.js.map +1 -0
  248. package/dist/extraction/store-worker.d.ts +24 -0
  249. package/dist/extraction/store-worker.d.ts.map +1 -0
  250. package/dist/extraction/store-worker.js +139 -0
  251. package/dist/extraction/store-worker.js.map +1 -0
  252. package/dist/extraction/store-writer.d.ts +63 -0
  253. package/dist/extraction/store-writer.d.ts.map +1 -0
  254. package/dist/extraction/store-writer.js +174 -0
  255. package/dist/extraction/store-writer.js.map +1 -0
  256. package/dist/extraction/svelte-extractor.d.ts +56 -0
  257. package/dist/extraction/svelte-extractor.d.ts.map +1 -0
  258. package/dist/extraction/svelte-extractor.js +275 -0
  259. package/dist/extraction/svelte-extractor.js.map +1 -0
  260. package/dist/extraction/tree-sitter-helpers.d.ts +28 -0
  261. package/dist/extraction/tree-sitter-helpers.d.ts.map +1 -0
  262. package/dist/extraction/tree-sitter-helpers.js +153 -0
  263. package/dist/extraction/tree-sitter-helpers.js.map +1 -0
  264. package/dist/extraction/tree-sitter-types.d.ts +260 -0
  265. package/dist/extraction/tree-sitter-types.d.ts.map +1 -0
  266. package/dist/extraction/tree-sitter-types.js +10 -0
  267. package/dist/extraction/tree-sitter-types.js.map +1 -0
  268. package/dist/extraction/tree-sitter.d.ts +728 -0
  269. package/dist/extraction/tree-sitter.d.ts.map +1 -0
  270. package/dist/extraction/tree-sitter.js +6676 -0
  271. package/dist/extraction/tree-sitter.js.map +1 -0
  272. package/dist/extraction/vue-extractor.d.ts +51 -0
  273. package/dist/extraction/vue-extractor.d.ts.map +1 -0
  274. package/dist/extraction/vue-extractor.js +254 -0
  275. package/dist/extraction/vue-extractor.js.map +1 -0
  276. package/dist/extraction/wasm/tree-sitter-arkts.wasm +0 -0
  277. package/dist/extraction/wasm/tree-sitter-c.wasm +0 -0
  278. package/dist/extraction/wasm/tree-sitter-c_sharp.wasm +0 -0
  279. package/dist/extraction/wasm/tree-sitter-cfml.wasm +0 -0
  280. package/dist/extraction/wasm/tree-sitter-cfquery.wasm +0 -0
  281. package/dist/extraction/wasm/tree-sitter-cfscript.wasm +0 -0
  282. package/dist/extraction/wasm/tree-sitter-cobol.wasm +0 -0
  283. package/dist/extraction/wasm/tree-sitter-cpp.wasm +0 -0
  284. package/dist/extraction/wasm/tree-sitter-dart.wasm +0 -0
  285. package/dist/extraction/wasm/tree-sitter-erlang.wasm +0 -0
  286. package/dist/extraction/wasm/tree-sitter-go.wasm +0 -0
  287. package/dist/extraction/wasm/tree-sitter-java.wasm +0 -0
  288. package/dist/extraction/wasm/tree-sitter-javascript.wasm +0 -0
  289. package/dist/extraction/wasm/tree-sitter-kotlin.wasm +0 -0
  290. package/dist/extraction/wasm/tree-sitter-lua.wasm +0 -0
  291. package/dist/extraction/wasm/tree-sitter-luau.wasm +0 -0
  292. package/dist/extraction/wasm/tree-sitter-nix.wasm +0 -0
  293. package/dist/extraction/wasm/tree-sitter-pascal.wasm +0 -0
  294. package/dist/extraction/wasm/tree-sitter-php.wasm +0 -0
  295. package/dist/extraction/wasm/tree-sitter-python.wasm +0 -0
  296. package/dist/extraction/wasm/tree-sitter-r.wasm +0 -0
  297. package/dist/extraction/wasm/tree-sitter-ruby.wasm +0 -0
  298. package/dist/extraction/wasm/tree-sitter-rust.wasm +0 -0
  299. package/dist/extraction/wasm/tree-sitter-scala.wasm +0 -0
  300. package/dist/extraction/wasm/tree-sitter-swift.wasm +0 -0
  301. package/dist/extraction/wasm/tree-sitter-terraform.wasm +0 -0
  302. package/dist/extraction/wasm/tree-sitter-tsx.wasm +0 -0
  303. package/dist/extraction/wasm/tree-sitter-typescript.wasm +0 -0
  304. package/dist/extraction/wasm/tree-sitter-vbnet.wasm +0 -0
  305. package/dist/extraction/wasm-runtime-flags.d.ts +53 -0
  306. package/dist/extraction/wasm-runtime-flags.d.ts.map +1 -0
  307. package/dist/extraction/wasm-runtime-flags.js +130 -0
  308. package/dist/extraction/wasm-runtime-flags.js.map +1 -0
  309. package/dist/graph/index.d.ts +8 -0
  310. package/dist/graph/index.d.ts.map +1 -0
  311. package/dist/graph/index.js +13 -0
  312. package/dist/graph/index.js.map +1 -0
  313. package/dist/graph/queries.d.ts +106 -0
  314. package/dist/graph/queries.d.ts.map +1 -0
  315. package/dist/graph/queries.js +341 -0
  316. package/dist/graph/queries.js.map +1 -0
  317. package/dist/graph/traversal.d.ts +127 -0
  318. package/dist/graph/traversal.d.ts.map +1 -0
  319. package/dist/graph/traversal.js +599 -0
  320. package/dist/graph/traversal.js.map +1 -0
  321. package/dist/index.d.ts +677 -0
  322. package/dist/index.d.ts.map +1 -0
  323. package/dist/index.js +1718 -0
  324. package/dist/index.js.map +1 -0
  325. package/dist/installer/beta-signup.d.ts +54 -0
  326. package/dist/installer/beta-signup.d.ts.map +1 -0
  327. package/dist/installer/beta-signup.js +178 -0
  328. package/dist/installer/beta-signup.js.map +1 -0
  329. package/dist/installer/config-writer.d.ts +28 -0
  330. package/dist/installer/config-writer.d.ts.map +1 -0
  331. package/dist/installer/config-writer.js +91 -0
  332. package/dist/installer/config-writer.js.map +1 -0
  333. package/dist/installer/index.d.ts +144 -0
  334. package/dist/installer/index.d.ts.map +1 -0
  335. package/dist/installer/index.js +634 -0
  336. package/dist/installer/index.js.map +1 -0
  337. package/dist/installer/instructions-template.d.ts +41 -0
  338. package/dist/installer/instructions-template.d.ts.map +1 -0
  339. package/dist/installer/instructions-template.js +53 -0
  340. package/dist/installer/instructions-template.js.map +1 -0
  341. package/dist/installer/targets/antigravity.d.ts +57 -0
  342. package/dist/installer/targets/antigravity.d.ts.map +1 -0
  343. package/dist/installer/targets/antigravity.js +308 -0
  344. package/dist/installer/targets/antigravity.js.map +1 -0
  345. package/dist/installer/targets/claude.d.ts +62 -0
  346. package/dist/installer/targets/claude.d.ts.map +1 -0
  347. package/dist/installer/targets/claude.js +486 -0
  348. package/dist/installer/targets/claude.js.map +1 -0
  349. package/dist/installer/targets/codex.d.ts +18 -0
  350. package/dist/installer/targets/codex.d.ts.map +1 -0
  351. package/dist/installer/targets/codex.js +185 -0
  352. package/dist/installer/targets/codex.js.map +1 -0
  353. package/dist/installer/targets/copilot-cli.d.ts +32 -0
  354. package/dist/installer/targets/copilot-cli.d.ts.map +1 -0
  355. package/dist/installer/targets/copilot-cli.js +209 -0
  356. package/dist/installer/targets/copilot-cli.js.map +1 -0
  357. package/dist/installer/targets/copilot-jetbrains.d.ts +42 -0
  358. package/dist/installer/targets/copilot-jetbrains.d.ts.map +1 -0
  359. package/dist/installer/targets/copilot-jetbrains.js +238 -0
  360. package/dist/installer/targets/copilot-jetbrains.js.map +1 -0
  361. package/dist/installer/targets/copilot-vscode.d.ts +47 -0
  362. package/dist/installer/targets/copilot-vscode.d.ts.map +1 -0
  363. package/dist/installer/targets/copilot-vscode.js +219 -0
  364. package/dist/installer/targets/copilot-vscode.js.map +1 -0
  365. package/dist/installer/targets/cursor.d.ts +35 -0
  366. package/dist/installer/targets/cursor.d.ts.map +1 -0
  367. package/dist/installer/targets/cursor.js +254 -0
  368. package/dist/installer/targets/cursor.js.map +1 -0
  369. package/dist/installer/targets/dsh.d.ts +97 -0
  370. package/dist/installer/targets/dsh.d.ts.map +1 -0
  371. package/dist/installer/targets/dsh.js +358 -0
  372. package/dist/installer/targets/dsh.js.map +1 -0
  373. package/dist/installer/targets/gemini.d.ts +26 -0
  374. package/dist/installer/targets/gemini.d.ts.map +1 -0
  375. package/dist/installer/targets/gemini.js +165 -0
  376. package/dist/installer/targets/gemini.js.map +1 -0
  377. package/dist/installer/targets/hermes.d.ts +18 -0
  378. package/dist/installer/targets/hermes.d.ts.map +1 -0
  379. package/dist/installer/targets/hermes.js +359 -0
  380. package/dist/installer/targets/hermes.js.map +1 -0
  381. package/dist/installer/targets/kiro.d.ts +27 -0
  382. package/dist/installer/targets/kiro.d.ts.map +1 -0
  383. package/dist/installer/targets/kiro.js +178 -0
  384. package/dist/installer/targets/kiro.js.map +1 -0
  385. package/dist/installer/targets/opencode.d.ts +38 -0
  386. package/dist/installer/targets/opencode.d.ts.map +1 -0
  387. package/dist/installer/targets/opencode.js +288 -0
  388. package/dist/installer/targets/opencode.js.map +1 -0
  389. package/dist/installer/targets/registry.d.ts +35 -0
  390. package/dist/installer/targets/registry.d.ts.map +1 -0
  391. package/dist/installer/targets/registry.js +101 -0
  392. package/dist/installer/targets/registry.js.map +1 -0
  393. package/dist/installer/targets/shared.d.ts +132 -0
  394. package/dist/installer/targets/shared.d.ts.map +1 -0
  395. package/dist/installer/targets/shared.js +314 -0
  396. package/dist/installer/targets/shared.js.map +1 -0
  397. package/dist/installer/targets/toml.d.ts +53 -0
  398. package/dist/installer/targets/toml.d.ts.map +1 -0
  399. package/dist/installer/targets/toml.js +226 -0
  400. package/dist/installer/targets/toml.js.map +1 -0
  401. package/dist/installer/targets/types.d.ts +109 -0
  402. package/dist/installer/targets/types.d.ts.map +1 -0
  403. package/dist/installer/targets/types.js +16 -0
  404. package/dist/installer/targets/types.js.map +1 -0
  405. package/dist/installer/targets/zcode.d.ts +106 -0
  406. package/dist/installer/targets/zcode.d.ts.map +1 -0
  407. package/dist/installer/targets/zcode.js +451 -0
  408. package/dist/installer/targets/zcode.js.map +1 -0
  409. package/dist/mcp/daemon-manager.d.ts +42 -0
  410. package/dist/mcp/daemon-manager.d.ts.map +1 -0
  411. package/dist/mcp/daemon-manager.js +129 -0
  412. package/dist/mcp/daemon-manager.js.map +1 -0
  413. package/dist/mcp/daemon-paths.d.ts +73 -0
  414. package/dist/mcp/daemon-paths.d.ts.map +1 -0
  415. package/dist/mcp/daemon-paths.js +165 -0
  416. package/dist/mcp/daemon-paths.js.map +1 -0
  417. package/dist/mcp/daemon-registry.d.ts +47 -0
  418. package/dist/mcp/daemon-registry.d.ts.map +1 -0
  419. package/dist/mcp/daemon-registry.js +233 -0
  420. package/dist/mcp/daemon-registry.js.map +1 -0
  421. package/dist/mcp/daemon.d.ts +290 -0
  422. package/dist/mcp/daemon.d.ts.map +1 -0
  423. package/dist/mcp/daemon.js +862 -0
  424. package/dist/mcp/daemon.js.map +1 -0
  425. package/dist/mcp/dynamic-boundaries.d.ts +41 -0
  426. package/dist/mcp/dynamic-boundaries.d.ts.map +1 -0
  427. package/dist/mcp/dynamic-boundaries.js +360 -0
  428. package/dist/mcp/dynamic-boundaries.js.map +1 -0
  429. package/dist/mcp/early-ppid.d.ts +26 -0
  430. package/dist/mcp/early-ppid.d.ts.map +1 -0
  431. package/dist/mcp/early-ppid.js +29 -0
  432. package/dist/mcp/early-ppid.js.map +1 -0
  433. package/dist/mcp/engine.d.ts +122 -0
  434. package/dist/mcp/engine.d.ts.map +1 -0
  435. package/dist/mcp/engine.js +350 -0
  436. package/dist/mcp/engine.js.map +1 -0
  437. package/dist/mcp/explore-dedup.d.ts +137 -0
  438. package/dist/mcp/explore-dedup.d.ts.map +1 -0
  439. package/dist/mcp/explore-dedup.js +236 -0
  440. package/dist/mcp/explore-dedup.js.map +1 -0
  441. package/dist/mcp/explore-diagnostics.d.ts +287 -0
  442. package/dist/mcp/explore-diagnostics.d.ts.map +1 -0
  443. package/dist/mcp/explore-diagnostics.js +555 -0
  444. package/dist/mcp/explore-diagnostics.js.map +1 -0
  445. package/dist/mcp/explore-session-state.d.ts +217 -0
  446. package/dist/mcp/explore-session-state.d.ts.map +1 -0
  447. package/dist/mcp/explore-session-state.js +322 -0
  448. package/dist/mcp/explore-session-state.js.map +1 -0
  449. package/dist/mcp/index.d.ts +137 -0
  450. package/dist/mcp/index.d.ts.map +1 -0
  451. package/dist/mcp/index.js +554 -0
  452. package/dist/mcp/index.js.map +1 -0
  453. package/dist/mcp/liveness-watchdog.d.ts +35 -0
  454. package/dist/mcp/liveness-watchdog.d.ts.map +1 -0
  455. package/dist/mcp/liveness-watchdog.js +269 -0
  456. package/dist/mcp/liveness-watchdog.js.map +1 -0
  457. package/dist/mcp/ppid-watchdog.d.ts +62 -0
  458. package/dist/mcp/ppid-watchdog.d.ts.map +1 -0
  459. package/dist/mcp/ppid-watchdog.js +64 -0
  460. package/dist/mcp/ppid-watchdog.js.map +1 -0
  461. package/dist/mcp/proxy.d.ts +87 -0
  462. package/dist/mcp/proxy.d.ts.map +1 -0
  463. package/dist/mcp/proxy.js +672 -0
  464. package/dist/mcp/proxy.js.map +1 -0
  465. package/dist/mcp/query-pool.d.ts +108 -0
  466. package/dist/mcp/query-pool.d.ts.map +1 -0
  467. package/dist/mcp/query-pool.js +315 -0
  468. package/dist/mcp/query-pool.js.map +1 -0
  469. package/dist/mcp/query-worker.d.ts +24 -0
  470. package/dist/mcp/query-worker.d.ts.map +1 -0
  471. package/dist/mcp/query-worker.js +87 -0
  472. package/dist/mcp/query-worker.js.map +1 -0
  473. package/dist/mcp/server-instructions.d.ts +34 -0
  474. package/dist/mcp/server-instructions.d.ts.map +1 -0
  475. package/dist/mcp/server-instructions.js +111 -0
  476. package/dist/mcp/server-instructions.js.map +1 -0
  477. package/dist/mcp/session.d.ts +109 -0
  478. package/dist/mcp/session.d.ts.map +1 -0
  479. package/dist/mcp/session.js +375 -0
  480. package/dist/mcp/session.js.map +1 -0
  481. package/dist/mcp/startup-handshake.d.ts +44 -0
  482. package/dist/mcp/startup-handshake.d.ts.map +1 -0
  483. package/dist/mcp/startup-handshake.js +73 -0
  484. package/dist/mcp/startup-handshake.js.map +1 -0
  485. package/dist/mcp/stdin-teardown.d.ts +27 -0
  486. package/dist/mcp/stdin-teardown.d.ts.map +1 -0
  487. package/dist/mcp/stdin-teardown.js +49 -0
  488. package/dist/mcp/stdin-teardown.js.map +1 -0
  489. package/dist/mcp/tools.d.ts +862 -0
  490. package/dist/mcp/tools.d.ts.map +1 -0
  491. package/dist/mcp/tools.js +6526 -0
  492. package/dist/mcp/tools.js.map +1 -0
  493. package/dist/mcp/transport.d.ts +188 -0
  494. package/dist/mcp/transport.d.ts.map +1 -0
  495. package/dist/mcp/transport.js +377 -0
  496. package/dist/mcp/transport.js.map +1 -0
  497. package/dist/mcp/version.d.ts +19 -0
  498. package/dist/mcp/version.d.ts.map +1 -0
  499. package/dist/mcp/version.js +71 -0
  500. package/dist/mcp/version.js.map +1 -0
  501. package/dist/project-config.d.ts +94 -0
  502. package/dist/project-config.d.ts.map +1 -0
  503. package/dist/project-config.js +374 -0
  504. package/dist/project-config.js.map +1 -0
  505. package/dist/prompt-hook-output.d.ts +23 -0
  506. package/dist/prompt-hook-output.d.ts.map +1 -0
  507. package/dist/prompt-hook-output.js +35 -0
  508. package/dist/prompt-hook-output.js.map +1 -0
  509. package/dist/resolution/c-fnptr-synthesizer.d.ts +6 -0
  510. package/dist/resolution/c-fnptr-synthesizer.d.ts.map +1 -0
  511. package/dist/resolution/c-fnptr-synthesizer.js +1506 -0
  512. package/dist/resolution/c-fnptr-synthesizer.js.map +1 -0
  513. package/dist/resolution/callback-synthesizer.d.ts +59 -0
  514. package/dist/resolution/callback-synthesizer.d.ts.map +1 -0
  515. package/dist/resolution/callback-synthesizer.js +4030 -0
  516. package/dist/resolution/callback-synthesizer.js.map +1 -0
  517. package/dist/resolution/cooperative-yield.d.ts +40 -0
  518. package/dist/resolution/cooperative-yield.d.ts.map +1 -0
  519. package/dist/resolution/cooperative-yield.js +44 -0
  520. package/dist/resolution/cooperative-yield.js.map +1 -0
  521. package/dist/resolution/frameworks/astro.d.ts +9 -0
  522. package/dist/resolution/frameworks/astro.d.ts.map +1 -0
  523. package/dist/resolution/frameworks/astro.js +169 -0
  524. package/dist/resolution/frameworks/astro.js.map +1 -0
  525. package/dist/resolution/frameworks/cargo-workspace.d.ts +18 -0
  526. package/dist/resolution/frameworks/cargo-workspace.d.ts.map +1 -0
  527. package/dist/resolution/frameworks/cargo-workspace.js +225 -0
  528. package/dist/resolution/frameworks/cargo-workspace.js.map +1 -0
  529. package/dist/resolution/frameworks/cics.d.ts +20 -0
  530. package/dist/resolution/frameworks/cics.d.ts.map +1 -0
  531. package/dist/resolution/frameworks/cics.js +90 -0
  532. package/dist/resolution/frameworks/cics.js.map +1 -0
  533. package/dist/resolution/frameworks/csharp.d.ts +8 -0
  534. package/dist/resolution/frameworks/csharp.d.ts.map +1 -0
  535. package/dist/resolution/frameworks/csharp.js +241 -0
  536. package/dist/resolution/frameworks/csharp.js.map +1 -0
  537. package/dist/resolution/frameworks/drupal.d.ts +51 -0
  538. package/dist/resolution/frameworks/drupal.d.ts.map +1 -0
  539. package/dist/resolution/frameworks/drupal.js +367 -0
  540. package/dist/resolution/frameworks/drupal.js.map +1 -0
  541. package/dist/resolution/frameworks/expo-modules.d.ts +3 -0
  542. package/dist/resolution/frameworks/expo-modules.d.ts.map +1 -0
  543. package/dist/resolution/frameworks/expo-modules.js +148 -0
  544. package/dist/resolution/frameworks/expo-modules.js.map +1 -0
  545. package/dist/resolution/frameworks/express.d.ts +8 -0
  546. package/dist/resolution/frameworks/express.d.ts.map +1 -0
  547. package/dist/resolution/frameworks/express.js +308 -0
  548. package/dist/resolution/frameworks/express.js.map +1 -0
  549. package/dist/resolution/frameworks/fabric.d.ts +3 -0
  550. package/dist/resolution/frameworks/fabric.d.ts.map +1 -0
  551. package/dist/resolution/frameworks/fabric.js +354 -0
  552. package/dist/resolution/frameworks/fabric.js.map +1 -0
  553. package/dist/resolution/frameworks/go.d.ts +8 -0
  554. package/dist/resolution/frameworks/go.d.ts.map +1 -0
  555. package/dist/resolution/frameworks/go.js +184 -0
  556. package/dist/resolution/frameworks/go.js.map +1 -0
  557. package/dist/resolution/frameworks/goframe.d.ts +41 -0
  558. package/dist/resolution/frameworks/goframe.d.ts.map +1 -0
  559. package/dist/resolution/frameworks/goframe.js +112 -0
  560. package/dist/resolution/frameworks/goframe.js.map +1 -0
  561. package/dist/resolution/frameworks/index.d.ts +50 -0
  562. package/dist/resolution/frameworks/index.d.ts.map +1 -0
  563. package/dist/resolution/frameworks/index.js +175 -0
  564. package/dist/resolution/frameworks/index.js.map +1 -0
  565. package/dist/resolution/frameworks/java.d.ts +8 -0
  566. package/dist/resolution/frameworks/java.d.ts.map +1 -0
  567. package/dist/resolution/frameworks/java.js +517 -0
  568. package/dist/resolution/frameworks/java.js.map +1 -0
  569. package/dist/resolution/frameworks/laravel.d.ts +13 -0
  570. package/dist/resolution/frameworks/laravel.d.ts.map +1 -0
  571. package/dist/resolution/frameworks/laravel.js +257 -0
  572. package/dist/resolution/frameworks/laravel.js.map +1 -0
  573. package/dist/resolution/frameworks/nestjs.d.ts +26 -0
  574. package/dist/resolution/frameworks/nestjs.d.ts.map +1 -0
  575. package/dist/resolution/frameworks/nestjs.js +698 -0
  576. package/dist/resolution/frameworks/nestjs.js.map +1 -0
  577. package/dist/resolution/frameworks/play.d.ts +19 -0
  578. package/dist/resolution/frameworks/play.d.ts.map +1 -0
  579. package/dist/resolution/frameworks/play.js +111 -0
  580. package/dist/resolution/frameworks/play.js.map +1 -0
  581. package/dist/resolution/frameworks/python.d.ts +10 -0
  582. package/dist/resolution/frameworks/python.d.ts.map +1 -0
  583. package/dist/resolution/frameworks/python.js +400 -0
  584. package/dist/resolution/frameworks/python.js.map +1 -0
  585. package/dist/resolution/frameworks/react-native.d.ts +3 -0
  586. package/dist/resolution/frameworks/react-native.d.ts.map +1 -0
  587. package/dist/resolution/frameworks/react-native.js +410 -0
  588. package/dist/resolution/frameworks/react-native.js.map +1 -0
  589. package/dist/resolution/frameworks/react.d.ts +8 -0
  590. package/dist/resolution/frameworks/react.d.ts.map +1 -0
  591. package/dist/resolution/frameworks/react.js +334 -0
  592. package/dist/resolution/frameworks/react.js.map +1 -0
  593. package/dist/resolution/frameworks/ruby.d.ts +8 -0
  594. package/dist/resolution/frameworks/ruby.d.ts.map +1 -0
  595. package/dist/resolution/frameworks/ruby.js +302 -0
  596. package/dist/resolution/frameworks/ruby.js.map +1 -0
  597. package/dist/resolution/frameworks/rust.d.ts +8 -0
  598. package/dist/resolution/frameworks/rust.d.ts.map +1 -0
  599. package/dist/resolution/frameworks/rust.js +304 -0
  600. package/dist/resolution/frameworks/rust.js.map +1 -0
  601. package/dist/resolution/frameworks/svelte.d.ts +9 -0
  602. package/dist/resolution/frameworks/svelte.d.ts.map +1 -0
  603. package/dist/resolution/frameworks/svelte.js +253 -0
  604. package/dist/resolution/frameworks/svelte.js.map +1 -0
  605. package/dist/resolution/frameworks/swift-objc.d.ts +37 -0
  606. package/dist/resolution/frameworks/swift-objc.d.ts.map +1 -0
  607. package/dist/resolution/frameworks/swift-objc.js +252 -0
  608. package/dist/resolution/frameworks/swift-objc.js.map +1 -0
  609. package/dist/resolution/frameworks/swift.d.ts +10 -0
  610. package/dist/resolution/frameworks/swift.d.ts.map +1 -0
  611. package/dist/resolution/frameworks/swift.js +400 -0
  612. package/dist/resolution/frameworks/swift.js.map +1 -0
  613. package/dist/resolution/frameworks/terraform.d.ts +38 -0
  614. package/dist/resolution/frameworks/terraform.d.ts.map +1 -0
  615. package/dist/resolution/frameworks/terraform.js +277 -0
  616. package/dist/resolution/frameworks/terraform.js.map +1 -0
  617. package/dist/resolution/frameworks/vue.d.ts +9 -0
  618. package/dist/resolution/frameworks/vue.d.ts.map +1 -0
  619. package/dist/resolution/frameworks/vue.js +303 -0
  620. package/dist/resolution/frameworks/vue.js.map +1 -0
  621. package/dist/resolution/go-module.d.ts +26 -0
  622. package/dist/resolution/go-module.d.ts.map +1 -0
  623. package/dist/resolution/go-module.js +78 -0
  624. package/dist/resolution/go-module.js.map +1 -0
  625. package/dist/resolution/goframe-synthesizer.d.ts +29 -0
  626. package/dist/resolution/goframe-synthesizer.d.ts.map +1 -0
  627. package/dist/resolution/goframe-synthesizer.js +163 -0
  628. package/dist/resolution/goframe-synthesizer.js.map +1 -0
  629. package/dist/resolution/import-resolver.d.ts +84 -0
  630. package/dist/resolution/import-resolver.d.ts.map +1 -0
  631. package/dist/resolution/import-resolver.js +2134 -0
  632. package/dist/resolution/import-resolver.js.map +1 -0
  633. package/dist/resolution/index.d.ts +343 -0
  634. package/dist/resolution/index.d.ts.map +1 -0
  635. package/dist/resolution/index.js +2339 -0
  636. package/dist/resolution/index.js.map +1 -0
  637. package/dist/resolution/lru-cache.d.ts +24 -0
  638. package/dist/resolution/lru-cache.d.ts.map +1 -0
  639. package/dist/resolution/lru-cache.js +62 -0
  640. package/dist/resolution/lru-cache.js.map +1 -0
  641. package/dist/resolution/memory-budget.d.ts +48 -0
  642. package/dist/resolution/memory-budget.d.ts.map +1 -0
  643. package/dist/resolution/memory-budget.js +162 -0
  644. package/dist/resolution/memory-budget.js.map +1 -0
  645. package/dist/resolution/name-matcher.d.ts +123 -0
  646. package/dist/resolution/name-matcher.d.ts.map +1 -0
  647. package/dist/resolution/name-matcher.js +2134 -0
  648. package/dist/resolution/name-matcher.js.map +1 -0
  649. package/dist/resolution/path-aliases.d.ts +68 -0
  650. package/dist/resolution/path-aliases.d.ts.map +1 -0
  651. package/dist/resolution/path-aliases.js +238 -0
  652. package/dist/resolution/path-aliases.js.map +1 -0
  653. package/dist/resolution/resolver-pool.d.ts +106 -0
  654. package/dist/resolution/resolver-pool.d.ts.map +1 -0
  655. package/dist/resolution/resolver-pool.js +344 -0
  656. package/dist/resolution/resolver-pool.js.map +1 -0
  657. package/dist/resolution/resolver-worker.d.ts +17 -0
  658. package/dist/resolution/resolver-worker.d.ts.map +1 -0
  659. package/dist/resolution/resolver-worker.js +141 -0
  660. package/dist/resolution/resolver-worker.js.map +1 -0
  661. package/dist/resolution/strip-comments.d.ts +27 -0
  662. package/dist/resolution/strip-comments.d.ts.map +1 -0
  663. package/dist/resolution/strip-comments.js +492 -0
  664. package/dist/resolution/strip-comments.js.map +1 -0
  665. package/dist/resolution/swift-objc-bridge.d.ts +134 -0
  666. package/dist/resolution/swift-objc-bridge.d.ts.map +1 -0
  667. package/dist/resolution/swift-objc-bridge.js +256 -0
  668. package/dist/resolution/swift-objc-bridge.js.map +1 -0
  669. package/dist/resolution/types.d.ts +265 -0
  670. package/dist/resolution/types.d.ts.map +1 -0
  671. package/dist/resolution/types.js +8 -0
  672. package/dist/resolution/types.js.map +1 -0
  673. package/dist/resolution/workspace-packages.d.ts +58 -0
  674. package/dist/resolution/workspace-packages.d.ts.map +1 -0
  675. package/dist/resolution/workspace-packages.js +346 -0
  676. package/dist/resolution/workspace-packages.js.map +1 -0
  677. package/dist/search/identifier-segments.d.ts +60 -0
  678. package/dist/search/identifier-segments.d.ts.map +1 -0
  679. package/dist/search/identifier-segments.js +176 -0
  680. package/dist/search/identifier-segments.js.map +1 -0
  681. package/dist/search/query-parser.d.ts +57 -0
  682. package/dist/search/query-parser.d.ts.map +1 -0
  683. package/dist/search/query-parser.js +177 -0
  684. package/dist/search/query-parser.js.map +1 -0
  685. package/dist/search/query-utils.d.ts +87 -0
  686. package/dist/search/query-utils.d.ts.map +1 -0
  687. package/dist/search/query-utils.js +450 -0
  688. package/dist/search/query-utils.js.map +1 -0
  689. package/dist/sync/git-hooks.d.ts +45 -0
  690. package/dist/sync/git-hooks.d.ts.map +1 -0
  691. package/dist/sync/git-hooks.js +227 -0
  692. package/dist/sync/git-hooks.js.map +1 -0
  693. package/dist/sync/index.d.ts +19 -0
  694. package/dist/sync/index.d.ts.map +1 -0
  695. package/dist/sync/index.js +35 -0
  696. package/dist/sync/index.js.map +1 -0
  697. package/dist/sync/watch-policy.d.ts +48 -0
  698. package/dist/sync/watch-policy.d.ts.map +1 -0
  699. package/dist/sync/watch-policy.js +124 -0
  700. package/dist/sync/watch-policy.js.map +1 -0
  701. package/dist/sync/watcher.d.ts +379 -0
  702. package/dist/sync/watcher.d.ts.map +1 -0
  703. package/dist/sync/watcher.js +921 -0
  704. package/dist/sync/watcher.js.map +1 -0
  705. package/dist/sync/worktree.d.ts +63 -0
  706. package/dist/sync/worktree.d.ts.map +1 -0
  707. package/dist/sync/worktree.js +182 -0
  708. package/dist/sync/worktree.js.map +1 -0
  709. package/dist/telemetry/index.d.ts +143 -0
  710. package/dist/telemetry/index.d.ts.map +1 -0
  711. package/dist/telemetry/index.js +541 -0
  712. package/dist/telemetry/index.js.map +1 -0
  713. package/dist/types.d.ts +465 -0
  714. package/dist/types.d.ts.map +1 -0
  715. package/dist/types.js +117 -0
  716. package/dist/types.js.map +1 -0
  717. package/dist/ui/color.d.ts +21 -0
  718. package/dist/ui/color.d.ts.map +1 -0
  719. package/dist/ui/color.js +42 -0
  720. package/dist/ui/color.js.map +1 -0
  721. package/dist/ui/glyphs.d.ts +67 -0
  722. package/dist/ui/glyphs.d.ts.map +1 -0
  723. package/dist/ui/glyphs.js +125 -0
  724. package/dist/ui/glyphs.js.map +1 -0
  725. package/dist/ui/shimmer-progress.d.ts +11 -0
  726. package/dist/ui/shimmer-progress.d.ts.map +1 -0
  727. package/dist/ui/shimmer-progress.js +164 -0
  728. package/dist/ui/shimmer-progress.js.map +1 -0
  729. package/dist/ui/shimmer-worker.d.ts +2 -0
  730. package/dist/ui/shimmer-worker.d.ts.map +1 -0
  731. package/dist/ui/shimmer-worker.js +126 -0
  732. package/dist/ui/shimmer-worker.js.map +1 -0
  733. package/dist/ui/types.d.ts +15 -0
  734. package/dist/ui/types.d.ts.map +1 -0
  735. package/dist/ui/types.js +3 -0
  736. package/dist/ui/types.js.map +1 -0
  737. package/dist/upgrade/index.d.ts +171 -0
  738. package/dist/upgrade/index.d.ts.map +1 -0
  739. package/dist/upgrade/index.js +659 -0
  740. package/dist/upgrade/index.js.map +1 -0
  741. package/dist/upgrade/remove-binary.d.ts +87 -0
  742. package/dist/upgrade/remove-binary.d.ts.map +1 -0
  743. package/dist/upgrade/remove-binary.js +289 -0
  744. package/dist/upgrade/remove-binary.js.map +1 -0
  745. package/dist/upgrade/update-check.d.ts +92 -0
  746. package/dist/upgrade/update-check.d.ts.map +1 -0
  747. package/dist/upgrade/update-check.js +258 -0
  748. package/dist/upgrade/update-check.js.map +1 -0
  749. package/dist/utils.d.ts +224 -0
  750. package/dist/utils.d.ts.map +1 -0
  751. package/dist/utils.js +583 -0
  752. package/dist/utils.js.map +1 -0
  753. package/package.json +61 -0
  754. package/scripts/add-lang/bench.sh +60 -0
  755. package/scripts/add-lang/check-grammar.mjs +75 -0
  756. package/scripts/add-lang/dump-ast.mjs +103 -0
  757. package/scripts/add-lang/verify-extraction.mjs +70 -0
  758. package/scripts/agent-eval/ab-adoption.sh +91 -0
  759. package/scripts/agent-eval/ab-hook.sh +86 -0
  760. package/scripts/agent-eval/ab-impl.sh +78 -0
  761. package/scripts/agent-eval/ab-new-vs-baseline.sh +161 -0
  762. package/scripts/agent-eval/ab-sufficiency.sh +78 -0
  763. package/scripts/agent-eval/allocation-fixtures.json +344 -0
  764. package/scripts/agent-eval/arms-F.sh +21 -0
  765. package/scripts/agent-eval/arms-matrix.sh +37 -0
  766. package/scripts/agent-eval/audit.sh +68 -0
  767. package/scripts/agent-eval/bench-readme.sh +48 -0
  768. package/scripts/agent-eval/bench-why-repo.sh +22 -0
  769. package/scripts/agent-eval/block-read-hook.sh +19 -0
  770. package/scripts/agent-eval/compare-arms.mjs +209 -0
  771. package/scripts/agent-eval/diff-index-drift.mjs +102 -0
  772. package/scripts/agent-eval/hook-settings.json +15 -0
  773. package/scripts/agent-eval/itrun.sh +120 -0
  774. package/scripts/agent-eval/no-cli-shim.sh +96 -0
  775. package/scripts/agent-eval/offload-eval-3arm.sh +72 -0
  776. package/scripts/agent-eval/offload-eval-cost.mjs +133 -0
  777. package/scripts/agent-eval/offload-eval-effort.mjs +108 -0
  778. package/scripts/agent-eval/offload-eval-frontload-matrix.sh +25 -0
  779. package/scripts/agent-eval/offload-eval-frontload.sh +47 -0
  780. package/scripts/agent-eval/offload-eval-ground-truth.json +18 -0
  781. package/scripts/agent-eval/offload-eval-hook.mjs +84 -0
  782. package/scripts/agent-eval/offload-eval-judge.mjs +103 -0
  783. package/scripts/agent-eval/offload-eval-matrix.sh +20 -0
  784. package/scripts/agent-eval/offload-eval-metrics.mjs +94 -0
  785. package/scripts/agent-eval/offload-eval-refs1.sh +50 -0
  786. package/scripts/agent-eval/offload-eval-setup.sh +24 -0
  787. package/scripts/agent-eval/offload-eval-styles.sh +72 -0
  788. package/scripts/agent-eval/offload-eval-summarize.mjs +68 -0
  789. package/scripts/agent-eval/offload-eval.md +76 -0
  790. package/scripts/agent-eval/parse-arms.mjs +116 -0
  791. package/scripts/agent-eval/parse-bench-readme.mjs +238 -0
  792. package/scripts/agent-eval/parse-run.mjs +1401 -0
  793. package/scripts/agent-eval/parse-session.mjs +130 -0
  794. package/scripts/agent-eval/probe-allocation.mjs +335 -0
  795. package/scripts/agent-eval/probe-context.mjs +21 -0
  796. package/scripts/agent-eval/probe-decl-only.mjs +198 -0
  797. package/scripts/agent-eval/probe-explore.mjs +40 -0
  798. package/scripts/agent-eval/probe-factory-closure.mjs +147 -0
  799. package/scripts/agent-eval/probe-file-spend.mjs +195 -0
  800. package/scripts/agent-eval/probe-named-symbol.mjs +163 -0
  801. package/scripts/agent-eval/probe-node.mjs +20 -0
  802. package/scripts/agent-eval/probe-suite-envelope.mjs +124 -0
  803. package/scripts/agent-eval/probe-sweep.mjs +119 -0
  804. package/scripts/agent-eval/probe-trace.mjs +20 -0
  805. package/scripts/agent-eval/redirect-read-hook.sh +38 -0
  806. package/scripts/agent-eval/repro-concurrent-explore.mjs +119 -0
  807. package/scripts/agent-eval/repro-daemon-clients.mjs +125 -0
  808. package/scripts/agent-eval/run-agent.sh +34 -0
  809. package/scripts/agent-eval/run-all.sh +149 -0
  810. package/scripts/agent-eval/run-arms.sh +56 -0
  811. package/scripts/agent-eval/seq-matrix.mjs +137 -0
  812. package/scripts/build-bundle.sh +145 -0
  813. package/scripts/build-kernel.sh +87 -0
  814. package/scripts/dump-graph.mjs +57 -0
  815. package/scripts/extract-release-notes.mjs +130 -0
  816. package/scripts/kernel-parity.mjs +283 -0
  817. package/scripts/local-install.sh +41 -0
  818. package/scripts/npm-sdk.js +75 -0
  819. package/scripts/npm-shim.js +279 -0
  820. package/scripts/pack-npm.sh +123 -0
  821. package/scripts/prepare-release.mjs +270 -0
@@ -0,0 +1,161 @@
1
+ #!/usr/bin/env bash
2
+ # A/B a codegraph retrieval/steering change: the NEW build (current HEAD) vs a
3
+ # BASELINE build (a git ref) — BOTH with codegraph attached — on the same
4
+ # implementation task. ISOLATES the change (unlike run-all.sh's
5
+ # with-vs-without). The agent works on a throwaway copy of the target, so your
6
+ # repos are never touched.
7
+ #
8
+ # Each run reports the tool mix AND the three feedback metrics; compare-arms.mjs
9
+ # then puts both arms side by side:
10
+ # residual context occupancy (CG-7) window still held by the arm's retrieval
11
+ # explore sufficiency (CG-8) was the response ENOUGH — the agent's next act
12
+ # allocation efficiency (CG-9) share of returned bytes the answer cited
13
+ # This is the harness those metrics were built for: both arms are codegraph-on,
14
+ # so every one of them is measuring the retrieval change rather than adoption.
15
+ # docs/benchmarks/agent-eval-feedback-metrics.md is the entry point; the three
16
+ # per-metric docs it links carry the caveats — in particular that allocation
17
+ # efficiency is RELATIVE (attribution is by citation), which is exactly why
18
+ # same-question new-vs-baseline is the comparison it is valid for.
19
+ #
20
+ # Both arms also run with the codegraph CLI blocked (no-cli-shim.sh). Here that
21
+ # is not a with/without leak but an ATTRIBUTION one: an explore issued through
22
+ # Bash is charged to Bash in the occupancy table and never reaches the
23
+ # sufficiency or allocation parse at all, so a run that shells out silently
24
+ # drops calls from all three metrics.
25
+ #
26
+ # Reliable attach (works even when this is itself run nested inside a Claude
27
+ # session): each arm PRE-WARMS a persistent codegraph daemon for its target so
28
+ # claude connects to an already-bound, index-loaded daemon instantly — before
29
+ # the agent's first turn — and SKIPS codegraph's startup re-exec via
30
+ # CODEGRAPH_WASM_RELAUNCHED=1. Without this, on a multi-step task the agent
31
+ # dives into Read/grep before codegraph finishes its ~2-3s startup (worse under
32
+ # the CPU contention of a nested run) and runs with NO codegraph.
33
+ #
34
+ # Gotcha: claude's `system/init` snapshot can read status:"pending" / 0 tools
35
+ # even when the server then connects fine — judge by ACTUAL codegraph usage in
36
+ # parse-run.mjs's "by type", not the init line.
37
+ #
38
+ # Usage: ab-new-vs-baseline.sh <indexed-repo> "<task>" [baseline-ref]
39
+ # <indexed-repo> a repo with a .codegraph index (copied per arm)
40
+ # "<task>" an implementation task, e.g. "Add X to Y and wire it through"
41
+ # [baseline-ref] git ref for the BEFORE build (default: HEAD~1)
42
+ # Env:
43
+ # AGENT_EVAL_OUT output dir (default: /tmp/ab-new-vs-baseline)
44
+ # RUNS runs per arm (default 1). Run-to-run variance is large —
45
+ # use >=2 and report the range, never a single run. Both arms
46
+ # build/index ONCE and then run RUNS times, so raising this is
47
+ # far cheaper than re-invoking the script.
48
+ # MODEL / EFFORT default sonnet / high. Never raise without a reason: sonnet
49
+ # is the deliberate floor model (see CLAUDE.md).
50
+ #
51
+ # Both arms run with CODEGRAPH_NO_PROMPT_HOOK=1: the machine's ambient
52
+ # UserPromptSubmit front-load hook resolves to whichever build is currently in
53
+ # dist/, so leaving it on injects context through a second, uncontrolled channel
54
+ # and confounds the tool-call counts this script exists to compare.
55
+ set -uo pipefail
56
+
57
+ TARGET="${1:?usage: ab-new-vs-baseline.sh <indexed-repo> \"<task>\" [baseline-ref]}"
58
+ TASK="${2:?task required}"
59
+ BASE_REF="${3:-HEAD~1}"
60
+ HARNESS="$(cd "$(dirname "$0")" && pwd)"
61
+ ENGINE="$(cd "$HARNESS/../.." && pwd)"
62
+ BIN="$ENGINE/dist/bin/codegraph.js"
63
+ OUT="${AGENT_EVAL_OUT:-/tmp/ab-new-vs-baseline}"
64
+ PARSE="$HARNESS/parse-run.mjs"
65
+
66
+ command -v claude >/dev/null || { echo "claude CLI not on PATH"; exit 1; }
67
+ [ -d "$TARGET/.codegraph" ] || { echo "target not indexed: run 'codegraph init $TARGET' first"; exit 1; }
68
+ if ! git -C "$ENGINE" diff --quiet || ! git -C "$ENGINE" diff --cached --quiet; then
69
+ echo "engine repo has uncommitted changes — commit or stash first (this script checks files out)"; exit 1
70
+ fi
71
+ CHANGED=$(git -C "$ENGINE" diff --name-only "$BASE_REF" HEAD -- src 2>/dev/null)
72
+ [ -n "$CHANGED" ] || { echo "no src/ changes between $BASE_REF and HEAD — nothing to A/B"; exit 1; }
73
+
74
+ # On exit: kill any eval daemons + restore the engine to HEAD.
75
+ cleanup() {
76
+ pkill -9 -f "serve --mcp --path $OUT/" 2>/dev/null
77
+ git -C "$ENGINE" checkout HEAD -- $CHANGED 2>/dev/null
78
+ ( cd "$ENGINE" && npm run build >/dev/null 2>&1 )
79
+ }
80
+ # INT/TERM too: killing the script mid-baseline-arm otherwise leaves the engine
81
+ # checked out at the baseline ref, which silently poisons every later build.
82
+ trap cleanup EXIT INT TERM
83
+
84
+ mkdir -p "$OUT"
85
+
86
+ # Sanitized PATH + the absolute-path block, shared with run-all.sh. Sets
87
+ # $ARM_PATH and $ARM_SETTINGS; aborts if either layer fails its own probe.
88
+ . "$HARNESS/no-cli-shim.sh"
89
+ cg_no_cli_setup "$OUT" || exit 1
90
+
91
+ echo "###### engine=$ENGINE baseline=$BASE_REF"
92
+ echo "###### changed: $(echo "$CHANGED" | tr '\n' ' ')"
93
+ echo "###### target=$TARGET"
94
+ echo "###### task=$TASK"
95
+ echo
96
+
97
+ # Two pristine copies so each arm starts clean (the agent edits its own copy).
98
+ rm -rf "$OUT/t-new" "$OUT/t-base"
99
+ rsync -a --exclude node_modules --exclude .git --exclude dist --exclude .codegraph "$TARGET/" "$OUT/t-new/"
100
+ cp -R "$OUT/t-new" "$OUT/t-base"
101
+
102
+ prewarm() { # target — spawn a persistent daemon (current $BIN) and wait for its socket
103
+ pkill -9 -f "serve --mcp --path $1" 2>/dev/null
104
+ CODEGRAPH_DAEMON_IDLE_TIMEOUT_MS=1800000 node "$BIN" serve --mcp --path "$1" </dev/null >/dev/null 2>&1 &
105
+ node -e 'const fs=require("fs");let n=0;const t=setInterval(()=>{if(fs.existsSync(process.argv[1]+"/.codegraph/daemon.sock")){clearInterval(t);process.exit(0)}if(n++>150){clearInterval(t);process.exit(1)}},100)' "$1" \
106
+ && echo " daemon warm: $1" || echo " WARN: daemon never bound for $1 (arm may run without codegraph)"
107
+ }
108
+
109
+ run_arm() { # label, target-copy — runs the task $RUNS times against one build
110
+ local label="$1" tgt="$2" c="$OUT/mcp-$1.json"
111
+ # Connect to the pre-warmed daemon; skip the startup re-exec for a fast attach.
112
+ # CODEGRAPH_EXPLORE_DEBUG points explore's per-file allocation diagnostic at a
113
+ # sidecar (no-op on builds predating it; never perturbs the response).
114
+ printf '{"mcpServers":{"codegraph":{"command":"env","args":["CODEGRAPH_WASM_RELAUNCHED=1","CODEGRAPH_EXPLORE_DEBUG=%s","node","%s","serve","--mcp","--path","%s"]}}}' \
115
+ "$OUT/explore-$label.jsonl" "$BIN" "$tgt" > "$c"
116
+ rm -f "$OUT/explore-$label.jsonl"
117
+ echo "############## ARM [$label] ##############"
118
+ for i in $(seq 1 "${RUNS:-1}"); do
119
+ # Re-warm per run: the previous run's daemon is killed below, and a cold
120
+ # attach is exactly the failure this pre-warm exists to prevent.
121
+ prewarm "$tgt"
122
+ ( cd "$tgt" && PATH="$ARM_PATH" CODEGRAPH_NO_PROMPT_HOOK=1 claude -p "$TASK" \
123
+ --output-format stream-json --verbose --permission-mode bypassPermissions \
124
+ --model "${MODEL:-sonnet}" --effort "${EFFORT:-high}" --max-budget-usd 4 --strict-mcp-config --mcp-config "$c" \
125
+ --settings "$ARM_SETTINGS" \
126
+ </dev/null > "$OUT/run-$label-$i.jsonl" 2>"$OUT/run-$label-$i.err" )
127
+ echo "-- run $i --"
128
+ # --brief: tool counts, result, and the three metric blocks, minus the
129
+ # numbered call transcript (RUNS>=2 is otherwise mostly call listings; the
130
+ # full sequence is one `parse-run.mjs $OUT/run-$label-$i.jsonl` away).
131
+ node "$PARSE" --brief "$OUT/run-$label-$i.jsonl" 2>&1 || echo " (parse failed — see $OUT/run-$label-$i.jsonl)"
132
+ pkill -9 -f "serve --mcp --path $tgt" 2>/dev/null
133
+ done
134
+ echo
135
+ }
136
+
137
+ echo "== NEW build (HEAD) =="
138
+ ( cd "$ENGINE" && npm run build >/dev/null 2>&1 ) && echo " built"
139
+ node "$BIN" init "$OUT/t-new" >/dev/null 2>&1 && echo " indexed t-new"
140
+ run_arm new "$OUT/t-new"
141
+
142
+ echo "== BASELINE build ($BASE_REF) =="
143
+ # Per-file: a file ADDED since baseline has no pathspec on the ref — and a
144
+ # single multi-file checkout with one bad pathspec checks out NOTHING, which
145
+ # silently ran the NEW build in the baseline arm. Absent-on-baseline → remove.
146
+ for f in $CHANGED; do
147
+ git -C "$ENGINE" checkout "$BASE_REF" -- "$f" 2>/dev/null || rm -f "$ENGINE/$f"
148
+ done
149
+ ( cd "$ENGINE" && npm run build >/dev/null 2>&1 ) && echo " built"
150
+ node "$BIN" init "$OUT/t-base" >/dev/null 2>&1 && echo " indexed t-base"
151
+ run_arm baseline "$OUT/t-base"
152
+
153
+ # Both arms, all three metrics, one table. The per-run blocks above say WHY a
154
+ # number moved (which query fell short, which file nothing cited); this says
155
+ # whether it moved at all, with the range across RUNS — never read the median
156
+ # of one run.
157
+ node "$HARNESS/compare-arms.mjs" "$OUT" new baseline 2>&1 || true
158
+
159
+ echo "###### DONE. Read the ARM COMPARISON above first, then the per-run blocks"
160
+ echo "###### for the queries and files behind any number that moved."
161
+ echo "###### Full logs in: $OUT"
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/env bash
2
+ # Sufficiency A/B: on a real understanding/flow question, WHEN the agent uses
3
+ # codegraph (explore/node), does it still Read? Premise under test: explore/node
4
+ # return source WITH line numbers, so a Read should not be needed.
5
+ #
6
+ # WITH codegraph (pre-warmed daemon, reliable nested attach) vs WITHOUT (empty
7
+ # MCP, Read/Grep only), N runs each, on a throwaway copy of the repo. Reports
8
+ # explore/node vs Read/Grep, and LISTS the files Read in the WITH arm so a true
9
+ # sufficiency gap (an indexed source file) is distinguishable from out-of-scope
10
+ # (configs, docs, a file codegraph didn't index).
11
+ #
12
+ # Usage: ab-sufficiency.sh <indexed-repo> "<question>" [runs-per-arm]
13
+ # Env: AGENT_EVAL_OUT (default: /tmp/ab-sufficiency)
14
+ set -uo pipefail
15
+ REPO="${1:?usage: ab-sufficiency.sh <indexed-repo> \"<question>\" [runs]}"
16
+ Q="${2:?question required}"
17
+ RUNS="${3:-2}"
18
+ ENGINE="$(cd "$(dirname "$0")/../.." && pwd)"
19
+ BIN="$ENGINE/dist/bin/codegraph.js"
20
+ OUT="${AGENT_EVAL_OUT:-/tmp/ab-sufficiency}"
21
+ TGT="$OUT/target"
22
+ command -v claude >/dev/null || { echo "claude CLI not on PATH"; exit 1; }
23
+ [ -d "$REPO/.codegraph" ] || { echo "no .codegraph index at $REPO"; exit 1; }
24
+ cleanup(){ pkill -9 -f "serve --mcp --path $TGT" 2>/dev/null; }
25
+ trap cleanup EXIT
26
+ mkdir -p "$OUT"
27
+ ( cd "$ENGINE" && npm run build >/dev/null 2>&1 ) && echo "built"
28
+
29
+ # Throwaway copy + fresh index (the agent works here; a read-only question won't
30
+ # edit, but isolate anyway). Excludes the source repo's index/build/vcs.
31
+ rm -rf "$TGT"
32
+ rsync -a --exclude node_modules --exclude .git --exclude dist --exclude .codegraph "$REPO/" "$TGT/"
33
+ node "$BIN" init "$TGT" >/dev/null 2>&1 && echo "indexed copy ($(node "$BIN" status --json 2>/dev/null | node -e 'let s="";process.stdin.on("data",d=>s+=d).on("end",()=>{try{console.log(JSON.parse(s).fileCount+" files")}catch{console.log("?")}})' 2>/dev/null || echo '?'))"
34
+
35
+ echo "###### repo=$REPO runs/arm=$RUNS"
36
+ echo "###### Q=$Q"; echo
37
+ echo '{"mcpServers":{}}' > "$OUT/mcp-empty.json"
38
+ printf '{"mcpServers":{"codegraph":{"command":"env","args":["CODEGRAPH_WASM_RELAUNCHED=1","node","%s","serve","--mcp","--path","%s"]}}}' "$BIN" "$TGT" > "$OUT/mcp-cg.json"
39
+
40
+ prewarm(){
41
+ pkill -9 -f "serve --mcp --path $TGT" 2>/dev/null
42
+ CODEGRAPH_DAEMON_IDLE_TIMEOUT_MS=1800000 node "$BIN" serve --mcp --path "$TGT" </dev/null >/dev/null 2>&1 &
43
+ node -e 'const fs=require("fs");let n=0;const t=setInterval(()=>{if(fs.existsSync(process.argv[1]+"/.codegraph/daemon.sock")){clearInterval(t);process.exit(0)}if(n++>150){clearInterval(t);process.exit(1)}},100)' "$TGT" >/dev/null 2>&1
44
+ }
45
+
46
+ analyze(){
47
+ node -e '
48
+ const fs=require("fs");
49
+ const L=fs.readFileSync(process.argv[1],"utf8").split("\n").filter(Boolean);
50
+ let ex=0,nf=0,ns=0,oc=0,gr=0,exposed="?";const reads=[];
51
+ for(const l of L){try{const o=JSON.parse(l);
52
+ if(o.type==="system"&&o.subtype==="init")exposed=(o.tools||[]).filter(t=>/codegraph/.test(t)).length;
53
+ for(const b of (o.message?.content||[])){if(b.type!=="tool_use")continue;
54
+ if(b.name==="mcp__codegraph__codegraph_explore")ex++;
55
+ else if(b.name==="mcp__codegraph__codegraph_node"){if(b.input&&b.input.symbol)ns++;else nf++;}
56
+ else if(/mcp__codegraph__/.test(b.name))oc++;
57
+ else if(b.name==="Read")reads.push((b.input?.file_path||"").split("/").pop());
58
+ else if(b.name==="Grep")gr++;
59
+ }}catch{}}
60
+ console.log(` explore=${ex} node[sym]=${ns} node[file]=${nf} other_cg=${oc} | Read=${reads.length}${reads.length?" ("+reads.join(", ")+")":""} Grep=${gr} [cg exposed=${exposed}]`);
61
+ ' "$1"
62
+ }
63
+
64
+ run(){ # label, cfg, prewarm(0/1)
65
+ local label="$1" cfg="$2" pw="$3"
66
+ for i in $(seq 1 "$RUNS"); do
67
+ [ "$pw" = "1" ] && prewarm
68
+ ( cd "$TGT" && claude -p "$Q" --output-format stream-json --verbose \
69
+ --permission-mode bypassPermissions --model "${MODEL:-sonnet}" --effort "${EFFORT:-high}" --max-budget-usd 4 \
70
+ --strict-mcp-config --mcp-config "$cfg" </dev/null > "$OUT/$label-$i.jsonl" 2>"$OUT/$label-$i.err" )
71
+ echo "[$label] run $i:"; analyze "$OUT/$label-$i.jsonl"
72
+ done
73
+ echo
74
+ }
75
+
76
+ echo "== WITH codegraph (premise: explore/node used -> Read ~0) =="; run with "$OUT/mcp-cg.json" 1
77
+ echo "== WITHOUT (Read/Grep only — the contrast) =="; run without "$OUT/mcp-empty.json" 0
78
+ echo "###### DONE. In the WITH arm: are explore/node>0 and Read~0? Any Read of an INDEXED source file = sufficiency gap. Logs: $OUT"
@@ -0,0 +1,344 @@
1
+ {
2
+ "$comment": [
3
+ "Regression fixtures for GitHub issue #1500 / epic CG-1 — relevance-proportional",
4
+ "explore budget allocation. Run them with `node scripts/agent-eval/probe-allocation.mjs`",
5
+ "against a built dist/.",
6
+ "",
7
+ "STATUS: BOTH FIXTURES PASS again as of CG-31. self-query's delivered-share gates",
8
+ "failed on the CG-30-only build (`afterCG30`) and CG-31 restored them (`afterCG31`):",
9
+ "the incidental file was not over-RESERVED at all — it was over-SPENDING, drawing on",
10
+ "the reservations of files the render loop had not reached yet. Bounding that put the",
11
+ "response back inside the envelope, so nothing truncates and every admitted file",
12
+ "delivers. Read the two blocks together; the CG-30 verdict's diagnosis was wrong.",
13
+ "",
14
+ "CG-10 (relevance scoring) closed the RANKING half —",
15
+ "nothing incidental reaches the envelope any more — and CG-12 (score-proportional",
16
+ "allocation with a relative cliff) closed the BYTE SPLIT: each file's share is reserved",
17
+ "before anything renders, and a file under 15% of the top weight gets no source at all,",
18
+ "freeing both its bytes and its maxFiles slot. Each fixture records the pre-CG-10",
19
+ "`baseline`, the interim `afterCG10`, and the current `afterCG12`.",
20
+ "",
21
+ "`groups` partitions the files explore rendered into `answer` (what the query is",
22
+ "actually about) and `incidental` (what wins the envelope today on name collisions).",
23
+ "Assertions are on the DELIVERED envelope unless suffixed `Allocated`; delivered is",
24
+ "what the agent got, allocated is what the render loop chose before the hard ceiling.",
25
+ "Shares are fractions of the whole response, meta-text included, so they never sum to 1.",
26
+ "",
27
+ "CG-36 adds two more fixtures and a per-file `spendShareAtLeast` gate. The share gates",
28
+ "above ask which files WON the envelope; that one asks whether a file that won its share",
29
+ "then spent it. `starved-cluster` and `dense-header` are the two halves of the same",
30
+ "tradeoff and must be read together — one fails if a trivial cluster starves the",
31
+ "answer-bearing one, the other fails if the fix for that buries a query's own methods",
32
+ "under a dense declaration block."
33
+ ],
34
+ "fixtures": [
35
+ {
36
+ "id": "payroll-go",
37
+ "title": "#1500 — generated Go CRUD beside a hand-written payroll workflow",
38
+ "kind": "fixture",
39
+ "path": "__tests__/fixtures/payroll-go",
40
+ "query": "how does payroll cycle create and calculate payslips?",
41
+ "rationale": [
42
+ "The reporter's repo shape: a Go service whose generated FKIT CRUD layer sits",
43
+ "beside the hand-written use-case that does the real work. The query deliberately",
44
+ "does NOT name runPayrollCycleAll / BuildPayslip / Upsert — an architecture",
45
+ "question phrased the way a newcomer would phrase it. The generated layer",
46
+ "name-collides on every query term (CreatePayslip, PayrollCycleCreateRequest,",
47
+ "CalculatePayrollCycleTotals, a second BuildPayslip, a second Upsert), so a",
48
+ "scorer that rewards incidental name matches surfaces the CRUD path.",
49
+ "Half the generated files carry ORDINARY names and are only detectable by their",
50
+ "`// Code generated ... DO NOT EDIT.` header (CG-5), which is what makes this",
51
+ "the #1500 case rather than a .pb.go case."
52
+ ],
53
+ "groups": {
54
+ "answer": [
55
+ "internal/usecase/**",
56
+ "internal/store/**",
57
+ "internal/transport/**",
58
+ "internal/domain/**",
59
+ "cmd/**"
60
+ ],
61
+ "incidental": [
62
+ "internal/gen/**"
63
+ ]
64
+ },
65
+ "assert": {
66
+ "answerShareAtLeast": 0.55,
67
+ "incidentalShareAtMost": 0.25,
68
+ "topFileGroup": "answer",
69
+ "mustDeliverBytes": [
70
+ "internal/usecase/payroll/cycle.go",
71
+ "internal/usecase/payroll/payslip_builder.go"
72
+ ],
73
+ "$mustContainComment": "Needles are chosen to match the HAND-WRITTEN chain only — a bare `BuildPayslip`/`Upsert` also matches the generated collisions, which is the whole point of the fixture.",
74
+ "mustContain": [
75
+ "runPayrollCycleAll",
76
+ "func (s *Service) BuildPayslip",
77
+ "s.store.Upsert(ctx, slip)"
78
+ ]
79
+ },
80
+ "baseline": {
81
+ "measuredOn": "2026-08-03",
82
+ "note": "19 files → very-tiny tier (13,000 budget); 23,020 chars allocated against it, cut to 16,011 by the 19,500 hard ceiling.",
83
+ "delivered": {
84
+ "internal/gen/fkit/payroll/payslip.go": 0.307,
85
+ "internal/gen/fkit/payroll/payroll_cycle.go": 0.266,
86
+ "internal/domain/payroll/payslip.go": 0.256,
87
+ "internal/usecase/payroll/cycle.go": 0.0
88
+ },
89
+ "verdict": "The workflow file is allocated the single largest slice (30.6%) and delivers ZERO — the hard ceiling drops its whole section. Generated CRUD takes 57.4% of what the agent actually receives; runPayrollCycleAll, BuildPayslip and the real Upsert never reach the response."
90
+ },
91
+ "afterCG10": {
92
+ "measuredOn": "2026-08-04",
93
+ "delivered": {
94
+ "internal/usecase/payroll/cycle.go": 0.389,
95
+ "internal/gen/fkit/payroll/payroll_cycle.go": 0.235,
96
+ "internal/domain/payroll/payslip.go": 0.226,
97
+ "internal/gen/fkit/payroll/payslip.go": 0.0
98
+ },
99
+ "verdict": "PASSES answerShareAtLeast (61.5%), incidentalShareAtMost (23.5%), topFileGroup, and the cycle.go + runPayrollCycleAll + real-Upsert needles. The generated files now rank #3/#4 instead of #1/#2 — kind weighting plus a 0.3x generated penalty on BOTH the score and the graph mass, which is the key the comparator sorts on. STILL FAILING for CG-12: payslip_builder.go ranks #6 against the tier's maxFiles of 4, so `func (s *Service) BuildPayslip` never renders."
100
+ },
101
+ "afterCG12": {
102
+ "measuredOn": "2026-08-04",
103
+ "note": "19,337 delivered, nothing truncated. Both generated files cliffed to pointers (weight 3.9 and 3.5 against a cliff of 5.4), which frees the two maxFiles slots the hand-written store and builder then take.",
104
+ "delivered": {
105
+ "internal/usecase/payroll/cycle.go": 0.306,
106
+ "internal/domain/payroll/payslip.go": 0.212,
107
+ "internal/usecase/payroll/payslip_builder.go": 0.151,
108
+ "internal/store/payslipstore/store.go": 0.118,
109
+ "internal/gen/fkit/payroll/payroll_cycle.go": 0.0,
110
+ "internal/gen/fkit/payroll/payslip.go": 0.0
111
+ },
112
+ "verdict": "ALL GATES PASS. Answer group 78.7% (from 25.6% at baseline), generated layer 0.0% (from 57.4%). All four hand-written files deliver source, including payslip_builder.go — `func (s *Service) BuildPayslip`, the 'calculate' half of the question, finally reaches the agent. The generated files are still NAMED with their symbols and line numbers under 'Not shown above', so withholding their bytes costs ~100 chars each instead of ~4,500 and stays one follow-up explore away."
113
+ }
114
+ },
115
+ {
116
+ "id": "starved-cluster",
117
+ "title": "CG-36 — a trivial top-ranked cluster starving the answer-bearing one",
118
+ "kind": "fixture",
119
+ "path": "__tests__/fixtures/starved-cluster-ts",
120
+ "query": "how does a request travel from sendRequest to the socket",
121
+ "rationale": [
122
+ "django's `db/models/sql/query.py` and okhttp's `RealInterceptorChain.kt`, reduced",
123
+ "to a fixture. `chain.ts` holds a one-line `describeChain` helper at the top —",
124
+ "trivial, but a direct callee of the query's entry point, so its cluster carries",
125
+ "the file's highest per-symbol importance — and, past the cluster gap, the",
126
+ "`RequestChain` class that actually answers the question. The helper's cluster wins",
127
+ "the one guaranteed-and-shrinkable slot; the class then does not fit the remainder.",
128
+ "",
129
+ "Before CG-36 the class was dropped WHOLE and the file delivered 1,985 of a 6,904",
130
+ "reservation. That is not merely unspent budget: the slack carries forward to",
131
+ "lower-ranked files, so the response stays full and every envelope-share gate",
132
+ "passes while the answer is missing. Hence `spendShareAtLeast`."
133
+ ],
134
+ "groups": {
135
+ "answer": [
136
+ "src/pipeline/chain.ts",
137
+ "src/transport/**",
138
+ "src/app/client.ts"
139
+ ],
140
+ "incidental": [
141
+ "src/app/config.ts",
142
+ "src/pipeline/framing.ts"
143
+ ]
144
+ },
145
+ "assert": {
146
+ "topFileGroup": "answer",
147
+ "spendShareAtLeast": {
148
+ "src/pipeline/chain.ts": 0.6
149
+ },
150
+ "mustDeliverBytes": [
151
+ "src/pipeline/chain.ts"
152
+ ],
153
+ "$mustContainComment": "The two ends of the in-file flow: the chain hop and the transport hop it terminates in. Both live in the cluster that used to be dropped whole.",
154
+ "mustContain": [
155
+ "async proceed(request: PipelineRequest)",
156
+ "private async writeAndRead(request: PipelineRequest)"
157
+ ]
158
+ },
159
+ "baseline": {
160
+ "measuredOn": "2026-08-06",
161
+ "note": "The CG-24 epic tip (76ab1fe), before CG-36. 3,725 chars of source delivered in total.",
162
+ "delivered": {
163
+ "src/pipeline/chain.ts": 1985,
164
+ "src/app/client.ts": 997,
165
+ "src/pipeline/types.ts": 743
166
+ },
167
+ "verdict": "FAILS spendShareAtLeast and both needles. chain.ts spends 1,985 of its 6,904 reservation (28.8%) — it keeps the `describeChain` cluster and drops the `RequestChain` cluster whole, so neither `proceed` nor `writeAndRead` reaches the agent. Nothing else in the response is wrong: the file still ranks #1 by score and is still reserved the largest slice."
168
+ },
169
+ "afterCG36": {
170
+ "measuredOn": "2026-08-06",
171
+ "note": "10,802 chars of source delivered in total, nothing truncated.",
172
+ "delivered": {
173
+ "src/pipeline/chain.ts": 9062,
174
+ "src/app/client.ts": 997,
175
+ "src/pipeline/types.ts": 743
176
+ },
177
+ "verdict": "ALL GATES PASS. The `RequestChain` cluster is now SHRUNK into the remainder by the same whole-member rule the first cluster already used, instead of being dropped whole, so chain.ts delivers 9,062 chars including `proceed`, `advance` and `writeAndRead` — the whole in-file flow the question asks for."
178
+ }
179
+ },
180
+ {
181
+ "id": "dense-header",
182
+ "title": "CG-36 — the Session.swift shape density-first ranking exists for",
183
+ "kind": "fixture",
184
+ "path": "__tests__/fixtures/dense-header-ts",
185
+ "query": "how does perform create a URLRequest and start the task",
186
+ "rationale": [
187
+ "The counterweight to `starved-cluster`, and the reason CG-36 did NOT touch cluster",
188
+ "ranking. `session.ts` opens with a 60-line property list and a run of trivial",
189
+ "accessors — many adjacent, individually worthless declarations, i.e. the densest",
190
+ "block in the file — while `perform`, `didCreateURLRequest` and `task`, which the",
191
+ "query names, sit ~200 lines below it.",
192
+ "",
193
+ "Ranked on density alone the header block takes the file's whole budget and the",
194
+ "methods are buried; that is Alamofire's Session.swift, the case the",
195
+ "importance-then-density order was built for. Any future change to selection or",
196
+ "shrinking has to keep this passing as well as `starved-cluster` — they pull in",
197
+ "opposite directions, which is exactly why both are here."
198
+ ],
199
+ "groups": {
200
+ "answer": [
201
+ "src/net/**",
202
+ "src/core/request-builder.ts",
203
+ "src/core/task-factory.ts"
204
+ ],
205
+ "incidental": [
206
+ "src/core/queue.ts"
207
+ ]
208
+ },
209
+ "assert": {
210
+ "topFileGroup": "answer",
211
+ "answerShareOfSourceAtLeast": 0.8,
212
+ "spendShareAtLeast": {
213
+ "src/net/session.ts": 0.6
214
+ },
215
+ "$mustContainComment": "All three named symbols are deep in the file, past the dense header block. If density ever outranks importance again, these are the first thing to go.",
216
+ "mustContain": [
217
+ "async perform(url: string, method: string",
218
+ "didCreateURLRequest(request: URLRequest)",
219
+ "task(request: URLRequest, identifier: number)"
220
+ ]
221
+ },
222
+ "afterCG36": {
223
+ "measuredOn": "2026-08-06",
224
+ "note": "11,695 chars of source delivered, BYTE-IDENTICAL to the CG-24 epic tip (76ab1fe) — this fixture pins behaviour CG-36 deliberately left alone.",
225
+ "delivered": {
226
+ "src/net/session.ts": 9007,
227
+ "src/core/types.ts": 1957,
228
+ "src/core/task-factory.ts": 731
229
+ },
230
+ "verdict": "ALL GATES PASS, on the epic tip and on CG-36 alike. session.ts spends 9,007 of its 9,009 reservation and the response carries all three named methods from the bottom of the file. The dense header block is not what won the budget."
231
+ }
232
+ },
233
+ {
234
+ "id": "self-query",
235
+ "title": "This repo — incidental `explore`/`BUDGET` matches in the agent-eval scripts",
236
+ "kind": "self",
237
+ "path": ".",
238
+ "query": "how does explore allocate its output budget across files",
239
+ "rationale": [
240
+ "The same failure mode with no generated code in sight. `scripts/agent-eval/*.mjs`",
241
+ "mention `explore` and `BUDGET` incidentally — they are eval harnesses, not the",
242
+ "allocator — and they are small enough to ship WHOLE, while src/mcp/tools.ts (which",
243
+ "carries getExploreOutputBudget and the render loop, and scores 4x higher on every",
244
+ "signal) is large enough to be clipped at maxCharsPerFile. Allocation follows file",
245
+ "size, not relevance.",
246
+ "",
247
+ "Unlike payroll-go this fixture reads THIS repo's live index, so its exact numbers",
248
+ "move as the repo changes (indexed file count crossing 500 flips the budget tier).",
249
+ "The assertions are therefore relative — answer-vs-incidental, not fixed percentages."
250
+ ],
251
+ "groups": {
252
+ "answer": [
253
+ "src/mcp/**"
254
+ ],
255
+ "incidental": [
256
+ "scripts/**"
257
+ ]
258
+ },
259
+ "assert": {
260
+ "$answerShareComment": [
261
+ "Denominated in DELIVERED SOURCE, not in the whole envelope (CG-26). The",
262
+ "envelope-denominated form of this gate moved for reasons that have nothing",
263
+ "to do with allocation: it fell when the epilogue stopped being discarded,",
264
+ "and it fell again when a fifth ADMITTED file finally got paid its",
265
+ "reservation instead of being dropped by the ceiling. Both are the",
266
+ "improvements this epic exists to make, and a gate that reads them as",
267
+ "regressions is measuring the denominator. The fixture's own rationale",
268
+ "already says the assertions are relative, answer-vs-incidental, not fixed",
269
+ "percentages. 0.5 is unchanged; only what it is a share OF."
270
+ ],
271
+ "answerShareOfSourceAtLeast": 0.5,
272
+ "incidentalShareAtMost": 0.25,
273
+ "topFileGroup": "answer",
274
+ "mustDeliverBytes": [
275
+ "src/mcp/tools.ts"
276
+ ]
277
+ },
278
+ "baseline": {
279
+ "measuredOn": "2026-08-03",
280
+ "note": "493 files → small tier (18,000 budget); 27,518 chars allocated against it, cut to 19,749 by the 25,000 hard ceiling.",
281
+ "delivered": {
282
+ "scripts/agent-eval/offload-eval-hook.mjs": 0.25,
283
+ "scripts/agent-eval/offload-eval-metrics.mjs": 0.236,
284
+ "scripts/agent-eval/parse-session.mjs": 0.232,
285
+ "src/mcp/tools.ts": 0.185,
286
+ "scripts/agent-eval/offload-eval-cost.mjs": 0.0
287
+ },
288
+ "verdict": "The script corpus takes 71.8% of the delivered envelope (79.4% of what was allocated) against tools.ts's 18.5%, despite tools.ts scoring 46 vs 10, carrying 2.3x the graph mass and 3x the distinct term hits."
289
+ },
290
+ "afterCG10": {
291
+ "measuredOn": "2026-08-04",
292
+ "delivered": {
293
+ "src/resolution/memory-budget.ts": 0.512,
294
+ "src/mcp/tools.ts": 0.329
295
+ },
296
+ "verdict": "PASSES incidentalShareAtMost: every scripts/agent-eval/*.mjs file is gone (0.0%), which is CG-10's acceptance bar — their sole match was an unused file-scope `explore`/`BUDGET` constant, worth 0.08x weight, and the relative floor (8.2) then cut them. tools.ts ranks #1. STILL FAILING for CG-12: memory-budget.ts scores 18 to tools.ts's 41 yet takes 51.2% of the envelope to tools.ts's 32.9%, purely because it is small enough to ship whole while tools.ts is clipped at maxCharsPerFile. Allocation still follows file size, not relevance."
297
+ },
298
+ "afterCG12": {
299
+ "measuredOn": "2026-08-04",
300
+ "note": "18,134 delivered, nothing truncated. tools.ts scores 58 here (it grew by the allocator this task added), memory-budget.ts 18.",
301
+ "delivered": {
302
+ "src/mcp/tools.ts": 0.606,
303
+ "src/resolution/memory-budget.ts": 0.172,
304
+ "src/resolution/lru-cache.ts": 0.111
305
+ },
306
+ "verdict": "ALL GATES PASS. tools.ts takes 60.6% of the envelope, up from 18.5% at baseline and 32.9% after CG-10 — past the epic's >50% acceptance bar. The reversal is the whole point: memory-budget.ts no longer wins by being small enough to ship whole (it now clusters within its 3.1K reservation), and tools.ts is no longer clipped at maxCharsPerFile (11K reservation, ~3x the old flat cap). Exception to 'no previously-unclipped file becomes clipped': memory-budget.ts was unclipped-whole at 5,672 and is now clipped to its proportional share. That is the epic's own diagnosis of the bug, not a regression — it scored 18 against tools.ts's 58 and was taking the larger slice."
307
+ },
308
+ "afterCG30": {
309
+ "measuredOn": "2026-08-06",
310
+ "note": "23,688 delivered of 26,430 allocated, truncated at the 25,000 ceiling. Baseline (main) on the SAME index: 14,851 delivered of 25,221 allocated. tools.ts delivers 8,282 chars in BOTH arms — identical bytes; only the denominator moved.",
311
+ "delivered": {
312
+ "scripts/agent-eval/parse-run.mjs": 0.361,
313
+ "src/mcp/tools.ts": 0.35,
314
+ "src/mcp/explore-session-state.ts": 0.147,
315
+ "src/resolution/memory-budget.ts": 0.0
316
+ },
317
+ "verdict": "THREE GATES FAIL — and the cause is not the CG-30 bound. Allocation is unchanged between arms (parse-run.mjs 32.3% here vs 33.9% on main); what changed is that it now DELIVERS. On main its whole 8,548-char section was cut by the hard-ceiling truncation, so the incidental group scored 0.0% by luck, not by design, and the fixture passed on that. Bounding the oversize-member overshoot freed enough headroom that the response no longer truncates the same section away. Every file obeys the new bound on this repo (max ratio 1.40x of spendable, against the 1.5x ceiling). What the failure exposes is real and pre-existing: parse-run.mjs scores 18 against tools.ts's 58 yet is reserved a comparable slice — a low-scoring file taking a top-file share, which is epic CG-24's subject. Fix it there; do not tune the CG-30 bound to restore a pass that depended on truncation. SUPERSEDED by afterCG31 — the diagnosis above is wrong on one load-bearing point, see there."
318
+ },
319
+ "afterCG31": {
320
+ "measuredOn": "2026-08-06",
321
+ "note": "23,083 delivered of 23,080 allocated — inside the envelope, nothing truncated. Both arms measured on the SAME clean FULL REBUILD of this repo's index (CG-33: an incrementally-synced index diverges and shifts ranking). CG-30-only arm on that index: 23,692 delivered of 26,410 allocated, TRUNCATED.",
322
+ "delivered": {
323
+ "src/mcp/tools.ts": 0.359,
324
+ "scripts/agent-eval/parse-run.mjs": 0.187,
325
+ "src/mcp/explore-session-state.ts": 0.151,
326
+ "src/resolution/lru-cache.ts": 0.087
327
+ },
328
+ "verdict": "ALL FOUR GATES PASS. The afterCG30 verdict called parse-run.mjs over-RESERVED; it was not — its reservation is 4,314 in both arms. It was over-SPENDING: 8,548 chars, drawing on reservations belonging to files the render loop had not reached yet, which is the CG-31 defect. With the displacement guard it renders 4,314, tools.ts's identical 8,282 chars go from 35.0% to 35.9% of a response that no longer overruns, and lru-cache.ts (dropped as memory-budget.ts was on the CG-30 arm) delivers. Note what did NOT change: allocation. This fixture moved because the render loop stopped spending other files' bytes, not because anything was re-ranked."
329
+ },
330
+ "afterCG26": {
331
+ "measuredOn": "2026-08-06",
332
+ "note": "24,952 delivered of 24,949 allocated, nothing truncated — against the CG-31 tip's 23,083 on the SAME clean full rebuild of this repo's index. tools.ts delivers 8,282 chars in BOTH arms: identical bytes, unchanged reservation, unchanged rank. Total delivered SOURCE 21,228 against 18,105.",
333
+ "delivered": {
334
+ "src/mcp/tools.ts": 0.334,
335
+ "scripts/agent-eval/parse-run.mjs": 0.174,
336
+ "src/mcp/explore-session-state.ts": 0.141,
337
+ "src/resolution/memory-budget.ts": 0.126,
338
+ "src/resolution/lru-cache.ts": 0.081
339
+ },
340
+ "verdict": "ALL GATES PASS. The one that changed shape is answerShareAtLeast → answerShareOfSourceAtLeast: on the envelope denominator the answer group reads 47.5% here against 51.0% at the CG-31 tip, and neither number is about allocation. tools.ts's bytes are byte-identical between the arms; what moved is that the response now delivers a FIFTH admitted file (memory-budget.ts, rank 4, paid its full 3,123-char reservation — the CG-31 tip rendered it and then let the hard ceiling drop the whole section) and keeps epilogue prose it used to discard. Answer/incidental separation is unchanged and strong: tools.ts 33.4% against parse-run.mjs's 17.4%, incidental 17.4% (down from 18.7%), top delivered file still tools.ts. Measured in delivered source the answer group is 55.5%."
341
+ }
342
+ }
343
+ ]
344
+ }
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env bash
2
+ # Arm F (body-inlining trace + trace-first steering) across the same 6 repos as
3
+ # arms-matrix.sh, so F vs B isolates the trace-enrichment effect (same surface,
4
+ # old thin trace in B vs body-inlining trace here).
5
+ set -uo pipefail
6
+ H="$(cd "$(dirname "$0")" && pwd)"; RUNS="${RUNS:-2}"; C="${CORPUS:-/tmp/codegraph-corpus}"
7
+ ROWS=(
8
+ "$C/flutter-samples/add_to_app/books/flutter_module_books|How does the books UI build and what child widgets does it show?"
9
+ "$C/aspnet-realworld|How is creating an article handled? Trace the controller to the service."
10
+ "$C/spring-mall|How is a product-list request handled? Trace the controller to the service."
11
+ "$C/vapor-spi|How is a package-show request handled? Name the route and controller."
12
+ "$C/excalidraw|How does updating an element re-render the canvas on screen? Trace the flow."
13
+ "$C/spring-halo|How is publishing a post handled? Trace the controller to the service."
14
+ )
15
+ ARM="${ARM:-F}"
16
+ echo "### ARM $ARM START $(date) RUNS=$RUNS"
17
+ for row in "${ROWS[@]}"; do
18
+ repo="${row%%|*}"; q="${row#*|}"
19
+ for r in $(seq 1 "$RUNS"); do bash "$H/run-arms.sh" "$repo" "$q" "$ARM" "$r"; done
20
+ done
21
+ echo "### ARM $ARM COMPLETE $(date)"
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env bash
2
+ # Drive the tool-surface ablation across the chosen repos × arms (A–E).
3
+ # Arms A–D ask the canonical FLOW question; arm E asks a NON-flow survey
4
+ # question (the control probe — should degrade without explore+context).
5
+ # Output: /tmp/arms/<repo>/<arm>-r<n>.jsonl (parse with parse-arms.mjs).
6
+ set -uo pipefail
7
+ HARNESS="$(cd "$(dirname "$0")" && pwd)"
8
+ RUNS="${RUNS:-2}"
9
+ C="${CORPUS:-/tmp/codegraph-corpus}"
10
+ NFQ='What are the main modules/components of this codebase and what does each one do? Give an overview of how it is organized.'
11
+
12
+ # repo-path|flow-question (2 small, 2 medium, 2 large — spans the size range)
13
+ ROWS=(
14
+ "$C/flutter-samples/add_to_app/books/flutter_module_books|How does the books UI build and what child widgets does it show?"
15
+ "$C/aspnet-realworld|How is creating an article handled? Trace the controller to the service."
16
+ "$C/spring-mall|How is a product-list request handled? Trace the controller to the service."
17
+ "$C/vapor-spi|How is a package-show request handled? Name the route and controller."
18
+ "$C/excalidraw|How does updating an element re-render the canvas on screen? Trace the flow."
19
+ "$C/spring-halo|How is publishing a post handled? Trace the controller to the service."
20
+ )
21
+
22
+ echo "### ARMS MATRIX START $(date) RUNS=$RUNS"
23
+ for row in "${ROWS[@]}"; do
24
+ repo="${row%%|*}"; q="${row#*|}"
25
+ for arm in A B C D; do
26
+ for r in $(seq 1 "$RUNS"); do
27
+ bash "$HARNESS/run-arms.sh" "$repo" "$q" "$arm" "$r"
28
+ done
29
+ done
30
+ done
31
+ # E: non-flow control probe on two repos (must degrade without explore+context)
32
+ for repo in "$C/excalidraw" "$C/spring-mall"; do
33
+ for r in $(seq 1 "$RUNS"); do
34
+ bash "$HARNESS/run-arms.sh" "$repo" "$NFQ" E "$r"
35
+ done
36
+ done
37
+ echo "### ARMS MATRIX COMPLETE $(date)"