@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
@@ -0,0 +1,202 @@
1
+ import { z } from "@hono/zod-openapi";
2
+ import { CANONICAL_LAYER_NAMES } from "../core/layers.js";
3
+ function parseElementId(input) {
4
+ const result = ElementIdSchema.safeParse(input);
5
+ if (!result.success) {
6
+ const errorMessages = result.error.issues.map((issue) => issue.message).join("; ");
7
+ throw new Error(`Invalid element ID: ${errorMessages}`);
8
+ }
9
+ return result.data;
10
+ }
11
+ function isElementId(value) {
12
+ return typeof value == "string" && ElementIdSchema.safeParse(value).success;
13
+ }
14
+ const SimpleWSMessageSchema = z.object({
15
+ type: z.enum(["subscribe", "annotate", "ping"]),
16
+ topics: z.array(z.string()).optional(),
17
+ annotation: z.object({
18
+ elementId: z.string(),
19
+ author: z.string(),
20
+ text: z.string(),
21
+ timestamp: z.string()
22
+ }).optional()
23
+ }), JSONRPCRequestSchema = z.object({
24
+ jsonrpc: z.literal("2.0"),
25
+ method: z.string(),
26
+ params: z.unknown().optional(),
27
+ id: z.union([z.string(), z.number()]).optional()
28
+ }), JSONRPCResponseSchema = z.object({
29
+ jsonrpc: z.literal("2.0"),
30
+ result: z.unknown().optional(),
31
+ error: z.object({
32
+ code: z.number(),
33
+ message: z.string(),
34
+ data: z.unknown().optional()
35
+ }).optional(),
36
+ id: z.union([z.string(), z.number(), z.null()])
37
+ }).refine((data) => data.result !== void 0 != (data.error !== void 0), {
38
+ message: "JSON-RPC 2.0 response must contain either 'result' or 'error', not both",
39
+ path: ["response"]
40
+ }), WSMessageSchema = z.union([
41
+ SimpleWSMessageSchema,
42
+ JSONRPCRequestSchema,
43
+ JSONRPCResponseSchema
44
+ ]), ElementIdSchema = z.string().min(1, "Element ID is required").regex(/^[a-z][a-z0-9-]*\.[a-z][a-z0-9-]*\.[a-z][a-z0-9-]*$/, "Invalid element ID format. Must be: layer.type.name (e.g., motivation.goal.customer-satisfaction)"), TimestampSchema = z.string().datetime(), TagSchema = z.string().min(1, "Tag cannot be empty").max(50, "Tag too long").regex(/^[a-z0-9][a-z0-9-]*[a-z0-9]$|^[a-z0-9]$/, "Tag must contain only lowercase letters, digits, and hyphens"), AnnotationCreateSchema = z.object({
45
+ elementId: ElementIdSchema,
46
+ author: z.string().min(1, "Author is required").max(100, "Author name too long").optional().default("Anonymous"),
47
+ content: z.string().min(1, "Content is required").max(5e3, "Content too long"),
48
+ tags: z.array(TagSchema).optional().default([])
49
+ }).strict(), AnnotationUpdateSchema = z.object({
50
+ content: z.string().min(1, "Content is required").max(5e3, "Content too long").optional(),
51
+ tags: z.array(TagSchema).optional(),
52
+ resolved: z.boolean().optional()
53
+ }).strict().refine((obj) => Object.keys(obj).some((key) => obj[key] !== void 0), "At least one field must be provided for update"), AnnotationReplyCreateSchema = z.object({
54
+ author: z.string().min(1, "Author is required").max(100, "Author name too long"),
55
+ content: z.string().min(1, "Content is required").max(5e3, "Content too long")
56
+ }).strict(), LayerNameSchema = z.enum(CANONICAL_LAYER_NAMES, {
57
+ message: `Invalid layer name. Must be one of: ${CANONICAL_LAYER_NAMES.join(", ")}`
58
+ }), IdSchema = z.string().min(1, "ID is required").regex(/^[a-z0-9_-]+$/, "Invalid ID format. Must contain only lowercase alphanumeric characters, hyphens, and underscores"), AnnotationFilterSchema = z.object({
59
+ elementId: ElementIdSchema.optional(),
60
+ author: z.string().optional(),
61
+ tags: z.string().optional(),
62
+ resolved: z.enum(["true", "false"]).optional()
63
+ }).strict(), ErrorResponseSchema = z.object({
64
+ error: z.string().describe("Error message")
65
+ }), HealthResponseSchema = z.object({
66
+ status: z.string().describe("Server health status"),
67
+ version: z.string().describe("API version")
68
+ }), AnnotationSchema = z.object({
69
+ id: z.string().describe("Annotation ID"),
70
+ elementId: ElementIdSchema.describe("Target element ID"),
71
+ author: z.string().describe("Author name"),
72
+ content: z.string().describe("Annotation content"),
73
+ createdAt: z.string().describe("Creation timestamp"),
74
+ updatedAt: z.string().optional().describe("Last update timestamp"),
75
+ tags: z.array(z.string()).optional().describe("Annotation tags"),
76
+ resolved: z.boolean().optional().describe("Resolution status"),
77
+ replies: z.array(z.object({
78
+ id: z.string(),
79
+ author: z.string(),
80
+ content: z.string(),
81
+ createdAt: z.string()
82
+ })).optional().describe("Annotation replies")
83
+ }), AnnotationReplySchema = z.object({
84
+ id: z.string().describe("Reply ID"),
85
+ author: z.string().describe("Author name"),
86
+ content: z.string().describe("Reply content"),
87
+ createdAt: z.string().describe("Creation timestamp")
88
+ }), AnnotationsListSchema = z.object({
89
+ annotations: z.array(AnnotationSchema).describe("List of annotations")
90
+ }), AnnotationRepliesSchema = z.object({
91
+ replies: z.array(AnnotationReplySchema).describe("List of replies")
92
+ }), LayerResponseSchema = z.object({
93
+ name: z.string().describe("Layer name"),
94
+ elements: z.array(z.object({}).passthrough()).describe("Layer elements (each element is an object with id, name, type, and properties)"),
95
+ elementCount: z.number().describe("Total element count")
96
+ }), GraphNodeSchema = z.object({
97
+ id: z.string().describe("Element ID (UUID)"),
98
+ spec_node_id: z.string().describe("Spec node type ID (e.g. motivation.goal)"),
99
+ type: z.string().describe("Element type (e.g. goal, endpoint)"),
100
+ layer_id: z.string().describe("Layer this element belongs to"),
101
+ name: z.string().describe("Element display name"),
102
+ description: z.string().optional().describe("Element description"),
103
+ attributes: z.record(z.string(), z.unknown()).optional().describe("Typed attribute bag per spec-node schema"),
104
+ source_reference: z.object({
105
+ provenance: z.enum(["extracted", "manual", "inferred", "generated"]),
106
+ locations: z.array(z.object({
107
+ file: z.string(),
108
+ symbol: z.string().optional()
109
+ })),
110
+ repository: z.object({
111
+ url: z.string().optional(),
112
+ commit: z.string().optional()
113
+ }).optional()
114
+ }).optional().describe("Source code provenance linking this element to its implementation"),
115
+ metadata: z.object({
116
+ created_at: z.string().optional(),
117
+ updated_at: z.string().optional(),
118
+ created_by: z.string().optional(),
119
+ version: z.number().optional()
120
+ }).optional().describe("Element lifecycle metadata (timestamps, version)"),
121
+ properties: z.record(z.string(), z.unknown()).optional().describe("Legacy property bag (deprecated \u2014 prefer attributes)")
122
+ }), GraphLinkSchema = z.object({
123
+ id: z.string().describe("Stable link ID derived from source, target, and type"),
124
+ source: z.string().describe("Source element ID"),
125
+ target: z.string().describe("Target element ID"),
126
+ type: z.string().describe("Relationship predicate or reference type"),
127
+ // Intra-layer links carry layer_id; cross-layer links carry source/target layer IDs
128
+ layer_id: z.string().optional().describe("Layer ID for intra-layer relationships"),
129
+ source_layer_id: z.string().optional().describe("Source layer ID for cross-layer references"),
130
+ target_layer_id: z.string().optional().describe("Target layer ID for cross-layer references")
131
+ }), ModelResponseSchema = z.object({
132
+ nodes: z.array(GraphNodeSchema).describe("All architecture elements across all layers"),
133
+ links: z.array(GraphLinkSchema).describe("Intra-layer relationships and cross-layer references")
134
+ }), SpecResponseSchema = z.object({
135
+ version: z.string().describe("Spec version"),
136
+ type: z.string().describe("Response type"),
137
+ description: z.string().describe("Response description"),
138
+ source: z.string().describe("Schema source"),
139
+ schemas: z.record(z.string(), z.unknown()).describe("JSON schema definitions (each schema is a JSON Schema object)"),
140
+ schemaCount: z.number().describe("Number of schemas")
141
+ }), ChangesetMetadataSchema = z.object({
142
+ name: z.string(),
143
+ status: z.enum(["staged", "committed", "discarded"]),
144
+ created: z.string(),
145
+ changes_count: z.number()
146
+ }), ChangesetsListSchema = z.object({
147
+ version: z.string(),
148
+ changesets: z.record(z.string(), ChangesetMetadataSchema)
149
+ }), ChangesetDetailSchema = z.object({
150
+ id: z.string(),
151
+ name: z.string(),
152
+ description: z.string().optional(),
153
+ status: z.enum(["staged", "committed", "discarded"]),
154
+ created: z.string(),
155
+ modified: z.string(),
156
+ baseSnapshot: z.string().optional(),
157
+ stats: z.object({
158
+ additions: z.number(),
159
+ modifications: z.number(),
160
+ deletions: z.number()
161
+ }),
162
+ changes: z.array(z.object({
163
+ type: z.enum(["add", "update", "delete"]),
164
+ elementId: z.string(),
165
+ layerName: z.string(),
166
+ timestamp: z.string().optional(),
167
+ before: z.unknown().optional().describe("Previous element state (for update/delete operations)"),
168
+ after: z.unknown().optional().describe("New element state (for add/update operations)")
169
+ }))
170
+ });
171
+ export {
172
+ AnnotationCreateSchema,
173
+ AnnotationFilterSchema,
174
+ AnnotationRepliesSchema,
175
+ AnnotationReplyCreateSchema,
176
+ AnnotationReplySchema,
177
+ AnnotationSchema,
178
+ AnnotationUpdateSchema,
179
+ AnnotationsListSchema,
180
+ ChangesetDetailSchema,
181
+ ChangesetMetadataSchema,
182
+ ChangesetsListSchema,
183
+ ElementIdSchema,
184
+ ErrorResponseSchema,
185
+ GraphLinkSchema,
186
+ GraphNodeSchema,
187
+ HealthResponseSchema,
188
+ IdSchema,
189
+ JSONRPCRequestSchema,
190
+ JSONRPCResponseSchema,
191
+ LayerNameSchema,
192
+ LayerResponseSchema,
193
+ ModelResponseSchema,
194
+ SimpleWSMessageSchema,
195
+ SpecResponseSchema,
196
+ TagSchema,
197
+ TimestampSchema,
198
+ WSMessageSchema,
199
+ isElementId,
200
+ parseElementId
201
+ };
202
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/server/schemas.ts"],
4
+ "sourcesContent": ["import { z } from '@hono/zod-openapi';\nimport { CANONICAL_LAYER_NAMES } from '../core/layers.js';\n\n/**\n * Branded type for ElementId\n * Provides compile-time safety by distinguishing ElementId from plain strings\n * Use with parseElementId() to validate and brand a string at runtime\n *\n * This type is exported as a public API contract for external consumers who want\n * to use strong typing in their code. However, internal server.ts implementation\n * uses plain string keys in Maps and other internal structures for simplicity.\n *\n * USAGE PATTERNS:\n * - External/public APIs: Type function parameters with ElementId for contract clarity\n * - Internal state: Use plain strings in Maps/Sets for performance and simplicity\n * - Validation: Use parseElementId() to validate untrusted input\n * - Type guards: Use isElementId() for optional runtime type checking\n *\n * Example:\n * const brandedId = parseElementId(\"motivation.goal.customer-satisfaction\");\n * function processElement(id: ElementId) { ... } // Type-safe public API\n *\n * // Internal implementation can use plain strings:\n * private annotations: Map<string, Annotation> = new Map();\n */\nexport type ElementId = string & { readonly __brand: 'ElementId' };\n\n/**\n * Parse and validate a string as an ElementId\n * Returns a branded type for compile-time type safety\n */\nexport function parseElementId(input: string): ElementId {\n const result = ElementIdSchema.safeParse(input);\n if (!result.success) {\n const errorMessages = result.error.issues.map(issue => issue.message).join('; ');\n throw new Error(`Invalid element ID: ${errorMessages}`);\n }\n return result.data as ElementId;\n}\n\n/**\n * Type guard for ElementId\n * Use with function parameters for optional compile-time checking\n */\nexport function isElementId(value: unknown): value is ElementId {\n return typeof value === 'string' && ElementIdSchema.safeParse(value).success;\n}\n\n// WebSocket message schemas with runtime validation\nexport const SimpleWSMessageSchema = z.object({\n type: z.enum(['subscribe', 'annotate', 'ping']),\n topics: z.array(z.string()).optional(),\n annotation: z.object({\n elementId: z.string(),\n author: z.string(),\n text: z.string(),\n timestamp: z.string(),\n }).optional(),\n});\n\nexport const JSONRPCRequestSchema = z.object({\n jsonrpc: z.literal('2.0'),\n method: z.string(),\n params: z.unknown().optional(),\n id: z.union([z.string(), z.number()]).optional(),\n});\n\nexport const JSONRPCResponseSchema = z.object({\n jsonrpc: z.literal('2.0'),\n result: z.unknown().optional(),\n error: z.object({\n code: z.number(),\n message: z.string(),\n data: z.unknown().optional(),\n }).optional(),\n id: z.union([z.string(), z.number(), z.null()]),\n}).refine(\n (data) => (data.result !== undefined) !== (data.error !== undefined),\n {\n message: \"JSON-RPC 2.0 response must contain either 'result' or 'error', not both\",\n path: [\"response\"],\n }\n);\n\nexport const WSMessageSchema = z.union([\n SimpleWSMessageSchema,\n JSONRPCRequestSchema,\n JSONRPCResponseSchema,\n]);\n\n// Base schemas for common types\n// Enforces three-part element ID format: layer.type.name\n// - layer: canonical layer name (e.g., motivation, api, data-store)\n// - type: lowercase element type (e.g., goal, endpoint, entity)\n// - name: kebab-case element name (e.g., customer-satisfaction)\n//\n// Example valid IDs:\n// - motivation.goal.customer-satisfaction\n// - api.endpoint.create-order\n// - data-store.table.user-profile\n// - a.b.c (minimal single-character segments, valid for testing purposes)\n// - ux.a.test (two-character segments are valid)\nexport const ElementIdSchema = z.string()\n .min(1, 'Element ID is required')\n .regex(\n /^[a-z][a-z0-9-]*\\.[a-z][a-z0-9-]*\\.[a-z][a-z0-9-]*$/,\n 'Invalid element ID format. Must be: layer.type.name (e.g., motivation.goal.customer-satisfaction)'\n );\n\nexport const TimestampSchema = z.string().datetime();\n\n/**\n * Tag validation schema.\n *\n * Format: lowercase alphanumeric with optional internal hyphens\n * Pattern: /^[a-z0-9][a-z0-9-]*[a-z0-9]$|^[a-z0-9]$/\n *\n * Constraints:\n * - Cannot start or end with hyphens: Prevents URL slugification issues and confusion with CLI flags (e.g., --tag-name)\n * - Single character tags allowed (e.g., \"a\", \"1\") via the second alternation\n * - Matches common tag conventions (GitHub labels, NPM tags, etc.)\n *\n * Examples:\n * - \u2705 \"api-critical\"\n * - \u2705 \"high-priority\"\n * - \u2705 \"p0\"\n * - \u274C \"-api-critical\" (starts with hyphen)\n * - \u274C \"api-critical-\" (ends with hyphen)\n * - \u274C \"API-CRITICAL\" (uppercase not allowed)\n */\nexport const TagSchema = z.string()\n .min(1, 'Tag cannot be empty')\n .max(50, 'Tag too long')\n .regex(/^[a-z0-9][a-z0-9-]*[a-z0-9]$|^[a-z0-9]$/, 'Tag must contain only lowercase letters, digits, and hyphens');\n\n// Annotation schemas - for creating annotations\nexport const AnnotationCreateSchema = z.object({\n elementId: ElementIdSchema,\n author: z.string()\n .min(1, 'Author is required')\n .max(100, 'Author name too long')\n .optional()\n .default('Anonymous'),\n content: z.string()\n .min(1, 'Content is required')\n .max(5000, 'Content too long'),\n tags: z.array(TagSchema).optional().default([]),\n}).strict();\n\n// Annotation schemas - for updating annotations\nexport const AnnotationUpdateSchema = z.object({\n content: z.string()\n .min(1, 'Content is required')\n .max(5000, 'Content too long')\n .optional(),\n tags: z.array(TagSchema).optional(),\n resolved: z.boolean().optional(),\n}).strict().refine(\n (obj) => Object.keys(obj).some(key => obj[key as keyof typeof obj] !== undefined),\n 'At least one field must be provided for update'\n);\n\n// Annotation schemas - for creating replies\nexport const AnnotationReplyCreateSchema = z.object({\n author: z.string()\n .min(1, 'Author is required')\n .max(100, 'Author name too long'),\n content: z.string()\n .min(1, 'Content is required')\n .max(5000, 'Content too long'),\n}).strict();\n\n// Layer name schema - validates against canonical layer names\nexport const LayerNameSchema = z.enum(CANONICAL_LAYER_NAMES, {\n message: `Invalid layer name. Must be one of: ${CANONICAL_LAYER_NAMES.join(', ')}`\n});\n\n// ID schema - validates generic IDs for annotations, changesets, and other non-element identifiers\n// Accepts lowercase alphanumeric characters, hyphens, and underscores\n// Note: Different from ElementIdSchema which requires dot-separated format (layer.type.name)\n//\n// Lowercase-only constraint rationale:\n// - Provides case-insensitive ID lookups by normalizing to lowercase at validation time\n// - Prevents collisions (MyId vs myid cannot coexist in same namespace)\n// - System-generated IDs comply; externally-generated uppercase IDs will be rejected\n// - If external systems need uppercase support, IDs should be normalized before API transmission\n// - Consider implementing ID normalization in API middleware if integration with external systems is required\nexport const IdSchema = z.string()\n .min(1, 'ID is required')\n .regex(/^[a-z0-9_-]+$/, 'Invalid ID format. Must contain only lowercase alphanumeric characters, hyphens, and underscores');\n\n// Annotation filter schema - validates query parameters for GET /api/annotations\n// Currently only supports filtering by elementId\n// UNIMPLEMENTED FILTERS: author, tags, and resolved fields are defined here but filtering is not yet implemented.\n// See /workspace/cli/src/server/server.ts:650-651 for implementation details.\n// These fields are reserved for future extensibility and currently ignored by the handler.\nexport const AnnotationFilterSchema = z.object({\n elementId: ElementIdSchema.optional(),\n author: z.string().optional(),\n tags: z.string().optional(),\n resolved: z.enum(['true', 'false']).optional(),\n}).strict(); // Validate only declared fields\n\n// Response schemas for OpenAPI documentation\nexport const ErrorResponseSchema = z.object({\n error: z.string().describe('Error message'),\n});\n\nexport const HealthResponseSchema = z.object({\n status: z.string().describe('Server health status'),\n version: z.string().describe('API version'),\n});\n\nexport const AnnotationSchema = z.object({\n id: z.string().describe('Annotation ID'),\n elementId: ElementIdSchema.describe('Target element ID'),\n author: z.string().describe('Author name'),\n content: z.string().describe('Annotation content'),\n createdAt: z.string().describe('Creation timestamp'),\n updatedAt: z.string().optional().describe('Last update timestamp'),\n tags: z.array(z.string()).optional().describe('Annotation tags'),\n resolved: z.boolean().optional().describe('Resolution status'),\n replies: z.array(z.object({\n id: z.string(),\n author: z.string(),\n content: z.string(),\n createdAt: z.string(),\n })).optional().describe('Annotation replies'),\n});\n\nexport const AnnotationReplySchema = z.object({\n id: z.string().describe('Reply ID'),\n author: z.string().describe('Author name'),\n content: z.string().describe('Reply content'),\n createdAt: z.string().describe('Creation timestamp'),\n});\n\nexport const AnnotationsListSchema = z.object({\n annotations: z.array(AnnotationSchema).describe('List of annotations'),\n});\n\nexport const AnnotationRepliesSchema = z.object({\n replies: z.array(AnnotationReplySchema).describe('List of replies'),\n});\n\nexport const LayerResponseSchema = z.object({\n name: z.string().describe('Layer name'),\n elements: z.array(z.object({}).passthrough()).describe('Layer elements (each element is an object with id, name, type, and properties)'),\n elementCount: z.number().describe('Total element count'),\n});\n\nexport const GraphNodeSchema = z.object({\n id: z.string().describe('Element ID (UUID)'),\n spec_node_id: z.string().describe('Spec node type ID (e.g. motivation.goal)'),\n type: z.string().describe('Element type (e.g. goal, endpoint)'),\n layer_id: z.string().describe('Layer this element belongs to'),\n name: z.string().describe('Element display name'),\n description: z.string().optional().describe('Element description'),\n attributes: z.record(z.string(), z.unknown()).optional()\n .describe('Typed attribute bag per spec-node schema'),\n source_reference: z.object({\n provenance: z.enum(['extracted', 'manual', 'inferred', 'generated']),\n locations: z.array(z.object({\n file: z.string(),\n symbol: z.string().optional(),\n })),\n repository: z.object({\n url: z.string().optional(),\n commit: z.string().optional(),\n }).optional(),\n }).optional().describe('Source code provenance linking this element to its implementation'),\n metadata: z.object({\n created_at: z.string().optional(),\n updated_at: z.string().optional(),\n created_by: z.string().optional(),\n version: z.number().optional(),\n }).optional().describe('Element lifecycle metadata (timestamps, version)'),\n properties: z.record(z.string(), z.unknown()).optional()\n .describe('Legacy property bag (deprecated \u2014 prefer attributes)'),\n});\n\nexport const GraphLinkSchema = z.object({\n id: z.string().describe('Stable link ID derived from source, target, and type'),\n source: z.string().describe('Source element ID'),\n target: z.string().describe('Target element ID'),\n type: z.string().describe('Relationship predicate or reference type'),\n // Intra-layer links carry layer_id; cross-layer links carry source/target layer IDs\n layer_id: z.string().optional().describe('Layer ID for intra-layer relationships'),\n source_layer_id: z.string().optional().describe('Source layer ID for cross-layer references'),\n target_layer_id: z.string().optional().describe('Target layer ID for cross-layer references'),\n});\n\nexport const ModelResponseSchema = z.object({\n nodes: z.array(GraphNodeSchema).describe('All architecture elements across all layers'),\n links: z.array(GraphLinkSchema).describe('Intra-layer relationships and cross-layer references'),\n});\n\nexport const SpecResponseSchema = z.object({\n version: z.string().describe('Spec version'),\n type: z.string().describe('Response type'),\n description: z.string().describe('Response description'),\n source: z.string().describe('Schema source'),\n schemas: z.record(z.string(), z.unknown()).describe('JSON schema definitions (each schema is a JSON Schema object)'),\n schemaCount: z.number().describe('Number of schemas'),\n});\n\nexport const ChangesetMetadataSchema = z.object({\n name: z.string(),\n status: z.enum(['staged', 'committed', 'discarded'] as const),\n created: z.string(),\n changes_count: z.number(),\n});\n\nexport const ChangesetsListSchema = z.object({\n version: z.string(),\n changesets: z.record(z.string(), ChangesetMetadataSchema),\n});\n\nexport const ChangesetDetailSchema = z.object({\n id: z.string(),\n name: z.string(),\n description: z.string().optional(),\n status: z.enum(['staged', 'committed', 'discarded'] as const),\n created: z.string(),\n modified: z.string(),\n baseSnapshot: z.string().optional(),\n stats: z.object({\n additions: z.number(),\n modifications: z.number(),\n deletions: z.number(),\n }),\n changes: z.array(z.object({\n type: z.enum(['add', 'update', 'delete'] as const),\n elementId: z.string(),\n layerName: z.string(),\n timestamp: z.string().optional(),\n before: z.unknown().optional().describe('Previous element state (for update/delete operations)'),\n after: z.unknown().optional().describe('New element state (for add/update operations)'),\n })),\n});\n\n// Type inference from input schemas\nexport type AnnotationCreate = z.infer<typeof AnnotationCreateSchema>;\nexport type AnnotationUpdate = z.infer<typeof AnnotationUpdateSchema>;\nexport type AnnotationReplyCreate = z.infer<typeof AnnotationReplyCreateSchema>;\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }