@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
package/dist/ai/tools.js DELETED
@@ -1,231 +0,0 @@
1
- import { DependencyTracker, TraceDirection } from "../core/dependency-tracker.js";
2
- import { ReferenceRegistry } from "../core/reference-registry.js";
3
- function getModelTools() {
4
- return [
5
- {
6
- name: "dr_list",
7
- description: "List elements in a specific layer of the architecture model",
8
- input_schema: {
9
- type: "object",
10
- properties: {
11
- layer: {
12
- type: "string",
13
- description: "Layer name (motivation, business, security, application, technology, api, data-model, data-store, ux, navigation, apm, testing)"
14
- },
15
- type: {
16
- type: "string",
17
- description: "Optional: filter by element type"
18
- }
19
- },
20
- required: ["layer"]
21
- }
22
- },
23
- {
24
- name: "dr_find",
25
- description: "Find a specific element by its ID in the architecture model",
26
- input_schema: {
27
- type: "object",
28
- properties: {
29
- id: {
30
- type: "string",
31
- description: "Element ID to find (format: {layer}-{type}-{kebab-case-name})"
32
- }
33
- },
34
- required: ["id"]
35
- }
36
- },
37
- {
38
- name: "dr_search",
39
- description: "Search for elements by name, description, or ID in the architecture model",
40
- input_schema: {
41
- type: "object",
42
- properties: {
43
- query: {
44
- type: "string",
45
- description: "Search query (searches names, descriptions, and IDs)"
46
- },
47
- layers: {
48
- type: "array",
49
- items: { type: "string" },
50
- description: "Optional: limit search to specific layers"
51
- }
52
- },
53
- required: ["query"]
54
- }
55
- },
56
- {
57
- name: "dr_trace",
58
- description: "Trace dependencies for an element (what depends on it, what it depends on, or both)",
59
- input_schema: {
60
- type: "object",
61
- properties: {
62
- id: {
63
- type: "string",
64
- description: "Element ID to trace dependencies for"
65
- },
66
- direction: {
67
- type: "string",
68
- enum: ["up", "down", "both"],
69
- description: "Dependency direction: up=dependents, down=dependencies, both=both (default: both)"
70
- }
71
- },
72
- required: ["id"]
73
- }
74
- }
75
- ];
76
- }
77
- async function executeModelTool(toolName, args, model) {
78
- switch (toolName) {
79
- case "dr_list":
80
- return await executeDrList(args, model);
81
- case "dr_find":
82
- return await executeDrFind(args, model);
83
- case "dr_search":
84
- return await executeDrSearch(args, model);
85
- case "dr_trace":
86
- return await executeDrTrace(args, model);
87
- default:
88
- return { error: `Unknown tool: ${toolName}` };
89
- }
90
- }
91
- async function executeDrList(args, model) {
92
- const layerName = args.layer, filterType = args.type;
93
- if (!layerName)
94
- return { error: "layer parameter is required" };
95
- try {
96
- const layer = await model.getLayer(layerName);
97
- if (!layer)
98
- return {
99
- error: `Layer '${layerName}' not found or not loaded`,
100
- availableLayers: model.getLayerNames()
101
- };
102
- let elements = layer.listElements();
103
- return filterType && (elements = elements.filter((e) => e.type === filterType)), {
104
- layer: layerName,
105
- elementCount: elements.length,
106
- elements: elements.map((e) => ({
107
- id: e.id,
108
- type: e.type,
109
- name: e.name,
110
- description: e.description || ""
111
- }))
112
- };
113
- } catch (error) {
114
- return {
115
- error: error instanceof Error ? error.message : String(error)
116
- };
117
- }
118
- }
119
- async function executeDrFind(args, model) {
120
- const id = args.id;
121
- if (!id)
122
- return { error: "id parameter is required" };
123
- try {
124
- for (const layerName of model.getLayerNames()) {
125
- const layer = await model.getLayer(layerName);
126
- if (!layer)
127
- continue;
128
- const element = layer.getElement(id);
129
- if (element)
130
- return {
131
- found: !0,
132
- element: {
133
- id: element.id,
134
- type: element.type,
135
- name: element.name,
136
- description: element.description || "",
137
- layer: layerName,
138
- properties: element.properties || {}
139
- }
140
- };
141
- }
142
- return {
143
- found: !1,
144
- error: `Element with id '${id}' not found`
145
- };
146
- } catch (error) {
147
- return {
148
- error: error instanceof Error ? error.message : String(error)
149
- };
150
- }
151
- }
152
- async function executeDrSearch(args, model) {
153
- const query = args.query?.toLowerCase(), layerFilter = args.layers || void 0;
154
- if (!query)
155
- return { error: "query parameter is required" };
156
- try {
157
- const results = [];
158
- for (const layerName of model.getLayerNames()) {
159
- if (layerFilter && !layerFilter.includes(layerName))
160
- continue;
161
- const layer = await model.getLayer(layerName);
162
- if (!layer)
163
- continue;
164
- const elements = layer.listElements();
165
- for (const element of elements) {
166
- const idMatches = element.id.toLowerCase().includes(query), nameMatches = element.name.toLowerCase().includes(query), descMatches = element.description && element.description.toLowerCase().includes(query);
167
- (idMatches || nameMatches || descMatches) && results.push({
168
- id: element.id,
169
- type: element.type,
170
- name: element.name,
171
- description: element.description || "",
172
- layer: layerName,
173
- matchReason: idMatches && nameMatches ? "id and name" : idMatches ? "id" : nameMatches ? "name" : "description"
174
- });
175
- }
176
- }
177
- return {
178
- query,
179
- resultCount: results.length,
180
- results
181
- };
182
- } catch (error) {
183
- return {
184
- error: error instanceof Error ? error.message : String(error)
185
- };
186
- }
187
- }
188
- async function executeDrTrace(args, model) {
189
- const id = args.id, direction = args.direction || "both";
190
- if (!id)
191
- return { error: "id parameter is required" };
192
- if (!["up", "down", "both"].includes(direction))
193
- return { error: "direction must be one of: up, down, both" };
194
- try {
195
- const registry = new ReferenceRegistry();
196
- for (const layerName of model.getLayerNames()) {
197
- const layer = await model.getLayer(layerName);
198
- if (layer)
199
- for (const element of layer.listElements())
200
- registry.registerElement(element);
201
- }
202
- const tracker = new DependencyTracker(registry), result = {
203
- id,
204
- direction
205
- };
206
- if (direction === "down" || direction === "both")
207
- try {
208
- const dependencies = tracker.traceDependencies(id, TraceDirection.UP, null);
209
- result.dependencies = dependencies, result.dependencyCount = dependencies.length;
210
- } catch {
211
- result.dependencies = [], result.dependencyCount = 0;
212
- }
213
- if (direction === "up" || direction === "both")
214
- try {
215
- const dependents = tracker.traceDependencies(id, TraceDirection.DOWN, null);
216
- result.dependents = dependents, result.dependentCount = dependents.length;
217
- } catch {
218
- result.dependents = [], result.dependentCount = 0;
219
- }
220
- return result;
221
- } catch (error) {
222
- return {
223
- error: error instanceof Error ? error.message : String(error)
224
- };
225
- }
226
- }
227
- export {
228
- executeModelTool,
229
- getModelTools
230
- };
231
- //# sourceMappingURL=tools.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/ai/tools.ts"],
4
- "sourcesContent": ["/**\n * Tool Definitions for Claude AI Integration\n * Defines tools for dr_list, dr_find, dr_search, and dr_trace\n *\n * NOTE: These tool definitions are used for legacy SDK-based chat only.\n * The `dr chat` command uses Claude Code CLI subprocess with Bash and Read tools instead.\n */\n\nimport { Model } from '../core/model.js';\nimport { DependencyTracker, TraceDirection } from '../core/dependency-tracker.js';\nimport { ReferenceRegistry } from '../core/reference-registry.js';\n\n/**\n * Get tool definitions for Claude to use with the model\n * @returns Array of tool definitions in Claude format\n */\nexport function getModelTools(): any[] {\n return [\n {\n name: 'dr_list',\n description: 'List elements in a specific layer of the architecture model',\n input_schema: {\n type: 'object',\n properties: {\n layer: {\n type: 'string',\n description:\n 'Layer name (motivation, business, security, application, technology, api, data-model, data-store, ux, navigation, apm, testing)',\n },\n type: {\n type: 'string',\n description: 'Optional: filter by element type',\n },\n },\n required: ['layer'],\n },\n },\n {\n name: 'dr_find',\n description: 'Find a specific element by its ID in the architecture model',\n input_schema: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Element ID to find (format: {layer}-{type}-{kebab-case-name})',\n },\n },\n required: ['id'],\n },\n },\n {\n name: 'dr_search',\n description: 'Search for elements by name, description, or ID in the architecture model',\n input_schema: {\n type: 'object',\n properties: {\n query: {\n type: 'string',\n description: 'Search query (searches names, descriptions, and IDs)',\n },\n layers: {\n type: 'array',\n items: { type: 'string' },\n description: 'Optional: limit search to specific layers',\n },\n },\n required: ['query'],\n },\n },\n {\n name: 'dr_trace',\n description:\n 'Trace dependencies for an element (what depends on it, what it depends on, or both)',\n input_schema: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Element ID to trace dependencies for',\n },\n direction: {\n type: 'string',\n enum: ['up', 'down', 'both'],\n description:\n 'Dependency direction: up=dependents, down=dependencies, both=both (default: both)',\n },\n },\n required: ['id'],\n },\n },\n ];\n}\n\n/**\n * Execute a tool and return the result\n * @param toolName Name of the tool to execute\n * @param args Tool arguments\n * @param model The architecture model\n * @returns Tool execution result as JSON\n */\nexport async function executeModelTool(\n toolName: string,\n args: Record<string, unknown>,\n model: Model\n): Promise<any> {\n switch (toolName) {\n case 'dr_list':\n return await executeDrList(args, model);\n\n case 'dr_find':\n return await executeDrFind(args, model);\n\n case 'dr_search':\n return await executeDrSearch(args, model);\n\n case 'dr_trace':\n return await executeDrTrace(args, model);\n\n default:\n return { error: `Unknown tool: ${toolName}` };\n }\n}\n\n/**\n * Execute dr_list tool\n */\nasync function executeDrList(args: Record<string, unknown>, model: Model): Promise<any> {\n const layerName = args.layer as string;\n const filterType = args.type as string | undefined;\n\n if (!layerName) {\n return { error: 'layer parameter is required' };\n }\n\n try {\n const layer = await model.getLayer(layerName);\n\n if (!layer) {\n return {\n error: `Layer '${layerName}' not found or not loaded`,\n availableLayers: model.getLayerNames(),\n };\n }\n\n let elements = layer.listElements();\n\n if (filterType) {\n elements = elements.filter((e) => e.type === filterType);\n }\n\n return {\n layer: layerName,\n elementCount: elements.length,\n elements: elements.map((e) => ({\n id: e.id,\n type: e.type,\n name: e.name,\n description: e.description || '',\n })),\n };\n } catch (error) {\n return {\n error: error instanceof Error ? error.message : String(error),\n };\n }\n}\n\n/**\n * Execute dr_find tool\n */\nasync function executeDrFind(args: Record<string, unknown>, model: Model): Promise<any> {\n const id = args.id as string;\n\n if (!id) {\n return { error: 'id parameter is required' };\n }\n\n try {\n // Search through all layers for the element\n for (const layerName of model.getLayerNames()) {\n const layer = await model.getLayer(layerName);\n if (!layer) continue;\n\n const element = layer.getElement(id);\n if (element) {\n return {\n found: true,\n element: {\n id: element.id,\n type: element.type,\n name: element.name,\n description: element.description || '',\n layer: layerName,\n properties: element.properties || {},\n },\n };\n }\n }\n\n return {\n found: false,\n error: `Element with id '${id}' not found`,\n };\n } catch (error) {\n return {\n error: error instanceof Error ? error.message : String(error),\n };\n }\n}\n\n/**\n * Execute dr_search tool\n */\nasync function executeDrSearch(args: Record<string, unknown>, model: Model): Promise<any> {\n const query = (args.query as string)?.toLowerCase();\n const layerFilter = (args.layers as string[]) || undefined;\n\n if (!query) {\n return { error: 'query parameter is required' };\n }\n\n try {\n const results: any[] = [];\n\n for (const layerName of model.getLayerNames()) {\n // Skip if layer is in exclude list\n if (layerFilter && !layerFilter.includes(layerName)) {\n continue;\n }\n\n const layer = await model.getLayer(layerName);\n if (!layer) continue;\n\n const elements = layer.listElements();\n\n for (const element of elements) {\n const idMatches = element.id.toLowerCase().includes(query);\n const nameMatches = element.name.toLowerCase().includes(query);\n const descMatches =\n element.description && element.description.toLowerCase().includes(query);\n\n if (idMatches || nameMatches || descMatches) {\n results.push({\n id: element.id,\n type: element.type,\n name: element.name,\n description: element.description || '',\n layer: layerName,\n matchReason:\n idMatches && nameMatches\n ? 'id and name'\n : idMatches\n ? 'id'\n : nameMatches\n ? 'name'\n : 'description',\n });\n }\n }\n }\n\n return {\n query,\n resultCount: results.length,\n results,\n };\n } catch (error) {\n return {\n error: error instanceof Error ? error.message : String(error),\n };\n }\n}\n\n/**\n * Execute dr_trace tool\n */\nasync function executeDrTrace(args: Record<string, unknown>, model: Model): Promise<any> {\n const id = args.id as string;\n const direction = (args.direction as string) || 'both';\n\n if (!id) {\n return { error: 'id parameter is required' };\n }\n\n if (!['up', 'down', 'both'].includes(direction)) {\n return { error: 'direction must be one of: up, down, both' };\n }\n\n try {\n // Build registry by collecting all references from all loaded layers\n const registry = new ReferenceRegistry();\n\n for (const layerName of model.getLayerNames()) {\n const layer = await model.getLayer(layerName);\n if (!layer) continue;\n\n for (const element of layer.listElements()) {\n registry.registerElement(element);\n }\n }\n\n // Create dependency tracker with registry\n const tracker = new DependencyTracker(registry);\n\n const result: any = {\n id,\n direction,\n };\n\n // Get dependencies (elements this one depends on)\n if (direction === 'down' || direction === 'both') {\n try {\n const dependencies = tracker.traceDependencies(id, TraceDirection.UP, null);\n result.dependencies = dependencies;\n result.dependencyCount = dependencies.length;\n } catch (e) {\n result.dependencies = [];\n result.dependencyCount = 0;\n }\n }\n\n // Get dependents (elements that depend on this one)\n if (direction === 'up' || direction === 'both') {\n try {\n const dependents = tracker.traceDependencies(id, TraceDirection.DOWN, null);\n result.dependents = dependents;\n result.dependentCount = dependents.length;\n } catch (e) {\n result.dependents = [];\n result.dependentCount = 0;\n }\n }\n\n return result;\n } catch (error) {\n return {\n error: error instanceof Error ? error.message : String(error),\n };\n }\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,36 +0,0 @@
1
- import ansis from "ansis";
2
- import { Model } from "../core/model.js";
3
- import { MigrationRegistry } from "../core/migration-registry.js";
4
- async function migrateCommand(options) {
5
- try {
6
- const model = await Model.load(process.cwd(), { lazyLoad: !1 }), registry = new MigrationRegistry(), currentVersion = model.manifest.specVersion || "0.5.0", targetVersion = options.to || registry.getLatestVersion();
7
- if (console.log(ansis.bold(`
8
- Migrating model from spec v${currentVersion} to v${targetVersion}
9
- `)), currentVersion === targetVersion) {
10
- console.log(ansis.yellow(`Model is already at spec version ${targetVersion}`));
11
- return;
12
- }
13
- const summary = registry.getMigrationSummary(currentVersion, targetVersion);
14
- summary.migrationsNeeded === 0 && (console.log(ansis.yellow(`No migration path found from v${currentVersion} to v${targetVersion}`)), console.log("Available migrations:"), registry.getMigrationSummary("0.5.0").migrations.forEach((m) => {
15
- console.log(ansis.dim(` - ${m.from} \u2192 ${m.to}: ${m.description}`));
16
- }), process.exit(1)), console.log(ansis.dim("Migration path:"));
17
- for (const migration of summary.migrations)
18
- console.log(ansis.dim(` ${migration.from} \u2192 ${migration.to}: ${migration.description}`));
19
- console.log(), options.dryRun && (console.log(ansis.yellow("[DRY RUN] The following changes would be applied:")), console.log());
20
- const result = await registry.applyMigrations(model, {
21
- fromVersion: currentVersion,
22
- toVersion: targetVersion,
23
- dryRun: options.dryRun,
24
- validate: !options.force
25
- });
26
- for (const applied of result.applied)
27
- applied.dryRun ? console.log(ansis.yellow(`[DRY RUN] ${applied.from} \u2192 ${applied.to}: ${applied.description}`)) : (console.log(ansis.green(`\u2713 ${applied.from} \u2192 ${applied.to}: ${applied.description}`)), applied.changes?.filesModified && console.log(ansis.dim(` Files modified: ${applied.changes.filesModified}`)));
28
- console.log(), options.dryRun ? console.log(ansis.yellow("\u2713 Dry run complete (no changes saved)")) : (await model.saveManifest(), await model.saveDirtyLayers(), console.log(ansis.green("\u2713 Migration complete")), console.log(ansis.dim(`Spec version updated to v${targetVersion} and saved to model/manifest.yaml`))), console.log();
29
- } catch (error) {
30
- console.error(ansis.red(`Error: ${error instanceof Error ? error.message : String(error)}`)), process.exit(1);
31
- }
32
- }
33
- export {
34
- migrateCommand
35
- };
36
- //# sourceMappingURL=migrate.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/commands/migrate.ts"],
4
- "sourcesContent": ["/**\n * Migrate Command - Migrates model to a different spec version\n */\n\nimport ansis from 'ansis';\nimport { Model } from '../core/model.js';\nimport { MigrationRegistry } from '../core/migration-registry.js';\n\nexport async function migrateCommand(options: {\n to?: string;\n dryRun?: boolean;\n force?: boolean;\n}): Promise<void> {\n try {\n // Load the model from current directory\n const model = await Model.load(process.cwd(), { lazyLoad: false });\n\n const registry = new MigrationRegistry();\n const currentVersion = model.manifest.specVersion || '0.5.0';\n const targetVersion = options.to || registry.getLatestVersion();\n\n console.log(ansis.bold(`\\nMigrating model from spec v${currentVersion} to v${targetVersion}\\n`));\n\n // Check if migration is needed\n if (currentVersion === targetVersion) {\n console.log(\n ansis.yellow(`Model is already at spec version ${targetVersion}`)\n );\n return;\n }\n\n // Get migration summary\n const summary = registry.getMigrationSummary(currentVersion, targetVersion);\n\n if (summary.migrationsNeeded === 0) {\n console.log(ansis.yellow(`No migration path found from v${currentVersion} to v${targetVersion}`));\n console.log(`Available migrations:`);\n registry.getMigrationSummary('0.5.0').migrations.forEach((m) => {\n console.log(ansis.dim(` - ${m.from} \u2192 ${m.to}: ${m.description}`));\n });\n process.exit(1);\n }\n\n // Display migration plan\n console.log(ansis.dim('Migration path:'));\n for (const migration of summary.migrations) {\n console.log(\n ansis.dim(` ${migration.from} \u2192 ${migration.to}: ${migration.description}`)\n );\n }\n console.log();\n\n if (options.dryRun) {\n console.log(ansis.yellow('[DRY RUN] The following changes would be applied:'));\n console.log();\n }\n\n // Apply migrations\n const result = await registry.applyMigrations(model, {\n fromVersion: currentVersion,\n toVersion: targetVersion,\n dryRun: options.dryRun,\n validate: !options.force,\n });\n\n // Display results\n for (const applied of result.applied) {\n if (applied.dryRun) {\n console.log(\n ansis.yellow(\n `[DRY RUN] ${applied.from} \u2192 ${applied.to}: ${applied.description}`\n )\n );\n } else {\n console.log(\n ansis.green(\n `\u2713 ${applied.from} \u2192 ${applied.to}: ${applied.description}`\n )\n );\n if (applied.changes?.filesModified) {\n console.log(\n ansis.dim(` Files modified: ${applied.changes.filesModified}`)\n );\n }\n }\n }\n\n console.log();\n\n if (!options.dryRun) {\n // Save the updated manifest and all dirty layers\n await model.saveManifest();\n await model.saveDirtyLayers();\n\n console.log(ansis.green(`\u2713 Migration complete`));\n console.log(\n ansis.dim(\n `Spec version updated to v${targetVersion} and saved to model/manifest.yaml`\n )\n );\n } else {\n console.log(ansis.yellow(`\u2713 Dry run complete (no changes saved)`));\n }\n\n console.log();\n } catch (error) {\n console.error(\n ansis.red(\n `Error: ${error instanceof Error ? error.message : String(error)}`\n )\n );\n process.exit(1);\n }\n}\n"],
5
- "mappings": "AAIA,OAAO,WAAW;AAClB,SAAS,aAAa;AACtB,SAAS,yBAAyB;AAElC,eAAsB,eAAe,SAIpC;AACC,MAAI;AAEF,UAAM,QAAQ,MAAM,MAAM,KAAK,QAAQ,IAAG,GAAI,EAAE,UAAU,GAAK,CAAE,GAE3D,WAAW,IAAI,kBAAiB,GAChC,iBAAiB,MAAM,SAAS,eAAe,SAC/C,gBAAgB,QAAQ,MAAM,SAAS,iBAAgB;AAK7D,QAHA,QAAQ,IAAI,MAAM,KAAK;6BAAgC,cAAc,QAAQ,aAAa;CAAI,CAAC,GAG3F,mBAAmB,eAAe;AACpC,cAAQ,IACN,MAAM,OAAO,oCAAoC,aAAa,EAAE,CAAC;AAEnE;IACF;AAGA,UAAM,UAAU,SAAS,oBAAoB,gBAAgB,aAAa;AAE1E,IAAI,QAAQ,qBAAqB,MAC/B,QAAQ,IAAI,MAAM,OAAO,iCAAiC,cAAc,QAAQ,aAAa,EAAE,CAAC,GAChG,QAAQ,IAAI,uBAAuB,GACnC,SAAS,oBAAoB,OAAO,EAAE,WAAW,QAAQ,CAAC,MAAK;AAC7D,cAAQ,IAAI,MAAM,IAAI,OAAO,EAAE,IAAI,WAAM,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;IACpE,CAAC,GACD,QAAQ,KAAK,CAAC,IAIhB,QAAQ,IAAI,MAAM,IAAI,iBAAiB,CAAC;AACxC,eAAW,aAAa,QAAQ;AAC9B,cAAQ,IACN,MAAM,IAAI,KAAK,UAAU,IAAI,WAAM,UAAU,EAAE,KAAK,UAAU,WAAW,EAAE,CAAC;AAGhF,YAAQ,IAAG,GAEP,QAAQ,WACV,QAAQ,IAAI,MAAM,OAAO,mDAAmD,CAAC,GAC7E,QAAQ,IAAG;AAIb,UAAM,SAAS,MAAM,SAAS,gBAAgB,OAAO;MACnD,aAAa;MACb,WAAW;MACX,QAAQ,QAAQ;MAChB,UAAU,CAAC,QAAQ;KACpB;AAGD,eAAW,WAAW,OAAO;AAC3B,MAAI,QAAQ,SACV,QAAQ,IACN,MAAM,OACJ,aAAa,QAAQ,IAAI,WAAM,QAAQ,EAAE,KAAK,QAAQ,WAAW,EAAE,CACpE,KAGH,QAAQ,IACN,MAAM,MACJ,UAAK,QAAQ,IAAI,WAAM,QAAQ,EAAE,KAAK,QAAQ,WAAW,EAAE,CAC5D,GAEC,QAAQ,SAAS,iBACnB,QAAQ,IACN,MAAM,IAAI,qBAAqB,QAAQ,QAAQ,aAAa,EAAE,CAAC;AAMvE,YAAQ,IAAG,GAEN,QAAQ,SAYX,QAAQ,IAAI,MAAM,OAAO,4CAAuC,CAAC,KAVjE,MAAM,MAAM,aAAY,GACxB,MAAM,MAAM,gBAAe,GAE3B,QAAQ,IAAI,MAAM,MAAM,2BAAsB,CAAC,GAC/C,QAAQ,IACN,MAAM,IACJ,4BAA4B,aAAa,mCAAmC,CAC7E,IAML,QAAQ,IAAG;EACb,SAAS,OAAO;AACd,YAAQ,MACN,MAAM,IACJ,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,EAAE,CACnE,GAEH,QAAQ,KAAK,CAAC;EAChB;AACF;",
6
- "names": []
7
- }
@@ -1,74 +0,0 @@
1
- import ansis from "ansis";
2
- import { Model } from "../core/model.js";
3
- async function projectCommand(elementId, targetLayers, options = {}) {
4
- try {
5
- const model = await Model.load(options.model), source = model.getElementById(elementId);
6
- source || (console.error(ansis.red(`Error: Element '${elementId}' not found`)), process.exit(1));
7
- const engine = model.getProjectionEngine(), layers = targetLayers.split(",").map((l) => l.trim());
8
- console.log(""), console.log(ansis.bold(`Projecting element: ${ansis.yellow(elementId)}`)), console.log(ansis.bold(`Target layers: ${ansis.cyan(layers.join(", "))}`)), console.log("");
9
- const results = [];
10
- for (const targetLayer of layers)
11
- try {
12
- const applicableRules = engine.findApplicableRules(source, targetLayer);
13
- if (applicableRules.length === 0) {
14
- console.log(ansis.yellow(`\u26A0 Warning: No projection rule found for ${source.layer} -> ${targetLayer}`));
15
- continue;
16
- }
17
- const projectionRule = options.rule ? applicableRules.find((r) => r.name === options.rule) : applicableRules[0];
18
- if (!projectionRule) {
19
- console.log(ansis.yellow(`\u26A0 Warning: Rule '${options.rule}' not found for ${targetLayer}`));
20
- continue;
21
- }
22
- const projected = await engine.projectElement(source, targetLayer, projectionRule, options.dryRun);
23
- projected && results.push({ layer: targetLayer, element: projected });
24
- } catch (error) {
25
- const message = error instanceof Error ? error.message : String(error);
26
- console.log(ansis.red(`\u2717 Error projecting to ${targetLayer}: ${message}`));
27
- }
28
- if (results.length > 0) {
29
- console.log(ansis.bold.green("\u2713 Projection successful")), console.log("");
30
- const colLayer = "Target Layer", colId = "Element ID", colName = "Name", maxLayerLen = Math.max(colLayer.length, ...results.map((r) => r.layer.length)), maxIdLen = Math.max(colId.length, ...results.map((r) => r.element.id.length)), maxNameLen = Math.max(colName.length, ...results.map((r) => (r.element.name || "").length));
31
- console.log(ansis.bold(ansis.cyan(colLayer.padEnd(maxLayerLen)) + " " + ansis.white(colId.padEnd(maxIdLen)) + " " + ansis.green(colName.padEnd(maxNameLen)))), console.log(ansis.dim("\u2500".repeat(maxLayerLen + maxIdLen + maxNameLen + 4)));
32
- for (const { layer, element } of results)
33
- console.log(ansis.cyan(layer.padEnd(maxLayerLen)) + " " + ansis.white(element.id.padEnd(maxIdLen)) + " " + ansis.green((element.name || "").padEnd(maxNameLen)));
34
- console.log(""), options.dryRun ? console.log(ansis.yellow("Dry run - elements not saved")) : (await model.save(), console.log(ansis.green("Model saved successfully")));
35
- } else
36
- console.log(ansis.yellow("No elements were projected"));
37
- console.log("");
38
- } catch (error) {
39
- const message = error instanceof Error ? error.message : String(error);
40
- console.error(ansis.red(`Error: ${message}`)), process.exit(1);
41
- }
42
- }
43
- async function projectAllCommand(options = {}) {
44
- try {
45
- const model = await Model.load(options.model), engine = model.getProjectionEngine();
46
- console.log(""), console.log(ansis.bold("Projecting all applicable elements...")), console.log(""), options.from && console.log(`From layer: ${options.from}`), options.to && console.log(`To layer: ${options.to}`), (options.from || options.to) && console.log("");
47
- const projected = await engine.projectAll(options.from || void 0, options.to || void 0, options.dryRun);
48
- if (projected.length > 0) {
49
- console.log(ansis.bold.green(`\u2713 Projected ${projected.length} element(s)`)), console.log("");
50
- const byLayer = /* @__PURE__ */ new Map();
51
- for (const element of projected) {
52
- const layer = element.layer || "unknown";
53
- byLayer.has(layer) || byLayer.set(layer, []), byLayer.get(layer).push(element);
54
- }
55
- for (const [layer, elements] of Array.from(byLayer.entries()).sort()) {
56
- console.log(ansis.bold(`${layer}:`));
57
- for (const element of elements)
58
- console.log(` ${ansis.dim("\u2022")} ${element.id} ${ansis.gray(`(${element.name || "unnamed"})`)}`);
59
- console.log("");
60
- }
61
- options.dryRun ? console.log(ansis.yellow("Dry run - elements not saved")) : (await model.save(), console.log(ansis.green("Model saved successfully")));
62
- } else
63
- console.log(ansis.yellow("No elements were projected"));
64
- console.log("");
65
- } catch (error) {
66
- const message = error instanceof Error ? error.message : String(error);
67
- console.error(ansis.red(`Error: ${message}`)), process.exit(1);
68
- }
69
- }
70
- export {
71
- projectAllCommand,
72
- projectCommand
73
- };
74
- //# sourceMappingURL=project.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/commands/project.ts"],
4
- "sourcesContent": ["/**\n * Project command - project elements across layers using projection rules\n */\n\nimport ansis from 'ansis';\nimport { Model } from '../core/model.js';\n\nexport async function projectCommand(\n elementId: string,\n targetLayers: string,\n options: {\n rule?: string;\n dryRun?: boolean;\n force?: boolean;\n model?: string;\n } = {}\n): Promise<void> {\n try {\n // Load model\n const model = await Model.load(options.model);\n\n // Get source element\n const source = model.getElementById(elementId);\n if (!source) {\n console.error(ansis.red(`Error: Element '${elementId}' not found`));\n process.exit(1);\n }\n\n // Initialize projection engine\n const engine = model.getProjectionEngine();\n\n // Parse target layers\n const layers = targetLayers.split(',').map((l) => l.trim());\n\n console.log('');\n console.log(ansis.bold(`Projecting element: ${ansis.yellow(elementId)}`));\n console.log(ansis.bold(`Target layers: ${ansis.cyan(layers.join(', '))}`));\n console.log('');\n\n // Project to each layer\n const results: Array<{ layer: string; element: any }> = [];\n\n for (const targetLayer of layers) {\n try {\n // Find applicable rules\n const applicableRules = engine.findApplicableRules(source, targetLayer);\n\n if (applicableRules.length === 0) {\n console.log(\n ansis.yellow(\n `\u26A0 Warning: No projection rule found for ${source.layer} -> ${targetLayer}`\n )\n );\n continue;\n }\n\n // Use first applicable rule (or specific rule if provided)\n const projectionRule = options.rule\n ? applicableRules.find((r) => r.name === options.rule)\n : applicableRules[0];\n\n if (!projectionRule) {\n console.log(\n ansis.yellow(\n `\u26A0 Warning: Rule '${options.rule}' not found for ${targetLayer}`\n )\n );\n continue;\n }\n\n // Perform projection\n const projected = await engine.projectElement(\n source,\n targetLayer,\n projectionRule,\n options.dryRun\n );\n\n if (projected) {\n results.push({ layer: targetLayer, element: projected });\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.log(ansis.red(`\u2717 Error projecting to ${targetLayer}: ${message}`));\n }\n }\n\n // Display results\n if (results.length > 0) {\n console.log(ansis.bold.green('\u2713 Projection successful'));\n console.log('');\n\n // Table header\n const colLayer = 'Target Layer';\n const colId = 'Element ID';\n const colName = 'Name';\n\n const maxLayerLen = Math.max(\n colLayer.length,\n ...results.map((r) => r.layer.length)\n );\n const maxIdLen = Math.max(colId.length, ...results.map((r) => r.element.id.length));\n const maxNameLen = Math.max(\n colName.length,\n ...results.map((r) => (r.element.name || '').length)\n );\n\n // Print header\n console.log(\n ansis.bold(\n ansis.cyan(colLayer.padEnd(maxLayerLen)) +\n ' ' +\n ansis.white(colId.padEnd(maxIdLen)) +\n ' ' +\n ansis.green(colName.padEnd(maxNameLen))\n )\n );\n console.log(ansis.dim('\u2500'.repeat(maxLayerLen + maxIdLen + maxNameLen + 4)));\n\n // Print rows\n for (const { layer, element } of results) {\n console.log(\n ansis.cyan(layer.padEnd(maxLayerLen)) +\n ' ' +\n ansis.white(element.id.padEnd(maxIdLen)) +\n ' ' +\n ansis.green((element.name || '').padEnd(maxNameLen))\n );\n }\n\n console.log('');\n\n if (options.dryRun) {\n console.log(ansis.yellow('Dry run - elements not saved'));\n } else {\n // Save model\n await model.save();\n console.log(ansis.green('Model saved successfully'));\n }\n } else {\n console.log(ansis.yellow('No elements were projected'));\n }\n\n console.log('');\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.error(ansis.red(`Error: ${message}`));\n process.exit(1);\n }\n}\n\nexport async function projectAllCommand(options: {\n from?: string;\n to?: string;\n dryRun?: boolean;\n model?: string;\n} = {}): Promise<void> {\n try {\n // Load model\n const model = await Model.load(options.model);\n\n // Initialize projection engine\n const engine = model.getProjectionEngine();\n\n console.log('');\n console.log(ansis.bold('Projecting all applicable elements...'));\n console.log('');\n\n if (options.from) {\n console.log(`From layer: ${options.from}`);\n }\n if (options.to) {\n console.log(`To layer: ${options.to}`);\n }\n if (options.from || options.to) {\n console.log('');\n }\n\n // Perform projections\n const projected = await engine.projectAll(\n options.from || undefined,\n options.to || undefined,\n options.dryRun\n );\n\n // Display results\n if (projected.length > 0) {\n console.log(ansis.bold.green(`\u2713 Projected ${projected.length} element(s)`));\n console.log('');\n\n // Group by layer\n const byLayer = new Map<string, any[]>();\n for (const element of projected) {\n const layer = element.layer || 'unknown';\n if (!byLayer.has(layer)) {\n byLayer.set(layer, []);\n }\n byLayer.get(layer)!.push(element);\n }\n\n // Display grouped results\n for (const [layer, elements] of Array.from(byLayer.entries()).sort()) {\n console.log(ansis.bold(`${layer}:`));\n for (const element of elements) {\n console.log(` ${ansis.dim('\u2022')} ${element.id} ${ansis.gray(`(${element.name || 'unnamed'})`)}`);\n }\n console.log('');\n }\n\n if (options.dryRun) {\n console.log(ansis.yellow('Dry run - elements not saved'));\n } else {\n // Save model\n await model.save();\n console.log(ansis.green('Model saved successfully'));\n }\n } else {\n console.log(ansis.yellow('No elements were projected'));\n }\n\n console.log('');\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.error(ansis.red(`Error: ${message}`));\n process.exit(1);\n }\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,52 +0,0 @@
1
- import { readFile, writeFile, fileExists } from "../utils/file-io.js";
2
- import { ChangesetManager } from "./changeset.js";
3
- class ActiveChangesetContext {
4
- activePath;
5
- manager;
6
- constructor(modelPath) {
7
- this.activePath = `${modelPath}/.dr/changesets/active`, this.manager = new ChangesetManager(modelPath);
8
- }
9
- /**
10
- * Get the currently active changeset name, if any
11
- */
12
- async getActive() {
13
- return await fileExists(this.activePath) && (await readFile(this.activePath)).trim() || null;
14
- }
15
- /**
16
- * Set a changeset as active for automatic tracking
17
- */
18
- async setActive(changesetName) {
19
- if (!await this.manager.load(changesetName))
20
- throw new Error(`Changeset '${changesetName}' not found`);
21
- await writeFile(this.activePath, changesetName);
22
- }
23
- /**
24
- * Clear the active changeset
25
- */
26
- async clearActive() {
27
- await fileExists(this.activePath) && await writeFile(this.activePath, "");
28
- }
29
- /**
30
- * Track a change in the active changeset
31
- * If no changeset is active, this is a no-op
32
- */
33
- async trackChange(type, elementId, layerName, before, after) {
34
- const activeChangesetName = await this.getActive();
35
- if (!activeChangesetName)
36
- return;
37
- const changeset = await this.manager.load(activeChangesetName);
38
- if (!changeset)
39
- throw new Error(`Active changeset '${activeChangesetName}' not found`);
40
- changeset.addChange(type, elementId, layerName, before, after), await this.manager.save(changeset);
41
- }
42
- /**
43
- * Check if a changeset is currently active
44
- */
45
- async isActive() {
46
- return await this.getActive() !== null;
47
- }
48
- }
49
- export {
50
- ActiveChangesetContext
51
- };
52
- //# sourceMappingURL=active-changeset.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/core/active-changeset.ts"],
4
- "sourcesContent": ["/**\n * Active Changeset Context\n *\n * Manages the currently active changeset and provides utilities for\n * automatic change tracking during model operations.\n */\n\nimport { readFile, writeFile, fileExists } from '../utils/file-io.js';\nimport { ChangesetManager } from './changeset.js';\n\n/**\n * ActiveChangesetContext manages automatic change tracking\n * when a changeset is activated for transparent operation capture\n */\nexport class ActiveChangesetContext {\n private activePath: string;\n private manager: ChangesetManager;\n\n constructor(modelPath: string) {\n this.activePath = `${modelPath}/.dr/changesets/active`;\n this.manager = new ChangesetManager(modelPath);\n }\n\n /**\n * Get the currently active changeset name, if any\n */\n async getActive(): Promise<string | null> {\n if (!(await fileExists(this.activePath))) {\n return null;\n }\n const content = await readFile(this.activePath);\n return content.trim() || null;\n }\n\n /**\n * Set a changeset as active for automatic tracking\n */\n async setActive(changesetName: string): Promise<void> {\n // Verify changeset exists\n const changeset = await this.manager.load(changesetName);\n if (!changeset) {\n throw new Error(`Changeset '${changesetName}' not found`);\n }\n await writeFile(this.activePath, changesetName);\n }\n\n /**\n * Clear the active changeset\n */\n async clearActive(): Promise<void> {\n if (await fileExists(this.activePath)) {\n await writeFile(this.activePath, '');\n }\n }\n\n /**\n * Track a change in the active changeset\n * If no changeset is active, this is a no-op\n */\n async trackChange(\n type: 'add' | 'update' | 'delete',\n elementId: string,\n layerName: string,\n before?: Record<string, unknown>,\n after?: Record<string, unknown>\n ): Promise<void> {\n const activeChangesetName = await this.getActive();\n if (!activeChangesetName) {\n return; // No active changeset, nothing to track\n }\n\n const changeset = await this.manager.load(activeChangesetName);\n if (!changeset) {\n throw new Error(`Active changeset '${activeChangesetName}' not found`);\n }\n\n changeset.addChange(type, elementId, layerName, before, after);\n await this.manager.save(changeset);\n }\n\n /**\n * Check if a changeset is currently active\n */\n async isActive(): Promise<boolean> {\n const active = await this.getActive();\n return active !== null;\n }\n}\n"],
5
- "mappings": "AAOA,SAAS,UAAU,WAAW,kBAAkB;AAChD,SAAS,wBAAwB;AAM3B,MAAO,uBAAsB;EACzB;EACA;EAER,YAAY,WAAiB;AAC3B,SAAK,aAAa,GAAG,SAAS,0BAC9B,KAAK,UAAU,IAAI,iBAAiB,SAAS;EAC/C;;;;EAKA,MAAM,YAAS;AACb,WAAM,MAAM,WAAW,KAAK,UAAU,MAGtB,MAAM,SAAS,KAAK,UAAU,GAC/B,KAAI,KAAM;EAC3B;;;;EAKA,MAAM,UAAU,eAAqB;AAGnC,QAAI,CADc,MAAM,KAAK,QAAQ,KAAK,aAAa;AAErD,YAAM,IAAI,MAAM,cAAc,aAAa,aAAa;AAE1D,UAAM,UAAU,KAAK,YAAY,aAAa;EAChD;;;;EAKA,MAAM,cAAW;AACf,IAAI,MAAM,WAAW,KAAK,UAAU,KAClC,MAAM,UAAU,KAAK,YAAY,EAAE;EAEvC;;;;;EAMA,MAAM,YACJ,MACA,WACA,WACA,QACA,OAA+B;AAE/B,UAAM,sBAAsB,MAAM,KAAK,UAAS;AAChD,QAAI,CAAC;AACH;AAGF,UAAM,YAAY,MAAM,KAAK,QAAQ,KAAK,mBAAmB;AAC7D,QAAI,CAAC;AACH,YAAM,IAAI,MAAM,qBAAqB,mBAAmB,aAAa;AAGvE,cAAU,UAAU,MAAM,WAAW,WAAW,QAAQ,KAAK,GAC7D,MAAM,KAAK,QAAQ,KAAK,SAAS;EACnC;;;;EAKA,MAAM,WAAQ;AAEZ,WADe,MAAM,KAAK,UAAS,MACjB;EACpB;;",
6
- "names": []
7
- }