@documentation-robotics/cli 0.1.0 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +208 -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 +162 -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 +42 -16
- 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
package/dist/ai/tools.js
DELETED
|
@@ -1,231 +0,0 @@
|
|
|
1
|
-
import { DependencyTracker, TraceDirection } from "../core/dependency-tracker.js";
|
|
2
|
-
import { ReferenceRegistry } from "../core/reference-registry.js";
|
|
3
|
-
function getModelTools() {
|
|
4
|
-
return [
|
|
5
|
-
{
|
|
6
|
-
name: "dr_list",
|
|
7
|
-
description: "List elements in a specific layer of the architecture model",
|
|
8
|
-
input_schema: {
|
|
9
|
-
type: "object",
|
|
10
|
-
properties: {
|
|
11
|
-
layer: {
|
|
12
|
-
type: "string",
|
|
13
|
-
description: "Layer name (motivation, business, security, application, technology, api, data-model, data-store, ux, navigation, apm, testing)"
|
|
14
|
-
},
|
|
15
|
-
type: {
|
|
16
|
-
type: "string",
|
|
17
|
-
description: "Optional: filter by element type"
|
|
18
|
-
}
|
|
19
|
-
},
|
|
20
|
-
required: ["layer"]
|
|
21
|
-
}
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
name: "dr_find",
|
|
25
|
-
description: "Find a specific element by its ID in the architecture model",
|
|
26
|
-
input_schema: {
|
|
27
|
-
type: "object",
|
|
28
|
-
properties: {
|
|
29
|
-
id: {
|
|
30
|
-
type: "string",
|
|
31
|
-
description: "Element ID to find (format: {layer}-{type}-{kebab-case-name})"
|
|
32
|
-
}
|
|
33
|
-
},
|
|
34
|
-
required: ["id"]
|
|
35
|
-
}
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
name: "dr_search",
|
|
39
|
-
description: "Search for elements by name, description, or ID in the architecture model",
|
|
40
|
-
input_schema: {
|
|
41
|
-
type: "object",
|
|
42
|
-
properties: {
|
|
43
|
-
query: {
|
|
44
|
-
type: "string",
|
|
45
|
-
description: "Search query (searches names, descriptions, and IDs)"
|
|
46
|
-
},
|
|
47
|
-
layers: {
|
|
48
|
-
type: "array",
|
|
49
|
-
items: { type: "string" },
|
|
50
|
-
description: "Optional: limit search to specific layers"
|
|
51
|
-
}
|
|
52
|
-
},
|
|
53
|
-
required: ["query"]
|
|
54
|
-
}
|
|
55
|
-
},
|
|
56
|
-
{
|
|
57
|
-
name: "dr_trace",
|
|
58
|
-
description: "Trace dependencies for an element (what depends on it, what it depends on, or both)",
|
|
59
|
-
input_schema: {
|
|
60
|
-
type: "object",
|
|
61
|
-
properties: {
|
|
62
|
-
id: {
|
|
63
|
-
type: "string",
|
|
64
|
-
description: "Element ID to trace dependencies for"
|
|
65
|
-
},
|
|
66
|
-
direction: {
|
|
67
|
-
type: "string",
|
|
68
|
-
enum: ["up", "down", "both"],
|
|
69
|
-
description: "Dependency direction: up=dependents, down=dependencies, both=both (default: both)"
|
|
70
|
-
}
|
|
71
|
-
},
|
|
72
|
-
required: ["id"]
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
];
|
|
76
|
-
}
|
|
77
|
-
async function executeModelTool(toolName, args, model) {
|
|
78
|
-
switch (toolName) {
|
|
79
|
-
case "dr_list":
|
|
80
|
-
return await executeDrList(args, model);
|
|
81
|
-
case "dr_find":
|
|
82
|
-
return await executeDrFind(args, model);
|
|
83
|
-
case "dr_search":
|
|
84
|
-
return await executeDrSearch(args, model);
|
|
85
|
-
case "dr_trace":
|
|
86
|
-
return await executeDrTrace(args, model);
|
|
87
|
-
default:
|
|
88
|
-
return { error: `Unknown tool: ${toolName}` };
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
async function executeDrList(args, model) {
|
|
92
|
-
const layerName = args.layer, filterType = args.type;
|
|
93
|
-
if (!layerName)
|
|
94
|
-
return { error: "layer parameter is required" };
|
|
95
|
-
try {
|
|
96
|
-
const layer = await model.getLayer(layerName);
|
|
97
|
-
if (!layer)
|
|
98
|
-
return {
|
|
99
|
-
error: `Layer '${layerName}' not found or not loaded`,
|
|
100
|
-
availableLayers: model.getLayerNames()
|
|
101
|
-
};
|
|
102
|
-
let elements = layer.listElements();
|
|
103
|
-
return filterType && (elements = elements.filter((e) => e.type === filterType)), {
|
|
104
|
-
layer: layerName,
|
|
105
|
-
elementCount: elements.length,
|
|
106
|
-
elements: elements.map((e) => ({
|
|
107
|
-
id: e.id,
|
|
108
|
-
type: e.type,
|
|
109
|
-
name: e.name,
|
|
110
|
-
description: e.description || ""
|
|
111
|
-
}))
|
|
112
|
-
};
|
|
113
|
-
} catch (error) {
|
|
114
|
-
return {
|
|
115
|
-
error: error instanceof Error ? error.message : String(error)
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
async function executeDrFind(args, model) {
|
|
120
|
-
const id = args.id;
|
|
121
|
-
if (!id)
|
|
122
|
-
return { error: "id parameter is required" };
|
|
123
|
-
try {
|
|
124
|
-
for (const layerName of model.getLayerNames()) {
|
|
125
|
-
const layer = await model.getLayer(layerName);
|
|
126
|
-
if (!layer)
|
|
127
|
-
continue;
|
|
128
|
-
const element = layer.getElement(id);
|
|
129
|
-
if (element)
|
|
130
|
-
return {
|
|
131
|
-
found: !0,
|
|
132
|
-
element: {
|
|
133
|
-
id: element.id,
|
|
134
|
-
type: element.type,
|
|
135
|
-
name: element.name,
|
|
136
|
-
description: element.description || "",
|
|
137
|
-
layer: layerName,
|
|
138
|
-
properties: element.properties || {}
|
|
139
|
-
}
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
return {
|
|
143
|
-
found: !1,
|
|
144
|
-
error: `Element with id '${id}' not found`
|
|
145
|
-
};
|
|
146
|
-
} catch (error) {
|
|
147
|
-
return {
|
|
148
|
-
error: error instanceof Error ? error.message : String(error)
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
async function executeDrSearch(args, model) {
|
|
153
|
-
const query = args.query?.toLowerCase(), layerFilter = args.layers || void 0;
|
|
154
|
-
if (!query)
|
|
155
|
-
return { error: "query parameter is required" };
|
|
156
|
-
try {
|
|
157
|
-
const results = [];
|
|
158
|
-
for (const layerName of model.getLayerNames()) {
|
|
159
|
-
if (layerFilter && !layerFilter.includes(layerName))
|
|
160
|
-
continue;
|
|
161
|
-
const layer = await model.getLayer(layerName);
|
|
162
|
-
if (!layer)
|
|
163
|
-
continue;
|
|
164
|
-
const elements = layer.listElements();
|
|
165
|
-
for (const element of elements) {
|
|
166
|
-
const idMatches = element.id.toLowerCase().includes(query), nameMatches = element.name.toLowerCase().includes(query), descMatches = element.description && element.description.toLowerCase().includes(query);
|
|
167
|
-
(idMatches || nameMatches || descMatches) && results.push({
|
|
168
|
-
id: element.id,
|
|
169
|
-
type: element.type,
|
|
170
|
-
name: element.name,
|
|
171
|
-
description: element.description || "",
|
|
172
|
-
layer: layerName,
|
|
173
|
-
matchReason: idMatches && nameMatches ? "id and name" : idMatches ? "id" : nameMatches ? "name" : "description"
|
|
174
|
-
});
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
return {
|
|
178
|
-
query,
|
|
179
|
-
resultCount: results.length,
|
|
180
|
-
results
|
|
181
|
-
};
|
|
182
|
-
} catch (error) {
|
|
183
|
-
return {
|
|
184
|
-
error: error instanceof Error ? error.message : String(error)
|
|
185
|
-
};
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
async function executeDrTrace(args, model) {
|
|
189
|
-
const id = args.id, direction = args.direction || "both";
|
|
190
|
-
if (!id)
|
|
191
|
-
return { error: "id parameter is required" };
|
|
192
|
-
if (!["up", "down", "both"].includes(direction))
|
|
193
|
-
return { error: "direction must be one of: up, down, both" };
|
|
194
|
-
try {
|
|
195
|
-
const registry = new ReferenceRegistry();
|
|
196
|
-
for (const layerName of model.getLayerNames()) {
|
|
197
|
-
const layer = await model.getLayer(layerName);
|
|
198
|
-
if (layer)
|
|
199
|
-
for (const element of layer.listElements())
|
|
200
|
-
registry.registerElement(element);
|
|
201
|
-
}
|
|
202
|
-
const tracker = new DependencyTracker(registry), result = {
|
|
203
|
-
id,
|
|
204
|
-
direction
|
|
205
|
-
};
|
|
206
|
-
if (direction === "down" || direction === "both")
|
|
207
|
-
try {
|
|
208
|
-
const dependencies = tracker.traceDependencies(id, TraceDirection.UP, null);
|
|
209
|
-
result.dependencies = dependencies, result.dependencyCount = dependencies.length;
|
|
210
|
-
} catch {
|
|
211
|
-
result.dependencies = [], result.dependencyCount = 0;
|
|
212
|
-
}
|
|
213
|
-
if (direction === "up" || direction === "both")
|
|
214
|
-
try {
|
|
215
|
-
const dependents = tracker.traceDependencies(id, TraceDirection.DOWN, null);
|
|
216
|
-
result.dependents = dependents, result.dependentCount = dependents.length;
|
|
217
|
-
} catch {
|
|
218
|
-
result.dependents = [], result.dependentCount = 0;
|
|
219
|
-
}
|
|
220
|
-
return result;
|
|
221
|
-
} catch (error) {
|
|
222
|
-
return {
|
|
223
|
-
error: error instanceof Error ? error.message : String(error)
|
|
224
|
-
};
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
export {
|
|
228
|
-
executeModelTool,
|
|
229
|
-
getModelTools
|
|
230
|
-
};
|
|
231
|
-
//# sourceMappingURL=tools.js.map
|
package/dist/ai/tools.js.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/ai/tools.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Tool Definitions for Claude AI Integration\n * Defines tools for dr_list, dr_find, dr_search, and dr_trace\n *\n * NOTE: These tool definitions are used for legacy SDK-based chat only.\n * The `dr chat` command uses Claude Code CLI subprocess with Bash and Read tools instead.\n */\n\nimport { Model } from '../core/model.js';\nimport { DependencyTracker, TraceDirection } from '../core/dependency-tracker.js';\nimport { ReferenceRegistry } from '../core/reference-registry.js';\n\n/**\n * Get tool definitions for Claude to use with the model\n * @returns Array of tool definitions in Claude format\n */\nexport function getModelTools(): any[] {\n return [\n {\n name: 'dr_list',\n description: 'List elements in a specific layer of the architecture model',\n input_schema: {\n type: 'object',\n properties: {\n layer: {\n type: 'string',\n description:\n 'Layer name (motivation, business, security, application, technology, api, data-model, data-store, ux, navigation, apm, testing)',\n },\n type: {\n type: 'string',\n description: 'Optional: filter by element type',\n },\n },\n required: ['layer'],\n },\n },\n {\n name: 'dr_find',\n description: 'Find a specific element by its ID in the architecture model',\n input_schema: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Element ID to find (format: {layer}-{type}-{kebab-case-name})',\n },\n },\n required: ['id'],\n },\n },\n {\n name: 'dr_search',\n description: 'Search for elements by name, description, or ID in the architecture model',\n input_schema: {\n type: 'object',\n properties: {\n query: {\n type: 'string',\n description: 'Search query (searches names, descriptions, and IDs)',\n },\n layers: {\n type: 'array',\n items: { type: 'string' },\n description: 'Optional: limit search to specific layers',\n },\n },\n required: ['query'],\n },\n },\n {\n name: 'dr_trace',\n description:\n 'Trace dependencies for an element (what depends on it, what it depends on, or both)',\n input_schema: {\n type: 'object',\n properties: {\n id: {\n type: 'string',\n description: 'Element ID to trace dependencies for',\n },\n direction: {\n type: 'string',\n enum: ['up', 'down', 'both'],\n description:\n 'Dependency direction: up=dependents, down=dependencies, both=both (default: both)',\n },\n },\n required: ['id'],\n },\n },\n ];\n}\n\n/**\n * Execute a tool and return the result\n * @param toolName Name of the tool to execute\n * @param args Tool arguments\n * @param model The architecture model\n * @returns Tool execution result as JSON\n */\nexport async function executeModelTool(\n toolName: string,\n args: Record<string, unknown>,\n model: Model\n): Promise<any> {\n switch (toolName) {\n case 'dr_list':\n return await executeDrList(args, model);\n\n case 'dr_find':\n return await executeDrFind(args, model);\n\n case 'dr_search':\n return await executeDrSearch(args, model);\n\n case 'dr_trace':\n return await executeDrTrace(args, model);\n\n default:\n return { error: `Unknown tool: ${toolName}` };\n }\n}\n\n/**\n * Execute dr_list tool\n */\nasync function executeDrList(args: Record<string, unknown>, model: Model): Promise<any> {\n const layerName = args.layer as string;\n const filterType = args.type as string | undefined;\n\n if (!layerName) {\n return { error: 'layer parameter is required' };\n }\n\n try {\n const layer = await model.getLayer(layerName);\n\n if (!layer) {\n return {\n error: `Layer '${layerName}' not found or not loaded`,\n availableLayers: model.getLayerNames(),\n };\n }\n\n let elements = layer.listElements();\n\n if (filterType) {\n elements = elements.filter((e) => e.type === filterType);\n }\n\n return {\n layer: layerName,\n elementCount: elements.length,\n elements: elements.map((e) => ({\n id: e.id,\n type: e.type,\n name: e.name,\n description: e.description || '',\n })),\n };\n } catch (error) {\n return {\n error: error instanceof Error ? error.message : String(error),\n };\n }\n}\n\n/**\n * Execute dr_find tool\n */\nasync function executeDrFind(args: Record<string, unknown>, model: Model): Promise<any> {\n const id = args.id as string;\n\n if (!id) {\n return { error: 'id parameter is required' };\n }\n\n try {\n // Search through all layers for the element\n for (const layerName of model.getLayerNames()) {\n const layer = await model.getLayer(layerName);\n if (!layer) continue;\n\n const element = layer.getElement(id);\n if (element) {\n return {\n found: true,\n element: {\n id: element.id,\n type: element.type,\n name: element.name,\n description: element.description || '',\n layer: layerName,\n properties: element.properties || {},\n },\n };\n }\n }\n\n return {\n found: false,\n error: `Element with id '${id}' not found`,\n };\n } catch (error) {\n return {\n error: error instanceof Error ? error.message : String(error),\n };\n }\n}\n\n/**\n * Execute dr_search tool\n */\nasync function executeDrSearch(args: Record<string, unknown>, model: Model): Promise<any> {\n const query = (args.query as string)?.toLowerCase();\n const layerFilter = (args.layers as string[]) || undefined;\n\n if (!query) {\n return { error: 'query parameter is required' };\n }\n\n try {\n const results: any[] = [];\n\n for (const layerName of model.getLayerNames()) {\n // Skip if layer is in exclude list\n if (layerFilter && !layerFilter.includes(layerName)) {\n continue;\n }\n\n const layer = await model.getLayer(layerName);\n if (!layer) continue;\n\n const elements = layer.listElements();\n\n for (const element of elements) {\n const idMatches = element.id.toLowerCase().includes(query);\n const nameMatches = element.name.toLowerCase().includes(query);\n const descMatches =\n element.description && element.description.toLowerCase().includes(query);\n\n if (idMatches || nameMatches || descMatches) {\n results.push({\n id: element.id,\n type: element.type,\n name: element.name,\n description: element.description || '',\n layer: layerName,\n matchReason:\n idMatches && nameMatches\n ? 'id and name'\n : idMatches\n ? 'id'\n : nameMatches\n ? 'name'\n : 'description',\n });\n }\n }\n }\n\n return {\n query,\n resultCount: results.length,\n results,\n };\n } catch (error) {\n return {\n error: error instanceof Error ? error.message : String(error),\n };\n }\n}\n\n/**\n * Execute dr_trace tool\n */\nasync function executeDrTrace(args: Record<string, unknown>, model: Model): Promise<any> {\n const id = args.id as string;\n const direction = (args.direction as string) || 'both';\n\n if (!id) {\n return { error: 'id parameter is required' };\n }\n\n if (!['up', 'down', 'both'].includes(direction)) {\n return { error: 'direction must be one of: up, down, both' };\n }\n\n try {\n // Build registry by collecting all references from all loaded layers\n const registry = new ReferenceRegistry();\n\n for (const layerName of model.getLayerNames()) {\n const layer = await model.getLayer(layerName);\n if (!layer) continue;\n\n for (const element of layer.listElements()) {\n registry.registerElement(element);\n }\n }\n\n // Create dependency tracker with registry\n const tracker = new DependencyTracker(registry);\n\n const result: any = {\n id,\n direction,\n };\n\n // Get dependencies (elements this one depends on)\n if (direction === 'down' || direction === 'both') {\n try {\n const dependencies = tracker.traceDependencies(id, TraceDirection.UP, null);\n result.dependencies = dependencies;\n result.dependencyCount = dependencies.length;\n } catch (e) {\n result.dependencies = [];\n result.dependencyCount = 0;\n }\n }\n\n // Get dependents (elements that depend on this one)\n if (direction === 'up' || direction === 'both') {\n try {\n const dependents = tracker.traceDependencies(id, TraceDirection.DOWN, null);\n result.dependents = dependents;\n result.dependentCount = dependents.length;\n } catch (e) {\n result.dependents = [];\n result.dependentCount = 0;\n }\n }\n\n return result;\n } catch (error) {\n return {\n error: error instanceof Error ? error.message : String(error),\n };\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
package/dist/commands/migrate.js
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import ansis from "ansis";
|
|
2
|
-
import { Model } from "../core/model.js";
|
|
3
|
-
import { MigrationRegistry } from "../core/migration-registry.js";
|
|
4
|
-
async function migrateCommand(options) {
|
|
5
|
-
try {
|
|
6
|
-
const model = await Model.load(process.cwd(), { lazyLoad: !1 }), registry = new MigrationRegistry(), currentVersion = model.manifest.specVersion || "0.5.0", targetVersion = options.to || registry.getLatestVersion();
|
|
7
|
-
if (console.log(ansis.bold(`
|
|
8
|
-
Migrating model from spec v${currentVersion} to v${targetVersion}
|
|
9
|
-
`)), currentVersion === targetVersion) {
|
|
10
|
-
console.log(ansis.yellow(`Model is already at spec version ${targetVersion}`));
|
|
11
|
-
return;
|
|
12
|
-
}
|
|
13
|
-
const summary = registry.getMigrationSummary(currentVersion, targetVersion);
|
|
14
|
-
summary.migrationsNeeded === 0 && (console.log(ansis.yellow(`No migration path found from v${currentVersion} to v${targetVersion}`)), console.log("Available migrations:"), registry.getMigrationSummary("0.5.0").migrations.forEach((m) => {
|
|
15
|
-
console.log(ansis.dim(` - ${m.from} \u2192 ${m.to}: ${m.description}`));
|
|
16
|
-
}), process.exit(1)), console.log(ansis.dim("Migration path:"));
|
|
17
|
-
for (const migration of summary.migrations)
|
|
18
|
-
console.log(ansis.dim(` ${migration.from} \u2192 ${migration.to}: ${migration.description}`));
|
|
19
|
-
console.log(), options.dryRun && (console.log(ansis.yellow("[DRY RUN] The following changes would be applied:")), console.log());
|
|
20
|
-
const result = await registry.applyMigrations(model, {
|
|
21
|
-
fromVersion: currentVersion,
|
|
22
|
-
toVersion: targetVersion,
|
|
23
|
-
dryRun: options.dryRun,
|
|
24
|
-
validate: !options.force
|
|
25
|
-
});
|
|
26
|
-
for (const applied of result.applied)
|
|
27
|
-
applied.dryRun ? console.log(ansis.yellow(`[DRY RUN] ${applied.from} \u2192 ${applied.to}: ${applied.description}`)) : (console.log(ansis.green(`\u2713 ${applied.from} \u2192 ${applied.to}: ${applied.description}`)), applied.changes?.filesModified && console.log(ansis.dim(` Files modified: ${applied.changes.filesModified}`)));
|
|
28
|
-
console.log(), options.dryRun ? console.log(ansis.yellow("\u2713 Dry run complete (no changes saved)")) : (await model.saveManifest(), await model.saveDirtyLayers(), console.log(ansis.green("\u2713 Migration complete")), console.log(ansis.dim(`Spec version updated to v${targetVersion} and saved to model/manifest.yaml`))), console.log();
|
|
29
|
-
} catch (error) {
|
|
30
|
-
console.error(ansis.red(`Error: ${error instanceof Error ? error.message : String(error)}`)), process.exit(1);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
export {
|
|
34
|
-
migrateCommand
|
|
35
|
-
};
|
|
36
|
-
//# sourceMappingURL=migrate.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/commands/migrate.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Migrate Command - Migrates model to a different spec version\n */\n\nimport ansis from 'ansis';\nimport { Model } from '../core/model.js';\nimport { MigrationRegistry } from '../core/migration-registry.js';\n\nexport async function migrateCommand(options: {\n to?: string;\n dryRun?: boolean;\n force?: boolean;\n}): Promise<void> {\n try {\n // Load the model from current directory\n const model = await Model.load(process.cwd(), { lazyLoad: false });\n\n const registry = new MigrationRegistry();\n const currentVersion = model.manifest.specVersion || '0.5.0';\n const targetVersion = options.to || registry.getLatestVersion();\n\n console.log(ansis.bold(`\\nMigrating model from spec v${currentVersion} to v${targetVersion}\\n`));\n\n // Check if migration is needed\n if (currentVersion === targetVersion) {\n console.log(\n ansis.yellow(`Model is already at spec version ${targetVersion}`)\n );\n return;\n }\n\n // Get migration summary\n const summary = registry.getMigrationSummary(currentVersion, targetVersion);\n\n if (summary.migrationsNeeded === 0) {\n console.log(ansis.yellow(`No migration path found from v${currentVersion} to v${targetVersion}`));\n console.log(`Available migrations:`);\n registry.getMigrationSummary('0.5.0').migrations.forEach((m) => {\n console.log(ansis.dim(` - ${m.from} \u2192 ${m.to}: ${m.description}`));\n });\n process.exit(1);\n }\n\n // Display migration plan\n console.log(ansis.dim('Migration path:'));\n for (const migration of summary.migrations) {\n console.log(\n ansis.dim(` ${migration.from} \u2192 ${migration.to}: ${migration.description}`)\n );\n }\n console.log();\n\n if (options.dryRun) {\n console.log(ansis.yellow('[DRY RUN] The following changes would be applied:'));\n console.log();\n }\n\n // Apply migrations\n const result = await registry.applyMigrations(model, {\n fromVersion: currentVersion,\n toVersion: targetVersion,\n dryRun: options.dryRun,\n validate: !options.force,\n });\n\n // Display results\n for (const applied of result.applied) {\n if (applied.dryRun) {\n console.log(\n ansis.yellow(\n `[DRY RUN] ${applied.from} \u2192 ${applied.to}: ${applied.description}`\n )\n );\n } else {\n console.log(\n ansis.green(\n `\u2713 ${applied.from} \u2192 ${applied.to}: ${applied.description}`\n )\n );\n if (applied.changes?.filesModified) {\n console.log(\n ansis.dim(` Files modified: ${applied.changes.filesModified}`)\n );\n }\n }\n }\n\n console.log();\n\n if (!options.dryRun) {\n // Save the updated manifest and all dirty layers\n await model.saveManifest();\n await model.saveDirtyLayers();\n\n console.log(ansis.green(`\u2713 Migration complete`));\n console.log(\n ansis.dim(\n `Spec version updated to v${targetVersion} and saved to model/manifest.yaml`\n )\n );\n } else {\n console.log(ansis.yellow(`\u2713 Dry run complete (no changes saved)`));\n }\n\n console.log();\n } catch (error) {\n console.error(\n ansis.red(\n `Error: ${error instanceof Error ? error.message : String(error)}`\n )\n );\n process.exit(1);\n }\n}\n"],
|
|
5
|
-
"mappings": "AAIA,OAAO,WAAW;AAClB,SAAS,aAAa;AACtB,SAAS,yBAAyB;AAElC,eAAsB,eAAe,SAIpC;AACC,MAAI;AAEF,UAAM,QAAQ,MAAM,MAAM,KAAK,QAAQ,IAAG,GAAI,EAAE,UAAU,GAAK,CAAE,GAE3D,WAAW,IAAI,kBAAiB,GAChC,iBAAiB,MAAM,SAAS,eAAe,SAC/C,gBAAgB,QAAQ,MAAM,SAAS,iBAAgB;AAK7D,QAHA,QAAQ,IAAI,MAAM,KAAK;6BAAgC,cAAc,QAAQ,aAAa;CAAI,CAAC,GAG3F,mBAAmB,eAAe;AACpC,cAAQ,IACN,MAAM,OAAO,oCAAoC,aAAa,EAAE,CAAC;AAEnE;IACF;AAGA,UAAM,UAAU,SAAS,oBAAoB,gBAAgB,aAAa;AAE1E,IAAI,QAAQ,qBAAqB,MAC/B,QAAQ,IAAI,MAAM,OAAO,iCAAiC,cAAc,QAAQ,aAAa,EAAE,CAAC,GAChG,QAAQ,IAAI,uBAAuB,GACnC,SAAS,oBAAoB,OAAO,EAAE,WAAW,QAAQ,CAAC,MAAK;AAC7D,cAAQ,IAAI,MAAM,IAAI,OAAO,EAAE,IAAI,WAAM,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;IACpE,CAAC,GACD,QAAQ,KAAK,CAAC,IAIhB,QAAQ,IAAI,MAAM,IAAI,iBAAiB,CAAC;AACxC,eAAW,aAAa,QAAQ;AAC9B,cAAQ,IACN,MAAM,IAAI,KAAK,UAAU,IAAI,WAAM,UAAU,EAAE,KAAK,UAAU,WAAW,EAAE,CAAC;AAGhF,YAAQ,IAAG,GAEP,QAAQ,WACV,QAAQ,IAAI,MAAM,OAAO,mDAAmD,CAAC,GAC7E,QAAQ,IAAG;AAIb,UAAM,SAAS,MAAM,SAAS,gBAAgB,OAAO;MACnD,aAAa;MACb,WAAW;MACX,QAAQ,QAAQ;MAChB,UAAU,CAAC,QAAQ;KACpB;AAGD,eAAW,WAAW,OAAO;AAC3B,MAAI,QAAQ,SACV,QAAQ,IACN,MAAM,OACJ,aAAa,QAAQ,IAAI,WAAM,QAAQ,EAAE,KAAK,QAAQ,WAAW,EAAE,CACpE,KAGH,QAAQ,IACN,MAAM,MACJ,UAAK,QAAQ,IAAI,WAAM,QAAQ,EAAE,KAAK,QAAQ,WAAW,EAAE,CAC5D,GAEC,QAAQ,SAAS,iBACnB,QAAQ,IACN,MAAM,IAAI,qBAAqB,QAAQ,QAAQ,aAAa,EAAE,CAAC;AAMvE,YAAQ,IAAG,GAEN,QAAQ,SAYX,QAAQ,IAAI,MAAM,OAAO,4CAAuC,CAAC,KAVjE,MAAM,MAAM,aAAY,GACxB,MAAM,MAAM,gBAAe,GAE3B,QAAQ,IAAI,MAAM,MAAM,2BAAsB,CAAC,GAC/C,QAAQ,IACN,MAAM,IACJ,4BAA4B,aAAa,mCAAmC,CAC7E,IAML,QAAQ,IAAG;EACb,SAAS,OAAO;AACd,YAAQ,MACN,MAAM,IACJ,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,EAAE,CACnE,GAEH,QAAQ,KAAK,CAAC;EAChB;AACF;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
package/dist/commands/project.js
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
import ansis from "ansis";
|
|
2
|
-
import { Model } from "../core/model.js";
|
|
3
|
-
async function projectCommand(elementId, targetLayers, options = {}) {
|
|
4
|
-
try {
|
|
5
|
-
const model = await Model.load(options.model), source = model.getElementById(elementId);
|
|
6
|
-
source || (console.error(ansis.red(`Error: Element '${elementId}' not found`)), process.exit(1));
|
|
7
|
-
const engine = model.getProjectionEngine(), layers = targetLayers.split(",").map((l) => l.trim());
|
|
8
|
-
console.log(""), console.log(ansis.bold(`Projecting element: ${ansis.yellow(elementId)}`)), console.log(ansis.bold(`Target layers: ${ansis.cyan(layers.join(", "))}`)), console.log("");
|
|
9
|
-
const results = [];
|
|
10
|
-
for (const targetLayer of layers)
|
|
11
|
-
try {
|
|
12
|
-
const applicableRules = engine.findApplicableRules(source, targetLayer);
|
|
13
|
-
if (applicableRules.length === 0) {
|
|
14
|
-
console.log(ansis.yellow(`\u26A0 Warning: No projection rule found for ${source.layer} -> ${targetLayer}`));
|
|
15
|
-
continue;
|
|
16
|
-
}
|
|
17
|
-
const projectionRule = options.rule ? applicableRules.find((r) => r.name === options.rule) : applicableRules[0];
|
|
18
|
-
if (!projectionRule) {
|
|
19
|
-
console.log(ansis.yellow(`\u26A0 Warning: Rule '${options.rule}' not found for ${targetLayer}`));
|
|
20
|
-
continue;
|
|
21
|
-
}
|
|
22
|
-
const projected = await engine.projectElement(source, targetLayer, projectionRule, options.dryRun);
|
|
23
|
-
projected && results.push({ layer: targetLayer, element: projected });
|
|
24
|
-
} catch (error) {
|
|
25
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
26
|
-
console.log(ansis.red(`\u2717 Error projecting to ${targetLayer}: ${message}`));
|
|
27
|
-
}
|
|
28
|
-
if (results.length > 0) {
|
|
29
|
-
console.log(ansis.bold.green("\u2713 Projection successful")), console.log("");
|
|
30
|
-
const colLayer = "Target Layer", colId = "Element ID", colName = "Name", maxLayerLen = Math.max(colLayer.length, ...results.map((r) => r.layer.length)), maxIdLen = Math.max(colId.length, ...results.map((r) => r.element.id.length)), maxNameLen = Math.max(colName.length, ...results.map((r) => (r.element.name || "").length));
|
|
31
|
-
console.log(ansis.bold(ansis.cyan(colLayer.padEnd(maxLayerLen)) + " " + ansis.white(colId.padEnd(maxIdLen)) + " " + ansis.green(colName.padEnd(maxNameLen)))), console.log(ansis.dim("\u2500".repeat(maxLayerLen + maxIdLen + maxNameLen + 4)));
|
|
32
|
-
for (const { layer, element } of results)
|
|
33
|
-
console.log(ansis.cyan(layer.padEnd(maxLayerLen)) + " " + ansis.white(element.id.padEnd(maxIdLen)) + " " + ansis.green((element.name || "").padEnd(maxNameLen)));
|
|
34
|
-
console.log(""), options.dryRun ? console.log(ansis.yellow("Dry run - elements not saved")) : (await model.save(), console.log(ansis.green("Model saved successfully")));
|
|
35
|
-
} else
|
|
36
|
-
console.log(ansis.yellow("No elements were projected"));
|
|
37
|
-
console.log("");
|
|
38
|
-
} catch (error) {
|
|
39
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
40
|
-
console.error(ansis.red(`Error: ${message}`)), process.exit(1);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
async function projectAllCommand(options = {}) {
|
|
44
|
-
try {
|
|
45
|
-
const model = await Model.load(options.model), engine = model.getProjectionEngine();
|
|
46
|
-
console.log(""), console.log(ansis.bold("Projecting all applicable elements...")), console.log(""), options.from && console.log(`From layer: ${options.from}`), options.to && console.log(`To layer: ${options.to}`), (options.from || options.to) && console.log("");
|
|
47
|
-
const projected = await engine.projectAll(options.from || void 0, options.to || void 0, options.dryRun);
|
|
48
|
-
if (projected.length > 0) {
|
|
49
|
-
console.log(ansis.bold.green(`\u2713 Projected ${projected.length} element(s)`)), console.log("");
|
|
50
|
-
const byLayer = /* @__PURE__ */ new Map();
|
|
51
|
-
for (const element of projected) {
|
|
52
|
-
const layer = element.layer || "unknown";
|
|
53
|
-
byLayer.has(layer) || byLayer.set(layer, []), byLayer.get(layer).push(element);
|
|
54
|
-
}
|
|
55
|
-
for (const [layer, elements] of Array.from(byLayer.entries()).sort()) {
|
|
56
|
-
console.log(ansis.bold(`${layer}:`));
|
|
57
|
-
for (const element of elements)
|
|
58
|
-
console.log(` ${ansis.dim("\u2022")} ${element.id} ${ansis.gray(`(${element.name || "unnamed"})`)}`);
|
|
59
|
-
console.log("");
|
|
60
|
-
}
|
|
61
|
-
options.dryRun ? console.log(ansis.yellow("Dry run - elements not saved")) : (await model.save(), console.log(ansis.green("Model saved successfully")));
|
|
62
|
-
} else
|
|
63
|
-
console.log(ansis.yellow("No elements were projected"));
|
|
64
|
-
console.log("");
|
|
65
|
-
} catch (error) {
|
|
66
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
67
|
-
console.error(ansis.red(`Error: ${message}`)), process.exit(1);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
export {
|
|
71
|
-
projectAllCommand,
|
|
72
|
-
projectCommand
|
|
73
|
-
};
|
|
74
|
-
//# sourceMappingURL=project.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/commands/project.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Project command - project elements across layers using projection rules\n */\n\nimport ansis from 'ansis';\nimport { Model } from '../core/model.js';\n\nexport async function projectCommand(\n elementId: string,\n targetLayers: string,\n options: {\n rule?: string;\n dryRun?: boolean;\n force?: boolean;\n model?: string;\n } = {}\n): Promise<void> {\n try {\n // Load model\n const model = await Model.load(options.model);\n\n // Get source element\n const source = model.getElementById(elementId);\n if (!source) {\n console.error(ansis.red(`Error: Element '${elementId}' not found`));\n process.exit(1);\n }\n\n // Initialize projection engine\n const engine = model.getProjectionEngine();\n\n // Parse target layers\n const layers = targetLayers.split(',').map((l) => l.trim());\n\n console.log('');\n console.log(ansis.bold(`Projecting element: ${ansis.yellow(elementId)}`));\n console.log(ansis.bold(`Target layers: ${ansis.cyan(layers.join(', '))}`));\n console.log('');\n\n // Project to each layer\n const results: Array<{ layer: string; element: any }> = [];\n\n for (const targetLayer of layers) {\n try {\n // Find applicable rules\n const applicableRules = engine.findApplicableRules(source, targetLayer);\n\n if (applicableRules.length === 0) {\n console.log(\n ansis.yellow(\n `\u26A0 Warning: No projection rule found for ${source.layer} -> ${targetLayer}`\n )\n );\n continue;\n }\n\n // Use first applicable rule (or specific rule if provided)\n const projectionRule = options.rule\n ? applicableRules.find((r) => r.name === options.rule)\n : applicableRules[0];\n\n if (!projectionRule) {\n console.log(\n ansis.yellow(\n `\u26A0 Warning: Rule '${options.rule}' not found for ${targetLayer}`\n )\n );\n continue;\n }\n\n // Perform projection\n const projected = await engine.projectElement(\n source,\n targetLayer,\n projectionRule,\n options.dryRun\n );\n\n if (projected) {\n results.push({ layer: targetLayer, element: projected });\n }\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.log(ansis.red(`\u2717 Error projecting to ${targetLayer}: ${message}`));\n }\n }\n\n // Display results\n if (results.length > 0) {\n console.log(ansis.bold.green('\u2713 Projection successful'));\n console.log('');\n\n // Table header\n const colLayer = 'Target Layer';\n const colId = 'Element ID';\n const colName = 'Name';\n\n const maxLayerLen = Math.max(\n colLayer.length,\n ...results.map((r) => r.layer.length)\n );\n const maxIdLen = Math.max(colId.length, ...results.map((r) => r.element.id.length));\n const maxNameLen = Math.max(\n colName.length,\n ...results.map((r) => (r.element.name || '').length)\n );\n\n // Print header\n console.log(\n ansis.bold(\n ansis.cyan(colLayer.padEnd(maxLayerLen)) +\n ' ' +\n ansis.white(colId.padEnd(maxIdLen)) +\n ' ' +\n ansis.green(colName.padEnd(maxNameLen))\n )\n );\n console.log(ansis.dim('\u2500'.repeat(maxLayerLen + maxIdLen + maxNameLen + 4)));\n\n // Print rows\n for (const { layer, element } of results) {\n console.log(\n ansis.cyan(layer.padEnd(maxLayerLen)) +\n ' ' +\n ansis.white(element.id.padEnd(maxIdLen)) +\n ' ' +\n ansis.green((element.name || '').padEnd(maxNameLen))\n );\n }\n\n console.log('');\n\n if (options.dryRun) {\n console.log(ansis.yellow('Dry run - elements not saved'));\n } else {\n // Save model\n await model.save();\n console.log(ansis.green('Model saved successfully'));\n }\n } else {\n console.log(ansis.yellow('No elements were projected'));\n }\n\n console.log('');\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.error(ansis.red(`Error: ${message}`));\n process.exit(1);\n }\n}\n\nexport async function projectAllCommand(options: {\n from?: string;\n to?: string;\n dryRun?: boolean;\n model?: string;\n} = {}): Promise<void> {\n try {\n // Load model\n const model = await Model.load(options.model);\n\n // Initialize projection engine\n const engine = model.getProjectionEngine();\n\n console.log('');\n console.log(ansis.bold('Projecting all applicable elements...'));\n console.log('');\n\n if (options.from) {\n console.log(`From layer: ${options.from}`);\n }\n if (options.to) {\n console.log(`To layer: ${options.to}`);\n }\n if (options.from || options.to) {\n console.log('');\n }\n\n // Perform projections\n const projected = await engine.projectAll(\n options.from || undefined,\n options.to || undefined,\n options.dryRun\n );\n\n // Display results\n if (projected.length > 0) {\n console.log(ansis.bold.green(`\u2713 Projected ${projected.length} element(s)`));\n console.log('');\n\n // Group by layer\n const byLayer = new Map<string, any[]>();\n for (const element of projected) {\n const layer = element.layer || 'unknown';\n if (!byLayer.has(layer)) {\n byLayer.set(layer, []);\n }\n byLayer.get(layer)!.push(element);\n }\n\n // Display grouped results\n for (const [layer, elements] of Array.from(byLayer.entries()).sort()) {\n console.log(ansis.bold(`${layer}:`));\n for (const element of elements) {\n console.log(` ${ansis.dim('\u2022')} ${element.id} ${ansis.gray(`(${element.name || 'unnamed'})`)}`);\n }\n console.log('');\n }\n\n if (options.dryRun) {\n console.log(ansis.yellow('Dry run - elements not saved'));\n } else {\n // Save model\n await model.save();\n console.log(ansis.green('Model saved successfully'));\n }\n } else {\n console.log(ansis.yellow('No elements were projected'));\n }\n\n console.log('');\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n console.error(ansis.red(`Error: ${message}`));\n process.exit(1);\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { readFile, writeFile, fileExists } from "../utils/file-io.js";
|
|
2
|
-
import { ChangesetManager } from "./changeset.js";
|
|
3
|
-
class ActiveChangesetContext {
|
|
4
|
-
activePath;
|
|
5
|
-
manager;
|
|
6
|
-
constructor(modelPath) {
|
|
7
|
-
this.activePath = `${modelPath}/.dr/changesets/active`, this.manager = new ChangesetManager(modelPath);
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* Get the currently active changeset name, if any
|
|
11
|
-
*/
|
|
12
|
-
async getActive() {
|
|
13
|
-
return await fileExists(this.activePath) && (await readFile(this.activePath)).trim() || null;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Set a changeset as active for automatic tracking
|
|
17
|
-
*/
|
|
18
|
-
async setActive(changesetName) {
|
|
19
|
-
if (!await this.manager.load(changesetName))
|
|
20
|
-
throw new Error(`Changeset '${changesetName}' not found`);
|
|
21
|
-
await writeFile(this.activePath, changesetName);
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* Clear the active changeset
|
|
25
|
-
*/
|
|
26
|
-
async clearActive() {
|
|
27
|
-
await fileExists(this.activePath) && await writeFile(this.activePath, "");
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Track a change in the active changeset
|
|
31
|
-
* If no changeset is active, this is a no-op
|
|
32
|
-
*/
|
|
33
|
-
async trackChange(type, elementId, layerName, before, after) {
|
|
34
|
-
const activeChangesetName = await this.getActive();
|
|
35
|
-
if (!activeChangesetName)
|
|
36
|
-
return;
|
|
37
|
-
const changeset = await this.manager.load(activeChangesetName);
|
|
38
|
-
if (!changeset)
|
|
39
|
-
throw new Error(`Active changeset '${activeChangesetName}' not found`);
|
|
40
|
-
changeset.addChange(type, elementId, layerName, before, after), await this.manager.save(changeset);
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Check if a changeset is currently active
|
|
44
|
-
*/
|
|
45
|
-
async isActive() {
|
|
46
|
-
return await this.getActive() !== null;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
export {
|
|
50
|
-
ActiveChangesetContext
|
|
51
|
-
};
|
|
52
|
-
//# sourceMappingURL=active-changeset.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/core/active-changeset.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Active Changeset Context\n *\n * Manages the currently active changeset and provides utilities for\n * automatic change tracking during model operations.\n */\n\nimport { readFile, writeFile, fileExists } from '../utils/file-io.js';\nimport { ChangesetManager } from './changeset.js';\n\n/**\n * ActiveChangesetContext manages automatic change tracking\n * when a changeset is activated for transparent operation capture\n */\nexport class ActiveChangesetContext {\n private activePath: string;\n private manager: ChangesetManager;\n\n constructor(modelPath: string) {\n this.activePath = `${modelPath}/.dr/changesets/active`;\n this.manager = new ChangesetManager(modelPath);\n }\n\n /**\n * Get the currently active changeset name, if any\n */\n async getActive(): Promise<string | null> {\n if (!(await fileExists(this.activePath))) {\n return null;\n }\n const content = await readFile(this.activePath);\n return content.trim() || null;\n }\n\n /**\n * Set a changeset as active for automatic tracking\n */\n async setActive(changesetName: string): Promise<void> {\n // Verify changeset exists\n const changeset = await this.manager.load(changesetName);\n if (!changeset) {\n throw new Error(`Changeset '${changesetName}' not found`);\n }\n await writeFile(this.activePath, changesetName);\n }\n\n /**\n * Clear the active changeset\n */\n async clearActive(): Promise<void> {\n if (await fileExists(this.activePath)) {\n await writeFile(this.activePath, '');\n }\n }\n\n /**\n * Track a change in the active changeset\n * If no changeset is active, this is a no-op\n */\n async trackChange(\n type: 'add' | 'update' | 'delete',\n elementId: string,\n layerName: string,\n before?: Record<string, unknown>,\n after?: Record<string, unknown>\n ): Promise<void> {\n const activeChangesetName = await this.getActive();\n if (!activeChangesetName) {\n return; // No active changeset, nothing to track\n }\n\n const changeset = await this.manager.load(activeChangesetName);\n if (!changeset) {\n throw new Error(`Active changeset '${activeChangesetName}' not found`);\n }\n\n changeset.addChange(type, elementId, layerName, before, after);\n await this.manager.save(changeset);\n }\n\n /**\n * Check if a changeset is currently active\n */\n async isActive(): Promise<boolean> {\n const active = await this.getActive();\n return active !== null;\n }\n}\n"],
|
|
5
|
-
"mappings": "AAOA,SAAS,UAAU,WAAW,kBAAkB;AAChD,SAAS,wBAAwB;AAM3B,MAAO,uBAAsB;EACzB;EACA;EAER,YAAY,WAAiB;AAC3B,SAAK,aAAa,GAAG,SAAS,0BAC9B,KAAK,UAAU,IAAI,iBAAiB,SAAS;EAC/C;;;;EAKA,MAAM,YAAS;AACb,WAAM,MAAM,WAAW,KAAK,UAAU,MAGtB,MAAM,SAAS,KAAK,UAAU,GAC/B,KAAI,KAAM;EAC3B;;;;EAKA,MAAM,UAAU,eAAqB;AAGnC,QAAI,CADc,MAAM,KAAK,QAAQ,KAAK,aAAa;AAErD,YAAM,IAAI,MAAM,cAAc,aAAa,aAAa;AAE1D,UAAM,UAAU,KAAK,YAAY,aAAa;EAChD;;;;EAKA,MAAM,cAAW;AACf,IAAI,MAAM,WAAW,KAAK,UAAU,KAClC,MAAM,UAAU,KAAK,YAAY,EAAE;EAEvC;;;;;EAMA,MAAM,YACJ,MACA,WACA,WACA,QACA,OAA+B;AAE/B,UAAM,sBAAsB,MAAM,KAAK,UAAS;AAChD,QAAI,CAAC;AACH;AAGF,UAAM,YAAY,MAAM,KAAK,QAAQ,KAAK,mBAAmB;AAC7D,QAAI,CAAC;AACH,YAAM,IAAI,MAAM,qBAAqB,mBAAmB,aAAa;AAGvE,cAAU,UAAU,MAAM,WAAW,WAAW,QAAQ,KAAK,GAC7D,MAAM,KAAK,QAAQ,KAAK,SAAS;EACnC;;;;EAKA,MAAM,WAAQ;AAEZ,WADe,MAAM,KAAK,UAAS,MACjB;EACpB;;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|