@documentation-robotics/cli 0.1.13 → 0.3.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 (351) hide show
  1. package/README.md +74 -2
  2. package/dist/analysis/relationship-classifier.js +2 -9
  3. package/dist/analysis/relationship-classifier.js.map +2 -2
  4. package/dist/analyzers/call-graph-utils.js +2 -2
  5. package/dist/analyzers/call-graph-utils.js.map +2 -2
  6. package/dist/analyzers/cards/build.js +171 -0
  7. package/dist/analyzers/cards/build.js.map +7 -0
  8. package/dist/analyzers/cards/classify.js +42 -0
  9. package/dist/analyzers/cards/classify.js.map +7 -0
  10. package/dist/analyzers/cards/edge-index.js +44 -0
  11. package/dist/analyzers/cards/edge-index.js.map +7 -0
  12. package/dist/analyzers/cards/facts.js +46 -0
  13. package/dist/analyzers/cards/facts.js.map +7 -0
  14. package/dist/analyzers/cards/graph.js +42 -0
  15. package/dist/analyzers/cards/graph.js.map +7 -0
  16. package/dist/analyzers/cards/index.js +8 -0
  17. package/dist/analyzers/cards/index.js.map +7 -0
  18. package/dist/analyzers/cards/tier0.js +18 -0
  19. package/dist/analyzers/cards/tier0.js.map +7 -0
  20. package/dist/analyzers/cards/types.js +1 -0
  21. package/dist/analyzers/cards/types.js.map +7 -0
  22. package/dist/analyzers/cbm-analyzer.js +195 -171
  23. package/dist/analyzers/cbm-analyzer.js.map +2 -2
  24. package/dist/analyzers/cbm-responses.js +336 -0
  25. package/dist/analyzers/cbm-responses.js.map +7 -0
  26. package/dist/analyzers/edge-relationships.js +45 -0
  27. package/dist/analyzers/edge-relationships.js.map +7 -0
  28. package/dist/analyzers/mapping-loader.js +9 -0
  29. package/dist/analyzers/mapping-loader.js.map +2 -2
  30. package/dist/analyzers/tier0-rules.js +153 -0
  31. package/dist/analyzers/tier0-rules.js.map +7 -0
  32. package/dist/analyzers/types.js.map +1 -1
  33. package/dist/analyzers/verify-engine.js +22 -19
  34. package/dist/analyzers/verify-engine.js.map +2 -2
  35. package/dist/audit/relationships/ai/prompts.js +10 -10
  36. package/dist/audit/relationships/ai/prompts.js.map +2 -2
  37. package/dist/audit/relationships/analysis/layer-templates.js +52 -52
  38. package/dist/audit/relationships/analysis/layer-templates.js.map +1 -1
  39. package/dist/cli.js +112 -28
  40. package/dist/cli.js.map +3 -3
  41. package/dist/coding-agents/agents/claude-code.js +3 -1
  42. package/dist/coding-agents/agents/claude-code.js.map +2 -2
  43. package/dist/coding-agents/claude-code-client.js +2 -1
  44. package/dist/coding-agents/claude-code-client.js.map +2 -2
  45. package/dist/coding-agents/copilot-client.js +17 -12
  46. package/dist/coding-agents/copilot-client.js.map +2 -2
  47. package/dist/coding-agents/default-permissions.js +152 -0
  48. package/dist/coding-agents/default-permissions.js.map +7 -0
  49. package/dist/coding-agents/drbot-mcp.js +167 -0
  50. package/dist/coding-agents/drbot-mcp.js.map +7 -0
  51. package/dist/commands/add.js +12 -7
  52. package/dist/commands/add.js.map +2 -2
  53. package/dist/commands/analyzer.js +134 -23
  54. package/dist/commands/analyzer.js.map +2 -2
  55. package/dist/commands/audit.js +6 -6
  56. package/dist/commands/audit.js.map +2 -2
  57. package/dist/commands/changeset-verify.js +55 -0
  58. package/dist/commands/changeset-verify.js.map +7 -0
  59. package/dist/commands/changeset.js +261 -147
  60. package/dist/commands/changeset.js.map +2 -2
  61. package/dist/commands/delete.js +52 -19
  62. package/dist/commands/delete.js.map +3 -3
  63. package/dist/commands/element.js +3 -2
  64. package/dist/commands/element.js.map +2 -2
  65. package/dist/commands/farm.js +773 -0
  66. package/dist/commands/farm.js.map +7 -0
  67. package/dist/commands/init.js +11 -1
  68. package/dist/commands/init.js.map +2 -2
  69. package/dist/commands/mcp.js +122 -0
  70. package/dist/commands/mcp.js.map +7 -0
  71. package/dist/commands/relationship.js +251 -47
  72. package/dist/commands/relationship.js.map +2 -2
  73. package/dist/commands/reports.js +1 -1
  74. package/dist/commands/reports.js.map +2 -2
  75. package/dist/commands/update.js +56 -24
  76. package/dist/commands/update.js.map +2 -2
  77. package/dist/commands/upgrade.js +99 -11
  78. package/dist/commands/upgrade.js.map +3 -3
  79. package/dist/commands/validate.js +41 -3
  80. package/dist/commands/validate.js.map +2 -2
  81. package/dist/commands/version.js +2 -2
  82. package/dist/commands/version.js.map +2 -2
  83. package/dist/commands/visualize.js +4 -3
  84. package/dist/commands/visualize.js.map +2 -2
  85. package/dist/config.js +83 -0
  86. package/dist/config.js.map +7 -0
  87. package/dist/core/annotation-store.js +138 -0
  88. package/dist/core/annotation-store.js.map +7 -0
  89. package/dist/core/catalog-migration.js +33 -0
  90. package/dist/core/catalog-migration.js.map +7 -0
  91. package/dist/core/changeset-analysis.js +421 -0
  92. package/dist/core/changeset-analysis.js.map +7 -0
  93. package/dist/core/changeset-base-index.js +153 -0
  94. package/dist/core/changeset-base-index.js.map +7 -0
  95. package/dist/core/changeset-brief-delta.js +102 -0
  96. package/dist/core/changeset-brief-delta.js.map +7 -0
  97. package/dist/core/changeset-graph.js +281 -0
  98. package/dist/core/changeset-graph.js.map +7 -0
  99. package/dist/core/changeset-only-guard.js +32 -0
  100. package/dist/core/changeset-only-guard.js.map +7 -0
  101. package/dist/core/changeset-summary.js +68 -0
  102. package/dist/core/changeset-summary.js.map +7 -0
  103. package/dist/core/changeset-validator.js +66 -20
  104. package/dist/core/changeset-validator.js.map +2 -2
  105. package/dist/core/changeset-verify.js +518 -0
  106. package/dist/core/changeset-verify.js.map +7 -0
  107. package/dist/core/changeset.js +56 -9
  108. package/dist/core/changeset.js.map +2 -2
  109. package/dist/core/element-type-migration.js +145 -0
  110. package/dist/core/element-type-migration.js.map +7 -0
  111. package/dist/core/farm-manifest.js +140 -0
  112. package/dist/core/farm-manifest.js.map +7 -0
  113. package/dist/core/farm-sync-engine.js +346 -0
  114. package/dist/core/farm-sync-engine.js.map +7 -0
  115. package/dist/core/farm-sync-state.js +167 -0
  116. package/dist/core/farm-sync-state.js.map +7 -0
  117. package/dist/core/manifest.js +6 -3
  118. package/dist/core/manifest.js.map +2 -2
  119. package/dist/core/migration-registry.js +84 -1
  120. package/dist/core/migration-registry.js.map +2 -2
  121. package/dist/core/model-upgrade.js +102 -0
  122. package/dist/core/model-upgrade.js.map +7 -0
  123. package/dist/core/model.js +257 -44
  124. package/dist/core/model.js.map +3 -3
  125. package/dist/core/mutation-handler.js +71 -6
  126. package/dist/core/mutation-handler.js.map +2 -2
  127. package/dist/core/relationship-migration-table.js +6639 -0
  128. package/dist/core/relationship-migration-table.js.map +7 -0
  129. package/dist/core/relationship-migration.js +272 -0
  130. package/dist/core/relationship-migration.js.map +7 -0
  131. package/dist/core/relationship-prune.js +49 -0
  132. package/dist/core/relationship-prune.js.map +7 -0
  133. package/dist/core/relationship-staging.js +68 -0
  134. package/dist/core/relationship-staging.js.map +7 -0
  135. package/dist/core/relationships.js +26 -4
  136. package/dist/core/relationships.js.map +2 -2
  137. package/dist/core/report-data-model.js +7 -13
  138. package/dist/core/report-data-model.js.map +2 -2
  139. package/dist/core/staged-changeset-storage.js +64 -17
  140. package/dist/core/staged-changeset-storage.js.map +2 -2
  141. package/dist/core/staged-source-reference.js +28 -0
  142. package/dist/core/staged-source-reference.js.map +7 -0
  143. package/dist/core/staging-area.js +83 -18
  144. package/dist/core/staging-area.js.map +2 -2
  145. package/dist/core/virtual-projection.js +14 -5
  146. package/dist/core/virtual-projection.js.map +2 -2
  147. package/dist/export/archimate-exporter.js +1 -0
  148. package/dist/export/archimate-exporter.js.map +2 -2
  149. package/dist/generated/compiled-validators.js +2 -2
  150. package/dist/generated/compiled-validators.js.map +2 -2
  151. package/dist/generated/layer-registry.js +16 -16
  152. package/dist/generated/layer-registry.js.map +2 -2
  153. package/dist/generated/node-types.js +186 -168
  154. package/dist/generated/node-types.js.map +2 -2
  155. package/dist/generated/relationship-index.js +2209 -7727
  156. package/dist/generated/relationship-index.js.map +2 -2
  157. package/dist/integrations/claude_code/agents/dr-architect.md +16 -3
  158. package/dist/integrations/claude_code/agents/dr-extractor.md +1 -1
  159. package/dist/integrations/claude_code/commands/dr-analyzer.md +565 -0
  160. package/dist/integrations/claude_code/commands/dr-map.md +13 -0
  161. package/dist/integrations/claude_code/commands/dr-plan.md +40 -0
  162. package/dist/integrations/claude_code/commands/dr-relate.md +106 -96
  163. package/dist/integrations/claude_code/commands/dr-verify.md +45 -2
  164. package/dist/integrations/claude_code/docs/END_TO_END_WALKTHROUGH.md +14 -0
  165. package/dist/integrations/claude_code/docs/MCP_SERVER.md +79 -0
  166. package/dist/integrations/claude_code/docs/QUICK_START.md +37 -8
  167. package/dist/integrations/claude_code/docs/README.md +52 -1
  168. package/dist/integrations/claude_code/skills/dr_01_motivation_layer/SKILL.md +93 -72
  169. package/dist/integrations/claude_code/skills/dr_02_business_layer/SKILL.md +163 -126
  170. package/dist/integrations/claude_code/skills/dr_03_product_layer/SKILL.md +161 -126
  171. package/dist/integrations/claude_code/skills/dr_04_security_layer/SKILL.md +153 -133
  172. package/dist/integrations/claude_code/skills/dr_05_application_layer/SKILL.md +129 -100
  173. package/dist/integrations/claude_code/skills/dr_06_technology_layer/SKILL.md +111 -94
  174. package/dist/integrations/claude_code/skills/dr_07_api_layer/SKILL.md +143 -157
  175. package/dist/integrations/claude_code/skills/dr_08_data_model_layer/SKILL.md +117 -33
  176. package/dist/integrations/claude_code/skills/dr_09_dataset_layer/SKILL.md +74 -25
  177. package/dist/integrations/claude_code/skills/dr_10_ux_layer/SKILL.md +88 -12
  178. package/dist/integrations/claude_code/skills/dr_11_navigation_layer/SKILL.md +83 -24
  179. package/dist/integrations/claude_code/skills/dr_12_apm_layer/SKILL.md +57 -12
  180. package/dist/integrations/claude_code/skills/dr_13_testing_layer/SKILL.md +92 -15
  181. package/dist/integrations/claude_code/skills/dr_change_planning/SKILL.md +119 -0
  182. package/dist/integrations/claude_code/skills/dr_changeset_reviewer/SKILL.md +3 -0
  183. package/dist/integrations/claude_code/skills/dr_engineering_guide/SKILL.md +1 -1
  184. package/dist/integrations/github_copilot/agents/dr-architect.md +1 -1
  185. package/dist/integrations/github_copilot/skills/dr_01_motivation_layer/SKILL.md +182 -102
  186. package/dist/integrations/github_copilot/skills/dr_02_business_layer/SKILL.md +266 -148
  187. package/dist/integrations/github_copilot/skills/dr_03_product_layer/SKILL.md +547 -86
  188. package/dist/integrations/github_copilot/skills/dr_04_security_layer/SKILL.md +164 -169
  189. package/dist/integrations/github_copilot/skills/dr_05_application_layer/SKILL.md +420 -150
  190. package/dist/integrations/github_copilot/skills/dr_06_technology_layer/SKILL.md +331 -138
  191. package/dist/integrations/github_copilot/skills/dr_07_api_layer/SKILL.md +265 -201
  192. package/dist/integrations/github_copilot/skills/dr_08_data_model_layer/SKILL.md +181 -58
  193. package/dist/integrations/github_copilot/skills/dr_09_dataset_layer/SKILL.md +209 -57
  194. package/dist/integrations/github_copilot/skills/dr_10_ux_layer/SKILL.md +277 -112
  195. package/dist/integrations/github_copilot/skills/dr_11_navigation_layer/SKILL.md +219 -70
  196. package/dist/integrations/github_copilot/skills/dr_12_apm_layer/SKILL.md +189 -105
  197. package/dist/integrations/github_copilot/skills/dr_13_testing_layer/SKILL.md +222 -102
  198. package/dist/integrations/github_copilot/skills/dr_change_planning/SKILL.md +119 -0
  199. package/dist/integrations/github_copilot/skills/dr_changeset_reviewer/SKILL.md +3 -0
  200. package/dist/integrations/hash-utils.js.map +2 -2
  201. package/dist/mcp/api-key-manager.js +111 -0
  202. package/dist/mcp/api-key-manager.js.map +7 -0
  203. package/dist/mcp/changeset-only.js +34 -0
  204. package/dist/mcp/changeset-only.js.map +7 -0
  205. package/dist/mcp/http-transport.js +176 -0
  206. package/dist/mcp/http-transport.js.map +7 -0
  207. package/dist/mcp/resource-registry.js +97 -0
  208. package/dist/mcp/resource-registry.js.map +7 -0
  209. package/dist/mcp/tool-registry.js +60 -0
  210. package/dist/mcp/tool-registry.js.map +7 -0
  211. package/dist/mcp/tools/annotation-create.js +39 -0
  212. package/dist/mcp/tools/annotation-create.js.map +7 -0
  213. package/dist/mcp/tools/annotation-delete.js +29 -0
  214. package/dist/mcp/tools/annotation-delete.js.map +7 -0
  215. package/dist/mcp/tools/annotation-get.js +29 -0
  216. package/dist/mcp/tools/annotation-get.js.map +7 -0
  217. package/dist/mcp/tools/annotation-list.js +24 -0
  218. package/dist/mcp/tools/annotation-list.js.map +7 -0
  219. package/dist/mcp/tools/annotation-reply.js +34 -0
  220. package/dist/mcp/tools/annotation-reply.js.map +7 -0
  221. package/dist/mcp/tools/annotation-shared.js +10 -0
  222. package/dist/mcp/tools/annotation-shared.js.map +7 -0
  223. package/dist/mcp/tools/annotation-update.js +39 -0
  224. package/dist/mcp/tools/annotation-update.js.map +7 -0
  225. package/dist/mcp/tools/changeset-analysis-tools.js +78 -0
  226. package/dist/mcp/tools/changeset-analysis-tools.js.map +7 -0
  227. package/dist/mcp/tools/changeset-editing.js +184 -0
  228. package/dist/mcp/tools/changeset-editing.js.map +7 -0
  229. package/dist/mcp/tools/changeset-lifecycle.js +83 -0
  230. package/dist/mcp/tools/changeset-lifecycle.js.map +7 -0
  231. package/dist/mcp/tools/changeset-list.js +33 -0
  232. package/dist/mcp/tools/changeset-list.js.map +7 -0
  233. package/dist/mcp/tools/changeset-shared.js +31 -0
  234. package/dist/mcp/tools/changeset-shared.js.map +7 -0
  235. package/dist/mcp/tools/changeset-show.js +55 -0
  236. package/dist/mcp/tools/changeset-show.js.map +7 -0
  237. package/dist/mcp/tools/changeset-verify.js +43 -0
  238. package/dist/mcp/tools/changeset-verify.js.map +7 -0
  239. package/dist/mcp/tools/chat-launch.js +50 -0
  240. package/dist/mcp/tools/chat-launch.js.map +7 -0
  241. package/dist/mcp/tools/chat-status.js +26 -0
  242. package/dist/mcp/tools/chat-status.js.map +7 -0
  243. package/dist/mcp/tools/index.js +65 -0
  244. package/dist/mcp/tools/index.js.map +7 -0
  245. package/dist/mcp/tools/model-add.js +107 -0
  246. package/dist/mcp/tools/model-add.js.map +7 -0
  247. package/dist/mcp/tools/model-delete.js +99 -0
  248. package/dist/mcp/tools/model-delete.js.map +7 -0
  249. package/dist/mcp/tools/model-export.js +72 -0
  250. package/dist/mcp/tools/model-export.js.map +7 -0
  251. package/dist/mcp/tools/model-info.js +51 -0
  252. package/dist/mcp/tools/model-info.js.map +7 -0
  253. package/dist/mcp/tools/model-list.js +53 -0
  254. package/dist/mcp/tools/model-list.js.map +7 -0
  255. package/dist/mcp/tools/model-reload.js +34 -0
  256. package/dist/mcp/tools/model-reload.js.map +7 -0
  257. package/dist/mcp/tools/model-search.js +102 -0
  258. package/dist/mcp/tools/model-search.js.map +7 -0
  259. package/dist/mcp/tools/model-show.js +68 -0
  260. package/dist/mcp/tools/model-show.js.map +7 -0
  261. package/dist/mcp/tools/model-stats.js +22 -0
  262. package/dist/mcp/tools/model-stats.js.map +7 -0
  263. package/dist/mcp/tools/model-trace.js +118 -0
  264. package/dist/mcp/tools/model-trace.js.map +7 -0
  265. package/dist/mcp/tools/model-update.js +121 -0
  266. package/dist/mcp/tools/model-update.js.map +7 -0
  267. package/dist/mcp/tools/model-validate.js +78 -0
  268. package/dist/mcp/tools/model-validate.js.map +7 -0
  269. package/dist/mcp/tools/relationship-tools.js +98 -0
  270. package/dist/mcp/tools/relationship-tools.js.map +7 -0
  271. package/dist/mcp/tools/shared.js +126 -0
  272. package/dist/mcp/tools/shared.js.map +7 -0
  273. package/dist/mcp/tools/spec-type.js +90 -0
  274. package/dist/mcp/tools/spec-type.js.map +7 -0
  275. package/dist/reports/model-layer-report-generator.js +5 -3
  276. package/dist/reports/model-layer-report-generator.js.map +2 -2
  277. package/dist/reports/model-readme-generator.js +116 -0
  278. package/dist/reports/model-readme-generator.js.map +7 -0
  279. package/dist/reports/model-report-data.js +37 -1
  280. package/dist/reports/model-report-data.js.map +2 -2
  281. package/dist/reports/model-report-orchestrator.js +29 -6
  282. package/dist/reports/model-report-orchestrator.js.map +2 -2
  283. package/dist/reports/model-report-utils.js +9 -0
  284. package/dist/reports/model-report-utils.js.map +7 -0
  285. package/dist/schemas/bundled/analyzers/cbm.json +1186 -68
  286. package/dist/schemas/bundled/analyzers/manifest.json +2 -2
  287. package/dist/schemas/bundled/api.json +1029 -1658
  288. package/dist/schemas/bundled/apm.json +499 -734
  289. package/dist/schemas/bundled/application.json +745 -370
  290. package/dist/schemas/bundled/base.json +3 -220
  291. package/dist/schemas/bundled/business.json +452 -366
  292. package/dist/schemas/bundled/data-model.json +403 -383
  293. package/dist/schemas/bundled/data-store.json +334 -558
  294. package/dist/schemas/bundled/manifest.json +18 -18
  295. package/dist/schemas/bundled/motivation.json +349 -368
  296. package/dist/schemas/bundled/navigation.json +415 -731
  297. package/dist/schemas/bundled/product.json +325 -159
  298. package/dist/schemas/bundled/security.json +864 -1232
  299. package/dist/schemas/bundled/technology.json +574 -703
  300. package/dist/schemas/bundled/testing.json +718 -1643
  301. package/dist/schemas/bundled/ux.json +739 -1352
  302. package/dist/server/schemas.js +8 -0
  303. package/dist/server/schemas.js.map +2 -2
  304. package/dist/server/server.js +234 -31
  305. package/dist/server/server.js.map +2 -2
  306. package/dist/server-entry.js +2 -1
  307. package/dist/server-entry.js.map +2 -2
  308. package/dist/telemetry/config.js +2 -40
  309. package/dist/telemetry/config.js.map +2 -2
  310. package/dist/telemetry/index.js +1 -1
  311. package/dist/types/index.js.map +2 -2
  312. package/dist/utils/ansi-suppressor.js +23 -0
  313. package/dist/utils/ansi-suppressor.js.map +7 -0
  314. package/dist/utils/attribute-patch.js +41 -0
  315. package/dist/utils/attribute-patch.js.map +7 -0
  316. package/dist/utils/color-utils.js +34 -0
  317. package/dist/utils/color-utils.js.map +7 -0
  318. package/dist/utils/element-reference-shape.js +15 -1
  319. package/dist/utils/element-reference-shape.js.map +3 -3
  320. package/dist/utils/error-hints.js +29 -0
  321. package/dist/utils/error-hints.js.map +7 -0
  322. package/dist/utils/errors.js +75 -10
  323. package/dist/utils/errors.js.map +2 -2
  324. package/dist/utils/globals.js +17 -1
  325. package/dist/utils/globals.js.map +2 -2
  326. package/dist/utils/project-paths.js +50 -3
  327. package/dist/utils/project-paths.js.map +2 -2
  328. package/dist/utils/reference-path-parser.js +49 -0
  329. package/dist/utils/reference-path-parser.js.map +7 -0
  330. package/dist/utils/source-reference.js +17 -10
  331. package/dist/utils/source-reference.js.map +2 -2
  332. package/dist/utils/spec-version.js +10 -2
  333. package/dist/utils/spec-version.js.map +2 -2
  334. package/dist/validators/composed-reference-validator.js +240 -0
  335. package/dist/validators/composed-reference-validator.js.map +7 -0
  336. package/dist/validators/reference-validator.js +57 -13
  337. package/dist/validators/reference-validator.js.map +3 -3
  338. package/dist/validators/relationship-schema-validator.js +33 -5
  339. package/dist/validators/relationship-schema-validator.js.map +3 -3
  340. package/dist/validators/schema-validator.js +27 -9
  341. package/dist/validators/schema-validator.js.map +2 -2
  342. package/dist/validators/types.js.map +1 -1
  343. package/dist/viewer/README.md +6 -6
  344. package/dist/viewer/assets/main-CxzcuU_o.js +84 -0
  345. package/dist/viewer/assets/main-j-7ULYpm.css +1 -0
  346. package/dist/viewer/index.html +2 -2
  347. package/dist/viewer/manifest.json +10 -10
  348. package/dist/viewer/version.json +1 -1
  349. package/package.json +7 -3
  350. package/dist/viewer/assets/main-B7AOQXXX.js +0 -81
  351. package/dist/viewer/assets/main-vdrFrG7q.css +0 -1
@@ -0,0 +1,46 @@
1
+ function decoratorName(text) {
2
+ return text.trim().replace(/^@/, "").replace(/\s*#.*$/, "").replace(/\(.*$/s, "").trim();
3
+ }
4
+ function parseList(v) {
5
+ if (Array.isArray(v))
6
+ return v.map(String);
7
+ if (typeof v != "string" || !v.trim())
8
+ return [];
9
+ try {
10
+ const p = JSON.parse(v);
11
+ return Array.isArray(p) ? p.map(String) : [];
12
+ } catch {
13
+ return [];
14
+ }
15
+ }
16
+ async function buildFactsIndex(graph) {
17
+ const decorators = /* @__PURE__ */ new Map();
18
+ for (const [qn, decs] of await graph.rows("MATCH (b) WHERE b.decorators IS NOT NULL RETURN b.qualified_name, b.decorators"))
19
+ typeof qn == "string" && decorators.set(qn, parseList(decs));
20
+ const importers = /* @__PURE__ */ new Map();
21
+ for (const [afile, bfile] of await graph.rows("MATCH (a)-[r:IMPORTS]->(b) RETURN a.file_path, b.file_path"))
22
+ typeof afile != "string" || typeof bfile != "string" || !bfile || afile === bfile || (importers.has(bfile) || importers.set(bfile, /* @__PURE__ */ new Set()), importers.get(bfile).add(afile));
23
+ const methods = /* @__PURE__ */ new Map();
24
+ for (const [a] of await graph.rows("MATCH (a)-[r:DEFINES_METHOD]->(m) RETURN a.qualified_name, m.qualified_name"))
25
+ typeof a == "string" && methods.set(a, (methods.get(a) ?? 0) + 1);
26
+ const usage = /* @__PURE__ */ new Map();
27
+ for (const [afile, b, bfile] of await graph.rows("MATCH (a)-[r:USAGE]->(b) RETURN a.file_path, b.qualified_name, b.file_path"))
28
+ typeof afile != "string" || typeof b != "string" || afile === bfile || (usage.has(b) || usage.set(b, /* @__PURE__ */ new Set()), usage.get(b).add(afile));
29
+ return { decorators, importers, methods, usage };
30
+ }
31
+ function factsFor(idx, fullQualifiedName, filePath) {
32
+ const decorators = idx.decorators.get(fullQualifiedName) ?? [];
33
+ return {
34
+ decorators,
35
+ decorator_names: decorators.map(decoratorName),
36
+ file_importers: filePath ? idx.importers.get(filePath)?.size ?? 0 : 0,
37
+ methods: idx.methods.get(fullQualifiedName) ?? 0,
38
+ usage_files: idx.usage.get(fullQualifiedName)?.size ?? 0
39
+ };
40
+ }
41
+ export {
42
+ buildFactsIndex,
43
+ decoratorName,
44
+ factsFor
45
+ };
46
+ //# sourceMappingURL=facts.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/analyzers/cards/facts.ts"],
4
+ "sourcesContent": ["/**\n * Tier-0 structural facts: decorators and a few reuse counts, from one graph query per fact.\n */\nimport type { CardFacts, CardGraph } from \"./types.js\";\n\n/** `@field_validator(\"X\", mode=\"before\")` -> `field_validator`; `@router.get('/')` -> `router.get`. */\nexport function decoratorName(text: string): string {\n return text.trim().replace(/^@/, \"\").replace(/\\s*#.*$/, \"\").replace(/\\(.*$/s, \"\").trim();\n}\n\n/** CBM stores decorators as a JSON-encoded list (or, in some builds, a real one). */\nfunction parseList(v: unknown): string[] {\n if (Array.isArray(v)) return v.map(String);\n if (typeof v !== \"string\" || !v.trim()) return [];\n try {\n const p = JSON.parse(v);\n return Array.isArray(p) ? p.map(String) : [];\n } catch {\n return [];\n }\n}\n\nexport interface FactsIndex {\n /** full qualified name -> decorator texts */\n decorators: Map<string, string[]>;\n /** file path -> other files importing it */\n importers: Map<string, Set<string>>;\n /** full qualified name -> DEFINES_METHOD count */\n methods: Map<string, number>;\n /** full qualified name -> other files with USAGE edges into it */\n usage: Map<string, Set<string>>;\n}\n\nexport async function buildFactsIndex(graph: CardGraph): Promise<FactsIndex> {\n const decorators = new Map<string, string[]>();\n for (const [qn, decs] of await graph.rows(\"MATCH (b) WHERE b.decorators IS NOT NULL RETURN b.qualified_name, b.decorators\")) {\n if (typeof qn === \"string\") decorators.set(qn, parseList(decs));\n }\n const importers = new Map<string, Set<string>>();\n for (const [afile, bfile] of await graph.rows(\"MATCH (a)-[r:IMPORTS]->(b) RETURN a.file_path, b.file_path\")) {\n if (typeof afile !== \"string\" || typeof bfile !== \"string\" || !bfile || afile === bfile) continue;\n if (!importers.has(bfile)) importers.set(bfile, new Set());\n importers.get(bfile)!.add(afile);\n }\n const methods = new Map<string, number>();\n for (const [a] of await graph.rows(\"MATCH (a)-[r:DEFINES_METHOD]->(m) RETURN a.qualified_name, m.qualified_name\")) {\n if (typeof a === \"string\") methods.set(a, (methods.get(a) ?? 0) + 1);\n }\n const usage = new Map<string, Set<string>>();\n for (const [afile, b, bfile] of await graph.rows(\"MATCH (a)-[r:USAGE]->(b) RETURN a.file_path, b.qualified_name, b.file_path\")) {\n if (typeof afile !== \"string\" || typeof b !== \"string\" || afile === bfile) continue;\n if (!usage.has(b)) usage.set(b, new Set());\n usage.get(b)!.add(afile);\n }\n return { decorators, importers, methods, usage };\n}\n\n/** Facts for one symbol, by its full (project-prefixed) qualified name and file. */\nexport function factsFor(idx: FactsIndex, fullQualifiedName: string, filePath: string | null): CardFacts {\n const decorators = idx.decorators.get(fullQualifiedName) ?? [];\n return {\n decorators,\n decorator_names: decorators.map(decoratorName),\n file_importers: filePath ? (idx.importers.get(filePath)?.size ?? 0) : 0,\n methods: idx.methods.get(fullQualifiedName) ?? 0,\n usage_files: idx.usage.get(fullQualifiedName)?.size ?? 0,\n };\n}\n"],
5
+ "mappings": "AAMM,SAAU,cAAc,MAAY;AACxC,SAAO,KAAK,KAAI,EAAG,QAAQ,MAAM,EAAE,EAAE,QAAQ,WAAW,EAAE,EAAE,QAAQ,UAAU,EAAE,EAAE,KAAI;AACxF;AAGA,SAAS,UAAU,GAAU;AAC3B,MAAI,MAAM,QAAQ,CAAC;AAAG,WAAO,EAAE,IAAI,MAAM;AACzC,MAAI,OAAO,KAAM,YAAY,CAAC,EAAE,KAAI;AAAI,WAAO,CAAA;AAC/C,MAAI;AACF,UAAM,IAAI,KAAK,MAAM,CAAC;AACtB,WAAO,MAAM,QAAQ,CAAC,IAAI,EAAE,IAAI,MAAM,IAAI,CAAA;EAC5C,QAAQ;AACN,WAAO,CAAA;EACT;AACF;AAaA,eAAsB,gBAAgB,OAAgB;AACpD,QAAM,aAAa,oBAAI,IAAG;AAC1B,aAAW,CAAC,IAAI,IAAI,KAAK,MAAM,MAAM,KAAK,gFAAgF;AACxH,IAAI,OAAO,MAAO,YAAU,WAAW,IAAI,IAAI,UAAU,IAAI,CAAC;AAEhE,QAAM,YAAY,oBAAI,IAAG;AACzB,aAAW,CAAC,OAAO,KAAK,KAAK,MAAM,MAAM,KAAK,4DAA4D;AACxG,IAAI,OAAO,SAAU,YAAY,OAAO,SAAU,YAAY,CAAC,SAAS,UAAU,UAC7E,UAAU,IAAI,KAAK,KAAG,UAAU,IAAI,OAAO,oBAAI,IAAG,CAAE,GACzD,UAAU,IAAI,KAAK,EAAG,IAAI,KAAK;AAEjC,QAAM,UAAU,oBAAI,IAAG;AACvB,aAAW,CAAC,CAAC,KAAK,MAAM,MAAM,KAAK,6EAA6E;AAC9G,IAAI,OAAO,KAAM,YAAU,QAAQ,IAAI,IAAI,QAAQ,IAAI,CAAC,KAAK,KAAK,CAAC;AAErE,QAAM,QAAQ,oBAAI,IAAG;AACrB,aAAW,CAAC,OAAO,GAAG,KAAK,KAAK,MAAM,MAAM,KAAK,4EAA4E;AAC3H,IAAI,OAAO,SAAU,YAAY,OAAO,KAAM,YAAY,UAAU,UAC/D,MAAM,IAAI,CAAC,KAAG,MAAM,IAAI,GAAG,oBAAI,IAAG,CAAE,GACzC,MAAM,IAAI,CAAC,EAAG,IAAI,KAAK;AAEzB,SAAO,EAAE,YAAY,WAAW,SAAS,MAAK;AAChD;AAGM,SAAU,SAAS,KAAiB,mBAA2B,UAAuB;AAC1F,QAAM,aAAa,IAAI,WAAW,IAAI,iBAAiB,KAAK,CAAA;AAC5D,SAAO;IACL;IACA,iBAAiB,WAAW,IAAI,aAAa;IAC7C,gBAAgB,WAAY,IAAI,UAAU,IAAI,QAAQ,GAAG,QAAQ,IAAK;IACtE,SAAS,IAAI,QAAQ,IAAI,iBAAiB,KAAK;IAC/C,aAAa,IAAI,MAAM,IAAI,iBAAiB,GAAG,QAAQ;;AAE3D;",
6
+ "names": []
7
+ }
@@ -0,0 +1,42 @@
1
+ import { CbmToolError } from "../cbm-responses.js";
2
+ function graphNodeOf(node) {
3
+ const qualifiedName = String(node.qualified_name ?? node.name ?? "");
4
+ return {
5
+ ...node.properties ?? {},
6
+ label: node.label,
7
+ name: node.label === "Route" ? qualifiedName : String(node.name ?? ""),
8
+ qualified_name: qualifiedName,
9
+ file_path: typeof node.file_path == "string" ? node.file_path : ""
10
+ };
11
+ }
12
+ function cbmCardGraph(tools, project) {
13
+ return {
14
+ project,
15
+ async search(label, filePattern, fields) {
16
+ return (await tools.searchGraph({
17
+ project,
18
+ label,
19
+ ...filePattern ? { file_pattern: filePattern } : {},
20
+ ...fields.length ? { fields } : {}
21
+ })).map(graphNodeOf);
22
+ },
23
+ async rows(cypher) {
24
+ return (await tools.queryGraph(cypher, project)).rows;
25
+ },
26
+ async snippet(qualifiedName) {
27
+ try {
28
+ const raw = await tools.call("get_code_snippet", { project, qualified_name: qualifiedName, source_mode: "full" });
29
+ return raw && typeof raw.source == "string" ? { source: raw.source } : null;
30
+ } catch (error) {
31
+ if (error instanceof CbmToolError)
32
+ return null;
33
+ throw error;
34
+ }
35
+ }
36
+ };
37
+ }
38
+ export {
39
+ cbmCardGraph,
40
+ graphNodeOf
41
+ };
42
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/analyzers/cards/graph.ts"],
4
+ "sourcesContent": ["/**\n * The card builder's view of a CBM project, over the analyzer's {@link CbmTools}.\n */\nimport { CbmToolError, type CbmGraphNode, type CbmTools } from \"../cbm-responses.js\";\nimport type { CardGraph, GraphNode } from \"./types.js\";\n\n/**\n * Flatten a normalised search_graph node: its properties become top-level fields. A Route keeps\n * its full qualified name (`__route__GET__/owners`) as its name, since CBM's own name for it is\n * only the path, or a fragment of it.\n */\nexport function graphNodeOf(node: CbmGraphNode): GraphNode {\n const qualifiedName = String(node.qualified_name ?? node.name ?? \"\");\n const props = node.properties ?? {};\n return {\n ...props,\n label: node.label,\n name: node.label === \"Route\" ? qualifiedName : String(node.name ?? \"\"),\n qualified_name: qualifiedName,\n file_path: typeof node.file_path === \"string\" ? node.file_path : \"\",\n };\n}\n\nexport function cbmCardGraph(tools: CbmTools, project: string): CardGraph {\n return {\n project,\n async search(label, filePattern, fields) {\n const nodes = await tools.searchGraph({\n project,\n label,\n ...(filePattern ? { file_pattern: filePattern } : {}),\n ...(fields.length ? { fields } : {}),\n });\n return nodes.map(graphNodeOf);\n },\n async rows(cypher) {\n return (await tools.queryGraph(cypher, project)).rows;\n },\n async snippet(qualifiedName) {\n try {\n // CBM 0.12's default (\"auto\") outlines containers of 200+ lines and caps output at about\n // 2,500 tokens; \"full\" returns the source (up to 500 lines, uncapped).\n const raw = (await tools.call(\"get_code_snippet\", { project, qualified_name: qualifiedName, source_mode: \"full\" })) as { source?: unknown };\n return raw && typeof raw.source === \"string\" ? { source: raw.source } : null;\n } catch (error) {\n // An unknown or source-less symbol comes back as an error payload: no source.\n if (error instanceof CbmToolError) return null;\n throw error;\n }\n },\n };\n}\n"],
5
+ "mappings": "AAGA,SAAS,oBAAsD;AAQzD,SAAU,YAAY,MAAkB;AAC5C,QAAM,gBAAgB,OAAO,KAAK,kBAAkB,KAAK,QAAQ,EAAE;AAEnE,SAAO;IACL,GAFY,KAAK,cAAc,CAAA;IAG/B,OAAO,KAAK;IACZ,MAAM,KAAK,UAAU,UAAU,gBAAgB,OAAO,KAAK,QAAQ,EAAE;IACrE,gBAAgB;IAChB,WAAW,OAAO,KAAK,aAAc,WAAW,KAAK,YAAY;;AAErE;AAEM,SAAU,aAAa,OAAiB,SAAe;AAC3D,SAAO;IACL;IACA,MAAM,OAAO,OAAO,aAAa,QAAM;AAOrC,cANc,MAAM,MAAM,YAAY;QACpC;QACA;QACA,GAAI,cAAc,EAAE,cAAc,YAAW,IAAK,CAAA;QAClD,GAAI,OAAO,SAAS,EAAE,OAAM,IAAK,CAAA;OAClC,GACY,IAAI,WAAW;IAC9B;IACA,MAAM,KAAK,QAAM;AACf,cAAQ,MAAM,MAAM,WAAW,QAAQ,OAAO,GAAG;IACnD;IACA,MAAM,QAAQ,eAAa;AACzB,UAAI;AAGF,cAAM,MAAO,MAAM,MAAM,KAAK,oBAAoB,EAAE,SAAS,gBAAgB,eAAe,aAAa,OAAM,CAAE;AACjH,eAAO,OAAO,OAAO,IAAI,UAAW,WAAW,EAAE,QAAQ,IAAI,OAAM,IAAK;MAC1E,SAAS,OAAO;AAEd,YAAI,iBAAiB;AAAc,iBAAO;AAC1C,cAAM;MACR;IACF;;AAEJ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,8 @@
1
+ export * from "./types.js";
2
+ export * from "./graph.js";
3
+ export * from "./edge-index.js";
4
+ export * from "./facts.js";
5
+ export * from "./build.js";
6
+ export * from "./tier0.js";
7
+ export * from "./classify.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/analyzers/cards/index.ts"],
4
+ "sourcesContent": ["export * from \"./types.js\";\nexport * from \"./graph.js\";\nexport * from \"./edge-index.js\";\nexport * from \"./facts.js\";\nexport * from \"./build.js\";\nexport * from \"./tier0.js\";\nexport * from \"./classify.js\";\n"],
5
+ "mappings": "AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
6
+ "names": []
7
+ }
@@ -0,0 +1,18 @@
1
+ import { declarationOf, evaluateTier0 } from "../tier0-rules.js";
2
+ function tier0SymbolOf(card, facts) {
3
+ return {
4
+ label: card.label,
5
+ name: card.name,
6
+ file_path: card.file_path,
7
+ declaration: declarationOf(card.source, card.signature),
8
+ decorator_names: facts?.decorator_names ?? []
9
+ };
10
+ }
11
+ function tier0ForCard(card, facts, rules) {
12
+ return evaluateTier0(tier0SymbolOf(card, facts), rules);
13
+ }
14
+ export {
15
+ tier0ForCard,
16
+ tier0SymbolOf
17
+ };
18
+ //# sourceMappingURL=tier0.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/analyzers/cards/tier0.ts"],
4
+ "sourcesContent": ["/**\n * Tier 0 on cards: the analyzer's rules (src/analyzers/tier0-rules.ts) applied to a card and its\n * facts. Used by `dr analyzer classify` and by the classify-eval harness.\n */\nimport { declarationOf, evaluateTier0, type Tier0Outcome, type Tier0Rule, type Tier0Symbol } from \"../tier0-rules.js\";\nimport type { CardFacts } from \"./types.js\";\n\n/** The card fields Tier 0 reads (a harness card, with its corpus field, also fits). */\nexport type Tier0Card = { label: string; name: string; file_path: string | null; source: string | null; signature: string | null };\n\nexport function tier0SymbolOf(card: Tier0Card, facts: CardFacts | undefined): Tier0Symbol {\n return {\n label: card.label,\n name: card.name,\n file_path: card.file_path,\n declaration: declarationOf(card.source, card.signature),\n decorator_names: facts?.decorator_names ?? [],\n };\n}\n\nexport function tier0ForCard(card: Tier0Card, facts: CardFacts | undefined, rules: Tier0Rule[]): Tier0Outcome | null {\n return evaluateTier0(tier0SymbolOf(card, facts), rules);\n}\n"],
5
+ "mappings": "AAIA,SAAS,eAAe,qBAA0E;AAM5F,SAAU,cAAc,MAAiB,OAA4B;AACzE,SAAO;IACL,OAAO,KAAK;IACZ,MAAM,KAAK;IACX,WAAW,KAAK;IAChB,aAAa,cAAc,KAAK,QAAQ,KAAK,SAAS;IACtD,iBAAiB,OAAO,mBAAmB,CAAA;;AAE/C;AAEM,SAAU,aAAa,MAAiB,OAA8B,OAAkB;AAC5F,SAAO,cAAc,cAAc,MAAM,KAAK,GAAG,KAAK;AACxD;",
6
+ "names": []
7
+ }
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [],
5
+ "mappings": "",
6
+ "names": []
7
+ }