mcp-adr-analysis-server 2.1.9 → 2.1.20
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/README.md +55 -8
- package/dist/.tsbuildinfo +1 -1
- package/dist/src/index.d.ts +78 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1793 -577
- package/dist/src/index.js.map +1 -1
- package/dist/src/prompts/index.d.ts.map +1 -1
- package/dist/src/prompts/index.js +23 -6
- package/dist/src/prompts/index.js.map +1 -1
- package/dist/src/prompts/validated-pattern-prompts.d.ts +33 -0
- package/dist/src/prompts/validated-pattern-prompts.d.ts.map +1 -0
- package/dist/src/prompts/validated-pattern-prompts.js +337 -0
- package/dist/src/prompts/validated-pattern-prompts.js.map +1 -0
- package/dist/src/resources/adr-by-id-resource.d.ts +116 -0
- package/dist/src/resources/adr-by-id-resource.d.ts.map +1 -0
- package/dist/src/resources/adr-by-id-resource.js +213 -0
- package/dist/src/resources/adr-by-id-resource.js.map +1 -0
- package/dist/src/resources/code-quality-resource.d.ts +105 -0
- package/dist/src/resources/code-quality-resource.d.ts.map +1 -0
- package/dist/src/resources/code-quality-resource.js +282 -0
- package/dist/src/resources/code-quality-resource.js.map +1 -0
- package/dist/src/resources/deployment-history-resource.d.ts +214 -0
- package/dist/src/resources/deployment-history-resource.d.ts.map +1 -0
- package/dist/src/resources/deployment-history-resource.js +308 -0
- package/dist/src/resources/deployment-history-resource.js.map +1 -0
- package/dist/src/resources/deployment-status-resource.d.ts +256 -0
- package/dist/src/resources/deployment-status-resource.d.ts.map +1 -0
- package/dist/src/resources/deployment-status-resource.js +665 -0
- package/dist/src/resources/deployment-status-resource.js.map +1 -0
- package/dist/src/resources/environment-analysis-resource.d.ts +237 -0
- package/dist/src/resources/environment-analysis-resource.d.ts.map +1 -0
- package/dist/src/resources/environment-analysis-resource.js +646 -0
- package/dist/src/resources/environment-analysis-resource.js.map +1 -0
- package/dist/src/resources/index.d.ts +6 -2
- package/dist/src/resources/index.d.ts.map +1 -1
- package/dist/src/resources/index.js +247 -492
- package/dist/src/resources/index.js.map +1 -1
- package/dist/src/resources/memory-snapshots-resource.d.ts +180 -0
- package/dist/src/resources/memory-snapshots-resource.d.ts.map +1 -0
- package/dist/src/resources/memory-snapshots-resource.js +847 -0
- package/dist/src/resources/memory-snapshots-resource.js.map +1 -0
- package/dist/src/resources/pattern-base-code-by-platform-resource.d.ts +35 -0
- package/dist/src/resources/pattern-base-code-by-platform-resource.d.ts.map +1 -0
- package/dist/src/resources/pattern-base-code-by-platform-resource.js +72 -0
- package/dist/src/resources/pattern-base-code-by-platform-resource.js.map +1 -0
- package/dist/src/resources/pattern-by-name-resource.d.ts +53 -0
- package/dist/src/resources/pattern-by-name-resource.d.ts.map +1 -0
- package/dist/src/resources/pattern-by-name-resource.js +200 -0
- package/dist/src/resources/pattern-by-name-resource.js.map +1 -0
- package/dist/src/resources/pattern-sources-by-platform-resource.d.ts +26 -0
- package/dist/src/resources/pattern-sources-by-platform-resource.d.ts.map +1 -0
- package/dist/src/resources/pattern-sources-by-platform-resource.js +59 -0
- package/dist/src/resources/pattern-sources-by-platform-resource.js.map +1 -0
- package/dist/src/resources/project-metrics-resource.d.ts +180 -0
- package/dist/src/resources/project-metrics-resource.d.ts.map +1 -0
- package/dist/src/resources/project-metrics-resource.js +487 -0
- package/dist/src/resources/project-metrics-resource.js.map +1 -0
- package/dist/src/resources/project-status-resource.d.ts +75 -0
- package/dist/src/resources/project-status-resource.d.ts.map +1 -0
- package/dist/src/resources/project-status-resource.js +189 -0
- package/dist/src/resources/project-status-resource.js.map +1 -0
- package/dist/src/resources/research-by-topic-resource.d.ts +21 -0
- package/dist/src/resources/research-by-topic-resource.d.ts.map +1 -0
- package/dist/src/resources/research-by-topic-resource.js +125 -0
- package/dist/src/resources/research-by-topic-resource.js.map +1 -0
- package/dist/src/resources/research-index-resource.d.ts +100 -0
- package/dist/src/resources/research-index-resource.d.ts.map +1 -0
- package/dist/src/resources/research-index-resource.js +200 -0
- package/dist/src/resources/research-index-resource.js.map +1 -0
- package/dist/src/resources/resource-cache.d.ts +144 -0
- package/dist/src/resources/resource-cache.d.ts.map +1 -0
- package/dist/src/resources/resource-cache.js +316 -0
- package/dist/src/resources/resource-cache.js.map +1 -0
- package/dist/src/resources/resource-router.d.ts +45 -0
- package/dist/src/resources/resource-router.d.ts.map +1 -0
- package/dist/src/resources/resource-router.js +96 -0
- package/dist/src/resources/resource-router.js.map +1 -0
- package/dist/src/resources/rule-by-id-resource.d.ts +38 -0
- package/dist/src/resources/rule-by-id-resource.d.ts.map +1 -0
- package/dist/src/resources/rule-by-id-resource.js +104 -0
- package/dist/src/resources/rule-by-id-resource.js.map +1 -0
- package/dist/src/resources/rule-catalog-resource.d.ts +126 -0
- package/dist/src/resources/rule-catalog-resource.d.ts.map +1 -0
- package/dist/src/resources/rule-catalog-resource.js +224 -0
- package/dist/src/resources/rule-catalog-resource.js.map +1 -0
- package/dist/src/resources/rule-generation-resource.d.ts +80 -0
- package/dist/src/resources/rule-generation-resource.d.ts.map +1 -0
- package/dist/src/resources/rule-generation-resource.js +282 -0
- package/dist/src/resources/rule-generation-resource.js.map +1 -0
- package/dist/src/resources/technology-by-name-resource.d.ts +43 -0
- package/dist/src/resources/technology-by-name-resource.d.ts.map +1 -0
- package/dist/src/resources/technology-by-name-resource.js +176 -0
- package/dist/src/resources/technology-by-name-resource.js.map +1 -0
- package/dist/src/resources/todo-by-id-resource.d.ts +46 -0
- package/dist/src/resources/todo-by-id-resource.d.ts.map +1 -0
- package/dist/src/resources/todo-by-id-resource.js +192 -0
- package/dist/src/resources/todo-by-id-resource.js.map +1 -0
- package/dist/src/resources/todo-list-resource.d.ts +96 -0
- package/dist/src/resources/todo-list-resource.d.ts.map +1 -0
- package/dist/src/resources/todo-list-resource.js +209 -0
- package/dist/src/resources/todo-list-resource.js.map +1 -0
- package/dist/src/resources/validated-pattern-by-platform-resource.d.ts +14 -0
- package/dist/src/resources/validated-pattern-by-platform-resource.d.ts.map +1 -0
- package/dist/src/resources/validated-pattern-by-platform-resource.js +45 -0
- package/dist/src/resources/validated-pattern-by-platform-resource.js.map +1 -0
- package/dist/src/resources/validated-patterns-catalog-resource.d.ts +36 -0
- package/dist/src/resources/validated-patterns-catalog-resource.d.ts.map +1 -0
- package/dist/src/resources/validated-patterns-catalog-resource.js +57 -0
- package/dist/src/resources/validated-patterns-catalog-resource.js.map +1 -0
- package/dist/src/templates/domain-knowledge-templates.d.ts.map +1 -1
- package/dist/src/templates/domain-knowledge-templates.js +49 -49
- package/dist/src/templates/domain-knowledge-templates.js.map +1 -1
- package/dist/src/tools/adr-bootstrap-validation-tool.d.ts.map +1 -1
- package/dist/src/tools/adr-bootstrap-validation-tool.js +214 -4
- package/dist/src/tools/adr-bootstrap-validation-tool.js.map +1 -1
- package/dist/src/tools/adr-suggestion-tool.d.ts +2 -2
- package/dist/src/tools/adr-suggestion-tool.d.ts.map +1 -1
- package/dist/src/tools/adr-suggestion-tool.js +129 -12
- package/dist/src/tools/adr-suggestion-tool.js.map +1 -1
- package/dist/src/tools/adr-validation-tool.d.ts +98 -0
- package/dist/src/tools/adr-validation-tool.d.ts.map +1 -0
- package/dist/src/tools/adr-validation-tool.js +372 -0
- package/dist/src/tools/adr-validation-tool.js.map +1 -0
- package/dist/src/tools/bootstrap-validation-loop-tool.d.ts +262 -0
- package/dist/src/tools/bootstrap-validation-loop-tool.d.ts.map +1 -0
- package/dist/src/tools/bootstrap-validation-loop-tool.js +1934 -0
- package/dist/src/tools/bootstrap-validation-loop-tool.js.map +1 -0
- package/dist/src/tools/conversation-memory-tool.d.ts +48 -0
- package/dist/src/tools/conversation-memory-tool.d.ts.map +1 -0
- package/dist/src/tools/conversation-memory-tool.js +254 -0
- package/dist/src/tools/conversation-memory-tool.js.map +1 -0
- package/dist/src/tools/deployment-analysis-tool.d.ts.map +1 -1
- package/dist/src/tools/deployment-analysis-tool.js +82 -6
- package/dist/src/tools/deployment-analysis-tool.js.map +1 -1
- package/dist/src/tools/deployment-guidance-tool.d.ts.map +1 -1
- package/dist/src/tools/deployment-guidance-tool.js +126 -25
- package/dist/src/tools/deployment-guidance-tool.js.map +1 -1
- package/dist/src/tools/deployment-readiness-tool.d.ts.map +1 -1
- package/dist/src/tools/deployment-readiness-tool.js +166 -5
- package/dist/src/tools/deployment-readiness-tool.js.map +1 -1
- package/dist/src/tools/environment-analysis-tool.d.ts.map +1 -1
- package/dist/src/tools/environment-analysis-tool.js +36 -1
- package/dist/src/tools/environment-analysis-tool.js.map +1 -1
- package/dist/src/tools/expand-analysis-tool.d.ts +23 -0
- package/dist/src/tools/expand-analysis-tool.d.ts.map +1 -0
- package/dist/src/tools/expand-analysis-tool.js +107 -0
- package/dist/src/tools/expand-analysis-tool.js.map +1 -0
- package/dist/src/tools/get-server-context-tool.d.ts +67 -0
- package/dist/src/tools/get-server-context-tool.d.ts.map +1 -0
- package/dist/src/tools/get-server-context-tool.js +75 -0
- package/dist/src/tools/get-server-context-tool.js.map +1 -0
- package/dist/src/tools/interactive-adr-planning-tool.d.ts.map +1 -1
- package/dist/src/tools/interactive-adr-planning-tool.js +82 -9
- package/dist/src/tools/interactive-adr-planning-tool.js.map +1 -1
- package/dist/src/tools/llm-cloud-management-tool.d.ts +62 -0
- package/dist/src/tools/llm-cloud-management-tool.d.ts.map +1 -0
- package/dist/src/tools/llm-cloud-management-tool.js +202 -0
- package/dist/src/tools/llm-cloud-management-tool.js.map +1 -0
- package/dist/src/tools/llm-database-management-tool.d.ts +62 -0
- package/dist/src/tools/llm-database-management-tool.d.ts.map +1 -0
- package/dist/src/tools/llm-database-management-tool.js +203 -0
- package/dist/src/tools/llm-database-management-tool.js.map +1 -0
- package/dist/src/tools/llm-web-search-tool.d.ts +59 -0
- package/dist/src/tools/llm-web-search-tool.d.ts.map +1 -0
- package/dist/src/tools/llm-web-search-tool.js +165 -0
- package/dist/src/tools/llm-web-search-tool.js.map +1 -0
- package/dist/src/tools/mcp-planning-tool.d.ts.map +1 -1
- package/dist/src/tools/mcp-planning-tool.js +10 -3
- package/dist/src/tools/mcp-planning-tool.js.map +1 -1
- package/dist/src/tools/memory-loading-tool.d.ts.map +1 -1
- package/dist/src/tools/memory-loading-tool.js +4 -2
- package/dist/src/tools/memory-loading-tool.js.map +1 -1
- package/dist/src/tools/perform-research-tool.d.ts +61 -0
- package/dist/src/tools/perform-research-tool.d.ts.map +1 -0
- package/dist/src/tools/perform-research-tool.js +324 -0
- package/dist/src/tools/perform-research-tool.js.map +1 -0
- package/dist/src/tools/research-question-tool.d.ts.map +1 -1
- package/dist/src/tools/research-question-tool.js +11 -9
- package/dist/src/tools/research-question-tool.js.map +1 -1
- package/dist/src/tools/review-existing-adrs-tool.d.ts.map +1 -1
- package/dist/src/tools/review-existing-adrs-tool.js +42 -3
- package/dist/src/tools/review-existing-adrs-tool.js.map +1 -1
- package/dist/src/tools/tool-chain-orchestrator.d.ts +15 -94
- package/dist/src/tools/tool-chain-orchestrator.d.ts.map +1 -1
- package/dist/src/tools/tool-chain-orchestrator.js +2 -2
- package/dist/src/tools/tool-chain-orchestrator.js.map +1 -1
- package/dist/src/tools/troubleshoot-guided-workflow-tool.d.ts +25 -120
- package/dist/src/tools/troubleshoot-guided-workflow-tool.d.ts.map +1 -1
- package/dist/src/tools/troubleshoot-guided-workflow-tool.js +91 -2
- package/dist/src/tools/troubleshoot-guided-workflow-tool.js.map +1 -1
- package/dist/src/types/ape-framework.d.ts +50 -283
- package/dist/src/types/ape-framework.d.ts.map +1 -1
- package/dist/src/types/conversation-context.d.ts.map +1 -1
- package/dist/src/types/conversation-context.js +12 -12
- package/dist/src/types/conversation-context.js.map +1 -1
- package/dist/src/types/conversation-memory.d.ts +184 -0
- package/dist/src/types/conversation-memory.d.ts.map +1 -0
- package/dist/src/types/conversation-memory.js +8 -0
- package/dist/src/types/conversation-memory.js.map +1 -0
- package/dist/src/types/index.d.ts +112 -339
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/src/types/knowledge-generation.d.ts +96 -401
- package/dist/src/types/knowledge-generation.d.ts.map +1 -1
- package/dist/src/types/knowledge-graph-schemas.d.ts +77 -715
- package/dist/src/types/knowledge-graph-schemas.d.ts.map +1 -1
- package/dist/src/types/knowledge-graph-schemas.js +8 -8
- package/dist/src/types/knowledge-graph-schemas.js.map +1 -1
- package/dist/src/types/memory-entities.d.ts +1230 -6164
- package/dist/src/types/memory-entities.d.ts.map +1 -1
- package/dist/src/types/memory-entities.js +8 -8
- package/dist/src/types/memory-entities.js.map +1 -1
- package/dist/src/types/reflexion-framework.d.ts +35 -264
- package/dist/src/types/reflexion-framework.d.ts.map +1 -1
- package/dist/src/types/reflexion-framework.js +1 -1
- package/dist/src/types/reflexion-framework.js.map +1 -1
- package/dist/src/types/state-reinforcement.d.ts +87 -0
- package/dist/src/types/state-reinforcement.d.ts.map +1 -0
- package/dist/src/types/state-reinforcement.js +5 -0
- package/dist/src/types/state-reinforcement.js.map +1 -0
- package/dist/src/types/tiered-response.d.ts +61 -0
- package/dist/src/types/tiered-response.d.ts.map +1 -0
- package/dist/src/types/tiered-response.js +8 -0
- package/dist/src/types/tiered-response.js.map +1 -0
- package/dist/src/types/tool-context.d.ts +50 -0
- package/dist/src/types/tool-context.d.ts.map +1 -0
- package/dist/src/types/tool-context.js +20 -0
- package/dist/src/types/tool-context.js.map +1 -0
- package/dist/src/utils/adr-action-analyzer.d.ts +23 -0
- package/dist/src/utils/adr-action-analyzer.d.ts.map +1 -0
- package/dist/src/utils/adr-action-analyzer.js +323 -0
- package/dist/src/utils/adr-action-analyzer.js.map +1 -0
- package/dist/src/utils/adr-context-detector.d.ts +33 -0
- package/dist/src/utils/adr-context-detector.d.ts.map +1 -0
- package/dist/src/utils/adr-context-detector.js +279 -0
- package/dist/src/utils/adr-context-detector.js.map +1 -0
- package/dist/src/utils/adr-discovery.d.ts +28 -2
- package/dist/src/utils/adr-discovery.d.ts.map +1 -1
- package/dist/src/utils/adr-discovery.js +91 -7
- package/dist/src/utils/adr-discovery.js.map +1 -1
- package/dist/src/utils/adr-knowledge-initializer.d.ts +54 -0
- package/dist/src/utils/adr-knowledge-initializer.d.ts.map +1 -0
- package/dist/src/utils/adr-knowledge-initializer.js +240 -0
- package/dist/src/utils/adr-knowledge-initializer.js.map +1 -0
- package/dist/src/utils/adr-timeline-extractor.d.ts +21 -0
- package/dist/src/utils/adr-timeline-extractor.d.ts.map +1 -0
- package/dist/src/utils/adr-timeline-extractor.js +294 -0
- package/dist/src/utils/adr-timeline-extractor.js.map +1 -0
- package/dist/src/utils/adr-timeline-types.d.ts +234 -0
- package/dist/src/utils/adr-timeline-types.d.ts.map +1 -0
- package/dist/src/utils/adr-timeline-types.js +7 -0
- package/dist/src/utils/adr-timeline-types.js.map +1 -0
- package/dist/src/utils/ai-executor.d.ts +36 -0
- package/dist/src/utils/ai-executor.d.ts.map +1 -1
- package/dist/src/utils/ai-executor.js +39 -3
- package/dist/src/utils/ai-executor.js.map +1 -1
- package/dist/src/utils/apply-cot-enhancement.d.ts.map +1 -1
- package/dist/src/utils/apply-cot-enhancement.js +15 -15
- package/dist/src/utils/apply-cot-enhancement.js.map +1 -1
- package/dist/src/utils/automatic-prompt-engineering.d.ts.map +1 -1
- package/dist/src/utils/automatic-prompt-engineering.js +68 -58
- package/dist/src/utils/automatic-prompt-engineering.js.map +1 -1
- package/dist/src/utils/conditional-request.d.ts +105 -0
- package/dist/src/utils/conditional-request.d.ts.map +1 -0
- package/dist/src/utils/conditional-request.js +186 -0
- package/dist/src/utils/conditional-request.js.map +1 -0
- package/dist/src/utils/config.d.ts +72 -18
- package/dist/src/utils/config.d.ts.map +1 -1
- package/dist/src/utils/config.js +75 -0
- package/dist/src/utils/config.js.map +1 -1
- package/dist/src/utils/context-document-manager.d.ts +112 -0
- package/dist/src/utils/context-document-manager.d.ts.map +1 -0
- package/dist/src/utils/context-document-manager.js +351 -0
- package/dist/src/utils/context-document-manager.js.map +1 -0
- package/dist/src/utils/conversation-memory-manager.d.ts +86 -0
- package/dist/src/utils/conversation-memory-manager.d.ts.map +1 -0
- package/dist/src/utils/conversation-memory-manager.js +443 -0
- package/dist/src/utils/conversation-memory-manager.js.map +1 -0
- package/dist/src/utils/dag-executor.d.ts +106 -0
- package/dist/src/utils/dag-executor.d.ts.map +1 -0
- package/dist/src/utils/dag-executor.js +453 -0
- package/dist/src/utils/dag-executor.js.map +1 -0
- package/dist/src/utils/deployment-analysis.d.ts.map +1 -1
- package/dist/src/utils/deployment-analysis.js +17 -9
- package/dist/src/utils/deployment-analysis.js.map +1 -1
- package/dist/src/utils/deployment-type-registry.d.ts +52 -0
- package/dist/src/utils/deployment-type-registry.d.ts.map +1 -0
- package/dist/src/utils/deployment-type-registry.js +543 -0
- package/dist/src/utils/deployment-type-registry.js.map +1 -0
- package/dist/src/utils/dynamic-deployment-intelligence.d.ts +117 -0
- package/dist/src/utils/dynamic-deployment-intelligence.d.ts.map +1 -0
- package/dist/src/utils/dynamic-deployment-intelligence.js +445 -0
- package/dist/src/utils/dynamic-deployment-intelligence.js.map +1 -0
- package/dist/src/utils/environment-analysis.d.ts.map +1 -1
- package/dist/src/utils/environment-analysis.js +63 -44
- package/dist/src/utils/environment-analysis.js.map +1 -1
- package/dist/src/utils/environment-capability-registry.d.ts +101 -0
- package/dist/src/utils/environment-capability-registry.d.ts.map +1 -0
- package/dist/src/utils/environment-capability-registry.js +489 -0
- package/dist/src/utils/environment-capability-registry.js.map +1 -0
- package/dist/src/utils/index.d.ts +3 -3
- package/dist/src/utils/index.d.ts.map +1 -1
- package/dist/src/utils/index.js +3 -3
- package/dist/src/utils/index.js.map +1 -1
- package/dist/src/utils/knowledge-generation.d.ts.map +1 -1
- package/dist/src/utils/knowledge-generation.js +61 -35
- package/dist/src/utils/knowledge-generation.js.map +1 -1
- package/dist/src/utils/knowledge-graph-manager.d.ts +19 -0
- package/dist/src/utils/knowledge-graph-manager.d.ts.map +1 -1
- package/dist/src/utils/knowledge-graph-manager.js +165 -1
- package/dist/src/utils/knowledge-graph-manager.js.map +1 -1
- package/dist/src/utils/llm-artifact-detector.d.ts.map +1 -1
- package/dist/src/utils/llm-artifact-detector.js +28 -24
- package/dist/src/utils/llm-artifact-detector.js.map +1 -1
- package/dist/src/utils/mermaid-diagrams.d.ts +101 -0
- package/dist/src/utils/mermaid-diagrams.d.ts.map +1 -0
- package/dist/src/utils/mermaid-diagrams.js +445 -0
- package/dist/src/utils/mermaid-diagrams.js.map +1 -0
- package/dist/src/utils/monitoring.d.ts +249 -0
- package/dist/src/utils/monitoring.d.ts.map +1 -0
- package/dist/src/utils/monitoring.js +513 -0
- package/dist/src/utils/monitoring.js.map +1 -0
- package/dist/src/utils/pattern-contribution-helper.d.ts +60 -0
- package/dist/src/utils/pattern-contribution-helper.d.ts.map +1 -0
- package/dist/src/utils/pattern-contribution-helper.js +308 -0
- package/dist/src/utils/pattern-contribution-helper.js.map +1 -0
- package/dist/src/utils/pattern-loader.d.ts +183 -0
- package/dist/src/utils/pattern-loader.d.ts.map +1 -0
- package/dist/src/utils/pattern-loader.js +200 -0
- package/dist/src/utils/pattern-loader.js.map +1 -0
- package/dist/src/utils/pattern-research-utility.d.ts +107 -0
- package/dist/src/utils/pattern-research-utility.d.ts.map +1 -0
- package/dist/src/utils/pattern-research-utility.js +360 -0
- package/dist/src/utils/pattern-research-utility.js.map +1 -0
- package/dist/src/utils/pattern-to-dag-converter.d.ts +62 -0
- package/dist/src/utils/pattern-to-dag-converter.d.ts.map +1 -0
- package/dist/src/utils/pattern-to-dag-converter.js +265 -0
- package/dist/src/utils/pattern-to-dag-converter.js.map +1 -0
- package/dist/src/utils/platform-detector.d.ts +86 -0
- package/dist/src/utils/platform-detector.d.ts.map +1 -0
- package/dist/src/utils/platform-detector.js +509 -0
- package/dist/src/utils/platform-detector.js.map +1 -0
- package/dist/src/utils/prompt-composition.d.ts.map +1 -1
- package/dist/src/utils/prompt-composition.js +1 -4
- package/dist/src/utils/prompt-composition.js.map +1 -1
- package/dist/src/utils/reflexion.d.ts.map +1 -1
- package/dist/src/utils/reflexion.js +51 -42
- package/dist/src/utils/reflexion.js.map +1 -1
- package/dist/src/utils/research-integration.d.ts.map +1 -1
- package/dist/src/utils/research-integration.js +8 -2
- package/dist/src/utils/research-integration.js.map +1 -1
- package/dist/src/utils/research-orchestrator.d.ts +209 -0
- package/dist/src/utils/research-orchestrator.d.ts.map +1 -0
- package/dist/src/utils/research-orchestrator.js +863 -0
- package/dist/src/utils/research-orchestrator.js.map +1 -0
- package/dist/src/utils/research-questions.d.ts.map +1 -1
- package/dist/src/utils/research-questions.js +4 -1
- package/dist/src/utils/research-questions.js.map +1 -1
- package/dist/src/utils/resource-extractor.d.ts +57 -0
- package/dist/src/utils/resource-extractor.d.ts.map +1 -0
- package/dist/src/utils/resource-extractor.js +323 -0
- package/dist/src/utils/resource-extractor.js.map +1 -0
- package/dist/src/utils/resource-versioning.d.ts +124 -0
- package/dist/src/utils/resource-versioning.d.ts.map +1 -0
- package/dist/src/utils/resource-versioning.js +272 -0
- package/dist/src/utils/resource-versioning.js.map +1 -0
- package/dist/src/utils/root-manager.d.ts +118 -0
- package/dist/src/utils/root-manager.d.ts.map +1 -0
- package/dist/src/utils/root-manager.js +154 -0
- package/dist/src/utils/root-manager.js.map +1 -0
- package/dist/src/utils/rule-generation.d.ts.map +1 -1
- package/dist/src/utils/rule-generation.js +4 -1
- package/dist/src/utils/rule-generation.js.map +1 -1
- package/dist/src/utils/server-context-generator.d.ts +47 -0
- package/dist/src/utils/server-context-generator.d.ts.map +1 -0
- package/dist/src/utils/server-context-generator.js +666 -0
- package/dist/src/utils/server-context-generator.js.map +1 -0
- package/dist/src/utils/state-reinforcement-manager.d.ts +60 -0
- package/dist/src/utils/state-reinforcement-manager.d.ts.map +1 -0
- package/dist/src/utils/state-reinforcement-manager.js +200 -0
- package/dist/src/utils/state-reinforcement-manager.js.map +1 -0
- package/dist/src/utils/system-card-manager.d.ts +194 -0
- package/dist/src/utils/system-card-manager.d.ts.map +1 -0
- package/dist/src/utils/system-card-manager.js +336 -0
- package/dist/src/utils/system-card-manager.js.map +1 -0
- package/dist/src/utils/tiered-response-manager.d.ts +40 -0
- package/dist/src/utils/tiered-response-manager.d.ts.map +1 -0
- package/dist/src/utils/tiered-response-manager.js +243 -0
- package/dist/src/utils/tiered-response-manager.js.map +1 -0
- package/dist/src/utils/tree-sitter-analyzer.d.ts.map +1 -1
- package/dist/src/utils/tree-sitter-analyzer.js +83 -11
- package/dist/src/utils/tree-sitter-analyzer.js.map +1 -1
- package/dist/src/utils/validated-pattern-definitions.d.ts +219 -0
- package/dist/src/utils/validated-pattern-definitions.d.ts.map +1 -0
- package/dist/src/utils/validated-pattern-definitions.js +1511 -0
- package/dist/src/utils/validated-pattern-definitions.js.map +1 -0
- package/package.json +22 -13
- package/dist/src/prompts/todo-prompts.d.ts +0 -49
- package/dist/src/prompts/todo-prompts.d.ts.map +0 -1
- package/dist/src/prompts/todo-prompts.js +0 -824
- package/dist/src/prompts/todo-prompts.js.map +0 -1
- package/dist/src/types/todo-json-schemas.d.ts +0 -17
- package/dist/src/types/todo-json-schemas.d.ts.map +0 -1
- package/dist/src/types/todo-json-schemas.js +0 -9
- package/dist/src/types/todo-json-schemas.js.map +0 -1
- package/dist/src/utils/todo-file-watcher.d.ts +0 -14
- package/dist/src/utils/todo-file-watcher.d.ts.map +0 -1
- package/dist/src/utils/todo-file-watcher.js +0 -25
- package/dist/src/utils/todo-file-watcher.js.map +0 -1
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resource Router - URI routing infrastructure for templated resources
|
|
3
|
+
* Supports parameterized URIs like adr://adr/{id} and adr://research/{topic}
|
|
4
|
+
*/
|
|
5
|
+
import { URLSearchParams } from 'url';
|
|
6
|
+
import { ResourceGenerationResult } from './index.js';
|
|
7
|
+
export type ResourceHandler = (params: Record<string, string>, searchParams: URLSearchParams) => Promise<ResourceGenerationResult>;
|
|
8
|
+
export interface RouteRegistration {
|
|
9
|
+
pattern: string;
|
|
10
|
+
handler: ResourceHandler;
|
|
11
|
+
description?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* URI Router for templated resources
|
|
15
|
+
* Matches URI patterns and extracts parameters
|
|
16
|
+
*/
|
|
17
|
+
export declare class ResourceRouter {
|
|
18
|
+
private routes;
|
|
19
|
+
/**
|
|
20
|
+
* Register a route pattern with its handler
|
|
21
|
+
*/
|
|
22
|
+
register(pattern: string, handler: ResourceHandler, description?: string): void;
|
|
23
|
+
/**
|
|
24
|
+
* Route a URI to its handler and execute
|
|
25
|
+
*/
|
|
26
|
+
route(uri: string): Promise<ResourceGenerationResult>;
|
|
27
|
+
/**
|
|
28
|
+
* Check if a pattern matches a path
|
|
29
|
+
*/
|
|
30
|
+
private matchPattern;
|
|
31
|
+
/**
|
|
32
|
+
* Extract parameters from path based on pattern
|
|
33
|
+
*/
|
|
34
|
+
private extractParams;
|
|
35
|
+
/**
|
|
36
|
+
* Get all registered routes
|
|
37
|
+
*/
|
|
38
|
+
getRoutes(): RouteRegistration[];
|
|
39
|
+
/**
|
|
40
|
+
* Check if a URI can be routed
|
|
41
|
+
*/
|
|
42
|
+
canRoute(uri: string): boolean;
|
|
43
|
+
}
|
|
44
|
+
export declare const resourceRouter: ResourceRouter;
|
|
45
|
+
//# sourceMappingURL=resource-router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-router.d.ts","sourceRoot":"","sources":["../../../src/resources/resource-router.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAO,eAAe,EAAE,MAAM,KAAK,CAAC;AAC3C,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAGtD,MAAM,MAAM,eAAe,GAAG,CAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,YAAY,EAAE,eAAe,KAC1B,OAAO,CAAC,wBAAwB,CAAC,CAAC;AAEvC,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,eAAe,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAA2B;IAEzC;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI;IAgB/E;;OAEG;IACG,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,wBAAwB,CAAC;IAe3D;;OAEG;IACH,OAAO,CAAC,YAAY;IAMpB;;OAEG;IACH,OAAO,CAAC,aAAa;IAkBrB;;OAEG;IACH,SAAS,IAAI,iBAAiB,EAAE;IAIhC;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;CAe/B;AAGD,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resource Router - URI routing infrastructure for templated resources
|
|
3
|
+
* Supports parameterized URIs like adr://adr/{id} and adr://research/{topic}
|
|
4
|
+
*/
|
|
5
|
+
import { URL } from 'url';
|
|
6
|
+
import { McpAdrError } from '../types/index.js';
|
|
7
|
+
/**
|
|
8
|
+
* URI Router for templated resources
|
|
9
|
+
* Matches URI patterns and extracts parameters
|
|
10
|
+
*/
|
|
11
|
+
export class ResourceRouter {
|
|
12
|
+
routes = [];
|
|
13
|
+
/**
|
|
14
|
+
* Register a route pattern with its handler
|
|
15
|
+
*/
|
|
16
|
+
register(pattern, handler, description) {
|
|
17
|
+
// Ensure pattern starts with /
|
|
18
|
+
const normalizedPattern = pattern.startsWith('/') ? pattern : `/${pattern}`;
|
|
19
|
+
const registration = {
|
|
20
|
+
pattern: normalizedPattern,
|
|
21
|
+
handler,
|
|
22
|
+
};
|
|
23
|
+
if (description !== undefined) {
|
|
24
|
+
registration.description = description;
|
|
25
|
+
}
|
|
26
|
+
this.routes.push(registration);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Route a URI to its handler and execute
|
|
30
|
+
*/
|
|
31
|
+
async route(uri) {
|
|
32
|
+
const url = new URL(uri);
|
|
33
|
+
const path = url.pathname;
|
|
34
|
+
// Try to match pattern
|
|
35
|
+
for (const route of this.routes) {
|
|
36
|
+
if (this.matchPattern(route.pattern, path)) {
|
|
37
|
+
const params = this.extractParams(route.pattern, path);
|
|
38
|
+
return await route.handler(params, url.searchParams);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
throw new McpAdrError(`No route found for: ${uri}`, 'RESOURCE_NOT_FOUND');
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Check if a pattern matches a path
|
|
45
|
+
*/
|
|
46
|
+
matchPattern(pattern, path) {
|
|
47
|
+
// Convert pattern to regex: /adr/{id} -> /adr/([^/]+)
|
|
48
|
+
const regex = pattern.replace(/\{[^}]+\}/g, '([^/]+)');
|
|
49
|
+
return new RegExp(`^${regex}$`).test(path);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Extract parameters from path based on pattern
|
|
53
|
+
*/
|
|
54
|
+
extractParams(pattern, path) {
|
|
55
|
+
const paramNames = pattern.match(/\{([^}]+)\}/g)?.map(p => p.slice(1, -1)) || [];
|
|
56
|
+
const regex = pattern.replace(/\{[^}]+\}/g, '([^/]+)');
|
|
57
|
+
const matches = path.match(new RegExp(`^${regex}$`));
|
|
58
|
+
const params = {};
|
|
59
|
+
if (matches) {
|
|
60
|
+
paramNames.forEach((name, i) => {
|
|
61
|
+
const value = matches[i + 1];
|
|
62
|
+
if (value !== undefined) {
|
|
63
|
+
params[name] = decodeURIComponent(value);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
return params;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Get all registered routes
|
|
71
|
+
*/
|
|
72
|
+
getRoutes() {
|
|
73
|
+
return [...this.routes];
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Check if a URI can be routed
|
|
77
|
+
*/
|
|
78
|
+
canRoute(uri) {
|
|
79
|
+
try {
|
|
80
|
+
const url = new URL(uri);
|
|
81
|
+
const path = url.pathname;
|
|
82
|
+
for (const route of this.routes) {
|
|
83
|
+
if (this.matchPattern(route.pattern, path)) {
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return false;
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
// Singleton instance
|
|
95
|
+
export const resourceRouter = new ResourceRouter();
|
|
96
|
+
//# sourceMappingURL=resource-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-router.js","sourceRoot":"","sources":["../../../src/resources/resource-router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rule by ID Resource - Individual rule details
|
|
3
|
+
* URI Pattern: adr://rule/{rule_id}
|
|
4
|
+
*/
|
|
5
|
+
import { URLSearchParams } from 'url';
|
|
6
|
+
import { ResourceGenerationResult } from './index.js';
|
|
7
|
+
export interface Rule {
|
|
8
|
+
id: string;
|
|
9
|
+
name: string;
|
|
10
|
+
description: string;
|
|
11
|
+
type: 'architectural' | 'coding' | 'security' | 'performance' | 'documentation';
|
|
12
|
+
severity: 'info' | 'warning' | 'error' | 'critical';
|
|
13
|
+
pattern?: string;
|
|
14
|
+
message: string;
|
|
15
|
+
source: 'adr' | 'inferred' | 'user_defined';
|
|
16
|
+
enabled: boolean;
|
|
17
|
+
createdAt?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface DetailedRule extends Rule {
|
|
20
|
+
violations: Array<{
|
|
21
|
+
file: string;
|
|
22
|
+
line: number;
|
|
23
|
+
message: string;
|
|
24
|
+
severity: string;
|
|
25
|
+
}>;
|
|
26
|
+
relatedAdrs: string[];
|
|
27
|
+
usage: {
|
|
28
|
+
totalChecks: number;
|
|
29
|
+
totalViolations: number;
|
|
30
|
+
lastChecked: string;
|
|
31
|
+
violationRate: number;
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Generate rule by ID resource
|
|
36
|
+
*/
|
|
37
|
+
export declare function generateRuleByIdResource(params: Record<string, string>, _searchParams: URLSearchParams): Promise<ResourceGenerationResult>;
|
|
38
|
+
//# sourceMappingURL=rule-by-id-resource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-by-id-resource.d.ts","sourceRoot":"","sources":["../../../src/resources/rule-by-id-resource.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,KAAK,CAAC;AAGtC,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAItD,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,eAAe,GAAG,QAAQ,GAAG,UAAU,GAAG,aAAa,GAAG,eAAe,CAAC;IAChF,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,KAAK,GAAG,UAAU,GAAG,cAAc,CAAC;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAa,SAAQ,IAAI;IACxC,UAAU,EAAE,KAAK,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;IACH,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,KAAK,EAAE;QACL,WAAW,EAAE,MAAM,CAAC;QACpB,eAAe,EAAE,MAAM,CAAC;QACxB,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CACH;AA0ED;;GAEG;AACH,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,aAAa,EAAE,eAAe,GAC7B,OAAO,CAAC,wBAAwB,CAAC,CAgDnC"}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rule by ID Resource - Individual rule details
|
|
3
|
+
* URI Pattern: adr://rule/{rule_id}
|
|
4
|
+
*/
|
|
5
|
+
import { McpAdrError } from '../types/index.js';
|
|
6
|
+
import { resourceCache, generateETag } from './resource-cache.js';
|
|
7
|
+
import { resourceRouter } from './resource-router.js';
|
|
8
|
+
/**
|
|
9
|
+
* Load all rules from various sources
|
|
10
|
+
*/
|
|
11
|
+
async function loadAllRules() {
|
|
12
|
+
// Import rule extraction functions
|
|
13
|
+
const { generateRuleCatalogResource } = await import('./rule-catalog-resource.js');
|
|
14
|
+
// Get rule catalog
|
|
15
|
+
const catalogResult = await generateRuleCatalogResource();
|
|
16
|
+
const catalog = catalogResult.data;
|
|
17
|
+
return catalog.rules || [];
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Find rule violations (placeholder - would require code analysis)
|
|
21
|
+
*/
|
|
22
|
+
async function findRuleViolations(rule) {
|
|
23
|
+
// TODO: Implement actual code analysis for rule violations
|
|
24
|
+
// For now, return placeholder violations
|
|
25
|
+
return [
|
|
26
|
+
{
|
|
27
|
+
file: 'src/example.ts',
|
|
28
|
+
line: 42,
|
|
29
|
+
message: `Violation of rule: ${rule.name}`,
|
|
30
|
+
severity: rule.severity,
|
|
31
|
+
},
|
|
32
|
+
];
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Find ADRs related to this rule
|
|
36
|
+
*/
|
|
37
|
+
async function findRelatedAdrsForRule(rule) {
|
|
38
|
+
// If rule source is ADR, extract ADR reference
|
|
39
|
+
if (rule.source === 'adr') {
|
|
40
|
+
const adrReferences = rule.description.match(/ADR[-\s]?(\d+)/gi);
|
|
41
|
+
if (adrReferences) {
|
|
42
|
+
return adrReferences.map(ref => ref.trim());
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return [];
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Get rule usage statistics (placeholder - would require tracking)
|
|
49
|
+
*/
|
|
50
|
+
async function getRuleUsageStats(_ruleId) {
|
|
51
|
+
// TODO: Implement actual usage tracking
|
|
52
|
+
// For now, return placeholder stats
|
|
53
|
+
const totalChecks = 100;
|
|
54
|
+
const totalViolations = 15;
|
|
55
|
+
return {
|
|
56
|
+
totalChecks,
|
|
57
|
+
totalViolations,
|
|
58
|
+
lastChecked: new Date().toISOString(),
|
|
59
|
+
violationRate: totalViolations / totalChecks,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Generate rule by ID resource
|
|
64
|
+
*/
|
|
65
|
+
export async function generateRuleByIdResource(params, _searchParams) {
|
|
66
|
+
const rule_id = params['rule_id'];
|
|
67
|
+
if (!rule_id) {
|
|
68
|
+
throw new McpAdrError('Missing required parameter: rule_id', 'INVALID_PARAMS');
|
|
69
|
+
}
|
|
70
|
+
const cacheKey = `rule:${rule_id}`;
|
|
71
|
+
// Check cache
|
|
72
|
+
const cached = await resourceCache.get(cacheKey);
|
|
73
|
+
if (cached) {
|
|
74
|
+
return cached;
|
|
75
|
+
}
|
|
76
|
+
// Load all rules
|
|
77
|
+
const allRules = await loadAllRules();
|
|
78
|
+
// Find rule by ID or name match
|
|
79
|
+
const rule = allRules.find(r => r.id === rule_id || r.name.toLowerCase().includes(rule_id.toLowerCase()));
|
|
80
|
+
if (!rule) {
|
|
81
|
+
throw new McpAdrError(`Rule not found: ${rule_id}`, 'RESOURCE_NOT_FOUND');
|
|
82
|
+
}
|
|
83
|
+
// Build detailed rule data
|
|
84
|
+
const detailedRule = {
|
|
85
|
+
...rule,
|
|
86
|
+
violations: await findRuleViolations(rule),
|
|
87
|
+
relatedAdrs: await findRelatedAdrsForRule(rule),
|
|
88
|
+
usage: await getRuleUsageStats(rule_id),
|
|
89
|
+
};
|
|
90
|
+
const result = {
|
|
91
|
+
data: detailedRule,
|
|
92
|
+
contentType: 'application/json',
|
|
93
|
+
lastModified: new Date().toISOString(),
|
|
94
|
+
cacheKey,
|
|
95
|
+
ttl: 300, // 5 minutes cache
|
|
96
|
+
etag: generateETag(detailedRule),
|
|
97
|
+
};
|
|
98
|
+
// Cache result
|
|
99
|
+
resourceCache.set(cacheKey, result, result.ttl);
|
|
100
|
+
return result;
|
|
101
|
+
}
|
|
102
|
+
// Register route
|
|
103
|
+
resourceRouter.register('/rule/{rule_id}', generateRuleByIdResource, 'Individual rule details by ID or name match');
|
|
104
|
+
//# sourceMappingURL=rule-by-id-resource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-by-id-resource.js","sourceRoot":"","sources":["../../../src/resources/rule-by-id-resource.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rule Catalog Resource
|
|
3
|
+
* Provides access to architectural and validation rules
|
|
4
|
+
*/
|
|
5
|
+
import { ResourceGenerationResult } from './index.js';
|
|
6
|
+
export interface Rule {
|
|
7
|
+
id: string;
|
|
8
|
+
name: string;
|
|
9
|
+
description: string;
|
|
10
|
+
type: 'architectural' | 'coding' | 'security' | 'performance' | 'documentation';
|
|
11
|
+
severity: 'info' | 'warning' | 'error' | 'critical';
|
|
12
|
+
pattern?: string;
|
|
13
|
+
message: string;
|
|
14
|
+
source: 'adr' | 'inferred' | 'user_defined';
|
|
15
|
+
enabled: boolean;
|
|
16
|
+
createdAt?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Generate comprehensive rule catalog resource with compliance tracking and rule management.
|
|
20
|
+
*
|
|
21
|
+
* Aggregates architectural rules from multiple sources including ADRs, inferred patterns,
|
|
22
|
+
* and custom user-defined rules. Provides categorization by type, severity, and source for
|
|
23
|
+
* effective governance and compliance monitoring.
|
|
24
|
+
*
|
|
25
|
+
* **Rule Sources:**
|
|
26
|
+
* - ADR-based rules: Extracted from architectural decision records
|
|
27
|
+
* - Inferred rules: Derived from codebase patterns and best practices
|
|
28
|
+
* - Custom rules: User-defined via configuration files
|
|
29
|
+
*
|
|
30
|
+
* **Rule Types:**
|
|
31
|
+
* - architecture: Architectural patterns and structures
|
|
32
|
+
* - security: Security policies and practices
|
|
33
|
+
* - performance: Performance optimization guidelines
|
|
34
|
+
* - testing: Test coverage and quality requirements
|
|
35
|
+
* - documentation: Documentation standards
|
|
36
|
+
*
|
|
37
|
+
* **Severity Levels:**
|
|
38
|
+
* - critical: Violations block deployment
|
|
39
|
+
* - high: Must fix before release
|
|
40
|
+
* - medium: Should fix soon
|
|
41
|
+
* - low: Nice to fix
|
|
42
|
+
*
|
|
43
|
+
* @returns Promise resolving to resource generation result containing:
|
|
44
|
+
* - data: Complete rule catalog with rules array and summary statistics
|
|
45
|
+
* - contentType: "application/json"
|
|
46
|
+
* - lastModified: ISO timestamp of generation
|
|
47
|
+
* - cacheKey: "rule-catalog:current"
|
|
48
|
+
* - ttl: Cache duration (300 seconds / 5 minutes)
|
|
49
|
+
* - etag: Entity tag for cache validation
|
|
50
|
+
*
|
|
51
|
+
* @throws {McpAdrError} When rule catalog generation fails due to:
|
|
52
|
+
* - RESOURCE_GENERATION_ERROR: ADR parsing errors or rule extraction failures
|
|
53
|
+
* - Cache operation failures
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```typescript
|
|
57
|
+
* const ruleCatalog = await generateRuleCatalogResource();
|
|
58
|
+
*
|
|
59
|
+
* console.log(`Total rules: ${ruleCatalog.data.summary.total}`);
|
|
60
|
+
* console.log(`Enabled: ${ruleCatalog.data.summary.enabled}`);
|
|
61
|
+
* console.log(`Disabled: ${ruleCatalog.data.summary.disabled}`);
|
|
62
|
+
*
|
|
63
|
+
* // Get critical security rules
|
|
64
|
+
* const criticalSecurityRules = ruleCatalog.data.rules.filter(
|
|
65
|
+
* r => r.type === 'security' && r.severity === 'critical' && r.enabled
|
|
66
|
+
* );
|
|
67
|
+
* console.log(`Critical security rules: ${criticalSecurityRules.length}`);
|
|
68
|
+
*
|
|
69
|
+
* // Group rules by source
|
|
70
|
+
* console.log(`ADR rules: ${ruleCatalog.data.summary.bySource.adr}`);
|
|
71
|
+
* console.log(`Inferred rules: ${ruleCatalog.data.summary.bySource.inferred}`);
|
|
72
|
+
* console.log(`Custom rules: ${ruleCatalog.data.summary.bySource.user_defined}`);
|
|
73
|
+
*
|
|
74
|
+
* // Expected output structure:
|
|
75
|
+
* {
|
|
76
|
+
* data: {
|
|
77
|
+
* version: "1.0.0",
|
|
78
|
+
* timestamp: "2025-10-12T17:00:00.000Z",
|
|
79
|
+
* summary: {
|
|
80
|
+
* total: 45,
|
|
81
|
+
* byType: {
|
|
82
|
+
* architecture: 12,
|
|
83
|
+
* security: 10,
|
|
84
|
+
* performance: 8,
|
|
85
|
+
* testing: 10,
|
|
86
|
+
* documentation: 5
|
|
87
|
+
* },
|
|
88
|
+
* bySeverity: {
|
|
89
|
+
* critical: 5,
|
|
90
|
+
* high: 15,
|
|
91
|
+
* medium: 20,
|
|
92
|
+
* low: 5
|
|
93
|
+
* },
|
|
94
|
+
* bySource: {
|
|
95
|
+
* adr: 20,
|
|
96
|
+
* inferred: 15,
|
|
97
|
+
* user_defined: 10
|
|
98
|
+
* },
|
|
99
|
+
* enabled: 40,
|
|
100
|
+
* disabled: 5
|
|
101
|
+
* },
|
|
102
|
+
* rules: [
|
|
103
|
+
* {
|
|
104
|
+
* id: "rule-001",
|
|
105
|
+
* name: "Use PostgreSQL for primary database",
|
|
106
|
+
* type: "architecture",
|
|
107
|
+
* severity: "critical",
|
|
108
|
+
* source: "adr",
|
|
109
|
+
* enabled: true,
|
|
110
|
+
* adrReference: "ADR-001"
|
|
111
|
+
* }
|
|
112
|
+
* ]
|
|
113
|
+
* },
|
|
114
|
+
* contentType: "application/json",
|
|
115
|
+
* cacheKey: "rule-catalog:current",
|
|
116
|
+
* ttl: 300
|
|
117
|
+
* }
|
|
118
|
+
* ```
|
|
119
|
+
*
|
|
120
|
+
* @since v2.0.0
|
|
121
|
+
* @see {@link extractRulesFromAdrs} for ADR rule extraction
|
|
122
|
+
* @see {@link extractInferredRules} for pattern-based rule inference
|
|
123
|
+
* @see {@link loadCustomRules} for user-defined rule loading
|
|
124
|
+
*/
|
|
125
|
+
export declare function generateRuleCatalogResource(): Promise<ResourceGenerationResult>;
|
|
126
|
+
//# sourceMappingURL=rule-catalog-resource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-catalog-resource.d.ts","sourceRoot":"","sources":["../../../src/resources/rule-catalog-resource.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,eAAe,GAAG,QAAQ,GAAG,UAAU,GAAG,aAAa,GAAG,eAAe,CAAC;IAChF,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;IACpD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,KAAK,GAAG,UAAU,GAAG,cAAc,CAAC;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA2ED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0GG;AACH,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,wBAAwB,CAAC,CAsDrF"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rule Catalog Resource
|
|
3
|
+
* Provides access to architectural and validation rules
|
|
4
|
+
*/
|
|
5
|
+
import { McpAdrError } from '../types/index.js';
|
|
6
|
+
import { resourceCache, generateETag } from './resource-cache.js';
|
|
7
|
+
/**
|
|
8
|
+
* Extract rules from ADRs
|
|
9
|
+
*/
|
|
10
|
+
async function extractRulesFromAdrs() {
|
|
11
|
+
// TODO: Implement actual rule extraction from ADRs
|
|
12
|
+
// For now, return example rules
|
|
13
|
+
return [
|
|
14
|
+
{
|
|
15
|
+
id: 'adr-rule-001',
|
|
16
|
+
name: 'MCP Best Practices',
|
|
17
|
+
description: 'Follow MCP protocol best practices for resources vs tools',
|
|
18
|
+
type: 'architectural',
|
|
19
|
+
severity: 'warning',
|
|
20
|
+
message: 'Read-only operations should use resources, not tools',
|
|
21
|
+
source: 'adr',
|
|
22
|
+
enabled: true,
|
|
23
|
+
},
|
|
24
|
+
];
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Extract inferred rules from code patterns
|
|
28
|
+
*/
|
|
29
|
+
async function extractInferredRules() {
|
|
30
|
+
// TODO: Implement actual inference from code
|
|
31
|
+
return [
|
|
32
|
+
{
|
|
33
|
+
id: 'inferred-rule-001',
|
|
34
|
+
name: 'TypeScript Strict Mode',
|
|
35
|
+
description: 'Project uses TypeScript strict mode',
|
|
36
|
+
type: 'coding',
|
|
37
|
+
severity: 'info',
|
|
38
|
+
message: 'Maintain strict TypeScript compilation',
|
|
39
|
+
source: 'inferred',
|
|
40
|
+
enabled: true,
|
|
41
|
+
},
|
|
42
|
+
];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Load custom user-defined rules
|
|
46
|
+
*/
|
|
47
|
+
async function loadCustomRules() {
|
|
48
|
+
// TODO: Load from configuration file
|
|
49
|
+
return [];
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Group rules by type
|
|
53
|
+
*/
|
|
54
|
+
function groupByType(rules) {
|
|
55
|
+
const grouped = {};
|
|
56
|
+
for (const rule of rules) {
|
|
57
|
+
grouped[rule.type] = (grouped[rule.type] || 0) + 1;
|
|
58
|
+
}
|
|
59
|
+
return grouped;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Group rules by severity
|
|
63
|
+
*/
|
|
64
|
+
function groupBySeverity(rules) {
|
|
65
|
+
const grouped = {};
|
|
66
|
+
for (const rule of rules) {
|
|
67
|
+
grouped[rule.severity] = (grouped[rule.severity] || 0) + 1;
|
|
68
|
+
}
|
|
69
|
+
return grouped;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Generate comprehensive rule catalog resource with compliance tracking and rule management.
|
|
73
|
+
*
|
|
74
|
+
* Aggregates architectural rules from multiple sources including ADRs, inferred patterns,
|
|
75
|
+
* and custom user-defined rules. Provides categorization by type, severity, and source for
|
|
76
|
+
* effective governance and compliance monitoring.
|
|
77
|
+
*
|
|
78
|
+
* **Rule Sources:**
|
|
79
|
+
* - ADR-based rules: Extracted from architectural decision records
|
|
80
|
+
* - Inferred rules: Derived from codebase patterns and best practices
|
|
81
|
+
* - Custom rules: User-defined via configuration files
|
|
82
|
+
*
|
|
83
|
+
* **Rule Types:**
|
|
84
|
+
* - architecture: Architectural patterns and structures
|
|
85
|
+
* - security: Security policies and practices
|
|
86
|
+
* - performance: Performance optimization guidelines
|
|
87
|
+
* - testing: Test coverage and quality requirements
|
|
88
|
+
* - documentation: Documentation standards
|
|
89
|
+
*
|
|
90
|
+
* **Severity Levels:**
|
|
91
|
+
* - critical: Violations block deployment
|
|
92
|
+
* - high: Must fix before release
|
|
93
|
+
* - medium: Should fix soon
|
|
94
|
+
* - low: Nice to fix
|
|
95
|
+
*
|
|
96
|
+
* @returns Promise resolving to resource generation result containing:
|
|
97
|
+
* - data: Complete rule catalog with rules array and summary statistics
|
|
98
|
+
* - contentType: "application/json"
|
|
99
|
+
* - lastModified: ISO timestamp of generation
|
|
100
|
+
* - cacheKey: "rule-catalog:current"
|
|
101
|
+
* - ttl: Cache duration (300 seconds / 5 minutes)
|
|
102
|
+
* - etag: Entity tag for cache validation
|
|
103
|
+
*
|
|
104
|
+
* @throws {McpAdrError} When rule catalog generation fails due to:
|
|
105
|
+
* - RESOURCE_GENERATION_ERROR: ADR parsing errors or rule extraction failures
|
|
106
|
+
* - Cache operation failures
|
|
107
|
+
*
|
|
108
|
+
* @example
|
|
109
|
+
* ```typescript
|
|
110
|
+
* const ruleCatalog = await generateRuleCatalogResource();
|
|
111
|
+
*
|
|
112
|
+
* console.log(`Total rules: ${ruleCatalog.data.summary.total}`);
|
|
113
|
+
* console.log(`Enabled: ${ruleCatalog.data.summary.enabled}`);
|
|
114
|
+
* console.log(`Disabled: ${ruleCatalog.data.summary.disabled}`);
|
|
115
|
+
*
|
|
116
|
+
* // Get critical security rules
|
|
117
|
+
* const criticalSecurityRules = ruleCatalog.data.rules.filter(
|
|
118
|
+
* r => r.type === 'security' && r.severity === 'critical' && r.enabled
|
|
119
|
+
* );
|
|
120
|
+
* console.log(`Critical security rules: ${criticalSecurityRules.length}`);
|
|
121
|
+
*
|
|
122
|
+
* // Group rules by source
|
|
123
|
+
* console.log(`ADR rules: ${ruleCatalog.data.summary.bySource.adr}`);
|
|
124
|
+
* console.log(`Inferred rules: ${ruleCatalog.data.summary.bySource.inferred}`);
|
|
125
|
+
* console.log(`Custom rules: ${ruleCatalog.data.summary.bySource.user_defined}`);
|
|
126
|
+
*
|
|
127
|
+
* // Expected output structure:
|
|
128
|
+
* {
|
|
129
|
+
* data: {
|
|
130
|
+
* version: "1.0.0",
|
|
131
|
+
* timestamp: "2025-10-12T17:00:00.000Z",
|
|
132
|
+
* summary: {
|
|
133
|
+
* total: 45,
|
|
134
|
+
* byType: {
|
|
135
|
+
* architecture: 12,
|
|
136
|
+
* security: 10,
|
|
137
|
+
* performance: 8,
|
|
138
|
+
* testing: 10,
|
|
139
|
+
* documentation: 5
|
|
140
|
+
* },
|
|
141
|
+
* bySeverity: {
|
|
142
|
+
* critical: 5,
|
|
143
|
+
* high: 15,
|
|
144
|
+
* medium: 20,
|
|
145
|
+
* low: 5
|
|
146
|
+
* },
|
|
147
|
+
* bySource: {
|
|
148
|
+
* adr: 20,
|
|
149
|
+
* inferred: 15,
|
|
150
|
+
* user_defined: 10
|
|
151
|
+
* },
|
|
152
|
+
* enabled: 40,
|
|
153
|
+
* disabled: 5
|
|
154
|
+
* },
|
|
155
|
+
* rules: [
|
|
156
|
+
* {
|
|
157
|
+
* id: "rule-001",
|
|
158
|
+
* name: "Use PostgreSQL for primary database",
|
|
159
|
+
* type: "architecture",
|
|
160
|
+
* severity: "critical",
|
|
161
|
+
* source: "adr",
|
|
162
|
+
* enabled: true,
|
|
163
|
+
* adrReference: "ADR-001"
|
|
164
|
+
* }
|
|
165
|
+
* ]
|
|
166
|
+
* },
|
|
167
|
+
* contentType: "application/json",
|
|
168
|
+
* cacheKey: "rule-catalog:current",
|
|
169
|
+
* ttl: 300
|
|
170
|
+
* }
|
|
171
|
+
* ```
|
|
172
|
+
*
|
|
173
|
+
* @since v2.0.0
|
|
174
|
+
* @see {@link extractRulesFromAdrs} for ADR rule extraction
|
|
175
|
+
* @see {@link extractInferredRules} for pattern-based rule inference
|
|
176
|
+
* @see {@link loadCustomRules} for user-defined rule loading
|
|
177
|
+
*/
|
|
178
|
+
export async function generateRuleCatalogResource() {
|
|
179
|
+
try {
|
|
180
|
+
const cacheKey = 'rule-catalog:current';
|
|
181
|
+
// Check cache
|
|
182
|
+
const cached = await resourceCache.get(cacheKey);
|
|
183
|
+
if (cached) {
|
|
184
|
+
return cached;
|
|
185
|
+
}
|
|
186
|
+
// Extract rules from various sources
|
|
187
|
+
const adrRules = await extractRulesFromAdrs();
|
|
188
|
+
const inferredRules = await extractInferredRules();
|
|
189
|
+
const customRules = await loadCustomRules();
|
|
190
|
+
const allRules = [...adrRules, ...inferredRules, ...customRules];
|
|
191
|
+
const ruleCatalogData = {
|
|
192
|
+
version: '1.0.0',
|
|
193
|
+
timestamp: new Date().toISOString(),
|
|
194
|
+
summary: {
|
|
195
|
+
total: allRules.length,
|
|
196
|
+
byType: groupByType(allRules),
|
|
197
|
+
bySeverity: groupBySeverity(allRules),
|
|
198
|
+
bySource: {
|
|
199
|
+
adr: adrRules.length,
|
|
200
|
+
inferred: inferredRules.length,
|
|
201
|
+
user_defined: customRules.length,
|
|
202
|
+
},
|
|
203
|
+
enabled: allRules.filter(r => r.enabled).length,
|
|
204
|
+
disabled: allRules.filter(r => !r.enabled).length,
|
|
205
|
+
},
|
|
206
|
+
rules: allRules,
|
|
207
|
+
};
|
|
208
|
+
const result = {
|
|
209
|
+
data: ruleCatalogData,
|
|
210
|
+
contentType: 'application/json',
|
|
211
|
+
lastModified: new Date().toISOString(),
|
|
212
|
+
cacheKey,
|
|
213
|
+
ttl: 600, // 10 minutes cache
|
|
214
|
+
etag: generateETag(ruleCatalogData),
|
|
215
|
+
};
|
|
216
|
+
// Cache result
|
|
217
|
+
resourceCache.set(cacheKey, result, result.ttl);
|
|
218
|
+
return result;
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
throw new McpAdrError(`Failed to generate rule catalog resource: ${error instanceof Error ? error.message : String(error)}`, 'RESOURCE_GENERATION_ERROR');
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=rule-catalog-resource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rule-catalog-resource.js","sourceRoot":"","sources":["../../../src/resources/rule-catalog-resource.ts"],"names":[],"mappings":"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"}
|