@documentation-robotics/cli 0.1.0 → 0.1.5

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 +206 -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 +155 -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 +37 -13
  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,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/commands/trace.ts"],
4
- "sourcesContent": ["/**\n * Trace command - display dependency trace for an element\n */\n\nimport ansis from 'ansis';\nimport { Model } from '../core/model.js';\nimport { ReferenceRegistry } from '../core/reference-registry.js';\nimport { DependencyTracker, TraceDirection } from '../core/dependency-tracker.js';\nimport { findElementLayer } from '../utils/element-utils.js';\n\nexport async function traceCommand(\n elementId: string,\n options: {\n direction?: 'up' | 'down' | 'both';\n depth?: number;\n showMetrics?: boolean;\n model?: string;\n } = {}\n): Promise<void> {\n try {\n // Load model\n const model = await Model.load(options.model);\n\n // Find element\n const layerName = await findElementLayer(model, elementId);\n if (!layerName) {\n console.error(ansis.red(`Error: Element ${elementId} not found`));\n process.exit(1);\n }\n\n // Build reference registry\n const registry = new ReferenceRegistry();\n for (const layer of model.layers.values()) {\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 // Set default direction\n const direction = options.direction || 'both';\n\n // Display header\n console.log('');\n console.log(\n ansis.bold(\n `${ansis.blue('Dependency Trace:')} ${ansis.yellow(elementId)}`\n )\n );\n console.log(ansis.dim('\u2500'.repeat(80)));\n\n // Display dependents (elements that depend on this element - upward)\n if (direction === 'up' || direction === 'both') {\n const transitiveDependents = tracker.traceDependencies(elementId, TraceDirection.DOWN, null);\n const directDependents = tracker.traceDependencies(elementId, TraceDirection.DOWN, 1);\n\n console.log('');\n console.log(\n ansis.cyan(\n `Dependents (${directDependents.length} direct, ${transitiveDependents.length} transitive):`\n )\n );\n\n if (directDependents.length === 0) {\n console.log(ansis.dim(' (none)'));\n } else {\n // Show direct dependents with indentation\n console.log(ansis.gray(' Direct:'));\n for (const dep of directDependents.slice(0, 10)) {\n console.log(\n ` ${ansis.yellow('\u2190')} ${ansis.green(dep)}`\n );\n }\n if (directDependents.length > 10) {\n console.log(\n ansis.dim(` ... and ${directDependents.length - 10} more`)\n );\n }\n }\n\n if (transitiveDependents.length > 0 && directDependents.length > 0) {\n console.log(ansis.gray(' Transitive:'));\n const transitiveOnly = transitiveDependents.filter(\n (d: string) => !directDependents.includes(d)\n );\n for (const dep of transitiveOnly.slice(0, 10)) {\n console.log(\n ` ${ansis.yellow('\u2196')} ${ansis.dim(dep)}`\n );\n }\n if (transitiveOnly.length > 10) {\n console.log(\n ansis.dim(` ... and ${transitiveOnly.length - 10} more`)\n );\n }\n }\n }\n\n // Display dependencies (elements this element depends on - downward)\n if (direction === 'down' || direction === 'both') {\n const transitiveDependencies = tracker.traceDependencies(\n elementId,\n TraceDirection.UP,\n null\n );\n const directDependencies = tracker.traceDependencies(elementId, TraceDirection.UP, 1);\n\n console.log('');\n console.log(\n ansis.cyan(\n `Dependencies (${directDependencies.length} direct, ${transitiveDependencies.length} transitive):`\n )\n );\n\n if (directDependencies.length === 0) {\n console.log(ansis.dim(' (none)'));\n } else {\n // Show direct dependencies with indentation\n console.log(ansis.gray(' Direct:'));\n for (const dep of directDependencies.slice(0, 10)) {\n console.log(\n ` ${ansis.yellow('\u2192')} ${ansis.green(dep)}`\n );\n }\n if (directDependencies.length > 10) {\n console.log(\n ansis.dim(` ... and ${directDependencies.length - 10} more`)\n );\n }\n }\n\n if (transitiveDependencies.length > 0 && directDependencies.length > 0) {\n console.log(ansis.gray(' Transitive:'));\n const transitiveOnly = transitiveDependencies.filter(\n (d: string) => !directDependencies.includes(d)\n );\n for (const dep of transitiveOnly.slice(0, 10)) {\n console.log(\n ` ${ansis.yellow('\u2198')} ${ansis.dim(dep)}`\n );\n }\n if (transitiveOnly.length > 10) {\n console.log(\n ansis.dim(` ... and ${transitiveOnly.length - 10} more`)\n );\n }\n }\n }\n\n // Note: Advanced features like cycle detection and metrics are not yet implemented\n // in the refactored DependencyTracker matching Python CLI API\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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",
4
+ "sourcesContent": ["/**\n * Trace command - display dependency trace for an element\n */\n\nimport ansis from \"ansis\";\nimport { Model } from \"../core/model.js\";\nimport { ReferenceRegistry } from \"../core/reference-registry.js\";\nimport { DependencyTracker, TraceDirection } from \"../core/dependency-tracker.js\";\nimport { findElementLayer } from \"../utils/element-utils.js\";\nimport { isTelemetryEnabled, startSpan, endSpan } from \"../telemetry/index.js\";\nimport { CLIError } from \"../utils/errors.js\";\nimport { getErrorMessage } from \"../utils/errors.js\";\n\nexport async function traceCommand(\n elementId: string,\n options: {\n direction?: \"up\" | \"down\" | \"both\";\n depth?: number;\n showMetrics?: boolean;\n model?: string;\n } = {}\n): Promise<void> {\n const direction = options.direction || \"both\";\n const span = isTelemetryEnabled\n ? startSpan(\"trace.execute\", {\n \"trace.elementId\": elementId,\n \"trace.direction\": direction,\n \"trace.hasDepthLimit\": options.depth !== undefined,\n \"trace.depth\": options.depth,\n })\n : null;\n\n try {\n // Load model\n const model = await Model.load(options.model);\n\n // Find element\n const layerName = await findElementLayer(model, elementId);\n if (!layerName) {\n if (isTelemetryEnabled && span) {\n (span as any).setAttribute(\"trace.found\", false);\n }\n throw new CLIError(`Element ${elementId} not found`, 1);\n }\n\n if (isTelemetryEnabled && span) {\n (span as any).setAttribute(\"trace.found\", true);\n (span as any).setAttribute(\"trace.layer\", layerName);\n }\n\n // Build reference registry from element cross-layer references\n const registry = new ReferenceRegistry();\n for (const layer of model.layers.values()) {\n for (const element of layer.listElements()) {\n registry.registerElement(element);\n }\n }\n\n // Extend the dependency graph with intra-layer relationships from\n // relationships.yaml, which the registry doesn't load on its own.\n const graph = registry.getDependencyGraph();\n for (const rel of model.relationships.getAll()) {\n if (!graph.hasNode(rel.source)) graph.addNode(rel.source);\n if (!graph.hasNode(rel.target)) graph.addNode(rel.target);\n if (!graph.hasEdge(rel.source, rel.target)) {\n graph.addEdge(rel.source, rel.target, { type: rel.predicate });\n }\n }\n\n // Create dependency tracker with the fully-populated graph\n const tracker = new DependencyTracker(graph, model);\n\n // Display header\n console.log(\"\");\n console.log(ansis.bold(`${ansis.blue(\"Dependency Trace:\")} ${ansis.yellow(elementId)}`));\n console.log(ansis.dim(\"\u2500\".repeat(80)));\n\n // Display dependents (elements that depend on this element - upward)\n if (direction === \"up\" || direction === \"both\") {\n const transitiveDependents = tracker.traceDependencies(elementId, TraceDirection.DOWN, null);\n const directDependents = tracker.traceDependencies(elementId, TraceDirection.DOWN, 1);\n\n if (isTelemetryEnabled && span) {\n (span as any).setAttribute(\"trace.directDependents\", directDependents.length);\n (span as any).setAttribute(\"trace.transitiveDependents\", transitiveDependents.length);\n }\n\n const transitiveOnlyDependents = transitiveDependents.filter(\n (d: string) => !directDependents.includes(d)\n );\n\n console.log(\"\");\n console.log(\n ansis.cyan(\n `Dependents (${directDependents.length} direct, ${transitiveOnlyDependents.length} transitive):`\n )\n );\n\n if (directDependents.length === 0) {\n console.log(ansis.dim(\" (none)\"));\n } else {\n // Show direct dependents with indentation\n console.log(ansis.gray(\" Direct:\"));\n for (const dep of directDependents.slice(0, 10)) {\n console.log(` ${ansis.yellow(\"\u2190\")} ${ansis.green(dep)}`);\n }\n if (directDependents.length > 10) {\n console.log(ansis.dim(` ... and ${directDependents.length - 10} more`));\n }\n }\n\n if (transitiveOnlyDependents.length > 0) {\n console.log(ansis.gray(\" Transitive:\"));\n for (const dep of transitiveOnlyDependents.slice(0, 10)) {\n console.log(` ${ansis.yellow(\"\u2196\")} ${ansis.dim(dep)}`);\n }\n if (transitiveOnlyDependents.length > 10) {\n console.log(ansis.dim(` ... and ${transitiveOnlyDependents.length - 10} more`));\n }\n }\n }\n\n // Display dependencies (elements this element depends on - downward)\n if (direction === \"down\" || direction === \"both\") {\n const transitiveDependencies = tracker.traceDependencies(elementId, TraceDirection.UP, null);\n const directDependencies = tracker.traceDependencies(elementId, TraceDirection.UP, 1);\n\n if (isTelemetryEnabled && span) {\n (span as any).setAttribute(\"trace.directDependencies\", directDependencies.length);\n (span as any).setAttribute(\"trace.transitiveDependencies\", transitiveDependencies.length);\n }\n\n const transitiveOnlyDependencies = transitiveDependencies.filter(\n (d: string) => !directDependencies.includes(d)\n );\n\n console.log(\"\");\n console.log(\n ansis.cyan(\n `Dependencies (${directDependencies.length} direct, ${transitiveOnlyDependencies.length} transitive):`\n )\n );\n\n if (directDependencies.length === 0) {\n console.log(ansis.dim(\" (none)\"));\n } else {\n // Show direct dependencies with indentation\n console.log(ansis.gray(\" Direct:\"));\n for (const dep of directDependencies.slice(0, 10)) {\n console.log(` ${ansis.yellow(\"\u2192\")} ${ansis.green(dep)}`);\n }\n if (directDependencies.length > 10) {\n console.log(ansis.dim(` ... and ${directDependencies.length - 10} more`));\n }\n }\n\n if (transitiveOnlyDependencies.length > 0) {\n console.log(ansis.gray(\" Transitive:\"));\n for (const dep of transitiveOnlyDependencies.slice(0, 10)) {\n console.log(` ${ansis.yellow(\"\u2198\")} ${ansis.dim(dep)}`);\n }\n if (transitiveOnlyDependencies.length > 10) {\n console.log(ansis.dim(` ... and ${transitiveOnlyDependencies.length - 10} more`));\n }\n }\n }\n\n console.log(\"\");\n\n if (isTelemetryEnabled && span) {\n (span as any).setStatus({ code: 0 });\n }\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 if (error instanceof CLIError) {\n throw error;\n }\n const message = getErrorMessage(error);\n throw new CLIError(message, 1);\n } finally {\n endSpan(span);\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,32 +1,159 @@
1
1
  import ansis from "ansis";
2
2
  import { Model } from "../core/model.js";
3
+ import { MutationHandler } from "../core/mutation-handler.js";
4
+ import { StagingAreaManager } from "../core/staging-area.js";
5
+ import { StagedChangesetStorage } from "../core/staged-changeset-storage.js";
3
6
  import { findElementLayer } from "../utils/element-utils.js";
7
+ import { CLIError, handleError, findSimilar, formatValidOptions } from "../utils/errors.js";
8
+ import { isValidNodeType, getNodeTypesForLayer, normalizeNodeType } from "../generated/node-types.js";
9
+ import { Element } from "../core/element.js";
10
+ import { Layer } from "../core/layer.js";
11
+ import { SchemaValidator } from "../validators/schema-validator.js";
12
+ import { validateSourceReferenceOptions, buildSourceReference } from "../utils/source-reference.js";
4
13
  import { startSpan, endSpan } from "../telemetry/index.js";
5
14
  const isTelemetryEnabled = !1;
15
+ function validateUpdateSourceReferenceOptions(options) {
16
+ const hasSourceOptions = options.sourceFile || options.sourceSymbol || options.sourceProvenance || options.sourceRepoRemote || options.sourceRepoCommit;
17
+ if (options.clearSourceReference && hasSourceOptions)
18
+ throw new CLIError("Cannot use --clear-source-reference with other source reference options", 1, ["Specify either --clear-source-reference or other source options, not both"]);
19
+ hasSourceOptions && validateSourceReferenceOptions(options);
20
+ }
6
21
  async function updateCommand(id, options) {
7
22
  const changedFields = [];
8
- options.name && changedFields.push("name"), options.description && changedFields.push("description"), options.properties && changedFields.push("properties");
23
+ options.name && changedFields.push("name"), options.description && changedFields.push("description"), options.type && changedFields.push("type"), options.attributes && changedFields.push("attributes"), (options.sourceFile || options.clearSourceReference) && changedFields.push("sourceReference");
9
24
  const span = isTelemetryEnabled ? startSpan("element.update", {
10
25
  "element.id": id,
11
26
  "element.changed_fields": changedFields.join(",")
12
27
  }) : null;
13
28
  try {
29
+ validateUpdateSourceReferenceOptions(options);
14
30
  const model = await Model.load(), layerName = await findElementLayer(model, id);
15
- layerName || (console.error(ansis.red(`Error: Element ${id} not found`)), process.exit(1));
16
- const element = (await model.getLayer(layerName)).getElement(id), beforeState = element.toJSON();
17
- let updated = !1;
18
- if (options.name && (element.name = options.name, updated = !0), options.description !== void 0 && (element.description = options.description || void 0, updated = !0), options.properties)
19
- try {
20
- const newProperties = JSON.parse(options.properties);
21
- element.properties = { ...element.properties, ...newProperties }, updated = !0;
22
- } catch {
23
- console.error(ansis.red("Error: Invalid JSON in --properties")), process.exit(1);
31
+ if (!layerName) {
32
+ const stagingManager = new StagingAreaManager(model.rootPath, model), storage = new StagedChangesetStorage(model.rootPath), activeId = await stagingManager.getActiveId();
33
+ if (activeId) {
34
+ const changeset = await storage.load(activeId);
35
+ if (changeset) {
36
+ const addChange = changeset.changes.find((c) => c.type === "add" && c.elementId === id);
37
+ if (addChange && addChange.after) {
38
+ if (!(options.name || options.description !== void 0 || options.attributes || options.sourceFile || options.clearSourceReference || options.type)) {
39
+ console.log(ansis.yellow("No fields specified for update"));
40
+ return;
41
+ }
42
+ const after = { ...addChange.after };
43
+ if (options.type) {
44
+ const stagedLayerName = addChange.layerName;
45
+ if (!isValidNodeType(stagedLayerName, options.type)) {
46
+ const typeNames = getNodeTypesForLayer(stagedLayerName).map((t) => t.type).sort(), similar = findSimilar(options.type, typeNames, 3), suggestions = [`Valid types for ${stagedLayerName}: ${formatValidOptions(typeNames)}`];
47
+ throw similar.length > 0 && suggestions.unshift(`Did you mean: ${similar.join(" or ")}?`), new CLIError(`Invalid element type "${options.type}" for layer "${stagedLayerName}"`, 1, suggestions);
48
+ }
49
+ const resolvedNewType = normalizeNodeType(stagedLayerName, options.type);
50
+ after.type = resolvedNewType, after.spec_node_id = `${stagedLayerName}.${resolvedNewType}`;
51
+ }
52
+ if (options.name && (after.name = options.name), options.description !== void 0 && (after.description = options.description || void 0), options.attributes)
53
+ try {
54
+ const parsed = JSON.parse(options.attributes);
55
+ after.attributes = parsed;
56
+ } catch {
57
+ throw new CLIError("Invalid JSON in --attributes", 1, [
58
+ "Ensure your JSON is valid and properly formatted"
59
+ ]);
60
+ }
61
+ if (options.clearSourceReference)
62
+ delete after.source_reference;
63
+ else if (options.sourceFile) {
64
+ const newRef = buildSourceReference(options);
65
+ newRef && (after.source_reference = newRef);
66
+ }
67
+ if (options.type || options.attributes) {
68
+ const stagedLayerName = addChange.layerName, tempElem = Element.fromSpecNode({
69
+ id: String(after.id ?? addChange.elementId ?? "staged"),
70
+ path: String(after.path ?? addChange.elementId ?? ""),
71
+ spec_node_id: String(after.spec_node_id ?? ""),
72
+ type: String(after.type ?? ""),
73
+ layer_id: String(after.layer_id ?? stagedLayerName),
74
+ name: String(after.name ?? ""),
75
+ attributes: after.attributes || {}
76
+ }), schemaValidator = new SchemaValidator(), tempLayer = new Layer(stagedLayerName);
77
+ tempLayer.addElement(tempElem);
78
+ const attrValidation = await schemaValidator.validateLayer(tempLayer);
79
+ if (!attrValidation.isValid()) {
80
+ const errorMessages = attrValidation.errors.map((e) => ` ${e.message}`).join(`
81
+ `);
82
+ throw new CLIError(`Updated attributes fail schema validation:
83
+ ${errorMessages}`, 1, [
84
+ options.type ? `Incompatible attributes must be manually cleaned up before changing type. Run "dr schema ${stagedLayerName} ${after.type}" to see the required attributes` : `Run "dr schema ${stagedLayerName} ${after.type}" to see the required attributes`
85
+ ]);
86
+ }
87
+ }
88
+ await storage.updateChange(activeId, id, {
89
+ type: addChange.type,
90
+ elementId: addChange.elementId,
91
+ layerName: addChange.layerName,
92
+ before: addChange.before,
93
+ after
94
+ }), console.log(ansis.green(`\u2713 Updated staged element ${ansis.bold(id)}`));
95
+ return;
96
+ }
97
+ }
98
+ }
99
+ throw new CLIError(`Element ${id} not found`, 1);
100
+ }
101
+ const layer = await model.getLayer(layerName);
102
+ if (!layer)
103
+ throw new CLIError(`Layer ${layerName} not found`, 1);
104
+ const element = layer.getElement(id);
105
+ if (!element)
106
+ throw new CLIError(`Element ${id} not found`, 1);
107
+ if (!(options.name || options.description !== void 0 || options.type || options.attributes || options.sourceFile || options.clearSourceReference)) {
108
+ console.log(ansis.yellow("No fields specified for update"));
109
+ return;
110
+ }
111
+ await new MutationHandler(model, id, layerName).executeUpdate(element, async (elem, after) => {
112
+ let resolvedNewType;
113
+ if (options.type) {
114
+ if (!isValidNodeType(layerName, options.type)) {
115
+ const typeNames = getNodeTypesForLayer(layerName).map((t) => t.type).sort(), similar = findSimilar(options.type, typeNames, 3), suggestions = [`Valid types for ${layerName}: ${formatValidOptions(typeNames)}`];
116
+ throw similar.length > 0 && suggestions.unshift(`Did you mean: ${similar.join(" or ")}?`), new CLIError(`Invalid element type "${options.type}" for layer "${layerName}"`, 1, suggestions);
117
+ }
118
+ resolvedNewType = normalizeNodeType(layerName, options.type);
119
+ }
120
+ let parsedAttributes;
121
+ if (options.attributes)
122
+ try {
123
+ parsedAttributes = JSON.parse(options.attributes);
124
+ } catch {
125
+ throw new CLIError("Invalid JSON in --attributes", 1, [
126
+ "Ensure your JSON is valid and properly formatted"
127
+ ]);
128
+ }
129
+ if (resolvedNewType || parsedAttributes) {
130
+ const candidateType = resolvedNewType ?? elem.type, tempElem = new Element({
131
+ ...elem.toJSON(),
132
+ type: candidateType,
133
+ spec_node_id: `${layerName}.${candidateType}`,
134
+ attributes: parsedAttributes ?? elem.attributes
135
+ }), schemaValidator = new SchemaValidator(), tempLayer = new Layer(layerName);
136
+ tempLayer.addElement(tempElem);
137
+ const attrValidation = await schemaValidator.validateLayer(tempLayer);
138
+ if (!attrValidation.isValid()) {
139
+ const errorMessages = attrValidation.errors.map((e) => ` ${e.message}`).join(`
140
+ `);
141
+ throw new CLIError(`Updated attributes fail schema validation:
142
+ ${errorMessages}`, 1, [
143
+ resolvedNewType ? `Incompatible attributes must be manually cleaned up before changing type. Run "dr schema ${layerName} ${candidateType}" to see the required attributes` : `Run "dr schema ${layerName} ${elem.type}" to see the required attributes`
144
+ ]);
145
+ }
146
+ }
147
+ if (resolvedNewType && (elem.type = resolvedNewType, after.type = resolvedNewType, elem.spec_node_id = `${layerName}.${resolvedNewType}`, after.spec_node_id = `${layerName}.${resolvedNewType}`), options.name && (elem.name = options.name, after.name = options.name), options.description !== void 0 && (elem.description = options.description || void 0, after.description = options.description || void 0), parsedAttributes && (elem.attributes = parsedAttributes, after.attributes = parsedAttributes), options.clearSourceReference)
148
+ elem.setSourceReference(void 0), after.sourceReference = void 0;
149
+ else if (options.sourceFile) {
150
+ const newRef = buildSourceReference(options);
151
+ newRef && (elem.setSourceReference(newRef), after.sourceReference = newRef);
24
152
  }
25
- updated || (console.log(ansis.yellow("No fields specified for update")), process.exit(0)), await model.getActiveChangesetContext().trackChange("update", id, layerName, beforeState, element.toJSON()), await model.saveLayer(layerName), await model.saveManifest(), console.log(ansis.green(`\u2713 Updated element ${ansis.bold(id)}`)), options.verbose && (console.log(ansis.dim(` Layer: ${layerName}`)), options.name && console.log(ansis.dim(` Name: ${options.name}`)), options.description && console.log(ansis.dim(` Description: ${options.description}`)));
153
+ layer.updateElement(elem);
154
+ }), console.log(ansis.green(`\u2713 Updated element ${ansis.bold(id)}`)), options.verbose && (console.log(ansis.dim(` Layer: ${layerName}`)), options.type && console.log(ansis.dim(` Type: ${options.type}`)), options.name && console.log(ansis.dim(` Name: ${options.name}`)), options.description && console.log(ansis.dim(` Description: ${options.description}`)), options.sourceFile && console.log(ansis.dim(` Source: ${options.sourceFile}`)), options.clearSourceReference && console.log(ansis.dim(" Source: cleared")));
26
155
  } catch (error) {
27
- isTelemetryEnabled && span && (span.recordException(error), span.setStatus({ code: 2, message: error.message }));
28
- const message = error instanceof Error ? error.message : String(error);
29
- console.error(ansis.red(`Error: ${message}`)), process.exit(1);
156
+ isTelemetryEnabled && span && (span.recordException(error), span.setStatus({ code: 2, message: error.message })), handleError(error);
30
157
  } finally {
31
158
  isTelemetryEnabled && endSpan(span);
32
159
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/commands/update.ts"],
4
- "sourcesContent": ["/**\n * Update an element\n */\n\nimport ansis from 'ansis';\nimport { Model } from '../core/model.js';\nimport { findElementLayer } from '../utils/element-utils.js';\nimport { startSpan, endSpan } from '../telemetry/index.js';\n\ndeclare const TELEMETRY_ENABLED: boolean | undefined;\nconst isTelemetryEnabled = typeof TELEMETRY_ENABLED !== 'undefined' ? TELEMETRY_ENABLED : false;\n\nexport interface UpdateOptions {\n name?: string;\n description?: string;\n properties?: string;\n verbose?: boolean;\n debug?: boolean;\n}\n\nexport async function updateCommand(id: string, options: UpdateOptions): Promise<void> {\n const changedFields: string[] = [];\n if (options.name) changedFields.push('name');\n if (options.description) changedFields.push('description');\n if (options.properties) changedFields.push('properties');\n\n const span = isTelemetryEnabled ? startSpan('element.update', {\n 'element.id': id,\n 'element.changed_fields': changedFields.join(','),\n }) : null;\n\n try {\n // Load model\n const model = await Model.load();\n\n // Find element\n const layerName = await findElementLayer(model, id);\n if (!layerName) {\n console.error(ansis.red(`Error: Element ${id} not found`));\n process.exit(1);\n }\n\n const layer = (await model.getLayer(layerName))!;\n const element = layer.getElement(id)!;\n\n // Capture before state for changeset tracking\n const beforeState = element.toJSON();\n\n // Update fields\n let updated = false;\n\n if (options.name) {\n element.name = options.name;\n updated = true;\n }\n\n if (options.description !== undefined) {\n element.description = options.description || undefined;\n updated = true;\n }\n\n if (options.properties) {\n try {\n const newProperties = JSON.parse(options.properties);\n element.properties = { ...element.properties, ...newProperties };\n updated = true;\n } catch (e) {\n console.error(ansis.red('Error: Invalid JSON in --properties'));\n process.exit(1);\n }\n }\n\n if (!updated) {\n console.log(ansis.yellow('No fields specified for update'));\n process.exit(0);\n }\n\n // Track change in active changeset if present\n const activeChangeset = model.getActiveChangesetContext();\n await activeChangeset.trackChange(\n 'update',\n id,\n layerName,\n beforeState as unknown as Record<string, unknown>,\n element.toJSON() as unknown as Record<string, unknown>\n );\n\n // Save\n await model.saveLayer(layerName);\n await model.saveManifest();\n\n console.log(ansis.green(`\u2713 Updated element ${ansis.bold(id)}`));\n if (options.verbose) {\n console.log(ansis.dim(` Layer: ${layerName}`));\n if (options.name) {\n console.log(ansis.dim(` Name: ${options.name}`));\n }\n if (options.description) {\n console.log(ansis.dim(` Description: ${options.description}`));\n }\n }\n } catch (error) {\n if (isTelemetryEnabled && span) {\n (span as any).recordException(error as Error);\n (span as any).setStatus({ code: 2, message: (error as Error).message });\n }\n const message = error instanceof Error ? error.message : String(error);\n console.error(ansis.red(`Error: ${message}`));\n process.exit(1);\n } finally {\n if (isTelemetryEnabled) {\n endSpan(span);\n }\n }\n}\n"],
5
- "mappings": "AAIA,OAAO,WAAW;AAClB,SAAS,aAAa;AACtB,SAAS,wBAAwB;AACjC,SAAS,WAAW,eAAe;AAGnC,MAAM,qBAAgE;AAUtE,eAAsB,cAAc,IAAY,SAAsB;AACpE,QAAM,gBAA0B,CAAA;AAChC,EAAI,QAAQ,QAAM,cAAc,KAAK,MAAM,GACvC,QAAQ,eAAa,cAAc,KAAK,aAAa,GACrD,QAAQ,cAAY,cAAc,KAAK,YAAY;AAEvD,QAAM,OAAO,qBAAqB,UAAU,kBAAkB;IAC5D,cAAc;IACd,0BAA0B,cAAc,KAAK,GAAG;GACjD,IAAI;AAEL,MAAI;AAEF,UAAM,QAAQ,MAAM,MAAM,KAAI,GAGxB,YAAY,MAAM,iBAAiB,OAAO,EAAE;AAClD,IAAK,cACH,QAAQ,MAAM,MAAM,IAAI,kBAAkB,EAAE,YAAY,CAAC,GACzD,QAAQ,KAAK,CAAC;AAIhB,UAAM,WADS,MAAM,MAAM,SAAS,SAAS,GACvB,WAAW,EAAE,GAG7B,cAAc,QAAQ,OAAM;AAGlC,QAAI,UAAU;AAYd,QAVI,QAAQ,SACV,QAAQ,OAAO,QAAQ,MACvB,UAAU,KAGR,QAAQ,gBAAgB,WAC1B,QAAQ,cAAc,QAAQ,eAAe,QAC7C,UAAU,KAGR,QAAQ;AACV,UAAI;AACF,cAAM,gBAAgB,KAAK,MAAM,QAAQ,UAAU;AACnD,gBAAQ,aAAa,EAAE,GAAG,QAAQ,YAAY,GAAG,cAAa,GAC9D,UAAU;MACZ,QAAY;AACV,gBAAQ,MAAM,MAAM,IAAI,qCAAqC,CAAC,GAC9D,QAAQ,KAAK,CAAC;MAChB;AAGF,IAAK,YACH,QAAQ,IAAI,MAAM,OAAO,gCAAgC,CAAC,GAC1D,QAAQ,KAAK,CAAC,IAKhB,MADwB,MAAM,0BAAyB,EACjC,YACpB,UACA,IACA,WACA,aACA,QAAQ,OAAM,CAAwC,GAIxD,MAAM,MAAM,UAAU,SAAS,GAC/B,MAAM,MAAM,aAAY,GAExB,QAAQ,IAAI,MAAM,MAAM,0BAAqB,MAAM,KAAK,EAAE,CAAC,EAAE,CAAC,GAC1D,QAAQ,YACV,QAAQ,IAAI,MAAM,IAAI,YAAY,SAAS,EAAE,CAAC,GAC1C,QAAQ,QACV,QAAQ,IAAI,MAAM,IAAI,WAAW,QAAQ,IAAI,EAAE,CAAC,GAE9C,QAAQ,eACV,QAAQ,IAAI,MAAM,IAAI,kBAAkB,QAAQ,WAAW,EAAE,CAAC;EAGpE,SAAS,OAAO;AACd,IAAI,sBAAsB,SACvB,KAAa,gBAAgB,KAAc,GAC3C,KAAa,UAAU,EAAE,MAAM,GAAG,SAAU,MAAgB,QAAO,CAAE;AAExE,UAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AACrE,YAAQ,MAAM,MAAM,IAAI,UAAU,OAAO,EAAE,CAAC,GAC5C,QAAQ,KAAK,CAAC;EAChB;AACE,IAAI,sBACF,QAAQ,IAAI;EAEhB;AACF;",
4
+ "sourcesContent": ["/**\n * Update an element\n */\n\nimport ansis from \"ansis\";\nimport { Model } from \"../core/model.js\";\nimport { MutationHandler } from \"../core/mutation-handler.js\";\nimport { StagingAreaManager } from \"../core/staging-area.js\";\nimport { StagedChangesetStorage } from \"../core/staged-changeset-storage.js\";\nimport { findElementLayer } from \"../utils/element-utils.js\";\nimport { CLIError, handleError, findSimilar, formatValidOptions } from \"../utils/errors.js\";\nimport { isValidNodeType, getNodeTypesForLayer, normalizeNodeType } from \"../generated/node-types.js\";\nimport { Element } from \"../core/element.js\";\nimport { Layer } from \"../core/layer.js\";\nimport { SchemaValidator } from \"../validators/schema-validator.js\";\nimport { validateSourceReferenceOptions, buildSourceReference } from \"../utils/source-reference.js\";\nimport { startSpan, endSpan } from \"../telemetry/index.js\";\n\ndeclare const TELEMETRY_ENABLED: boolean | undefined;\nconst isTelemetryEnabled = typeof TELEMETRY_ENABLED !== \"undefined\" ? TELEMETRY_ENABLED : false;\n\nexport interface UpdateOptions {\n name?: string;\n description?: string;\n type?: string;\n attributes?: string;\n sourceFile?: string;\n sourceSymbol?: string;\n sourceProvenance?: string;\n sourceRepoRemote?: string;\n sourceRepoCommit?: string;\n clearSourceReference?: boolean;\n verbose?: boolean;\n debug?: boolean;\n}\n\n/**\n * Validate update-specific source reference options\n */\nfunction validateUpdateSourceReferenceOptions(options: UpdateOptions): void {\n const hasSourceOptions =\n options.sourceFile ||\n options.sourceSymbol ||\n options.sourceProvenance ||\n options.sourceRepoRemote ||\n options.sourceRepoCommit;\n\n if (options.clearSourceReference && hasSourceOptions) {\n throw new CLIError(\n \"Cannot use --clear-source-reference with other source reference options\",\n 1,\n [\"Specify either --clear-source-reference or other source options, not both\"]\n );\n }\n\n // Use shared validation for source reference options if any are provided\n if (hasSourceOptions) {\n validateSourceReferenceOptions(options);\n }\n}\n\nexport async function updateCommand(id: string, options: UpdateOptions): Promise<void> {\n const changedFields: string[] = [];\n if (options.name) changedFields.push(\"name\");\n if (options.description) changedFields.push(\"description\");\n if (options.type) changedFields.push(\"type\");\n if (options.attributes) changedFields.push(\"attributes\");\n if (options.sourceFile || options.clearSourceReference) changedFields.push(\"sourceReference\");\n\n const span = isTelemetryEnabled\n ? startSpan(\"element.update\", {\n \"element.id\": id,\n \"element.changed_fields\": changedFields.join(\",\"),\n })\n : null;\n\n try {\n // Validate source reference options\n validateUpdateSourceReferenceOptions(options);\n\n // Load model\n const model = await Model.load();\n\n // Find element\n const layerName = await findElementLayer(model, id);\n if (!layerName) {\n // Not in committed model \u2014 check active changeset for a staged ADD\n const stagingManager = new StagingAreaManager(model.rootPath, model);\n const storage = new StagedChangesetStorage(model.rootPath);\n const activeId = await stagingManager.getActiveId();\n\n if (activeId) {\n const changeset = await storage.load(activeId);\n if (changeset) {\n const addChange = changeset.changes.find(\n (c) => c.type === \"add\" && c.elementId === id\n );\n if (addChange && addChange.after) {\n const hasUpdates =\n options.name ||\n options.description !== undefined ||\n options.attributes ||\n options.sourceFile ||\n options.clearSourceReference ||\n options.type;\n\n if (!hasUpdates) {\n console.log(ansis.yellow(\"No fields specified for update\"));\n return;\n }\n\n const after: Record<string, unknown> = { ...addChange.after };\n\n if (options.type) {\n const stagedLayerName = addChange.layerName;\n if (!isValidNodeType(stagedLayerName, options.type)) {\n const validNodeTypes = getNodeTypesForLayer(stagedLayerName);\n const typeNames = validNodeTypes.map((t) => t.type).sort();\n const similar = findSimilar(options.type, typeNames, 3);\n const suggestions: string[] = [`Valid types for ${stagedLayerName}: ${formatValidOptions(typeNames)}`];\n if (similar.length > 0) suggestions.unshift(`Did you mean: ${similar.join(\" or \")}?`);\n throw new CLIError(`Invalid element type \"${options.type}\" for layer \"${stagedLayerName}\"`, 1, suggestions);\n }\n const resolvedNewType = normalizeNodeType(stagedLayerName, options.type);\n after.type = resolvedNewType;\n after.spec_node_id = `${stagedLayerName}.${resolvedNewType}`;\n }\n if (options.name) after.name = options.name;\n if (options.description !== undefined) {\n after.description = options.description || undefined;\n }\n if (options.attributes) {\n try {\n const parsed = JSON.parse(options.attributes);\n after.attributes = parsed;\n } catch {\n throw new CLIError(\"Invalid JSON in --attributes\", 1, [\n \"Ensure your JSON is valid and properly formatted\",\n ]);\n }\n }\n if (options.clearSourceReference) {\n delete after.source_reference;\n } else if (options.sourceFile) {\n const newRef = buildSourceReference(options);\n if (newRef) after.source_reference = newRef;\n }\n\n // Validate schema if type or attributes changed in staged element\n if (options.type || options.attributes) {\n const stagedLayerName = addChange.layerName;\n const tempElem = Element.fromSpecNode({\n id: String(after.id ?? addChange.elementId ?? \"staged\"),\n path: String(after.path ?? addChange.elementId ?? \"\"),\n spec_node_id: String(after.spec_node_id ?? \"\"),\n type: String(after.type ?? \"\"),\n layer_id: String(after.layer_id ?? stagedLayerName),\n name: String(after.name ?? \"\"),\n attributes: (after.attributes as Record<string, unknown>) || {},\n });\n const schemaValidator = new SchemaValidator();\n const tempLayer = new Layer(stagedLayerName);\n tempLayer.addElement(tempElem);\n const attrValidation = await schemaValidator.validateLayer(tempLayer);\n if (!attrValidation.isValid()) {\n const errorMessages = attrValidation.errors\n .map((e) => ` ${e.message}`)\n .join(\"\\n\");\n throw new CLIError(\n `Updated attributes fail schema validation:\\n${errorMessages}`,\n 1,\n [\n options.type\n ? `Incompatible attributes must be manually cleaned up before changing type. Run \"dr schema ${stagedLayerName} ${after.type}\" to see the required attributes`\n : `Run \"dr schema ${stagedLayerName} ${after.type}\" to see the required attributes`,\n ]\n );\n }\n }\n\n await storage.updateChange(activeId, id, {\n type: addChange.type,\n elementId: addChange.elementId,\n layerName: addChange.layerName,\n before: addChange.before,\n after,\n });\n\n console.log(ansis.green(`\u2713 Updated staged element ${ansis.bold(id)}`));\n return;\n }\n }\n }\n\n throw new CLIError(`Element ${id} not found`, 1);\n }\n\n const layer = await model.getLayer(layerName);\n if (!layer) {\n throw new CLIError(`Layer ${layerName} not found`, 1);\n }\n\n const element = layer.getElement(id);\n if (!element) {\n throw new CLIError(`Element ${id} not found`, 1);\n }\n\n // Validate that at least one field is specified\n const hasUpdates =\n options.name ||\n options.description !== undefined ||\n options.type ||\n options.attributes ||\n options.sourceFile ||\n options.clearSourceReference;\n\n if (!hasUpdates) {\n console.log(ansis.yellow(\"No fields specified for update\"));\n return;\n }\n\n // Single unified mutation handler for update\n const handler = new MutationHandler(model, id, layerName);\n\n // Execute update through unified path (handles staging and base model consistently)\n // The mutator function applies all updates in a single pass with validated JSON parsing\n await handler.executeUpdate(element, async (elem, after) => {\n // Resolve new type (validate name only \u2014 don't mutate live elem yet)\n let resolvedNewType: string | undefined;\n if (options.type) {\n if (!isValidNodeType(layerName, options.type)) {\n const validNodeTypes = getNodeTypesForLayer(layerName);\n const typeNames = validNodeTypes.map((t) => t.type).sort();\n const similar = findSimilar(options.type, typeNames, 3);\n const suggestions: string[] = [`Valid types for ${layerName}: ${formatValidOptions(typeNames)}`];\n if (similar.length > 0) suggestions.unshift(`Did you mean: ${similar.join(\" or \")}?`);\n throw new CLIError(`Invalid element type \"${options.type}\" for layer \"${layerName}\"`, 1, suggestions);\n }\n resolvedNewType = normalizeNodeType(layerName, options.type);\n }\n\n // Parse attributes (don't mutate yet)\n let parsedAttributes: Record<string, unknown> | undefined;\n if (options.attributes) {\n try {\n parsedAttributes = JSON.parse(options.attributes) as Record<string, unknown>;\n } catch (e) {\n throw new CLIError(\"Invalid JSON in --attributes\", 1, [\n \"Ensure your JSON is valid and properly formatted\",\n ]);\n }\n }\n\n // Validate against schema using a temp element BEFORE mutating the live elem\n if (resolvedNewType || parsedAttributes) {\n const candidateType = resolvedNewType ?? elem.type;\n const tempElem = new Element({\n ...elem.toJSON(),\n type: candidateType,\n spec_node_id: `${layerName}.${candidateType}`,\n attributes: parsedAttributes ?? elem.attributes,\n });\n const schemaValidator = new SchemaValidator();\n const tempLayer = new Layer(layerName);\n tempLayer.addElement(tempElem);\n const attrValidation = await schemaValidator.validateLayer(tempLayer);\n if (!attrValidation.isValid()) {\n const errorMessages = attrValidation.errors\n .map((e) => ` ${e.message}`)\n .join(\"\\n\");\n throw new CLIError(\n `Updated attributes fail schema validation:\\n${errorMessages}`,\n 1,\n [\n resolvedNewType\n ? `Incompatible attributes must be manually cleaned up before changing type. Run \"dr schema ${layerName} ${candidateType}\" to see the required attributes`\n : `Run \"dr schema ${layerName} ${elem.type}\" to see the required attributes`,\n ]\n );\n }\n }\n\n // Validation passed \u2014 apply all mutations to live element\n if (resolvedNewType) {\n elem.type = resolvedNewType;\n after.type = resolvedNewType;\n elem.spec_node_id = `${layerName}.${resolvedNewType}`;\n after.spec_node_id = `${layerName}.${resolvedNewType}`;\n }\n\n if (options.name) {\n elem.name = options.name;\n after.name = options.name;\n }\n\n if (options.description !== undefined) {\n elem.description = options.description || undefined;\n after.description = options.description || undefined;\n }\n\n if (parsedAttributes) {\n elem.attributes = parsedAttributes;\n after.attributes = parsedAttributes;\n }\n\n if (options.clearSourceReference) {\n elem.setSourceReference(undefined);\n after.sourceReference = undefined;\n } else if (options.sourceFile) {\n const newRef = buildSourceReference(options);\n if (newRef) {\n elem.setSourceReference(newRef);\n after.sourceReference = newRef;\n }\n }\n\n // Update element in layer graph to persist mutations\n layer.updateElement(elem);\n });\n\n console.log(ansis.green(`\u2713 Updated element ${ansis.bold(id)}`));\n if (options.verbose) {\n console.log(ansis.dim(` Layer: ${layerName}`));\n if (options.type) {\n console.log(ansis.dim(` Type: ${options.type}`));\n }\n if (options.name) {\n console.log(ansis.dim(` Name: ${options.name}`));\n }\n if (options.description) {\n console.log(ansis.dim(` Description: ${options.description}`));\n }\n if (options.sourceFile) {\n console.log(ansis.dim(` Source: ${options.sourceFile}`));\n }\n if (options.clearSourceReference) {\n console.log(ansis.dim(` Source: cleared`));\n }\n }\n } catch (error) {\n if (isTelemetryEnabled && span) {\n (span as any).recordException(error as Error);\n (span as any).setStatus({ code: 2, message: (error as Error).message });\n }\n handleError(error);\n } finally {\n if (isTelemetryEnabled) {\n endSpan(span);\n }\n }\n}\n"],
5
+ "mappings": "AAIA,OAAO,WAAW;AAClB,SAAS,aAAa;AACtB,SAAS,uBAAuB;AAChC,SAAS,0BAA0B;AACnC,SAAS,8BAA8B;AACvC,SAAS,wBAAwB;AACjC,SAAS,UAAU,aAAa,aAAa,0BAA0B;AACvE,SAAS,iBAAiB,sBAAsB,yBAAyB;AACzE,SAAS,eAAe;AACxB,SAAS,aAAa;AACtB,SAAS,uBAAuB;AAChC,SAAS,gCAAgC,4BAA4B;AACrE,SAAS,WAAW,eAAe;AAGnC,MAAM,qBAAgE;AAoBtE,SAAS,qCAAqC,SAAsB;AAClE,QAAM,mBACJ,QAAQ,cACR,QAAQ,gBACR,QAAQ,oBACR,QAAQ,oBACR,QAAQ;AAEV,MAAI,QAAQ,wBAAwB;AAClC,UAAM,IAAI,SACR,2EACA,GACA,CAAC,2EAA2E,CAAC;AAKjF,EAAI,oBACF,+BAA+B,OAAO;AAE1C;AAEA,eAAsB,cAAc,IAAY,SAAsB;AACpE,QAAM,gBAA0B,CAAA;AAChC,EAAI,QAAQ,QAAM,cAAc,KAAK,MAAM,GACvC,QAAQ,eAAa,cAAc,KAAK,aAAa,GACrD,QAAQ,QAAM,cAAc,KAAK,MAAM,GACvC,QAAQ,cAAY,cAAc,KAAK,YAAY,IACnD,QAAQ,cAAc,QAAQ,yBAAsB,cAAc,KAAK,iBAAiB;AAE5F,QAAM,OAAO,qBACT,UAAU,kBAAkB;IAC1B,cAAc;IACd,0BAA0B,cAAc,KAAK,GAAG;GACjD,IACD;AAEJ,MAAI;AAEF,yCAAqC,OAAO;AAG5C,UAAM,QAAQ,MAAM,MAAM,KAAI,GAGxB,YAAY,MAAM,iBAAiB,OAAO,EAAE;AAClD,QAAI,CAAC,WAAW;AAEd,YAAM,iBAAiB,IAAI,mBAAmB,MAAM,UAAU,KAAK,GAC7D,UAAU,IAAI,uBAAuB,MAAM,QAAQ,GACnD,WAAW,MAAM,eAAe,YAAW;AAEjD,UAAI,UAAU;AACZ,cAAM,YAAY,MAAM,QAAQ,KAAK,QAAQ;AAC7C,YAAI,WAAW;AACb,gBAAM,YAAY,UAAU,QAAQ,KAClC,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,cAAc,EAAE;AAE/C,cAAI,aAAa,UAAU,OAAO;AAShC,gBAAI,EAPF,QAAQ,QACR,QAAQ,gBAAgB,UACxB,QAAQ,cACR,QAAQ,cACR,QAAQ,wBACR,QAAQ,OAEO;AACf,sBAAQ,IAAI,MAAM,OAAO,gCAAgC,CAAC;AAC1D;YACF;AAEA,kBAAM,QAAiC,EAAE,GAAG,UAAU,MAAK;AAE3D,gBAAI,QAAQ,MAAM;AAChB,oBAAM,kBAAkB,UAAU;AAClC,kBAAI,CAAC,gBAAgB,iBAAiB,QAAQ,IAAI,GAAG;AAEnD,sBAAM,YADiB,qBAAqB,eAAe,EAC1B,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAI,GAClD,UAAU,YAAY,QAAQ,MAAM,WAAW,CAAC,GAChD,cAAwB,CAAC,mBAAmB,eAAe,KAAK,mBAAmB,SAAS,CAAC,EAAE;AACrG,sBAAI,QAAQ,SAAS,KAAG,YAAY,QAAQ,iBAAiB,QAAQ,KAAK,MAAM,CAAC,GAAG,GAC9E,IAAI,SAAS,yBAAyB,QAAQ,IAAI,gBAAgB,eAAe,KAAK,GAAG,WAAW;cAC5G;AACA,oBAAM,kBAAkB,kBAAkB,iBAAiB,QAAQ,IAAI;AACvE,oBAAM,OAAO,iBACb,MAAM,eAAe,GAAG,eAAe,IAAI,eAAe;YAC5D;AAKA,gBAJI,QAAQ,SAAM,MAAM,OAAO,QAAQ,OACnC,QAAQ,gBAAgB,WAC1B,MAAM,cAAc,QAAQ,eAAe,SAEzC,QAAQ;AACV,kBAAI;AACF,sBAAM,SAAS,KAAK,MAAM,QAAQ,UAAU;AAC5C,sBAAM,aAAa;cACrB,QAAQ;AACN,sBAAM,IAAI,SAAS,gCAAgC,GAAG;kBACpD;iBACD;cACH;AAEF,gBAAI,QAAQ;AACV,qBAAO,MAAM;qBACJ,QAAQ,YAAY;AAC7B,oBAAM,SAAS,qBAAqB,OAAO;AAC3C,cAAI,WAAQ,MAAM,mBAAmB;YACvC;AAGA,gBAAI,QAAQ,QAAQ,QAAQ,YAAY;AACtC,oBAAM,kBAAkB,UAAU,WAC5B,WAAW,QAAQ,aAAa;gBACpC,IAAI,OAAO,MAAM,MAAM,UAAU,aAAa,QAAQ;gBACtD,MAAM,OAAO,MAAM,QAAQ,UAAU,aAAa,EAAE;gBACpD,cAAc,OAAO,MAAM,gBAAgB,EAAE;gBAC7C,MAAM,OAAO,MAAM,QAAQ,EAAE;gBAC7B,UAAU,OAAO,MAAM,YAAY,eAAe;gBAClD,MAAM,OAAO,MAAM,QAAQ,EAAE;gBAC7B,YAAa,MAAM,cAA0C,CAAA;eAC9D,GACK,kBAAkB,IAAI,gBAAe,GACrC,YAAY,IAAI,MAAM,eAAe;AAC3C,wBAAU,WAAW,QAAQ;AAC7B,oBAAM,iBAAiB,MAAM,gBAAgB,cAAc,SAAS;AACpE,kBAAI,CAAC,eAAe,QAAO,GAAI;AAC7B,sBAAM,gBAAgB,eAAe,OAClC,IAAI,CAAC,MAAM,KAAK,EAAE,OAAO,EAAE,EAC3B,KAAK;CAAI;AACZ,sBAAM,IAAI,SACR;EAA+C,aAAa,IAC5D,GACA;kBACE,QAAQ,OACJ,4FAA4F,eAAe,IAAI,MAAM,IAAI,qCACzH,kBAAkB,eAAe,IAAI,MAAM,IAAI;iBACpD;cAEL;YACF;AAEA,kBAAM,QAAQ,aAAa,UAAU,IAAI;cACvC,MAAM,UAAU;cAChB,WAAW,UAAU;cACrB,WAAW,UAAU;cACrB,QAAQ,UAAU;cAClB;aACD,GAED,QAAQ,IAAI,MAAM,MAAM,iCAA4B,MAAM,KAAK,EAAE,CAAC,EAAE,CAAC;AACrE;UACF;QACF;MACF;AAEA,YAAM,IAAI,SAAS,WAAW,EAAE,cAAc,CAAC;IACjD;AAEA,UAAM,QAAQ,MAAM,MAAM,SAAS,SAAS;AAC5C,QAAI,CAAC;AACH,YAAM,IAAI,SAAS,SAAS,SAAS,cAAc,CAAC;AAGtD,UAAM,UAAU,MAAM,WAAW,EAAE;AACnC,QAAI,CAAC;AACH,YAAM,IAAI,SAAS,WAAW,EAAE,cAAc,CAAC;AAYjD,QAAI,EAPF,QAAQ,QACR,QAAQ,gBAAgB,UACxB,QAAQ,QACR,QAAQ,cACR,QAAQ,cACR,QAAQ,uBAEO;AACf,cAAQ,IAAI,MAAM,OAAO,gCAAgC,CAAC;AAC1D;IACF;AAOA,UAJgB,IAAI,gBAAgB,OAAO,IAAI,SAAS,EAI1C,cAAc,SAAS,OAAO,MAAM,UAAS;AAEzD,UAAI;AACJ,UAAI,QAAQ,MAAM;AAChB,YAAI,CAAC,gBAAgB,WAAW,QAAQ,IAAI,GAAG;AAE7C,gBAAM,YADiB,qBAAqB,SAAS,EACpB,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,KAAI,GAClD,UAAU,YAAY,QAAQ,MAAM,WAAW,CAAC,GAChD,cAAwB,CAAC,mBAAmB,SAAS,KAAK,mBAAmB,SAAS,CAAC,EAAE;AAC/F,gBAAI,QAAQ,SAAS,KAAG,YAAY,QAAQ,iBAAiB,QAAQ,KAAK,MAAM,CAAC,GAAG,GAC9E,IAAI,SAAS,yBAAyB,QAAQ,IAAI,gBAAgB,SAAS,KAAK,GAAG,WAAW;QACtG;AACA,0BAAkB,kBAAkB,WAAW,QAAQ,IAAI;MAC7D;AAGA,UAAI;AACJ,UAAI,QAAQ;AACV,YAAI;AACF,6BAAmB,KAAK,MAAM,QAAQ,UAAU;QAClD,QAAY;AACV,gBAAM,IAAI,SAAS,gCAAgC,GAAG;YACpD;WACD;QACH;AAIF,UAAI,mBAAmB,kBAAkB;AACvC,cAAM,gBAAgB,mBAAmB,KAAK,MACxC,WAAW,IAAI,QAAQ;UAC3B,GAAG,KAAK,OAAM;UACd,MAAM;UACN,cAAc,GAAG,SAAS,IAAI,aAAa;UAC3C,YAAY,oBAAoB,KAAK;SACtC,GACK,kBAAkB,IAAI,gBAAe,GACrC,YAAY,IAAI,MAAM,SAAS;AACrC,kBAAU,WAAW,QAAQ;AAC7B,cAAM,iBAAiB,MAAM,gBAAgB,cAAc,SAAS;AACpE,YAAI,CAAC,eAAe,QAAO,GAAI;AAC7B,gBAAM,gBAAgB,eAAe,OAClC,IAAI,CAAC,MAAM,KAAK,EAAE,OAAO,EAAE,EAC3B,KAAK;CAAI;AACZ,gBAAM,IAAI,SACR;EAA+C,aAAa,IAC5D,GACA;YACE,kBACI,4FAA4F,SAAS,IAAI,aAAa,qCACtH,kBAAkB,SAAS,IAAI,KAAK,IAAI;WAC7C;QAEL;MACF;AAyBA,UAtBI,oBACF,KAAK,OAAO,iBACZ,MAAM,OAAO,iBACb,KAAK,eAAe,GAAG,SAAS,IAAI,eAAe,IACnD,MAAM,eAAe,GAAG,SAAS,IAAI,eAAe,KAGlD,QAAQ,SACV,KAAK,OAAO,QAAQ,MACpB,MAAM,OAAO,QAAQ,OAGnB,QAAQ,gBAAgB,WAC1B,KAAK,cAAc,QAAQ,eAAe,QAC1C,MAAM,cAAc,QAAQ,eAAe,SAGzC,qBACF,KAAK,aAAa,kBAClB,MAAM,aAAa,mBAGjB,QAAQ;AACV,aAAK,mBAAmB,MAAS,GACjC,MAAM,kBAAkB;eACf,QAAQ,YAAY;AAC7B,cAAM,SAAS,qBAAqB,OAAO;AAC3C,QAAI,WACF,KAAK,mBAAmB,MAAM,GAC9B,MAAM,kBAAkB;MAE5B;AAGA,YAAM,cAAc,IAAI;IAC1B,CAAC,GAED,QAAQ,IAAI,MAAM,MAAM,0BAAqB,MAAM,KAAK,EAAE,CAAC,EAAE,CAAC,GAC1D,QAAQ,YACV,QAAQ,IAAI,MAAM,IAAI,YAAY,SAAS,EAAE,CAAC,GAC1C,QAAQ,QACV,QAAQ,IAAI,MAAM,IAAI,WAAW,QAAQ,IAAI,EAAE,CAAC,GAE9C,QAAQ,QACV,QAAQ,IAAI,MAAM,IAAI,WAAW,QAAQ,IAAI,EAAE,CAAC,GAE9C,QAAQ,eACV,QAAQ,IAAI,MAAM,IAAI,kBAAkB,QAAQ,WAAW,EAAE,CAAC,GAE5D,QAAQ,cACV,QAAQ,IAAI,MAAM,IAAI,aAAa,QAAQ,UAAU,EAAE,CAAC,GAEtD,QAAQ,wBACV,QAAQ,IAAI,MAAM,IAAI,mBAAmB,CAAC;EAGhD,SAAS,OAAO;AACd,IAAI,sBAAsB,SACvB,KAAa,gBAAgB,KAAc,GAC3C,KAAa,UAAU,EAAE,MAAM,GAAG,SAAU,MAAgB,QAAO,CAAE,IAExE,YAAY,KAAK;EACnB;AACE,IAAI,sBACF,QAAQ,IAAI;EAEhB;AACF;",
6
6
  "names": []
7
7
  }