@documentation-robotics/cli 0.1.0 → 0.1.7

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 (510) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +466 -693
  3. package/dist/analysis/data-model-analyzer.js +189 -0
  4. package/dist/analysis/data-model-analyzer.js.map +7 -0
  5. package/dist/analysis/index.js +3 -0
  6. package/dist/analysis/index.js.map +7 -0
  7. package/dist/analysis/relationship-classifier.js +181 -0
  8. package/dist/analysis/relationship-classifier.js.map +7 -0
  9. package/dist/analyzers/base-analyzer.js +1 -0
  10. package/dist/analyzers/base-analyzer.js.map +7 -0
  11. package/dist/analyzers/call-graph-utils.js +39 -0
  12. package/dist/analyzers/call-graph-utils.js.map +7 -0
  13. package/dist/analyzers/cbm-analyzer.js +1205 -0
  14. package/dist/analyzers/cbm-analyzer.js.map +7 -0
  15. package/dist/analyzers/heuristic-utils.js +55 -0
  16. package/dist/analyzers/heuristic-utils.js.map +7 -0
  17. package/dist/analyzers/mapping-loader.js +146 -0
  18. package/dist/analyzers/mapping-loader.js.map +7 -0
  19. package/dist/analyzers/registry.js +124 -0
  20. package/dist/analyzers/registry.js.map +7 -0
  21. package/dist/analyzers/session-state.js +176 -0
  22. package/dist/analyzers/session-state.js.map +7 -0
  23. package/dist/analyzers/stdio-client.js +208 -0
  24. package/dist/analyzers/stdio-client.js.map +7 -0
  25. package/dist/analyzers/types.js +15 -0
  26. package/dist/analyzers/types.js.map +7 -0
  27. package/dist/analyzers/verify-engine.js +209 -0
  28. package/dist/analyzers/verify-engine.js.map +7 -0
  29. package/dist/analyzers/verify-ignore.js +130 -0
  30. package/dist/analyzers/verify-ignore.js.map +7 -0
  31. package/dist/analyzers/version.js +8 -0
  32. package/dist/analyzers/version.js.map +7 -0
  33. package/dist/audit/ai/runner.js +41 -0
  34. package/dist/audit/ai/runner.js.map +7 -0
  35. package/dist/audit/differential-analyzer.js +183 -0
  36. package/dist/audit/differential-analyzer.js.map +7 -0
  37. package/dist/audit/index.js +32 -0
  38. package/dist/audit/index.js.map +7 -0
  39. package/dist/audit/nodes/ai/evaluator.js +49 -0
  40. package/dist/audit/nodes/ai/evaluator.js.map +7 -0
  41. package/dist/audit/nodes/ai/parser.js +55 -0
  42. package/dist/audit/nodes/ai/parser.js.map +7 -0
  43. package/dist/audit/nodes/ai/prompts.js +103 -0
  44. package/dist/audit/nodes/ai/prompts.js.map +7 -0
  45. package/dist/audit/nodes/analysis/node-completeness-checker.js +32 -0
  46. package/dist/audit/nodes/analysis/node-completeness-checker.js.map +7 -0
  47. package/dist/audit/nodes/analysis/node-definition-analyzer.js +47 -0
  48. package/dist/audit/nodes/analysis/node-definition-analyzer.js.map +7 -0
  49. package/dist/audit/nodes/analysis/node-overlap-detector.js +79 -0
  50. package/dist/audit/nodes/analysis/node-overlap-detector.js.map +7 -0
  51. package/dist/audit/nodes/model/orchestrator.js +82 -0
  52. package/dist/audit/nodes/model/orchestrator.js.map +7 -0
  53. package/dist/audit/nodes/spec/loader.js +116 -0
  54. package/dist/audit/nodes/spec/loader.js.map +7 -0
  55. package/dist/audit/nodes/spec/orchestrator.js +68 -0
  56. package/dist/audit/nodes/spec/orchestrator.js.map +7 -0
  57. package/dist/audit/nodes/types.js +1 -0
  58. package/dist/audit/nodes/types.js.map +7 -0
  59. package/dist/audit/pipeline/index.js +5 -0
  60. package/dist/audit/pipeline/index.js.map +7 -0
  61. package/dist/audit/pipeline/pipeline-orchestrator.js +218 -0
  62. package/dist/audit/pipeline/pipeline-orchestrator.js.map +7 -0
  63. package/dist/audit/relationships/ai/evaluator.js +235 -0
  64. package/dist/audit/relationships/ai/evaluator.js.map +7 -0
  65. package/dist/audit/relationships/ai/parser.js +197 -0
  66. package/dist/audit/relationships/ai/parser.js.map +7 -0
  67. package/dist/audit/relationships/ai/prompts.js +274 -0
  68. package/dist/audit/relationships/ai/prompts.js.map +7 -0
  69. package/dist/audit/relationships/analysis/balance-assessor.js +115 -0
  70. package/dist/audit/relationships/analysis/balance-assessor.js.map +7 -0
  71. package/dist/audit/relationships/analysis/coverage-analyzer.js +99 -0
  72. package/dist/audit/relationships/analysis/coverage-analyzer.js.map +7 -0
  73. package/dist/audit/relationships/analysis/duplicate-detector.js +95 -0
  74. package/dist/audit/relationships/analysis/duplicate-detector.js.map +7 -0
  75. package/dist/audit/relationships/analysis/gap-analyzer.js +99 -0
  76. package/dist/audit/relationships/analysis/gap-analyzer.js.map +7 -0
  77. package/dist/audit/relationships/analysis/layer-templates.js +294 -0
  78. package/dist/audit/relationships/analysis/layer-templates.js.map +7 -0
  79. package/dist/audit/relationships/graph/connectivity.js +129 -0
  80. package/dist/audit/relationships/graph/connectivity.js.map +7 -0
  81. package/dist/audit/relationships/graph/relationship-graph.js +179 -0
  82. package/dist/audit/relationships/graph/relationship-graph.js.map +7 -0
  83. package/dist/audit/relationships/model/balance-assessor.js +49 -0
  84. package/dist/audit/relationships/model/balance-assessor.js.map +7 -0
  85. package/dist/audit/relationships/model/coverage-analyzer.js +34 -0
  86. package/dist/audit/relationships/model/coverage-analyzer.js.map +7 -0
  87. package/dist/audit/relationships/model/duplicate-detector.js +68 -0
  88. package/dist/audit/relationships/model/duplicate-detector.js.map +7 -0
  89. package/dist/audit/relationships/model/gap-analyzer.js +41 -0
  90. package/dist/audit/relationships/model/gap-analyzer.js.map +7 -0
  91. package/dist/audit/relationships/model/orchestrator.js +126 -0
  92. package/dist/audit/relationships/model/orchestrator.js.map +7 -0
  93. package/dist/audit/relationships/spec/orchestrator.js +157 -0
  94. package/dist/audit/relationships/spec/orchestrator.js.map +7 -0
  95. package/dist/audit/reports/index.js +5 -0
  96. package/dist/audit/reports/index.js.map +7 -0
  97. package/dist/audit/reports/report-generator.js +118 -0
  98. package/dist/audit/reports/report-generator.js.map +7 -0
  99. package/dist/audit/snapshot-storage.js +163 -0
  100. package/dist/audit/snapshot-storage.js.map +7 -0
  101. package/dist/audit/types.js +21 -0
  102. package/dist/audit/types.js.map +7 -0
  103. package/dist/cli.js +223 -92
  104. package/dist/cli.js.map +3 -3
  105. package/dist/coding-agents/agents/claude-code.js +147 -0
  106. package/dist/coding-agents/agents/claude-code.js.map +7 -0
  107. package/dist/coding-agents/agents/index.js +5 -0
  108. package/dist/coding-agents/agents/index.js.map +7 -0
  109. package/dist/coding-agents/agents/types.js +1 -0
  110. package/dist/coding-agents/agents/types.js.map +7 -0
  111. package/dist/coding-agents/base-chat-client.js +45 -0
  112. package/dist/coding-agents/base-chat-client.js.map +7 -0
  113. package/dist/coding-agents/chat-utils.js +23 -0
  114. package/dist/coding-agents/chat-utils.js.map +7 -0
  115. package/dist/coding-agents/claude-code-client.js +246 -0
  116. package/dist/coding-agents/claude-code-client.js.map +7 -0
  117. package/dist/coding-agents/copilot-client.js +209 -0
  118. package/dist/coding-agents/copilot-client.js.map +7 -0
  119. package/dist/commands/add.js +95 -33
  120. package/dist/commands/add.js.map +2 -2
  121. package/dist/commands/analyzer.js +511 -0
  122. package/dist/commands/analyzer.js.map +7 -0
  123. package/dist/commands/audit-diff.js +49 -0
  124. package/dist/commands/audit-diff.js.map +7 -0
  125. package/dist/commands/audit-snapshots.js +62 -0
  126. package/dist/commands/audit-snapshots.js.map +7 -0
  127. package/dist/commands/audit.js +81 -0
  128. package/dist/commands/audit.js.map +7 -0
  129. package/dist/commands/catalog.js +248 -0
  130. package/dist/commands/catalog.js.map +7 -0
  131. package/dist/commands/changeset.js +577 -66
  132. package/dist/commands/changeset.js.map +2 -2
  133. package/dist/commands/chat.js +106 -83
  134. package/dist/commands/chat.js.map +2 -2
  135. package/dist/commands/claude.js +74 -0
  136. package/dist/commands/claude.js.map +7 -0
  137. package/dist/commands/conformance.js +71 -68
  138. package/dist/commands/conformance.js.map +2 -2
  139. package/dist/commands/copilot.js +75 -0
  140. package/dist/commands/copilot.js.map +7 -0
  141. package/dist/commands/delete.js +125 -11
  142. package/dist/commands/delete.js.map +3 -3
  143. package/dist/commands/discover-logic.js +44 -0
  144. package/dist/commands/discover-logic.js.map +7 -0
  145. package/dist/commands/docs.js +87 -0
  146. package/dist/commands/docs.js.map +7 -0
  147. package/dist/commands/element.js +14 -20
  148. package/dist/commands/element.js.map +2 -2
  149. package/dist/commands/export.js +13 -3
  150. package/dist/commands/export.js.map +2 -2
  151. package/dist/commands/import.js +51 -0
  152. package/dist/commands/import.js.map +7 -0
  153. package/dist/commands/info.js +30 -24
  154. package/dist/commands/info.js.map +2 -2
  155. package/dist/commands/init.js +27 -11
  156. package/dist/commands/init.js.map +2 -2
  157. package/dist/commands/list.js +63 -13
  158. package/dist/commands/list.js.map +3 -3
  159. package/dist/commands/relationship.js +225 -37
  160. package/dist/commands/relationship.js.map +2 -2
  161. package/dist/commands/report.js +54 -0
  162. package/dist/commands/report.js.map +7 -0
  163. package/dist/commands/reports.js +45 -0
  164. package/dist/commands/reports.js.map +7 -0
  165. package/dist/commands/schema.js +135 -0
  166. package/dist/commands/schema.js.map +7 -0
  167. package/dist/commands/search.js +40 -12
  168. package/dist/commands/search.js.map +2 -2
  169. package/dist/commands/show.js +58 -27
  170. package/dist/commands/show.js.map +2 -2
  171. package/dist/commands/stats.js +35 -0
  172. package/dist/commands/stats.js.map +7 -0
  173. package/dist/commands/trace.js +39 -16
  174. package/dist/commands/trace.js.map +2 -2
  175. package/dist/commands/update.js +141 -14
  176. package/dist/commands/update.js.map +2 -2
  177. package/dist/commands/upgrade.js +210 -46
  178. package/dist/commands/upgrade.js.map +3 -3
  179. package/dist/commands/validate.js +142 -23
  180. package/dist/commands/validate.js.map +3 -3
  181. package/dist/commands/version.js +8 -12
  182. package/dist/commands/version.js.map +2 -2
  183. package/dist/commands/visualize.js +162 -25
  184. package/dist/commands/visualize.js.map +2 -2
  185. package/dist/core/base-snapshot-manager.js +84 -0
  186. package/dist/core/base-snapshot-manager.js.map +7 -0
  187. package/dist/core/changeset-exporter.js +305 -0
  188. package/dist/core/changeset-exporter.js.map +7 -0
  189. package/dist/core/changeset-validator.js +41 -0
  190. package/dist/core/changeset-validator.js.map +7 -0
  191. package/dist/core/changeset.js +88 -173
  192. package/dist/core/changeset.js.map +2 -2
  193. package/dist/core/dependency-tracker.js +4 -2
  194. package/dist/core/dependency-tracker.js.map +2 -2
  195. package/dist/core/element.js +98 -27
  196. package/dist/core/element.js.map +2 -2
  197. package/dist/core/golden-copy-cache.js +290 -0
  198. package/dist/core/golden-copy-cache.js.map +7 -0
  199. package/dist/core/graph-model.js +266 -0
  200. package/dist/core/graph-model.js.map +7 -0
  201. package/dist/core/layer.js +159 -16
  202. package/dist/core/layer.js.map +2 -2
  203. package/dist/core/layers.js +32 -0
  204. package/dist/core/layers.js.map +7 -0
  205. package/dist/core/manifest.js +32 -11
  206. package/dist/core/manifest.js.map +2 -2
  207. package/dist/core/migration-registry.js +56 -1
  208. package/dist/core/migration-registry.js.map +2 -2
  209. package/dist/core/model.js +424 -217
  210. package/dist/core/model.js.map +3 -3
  211. package/dist/core/mutation-handler.js +179 -0
  212. package/dist/core/mutation-handler.js.map +7 -0
  213. package/dist/core/reference-registry.js +29 -21
  214. package/dist/core/reference-registry.js.map +2 -2
  215. package/dist/core/relationship-catalog.js +189 -0
  216. package/dist/core/relationship-catalog.js.map +7 -0
  217. package/dist/core/relationship-registry.js.map +2 -2
  218. package/dist/core/relationships.js.map +1 -1
  219. package/dist/core/report-data-model.js +285 -0
  220. package/dist/core/report-data-model.js.map +7 -0
  221. package/dist/core/spec-data-service.js +185 -0
  222. package/dist/core/spec-data-service.js.map +7 -0
  223. package/dist/core/spec-loader-types.js +1 -0
  224. package/dist/core/spec-loader-types.js.map +7 -0
  225. package/dist/core/spec-loader.js +234 -0
  226. package/dist/core/spec-loader.js.map +7 -0
  227. package/dist/core/staged-changeset-storage.js +282 -0
  228. package/dist/core/staged-changeset-storage.js.map +7 -0
  229. package/dist/core/staging-area.js +1002 -0
  230. package/dist/core/staging-area.js.map +7 -0
  231. package/dist/core/stats-collector.js +169 -0
  232. package/dist/core/stats-collector.js.map +7 -0
  233. package/dist/core/virtual-projection.js +443 -0
  234. package/dist/core/virtual-projection.js.map +7 -0
  235. package/dist/export/archimate-exporter.js +99 -60
  236. package/dist/export/archimate-exporter.js.map +2 -2
  237. package/dist/export/audit-formatters.js +479 -0
  238. package/dist/export/audit-formatters.js.map +7 -0
  239. package/dist/export/diff-formatters.js +99 -0
  240. package/dist/export/diff-formatters.js.map +7 -0
  241. package/dist/export/export-manager.js.map +2 -2
  242. package/dist/export/graphml-exporter.js +44 -27
  243. package/dist/export/graphml-exporter.js.map +2 -2
  244. package/dist/export/index.js +4 -0
  245. package/dist/export/index.js.map +2 -2
  246. package/dist/export/json-schema-exporter.js +55 -42
  247. package/dist/export/json-schema-exporter.js.map +2 -2
  248. package/dist/export/markdown-exporter.js +92 -70
  249. package/dist/export/markdown-exporter.js.map +2 -2
  250. package/dist/export/markdown-generator.js +248 -0
  251. package/dist/export/markdown-generator.js.map +7 -0
  252. package/dist/export/markdown-utils.js +30 -0
  253. package/dist/export/markdown-utils.js.map +7 -0
  254. package/dist/export/mermaid-markdown-exporter.js +37 -0
  255. package/dist/export/mermaid-markdown-exporter.js.map +7 -0
  256. package/dist/export/openapi-exporter.js +119 -71
  257. package/dist/export/openapi-exporter.js.map +2 -2
  258. package/dist/export/plantuml-exporter.js +104 -39
  259. package/dist/export/plantuml-exporter.js.map +2 -2
  260. package/dist/export/report-formatters.js +111 -0
  261. package/dist/export/report-formatters.js.map +7 -0
  262. package/dist/export/stats-formatters.js +98 -0
  263. package/dist/export/stats-formatters.js.map +7 -0
  264. package/dist/export/types.js +2 -14
  265. package/dist/export/types.js.map +2 -2
  266. package/dist/export/verify-formatters.js +153 -0
  267. package/dist/export/verify-formatters.js.map +7 -0
  268. package/dist/generated/compiled-validators.js +17 -0
  269. package/dist/generated/compiled-validators.js.map +7 -0
  270. package/dist/generated/index.js +31 -0
  271. package/dist/generated/index.js.map +7 -0
  272. package/dist/generated/layer-registry.js +190 -0
  273. package/dist/generated/layer-registry.js.map +7 -0
  274. package/dist/generated/layer-types.js +7 -0
  275. package/dist/generated/layer-types.js.map +7 -0
  276. package/dist/generated/node-types.js +1719 -0
  277. package/dist/generated/node-types.js.map +7 -0
  278. package/dist/generated/relationship-index.js +14552 -0
  279. package/dist/generated/relationship-index.js.map +7 -0
  280. package/dist/import/archimate-importer.js +166 -0
  281. package/dist/import/archimate-importer.js.map +7 -0
  282. package/dist/import/index.js +47 -0
  283. package/dist/import/index.js.map +7 -0
  284. package/dist/import/openapi-importer.js +143 -0
  285. package/dist/import/openapi-importer.js.map +7 -0
  286. package/dist/import/types.js +1 -0
  287. package/dist/import/types.js.map +7 -0
  288. package/dist/integrations/base-manager.js +311 -0
  289. package/dist/integrations/base-manager.js.map +7 -0
  290. package/dist/integrations/claude-manager.js +360 -0
  291. package/dist/integrations/claude-manager.js.map +7 -0
  292. package/dist/integrations/claude_code/agents/dr-advisor.md +253 -0
  293. package/dist/integrations/claude_code/agents/dr-architect.md +278 -0
  294. package/dist/integrations/claude_code/agents/dr-extractor.md +286 -0
  295. package/dist/integrations/claude_code/commands/dr-changeset.md +657 -0
  296. package/dist/integrations/claude_code/commands/dr-design.md +373 -0
  297. package/dist/integrations/claude_code/commands/dr-info.md +132 -0
  298. package/dist/integrations/claude_code/commands/dr-init.md +251 -0
  299. package/dist/integrations/claude_code/commands/dr-map.md +936 -0
  300. package/dist/integrations/claude_code/commands/dr-model.md +493 -0
  301. package/dist/integrations/claude_code/commands/dr-relate.md +814 -0
  302. package/dist/integrations/claude_code/commands/dr-sync.md +279 -0
  303. package/dist/integrations/claude_code/commands/dr-validate.md +654 -0
  304. package/dist/integrations/claude_code/commands/dr-verify.md +559 -0
  305. package/dist/integrations/claude_code/docs/END_TO_END_WALKTHROUGH.md +903 -0
  306. package/dist/integrations/claude_code/docs/QUICK_START.md +271 -0
  307. package/dist/integrations/claude_code/docs/README.md +347 -0
  308. package/dist/integrations/claude_code/skills/dr_01_motivation_layer/SKILL.md +550 -0
  309. package/dist/integrations/claude_code/skills/dr_02_business_layer/SKILL.md +620 -0
  310. package/dist/integrations/claude_code/skills/dr_03_security_layer/SKILL.md +642 -0
  311. package/dist/integrations/claude_code/skills/dr_04_application_layer/SKILL.md +911 -0
  312. package/dist/integrations/claude_code/skills/dr_05_technology_layer/SKILL.md +836 -0
  313. package/dist/integrations/claude_code/skills/dr_06_api_layer/SKILL.md +933 -0
  314. package/dist/integrations/claude_code/skills/dr_07_data_model_layer/SKILL.md +210 -0
  315. package/dist/integrations/claude_code/skills/dr_08_dataset_layer/SKILL.md +319 -0
  316. package/dist/integrations/claude_code/skills/dr_09_ux_layer/SKILL.md +319 -0
  317. package/dist/integrations/claude_code/skills/dr_10_navigation_layer/SKILL.md +318 -0
  318. package/dist/integrations/claude_code/skills/dr_11_apm_layer/SKILL.md +273 -0
  319. package/dist/integrations/claude_code/skills/dr_12_testing_layer/SKILL.md +273 -0
  320. package/dist/integrations/claude_code/skills/dr_changeset_reviewer/SKILL.md +187 -0
  321. package/dist/integrations/claude_code/skills/dr_codebase_memory/SKILL.md +590 -0
  322. package/dist/integrations/claude_code/skills/dr_engineering_guide/SKILL.md +295 -0
  323. package/dist/integrations/copilot-manager.js +328 -0
  324. package/dist/integrations/copilot-manager.js.map +7 -0
  325. package/dist/integrations/github_copilot/agents/dr-advisor.md +243 -0
  326. package/dist/integrations/github_copilot/agents/dr-architect.md +1567 -0
  327. package/dist/integrations/github_copilot/skills/dr_01_motivation_layer/SKILL.md +491 -0
  328. package/dist/integrations/github_copilot/skills/dr_02_business_layer/SKILL.md +539 -0
  329. package/dist/integrations/github_copilot/skills/dr_03_security_layer/SKILL.md +667 -0
  330. package/dist/integrations/github_copilot/skills/dr_04_application_layer/SKILL.md +670 -0
  331. package/dist/integrations/github_copilot/skills/dr_05_technology_layer/SKILL.md +660 -0
  332. package/dist/integrations/github_copilot/skills/dr_06_api_layer/SKILL.md +855 -0
  333. package/dist/integrations/github_copilot/skills/dr_07_data_model_layer/SKILL.md +171 -0
  334. package/dist/integrations/github_copilot/skills/dr_08_dataset_layer/SKILL.md +216 -0
  335. package/dist/integrations/github_copilot/skills/dr_09_ux_layer/SKILL.md +230 -0
  336. package/dist/integrations/github_copilot/skills/dr_10_navigation_layer/SKILL.md +228 -0
  337. package/dist/integrations/github_copilot/skills/dr_11_apm_layer/SKILL.md +234 -0
  338. package/dist/integrations/github_copilot/skills/dr_12_testing_layer/SKILL.md +230 -0
  339. package/dist/integrations/github_copilot/skills/dr_changeset_reviewer/SKILL.md +187 -0
  340. package/dist/integrations/hash-utils.js +51 -0
  341. package/dist/integrations/hash-utils.js.map +7 -0
  342. package/dist/integrations/types.js +16 -0
  343. package/dist/integrations/types.js.map +7 -0
  344. package/dist/reports/model-layer-report-generator.js +278 -0
  345. package/dist/reports/model-layer-report-generator.js.map +7 -0
  346. package/dist/reports/model-report-data.js +57 -0
  347. package/dist/reports/model-report-data.js.map +7 -0
  348. package/dist/reports/model-report-orchestrator.js +103 -0
  349. package/dist/reports/model-report-orchestrator.js.map +7 -0
  350. package/dist/schemas/bundled/analyzers/cbm.json +595 -0
  351. package/dist/schemas/bundled/analyzers/manifest.json +9 -0
  352. package/dist/schemas/bundled/api.json +3411 -0
  353. package/dist/schemas/bundled/apm.json +2371 -0
  354. package/dist/schemas/bundled/application.json +1253 -0
  355. package/dist/schemas/bundled/base.json +1622 -0
  356. package/dist/schemas/bundled/business.json +1279 -0
  357. package/dist/schemas/bundled/data-model.json +1298 -0
  358. package/dist/schemas/bundled/data-store.json +2025 -0
  359. package/dist/schemas/bundled/manifest.json +93 -0
  360. package/dist/schemas/bundled/motivation.json +1360 -0
  361. package/dist/schemas/bundled/navigation.json +1874 -0
  362. package/dist/schemas/bundled/security.json +3488 -0
  363. package/dist/schemas/bundled/technology.json +2067 -0
  364. package/dist/schemas/bundled/testing.json +3120 -0
  365. package/dist/schemas/bundled/ux.json +3592 -0
  366. package/dist/server/schemas.js +202 -0
  367. package/dist/server/schemas.js.map +7 -0
  368. package/dist/server/server.js +1336 -252
  369. package/dist/server/server.js.map +3 -3
  370. package/dist/server/telemetry-middleware.js +22 -15
  371. package/dist/server/telemetry-middleware.js.map +2 -2
  372. package/dist/server-entry.js +65 -0
  373. package/dist/server-entry.js.map +7 -0
  374. package/dist/telemetry/config.js +89 -0
  375. package/dist/telemetry/config.js.map +7 -0
  376. package/dist/telemetry/console-interceptor.js.map +1 -1
  377. package/dist/telemetry/detect.js +24 -0
  378. package/dist/telemetry/detect.js.map +7 -0
  379. package/dist/telemetry/fetch-otlp-exporter.js +112 -0
  380. package/dist/telemetry/fetch-otlp-exporter.js.map +7 -0
  381. package/dist/telemetry/index.js +153 -3
  382. package/dist/telemetry/index.js.map +2 -2
  383. package/dist/telemetry/resilient-exporter.js +22 -8
  384. package/dist/telemetry/resilient-exporter.js.map +2 -2
  385. package/dist/telemetry/resilient-log-exporter.js +17 -8
  386. package/dist/telemetry/resilient-log-exporter.js.map +2 -2
  387. package/dist/telemetry/test-instrumentation.js.map +2 -2
  388. package/dist/types/index.js +84 -0
  389. package/dist/types/index.js.map +3 -3
  390. package/dist/types/source-reference.js +1 -0
  391. package/dist/types/source-reference.js.map +7 -0
  392. package/dist/utils/chat-logger.js +292 -0
  393. package/dist/utils/chat-logger.js.map +7 -0
  394. package/dist/utils/claude-stream.js +8 -0
  395. package/dist/utils/claude-stream.js.map +7 -0
  396. package/dist/utils/date-utils.js +7 -0
  397. package/dist/utils/date-utils.js.map +7 -0
  398. package/dist/utils/element-utils.js.map +1 -1
  399. package/dist/utils/errors.js +88 -15
  400. package/dist/utils/errors.js.map +3 -3
  401. package/dist/utils/export-python-annotations.js +82 -0
  402. package/dist/utils/export-python-annotations.js.map +7 -0
  403. package/dist/utils/file-io.js +7 -2
  404. package/dist/utils/file-io.js.map +2 -2
  405. package/dist/utils/file-lock.js +156 -0
  406. package/dist/utils/file-lock.js.map +7 -0
  407. package/dist/utils/id-generator.js +18 -0
  408. package/dist/utils/id-generator.js.map +7 -0
  409. package/dist/utils/layer-name-formatter.js +16 -0
  410. package/dist/utils/layer-name-formatter.js.map +7 -0
  411. package/dist/utils/markdown-anchor.js +7 -0
  412. package/dist/utils/markdown-anchor.js.map +7 -0
  413. package/dist/utils/markdown-link.js +12 -0
  414. package/dist/utils/markdown-link.js.map +7 -0
  415. package/dist/utils/markdown-table.js +17 -0
  416. package/dist/utils/markdown-table.js.map +7 -0
  417. package/dist/utils/mermaid-utils.js +11 -0
  418. package/dist/utils/mermaid-utils.js.map +7 -0
  419. package/dist/utils/project-paths.js.map +2 -2
  420. package/dist/utils/source-reference.js +52 -0
  421. package/dist/utils/source-reference.js.map +7 -0
  422. package/dist/utils/spec-installer.js +40 -53
  423. package/dist/utils/spec-installer.js.map +2 -2
  424. package/dist/utils/spec-version.js +5 -1
  425. package/dist/utils/spec-version.js.map +2 -2
  426. package/dist/utils/string-utils.js +12 -0
  427. package/dist/utils/string-utils.js.map +7 -0
  428. package/dist/utils/table-formatting.js +19 -0
  429. package/dist/utils/table-formatting.js.map +7 -0
  430. package/dist/validators/index.js +4 -0
  431. package/dist/validators/index.js.map +2 -2
  432. package/dist/validators/naming-validator.js +20 -23
  433. package/dist/validators/naming-validator.js.map +2 -2
  434. package/dist/validators/reference-validator.js +23 -38
  435. package/dist/validators/reference-validator.js.map +2 -2
  436. package/dist/validators/relationship-schema-validator.js +243 -0
  437. package/dist/validators/relationship-schema-validator.js.map +7 -0
  438. package/dist/validators/schema-validator.js +168 -68
  439. package/dist/validators/schema-validator.js.map +2 -2
  440. package/dist/validators/semantic-validator.js +36 -60
  441. package/dist/validators/semantic-validator.js.map +2 -2
  442. package/dist/validators/types.js.map +2 -2
  443. package/dist/validators/validation-formatter.js +159 -0
  444. package/dist/validators/validation-formatter.js.map +7 -0
  445. package/dist/validators/validator.js +24 -38
  446. package/dist/validators/validator.js.map +2 -2
  447. package/dist/viewer/README.md +139 -0
  448. package/dist/viewer/assets/main-CY0Xufuj.css +1 -0
  449. package/dist/viewer/assets/main-DtgErnwF.js +81 -0
  450. package/dist/viewer/assets/vendor-CxKvDp2x.js +17 -0
  451. package/dist/viewer/favicon.svg +11 -0
  452. package/dist/viewer/fonts/inter/Inter-Black.woff2 +0 -0
  453. package/dist/viewer/fonts/inter/Inter-Bold.woff2 +0 -0
  454. package/dist/viewer/fonts/inter/Inter-ExtraBold.woff2 +0 -0
  455. package/dist/viewer/fonts/inter/Inter-Light.woff2 +0 -0
  456. package/dist/viewer/fonts/inter/Inter-Medium.woff2 +0 -0
  457. package/dist/viewer/fonts/inter/Inter-Regular.woff2 +0 -0
  458. package/dist/viewer/fonts/inter/Inter-SemiBold.woff2 +0 -0
  459. package/dist/viewer/fonts/jetbrains-mono/JetBrainsMono-Medium.woff2 +0 -0
  460. package/dist/viewer/fonts/jetbrains-mono/JetBrainsMono-Regular.woff2 +0 -0
  461. package/dist/viewer/fonts/jetbrains-mono/JetBrainsMono-SemiBold.woff2 +0 -0
  462. package/dist/viewer/index.html +15 -0
  463. package/dist/viewer/manifest.json +99 -0
  464. package/dist/viewer/version.json +1 -0
  465. package/package.json +42 -16
  466. package/PYTHON_CLI_PARITY.md +0 -265
  467. package/PYTHON_CLI_STRUCTURE_UPDATE.md +0 -246
  468. package/biome.json +0 -42
  469. package/bunfig.toml +0 -3
  470. package/dist/ai/claude-client.js +0 -71
  471. package/dist/ai/claude-client.js.map +0 -7
  472. package/dist/ai/context-provider.js +0 -129
  473. package/dist/ai/context-provider.js.map +0 -7
  474. package/dist/ai/tools.js +0 -231
  475. package/dist/ai/tools.js.map +0 -7
  476. package/dist/commands/migrate.js +0 -36
  477. package/dist/commands/migrate.js.map +0 -7
  478. package/dist/commands/project.js +0 -74
  479. package/dist/commands/project.js.map +0 -7
  480. package/dist/core/active-changeset.js +0 -52
  481. package/dist/core/active-changeset.js.map +0 -7
  482. package/dist/core/projection-engine.js +0 -288
  483. package/dist/core/projection-engine.js.map +0 -7
  484. package/dist/schemas/bundled/01-motivation-layer.schema.json +0 -942
  485. package/dist/schemas/bundled/02-business-layer.schema.json +0 -1293
  486. package/dist/schemas/bundled/03-security-layer.schema.json +0 -2177
  487. package/dist/schemas/bundled/04-application-layer.schema.json +0 -1328
  488. package/dist/schemas/bundled/05-technology-layer.schema.json +0 -1465
  489. package/dist/schemas/bundled/06-api-layer.schema.json +0 -1743
  490. package/dist/schemas/bundled/07-data-model-layer.schema.json +0 -1253
  491. package/dist/schemas/bundled/08-datastore-layer.schema.json +0 -892
  492. package/dist/schemas/bundled/09-ux-layer.schema.json +0 -1506
  493. package/dist/schemas/bundled/10-navigation-layer.schema.json +0 -843
  494. package/dist/schemas/bundled/11-apm-observability-layer.schema.json +0 -1430
  495. package/dist/schemas/bundled/12-testing-layer.schema.json +0 -1091
  496. package/dist/schemas/bundled/common/layer-extensions.schema.json +0 -266
  497. package/dist/schemas/bundled/common/predicates.schema.json +0 -493
  498. package/dist/schemas/bundled/common/relationships.schema.json +0 -791
  499. package/dist/schemas/bundled/common/source-references.schema.json +0 -71
  500. package/dist/schemas/bundled/link-registry.json +0 -1839
  501. package/dist/schemas/bundled/link-registry.schema.json +0 -339
  502. package/dist/schemas/bundled/relationship-catalog.json +0 -1302
  503. package/dist/schemas/bundled/relationship-type.schema.json +0 -221
  504. package/dist/utils/model-path.js +0 -22
  505. package/dist/utils/model-path.js.map +0 -7
  506. package/docs/TEST-INSTRUMENTATION.md +0 -405
  507. package/docs/telemetry.md +0 -427
  508. package/test-debug.js +0 -33
  509. package/test-special.mjs +0 -46
  510. package/test_runner.ts +0 -7
@@ -0,0 +1,590 @@
1
+ ---
2
+ name: dr_codebase_memory
3
+ description: Graph-based code intelligence for using dr analyzer subcommands to understand codebase structure, discover elements, and verify model alignment
4
+ triggers:
5
+ [
6
+ "what endpoints exist",
7
+ "endpoints",
8
+ "what calls",
9
+ "call graph",
10
+ "is the model complete",
11
+ "what services exist",
12
+ "analyzer",
13
+ "codebase memory",
14
+ "reindex",
15
+ "freshness",
16
+ "code structure",
17
+ "extract workflows",
18
+ "code changes verification"
19
+ ]
20
+ version: 0.1.3
21
+ ---
22
+
23
+ # Codebase Memory Skill
24
+
25
+ **Scope:** CLI version 0.1.3
26
+ **Purpose:** Teaches agents when and how to use `dr analyzer` subcommands for graph-based code intelligence rather than running grep+Read loops to understand codebase structure.
27
+
28
+ ---
29
+
30
+ ## When to Activate
31
+
32
+ This skill activates when:
33
+
34
+ - User asks **structural codebase questions**: "What endpoints exist?", "What services are in this codebase?", "Is the model complete?", "What calls what?"
35
+ - User asks about **call graphs and dependencies**: "Who calls this function?", "What does this endpoint depend on?"
36
+ - **Before extraction workflows**: Agent is about to grep the codebase to discover elements
37
+ - **After code changes**: User asks "Is this fresh?", "Did I miss anything?", "What changed?" — check with analyzer before manual inspection
38
+ - User mentions **analyzer**, **codebase memory**, **reindex**, or **freshness**
39
+ - User mentions **verification** or **verification scenarios**
40
+
41
+ ---
42
+
43
+ ## Core Commands
44
+
45
+ The `dr analyzer` surface provides ten subcommands for codebase discovery and verification. Each has a specific purpose and confidence level:
46
+
47
+ ### 1. `dr analyzer discover`
48
+
49
+ **Purpose:** Scan for installed analyzers and select the active analyzer.
50
+
51
+ **What it does:**
52
+
53
+ - Detects which analyzers are installed and available on the system
54
+ - Prompts for selection if multiple analyzers are found
55
+ - Persists the selected analyzer to session state for subsequent commands
56
+ - Can force re-selection with `--reselect` flag
57
+
58
+ **Confidence:** Medium — Use to **bootstrap analyzer selection** before other commands
59
+
60
+ **Example:**
61
+
62
+ ```bash
63
+ dr analyzer discover
64
+ dr analyzer discover --reselect # Force new selection
65
+ ```
66
+
67
+ **Use when:**
68
+
69
+ - User wants to see what analyzers are available
70
+ - No analyzer is currently selected
71
+ - User wants to switch to a different analyzer
72
+
73
+ ---
74
+
75
+ ### 2. `dr analyzer status`
76
+
77
+ **Purpose:** Probe analyzer state and project index freshness before any other query.
78
+
79
+ **What it does:**
80
+
81
+ - Detects if an analyzer is installed and active
82
+ - Reports project index state (indexed, not indexed, stale)
83
+ - Indicates which analyzer is selected (e.g., codebase-memory, source-graph)
84
+ - Shows index metadata (last indexed time, schema version)
85
+
86
+ **Confidence:** Medium — Use to make **graceful degradation decisions** (see protocol below)
87
+
88
+ **Example:**
89
+
90
+ ```bash
91
+ dr analyzer status
92
+ ```
93
+
94
+ **Output indicates:**
95
+
96
+ - Analyzer installed and active → Use other commands with full confidence
97
+ - Analyzer available but not indexed → Offer to `dr analyzer index` first
98
+ - No analyzer → Fall back to code inspection, mention capability once
99
+
100
+ ---
101
+
102
+ ### 3. `dr analyzer index`
103
+
104
+ **Purpose:** Index the project codebase with the active analyzer.
105
+
106
+ **What it does:**
107
+
108
+ - Scans the project for code structures (endpoints, services, database schemas, call relationships)
109
+ - Builds internal graph of codebase elements
110
+ - Persists index state for subsequent queries
111
+ - Reports indexing progress and completion
112
+
113
+ **Confidence:** Medium — Indexing takes time; offer only if user has explicit freshness concerns
114
+
115
+ **Example:**
116
+
117
+ ```bash
118
+ dr analyzer index
119
+ ```
120
+
121
+ **Use when:**
122
+
123
+ - `status` shows index is stale or missing
124
+ - User asks "Is this fresh?" and index needs updating
125
+ - Extracting a large feature (multiple endpoints/services)
126
+
127
+ ---
128
+
129
+ ### 4. `dr analyzer endpoints`
130
+
131
+ **Purpose:** List all API endpoints discovered in the indexed project.
132
+
133
+ **What it does:**
134
+
135
+ - Enumerates HTTP endpoints (routes, methods, parameters)
136
+ - Infers endpoint details from code (path, verb, description)
137
+ - Returns structured data: path, HTTP method, handler, parameters, return type
138
+
139
+ **Confidence:** **HIGH** — This is authoritative ground truth. Endpoints in code = endpoints that exist.
140
+
141
+ **Example:**
142
+
143
+ ```bash
144
+ dr analyzer endpoints
145
+ ```
146
+
147
+ **Trust this for:**
148
+
149
+ - ✅ "What API endpoints exist in this codebase?"
150
+ - ✅ Verification that all code endpoints are modeled
151
+ - ✅ Discovering missing endpoints to add to the model
152
+
153
+ ---
154
+
155
+ ### 5. `dr analyzer services`
156
+
157
+ **Purpose:** Query for services/components in the indexed project.
158
+
159
+ **What it does:**
160
+
161
+ - Identifies application services and components (business logic groupings)
162
+ - Infers from code organization (package/module structure, class hierarchy)
163
+ - Returns service names, description, dependencies, exposed interfaces
164
+
165
+ **Confidence:** **MEDIUM-to-LOW** — Treat as a **checklist, not ground truth**. Code organization ≠ intended architecture.
166
+
167
+ **Example:**
168
+
169
+ ```bash
170
+ dr analyzer services
171
+ ```
172
+
173
+ **Trust this for:**
174
+
175
+ - ✅ As a **checklist**: "Did we model all the major code packages?"
176
+ - ✅ Discovering services not yet in the model
177
+ - ❌ As authoritative: Don't assume analyzer's grouping matches intended architecture
178
+
179
+ **When uncertain:**
180
+
181
+ - Ask the user: "Analyzer sees these services; does this match your intended architecture?"
182
+ - Compare against layer 2 (Business) or layer 4 (Application) model definitions
183
+
184
+ ---
185
+
186
+ ### 6. `dr analyzer datastores`
187
+
188
+ **Purpose:** Identify database schemas and data storage patterns inferred from code.
189
+
190
+ **What it does:**
191
+
192
+ - Detects database connections, ORM models, migration files
193
+ - Infers schema structure from code (table names, columns, relationships)
194
+ - Returns database names, tables, columns, inferred types
195
+
196
+ **Confidence:** **LOW** — Treat as **"consider this"**, not definitive. Inferred schemas may be incomplete, stale, or speculative.
197
+
198
+ **Example:**
199
+
200
+ ```bash
201
+ dr analyzer datastores
202
+ ```
203
+
204
+ **Trust this for:**
205
+
206
+ - ✅ As a starting point: "What databases and tables exist?"
207
+ - ✅ Discovering schemas not yet modeled in layer 7/8
208
+ - ✅ Finding orphaned tables or stale schemas
209
+ - ❌ As ground truth: Inferred schemas can miss columns, relationships, or constraints
210
+
211
+ **When uncertain:**
212
+
213
+ - Always cross-check against actual schema definitions (SQL migrations, ORM models)
214
+ - Ask the user: "Analyzer inferred these tables; can you confirm this matches your database?"
215
+
216
+ ---
217
+
218
+ ### 7. `dr analyzer callers <qualified-name>`
219
+
220
+ **Purpose:** Analyze incoming call relationships for a function/method.
221
+
222
+ **What it does:**
223
+
224
+ - Finds all functions that call the given function
225
+ - Builds call graph from code analysis (static analysis, type information)
226
+ - Returns caller information: names, locations, call context
227
+ - Useful for understanding callers and reverse dependencies
228
+
229
+ **Confidence:** Medium — Accurate for explicit calls; may miss dynamic/reflection-based calls
230
+
231
+ **Example:**
232
+
233
+ ```bash
234
+ dr analyzer callers "auth.service.validateToken"
235
+ ```
236
+
237
+ **Trust this for:**
238
+
239
+ - ✅ Understanding who calls a given function
240
+ - ✅ Reverse dependency analysis
241
+ - ✅ Finding unexpected callers
242
+ - ⚠️ Be aware: Dynamic calls (callbacks, reflection, higher-order functions) may not be detected
243
+
244
+ ---
245
+
246
+ ### 8. `dr analyzer callees <qualified-name>`
247
+
248
+ **Purpose:** Analyze outgoing call relationships for a function/method.
249
+
250
+ **What it does:**
251
+
252
+ - Finds all functions that the given function calls
253
+ - Builds call graph from code analysis (static analysis, type information)
254
+ - Returns callee information: names, locations, call context
255
+ - Useful for understanding dependencies and call chains
256
+
257
+ **Confidence:** Medium — Accurate for explicit calls; may miss dynamic/reflection-based calls
258
+
259
+ **Example:**
260
+
261
+ ```bash
262
+ dr analyzer callees "api.handler.createOrder"
263
+ ```
264
+
265
+ **Trust this for:**
266
+
267
+ - ✅ Understanding function dependencies
268
+ - ✅ Forward impact analysis ("What does this function depend on?")
269
+ - ✅ Discovering call chains and dependency graphs
270
+ - ⚠️ Be aware: Dynamic calls (callbacks, reflection, higher-order functions) may not be detected
271
+
272
+ ---
273
+
274
+ ### 9. `dr analyzer query <cypher>`
275
+
276
+ **Purpose:** Execute custom graph queries against the indexed codebase.
277
+
278
+ **What it does:**
279
+
280
+ - Accepts Cypher query language for flexible graph traversal
281
+ - Queries the underlying codebase graph directly (bypassing predefined commands)
282
+ - Returns raw graph results based on custom query logic
283
+ - Powerful for advanced analysis beyond standard commands
284
+
285
+ **Confidence:** HIGH for graph structure, but requires Cypher knowledge — Use when standard commands don't fit
286
+
287
+ **Example:**
288
+
289
+ ```bash
290
+ dr analyzer query "MATCH (fn:Function) WHERE fn.name CONTAINS 'payment' RETURN fn.fqn, fn.description"
291
+ ```
292
+
293
+ **Trust this for:**
294
+
295
+ - ✅ Custom graph traversals (e.g., "functions that call X and are called by Y")
296
+ - ✅ Finding all nodes of a specific type with filters
297
+ - ✅ Complex relationship analysis
298
+ - ✅ Exploring graph structure itself
299
+
300
+ **When to use:**
301
+
302
+ - Standard commands (`endpoints`, `services`, `callers`, `callees`) don't meet your needs
303
+ - You need to filter or combine results in a custom way
304
+ - Analyzing complex graph patterns
305
+
306
+ **Before using:**
307
+
308
+ - Run `get_graph_schema` MCP tool first to understand available node/edge types
309
+ - See "MCP Escape Hatch" section below for protocol
310
+
311
+ ---
312
+
313
+ ### 10. `dr analyzer verify`
314
+
315
+ **Purpose:** Verify that code-discovered routes align with model endpoints and validate against active changeset.
316
+
317
+ **What it does:**
318
+
319
+ - Compares endpoints found in code against endpoints defined in the model (layer 6)
320
+ - Reports **matches** (endpoint in code and model), **graph-only** (in code but not modeled), **model-only** (modeled but not in code)
321
+ - Reports against the **active changeset view** if a changeset is staged
322
+ - Returns JSON with detailed mappings and changeset context
323
+
324
+ **Confidence:** **HIGH for diffs, MEDIUM for absolute alignment** — Shows what changed; absolute alignment depends on model accuracy
325
+
326
+ **Example:**
327
+
328
+ ```bash
329
+ dr analyzer verify --json
330
+ ```
331
+
332
+ **Output includes:**
333
+
334
+ ```json
335
+ {
336
+ "generated_at": "2026-04-21T15:30:45.123Z",
337
+ "project_root": "/path/to/project",
338
+ "analyzer": "codebase-memory-mcp",
339
+ "analyzer_indexed_at": "2026-04-21T15:20:00.000Z",
340
+ "changeset_context": {
341
+ "active_changeset": "feat-payments",
342
+ "verified_against": "changeset_view"
343
+ },
344
+ "layers_verified": ["api"],
345
+ "buckets": {
346
+ "matched": [...],
347
+ "in_graph_only": [...],
348
+ "in_model_only": [...],
349
+ "ignored": [...]
350
+ },
351
+ "summary": {
352
+ "matched_count": 45,
353
+ "gap_count": 2,
354
+ "drift_count": 1,
355
+ "ignored_count": 0,
356
+ "total_graph_entries": 47,
357
+ "total_model_entries": 46
358
+ }
359
+ }
360
+ ```
361
+
362
+ **Trust this for:**
363
+
364
+ - ✅ Finding endpoints in code that aren't modeled yet (in_graph_only)
365
+ - ✅ Finding modeled endpoints that don't exist in code (in_model_only)
366
+ - ✅ Verifying model freshness after code changes
367
+ - ✅ Checking what changed when a changeset is active (via `changeset_context`)
368
+
369
+ **When reporting results to user:**
370
+
371
+ - Always **quote the `changeset_context` fields** (`active_changeset` and `verified_against`) to indicate which model version was compared
372
+ - Use terminology: **"graph-only"** for `in_graph_only` (suspected gaps), **"model-only"** for `in_model_only` (possible drift)
373
+
374
+ ---
375
+
376
+ ## Confidence Interpretation Table
377
+
378
+ | Command | Confidence | Use As | Caveats |
379
+ | ------------ | ---------- | --------------------------------------- | -------------------------------------------------- |
380
+ | `discover` | Medium | Bootstrap analyzer selection | Only used once per session |
381
+ | `status` | Medium | Decision gate (is analyzer available?) | Only probes; doesn't query codebase |
382
+ | `index` | Medium | Refresh command (accept if user asks) | Takes time; only offer if freshness concerns |
383
+ | `endpoints` | **HIGH** | Authoritative ground truth | Complete and accurate (code is source truth) |
384
+ | `services` | Medium-Low | Checklist, starting point for discovery | Inferred; may not match intended architecture |
385
+ | `datastores` | **LOW** | Consider as a lead, verify manually | Inferred schemas may be incomplete/stale |
386
+ | `callers` | Medium | Reverse dependency analysis | Misses dynamic calls (callbacks, reflection) |
387
+ | `callees` | Medium | Forward dependency analysis | Misses dynamic calls (callbacks, reflection) |
388
+ | `query` | **HIGH** | Custom graph traversal | Requires Cypher knowledge and graph schema |
389
+ | `verify` | **HIGH** | Gap/drift detection, freshness check | High confidence on diffs; quotes changeset context |
390
+
391
+ ---
392
+
393
+ ## When NOT to Use
394
+
395
+ Do NOT activate this skill when:
396
+
397
+ - **Text search needed** → User asks "find all uses of variable X" → Use Grep/Glob instead
398
+ - **Single file edits** → User asks "show me this file" → Use Read instead
399
+ - **Analyzer unavailable** → `dr analyzer status` shows "no analyzer active" → Fall back to code inspection (see Graceful Degradation below)
400
+ - **Ad-hoc symbol lookup** → User asks "what does this function return?" → Code inspection is faster than analyzer query
401
+ - **Low-level code review** → User asks "is this implementation correct?" → Read and analyze the code directly
402
+
403
+ **Summary:** Analyzer excels at **structural questions** (what exists, how are things connected). Use traditional tools for **content questions** (what does this do, is it correct).
404
+
405
+ ---
406
+
407
+ ## Graceful Degradation Protocol
408
+
409
+ The analyzer may not be installed or indexed. Handle with four-tier degradation:
410
+
411
+ ### Level 1: Full Capability (Analyzer Active and Indexed, Fresh)
412
+
413
+ **Condition:** `dr analyzer status` shows analyzer installed and index is current (fresh).
414
+
415
+ **Action:** Use all ten commands freely. User gets authoritative answers.
416
+
417
+ ---
418
+
419
+ ### Level 2: Stale Index (Analyzer Active and Indexed, But Stale)
420
+
421
+ **Condition:** `dr analyzer status` shows analyzer installed and indexed, but index is stale.
422
+
423
+ **Action:**
424
+
425
+ 1. Ask to reindex: "The codebase index is stale. Would you like me to run `dr analyzer index` to get current data?"
426
+ 2. If user accepts, run `dr analyzer index` and proceed with full commands
427
+ 3. If user declines, continue with stale data (clearly label results as "stale")
428
+ 4. Do NOT repeatedly offer; accept user's choice once per session
429
+
430
+ **Note:** Stale data may miss recent code changes but is more accurate than no index at all.
431
+
432
+ ---
433
+
434
+ ### Level 3: Available But Not Indexed (Analyzer Installed, Not Indexed)
435
+
436
+ **Condition:** `dr analyzer status` shows analyzer installed but index is missing.
437
+
438
+ **Action:**
439
+
440
+ 1. Offer to index: "I can index the codebase for faster structural queries. Run `dr analyzer index`?"
441
+ 2. If user declines, fall back to code inspection
442
+ 3. Do NOT repeatedly offer; accept user's choice once per session
443
+
444
+ ---
445
+
446
+ ### Level 4: No Analyzer (Not Installed)
447
+
448
+ **Condition:** `dr analyzer status` shows no analyzer active.
449
+
450
+ **Action:**
451
+
452
+ 1. **Mention capability once:** "This codebase could be indexed for structural queries—see `dr analyzer discover` if interested."
453
+ 2. **Step aside:** Do not mention analyzer again this session; proceed with code inspection
454
+ 3. Use Read/Glob/Grep to answer structural questions the traditional way
455
+
456
+ **Why this protocol:**
457
+
458
+ - Respects user choice (don't nag if they prefer manual inspection)
459
+ - Avoids repeated offers that clutter conversation
460
+ - Transitions cleanly to fallback tools
461
+ - Keeps focus on solving the user's immediate problem
462
+
463
+ ---
464
+
465
+ ## MCP Escape Hatch
466
+
467
+ For use cases not covered by `dr analyzer` subcommands, the codebase-memory MCP provides lower-level graph access:
468
+
469
+ ### Available MCP Tools
470
+
471
+ - `mcp__codebase-memory-mcp__get_graph_schema` — Retrieve graph schema (structure, node types, edge types)
472
+ - `mcp__codebase-memory-mcp__query_graph` — Execute custom Cypher query against the codebase graph
473
+ - `mcp__codebase-memory-mcp__query_graph_with_llm` — Execute Cypher with LLM assistance
474
+
475
+ ### Protocol
476
+
477
+ **Always run `get_graph_schema` first** before any custom Cypher query. This tells you:
478
+
479
+ - Available node types (Endpoint, Service, Function, Database, etc.)
480
+ - Available edge types (calls, references, depends_on, etc.)
481
+ - Node and edge properties
482
+
483
+ **Example:**
484
+
485
+ ```bash
486
+ # 1. Get schema first
487
+ mcp__codebase-memory-mcp__get_graph_schema
488
+
489
+ # 2. Write custom Cypher query
490
+ mcp__codebase-memory-mcp__query_graph
491
+ MATCH (fn:Function) WHERE fn.name CONTAINS "payment"
492
+ RETURN fn.fqn, fn.description
493
+ ```
494
+
495
+ **When to use MCP over `dr analyzer`:**
496
+
497
+ - Finding all nodes of a specific type (e.g., all "Payment" related functions)
498
+ - Complex graph traversals (e.g., "functions that call X and are called by Y")
499
+ - Custom filtering based on node properties
500
+ - Exploring graph structure itself
501
+
502
+ ---
503
+
504
+ ## Changeset Awareness
505
+
506
+ When a user has an active changeset, `dr analyzer verify` reports **against the active changeset view** — i.e., the model as it would exist after applying the staged changes.
507
+
508
+ ### How to Report Results
509
+
510
+ When summarizing verify output to the user:
511
+
512
+ 1. **Quote the `changeset_context` field** from the verify JSON response
513
+ 2. **Indicate what model version was checked:** "Verified against changeset X" or "Verified against current model"
514
+ 3. **Highlight graph-only/model-only in context:**
515
+ - Graph-only = "These endpoints are in code but not in changeset X"
516
+ - Model-only = "These endpoints are in changeset X but not in code"
517
+
518
+ **Example:**
519
+
520
+ **User:** "Is the API model fresh?"
521
+
522
+ **Assistant:** Let me verify...
523
+
524
+ ```bash
525
+ dr analyzer verify --json
526
+ ```
527
+
528
+ **Result (in JSON):**
529
+
530
+ ```json
531
+ {
532
+ "changeset_context": {
533
+ "active_changeset": "feat-payments",
534
+ "verified_against": "changeset_view"
535
+ },
536
+ "buckets": {
537
+ "matched": [...],
538
+ "in_graph_only": [{ "id": "route-1", "http_method": "POST", "http_path": "/api/v1/payments/refund", "source_file": "src/routes.ts", "source_symbol": "refundPayment" }],
539
+ "in_model_only": [],
540
+ "ignored": []
541
+ },
542
+ "summary": {
543
+ "matched_count": 45,
544
+ "gap_count": 1,
545
+ "drift_count": 0,
546
+ "ignored_count": 0,
547
+ "total_graph_entries": 46,
548
+ "total_model_entries": 45
549
+ }
550
+ }
551
+ ```
552
+
553
+ **Response to user:**
554
+ "Verified against changeset `feat-payments`. Found 1 graph-only entry: `POST /api/v1/payments/refund` is in code but not in the changeset yet. All 45 existing endpoints match. Would you like me to add the missing endpoint to the changeset?"
555
+
556
+ ### Why This Matters
557
+
558
+ - User understands which model version was verified (important if they're comparing drafts)
559
+ - Helps debug: "Did you add this in the changeset?" → Check changeset_context
560
+ - Surfaces discrepancies early before applying changes
561
+
562
+ ---
563
+
564
+ ## Quick Reference
565
+
566
+ **Activation Triggers:**
567
+
568
+ - "What endpoints exist?" → `dr analyzer endpoints`
569
+ - "Is the model complete?" → `dr analyzer verify`
570
+ - "What services are here?" → `dr analyzer services` (+ user confirmation)
571
+ - "What databases?" → `dr analyzer datastores` (verify manually)
572
+ - "Does this call that?" → `dr analyzer callers|callees <fqn>`
573
+
574
+ **Confidence Levels:**
575
+
576
+ - 🟢 HIGH: `endpoints`, `verify` (graph-only/model-only detection), `query` (custom traversal)
577
+ - 🟡 MEDIUM: `discover`, `status`, `index`, `callers`, `callees`, `services` (checklist only)
578
+ - 🔴 LOW: `datastores` (consider, verify manually)
579
+
580
+ **Fallback When Analyzer Unavailable:**
581
+
582
+ - Mention capability once: "See `dr analyzer discover` to install analyzer support"
583
+ - Use Read/Glob/Grep for structural questions
584
+ - Do NOT repeatedly offer analyzer
585
+
586
+ **With Changesets:**
587
+
588
+ - Always quote `changeset_context.active_changeset` and `changeset_context.verified_against` from verify output
589
+ - Clarify which model version was checked (base_model vs changeset_view)
590
+ - Use terminology: **graph-only** for in_graph_only, **model-only** for in_model_only