@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
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import ansis from "ansis";
|
|
2
|
+
import { Model } from "../core/model.js";
|
|
3
|
+
import { ImportManager } from "../import/index.js";
|
|
4
|
+
import { readFile } from "../utils/file-io.js";
|
|
5
|
+
import * as path from "path";
|
|
6
|
+
import { startSpan, endSpan } from "../telemetry/index.js";
|
|
7
|
+
import { getErrorMessage } from "../utils/errors.js";
|
|
8
|
+
const isTelemetryEnabled = !1;
|
|
9
|
+
async function importCommand(options) {
|
|
10
|
+
const span = isTelemetryEnabled ? startSpan("import.execute", {
|
|
11
|
+
"import.format": options.format,
|
|
12
|
+
"import.merge_strategy": options.mergeStrategy || "add"
|
|
13
|
+
}) : null;
|
|
14
|
+
try {
|
|
15
|
+
options.input || (console.error(ansis.red("Error: --input path is required")), process.exit(1)), options.format || (console.error(ansis.red("Error: --format is required (archimate, openapi)")), process.exit(1));
|
|
16
|
+
const supportedFormats = ["archimate", "openapi"], normalizedFormat = options.format.toLowerCase();
|
|
17
|
+
supportedFormats.includes(normalizedFormat) || (console.error(ansis.red(`Error: Unsupported import format "${options.format}"`)), console.error(` Supported formats: ${supportedFormats.join(", ")}`), process.exit(1));
|
|
18
|
+
const inputPath = path.resolve(options.input);
|
|
19
|
+
let fileContent;
|
|
20
|
+
try {
|
|
21
|
+
fileContent = await readFile(inputPath);
|
|
22
|
+
} catch (error) {
|
|
23
|
+
console.error(ansis.red(`Error: Could not read input file: ${inputPath}`)), isTelemetryEnabled && span && (span.recordException(error), span.setStatus({ code: 2, message: `File read error: ${String(error)}` })), process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
const model = await Model.load(options.model), manager = new ImportManager();
|
|
26
|
+
console.log(`Importing from ${ansis.blue(options.format)} format...`);
|
|
27
|
+
const result = await manager.import(normalizedFormat, fileContent, model, {
|
|
28
|
+
mergeStrategy: options.mergeStrategy || "add",
|
|
29
|
+
validateSchema: !0
|
|
30
|
+
});
|
|
31
|
+
if (!result.success) {
|
|
32
|
+
console.error(ansis.red(`
|
|
33
|
+
Import failed with ${result.errorsCount} error(s):`));
|
|
34
|
+
for (const error of result.errors) {
|
|
35
|
+
const element = error.element ? ` (${error.element})` : "";
|
|
36
|
+
console.error(` - ${error.message}${element}`);
|
|
37
|
+
}
|
|
38
|
+
process.exit(1);
|
|
39
|
+
}
|
|
40
|
+
console.log(ansis.green(`
|
|
41
|
+
\u2713 Import successful!`)), console.log(` Nodes added: ${ansis.cyan(String(result.nodesAdded))}`), console.log(` Edges added: ${ansis.cyan(String(result.edgesAdded))}`), result.errorsCount > 0 && console.log(ansis.yellow(` Warnings: ${result.errorsCount}`)), isTelemetryEnabled && span && (span.setAttribute("import.success", !0), span.setAttribute("import.nodesAdded", result.nodesAdded), span.setAttribute("import.edgesAdded", result.edgesAdded), span.setAttribute("import.errors", result.errorsCount), span.setStatus({ code: 0 }));
|
|
42
|
+
} catch (error) {
|
|
43
|
+
console.error(ansis.red(`Error: ${getErrorMessage(error)}`)), isTelemetryEnabled && span && (span.recordException(error), span.setStatus({ code: 2, message: String(error) })), process.exit(1);
|
|
44
|
+
} finally {
|
|
45
|
+
endSpan(span);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
export {
|
|
49
|
+
importCommand
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=import.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/commands/import.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Import architecture model from various formats\n */\n\nimport ansis from \"ansis\";\nimport { Model } from \"../core/model.js\";\nimport { ImportManager } from \"../import/index.js\";\nimport { readFile } from \"../utils/file-io.js\";\nimport * as path from \"path\";\nimport { startSpan, endSpan } from \"../telemetry/index.js\";\nimport { getErrorMessage } from \"../utils/errors.js\";\n\ndeclare const TELEMETRY_ENABLED: boolean | undefined;\nconst isTelemetryEnabled = typeof TELEMETRY_ENABLED !== \"undefined\" ? TELEMETRY_ENABLED : false;\n\nexport interface ImportOptions {\n format: string;\n input: string;\n model?: string;\n mergeStrategy?: \"add\" | \"update\" | \"skip\";\n}\n\nexport async function importCommand(options: ImportOptions): Promise<void> {\n const span = isTelemetryEnabled\n ? startSpan(\"import.execute\", {\n \"import.format\": options.format,\n \"import.merge_strategy\": options.mergeStrategy || \"add\",\n })\n : null;\n\n try {\n // Validate required options\n if (!options.input) {\n console.error(ansis.red(\"Error: --input path is required\"));\n process.exit(1);\n }\n\n if (!options.format) {\n console.error(ansis.red(\"Error: --format is required (archimate, openapi)\"));\n process.exit(1);\n }\n\n // Validate format BEFORE attempting any I/O operations\n const supportedFormats = [\"archimate\", \"openapi\"];\n const normalizedFormat = options.format.toLowerCase();\n if (!supportedFormats.includes(normalizedFormat)) {\n console.error(ansis.red(`Error: Unsupported import format \"${options.format}\"`));\n console.error(` Supported formats: ${supportedFormats.join(\", \")}`);\n process.exit(1);\n }\n\n // Check if input file exists\n const inputPath = path.resolve(options.input);\n let fileContent: string;\n try {\n fileContent = await readFile(inputPath);\n } catch (error) {\n console.error(ansis.red(`Error: Could not read input file: ${inputPath}`));\n if (isTelemetryEnabled && span) {\n (span as any).recordException(error as Error);\n (span as any).setStatus({ code: 2, message: `File read error: ${String(error)}` });\n }\n process.exit(1);\n }\n\n // Load model\n const model = await Model.load(options.model);\n\n // Initialize ImportManager\n const manager = new ImportManager();\n\n // Perform import\n console.log(`Importing from ${ansis.blue(options.format)} format...`);\n\n const result = await manager.import(normalizedFormat, fileContent, model, {\n mergeStrategy: options.mergeStrategy || \"add\",\n validateSchema: true,\n });\n\n if (!result.success) {\n console.error(ansis.red(`\\nImport failed with ${result.errorsCount} error(s):`));\n for (const error of result.errors) {\n const element = error.element ? ` (${error.element})` : \"\";\n console.error(` - ${error.message}${element}`);\n }\n process.exit(1);\n }\n\n // Report success\n console.log(ansis.green(`\\n\u2713 Import successful!`));\n console.log(` Nodes added: ${ansis.cyan(String(result.nodesAdded))}`);\n console.log(` Edges added: ${ansis.cyan(String(result.edgesAdded))}`);\n\n if (result.errorsCount > 0) {\n console.log(ansis.yellow(` Warnings: ${result.errorsCount}`));\n }\n\n if (isTelemetryEnabled && span) {\n (span as any).setAttribute(\"import.success\", true);\n (span as any).setAttribute(\"import.nodesAdded\", result.nodesAdded);\n (span as any).setAttribute(\"import.edgesAdded\", result.edgesAdded);\n (span as any).setAttribute(\"import.errors\", result.errorsCount);\n (span as any).setStatus({ code: 0 });\n }\n } catch (error) {\n console.error(ansis.red(`Error: ${getErrorMessage(error)}`));\n\n if (isTelemetryEnabled && span) {\n (span as any).recordException(error as Error);\n (span as any).setStatus({ code: 2, message: String(error) });\n }\n\n process.exit(1);\n } finally {\n endSpan(span);\n }\n}\n"],
|
|
5
|
+
"mappings": "AAIA,OAAO,WAAW;AAClB,SAAS,aAAa;AACtB,SAAS,qBAAqB;AAC9B,SAAS,gBAAgB;AACzB,YAAY,UAAU;AACtB,SAAS,WAAW,eAAe;AACnC,SAAS,uBAAuB;AAGhC,MAAM,qBAAgE;AAStE,eAAsB,cAAc,SAAsB;AACxD,QAAM,OAAO,qBACT,UAAU,kBAAkB;IAC1B,iBAAiB,QAAQ;IACzB,yBAAyB,QAAQ,iBAAiB;GACnD,IACD;AAEJ,MAAI;AAEF,IAAK,QAAQ,UACX,QAAQ,MAAM,MAAM,IAAI,iCAAiC,CAAC,GAC1D,QAAQ,KAAK,CAAC,IAGX,QAAQ,WACX,QAAQ,MAAM,MAAM,IAAI,kDAAkD,CAAC,GAC3E,QAAQ,KAAK,CAAC;AAIhB,UAAM,mBAAmB,CAAC,aAAa,SAAS,GAC1C,mBAAmB,QAAQ,OAAO,YAAW;AACnD,IAAK,iBAAiB,SAAS,gBAAgB,MAC7C,QAAQ,MAAM,MAAM,IAAI,qCAAqC,QAAQ,MAAM,GAAG,CAAC,GAC/E,QAAQ,MAAM,wBAAwB,iBAAiB,KAAK,IAAI,CAAC,EAAE,GACnE,QAAQ,KAAK,CAAC;AAIhB,UAAM,YAAY,KAAK,QAAQ,QAAQ,KAAK;AAC5C,QAAI;AACJ,QAAI;AACF,oBAAc,MAAM,SAAS,SAAS;IACxC,SAAS,OAAO;AACd,cAAQ,MAAM,MAAM,IAAI,qCAAqC,SAAS,EAAE,CAAC,GACrE,sBAAsB,SACvB,KAAa,gBAAgB,KAAc,GAC3C,KAAa,UAAU,EAAE,MAAM,GAAG,SAAS,oBAAoB,OAAO,KAAK,CAAC,GAAE,CAAE,IAEnF,QAAQ,KAAK,CAAC;IAChB;AAGA,UAAM,QAAQ,MAAM,MAAM,KAAK,QAAQ,KAAK,GAGtC,UAAU,IAAI,cAAa;AAGjC,YAAQ,IAAI,kBAAkB,MAAM,KAAK,QAAQ,MAAM,CAAC,YAAY;AAEpE,UAAM,SAAS,MAAM,QAAQ,OAAO,kBAAkB,aAAa,OAAO;MACxE,eAAe,QAAQ,iBAAiB;MACxC,gBAAgB;KACjB;AAED,QAAI,CAAC,OAAO,SAAS;AACnB,cAAQ,MAAM,MAAM,IAAI;qBAAwB,OAAO,WAAW,YAAY,CAAC;AAC/E,iBAAW,SAAS,OAAO,QAAQ;AACjC,cAAM,UAAU,MAAM,UAAU,KAAK,MAAM,OAAO,MAAM;AACxD,gBAAQ,MAAM,OAAO,MAAM,OAAO,GAAG,OAAO,EAAE;MAChD;AACA,cAAQ,KAAK,CAAC;IAChB;AAGA,YAAQ,IAAI,MAAM,MAAM;0BAAwB,CAAC,GACjD,QAAQ,IAAI,kBAAkB,MAAM,KAAK,OAAO,OAAO,UAAU,CAAC,CAAC,EAAE,GACrE,QAAQ,IAAI,kBAAkB,MAAM,KAAK,OAAO,OAAO,UAAU,CAAC,CAAC,EAAE,GAEjE,OAAO,cAAc,KACvB,QAAQ,IAAI,MAAM,OAAO,eAAe,OAAO,WAAW,EAAE,CAAC,GAG3D,sBAAsB,SACvB,KAAa,aAAa,kBAAkB,EAAI,GAChD,KAAa,aAAa,qBAAqB,OAAO,UAAU,GAChE,KAAa,aAAa,qBAAqB,OAAO,UAAU,GAChE,KAAa,aAAa,iBAAiB,OAAO,WAAW,GAC7D,KAAa,UAAU,EAAE,MAAM,EAAC,CAAE;EAEvC,SAAS,OAAO;AACd,YAAQ,MAAM,MAAM,IAAI,UAAU,gBAAgB,KAAK,CAAC,EAAE,CAAC,GAEvD,sBAAsB,SACvB,KAAa,gBAAgB,KAAc,GAC3C,KAAa,UAAU,EAAE,MAAM,GAAG,SAAS,OAAO,KAAK,EAAC,CAAE,IAG7D,QAAQ,KAAK,CAAC;EAChB;AACE,YAAQ,IAAI;EACd;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/commands/info.js
CHANGED
|
@@ -1,36 +1,42 @@
|
|
|
1
1
|
import ansis from "ansis";
|
|
2
2
|
import { Model } from "../core/model.js";
|
|
3
|
+
import { getActiveSpan } from "../telemetry/index.js";
|
|
4
|
+
import { getErrorMessage } from "../utils/errors.js";
|
|
5
|
+
import { TABLE_COLUMN_WIDTHS, TABLE_SEPARATOR } from "../utils/table-formatting.js";
|
|
3
6
|
async function infoCommand(options) {
|
|
7
|
+
const span = getActiveSpan();
|
|
4
8
|
try {
|
|
5
|
-
const model = await Model.load(), manifest = model.manifest;
|
|
6
|
-
console.log(""), console.log(ansis.bold(`${ansis.blue("Model:")} ${manifest.name}`)), console.log(ansis.dim(
|
|
9
|
+
const model = await Model.load(void 0, options.layer ? { layers: [options.layer] } : {}), manifest = model.manifest;
|
|
10
|
+
span && (span.setAttribute("model.name", manifest.name), span.setAttribute("model.version", manifest.version), span.setAttribute("model.specVersion", manifest.specVersion)), console.log(""), console.log(ansis.bold(`${ansis.blue("Model:")} ${manifest.name}`)), console.log(ansis.dim(TABLE_SEPARATOR)), console.log(`${ansis.gray("Name:")} ${manifest.name}`), console.log(`${ansis.gray("Version:")} ${manifest.version}`), console.log(`${ansis.gray("Spec Version:")} ${manifest.specVersion}`), manifest.description && console.log(`${ansis.gray("Description:")} ${manifest.description}`), manifest.author && console.log(`${ansis.gray("Author:")} ${manifest.author}`), console.log(`${ansis.gray("Created:")} ${manifest.created}`), console.log(`${ansis.gray("Modified:")} ${manifest.modified}`);
|
|
7
11
|
const layerNames = model.getLayerNames();
|
|
8
|
-
if (layerNames.length
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
12
|
+
if (span && span.setAttribute("info.layerCount", layerNames.length), options.layer) {
|
|
13
|
+
console.log(""), console.log(ansis.bold("Layers:")), console.log(ansis.dim(TABLE_SEPARATOR));
|
|
14
|
+
const layer = await model.getLayer(options.layer);
|
|
15
|
+
layer || (console.error(ansis.red(`Error: Layer ${options.layer} not found`)), process.exit(1));
|
|
16
|
+
const elements = layer.listElements();
|
|
17
|
+
if (console.log(`${ansis.cyan(options.layer)}`), console.log(` ${ansis.gray("Elements:")} ${elements.length}`), span && span.setAttribute("info.elementCount", elements.length), options.verbose && elements.length > 0) {
|
|
18
|
+
console.log(` ${ansis.gray("Details:")}`);
|
|
19
|
+
const types = new Set(elements.map((e) => e.type));
|
|
20
|
+
for (const type of types) {
|
|
21
|
+
const count = elements.filter((e) => e.type === type).length;
|
|
22
|
+
console.log(` - ${type}: ${count}`);
|
|
20
23
|
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
24
|
+
}
|
|
25
|
+
} else if (layerNames.length > 0) {
|
|
26
|
+
console.log(""), console.log(ansis.bold("Layers:")), console.log(ansis.dim(TABLE_SEPARATOR));
|
|
27
|
+
const idWidth = TABLE_COLUMN_WIDTHS.INFO_ID_WIDTH, countWidth = TABLE_COLUMN_WIDTHS.INFO_COUNT_WIDTH;
|
|
28
|
+
for (const layerName of layerNames) {
|
|
29
|
+
const layer = await model.getLayer(layerName);
|
|
30
|
+
if (!layer)
|
|
31
|
+
continue;
|
|
32
|
+
const count = layer.listElements().length, paddedName = layerName.padEnd(idWidth), paddedCount = String(count).padEnd(countWidth);
|
|
33
|
+
console.log(`${ansis.cyan(paddedName)} ${paddedCount} elements`);
|
|
34
|
+
}
|
|
35
|
+
} else
|
|
30
36
|
console.log(""), console.log(ansis.yellow("No layers found"));
|
|
31
37
|
console.log("");
|
|
32
38
|
} catch (error) {
|
|
33
|
-
const message =
|
|
39
|
+
const message = getErrorMessage(error);
|
|
34
40
|
console.error(ansis.red(`Error: ${message}`)), process.exit(1);
|
|
35
41
|
}
|
|
36
42
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/commands/info.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Show information about a model or layer\n */\n\nimport ansis from
|
|
5
|
-
"mappings": "AAIA,OAAO,WAAW;AAClB,SAAS,aAAa;
|
|
4
|
+
"sourcesContent": ["/**\n * Show information about a model or layer\n */\n\nimport ansis from \"ansis\";\nimport { Model } from \"../core/model.js\";\nimport { getActiveSpan } from \"../telemetry/index.js\";\nimport { getErrorMessage } from \"../utils/errors.js\";\nimport {\n TABLE_COLUMN_WIDTHS,\n TABLE_SEPARATOR\n} from \"../utils/table-formatting.js\";\n\nexport interface InfoOptions {\n layer?: string;\n verbose?: boolean;\n debug?: boolean;\n}\n\nexport async function infoCommand(options: InfoOptions): Promise<void> {\n const span = getActiveSpan();\n\n try {\n // Load model (only the requested layer if --layer is specified)\n const model = await Model.load(undefined, options.layer ? { layers: [options.layer] } : {});\n const manifest = model.manifest;\n\n if (span) {\n (span as any).setAttribute(\"model.name\", manifest.name);\n (span as any).setAttribute(\"model.version\", manifest.version);\n (span as any).setAttribute(\"model.specVersion\", manifest.specVersion);\n }\n\n console.log(\"\");\n console.log(ansis.bold(`${ansis.blue(\"Model:\")} ${manifest.name}`));\n console.log(ansis.dim(TABLE_SEPARATOR));\n\n console.log(`${ansis.gray(\"Name:\")} ${manifest.name}`);\n console.log(`${ansis.gray(\"Version:\")} ${manifest.version}`);\n console.log(`${ansis.gray(\"Spec Version:\")} ${manifest.specVersion}`);\n\n if (manifest.description) {\n console.log(`${ansis.gray(\"Description:\")} ${manifest.description}`);\n }\n\n if (manifest.author) {\n console.log(`${ansis.gray(\"Author:\")} ${manifest.author}`);\n }\n\n console.log(`${ansis.gray(\"Created:\")} ${manifest.created}`);\n console.log(`${ansis.gray(\"Modified:\")} ${manifest.modified}`);\n\n // Show layer information\n const layerNames = model.getLayerNames();\n\n if (span) {\n (span as any).setAttribute(\"info.layerCount\", layerNames.length);\n }\n\n if (options.layer) {\n // Show specific layer info (model only loaded this layer for performance)\n console.log(\"\");\n console.log(ansis.bold(\"Layers:\"));\n console.log(ansis.dim(TABLE_SEPARATOR));\n\n const layer = await model.getLayer(options.layer);\n if (!layer) {\n console.error(ansis.red(`Error: Layer ${options.layer} not found`));\n process.exit(1);\n }\n\n const elements = layer.listElements();\n console.log(`${ansis.cyan(options.layer)}`);\n console.log(` ${ansis.gray(\"Elements:\")} ${elements.length}`);\n\n if (span) {\n (span as any).setAttribute(\"info.elementCount\", elements.length);\n }\n\n if (options.verbose && elements.length > 0) {\n console.log(` ${ansis.gray(\"Details:\")}`);\n const types = new Set(elements.map((e) => e.type));\n for (const type of types) {\n const count = elements.filter((e) => e.type === type).length;\n console.log(` - ${type}: ${count}`);\n }\n }\n } else if (layerNames.length > 0) {\n // Show all layers summary\n console.log(\"\");\n console.log(ansis.bold(\"Layers:\"));\n console.log(ansis.dim(TABLE_SEPARATOR));\n\n const idWidth = TABLE_COLUMN_WIDTHS.INFO_ID_WIDTH;\n const countWidth = TABLE_COLUMN_WIDTHS.INFO_COUNT_WIDTH;\n\n for (const layerName of layerNames) {\n const layer = await model.getLayer(layerName);\n if (!layer) continue;\n\n const count = layer.listElements().length;\n const paddedName = layerName.padEnd(idWidth);\n const paddedCount = String(count).padEnd(countWidth);\n\n console.log(`${ansis.cyan(paddedName)} ${paddedCount} elements`);\n }\n } else {\n console.log(\"\");\n console.log(ansis.yellow(\"No layers found\"));\n }\n\n console.log(\"\");\n\n } catch (error) {\n const message = getErrorMessage(error);\n console.error(ansis.red(`Error: ${message}`));\n process.exit(1);\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/commands/init.js
CHANGED
|
@@ -4,39 +4,55 @@ import { Model } from "../core/model.js";
|
|
|
4
4
|
import { fileExists } from "../utils/file-io.js";
|
|
5
5
|
import { logVerbose, logDebug } from "../utils/globals.js";
|
|
6
6
|
import { installSpecReference } from "../utils/spec-installer.js";
|
|
7
|
+
import { getCliBundledSpecVersion } from "../utils/spec-version.js";
|
|
8
|
+
import { isTelemetryEnabled, startSpan, endSpan } from "../telemetry/index.js";
|
|
9
|
+
import { getErrorMessage } from "../utils/errors.js";
|
|
7
10
|
async function initCommand(options) {
|
|
8
11
|
intro(ansis.bold(ansis.blue("\u2699\uFE0F Initialize Documentation Robotics Model")));
|
|
12
|
+
const span = isTelemetryEnabled ? startSpan("model.init", {
|
|
13
|
+
"init.hasName": !!options.name,
|
|
14
|
+
"init.hasDescription": !!options.description,
|
|
15
|
+
"init.hasAuthor": !!options.author
|
|
16
|
+
}) : null;
|
|
9
17
|
try {
|
|
10
18
|
const rootPath = process.cwd(), manifestPath = `${`${rootPath}/documentation-robotics/model`}/manifest.yaml`;
|
|
11
|
-
await fileExists(manifestPath) && (console.error(ansis.red("Error: Model already initialized in this directory")), process.exit(1));
|
|
12
|
-
const isInteractive = process.stdin.isTTY
|
|
19
|
+
await fileExists(manifestPath) && (console.error(ansis.red("Error: Model already initialized in this directory")), isTelemetryEnabled && span && span.setStatus({ code: 2, message: "Model already exists" }), endSpan(span), process.exit(1));
|
|
20
|
+
const isInteractive = process.stdin.isTTY;
|
|
21
|
+
isTelemetryEnabled && span && span.setAttribute("cli.interactive", isInteractive);
|
|
22
|
+
const skipPrompts = !!options.name, name = options.name || (isInteractive ? await text({
|
|
13
23
|
message: "Model name:",
|
|
14
24
|
validate: (value) => value.length === 0 ? "Name is required" : void 0
|
|
15
25
|
}) : (() => {
|
|
16
|
-
console.error(ansis.red("Error: Model name is required (use --name option)")), process.exit(1);
|
|
17
|
-
})()), description = options.description || (isInteractive ? await text({
|
|
26
|
+
console.error(ansis.red("Error: Model name is required (use --name option)")), isTelemetryEnabled && span && span.setStatus({ code: 2, message: "Model name required" }), endSpan(span), process.exit(1);
|
|
27
|
+
})()), description = options.description || (skipPrompts ? "" : isInteractive ? await text({
|
|
18
28
|
message: "Description (optional):",
|
|
19
29
|
defaultValue: ""
|
|
20
|
-
}) : ""), author = options.author || (isInteractive ? await text({
|
|
30
|
+
}) : ""), author = options.author || (skipPrompts ? "" : isInteractive ? await text({
|
|
21
31
|
message: "Author (optional):",
|
|
22
32
|
defaultValue: ""
|
|
23
33
|
}) : "");
|
|
24
|
-
logDebug(`Creating model directory at ${rootPath}/documentation-robotics/model`);
|
|
34
|
+
isTelemetryEnabled && span && (span.setAttribute("model.name", name), span.setAttribute("model.specVersion", getCliBundledSpecVersion())), logDebug(`Creating model directory at ${rootPath}/documentation-robotics/model`);
|
|
25
35
|
const model = await Model.init(rootPath, {
|
|
26
36
|
name,
|
|
27
37
|
version: "0.1.0",
|
|
28
38
|
description: description || void 0,
|
|
29
39
|
author: author || void 0,
|
|
30
|
-
specVersion:
|
|
40
|
+
specVersion: getCliBundledSpecVersion(),
|
|
31
41
|
created: (/* @__PURE__ */ new Date()).toISOString()
|
|
32
42
|
}, { lazyLoad: !1 });
|
|
33
43
|
logVerbose(`Model saved with:
|
|
34
44
|
- Version: 0.1.0
|
|
35
|
-
- Spec Version:
|
|
36
|
-
- Location: ${rootPath}/documentation-robotics/model`), logDebug("Installing spec reference (.dr/ folder)..."), await installSpecReference(rootPath, !1), logVerbose("Spec reference installed"), outro(ansis.green(`\u2713 Model initialized: ${ansis.bold(model.manifest.name)}`));
|
|
45
|
+
- Spec Version: ${getCliBundledSpecVersion()}
|
|
46
|
+
- Location: ${rootPath}/documentation-robotics/model`), logDebug("Installing spec reference (.dr/ folder)..."), await installSpecReference(rootPath, !1), logVerbose("Spec reference installed"), isTelemetryEnabled && span && (span.setAttribute("model.path", rootPath), span.setStatus({ code: 0 })), outro(ansis.green(`\u2713 Model initialized: ${ansis.bold(model.manifest.name)}`));
|
|
37
47
|
} catch (error) {
|
|
38
|
-
|
|
39
|
-
|
|
48
|
+
isTelemetryEnabled && span && (span.recordException(error), span.setStatus({
|
|
49
|
+
code: 2,
|
|
50
|
+
message: getErrorMessage(error)
|
|
51
|
+
}));
|
|
52
|
+
const message = getErrorMessage(error);
|
|
53
|
+
console.error(ansis.red(`Error: ${message}`)), endSpan(span), process.exit(1);
|
|
54
|
+
} finally {
|
|
55
|
+
endSpan(span);
|
|
40
56
|
}
|
|
41
57
|
}
|
|
42
58
|
export {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/commands/init.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Initialize a new Documentation Robotics model\n */\n\nimport { intro, text, outro } from
|
|
5
|
-
"mappings": "AAIA,SAAS,OAAO,MAAM,aAAa;AACnC,OAAO,WAAW;AAClB,SAAS,aAAa;AACtB,SAAS,kBAAkB;AAC3B,SAAS,YAAY,gBAAgB;AACrC,SAAS,4BAA4B;
|
|
4
|
+
"sourcesContent": ["/**\n * Initialize a new Documentation Robotics model\n */\n\nimport { intro, text, outro } from \"@clack/prompts\";\nimport ansis from \"ansis\";\nimport { Model } from \"../core/model.js\";\nimport { fileExists } from \"../utils/file-io.js\";\nimport { logVerbose, logDebug } from \"../utils/globals.js\";\nimport { installSpecReference } from \"../utils/spec-installer.js\";\nimport { getCliBundledSpecVersion } from \"../utils/spec-version.js\";\nimport { isTelemetryEnabled, startSpan, endSpan } from \"../telemetry/index.js\";\nimport { getErrorMessage } from \"../utils/errors.js\";\n\nexport interface InitOptions {\n name?: string;\n author?: string;\n description?: string;\n verbose?: boolean;\n debug?: boolean;\n}\n\nexport async function initCommand(options: InitOptions): Promise<void> {\n intro(ansis.bold(ansis.blue(\"\u2699\uFE0F Initialize Documentation Robotics Model\")));\n\n const span = isTelemetryEnabled\n ? startSpan(\"model.init\", {\n \"init.hasName\": !!options.name,\n \"init.hasDescription\": !!options.description,\n \"init.hasAuthor\": !!options.author,\n })\n : null;\n\n try {\n const rootPath = process.cwd();\n const modelPath = `${rootPath}/documentation-robotics/model`;\n const manifestPath = `${modelPath}/manifest.yaml`;\n\n // Check if model already exists\n if (await fileExists(manifestPath)) {\n console.error(ansis.red(\"Error: Model already initialized in this directory\"));\n if (isTelemetryEnabled && span) {\n (span as any).setStatus({ code: 2, message: \"Model already exists\" });\n }\n endSpan(span);\n process.exit(1);\n }\n\n // Gather model metadata\n // Check if stdin is a TTY to determine if we should prompt\n const isInteractive = process.stdin.isTTY;\n\n if (isTelemetryEnabled && span) {\n (span as any).setAttribute(\"cli.interactive\", isInteractive);\n }\n\n // If name is provided, skip all prompts\n const skipPrompts = !!options.name;\n\n const name =\n options.name ||\n (isInteractive\n ? await text({\n message: \"Model name:\",\n validate: (value) => (value.length === 0 ? \"Name is required\" : undefined),\n })\n : (() => {\n console.error(ansis.red(\"Error: Model name is required (use --name option)\"));\n if (isTelemetryEnabled && span) {\n (span as any).setStatus({ code: 2, message: \"Model name required\" });\n }\n endSpan(span);\n process.exit(1);\n })());\n\n const description =\n options.description ||\n (skipPrompts\n ? \"\"\n : isInteractive\n ? await text({\n message: \"Description (optional):\",\n defaultValue: \"\",\n })\n : \"\");\n\n const author =\n options.author ||\n (skipPrompts\n ? \"\"\n : isInteractive\n ? await text({\n message: \"Author (optional):\",\n defaultValue: \"\",\n })\n : \"\");\n\n if (isTelemetryEnabled && span) {\n (span as any).setAttribute(\"model.name\", name as string);\n (span as any).setAttribute(\"model.specVersion\", getCliBundledSpecVersion());\n }\n\n // Initialize model\n logDebug(`Creating model directory at ${rootPath}/documentation-robotics/model`);\n const model = await Model.init(\n rootPath,\n {\n name: name as string,\n version: \"0.1.0\",\n description: (description as string) || undefined,\n author: (author as string) || undefined,\n specVersion: getCliBundledSpecVersion(),\n created: new Date().toISOString(),\n },\n { lazyLoad: false }\n );\n\n logVerbose(`Model saved with:\n - Version: 0.1.0\n - Spec Version: ${getCliBundledSpecVersion()}\n - Location: ${rootPath}/documentation-robotics/model`);\n\n // Install spec reference (.dr/ folder)\n logDebug(\"Installing spec reference (.dr/ folder)...\");\n await installSpecReference(rootPath, false);\n logVerbose(\"Spec reference installed\");\n\n if (isTelemetryEnabled && span) {\n (span as any).setAttribute(\"model.path\", rootPath);\n (span as any).setStatus({ code: 0 });\n }\n\n outro(ansis.green(`\u2713 Model initialized: ${ansis.bold(model.manifest.name)}`));\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 const message = getErrorMessage(error);\n console.error(ansis.red(`Error: ${message}`));\n endSpan(span);\n process.exit(1);\n } finally {\n endSpan(span);\n }\n}\n"],
|
|
5
|
+
"mappings": "AAIA,SAAS,OAAO,MAAM,aAAa;AACnC,OAAO,WAAW;AAClB,SAAS,aAAa;AACtB,SAAS,kBAAkB;AAC3B,SAAS,YAAY,gBAAgB;AACrC,SAAS,4BAA4B;AACrC,SAAS,gCAAgC;AACzC,SAAS,oBAAoB,WAAW,eAAe;AACvD,SAAS,uBAAuB;AAUhC,eAAsB,YAAY,SAAoB;AACpD,QAAM,MAAM,KAAK,MAAM,KAAK,uDAA6C,CAAC,CAAC;AAE3E,QAAM,OAAO,qBACT,UAAU,cAAc;IACtB,gBAAgB,CAAC,CAAC,QAAQ;IAC1B,uBAAuB,CAAC,CAAC,QAAQ;IACjC,kBAAkB,CAAC,CAAC,QAAQ;GAC7B,IACD;AAEJ,MAAI;AACF,UAAM,WAAW,QAAQ,IAAG,GAEtB,eAAe,GADH,GAAG,QAAQ,+BACI;AAGjC,IAAI,MAAM,WAAW,YAAY,MAC/B,QAAQ,MAAM,MAAM,IAAI,oDAAoD,CAAC,GACzE,sBAAsB,QACvB,KAAa,UAAU,EAAE,MAAM,GAAG,SAAS,uBAAsB,CAAE,GAEtE,QAAQ,IAAI,GACZ,QAAQ,KAAK,CAAC;AAKhB,UAAM,gBAAgB,QAAQ,MAAM;AAEpC,IAAI,sBAAsB,QACvB,KAAa,aAAa,mBAAmB,aAAa;AAI7D,UAAM,cAAc,CAAC,CAAC,QAAQ,MAExB,OACJ,QAAQ,SACP,gBACG,MAAM,KAAK;MACT,SAAS;MACT,UAAU,CAAC,UAAW,MAAM,WAAW,IAAI,qBAAqB;KACjE,KACA,MAAK;AACJ,cAAQ,MAAM,MAAM,IAAI,mDAAmD,CAAC,GACxE,sBAAsB,QACvB,KAAa,UAAU,EAAE,MAAM,GAAG,SAAS,sBAAqB,CAAE,GAErE,QAAQ,IAAI,GACZ,QAAQ,KAAK,CAAC;IAChB,GAAE,IAEF,cACJ,QAAQ,gBACP,cACG,KACA,gBACE,MAAM,KAAK;MACT,SAAS;MACT,cAAc;KACf,IACD,KAEF,SACJ,QAAQ,WACP,cACG,KACA,gBACE,MAAM,KAAK;MACT,SAAS;MACT,cAAc;KACf,IACD;AAER,IAAI,sBAAsB,SACvB,KAAa,aAAa,cAAc,IAAc,GACtD,KAAa,aAAa,qBAAqB,yBAAwB,CAAE,IAI5E,SAAS,+BAA+B,QAAQ,+BAA+B;AAC/E,UAAM,QAAQ,MAAM,MAAM,KACxB,UACA;MACE;MACA,SAAS;MACT,aAAc,eAA0B;MACxC,QAAS,UAAqB;MAC9B,aAAa,yBAAwB;MACrC,UAAS,oBAAI,KAAI,GAAG,YAAW;OAEjC,EAAE,UAAU,GAAK,CAAE;AAGrB,eAAW;;oBAEK,yBAAwB,CAAE;gBAC9B,QAAQ,+BAA+B,GAGnD,SAAS,4CAA4C,GACrD,MAAM,qBAAqB,UAAU,EAAK,GAC1C,WAAW,0BAA0B,GAEjC,sBAAsB,SACvB,KAAa,aAAa,cAAc,QAAQ,GAChD,KAAa,UAAU,EAAE,MAAM,EAAC,CAAE,IAGrC,MAAM,MAAM,MAAM,6BAAwB,MAAM,KAAK,MAAM,SAAS,IAAI,CAAC,EAAE,CAAC;EAC9E,SAAS,OAAO;AACd,IAAI,sBAAsB,SACvB,KAAa,gBAAgB,KAAc,GAC3C,KAAa,UAAU;MACtB,MAAM;MACN,SAAS,gBAAgB,KAAK;KAC/B;AAEH,UAAM,UAAU,gBAAgB,KAAK;AACrC,YAAQ,MAAM,MAAM,IAAI,UAAU,OAAO,EAAE,CAAC,GAC5C,QAAQ,IAAI,GACZ,QAAQ,KAAK,CAAC;EAChB;AACE,YAAQ,IAAI;EACd;AACF;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/commands/list.js
CHANGED
|
@@ -1,11 +1,69 @@
|
|
|
1
1
|
import ansis from "ansis";
|
|
2
2
|
import { Model } from "../core/model.js";
|
|
3
|
+
import { CLIError, ErrorCategory, ModelNotFoundError, handleError } from "../utils/errors.js";
|
|
4
|
+
import { getActiveSpan } from "../telemetry/index.js";
|
|
5
|
+
import { getErrorMessage } from "../utils/errors.js";
|
|
6
|
+
import { TABLE_COLUMN_WIDTHS, TABLE_SEPARATOR } from "../utils/table-formatting.js";
|
|
7
|
+
import { CANONICAL_LAYER_NAMES } from "../core/layers.js";
|
|
8
|
+
async function loadModel(modelPath) {
|
|
9
|
+
try {
|
|
10
|
+
return await Model.load(modelPath);
|
|
11
|
+
} catch (error) {
|
|
12
|
+
const message = getErrorMessage(error);
|
|
13
|
+
throw message.includes("No DR project") || message.includes("Model not found") || message.includes("No model found") || message.includes("Could not find documentation_robotics") ? new ModelNotFoundError() : error;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function printLayerTable(layerName, elements, options) {
|
|
17
|
+
const idWidth = TABLE_COLUMN_WIDTHS.LIST_ID_WIDTH, typeWidth = TABLE_COLUMN_WIDTHS.LIST_TYPE_WIDTH, nameWidth = TABLE_COLUMN_WIDTHS.LIST_NAME_WIDTH;
|
|
18
|
+
console.log(""), console.log(ansis.bold(`Elements in ${ansis.cyan(layerName)} layer:`)), console.log(ansis.dim(TABLE_SEPARATOR)), console.log(`${ansis.cyan("ID".padEnd(idWidth))} ${ansis.cyan("TYPE".padEnd(typeWidth))} ${ansis.cyan("NAME")}`), console.log(ansis.dim(TABLE_SEPARATOR));
|
|
19
|
+
for (const element of elements) {
|
|
20
|
+
const id = (element.path || element.id).substring(0, idWidth - 1).padEnd(idWidth), type = element.type.substring(0, typeWidth - 1).padEnd(typeWidth), name = element.name.substring(0, nameWidth);
|
|
21
|
+
console.log(`${id} ${type} ${name}`), options.verbose && element.description && console.log(ansis.dim(` \u2514\u2500 ${element.description}`));
|
|
22
|
+
}
|
|
23
|
+
console.log(ansis.dim("\u2500".repeat(80))), console.log(ansis.dim(`Total: ${elements.length} element(s)`));
|
|
24
|
+
}
|
|
3
25
|
async function listCommand(layer, options) {
|
|
26
|
+
const span = getActiveSpan();
|
|
4
27
|
try {
|
|
5
|
-
|
|
6
|
-
|
|
28
|
+
if (!layer) {
|
|
29
|
+
const model2 = await loadModel(options.model), allResults = [];
|
|
30
|
+
for (const layerName of CANONICAL_LAYER_NAMES) {
|
|
31
|
+
const layerObj2 = await model2.getLayer(layerName);
|
|
32
|
+
if (!layerObj2)
|
|
33
|
+
continue;
|
|
34
|
+
let elements2 = layerObj2.listElements();
|
|
35
|
+
options.type && (elements2 = elements2.filter((e) => e.type === options.type)), elements2.length > 0 && allResults.push({ layer: layerName, elements: elements2 });
|
|
36
|
+
}
|
|
37
|
+
if (options.json) {
|
|
38
|
+
console.log(JSON.stringify(allResults.map(({ layer: l, elements: elements2 }) => ({
|
|
39
|
+
layer: l,
|
|
40
|
+
elements: elements2.map((e) => e.toJSON())
|
|
41
|
+
})), null, 2));
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (allResults.length === 0)
|
|
45
|
+
console.log(ansis.yellow("No elements found"));
|
|
46
|
+
else
|
|
47
|
+
for (const { layer: layerName, elements: elements2 } of allResults)
|
|
48
|
+
printLayerTable(layerName, elements2, options);
|
|
49
|
+
console.log("");
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
let model;
|
|
53
|
+
try {
|
|
54
|
+
model = await Model.load(options.model, { layers: [layer] });
|
|
55
|
+
} catch (error) {
|
|
56
|
+
const message = getErrorMessage(error);
|
|
57
|
+
throw message.includes("No DR project") || message.includes("Model not found") || message.includes("No model found") || message.includes("Could not find documentation_robotics") ? new ModelNotFoundError() : error;
|
|
58
|
+
}
|
|
59
|
+
const layerObj = await model.getLayer(layer);
|
|
60
|
+
if (!layerObj)
|
|
61
|
+
throw new CLIError(`Layer ${layer} not found`, ErrorCategory.NOT_FOUND, [
|
|
62
|
+
'Use "dr list" to see all available layers',
|
|
63
|
+
'Use "dr add <layer> <type> <name>" to add an element to a new layer'
|
|
64
|
+
]);
|
|
7
65
|
let elements = layerObj.listElements();
|
|
8
|
-
if (options.type && (elements = elements.filter((e) => e.type === options.type)), options.json) {
|
|
66
|
+
if (options.type && (elements = elements.filter((e) => e.type === options.type)), span?.setAttribute("list.layer", layer), span?.setAttribute("list.elementCount", elements.length), options.json) {
|
|
9
67
|
console.log(JSON.stringify(elements.map((e) => e.toJSON()), null, 2));
|
|
10
68
|
return;
|
|
11
69
|
}
|
|
@@ -13,17 +71,9 @@ async function listCommand(layer, options) {
|
|
|
13
71
|
console.log(ansis.yellow(`No elements in ${layer} layer`));
|
|
14
72
|
return;
|
|
15
73
|
}
|
|
16
|
-
|
|
17
|
-
const idWidth = 30, typeWidth = 15, nameWidth = 35;
|
|
18
|
-
console.log(`${ansis.cyan("ID".padEnd(idWidth))} ${ansis.cyan("TYPE".padEnd(typeWidth))} ${ansis.cyan("NAME")}`), console.log(ansis.dim("\u2500".repeat(80)));
|
|
19
|
-
for (const element of elements) {
|
|
20
|
-
const id = element.id.substring(0, idWidth - 1).padEnd(idWidth), type = element.type.substring(0, typeWidth - 1).padEnd(typeWidth), name = element.name.substring(0, nameWidth);
|
|
21
|
-
console.log(`${id} ${type} ${name}`), options.verbose && element.description && console.log(ansis.dim(` \u2514\u2500 ${element.description}`));
|
|
22
|
-
}
|
|
23
|
-
console.log(ansis.dim("\u2500".repeat(80))), console.log(ansis.dim(`Total: ${elements.length} element(s)`)), console.log("");
|
|
74
|
+
printLayerTable(layer, elements, options), console.log("");
|
|
24
75
|
} catch (error) {
|
|
25
|
-
|
|
26
|
-
console.error(ansis.red(`Error: ${message}`)), process.exit(1);
|
|
76
|
+
handleError(error);
|
|
27
77
|
}
|
|
28
78
|
}
|
|
29
79
|
export {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/commands/list.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * List elements in a layer\n */\n\nimport ansis from
|
|
5
|
-
"mappings": "AAIA,OAAO,WAAW;AAClB,SAAS,aAAa;
|
|
6
|
-
"names": []
|
|
4
|
+
"sourcesContent": ["/**\n * List elements in a layer\n */\n\nimport ansis from \"ansis\";\nimport { Model } from \"../core/model.js\";\nimport {\n CLIError,\n ErrorCategory,\n ModelNotFoundError,\n handleError\n} from \"../utils/errors.js\";\nimport { getActiveSpan } from \"../telemetry/index.js\";\nimport { getErrorMessage } from \"../utils/errors.js\";\nimport {\n TABLE_COLUMN_WIDTHS,\n TABLE_SEPARATOR\n} from \"../utils/table-formatting.js\";\nimport { CANONICAL_LAYER_NAMES } from \"../core/layers.js\";\n\nexport interface ListOptions {\n type?: string;\n json?: boolean;\n verbose?: boolean;\n debug?: boolean;\n model?: string;\n}\n\nasync function loadModel(modelPath: string | undefined): Promise<Model> {\n try {\n return await Model.load(modelPath);\n } catch (error) {\n const message = getErrorMessage(error);\n if (\n message.includes(\"No DR project\") ||\n message.includes(\"Model not found\") ||\n message.includes(\"No model found\") ||\n message.includes(\"Could not find documentation_robotics\")\n ) {\n throw new ModelNotFoundError();\n }\n throw error;\n }\n}\n\ntype ElementRow = { path?: string; id: string; type: string; name: string; description?: string; toJSON(): object };\n\nfunction printLayerTable(\n layerName: string,\n elements: ElementRow[],\n options: ListOptions\n): void {\n const idWidth = TABLE_COLUMN_WIDTHS.LIST_ID_WIDTH;\n const typeWidth = TABLE_COLUMN_WIDTHS.LIST_TYPE_WIDTH;\n const nameWidth = TABLE_COLUMN_WIDTHS.LIST_NAME_WIDTH;\n\n console.log(\"\");\n console.log(ansis.bold(`Elements in ${ansis.cyan(layerName)} layer:`));\n console.log(ansis.dim(TABLE_SEPARATOR));\n console.log(\n `${ansis.cyan(\"ID\".padEnd(idWidth))} ${ansis.cyan(\"TYPE\".padEnd(typeWidth))} ${ansis.cyan(\"NAME\")}`\n );\n console.log(ansis.dim(TABLE_SEPARATOR));\n\n for (const element of elements) {\n const displayId = element.path || element.id;\n const id = displayId.substring(0, idWidth - 1).padEnd(idWidth);\n const type = element.type.substring(0, typeWidth - 1).padEnd(typeWidth);\n const name = element.name.substring(0, nameWidth);\n console.log(`${id} ${type} ${name}`);\n if (options.verbose && element.description) {\n console.log(ansis.dim(` \u2514\u2500 ${element.description}`));\n }\n }\n\n console.log(ansis.dim(\"\u2500\".repeat(80)));\n console.log(ansis.dim(`Total: ${elements.length} element(s)`));\n}\n\nexport async function listCommand(\n layer: string | undefined,\n options: ListOptions\n): Promise<void> {\n const span = getActiveSpan();\n\n try {\n // All-layers mode when layer argument is omitted\n if (!layer) {\n const model = await loadModel(options.model);\n type LayerResult = { layer: string; elements: ElementRow[] };\n const allResults: LayerResult[] = [];\n\n for (const layerName of CANONICAL_LAYER_NAMES) {\n const layerObj = await model.getLayer(layerName);\n if (!layerObj) continue;\n\n let elements = layerObj.listElements();\n if (options.type) {\n elements = elements.filter((e) => e.type === options.type);\n }\n if (elements.length > 0) {\n allResults.push({ layer: layerName, elements });\n }\n }\n\n if (options.json) {\n console.log(\n JSON.stringify(\n allResults.map(({ layer: l, elements }) => ({\n layer: l,\n elements: elements.map((e) => e.toJSON()),\n })),\n null,\n 2\n )\n );\n return;\n }\n\n if (allResults.length === 0) {\n console.log(ansis.yellow(\"No elements found\"));\n } else {\n for (const { layer: layerName, elements } of allResults) {\n printLayerTable(layerName, elements, options);\n }\n }\n console.log(\"\");\n return;\n }\n\n // Single-layer mode\n let model: Model;\n try {\n model = await Model.load(options.model, { layers: [layer] });\n } catch (error) {\n const message = getErrorMessage(error);\n if (\n message.includes(\"No DR project\") ||\n message.includes(\"Model not found\") ||\n message.includes(\"No model found\") ||\n message.includes(\"Could not find documentation_robotics\")\n ) {\n throw new ModelNotFoundError();\n }\n throw error;\n }\n\n const layerObj = await model.getLayer(layer);\n if (!layerObj) {\n throw new CLIError(`Layer ${layer} not found`, ErrorCategory.NOT_FOUND, [\n 'Use \"dr list\" to see all available layers',\n 'Use \"dr add <layer> <type> <name>\" to add an element to a new layer'\n ]);\n }\n\n let elements = layerObj.listElements();\n if (options.type) {\n elements = elements.filter((e) => e.type === options.type);\n }\n\n span?.setAttribute(\"list.layer\", layer);\n span?.setAttribute(\"list.elementCount\", elements.length);\n\n if (options.json) {\n console.log(JSON.stringify(elements.map((e) => e.toJSON()), null, 2));\n return;\n }\n\n if (elements.length === 0) {\n console.log(ansis.yellow(`No elements in ${layer} layer`));\n return;\n }\n\n printLayerTable(layer, elements, options);\n console.log(\"\");\n } catch (error) {\n handleError(error);\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["model", "layerObj", "elements"]
|
|
7
7
|
}
|