@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
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
import { BaseIntegrationManager } from "./base-manager.js";
|
|
2
|
+
import { findProjectRoot } from "../utils/project-paths.js";
|
|
3
|
+
import { confirm, spinner, isCancel } from "@clack/prompts";
|
|
4
|
+
import ansis from "ansis";
|
|
5
|
+
import { join } from "node:path";
|
|
6
|
+
import { mkdir } from "node:fs/promises";
|
|
7
|
+
import { existsSync } from "node:fs";
|
|
8
|
+
class ClaudeIntegrationManager extends BaseIntegrationManager {
|
|
9
|
+
targetDir = ".claude";
|
|
10
|
+
versionFileName = ".dr-version";
|
|
11
|
+
integrationSourceDir = "claude_code";
|
|
12
|
+
/**
|
|
13
|
+
* Component configuration for Claude integration
|
|
14
|
+
* Extends BaseIntegrationManager with Claude-specific components.
|
|
15
|
+
*
|
|
16
|
+
* The `tracked` property controls whether a component is included in
|
|
17
|
+
* version file tracking. Only `tracked: false` needs to be explicit
|
|
18
|
+
* (for user-customizable components like templates). DR-owned components
|
|
19
|
+
* default to tracked: true (see isTrackedComponent check in base-manager.ts).
|
|
20
|
+
*
|
|
21
|
+
* DR-owned components (tracked: true or default) are monitored for updates.
|
|
22
|
+
* User-customizable components (tracked: false) are installed but not
|
|
23
|
+
* version-tracked to avoid conflicts with user modifications.
|
|
24
|
+
*/
|
|
25
|
+
components = {
|
|
26
|
+
reference_sheets: {
|
|
27
|
+
source: "reference_sheets",
|
|
28
|
+
target: "knowledge",
|
|
29
|
+
description: "Reference documentation for agents",
|
|
30
|
+
prefix: "dr-",
|
|
31
|
+
type: "files"
|
|
32
|
+
// tracked: true (default)
|
|
33
|
+
},
|
|
34
|
+
commands: {
|
|
35
|
+
source: "commands",
|
|
36
|
+
target: "commands",
|
|
37
|
+
description: "Slash commands for DR workflows",
|
|
38
|
+
prefix: "dr-",
|
|
39
|
+
type: "files"
|
|
40
|
+
// tracked: true (default)
|
|
41
|
+
},
|
|
42
|
+
agents: {
|
|
43
|
+
source: "agents",
|
|
44
|
+
target: "agents",
|
|
45
|
+
description: "Specialized sub-agent definitions",
|
|
46
|
+
prefix: "dr-",
|
|
47
|
+
type: "files"
|
|
48
|
+
// tracked: true (default)
|
|
49
|
+
},
|
|
50
|
+
skills: {
|
|
51
|
+
source: "skills",
|
|
52
|
+
target: "skills",
|
|
53
|
+
description: "Auto-activating capabilities",
|
|
54
|
+
prefix: "",
|
|
55
|
+
type: "dirs"
|
|
56
|
+
// tracked: true (default)
|
|
57
|
+
},
|
|
58
|
+
templates: {
|
|
59
|
+
source: "templates",
|
|
60
|
+
target: "templates",
|
|
61
|
+
description: "Customization templates and examples",
|
|
62
|
+
prefix: "",
|
|
63
|
+
type: "files",
|
|
64
|
+
tracked: !1
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Install Claude integration files
|
|
69
|
+
*
|
|
70
|
+
* Copies files from bundled source to .claude/ directory, prompting for
|
|
71
|
+
* confirmation if files already exist. Optionally filters to specific components.
|
|
72
|
+
*
|
|
73
|
+
* @param options Installation options
|
|
74
|
+
* @param options.components Optional list of component names to install
|
|
75
|
+
* @param options.force Skip confirmation prompts
|
|
76
|
+
*/
|
|
77
|
+
async install(options = {}) {
|
|
78
|
+
const projectRoot = await this.getProjectRoot();
|
|
79
|
+
this.targetDir = join(projectRoot, ".claude");
|
|
80
|
+
const { components = Object.keys(this.components), force = !1 } = options, invalid = components.filter((c) => !this.components[c]);
|
|
81
|
+
if (invalid.length > 0)
|
|
82
|
+
throw new Error(`Invalid components: ${invalid.join(", ")}
|
|
83
|
+
Valid: ${Object.keys(this.components).join(", ")}`);
|
|
84
|
+
if (await this.isInstalled() && !force) {
|
|
85
|
+
if (!(process.stdin.isTTY && process.stdout.isTTY))
|
|
86
|
+
throw new Error(`Interactive confirmation is not available in non-TTY environments.
|
|
87
|
+
Use --force to skip confirmation and proceed with installation`);
|
|
88
|
+
const response = await confirm({
|
|
89
|
+
message: "Claude integration already installed. Overwrite?"
|
|
90
|
+
});
|
|
91
|
+
if (isCancel(response) || !response) {
|
|
92
|
+
console.log(ansis.yellow("\u2717 Installation cancelled"));
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
await mkdir(this.targetDir, { recursive: !0 });
|
|
97
|
+
let totalInstalled = 0;
|
|
98
|
+
const spinnerObj = spinner();
|
|
99
|
+
spinnerObj.start("Installing components...");
|
|
100
|
+
try {
|
|
101
|
+
for (const componentName of components) {
|
|
102
|
+
const count = await this.installComponent(componentName, force);
|
|
103
|
+
totalInstalled += count;
|
|
104
|
+
}
|
|
105
|
+
spinnerObj.stop("Installation complete");
|
|
106
|
+
const cliVersion = await this.getCliVersion();
|
|
107
|
+
await this.updateVersionFile(cliVersion), console.log(ansis.green("\u2713 Claude integration installed successfully!")), console.log(ansis.green(" Installed " + totalInstalled + " files")), this.printNextSteps();
|
|
108
|
+
} catch (error) {
|
|
109
|
+
throw spinnerObj.stop("Installation failed"), error;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Upgrade installed Claude integration files
|
|
114
|
+
*
|
|
115
|
+
* Detects file changes, shows a summary, and applies upgrades with optional
|
|
116
|
+
* dry-run mode to preview changes without applying them.
|
|
117
|
+
*
|
|
118
|
+
* @param options Upgrade options
|
|
119
|
+
* @param options.dryRun Preview changes without applying
|
|
120
|
+
* @param options.force Skip confirmation prompts and overwrite conflict/user-modified files
|
|
121
|
+
*/
|
|
122
|
+
async upgrade(options = {}) {
|
|
123
|
+
const projectRoot = await this.getProjectRoot();
|
|
124
|
+
this.targetDir = join(projectRoot, ".claude");
|
|
125
|
+
const { dryRun = !1, force = !1 } = options;
|
|
126
|
+
if (!await this.isInstalled()) {
|
|
127
|
+
console.log(ansis.yellow("\u26A0 Claude integration not installed")), console.log(ansis.dim("Run: dr claude install"));
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
const versionData = await this.loadVersionFile();
|
|
131
|
+
if (!versionData)
|
|
132
|
+
throw new Error("Version file corrupted. Run: dr claude install");
|
|
133
|
+
let totalChanges = 0;
|
|
134
|
+
const changes = [], unknownComponents = /* @__PURE__ */ new Set();
|
|
135
|
+
for (const componentName of Object.keys(versionData.components || {})) {
|
|
136
|
+
const config = this.components[componentName];
|
|
137
|
+
if (!config) {
|
|
138
|
+
unknownComponents.add(componentName), console.warn(ansis.yellow(`\u26A0 Unknown component in version file: ${componentName}. Skipping.`));
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
if (!this.isTrackedComponent(componentName))
|
|
142
|
+
continue;
|
|
143
|
+
const targetPath = join(this.targetDir, config.target);
|
|
144
|
+
if (!existsSync(targetPath))
|
|
145
|
+
continue;
|
|
146
|
+
const componentChanges = await this.checkUpdates(componentName, versionData);
|
|
147
|
+
for (const change of componentChanges) {
|
|
148
|
+
const status = this.changeTypeToStatus(change.changeType), action = force && (change.changeType === "conflict" || change.changeType === "user-modified") ? "Overwrite" : this.changeTypeToAction(change.changeType);
|
|
149
|
+
changes.push({
|
|
150
|
+
file: change.component + "/" + change.path,
|
|
151
|
+
status,
|
|
152
|
+
action
|
|
153
|
+
}), totalChanges++;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
const obsolete = await this.detectObsoleteFiles();
|
|
157
|
+
for (const file of obsolete)
|
|
158
|
+
changes.push({
|
|
159
|
+
file: file.component + "/" + file.path,
|
|
160
|
+
status: "Obsolete",
|
|
161
|
+
action: "Remove"
|
|
162
|
+
}), totalChanges++;
|
|
163
|
+
if (totalChanges === 0) {
|
|
164
|
+
console.log(ansis.green("\u2713 All files are up to date"));
|
|
165
|
+
const cliVersion = await this.getCliVersion();
|
|
166
|
+
versionData.version !== cliVersion && (await this.updateVersionFile(cliVersion), console.log(ansis.green("\u2713 Version updated to " + cliVersion)));
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
console.log(ansis.bold(`
|
|
170
|
+
Planned Changes:`));
|
|
171
|
+
for (const change of changes) {
|
|
172
|
+
const statusColor = change.status === "Obsolete" ? ansis.yellow : ansis.cyan, actionColor = change.action === "Remove" ? ansis.red : ansis.green;
|
|
173
|
+
console.log(" " + statusColor(change.status.padEnd(10)) + " " + change.file + " " + actionColor(change.action));
|
|
174
|
+
}
|
|
175
|
+
if (dryRun) {
|
|
176
|
+
console.log(ansis.yellow(`
|
|
177
|
+
Dry run - no changes applied`));
|
|
178
|
+
return;
|
|
179
|
+
}
|
|
180
|
+
if (!changes.some((c) => c.action !== "Skip")) {
|
|
181
|
+
console.log(ansis.yellow("\u26A0 No changes to apply (all changes are skipped or conflicts)"));
|
|
182
|
+
return;
|
|
183
|
+
}
|
|
184
|
+
if (!force) {
|
|
185
|
+
if (!(process.stdin.isTTY && process.stdout.isTTY))
|
|
186
|
+
throw new Error(`Interactive confirmation is not available in non-TTY environments.
|
|
187
|
+
Use --force to skip confirmation and proceed with upgrade`);
|
|
188
|
+
const response = await confirm({
|
|
189
|
+
message: "Apply upgrades?"
|
|
190
|
+
});
|
|
191
|
+
if (isCancel(response) || !response) {
|
|
192
|
+
console.log(ansis.yellow("\u2717 Upgrade cancelled"));
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
const spinnerObj = spinner();
|
|
197
|
+
spinnerObj.start("Applying upgrades...");
|
|
198
|
+
try {
|
|
199
|
+
for (const componentName of Object.keys(versionData.components || {})) {
|
|
200
|
+
if (unknownComponents.has(componentName))
|
|
201
|
+
continue;
|
|
202
|
+
const config = this.components[componentName];
|
|
203
|
+
if (!config || !this.isTrackedComponent(componentName))
|
|
204
|
+
continue;
|
|
205
|
+
const targetPath = join(this.targetDir, config.target);
|
|
206
|
+
existsSync(targetPath) && await this.installComponent(componentName, force);
|
|
207
|
+
}
|
|
208
|
+
await this.removeObsoleteFiles(), spinnerObj.stop("Upgrades applied");
|
|
209
|
+
const cliVersion = await this.getCliVersion();
|
|
210
|
+
await this.updateVersionFile(cliVersion), console.log(ansis.green("\u2713 Upgrade completed successfully!"));
|
|
211
|
+
} catch (error) {
|
|
212
|
+
throw spinnerObj.stop("Upgrade failed"), error;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Remove Claude integration files
|
|
217
|
+
*
|
|
218
|
+
* Removes files and the version file. Optionally filters to specific components.
|
|
219
|
+
*
|
|
220
|
+
* @param options Remove options
|
|
221
|
+
* @param options.components Optional list of component names to remove
|
|
222
|
+
* @param options.force Skip confirmation prompts
|
|
223
|
+
*/
|
|
224
|
+
async remove(options = {}) {
|
|
225
|
+
const projectRoot = await this.getProjectRoot();
|
|
226
|
+
this.targetDir = join(projectRoot, ".claude");
|
|
227
|
+
const { components = Object.keys(this.components), force = !1 } = options;
|
|
228
|
+
if (!await this.isInstalled()) {
|
|
229
|
+
console.log(ansis.yellow("\u26A0 Claude integration not installed"));
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
if (!force) {
|
|
233
|
+
if (!(process.stdin.isTTY && process.stdout.isTTY))
|
|
234
|
+
throw new Error(`Interactive confirmation is not available in non-TTY environments.
|
|
235
|
+
Use --force to skip confirmation and proceed with removal`);
|
|
236
|
+
console.log(ansis.yellow("This will remove: " + components.join(", ")));
|
|
237
|
+
const response = await confirm({
|
|
238
|
+
message: "Continue?"
|
|
239
|
+
});
|
|
240
|
+
if (isCancel(response) || !response) {
|
|
241
|
+
console.log(ansis.yellow("\u2717 Removal cancelled"));
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
const spinnerObj = spinner();
|
|
246
|
+
spinnerObj.start("Removing files...");
|
|
247
|
+
try {
|
|
248
|
+
const fs = await import("node:fs/promises"), { rmSync } = await import("node:fs");
|
|
249
|
+
let removedCount = 0;
|
|
250
|
+
for (const componentName of components) {
|
|
251
|
+
const config = this.components[componentName];
|
|
252
|
+
if (!config)
|
|
253
|
+
continue;
|
|
254
|
+
const targetPath = join(this.targetDir, config.target);
|
|
255
|
+
existsSync(targetPath) && (rmSync(targetPath, { recursive: !0, force: !0 }), removedCount++);
|
|
256
|
+
}
|
|
257
|
+
if (components.length === Object.keys(this.components).length) {
|
|
258
|
+
const versionFile = join(this.targetDir, this.versionFileName);
|
|
259
|
+
existsSync(versionFile) && await fs.unlink(versionFile);
|
|
260
|
+
}
|
|
261
|
+
spinnerObj.stop("Removal complete"), console.log(ansis.green("\u2713 Removed " + removedCount + " component(s) successfully"));
|
|
262
|
+
} catch (error) {
|
|
263
|
+
throw spinnerObj.stop("Removal failed"), error;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Display installation status
|
|
268
|
+
*
|
|
269
|
+
* Shows what's installed, which files are modified, and version information.
|
|
270
|
+
*/
|
|
271
|
+
async status() {
|
|
272
|
+
const projectRoot = await this.getProjectRoot();
|
|
273
|
+
if (this.targetDir = join(projectRoot, ".claude"), !await this.isInstalled()) {
|
|
274
|
+
console.log(ansis.yellow("Claude integration not installed")), console.log(ansis.dim("Run: dr claude install"));
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
const versionData = await this.loadVersionFile();
|
|
278
|
+
if (!versionData) {
|
|
279
|
+
console.log(ansis.red("\u2717 Version file corrupted"));
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
console.log(ansis.bold(`
|
|
283
|
+
Installation Status`)), console.log("Version: " + ansis.cyan(versionData.version)), console.log("Installed: " + ansis.cyan(new Date(versionData.installed_at).toLocaleString())), console.log(""), console.log(ansis.bold("Components:"));
|
|
284
|
+
for (const [componentName] of Object.entries(this.components)) {
|
|
285
|
+
const files = versionData.components[componentName] || {}, fileCount = Object.keys(files).length, status = fileCount > 0 ? ansis.green("\u2713") : ansis.dim("-");
|
|
286
|
+
console.log(" " + status + " " + componentName.padEnd(20) + " " + fileCount + " files");
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* List available components
|
|
291
|
+
*
|
|
292
|
+
* Shows all components that can be installed along with descriptions.
|
|
293
|
+
*/
|
|
294
|
+
async list() {
|
|
295
|
+
console.log(ansis.bold(`
|
|
296
|
+
Available Components:`)), console.log("");
|
|
297
|
+
for (const [name, config] of Object.entries(this.components))
|
|
298
|
+
console.log(ansis.cyan(name)), console.log(ansis.dim(" " + config.description)), console.log("");
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Get the project root directory
|
|
302
|
+
*
|
|
303
|
+
* @returns Absolute path to project root
|
|
304
|
+
* @throws Error if no project found
|
|
305
|
+
*/
|
|
306
|
+
async getProjectRoot() {
|
|
307
|
+
const root = await findProjectRoot();
|
|
308
|
+
if (!root)
|
|
309
|
+
throw new Error('No DR project found. Run "dr init" to create a new project');
|
|
310
|
+
return root;
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Convert change type to human-readable status
|
|
314
|
+
*/
|
|
315
|
+
changeTypeToStatus(changeType) {
|
|
316
|
+
switch (changeType) {
|
|
317
|
+
case "added":
|
|
318
|
+
return "New";
|
|
319
|
+
case "modified":
|
|
320
|
+
return "Updated";
|
|
321
|
+
case "user-modified":
|
|
322
|
+
return "Modified";
|
|
323
|
+
case "conflict":
|
|
324
|
+
return "Conflict";
|
|
325
|
+
case "deleted":
|
|
326
|
+
return "Removed";
|
|
327
|
+
default:
|
|
328
|
+
return changeType;
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Convert change type to action
|
|
333
|
+
*/
|
|
334
|
+
changeTypeToAction(changeType) {
|
|
335
|
+
switch (changeType) {
|
|
336
|
+
case "added":
|
|
337
|
+
case "modified":
|
|
338
|
+
case "deleted":
|
|
339
|
+
return "Update";
|
|
340
|
+
case "user-modified":
|
|
341
|
+
return "Skip";
|
|
342
|
+
case "conflict":
|
|
343
|
+
return "Skip";
|
|
344
|
+
default:
|
|
345
|
+
return "Update";
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
/**
|
|
349
|
+
* Print helpful next steps after installation
|
|
350
|
+
*/
|
|
351
|
+
printNextSteps() {
|
|
352
|
+
console.log(ansis.bold(`
|
|
353
|
+
Next steps:`)), console.log("1. Reference sheets available in: .claude/knowledge/"), console.log("2. Try slash commands: /dr-init, /dr-model"), console.log("3. Run: dr claude status"), console.log(ansis.dim(`
|
|
354
|
+
Note: Restart Claude Code to load new files`));
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
export {
|
|
358
|
+
ClaudeIntegrationManager
|
|
359
|
+
};
|
|
360
|
+
//# sourceMappingURL=claude-manager.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/integrations/claude-manager.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Claude Code Integration Manager\n *\n * Manages installation, updates, and removal of Claude Code integration files.\n * Extends the base integration manager with Claude-specific configuration and behavior.\n *\n * Handles 5 component types:\n * - reference_sheets: Knowledge base files (.md files in knowledge/)\n * - commands: Slash commands (.md files in commands/)\n * - agents: Specialized agents (.md files in agents/)\n * - skills: Auto-activating capabilities (directories with SKILL.md)\n * - templates: Customization templates (mixed file types)\n */\n\nimport { BaseIntegrationManager } from \"./base-manager.js\";\nimport { ComponentConfig } from \"./types.js\";\nimport { findProjectRoot } from \"../utils/project-paths.js\";\nimport { confirm, spinner, isCancel } from \"@clack/prompts\";\nimport ansis from \"ansis\";\nimport { join } from \"node:path\";\nimport { mkdir } from \"node:fs/promises\";\nimport { existsSync } from \"node:fs\";\n\n/**\n * Claude Code Integration Manager\n *\n * Manages installation and updating of Claude Code integration files in .claude/ directory\n */\nexport class ClaudeIntegrationManager extends BaseIntegrationManager {\n protected targetDir: string = \".claude\";\n protected readonly versionFileName = \".dr-version\";\n protected readonly integrationSourceDir = \"claude_code\";\n\n /**\n * Component configuration for Claude integration\n * Extends BaseIntegrationManager with Claude-specific components.\n *\n * The `tracked` property controls whether a component is included in\n * version file tracking. Only `tracked: false` needs to be explicit\n * (for user-customizable components like templates). DR-owned components\n * default to tracked: true (see isTrackedComponent check in base-manager.ts).\n *\n * DR-owned components (tracked: true or default) are monitored for updates.\n * User-customizable components (tracked: false) are installed but not\n * version-tracked to avoid conflicts with user modifications.\n */\n protected readonly components: Record<string, ComponentConfig> = {\n reference_sheets: {\n source: \"reference_sheets\",\n target: \"knowledge\",\n description: \"Reference documentation for agents\",\n prefix: \"dr-\",\n type: \"files\",\n // tracked: true (default)\n },\n commands: {\n source: \"commands\",\n target: \"commands\",\n description: \"Slash commands for DR workflows\",\n prefix: \"dr-\",\n type: \"files\",\n // tracked: true (default)\n },\n agents: {\n source: \"agents\",\n target: \"agents\",\n description: \"Specialized sub-agent definitions\",\n prefix: \"dr-\",\n type: \"files\",\n // tracked: true (default)\n },\n skills: {\n source: \"skills\",\n target: \"skills\",\n description: \"Auto-activating capabilities\",\n prefix: \"\",\n type: \"dirs\",\n // tracked: true (default)\n },\n templates: {\n source: \"templates\",\n target: \"templates\",\n description: \"Customization templates and examples\",\n prefix: \"\",\n type: \"files\",\n tracked: false,\n },\n };\n\n /**\n * Install Claude integration files\n *\n * Copies files from bundled source to .claude/ directory, prompting for\n * confirmation if files already exist. Optionally filters to specific components.\n *\n * @param options Installation options\n * @param options.components Optional list of component names to install\n * @param options.force Skip confirmation prompts\n */\n async install(\n options: {\n components?: string[];\n force?: boolean;\n } = {}\n ): Promise<void> {\n const projectRoot = await this.getProjectRoot();\n this.targetDir = join(projectRoot, \".claude\");\n\n const { components = Object.keys(this.components), force = false } = options;\n\n // Validate components\n const invalid = components.filter((c) => !this.components[c]);\n if (invalid.length > 0) {\n throw new Error(\n `Invalid components: ${invalid.join(\", \")}\\n` +\n `Valid: ${Object.keys(this.components).join(\", \")}`\n );\n }\n\n // Check if already installed\n if (await this.isInstalled()) {\n if (!force) {\n // Check for non-TTY only when we need confirmation\n const isInteractive = process.stdin.isTTY && process.stdout.isTTY;\n if (!isInteractive) {\n throw new Error(\n \"Interactive confirmation is not available in non-TTY environments.\\n\" +\n \"Use --force to skip confirmation and proceed with installation\"\n );\n }\n\n const response = await confirm({\n message: \"Claude integration already installed. Overwrite?\",\n });\n if (isCancel(response) || !response) {\n console.log(ansis.yellow(\"\u2717 Installation cancelled\"));\n return;\n }\n }\n }\n\n // Create .claude directory\n await mkdir(this.targetDir, { recursive: true });\n\n // Install components\n let totalInstalled = 0;\n const spinnerObj = spinner();\n spinnerObj.start(\"Installing components...\");\n\n try {\n for (const componentName of components) {\n const count = await this.installComponent(componentName, force);\n totalInstalled += count;\n }\n\n spinnerObj.stop(\"Installation complete\");\n\n // Update version file\n const cliVersion = await this.getCliVersion();\n await this.updateVersionFile(cliVersion);\n\n console.log(ansis.green(\"\u2713 Claude integration installed successfully!\"));\n console.log(ansis.green(\" Installed \" + totalInstalled + \" files\"));\n\n // Print next steps\n this.printNextSteps();\n } catch (error) {\n spinnerObj.stop(\"Installation failed\");\n throw error;\n }\n }\n\n /**\n * Upgrade installed Claude integration files\n *\n * Detects file changes, shows a summary, and applies upgrades with optional\n * dry-run mode to preview changes without applying them.\n *\n * @param options Upgrade options\n * @param options.dryRun Preview changes without applying\n * @param options.force Skip confirmation prompts and overwrite conflict/user-modified files\n */\n async upgrade(\n options: {\n dryRun?: boolean;\n force?: boolean;\n } = {}\n ): Promise<void> {\n const projectRoot = await this.getProjectRoot();\n this.targetDir = join(projectRoot, \".claude\");\n\n const { dryRun = false, force = false } = options;\n\n // Check if installed\n if (!(await this.isInstalled())) {\n console.log(ansis.yellow(\"\u26A0 Claude integration not installed\"));\n console.log(ansis.dim(\"Run: dr claude install\"));\n return;\n }\n\n // Load version file\n const versionData = await this.loadVersionFile();\n if (!versionData) {\n throw new Error(\"Version file corrupted. Run: dr claude install\");\n }\n\n // Check for updates\n let totalChanges = 0;\n const changes: Array<{ file: string; status: string; action: string }> = [];\n const unknownComponents = new Set<string>();\n\n // Only check components that are currently installed (have actual files in target directory)\n for (const componentName of Object.keys(versionData.components || {})) {\n const config = this.components[componentName];\n\n // Track unknown components (e.g., if CLI was updated and a component was removed)\n if (!config) {\n unknownComponents.add(componentName);\n console.warn(\n ansis.yellow(`\u26A0 Unknown component in version file: ${componentName}. Skipping.`)\n );\n continue;\n }\n\n // Skip non-tracked components (user-customizable)\n if (!this.isTrackedComponent(componentName)) {\n continue;\n }\n\n const targetPath = join(this.targetDir, config.target);\n\n // Only check components that have files in the target directory\n if (!existsSync(targetPath)) {\n continue;\n }\n\n const componentChanges = await this.checkUpdates(componentName, versionData);\n\n for (const change of componentChanges) {\n const status = this.changeTypeToStatus(change.changeType);\n // When force=true, conflicts and user-modified files are overwritten rather than skipped\n const action =\n force && (change.changeType === \"conflict\" || change.changeType === \"user-modified\")\n ? \"Overwrite\"\n : this.changeTypeToAction(change.changeType);\n changes.push({\n file: change.component + \"/\" + change.path,\n status,\n action,\n });\n totalChanges++;\n }\n }\n\n // Check for obsolete files\n const obsolete = await this.detectObsoleteFiles();\n for (const file of obsolete) {\n changes.push({\n file: file.component + \"/\" + file.path,\n status: \"Obsolete\",\n action: \"Remove\",\n });\n totalChanges++;\n }\n\n // If no changes, still update version file if needed\n if (totalChanges === 0) {\n console.log(ansis.green(\"\u2713 All files are up to date\"));\n\n // Update version file even if no file changes\n const cliVersion = await this.getCliVersion();\n if (versionData.version !== cliVersion) {\n await this.updateVersionFile(cliVersion);\n console.log(ansis.green(\"\u2713 Version updated to \" + cliVersion));\n }\n return;\n }\n\n // Show changes\n console.log(ansis.bold(\"\\nPlanned Changes:\"));\n for (const change of changes) {\n const statusColor = change.status === \"Obsolete\" ? ansis.yellow : ansis.cyan;\n const actionColor = change.action === \"Remove\" ? ansis.red : ansis.green;\n console.log(\n \" \" +\n statusColor(change.status.padEnd(10)) +\n \" \" +\n change.file +\n \" \" +\n actionColor(change.action)\n );\n }\n\n if (dryRun) {\n console.log(ansis.yellow(\"\\nDry run - no changes applied\"));\n return;\n }\n\n // Check if there are actual changes to apply (not just skipped changes)\n const hasActualChanges = changes.some((c) => c.action !== \"Skip\");\n\n // If no actual changes to apply, return early\n if (!hasActualChanges) {\n console.log(ansis.yellow(\"\u26A0 No changes to apply (all changes are skipped or conflicts)\"));\n return;\n }\n\n // Only ask for confirmation if there are real changes to apply\n if (!force) {\n const isInteractive = process.stdin.isTTY && process.stdout.isTTY;\n if (!isInteractive) {\n throw new Error(\n \"Interactive confirmation is not available in non-TTY environments.\\n\" +\n \"Use --force to skip confirmation and proceed with upgrade\"\n );\n }\n\n const response = await confirm({\n message: \"Apply upgrades?\",\n });\n if (isCancel(response) || !response) {\n console.log(ansis.yellow(\"\u2717 Upgrade cancelled\"));\n return;\n }\n }\n\n // Apply upgrades\n const spinnerObj = spinner();\n spinnerObj.start(\"Applying upgrades...\");\n\n try {\n // Only upgrade components that are currently installed (have actual files)\n for (const componentName of Object.keys(versionData.components || {})) {\n // Skip unknown components silently (already warned during detection phase)\n if (unknownComponents.has(componentName)) {\n continue;\n }\n\n const config = this.components[componentName];\n if (!config) {\n continue;\n }\n\n // Skip non-tracked components (user-customizable)\n if (!this.isTrackedComponent(componentName)) {\n continue;\n }\n\n const targetPath = join(this.targetDir, config.target);\n\n // Only upgrade components that have files in the target directory\n if (!existsSync(targetPath)) {\n continue;\n }\n\n await this.installComponent(componentName, force);\n }\n\n // Remove obsolete files\n await this.removeObsoleteFiles();\n\n spinnerObj.stop(\"Upgrades applied\");\n\n // Update version file\n const cliVersion = await this.getCliVersion();\n await this.updateVersionFile(cliVersion);\n\n console.log(ansis.green(\"\u2713 Upgrade completed successfully!\"));\n } catch (error) {\n spinnerObj.stop(\"Upgrade failed\");\n throw error;\n }\n }\n\n /**\n * Remove Claude integration files\n *\n * Removes files and the version file. Optionally filters to specific components.\n *\n * @param options Remove options\n * @param options.components Optional list of component names to remove\n * @param options.force Skip confirmation prompts\n */\n async remove(\n options: {\n components?: string[];\n force?: boolean;\n } = {}\n ): Promise<void> {\n const projectRoot = await this.getProjectRoot();\n this.targetDir = join(projectRoot, \".claude\");\n\n const { components = Object.keys(this.components), force = false } = options;\n\n // Check if installed\n if (!(await this.isInstalled())) {\n console.log(ansis.yellow(\"\u26A0 Claude integration not installed\"));\n return;\n }\n\n // Ask for confirmation (check for non-TTY only when we need confirmation)\n if (!force) {\n const isInteractive = process.stdin.isTTY && process.stdout.isTTY;\n if (!isInteractive) {\n throw new Error(\n \"Interactive confirmation is not available in non-TTY environments.\\n\" +\n \"Use --force to skip confirmation and proceed with removal\"\n );\n }\n\n console.log(ansis.yellow(\"This will remove: \" + components.join(\", \")));\n const response = await confirm({\n message: \"Continue?\",\n });\n if (isCancel(response) || !response) {\n console.log(ansis.yellow(\"\u2717 Removal cancelled\"));\n return;\n }\n }\n\n // Remove components\n const spinnerObj = spinner();\n spinnerObj.start(\"Removing files...\");\n\n try {\n const fs = await import(\"node:fs/promises\");\n const { rmSync } = await import(\"node:fs\");\n\n let removedCount = 0;\n\n for (const componentName of components) {\n const config = this.components[componentName];\n if (!config) continue;\n\n const targetPath = join(this.targetDir, config.target);\n if (existsSync(targetPath)) {\n rmSync(targetPath, { recursive: true, force: true });\n removedCount++;\n }\n }\n\n // Remove version file if all components were removed\n if (components.length === Object.keys(this.components).length) {\n const versionFile = join(this.targetDir, this.versionFileName);\n if (existsSync(versionFile)) {\n await fs.unlink(versionFile);\n }\n }\n\n spinnerObj.stop(\"Removal complete\");\n console.log(ansis.green(\"\u2713 Removed \" + removedCount + \" component(s) successfully\"));\n } catch (error) {\n spinnerObj.stop(\"Removal failed\");\n throw error;\n }\n }\n\n /**\n * Display installation status\n *\n * Shows what's installed, which files are modified, and version information.\n */\n async status(): Promise<void> {\n const projectRoot = await this.getProjectRoot();\n this.targetDir = join(projectRoot, \".claude\");\n\n if (!(await this.isInstalled())) {\n console.log(ansis.yellow(\"Claude integration not installed\"));\n console.log(ansis.dim(\"Run: dr claude install\"));\n return;\n }\n\n const versionData = await this.loadVersionFile();\n if (!versionData) {\n console.log(ansis.red(\"\u2717 Version file corrupted\"));\n return;\n }\n\n console.log(ansis.bold(\"\\nInstallation Status\"));\n console.log(\"Version: \" + ansis.cyan(versionData.version));\n console.log(\"Installed: \" + ansis.cyan(new Date(versionData.installed_at).toLocaleString()));\n console.log(\"\");\n\n // Show component table\n console.log(ansis.bold(\"Components:\"));\n for (const [componentName] of Object.entries(this.components)) {\n const files = versionData.components[componentName] || {};\n const fileCount = Object.keys(files).length;\n const status = fileCount > 0 ? ansis.green(\"\u2713\") : ansis.dim(\"-\");\n\n console.log(\" \" + status + \" \" + componentName.padEnd(20) + \" \" + fileCount + \" files\");\n }\n }\n\n /**\n * List available components\n *\n * Shows all components that can be installed along with descriptions.\n */\n async list(): Promise<void> {\n console.log(ansis.bold(\"\\nAvailable Components:\"));\n console.log(\"\");\n\n for (const [name, config] of Object.entries(this.components)) {\n console.log(ansis.cyan(name));\n console.log(ansis.dim(\" \" + config.description));\n console.log(\"\");\n }\n }\n\n /**\n * Get the project root directory\n *\n * @returns Absolute path to project root\n * @throws Error if no project found\n */\n private async getProjectRoot(): Promise<string> {\n const root = await findProjectRoot();\n if (!root) {\n throw new Error('No DR project found. Run \"dr init\" to create a new project');\n }\n return root;\n }\n\n /**\n * Convert change type to human-readable status\n */\n private changeTypeToStatus(changeType: string): string {\n switch (changeType) {\n case \"added\":\n return \"New\";\n case \"modified\":\n return \"Updated\";\n case \"user-modified\":\n return \"Modified\";\n case \"conflict\":\n return \"Conflict\";\n case \"deleted\":\n return \"Removed\";\n default:\n return changeType;\n }\n }\n\n /**\n * Convert change type to action\n */\n private changeTypeToAction(changeType: string): string {\n switch (changeType) {\n case \"added\":\n case \"modified\":\n case \"deleted\":\n return \"Update\";\n case \"user-modified\":\n return \"Skip\";\n case \"conflict\":\n return \"Skip\";\n default:\n return \"Update\";\n }\n }\n\n /**\n * Print helpful next steps after installation\n */\n private printNextSteps(): void {\n console.log(ansis.bold(\"\\nNext steps:\"));\n console.log(\"1. Reference sheets available in: .claude/knowledge/\");\n console.log(\"2. Try slash commands: /dr-init, /dr-model\");\n console.log(\"3. Run: dr claude status\");\n console.log(ansis.dim(\"\\nNote: Restart Claude Code to load new files\"));\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dr-advisor
|
|
3
|
+
description: Expert advisor for Documentation Robotics end users. Use this agent when users need guidance on modeling their systems, understanding validation results, choosing appropriate patterns, or learning DR best practices. This agent provides strategic architectural advice and helps users make informed decisions about their DR models.\n\n<example>\nContext: User is starting to model their system.\nuser: "I'm not sure which layer to put my REST API endpoints in"\nassistant: "Let me use the dr-advisor agent to explain the layer architecture and guide you to the right choice."\n<commentary>\nThe user needs architectural guidance about layer selection, so use the advisor agent to provide expert recommendations.\n</commentary>\n</example>\n\n<example>\nContext: User has validation errors they don't understand.\nuser: "I'm getting errors about cross-layer relationships, what does that mean?"\nassistant: "I'll use the dr-advisor agent to explain cross-layer relationships and help you understand and fix these errors."\n<commentary>\nThe user needs explanation of DR concepts and troubleshooting help, which is the advisor's specialty.\n</commentary>\n</example>\n\n<example>\nContext: User is exploring architectural options.\nuser: "Should I model this as a microservice or a component?"\nassistant: "Let me bring in the dr-advisor to discuss the architectural implications and help you decide."\n<commentary>\nThe user needs strategic architectural advice about modeling decisions.\n</commentary>\n</example>\n\n<example>\nContext: User wants to understand best practices.\nuser: "What's the best way to organize my business layer?"\nassistant: "I'll use the dr-advisor agent to explain best practices for business layer organization and patterns."\n<commentary>\nThe user is asking about best practices, which requires the advisor's expertise.\n</commentary>\n</example>
|
|
4
|
+
tools: Read, Grep, Glob, WebSearch, WebFetch, Skill
|
|
5
|
+
model: sonnet
|
|
6
|
+
color: blue
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
You are an expert advisor for **Documentation Robotics** end users, specializing in helping teams successfully model, validate, and maintain their architecture using the DR specification. Your role is to guide users through architectural decisions, explain concepts clearly, and ensure they follow best practices while building high-quality models.
|
|
10
|
+
|
|
11
|
+
## Your Core Responsibilities
|
|
12
|
+
|
|
13
|
+
1. **Architectural Guidance**: Help users make informed decisions about:
|
|
14
|
+
- Which layer to use for different architectural elements
|
|
15
|
+
- How to structure elements within layers
|
|
16
|
+
- When to use cross-layer relationships vs intra-layer relationships
|
|
17
|
+
- How to model complex patterns (microservices, event-driven, etc.)
|
|
18
|
+
- Trade-offs between different modeling approaches
|
|
19
|
+
- Best practices for naming, organization, and structure
|
|
20
|
+
|
|
21
|
+
2. **Concept Explanation**: Provide clear explanations of:
|
|
22
|
+
- The 12-layer architecture and what each layer represents
|
|
23
|
+
- Cross-layer relationship patterns (A, B, C, D)
|
|
24
|
+
- Intra-layer relationship types (34 semantic predicates)
|
|
25
|
+
- The purpose and benefits of changesets
|
|
26
|
+
- How validation works and what errors mean
|
|
27
|
+
- The relationship catalog and how to use it
|
|
28
|
+
- Link patterns and when to use each
|
|
29
|
+
|
|
30
|
+
3. **Troubleshooting & Validation**: Help users:
|
|
31
|
+
- Understand validation errors and warnings
|
|
32
|
+
- Fix common modeling mistakes
|
|
33
|
+
- Resolve broken relationships
|
|
34
|
+
- Improve model quality scores
|
|
35
|
+
- Identify missing traceability
|
|
36
|
+
- Detect architectural anti-patterns
|
|
37
|
+
|
|
38
|
+
4. **Workflow Guidance**: Guide users through:
|
|
39
|
+
- Starting new models (what to create first)
|
|
40
|
+
- Extracting models from existing code
|
|
41
|
+
- Exploring ideas safely with changesets
|
|
42
|
+
- Validating progressively (not waiting until the end)
|
|
43
|
+
- Documenting their architecture
|
|
44
|
+
- Migrating between spec versions
|
|
45
|
+
|
|
46
|
+
## Your Operational Approach
|
|
47
|
+
|
|
48
|
+
**When Users Ask "Which Layer?"**:
|
|
49
|
+
|
|
50
|
+
1. Ask clarifying questions about what they're modeling
|
|
51
|
+
2. Explain the purpose of candidate layers
|
|
52
|
+
3. Show examples from each layer
|
|
53
|
+
4. Recommend the best fit with reasoning
|
|
54
|
+
5. Explain the implications of the choice
|
|
55
|
+
6. Suggest related elements they might need in other layers
|
|
56
|
+
|
|
57
|
+
**When Users Have Validation Errors**:
|
|
58
|
+
|
|
59
|
+
1. First, understand what they were trying to accomplish
|
|
60
|
+
2. Explain what the error means in plain language
|
|
61
|
+
3. Show the root cause (not just the symptom)
|
|
62
|
+
4. Provide specific, actionable fixes
|
|
63
|
+
5. Explain how to avoid similar errors in the future
|
|
64
|
+
6. If errors are complex, suggest using changesets to experiment
|
|
65
|
+
|
|
66
|
+
**When Users Ask About Patterns**:
|
|
67
|
+
|
|
68
|
+
1. Understand their specific use case and constraints
|
|
69
|
+
2. Explain multiple viable approaches
|
|
70
|
+
3. Compare trade-offs (complexity vs. completeness vs. maintainability)
|
|
71
|
+
4. Recommend the best fit for their context
|
|
72
|
+
5. Show concrete examples from the spec or common patterns
|
|
73
|
+
6. Warn about pitfalls or common mistakes
|
|
74
|
+
|
|
75
|
+
**When Users Need Strategic Advice**:
|
|
76
|
+
|
|
77
|
+
1. Consider the full context of their system
|
|
78
|
+
2. Think holistically about dependencies and impacts
|
|
79
|
+
3. Balance ideal architecture with practical constraints
|
|
80
|
+
4. Recommend phased approaches for complex changes
|
|
81
|
+
5. Suggest validation checkpoints along the way
|
|
82
|
+
6. Help them prioritize what to model first
|
|
83
|
+
|
|
84
|
+
## Response Guidelines
|
|
85
|
+
|
|
86
|
+
**Be Pedagogical**: Every interaction is a teaching opportunity
|
|
87
|
+
|
|
88
|
+
- Explain the "why" behind recommendations
|
|
89
|
+
- Connect concepts to familiar architectural patterns
|
|
90
|
+
- Use analogies when helpful
|
|
91
|
+
- Build understanding progressively
|
|
92
|
+
|
|
93
|
+
**Be Practical**: Ground advice in real-world usage
|
|
94
|
+
|
|
95
|
+
- Provide concrete examples
|
|
96
|
+
- Show actual commands to run
|
|
97
|
+
- Suggest validation steps
|
|
98
|
+
- Give patterns they can copy
|
|
99
|
+
|
|
100
|
+
**Be Precise**: Use correct DR terminology
|
|
101
|
+
|
|
102
|
+
- 12 layers, not "tiers" or "levels"
|
|
103
|
+
- "Relationships" not "links" (post-v0.8.2)
|
|
104
|
+
- Specific entity types (not generic terms)
|
|
105
|
+
- Correct field names and formats
|
|
106
|
+
|
|
107
|
+
**Be Comprehensive**: Cover all relevant aspects
|
|
108
|
+
|
|
109
|
+
- Don't just answer the immediate question
|
|
110
|
+
- Suggest related considerations
|
|
111
|
+
- Flag potential downstream impacts
|
|
112
|
+
- Recommend complementary actions
|
|
113
|
+
|
|
114
|
+
**Be Adaptive**: Match the user's expertise level
|
|
115
|
+
|
|
116
|
+
- Beginners: More explanation, simpler examples
|
|
117
|
+
- Intermediate: Focus on patterns and best practices
|
|
118
|
+
- Advanced: Discuss trade-offs and optimization
|
|
119
|
+
|
|
120
|
+
## Key Knowledge Areas
|
|
121
|
+
|
|
122
|
+
### The 12-Layer Architecture
|
|
123
|
+
|
|
124
|
+
```
|
|
125
|
+
01. Motivation - Goals, principles, requirements, constraints (WHY)
|
|
126
|
+
02. Business - Capabilities, processes, services, actors (WHAT)
|
|
127
|
+
03. Security - Roles, policies, threats, controls (WHO/PROTECTION)
|
|
128
|
+
04. Application - Components, services, interfaces (HOW)
|
|
129
|
+
05. Technology - Platforms, frameworks, infrastructure (WITH)
|
|
130
|
+
06. API - OpenAPI 3.0.3 specifications (CONTRACTS)
|
|
131
|
+
07. Data Model - JSON Schema Draft 7 structures (STRUCTURE)
|
|
132
|
+
08. Data Store - SQL DDL persistence (STORAGE)
|
|
133
|
+
09. UX - Three-Tier UI architecture (EXPERIENCE)
|
|
134
|
+
10. Navigation - Multi-modal routing (FLOW)
|
|
135
|
+
11. APM - OpenTelemetry observability (MONITORING)
|
|
136
|
+
12. Testing - ISP coverage model (VERIFICATION)
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Cross-Layer Relationship Patterns
|
|
140
|
+
|
|
141
|
+
- **Pattern A (X-Extensions)**: For OpenAPI/JSON Schema layers
|
|
142
|
+
- **Pattern B (Dot-Notation)**: For upward references
|
|
143
|
+
- **Pattern C (Nested Objects)**: For complex relationships
|
|
144
|
+
- **Pattern D (Direct Fields)**: Native spec fields
|
|
145
|
+
|
|
146
|
+
### Common Modeling Patterns
|
|
147
|
+
|
|
148
|
+
- **Microservices**: Span Business → Application → API → Data Model → Data Store
|
|
149
|
+
- **Event-Driven**: Use Application events, API webhooks, APM tracing
|
|
150
|
+
- **Three-Tier Web**: UX → Application → Data Store with Navigation
|
|
151
|
+
- **API-First**: Start with API layer, project to Application and Data Model
|
|
152
|
+
|
|
153
|
+
### Validation Best Practices
|
|
154
|
+
|
|
155
|
+
1. Validate early and often (not just at the end)
|
|
156
|
+
2. Use `--strict` for production models
|
|
157
|
+
3. Always validate relationships after structural changes
|
|
158
|
+
4. Fix high-confidence errors automatically
|
|
159
|
+
5. Review low-confidence fixes manually
|
|
160
|
+
6. Use changesets for experimental fixes
|
|
161
|
+
|
|
162
|
+
## Quality Assurance
|
|
163
|
+
|
|
164
|
+
Before giving advice:
|
|
165
|
+
|
|
166
|
+
- Verify your understanding matches current spec (v0.8.3)
|
|
167
|
+
- Consider the user's full context (not just the immediate question)
|
|
168
|
+
- Check for conflicts with other guidance you've given
|
|
169
|
+
- Ensure recommendations align with DR best practices
|
|
170
|
+
- Flag any assumptions you're making
|
|
171
|
+
|
|
172
|
+
After giving advice:
|
|
173
|
+
|
|
174
|
+
- Offer to clarify if needed
|
|
175
|
+
- Suggest validation steps to verify the advice worked
|
|
176
|
+
- Recommend related topics to explore
|
|
177
|
+
- Follow up on complex multi-step processes
|
|
178
|
+
|
|
179
|
+
## Communication Style
|
|
180
|
+
|
|
181
|
+
- **Lead with clarity**: State the answer/recommendation first, then explain
|
|
182
|
+
- **Use structure**: Organize responses with clear sections
|
|
183
|
+
- **Show examples**: Concrete code/YAML is better than abstract description
|
|
184
|
+
- **Be encouraging**: Reinforce good practices, gently correct mistakes
|
|
185
|
+
- **Stay focused**: Answer the question fully, but don't overwhelm with extras
|
|
186
|
+
- **Check understanding**: Ask if clarification is needed on complex topics
|
|
187
|
+
|
|
188
|
+
## Common User Scenarios
|
|
189
|
+
|
|
190
|
+
### "I'm new to DR, where do I start?"
|
|
191
|
+
|
|
192
|
+
1. Ask: are you documenting an existing codebase, or designing a new system?
|
|
193
|
+
2. **Existing codebase**: explain inside-out extraction (API/Data/Application first, Business/Motivation last — concrete layers ground the abstract ones)
|
|
194
|
+
3. **New system (greenfield)**: explain motivation layer first (goals/principles drive everything below)
|
|
195
|
+
4. Demonstrate validation and cross-layer relationships
|
|
196
|
+
5. Guide through one complete vertical slice
|
|
197
|
+
6. Suggest using dr-architect agent for ongoing work
|
|
198
|
+
|
|
199
|
+
### "My validation is failing with 50 errors"
|
|
200
|
+
|
|
201
|
+
1. Ask to see the validation output
|
|
202
|
+
2. Categorize errors by type
|
|
203
|
+
3. Identify patterns (not individual fixes)
|
|
204
|
+
4. Fix root causes first
|
|
205
|
+
5. Validate incrementally
|
|
206
|
+
6. Explain how to prevent in future
|
|
207
|
+
|
|
208
|
+
### "Should I model everything in my codebase?"
|
|
209
|
+
|
|
210
|
+
1. Explain "architecturally significant" concept
|
|
211
|
+
2. Focus on: critical services, public APIs, key data structures
|
|
212
|
+
3. Skip: utility functions, internal helpers, trivial components
|
|
213
|
+
4. Start small, grow organically
|
|
214
|
+
5. Quality over quantity
|
|
215
|
+
|
|
216
|
+
### "How do I link my API to my business goals?"
|
|
217
|
+
|
|
218
|
+
1. Show relationship patterns (B and C)
|
|
219
|
+
2. Explain traceability value
|
|
220
|
+
3. Provide concrete example
|
|
221
|
+
4. Walk through validation
|
|
222
|
+
5. Suggest related links to add
|
|
223
|
+
|
|
224
|
+
## Collaboration with Other Agents and Skills
|
|
225
|
+
|
|
226
|
+
You work alongside:
|
|
227
|
+
|
|
228
|
+
- **dr-architect**: The main implementation agent (you advise, it executes)
|
|
229
|
+
- **dr_engineering_guide skill**: Handles structured engineering guidance across three phases — requirements review (before coding), implementation guidance (how to structure code), and implementation critique (PR/code review). Activate this skill when users share code, ask "does this make sense?", "how should I implement X?", or "review my PR".
|
|
230
|
+
- **Layer-specific skills**: Auto-activate for detailed entity type info
|
|
231
|
+
- **Changeset reviewer**: Works with you on changeset quality
|
|
232
|
+
|
|
233
|
+
When to activate `dr_engineering_guide`:
|
|
234
|
+
|
|
235
|
+
- User describes a feature they want to build → Requirements Review mode
|
|
236
|
+
- User asks how to implement something → Implementation Guidance mode
|
|
237
|
+
- User shares code or a PR for review → Implementation Critique mode
|
|
238
|
+
|
|
239
|
+
When to hand off to dr-architect:
|
|
240
|
+
|
|
241
|
+
- User is ready to implement based on your advice
|
|
242
|
+
- Complex multi-step workflows need execution
|
|
243
|
+
- Actual CLI commands need to be run
|
|
244
|
+
- File modifications are needed
|
|
245
|
+
|
|
246
|
+
When to stay engaged:
|
|
247
|
+
|
|
248
|
+
- Strategic decisions need discussion
|
|
249
|
+
- Multiple options need evaluation
|
|
250
|
+
- User is learning and needs explanation
|
|
251
|
+
- Troubleshooting requires conceptual understanding
|
|
252
|
+
|
|
253
|
+
Your goal is to make users successful and confident with Documentation Robotics, ensuring they build high-quality, well-structured models that accurately represent their architecture and provide lasting value.
|