mcp-adr-analysis-server 2.1.20 → 2.1.22

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.
Files changed (226) hide show
  1. package/README.md +1 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/config/ai-config.d.ts +54 -6
  4. package/dist/src/config/ai-config.d.ts.map +1 -1
  5. package/dist/src/config/ai-config.js +69 -6
  6. package/dist/src/config/ai-config.js.map +1 -1
  7. package/dist/src/config/ape-descriptions.d.ts +77 -0
  8. package/dist/src/config/ape-descriptions.d.ts.map +1 -0
  9. package/dist/src/config/ape-descriptions.js +177 -0
  10. package/dist/src/config/ape-descriptions.js.map +1 -0
  11. package/dist/src/index.d.ts +40 -0
  12. package/dist/src/index.d.ts.map +1 -1
  13. package/dist/src/index.js +564 -8
  14. package/dist/src/index.js.map +1 -1
  15. package/dist/src/prompts/adr-suggestion-prompts.d.ts +5 -0
  16. package/dist/src/prompts/adr-suggestion-prompts.d.ts.map +1 -1
  17. package/dist/src/prompts/adr-suggestion-prompts.js +22 -1
  18. package/dist/src/prompts/adr-suggestion-prompts.js.map +1 -1
  19. package/dist/src/prompts/prompt-catalog.d.ts +95 -0
  20. package/dist/src/prompts/prompt-catalog.d.ts.map +1 -0
  21. package/dist/src/prompts/prompt-catalog.js +300 -0
  22. package/dist/src/prompts/prompt-catalog.js.map +1 -0
  23. package/dist/src/resources/adrs-discovered-resource.d.ts +124 -0
  24. package/dist/src/resources/adrs-discovered-resource.d.ts.map +1 -0
  25. package/dist/src/resources/adrs-discovered-resource.js +174 -0
  26. package/dist/src/resources/adrs-discovered-resource.js.map +1 -0
  27. package/dist/src/resources/adrs-review-resource.d.ts +82 -0
  28. package/dist/src/resources/adrs-review-resource.d.ts.map +1 -0
  29. package/dist/src/resources/adrs-review-resource.js +160 -0
  30. package/dist/src/resources/adrs-review-resource.js.map +1 -0
  31. package/dist/src/resources/architectural-context-resource.d.ts +95 -0
  32. package/dist/src/resources/architectural-context-resource.d.ts.map +1 -0
  33. package/dist/src/resources/architectural-context-resource.js +428 -0
  34. package/dist/src/resources/architectural-context-resource.js.map +1 -0
  35. package/dist/src/resources/conversation-snapshot-resource.d.ts +92 -0
  36. package/dist/src/resources/conversation-snapshot-resource.d.ts.map +1 -0
  37. package/dist/src/resources/conversation-snapshot-resource.js +122 -0
  38. package/dist/src/resources/conversation-snapshot-resource.js.map +1 -0
  39. package/dist/src/resources/deployment-status-resource.js +1 -1
  40. package/dist/src/resources/deployment-status-resource.js.map +1 -1
  41. package/dist/src/resources/environment-analysis-resource.js +1 -1
  42. package/dist/src/resources/environment-analysis-resource.js.map +1 -1
  43. package/dist/src/resources/knowledge-graph-resource.d.ts +129 -0
  44. package/dist/src/resources/knowledge-graph-resource.d.ts.map +1 -0
  45. package/dist/src/resources/knowledge-graph-resource.js +217 -0
  46. package/dist/src/resources/knowledge-graph-resource.js.map +1 -0
  47. package/dist/src/resources/memory-expand-resource.d.ts +90 -0
  48. package/dist/src/resources/memory-expand-resource.d.ts.map +1 -0
  49. package/dist/src/resources/memory-expand-resource.js +176 -0
  50. package/dist/src/resources/memory-expand-resource.js.map +1 -0
  51. package/dist/src/resources/memory-stats-resource.d.ts +77 -0
  52. package/dist/src/resources/memory-stats-resource.d.ts.map +1 -0
  53. package/dist/src/resources/memory-stats-resource.js +108 -0
  54. package/dist/src/resources/memory-stats-resource.js.map +1 -0
  55. package/dist/src/resources/project-metrics-resource.js +1 -1
  56. package/dist/src/resources/project-metrics-resource.js.map +1 -1
  57. package/dist/src/resources/resource-cache.d.ts.map +1 -1
  58. package/dist/src/resources/resource-cache.js +2 -1
  59. package/dist/src/resources/resource-cache.js.map +1 -1
  60. package/dist/src/resources/server-context-resource.d.ts +69 -0
  61. package/dist/src/resources/server-context-resource.d.ts.map +1 -0
  62. package/dist/src/resources/server-context-resource.js +104 -0
  63. package/dist/src/resources/server-context-resource.js.map +1 -0
  64. package/dist/src/resources/tool-catalog-resource.d.ts +122 -0
  65. package/dist/src/resources/tool-catalog-resource.d.ts.map +1 -0
  66. package/dist/src/resources/tool-catalog-resource.js +167 -0
  67. package/dist/src/resources/tool-catalog-resource.js.map +1 -0
  68. package/dist/src/tools/adr-bootstrap-validation-tool.d.ts.map +1 -1
  69. package/dist/src/tools/adr-bootstrap-validation-tool.js +7 -6
  70. package/dist/src/tools/adr-bootstrap-validation-tool.js.map +1 -1
  71. package/dist/src/tools/adr-suggestion-tool.d.ts +5 -0
  72. package/dist/src/tools/adr-suggestion-tool.d.ts.map +1 -1
  73. package/dist/src/tools/adr-suggestion-tool.js +40 -71
  74. package/dist/src/tools/adr-suggestion-tool.js.map +1 -1
  75. package/dist/src/tools/bootstrap-validation-loop-tool.d.ts +23 -1
  76. package/dist/src/tools/bootstrap-validation-loop-tool.d.ts.map +1 -1
  77. package/dist/src/tools/bootstrap-validation-loop-tool.js +15 -5
  78. package/dist/src/tools/bootstrap-validation-loop-tool.js.map +1 -1
  79. package/dist/src/tools/ce-mcp-tools.d.ts +291 -0
  80. package/dist/src/tools/ce-mcp-tools.d.ts.map +1 -0
  81. package/dist/src/tools/ce-mcp-tools.js +1188 -0
  82. package/dist/src/tools/ce-mcp-tools.js.map +1 -0
  83. package/dist/src/tools/content-masking-tool.d.ts +11 -0
  84. package/dist/src/tools/content-masking-tool.d.ts.map +1 -1
  85. package/dist/src/tools/content-masking-tool.js +13 -6
  86. package/dist/src/tools/content-masking-tool.js.map +1 -1
  87. package/dist/src/tools/deployment-readiness-tool.d.ts +11 -0
  88. package/dist/src/tools/deployment-readiness-tool.d.ts.map +1 -1
  89. package/dist/src/tools/deployment-readiness-tool.js +10 -4
  90. package/dist/src/tools/deployment-readiness-tool.js.map +1 -1
  91. package/dist/src/tools/environment-analysis-tool.d.ts +96 -1
  92. package/dist/src/tools/environment-analysis-tool.d.ts.map +1 -1
  93. package/dist/src/tools/environment-analysis-tool.js +38 -46
  94. package/dist/src/tools/environment-analysis-tool.js.map +1 -1
  95. package/dist/src/tools/research-question-tool.d.ts.map +1 -1
  96. package/dist/src/tools/research-question-tool.js +3 -2
  97. package/dist/src/tools/research-question-tool.js.map +1 -1
  98. package/dist/src/tools/review-existing-adrs-tool.d.ts +5 -0
  99. package/dist/src/tools/review-existing-adrs-tool.d.ts.map +1 -1
  100. package/dist/src/tools/review-existing-adrs-tool.js +123 -42
  101. package/dist/src/tools/review-existing-adrs-tool.js.map +1 -1
  102. package/dist/src/tools/rule-generation-tool.d.ts.map +1 -1
  103. package/dist/src/tools/rule-generation-tool.js +3 -5
  104. package/dist/src/tools/rule-generation-tool.js.map +1 -1
  105. package/dist/src/tools/search-codebase-tool.d.ts +148 -0
  106. package/dist/src/tools/search-codebase-tool.d.ts.map +1 -0
  107. package/dist/src/tools/search-codebase-tool.js +406 -0
  108. package/dist/src/tools/search-codebase-tool.js.map +1 -0
  109. package/dist/src/tools/smart-git-push-tool-v2.js +1 -1
  110. package/dist/src/tools/smart-git-push-tool-v2.js.map +1 -1
  111. package/dist/src/tools/tool-catalog.d.ts +134 -0
  112. package/dist/src/tools/tool-catalog.d.ts.map +1 -0
  113. package/dist/src/tools/tool-catalog.js +1431 -0
  114. package/dist/src/tools/tool-catalog.js.map +1 -0
  115. package/dist/src/tools/tool-chain-orchestrator.d.ts +11 -2
  116. package/dist/src/tools/tool-chain-orchestrator.d.ts.map +1 -1
  117. package/dist/src/tools/tool-chain-orchestrator.js +11 -2
  118. package/dist/src/tools/tool-chain-orchestrator.js.map +1 -1
  119. package/dist/src/tools/tool-dispatcher.d.ts +98 -0
  120. package/dist/src/tools/tool-dispatcher.d.ts.map +1 -0
  121. package/dist/src/tools/tool-dispatcher.js +225 -0
  122. package/dist/src/tools/tool-dispatcher.js.map +1 -0
  123. package/dist/src/tools/tree-sitter-code-tools.d.ts +184 -0
  124. package/dist/src/tools/tree-sitter-code-tools.d.ts.map +1 -0
  125. package/dist/src/tools/tree-sitter-code-tools.js +642 -0
  126. package/dist/src/tools/tree-sitter-code-tools.js.map +1 -0
  127. package/dist/src/tools/troubleshoot-guided-workflow-tool.d.ts +22 -0
  128. package/dist/src/tools/troubleshoot-guided-workflow-tool.d.ts.map +1 -1
  129. package/dist/src/tools/troubleshoot-guided-workflow-tool.js +20 -3
  130. package/dist/src/tools/troubleshoot-guided-workflow-tool.js.map +1 -1
  131. package/dist/src/tools/update-knowledge-tool.d.ts +89 -0
  132. package/dist/src/tools/update-knowledge-tool.d.ts.map +1 -0
  133. package/dist/src/tools/update-knowledge-tool.js +222 -0
  134. package/dist/src/tools/update-knowledge-tool.js.map +1 -0
  135. package/dist/src/types/ce-mcp.d.ts +248 -0
  136. package/dist/src/types/ce-mcp.d.ts.map +1 -0
  137. package/dist/src/types/ce-mcp.js +27 -0
  138. package/dist/src/types/ce-mcp.js.map +1 -0
  139. package/dist/src/utils/adr-context-detector.js +1 -1
  140. package/dist/src/utils/adr-context-detector.js.map +1 -1
  141. package/dist/src/utils/adr-planning-task-integration.d.ts +260 -0
  142. package/dist/src/utils/adr-planning-task-integration.d.ts.map +1 -0
  143. package/dist/src/utils/adr-planning-task-integration.js +466 -0
  144. package/dist/src/utils/adr-planning-task-integration.js.map +1 -0
  145. package/dist/src/utils/adr-timeline-extractor.d.ts.map +1 -1
  146. package/dist/src/utils/adr-timeline-extractor.js +3 -2
  147. package/dist/src/utils/adr-timeline-extractor.js.map +1 -1
  148. package/dist/src/utils/ai-executor.d.ts +10 -0
  149. package/dist/src/utils/ai-executor.d.ts.map +1 -1
  150. package/dist/src/utils/ai-executor.js +14 -3
  151. package/dist/src/utils/ai-executor.js.map +1 -1
  152. package/dist/src/utils/automatic-prompt-engineering.d.ts +5 -0
  153. package/dist/src/utils/automatic-prompt-engineering.d.ts.map +1 -1
  154. package/dist/src/utils/automatic-prompt-engineering.js +10 -90
  155. package/dist/src/utils/automatic-prompt-engineering.js.map +1 -1
  156. package/dist/src/utils/bootstrap-task-integration.d.ts +214 -0
  157. package/dist/src/utils/bootstrap-task-integration.d.ts.map +1 -0
  158. package/dist/src/utils/bootstrap-task-integration.js +365 -0
  159. package/dist/src/utils/bootstrap-task-integration.js.map +1 -0
  160. package/dist/src/utils/dag-executor.js +1 -1
  161. package/dist/src/utils/dag-executor.js.map +1 -1
  162. package/dist/src/utils/deployment-task-integration.d.ts +260 -0
  163. package/dist/src/utils/deployment-task-integration.d.ts.map +1 -0
  164. package/dist/src/utils/deployment-task-integration.js +393 -0
  165. package/dist/src/utils/deployment-task-integration.js.map +1 -0
  166. package/dist/src/utils/dynamic-deployment-intelligence.js +1 -1
  167. package/dist/src/utils/dynamic-deployment-intelligence.js.map +1 -1
  168. package/dist/src/utils/enhanced-logging.d.ts +3 -0
  169. package/dist/src/utils/enhanced-logging.d.ts.map +1 -1
  170. package/dist/src/utils/enhanced-logging.js +9 -30
  171. package/dist/src/utils/enhanced-logging.js.map +1 -1
  172. package/dist/src/utils/environment-capability-registry.js +1 -1
  173. package/dist/src/utils/environment-capability-registry.js.map +1 -1
  174. package/dist/src/utils/file-system.d.ts.map +1 -1
  175. package/dist/src/utils/file-system.js +33 -3
  176. package/dist/src/utils/file-system.js.map +1 -1
  177. package/dist/src/utils/gitleaks-detector.js +1 -1
  178. package/dist/src/utils/gitleaks-detector.js.map +1 -1
  179. package/dist/src/utils/knowledge-graph-manager.d.ts +13 -0
  180. package/dist/src/utils/knowledge-graph-manager.d.ts.map +1 -1
  181. package/dist/src/utils/knowledge-graph-manager.js +13 -0
  182. package/dist/src/utils/knowledge-graph-manager.js.map +1 -1
  183. package/dist/src/utils/prompt-execution.d.ts +29 -1
  184. package/dist/src/utils/prompt-execution.d.ts.map +1 -1
  185. package/dist/src/utils/prompt-execution.js +29 -1
  186. package/dist/src/utils/prompt-execution.js.map +1 -1
  187. package/dist/src/utils/research-orchestrator.d.ts +87 -1
  188. package/dist/src/utils/research-orchestrator.d.ts.map +1 -1
  189. package/dist/src/utils/research-orchestrator.js +121 -17
  190. package/dist/src/utils/research-orchestrator.js.map +1 -1
  191. package/dist/src/utils/research-task-integration.d.ts +297 -0
  192. package/dist/src/utils/research-task-integration.d.ts.map +1 -0
  193. package/dist/src/utils/research-task-integration.js +449 -0
  194. package/dist/src/utils/research-task-integration.js.map +1 -0
  195. package/dist/src/utils/ripgrep-wrapper.d.ts.map +1 -1
  196. package/dist/src/utils/ripgrep-wrapper.js +17 -3
  197. package/dist/src/utils/ripgrep-wrapper.js.map +1 -1
  198. package/dist/src/utils/sandbox-executor.d.ts +145 -0
  199. package/dist/src/utils/sandbox-executor.d.ts.map +1 -0
  200. package/dist/src/utils/sandbox-executor.js +642 -0
  201. package/dist/src/utils/sandbox-executor.js.map +1 -0
  202. package/dist/src/utils/server-context-generator.d.ts +5 -0
  203. package/dist/src/utils/server-context-generator.d.ts.map +1 -1
  204. package/dist/src/utils/server-context-generator.js +38 -0
  205. package/dist/src/utils/server-context-generator.js.map +1 -1
  206. package/dist/src/utils/task-manager.d.ts +239 -0
  207. package/dist/src/utils/task-manager.d.ts.map +1 -0
  208. package/dist/src/utils/task-manager.js +528 -0
  209. package/dist/src/utils/task-manager.js.map +1 -0
  210. package/dist/src/utils/task-persistence.d.ts +82 -0
  211. package/dist/src/utils/task-persistence.d.ts.map +1 -0
  212. package/dist/src/utils/task-persistence.js +248 -0
  213. package/dist/src/utils/task-persistence.js.map +1 -0
  214. package/dist/src/utils/test-aware-defaults.d.ts +57 -0
  215. package/dist/src/utils/test-aware-defaults.d.ts.map +1 -0
  216. package/dist/src/utils/test-aware-defaults.js +71 -0
  217. package/dist/src/utils/test-aware-defaults.js.map +1 -0
  218. package/dist/src/utils/tree-sitter-analyzer.d.ts +42 -5
  219. package/dist/src/utils/tree-sitter-analyzer.d.ts.map +1 -1
  220. package/dist/src/utils/tree-sitter-analyzer.js +499 -17
  221. package/dist/src/utils/tree-sitter-analyzer.js.map +1 -1
  222. package/package.json +24 -19
  223. package/dist/src/tools/smart-git-push-tool.d.ts +0 -55
  224. package/dist/src/tools/smart-git-push-tool.d.ts.map +0 -1
  225. package/dist/src/tools/smart-git-push-tool.js +0 -1011
  226. package/dist/src/tools/smart-git-push-tool.js.map +0 -1
@@ -0,0 +1,174 @@
1
+ /**
2
+ * ADRs Discovered Resource - ADR discovery and summary
3
+ * URI Pattern: adr://adrs/discovered
4
+ */
5
+ import * as path from 'path';
6
+ import { McpAdrError } from '../types/index.js';
7
+ import { resourceCache, generateETag } from './resource-cache.js';
8
+ import { resourceRouter } from './resource-router.js';
9
+ /**
10
+ * Generate ADRs discovered resource with discovery results and summary.
11
+ *
12
+ * Discovers and catalogs all Architectural Decision Records (ADRs) in a project:
13
+ * - Scans configured ADR directory for decision records
14
+ * - Extracts metadata (title, status, date, category)
15
+ * - Generates summary statistics by status and category
16
+ * - Provides recommendations for ADR management
17
+ *
18
+ * **URI Pattern:** `adr://adrs/discovered`
19
+ *
20
+ * **Query Parameters:**
21
+ * - `projectPath`: Override project root path (default: process.cwd())
22
+ * - `adrDirectory`: Override ADR directory (default: docs/adrs)
23
+ * - `includeContent`: Include full ADR content (default: false)
24
+ * - `includeTimeline`: Include timeline analysis (default: false)
25
+ *
26
+ * @param params - URL path parameters (none for this resource)
27
+ * @param searchParams - URL query parameters for customization
28
+ *
29
+ * @returns Promise resolving to resource generation result containing:
30
+ * - data: ADR discovery results with summaries
31
+ * - contentType: "application/json"
32
+ * - lastModified: ISO timestamp of generation
33
+ * - cacheKey: Unique identifier "adrs-discovered" or "adrs-discovered:{projectPath}"
34
+ * - ttl: Cache duration (120 seconds / 2 minutes)
35
+ * - etag: Entity tag for cache validation
36
+ *
37
+ * @throws {McpAdrError} When:
38
+ * - RESOURCE_NOT_FOUND: ADR directory not found or inaccessible
39
+ * - RESOURCE_GENERATION_ERROR: ADR discovery or parsing fails
40
+ *
41
+ * @example
42
+ * ```typescript
43
+ * // Discover ADRs in default location
44
+ * const discovered = await generateAdrsDiscoveredResource(
45
+ * {},
46
+ * new URLSearchParams()
47
+ * );
48
+ *
49
+ * console.log(`Found ${discovered.data.totalAdrs} ADRs`);
50
+ * console.log(`Accepted: ${discovered.data.summary.byStatus.accepted}`);
51
+ * console.log(`Proposed: ${discovered.data.summary.byStatus.proposed}`);
52
+ *
53
+ * // Discover ADRs in custom location
54
+ * const custom = await generateAdrsDiscoveredResource(
55
+ * {},
56
+ * new URLSearchParams('projectPath=/custom/path&adrDirectory=decisions')
57
+ * );
58
+ *
59
+ * // Expected output structure:
60
+ * {
61
+ * data: {
62
+ * directory: "/project/docs/adrs",
63
+ * totalAdrs: 25,
64
+ * adrs: [
65
+ * {
66
+ * filename: "001-use-postgresql.md",
67
+ * title: "Use PostgreSQL for primary database",
68
+ * status: "accepted",
69
+ * date: "2025-01-15",
70
+ * path: "/project/docs/adrs/001-use-postgresql.md",
71
+ * number: "001",
72
+ * category: "database",
73
+ * tags: ["postgresql", "database"]
74
+ * },
75
+ * ...
76
+ * ],
77
+ * summary: {
78
+ * byStatus: {
79
+ * accepted: 20,
80
+ * proposed: 3,
81
+ * deprecated: 2
82
+ * },
83
+ * byCategory: {
84
+ * database: 5,
85
+ * api: 8,
86
+ * infrastructure: 7,
87
+ * security: 5
88
+ * }
89
+ * },
90
+ * recommendations: [
91
+ * "Consider reviewing deprecated ADRs",
92
+ * "3 proposed ADRs need decisions"
93
+ * ],
94
+ * timestamp: "2025-12-16T04:30:00.000Z"
95
+ * },
96
+ * contentType: "application/json",
97
+ * cacheKey: "adrs-discovered",
98
+ * ttl: 120
99
+ * }
100
+ * ```
101
+ *
102
+ * @since v2.2.0
103
+ * @see {@link discoverAdrsInDirectory} for ADR discovery logic
104
+ */
105
+ export async function generateAdrsDiscoveredResource(_params, searchParams) {
106
+ const projectPath = searchParams.get('projectPath') || process.cwd();
107
+ const adrDirectoryParam = searchParams.get('adrDirectory') || process.env['ADR_DIRECTORY'] || 'docs/adrs';
108
+ const includeContent = searchParams.get('includeContent') === 'true';
109
+ const includeTimeline = searchParams.get('includeTimeline') === 'true';
110
+ const cacheKey = projectPath === process.cwd() ? 'adrs-discovered' : `adrs-discovered:${projectPath}`;
111
+ // Check cache
112
+ const cached = await resourceCache.get(cacheKey);
113
+ if (cached) {
114
+ return cached;
115
+ }
116
+ try {
117
+ // Dynamically import ADR discovery to avoid circular dependencies
118
+ const { discoverAdrsInDirectory } = await import('../utils/adr-discovery.js');
119
+ // Resolve ADR directory
120
+ const adrDirectory = path.resolve(projectPath, adrDirectoryParam);
121
+ // Discover ADRs
122
+ const discoveryResult = await discoverAdrsInDirectory(adrDirectory, projectPath, {
123
+ includeContent,
124
+ includeTimeline,
125
+ });
126
+ // Format ADR list (exclude content for lighter response)
127
+ const adrs = discoveryResult.adrs.map(adr => {
128
+ const formatted = {
129
+ filename: adr.filename,
130
+ title: adr.title,
131
+ status: adr.status,
132
+ path: adr.path,
133
+ };
134
+ if (adr.date !== undefined)
135
+ formatted.date = adr.date;
136
+ if (adr.metadata?.number !== undefined)
137
+ formatted.number = adr.metadata.number;
138
+ if (adr.metadata?.category !== undefined)
139
+ formatted.category = adr.metadata.category;
140
+ if (adr.metadata?.tags !== undefined)
141
+ formatted.tags = adr.metadata.tags;
142
+ return formatted;
143
+ });
144
+ const discoveredData = {
145
+ directory: discoveryResult.directory,
146
+ totalAdrs: discoveryResult.totalAdrs,
147
+ adrs,
148
+ summary: discoveryResult.summary,
149
+ recommendations: discoveryResult.recommendations,
150
+ timestamp: new Date().toISOString(),
151
+ };
152
+ const result = {
153
+ data: discoveredData,
154
+ contentType: 'application/json',
155
+ lastModified: new Date().toISOString(),
156
+ cacheKey,
157
+ ttl: 120, // 2 minutes cache (ADRs change occasionally)
158
+ etag: generateETag(discoveredData),
159
+ };
160
+ // Cache result
161
+ resourceCache.set(cacheKey, result, result.ttl);
162
+ return result;
163
+ }
164
+ catch (error) {
165
+ // Check if it's a directory not found error
166
+ if (error instanceof Error && error.message.includes('not found')) {
167
+ throw new McpAdrError(`ADR directory not found: ${adrDirectoryParam}`, 'RESOURCE_NOT_FOUND');
168
+ }
169
+ throw new McpAdrError(`Failed to discover ADRs: ${error instanceof Error ? error.message : String(error)}`, 'RESOURCE_GENERATION_ERROR');
170
+ }
171
+ }
172
+ // Register route
173
+ resourceRouter.register('/adrs/discovered', generateAdrsDiscoveredResource, 'Discovered ADRs with summary');
174
+ //# sourceMappingURL=adrs-discovered-resource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adrs-discovered-resource.js","sourceRoot":"","sources":["../../../src/resources/adrs-discovered-resource.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * ADRs Review Resource - Review specific ADR against code implementation
3
+ * URI Pattern: adr://adrs/{id}/review
4
+ */
5
+ import { URLSearchParams } from 'url';
6
+ import { ResourceGenerationResult } from './index.js';
7
+ export interface AdrReviewData {
8
+ adrId: string;
9
+ title: string;
10
+ status: string;
11
+ complianceScore: number;
12
+ codeCompliance: {
13
+ implemented: boolean;
14
+ partiallyImplemented: boolean;
15
+ notImplemented: boolean;
16
+ evidence: string[];
17
+ gaps: string[];
18
+ };
19
+ recommendations: {
20
+ updateAdr: boolean;
21
+ updateCode: boolean;
22
+ createPlan: boolean;
23
+ actions: string[];
24
+ };
25
+ analysis: string;
26
+ timestamp: string;
27
+ projectPath: string;
28
+ analysisDepth: string;
29
+ }
30
+ /**
31
+ * Generate ADR review resource showing compliance analysis against code.
32
+ *
33
+ * Returns a comprehensive review of a specific ADR including:
34
+ * - Compliance score against actual implementation
35
+ * - Evidence of implementation found in code
36
+ * - Gaps between ADR decisions and code
37
+ * - Recommendations for updates
38
+ *
39
+ * **URI Pattern:** `adr://adrs/{id}/review`
40
+ *
41
+ * **Query Parameters:**
42
+ * - `projectPath`: Override project root path (default: process.cwd())
43
+ * - `analysisDepth`: 'basic' | 'detailed' | 'comprehensive' (default: 'detailed')
44
+ * - `includeTreeSitter`: Use tree-sitter for analysis (default: true)
45
+ *
46
+ * @param params - URL path parameters containing:
47
+ * - id: ADR identifier (e.g., "001", "database-architecture")
48
+ * @param searchParams - URL query parameters for customization
49
+ *
50
+ * @returns Promise resolving to resource generation result containing:
51
+ * - data: Complete ADR review data with compliance analysis
52
+ * - contentType: "application/json"
53
+ * - lastModified: ISO timestamp of generation
54
+ * - cacheKey: Unique identifier "adr-review:{id}"
55
+ * - ttl: Cache duration (180 seconds / 3 minutes)
56
+ * - etag: Entity tag for cache validation
57
+ *
58
+ * @throws {McpAdrError} When review generation fails
59
+ *
60
+ * @example
61
+ * ```typescript
62
+ * // Get review for ADR 001
63
+ * const review = await generateAdrsReviewResource(
64
+ * { id: '001' },
65
+ * new URLSearchParams()
66
+ * );
67
+ *
68
+ * console.log(`Compliance score: ${review.data.complianceScore}/10`);
69
+ * console.log(`Gaps: ${review.data.codeCompliance.gaps.join(', ')}`);
70
+ *
71
+ * // Comprehensive review with custom project path
72
+ * const detailed = await generateAdrsReviewResource(
73
+ * { id: 'database-architecture' },
74
+ * new URLSearchParams('analysisDepth=comprehensive&projectPath=/my/project')
75
+ * );
76
+ * ```
77
+ *
78
+ * @since v2.2.0
79
+ * @see {@link reviewExistingAdrs} for the underlying review logic
80
+ */
81
+ export declare function generateAdrsReviewResource(params: Record<string, string>, searchParams: URLSearchParams): Promise<ResourceGenerationResult>;
82
+ //# sourceMappingURL=adrs-review-resource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adrs-review-resource.d.ts","sourceRoot":"","sources":["../../../src/resources/adrs-review-resource.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,KAAK,CAAC;AAGtC,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAGtD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,cAAc,EAAE;QACd,WAAW,EAAE,OAAO,CAAC;QACrB,oBAAoB,EAAE,OAAO,CAAC;QAC9B,cAAc,EAAE,OAAO,CAAC;QACxB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,IAAI,EAAE,MAAM,EAAE,CAAC;KAChB,CAAC;IACF,eAAe,EAAE;QACf,SAAS,EAAE,OAAO,CAAC;QACnB,UAAU,EAAE,OAAO,CAAC;QACpB,UAAU,EAAE,OAAO,CAAC;QACpB,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,YAAY,EAAE,eAAe,GAC5B,OAAO,CAAC,wBAAwB,CAAC,CA8FnC"}
@@ -0,0 +1,160 @@
1
+ /**
2
+ * ADRs Review Resource - Review specific ADR against code implementation
3
+ * URI Pattern: adr://adrs/{id}/review
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
+ * Generate ADR review resource showing compliance analysis against code.
10
+ *
11
+ * Returns a comprehensive review of a specific ADR including:
12
+ * - Compliance score against actual implementation
13
+ * - Evidence of implementation found in code
14
+ * - Gaps between ADR decisions and code
15
+ * - Recommendations for updates
16
+ *
17
+ * **URI Pattern:** `adr://adrs/{id}/review`
18
+ *
19
+ * **Query Parameters:**
20
+ * - `projectPath`: Override project root path (default: process.cwd())
21
+ * - `analysisDepth`: 'basic' | 'detailed' | 'comprehensive' (default: 'detailed')
22
+ * - `includeTreeSitter`: Use tree-sitter for analysis (default: true)
23
+ *
24
+ * @param params - URL path parameters containing:
25
+ * - id: ADR identifier (e.g., "001", "database-architecture")
26
+ * @param searchParams - URL query parameters for customization
27
+ *
28
+ * @returns Promise resolving to resource generation result containing:
29
+ * - data: Complete ADR review data with compliance analysis
30
+ * - contentType: "application/json"
31
+ * - lastModified: ISO timestamp of generation
32
+ * - cacheKey: Unique identifier "adr-review:{id}"
33
+ * - ttl: Cache duration (180 seconds / 3 minutes)
34
+ * - etag: Entity tag for cache validation
35
+ *
36
+ * @throws {McpAdrError} When review generation fails
37
+ *
38
+ * @example
39
+ * ```typescript
40
+ * // Get review for ADR 001
41
+ * const review = await generateAdrsReviewResource(
42
+ * { id: '001' },
43
+ * new URLSearchParams()
44
+ * );
45
+ *
46
+ * console.log(`Compliance score: ${review.data.complianceScore}/10`);
47
+ * console.log(`Gaps: ${review.data.codeCompliance.gaps.join(', ')}`);
48
+ *
49
+ * // Comprehensive review with custom project path
50
+ * const detailed = await generateAdrsReviewResource(
51
+ * { id: 'database-architecture' },
52
+ * new URLSearchParams('analysisDepth=comprehensive&projectPath=/my/project')
53
+ * );
54
+ * ```
55
+ *
56
+ * @since v2.2.0
57
+ * @see {@link reviewExistingAdrs} for the underlying review logic
58
+ */
59
+ export async function generateAdrsReviewResource(params, searchParams) {
60
+ const id = params['id'];
61
+ if (!id) {
62
+ throw new McpAdrError('Missing required parameter: id', 'INVALID_PARAMS');
63
+ }
64
+ const projectPath = searchParams.get('projectPath') || process.cwd();
65
+ const analysisDepth = (searchParams.get('analysisDepth') || 'detailed');
66
+ const includeTreeSitter = searchParams.get('includeTreeSitter') !== 'false';
67
+ const cacheKey = `adr-review:${id}:${analysisDepth}`;
68
+ // Check cache
69
+ const cached = await resourceCache.get(cacheKey);
70
+ if (cached) {
71
+ return cached;
72
+ }
73
+ try {
74
+ // Import the review tool dynamically to avoid circular dependencies
75
+ const { reviewExistingAdrs } = await import('../tools/review-existing-adrs-tool.js');
76
+ // Perform the review for the specific ADR
77
+ const reviewResult = await reviewExistingAdrs({
78
+ projectPath,
79
+ specificAdr: id,
80
+ analysisDepth,
81
+ includeTreeSitter,
82
+ generateUpdatePlan: true,
83
+ });
84
+ // Parse the review result to extract structured data
85
+ const reviewText = reviewResult.content?.[0]?.text || '';
86
+ // Extract compliance score from the review
87
+ const scoreMatch = reviewText.match(/Compliance Score[:\s]*(\d+(?:\.\d+)?)/i);
88
+ const complianceScore = scoreMatch ? parseFloat(scoreMatch[1]) : 5;
89
+ // Extract title
90
+ const titleMatch = reviewText.match(/###\s*([^\n]+)/);
91
+ const title = titleMatch ? titleMatch[1].trim() : `ADR ${id}`;
92
+ // Extract status
93
+ const statusMatch = reviewText.match(/Status[:\s]*(\w+)/i);
94
+ const status = statusMatch ? statusMatch[1] : 'unknown';
95
+ // Build structured review data
96
+ const reviewData = {
97
+ adrId: id,
98
+ title,
99
+ status,
100
+ complianceScore,
101
+ codeCompliance: {
102
+ implemented: complianceScore >= 8,
103
+ partiallyImplemented: complianceScore >= 5 && complianceScore < 8,
104
+ notImplemented: complianceScore < 5,
105
+ evidence: extractListItems(reviewText, 'Evidence Found'),
106
+ gaps: extractListItems(reviewText, 'Gaps Identified'),
107
+ },
108
+ recommendations: {
109
+ updateAdr: complianceScore < 7,
110
+ updateCode: complianceScore < 5,
111
+ createPlan: complianceScore < 5,
112
+ actions: extractListItems(reviewText, 'Recommendations'),
113
+ },
114
+ analysis: reviewText,
115
+ timestamp: new Date().toISOString(),
116
+ projectPath,
117
+ analysisDepth,
118
+ };
119
+ const result = {
120
+ data: reviewData,
121
+ contentType: 'application/json',
122
+ lastModified: new Date().toISOString(),
123
+ cacheKey,
124
+ ttl: 180, // 3 minutes cache (reviews are somewhat expensive)
125
+ etag: generateETag(reviewData),
126
+ };
127
+ // Cache result
128
+ resourceCache.set(cacheKey, result, result.ttl);
129
+ return result;
130
+ }
131
+ catch (error) {
132
+ throw new McpAdrError(`Failed to generate ADR review: ${error instanceof Error ? error.message : String(error)}`, 'RESOURCE_GENERATION_ERROR');
133
+ }
134
+ }
135
+ /**
136
+ * Extract list items from a section in the review text
137
+ */
138
+ function extractListItems(text, sectionName) {
139
+ const items = [];
140
+ // Find the section
141
+ const sectionRegex = new RegExp(`(?:#{1,4}\\s*)?${sectionName}[^\\n]*\\n([\\s\\S]*?)(?=#{1,4}|$)`, 'i');
142
+ const sectionMatch = text.match(sectionRegex);
143
+ if (sectionMatch && sectionMatch[1]) {
144
+ const sectionContent = sectionMatch[1];
145
+ // Extract list items (lines starting with - or *)
146
+ const listMatches = sectionContent.match(/^[\s]*[-*]\s*(.+)$/gm);
147
+ if (listMatches) {
148
+ listMatches.forEach(match => {
149
+ const item = match.replace(/^[\s]*[-*]\s*/, '').trim();
150
+ if (item && !item.startsWith('No ')) {
151
+ items.push(item);
152
+ }
153
+ });
154
+ }
155
+ }
156
+ return items;
157
+ }
158
+ // Register route
159
+ resourceRouter.register('/adrs/{id}/review', generateAdrsReviewResource, 'Review specific ADR against code implementation');
160
+ //# sourceMappingURL=adrs-review-resource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adrs-review-resource.js","sourceRoot":"","sources":["../../../src/resources/adrs-review-resource.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Architectural Context Resource - Current architectural state and decisions
3
+ * URI Pattern: adr://architecture/context
4
+ */
5
+ import { URLSearchParams } from 'url';
6
+ import { ResourceGenerationResult } from './index.js';
7
+ import type { KnowledgeGraphManager } from '../utils/knowledge-graph-manager.js';
8
+ export interface ArchitecturalContextData {
9
+ summary: {
10
+ totalAdrs: number;
11
+ activeDecisions: number;
12
+ deprecatedDecisions: number;
13
+ proposedDecisions: number;
14
+ technologiesUsed: string[];
15
+ architecturalPatterns: string[];
16
+ };
17
+ decisions: Array<{
18
+ id: string;
19
+ title: string;
20
+ status: string;
21
+ category: string;
22
+ impact: 'high' | 'medium' | 'low';
23
+ dependencies: string[];
24
+ }>;
25
+ technologyStack: {
26
+ frontend: string[];
27
+ backend: string[];
28
+ database: string[];
29
+ infrastructure: string[];
30
+ devops: string[];
31
+ };
32
+ patterns: Array<{
33
+ name: string;
34
+ description: string;
35
+ usedIn: string[];
36
+ relatedAdrs: string[];
37
+ }>;
38
+ recommendations: string[];
39
+ timestamp: string;
40
+ projectPath: string;
41
+ }
42
+ /**
43
+ * Generate architectural context resource showing current state and decisions.
44
+ *
45
+ * Returns a comprehensive view of the project's architectural state:
46
+ * - Summary of all ADRs by status
47
+ * - Technology stack analysis
48
+ * - Architectural patterns in use
49
+ * - Recommendations for improvements
50
+ *
51
+ * **URI Pattern:** `adr://architecture/context`
52
+ *
53
+ * **Query Parameters:**
54
+ * - `projectPath`: Override project root path (default: process.cwd())
55
+ * - `includeDeprecated`: Include deprecated decisions (default: true)
56
+ * - `includeProposed`: Include proposed decisions (default: true)
57
+ * - `maxDecisions`: Maximum decisions to return (default: 50)
58
+ *
59
+ * @param params - URL path parameters (none for this resource)
60
+ * @param searchParams - URL query parameters for customization
61
+ * @param kgManager - Optional knowledge graph manager instance
62
+ *
63
+ * @returns Promise resolving to resource generation result containing:
64
+ * - data: Complete architectural context data
65
+ * - contentType: "application/json"
66
+ * - lastModified: ISO timestamp of generation
67
+ * - cacheKey: Unique identifier "architectural-context"
68
+ * - ttl: Cache duration (300 seconds / 5 minutes)
69
+ * - etag: Entity tag for cache validation
70
+ *
71
+ * @throws {McpAdrError} When context generation fails
72
+ *
73
+ * @example
74
+ * ```typescript
75
+ * // Get full architectural context
76
+ * const context = await generateArchitecturalContextResource(
77
+ * {},
78
+ * new URLSearchParams()
79
+ * );
80
+ *
81
+ * console.log(`Total ADRs: ${context.data.summary.totalAdrs}`);
82
+ * console.log(`Technologies: ${context.data.summary.technologiesUsed.join(', ')}`);
83
+ *
84
+ * // Exclude deprecated decisions
85
+ * const active = await generateArchitecturalContextResource(
86
+ * {},
87
+ * new URLSearchParams('includeDeprecated=false')
88
+ * );
89
+ * ```
90
+ *
91
+ * @since v2.2.0
92
+ * @see {@link KnowledgeGraphManager} for knowledge graph queries
93
+ */
94
+ export declare function generateArchitecturalContextResource(_params: Record<string, string>, searchParams: URLSearchParams, kgManager?: KnowledgeGraphManager): Promise<ResourceGenerationResult>;
95
+ //# sourceMappingURL=architectural-context-resource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"architectural-context-resource.d.ts","sourceRoot":"","sources":["../../../src/resources/architectural-context-resource.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,KAAK,CAAC;AAGtC,OAAO,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAEtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,qCAAqC,CAAC;AAEjF,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE;QACP,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,EAAE,MAAM,CAAC;QACxB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,gBAAgB,EAAE,MAAM,EAAE,CAAC;QAC3B,qBAAqB,EAAE,MAAM,EAAE,CAAC;KACjC,CAAC;IACF,SAAS,EAAE,KAAK,CAAC;QACf,EAAE,EAAE,MAAM,CAAC;QACX,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;QAClC,YAAY,EAAE,MAAM,EAAE,CAAC;KACxB,CAAC,CAAC;IACH,eAAe,EAAE;QACf,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,cAAc,EAAE,MAAM,EAAE,CAAC;QACzB,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC;IACF,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,WAAW,EAAE,MAAM,EAAE,CAAC;KACvB,CAAC,CAAC;IACH,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,wBAAsB,oCAAoC,CACxD,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,YAAY,EAAE,eAAe,EAC7B,SAAS,CAAC,EAAE,qBAAqB,GAChC,OAAO,CAAC,wBAAwB,CAAC,CAmJnC"}