@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
@@ -1,57 +1,70 @@
1
+ import { isTelemetryEnabled, startSpan, endSpan } from "../telemetry/index.js";
2
+ import { getErrorMessage } from "../utils/errors.js";
1
3
  class JsonSchemaExporter {
2
4
  name = "JSON Schema";
3
- supportedLayers = ["data-model", "data_model"];
5
+ supportedLayers = ["data-model"];
4
6
  async export(model, _options = {}) {
5
- let layer = await model.getLayer("data-model");
6
- if (layer || (layer = await model.getLayer("data_model")), !layer)
7
- throw new Error("No Data Model layer found in model");
8
- const rootSchema = {
9
- $schema: "http://json-schema.org/draft-07/schema#",
10
- $id: `${model.manifest.name.toLowerCase().replace(/\s+/g, "-")}-schema`,
11
- title: model.manifest.name,
12
- description: model.manifest.description || "Data model schema",
13
- type: "object",
14
- definitions: {}
15
- };
16
- for (const element of layer.listElements())
17
- if (element.type === "entity") {
18
- const entityName = element.name, properties = element.getProperty("properties"), required = element.getProperty("required"), description = element.description, entitySchema = {
7
+ const span = isTelemetryEnabled ? startSpan("export.format.json-schema") : null;
8
+ try {
9
+ const nodes = model.graph.getNodesByLayer("data-model");
10
+ if (nodes.length === 0)
11
+ throw new Error("No Data Model layer found in model");
12
+ const rootSchema = {
13
+ $schema: "http://json-schema.org/draft-07/schema#",
14
+ $id: `${model.manifest.name.toLowerCase().replace(/\s+/g, "-")}-schema`,
15
+ title: model.manifest.name,
16
+ description: model.manifest.description || "Data model schema",
17
+ type: "object",
18
+ definitions: {}
19
+ }, nodeTypeToSchemaType = {
20
+ arrayschema: "array",
21
+ stringschema: "string",
22
+ numericschema: "number",
23
+ objectschema: "object",
24
+ entity: "object"
25
+ };
26
+ for (const node of nodes) {
27
+ const entityName = node.name, attrs = node.attributes, properties = attrs?.properties, required = attrs?.required ?? node.properties?.required, description = node.description, schemaType = typeof attrs?.type == "string" ? attrs.type : nodeTypeToSchemaType[node.type] ?? "object", entitySchema = {
19
28
  title: entityName,
20
29
  ...description && { description },
21
- type: "object",
30
+ type: schemaType,
22
31
  ...properties && { properties },
23
32
  ...required && { required }
24
- }, additionalProperties = element.getProperty("additionalProperties");
33
+ }, additionalProperties = attrs?.additionalProperties;
25
34
  additionalProperties !== void 0 && (entitySchema.additionalProperties = additionalProperties);
26
- const constraints = element.getProperty("constraints");
27
- constraints && Object.assign(entitySchema, constraints), rootSchema.definitions[element.id] = entitySchema;
35
+ const constraints = attrs?.constraints;
36
+ constraints && Object.assign(entitySchema, constraints);
37
+ const sourceRef = attrs?.["x-source-reference"] || attrs?.["source-reference"] || node.source_reference;
38
+ sourceRef && (entitySchema["x-source-reference"] = sourceRef), rootSchema.definitions[node.id] = entitySchema;
28
39
  }
29
- const relationships = {};
30
- for (const element of layer.listElements())
31
- if (element.type === "entity") {
32
- for (const ref of element.references) {
33
- const refKey = `${element.id}-references`;
34
- relationships[refKey] || (relationships[refKey] = []), relationships[refKey].push({
35
- target: ref.target,
36
- type: ref.type
37
- });
38
- }
39
- for (const rel of element.relationships) {
40
- const relKey = `${element.id}-${rel.predicate}`;
40
+ const relationships = {}, edges = model.graph.getAllEdges(), nodeIds = new Set(nodes.map((n) => n.id));
41
+ for (const edge of edges)
42
+ if (nodeIds.has(edge.source) && nodeIds.has(edge.destination)) {
43
+ const relKey = `${edge.source}-${edge.predicate}`;
41
44
  relationships[relKey] || (relationships[relKey] = []), relationships[relKey].push({
42
- target: rel.target
45
+ target: edge.destination
43
46
  });
44
47
  }
45
- }
46
- Object.keys(relationships).length > 0 && (rootSchema.relationships = relationships);
47
- const metadata = {
48
- version: model.manifest.version || "1.0.0",
49
- ...model.manifest.author && { author: model.manifest.author },
50
- ...model.manifest.created && { created: model.manifest.created },
51
- ...model.manifest.modified && { modified: model.manifest.modified },
52
- entityCount: Array.from(layer.listElements()).filter((e) => e.type === "entity").length
53
- };
54
- return rootSchema.metadata = metadata, JSON.stringify(rootSchema, null, 2);
48
+ Object.keys(relationships).length > 0 && (rootSchema.relationships = relationships);
49
+ const entityCount = nodes.length, metadata = {
50
+ version: model.manifest.version || "1.0.0",
51
+ ...model.manifest.author && { author: model.manifest.author },
52
+ ...model.manifest.created && { created: model.manifest.created },
53
+ ...model.manifest.modified && { modified: model.manifest.modified },
54
+ entityCount
55
+ };
56
+ rootSchema.metadata = metadata;
57
+ const result = JSON.stringify(rootSchema, null, 2) + `
58
+ `;
59
+ return isTelemetryEnabled && span && (span.setAttribute("export.entityCount", Object.keys(rootSchema.definitions || {}).length), span.setAttribute("export.relationshipCount", Object.keys(relationships).length), span.setAttribute("export.size", result.length), span.setStatus({ code: 0 })), result;
60
+ } catch (error) {
61
+ throw isTelemetryEnabled && span && (span.recordException(error), span.setStatus({
62
+ code: 2,
63
+ message: getErrorMessage(error)
64
+ })), error;
65
+ } finally {
66
+ endSpan(span);
67
+ }
55
68
  }
56
69
  }
57
70
  export {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/export/json-schema-exporter.ts"],
4
- "sourcesContent": ["import type { Model } from \"../core/model.js\";\nimport type { Exporter, ExportOptions } from \"./types.js\";\n\n/**\n * JSON Schema Draft 7 Exporter for layer 7 (Data Model)\n */\nexport class JsonSchemaExporter implements Exporter {\n name = \"JSON Schema\";\n supportedLayers = [\"data-model\", \"data_model\"];\n\n async export(model: Model, _options: ExportOptions = {}): Promise<string> {\n // Try both naming conventions for data model layer\n let layer = await model.getLayer(\"data-model\");\n if (!layer) {\n layer = await model.getLayer(\"data_model\");\n }\n if (!layer) {\n throw new Error(\"No Data Model layer found in model\");\n }\n\n // Create a root schema that references all entities\n const rootSchema: Record<string, unknown> = {\n $schema: \"http://json-schema.org/draft-07/schema#\",\n $id: `${model.manifest.name.toLowerCase().replace(/\\s+/g, \"-\")}-schema`,\n title: model.manifest.name,\n description: model.manifest.description || \"Data model schema\",\n type: \"object\",\n definitions: {},\n };\n\n // Process each entity in the data model layer\n for (const element of layer.listElements()) {\n if (element.type === \"entity\") {\n const entityName = element.name;\n const properties = element.getProperty<Record<string, unknown>>(\n \"properties\"\n );\n const required = element.getProperty<string[]>(\"required\");\n const description = element.description;\n\n const entitySchema: Record<string, unknown> = {\n title: entityName,\n ...(description && { description }),\n type: \"object\",\n ...(properties && { properties }),\n ...(required && { required }),\n };\n\n // Add additional metadata\n const additionalProperties = element.getProperty<boolean>(\n \"additionalProperties\"\n );\n if (additionalProperties !== undefined) {\n entitySchema.additionalProperties = additionalProperties;\n }\n\n // Add constraints if present\n const constraints = element.getProperty<Record<string, unknown>>(\n \"constraints\"\n );\n if (constraints) {\n Object.assign(entitySchema, constraints);\n }\n\n (rootSchema.definitions as Record<string, unknown>)[element.id] = entitySchema;\n }\n }\n\n // Add relationships as references between entities\n const relationships: Record<string, unknown> = {};\n for (const element of layer.listElements()) {\n if (element.type === \"entity\") {\n for (const ref of element.references) {\n // Cross-layer reference - document it\n const refKey = `${element.id}-references`;\n if (!relationships[refKey]) {\n relationships[refKey] = [];\n }\n (relationships[refKey] as Array<{ target: string; type: string }>).push({\n target: ref.target,\n type: ref.type,\n });\n }\n\n for (const rel of element.relationships) {\n // Intra-layer relationship\n const relKey = `${element.id}-${rel.predicate}`;\n if (!relationships[relKey]) {\n relationships[relKey] = [];\n }\n (relationships[relKey] as Array<{ target: string }>).push({\n target: rel.target,\n });\n }\n }\n }\n\n if (Object.keys(relationships).length > 0) {\n rootSchema.relationships = relationships;\n }\n\n // Add metadata section\n const metadata: Record<string, unknown> = {\n version: model.manifest.version || \"1.0.0\",\n ...(model.manifest.author && { author: model.manifest.author }),\n ...(model.manifest.created && { created: model.manifest.created }),\n ...(model.manifest.modified && { modified: model.manifest.modified }),\n entityCount: Array.from(layer.listElements()).filter(\n (e) => e.type === \"entity\"\n ).length,\n };\n rootSchema.metadata = metadata;\n\n return JSON.stringify(rootSchema, null, 2);\n }\n}\n"],
5
- "mappings": "AAMM,MAAO,mBAAkB;EAC7B,OAAO;EACP,kBAAkB,CAAC,cAAc,YAAY;EAE7C,MAAM,OAAO,OAAc,WAA0B,CAAA,GAAE;AAErD,QAAI,QAAQ,MAAM,MAAM,SAAS,YAAY;AAI7C,QAHK,UACH,QAAQ,MAAM,MAAM,SAAS,YAAY,IAEvC,CAAC;AACH,YAAM,IAAI,MAAM,oCAAoC;AAItD,UAAM,aAAsC;MAC1C,SAAS;MACT,KAAK,GAAG,MAAM,SAAS,KAAK,YAAW,EAAG,QAAQ,QAAQ,GAAG,CAAC;MAC9D,OAAO,MAAM,SAAS;MACtB,aAAa,MAAM,SAAS,eAAe;MAC3C,MAAM;MACN,aAAa,CAAA;;AAIf,eAAW,WAAW,MAAM,aAAY;AACtC,UAAI,QAAQ,SAAS,UAAU;AAC7B,cAAM,aAAa,QAAQ,MACrB,aAAa,QAAQ,YACzB,YAAY,GAER,WAAW,QAAQ,YAAsB,UAAU,GACnD,cAAc,QAAQ,aAEtB,eAAwC;UAC5C,OAAO;UACP,GAAI,eAAe,EAAE,YAAW;UAChC,MAAM;UACN,GAAI,cAAc,EAAE,WAAU;UAC9B,GAAI,YAAY,EAAE,SAAQ;WAItB,uBAAuB,QAAQ,YACnC,sBAAsB;AAExB,QAAI,yBAAyB,WAC3B,aAAa,uBAAuB;AAItC,cAAM,cAAc,QAAQ,YAC1B,aAAa;AAEf,QAAI,eACF,OAAO,OAAO,cAAc,WAAW,GAGxC,WAAW,YAAwC,QAAQ,EAAE,IAAI;MACpE;AAIF,UAAM,gBAAyC,CAAA;AAC/C,eAAW,WAAW,MAAM,aAAY;AACtC,UAAI,QAAQ,SAAS,UAAU;AAC7B,mBAAW,OAAO,QAAQ,YAAY;AAEpC,gBAAM,SAAS,GAAG,QAAQ,EAAE;AAC5B,UAAK,cAAc,MAAM,MACvB,cAAc,MAAM,IAAI,CAAA,IAEzB,cAAc,MAAM,EAA8C,KAAK;YACtE,QAAQ,IAAI;YACZ,MAAM,IAAI;WACX;QACH;AAEA,mBAAW,OAAO,QAAQ,eAAe;AAEvC,gBAAM,SAAS,GAAG,QAAQ,EAAE,IAAI,IAAI,SAAS;AAC7C,UAAK,cAAc,MAAM,MACvB,cAAc,MAAM,IAAI,CAAA,IAEzB,cAAc,MAAM,EAAgC,KAAK;YACxD,QAAQ,IAAI;WACb;QACH;MACF;AAGF,IAAI,OAAO,KAAK,aAAa,EAAE,SAAS,MACtC,WAAW,gBAAgB;AAI7B,UAAM,WAAoC;MACxC,SAAS,MAAM,SAAS,WAAW;MACnC,GAAI,MAAM,SAAS,UAAU,EAAE,QAAQ,MAAM,SAAS,OAAM;MAC5D,GAAI,MAAM,SAAS,WAAW,EAAE,SAAS,MAAM,SAAS,QAAO;MAC/D,GAAI,MAAM,SAAS,YAAY,EAAE,UAAU,MAAM,SAAS,SAAQ;MAClE,aAAa,MAAM,KAAK,MAAM,aAAY,CAAE,EAAE,OAC5C,CAAC,MAAM,EAAE,SAAS,QAAQ,EAC1B;;AAEJ,sBAAW,WAAW,UAEf,KAAK,UAAU,YAAY,MAAM,CAAC;EAC3C;;",
4
+ "sourcesContent": ["import type { Model } from \"../core/model.js\";\nimport type { Exporter, ExportOptions } from \"./types.js\";\nimport { isTelemetryEnabled, startSpan, endSpan } from \"../telemetry/index.js\";\nimport { getErrorMessage } from \"../utils/errors.js\";\n\n/**\n * JSON Schema Draft 7 Exporter for layer 7 (Data Model)\n */\nexport class JsonSchemaExporter implements Exporter {\n name = \"JSON Schema\";\n supportedLayers = [\"data-model\"];\n\n async export(model: Model, _options: ExportOptions = {}): Promise<string> {\n const span = isTelemetryEnabled ? startSpan(\"export.format.json-schema\") : null;\n\n try {\n // Query graph model for data-model layer nodes\n const nodes = model.graph.getNodesByLayer(\"data-model\");\n if (nodes.length === 0) {\n throw new Error(\"No Data Model layer found in model\");\n }\n\n // Create a root schema that references all entities\n const rootSchema: Record<string, unknown> = {\n $schema: \"http://json-schema.org/draft-07/schema#\",\n $id: `${model.manifest.name.toLowerCase().replace(/\\s+/g, \"-\")}-schema`,\n title: model.manifest.name,\n description: model.manifest.description || \"Data model schema\",\n type: \"object\",\n definitions: {},\n };\n\n // Map from spec node type to JSON Schema type for cases where the type\n // is determined by the node kind rather than a stored attribute.\n const nodeTypeToSchemaType: Record<string, string> = {\n arrayschema: \"array\",\n stringschema: \"string\",\n numericschema: \"number\",\n objectschema: \"object\",\n entity: \"object\",\n };\n\n // Process all data-model nodes as JSON Schema definitions.\n // The spec uses types: jsonschema, schemadefinition, objectschema, arrayschema,\n // numericschema, stringschema, schemacomposition, schemaproperty, reference, entity.\n for (const node of nodes) {\n const entityName = node.name;\n // GraphNode stores element attributes as a direct field (node.attributes),\n // not nested under node.properties.\n const attrs = node.attributes as Record<string, unknown> | undefined;\n // 'properties' in JSON Schema context means the sub-schemas for object properties,\n // stored in the element's attributes.properties field.\n const properties = attrs?.properties as Record<string, unknown> | undefined;\n const required = (attrs?.required as string[] | undefined) ?? (node.properties?.required as string[] | undefined);\n const description = node.description;\n\n // Derive JSON Schema type: prefer the value stored in the element's attributes\n // (user-specified), then fall back to the node-type map, then \"object\".\n const schemaType =\n typeof attrs?.type === \"string\"\n ? attrs.type\n : (nodeTypeToSchemaType[node.type] ?? \"object\");\n\n const entitySchema: Record<string, unknown> = {\n title: entityName,\n ...(description && { description }),\n type: schemaType,\n ...(properties && { properties }),\n ...(required && { required }),\n };\n\n // Add additional metadata\n const additionalProperties = attrs?.additionalProperties as boolean;\n if (additionalProperties !== undefined) {\n entitySchema.additionalProperties = additionalProperties;\n }\n\n // Add constraints if present\n const constraints = attrs?.constraints as Record<string, unknown>;\n if (constraints) {\n Object.assign(entitySchema, constraints);\n }\n\n // Add source reference if present (check both naming conventions)\n const sourceRef =\n attrs?.[\"x-source-reference\"] || attrs?.[\"source-reference\"]\n || node.source_reference;\n if (sourceRef) {\n entitySchema[\"x-source-reference\"] = sourceRef;\n }\n\n (rootSchema.definitions as Record<string, unknown>)[node.id] = entitySchema;\n }\n\n // Add relationships as references between entities - query graph edges\n const relationships: Record<string, unknown> = {};\n const edges = model.graph.getAllEdges();\n const nodeIds = new Set(nodes.map((n) => n.id));\n\n for (const edge of edges) {\n // Only include edges where source is an entity in the data-model layer\n if (nodeIds.has(edge.source) && nodeIds.has(edge.destination)) {\n const relKey = `${edge.source}-${edge.predicate}`;\n if (!relationships[relKey]) {\n relationships[relKey] = [];\n }\n (relationships[relKey] as Array<{ target: string }>).push({\n target: edge.destination,\n });\n }\n }\n\n if (Object.keys(relationships).length > 0) {\n rootSchema.relationships = relationships;\n }\n\n // Add metadata section\n const entityCount = nodes.length;\n const metadata: Record<string, unknown> = {\n version: model.manifest.version || \"1.0.0\",\n ...(model.manifest.author && { author: model.manifest.author }),\n ...(model.manifest.created && { created: model.manifest.created }),\n ...(model.manifest.modified && { modified: model.manifest.modified }),\n entityCount,\n };\n rootSchema.metadata = metadata;\n\n const result = JSON.stringify(rootSchema, null, 2) + \"\\n\";\n\n if (isTelemetryEnabled && span) {\n (span as any).setAttribute(\n \"export.entityCount\",\n Object.keys(rootSchema.definitions || {}).length\n );\n (span as any).setAttribute(\"export.relationshipCount\", Object.keys(relationships).length);\n (span as any).setAttribute(\"export.size\", result.length);\n (span as any).setStatus({ code: 0 });\n }\n\n return result;\n } catch (error) {\n if (isTelemetryEnabled && span) {\n (span as any).recordException(error as Error);\n (span as any).setStatus({\n code: 2,\n message: getErrorMessage(error),\n });\n }\n throw error;\n } finally {\n endSpan(span);\n }\n }\n}\n"],
5
+ "mappings": "AAEA,SAAS,oBAAoB,WAAW,eAAe;AACvD,SAAS,uBAAuB;AAK1B,MAAO,mBAAkB;EAC7B,OAAO;EACP,kBAAkB,CAAC,YAAY;EAE/B,MAAM,OAAO,OAAc,WAA0B,CAAA,GAAE;AACrD,UAAM,OAAO,qBAAqB,UAAU,2BAA2B,IAAI;AAE3E,QAAI;AAEF,YAAM,QAAQ,MAAM,MAAM,gBAAgB,YAAY;AACtD,UAAI,MAAM,WAAW;AACnB,cAAM,IAAI,MAAM,oCAAoC;AAItD,YAAM,aAAsC;QAC1C,SAAS;QACT,KAAK,GAAG,MAAM,SAAS,KAAK,YAAW,EAAG,QAAQ,QAAQ,GAAG,CAAC;QAC9D,OAAO,MAAM,SAAS;QACtB,aAAa,MAAM,SAAS,eAAe;QAC3C,MAAM;QACN,aAAa,CAAA;SAKT,uBAA+C;QACnD,aAAa;QACb,cAAc;QACd,eAAe;QACf,cAAc;QACd,QAAQ;;AAMV,iBAAW,QAAQ,OAAO;AACxB,cAAM,aAAa,KAAK,MAGlB,QAAQ,KAAK,YAGb,aAAa,OAAO,YACpB,WAAY,OAAO,YAAsC,KAAK,YAAY,UAC1E,cAAc,KAAK,aAInB,aACJ,OAAO,OAAO,QAAS,WACnB,MAAM,OACL,qBAAqB,KAAK,IAAI,KAAK,UAEpC,eAAwC;UAC5C,OAAO;UACP,GAAI,eAAe,EAAE,YAAW;UAChC,MAAM;UACN,GAAI,cAAc,EAAE,WAAU;UAC9B,GAAI,YAAY,EAAE,SAAQ;WAItB,uBAAuB,OAAO;AACpC,QAAI,yBAAyB,WAC3B,aAAa,uBAAuB;AAItC,cAAM,cAAc,OAAO;AAC3B,QAAI,eACF,OAAO,OAAO,cAAc,WAAW;AAIzC,cAAM,YACJ,QAAQ,oBAAoB,KAAK,QAAQ,kBAAkB,KACxD,KAAK;AACV,QAAI,cACF,aAAa,oBAAoB,IAAI,YAGtC,WAAW,YAAwC,KAAK,EAAE,IAAI;MACjE;AAGA,YAAM,gBAAyC,CAAA,GACzC,QAAQ,MAAM,MAAM,YAAW,GAC/B,UAAU,IAAI,IAAI,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;AAE9C,iBAAW,QAAQ;AAEjB,YAAI,QAAQ,IAAI,KAAK,MAAM,KAAK,QAAQ,IAAI,KAAK,WAAW,GAAG;AAC7D,gBAAM,SAAS,GAAG,KAAK,MAAM,IAAI,KAAK,SAAS;AAC/C,UAAK,cAAc,MAAM,MACvB,cAAc,MAAM,IAAI,CAAA,IAEzB,cAAc,MAAM,EAAgC,KAAK;YACxD,QAAQ,KAAK;WACd;QACH;AAGF,MAAI,OAAO,KAAK,aAAa,EAAE,SAAS,MACtC,WAAW,gBAAgB;AAI7B,YAAM,cAAc,MAAM,QACpB,WAAoC;QACxC,SAAS,MAAM,SAAS,WAAW;QACnC,GAAI,MAAM,SAAS,UAAU,EAAE,QAAQ,MAAM,SAAS,OAAM;QAC5D,GAAI,MAAM,SAAS,WAAW,EAAE,SAAS,MAAM,SAAS,QAAO;QAC/D,GAAI,MAAM,SAAS,YAAY,EAAE,UAAU,MAAM,SAAS,SAAQ;QAClE;;AAEF,iBAAW,WAAW;AAEtB,YAAM,SAAS,KAAK,UAAU,YAAY,MAAM,CAAC,IAAI;;AAErD,aAAI,sBAAsB,SACvB,KAAa,aACZ,sBACA,OAAO,KAAK,WAAW,eAAe,CAAA,CAAE,EAAE,MAAM,GAEjD,KAAa,aAAa,4BAA4B,OAAO,KAAK,aAAa,EAAE,MAAM,GACvF,KAAa,aAAa,eAAe,OAAO,MAAM,GACtD,KAAa,UAAU,EAAE,MAAM,EAAC,CAAE,IAG9B;IACT,SAAS,OAAO;AACd,YAAI,sBAAsB,SACvB,KAAa,gBAAgB,KAAc,GAC3C,KAAa,UAAU;QACtB,MAAM;QACN,SAAS,gBAAgB,KAAK;OAC/B,IAEG;IACR;AACE,cAAQ,IAAI;IACd;EACF;;",
6
6
  "names": []
7
7
  }
@@ -1,96 +1,118 @@
1
1
  import { ALL_LAYERS } from "./types.js";
2
+ import { isTelemetryEnabled, startSpan, endSpan } from "../telemetry/index.js";
3
+ import { formatLayerName } from "../utils/layer-name-formatter.js";
4
+ import { getErrorMessage } from "../utils/errors.js";
5
+ import { escapeMarkdown, valueToMarkdown, getLayerDescription } from "./markdown-utils.js";
2
6
  class MarkdownExporter {
3
7
  name = "Markdown";
4
8
  supportedLayers = ALL_LAYERS;
5
- layerDescriptions = {
6
- motivation: "Goals, requirements, drivers, and strategic outcomes of the architecture.",
7
- business: "Business processes, functions, roles, and services.",
8
- security: "Authentication, authorization, security threats, and controls.",
9
- application: "Application components, services, and interactions.",
10
- technology: "Infrastructure, platforms, systems, and technology components.",
11
- api: "REST APIs, operations, endpoints, and API integrations.",
12
- "data-model": "Data entities, relationships, and data structure definitions.",
13
- "data-store": "Databases, data stores, and persistence mechanisms.",
14
- ux: "User interface components, screens, and user experience elements.",
15
- navigation: "Application routing, navigation flows, and page structures.",
16
- apm: "Observability, monitoring, metrics, logging, and tracing.",
17
- testing: "Test strategies, test cases, test data, and test coverage."
18
- };
19
9
  async export(model, options = {}) {
20
- const lines = [];
21
- lines.push(`# ${this.escapeMarkdown(model.manifest.name)}`), lines.push(""), model.manifest.description && (lines.push(`${model.manifest.description}`), lines.push("")), lines.push("## Model Information"), lines.push(""), lines.push("| Property | Value |"), lines.push("| -------- | ----- |"), lines.push(`| Version | ${model.manifest.version || "1.0.0"} |`), model.manifest.author && lines.push(`| Author | ${this.escapeMarkdown(model.manifest.author)} |`), model.manifest.created && lines.push(`| Created | ${model.manifest.created} |`), model.manifest.modified && lines.push(`| Modified | ${model.manifest.modified} |`), lines.push("");
22
- const layersToExport = options.layers || this.supportedLayers;
23
- for (const layerName of layersToExport) {
24
- const layer = await model.getLayer(layerName);
25
- if (!layer)
26
- continue;
27
- const elements = Array.from(layer.listElements());
28
- if (elements.length === 0)
29
- continue;
30
- lines.push(`## Layer: ${this.formatLayerName(layerName)}`), lines.push("");
31
- const description = this.layerDescriptions[layerName];
32
- description && (lines.push(`*${description}*`), lines.push("")), lines.push(`### Elements (${elements.length})`), lines.push(""), lines.push("| ID | Name | Type | Description |"), lines.push("| -- | ---- | ---- | ----------- |");
33
- for (const element of elements) {
34
- const id = this.escapeMarkdown(element.id), name = this.escapeMarkdown(element.name), type = this.escapeMarkdown(element.type), desc = element.description ? this.escapeMarkdown(element.description).substring(0, 100) : "";
35
- lines.push(`| \`${id}\` | ${name} | ${type} | ${desc} |`);
36
- }
37
- lines.push(""), lines.push("### Element Details"), lines.push("");
38
- for (const element of elements) {
39
- if (lines.push(`#### ${this.escapeMarkdown(element.name)} (\`${element.id}\`)`), lines.push(""), element.description && (lines.push(`${element.description}`), lines.push("")), lines.push("**Type:** " + element.type), lines.push(""), Object.keys(element.properties).length > 0) {
40
- lines.push("**Properties:**"), lines.push(""), lines.push("| Property | Value |"), lines.push("| -------- | ----- |");
41
- for (const [key, value] of Object.entries(element.properties)) {
42
- const displayValue = this.valueToMarkdown(value);
43
- lines.push(`| \`${key}\` | ${displayValue} |`);
44
- }
45
- lines.push("");
10
+ const span = isTelemetryEnabled ? startSpan("export.format.markdown", {
11
+ "export.layerCount": options.layers?.length || this.supportedLayers.length
12
+ }) : null;
13
+ try {
14
+ const lines = [];
15
+ lines.push(`# ${this.escapeMarkdownLocal(model.manifest.name)}`), lines.push(""), model.manifest.description && (lines.push(`${model.manifest.description}`), lines.push("")), lines.push("## Model Information"), lines.push(""), lines.push("| Property | Value |"), lines.push("| -------- | ----- |"), lines.push(`| Version | ${model.manifest.version || "1.0.0"} |`), model.manifest.author && lines.push(`| Author | ${this.escapeMarkdownLocal(model.manifest.author)} |`), model.manifest.created && lines.push(`| Created | ${model.manifest.created} |`), model.manifest.modified && lines.push(`| Modified | ${model.manifest.modified} |`), lines.push("");
16
+ const layersToExport = options.layers || this.supportedLayers;
17
+ for (const layerName of layersToExport) {
18
+ const layer = await model.getLayer(layerName);
19
+ if (!layer)
20
+ continue;
21
+ const elements = Array.from(layer.listElements());
22
+ if (elements.length === 0)
23
+ continue;
24
+ lines.push(`## Layer: ${this.formatLayerName(layerName)}`), lines.push("");
25
+ const description = this.getLayerDescription(layerName);
26
+ description && (lines.push(`*${description}*`), lines.push("")), lines.push(`### Elements (${elements.length})`), lines.push(""), lines.push("| ID | Name | Type | Description |"), lines.push("| -- | ---- | ---- | ----------- |");
27
+ for (const element of elements) {
28
+ const displayId = element.path || element.id, id = this.escapeMarkdownLocal(displayId), name = this.escapeMarkdownLocal(element.name), type = this.escapeMarkdownLocal(element.type), desc = element.description ? this.escapeMarkdownLocal(element.description).substring(0, 100) : "";
29
+ lines.push(`| \`${id}\` | ${name} | ${type} | ${desc} |`);
46
30
  }
47
- if (element.references.length > 0) {
48
- lines.push("**Cross-Layer References:**"), lines.push("");
49
- for (const ref of element.references) {
50
- const refDesc = ref.description ? ` - ${this.escapeMarkdown(ref.description)}` : "";
51
- lines.push(`- **${ref.type}**: \`${ref.target}\`${refDesc}`);
31
+ lines.push(""), lines.push("### Element Details"), lines.push("");
32
+ for (const element of elements) {
33
+ const displayId = element.path || element.id;
34
+ lines.push(`#### ${this.escapeMarkdownLocal(element.name)} (\`${displayId}\`)`), lines.push(""), element.description && (lines.push(`${element.description}`), lines.push("")), lines.push("**Type:** " + element.type), lines.push("");
35
+ const sourceRef = element.getSourceReference();
36
+ if (sourceRef && (lines.push("### Source Code Location"), lines.push(""), lines.push(`**Provenance**: ${sourceRef.provenance}`), lines.push(""), lines.push("**Locations:**"), lines.push(""), (sourceRef.locations ?? []).forEach((loc, idx) => {
37
+ lines.push(`${idx + 1}. \`${this.escapeMarkdownLocal(loc.file)}\``), loc.symbol && lines.push(` - Symbol: \`${this.escapeMarkdownLocal(loc.symbol)}\``);
38
+ }), lines.push(""), sourceRef.repository)) {
39
+ if (lines.push("**Repository Context:**"), lines.push(""), sourceRef.repository.url && lines.push(`- Remote: ${sourceRef.repository.url}`), sourceRef.repository.commit) {
40
+ const shortCommit = sourceRef.repository.commit.substring(0, 7);
41
+ sourceRef.repository.url ? lines.push(`- Commit: [\`${shortCommit}\`](${sourceRef.repository.url}/commit/${sourceRef.repository.commit})`) : lines.push(`- Commit: \`${shortCommit}\``);
42
+ }
43
+ lines.push("");
44
+ }
45
+ if (Object.keys(element.attributes).length > 0) {
46
+ lines.push("**Properties:**"), lines.push(""), lines.push("| Property | Value |"), lines.push("| -------- | ----- |");
47
+ for (const [key, value] of Object.entries(element.attributes)) {
48
+ const displayValue = this.valueToMarkdownLocal(value);
49
+ lines.push(`| \`${key}\` | ${displayValue} |`);
50
+ }
51
+ lines.push("");
52
+ }
53
+ if (element.references.length > 0) {
54
+ lines.push("**Cross-Layer References:**"), lines.push("");
55
+ for (const ref of element.references) {
56
+ const refDesc = ref.description ? ` - ${this.escapeMarkdownLocal(ref.description)}` : "";
57
+ lines.push(`- **${ref.type}**: \`${ref.target}\`${refDesc}`);
58
+ }
59
+ lines.push("");
60
+ }
61
+ if (element.relationships.length > 0) {
62
+ lines.push("**Relationships:**"), lines.push("");
63
+ for (const rel of element.relationships)
64
+ lines.push(`- **${rel.predicate}**: \`${rel.target}\``);
65
+ lines.push("");
52
66
  }
53
- lines.push("");
54
- }
55
- if (element.relationships.length > 0) {
56
- lines.push("**Relationships:**"), lines.push("");
57
- for (const rel of element.relationships)
58
- lines.push(`- **${rel.predicate}**: \`${rel.target}\``);
59
- lines.push("");
60
67
  }
68
+ lines.push("### Layer Summary"), lines.push(""), lines.push(`- **Total Elements:** ${elements.length}`);
69
+ const refCount = elements.reduce((sum, e) => sum + e.references.length, 0), relCount = elements.reduce((sum, e) => sum + e.relationships.length, 0);
70
+ lines.push(`- **Cross-Layer References:** ${refCount}`), lines.push(`- **Relationships:** ${relCount}`), lines.push(""), lines.push("---"), lines.push("");
61
71
  }
62
- lines.push("### Layer Summary"), lines.push(""), lines.push(`- **Total Elements:** ${elements.length}`);
63
- const refCount = elements.reduce((sum, e) => sum + e.references.length, 0), relCount = elements.reduce((sum, e) => sum + e.relationships.length, 0);
64
- lines.push(`- **Cross-Layer References:** ${refCount}`), lines.push(`- **Relationships:** ${relCount}`), lines.push(""), lines.push("---"), lines.push("");
65
- }
66
- lines.push("## Architecture Summary"), lines.push("");
67
- let totalElements = 0, totalReferences = 0, totalRelationships = 0;
68
- for (const layerName of layersToExport) {
69
- const layer = await model.getLayer(layerName);
70
- if (layer)
71
- for (const element of layer.listElements())
72
- totalElements++, totalReferences += element.references.length, totalRelationships += element.relationships.length;
73
- }
74
- return lines.push("| Metric | Count |"), lines.push("| ------ | ----- |"), lines.push(`| Total Elements | ${totalElements} |`), lines.push(`| Cross-Layer References | ${totalReferences} |`), lines.push(`| Relationships | ${totalRelationships} |`), lines.push(""), lines.join(`
72
+ lines.push("## Architecture Summary"), lines.push("");
73
+ let totalElements = 0, totalReferences = 0, totalRelationships = 0;
74
+ for (const layerName of layersToExport) {
75
+ const layer = await model.getLayer(layerName);
76
+ if (layer)
77
+ for (const element of layer.listElements())
78
+ totalElements++, totalReferences += element.references.length, totalRelationships += element.relationships.length;
79
+ }
80
+ lines.push("| Metric | Count |"), lines.push("| ------ | ----- |"), lines.push(`| Total Elements | ${totalElements} |`), lines.push(`| Cross-Layer References | ${totalReferences} |`), lines.push(`| Relationships | ${totalRelationships} |`), lines.push("");
81
+ const result = lines.join(`
75
82
  `);
83
+ return isTelemetryEnabled && span && (span.setAttribute("export.elementCount", totalElements), span.setAttribute("export.referenceCount", totalReferences), span.setAttribute("export.relationshipCount", totalRelationships), span.setAttribute("export.size", result.length), span.setStatus({ code: 0 })), result;
84
+ } catch (error) {
85
+ throw isTelemetryEnabled && span && (span.recordException(error), span.setStatus({
86
+ code: 2,
87
+ message: getErrorMessage(error)
88
+ })), error;
89
+ } finally {
90
+ endSpan(span);
91
+ }
76
92
  }
77
93
  /**
78
94
  * Escape markdown special characters
79
95
  */
80
- escapeMarkdown(str) {
81
- return str.replace(/\\/g, "\\\\").replace(/\|/g, "\\|").replace(/\*/g, "\\*").replace(/\[/g, "\\[").replace(/\]/g, "\\]").replace(/\{/g, "\\{").replace(/\}/g, "\\}");
96
+ escapeMarkdownLocal(str) {
97
+ return escapeMarkdown(str);
82
98
  }
83
99
  /**
84
100
  * Format layer name for display
85
101
  */
86
102
  formatLayerName(name) {
87
- return name.split("-").map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(" ");
103
+ return formatLayerName(name);
104
+ }
105
+ /**
106
+ * Get layer description
107
+ */
108
+ getLayerDescription(layer) {
109
+ return getLayerDescription(layer);
88
110
  }
89
111
  /**
90
112
  * Convert value to markdown representation
91
113
  */
92
- valueToMarkdown(value) {
93
- return typeof value == "string" ? this.escapeMarkdown(value) : typeof value == "number" || typeof value == "boolean" ? String(value) : Array.isArray(value) ? `[${value.map((v) => this.valueToMarkdown(v)).join(", ")}]` : value && typeof value == "object" ? `\`${this.escapeMarkdown(JSON.stringify(value))}\`` : String(value);
114
+ valueToMarkdownLocal(value) {
115
+ return valueToMarkdown(value);
94
116
  }
95
117
  }
96
118
  export {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/export/markdown-exporter.ts"],
4
- "sourcesContent": ["import type { Model } from \"../core/model.js\";\nimport type { Exporter, ExportOptions } from \"./types.js\";\nimport { ALL_LAYERS } from \"./types.js\";\n\n/**\n * Markdown Exporter - generates comprehensive markdown documentation\n * Supports all 12 layers\n */\nexport class MarkdownExporter implements Exporter {\n name = \"Markdown\";\n supportedLayers = ALL_LAYERS;\n\n private readonly layerDescriptions: Record<string, string> = {\n motivation:\n \"Goals, requirements, drivers, and strategic outcomes of the architecture.\",\n business:\n \"Business processes, functions, roles, and services.\",\n security:\n \"Authentication, authorization, security threats, and controls.\",\n application:\n \"Application components, services, and interactions.\",\n technology:\n \"Infrastructure, platforms, systems, and technology components.\",\n api: \"REST APIs, operations, endpoints, and API integrations.\",\n \"data-model\":\n \"Data entities, relationships, and data structure definitions.\",\n \"data-store\":\n \"Databases, data stores, and persistence mechanisms.\",\n ux: \"User interface components, screens, and user experience elements.\",\n navigation:\n \"Application routing, navigation flows, and page structures.\",\n apm: \"Observability, monitoring, metrics, logging, and tracing.\",\n testing:\n \"Test strategies, test cases, test data, and test coverage.\",\n };\n\n async export(model: Model, options: ExportOptions = {}): Promise<string> {\n const lines: string[] = [];\n\n // Document header\n lines.push(`# ${this.escapeMarkdown(model.manifest.name)}`);\n lines.push(\"\");\n\n if (model.manifest.description) {\n lines.push(`${model.manifest.description}`);\n lines.push(\"\");\n }\n\n // Model metadata\n lines.push(\"## Model Information\");\n lines.push(\"\");\n lines.push(\n `| Property | Value |`\n );\n lines.push(`| -------- | ----- |`);\n lines.push(\n `| Version | ${model.manifest.version || \"1.0.0\"} |`\n );\n if (model.manifest.author) {\n lines.push(\n `| Author | ${this.escapeMarkdown(model.manifest.author)} |`\n );\n }\n if (model.manifest.created) {\n lines.push(\n `| Created | ${model.manifest.created} |`\n );\n }\n if (model.manifest.modified) {\n lines.push(\n `| Modified | ${model.manifest.modified} |`\n );\n }\n lines.push(\"\");\n\n const layersToExport = options.layers || this.supportedLayers;\n\n // Generate documentation for each layer\n for (const layerName of layersToExport) {\n const layer = await model.getLayer(layerName);\n if (!layer) continue;\n\n const elements = Array.from(layer.listElements());\n if (elements.length === 0) continue;\n\n lines.push(`## Layer: ${this.formatLayerName(layerName)}`);\n lines.push(\"\");\n\n const description = this.layerDescriptions[layerName];\n if (description) {\n lines.push(`*${description}*`);\n lines.push(\"\");\n }\n\n lines.push(`### Elements (${elements.length})`);\n lines.push(\"\");\n\n // Element table\n lines.push(\n `| ID | Name | Type | Description |`\n );\n lines.push(\n `| -- | ---- | ---- | ----------- |`\n );\n\n for (const element of elements) {\n const id = this.escapeMarkdown(element.id);\n const name = this.escapeMarkdown(element.name);\n const type = this.escapeMarkdown(element.type);\n const desc = element.description\n ? this.escapeMarkdown(element.description).substring(0, 100)\n : \"\";\n\n lines.push(`| \\`${id}\\` | ${name} | ${type} | ${desc} |`);\n }\n\n lines.push(\"\");\n\n // Element details\n lines.push(`### Element Details`);\n lines.push(\"\");\n\n for (const element of elements) {\n lines.push(\n `#### ${this.escapeMarkdown(element.name)} (\\`${element.id}\\`)`\n );\n lines.push(\"\");\n\n if (element.description) {\n lines.push(`${element.description}`);\n lines.push(\"\");\n }\n\n lines.push(\"**Type:** \" + element.type);\n lines.push(\"\");\n\n // Properties\n if (Object.keys(element.properties).length > 0) {\n lines.push(\"**Properties:**\");\n lines.push(\"\");\n lines.push(\n `| Property | Value |`\n );\n lines.push(\n `| -------- | ----- |`\n );\n\n for (const [key, value] of Object.entries(element.properties)) {\n const displayValue = this.valueToMarkdown(value);\n lines.push(\n `| \\`${key}\\` | ${displayValue} |`\n );\n }\n lines.push(\"\");\n }\n\n // References\n if (element.references.length > 0) {\n lines.push(\"**Cross-Layer References:**\");\n lines.push(\"\");\n\n for (const ref of element.references) {\n const refDesc = ref.description\n ? ` - ${this.escapeMarkdown(ref.description)}`\n : \"\";\n lines.push(\n `- **${ref.type}**: \\`${ref.target}\\`${refDesc}`\n );\n }\n lines.push(\"\");\n }\n\n // Relationships\n if (element.relationships.length > 0) {\n lines.push(\"**Relationships:**\");\n lines.push(\"\");\n\n for (const rel of element.relationships) {\n lines.push(\n `- **${rel.predicate}**: \\`${rel.target}\\``\n );\n }\n lines.push(\"\");\n }\n }\n\n // Layer summary\n lines.push(`### Layer Summary`);\n lines.push(\"\");\n lines.push(\n `- **Total Elements:** ${elements.length}`\n );\n\n const refCount = elements.reduce(\n (sum, e) => sum + e.references.length,\n 0\n );\n const relCount = elements.reduce(\n (sum, e) => sum + e.relationships.length,\n 0\n );\n\n lines.push(\n `- **Cross-Layer References:** ${refCount}`\n );\n lines.push(\n `- **Relationships:** ${relCount}`\n );\n\n lines.push(\"\");\n lines.push(\"---\");\n lines.push(\"\");\n }\n\n // Architecture Summary\n lines.push(\"## Architecture Summary\");\n lines.push(\"\");\n\n let totalElements = 0;\n let totalReferences = 0;\n let totalRelationships = 0;\n\n for (const layerName of layersToExport) {\n const layer = await model.getLayer(layerName);\n if (!layer) continue;\n\n for (const element of layer.listElements()) {\n totalElements++;\n totalReferences += element.references.length;\n totalRelationships += element.relationships.length;\n }\n }\n\n lines.push(\n `| Metric | Count |`\n );\n lines.push(\n `| ------ | ----- |`\n );\n lines.push(\n `| Total Elements | ${totalElements} |`\n );\n lines.push(\n `| Cross-Layer References | ${totalReferences} |`\n );\n lines.push(\n `| Relationships | ${totalRelationships} |`\n );\n lines.push(\"\");\n\n return lines.join(\"\\n\");\n }\n\n /**\n * Escape markdown special characters\n */\n private escapeMarkdown(str: string): string {\n return str\n .replace(/\\\\/g, \"\\\\\\\\\")\n .replace(/\\|/g, \"\\\\|\")\n .replace(/\\*/g, \"\\\\*\")\n .replace(/\\[/g, \"\\\\[\")\n .replace(/\\]/g, \"\\\\]\")\n .replace(/\\{/g, \"\\\\{\")\n .replace(/\\}/g, \"\\\\}\");\n }\n\n /**\n * Format layer name for display\n */\n private formatLayerName(name: string): string {\n return name\n .split(\"-\")\n .map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n .join(\" \");\n }\n\n /**\n * Convert value to markdown representation\n */\n private valueToMarkdown(value: unknown): string {\n if (typeof value === \"string\") return this.escapeMarkdown(value);\n if (typeof value === \"number\") return String(value);\n if (typeof value === \"boolean\") return String(value);\n if (Array.isArray(value)) {\n return `[${value.map((v) => this.valueToMarkdown(v)).join(\", \")}]`;\n }\n if (value && typeof value === \"object\") {\n return `\\`${this.escapeMarkdown(JSON.stringify(value))}\\``;\n }\n return String(value);\n }\n}\n"],
5
- "mappings": "AAEA,SAAS,kBAAkB;AAMrB,MAAO,iBAAgB;EAC3B,OAAO;EACP,kBAAkB;EAED,oBAA4C;IAC3D,YACE;IACF,UACE;IACF,UACE;IACF,aACE;IACF,YACE;IACF,KAAK;IACL,cACE;IACF,cACE;IACF,IAAI;IACJ,YACE;IACF,KAAK;IACL,SACE;;EAGJ,MAAM,OAAO,OAAc,UAAyB,CAAA,GAAE;AACpD,UAAM,QAAkB,CAAA;AAGxB,UAAM,KAAK,KAAK,KAAK,eAAe,MAAM,SAAS,IAAI,CAAC,EAAE,GAC1D,MAAM,KAAK,EAAE,GAET,MAAM,SAAS,gBACjB,MAAM,KAAK,GAAG,MAAM,SAAS,WAAW,EAAE,GAC1C,MAAM,KAAK,EAAE,IAIf,MAAM,KAAK,sBAAsB,GACjC,MAAM,KAAK,EAAE,GACb,MAAM,KACJ,sBAAsB,GAExB,MAAM,KAAK,sBAAsB,GACjC,MAAM,KACJ,eAAe,MAAM,SAAS,WAAW,OAAO,IAAI,GAElD,MAAM,SAAS,UACjB,MAAM,KACJ,cAAc,KAAK,eAAe,MAAM,SAAS,MAAM,CAAC,IAAI,GAG5D,MAAM,SAAS,WACjB,MAAM,KACJ,eAAe,MAAM,SAAS,OAAO,IAAI,GAGzC,MAAM,SAAS,YACjB,MAAM,KACJ,gBAAgB,MAAM,SAAS,QAAQ,IAAI,GAG/C,MAAM,KAAK,EAAE;AAEb,UAAM,iBAAiB,QAAQ,UAAU,KAAK;AAG9C,eAAW,aAAa,gBAAgB;AACtC,YAAM,QAAQ,MAAM,MAAM,SAAS,SAAS;AAC5C,UAAI,CAAC;AAAO;AAEZ,YAAM,WAAW,MAAM,KAAK,MAAM,aAAY,CAAE;AAChD,UAAI,SAAS,WAAW;AAAG;AAE3B,YAAM,KAAK,aAAa,KAAK,gBAAgB,SAAS,CAAC,EAAE,GACzD,MAAM,KAAK,EAAE;AAEb,YAAM,cAAc,KAAK,kBAAkB,SAAS;AACpD,MAAI,gBACF,MAAM,KAAK,IAAI,WAAW,GAAG,GAC7B,MAAM,KAAK,EAAE,IAGf,MAAM,KAAK,iBAAiB,SAAS,MAAM,GAAG,GAC9C,MAAM,KAAK,EAAE,GAGb,MAAM,KACJ,oCAAoC,GAEtC,MAAM,KACJ,oCAAoC;AAGtC,iBAAW,WAAW,UAAU;AAC9B,cAAM,KAAK,KAAK,eAAe,QAAQ,EAAE,GACnC,OAAO,KAAK,eAAe,QAAQ,IAAI,GACvC,OAAO,KAAK,eAAe,QAAQ,IAAI,GACvC,OAAO,QAAQ,cACjB,KAAK,eAAe,QAAQ,WAAW,EAAE,UAAU,GAAG,GAAG,IACzD;AAEJ,cAAM,KAAK,OAAO,EAAE,QAAQ,IAAI,MAAM,IAAI,MAAM,IAAI,IAAI;MAC1D;AAEA,YAAM,KAAK,EAAE,GAGb,MAAM,KAAK,qBAAqB,GAChC,MAAM,KAAK,EAAE;AAEb,iBAAW,WAAW,UAAU;AAe9B,YAdA,MAAM,KACJ,QAAQ,KAAK,eAAe,QAAQ,IAAI,CAAC,OAAO,QAAQ,EAAE,KAAK,GAEjE,MAAM,KAAK,EAAE,GAET,QAAQ,gBACV,MAAM,KAAK,GAAG,QAAQ,WAAW,EAAE,GACnC,MAAM,KAAK,EAAE,IAGf,MAAM,KAAK,eAAe,QAAQ,IAAI,GACtC,MAAM,KAAK,EAAE,GAGT,OAAO,KAAK,QAAQ,UAAU,EAAE,SAAS,GAAG;AAC9C,gBAAM,KAAK,iBAAiB,GAC5B,MAAM,KAAK,EAAE,GACb,MAAM,KACJ,sBAAsB,GAExB,MAAM,KACJ,sBAAsB;AAGxB,qBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,QAAQ,UAAU,GAAG;AAC7D,kBAAM,eAAe,KAAK,gBAAgB,KAAK;AAC/C,kBAAM,KACJ,OAAO,GAAG,QAAQ,YAAY,IAAI;UAEtC;AACA,gBAAM,KAAK,EAAE;QACf;AAGA,YAAI,QAAQ,WAAW,SAAS,GAAG;AACjC,gBAAM,KAAK,6BAA6B,GACxC,MAAM,KAAK,EAAE;AAEb,qBAAW,OAAO,QAAQ,YAAY;AACpC,kBAAM,UAAU,IAAI,cAChB,MAAM,KAAK,eAAe,IAAI,WAAW,CAAC,KAC1C;AACJ,kBAAM,KACJ,OAAO,IAAI,IAAI,SAAS,IAAI,MAAM,KAAK,OAAO,EAAE;UAEpD;AACA,gBAAM,KAAK,EAAE;QACf;AAGA,YAAI,QAAQ,cAAc,SAAS,GAAG;AACpC,gBAAM,KAAK,oBAAoB,GAC/B,MAAM,KAAK,EAAE;AAEb,qBAAW,OAAO,QAAQ;AACxB,kBAAM,KACJ,OAAO,IAAI,SAAS,SAAS,IAAI,MAAM,IAAI;AAG/C,gBAAM,KAAK,EAAE;QACf;MACF;AAGA,YAAM,KAAK,mBAAmB,GAC9B,MAAM,KAAK,EAAE,GACb,MAAM,KACJ,yBAAyB,SAAS,MAAM,EAAE;AAG5C,YAAM,WAAW,SAAS,OACxB,CAAC,KAAK,MAAM,MAAM,EAAE,WAAW,QAC/B,CAAC,GAEG,WAAW,SAAS,OACxB,CAAC,KAAK,MAAM,MAAM,EAAE,cAAc,QAClC,CAAC;AAGH,YAAM,KACJ,iCAAiC,QAAQ,EAAE,GAE7C,MAAM,KACJ,wBAAwB,QAAQ,EAAE,GAGpC,MAAM,KAAK,EAAE,GACb,MAAM,KAAK,KAAK,GAChB,MAAM,KAAK,EAAE;IACf;AAGA,UAAM,KAAK,yBAAyB,GACpC,MAAM,KAAK,EAAE;AAEb,QAAI,gBAAgB,GAChB,kBAAkB,GAClB,qBAAqB;AAEzB,eAAW,aAAa,gBAAgB;AACtC,YAAM,QAAQ,MAAM,MAAM,SAAS,SAAS;AAC5C,UAAK;AAEL,mBAAW,WAAW,MAAM,aAAY;AACtC,2BACA,mBAAmB,QAAQ,WAAW,QACtC,sBAAsB,QAAQ,cAAc;IAEhD;AAEA,iBAAM,KACJ,oBAAoB,GAEtB,MAAM,KACJ,oBAAoB,GAEtB,MAAM,KACJ,sBAAsB,aAAa,IAAI,GAEzC,MAAM,KACJ,8BAA8B,eAAe,IAAI,GAEnD,MAAM,KACJ,qBAAqB,kBAAkB,IAAI,GAE7C,MAAM,KAAK,EAAE,GAEN,MAAM,KAAK;CAAI;EACxB;;;;EAKQ,eAAe,KAAW;AAChC,WAAO,IACJ,QAAQ,OAAO,MAAM,EACrB,QAAQ,OAAO,KAAK,EACpB,QAAQ,OAAO,KAAK,EACpB,QAAQ,OAAO,KAAK,EACpB,QAAQ,OAAO,KAAK,EACpB,QAAQ,OAAO,KAAK,EACpB,QAAQ,OAAO,KAAK;EACzB;;;;EAKQ,gBAAgB,MAAY;AAClC,WAAO,KACJ,MAAM,GAAG,EACT,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,EAAE,YAAW,IAAK,KAAK,MAAM,CAAC,CAAC,EAC1D,KAAK,GAAG;EACb;;;;EAKQ,gBAAgB,OAAc;AACpC,WAAI,OAAO,SAAU,WAAiB,KAAK,eAAe,KAAK,IAC3D,OAAO,SAAU,YACjB,OAAO,SAAU,YAAkB,OAAO,KAAK,IAC/C,MAAM,QAAQ,KAAK,IACd,IAAI,MAAM,IAAI,CAAC,MAAM,KAAK,gBAAgB,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,MAE7D,SAAS,OAAO,SAAU,WACrB,KAAK,KAAK,eAAe,KAAK,UAAU,KAAK,CAAC,CAAC,OAEjD,OAAO,KAAK;EACrB;;",
4
+ "sourcesContent": ["import type { Model } from \"../core/model.js\";\nimport type { Exporter, ExportOptions } from \"./types.js\";\nimport { ALL_LAYERS } from \"./types.js\";\nimport { isTelemetryEnabled, startSpan, endSpan } from \"../telemetry/index.js\";\nimport { formatLayerName } from \"../utils/layer-name-formatter.js\";\nimport { getErrorMessage } from \"../utils/errors.js\";\nimport { escapeMarkdown, valueToMarkdown, getLayerDescription } from \"./markdown-utils.js\";\n\n/**\n * Markdown Exporter - generates comprehensive markdown documentation\n * Supports all 12 layers\n */\nexport class MarkdownExporter implements Exporter {\n name = \"Markdown\";\n supportedLayers = ALL_LAYERS;\n\n async export(model: Model, options: ExportOptions = {}): Promise<string> {\n const span = isTelemetryEnabled\n ? startSpan(\"export.format.markdown\", {\n \"export.layerCount\": options.layers?.length || this.supportedLayers.length,\n })\n : null;\n\n try {\n const lines: string[] = [];\n\n // Document header\n lines.push(`# ${this.escapeMarkdownLocal(model.manifest.name)}`);\n lines.push(\"\");\n\n if (model.manifest.description) {\n lines.push(`${model.manifest.description}`);\n lines.push(\"\");\n }\n\n // Model metadata\n lines.push(\"## Model Information\");\n lines.push(\"\");\n lines.push(`| Property | Value |`);\n lines.push(`| -------- | ----- |`);\n lines.push(`| Version | ${model.manifest.version || \"1.0.0\"} |`);\n if (model.manifest.author) {\n lines.push(`| Author | ${this.escapeMarkdownLocal(model.manifest.author)} |`);\n }\n if (model.manifest.created) {\n lines.push(`| Created | ${model.manifest.created} |`);\n }\n if (model.manifest.modified) {\n lines.push(`| Modified | ${model.manifest.modified} |`);\n }\n lines.push(\"\");\n\n const layersToExport = options.layers || this.supportedLayers;\n\n // Generate documentation for each layer\n for (const layerName of layersToExport) {\n const layer = await model.getLayer(layerName);\n if (!layer) continue;\n\n const elements = Array.from(layer.listElements());\n if (elements.length === 0) continue;\n\n lines.push(`## Layer: ${this.formatLayerName(layerName)}`);\n lines.push(\"\");\n\n const description = this.getLayerDescription(layerName);\n if (description) {\n lines.push(`*${description}*`);\n lines.push(\"\");\n }\n\n lines.push(`### Elements (${elements.length})`);\n lines.push(\"\");\n\n // Element table\n lines.push(`| ID | Name | Type | Description |`);\n lines.push(`| -- | ---- | ---- | ----------- |`);\n\n for (const element of elements) {\n const displayId = element.path || element.id;\n const id = this.escapeMarkdownLocal(displayId);\n const name = this.escapeMarkdownLocal(element.name);\n const type = this.escapeMarkdownLocal(element.type);\n const desc = element.description\n ? this.escapeMarkdownLocal(element.description).substring(0, 100)\n : \"\";\n\n lines.push(`| \\`${id}\\` | ${name} | ${type} | ${desc} |`);\n }\n\n lines.push(\"\");\n\n // Element details\n lines.push(`### Element Details`);\n lines.push(\"\");\n\n for (const element of elements) {\n const displayId = element.path || element.id;\n lines.push(`#### ${this.escapeMarkdownLocal(element.name)} (\\`${displayId}\\`)`);\n lines.push(\"\");\n\n if (element.description) {\n lines.push(`${element.description}`);\n lines.push(\"\");\n }\n\n lines.push(\"**Type:** \" + element.type);\n lines.push(\"\");\n\n // Source Reference\n const sourceRef = element.getSourceReference();\n if (sourceRef) {\n lines.push(\"### Source Code Location\");\n lines.push(\"\");\n lines.push(`**Provenance**: ${sourceRef.provenance}`);\n lines.push(\"\");\n\n lines.push(\"**Locations:**\");\n lines.push(\"\");\n (sourceRef.locations ?? []).forEach((loc, idx) => {\n lines.push(`${idx + 1}. \\`${this.escapeMarkdownLocal(loc.file)}\\``);\n if (loc.symbol) {\n lines.push(` - Symbol: \\`${this.escapeMarkdownLocal(loc.symbol)}\\``);\n }\n });\n lines.push(\"\");\n\n if (sourceRef.repository) {\n lines.push(\"**Repository Context:**\");\n lines.push(\"\");\n if (sourceRef.repository.url) {\n lines.push(`- Remote: ${sourceRef.repository.url}`);\n }\n if (sourceRef.repository.commit) {\n const shortCommit = sourceRef.repository.commit.substring(0, 7);\n if (sourceRef.repository.url) {\n lines.push(\n `- Commit: [\\`${shortCommit}\\`](${sourceRef.repository.url}/commit/${sourceRef.repository.commit})`\n );\n } else {\n lines.push(`- Commit: \\`${shortCommit}\\``);\n }\n }\n lines.push(\"\");\n }\n }\n\n // Properties (attributes)\n if (Object.keys(element.attributes).length > 0) {\n lines.push(\"**Properties:**\");\n lines.push(\"\");\n lines.push(`| Property | Value |`);\n lines.push(`| -------- | ----- |`);\n\n for (const [key, value] of Object.entries(element.attributes)) {\n const displayValue = this.valueToMarkdownLocal(value);\n lines.push(`| \\`${key}\\` | ${displayValue} |`);\n }\n lines.push(\"\");\n }\n\n // References\n if (element.references.length > 0) {\n lines.push(\"**Cross-Layer References:**\");\n lines.push(\"\");\n\n for (const ref of element.references) {\n const refDesc = ref.description ? ` - ${this.escapeMarkdownLocal(ref.description)}` : \"\";\n lines.push(`- **${ref.type}**: \\`${ref.target}\\`${refDesc}`);\n }\n lines.push(\"\");\n }\n\n // Relationships\n if (element.relationships.length > 0) {\n lines.push(\"**Relationships:**\");\n lines.push(\"\");\n\n for (const rel of element.relationships) {\n lines.push(`- **${rel.predicate}**: \\`${rel.target}\\``);\n }\n lines.push(\"\");\n }\n }\n\n // Layer summary\n lines.push(`### Layer Summary`);\n lines.push(\"\");\n lines.push(`- **Total Elements:** ${elements.length}`);\n\n const refCount = elements.reduce((sum, e) => sum + e.references.length, 0);\n const relCount = elements.reduce((sum, e) => sum + e.relationships.length, 0);\n\n lines.push(`- **Cross-Layer References:** ${refCount}`);\n lines.push(`- **Relationships:** ${relCount}`);\n\n lines.push(\"\");\n lines.push(\"---\");\n lines.push(\"\");\n }\n\n // Architecture Summary\n lines.push(\"## Architecture Summary\");\n lines.push(\"\");\n\n let totalElements = 0;\n let totalReferences = 0;\n let totalRelationships = 0;\n\n for (const layerName of layersToExport) {\n const layer = await model.getLayer(layerName);\n if (!layer) continue;\n\n for (const element of layer.listElements()) {\n totalElements++;\n totalReferences += element.references.length;\n totalRelationships += element.relationships.length;\n }\n }\n\n lines.push(`| Metric | Count |`);\n lines.push(`| ------ | ----- |`);\n lines.push(`| Total Elements | ${totalElements} |`);\n lines.push(`| Cross-Layer References | ${totalReferences} |`);\n lines.push(`| Relationships | ${totalRelationships} |`);\n lines.push(\"\");\n\n const result = lines.join(\"\\n\");\n\n if (isTelemetryEnabled && span) {\n (span as any).setAttribute(\"export.elementCount\", totalElements);\n (span as any).setAttribute(\"export.referenceCount\", totalReferences);\n (span as any).setAttribute(\"export.relationshipCount\", totalRelationships);\n (span as any).setAttribute(\"export.size\", result.length);\n (span as any).setStatus({ code: 0 });\n }\n\n return result;\n } catch (error) {\n if (isTelemetryEnabled && span) {\n (span as any).recordException(error as Error);\n (span as any).setStatus({\n code: 2,\n message: getErrorMessage(error),\n });\n }\n throw error;\n } finally {\n endSpan(span);\n }\n }\n\n /**\n * Escape markdown special characters\n */\n private escapeMarkdownLocal(str: string): string {\n return escapeMarkdown(str);\n }\n\n /**\n * Format layer name for display\n */\n private formatLayerName(name: string): string {\n return formatLayerName(name);\n }\n\n /**\n * Get layer description\n */\n private getLayerDescription(layer: string): string {\n return getLayerDescription(layer);\n }\n\n /**\n * Convert value to markdown representation\n */\n private valueToMarkdownLocal(value: unknown): string {\n return valueToMarkdown(value);\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }