@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.
- package/LICENSE +21 -0
- package/README.md +466 -693
- package/dist/analysis/data-model-analyzer.js +189 -0
- package/dist/analysis/data-model-analyzer.js.map +7 -0
- package/dist/analysis/index.js +3 -0
- package/dist/analysis/index.js.map +7 -0
- package/dist/analysis/relationship-classifier.js +181 -0
- package/dist/analysis/relationship-classifier.js.map +7 -0
- package/dist/analyzers/base-analyzer.js +1 -0
- package/dist/analyzers/base-analyzer.js.map +7 -0
- package/dist/analyzers/call-graph-utils.js +39 -0
- package/dist/analyzers/call-graph-utils.js.map +7 -0
- package/dist/analyzers/cbm-analyzer.js +1205 -0
- package/dist/analyzers/cbm-analyzer.js.map +7 -0
- package/dist/analyzers/heuristic-utils.js +55 -0
- package/dist/analyzers/heuristic-utils.js.map +7 -0
- package/dist/analyzers/mapping-loader.js +146 -0
- package/dist/analyzers/mapping-loader.js.map +7 -0
- package/dist/analyzers/registry.js +124 -0
- package/dist/analyzers/registry.js.map +7 -0
- package/dist/analyzers/session-state.js +176 -0
- package/dist/analyzers/session-state.js.map +7 -0
- package/dist/analyzers/stdio-client.js +206 -0
- package/dist/analyzers/stdio-client.js.map +7 -0
- package/dist/analyzers/types.js +15 -0
- package/dist/analyzers/types.js.map +7 -0
- package/dist/analyzers/verify-engine.js +209 -0
- package/dist/analyzers/verify-engine.js.map +7 -0
- package/dist/analyzers/verify-ignore.js +130 -0
- package/dist/analyzers/verify-ignore.js.map +7 -0
- package/dist/analyzers/version.js +8 -0
- package/dist/analyzers/version.js.map +7 -0
- package/dist/audit/ai/runner.js +41 -0
- package/dist/audit/ai/runner.js.map +7 -0
- package/dist/audit/differential-analyzer.js +183 -0
- package/dist/audit/differential-analyzer.js.map +7 -0
- package/dist/audit/index.js +32 -0
- package/dist/audit/index.js.map +7 -0
- package/dist/audit/nodes/ai/evaluator.js +49 -0
- package/dist/audit/nodes/ai/evaluator.js.map +7 -0
- package/dist/audit/nodes/ai/parser.js +55 -0
- package/dist/audit/nodes/ai/parser.js.map +7 -0
- package/dist/audit/nodes/ai/prompts.js +103 -0
- package/dist/audit/nodes/ai/prompts.js.map +7 -0
- package/dist/audit/nodes/analysis/node-completeness-checker.js +32 -0
- package/dist/audit/nodes/analysis/node-completeness-checker.js.map +7 -0
- package/dist/audit/nodes/analysis/node-definition-analyzer.js +47 -0
- package/dist/audit/nodes/analysis/node-definition-analyzer.js.map +7 -0
- package/dist/audit/nodes/analysis/node-overlap-detector.js +79 -0
- package/dist/audit/nodes/analysis/node-overlap-detector.js.map +7 -0
- package/dist/audit/nodes/model/orchestrator.js +82 -0
- package/dist/audit/nodes/model/orchestrator.js.map +7 -0
- package/dist/audit/nodes/spec/loader.js +116 -0
- package/dist/audit/nodes/spec/loader.js.map +7 -0
- package/dist/audit/nodes/spec/orchestrator.js +68 -0
- package/dist/audit/nodes/spec/orchestrator.js.map +7 -0
- package/dist/audit/nodes/types.js +1 -0
- package/dist/audit/nodes/types.js.map +7 -0
- package/dist/audit/pipeline/index.js +5 -0
- package/dist/audit/pipeline/index.js.map +7 -0
- package/dist/audit/pipeline/pipeline-orchestrator.js +218 -0
- package/dist/audit/pipeline/pipeline-orchestrator.js.map +7 -0
- package/dist/audit/relationships/ai/evaluator.js +235 -0
- package/dist/audit/relationships/ai/evaluator.js.map +7 -0
- package/dist/audit/relationships/ai/parser.js +197 -0
- package/dist/audit/relationships/ai/parser.js.map +7 -0
- package/dist/audit/relationships/ai/prompts.js +274 -0
- package/dist/audit/relationships/ai/prompts.js.map +7 -0
- package/dist/audit/relationships/analysis/balance-assessor.js +115 -0
- package/dist/audit/relationships/analysis/balance-assessor.js.map +7 -0
- package/dist/audit/relationships/analysis/coverage-analyzer.js +99 -0
- package/dist/audit/relationships/analysis/coverage-analyzer.js.map +7 -0
- package/dist/audit/relationships/analysis/duplicate-detector.js +95 -0
- package/dist/audit/relationships/analysis/duplicate-detector.js.map +7 -0
- package/dist/audit/relationships/analysis/gap-analyzer.js +99 -0
- package/dist/audit/relationships/analysis/gap-analyzer.js.map +7 -0
- package/dist/audit/relationships/analysis/layer-templates.js +294 -0
- package/dist/audit/relationships/analysis/layer-templates.js.map +7 -0
- package/dist/audit/relationships/graph/connectivity.js +129 -0
- package/dist/audit/relationships/graph/connectivity.js.map +7 -0
- package/dist/audit/relationships/graph/relationship-graph.js +179 -0
- package/dist/audit/relationships/graph/relationship-graph.js.map +7 -0
- package/dist/audit/relationships/model/balance-assessor.js +49 -0
- package/dist/audit/relationships/model/balance-assessor.js.map +7 -0
- package/dist/audit/relationships/model/coverage-analyzer.js +34 -0
- package/dist/audit/relationships/model/coverage-analyzer.js.map +7 -0
- package/dist/audit/relationships/model/duplicate-detector.js +68 -0
- package/dist/audit/relationships/model/duplicate-detector.js.map +7 -0
- package/dist/audit/relationships/model/gap-analyzer.js +41 -0
- package/dist/audit/relationships/model/gap-analyzer.js.map +7 -0
- package/dist/audit/relationships/model/orchestrator.js +126 -0
- package/dist/audit/relationships/model/orchestrator.js.map +7 -0
- package/dist/audit/relationships/spec/orchestrator.js +157 -0
- package/dist/audit/relationships/spec/orchestrator.js.map +7 -0
- package/dist/audit/reports/index.js +5 -0
- package/dist/audit/reports/index.js.map +7 -0
- package/dist/audit/reports/report-generator.js +118 -0
- package/dist/audit/reports/report-generator.js.map +7 -0
- package/dist/audit/snapshot-storage.js +163 -0
- package/dist/audit/snapshot-storage.js.map +7 -0
- package/dist/audit/types.js +21 -0
- package/dist/audit/types.js.map +7 -0
- package/dist/cli.js +223 -92
- package/dist/cli.js.map +3 -3
- package/dist/coding-agents/agents/claude-code.js +147 -0
- package/dist/coding-agents/agents/claude-code.js.map +7 -0
- package/dist/coding-agents/agents/index.js +5 -0
- package/dist/coding-agents/agents/index.js.map +7 -0
- package/dist/coding-agents/agents/types.js +1 -0
- package/dist/coding-agents/agents/types.js.map +7 -0
- package/dist/coding-agents/base-chat-client.js +45 -0
- package/dist/coding-agents/base-chat-client.js.map +7 -0
- package/dist/coding-agents/chat-utils.js +23 -0
- package/dist/coding-agents/chat-utils.js.map +7 -0
- package/dist/coding-agents/claude-code-client.js +246 -0
- package/dist/coding-agents/claude-code-client.js.map +7 -0
- package/dist/coding-agents/copilot-client.js +209 -0
- package/dist/coding-agents/copilot-client.js.map +7 -0
- package/dist/commands/add.js +95 -33
- package/dist/commands/add.js.map +2 -2
- package/dist/commands/analyzer.js +511 -0
- package/dist/commands/analyzer.js.map +7 -0
- package/dist/commands/audit-diff.js +49 -0
- package/dist/commands/audit-diff.js.map +7 -0
- package/dist/commands/audit-snapshots.js +62 -0
- package/dist/commands/audit-snapshots.js.map +7 -0
- package/dist/commands/audit.js +81 -0
- package/dist/commands/audit.js.map +7 -0
- package/dist/commands/catalog.js +248 -0
- package/dist/commands/catalog.js.map +7 -0
- package/dist/commands/changeset.js +577 -66
- package/dist/commands/changeset.js.map +2 -2
- package/dist/commands/chat.js +106 -83
- package/dist/commands/chat.js.map +2 -2
- package/dist/commands/claude.js +74 -0
- package/dist/commands/claude.js.map +7 -0
- package/dist/commands/conformance.js +71 -68
- package/dist/commands/conformance.js.map +2 -2
- package/dist/commands/copilot.js +75 -0
- package/dist/commands/copilot.js.map +7 -0
- package/dist/commands/delete.js +125 -11
- package/dist/commands/delete.js.map +3 -3
- package/dist/commands/discover-logic.js +44 -0
- package/dist/commands/discover-logic.js.map +7 -0
- package/dist/commands/docs.js +87 -0
- package/dist/commands/docs.js.map +7 -0
- package/dist/commands/element.js +14 -20
- package/dist/commands/element.js.map +2 -2
- package/dist/commands/export.js +13 -3
- package/dist/commands/export.js.map +2 -2
- package/dist/commands/import.js +51 -0
- package/dist/commands/import.js.map +7 -0
- package/dist/commands/info.js +30 -24
- package/dist/commands/info.js.map +2 -2
- package/dist/commands/init.js +27 -11
- package/dist/commands/init.js.map +2 -2
- package/dist/commands/list.js +63 -13
- package/dist/commands/list.js.map +3 -3
- package/dist/commands/relationship.js +225 -37
- package/dist/commands/relationship.js.map +2 -2
- package/dist/commands/report.js +54 -0
- package/dist/commands/report.js.map +7 -0
- package/dist/commands/reports.js +45 -0
- package/dist/commands/reports.js.map +7 -0
- package/dist/commands/schema.js +135 -0
- package/dist/commands/schema.js.map +7 -0
- package/dist/commands/search.js +40 -12
- package/dist/commands/search.js.map +2 -2
- package/dist/commands/show.js +58 -27
- package/dist/commands/show.js.map +2 -2
- package/dist/commands/stats.js +35 -0
- package/dist/commands/stats.js.map +7 -0
- package/dist/commands/trace.js +39 -16
- package/dist/commands/trace.js.map +2 -2
- package/dist/commands/update.js +141 -14
- package/dist/commands/update.js.map +2 -2
- package/dist/commands/upgrade.js +210 -46
- package/dist/commands/upgrade.js.map +3 -3
- package/dist/commands/validate.js +142 -23
- package/dist/commands/validate.js.map +3 -3
- package/dist/commands/version.js +8 -12
- package/dist/commands/version.js.map +2 -2
- package/dist/commands/visualize.js +155 -25
- package/dist/commands/visualize.js.map +2 -2
- package/dist/core/base-snapshot-manager.js +84 -0
- package/dist/core/base-snapshot-manager.js.map +7 -0
- package/dist/core/changeset-exporter.js +305 -0
- package/dist/core/changeset-exporter.js.map +7 -0
- package/dist/core/changeset-validator.js +41 -0
- package/dist/core/changeset-validator.js.map +7 -0
- package/dist/core/changeset.js +88 -173
- package/dist/core/changeset.js.map +2 -2
- package/dist/core/dependency-tracker.js +4 -2
- package/dist/core/dependency-tracker.js.map +2 -2
- package/dist/core/element.js +98 -27
- package/dist/core/element.js.map +2 -2
- package/dist/core/golden-copy-cache.js +290 -0
- package/dist/core/golden-copy-cache.js.map +7 -0
- package/dist/core/graph-model.js +266 -0
- package/dist/core/graph-model.js.map +7 -0
- package/dist/core/layer.js +159 -16
- package/dist/core/layer.js.map +2 -2
- package/dist/core/layers.js +32 -0
- package/dist/core/layers.js.map +7 -0
- package/dist/core/manifest.js +32 -11
- package/dist/core/manifest.js.map +2 -2
- package/dist/core/migration-registry.js +56 -1
- package/dist/core/migration-registry.js.map +2 -2
- package/dist/core/model.js +424 -217
- package/dist/core/model.js.map +3 -3
- package/dist/core/mutation-handler.js +179 -0
- package/dist/core/mutation-handler.js.map +7 -0
- package/dist/core/reference-registry.js +29 -21
- package/dist/core/reference-registry.js.map +2 -2
- package/dist/core/relationship-catalog.js +189 -0
- package/dist/core/relationship-catalog.js.map +7 -0
- package/dist/core/relationship-registry.js.map +2 -2
- package/dist/core/relationships.js.map +1 -1
- package/dist/core/report-data-model.js +285 -0
- package/dist/core/report-data-model.js.map +7 -0
- package/dist/core/spec-data-service.js +185 -0
- package/dist/core/spec-data-service.js.map +7 -0
- package/dist/core/spec-loader-types.js +1 -0
- package/dist/core/spec-loader-types.js.map +7 -0
- package/dist/core/spec-loader.js +234 -0
- package/dist/core/spec-loader.js.map +7 -0
- package/dist/core/staged-changeset-storage.js +282 -0
- package/dist/core/staged-changeset-storage.js.map +7 -0
- package/dist/core/staging-area.js +1002 -0
- package/dist/core/staging-area.js.map +7 -0
- package/dist/core/stats-collector.js +169 -0
- package/dist/core/stats-collector.js.map +7 -0
- package/dist/core/virtual-projection.js +443 -0
- package/dist/core/virtual-projection.js.map +7 -0
- package/dist/export/archimate-exporter.js +99 -60
- package/dist/export/archimate-exporter.js.map +2 -2
- package/dist/export/audit-formatters.js +479 -0
- package/dist/export/audit-formatters.js.map +7 -0
- package/dist/export/diff-formatters.js +99 -0
- package/dist/export/diff-formatters.js.map +7 -0
- package/dist/export/export-manager.js.map +2 -2
- package/dist/export/graphml-exporter.js +44 -27
- package/dist/export/graphml-exporter.js.map +2 -2
- package/dist/export/index.js +4 -0
- package/dist/export/index.js.map +2 -2
- package/dist/export/json-schema-exporter.js +55 -42
- package/dist/export/json-schema-exporter.js.map +2 -2
- package/dist/export/markdown-exporter.js +92 -70
- package/dist/export/markdown-exporter.js.map +2 -2
- package/dist/export/markdown-generator.js +248 -0
- package/dist/export/markdown-generator.js.map +7 -0
- package/dist/export/markdown-utils.js +30 -0
- package/dist/export/markdown-utils.js.map +7 -0
- package/dist/export/mermaid-markdown-exporter.js +37 -0
- package/dist/export/mermaid-markdown-exporter.js.map +7 -0
- package/dist/export/openapi-exporter.js +119 -71
- package/dist/export/openapi-exporter.js.map +2 -2
- package/dist/export/plantuml-exporter.js +104 -39
- package/dist/export/plantuml-exporter.js.map +2 -2
- package/dist/export/report-formatters.js +111 -0
- package/dist/export/report-formatters.js.map +7 -0
- package/dist/export/stats-formatters.js +98 -0
- package/dist/export/stats-formatters.js.map +7 -0
- package/dist/export/types.js +2 -14
- package/dist/export/types.js.map +2 -2
- package/dist/export/verify-formatters.js +153 -0
- package/dist/export/verify-formatters.js.map +7 -0
- package/dist/generated/compiled-validators.js +17 -0
- package/dist/generated/compiled-validators.js.map +7 -0
- package/dist/generated/index.js +31 -0
- package/dist/generated/index.js.map +7 -0
- package/dist/generated/layer-registry.js +190 -0
- package/dist/generated/layer-registry.js.map +7 -0
- package/dist/generated/layer-types.js +7 -0
- package/dist/generated/layer-types.js.map +7 -0
- package/dist/generated/node-types.js +1719 -0
- package/dist/generated/node-types.js.map +7 -0
- package/dist/generated/relationship-index.js +14552 -0
- package/dist/generated/relationship-index.js.map +7 -0
- package/dist/import/archimate-importer.js +166 -0
- package/dist/import/archimate-importer.js.map +7 -0
- package/dist/import/index.js +47 -0
- package/dist/import/index.js.map +7 -0
- package/dist/import/openapi-importer.js +143 -0
- package/dist/import/openapi-importer.js.map +7 -0
- package/dist/import/types.js +1 -0
- package/dist/import/types.js.map +7 -0
- package/dist/integrations/base-manager.js +311 -0
- package/dist/integrations/base-manager.js.map +7 -0
- package/dist/integrations/claude-manager.js +360 -0
- package/dist/integrations/claude-manager.js.map +7 -0
- package/dist/integrations/claude_code/agents/dr-advisor.md +253 -0
- package/dist/integrations/claude_code/agents/dr-architect.md +278 -0
- package/dist/integrations/claude_code/agents/dr-extractor.md +286 -0
- package/dist/integrations/claude_code/commands/dr-changeset.md +657 -0
- package/dist/integrations/claude_code/commands/dr-design.md +373 -0
- package/dist/integrations/claude_code/commands/dr-info.md +132 -0
- package/dist/integrations/claude_code/commands/dr-init.md +251 -0
- package/dist/integrations/claude_code/commands/dr-map.md +936 -0
- package/dist/integrations/claude_code/commands/dr-model.md +493 -0
- package/dist/integrations/claude_code/commands/dr-relate.md +814 -0
- package/dist/integrations/claude_code/commands/dr-sync.md +279 -0
- package/dist/integrations/claude_code/commands/dr-validate.md +654 -0
- package/dist/integrations/claude_code/commands/dr-verify.md +559 -0
- package/dist/integrations/claude_code/docs/END_TO_END_WALKTHROUGH.md +903 -0
- package/dist/integrations/claude_code/docs/QUICK_START.md +271 -0
- package/dist/integrations/claude_code/docs/README.md +347 -0
- package/dist/integrations/claude_code/skills/dr_01_motivation_layer/SKILL.md +550 -0
- package/dist/integrations/claude_code/skills/dr_02_business_layer/SKILL.md +620 -0
- package/dist/integrations/claude_code/skills/dr_03_security_layer/SKILL.md +642 -0
- package/dist/integrations/claude_code/skills/dr_04_application_layer/SKILL.md +911 -0
- package/dist/integrations/claude_code/skills/dr_05_technology_layer/SKILL.md +836 -0
- package/dist/integrations/claude_code/skills/dr_06_api_layer/SKILL.md +933 -0
- package/dist/integrations/claude_code/skills/dr_07_data_model_layer/SKILL.md +210 -0
- package/dist/integrations/claude_code/skills/dr_08_dataset_layer/SKILL.md +319 -0
- package/dist/integrations/claude_code/skills/dr_09_ux_layer/SKILL.md +319 -0
- package/dist/integrations/claude_code/skills/dr_10_navigation_layer/SKILL.md +318 -0
- package/dist/integrations/claude_code/skills/dr_11_apm_layer/SKILL.md +273 -0
- package/dist/integrations/claude_code/skills/dr_12_testing_layer/SKILL.md +273 -0
- package/dist/integrations/claude_code/skills/dr_changeset_reviewer/SKILL.md +187 -0
- package/dist/integrations/claude_code/skills/dr_codebase_memory/SKILL.md +590 -0
- package/dist/integrations/claude_code/skills/dr_engineering_guide/SKILL.md +295 -0
- package/dist/integrations/copilot-manager.js +328 -0
- package/dist/integrations/copilot-manager.js.map +7 -0
- package/dist/integrations/github_copilot/agents/dr-advisor.md +243 -0
- package/dist/integrations/github_copilot/agents/dr-architect.md +1567 -0
- package/dist/integrations/github_copilot/skills/dr_01_motivation_layer/SKILL.md +491 -0
- package/dist/integrations/github_copilot/skills/dr_02_business_layer/SKILL.md +539 -0
- package/dist/integrations/github_copilot/skills/dr_03_security_layer/SKILL.md +667 -0
- package/dist/integrations/github_copilot/skills/dr_04_application_layer/SKILL.md +670 -0
- package/dist/integrations/github_copilot/skills/dr_05_technology_layer/SKILL.md +660 -0
- package/dist/integrations/github_copilot/skills/dr_06_api_layer/SKILL.md +855 -0
- package/dist/integrations/github_copilot/skills/dr_07_data_model_layer/SKILL.md +171 -0
- package/dist/integrations/github_copilot/skills/dr_08_dataset_layer/SKILL.md +216 -0
- package/dist/integrations/github_copilot/skills/dr_09_ux_layer/SKILL.md +230 -0
- package/dist/integrations/github_copilot/skills/dr_10_navigation_layer/SKILL.md +228 -0
- package/dist/integrations/github_copilot/skills/dr_11_apm_layer/SKILL.md +234 -0
- package/dist/integrations/github_copilot/skills/dr_12_testing_layer/SKILL.md +230 -0
- package/dist/integrations/github_copilot/skills/dr_changeset_reviewer/SKILL.md +187 -0
- package/dist/integrations/hash-utils.js +51 -0
- package/dist/integrations/hash-utils.js.map +7 -0
- package/dist/integrations/types.js +16 -0
- package/dist/integrations/types.js.map +7 -0
- package/dist/reports/model-layer-report-generator.js +278 -0
- package/dist/reports/model-layer-report-generator.js.map +7 -0
- package/dist/reports/model-report-data.js +57 -0
- package/dist/reports/model-report-data.js.map +7 -0
- package/dist/reports/model-report-orchestrator.js +103 -0
- package/dist/reports/model-report-orchestrator.js.map +7 -0
- package/dist/schemas/bundled/analyzers/cbm.json +595 -0
- package/dist/schemas/bundled/analyzers/manifest.json +9 -0
- package/dist/schemas/bundled/api.json +3411 -0
- package/dist/schemas/bundled/apm.json +2371 -0
- package/dist/schemas/bundled/application.json +1253 -0
- package/dist/schemas/bundled/base.json +1622 -0
- package/dist/schemas/bundled/business.json +1279 -0
- package/dist/schemas/bundled/data-model.json +1298 -0
- package/dist/schemas/bundled/data-store.json +2025 -0
- package/dist/schemas/bundled/manifest.json +93 -0
- package/dist/schemas/bundled/motivation.json +1360 -0
- package/dist/schemas/bundled/navigation.json +1874 -0
- package/dist/schemas/bundled/security.json +3488 -0
- package/dist/schemas/bundled/technology.json +2067 -0
- package/dist/schemas/bundled/testing.json +3120 -0
- package/dist/schemas/bundled/ux.json +3592 -0
- package/dist/server/schemas.js +202 -0
- package/dist/server/schemas.js.map +7 -0
- package/dist/server/server.js +1336 -252
- package/dist/server/server.js.map +3 -3
- package/dist/server/telemetry-middleware.js +22 -15
- package/dist/server/telemetry-middleware.js.map +2 -2
- package/dist/server-entry.js +65 -0
- package/dist/server-entry.js.map +7 -0
- package/dist/telemetry/config.js +89 -0
- package/dist/telemetry/config.js.map +7 -0
- package/dist/telemetry/console-interceptor.js.map +1 -1
- package/dist/telemetry/detect.js +24 -0
- package/dist/telemetry/detect.js.map +7 -0
- package/dist/telemetry/fetch-otlp-exporter.js +112 -0
- package/dist/telemetry/fetch-otlp-exporter.js.map +7 -0
- package/dist/telemetry/index.js +153 -3
- package/dist/telemetry/index.js.map +2 -2
- package/dist/telemetry/resilient-exporter.js +22 -8
- package/dist/telemetry/resilient-exporter.js.map +2 -2
- package/dist/telemetry/resilient-log-exporter.js +17 -8
- package/dist/telemetry/resilient-log-exporter.js.map +2 -2
- package/dist/telemetry/test-instrumentation.js.map +2 -2
- package/dist/types/index.js +84 -0
- package/dist/types/index.js.map +3 -3
- package/dist/types/source-reference.js +1 -0
- package/dist/types/source-reference.js.map +7 -0
- package/dist/utils/chat-logger.js +292 -0
- package/dist/utils/chat-logger.js.map +7 -0
- package/dist/utils/claude-stream.js +8 -0
- package/dist/utils/claude-stream.js.map +7 -0
- package/dist/utils/date-utils.js +7 -0
- package/dist/utils/date-utils.js.map +7 -0
- package/dist/utils/element-utils.js.map +1 -1
- package/dist/utils/errors.js +88 -15
- package/dist/utils/errors.js.map +3 -3
- package/dist/utils/export-python-annotations.js +82 -0
- package/dist/utils/export-python-annotations.js.map +7 -0
- package/dist/utils/file-io.js +7 -2
- package/dist/utils/file-io.js.map +2 -2
- package/dist/utils/file-lock.js +156 -0
- package/dist/utils/file-lock.js.map +7 -0
- package/dist/utils/id-generator.js +18 -0
- package/dist/utils/id-generator.js.map +7 -0
- package/dist/utils/layer-name-formatter.js +16 -0
- package/dist/utils/layer-name-formatter.js.map +7 -0
- package/dist/utils/markdown-anchor.js +7 -0
- package/dist/utils/markdown-anchor.js.map +7 -0
- package/dist/utils/markdown-link.js +12 -0
- package/dist/utils/markdown-link.js.map +7 -0
- package/dist/utils/markdown-table.js +17 -0
- package/dist/utils/markdown-table.js.map +7 -0
- package/dist/utils/mermaid-utils.js +11 -0
- package/dist/utils/mermaid-utils.js.map +7 -0
- package/dist/utils/project-paths.js.map +2 -2
- package/dist/utils/source-reference.js +52 -0
- package/dist/utils/source-reference.js.map +7 -0
- package/dist/utils/spec-installer.js +40 -53
- package/dist/utils/spec-installer.js.map +2 -2
- package/dist/utils/spec-version.js +5 -1
- package/dist/utils/spec-version.js.map +2 -2
- package/dist/utils/string-utils.js +12 -0
- package/dist/utils/string-utils.js.map +7 -0
- package/dist/utils/table-formatting.js +19 -0
- package/dist/utils/table-formatting.js.map +7 -0
- package/dist/validators/index.js +4 -0
- package/dist/validators/index.js.map +2 -2
- package/dist/validators/naming-validator.js +20 -23
- package/dist/validators/naming-validator.js.map +2 -2
- package/dist/validators/reference-validator.js +23 -38
- package/dist/validators/reference-validator.js.map +2 -2
- package/dist/validators/relationship-schema-validator.js +243 -0
- package/dist/validators/relationship-schema-validator.js.map +7 -0
- package/dist/validators/schema-validator.js +168 -68
- package/dist/validators/schema-validator.js.map +2 -2
- package/dist/validators/semantic-validator.js +36 -60
- package/dist/validators/semantic-validator.js.map +2 -2
- package/dist/validators/types.js.map +2 -2
- package/dist/validators/validation-formatter.js +159 -0
- package/dist/validators/validation-formatter.js.map +7 -0
- package/dist/validators/validator.js +24 -38
- package/dist/validators/validator.js.map +2 -2
- package/dist/viewer/README.md +139 -0
- package/dist/viewer/assets/main-CY0Xufuj.css +1 -0
- package/dist/viewer/assets/main-DtgErnwF.js +81 -0
- package/dist/viewer/assets/vendor-CxKvDp2x.js +17 -0
- package/dist/viewer/favicon.svg +11 -0
- package/dist/viewer/fonts/inter/Inter-Black.woff2 +0 -0
- package/dist/viewer/fonts/inter/Inter-Bold.woff2 +0 -0
- package/dist/viewer/fonts/inter/Inter-ExtraBold.woff2 +0 -0
- package/dist/viewer/fonts/inter/Inter-Light.woff2 +0 -0
- package/dist/viewer/fonts/inter/Inter-Medium.woff2 +0 -0
- package/dist/viewer/fonts/inter/Inter-Regular.woff2 +0 -0
- package/dist/viewer/fonts/inter/Inter-SemiBold.woff2 +0 -0
- package/dist/viewer/fonts/jetbrains-mono/JetBrainsMono-Medium.woff2 +0 -0
- package/dist/viewer/fonts/jetbrains-mono/JetBrainsMono-Regular.woff2 +0 -0
- package/dist/viewer/fonts/jetbrains-mono/JetBrainsMono-SemiBold.woff2 +0 -0
- package/dist/viewer/index.html +15 -0
- package/dist/viewer/manifest.json +99 -0
- package/dist/viewer/version.json +1 -0
- package/package.json +37 -13
- package/PYTHON_CLI_PARITY.md +0 -265
- package/PYTHON_CLI_STRUCTURE_UPDATE.md +0 -246
- package/biome.json +0 -42
- package/bunfig.toml +0 -3
- package/dist/ai/claude-client.js +0 -71
- package/dist/ai/claude-client.js.map +0 -7
- package/dist/ai/context-provider.js +0 -129
- package/dist/ai/context-provider.js.map +0 -7
- package/dist/ai/tools.js +0 -231
- package/dist/ai/tools.js.map +0 -7
- package/dist/commands/migrate.js +0 -36
- package/dist/commands/migrate.js.map +0 -7
- package/dist/commands/project.js +0 -74
- package/dist/commands/project.js.map +0 -7
- package/dist/core/active-changeset.js +0 -52
- package/dist/core/active-changeset.js.map +0 -7
- package/dist/core/projection-engine.js +0 -288
- package/dist/core/projection-engine.js.map +0 -7
- package/dist/schemas/bundled/01-motivation-layer.schema.json +0 -942
- package/dist/schemas/bundled/02-business-layer.schema.json +0 -1293
- package/dist/schemas/bundled/03-security-layer.schema.json +0 -2177
- package/dist/schemas/bundled/04-application-layer.schema.json +0 -1328
- package/dist/schemas/bundled/05-technology-layer.schema.json +0 -1465
- package/dist/schemas/bundled/06-api-layer.schema.json +0 -1743
- package/dist/schemas/bundled/07-data-model-layer.schema.json +0 -1253
- package/dist/schemas/bundled/08-datastore-layer.schema.json +0 -892
- package/dist/schemas/bundled/09-ux-layer.schema.json +0 -1506
- package/dist/schemas/bundled/10-navigation-layer.schema.json +0 -843
- package/dist/schemas/bundled/11-apm-observability-layer.schema.json +0 -1430
- package/dist/schemas/bundled/12-testing-layer.schema.json +0 -1091
- package/dist/schemas/bundled/common/layer-extensions.schema.json +0 -266
- package/dist/schemas/bundled/common/predicates.schema.json +0 -493
- package/dist/schemas/bundled/common/relationships.schema.json +0 -791
- package/dist/schemas/bundled/common/source-references.schema.json +0 -71
- package/dist/schemas/bundled/link-registry.json +0 -1839
- package/dist/schemas/bundled/link-registry.schema.json +0 -339
- package/dist/schemas/bundled/relationship-catalog.json +0 -1302
- package/dist/schemas/bundled/relationship-type.schema.json +0 -221
- package/dist/utils/model-path.js +0 -22
- package/dist/utils/model-path.js.map +0 -7
- package/docs/TEST-INSTRUMENTATION.md +0 -405
- package/docs/telemetry.md +0 -427
- package/test-debug.js +0 -33
- package/test-special.mjs +0 -46
- package/test_runner.ts +0 -7
|
@@ -1,57 +1,70 @@
|
|
|
1
|
+
import { isTelemetryEnabled, startSpan, endSpan } from "../telemetry/index.js";
|
|
2
|
+
import { getErrorMessage } from "../utils/errors.js";
|
|
1
3
|
class JsonSchemaExporter {
|
|
2
4
|
name = "JSON Schema";
|
|
3
|
-
supportedLayers = ["data-model"
|
|
5
|
+
supportedLayers = ["data-model"];
|
|
4
6
|
async export(model, _options = {}) {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
7
|
+
const span = isTelemetryEnabled ? startSpan("export.format.json-schema") : null;
|
|
8
|
+
try {
|
|
9
|
+
const nodes = model.graph.getNodesByLayer("data-model");
|
|
10
|
+
if (nodes.length === 0)
|
|
11
|
+
throw new Error("No Data Model layer found in model");
|
|
12
|
+
const rootSchema = {
|
|
13
|
+
$schema: "http://json-schema.org/draft-07/schema#",
|
|
14
|
+
$id: `${model.manifest.name.toLowerCase().replace(/\s+/g, "-")}-schema`,
|
|
15
|
+
title: model.manifest.name,
|
|
16
|
+
description: model.manifest.description || "Data model schema",
|
|
17
|
+
type: "object",
|
|
18
|
+
definitions: {}
|
|
19
|
+
}, nodeTypeToSchemaType = {
|
|
20
|
+
arrayschema: "array",
|
|
21
|
+
stringschema: "string",
|
|
22
|
+
numericschema: "number",
|
|
23
|
+
objectschema: "object",
|
|
24
|
+
entity: "object"
|
|
25
|
+
};
|
|
26
|
+
for (const node of nodes) {
|
|
27
|
+
const entityName = node.name, attrs = node.attributes, properties = attrs?.properties, required = attrs?.required ?? node.properties?.required, description = node.description, schemaType = typeof attrs?.type == "string" ? attrs.type : nodeTypeToSchemaType[node.type] ?? "object", entitySchema = {
|
|
19
28
|
title: entityName,
|
|
20
29
|
...description && { description },
|
|
21
|
-
type:
|
|
30
|
+
type: schemaType,
|
|
22
31
|
...properties && { properties },
|
|
23
32
|
...required && { required }
|
|
24
|
-
}, additionalProperties =
|
|
33
|
+
}, additionalProperties = attrs?.additionalProperties;
|
|
25
34
|
additionalProperties !== void 0 && (entitySchema.additionalProperties = additionalProperties);
|
|
26
|
-
const constraints =
|
|
27
|
-
constraints && Object.assign(entitySchema, constraints)
|
|
35
|
+
const constraints = attrs?.constraints;
|
|
36
|
+
constraints && Object.assign(entitySchema, constraints);
|
|
37
|
+
const sourceRef = attrs?.["x-source-reference"] || attrs?.["source-reference"] || node.source_reference;
|
|
38
|
+
sourceRef && (entitySchema["x-source-reference"] = sourceRef), rootSchema.definitions[node.id] = entitySchema;
|
|
28
39
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
const refKey = `${element.id}-references`;
|
|
34
|
-
relationships[refKey] || (relationships[refKey] = []), relationships[refKey].push({
|
|
35
|
-
target: ref.target,
|
|
36
|
-
type: ref.type
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
for (const rel of element.relationships) {
|
|
40
|
-
const relKey = `${element.id}-${rel.predicate}`;
|
|
40
|
+
const relationships = {}, edges = model.graph.getAllEdges(), nodeIds = new Set(nodes.map((n) => n.id));
|
|
41
|
+
for (const edge of edges)
|
|
42
|
+
if (nodeIds.has(edge.source) && nodeIds.has(edge.destination)) {
|
|
43
|
+
const relKey = `${edge.source}-${edge.predicate}`;
|
|
41
44
|
relationships[relKey] || (relationships[relKey] = []), relationships[relKey].push({
|
|
42
|
-
target:
|
|
45
|
+
target: edge.destination
|
|
43
46
|
});
|
|
44
47
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
48
|
+
Object.keys(relationships).length > 0 && (rootSchema.relationships = relationships);
|
|
49
|
+
const entityCount = nodes.length, metadata = {
|
|
50
|
+
version: model.manifest.version || "1.0.0",
|
|
51
|
+
...model.manifest.author && { author: model.manifest.author },
|
|
52
|
+
...model.manifest.created && { created: model.manifest.created },
|
|
53
|
+
...model.manifest.modified && { modified: model.manifest.modified },
|
|
54
|
+
entityCount
|
|
55
|
+
};
|
|
56
|
+
rootSchema.metadata = metadata;
|
|
57
|
+
const result = JSON.stringify(rootSchema, null, 2) + `
|
|
58
|
+
`;
|
|
59
|
+
return isTelemetryEnabled && span && (span.setAttribute("export.entityCount", Object.keys(rootSchema.definitions || {}).length), span.setAttribute("export.relationshipCount", Object.keys(relationships).length), span.setAttribute("export.size", result.length), span.setStatus({ code: 0 })), result;
|
|
60
|
+
} catch (error) {
|
|
61
|
+
throw isTelemetryEnabled && span && (span.recordException(error), span.setStatus({
|
|
62
|
+
code: 2,
|
|
63
|
+
message: getErrorMessage(error)
|
|
64
|
+
})), error;
|
|
65
|
+
} finally {
|
|
66
|
+
endSpan(span);
|
|
67
|
+
}
|
|
55
68
|
}
|
|
56
69
|
}
|
|
57
70
|
export {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/export/json-schema-exporter.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Model } from \"../core/model.js\";\nimport type { Exporter, ExportOptions } from \"./types.js\";\n\n/**\n * JSON Schema Draft 7 Exporter for layer 7 (Data Model)\n */\nexport class JsonSchemaExporter implements Exporter {\n name = \"JSON Schema\";\n supportedLayers = [\"data-model\"
|
|
5
|
-
"mappings": "
|
|
4
|
+
"sourcesContent": ["import type { Model } from \"../core/model.js\";\nimport type { Exporter, ExportOptions } from \"./types.js\";\nimport { isTelemetryEnabled, startSpan, endSpan } from \"../telemetry/index.js\";\nimport { getErrorMessage } from \"../utils/errors.js\";\n\n/**\n * JSON Schema Draft 7 Exporter for layer 7 (Data Model)\n */\nexport class JsonSchemaExporter implements Exporter {\n name = \"JSON Schema\";\n supportedLayers = [\"data-model\"];\n\n async export(model: Model, _options: ExportOptions = {}): Promise<string> {\n const span = isTelemetryEnabled ? startSpan(\"export.format.json-schema\") : null;\n\n try {\n // Query graph model for data-model layer nodes\n const nodes = model.graph.getNodesByLayer(\"data-model\");\n if (nodes.length === 0) {\n throw new Error(\"No Data Model layer found in model\");\n }\n\n // Create a root schema that references all entities\n const rootSchema: Record<string, unknown> = {\n $schema: \"http://json-schema.org/draft-07/schema#\",\n $id: `${model.manifest.name.toLowerCase().replace(/\\s+/g, \"-\")}-schema`,\n title: model.manifest.name,\n description: model.manifest.description || \"Data model schema\",\n type: \"object\",\n definitions: {},\n };\n\n // Map from spec node type to JSON Schema type for cases where the type\n // is determined by the node kind rather than a stored attribute.\n const nodeTypeToSchemaType: Record<string, string> = {\n arrayschema: \"array\",\n stringschema: \"string\",\n numericschema: \"number\",\n objectschema: \"object\",\n entity: \"object\",\n };\n\n // Process all data-model nodes as JSON Schema definitions.\n // The spec uses types: jsonschema, schemadefinition, objectschema, arrayschema,\n // numericschema, stringschema, schemacomposition, schemaproperty, reference, entity.\n for (const node of nodes) {\n const entityName = node.name;\n // GraphNode stores element attributes as a direct field (node.attributes),\n // not nested under node.properties.\n const attrs = node.attributes as Record<string, unknown> | undefined;\n // 'properties' in JSON Schema context means the sub-schemas for object properties,\n // stored in the element's attributes.properties field.\n const properties = attrs?.properties as Record<string, unknown> | undefined;\n const required = (attrs?.required as string[] | undefined) ?? (node.properties?.required as string[] | undefined);\n const description = node.description;\n\n // Derive JSON Schema type: prefer the value stored in the element's attributes\n // (user-specified), then fall back to the node-type map, then \"object\".\n const schemaType =\n typeof attrs?.type === \"string\"\n ? attrs.type\n : (nodeTypeToSchemaType[node.type] ?? \"object\");\n\n const entitySchema: Record<string, unknown> = {\n title: entityName,\n ...(description && { description }),\n type: schemaType,\n ...(properties && { properties }),\n ...(required && { required }),\n };\n\n // Add additional metadata\n const additionalProperties = attrs?.additionalProperties as boolean;\n if (additionalProperties !== undefined) {\n entitySchema.additionalProperties = additionalProperties;\n }\n\n // Add constraints if present\n const constraints = attrs?.constraints as Record<string, unknown>;\n if (constraints) {\n Object.assign(entitySchema, constraints);\n }\n\n // Add source reference if present (check both naming conventions)\n const sourceRef =\n attrs?.[\"x-source-reference\"] || attrs?.[\"source-reference\"]\n || node.source_reference;\n if (sourceRef) {\n entitySchema[\"x-source-reference\"] = sourceRef;\n }\n\n (rootSchema.definitions as Record<string, unknown>)[node.id] = entitySchema;\n }\n\n // Add relationships as references between entities - query graph edges\n const relationships: Record<string, unknown> = {};\n const edges = model.graph.getAllEdges();\n const nodeIds = new Set(nodes.map((n) => n.id));\n\n for (const edge of edges) {\n // Only include edges where source is an entity in the data-model layer\n if (nodeIds.has(edge.source) && nodeIds.has(edge.destination)) {\n const relKey = `${edge.source}-${edge.predicate}`;\n if (!relationships[relKey]) {\n relationships[relKey] = [];\n }\n (relationships[relKey] as Array<{ target: string }>).push({\n target: edge.destination,\n });\n }\n }\n\n if (Object.keys(relationships).length > 0) {\n rootSchema.relationships = relationships;\n }\n\n // Add metadata section\n const entityCount = nodes.length;\n const metadata: Record<string, unknown> = {\n version: model.manifest.version || \"1.0.0\",\n ...(model.manifest.author && { author: model.manifest.author }),\n ...(model.manifest.created && { created: model.manifest.created }),\n ...(model.manifest.modified && { modified: model.manifest.modified }),\n entityCount,\n };\n rootSchema.metadata = metadata;\n\n const result = JSON.stringify(rootSchema, null, 2) + \"\\n\";\n\n if (isTelemetryEnabled && span) {\n (span as any).setAttribute(\n \"export.entityCount\",\n Object.keys(rootSchema.definitions || {}).length\n );\n (span as any).setAttribute(\"export.relationshipCount\", Object.keys(relationships).length);\n (span as any).setAttribute(\"export.size\", result.length);\n (span as any).setStatus({ code: 0 });\n }\n\n return result;\n } catch (error) {\n if (isTelemetryEnabled && span) {\n (span as any).recordException(error as Error);\n (span as any).setStatus({\n code: 2,\n message: getErrorMessage(error),\n });\n }\n throw error;\n } finally {\n endSpan(span);\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,96 +1,118 @@
|
|
|
1
1
|
import { ALL_LAYERS } from "./types.js";
|
|
2
|
+
import { isTelemetryEnabled, startSpan, endSpan } from "../telemetry/index.js";
|
|
3
|
+
import { formatLayerName } from "../utils/layer-name-formatter.js";
|
|
4
|
+
import { getErrorMessage } from "../utils/errors.js";
|
|
5
|
+
import { escapeMarkdown, valueToMarkdown, getLayerDescription } from "./markdown-utils.js";
|
|
2
6
|
class MarkdownExporter {
|
|
3
7
|
name = "Markdown";
|
|
4
8
|
supportedLayers = ALL_LAYERS;
|
|
5
|
-
layerDescriptions = {
|
|
6
|
-
motivation: "Goals, requirements, drivers, and strategic outcomes of the architecture.",
|
|
7
|
-
business: "Business processes, functions, roles, and services.",
|
|
8
|
-
security: "Authentication, authorization, security threats, and controls.",
|
|
9
|
-
application: "Application components, services, and interactions.",
|
|
10
|
-
technology: "Infrastructure, platforms, systems, and technology components.",
|
|
11
|
-
api: "REST APIs, operations, endpoints, and API integrations.",
|
|
12
|
-
"data-model": "Data entities, relationships, and data structure definitions.",
|
|
13
|
-
"data-store": "Databases, data stores, and persistence mechanisms.",
|
|
14
|
-
ux: "User interface components, screens, and user experience elements.",
|
|
15
|
-
navigation: "Application routing, navigation flows, and page structures.",
|
|
16
|
-
apm: "Observability, monitoring, metrics, logging, and tracing.",
|
|
17
|
-
testing: "Test strategies, test cases, test data, and test coverage."
|
|
18
|
-
};
|
|
19
9
|
async export(model, options = {}) {
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
lines.push("**Properties:**"), lines.push(""), lines.push("| Property | Value |"), lines.push("| -------- | ----- |");
|
|
41
|
-
for (const [key, value] of Object.entries(element.properties)) {
|
|
42
|
-
const displayValue = this.valueToMarkdown(value);
|
|
43
|
-
lines.push(`| \`${key}\` | ${displayValue} |`);
|
|
44
|
-
}
|
|
45
|
-
lines.push("");
|
|
10
|
+
const span = isTelemetryEnabled ? startSpan("export.format.markdown", {
|
|
11
|
+
"export.layerCount": options.layers?.length || this.supportedLayers.length
|
|
12
|
+
}) : null;
|
|
13
|
+
try {
|
|
14
|
+
const lines = [];
|
|
15
|
+
lines.push(`# ${this.escapeMarkdownLocal(model.manifest.name)}`), lines.push(""), model.manifest.description && (lines.push(`${model.manifest.description}`), lines.push("")), lines.push("## Model Information"), lines.push(""), lines.push("| Property | Value |"), lines.push("| -------- | ----- |"), lines.push(`| Version | ${model.manifest.version || "1.0.0"} |`), model.manifest.author && lines.push(`| Author | ${this.escapeMarkdownLocal(model.manifest.author)} |`), model.manifest.created && lines.push(`| Created | ${model.manifest.created} |`), model.manifest.modified && lines.push(`| Modified | ${model.manifest.modified} |`), lines.push("");
|
|
16
|
+
const layersToExport = options.layers || this.supportedLayers;
|
|
17
|
+
for (const layerName of layersToExport) {
|
|
18
|
+
const layer = await model.getLayer(layerName);
|
|
19
|
+
if (!layer)
|
|
20
|
+
continue;
|
|
21
|
+
const elements = Array.from(layer.listElements());
|
|
22
|
+
if (elements.length === 0)
|
|
23
|
+
continue;
|
|
24
|
+
lines.push(`## Layer: ${this.formatLayerName(layerName)}`), lines.push("");
|
|
25
|
+
const description = this.getLayerDescription(layerName);
|
|
26
|
+
description && (lines.push(`*${description}*`), lines.push("")), lines.push(`### Elements (${elements.length})`), lines.push(""), lines.push("| ID | Name | Type | Description |"), lines.push("| -- | ---- | ---- | ----------- |");
|
|
27
|
+
for (const element of elements) {
|
|
28
|
+
const displayId = element.path || element.id, id = this.escapeMarkdownLocal(displayId), name = this.escapeMarkdownLocal(element.name), type = this.escapeMarkdownLocal(element.type), desc = element.description ? this.escapeMarkdownLocal(element.description).substring(0, 100) : "";
|
|
29
|
+
lines.push(`| \`${id}\` | ${name} | ${type} | ${desc} |`);
|
|
46
30
|
}
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
31
|
+
lines.push(""), lines.push("### Element Details"), lines.push("");
|
|
32
|
+
for (const element of elements) {
|
|
33
|
+
const displayId = element.path || element.id;
|
|
34
|
+
lines.push(`#### ${this.escapeMarkdownLocal(element.name)} (\`${displayId}\`)`), lines.push(""), element.description && (lines.push(`${element.description}`), lines.push("")), lines.push("**Type:** " + element.type), lines.push("");
|
|
35
|
+
const sourceRef = element.getSourceReference();
|
|
36
|
+
if (sourceRef && (lines.push("### Source Code Location"), lines.push(""), lines.push(`**Provenance**: ${sourceRef.provenance}`), lines.push(""), lines.push("**Locations:**"), lines.push(""), (sourceRef.locations ?? []).forEach((loc, idx) => {
|
|
37
|
+
lines.push(`${idx + 1}. \`${this.escapeMarkdownLocal(loc.file)}\``), loc.symbol && lines.push(` - Symbol: \`${this.escapeMarkdownLocal(loc.symbol)}\``);
|
|
38
|
+
}), lines.push(""), sourceRef.repository)) {
|
|
39
|
+
if (lines.push("**Repository Context:**"), lines.push(""), sourceRef.repository.url && lines.push(`- Remote: ${sourceRef.repository.url}`), sourceRef.repository.commit) {
|
|
40
|
+
const shortCommit = sourceRef.repository.commit.substring(0, 7);
|
|
41
|
+
sourceRef.repository.url ? lines.push(`- Commit: [\`${shortCommit}\`](${sourceRef.repository.url}/commit/${sourceRef.repository.commit})`) : lines.push(`- Commit: \`${shortCommit}\``);
|
|
42
|
+
}
|
|
43
|
+
lines.push("");
|
|
44
|
+
}
|
|
45
|
+
if (Object.keys(element.attributes).length > 0) {
|
|
46
|
+
lines.push("**Properties:**"), lines.push(""), lines.push("| Property | Value |"), lines.push("| -------- | ----- |");
|
|
47
|
+
for (const [key, value] of Object.entries(element.attributes)) {
|
|
48
|
+
const displayValue = this.valueToMarkdownLocal(value);
|
|
49
|
+
lines.push(`| \`${key}\` | ${displayValue} |`);
|
|
50
|
+
}
|
|
51
|
+
lines.push("");
|
|
52
|
+
}
|
|
53
|
+
if (element.references.length > 0) {
|
|
54
|
+
lines.push("**Cross-Layer References:**"), lines.push("");
|
|
55
|
+
for (const ref of element.references) {
|
|
56
|
+
const refDesc = ref.description ? ` - ${this.escapeMarkdownLocal(ref.description)}` : "";
|
|
57
|
+
lines.push(`- **${ref.type}**: \`${ref.target}\`${refDesc}`);
|
|
58
|
+
}
|
|
59
|
+
lines.push("");
|
|
60
|
+
}
|
|
61
|
+
if (element.relationships.length > 0) {
|
|
62
|
+
lines.push("**Relationships:**"), lines.push("");
|
|
63
|
+
for (const rel of element.relationships)
|
|
64
|
+
lines.push(`- **${rel.predicate}**: \`${rel.target}\``);
|
|
65
|
+
lines.push("");
|
|
52
66
|
}
|
|
53
|
-
lines.push("");
|
|
54
|
-
}
|
|
55
|
-
if (element.relationships.length > 0) {
|
|
56
|
-
lines.push("**Relationships:**"), lines.push("");
|
|
57
|
-
for (const rel of element.relationships)
|
|
58
|
-
lines.push(`- **${rel.predicate}**: \`${rel.target}\``);
|
|
59
|
-
lines.push("");
|
|
60
67
|
}
|
|
68
|
+
lines.push("### Layer Summary"), lines.push(""), lines.push(`- **Total Elements:** ${elements.length}`);
|
|
69
|
+
const refCount = elements.reduce((sum, e) => sum + e.references.length, 0), relCount = elements.reduce((sum, e) => sum + e.relationships.length, 0);
|
|
70
|
+
lines.push(`- **Cross-Layer References:** ${refCount}`), lines.push(`- **Relationships:** ${relCount}`), lines.push(""), lines.push("---"), lines.push("");
|
|
61
71
|
}
|
|
62
|
-
lines.push("
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
totalElements++, totalReferences += element.references.length, totalRelationships += element.relationships.length;
|
|
73
|
-
}
|
|
74
|
-
return lines.push("| Metric | Count |"), lines.push("| ------ | ----- |"), lines.push(`| Total Elements | ${totalElements} |`), lines.push(`| Cross-Layer References | ${totalReferences} |`), lines.push(`| Relationships | ${totalRelationships} |`), lines.push(""), lines.join(`
|
|
72
|
+
lines.push("## Architecture Summary"), lines.push("");
|
|
73
|
+
let totalElements = 0, totalReferences = 0, totalRelationships = 0;
|
|
74
|
+
for (const layerName of layersToExport) {
|
|
75
|
+
const layer = await model.getLayer(layerName);
|
|
76
|
+
if (layer)
|
|
77
|
+
for (const element of layer.listElements())
|
|
78
|
+
totalElements++, totalReferences += element.references.length, totalRelationships += element.relationships.length;
|
|
79
|
+
}
|
|
80
|
+
lines.push("| Metric | Count |"), lines.push("| ------ | ----- |"), lines.push(`| Total Elements | ${totalElements} |`), lines.push(`| Cross-Layer References | ${totalReferences} |`), lines.push(`| Relationships | ${totalRelationships} |`), lines.push("");
|
|
81
|
+
const result = lines.join(`
|
|
75
82
|
`);
|
|
83
|
+
return isTelemetryEnabled && span && (span.setAttribute("export.elementCount", totalElements), span.setAttribute("export.referenceCount", totalReferences), span.setAttribute("export.relationshipCount", totalRelationships), span.setAttribute("export.size", result.length), span.setStatus({ code: 0 })), result;
|
|
84
|
+
} catch (error) {
|
|
85
|
+
throw isTelemetryEnabled && span && (span.recordException(error), span.setStatus({
|
|
86
|
+
code: 2,
|
|
87
|
+
message: getErrorMessage(error)
|
|
88
|
+
})), error;
|
|
89
|
+
} finally {
|
|
90
|
+
endSpan(span);
|
|
91
|
+
}
|
|
76
92
|
}
|
|
77
93
|
/**
|
|
78
94
|
* Escape markdown special characters
|
|
79
95
|
*/
|
|
80
|
-
|
|
81
|
-
return str
|
|
96
|
+
escapeMarkdownLocal(str) {
|
|
97
|
+
return escapeMarkdown(str);
|
|
82
98
|
}
|
|
83
99
|
/**
|
|
84
100
|
* Format layer name for display
|
|
85
101
|
*/
|
|
86
102
|
formatLayerName(name) {
|
|
87
|
-
return name
|
|
103
|
+
return formatLayerName(name);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get layer description
|
|
107
|
+
*/
|
|
108
|
+
getLayerDescription(layer) {
|
|
109
|
+
return getLayerDescription(layer);
|
|
88
110
|
}
|
|
89
111
|
/**
|
|
90
112
|
* Convert value to markdown representation
|
|
91
113
|
*/
|
|
92
|
-
|
|
93
|
-
return
|
|
114
|
+
valueToMarkdownLocal(value) {
|
|
115
|
+
return valueToMarkdown(value);
|
|
94
116
|
}
|
|
95
117
|
}
|
|
96
118
|
export {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/export/markdown-exporter.ts"],
|
|
4
|
-
"sourcesContent": ["import type { Model } from \"../core/model.js\";\nimport type { Exporter, ExportOptions } from \"./types.js\";\nimport { ALL_LAYERS } from \"./types.js\";\n\n/**\n * Markdown Exporter - generates comprehensive markdown documentation\n * Supports all 12 layers\n */\nexport class MarkdownExporter implements Exporter {\n name = \"Markdown\";\n supportedLayers = ALL_LAYERS;\n\n
|
|
5
|
-
"mappings": "AAEA,SAAS,kBAAkB;
|
|
4
|
+
"sourcesContent": ["import type { Model } from \"../core/model.js\";\nimport type { Exporter, ExportOptions } from \"./types.js\";\nimport { ALL_LAYERS } from \"./types.js\";\nimport { isTelemetryEnabled, startSpan, endSpan } from \"../telemetry/index.js\";\nimport { formatLayerName } from \"../utils/layer-name-formatter.js\";\nimport { getErrorMessage } from \"../utils/errors.js\";\nimport { escapeMarkdown, valueToMarkdown, getLayerDescription } from \"./markdown-utils.js\";\n\n/**\n * Markdown Exporter - generates comprehensive markdown documentation\n * Supports all 12 layers\n */\nexport class MarkdownExporter implements Exporter {\n name = \"Markdown\";\n supportedLayers = ALL_LAYERS;\n\n async export(model: Model, options: ExportOptions = {}): Promise<string> {\n const span = isTelemetryEnabled\n ? startSpan(\"export.format.markdown\", {\n \"export.layerCount\": options.layers?.length || this.supportedLayers.length,\n })\n : null;\n\n try {\n const lines: string[] = [];\n\n // Document header\n lines.push(`# ${this.escapeMarkdownLocal(model.manifest.name)}`);\n lines.push(\"\");\n\n if (model.manifest.description) {\n lines.push(`${model.manifest.description}`);\n lines.push(\"\");\n }\n\n // Model metadata\n lines.push(\"## Model Information\");\n lines.push(\"\");\n lines.push(`| Property | Value |`);\n lines.push(`| -------- | ----- |`);\n lines.push(`| Version | ${model.manifest.version || \"1.0.0\"} |`);\n if (model.manifest.author) {\n lines.push(`| Author | ${this.escapeMarkdownLocal(model.manifest.author)} |`);\n }\n if (model.manifest.created) {\n lines.push(`| Created | ${model.manifest.created} |`);\n }\n if (model.manifest.modified) {\n lines.push(`| Modified | ${model.manifest.modified} |`);\n }\n lines.push(\"\");\n\n const layersToExport = options.layers || this.supportedLayers;\n\n // Generate documentation for each layer\n for (const layerName of layersToExport) {\n const layer = await model.getLayer(layerName);\n if (!layer) continue;\n\n const elements = Array.from(layer.listElements());\n if (elements.length === 0) continue;\n\n lines.push(`## Layer: ${this.formatLayerName(layerName)}`);\n lines.push(\"\");\n\n const description = this.getLayerDescription(layerName);\n if (description) {\n lines.push(`*${description}*`);\n lines.push(\"\");\n }\n\n lines.push(`### Elements (${elements.length})`);\n lines.push(\"\");\n\n // Element table\n lines.push(`| ID | Name | Type | Description |`);\n lines.push(`| -- | ---- | ---- | ----------- |`);\n\n for (const element of elements) {\n const displayId = element.path || element.id;\n const id = this.escapeMarkdownLocal(displayId);\n const name = this.escapeMarkdownLocal(element.name);\n const type = this.escapeMarkdownLocal(element.type);\n const desc = element.description\n ? this.escapeMarkdownLocal(element.description).substring(0, 100)\n : \"\";\n\n lines.push(`| \\`${id}\\` | ${name} | ${type} | ${desc} |`);\n }\n\n lines.push(\"\");\n\n // Element details\n lines.push(`### Element Details`);\n lines.push(\"\");\n\n for (const element of elements) {\n const displayId = element.path || element.id;\n lines.push(`#### ${this.escapeMarkdownLocal(element.name)} (\\`${displayId}\\`)`);\n lines.push(\"\");\n\n if (element.description) {\n lines.push(`${element.description}`);\n lines.push(\"\");\n }\n\n lines.push(\"**Type:** \" + element.type);\n lines.push(\"\");\n\n // Source Reference\n const sourceRef = element.getSourceReference();\n if (sourceRef) {\n lines.push(\"### Source Code Location\");\n lines.push(\"\");\n lines.push(`**Provenance**: ${sourceRef.provenance}`);\n lines.push(\"\");\n\n lines.push(\"**Locations:**\");\n lines.push(\"\");\n (sourceRef.locations ?? []).forEach((loc, idx) => {\n lines.push(`${idx + 1}. \\`${this.escapeMarkdownLocal(loc.file)}\\``);\n if (loc.symbol) {\n lines.push(` - Symbol: \\`${this.escapeMarkdownLocal(loc.symbol)}\\``);\n }\n });\n lines.push(\"\");\n\n if (sourceRef.repository) {\n lines.push(\"**Repository Context:**\");\n lines.push(\"\");\n if (sourceRef.repository.url) {\n lines.push(`- Remote: ${sourceRef.repository.url}`);\n }\n if (sourceRef.repository.commit) {\n const shortCommit = sourceRef.repository.commit.substring(0, 7);\n if (sourceRef.repository.url) {\n lines.push(\n `- Commit: [\\`${shortCommit}\\`](${sourceRef.repository.url}/commit/${sourceRef.repository.commit})`\n );\n } else {\n lines.push(`- Commit: \\`${shortCommit}\\``);\n }\n }\n lines.push(\"\");\n }\n }\n\n // Properties (attributes)\n if (Object.keys(element.attributes).length > 0) {\n lines.push(\"**Properties:**\");\n lines.push(\"\");\n lines.push(`| Property | Value |`);\n lines.push(`| -------- | ----- |`);\n\n for (const [key, value] of Object.entries(element.attributes)) {\n const displayValue = this.valueToMarkdownLocal(value);\n lines.push(`| \\`${key}\\` | ${displayValue} |`);\n }\n lines.push(\"\");\n }\n\n // References\n if (element.references.length > 0) {\n lines.push(\"**Cross-Layer References:**\");\n lines.push(\"\");\n\n for (const ref of element.references) {\n const refDesc = ref.description ? ` - ${this.escapeMarkdownLocal(ref.description)}` : \"\";\n lines.push(`- **${ref.type}**: \\`${ref.target}\\`${refDesc}`);\n }\n lines.push(\"\");\n }\n\n // Relationships\n if (element.relationships.length > 0) {\n lines.push(\"**Relationships:**\");\n lines.push(\"\");\n\n for (const rel of element.relationships) {\n lines.push(`- **${rel.predicate}**: \\`${rel.target}\\``);\n }\n lines.push(\"\");\n }\n }\n\n // Layer summary\n lines.push(`### Layer Summary`);\n lines.push(\"\");\n lines.push(`- **Total Elements:** ${elements.length}`);\n\n const refCount = elements.reduce((sum, e) => sum + e.references.length, 0);\n const relCount = elements.reduce((sum, e) => sum + e.relationships.length, 0);\n\n lines.push(`- **Cross-Layer References:** ${refCount}`);\n lines.push(`- **Relationships:** ${relCount}`);\n\n lines.push(\"\");\n lines.push(\"---\");\n lines.push(\"\");\n }\n\n // Architecture Summary\n lines.push(\"## Architecture Summary\");\n lines.push(\"\");\n\n let totalElements = 0;\n let totalReferences = 0;\n let totalRelationships = 0;\n\n for (const layerName of layersToExport) {\n const layer = await model.getLayer(layerName);\n if (!layer) continue;\n\n for (const element of layer.listElements()) {\n totalElements++;\n totalReferences += element.references.length;\n totalRelationships += element.relationships.length;\n }\n }\n\n lines.push(`| Metric | Count |`);\n lines.push(`| ------ | ----- |`);\n lines.push(`| Total Elements | ${totalElements} |`);\n lines.push(`| Cross-Layer References | ${totalReferences} |`);\n lines.push(`| Relationships | ${totalRelationships} |`);\n lines.push(\"\");\n\n const result = lines.join(\"\\n\");\n\n if (isTelemetryEnabled && span) {\n (span as any).setAttribute(\"export.elementCount\", totalElements);\n (span as any).setAttribute(\"export.referenceCount\", totalReferences);\n (span as any).setAttribute(\"export.relationshipCount\", totalRelationships);\n (span as any).setAttribute(\"export.size\", result.length);\n (span as any).setStatus({ code: 0 });\n }\n\n return result;\n } catch (error) {\n if (isTelemetryEnabled && span) {\n (span as any).recordException(error as Error);\n (span as any).setStatus({\n code: 2,\n message: getErrorMessage(error),\n });\n }\n throw error;\n } finally {\n endSpan(span);\n }\n }\n\n /**\n * Escape markdown special characters\n */\n private escapeMarkdownLocal(str: string): string {\n return escapeMarkdown(str);\n }\n\n /**\n * Format layer name for display\n */\n private formatLayerName(name: string): string {\n return formatLayerName(name);\n }\n\n /**\n * Get layer description\n */\n private getLayerDescription(layer: string): string {\n return getLayerDescription(layer);\n }\n\n /**\n * Convert value to markdown representation\n */\n private valueToMarkdownLocal(value: unknown): string {\n return valueToMarkdown(value);\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|