@mycodemap/mycodemap 1.9.0 → 2.7.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 (527) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/README.md +63 -978
  3. package/README.zh-CN.md +1096 -0
  4. package/dist/cli/commands/agent-metrics/human.d.ts +4 -0
  5. package/dist/cli/commands/agent-metrics/human.d.ts.map +1 -0
  6. package/dist/cli/commands/agent-metrics/human.js +134 -0
  7. package/dist/cli/commands/agent-metrics/human.js.map +1 -0
  8. package/dist/cli/commands/agent-metrics/index.d.ts +15 -0
  9. package/dist/cli/commands/agent-metrics/index.d.ts.map +1 -0
  10. package/dist/cli/commands/agent-metrics/index.js +116 -0
  11. package/dist/cli/commands/agent-metrics/index.js.map +1 -0
  12. package/dist/cli/commands/analyze-options.d.ts.map +1 -1
  13. package/dist/cli/commands/analyze-options.js +8 -0
  14. package/dist/cli/commands/analyze-options.js.map +1 -1
  15. package/dist/cli/commands/analyze.d.ts +3 -196
  16. package/dist/cli/commands/analyze.d.ts.map +1 -1
  17. package/dist/cli/commands/analyze.js +27 -1162
  18. package/dist/cli/commands/analyze.js.map +1 -1
  19. package/dist/cli/commands/benchmark.d.ts +8 -0
  20. package/dist/cli/commands/benchmark.d.ts.map +1 -0
  21. package/dist/cli/commands/benchmark.js +153 -0
  22. package/dist/cli/commands/benchmark.js.map +1 -0
  23. package/dist/cli/commands/complexity.d.ts.map +1 -1
  24. package/dist/cli/commands/complexity.js +62 -95
  25. package/dist/cli/commands/complexity.js.map +1 -1
  26. package/dist/cli/commands/deps.d.ts +3 -59
  27. package/dist/cli/commands/deps.d.ts.map +1 -1
  28. package/dist/cli/commands/deps.js +25 -331
  29. package/dist/cli/commands/deps.js.map +1 -1
  30. package/dist/cli/commands/doctor.d.ts +3 -0
  31. package/dist/cli/commands/doctor.d.ts.map +1 -0
  32. package/dist/cli/commands/doctor.js +34 -0
  33. package/dist/cli/commands/doctor.js.map +1 -0
  34. package/dist/cli/commands/env-contract.d.ts +3 -0
  35. package/dist/cli/commands/env-contract.d.ts.map +1 -0
  36. package/dist/cli/commands/env-contract.js +221 -0
  37. package/dist/cli/commands/env-contract.js.map +1 -0
  38. package/dist/cli/commands/generate.d.ts +19 -1
  39. package/dist/cli/commands/generate.d.ts.map +1 -1
  40. package/dist/cli/commands/generate.js +735 -89
  41. package/dist/cli/commands/generate.js.map +1 -1
  42. package/dist/cli/commands/impact.d.ts +4 -38
  43. package/dist/cli/commands/impact.d.ts.map +1 -1
  44. package/dist/cli/commands/impact.js +133 -375
  45. package/dist/cli/commands/impact.js.map +1 -1
  46. package/dist/cli/commands/init.d.ts +1 -0
  47. package/dist/cli/commands/init.d.ts.map +1 -1
  48. package/dist/cli/commands/init.js +61 -2
  49. package/dist/cli/commands/init.js.map +1 -1
  50. package/dist/cli/commands/preview.d.ts +3 -0
  51. package/dist/cli/commands/preview.d.ts.map +1 -0
  52. package/dist/cli/commands/preview.js +216 -0
  53. package/dist/cli/commands/preview.js.map +1 -0
  54. package/dist/cli/commands/query.d.ts +2 -20
  55. package/dist/cli/commands/query.d.ts.map +1 -1
  56. package/dist/cli/commands/query.js +23 -708
  57. package/dist/cli/commands/query.js.map +1 -1
  58. package/dist/cli/commands/watch-foreground.d.ts.map +1 -1
  59. package/dist/cli/commands/watch-foreground.js +5 -1
  60. package/dist/cli/commands/watch-foreground.js.map +1 -1
  61. package/dist/cli/config-loader.d.ts.map +1 -1
  62. package/dist/cli/config-loader.js +51 -13
  63. package/dist/cli/config-loader.js.map +1 -1
  64. package/dist/cli/doctor/check-agent.d.ts +3 -0
  65. package/dist/cli/doctor/check-agent.d.ts.map +1 -0
  66. package/dist/cli/doctor/check-agent.js +60 -0
  67. package/dist/cli/doctor/check-agent.js.map +1 -0
  68. package/dist/cli/doctor/check-env-contract.d.ts +3 -0
  69. package/dist/cli/doctor/check-env-contract.d.ts.map +1 -0
  70. package/dist/cli/doctor/check-env-contract.js +96 -0
  71. package/dist/cli/doctor/check-env-contract.js.map +1 -0
  72. package/dist/cli/doctor/check-ghost-commands.d.ts +3 -0
  73. package/dist/cli/doctor/check-ghost-commands.d.ts.map +1 -0
  74. package/dist/cli/doctor/check-ghost-commands.js +86 -0
  75. package/dist/cli/doctor/check-ghost-commands.js.map +1 -0
  76. package/dist/cli/doctor/check-native-deps.d.ts +3 -0
  77. package/dist/cli/doctor/check-native-deps.d.ts.map +1 -0
  78. package/dist/cli/doctor/check-native-deps.js +70 -0
  79. package/dist/cli/doctor/check-native-deps.js.map +1 -0
  80. package/dist/cli/doctor/check-workspace-drift.d.ts +3 -0
  81. package/dist/cli/doctor/check-workspace-drift.d.ts.map +1 -0
  82. package/dist/cli/doctor/check-workspace-drift.js +83 -0
  83. package/dist/cli/doctor/check-workspace-drift.js.map +1 -0
  84. package/dist/cli/doctor/formatter.d.ts +20 -0
  85. package/dist/cli/doctor/formatter.d.ts.map +1 -0
  86. package/dist/cli/doctor/formatter.js +91 -0
  87. package/dist/cli/doctor/formatter.js.map +1 -0
  88. package/dist/cli/doctor/index.d.ts +8 -0
  89. package/dist/cli/doctor/index.d.ts.map +1 -0
  90. package/dist/cli/doctor/index.js +9 -0
  91. package/dist/cli/doctor/index.js.map +1 -0
  92. package/dist/cli/doctor/orchestrator.d.ts +3 -0
  93. package/dist/cli/doctor/orchestrator.d.ts.map +1 -0
  94. package/dist/cli/doctor/orchestrator.js +40 -0
  95. package/dist/cli/doctor/orchestrator.js.map +1 -0
  96. package/dist/cli/doctor/types.d.ts +19 -0
  97. package/dist/cli/doctor/types.d.ts.map +1 -0
  98. package/dist/cli/doctor/types.js +4 -0
  99. package/dist/cli/doctor/types.js.map +1 -0
  100. package/dist/cli/env-contract/check.d.ts +18 -0
  101. package/dist/cli/env-contract/check.d.ts.map +1 -0
  102. package/dist/cli/env-contract/check.js +118 -0
  103. package/dist/cli/env-contract/check.js.map +1 -0
  104. package/dist/cli/env-contract/discovery.d.ts +12 -0
  105. package/dist/cli/env-contract/discovery.d.ts.map +1 -0
  106. package/dist/cli/env-contract/discovery.js +249 -0
  107. package/dist/cli/env-contract/discovery.js.map +1 -0
  108. package/dist/cli/env-contract/filters.d.ts +10 -0
  109. package/dist/cli/env-contract/filters.d.ts.map +1 -0
  110. package/dist/cli/env-contract/filters.js +23 -0
  111. package/dist/cli/env-contract/filters.js.map +1 -0
  112. package/dist/cli/env-contract/index.d.ts +6 -0
  113. package/dist/cli/env-contract/index.d.ts.map +1 -0
  114. package/dist/cli/env-contract/index.js +8 -0
  115. package/dist/cli/env-contract/index.js.map +1 -0
  116. package/dist/cli/env-contract/reminder-engine.d.ts +34 -0
  117. package/dist/cli/env-contract/reminder-engine.d.ts.map +1 -0
  118. package/dist/cli/env-contract/reminder-engine.js +51 -0
  119. package/dist/cli/env-contract/reminder-engine.js.map +1 -0
  120. package/dist/cli/env-contract/reminder-hook-runner.d.ts +45 -0
  121. package/dist/cli/env-contract/reminder-hook-runner.d.ts.map +1 -0
  122. package/dist/cli/env-contract/reminder-hook-runner.js +273 -0
  123. package/dist/cli/env-contract/reminder-hook-runner.js.map +1 -0
  124. package/dist/cli/env-contract/reminder-ledger.d.ts +11 -0
  125. package/dist/cli/env-contract/reminder-ledger.d.ts.map +1 -0
  126. package/dist/cli/env-contract/reminder-ledger.js +37 -0
  127. package/dist/cli/env-contract/reminder-ledger.js.map +1 -0
  128. package/dist/cli/env-contract/types.d.ts +48 -0
  129. package/dist/cli/env-contract/types.d.ts.map +1 -0
  130. package/dist/cli/env-contract/types.js +22 -0
  131. package/dist/cli/env-contract/types.js.map +1 -0
  132. package/dist/cli/env-contract/validation.d.ts +10 -0
  133. package/dist/cli/env-contract/validation.d.ts.map +1 -0
  134. package/dist/cli/env-contract/validation.js +116 -0
  135. package/dist/cli/env-contract/validation.js.map +1 -0
  136. package/dist/cli/first-run-guide.d.ts.map +1 -1
  137. package/dist/cli/first-run-guide.js +8 -3
  138. package/dist/cli/first-run-guide.js.map +1 -1
  139. package/dist/cli/index.js +94 -22
  140. package/dist/cli/index.js.map +1 -1
  141. package/dist/cli/init/assistant-plan.d.ts +14 -0
  142. package/dist/cli/init/assistant-plan.d.ts.map +1 -0
  143. package/dist/cli/init/assistant-plan.js +208 -0
  144. package/dist/cli/init/assistant-plan.js.map +1 -0
  145. package/dist/cli/init/detect.d.ts +28 -0
  146. package/dist/cli/init/detect.d.ts.map +1 -0
  147. package/dist/cli/init/detect.js +63 -0
  148. package/dist/cli/init/detect.js.map +1 -0
  149. package/dist/cli/init/env-contract-plan.d.ts +28 -0
  150. package/dist/cli/init/env-contract-plan.d.ts.map +1 -0
  151. package/dist/cli/init/env-contract-plan.js +184 -0
  152. package/dist/cli/init/env-contract-plan.js.map +1 -0
  153. package/dist/cli/init/manifest-extractors.d.ts +22 -0
  154. package/dist/cli/init/manifest-extractors.d.ts.map +1 -0
  155. package/dist/cli/init/manifest-extractors.js +185 -0
  156. package/dist/cli/init/manifest-extractors.js.map +1 -0
  157. package/dist/cli/init/profile-loader.d.ts +49 -0
  158. package/dist/cli/init/profile-loader.d.ts.map +1 -0
  159. package/dist/cli/init/profile-loader.js +107 -0
  160. package/dist/cli/init/profile-loader.js.map +1 -0
  161. package/dist/cli/init/profile-plan.d.ts +38 -0
  162. package/dist/cli/init/profile-plan.d.ts.map +1 -0
  163. package/dist/cli/init/profile-plan.js +120 -0
  164. package/dist/cli/init/profile-plan.js.map +1 -0
  165. package/dist/cli/init/profiles/generic.json +16 -0
  166. package/dist/cli/init/profiles/go.json +12 -0
  167. package/dist/cli/init/profiles/nodejs.json +16 -0
  168. package/dist/cli/init/profiles/python.json +17 -0
  169. package/dist/cli/init/profiles/rust.json +12 -0
  170. package/dist/cli/init/receipt.d.ts.map +1 -1
  171. package/dist/cli/init/receipt.js +107 -7
  172. package/dist/cli/init/receipt.js.map +1 -1
  173. package/dist/cli/init/reconciler.d.ts +10 -1
  174. package/dist/cli/init/reconciler.d.ts.map +1 -1
  175. package/dist/cli/init/reconciler.js +85 -15
  176. package/dist/cli/init/reconciler.js.map +1 -1
  177. package/dist/cli/interface-contract/commands/agent-metrics.d.ts +3 -0
  178. package/dist/cli/interface-contract/commands/agent-metrics.d.ts.map +1 -0
  179. package/dist/cli/interface-contract/commands/agent-metrics.js +217 -0
  180. package/dist/cli/interface-contract/commands/agent-metrics.js.map +1 -0
  181. package/dist/cli/interface-contract/commands/analyze.d.ts +3 -0
  182. package/dist/cli/interface-contract/commands/analyze.d.ts.map +1 -0
  183. package/dist/cli/interface-contract/commands/analyze.js +139 -0
  184. package/dist/cli/interface-contract/commands/analyze.js.map +1 -0
  185. package/dist/cli/interface-contract/commands/benchmark.d.ts +3 -0
  186. package/dist/cli/interface-contract/commands/benchmark.d.ts.map +1 -0
  187. package/dist/cli/interface-contract/commands/benchmark.js +108 -0
  188. package/dist/cli/interface-contract/commands/benchmark.js.map +1 -0
  189. package/dist/cli/interface-contract/commands/deps.d.ts +3 -0
  190. package/dist/cli/interface-contract/commands/deps.d.ts.map +1 -0
  191. package/dist/cli/interface-contract/commands/deps.js +130 -0
  192. package/dist/cli/interface-contract/commands/deps.js.map +1 -0
  193. package/dist/cli/interface-contract/commands/doctor.d.ts +3 -0
  194. package/dist/cli/interface-contract/commands/doctor.d.ts.map +1 -0
  195. package/dist/cli/interface-contract/commands/doctor.js +60 -0
  196. package/dist/cli/interface-contract/commands/doctor.js.map +1 -0
  197. package/dist/cli/interface-contract/commands/env-contract.d.ts +3 -0
  198. package/dist/cli/interface-contract/commands/env-contract.d.ts.map +1 -0
  199. package/dist/cli/interface-contract/commands/env-contract.js +168 -0
  200. package/dist/cli/interface-contract/commands/env-contract.js.map +1 -0
  201. package/dist/cli/interface-contract/commands/index.d.ts +12 -0
  202. package/dist/cli/interface-contract/commands/index.d.ts.map +1 -0
  203. package/dist/cli/interface-contract/commands/index.js +24 -0
  204. package/dist/cli/interface-contract/commands/index.js.map +1 -0
  205. package/dist/cli/interface-contract/commands/init.d.ts +3 -0
  206. package/dist/cli/interface-contract/commands/init.d.ts.map +1 -0
  207. package/dist/cli/interface-contract/commands/init.js +96 -0
  208. package/dist/cli/interface-contract/commands/init.js.map +1 -0
  209. package/dist/cli/interface-contract/commands/preview.d.ts +3 -0
  210. package/dist/cli/interface-contract/commands/preview.d.ts.map +1 -0
  211. package/dist/cli/interface-contract/commands/preview.js +118 -0
  212. package/dist/cli/interface-contract/commands/preview.js.map +1 -0
  213. package/dist/cli/interface-contract/commands/query.d.ts +3 -0
  214. package/dist/cli/interface-contract/commands/query.d.ts.map +1 -0
  215. package/dist/cli/interface-contract/commands/query.js +186 -0
  216. package/dist/cli/interface-contract/commands/query.js.map +1 -0
  217. package/dist/cli/interface-contract/index.d.ts +22 -0
  218. package/dist/cli/interface-contract/index.d.ts.map +1 -0
  219. package/dist/cli/interface-contract/index.js +41 -0
  220. package/dist/cli/interface-contract/index.js.map +1 -0
  221. package/dist/cli/interface-contract/schema.d.ts +30 -0
  222. package/dist/cli/interface-contract/schema.d.ts.map +1 -0
  223. package/dist/cli/interface-contract/schema.js +73 -0
  224. package/dist/cli/interface-contract/schema.js.map +1 -0
  225. package/dist/cli/interface-contract/types.d.ts +77 -0
  226. package/dist/cli/interface-contract/types.d.ts.map +1 -0
  227. package/dist/cli/interface-contract/types.js +4 -0
  228. package/dist/cli/interface-contract/types.js.map +1 -0
  229. package/dist/cli/output/apply-suggestion.d.ts +12 -0
  230. package/dist/cli/output/apply-suggestion.d.ts.map +1 -0
  231. package/dist/cli/output/apply-suggestion.js +29 -0
  232. package/dist/cli/output/apply-suggestion.js.map +1 -0
  233. package/dist/cli/output/error-codes.d.ts +24 -0
  234. package/dist/cli/output/error-codes.d.ts.map +1 -0
  235. package/dist/cli/output/error-codes.js +94 -0
  236. package/dist/cli/output/error-codes.js.map +1 -0
  237. package/dist/cli/output/errors.d.ts +14 -0
  238. package/dist/cli/output/errors.d.ts.map +1 -0
  239. package/dist/cli/output/errors.js +182 -0
  240. package/dist/cli/output/errors.js.map +1 -0
  241. package/dist/cli/output/index.d.ts +13 -0
  242. package/dist/cli/output/index.d.ts.map +1 -0
  243. package/dist/cli/output/index.js +11 -0
  244. package/dist/cli/output/index.js.map +1 -0
  245. package/dist/cli/output/mode.d.ts +12 -0
  246. package/dist/cli/output/mode.d.ts.map +1 -0
  247. package/dist/cli/output/mode.js +23 -0
  248. package/dist/cli/output/mode.js.map +1 -0
  249. package/dist/cli/output/progress.d.ts +9 -0
  250. package/dist/cli/output/progress.d.ts.map +1 -0
  251. package/dist/cli/output/progress.js +65 -0
  252. package/dist/cli/output/progress.js.map +1 -0
  253. package/dist/cli/output/render.d.ts +11 -0
  254. package/dist/cli/output/render.d.ts.map +1 -0
  255. package/dist/cli/output/render.js +18 -0
  256. package/dist/cli/output/render.js.map +1 -0
  257. package/dist/cli/output/types.d.ts +53 -0
  258. package/dist/cli/output/types.d.ts.map +1 -0
  259. package/dist/cli/output/types.js +14 -0
  260. package/dist/cli/output/types.js.map +1 -0
  261. package/dist/cli/output/wasm-fallback.d.ts +14 -0
  262. package/dist/cli/output/wasm-fallback.d.ts.map +1 -0
  263. package/dist/cli/output/wasm-fallback.js +92 -0
  264. package/dist/cli/output/wasm-fallback.js.map +1 -0
  265. package/dist/cli/preview/complexity-scanner.d.ts +21 -0
  266. package/dist/cli/preview/complexity-scanner.d.ts.map +1 -0
  267. package/dist/cli/preview/complexity-scanner.js +52 -0
  268. package/dist/cli/preview/complexity-scanner.js.map +1 -0
  269. package/dist/cli/preview/dependency-extractor.d.ts +38 -0
  270. package/dist/cli/preview/dependency-extractor.d.ts.map +1 -0
  271. package/dist/cli/preview/dependency-extractor.js +140 -0
  272. package/dist/cli/preview/dependency-extractor.js.map +1 -0
  273. package/dist/cli/preview/preview-renderer.d.ts +32 -0
  274. package/dist/cli/preview/preview-renderer.d.ts.map +1 -0
  275. package/dist/cli/preview/preview-renderer.js +54 -0
  276. package/dist/cli/preview/preview-renderer.js.map +1 -0
  277. package/dist/cli/storage-runtime.d.ts +7 -0
  278. package/dist/cli/storage-runtime.d.ts.map +1 -1
  279. package/dist/cli/storage-runtime.js +22 -0
  280. package/dist/cli/storage-runtime.js.map +1 -1
  281. package/dist/cli/tree-sitter-check.d.ts +6 -1
  282. package/dist/cli/tree-sitter-check.d.ts.map +1 -1
  283. package/dist/cli/tree-sitter-check.js +23 -1
  284. package/dist/cli/tree-sitter-check.js.map +1 -1
  285. package/dist/cli-new/index.js +1 -1
  286. package/dist/cli-new/index.js.map +1 -1
  287. package/dist/composition/parser-composition.d.ts +7 -0
  288. package/dist/composition/parser-composition.d.ts.map +1 -0
  289. package/dist/composition/parser-composition.js +15 -0
  290. package/dist/composition/parser-composition.js.map +1 -0
  291. package/dist/core/analyzer.d.ts.map +1 -1
  292. package/dist/core/analyzer.js +83 -67
  293. package/dist/core/analyzer.js.map +1 -1
  294. package/dist/core/ast-complexity-analyzer.d.ts +12 -6
  295. package/dist/core/ast-complexity-analyzer.d.ts.map +1 -1
  296. package/dist/core/ast-complexity-analyzer.js +368 -209
  297. package/dist/core/ast-complexity-analyzer.js.map +1 -1
  298. package/dist/core/file-discovery.d.ts +1 -1
  299. package/dist/core/file-discovery.d.ts.map +1 -1
  300. package/dist/core/file-discovery.js +3 -0
  301. package/dist/core/file-discovery.js.map +1 -1
  302. package/dist/core/global-index.d.ts +3 -1
  303. package/dist/core/global-index.d.ts.map +1 -1
  304. package/dist/core/global-index.js +69 -4
  305. package/dist/core/global-index.js.map +1 -1
  306. package/dist/domain/entities/CodeGraph.d.ts +3 -0
  307. package/dist/domain/entities/CodeGraph.d.ts.map +1 -1
  308. package/dist/domain/entities/CodeGraph.js +19 -2
  309. package/dist/domain/entities/CodeGraph.js.map +1 -1
  310. package/dist/domain/entities/Dependency.d.ts +5 -2
  311. package/dist/domain/entities/Dependency.d.ts.map +1 -1
  312. package/dist/domain/entities/Dependency.js +49 -3
  313. package/dist/domain/entities/Dependency.js.map +1 -1
  314. package/dist/domain/repositories/CodeGraphRepository.d.ts +5 -0
  315. package/dist/domain/repositories/CodeGraphRepository.d.ts.map +1 -1
  316. package/dist/domain/repositories/CodeGraphRepository.js.map +1 -1
  317. package/dist/execution/contract-tools/analyze.d.ts +205 -0
  318. package/dist/execution/contract-tools/analyze.d.ts.map +1 -0
  319. package/dist/execution/contract-tools/analyze.js +1215 -0
  320. package/dist/execution/contract-tools/analyze.js.map +1 -0
  321. package/dist/execution/contract-tools/deps.d.ts +62 -0
  322. package/dist/execution/contract-tools/deps.d.ts.map +1 -0
  323. package/dist/execution/contract-tools/deps.js +234 -0
  324. package/dist/execution/contract-tools/deps.js.map +1 -0
  325. package/dist/execution/contract-tools/index.d.ts +5 -0
  326. package/dist/execution/contract-tools/index.d.ts.map +1 -0
  327. package/dist/execution/contract-tools/index.js +7 -0
  328. package/dist/execution/contract-tools/index.js.map +1 -0
  329. package/dist/execution/contract-tools/query.d.ts +60 -0
  330. package/dist/execution/contract-tools/query.d.ts.map +1 -0
  331. package/dist/execution/contract-tools/query.js +532 -0
  332. package/dist/execution/contract-tools/query.js.map +1 -0
  333. package/dist/execution/contract-tools/types.d.ts +26 -0
  334. package/dist/execution/contract-tools/types.d.ts.map +1 -0
  335. package/dist/execution/contract-tools/types.js +32 -0
  336. package/dist/execution/contract-tools/types.js.map +1 -0
  337. package/dist/generator/index.d.ts.map +1 -1
  338. package/dist/generator/index.js +0 -3
  339. package/dist/generator/index.js.map +1 -1
  340. package/dist/infrastructure/parser/enhancers/TypeScriptTypeEnhancer.d.ts +12 -0
  341. package/dist/infrastructure/parser/enhancers/TypeScriptTypeEnhancer.d.ts.map +1 -0
  342. package/dist/infrastructure/parser/enhancers/TypeScriptTypeEnhancer.js +55 -0
  343. package/dist/infrastructure/parser/enhancers/TypeScriptTypeEnhancer.js.map +1 -0
  344. package/dist/infrastructure/parser/implementations/GoParser.d.ts +2 -1
  345. package/dist/infrastructure/parser/implementations/GoParser.d.ts.map +1 -1
  346. package/dist/infrastructure/parser/implementations/GoParser.js +13 -1
  347. package/dist/infrastructure/parser/implementations/GoParser.js.map +1 -1
  348. package/dist/infrastructure/parser/implementations/PythonTreeSitterParser.d.ts +114 -0
  349. package/dist/infrastructure/parser/implementations/PythonTreeSitterParser.d.ts.map +1 -0
  350. package/dist/infrastructure/parser/implementations/PythonTreeSitterParser.js +1022 -0
  351. package/dist/infrastructure/parser/implementations/PythonTreeSitterParser.js.map +1 -0
  352. package/dist/infrastructure/parser/implementations/TreeSitterParser.d.ts +78 -0
  353. package/dist/infrastructure/parser/implementations/TreeSitterParser.d.ts.map +1 -0
  354. package/dist/infrastructure/parser/implementations/TreeSitterParser.js +648 -0
  355. package/dist/infrastructure/parser/implementations/TreeSitterParser.js.map +1 -0
  356. package/dist/infrastructure/parser/implementations/TypeScriptParser.d.ts +3 -55
  357. package/dist/infrastructure/parser/implementations/TypeScriptParser.d.ts.map +1 -1
  358. package/dist/infrastructure/parser/implementations/TypeScriptParser.js +4 -411
  359. package/dist/infrastructure/parser/implementations/TypeScriptParser.js.map +1 -1
  360. package/dist/infrastructure/parser/index.d.ts +2 -0
  361. package/dist/infrastructure/parser/index.d.ts.map +1 -1
  362. package/dist/infrastructure/parser/index.js +9 -6
  363. package/dist/infrastructure/parser/index.js.map +1 -1
  364. package/dist/infrastructure/parser/interfaces/ParserBase.d.ts.map +1 -1
  365. package/dist/infrastructure/parser/interfaces/ParserBase.js +1 -0
  366. package/dist/infrastructure/parser/interfaces/ParserBase.js.map +1 -1
  367. package/dist/infrastructure/repositories/CodeGraphRepositoryImpl.d.ts +2 -0
  368. package/dist/infrastructure/repositories/CodeGraphRepositoryImpl.d.ts.map +1 -1
  369. package/dist/infrastructure/repositories/CodeGraphRepositoryImpl.js +4 -0
  370. package/dist/infrastructure/repositories/CodeGraphRepositoryImpl.js.map +1 -1
  371. package/dist/infrastructure/storage/StorageFactory.d.ts +5 -18
  372. package/dist/infrastructure/storage/StorageFactory.d.ts.map +1 -1
  373. package/dist/infrastructure/storage/StorageFactory.js +30 -98
  374. package/dist/infrastructure/storage/StorageFactory.js.map +1 -1
  375. package/dist/infrastructure/storage/adapters/SQLiteStorage.d.ts +13 -1
  376. package/dist/infrastructure/storage/adapters/SQLiteStorage.d.ts.map +1 -1
  377. package/dist/infrastructure/storage/adapters/SQLiteStorage.js +322 -76
  378. package/dist/infrastructure/storage/adapters/SQLiteStorage.js.map +1 -1
  379. package/dist/infrastructure/storage/adapters/sqlite-loader.d.ts +45 -0
  380. package/dist/infrastructure/storage/adapters/sqlite-loader.d.ts.map +1 -0
  381. package/dist/infrastructure/storage/adapters/sqlite-loader.js +266 -0
  382. package/dist/infrastructure/storage/adapters/sqlite-loader.js.map +1 -0
  383. package/dist/infrastructure/storage/community-helpers.d.ts +4 -0
  384. package/dist/infrastructure/storage/community-helpers.d.ts.map +1 -0
  385. package/dist/infrastructure/storage/community-helpers.js +392 -0
  386. package/dist/infrastructure/storage/community-helpers.js.map +1 -0
  387. package/dist/infrastructure/storage/graph-helpers.d.ts +22 -5
  388. package/dist/infrastructure/storage/graph-helpers.d.ts.map +1 -1
  389. package/dist/infrastructure/storage/graph-helpers.js +496 -91
  390. package/dist/infrastructure/storage/graph-helpers.js.map +1 -1
  391. package/dist/infrastructure/storage/index.d.ts +1 -1
  392. package/dist/infrastructure/storage/index.d.ts.map +1 -1
  393. package/dist/infrastructure/storage/index.js +1 -1
  394. package/dist/infrastructure/storage/index.js.map +1 -1
  395. package/dist/infrastructure/storage/interfaces/StorageBase.d.ts +2 -2
  396. package/dist/infrastructure/storage/interfaces/StorageBase.d.ts.map +1 -1
  397. package/dist/infrastructure/storage/interfaces/StorageBase.js.map +1 -1
  398. package/dist/infrastructure/storage/sqlite/GovernanceGraphCache.d.ts +2 -0
  399. package/dist/infrastructure/storage/sqlite/GovernanceGraphCache.d.ts.map +1 -1
  400. package/dist/infrastructure/storage/sqlite/GovernanceGraphCache.js +52 -12
  401. package/dist/infrastructure/storage/sqlite/GovernanceGraphCache.js.map +1 -1
  402. package/dist/infrastructure/storage/sqlite/schema.d.ts +2 -2
  403. package/dist/infrastructure/storage/sqlite/schema.d.ts.map +1 -1
  404. package/dist/infrastructure/storage/sqlite/schema.js +49 -1
  405. package/dist/infrastructure/storage/sqlite/schema.js.map +1 -1
  406. package/dist/interface/config/index.d.ts +5 -3
  407. package/dist/interface/config/index.d.ts.map +1 -1
  408. package/dist/interface/types/index.d.ts +37 -6
  409. package/dist/interface/types/index.d.ts.map +1 -1
  410. package/dist/interface/types/parser.d.ts +85 -0
  411. package/dist/interface/types/parser.d.ts.map +1 -1
  412. package/dist/interface/types/storage.d.ts +227 -10
  413. package/dist/interface/types/storage.d.ts.map +1 -1
  414. package/dist/orchestrator/agent-metrics-service.d.ts +126 -0
  415. package/dist/orchestrator/agent-metrics-service.d.ts.map +1 -0
  416. package/dist/orchestrator/agent-metrics-service.js +444 -0
  417. package/dist/orchestrator/agent-metrics-service.js.map +1 -0
  418. package/dist/orchestrator/types.d.ts +2 -0
  419. package/dist/orchestrator/types.d.ts.map +1 -1
  420. package/dist/orchestrator/types.js.map +1 -1
  421. package/dist/parser/enhancers/PythonTypeEnhancer.d.ts +26 -0
  422. package/dist/parser/enhancers/PythonTypeEnhancer.d.ts.map +1 -0
  423. package/dist/parser/enhancers/PythonTypeEnhancer.js +440 -0
  424. package/dist/parser/enhancers/PythonTypeEnhancer.js.map +1 -0
  425. package/dist/parser/implementations/smart-parser.d.ts.map +1 -1
  426. package/dist/parser/implementations/smart-parser.js +7 -69
  427. package/dist/parser/implementations/smart-parser.js.map +1 -1
  428. package/dist/parser/implementations/tree-sitter-loader.d.ts +18 -0
  429. package/dist/parser/implementations/tree-sitter-loader.d.ts.map +1 -0
  430. package/dist/parser/implementations/tree-sitter-loader.js +136 -0
  431. package/dist/parser/implementations/tree-sitter-loader.js.map +1 -0
  432. package/dist/parser/index.d.ts +5 -3
  433. package/dist/parser/index.d.ts.map +1 -1
  434. package/dist/parser/index.js +68 -6
  435. package/dist/parser/index.js.map +1 -1
  436. package/dist/parser/interfaces/IParser.d.ts +19 -6
  437. package/dist/parser/interfaces/IParser.d.ts.map +1 -1
  438. package/dist/parser/interfaces/IParser.js +2 -3
  439. package/dist/parser/interfaces/IParser.js.map +1 -1
  440. package/dist/server/handlers/AnalysisHandler.d.ts +13 -2
  441. package/dist/server/handlers/AnalysisHandler.d.ts.map +1 -1
  442. package/dist/server/handlers/AnalysisHandler.js +24 -0
  443. package/dist/server/handlers/AnalysisHandler.js.map +1 -1
  444. package/dist/server/handlers/QueryHandler.d.ts.map +1 -1
  445. package/dist/server/handlers/QueryHandler.js +11 -30
  446. package/dist/server/handlers/QueryHandler.js.map +1 -1
  447. package/dist/server/mcp/context-tool.d.ts +9 -0
  448. package/dist/server/mcp/context-tool.d.ts.map +1 -0
  449. package/dist/server/mcp/context-tool.js +257 -0
  450. package/dist/server/mcp/context-tool.js.map +1 -0
  451. package/dist/server/mcp/schema-adapter.d.ts +55 -0
  452. package/dist/server/mcp/schema-adapter.d.ts.map +1 -0
  453. package/dist/server/mcp/schema-adapter.js +409 -0
  454. package/dist/server/mcp/schema-adapter.js.map +1 -0
  455. package/dist/server/mcp/server.d.ts +3 -3
  456. package/dist/server/mcp/server.d.ts.map +1 -1
  457. package/dist/server/mcp/server.js +134 -20
  458. package/dist/server/mcp/server.js.map +1 -1
  459. package/dist/server/mcp/service.d.ts +6 -2
  460. package/dist/server/mcp/service.d.ts.map +1 -1
  461. package/dist/server/mcp/service.js +138 -36
  462. package/dist/server/mcp/service.js.map +1 -1
  463. package/dist/server/mcp/stdio-transport.d.ts +23 -0
  464. package/dist/server/mcp/stdio-transport.d.ts.map +1 -0
  465. package/dist/server/mcp/stdio-transport.js +101 -0
  466. package/dist/server/mcp/stdio-transport.js.map +1 -0
  467. package/dist/server/mcp/types.d.ts +133 -8
  468. package/dist/server/mcp/types.d.ts.map +1 -1
  469. package/dist/server/routes/api.d.ts.map +1 -1
  470. package/dist/server/routes/api.js +11 -2
  471. package/dist/server/routes/api.js.map +1 -1
  472. package/docs/AI_ASSISTANT_SETUP.md +281 -12
  473. package/docs/API.md +170 -0
  474. package/docs/CONFIGURATION.md +141 -0
  475. package/docs/DEVELOPMENT.md +96 -0
  476. package/docs/GETTING-STARTED.md +114 -0
  477. package/docs/README.md +40 -1
  478. package/docs/SETUP_GUIDE.md +60 -14
  479. package/docs/TESTING.md +81 -0
  480. package/docs/ai-guide/COMMANDS.md +68 -10
  481. package/docs/ai-guide/INTEGRATION.md +77 -10
  482. package/docs/ai-guide/OUTPUT.md +345 -9
  483. package/docs/ai-guide/PROMPTS.md +2 -2
  484. package/docs/ai-guide/QUICKSTART.md +28 -1
  485. package/docs/ai-guide/README.md +2 -2
  486. package/docs/archive/ideation/2026-04-15-executable-architecture-constitution-ideation-archive.md +70 -0
  487. package/docs/archive/ideation/2026-04-20-mycodemap-init-enhancements-ideation-archive.md +109 -0
  488. package/docs/archive/ideation/2026-04-22-rules-entry-docs-optimization-consolidated-ideation-archive.md +54 -0
  489. package/docs/backlog.md +232 -144
  490. package/docs/brainstorms/2026-05-10-agent-effectiveness-validation-requirements.md +112 -0
  491. package/docs/generated/phase-58/subagent-evidence/claude-hook-example.json +15 -0
  492. package/docs/generated/phase-58/subagent-evidence/claude-session.md +146 -0
  493. package/docs/generated/phase-58/subagent-evidence/claude-subagent.json +28 -0
  494. package/docs/generated/phase-58/subagent-evidence/codex-agent-example.toml +19 -0
  495. package/docs/generated/phase-58/subagent-evidence/codex-session.md +150 -0
  496. package/docs/generated/phase-58/subagent-evidence/codex-subagent.json +20 -0
  497. package/docs/generated/phase-58/subagent-evidence/negative-no-retrieval.json +12 -0
  498. package/docs/generated/phase-58/subagent-evidence/verification-manifest.json +19 -0
  499. package/docs/ideation/2026-04-15-executable-architecture-constitution-ideation.md +10 -22
  500. package/docs/ideation/2026-04-20-mycodemap-init-enhancements-ideation.md +15 -60
  501. package/docs/ideation/2026-04-22-rules-entry-docs-optimization-consolidated-ideation.md +47 -52
  502. package/docs/ideation/2026-04-29-ux-install-agent-experience-ideation.md +256 -0
  503. package/docs/ideation/2026-05-02-subagent-environment-contract-injection-ideation.md +183 -0
  504. package/docs/ideation/2026-05-04-subagent-hooks-deep-dive-ideation.md +133 -0
  505. package/docs/ideation/2026-05-10-agent-effectiveness-validation-ideation.md +219 -0
  506. package/docs/plans/2026-04-30-install-guide-and-repo-analyzer-design.md +394 -0
  507. package/docs/rules/README.md +1 -0
  508. package/docs/rules/architecture-guardrails.md +2 -1
  509. package/docs/rules/engineering-with-codex-openai.md +1 -1
  510. package/docs/rules/harness.md +106 -0
  511. package/docs/rules/pre-release-checklist.md +28 -0
  512. package/docs/rules/testing.md +51 -0
  513. package/examples/claude/skills/mycodemap-repo-analyzer/SKILL.md +294 -0
  514. package/examples/claude/skills/mycodemap-repo-analyzer/references/analysis-guide.md +166 -0
  515. package/examples/claude/skills/mycodemap-repo-analyzer/references/module-analysis-guide.md +150 -0
  516. package/package.json +12 -4
  517. package/scripts/copy-build-assets.mjs +23 -0
  518. package/scripts/hooks/templates/pre-commit +33 -2
  519. package/scripts/sync-analyze-docs.js +2 -2
  520. package/scripts/tests/test_rule_control_workflow.py +15 -1
  521. package/scripts/validate-docs.js +113 -16
  522. package/scripts/verify-subagent-env-contract.mjs +279 -0
  523. package/dist/parser/implementations/tree-sitter-parser.d.ts +0 -57
  524. package/dist/parser/implementations/tree-sitter-parser.d.ts.map +0 -1
  525. package/dist/parser/implementations/tree-sitter-parser.js +0 -375
  526. package/dist/parser/implementations/tree-sitter-parser.js.map +0 -1
  527. package/docs/references/tmp.md +0 -527
@@ -5,8 +5,9 @@
5
5
  // ============================================
6
6
  import { mkdir } from 'node:fs/promises';
7
7
  import { dirname, join } from 'node:path';
8
+ import { Dependency as DomainDependency } from '../../../domain/entities/Dependency.js';
8
9
  import { StorageBase, StorageError } from '../interfaces/StorageBase.js';
9
- import { calculateImpactInGraph, cloneCodeGraph, createEmptyCodeGraph, deserializeCodeGraphSnapshot, detectCyclesInGraph, getProjectStatisticsFromGraph, serializeCodeGraphSnapshot, upsertModuleInGraph, } from '../graph-helpers.js';
10
+ import { calculateImpactInGraph, calculateSymbolImpactInGraph, cloneCodeGraph, createEmptyCodeGraph, deserializeCodeGraphSnapshot, detectCyclesInGraph, getProjectStatisticsFromGraph, serializeCodeGraphSnapshot, upsertModuleInGraph, } from '../graph-helpers.js';
10
11
  import { CURRENT_SQLITE_SCHEMA_VERSION, SQLITE_GOVERNANCE_SCHEMA_SQL, SQLITE_SCHEMA_VERSION_UPSERT_SQL, } from '../sqlite/schema.js';
11
12
  import { GovernanceGraphCache, readGovernanceGraphFromSQLite, } from '../sqlite/GovernanceGraphCache.js';
12
13
  import { DEFAULT_GOVERNANCE_GRAPH_PERF_THRESHOLDS, } from '../sqlite/perf-thresholds.js';
@@ -14,9 +15,16 @@ const GRAPH_STATUS_METADATA_KEY = 'graph_status';
14
15
  const FAILED_FILE_COUNT_METADATA_KEY = 'failed_file_count';
15
16
  const PARSE_FAILURE_FILES_METADATA_KEY = 'parse_failure_files_json';
16
17
  const LAST_GRAPH_SYNC_AT_METADATA_KEY = 'last_graph_sync_at';
18
+ const LAST_REFRESH_METADATA_KEY = 'last_refresh_summary_json';
19
+ const VALID_DEPENDENCY_CONFIDENCE = new Set([
20
+ 'EXTRACTED',
21
+ 'INFERRED',
22
+ 'AMBIGUOUS',
23
+ ]);
24
+ const SQLITE_REBUILD_REQUIRED_MESSAGE = 'Graph schema is outdated. Run `mycodemap generate` to rebuild the SQLite graph.';
25
+ import { getLastSQLiteLoadDiagnostics, loadSQLite, } from './sqlite-loader.js';
17
26
  async function loadSQLiteModule() {
18
- const sqliteModule = await import('better-sqlite3');
19
- return sqliteModule.default;
27
+ return loadSQLite();
20
28
  }
21
29
  function toStringValue(value, fallback = '') {
22
30
  return typeof value === 'string' ? value : fallback;
@@ -55,6 +63,54 @@ function normalizeParseFailureFiles(value) {
55
63
  }
56
64
  return parsedValue.filter((item) => typeof item === 'string');
57
65
  }
66
+ function deduplicateDependenciesForStorage(dependencies, symbolIds) {
67
+ const seen = new Set();
68
+ const deduped = [];
69
+ for (const dependency of dependencies) {
70
+ const sourceEntityType = resolveEntityType(dependency.sourceEntityType, dependency.sourceId, symbolIds);
71
+ const targetEntityType = resolveEntityType(dependency.targetEntityType, dependency.targetId, symbolIds);
72
+ const key = DomainDependency.createKey(dependency.sourceId, dependency.targetId, dependency.type, sourceEntityType, targetEntityType, dependency.filePath);
73
+ if (seen.has(key)) {
74
+ continue;
75
+ }
76
+ seen.add(key);
77
+ deduped.push({
78
+ ...dependency,
79
+ sourceEntityType,
80
+ targetEntityType,
81
+ });
82
+ }
83
+ return deduped;
84
+ }
85
+ function buildModuleReferenceById(modules) {
86
+ return new Map(modules.map(module => [
87
+ module.id,
88
+ DomainDependency.createModuleReference(module.path),
89
+ ]));
90
+ }
91
+ function buildSymbolReferenceById(symbols, moduleReferenceById) {
92
+ return new Map(symbols.map(symbol => {
93
+ const symbolFilePath = moduleReferenceById.get(symbol.moduleId) ?? symbol.location.file;
94
+ return [
95
+ symbol.id,
96
+ DomainDependency.createSymbolReference(symbolFilePath, symbol.name, symbol.location.line, symbol.location.column),
97
+ ];
98
+ }));
99
+ }
100
+ function resolveDependencyReference(entityId, entityType, moduleReferenceById, symbolReferenceById) {
101
+ const stableReference = entityType === 'symbol'
102
+ ? symbolReferenceById.get(entityId)
103
+ : moduleReferenceById.get(entityId);
104
+ return stableReference ?? entityId;
105
+ }
106
+ function normalizeDependencyIdsForStorage(dependencies, modules, symbols) {
107
+ const moduleReferenceById = buildModuleReferenceById(modules);
108
+ const symbolReferenceById = buildSymbolReferenceById(symbols, moduleReferenceById);
109
+ return dependencies.map((dependency) => ({
110
+ ...dependency,
111
+ id: DomainDependency.createCanonicalId(resolveDependencyReference(dependency.sourceId, dependency.sourceEntityType ?? 'module', moduleReferenceById, symbolReferenceById), resolveDependencyReference(dependency.targetId, dependency.targetEntityType ?? 'module', moduleReferenceById, symbolReferenceById), dependency.type, dependency.sourceEntityType ?? 'module', dependency.targetEntityType ?? 'module', dependency.filePath),
112
+ }));
113
+ }
58
114
  function readGraphIntegrityMetadata(database) {
59
115
  const metadataRows = database.prepare(`
60
116
  SELECT key, value
@@ -81,9 +137,9 @@ function readGraphMetadata(database) {
81
137
  .prepare(`
82
138
  SELECT key, value
83
139
  FROM metadata
84
- WHERE key IN (?, ?, ?, ?)
140
+ WHERE key IN (?, ?, ?, ?, ?)
85
141
  `)
86
- .all(GRAPH_STATUS_METADATA_KEY, FAILED_FILE_COUNT_METADATA_KEY, PARSE_FAILURE_FILES_METADATA_KEY, LAST_GRAPH_SYNC_AT_METADATA_KEY);
142
+ .all(GRAPH_STATUS_METADATA_KEY, FAILED_FILE_COUNT_METADATA_KEY, PARSE_FAILURE_FILES_METADATA_KEY, LAST_GRAPH_SYNC_AT_METADATA_KEY, LAST_REFRESH_METADATA_KEY);
87
143
  const metadataMap = new Map(metadataRows.map(row => [toStringValue(row.key), row.value]));
88
144
  const parseFailureFiles = normalizeParseFailureFiles(metadataMap.get(PARSE_FAILURE_FILES_METADATA_KEY));
89
145
  const moduleCount = toNumberValue(countsRow?.module_count);
@@ -98,13 +154,31 @@ function readGraphMetadata(database) {
98
154
  parseFailureFiles,
99
155
  moduleCount,
100
156
  symbolCount,
157
+ lastRefresh: parseRefreshSummary(metadataMap.get(LAST_REFRESH_METADATA_KEY)),
101
158
  };
102
159
  }
160
+ function parseRefreshSummary(value) {
161
+ const raw = toStringValue(value);
162
+ if (!raw) {
163
+ return undefined;
164
+ }
165
+ try {
166
+ return JSON.parse(raw);
167
+ }
168
+ catch {
169
+ return undefined;
170
+ }
171
+ }
103
172
  function createHistorySnapshotId(recordedAt) {
104
173
  const compactTimestamp = recordedAt.replace(/[^0-9]/g, '');
105
174
  const entropy = Math.random().toString(16).slice(2, 10);
106
175
  return `history-${compactTimestamp}-${entropy}`;
107
176
  }
177
+ function createAgentMetricsRunId(recordedAt) {
178
+ const compactTimestamp = recordedAt.replace(/[^0-9]/g, '');
179
+ const entropy = Math.random().toString(16).slice(2, 10);
180
+ return `agent-metrics-run-${compactTimestamp}-${entropy}`;
181
+ }
108
182
  function inferEntityType(entityId, symbolIds) {
109
183
  return symbolIds.has(entityId) ? 'symbol' : 'module';
110
184
  }
@@ -115,6 +189,17 @@ function hasColumn(database, tableName, columnName) {
115
189
  const rows = database.prepare(`PRAGMA table_info(${tableName})`).all();
116
190
  return rows.some((row) => toStringValue(row.name) === columnName);
117
191
  }
192
+ function hasTable(database, tableName) {
193
+ const row = database
194
+ .prepare(`
195
+ SELECT name
196
+ FROM sqlite_master
197
+ WHERE type = 'table' AND name = ?
198
+ LIMIT 1
199
+ `)
200
+ .get(tableName);
201
+ return Boolean(row?.name);
202
+ }
118
203
  function addColumnIfMissing(database, tableName, columnName, definition) {
119
204
  if (!hasColumn(database, tableName, columnName)) {
120
205
  database.exec(`ALTER TABLE ${tableName} ADD COLUMN ${definition}`);
@@ -134,6 +219,19 @@ function createUnavailableHistoryDiagnostics(reason) {
134
219
  requiresPrecompute: false,
135
220
  };
136
221
  }
222
+ function createGraphRebuildRequiredError(reason) {
223
+ return new StorageError(`${reason} ${SQLITE_REBUILD_REQUIRED_MESSAGE}`, 'GRAPH_SCHEMA_REBUILD_REQUIRED');
224
+ }
225
+ function normalizeDependencyConfidence(value) {
226
+ if (value === null || value === undefined || toStringValue(value) === '') {
227
+ return undefined;
228
+ }
229
+ const confidence = toStringValue(value);
230
+ if (VALID_DEPENDENCY_CONFIDENCE.has(confidence)) {
231
+ return confidence;
232
+ }
233
+ throw new StorageError(`Invalid dependency confidence "${confidence}". Run \`mycodemap generate\` to rebuild the SQLite graph.`, 'GRAPH_INVALID_DEPENDENCY_CONFIDENCE');
234
+ }
137
235
  function createUnavailableSymbolHistoryResult(query, reason) {
138
236
  return {
139
237
  query,
@@ -176,6 +274,9 @@ export class SQLiteStorage extends StorageBase {
176
274
  this.storageConfig = config;
177
275
  this.runtimeOptions = runtimeOptions;
178
276
  }
277
+ static getLastLoadDiagnostics() {
278
+ return getLastSQLiteLoadDiagnostics();
279
+ }
179
280
  async doInitialize() {
180
281
  if (!this.projectPath) {
181
282
  throw new StorageError('Project path not set', 'PROJECT_PATH_NOT_SET');
@@ -189,12 +290,15 @@ export class SQLiteStorage extends StorageBase {
189
290
  this.database = new Database(databasePath);
190
291
  this.database.pragma?.('journal_mode = WAL');
191
292
  this.database.pragma?.('foreign_keys = ON');
293
+ this.assertSchemaCompatibility(this.database);
192
294
  this.database.exec(SQLITE_GOVERNANCE_SCHEMA_SQL);
193
295
  this.ensureSchemaColumns(this.database);
296
+ this.assertProjectionParity(this.database);
194
297
  this.database
195
298
  .prepare(SQLITE_SCHEMA_VERSION_UPSERT_SQL)
196
299
  .run('schema_version', CURRENT_SQLITE_SCHEMA_VERSION);
197
300
  this.backfillLegacySnapshotIfNeeded(this.database);
301
+ this.backfillCanonicalDependencyIdsIfNeeded(this.database);
198
302
  this.refreshGovernanceGraphCache(this.database);
199
303
  }
200
304
  catch (error) {
@@ -221,6 +325,8 @@ export class SQLiteStorage extends StorageBase {
221
325
  async deleteProject() {
222
326
  const database = this.getDatabase();
223
327
  this.runInTransaction(database, () => {
328
+ database.prepare('DELETE FROM agent_metrics').run();
329
+ database.prepare('DELETE FROM agent_metrics_runs').run();
224
330
  database.prepare('DELETE FROM history_relations').run();
225
331
  database.prepare('DELETE FROM history_snapshots').run();
226
332
  database.prepare('DELETE FROM dependencies').run();
@@ -354,69 +460,7 @@ export class SQLiteStorage extends StorageBase {
354
460
  return calculateImpactInGraph(this.readGovernanceGraphForAnalysis(this.getDatabase()), moduleId, depth);
355
461
  }
356
462
  async calculateSymbolImpact(symbolId, depth, limit) {
357
- const database = this.getDatabase();
358
- const rootSymbol = await this.findSymbolById(symbolId);
359
- if (!rootSymbol) {
360
- throw new StorageError(`Symbol ${symbolId} not found`, 'SYMBOL_NOT_FOUND');
361
- }
362
- const selectCallers = database.prepare(`
363
- SELECT s.id, s.module_id, s.name, s.kind, s.signature, s.file_path, s.line, s.column_number, s.end_line, s.end_column, s.visibility
364
- FROM dependencies d
365
- INNER JOIN symbols s ON s.id = d.source_id
366
- WHERE d.target_id = ?
367
- AND d.dependency_type = 'call'
368
- ORDER BY d.id, s.id
369
- `);
370
- const affectedSymbols = [];
371
- const visited = new Set([symbolId]);
372
- const queue = [{
373
- id: symbolId,
374
- level: 0,
375
- path: [symbolId],
376
- }];
377
- let truncated = false;
378
- while (queue.length > 0) {
379
- const current = queue.shift();
380
- if (!current) {
381
- continue;
382
- }
383
- if (current.level >= depth) {
384
- continue;
385
- }
386
- const callerRows = selectCallers.all(current.id);
387
- for (const row of callerRows) {
388
- if (affectedSymbols.length >= limit) {
389
- truncated = true;
390
- queue.length = 0;
391
- break;
392
- }
393
- const callerId = toStringValue(row.id);
394
- if (visited.has(callerId)) {
395
- continue;
396
- }
397
- visited.add(callerId);
398
- const callerSymbol = this.mapSymbolRow(row);
399
- const nextLevel = current.level + 1;
400
- const nextPath = [...current.path, callerId];
401
- affectedSymbols.push({
402
- symbol: callerSymbol,
403
- depth: nextLevel,
404
- path: nextPath,
405
- });
406
- queue.push({
407
- id: callerId,
408
- level: nextLevel,
409
- path: nextPath,
410
- });
411
- }
412
- }
413
- return {
414
- rootSymbol,
415
- affectedSymbols,
416
- depth,
417
- limit,
418
- truncated,
419
- };
463
+ return calculateSymbolImpactInGraph(await this.loadCodeGraph(), symbolId, depth, limit);
420
464
  }
421
465
  async getStatistics() {
422
466
  const database = this.getDatabase();
@@ -595,6 +639,96 @@ export class SQLiteStorage extends StorageBase {
595
639
  diagnostics: metadata.diagnostics,
596
640
  };
597
641
  }
642
+ async saveAgentMetricsRun(payload) {
643
+ const database = this.getDatabase();
644
+ const recordedAt = payload.recordedAt ?? new Date().toISOString();
645
+ const runId = payload.id ?? createAgentMetricsRunId(recordedAt);
646
+ const projectId = toStringValue(database.prepare('SELECT id FROM projects LIMIT 1').get()?.id, 'agent-metrics-project');
647
+ const insertRun = database.prepare(`
648
+ INSERT INTO agent_metrics_runs (
649
+ id, project_id, recorded_at, sample_set_version, estimator_version, detail_count, metadata_json
650
+ )
651
+ VALUES (?, ?, ?, ?, ?, ?, ?)
652
+ `);
653
+ const insertDetail = database.prepare(`
654
+ INSERT INTO agent_metrics (
655
+ id, run_id, query_type, command_slug, response_size_bytes, raw_char_count,
656
+ estimated_input_tokens, estimated_output_tokens, estimated_total_tokens,
657
+ execution_time_ms, metadata_json
658
+ )
659
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
660
+ `);
661
+ this.runInTransaction(database, () => {
662
+ insertRun.run(runId, projectId, recordedAt, payload.sampleSetVersion, payload.estimatorVersion, payload.items.length, payload.metadata ? JSON.stringify(payload.metadata) : null);
663
+ payload.items.forEach((item, index) => {
664
+ insertDetail.run(item.id ?? `${runId}:${index + 1}`, runId, item.queryType, item.commandSlug, item.responseSizeBytes, item.rawCharCount, item.estimatedInputTokens, item.estimatedOutputTokens, item.estimatedTotalTokens, item.executionTimeMs ?? null, item.metadata ? JSON.stringify(item.metadata) : null);
665
+ });
666
+ });
667
+ return {
668
+ id: runId,
669
+ projectId,
670
+ recordedAt,
671
+ sampleSetVersion: payload.sampleSetVersion,
672
+ estimatorVersion: payload.estimatorVersion,
673
+ detailCount: payload.items.length,
674
+ metadata: payload.metadata ?? null,
675
+ };
676
+ }
677
+ async loadLatestAgentMetricsRun() {
678
+ const row = this.getDatabase()
679
+ .prepare(`
680
+ SELECT id, project_id, recorded_at, sample_set_version, estimator_version, detail_count, metadata_json
681
+ FROM agent_metrics_runs
682
+ ORDER BY recorded_at DESC, id DESC
683
+ LIMIT 1
684
+ `)
685
+ .get();
686
+ return row ? this.mapAgentMetricsRunRow(row) : null;
687
+ }
688
+ async listRecentAgentMetricsRuns(limit) {
689
+ const normalizedLimit = Math.max(0, Math.floor(limit));
690
+ if (normalizedLimit === 0) {
691
+ return [];
692
+ }
693
+ const rows = this.getDatabase()
694
+ .prepare(`
695
+ SELECT id, project_id, recorded_at, sample_set_version, estimator_version, detail_count, metadata_json
696
+ FROM agent_metrics_runs
697
+ ORDER BY recorded_at DESC, id DESC
698
+ LIMIT ?
699
+ `)
700
+ .all(normalizedLimit);
701
+ return rows.map((row) => this.mapAgentMetricsRunRow(row));
702
+ }
703
+ async listAgentMetricsByRun(runId) {
704
+ const rows = this.getDatabase()
705
+ .prepare(`
706
+ SELECT id, run_id, query_type, command_slug, response_size_bytes, raw_char_count,
707
+ estimated_input_tokens, estimated_output_tokens, estimated_total_tokens,
708
+ execution_time_ms, metadata_json
709
+ FROM agent_metrics
710
+ WHERE run_id = ?
711
+ ORDER BY id
712
+ `)
713
+ .all(runId);
714
+ return rows.map((row) => this.mapAgentMetricsDetailRow(row));
715
+ }
716
+ async listAgentMetricsHistoryByQueryType(queryType) {
717
+ const rows = this.getDatabase()
718
+ .prepare(`
719
+ SELECT agent_metrics.id, agent_metrics.run_id, agent_metrics.query_type, agent_metrics.command_slug,
720
+ agent_metrics.response_size_bytes, agent_metrics.raw_char_count,
721
+ agent_metrics.estimated_input_tokens, agent_metrics.estimated_output_tokens,
722
+ agent_metrics.estimated_total_tokens, agent_metrics.execution_time_ms,
723
+ agent_metrics.metadata_json
724
+ FROM agent_metrics
725
+ INNER JOIN agent_metrics_runs ON agent_metrics_runs.id = agent_metrics.run_id
726
+ WHERE agent_metrics.query_type = ?
727
+ ORDER BY agent_metrics_runs.recorded_at DESC, agent_metrics_runs.id DESC, agent_metrics.id ASC
728
+ `)
729
+ .all(queryType);
730
+ return rows.map((row) => this.mapAgentMetricsDetailRow(row));
731
+ }
598
732
  getGovernanceGraphRuntimeStats() {
599
733
  return this.governanceGraphCache?.getStats() ?? {
600
734
  cacheMode: 'sqlite-direct',
@@ -612,6 +746,47 @@ export class SQLiteStorage extends StorageBase {
612
746
  addColumnIfMissing(database, 'dependencies', 'line', 'line INTEGER');
613
747
  addColumnIfMissing(database, 'dependencies', 'confidence', 'confidence TEXT');
614
748
  }
749
+ assertSchemaCompatibility(database) {
750
+ if (!hasTable(database, 'metadata')) {
751
+ return;
752
+ }
753
+ const schemaVersion = toStringValue(database.prepare('SELECT value FROM metadata WHERE key = ? LIMIT 1').get('schema_version')?.value);
754
+ const projectCount = hasTable(database, 'projects')
755
+ ? toNumberValue(database.prepare('SELECT COUNT(*) AS count FROM projects').get()?.count)
756
+ : 0;
757
+ const dependencyCount = hasTable(database, 'dependencies')
758
+ ? toNumberValue(database.prepare('SELECT COUNT(*) AS count FROM dependencies').get()?.count)
759
+ : 0;
760
+ const snapshotCount = hasTable(database, 'snapshots')
761
+ ? toNumberValue(database.prepare('SELECT COUNT(*) AS count FROM snapshots').get()?.count)
762
+ : 0;
763
+ const hasMaterializedGraph = projectCount > 0 || dependencyCount > 0;
764
+ if (!hasMaterializedGraph && (schemaVersion === '' || schemaVersion === 'bootstrap-v1') && snapshotCount > 0) {
765
+ return;
766
+ }
767
+ if (schemaVersion === '' && !hasMaterializedGraph) {
768
+ return;
769
+ }
770
+ if (schemaVersion !== CURRENT_SQLITE_SCHEMA_VERSION) {
771
+ throw createGraphRebuildRequiredError(`Found SQLite schema version "${schemaVersion || 'unknown'}" but expected "${CURRENT_SQLITE_SCHEMA_VERSION}".`);
772
+ }
773
+ if (dependencyCount > 0 && !hasTable(database, 'graph_edges')) {
774
+ throw createGraphRebuildRequiredError('Traversal projection table "graph_edges" is missing.');
775
+ }
776
+ }
777
+ assertProjectionParity(database) {
778
+ if (!hasTable(database, 'dependencies') || !hasTable(database, 'graph_edges')) {
779
+ return;
780
+ }
781
+ const dependencyCount = toNumberValue(database.prepare('SELECT COUNT(*) AS count FROM dependencies').get()?.count);
782
+ const projectionCount = toNumberValue(database.prepare('SELECT COUNT(*) AS count FROM graph_edges').get()?.count);
783
+ if (dependencyCount === 0 && projectionCount === 0) {
784
+ return;
785
+ }
786
+ if (dependencyCount !== projectionCount) {
787
+ throw createGraphRebuildRequiredError(`Traversal projection drift detected (${projectionCount}/${dependencyCount} rows).`);
788
+ }
789
+ }
615
790
  backfillLegacySnapshotIfNeeded(database) {
616
791
  const hasCurrentProject = toNumberValue(database.prepare('SELECT COUNT(*) AS count FROM projects').get()?.count) > 0;
617
792
  if (hasCurrentProject) {
@@ -636,6 +811,23 @@ export class SQLiteStorage extends StorageBase {
636
811
  .prepare(SQLITE_SCHEMA_VERSION_UPSERT_SQL)
637
812
  .run('legacy_snapshot_backfilled_at', recordedAt);
638
813
  }
814
+ backfillCanonicalDependencyIdsIfNeeded(database) {
815
+ const dependencyCount = toNumberValue(database.prepare('SELECT COUNT(*) AS count FROM dependencies').get()?.count);
816
+ if (dependencyCount === 0) {
817
+ return;
818
+ }
819
+ const currentGraph = this.readCodeGraph(database);
820
+ const normalizedGraph = this.normalizeGraph(currentGraph);
821
+ const requiresRewrite = currentGraph.dependencies.some((dependency, index) => (dependency.id !== normalizedGraph.dependencies[index]?.id));
822
+ if (!requiresRewrite) {
823
+ return;
824
+ }
825
+ const recordedAt = new Date().toISOString();
826
+ this.replaceCurrentGraph(database, currentGraph, 'edge-id-normalization-backfill', recordedAt);
827
+ database
828
+ .prepare(SQLITE_SCHEMA_VERSION_UPSERT_SQL)
829
+ .run('edge_id_normalized_at', recordedAt);
830
+ }
639
831
  replaceCurrentGraph(database, graph, historySource, recordedAt = new Date().toISOString()) {
640
832
  const normalizedGraph = this.normalizeGraph(graph);
641
833
  const symbolIds = new Set(normalizedGraph.symbols.map(symbol => symbol.id));
@@ -661,6 +853,12 @@ export class SQLiteStorage extends StorageBase {
661
853
  id, source_id, source_entity_type, target_id, target_entity_type, dependency_type, file_path, line, confidence
662
854
  )
663
855
  VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
856
+ `);
857
+ const insertGraphEdge = database.prepare(`
858
+ INSERT INTO graph_edges (
859
+ dependency_id, source_id, source_entity_type, target_id, target_entity_type, dependency_type, confidence, file_path, line
860
+ )
861
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
664
862
  `);
665
863
  const insertSnapshotMirror = database.prepare(`
666
864
  INSERT INTO snapshots (id, project_id, graph_json, updated_at)
@@ -681,6 +879,7 @@ export class SQLiteStorage extends StorageBase {
681
879
  const snapshotId = createHistorySnapshotId(recordedAt);
682
880
  this.runInTransaction(database, () => {
683
881
  database.prepare('DELETE FROM dependencies').run();
882
+ database.prepare('DELETE FROM graph_edges').run();
684
883
  database.prepare('DELETE FROM symbols').run();
685
884
  database.prepare('DELETE FROM modules').run();
686
885
  database.prepare('DELETE FROM projects').run();
@@ -695,7 +894,9 @@ export class SQLiteStorage extends StorageBase {
695
894
  for (const dependency of normalizedGraph.dependencies) {
696
895
  const sourceEntityType = resolveEntityType(dependency.sourceEntityType, dependency.sourceId, symbolIds);
697
896
  const targetEntityType = resolveEntityType(dependency.targetEntityType, dependency.targetId, symbolIds);
698
- insertDependency.run(dependency.id, dependency.sourceId, sourceEntityType, dependency.targetId, targetEntityType, dependency.type, dependency.filePath ?? null, dependency.line ?? null, dependency.confidence ?? null);
897
+ const confidence = normalizeDependencyConfidence(dependency.confidence);
898
+ insertDependency.run(dependency.id, dependency.sourceId, sourceEntityType, dependency.targetId, targetEntityType, dependency.type, dependency.filePath ?? null, dependency.line ?? null, confidence ?? null);
899
+ insertGraphEdge.run(dependency.id, dependency.sourceId, sourceEntityType, dependency.targetId, targetEntityType, dependency.type, confidence ?? 'EXTRACTED', dependency.filePath ?? null, dependency.line ?? null);
699
900
  }
700
901
  insertSnapshotMirror.run('codemap-snapshot', normalizedGraph.project.id, serializeCodeGraphSnapshot(normalizedGraph), recordedAt);
701
902
  insertHistorySnapshot.run(snapshotId, normalizedGraph.project.id, recordedAt, historySource, normalizedGraph.modules.length, normalizedGraph.symbols.length, normalizedGraph.dependencies.length);
@@ -715,10 +916,11 @@ export class SQLiteStorage extends StorageBase {
715
916
  for (const dependency of normalizedGraph.dependencies) {
716
917
  const sourceEntityType = resolveEntityType(dependency.sourceEntityType, dependency.sourceId, symbolIds);
717
918
  const targetEntityType = resolveEntityType(dependency.targetEntityType, dependency.targetId, symbolIds);
919
+ const confidence = normalizeDependencyConfidence(dependency.confidence);
718
920
  insertHistoryRelation.run(`${snapshotId}:dependency:${dependency.id}`, snapshotId, 'dependency_snapshot', dependency.sourceId, sourceEntityType, dependency.targetId, targetEntityType, recordedAt, JSON.stringify({
719
921
  dependencyId: dependency.id,
720
922
  dependencyType: dependency.type,
721
- confidence: dependency.confidence ?? null,
923
+ confidence: confidence ?? null,
722
924
  filePath: dependency.filePath ?? null,
723
925
  line: dependency.line ?? null,
724
926
  }));
@@ -727,11 +929,24 @@ export class SQLiteStorage extends StorageBase {
727
929
  upsertMetadata.run(FAILED_FILE_COUNT_METADATA_KEY, String(normalizedGraph.failedFileCount ?? 0));
728
930
  upsertMetadata.run(PARSE_FAILURE_FILES_METADATA_KEY, JSON.stringify(normalizedGraph.parseFailureFiles ?? []));
729
931
  upsertMetadata.run(LAST_GRAPH_SYNC_AT_METADATA_KEY, recordedAt);
932
+ upsertMetadata.run('schema_version', CURRENT_SQLITE_SCHEMA_VERSION);
933
+ upsertMetadata.run(LAST_REFRESH_METADATA_KEY, normalizedGraph.lastRefresh ? JSON.stringify(normalizedGraph.lastRefresh) : '');
730
934
  });
935
+ this.assertProjectionParity(database);
731
936
  this.refreshGovernanceGraphCache(database);
732
937
  }
733
938
  normalizeGraph(graph) {
734
939
  const projectRootPath = graph.project.rootPath || this.projectPath || '';
940
+ const symbols = graph.symbols.map(symbol => ({
941
+ ...symbol,
942
+ location: { ...symbol.location },
943
+ }));
944
+ const symbolIds = new Set(symbols.map(symbol => symbol.id));
945
+ const dependencies = deduplicateDependenciesForStorage(graph.dependencies.map(dependency => ({
946
+ ...dependency,
947
+ confidence: normalizeDependencyConfidence(dependency.confidence),
948
+ })), symbolIds);
949
+ const canonicalDependencies = normalizeDependencyIdsForStorage(dependencies, graph.modules, symbols);
735
950
  return {
736
951
  project: {
737
952
  ...graph.project,
@@ -743,17 +958,17 @@ export class SQLiteStorage extends StorageBase {
743
958
  ...module,
744
959
  stats: { ...module.stats },
745
960
  })),
746
- symbols: graph.symbols.map(symbol => ({
747
- ...symbol,
748
- location: { ...symbol.location },
749
- })),
750
- dependencies: graph.dependencies.map(dependency => ({ ...dependency })),
961
+ symbols,
962
+ dependencies: canonicalDependencies,
751
963
  graphStatus: graph.graphStatus ?? 'complete',
752
964
  failedFileCount: graph.failedFileCount ?? 0,
753
965
  parseFailureFiles: [...(graph.parseFailureFiles ?? [])],
966
+ lastRefresh: graph.lastRefresh,
754
967
  };
755
968
  }
756
969
  readCodeGraph(database) {
970
+ this.assertSchemaCompatibility(database);
971
+ this.assertProjectionParity(database);
757
972
  const projectRow = database
758
973
  .prepare(`
759
974
  SELECT id, name, root_path, created_at, updated_at
@@ -803,6 +1018,7 @@ export class SQLiteStorage extends StorageBase {
803
1018
  graphStatus: graphIntegrity.graphStatus,
804
1019
  failedFileCount: graphIntegrity.failedFileCount,
805
1020
  parseFailureFiles: graphIntegrity.parseFailureFiles,
1021
+ lastRefresh: readGraphMetadata(database).lastRefresh,
806
1022
  };
807
1023
  }
808
1024
  mapModuleRow(row) {
@@ -846,7 +1062,33 @@ export class SQLiteStorage extends StorageBase {
846
1062
  type: toStringValue(row.dependency_type),
847
1063
  filePath: toStringValue(row.file_path) || undefined,
848
1064
  line: toOptionalNumberValue(row.line),
849
- confidence: toStringValue(row.confidence) === '' ? undefined : toStringValue(row.confidence),
1065
+ confidence: normalizeDependencyConfidence(row.confidence),
1066
+ };
1067
+ }
1068
+ mapAgentMetricsRunRow(row) {
1069
+ return {
1070
+ id: toStringValue(row.id),
1071
+ projectId: toStringValue(row.project_id),
1072
+ recordedAt: toStringValue(row.recorded_at),
1073
+ sampleSetVersion: toStringValue(row.sample_set_version),
1074
+ estimatorVersion: toStringValue(row.estimator_version),
1075
+ detailCount: toNumberValue(row.detail_count),
1076
+ metadata: parseJsonValue(row.metadata_json),
1077
+ };
1078
+ }
1079
+ mapAgentMetricsDetailRow(row) {
1080
+ return {
1081
+ id: toStringValue(row.id),
1082
+ runId: toStringValue(row.run_id),
1083
+ queryType: toStringValue(row.query_type),
1084
+ commandSlug: toStringValue(row.command_slug),
1085
+ responseSizeBytes: toNumberValue(row.response_size_bytes),
1086
+ rawCharCount: toNumberValue(row.raw_char_count),
1087
+ estimatedInputTokens: toNumberValue(row.estimated_input_tokens),
1088
+ estimatedOutputTokens: toNumberValue(row.estimated_output_tokens),
1089
+ estimatedTotalTokens: toNumberValue(row.estimated_total_tokens),
1090
+ executionTimeMs: toOptionalNumberValue(row.execution_time_ms),
1091
+ metadata: parseJsonValue(row.metadata_json),
850
1092
  };
851
1093
  }
852
1094
  runInTransaction(database, callback) {
@@ -868,9 +1110,13 @@ export class SQLiteStorage extends StorageBase {
868
1110
  return this.database;
869
1111
  }
870
1112
  readGovernanceGraphForAnalysis(database) {
1113
+ this.assertSchemaCompatibility(database);
1114
+ this.assertProjectionParity(database);
871
1115
  return readGovernanceGraphFromSQLite(database, this.projectPath ?? '');
872
1116
  }
873
1117
  refreshGovernanceGraphCache(database) {
1118
+ this.assertSchemaCompatibility(database);
1119
+ this.assertProjectionParity(database);
874
1120
  const cache = new GovernanceGraphCache(database, this.projectPath ?? '', this.runtimeOptions.governanceGraphThresholds ?? DEFAULT_GOVERNANCE_GRAPH_PERF_THRESHOLDS);
875
1121
  cache.hydrate();
876
1122
  this.governanceGraphCache = cache;