@documentation-robotics/cli 0.1.0 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (510) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +466 -693
  3. package/dist/analysis/data-model-analyzer.js +189 -0
  4. package/dist/analysis/data-model-analyzer.js.map +7 -0
  5. package/dist/analysis/index.js +3 -0
  6. package/dist/analysis/index.js.map +7 -0
  7. package/dist/analysis/relationship-classifier.js +181 -0
  8. package/dist/analysis/relationship-classifier.js.map +7 -0
  9. package/dist/analyzers/base-analyzer.js +1 -0
  10. package/dist/analyzers/base-analyzer.js.map +7 -0
  11. package/dist/analyzers/call-graph-utils.js +39 -0
  12. package/dist/analyzers/call-graph-utils.js.map +7 -0
  13. package/dist/analyzers/cbm-analyzer.js +1205 -0
  14. package/dist/analyzers/cbm-analyzer.js.map +7 -0
  15. package/dist/analyzers/heuristic-utils.js +55 -0
  16. package/dist/analyzers/heuristic-utils.js.map +7 -0
  17. package/dist/analyzers/mapping-loader.js +146 -0
  18. package/dist/analyzers/mapping-loader.js.map +7 -0
  19. package/dist/analyzers/registry.js +124 -0
  20. package/dist/analyzers/registry.js.map +7 -0
  21. package/dist/analyzers/session-state.js +176 -0
  22. package/dist/analyzers/session-state.js.map +7 -0
  23. package/dist/analyzers/stdio-client.js +208 -0
  24. package/dist/analyzers/stdio-client.js.map +7 -0
  25. package/dist/analyzers/types.js +15 -0
  26. package/dist/analyzers/types.js.map +7 -0
  27. package/dist/analyzers/verify-engine.js +209 -0
  28. package/dist/analyzers/verify-engine.js.map +7 -0
  29. package/dist/analyzers/verify-ignore.js +130 -0
  30. package/dist/analyzers/verify-ignore.js.map +7 -0
  31. package/dist/analyzers/version.js +8 -0
  32. package/dist/analyzers/version.js.map +7 -0
  33. package/dist/audit/ai/runner.js +41 -0
  34. package/dist/audit/ai/runner.js.map +7 -0
  35. package/dist/audit/differential-analyzer.js +183 -0
  36. package/dist/audit/differential-analyzer.js.map +7 -0
  37. package/dist/audit/index.js +32 -0
  38. package/dist/audit/index.js.map +7 -0
  39. package/dist/audit/nodes/ai/evaluator.js +49 -0
  40. package/dist/audit/nodes/ai/evaluator.js.map +7 -0
  41. package/dist/audit/nodes/ai/parser.js +55 -0
  42. package/dist/audit/nodes/ai/parser.js.map +7 -0
  43. package/dist/audit/nodes/ai/prompts.js +103 -0
  44. package/dist/audit/nodes/ai/prompts.js.map +7 -0
  45. package/dist/audit/nodes/analysis/node-completeness-checker.js +32 -0
  46. package/dist/audit/nodes/analysis/node-completeness-checker.js.map +7 -0
  47. package/dist/audit/nodes/analysis/node-definition-analyzer.js +47 -0
  48. package/dist/audit/nodes/analysis/node-definition-analyzer.js.map +7 -0
  49. package/dist/audit/nodes/analysis/node-overlap-detector.js +79 -0
  50. package/dist/audit/nodes/analysis/node-overlap-detector.js.map +7 -0
  51. package/dist/audit/nodes/model/orchestrator.js +82 -0
  52. package/dist/audit/nodes/model/orchestrator.js.map +7 -0
  53. package/dist/audit/nodes/spec/loader.js +116 -0
  54. package/dist/audit/nodes/spec/loader.js.map +7 -0
  55. package/dist/audit/nodes/spec/orchestrator.js +68 -0
  56. package/dist/audit/nodes/spec/orchestrator.js.map +7 -0
  57. package/dist/audit/nodes/types.js +1 -0
  58. package/dist/audit/nodes/types.js.map +7 -0
  59. package/dist/audit/pipeline/index.js +5 -0
  60. package/dist/audit/pipeline/index.js.map +7 -0
  61. package/dist/audit/pipeline/pipeline-orchestrator.js +218 -0
  62. package/dist/audit/pipeline/pipeline-orchestrator.js.map +7 -0
  63. package/dist/audit/relationships/ai/evaluator.js +235 -0
  64. package/dist/audit/relationships/ai/evaluator.js.map +7 -0
  65. package/dist/audit/relationships/ai/parser.js +197 -0
  66. package/dist/audit/relationships/ai/parser.js.map +7 -0
  67. package/dist/audit/relationships/ai/prompts.js +274 -0
  68. package/dist/audit/relationships/ai/prompts.js.map +7 -0
  69. package/dist/audit/relationships/analysis/balance-assessor.js +115 -0
  70. package/dist/audit/relationships/analysis/balance-assessor.js.map +7 -0
  71. package/dist/audit/relationships/analysis/coverage-analyzer.js +99 -0
  72. package/dist/audit/relationships/analysis/coverage-analyzer.js.map +7 -0
  73. package/dist/audit/relationships/analysis/duplicate-detector.js +95 -0
  74. package/dist/audit/relationships/analysis/duplicate-detector.js.map +7 -0
  75. package/dist/audit/relationships/analysis/gap-analyzer.js +99 -0
  76. package/dist/audit/relationships/analysis/gap-analyzer.js.map +7 -0
  77. package/dist/audit/relationships/analysis/layer-templates.js +294 -0
  78. package/dist/audit/relationships/analysis/layer-templates.js.map +7 -0
  79. package/dist/audit/relationships/graph/connectivity.js +129 -0
  80. package/dist/audit/relationships/graph/connectivity.js.map +7 -0
  81. package/dist/audit/relationships/graph/relationship-graph.js +179 -0
  82. package/dist/audit/relationships/graph/relationship-graph.js.map +7 -0
  83. package/dist/audit/relationships/model/balance-assessor.js +49 -0
  84. package/dist/audit/relationships/model/balance-assessor.js.map +7 -0
  85. package/dist/audit/relationships/model/coverage-analyzer.js +34 -0
  86. package/dist/audit/relationships/model/coverage-analyzer.js.map +7 -0
  87. package/dist/audit/relationships/model/duplicate-detector.js +68 -0
  88. package/dist/audit/relationships/model/duplicate-detector.js.map +7 -0
  89. package/dist/audit/relationships/model/gap-analyzer.js +41 -0
  90. package/dist/audit/relationships/model/gap-analyzer.js.map +7 -0
  91. package/dist/audit/relationships/model/orchestrator.js +126 -0
  92. package/dist/audit/relationships/model/orchestrator.js.map +7 -0
  93. package/dist/audit/relationships/spec/orchestrator.js +157 -0
  94. package/dist/audit/relationships/spec/orchestrator.js.map +7 -0
  95. package/dist/audit/reports/index.js +5 -0
  96. package/dist/audit/reports/index.js.map +7 -0
  97. package/dist/audit/reports/report-generator.js +118 -0
  98. package/dist/audit/reports/report-generator.js.map +7 -0
  99. package/dist/audit/snapshot-storage.js +163 -0
  100. package/dist/audit/snapshot-storage.js.map +7 -0
  101. package/dist/audit/types.js +21 -0
  102. package/dist/audit/types.js.map +7 -0
  103. package/dist/cli.js +223 -92
  104. package/dist/cli.js.map +3 -3
  105. package/dist/coding-agents/agents/claude-code.js +147 -0
  106. package/dist/coding-agents/agents/claude-code.js.map +7 -0
  107. package/dist/coding-agents/agents/index.js +5 -0
  108. package/dist/coding-agents/agents/index.js.map +7 -0
  109. package/dist/coding-agents/agents/types.js +1 -0
  110. package/dist/coding-agents/agents/types.js.map +7 -0
  111. package/dist/coding-agents/base-chat-client.js +45 -0
  112. package/dist/coding-agents/base-chat-client.js.map +7 -0
  113. package/dist/coding-agents/chat-utils.js +23 -0
  114. package/dist/coding-agents/chat-utils.js.map +7 -0
  115. package/dist/coding-agents/claude-code-client.js +246 -0
  116. package/dist/coding-agents/claude-code-client.js.map +7 -0
  117. package/dist/coding-agents/copilot-client.js +209 -0
  118. package/dist/coding-agents/copilot-client.js.map +7 -0
  119. package/dist/commands/add.js +95 -33
  120. package/dist/commands/add.js.map +2 -2
  121. package/dist/commands/analyzer.js +511 -0
  122. package/dist/commands/analyzer.js.map +7 -0
  123. package/dist/commands/audit-diff.js +49 -0
  124. package/dist/commands/audit-diff.js.map +7 -0
  125. package/dist/commands/audit-snapshots.js +62 -0
  126. package/dist/commands/audit-snapshots.js.map +7 -0
  127. package/dist/commands/audit.js +81 -0
  128. package/dist/commands/audit.js.map +7 -0
  129. package/dist/commands/catalog.js +248 -0
  130. package/dist/commands/catalog.js.map +7 -0
  131. package/dist/commands/changeset.js +577 -66
  132. package/dist/commands/changeset.js.map +2 -2
  133. package/dist/commands/chat.js +106 -83
  134. package/dist/commands/chat.js.map +2 -2
  135. package/dist/commands/claude.js +74 -0
  136. package/dist/commands/claude.js.map +7 -0
  137. package/dist/commands/conformance.js +71 -68
  138. package/dist/commands/conformance.js.map +2 -2
  139. package/dist/commands/copilot.js +75 -0
  140. package/dist/commands/copilot.js.map +7 -0
  141. package/dist/commands/delete.js +125 -11
  142. package/dist/commands/delete.js.map +3 -3
  143. package/dist/commands/discover-logic.js +44 -0
  144. package/dist/commands/discover-logic.js.map +7 -0
  145. package/dist/commands/docs.js +87 -0
  146. package/dist/commands/docs.js.map +7 -0
  147. package/dist/commands/element.js +14 -20
  148. package/dist/commands/element.js.map +2 -2
  149. package/dist/commands/export.js +13 -3
  150. package/dist/commands/export.js.map +2 -2
  151. package/dist/commands/import.js +51 -0
  152. package/dist/commands/import.js.map +7 -0
  153. package/dist/commands/info.js +30 -24
  154. package/dist/commands/info.js.map +2 -2
  155. package/dist/commands/init.js +27 -11
  156. package/dist/commands/init.js.map +2 -2
  157. package/dist/commands/list.js +63 -13
  158. package/dist/commands/list.js.map +3 -3
  159. package/dist/commands/relationship.js +225 -37
  160. package/dist/commands/relationship.js.map +2 -2
  161. package/dist/commands/report.js +54 -0
  162. package/dist/commands/report.js.map +7 -0
  163. package/dist/commands/reports.js +45 -0
  164. package/dist/commands/reports.js.map +7 -0
  165. package/dist/commands/schema.js +135 -0
  166. package/dist/commands/schema.js.map +7 -0
  167. package/dist/commands/search.js +40 -12
  168. package/dist/commands/search.js.map +2 -2
  169. package/dist/commands/show.js +58 -27
  170. package/dist/commands/show.js.map +2 -2
  171. package/dist/commands/stats.js +35 -0
  172. package/dist/commands/stats.js.map +7 -0
  173. package/dist/commands/trace.js +39 -16
  174. package/dist/commands/trace.js.map +2 -2
  175. package/dist/commands/update.js +141 -14
  176. package/dist/commands/update.js.map +2 -2
  177. package/dist/commands/upgrade.js +210 -46
  178. package/dist/commands/upgrade.js.map +3 -3
  179. package/dist/commands/validate.js +142 -23
  180. package/dist/commands/validate.js.map +3 -3
  181. package/dist/commands/version.js +8 -12
  182. package/dist/commands/version.js.map +2 -2
  183. package/dist/commands/visualize.js +162 -25
  184. package/dist/commands/visualize.js.map +2 -2
  185. package/dist/core/base-snapshot-manager.js +84 -0
  186. package/dist/core/base-snapshot-manager.js.map +7 -0
  187. package/dist/core/changeset-exporter.js +305 -0
  188. package/dist/core/changeset-exporter.js.map +7 -0
  189. package/dist/core/changeset-validator.js +41 -0
  190. package/dist/core/changeset-validator.js.map +7 -0
  191. package/dist/core/changeset.js +88 -173
  192. package/dist/core/changeset.js.map +2 -2
  193. package/dist/core/dependency-tracker.js +4 -2
  194. package/dist/core/dependency-tracker.js.map +2 -2
  195. package/dist/core/element.js +98 -27
  196. package/dist/core/element.js.map +2 -2
  197. package/dist/core/golden-copy-cache.js +290 -0
  198. package/dist/core/golden-copy-cache.js.map +7 -0
  199. package/dist/core/graph-model.js +266 -0
  200. package/dist/core/graph-model.js.map +7 -0
  201. package/dist/core/layer.js +159 -16
  202. package/dist/core/layer.js.map +2 -2
  203. package/dist/core/layers.js +32 -0
  204. package/dist/core/layers.js.map +7 -0
  205. package/dist/core/manifest.js +32 -11
  206. package/dist/core/manifest.js.map +2 -2
  207. package/dist/core/migration-registry.js +56 -1
  208. package/dist/core/migration-registry.js.map +2 -2
  209. package/dist/core/model.js +424 -217
  210. package/dist/core/model.js.map +3 -3
  211. package/dist/core/mutation-handler.js +179 -0
  212. package/dist/core/mutation-handler.js.map +7 -0
  213. package/dist/core/reference-registry.js +29 -21
  214. package/dist/core/reference-registry.js.map +2 -2
  215. package/dist/core/relationship-catalog.js +189 -0
  216. package/dist/core/relationship-catalog.js.map +7 -0
  217. package/dist/core/relationship-registry.js.map +2 -2
  218. package/dist/core/relationships.js.map +1 -1
  219. package/dist/core/report-data-model.js +285 -0
  220. package/dist/core/report-data-model.js.map +7 -0
  221. package/dist/core/spec-data-service.js +185 -0
  222. package/dist/core/spec-data-service.js.map +7 -0
  223. package/dist/core/spec-loader-types.js +1 -0
  224. package/dist/core/spec-loader-types.js.map +7 -0
  225. package/dist/core/spec-loader.js +234 -0
  226. package/dist/core/spec-loader.js.map +7 -0
  227. package/dist/core/staged-changeset-storage.js +282 -0
  228. package/dist/core/staged-changeset-storage.js.map +7 -0
  229. package/dist/core/staging-area.js +1002 -0
  230. package/dist/core/staging-area.js.map +7 -0
  231. package/dist/core/stats-collector.js +169 -0
  232. package/dist/core/stats-collector.js.map +7 -0
  233. package/dist/core/virtual-projection.js +443 -0
  234. package/dist/core/virtual-projection.js.map +7 -0
  235. package/dist/export/archimate-exporter.js +99 -60
  236. package/dist/export/archimate-exporter.js.map +2 -2
  237. package/dist/export/audit-formatters.js +479 -0
  238. package/dist/export/audit-formatters.js.map +7 -0
  239. package/dist/export/diff-formatters.js +99 -0
  240. package/dist/export/diff-formatters.js.map +7 -0
  241. package/dist/export/export-manager.js.map +2 -2
  242. package/dist/export/graphml-exporter.js +44 -27
  243. package/dist/export/graphml-exporter.js.map +2 -2
  244. package/dist/export/index.js +4 -0
  245. package/dist/export/index.js.map +2 -2
  246. package/dist/export/json-schema-exporter.js +55 -42
  247. package/dist/export/json-schema-exporter.js.map +2 -2
  248. package/dist/export/markdown-exporter.js +92 -70
  249. package/dist/export/markdown-exporter.js.map +2 -2
  250. package/dist/export/markdown-generator.js +248 -0
  251. package/dist/export/markdown-generator.js.map +7 -0
  252. package/dist/export/markdown-utils.js +30 -0
  253. package/dist/export/markdown-utils.js.map +7 -0
  254. package/dist/export/mermaid-markdown-exporter.js +37 -0
  255. package/dist/export/mermaid-markdown-exporter.js.map +7 -0
  256. package/dist/export/openapi-exporter.js +119 -71
  257. package/dist/export/openapi-exporter.js.map +2 -2
  258. package/dist/export/plantuml-exporter.js +104 -39
  259. package/dist/export/plantuml-exporter.js.map +2 -2
  260. package/dist/export/report-formatters.js +111 -0
  261. package/dist/export/report-formatters.js.map +7 -0
  262. package/dist/export/stats-formatters.js +98 -0
  263. package/dist/export/stats-formatters.js.map +7 -0
  264. package/dist/export/types.js +2 -14
  265. package/dist/export/types.js.map +2 -2
  266. package/dist/export/verify-formatters.js +153 -0
  267. package/dist/export/verify-formatters.js.map +7 -0
  268. package/dist/generated/compiled-validators.js +17 -0
  269. package/dist/generated/compiled-validators.js.map +7 -0
  270. package/dist/generated/index.js +31 -0
  271. package/dist/generated/index.js.map +7 -0
  272. package/dist/generated/layer-registry.js +190 -0
  273. package/dist/generated/layer-registry.js.map +7 -0
  274. package/dist/generated/layer-types.js +7 -0
  275. package/dist/generated/layer-types.js.map +7 -0
  276. package/dist/generated/node-types.js +1719 -0
  277. package/dist/generated/node-types.js.map +7 -0
  278. package/dist/generated/relationship-index.js +14552 -0
  279. package/dist/generated/relationship-index.js.map +7 -0
  280. package/dist/import/archimate-importer.js +166 -0
  281. package/dist/import/archimate-importer.js.map +7 -0
  282. package/dist/import/index.js +47 -0
  283. package/dist/import/index.js.map +7 -0
  284. package/dist/import/openapi-importer.js +143 -0
  285. package/dist/import/openapi-importer.js.map +7 -0
  286. package/dist/import/types.js +1 -0
  287. package/dist/import/types.js.map +7 -0
  288. package/dist/integrations/base-manager.js +311 -0
  289. package/dist/integrations/base-manager.js.map +7 -0
  290. package/dist/integrations/claude-manager.js +360 -0
  291. package/dist/integrations/claude-manager.js.map +7 -0
  292. package/dist/integrations/claude_code/agents/dr-advisor.md +253 -0
  293. package/dist/integrations/claude_code/agents/dr-architect.md +278 -0
  294. package/dist/integrations/claude_code/agents/dr-extractor.md +286 -0
  295. package/dist/integrations/claude_code/commands/dr-changeset.md +657 -0
  296. package/dist/integrations/claude_code/commands/dr-design.md +373 -0
  297. package/dist/integrations/claude_code/commands/dr-info.md +132 -0
  298. package/dist/integrations/claude_code/commands/dr-init.md +251 -0
  299. package/dist/integrations/claude_code/commands/dr-map.md +936 -0
  300. package/dist/integrations/claude_code/commands/dr-model.md +493 -0
  301. package/dist/integrations/claude_code/commands/dr-relate.md +814 -0
  302. package/dist/integrations/claude_code/commands/dr-sync.md +279 -0
  303. package/dist/integrations/claude_code/commands/dr-validate.md +654 -0
  304. package/dist/integrations/claude_code/commands/dr-verify.md +559 -0
  305. package/dist/integrations/claude_code/docs/END_TO_END_WALKTHROUGH.md +903 -0
  306. package/dist/integrations/claude_code/docs/QUICK_START.md +271 -0
  307. package/dist/integrations/claude_code/docs/README.md +347 -0
  308. package/dist/integrations/claude_code/skills/dr_01_motivation_layer/SKILL.md +550 -0
  309. package/dist/integrations/claude_code/skills/dr_02_business_layer/SKILL.md +620 -0
  310. package/dist/integrations/claude_code/skills/dr_03_security_layer/SKILL.md +642 -0
  311. package/dist/integrations/claude_code/skills/dr_04_application_layer/SKILL.md +911 -0
  312. package/dist/integrations/claude_code/skills/dr_05_technology_layer/SKILL.md +836 -0
  313. package/dist/integrations/claude_code/skills/dr_06_api_layer/SKILL.md +933 -0
  314. package/dist/integrations/claude_code/skills/dr_07_data_model_layer/SKILL.md +210 -0
  315. package/dist/integrations/claude_code/skills/dr_08_dataset_layer/SKILL.md +319 -0
  316. package/dist/integrations/claude_code/skills/dr_09_ux_layer/SKILL.md +319 -0
  317. package/dist/integrations/claude_code/skills/dr_10_navigation_layer/SKILL.md +318 -0
  318. package/dist/integrations/claude_code/skills/dr_11_apm_layer/SKILL.md +273 -0
  319. package/dist/integrations/claude_code/skills/dr_12_testing_layer/SKILL.md +273 -0
  320. package/dist/integrations/claude_code/skills/dr_changeset_reviewer/SKILL.md +187 -0
  321. package/dist/integrations/claude_code/skills/dr_codebase_memory/SKILL.md +590 -0
  322. package/dist/integrations/claude_code/skills/dr_engineering_guide/SKILL.md +295 -0
  323. package/dist/integrations/copilot-manager.js +328 -0
  324. package/dist/integrations/copilot-manager.js.map +7 -0
  325. package/dist/integrations/github_copilot/agents/dr-advisor.md +243 -0
  326. package/dist/integrations/github_copilot/agents/dr-architect.md +1567 -0
  327. package/dist/integrations/github_copilot/skills/dr_01_motivation_layer/SKILL.md +491 -0
  328. package/dist/integrations/github_copilot/skills/dr_02_business_layer/SKILL.md +539 -0
  329. package/dist/integrations/github_copilot/skills/dr_03_security_layer/SKILL.md +667 -0
  330. package/dist/integrations/github_copilot/skills/dr_04_application_layer/SKILL.md +670 -0
  331. package/dist/integrations/github_copilot/skills/dr_05_technology_layer/SKILL.md +660 -0
  332. package/dist/integrations/github_copilot/skills/dr_06_api_layer/SKILL.md +855 -0
  333. package/dist/integrations/github_copilot/skills/dr_07_data_model_layer/SKILL.md +171 -0
  334. package/dist/integrations/github_copilot/skills/dr_08_dataset_layer/SKILL.md +216 -0
  335. package/dist/integrations/github_copilot/skills/dr_09_ux_layer/SKILL.md +230 -0
  336. package/dist/integrations/github_copilot/skills/dr_10_navigation_layer/SKILL.md +228 -0
  337. package/dist/integrations/github_copilot/skills/dr_11_apm_layer/SKILL.md +234 -0
  338. package/dist/integrations/github_copilot/skills/dr_12_testing_layer/SKILL.md +230 -0
  339. package/dist/integrations/github_copilot/skills/dr_changeset_reviewer/SKILL.md +187 -0
  340. package/dist/integrations/hash-utils.js +51 -0
  341. package/dist/integrations/hash-utils.js.map +7 -0
  342. package/dist/integrations/types.js +16 -0
  343. package/dist/integrations/types.js.map +7 -0
  344. package/dist/reports/model-layer-report-generator.js +278 -0
  345. package/dist/reports/model-layer-report-generator.js.map +7 -0
  346. package/dist/reports/model-report-data.js +57 -0
  347. package/dist/reports/model-report-data.js.map +7 -0
  348. package/dist/reports/model-report-orchestrator.js +103 -0
  349. package/dist/reports/model-report-orchestrator.js.map +7 -0
  350. package/dist/schemas/bundled/analyzers/cbm.json +595 -0
  351. package/dist/schemas/bundled/analyzers/manifest.json +9 -0
  352. package/dist/schemas/bundled/api.json +3411 -0
  353. package/dist/schemas/bundled/apm.json +2371 -0
  354. package/dist/schemas/bundled/application.json +1253 -0
  355. package/dist/schemas/bundled/base.json +1622 -0
  356. package/dist/schemas/bundled/business.json +1279 -0
  357. package/dist/schemas/bundled/data-model.json +1298 -0
  358. package/dist/schemas/bundled/data-store.json +2025 -0
  359. package/dist/schemas/bundled/manifest.json +93 -0
  360. package/dist/schemas/bundled/motivation.json +1360 -0
  361. package/dist/schemas/bundled/navigation.json +1874 -0
  362. package/dist/schemas/bundled/security.json +3488 -0
  363. package/dist/schemas/bundled/technology.json +2067 -0
  364. package/dist/schemas/bundled/testing.json +3120 -0
  365. package/dist/schemas/bundled/ux.json +3592 -0
  366. package/dist/server/schemas.js +202 -0
  367. package/dist/server/schemas.js.map +7 -0
  368. package/dist/server/server.js +1336 -252
  369. package/dist/server/server.js.map +3 -3
  370. package/dist/server/telemetry-middleware.js +22 -15
  371. package/dist/server/telemetry-middleware.js.map +2 -2
  372. package/dist/server-entry.js +65 -0
  373. package/dist/server-entry.js.map +7 -0
  374. package/dist/telemetry/config.js +89 -0
  375. package/dist/telemetry/config.js.map +7 -0
  376. package/dist/telemetry/console-interceptor.js.map +1 -1
  377. package/dist/telemetry/detect.js +24 -0
  378. package/dist/telemetry/detect.js.map +7 -0
  379. package/dist/telemetry/fetch-otlp-exporter.js +112 -0
  380. package/dist/telemetry/fetch-otlp-exporter.js.map +7 -0
  381. package/dist/telemetry/index.js +153 -3
  382. package/dist/telemetry/index.js.map +2 -2
  383. package/dist/telemetry/resilient-exporter.js +22 -8
  384. package/dist/telemetry/resilient-exporter.js.map +2 -2
  385. package/dist/telemetry/resilient-log-exporter.js +17 -8
  386. package/dist/telemetry/resilient-log-exporter.js.map +2 -2
  387. package/dist/telemetry/test-instrumentation.js.map +2 -2
  388. package/dist/types/index.js +84 -0
  389. package/dist/types/index.js.map +3 -3
  390. package/dist/types/source-reference.js +1 -0
  391. package/dist/types/source-reference.js.map +7 -0
  392. package/dist/utils/chat-logger.js +292 -0
  393. package/dist/utils/chat-logger.js.map +7 -0
  394. package/dist/utils/claude-stream.js +8 -0
  395. package/dist/utils/claude-stream.js.map +7 -0
  396. package/dist/utils/date-utils.js +7 -0
  397. package/dist/utils/date-utils.js.map +7 -0
  398. package/dist/utils/element-utils.js.map +1 -1
  399. package/dist/utils/errors.js +88 -15
  400. package/dist/utils/errors.js.map +3 -3
  401. package/dist/utils/export-python-annotations.js +82 -0
  402. package/dist/utils/export-python-annotations.js.map +7 -0
  403. package/dist/utils/file-io.js +7 -2
  404. package/dist/utils/file-io.js.map +2 -2
  405. package/dist/utils/file-lock.js +156 -0
  406. package/dist/utils/file-lock.js.map +7 -0
  407. package/dist/utils/id-generator.js +18 -0
  408. package/dist/utils/id-generator.js.map +7 -0
  409. package/dist/utils/layer-name-formatter.js +16 -0
  410. package/dist/utils/layer-name-formatter.js.map +7 -0
  411. package/dist/utils/markdown-anchor.js +7 -0
  412. package/dist/utils/markdown-anchor.js.map +7 -0
  413. package/dist/utils/markdown-link.js +12 -0
  414. package/dist/utils/markdown-link.js.map +7 -0
  415. package/dist/utils/markdown-table.js +17 -0
  416. package/dist/utils/markdown-table.js.map +7 -0
  417. package/dist/utils/mermaid-utils.js +11 -0
  418. package/dist/utils/mermaid-utils.js.map +7 -0
  419. package/dist/utils/project-paths.js.map +2 -2
  420. package/dist/utils/source-reference.js +52 -0
  421. package/dist/utils/source-reference.js.map +7 -0
  422. package/dist/utils/spec-installer.js +40 -53
  423. package/dist/utils/spec-installer.js.map +2 -2
  424. package/dist/utils/spec-version.js +5 -1
  425. package/dist/utils/spec-version.js.map +2 -2
  426. package/dist/utils/string-utils.js +12 -0
  427. package/dist/utils/string-utils.js.map +7 -0
  428. package/dist/utils/table-formatting.js +19 -0
  429. package/dist/utils/table-formatting.js.map +7 -0
  430. package/dist/validators/index.js +4 -0
  431. package/dist/validators/index.js.map +2 -2
  432. package/dist/validators/naming-validator.js +20 -23
  433. package/dist/validators/naming-validator.js.map +2 -2
  434. package/dist/validators/reference-validator.js +23 -38
  435. package/dist/validators/reference-validator.js.map +2 -2
  436. package/dist/validators/relationship-schema-validator.js +243 -0
  437. package/dist/validators/relationship-schema-validator.js.map +7 -0
  438. package/dist/validators/schema-validator.js +168 -68
  439. package/dist/validators/schema-validator.js.map +2 -2
  440. package/dist/validators/semantic-validator.js +36 -60
  441. package/dist/validators/semantic-validator.js.map +2 -2
  442. package/dist/validators/types.js.map +2 -2
  443. package/dist/validators/validation-formatter.js +159 -0
  444. package/dist/validators/validation-formatter.js.map +7 -0
  445. package/dist/validators/validator.js +24 -38
  446. package/dist/validators/validator.js.map +2 -2
  447. package/dist/viewer/README.md +139 -0
  448. package/dist/viewer/assets/main-CY0Xufuj.css +1 -0
  449. package/dist/viewer/assets/main-DtgErnwF.js +81 -0
  450. package/dist/viewer/assets/vendor-CxKvDp2x.js +17 -0
  451. package/dist/viewer/favicon.svg +11 -0
  452. package/dist/viewer/fonts/inter/Inter-Black.woff2 +0 -0
  453. package/dist/viewer/fonts/inter/Inter-Bold.woff2 +0 -0
  454. package/dist/viewer/fonts/inter/Inter-ExtraBold.woff2 +0 -0
  455. package/dist/viewer/fonts/inter/Inter-Light.woff2 +0 -0
  456. package/dist/viewer/fonts/inter/Inter-Medium.woff2 +0 -0
  457. package/dist/viewer/fonts/inter/Inter-Regular.woff2 +0 -0
  458. package/dist/viewer/fonts/inter/Inter-SemiBold.woff2 +0 -0
  459. package/dist/viewer/fonts/jetbrains-mono/JetBrainsMono-Medium.woff2 +0 -0
  460. package/dist/viewer/fonts/jetbrains-mono/JetBrainsMono-Regular.woff2 +0 -0
  461. package/dist/viewer/fonts/jetbrains-mono/JetBrainsMono-SemiBold.woff2 +0 -0
  462. package/dist/viewer/index.html +15 -0
  463. package/dist/viewer/manifest.json +99 -0
  464. package/dist/viewer/version.json +1 -0
  465. package/package.json +42 -16
  466. package/PYTHON_CLI_PARITY.md +0 -265
  467. package/PYTHON_CLI_STRUCTURE_UPDATE.md +0 -246
  468. package/biome.json +0 -42
  469. package/bunfig.toml +0 -3
  470. package/dist/ai/claude-client.js +0 -71
  471. package/dist/ai/claude-client.js.map +0 -7
  472. package/dist/ai/context-provider.js +0 -129
  473. package/dist/ai/context-provider.js.map +0 -7
  474. package/dist/ai/tools.js +0 -231
  475. package/dist/ai/tools.js.map +0 -7
  476. package/dist/commands/migrate.js +0 -36
  477. package/dist/commands/migrate.js.map +0 -7
  478. package/dist/commands/project.js +0 -74
  479. package/dist/commands/project.js.map +0 -7
  480. package/dist/core/active-changeset.js +0 -52
  481. package/dist/core/active-changeset.js.map +0 -7
  482. package/dist/core/projection-engine.js +0 -288
  483. package/dist/core/projection-engine.js.map +0 -7
  484. package/dist/schemas/bundled/01-motivation-layer.schema.json +0 -942
  485. package/dist/schemas/bundled/02-business-layer.schema.json +0 -1293
  486. package/dist/schemas/bundled/03-security-layer.schema.json +0 -2177
  487. package/dist/schemas/bundled/04-application-layer.schema.json +0 -1328
  488. package/dist/schemas/bundled/05-technology-layer.schema.json +0 -1465
  489. package/dist/schemas/bundled/06-api-layer.schema.json +0 -1743
  490. package/dist/schemas/bundled/07-data-model-layer.schema.json +0 -1253
  491. package/dist/schemas/bundled/08-datastore-layer.schema.json +0 -892
  492. package/dist/schemas/bundled/09-ux-layer.schema.json +0 -1506
  493. package/dist/schemas/bundled/10-navigation-layer.schema.json +0 -843
  494. package/dist/schemas/bundled/11-apm-observability-layer.schema.json +0 -1430
  495. package/dist/schemas/bundled/12-testing-layer.schema.json +0 -1091
  496. package/dist/schemas/bundled/common/layer-extensions.schema.json +0 -266
  497. package/dist/schemas/bundled/common/predicates.schema.json +0 -493
  498. package/dist/schemas/bundled/common/relationships.schema.json +0 -791
  499. package/dist/schemas/bundled/common/source-references.schema.json +0 -71
  500. package/dist/schemas/bundled/link-registry.json +0 -1839
  501. package/dist/schemas/bundled/link-registry.schema.json +0 -339
  502. package/dist/schemas/bundled/relationship-catalog.json +0 -1302
  503. package/dist/schemas/bundled/relationship-type.schema.json +0 -221
  504. package/dist/utils/model-path.js +0 -22
  505. package/dist/utils/model-path.js.map +0 -7
  506. package/docs/TEST-INSTRUMENTATION.md +0 -405
  507. package/docs/telemetry.md +0 -427
  508. package/test-debug.js +0 -33
  509. package/test-special.mjs +0 -46
  510. package/test_runner.ts +0 -7
@@ -0,0 +1,74 @@
1
+ import { ClaudeIntegrationManager } from "../integrations/claude-manager.js";
2
+ import { CLIError } from "../utils/errors.js";
3
+ import { getErrorMessage } from "../utils/errors.js";
4
+ function claudeCommands(program) {
5
+ const claude = program.command("claude").description("Manage Claude Code integration files");
6
+ claude.command("install").description("Install Claude Code integration files").option("--reference-only", "Install only reference sheets").option("--commands-only", "Install only commands").option("--agents-only", "Install only agents").option("--skills-only", "Install only skills").option("--templates-only", "Install only templates").option("-f, --force", "Skip confirmation prompts").addHelpText("after", `
7
+ Examples:
8
+ $ dr claude install # Install all components
9
+ $ dr claude install --reference-only # Install only reference sheets
10
+ $ dr claude install --skills-only -f # Force install only skills
11
+ $ dr claude install --commands-only --agents-only # Install specific components`).action(async (options) => {
12
+ const manager = new ClaudeIntegrationManager(), components = [];
13
+ options.referenceOnly && components.push("reference_sheets"), options.commandsOnly && components.push("commands"), options.agentsOnly && components.push("agents"), options.skillsOnly && components.push("skills"), options.templatesOnly && components.push("templates");
14
+ try {
15
+ await manager.install({
16
+ components: components.length > 0 ? components : void 0,
17
+ force: options.force
18
+ });
19
+ } catch (error) {
20
+ throw new CLIError(getErrorMessage(error), 1);
21
+ }
22
+ }), claude.command("upgrade").description("Upgrade installed Claude Code integration").option("--dry-run", "Preview changes without applying them").option("-f, --force", "Skip confirmation prompts").addHelpText("after", `
23
+ Examples:
24
+ $ dr claude upgrade # Check for upgrades and prompt to apply
25
+ $ dr claude upgrade --dry-run # Preview what would be upgraded
26
+ $ dr claude upgrade -f # Force upgrade without prompting`).action(async (options) => {
27
+ const manager = new ClaudeIntegrationManager();
28
+ try {
29
+ await manager.upgrade({
30
+ dryRun: options.dryRun,
31
+ force: options.force
32
+ });
33
+ } catch (error) {
34
+ throw new CLIError(getErrorMessage(error), 1);
35
+ }
36
+ }), claude.command("remove").description("Remove Claude Code integration files").option("--reference", "Remove only reference sheets").option("--commands", "Remove only commands").option("--agents", "Remove only agents").option("--skills", "Remove only skills").option("--templates", "Remove only templates").option("-f, --force", "Skip confirmation prompts").addHelpText("after", `
37
+ Examples:
38
+ $ dr claude remove # Remove all components
39
+ $ dr claude remove --reference # Remove only reference sheets
40
+ $ dr claude remove --skills -f # Force remove only skills`).action(async (options) => {
41
+ const manager = new ClaudeIntegrationManager(), components = [];
42
+ options.reference && components.push("reference_sheets"), options.commands && components.push("commands"), options.agents && components.push("agents"), options.skills && components.push("skills"), options.templates && components.push("templates");
43
+ try {
44
+ await manager.remove({
45
+ components: components.length > 0 ? components : void 0,
46
+ force: options.force
47
+ });
48
+ } catch (error) {
49
+ throw new CLIError(getErrorMessage(error), 1);
50
+ }
51
+ }), claude.command("status").description("Show Claude Code integration status").addHelpText("after", `
52
+ Examples:
53
+ $ dr claude status # Show installation status and component details`).action(async () => {
54
+ const manager = new ClaudeIntegrationManager();
55
+ try {
56
+ await manager.status();
57
+ } catch (error) {
58
+ throw new CLIError(getErrorMessage(error), 1);
59
+ }
60
+ }), claude.command("list").description("List available Claude Code components").addHelpText("after", `
61
+ Examples:
62
+ $ dr claude list # Show all available components and descriptions`).action(async () => {
63
+ const manager = new ClaudeIntegrationManager();
64
+ try {
65
+ await manager.list();
66
+ } catch (error) {
67
+ throw new CLIError(getErrorMessage(error), 1);
68
+ }
69
+ });
70
+ }
71
+ export {
72
+ claudeCommands
73
+ };
74
+ //# sourceMappingURL=claude.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/commands/claude.ts"],
4
+ "sourcesContent": ["/**\n * Claude Code Integration Management Command\n *\n * Manages installation, upgrades, and configuration of Claude Code integration files.\n * Provides subcommands for install, upgrade, remove, status, and list operations.\n */\n\nimport { Command } from \"commander\";\nimport { ClaudeIntegrationManager } from \"../integrations/claude-manager.js\";\nimport { CLIError } from \"../utils/errors.js\";\nimport { getErrorMessage } from \"../utils/errors.js\";\n\n/**\n * Register all Claude integration subcommands\n *\n * Usage:\n * dr claude install [--reference-only] [--commands-only] [--agents-only] [--skills-only] [--templates-only] [-f|--force]\n * dr claude upgrade [--dry-run] [-f|--force]\n * dr claude remove [--reference] [--commands] [--agents] [--skills] [--templates] [-f|--force]\n * dr claude status\n * dr claude list\n */\nexport function claudeCommands(program: Command): void {\n const claude = program.command(\"claude\").description(\"Manage Claude Code integration files\");\n\n /**\n * Install subcommand\n *\n * Copies Claude integration files to .claude/ directory\n * Supports component-specific filtering via flags\n */\n claude\n .command(\"install\")\n .description(\"Install Claude Code integration files\")\n .option(\"--reference-only\", \"Install only reference sheets\")\n .option(\"--commands-only\", \"Install only commands\")\n .option(\"--agents-only\", \"Install only agents\")\n .option(\"--skills-only\", \"Install only skills\")\n .option(\"--templates-only\", \"Install only templates\")\n .option(\"-f, --force\", \"Skip confirmation prompts\")\n .addHelpText(\n \"after\",\n `\nExamples:\n $ dr claude install # Install all components\n $ dr claude install --reference-only # Install only reference sheets\n $ dr claude install --skills-only -f # Force install only skills\n $ dr claude install --commands-only --agents-only # Install specific components`\n )\n .action(async (options) => {\n const manager = new ClaudeIntegrationManager();\n\n // Build component filter from flags\n const components: string[] = [];\n if (options.referenceOnly) components.push(\"reference_sheets\");\n if (options.commandsOnly) components.push(\"commands\");\n if (options.agentsOnly) components.push(\"agents\");\n if (options.skillsOnly) components.push(\"skills\");\n if (options.templatesOnly) components.push(\"templates\");\n\n try {\n await manager.install({\n components: components.length > 0 ? components : undefined,\n force: options.force,\n });\n } catch (error) {\n throw new CLIError(getErrorMessage(error), 1);\n }\n });\n\n /**\n * Upgrade subcommand\n *\n * Checks for upgrades to installed components and optionally applies them.\n * Supports dry-run mode to preview changes without modifying files.\n */\n claude\n .command(\"upgrade\")\n .description(\"Upgrade installed Claude Code integration\")\n .option(\"--dry-run\", \"Preview changes without applying them\")\n .option(\"-f, --force\", \"Skip confirmation prompts\")\n .addHelpText(\n \"after\",\n `\nExamples:\n $ dr claude upgrade # Check for upgrades and prompt to apply\n $ dr claude upgrade --dry-run # Preview what would be upgraded\n $ dr claude upgrade -f # Force upgrade without prompting`\n )\n .action(async (options) => {\n const manager = new ClaudeIntegrationManager();\n\n try {\n await manager.upgrade({\n dryRun: options.dryRun,\n force: options.force,\n });\n } catch (error) {\n throw new CLIError(getErrorMessage(error), 1);\n }\n });\n\n /**\n * Remove subcommand\n *\n * Removes installed Claude integration files\n * Supports component-specific removal via flags\n */\n claude\n .command(\"remove\")\n .description(\"Remove Claude Code integration files\")\n .option(\"--reference\", \"Remove only reference sheets\")\n .option(\"--commands\", \"Remove only commands\")\n .option(\"--agents\", \"Remove only agents\")\n .option(\"--skills\", \"Remove only skills\")\n .option(\"--templates\", \"Remove only templates\")\n .option(\"-f, --force\", \"Skip confirmation prompts\")\n .addHelpText(\n \"after\",\n `\nExamples:\n $ dr claude remove # Remove all components\n $ dr claude remove --reference # Remove only reference sheets\n $ dr claude remove --skills -f # Force remove only skills`\n )\n .action(async (options) => {\n const manager = new ClaudeIntegrationManager();\n\n // Build component filter from flags\n const components: string[] = [];\n if (options.reference) components.push(\"reference_sheets\");\n if (options.commands) components.push(\"commands\");\n if (options.agents) components.push(\"agents\");\n if (options.skills) components.push(\"skills\");\n if (options.templates) components.push(\"templates\");\n\n try {\n await manager.remove({\n components: components.length > 0 ? components : undefined,\n force: options.force,\n });\n } catch (error) {\n throw new CLIError(getErrorMessage(error), 1);\n }\n });\n\n /**\n * Status subcommand\n *\n * Displays current installation status, version info, and component details\n */\n claude\n .command(\"status\")\n .description(\"Show Claude Code integration status\")\n .addHelpText(\n \"after\",\n `\nExamples:\n $ dr claude status # Show installation status and component details`\n )\n .action(async () => {\n const manager = new ClaudeIntegrationManager();\n\n try {\n await manager.status();\n } catch (error) {\n throw new CLIError(getErrorMessage(error), 1);\n }\n });\n\n /**\n * List subcommand\n *\n * Lists all available components that can be installed\n */\n claude\n .command(\"list\")\n .description(\"List available Claude Code components\")\n .addHelpText(\n \"after\",\n `\nExamples:\n $ dr claude list # Show all available components and descriptions`\n )\n .action(async () => {\n const manager = new ClaudeIntegrationManager();\n\n try {\n await manager.list();\n } catch (error) {\n throw new CLIError(getErrorMessage(error), 1);\n }\n });\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -1,56 +1,43 @@
1
1
  import ansis from "ansis";
2
2
  import { Model } from "../core/model.js";
3
- const LAYER_ELEMENT_TYPES = {
4
- motivation: ["stakeholder", "goal", "requirement", "principle"],
5
- business: ["business-service", "business-process", "business-actor"],
6
- security: ["authentication-mechanism", "authorization-policy", "threat", "security-control"],
7
- application: ["application-service", "application-component", "application-interface"],
8
- technology: ["technology-service", "technology-component", "infrastructure-service"],
9
- api: ["rest-resource", "rest-operation", "api-specification"],
10
- "data-model": ["entity", "value-object", "relationship", "attribute"],
11
- "data-store": ["database", "table", "storage-service"],
12
- ux: ["ux-application", "ux-library", "ux-spec", "screen", "component"],
13
- navigation: ["navigation-path", "navigation-transition", "route"],
14
- apm: ["metric", "trace", "log-source", "alert-rule"],
15
- testing: ["test-strategy", "test-case", "test-data", "test-result"]
16
- }, LAYER_RELATIONSHIPS = {
17
- business: [
18
- { target: "motivation", relationship: "realizes" }
19
- ],
20
- application: [
21
- { target: "business", relationship: "realizes" },
22
- { target: "security", relationship: "uses" }
23
- ],
24
- technology: [
25
- { target: "application", relationship: "hosts" },
26
- { target: "security", relationship: "implements" }
27
- ],
28
- api: [
29
- { target: "application", relationship: "exposes" }
30
- ],
31
- "data-model": [
32
- { target: "application", relationship: "used-by" }
33
- ],
34
- "data-store": [
35
- { target: "technology", relationship: "runs-on" },
36
- { target: "data-model", relationship: "implements" }
37
- ],
38
- ux: [
39
- { target: "application", relationship: "implements" },
40
- { target: "navigation", relationship: "uses" }
41
- ],
42
- navigation: [
43
- { target: "ux", relationship: "defines" }
44
- ],
45
- apm: [
46
- { target: "technology", relationship: "monitors" },
47
- { target: "application", relationship: "monitors" }
48
- ],
49
- testing: [
50
- { target: "application", relationship: "tests" },
51
- { target: "api", relationship: "tests" }
52
- ]
53
- };
3
+ import { getAllLayerIds, getSpecNodeTypesForLayer, getLayerById } from "../generated/index.js";
4
+ import { RELATIONSHIPS_BY_SOURCE } from "../generated/relationship-index.js";
5
+ import { getErrorMessage } from "../utils/errors.js";
6
+ function getLayerElementTypes() {
7
+ const layerTypes = {}, layers = getAllLayerIds();
8
+ for (const layer of layers)
9
+ layerTypes[layer] = getSpecNodeTypesForLayer(layer).map((t) => t.split(".")[1] || "").filter(Boolean);
10
+ return layerTypes;
11
+ }
12
+ const LAYER_ELEMENT_TYPES = getLayerElementTypes();
13
+ function getLayerCrossLayerRelationships() {
14
+ const relationships = {}, layers = getAllLayerIds();
15
+ for (const sourceLayerId of layers) {
16
+ if (!getLayerById(sourceLayerId))
17
+ continue;
18
+ const specMap = /* @__PURE__ */ new Map(), sourceNodeTypes = getSpecNodeTypesForLayer(sourceLayerId);
19
+ for (const sourceNodeType of sourceNodeTypes) {
20
+ const rels = RELATIONSHIPS_BY_SOURCE.get(sourceNodeType) || [], sourceElemType = sourceNodeType.split(".")[1] || "";
21
+ for (const rel of rels) {
22
+ const parts = rel.destinationSpecNodeId.split("."), destLayerId = parts[0], destElemType = parts[1] || "";
23
+ if (destLayerId && destLayerId !== sourceLayerId) {
24
+ const key = `${destLayerId}:${rel.predicate}`;
25
+ specMap.has(key) || specMap.set(key, {
26
+ target: destLayerId,
27
+ relationship: rel.predicate,
28
+ sourceTypes: [],
29
+ destTypes: []
30
+ });
31
+ const spec = specMap.get(key);
32
+ sourceElemType && !spec.sourceTypes.includes(sourceElemType) && spec.sourceTypes.push(sourceElemType), destElemType && !spec.destTypes.includes(destElemType) && spec.destTypes.push(destElemType);
33
+ }
34
+ }
35
+ }
36
+ relationships[sourceLayerId] = Array.from(specMap.values());
37
+ }
38
+ return relationships;
39
+ }
40
+ const LAYER_RELATIONSHIPS = getLayerCrossLayerRelationships();
54
41
  async function conformanceCommand(options) {
55
42
  try {
56
43
  const model = await Model.load(process.cwd(), { lazyLoad: !1 });
@@ -58,7 +45,7 @@ async function conformanceCommand(options) {
58
45
  Checking conformance to layer specifications...
59
46
  `));
60
47
  const results = {};
61
- let totalIssues = 0, compliantLayers = 0;
48
+ let totalIssues = 0, totalErrors = 0, compliantLayers = 0;
62
49
  for (const [layerName, layer] of model.layers) {
63
50
  if (options.layers && !options.layers.includes(layerName))
64
51
  continue;
@@ -76,26 +63,35 @@ Checking conformance to layer specifications...
76
63
  }), element.type || issues.push({
77
64
  severity: "error",
78
65
  message: "Element missing required property: type"
79
- }), !element.properties.name && !element.properties.description && issues.push({
80
- severity: "warning",
81
- message: `Element ${element.id} should have a name or description`
82
- });
83
- const expectedRelationships = LAYER_RELATIONSHIPS[layerName] || [];
84
- for (const expectedRel of expectedRelationships)
85
- issues.push({
66
+ }), !element.name && !element.description && issues.push({
86
67
  severity: "warning",
87
- message: `Expected relationship to ${expectedRel.target}: ${expectedRel.relationship}`
68
+ message: `Element ${element.path || element.id} should have a name or description`
88
69
  });
70
+ const expectedRelationships = LAYER_RELATIONSHIPS[layerName] || [], layerRelationships = model.relationships.getAll().filter((rel) => rel.layer === layerName);
71
+ for (const expectedRel of expectedRelationships) {
72
+ const hasSourceTypeMeta = expectedRel.sourceTypes.length > 0, hasDestTypeMeta = expectedRel.destTypes.length > 0;
73
+ if (hasSourceTypeMeta && !expectedRel.sourceTypes.some((t) => presentTypes.has(t)))
74
+ continue;
75
+ const targetLayer = model.layers.get(expectedRel.target), targetPresentTypes = new Set((targetLayer?.listElements() ?? []).map((e) => e.type));
76
+ if (hasDestTypeMeta && !expectedRel.destTypes.some((t) => targetPresentTypes.has(t)))
77
+ continue;
78
+ if (!layerRelationships.some((rel) => rel.predicate === expectedRel.relationship && rel.targetLayer === expectedRel.target)) {
79
+ const pairHint = expectedRel.sourceTypes.length > 0 && expectedRel.destTypes.length > 0 ? ` (valid pairs: ${expectedRel.sourceTypes.join("/")} \u2192 ${expectedRel.destTypes.join("/")})` : "";
80
+ issues.push({
81
+ severity: "warning",
82
+ message: `Expected relationship to ${expectedRel.target}: ${expectedRel.relationship} not found${pairHint}`
83
+ });
84
+ }
85
+ }
89
86
  results[layerName] = {
90
87
  compliant: issues.filter((i) => i.severity === "error").length === 0,
91
88
  issues,
92
89
  stats: {
93
90
  elementCount: elements.length,
94
91
  elementTypes: presentTypes.size,
95
- relationshipCount: 0
96
- // Would be populated from relationship registry
92
+ relationshipCount: layerRelationships.length
97
93
  }
98
- }, results[layerName].compliant && compliantLayers++, totalIssues += issues.length;
94
+ }, results[layerName].compliant && compliantLayers++, totalIssues += issues.length, totalErrors += issues.filter((i) => i.severity === "error").length;
99
95
  }
100
96
  if (options.json) {
101
97
  const jsonOutput = {
@@ -104,6 +100,8 @@ Checking conformance to layer specifications...
104
100
  compliantLayers,
105
101
  totalLayers: Object.keys(results).length,
106
102
  totalIssues,
103
+ totalErrors,
104
+ totalWarnings: totalIssues - totalErrors,
107
105
  layers: results
108
106
  }
109
107
  };
@@ -112,18 +110,23 @@ Checking conformance to layer specifications...
112
110
  }
113
111
  console.log(ansis.dim("Layer conformance:")), console.log();
114
112
  for (const [layerName, result] of Object.entries(results)) {
115
- if (result.compliant)
116
- console.log(ansis.green(`\u2713 ${layerName}`));
117
- else if (console.log(ansis.red(`\u2717 ${layerName} - ${result.issues.length} issue(s)`)), options.verbose)
113
+ if (result.compliant) {
114
+ if (console.log(ansis.green(`\u2713 ${layerName}`)), options.verbose && result.issues.length > 0)
115
+ for (const issue of result.issues) {
116
+ const prefix = issue.severity === "error" ? ansis.red("[ERROR]") : ansis.yellow("[WARNING]");
117
+ console.log(ansis.dim(` ${prefix} ${issue.message}`));
118
+ }
119
+ } else if (console.log(ansis.red(`\u2717 ${layerName} - ${result.issues.length} issue(s)`)), options.verbose)
118
120
  for (const issue of result.issues) {
119
121
  const prefix = issue.severity === "error" ? ansis.red("[ERROR]") : ansis.yellow("[WARNING]");
120
122
  console.log(ansis.dim(` ${prefix} ${issue.message}`));
121
123
  }
122
124
  console.log(ansis.dim(` Elements: ${result.stats.elementCount}, Types: ${result.stats.elementTypes}`)), console.log();
123
125
  }
124
- console.log(ansis.dim("Summary:")), console.log(ansis.dim(` Compliant layers: ${compliantLayers}/${Object.keys(results).length}`)), console.log(ansis.dim(` Total issues: ${totalIssues}`)), console.log(), console.log(totalIssues === 0 ? ansis.green("\u2713 Model is fully conformant") : ansis.yellow("\u26A0 Model has conformance issues. Run 'dr validate' for more details.")), console.log();
126
+ const totalWarnings = totalIssues - totalErrors;
127
+ console.log(ansis.dim("Summary:")), console.log(ansis.dim(` Compliant layers: ${compliantLayers}/${Object.keys(results).length}`)), console.log(ansis.dim(` Errors: ${totalErrors} Warnings: ${totalWarnings}`)), console.log(), console.log(totalErrors === 0 && totalWarnings === 0 ? ansis.green("\u2713 Model is fully conformant") : totalErrors === 0 ? ansis.yellow(`\u26A0 ${totalWarnings} conformance warning(s) \u2014 no errors. Model is compliant.`) : ansis.red(`\u2717 ${totalErrors} conformance error(s), ${totalWarnings} warning(s). Run 'dr validate' for details.`)), console.log();
125
128
  } catch (error) {
126
- console.error(ansis.red(`Error: ${error instanceof Error ? error.message : String(error)}`)), process.exit(1);
129
+ console.error(ansis.red(`Error: ${getErrorMessage(error)}`)), process.exit(1);
127
130
  }
128
131
  }
129
132
  export {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/commands/conformance.ts"],
4
- "sourcesContent": ["/**\n * Conformance Command - Validates model against layer specifications\n */\n\nimport ansis from 'ansis';\nimport { Model } from '../core/model.js';\n\n/**\n * Expected element types per layer\n */\nconst LAYER_ELEMENT_TYPES: Record<string, string[]> = {\n 'motivation': ['stakeholder', 'goal', 'requirement', 'principle'],\n 'business': ['business-service', 'business-process', 'business-actor'],\n 'security': ['authentication-mechanism', 'authorization-policy', 'threat', 'security-control'],\n 'application': ['application-service', 'application-component', 'application-interface'],\n 'technology': ['technology-service', 'technology-component', 'infrastructure-service'],\n 'api': ['rest-resource', 'rest-operation', 'api-specification'],\n 'data-model': ['entity', 'value-object', 'relationship', 'attribute'],\n 'data-store': ['database', 'table', 'storage-service'],\n 'ux': ['ux-application', 'ux-library', 'ux-spec', 'screen', 'component'],\n 'navigation': ['navigation-path', 'navigation-transition', 'route'],\n 'apm': ['metric', 'trace', 'log-source', 'alert-rule'],\n 'testing': ['test-strategy', 'test-case', 'test-data', 'test-result'],\n};\n\n/**\n * Expected cross-layer relationships per layer\n */\nconst LAYER_RELATIONSHIPS: Record<string, Array<{\n target: string;\n relationship: string;\n}>> = {\n 'business': [\n { target: 'motivation', relationship: 'realizes' },\n ],\n 'application': [\n { target: 'business', relationship: 'realizes' },\n { target: 'security', relationship: 'uses' },\n ],\n 'technology': [\n { target: 'application', relationship: 'hosts' },\n { target: 'security', relationship: 'implements' },\n ],\n 'api': [\n { target: 'application', relationship: 'exposes' },\n ],\n 'data-model': [\n { target: 'application', relationship: 'used-by' },\n ],\n 'data-store': [\n { target: 'technology', relationship: 'runs-on' },\n { target: 'data-model', relationship: 'implements' },\n ],\n 'ux': [\n { target: 'application', relationship: 'implements' },\n { target: 'navigation', relationship: 'uses' },\n ],\n 'navigation': [\n { target: 'ux', relationship: 'defines' },\n ],\n 'apm': [\n { target: 'technology', relationship: 'monitors' },\n { target: 'application', relationship: 'monitors' },\n ],\n 'testing': [\n { target: 'application', relationship: 'tests' },\n { target: 'api', relationship: 'tests' },\n ],\n};\n\ninterface ConformanceIssue {\n severity: 'error' | 'warning';\n message: string;\n}\n\ninterface ConformanceResult {\n compliant: boolean;\n issues: ConformanceIssue[];\n stats: {\n elementCount: number;\n elementTypes: number;\n relationshipCount: number;\n };\n}\n\nexport async function conformanceCommand(options: {\n layers?: string[];\n json?: boolean;\n verbose?: boolean;\n}): Promise<void> {\n try {\n const model = await Model.load(process.cwd(), { lazyLoad: false });\n\n if (!options.json) {\n console.log(ansis.bold('\\nChecking conformance to layer specifications...\\n'));\n }\n\n const results: Record<string, ConformanceResult> = {};\n\n let totalIssues = 0;\n let compliantLayers = 0;\n\n for (const [layerName, layer] of model.layers) {\n // Skip if specific layers requested\n if (options.layers && !options.layers.includes(layerName)) {\n continue;\n }\n\n const issues: ConformanceIssue[] = [];\n const elements = layer.listElements();\n\n // Check 1: Required element types\n const expectedTypes = LAYER_ELEMENT_TYPES[layerName] || [];\n const presentTypes = new Set(elements.map((e) => e.type));\n const missingTypes: string[] = [];\n\n for (const expectedType of expectedTypes) {\n if (!presentTypes.has(expectedType)) {\n missingTypes.push(expectedType);\n }\n }\n\n if (missingTypes.length > 0) {\n issues.push({\n severity: 'warning',\n message: `Missing element types: ${missingTypes.join(', ')}`,\n });\n }\n\n // Check 2: Elements have required properties\n for (const element of elements) {\n // Require id and type\n if (!element.id) {\n issues.push({\n severity: 'error',\n message: `Element missing required property: id`,\n });\n }\n\n if (!element.type) {\n issues.push({\n severity: 'error',\n message: `Element missing required property: type`,\n });\n }\n\n // Check for name field (recommended in v0.4.0+)\n if (!element.properties.name && !element.properties.description) {\n issues.push({\n severity: 'warning',\n message: `Element ${element.id} should have a name or description`,\n });\n }\n }\n\n // Check 3: Cross-layer relationships are documented\n const expectedRelationships = LAYER_RELATIONSHIPS[layerName] || [];\n\n // Validate expected cross-layer relationships exist\n // Note: The relationship registry would be accessed in production\n // This check documents which relationships are expected per layer specification\n for (const expectedRel of expectedRelationships) {\n // In a full implementation, check model.relationshipRegistry for actual relationships\n // For now, just document that the layer has expected cross-layer relationships defined\n issues.push({\n severity: 'warning',\n message: `Expected relationship to ${expectedRel.target}: ${expectedRel.relationship}`,\n });\n }\n\n // Populate results\n results[layerName] = {\n compliant: issues.filter((i) => i.severity === 'error').length === 0,\n issues,\n stats: {\n elementCount: elements.length,\n elementTypes: presentTypes.size,\n relationshipCount: 0, // Would be populated from relationship registry\n },\n };\n\n if (results[layerName].compliant) {\n compliantLayers++;\n }\n\n totalIssues += issues.length;\n }\n\n // Output as JSON if requested\n if (options.json) {\n const jsonOutput = {\n conformance: {\n compliant: compliantLayers === Object.keys(results).length,\n compliantLayers,\n totalLayers: Object.keys(results).length,\n totalIssues,\n layers: results,\n },\n };\n console.log(JSON.stringify(jsonOutput, null, 2));\n return;\n }\n\n // Display results\n console.log(ansis.dim('Layer conformance:'));\n console.log();\n\n for (const [layerName, result] of Object.entries(results)) {\n if (result.compliant) {\n console.log(ansis.green(`\u2713 ${layerName}`));\n } else {\n console.log(ansis.red(`\u2717 ${layerName} - ${result.issues.length} issue(s)`));\n\n if (options.verbose) {\n for (const issue of result.issues) {\n const prefix =\n issue.severity === 'error'\n ? ansis.red('[ERROR]')\n : ansis.yellow('[WARNING]');\n console.log(ansis.dim(` ${prefix} ${issue.message}`));\n }\n }\n }\n\n console.log(\n ansis.dim(\n ` Elements: ${result.stats.elementCount}, Types: ${result.stats.elementTypes}`\n )\n );\n console.log();\n }\n\n // Summary\n console.log(ansis.dim('Summary:'));\n console.log(\n ansis.dim(` Compliant layers: ${compliantLayers}/${Object.keys(results).length}`)\n );\n console.log(ansis.dim(` Total issues: ${totalIssues}`));\n console.log();\n\n if (totalIssues === 0) {\n console.log(ansis.green(`\u2713 Model is fully conformant`));\n } else {\n console.log(\n ansis.yellow(\n `\u26A0 Model has conformance issues. Run 'dr validate' for more details.`\n )\n );\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": "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",
4
+ "sourcesContent": ["/**\n * Conformance Command - Validates model against layer specifications\n */\n\nimport ansis from \"ansis\";\nimport { Model } from \"../core/model.js\";\nimport { getAllLayerIds, getSpecNodeTypesForLayer, getLayerById } from \"../generated/index.js\";\nimport { RELATIONSHIPS_BY_SOURCE } from \"../generated/relationship-index.js\";\nimport { getErrorMessage } from \"../utils/errors.js\";\n\n/**\n * Expected element types per layer (derived from generated registry)\n */\nfunction getLayerElementTypes(): Record<string, string[]> {\n const layerTypes: Record<string, string[]> = {};\n const layers = getAllLayerIds();\n for (const layer of layers) {\n layerTypes[layer] = getSpecNodeTypesForLayer(layer).map((t) => {\n // Extract element type from spec node ID (e.g., \"motivation.goal\" -> \"goal\")\n return t.split(\".\")[1] || \"\";\n }).filter(Boolean);\n }\n return layerTypes;\n}\n\nconst LAYER_ELEMENT_TYPES = getLayerElementTypes();\n\ninterface CrossLayerRelSpec {\n target: string;\n relationship: string;\n /** Element types (e.g. \"businessrole\") in the source layer that support this predicate */\n sourceTypes: string[];\n /** Element types (e.g. \"stakeholder\") in the target layer that can receive this predicate */\n destTypes: string[];\n}\n\n/**\n * Get expected cross-layer relationships per layer.\n * Returns per-predicate specs that include which element types must exist in both layers,\n * so the conformance check can skip gaps that are not yet achievable.\n */\nfunction getLayerCrossLayerRelationships(): Record<string, CrossLayerRelSpec[]> {\n const relationships: Record<string, CrossLayerRelSpec[]> = {};\n const layers = getAllLayerIds();\n\n for (const sourceLayerId of layers) {\n const sourceLayer = getLayerById(sourceLayerId);\n if (!sourceLayer) continue;\n\n const specMap = new Map<string, CrossLayerRelSpec>();\n const sourceNodeTypes = getSpecNodeTypesForLayer(sourceLayerId);\n\n for (const sourceNodeType of sourceNodeTypes) {\n const rels = RELATIONSHIPS_BY_SOURCE.get(sourceNodeType) || [];\n const sourceElemType = sourceNodeType.split(\".\")[1] || \"\";\n\n for (const rel of rels) {\n const parts = rel.destinationSpecNodeId.split(\".\");\n const destLayerId = parts[0];\n const destElemType = parts[1] || \"\";\n\n if (destLayerId && destLayerId !== sourceLayerId) {\n const key = `${destLayerId}:${rel.predicate}`;\n if (!specMap.has(key)) {\n specMap.set(key, {\n target: destLayerId,\n relationship: rel.predicate,\n sourceTypes: [],\n destTypes: [],\n });\n }\n const spec = specMap.get(key)!;\n if (sourceElemType && !spec.sourceTypes.includes(sourceElemType)) {\n spec.sourceTypes.push(sourceElemType);\n }\n if (destElemType && !spec.destTypes.includes(destElemType)) {\n spec.destTypes.push(destElemType);\n }\n }\n }\n }\n\n relationships[sourceLayerId] = Array.from(specMap.values());\n }\n\n return relationships;\n}\n\nconst LAYER_RELATIONSHIPS = getLayerCrossLayerRelationships();\n\ninterface ConformanceIssue {\n severity: \"error\" | \"warning\";\n message: string;\n}\n\ninterface ConformanceResult {\n compliant: boolean;\n issues: ConformanceIssue[];\n stats: {\n elementCount: number;\n elementTypes: number;\n relationshipCount: number;\n };\n}\n\nexport async function conformanceCommand(options: {\n layers?: string[];\n json?: boolean;\n verbose?: boolean;\n}): Promise<void> {\n try {\n const model = await Model.load(process.cwd(), { lazyLoad: false });\n\n if (!options.json) {\n console.log(ansis.bold(\"\\nChecking conformance to layer specifications...\\n\"));\n }\n\n const results: Record<string, ConformanceResult> = {};\n\n let totalIssues = 0;\n let totalErrors = 0;\n let compliantLayers = 0;\n\n for (const [layerName, layer] of model.layers) {\n // Skip if specific layers requested\n if (options.layers && !options.layers.includes(layerName)) {\n continue;\n }\n\n const issues: ConformanceIssue[] = [];\n const elements = layer.listElements();\n\n // Check 1: Required element types\n const expectedTypes = LAYER_ELEMENT_TYPES[layerName] || [];\n const presentTypes = new Set(elements.map((e) => e.type));\n const missingTypes: string[] = [];\n\n for (const expectedType of expectedTypes) {\n if (!presentTypes.has(expectedType)) {\n missingTypes.push(expectedType);\n }\n }\n\n if (missingTypes.length > 0) {\n issues.push({\n severity: \"warning\",\n message: `Missing element types: ${missingTypes.join(\", \")}`,\n });\n }\n\n // Check 2: Elements have required properties\n for (const element of elements) {\n // Require id and type\n if (!element.id) {\n issues.push({\n severity: \"error\",\n message: `Element missing required property: id`,\n });\n }\n\n if (!element.type) {\n issues.push({\n severity: \"error\",\n message: `Element missing required property: type`,\n });\n }\n\n // Check for name field (recommended in v0.4.0+)\n if (!element.name && !element.description) {\n issues.push({\n severity: \"warning\",\n message: `Element ${element.path || element.id} should have a name or description`,\n });\n }\n }\n\n // Check 3: Cross-layer relationships are documented\n const expectedRelationships = LAYER_RELATIONSHIPS[layerName] || [];\n\n // Get all relationships for this layer\n const allRelationships = model.relationships.getAll();\n const layerRelationships = allRelationships.filter((rel) => rel.layer === layerName);\n\n // Validate expected cross-layer relationships exist, but only when the required\n // element types are present in both layers \u2014 avoids flooding output with gaps\n // that can't yet be closed given the current model content.\n for (const expectedRel of expectedRelationships) {\n // If catalog metadata is incomplete (empty type lists), fall back to always\n // checking \u2014 missing metadata should not silently suppress real gaps.\n const hasSourceTypeMeta = expectedRel.sourceTypes.length > 0;\n const hasDestTypeMeta = expectedRel.destTypes.length > 0;\n\n // Skip if none of the source element types exist in this layer\n if (hasSourceTypeMeta && !expectedRel.sourceTypes.some((t) => presentTypes.has(t))) continue;\n\n // Skip if none of the dest element types exist in the target layer\n const targetLayer = model.layers.get(expectedRel.target);\n const targetPresentTypes = new Set(\n (targetLayer?.listElements() ?? []).map((e) => e.type)\n );\n if (hasDestTypeMeta && !expectedRel.destTypes.some((t) => targetPresentTypes.has(t))) continue;\n\n const hasRelationship = layerRelationships.some(\n (rel) =>\n rel.predicate === expectedRel.relationship &&\n rel.targetLayer === expectedRel.target\n );\n\n if (!hasRelationship) {\n const pairHint =\n expectedRel.sourceTypes.length > 0 && expectedRel.destTypes.length > 0\n ? ` (valid pairs: ${expectedRel.sourceTypes.join(\"/\")} \u2192 ${expectedRel.destTypes.join(\"/\")})`\n : \"\";\n issues.push({\n severity: \"warning\",\n message: `Expected relationship to ${expectedRel.target}: ${expectedRel.relationship} not found${pairHint}`,\n });\n }\n }\n\n // Populate results\n results[layerName] = {\n compliant: issues.filter((i) => i.severity === \"error\").length === 0,\n issues,\n stats: {\n elementCount: elements.length,\n elementTypes: presentTypes.size,\n relationshipCount: layerRelationships.length,\n },\n };\n\n if (results[layerName].compliant) {\n compliantLayers++;\n }\n\n totalIssues += issues.length;\n totalErrors += issues.filter((i) => i.severity === \"error\").length;\n }\n\n // Output as JSON if requested\n if (options.json) {\n const jsonOutput = {\n conformance: {\n compliant: compliantLayers === Object.keys(results).length,\n compliantLayers,\n totalLayers: Object.keys(results).length,\n totalIssues,\n totalErrors,\n totalWarnings: totalIssues - totalErrors,\n layers: results,\n },\n };\n console.log(JSON.stringify(jsonOutput, null, 2));\n return;\n }\n\n // Display results\n console.log(ansis.dim(\"Layer conformance:\"));\n console.log();\n\n for (const [layerName, result] of Object.entries(results)) {\n if (result.compliant) {\n console.log(ansis.green(`\u2713 ${layerName}`));\n // Compliant layers may still have warnings \u2014 show them in verbose mode\n if (options.verbose && result.issues.length > 0) {\n for (const issue of result.issues) {\n const prefix =\n issue.severity === \"error\" ? ansis.red(\"[ERROR]\") : ansis.yellow(\"[WARNING]\");\n console.log(ansis.dim(` ${prefix} ${issue.message}`));\n }\n }\n } else {\n console.log(ansis.red(`\u2717 ${layerName} - ${result.issues.length} issue(s)`));\n\n if (options.verbose) {\n for (const issue of result.issues) {\n const prefix =\n issue.severity === \"error\" ? ansis.red(\"[ERROR]\") : ansis.yellow(\"[WARNING]\");\n console.log(ansis.dim(` ${prefix} ${issue.message}`));\n }\n }\n }\n\n console.log(\n ansis.dim(` Elements: ${result.stats.elementCount}, Types: ${result.stats.elementTypes}`)\n );\n console.log();\n }\n\n // Summary\n const totalWarnings = totalIssues - totalErrors;\n console.log(ansis.dim(\"Summary:\"));\n console.log(ansis.dim(` Compliant layers: ${compliantLayers}/${Object.keys(results).length}`));\n console.log(ansis.dim(` Errors: ${totalErrors} Warnings: ${totalWarnings}`));\n console.log();\n\n if (totalErrors === 0 && totalWarnings === 0) {\n console.log(ansis.green(`\u2713 Model is fully conformant`));\n } else if (totalErrors === 0) {\n console.log(\n ansis.yellow(`\u26A0 ${totalWarnings} conformance warning(s) \u2014 no errors. Model is compliant.`)\n );\n } else {\n console.log(\n ansis.red(`\u2717 ${totalErrors} conformance error(s), ${totalWarnings} warning(s). Run 'dr validate' for details.`)\n );\n }\n\n console.log();\n } catch (error) {\n console.error(ansis.red(`Error: ${getErrorMessage(error)}`));\n process.exit(1);\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,75 @@
1
+ import { CopilotIntegrationManager } from "../integrations/copilot-manager.js";
2
+ import ansis from "ansis";
3
+ import { CLIError } from "../utils/errors.js";
4
+ import { getErrorMessage } from "../utils/errors.js";
5
+ function copilotCommands(program) {
6
+ const copilot = program.command("copilot").description("Manage GitHub Copilot integration files");
7
+ copilot.command("install").description("Install GitHub Copilot integration files").option("--agents-only", "Install only agents").option("--skills-only", "Install only skills").option("-f, --force", "Skip confirmation prompts").addHelpText("after", `
8
+ Examples:
9
+ $ dr copilot install # Install all components
10
+ $ dr copilot install --agents-only # Install only agents
11
+ $ dr copilot install --skills-only -f # Force install only skills
12
+ $ dr copilot install --agents-only --skills-only # Install specific components`).action(async (options) => {
13
+ const manager = new CopilotIntegrationManager(), components = [];
14
+ options.agentsOnly && components.push("agents"), options.skillsOnly && components.push("skills");
15
+ try {
16
+ await manager.install({
17
+ components: components.length > 0 ? components : void 0,
18
+ force: options.force
19
+ });
20
+ } catch (error) {
21
+ console.error(ansis.red("Error:"), getErrorMessage(error)), process.exit(1);
22
+ }
23
+ }), copilot.command("upgrade").description("Upgrade installed GitHub Copilot integration").option("--dry-run", "Preview changes without applying them").option("-f, --force", "Skip confirmation prompts").addHelpText("after", `
24
+ Examples:
25
+ $ dr copilot upgrade # Check for upgrades and prompt to apply
26
+ $ dr copilot upgrade --dry-run # Preview what would be upgraded
27
+ $ dr copilot upgrade -f # Force upgrade without prompting`).action(async (options) => {
28
+ const manager = new CopilotIntegrationManager();
29
+ try {
30
+ await manager.upgrade({
31
+ dryRun: options.dryRun,
32
+ force: options.force
33
+ });
34
+ } catch (error) {
35
+ throw new CLIError(getErrorMessage(error), 1);
36
+ }
37
+ }), copilot.command("remove").description("Remove GitHub Copilot integration files").option("--agents", "Remove only agents").option("--skills", "Remove only skills").option("-f, --force", "Skip confirmation prompts").addHelpText("after", `
38
+ Examples:
39
+ $ dr copilot remove # Remove all components
40
+ $ dr copilot remove --agents # Remove only agents
41
+ $ dr copilot remove --skills -f # Force remove only skills`).action(async (options) => {
42
+ const manager = new CopilotIntegrationManager(), components = [];
43
+ options.agents && components.push("agents"), options.skills && components.push("skills");
44
+ try {
45
+ await manager.remove({
46
+ components: components.length > 0 ? components : void 0,
47
+ force: options.force
48
+ });
49
+ } catch (error) {
50
+ throw new CLIError(getErrorMessage(error), 1);
51
+ }
52
+ }), copilot.command("status").description("Show GitHub Copilot integration status").addHelpText("after", `
53
+ Examples:
54
+ $ dr copilot status # Show installation status and component details`).action(async () => {
55
+ const manager = new CopilotIntegrationManager();
56
+ try {
57
+ await manager.status();
58
+ } catch (error) {
59
+ throw new CLIError(getErrorMessage(error), 1);
60
+ }
61
+ }), copilot.command("list").description("List available GitHub Copilot components").addHelpText("after", `
62
+ Examples:
63
+ $ dr copilot list # Show all available components and descriptions`).action(async () => {
64
+ const manager = new CopilotIntegrationManager();
65
+ try {
66
+ await manager.list();
67
+ } catch (error) {
68
+ throw new CLIError(getErrorMessage(error), 1);
69
+ }
70
+ });
71
+ }
72
+ export {
73
+ copilotCommands
74
+ };
75
+ //# sourceMappingURL=copilot.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/commands/copilot.ts"],
4
+ "sourcesContent": ["/**\n * GitHub Copilot Integration Management Command\n *\n * Manages installation, upgrades, and configuration of GitHub Copilot integration files.\n * Provides subcommands for install, upgrade, remove, status, and list operations.\n */\n\nimport { Command } from \"commander\";\nimport { CopilotIntegrationManager } from \"../integrations/copilot-manager.js\";\nimport ansis from \"ansis\";\nimport { CLIError } from \"../utils/errors.js\";\nimport { getErrorMessage } from \"../utils/errors.js\";\n\n/**\n * Register all Copilot integration subcommands\n *\n * Usage:\n * dr copilot install [--agents-only] [--skills-only] [-f|--force]\n * dr copilot upgrade [--dry-run] [-f|--force]\n * dr copilot remove [--agents] [--skills] [-f|--force]\n * dr copilot status\n * dr copilot list\n */\nexport function copilotCommands(program: Command): void {\n const copilot = program.command(\"copilot\").description(\"Manage GitHub Copilot integration files\");\n\n /**\n * Install subcommand\n *\n * Copies Copilot integration files to .github/ directory\n * Supports component-specific filtering via flags\n */\n copilot\n .command(\"install\")\n .description(\"Install GitHub Copilot integration files\")\n .option(\"--agents-only\", \"Install only agents\")\n .option(\"--skills-only\", \"Install only skills\")\n .option(\"-f, --force\", \"Skip confirmation prompts\")\n .addHelpText(\n \"after\",\n `\nExamples:\n $ dr copilot install # Install all components\n $ dr copilot install --agents-only # Install only agents\n $ dr copilot install --skills-only -f # Force install only skills\n $ dr copilot install --agents-only --skills-only # Install specific components`\n )\n .action(async (options) => {\n const manager = new CopilotIntegrationManager();\n\n // Build component filter from flags\n const components: string[] = [];\n if (options.agentsOnly) components.push(\"agents\");\n if (options.skillsOnly) components.push(\"skills\");\n\n try {\n await manager.install({\n components: components.length > 0 ? components : undefined,\n force: options.force,\n });\n } catch (error) {\n console.error(ansis.red(\"Error:\"), getErrorMessage(error));\n process.exit(1);\n }\n });\n\n /**\n * Upgrade subcommand\n *\n * Checks for upgrades to installed components and optionally applies them.\n * Supports dry-run mode to preview changes without modifying files.\n */\n copilot\n .command(\"upgrade\")\n .description(\"Upgrade installed GitHub Copilot integration\")\n .option(\"--dry-run\", \"Preview changes without applying them\")\n .option(\"-f, --force\", \"Skip confirmation prompts\")\n .addHelpText(\n \"after\",\n `\nExamples:\n $ dr copilot upgrade # Check for upgrades and prompt to apply\n $ dr copilot upgrade --dry-run # Preview what would be upgraded\n $ dr copilot upgrade -f # Force upgrade without prompting`\n )\n .action(async (options) => {\n const manager = new CopilotIntegrationManager();\n\n try {\n await manager.upgrade({\n dryRun: options.dryRun,\n force: options.force,\n });\n } catch (error) {\n throw new CLIError(getErrorMessage(error), 1);\n }\n });\n\n /**\n * Remove subcommand\n *\n * Removes installed Copilot integration files\n * Supports component-specific removal via flags\n */\n copilot\n .command(\"remove\")\n .description(\"Remove GitHub Copilot integration files\")\n .option(\"--agents\", \"Remove only agents\")\n .option(\"--skills\", \"Remove only skills\")\n .option(\"-f, --force\", \"Skip confirmation prompts\")\n .addHelpText(\n \"after\",\n `\nExamples:\n $ dr copilot remove # Remove all components\n $ dr copilot remove --agents # Remove only agents\n $ dr copilot remove --skills -f # Force remove only skills`\n )\n .action(async (options) => {\n const manager = new CopilotIntegrationManager();\n\n // Build component filter from flags\n const components: string[] = [];\n if (options.agents) components.push(\"agents\");\n if (options.skills) components.push(\"skills\");\n\n try {\n await manager.remove({\n components: components.length > 0 ? components : undefined,\n force: options.force,\n });\n } catch (error) {\n throw new CLIError(getErrorMessage(error), 1);\n }\n });\n\n /**\n * Status subcommand\n *\n * Displays current installation status, version info, and component details\n */\n copilot\n .command(\"status\")\n .description(\"Show GitHub Copilot integration status\")\n .addHelpText(\n \"after\",\n `\nExamples:\n $ dr copilot status # Show installation status and component details`\n )\n .action(async () => {\n const manager = new CopilotIntegrationManager();\n\n try {\n await manager.status();\n } catch (error) {\n throw new CLIError(getErrorMessage(error), 1);\n }\n });\n\n /**\n * List subcommand\n *\n * Lists all available components that can be installed\n */\n copilot\n .command(\"list\")\n .description(\"List available GitHub Copilot components\")\n .addHelpText(\n \"after\",\n `\nExamples:\n $ dr copilot list # Show all available components and descriptions`\n )\n .action(async () => {\n const manager = new CopilotIntegrationManager();\n\n try {\n await manager.list();\n } catch (error) {\n throw new CLIError(getErrorMessage(error), 1);\n }\n });\n}\n"],
5
+ "mappings": "AAQA,SAAS,iCAAiC;AAC1C,OAAO,WAAW;AAClB,SAAS,gBAAgB;AACzB,SAAS,uBAAuB;AAY1B,SAAU,gBAAgB,SAAgB;AAC9C,QAAM,UAAU,QAAQ,QAAQ,SAAS,EAAE,YAAY,yCAAyC;AAQhG,UACG,QAAQ,SAAS,EACjB,YAAY,0CAA0C,EACtD,OAAO,iBAAiB,qBAAqB,EAC7C,OAAO,iBAAiB,qBAAqB,EAC7C,OAAO,eAAe,2BAA2B,EACjD,YACC,SACA;;;;;kFAK4E,EAE7E,OAAO,OAAO,YAAW;AACxB,UAAM,UAAU,IAAI,0BAAyB,GAGvC,aAAuB,CAAA;AAC7B,IAAI,QAAQ,cAAY,WAAW,KAAK,QAAQ,GAC5C,QAAQ,cAAY,WAAW,KAAK,QAAQ;AAEhD,QAAI;AACF,YAAM,QAAQ,QAAQ;QACpB,YAAY,WAAW,SAAS,IAAI,aAAa;QACjD,OAAO,QAAQ;OAChB;IACH,SAAS,OAAO;AACd,cAAQ,MAAM,MAAM,IAAI,QAAQ,GAAG,gBAAgB,KAAK,CAAC,GACzD,QAAQ,KAAK,CAAC;IAChB;EACF,CAAC,GAQH,QACG,QAAQ,SAAS,EACjB,YAAY,8CAA8C,EAC1D,OAAO,aAAa,uCAAuC,EAC3D,OAAO,eAAe,2BAA2B,EACjD,YACC,SACA;;;;sEAIgE,EAEjE,OAAO,OAAO,YAAW;AACxB,UAAM,UAAU,IAAI,0BAAyB;AAE7C,QAAI;AACF,YAAM,QAAQ,QAAQ;QACpB,QAAQ,QAAQ;QAChB,OAAO,QAAQ;OAChB;IACH,SAAS,OAAO;AACd,YAAM,IAAI,SAAS,gBAAgB,KAAK,GAAG,CAAC;IAC9C;EACF,CAAC,GAQH,QACG,QAAQ,QAAQ,EAChB,YAAY,yCAAyC,EACrD,OAAO,YAAY,oBAAoB,EACvC,OAAO,YAAY,oBAAoB,EACvC,OAAO,eAAe,2BAA2B,EACjD,YACC,SACA;;;;+DAIyD,EAE1D,OAAO,OAAO,YAAW;AACxB,UAAM,UAAU,IAAI,0BAAyB,GAGvC,aAAuB,CAAA;AAC7B,IAAI,QAAQ,UAAQ,WAAW,KAAK,QAAQ,GACxC,QAAQ,UAAQ,WAAW,KAAK,QAAQ;AAE5C,QAAI;AACF,YAAM,QAAQ,OAAO;QACnB,YAAY,WAAW,SAAS,IAAI,aAAa;QACjD,OAAO,QAAQ;OAChB;IACH,SAAS,OAAO;AACd,YAAM,IAAI,SAAS,gBAAgB,KAAK,GAAG,CAAC;IAC9C;EACF,CAAC,GAOH,QACG,QAAQ,QAAQ,EAChB,YAAY,wCAAwC,EACpD,YACC,SACA;;0EAEoE,EAErE,OAAO,YAAW;AACjB,UAAM,UAAU,IAAI,0BAAyB;AAE7C,QAAI;AACF,YAAM,QAAQ,OAAM;IACtB,SAAS,OAAO;AACd,YAAM,IAAI,SAAS,gBAAgB,KAAK,GAAG,CAAC;IAC9C;EACF,CAAC,GAOH,QACG,QAAQ,MAAM,EACd,YAAY,0CAA0C,EACtD,YACC,SACA;;wEAEkE,EAEnE,OAAO,YAAW;AACjB,UAAM,UAAU,IAAI,0BAAyB;AAE7C,QAAI;AACF,YAAM,QAAQ,KAAI;IACpB,SAAS,OAAO;AACd,YAAM,IAAI,SAAS,gBAAgB,KAAK,GAAG,CAAC;IAC9C;EACF,CAAC;AACL;",
6
+ "names": []
7
+ }