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.
Files changed (408) hide show
  1. package/README.md +55 -8
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/src/index.d.ts +78 -2
  4. package/dist/src/index.d.ts.map +1 -1
  5. package/dist/src/index.js +1793 -577
  6. package/dist/src/index.js.map +1 -1
  7. package/dist/src/prompts/index.d.ts.map +1 -1
  8. package/dist/src/prompts/index.js +23 -6
  9. package/dist/src/prompts/index.js.map +1 -1
  10. package/dist/src/prompts/validated-pattern-prompts.d.ts +33 -0
  11. package/dist/src/prompts/validated-pattern-prompts.d.ts.map +1 -0
  12. package/dist/src/prompts/validated-pattern-prompts.js +337 -0
  13. package/dist/src/prompts/validated-pattern-prompts.js.map +1 -0
  14. package/dist/src/resources/adr-by-id-resource.d.ts +116 -0
  15. package/dist/src/resources/adr-by-id-resource.d.ts.map +1 -0
  16. package/dist/src/resources/adr-by-id-resource.js +213 -0
  17. package/dist/src/resources/adr-by-id-resource.js.map +1 -0
  18. package/dist/src/resources/code-quality-resource.d.ts +105 -0
  19. package/dist/src/resources/code-quality-resource.d.ts.map +1 -0
  20. package/dist/src/resources/code-quality-resource.js +282 -0
  21. package/dist/src/resources/code-quality-resource.js.map +1 -0
  22. package/dist/src/resources/deployment-history-resource.d.ts +214 -0
  23. package/dist/src/resources/deployment-history-resource.d.ts.map +1 -0
  24. package/dist/src/resources/deployment-history-resource.js +308 -0
  25. package/dist/src/resources/deployment-history-resource.js.map +1 -0
  26. package/dist/src/resources/deployment-status-resource.d.ts +256 -0
  27. package/dist/src/resources/deployment-status-resource.d.ts.map +1 -0
  28. package/dist/src/resources/deployment-status-resource.js +665 -0
  29. package/dist/src/resources/deployment-status-resource.js.map +1 -0
  30. package/dist/src/resources/environment-analysis-resource.d.ts +237 -0
  31. package/dist/src/resources/environment-analysis-resource.d.ts.map +1 -0
  32. package/dist/src/resources/environment-analysis-resource.js +646 -0
  33. package/dist/src/resources/environment-analysis-resource.js.map +1 -0
  34. package/dist/src/resources/index.d.ts +6 -2
  35. package/dist/src/resources/index.d.ts.map +1 -1
  36. package/dist/src/resources/index.js +247 -492
  37. package/dist/src/resources/index.js.map +1 -1
  38. package/dist/src/resources/memory-snapshots-resource.d.ts +180 -0
  39. package/dist/src/resources/memory-snapshots-resource.d.ts.map +1 -0
  40. package/dist/src/resources/memory-snapshots-resource.js +847 -0
  41. package/dist/src/resources/memory-snapshots-resource.js.map +1 -0
  42. package/dist/src/resources/pattern-base-code-by-platform-resource.d.ts +35 -0
  43. package/dist/src/resources/pattern-base-code-by-platform-resource.d.ts.map +1 -0
  44. package/dist/src/resources/pattern-base-code-by-platform-resource.js +72 -0
  45. package/dist/src/resources/pattern-base-code-by-platform-resource.js.map +1 -0
  46. package/dist/src/resources/pattern-by-name-resource.d.ts +53 -0
  47. package/dist/src/resources/pattern-by-name-resource.d.ts.map +1 -0
  48. package/dist/src/resources/pattern-by-name-resource.js +200 -0
  49. package/dist/src/resources/pattern-by-name-resource.js.map +1 -0
  50. package/dist/src/resources/pattern-sources-by-platform-resource.d.ts +26 -0
  51. package/dist/src/resources/pattern-sources-by-platform-resource.d.ts.map +1 -0
  52. package/dist/src/resources/pattern-sources-by-platform-resource.js +59 -0
  53. package/dist/src/resources/pattern-sources-by-platform-resource.js.map +1 -0
  54. package/dist/src/resources/project-metrics-resource.d.ts +180 -0
  55. package/dist/src/resources/project-metrics-resource.d.ts.map +1 -0
  56. package/dist/src/resources/project-metrics-resource.js +487 -0
  57. package/dist/src/resources/project-metrics-resource.js.map +1 -0
  58. package/dist/src/resources/project-status-resource.d.ts +75 -0
  59. package/dist/src/resources/project-status-resource.d.ts.map +1 -0
  60. package/dist/src/resources/project-status-resource.js +189 -0
  61. package/dist/src/resources/project-status-resource.js.map +1 -0
  62. package/dist/src/resources/research-by-topic-resource.d.ts +21 -0
  63. package/dist/src/resources/research-by-topic-resource.d.ts.map +1 -0
  64. package/dist/src/resources/research-by-topic-resource.js +125 -0
  65. package/dist/src/resources/research-by-topic-resource.js.map +1 -0
  66. package/dist/src/resources/research-index-resource.d.ts +100 -0
  67. package/dist/src/resources/research-index-resource.d.ts.map +1 -0
  68. package/dist/src/resources/research-index-resource.js +200 -0
  69. package/dist/src/resources/research-index-resource.js.map +1 -0
  70. package/dist/src/resources/resource-cache.d.ts +144 -0
  71. package/dist/src/resources/resource-cache.d.ts.map +1 -0
  72. package/dist/src/resources/resource-cache.js +316 -0
  73. package/dist/src/resources/resource-cache.js.map +1 -0
  74. package/dist/src/resources/resource-router.d.ts +45 -0
  75. package/dist/src/resources/resource-router.d.ts.map +1 -0
  76. package/dist/src/resources/resource-router.js +96 -0
  77. package/dist/src/resources/resource-router.js.map +1 -0
  78. package/dist/src/resources/rule-by-id-resource.d.ts +38 -0
  79. package/dist/src/resources/rule-by-id-resource.d.ts.map +1 -0
  80. package/dist/src/resources/rule-by-id-resource.js +104 -0
  81. package/dist/src/resources/rule-by-id-resource.js.map +1 -0
  82. package/dist/src/resources/rule-catalog-resource.d.ts +126 -0
  83. package/dist/src/resources/rule-catalog-resource.d.ts.map +1 -0
  84. package/dist/src/resources/rule-catalog-resource.js +224 -0
  85. package/dist/src/resources/rule-catalog-resource.js.map +1 -0
  86. package/dist/src/resources/rule-generation-resource.d.ts +80 -0
  87. package/dist/src/resources/rule-generation-resource.d.ts.map +1 -0
  88. package/dist/src/resources/rule-generation-resource.js +282 -0
  89. package/dist/src/resources/rule-generation-resource.js.map +1 -0
  90. package/dist/src/resources/technology-by-name-resource.d.ts +43 -0
  91. package/dist/src/resources/technology-by-name-resource.d.ts.map +1 -0
  92. package/dist/src/resources/technology-by-name-resource.js +176 -0
  93. package/dist/src/resources/technology-by-name-resource.js.map +1 -0
  94. package/dist/src/resources/todo-by-id-resource.d.ts +46 -0
  95. package/dist/src/resources/todo-by-id-resource.d.ts.map +1 -0
  96. package/dist/src/resources/todo-by-id-resource.js +192 -0
  97. package/dist/src/resources/todo-by-id-resource.js.map +1 -0
  98. package/dist/src/resources/todo-list-resource.d.ts +96 -0
  99. package/dist/src/resources/todo-list-resource.d.ts.map +1 -0
  100. package/dist/src/resources/todo-list-resource.js +209 -0
  101. package/dist/src/resources/todo-list-resource.js.map +1 -0
  102. package/dist/src/resources/validated-pattern-by-platform-resource.d.ts +14 -0
  103. package/dist/src/resources/validated-pattern-by-platform-resource.d.ts.map +1 -0
  104. package/dist/src/resources/validated-pattern-by-platform-resource.js +45 -0
  105. package/dist/src/resources/validated-pattern-by-platform-resource.js.map +1 -0
  106. package/dist/src/resources/validated-patterns-catalog-resource.d.ts +36 -0
  107. package/dist/src/resources/validated-patterns-catalog-resource.d.ts.map +1 -0
  108. package/dist/src/resources/validated-patterns-catalog-resource.js +57 -0
  109. package/dist/src/resources/validated-patterns-catalog-resource.js.map +1 -0
  110. package/dist/src/templates/domain-knowledge-templates.d.ts.map +1 -1
  111. package/dist/src/templates/domain-knowledge-templates.js +49 -49
  112. package/dist/src/templates/domain-knowledge-templates.js.map +1 -1
  113. package/dist/src/tools/adr-bootstrap-validation-tool.d.ts.map +1 -1
  114. package/dist/src/tools/adr-bootstrap-validation-tool.js +214 -4
  115. package/dist/src/tools/adr-bootstrap-validation-tool.js.map +1 -1
  116. package/dist/src/tools/adr-suggestion-tool.d.ts +2 -2
  117. package/dist/src/tools/adr-suggestion-tool.d.ts.map +1 -1
  118. package/dist/src/tools/adr-suggestion-tool.js +129 -12
  119. package/dist/src/tools/adr-suggestion-tool.js.map +1 -1
  120. package/dist/src/tools/adr-validation-tool.d.ts +98 -0
  121. package/dist/src/tools/adr-validation-tool.d.ts.map +1 -0
  122. package/dist/src/tools/adr-validation-tool.js +372 -0
  123. package/dist/src/tools/adr-validation-tool.js.map +1 -0
  124. package/dist/src/tools/bootstrap-validation-loop-tool.d.ts +262 -0
  125. package/dist/src/tools/bootstrap-validation-loop-tool.d.ts.map +1 -0
  126. package/dist/src/tools/bootstrap-validation-loop-tool.js +1934 -0
  127. package/dist/src/tools/bootstrap-validation-loop-tool.js.map +1 -0
  128. package/dist/src/tools/conversation-memory-tool.d.ts +48 -0
  129. package/dist/src/tools/conversation-memory-tool.d.ts.map +1 -0
  130. package/dist/src/tools/conversation-memory-tool.js +254 -0
  131. package/dist/src/tools/conversation-memory-tool.js.map +1 -0
  132. package/dist/src/tools/deployment-analysis-tool.d.ts.map +1 -1
  133. package/dist/src/tools/deployment-analysis-tool.js +82 -6
  134. package/dist/src/tools/deployment-analysis-tool.js.map +1 -1
  135. package/dist/src/tools/deployment-guidance-tool.d.ts.map +1 -1
  136. package/dist/src/tools/deployment-guidance-tool.js +126 -25
  137. package/dist/src/tools/deployment-guidance-tool.js.map +1 -1
  138. package/dist/src/tools/deployment-readiness-tool.d.ts.map +1 -1
  139. package/dist/src/tools/deployment-readiness-tool.js +166 -5
  140. package/dist/src/tools/deployment-readiness-tool.js.map +1 -1
  141. package/dist/src/tools/environment-analysis-tool.d.ts.map +1 -1
  142. package/dist/src/tools/environment-analysis-tool.js +36 -1
  143. package/dist/src/tools/environment-analysis-tool.js.map +1 -1
  144. package/dist/src/tools/expand-analysis-tool.d.ts +23 -0
  145. package/dist/src/tools/expand-analysis-tool.d.ts.map +1 -0
  146. package/dist/src/tools/expand-analysis-tool.js +107 -0
  147. package/dist/src/tools/expand-analysis-tool.js.map +1 -0
  148. package/dist/src/tools/get-server-context-tool.d.ts +67 -0
  149. package/dist/src/tools/get-server-context-tool.d.ts.map +1 -0
  150. package/dist/src/tools/get-server-context-tool.js +75 -0
  151. package/dist/src/tools/get-server-context-tool.js.map +1 -0
  152. package/dist/src/tools/interactive-adr-planning-tool.d.ts.map +1 -1
  153. package/dist/src/tools/interactive-adr-planning-tool.js +82 -9
  154. package/dist/src/tools/interactive-adr-planning-tool.js.map +1 -1
  155. package/dist/src/tools/llm-cloud-management-tool.d.ts +62 -0
  156. package/dist/src/tools/llm-cloud-management-tool.d.ts.map +1 -0
  157. package/dist/src/tools/llm-cloud-management-tool.js +202 -0
  158. package/dist/src/tools/llm-cloud-management-tool.js.map +1 -0
  159. package/dist/src/tools/llm-database-management-tool.d.ts +62 -0
  160. package/dist/src/tools/llm-database-management-tool.d.ts.map +1 -0
  161. package/dist/src/tools/llm-database-management-tool.js +203 -0
  162. package/dist/src/tools/llm-database-management-tool.js.map +1 -0
  163. package/dist/src/tools/llm-web-search-tool.d.ts +59 -0
  164. package/dist/src/tools/llm-web-search-tool.d.ts.map +1 -0
  165. package/dist/src/tools/llm-web-search-tool.js +165 -0
  166. package/dist/src/tools/llm-web-search-tool.js.map +1 -0
  167. package/dist/src/tools/mcp-planning-tool.d.ts.map +1 -1
  168. package/dist/src/tools/mcp-planning-tool.js +10 -3
  169. package/dist/src/tools/mcp-planning-tool.js.map +1 -1
  170. package/dist/src/tools/memory-loading-tool.d.ts.map +1 -1
  171. package/dist/src/tools/memory-loading-tool.js +4 -2
  172. package/dist/src/tools/memory-loading-tool.js.map +1 -1
  173. package/dist/src/tools/perform-research-tool.d.ts +61 -0
  174. package/dist/src/tools/perform-research-tool.d.ts.map +1 -0
  175. package/dist/src/tools/perform-research-tool.js +324 -0
  176. package/dist/src/tools/perform-research-tool.js.map +1 -0
  177. package/dist/src/tools/research-question-tool.d.ts.map +1 -1
  178. package/dist/src/tools/research-question-tool.js +11 -9
  179. package/dist/src/tools/research-question-tool.js.map +1 -1
  180. package/dist/src/tools/review-existing-adrs-tool.d.ts.map +1 -1
  181. package/dist/src/tools/review-existing-adrs-tool.js +42 -3
  182. package/dist/src/tools/review-existing-adrs-tool.js.map +1 -1
  183. package/dist/src/tools/tool-chain-orchestrator.d.ts +15 -94
  184. package/dist/src/tools/tool-chain-orchestrator.d.ts.map +1 -1
  185. package/dist/src/tools/tool-chain-orchestrator.js +2 -2
  186. package/dist/src/tools/tool-chain-orchestrator.js.map +1 -1
  187. package/dist/src/tools/troubleshoot-guided-workflow-tool.d.ts +25 -120
  188. package/dist/src/tools/troubleshoot-guided-workflow-tool.d.ts.map +1 -1
  189. package/dist/src/tools/troubleshoot-guided-workflow-tool.js +91 -2
  190. package/dist/src/tools/troubleshoot-guided-workflow-tool.js.map +1 -1
  191. package/dist/src/types/ape-framework.d.ts +50 -283
  192. package/dist/src/types/ape-framework.d.ts.map +1 -1
  193. package/dist/src/types/conversation-context.d.ts.map +1 -1
  194. package/dist/src/types/conversation-context.js +12 -12
  195. package/dist/src/types/conversation-context.js.map +1 -1
  196. package/dist/src/types/conversation-memory.d.ts +184 -0
  197. package/dist/src/types/conversation-memory.d.ts.map +1 -0
  198. package/dist/src/types/conversation-memory.js +8 -0
  199. package/dist/src/types/conversation-memory.js.map +1 -0
  200. package/dist/src/types/index.d.ts +112 -339
  201. package/dist/src/types/index.d.ts.map +1 -1
  202. package/dist/src/types/knowledge-generation.d.ts +96 -401
  203. package/dist/src/types/knowledge-generation.d.ts.map +1 -1
  204. package/dist/src/types/knowledge-graph-schemas.d.ts +77 -715
  205. package/dist/src/types/knowledge-graph-schemas.d.ts.map +1 -1
  206. package/dist/src/types/knowledge-graph-schemas.js +8 -8
  207. package/dist/src/types/knowledge-graph-schemas.js.map +1 -1
  208. package/dist/src/types/memory-entities.d.ts +1230 -6164
  209. package/dist/src/types/memory-entities.d.ts.map +1 -1
  210. package/dist/src/types/memory-entities.js +8 -8
  211. package/dist/src/types/memory-entities.js.map +1 -1
  212. package/dist/src/types/reflexion-framework.d.ts +35 -264
  213. package/dist/src/types/reflexion-framework.d.ts.map +1 -1
  214. package/dist/src/types/reflexion-framework.js +1 -1
  215. package/dist/src/types/reflexion-framework.js.map +1 -1
  216. package/dist/src/types/state-reinforcement.d.ts +87 -0
  217. package/dist/src/types/state-reinforcement.d.ts.map +1 -0
  218. package/dist/src/types/state-reinforcement.js +5 -0
  219. package/dist/src/types/state-reinforcement.js.map +1 -0
  220. package/dist/src/types/tiered-response.d.ts +61 -0
  221. package/dist/src/types/tiered-response.d.ts.map +1 -0
  222. package/dist/src/types/tiered-response.js +8 -0
  223. package/dist/src/types/tiered-response.js.map +1 -0
  224. package/dist/src/types/tool-context.d.ts +50 -0
  225. package/dist/src/types/tool-context.d.ts.map +1 -0
  226. package/dist/src/types/tool-context.js +20 -0
  227. package/dist/src/types/tool-context.js.map +1 -0
  228. package/dist/src/utils/adr-action-analyzer.d.ts +23 -0
  229. package/dist/src/utils/adr-action-analyzer.d.ts.map +1 -0
  230. package/dist/src/utils/adr-action-analyzer.js +323 -0
  231. package/dist/src/utils/adr-action-analyzer.js.map +1 -0
  232. package/dist/src/utils/adr-context-detector.d.ts +33 -0
  233. package/dist/src/utils/adr-context-detector.d.ts.map +1 -0
  234. package/dist/src/utils/adr-context-detector.js +279 -0
  235. package/dist/src/utils/adr-context-detector.js.map +1 -0
  236. package/dist/src/utils/adr-discovery.d.ts +28 -2
  237. package/dist/src/utils/adr-discovery.d.ts.map +1 -1
  238. package/dist/src/utils/adr-discovery.js +91 -7
  239. package/dist/src/utils/adr-discovery.js.map +1 -1
  240. package/dist/src/utils/adr-knowledge-initializer.d.ts +54 -0
  241. package/dist/src/utils/adr-knowledge-initializer.d.ts.map +1 -0
  242. package/dist/src/utils/adr-knowledge-initializer.js +240 -0
  243. package/dist/src/utils/adr-knowledge-initializer.js.map +1 -0
  244. package/dist/src/utils/adr-timeline-extractor.d.ts +21 -0
  245. package/dist/src/utils/adr-timeline-extractor.d.ts.map +1 -0
  246. package/dist/src/utils/adr-timeline-extractor.js +294 -0
  247. package/dist/src/utils/adr-timeline-extractor.js.map +1 -0
  248. package/dist/src/utils/adr-timeline-types.d.ts +234 -0
  249. package/dist/src/utils/adr-timeline-types.d.ts.map +1 -0
  250. package/dist/src/utils/adr-timeline-types.js +7 -0
  251. package/dist/src/utils/adr-timeline-types.js.map +1 -0
  252. package/dist/src/utils/ai-executor.d.ts +36 -0
  253. package/dist/src/utils/ai-executor.d.ts.map +1 -1
  254. package/dist/src/utils/ai-executor.js +39 -3
  255. package/dist/src/utils/ai-executor.js.map +1 -1
  256. package/dist/src/utils/apply-cot-enhancement.d.ts.map +1 -1
  257. package/dist/src/utils/apply-cot-enhancement.js +15 -15
  258. package/dist/src/utils/apply-cot-enhancement.js.map +1 -1
  259. package/dist/src/utils/automatic-prompt-engineering.d.ts.map +1 -1
  260. package/dist/src/utils/automatic-prompt-engineering.js +68 -58
  261. package/dist/src/utils/automatic-prompt-engineering.js.map +1 -1
  262. package/dist/src/utils/conditional-request.d.ts +105 -0
  263. package/dist/src/utils/conditional-request.d.ts.map +1 -0
  264. package/dist/src/utils/conditional-request.js +186 -0
  265. package/dist/src/utils/conditional-request.js.map +1 -0
  266. package/dist/src/utils/config.d.ts +72 -18
  267. package/dist/src/utils/config.d.ts.map +1 -1
  268. package/dist/src/utils/config.js +75 -0
  269. package/dist/src/utils/config.js.map +1 -1
  270. package/dist/src/utils/context-document-manager.d.ts +112 -0
  271. package/dist/src/utils/context-document-manager.d.ts.map +1 -0
  272. package/dist/src/utils/context-document-manager.js +351 -0
  273. package/dist/src/utils/context-document-manager.js.map +1 -0
  274. package/dist/src/utils/conversation-memory-manager.d.ts +86 -0
  275. package/dist/src/utils/conversation-memory-manager.d.ts.map +1 -0
  276. package/dist/src/utils/conversation-memory-manager.js +443 -0
  277. package/dist/src/utils/conversation-memory-manager.js.map +1 -0
  278. package/dist/src/utils/dag-executor.d.ts +106 -0
  279. package/dist/src/utils/dag-executor.d.ts.map +1 -0
  280. package/dist/src/utils/dag-executor.js +453 -0
  281. package/dist/src/utils/dag-executor.js.map +1 -0
  282. package/dist/src/utils/deployment-analysis.d.ts.map +1 -1
  283. package/dist/src/utils/deployment-analysis.js +17 -9
  284. package/dist/src/utils/deployment-analysis.js.map +1 -1
  285. package/dist/src/utils/deployment-type-registry.d.ts +52 -0
  286. package/dist/src/utils/deployment-type-registry.d.ts.map +1 -0
  287. package/dist/src/utils/deployment-type-registry.js +543 -0
  288. package/dist/src/utils/deployment-type-registry.js.map +1 -0
  289. package/dist/src/utils/dynamic-deployment-intelligence.d.ts +117 -0
  290. package/dist/src/utils/dynamic-deployment-intelligence.d.ts.map +1 -0
  291. package/dist/src/utils/dynamic-deployment-intelligence.js +445 -0
  292. package/dist/src/utils/dynamic-deployment-intelligence.js.map +1 -0
  293. package/dist/src/utils/environment-analysis.d.ts.map +1 -1
  294. package/dist/src/utils/environment-analysis.js +63 -44
  295. package/dist/src/utils/environment-analysis.js.map +1 -1
  296. package/dist/src/utils/environment-capability-registry.d.ts +101 -0
  297. package/dist/src/utils/environment-capability-registry.d.ts.map +1 -0
  298. package/dist/src/utils/environment-capability-registry.js +489 -0
  299. package/dist/src/utils/environment-capability-registry.js.map +1 -0
  300. package/dist/src/utils/index.d.ts +3 -3
  301. package/dist/src/utils/index.d.ts.map +1 -1
  302. package/dist/src/utils/index.js +3 -3
  303. package/dist/src/utils/index.js.map +1 -1
  304. package/dist/src/utils/knowledge-generation.d.ts.map +1 -1
  305. package/dist/src/utils/knowledge-generation.js +61 -35
  306. package/dist/src/utils/knowledge-generation.js.map +1 -1
  307. package/dist/src/utils/knowledge-graph-manager.d.ts +19 -0
  308. package/dist/src/utils/knowledge-graph-manager.d.ts.map +1 -1
  309. package/dist/src/utils/knowledge-graph-manager.js +165 -1
  310. package/dist/src/utils/knowledge-graph-manager.js.map +1 -1
  311. package/dist/src/utils/llm-artifact-detector.d.ts.map +1 -1
  312. package/dist/src/utils/llm-artifact-detector.js +28 -24
  313. package/dist/src/utils/llm-artifact-detector.js.map +1 -1
  314. package/dist/src/utils/mermaid-diagrams.d.ts +101 -0
  315. package/dist/src/utils/mermaid-diagrams.d.ts.map +1 -0
  316. package/dist/src/utils/mermaid-diagrams.js +445 -0
  317. package/dist/src/utils/mermaid-diagrams.js.map +1 -0
  318. package/dist/src/utils/monitoring.d.ts +249 -0
  319. package/dist/src/utils/monitoring.d.ts.map +1 -0
  320. package/dist/src/utils/monitoring.js +513 -0
  321. package/dist/src/utils/monitoring.js.map +1 -0
  322. package/dist/src/utils/pattern-contribution-helper.d.ts +60 -0
  323. package/dist/src/utils/pattern-contribution-helper.d.ts.map +1 -0
  324. package/dist/src/utils/pattern-contribution-helper.js +308 -0
  325. package/dist/src/utils/pattern-contribution-helper.js.map +1 -0
  326. package/dist/src/utils/pattern-loader.d.ts +183 -0
  327. package/dist/src/utils/pattern-loader.d.ts.map +1 -0
  328. package/dist/src/utils/pattern-loader.js +200 -0
  329. package/dist/src/utils/pattern-loader.js.map +1 -0
  330. package/dist/src/utils/pattern-research-utility.d.ts +107 -0
  331. package/dist/src/utils/pattern-research-utility.d.ts.map +1 -0
  332. package/dist/src/utils/pattern-research-utility.js +360 -0
  333. package/dist/src/utils/pattern-research-utility.js.map +1 -0
  334. package/dist/src/utils/pattern-to-dag-converter.d.ts +62 -0
  335. package/dist/src/utils/pattern-to-dag-converter.d.ts.map +1 -0
  336. package/dist/src/utils/pattern-to-dag-converter.js +265 -0
  337. package/dist/src/utils/pattern-to-dag-converter.js.map +1 -0
  338. package/dist/src/utils/platform-detector.d.ts +86 -0
  339. package/dist/src/utils/platform-detector.d.ts.map +1 -0
  340. package/dist/src/utils/platform-detector.js +509 -0
  341. package/dist/src/utils/platform-detector.js.map +1 -0
  342. package/dist/src/utils/prompt-composition.d.ts.map +1 -1
  343. package/dist/src/utils/prompt-composition.js +1 -4
  344. package/dist/src/utils/prompt-composition.js.map +1 -1
  345. package/dist/src/utils/reflexion.d.ts.map +1 -1
  346. package/dist/src/utils/reflexion.js +51 -42
  347. package/dist/src/utils/reflexion.js.map +1 -1
  348. package/dist/src/utils/research-integration.d.ts.map +1 -1
  349. package/dist/src/utils/research-integration.js +8 -2
  350. package/dist/src/utils/research-integration.js.map +1 -1
  351. package/dist/src/utils/research-orchestrator.d.ts +209 -0
  352. package/dist/src/utils/research-orchestrator.d.ts.map +1 -0
  353. package/dist/src/utils/research-orchestrator.js +863 -0
  354. package/dist/src/utils/research-orchestrator.js.map +1 -0
  355. package/dist/src/utils/research-questions.d.ts.map +1 -1
  356. package/dist/src/utils/research-questions.js +4 -1
  357. package/dist/src/utils/research-questions.js.map +1 -1
  358. package/dist/src/utils/resource-extractor.d.ts +57 -0
  359. package/dist/src/utils/resource-extractor.d.ts.map +1 -0
  360. package/dist/src/utils/resource-extractor.js +323 -0
  361. package/dist/src/utils/resource-extractor.js.map +1 -0
  362. package/dist/src/utils/resource-versioning.d.ts +124 -0
  363. package/dist/src/utils/resource-versioning.d.ts.map +1 -0
  364. package/dist/src/utils/resource-versioning.js +272 -0
  365. package/dist/src/utils/resource-versioning.js.map +1 -0
  366. package/dist/src/utils/root-manager.d.ts +118 -0
  367. package/dist/src/utils/root-manager.d.ts.map +1 -0
  368. package/dist/src/utils/root-manager.js +154 -0
  369. package/dist/src/utils/root-manager.js.map +1 -0
  370. package/dist/src/utils/rule-generation.d.ts.map +1 -1
  371. package/dist/src/utils/rule-generation.js +4 -1
  372. package/dist/src/utils/rule-generation.js.map +1 -1
  373. package/dist/src/utils/server-context-generator.d.ts +47 -0
  374. package/dist/src/utils/server-context-generator.d.ts.map +1 -0
  375. package/dist/src/utils/server-context-generator.js +666 -0
  376. package/dist/src/utils/server-context-generator.js.map +1 -0
  377. package/dist/src/utils/state-reinforcement-manager.d.ts +60 -0
  378. package/dist/src/utils/state-reinforcement-manager.d.ts.map +1 -0
  379. package/dist/src/utils/state-reinforcement-manager.js +200 -0
  380. package/dist/src/utils/state-reinforcement-manager.js.map +1 -0
  381. package/dist/src/utils/system-card-manager.d.ts +194 -0
  382. package/dist/src/utils/system-card-manager.d.ts.map +1 -0
  383. package/dist/src/utils/system-card-manager.js +336 -0
  384. package/dist/src/utils/system-card-manager.js.map +1 -0
  385. package/dist/src/utils/tiered-response-manager.d.ts +40 -0
  386. package/dist/src/utils/tiered-response-manager.d.ts.map +1 -0
  387. package/dist/src/utils/tiered-response-manager.js +243 -0
  388. package/dist/src/utils/tiered-response-manager.js.map +1 -0
  389. package/dist/src/utils/tree-sitter-analyzer.d.ts.map +1 -1
  390. package/dist/src/utils/tree-sitter-analyzer.js +83 -11
  391. package/dist/src/utils/tree-sitter-analyzer.js.map +1 -1
  392. package/dist/src/utils/validated-pattern-definitions.d.ts +219 -0
  393. package/dist/src/utils/validated-pattern-definitions.d.ts.map +1 -0
  394. package/dist/src/utils/validated-pattern-definitions.js +1511 -0
  395. package/dist/src/utils/validated-pattern-definitions.js.map +1 -0
  396. package/package.json +22 -13
  397. package/dist/src/prompts/todo-prompts.d.ts +0 -49
  398. package/dist/src/prompts/todo-prompts.d.ts.map +0 -1
  399. package/dist/src/prompts/todo-prompts.js +0 -824
  400. package/dist/src/prompts/todo-prompts.js.map +0 -1
  401. package/dist/src/types/todo-json-schemas.d.ts +0 -17
  402. package/dist/src/types/todo-json-schemas.d.ts.map +0 -1
  403. package/dist/src/types/todo-json-schemas.js +0 -9
  404. package/dist/src/types/todo-json-schemas.js.map +0 -1
  405. package/dist/src/utils/todo-file-watcher.d.ts +0 -14
  406. package/dist/src/utils/todo-file-watcher.d.ts.map +0 -1
  407. package/dist/src/utils/todo-file-watcher.js +0 -25
  408. package/dist/src/utils/todo-file-watcher.js.map +0 -1
@@ -0,0 +1,124 @@
1
+ /**
2
+ * Resource Versioning and Metadata Tracking
3
+ *
4
+ * Provides version control for MCP resources, enabling:
5
+ * - Semantic versioning (MAJOR.MINOR.PATCH)
6
+ * - Backward compatibility checking
7
+ * - Version migration support
8
+ * - Metadata tracking (creation, updates, changelog)
9
+ */
10
+ import { URLSearchParams } from 'url';
11
+ /**
12
+ * Semantic version structure
13
+ */
14
+ export interface SemanticVersion {
15
+ major: number;
16
+ minor: number;
17
+ patch: number;
18
+ }
19
+ /**
20
+ * Resource metadata for tracking changes
21
+ */
22
+ export interface ResourceMetadata {
23
+ version: string;
24
+ createdAt: string;
25
+ updatedAt: string;
26
+ schemaVersion: string;
27
+ changelog?: ChangelogEntry[];
28
+ deprecationNotice?: DeprecationNotice;
29
+ }
30
+ /**
31
+ * Changelog entry for tracking changes
32
+ */
33
+ export interface ChangelogEntry {
34
+ version: string;
35
+ date: string;
36
+ changes: string[];
37
+ breakingChanges?: string[];
38
+ author?: string;
39
+ }
40
+ /**
41
+ * Deprecation notice for resources
42
+ */
43
+ export interface DeprecationNotice {
44
+ deprecatedIn: string;
45
+ removedIn?: string;
46
+ reason: string;
47
+ migration: string;
48
+ }
49
+ /**
50
+ * Version comparison result
51
+ */
52
+ export declare enum VersionComparisonResult {
53
+ MAJOR_BREAKING = "major_breaking",
54
+ MINOR_COMPATIBLE = "minor_compatible",
55
+ PATCH_COMPATIBLE = "patch_compatible",
56
+ EQUAL = "equal",
57
+ OLDER = "older"
58
+ }
59
+ /**
60
+ * Parse semantic version string to object
61
+ */
62
+ export declare function parseVersion(versionString: string): SemanticVersion;
63
+ /**
64
+ * Convert semantic version object to string
65
+ */
66
+ export declare function versionToString(version: SemanticVersion): string;
67
+ /**
68
+ * Compare two semantic versions
69
+ * @returns VersionComparisonResult indicating relationship
70
+ */
71
+ export declare function compareVersions(current: string, requested: string): VersionComparisonResult;
72
+ /**
73
+ * Check if two versions are compatible (same major version)
74
+ */
75
+ export declare function isCompatible(version1: string, version2: string): boolean;
76
+ /**
77
+ * Increment version based on change type
78
+ */
79
+ export declare function incrementVersion(current: string, changeType: 'major' | 'minor' | 'patch'): string;
80
+ /**
81
+ * Create initial resource metadata
82
+ */
83
+ export declare function createResourceMetadata(version?: string): ResourceMetadata;
84
+ /**
85
+ * Update resource metadata with new version
86
+ */
87
+ export declare function updateResourceMetadata(current: ResourceMetadata, newVersion: string, changes: string[], breakingChanges?: string[]): ResourceMetadata;
88
+ /**
89
+ * Mark resource as deprecated
90
+ */
91
+ export declare function deprecateResource(metadata: ResourceMetadata, reason: string, migration: string, removedIn?: string): ResourceMetadata;
92
+ /**
93
+ * Check if resource is deprecated
94
+ */
95
+ export declare function isDeprecated(metadata: ResourceMetadata): boolean;
96
+ /**
97
+ * Extract version from URI search parameters
98
+ */
99
+ export declare function extractVersionFromParams(searchParams?: URLSearchParams): string | null;
100
+ /**
101
+ * Validate requested version against available versions
102
+ */
103
+ export declare function validateVersionRequest(requested: string | null, current: string, supportedVersions: string[]): {
104
+ valid: boolean;
105
+ version: string;
106
+ warning?: string;
107
+ };
108
+ /**
109
+ * Generate version compatibility matrix
110
+ */
111
+ export declare function generateCompatibilityMatrix(versions: string[]): Map<string, string[]>;
112
+ /**
113
+ * Get changelog for specific version range
114
+ */
115
+ export declare function getChangelogForRange(metadata: ResourceMetadata, fromVersion: string, toVersion: string): ChangelogEntry[];
116
+ /**
117
+ * Extract breaking changes from changelog
118
+ */
119
+ export declare function getBreakingChanges(metadata: ResourceMetadata): ChangelogEntry[];
120
+ /**
121
+ * Format metadata for display
122
+ */
123
+ export declare function formatMetadata(metadata: ResourceMetadata): string;
124
+ //# sourceMappingURL=resource-versioning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-versioning.d.ts","sourceRoot":"","sources":["../../../src/utils/resource-versioning.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,272 @@
1
+ /**
2
+ * Resource Versioning and Metadata Tracking
3
+ *
4
+ * Provides version control for MCP resources, enabling:
5
+ * - Semantic versioning (MAJOR.MINOR.PATCH)
6
+ * - Backward compatibility checking
7
+ * - Version migration support
8
+ * - Metadata tracking (creation, updates, changelog)
9
+ */
10
+ /**
11
+ * Version comparison result
12
+ */
13
+ export var VersionComparisonResult;
14
+ (function (VersionComparisonResult) {
15
+ VersionComparisonResult["MAJOR_BREAKING"] = "major_breaking";
16
+ VersionComparisonResult["MINOR_COMPATIBLE"] = "minor_compatible";
17
+ VersionComparisonResult["PATCH_COMPATIBLE"] = "patch_compatible";
18
+ VersionComparisonResult["EQUAL"] = "equal";
19
+ VersionComparisonResult["OLDER"] = "older";
20
+ })(VersionComparisonResult || (VersionComparisonResult = {}));
21
+ /**
22
+ * Parse semantic version string to object
23
+ */
24
+ export function parseVersion(versionString) {
25
+ const match = versionString.match(/^(\d+)\.(\d+)\.(\d+)$/);
26
+ if (!match) {
27
+ throw new Error(`Invalid semantic version: ${versionString}`);
28
+ }
29
+ return {
30
+ major: parseInt(match[1], 10),
31
+ minor: parseInt(match[2], 10),
32
+ patch: parseInt(match[3], 10),
33
+ };
34
+ }
35
+ /**
36
+ * Convert semantic version object to string
37
+ */
38
+ export function versionToString(version) {
39
+ return `${version.major}.${version.minor}.${version.patch}`;
40
+ }
41
+ /**
42
+ * Compare two semantic versions
43
+ * @returns VersionComparisonResult indicating relationship
44
+ */
45
+ export function compareVersions(current, requested) {
46
+ const currentV = parseVersion(current);
47
+ const requestedV = parseVersion(requested);
48
+ // Equal versions
49
+ if (currentV.major === requestedV.major &&
50
+ currentV.minor === requestedV.minor &&
51
+ currentV.patch === requestedV.patch) {
52
+ return VersionComparisonResult.EQUAL;
53
+ }
54
+ // Current is older than requested
55
+ if (currentV.major < requestedV.major ||
56
+ (currentV.major === requestedV.major && currentV.minor < requestedV.minor) ||
57
+ (currentV.major === requestedV.major &&
58
+ currentV.minor === requestedV.minor &&
59
+ currentV.patch < requestedV.patch)) {
60
+ return VersionComparisonResult.OLDER;
61
+ }
62
+ // Current is newer - check compatibility
63
+ if (currentV.major > requestedV.major) {
64
+ return VersionComparisonResult.MAJOR_BREAKING;
65
+ }
66
+ if (currentV.minor > requestedV.minor) {
67
+ return VersionComparisonResult.MINOR_COMPATIBLE;
68
+ }
69
+ return VersionComparisonResult.PATCH_COMPATIBLE;
70
+ }
71
+ /**
72
+ * Check if two versions are compatible (same major version)
73
+ */
74
+ export function isCompatible(version1, version2) {
75
+ const v1 = parseVersion(version1);
76
+ const v2 = parseVersion(version2);
77
+ return v1.major === v2.major;
78
+ }
79
+ /**
80
+ * Increment version based on change type
81
+ */
82
+ export function incrementVersion(current, changeType) {
83
+ const version = parseVersion(current);
84
+ switch (changeType) {
85
+ case 'major':
86
+ return versionToString({ major: version.major + 1, minor: 0, patch: 0 });
87
+ case 'minor':
88
+ return versionToString({ major: version.major, minor: version.minor + 1, patch: 0 });
89
+ case 'patch':
90
+ return versionToString({ major: version.major, minor: version.minor, patch: version.patch + 1 });
91
+ default:
92
+ throw new Error(`Invalid change type: ${changeType}`);
93
+ }
94
+ }
95
+ /**
96
+ * Create initial resource metadata
97
+ */
98
+ export function createResourceMetadata(version = '1.0.0') {
99
+ const now = new Date().toISOString();
100
+ return {
101
+ version,
102
+ createdAt: now,
103
+ updatedAt: now,
104
+ schemaVersion: version,
105
+ };
106
+ }
107
+ /**
108
+ * Update resource metadata with new version
109
+ */
110
+ export function updateResourceMetadata(current, newVersion, changes, breakingChanges) {
111
+ const now = new Date().toISOString();
112
+ const changelogEntry = {
113
+ version: newVersion,
114
+ date: now,
115
+ changes,
116
+ };
117
+ // Only add breakingChanges if provided
118
+ if (breakingChanges) {
119
+ changelogEntry.breakingChanges = breakingChanges;
120
+ }
121
+ return {
122
+ ...current,
123
+ version: newVersion,
124
+ updatedAt: now,
125
+ changelog: [...(current.changelog || []), changelogEntry],
126
+ };
127
+ }
128
+ /**
129
+ * Mark resource as deprecated
130
+ */
131
+ export function deprecateResource(metadata, reason, migration, removedIn) {
132
+ const deprecationNotice = {
133
+ deprecatedIn: metadata.version,
134
+ reason,
135
+ migration,
136
+ };
137
+ // Only add removedIn if provided
138
+ if (removedIn) {
139
+ deprecationNotice.removedIn = removedIn;
140
+ }
141
+ return {
142
+ ...metadata,
143
+ deprecationNotice,
144
+ };
145
+ }
146
+ /**
147
+ * Check if resource is deprecated
148
+ */
149
+ export function isDeprecated(metadata) {
150
+ return metadata.deprecationNotice !== undefined;
151
+ }
152
+ /**
153
+ * Extract version from URI search parameters
154
+ */
155
+ export function extractVersionFromParams(searchParams) {
156
+ if (!searchParams) {
157
+ return null;
158
+ }
159
+ return searchParams.get('version');
160
+ }
161
+ /**
162
+ * Validate requested version against available versions
163
+ */
164
+ export function validateVersionRequest(requested, current, supportedVersions) {
165
+ // No version requested - use current
166
+ if (!requested) {
167
+ return { valid: true, version: current };
168
+ }
169
+ // Check if requested version is supported
170
+ if (!supportedVersions.includes(requested)) {
171
+ return {
172
+ valid: false,
173
+ version: current,
174
+ warning: `Version ${requested} not supported. Using current version ${current}. Supported: ${supportedVersions.join(', ')}`,
175
+ };
176
+ }
177
+ // Check compatibility
178
+ const comparison = compareVersions(current, requested);
179
+ if (comparison === VersionComparisonResult.MAJOR_BREAKING) {
180
+ return {
181
+ valid: true,
182
+ version: requested,
183
+ warning: `Warning: Version ${requested} has breaking changes from current ${current}`,
184
+ };
185
+ }
186
+ return { valid: true, version: requested };
187
+ }
188
+ /**
189
+ * Generate version compatibility matrix
190
+ */
191
+ export function generateCompatibilityMatrix(versions) {
192
+ const matrix = new Map();
193
+ for (const version of versions) {
194
+ const compatible = versions.filter((v) => isCompatible(version, v));
195
+ matrix.set(version, compatible);
196
+ }
197
+ return matrix;
198
+ }
199
+ /**
200
+ * Get changelog for specific version range
201
+ */
202
+ export function getChangelogForRange(metadata, fromVersion, toVersion) {
203
+ if (!metadata.changelog) {
204
+ return [];
205
+ }
206
+ const from = parseVersion(fromVersion);
207
+ const to = parseVersion(toVersion);
208
+ return metadata.changelog.filter((entry) => {
209
+ const entryVersion = parseVersion(entry.version);
210
+ // Version is within range (exclusive of fromVersion, inclusive of toVersion)
211
+ const isAfterFrom = entryVersion.major > from.major ||
212
+ (entryVersion.major === from.major && entryVersion.minor > from.minor) ||
213
+ (entryVersion.major === from.major &&
214
+ entryVersion.minor === from.minor &&
215
+ entryVersion.patch > from.patch);
216
+ const isBeforeOrEqualTo = entryVersion.major < to.major ||
217
+ (entryVersion.major === to.major && entryVersion.minor < to.minor) ||
218
+ (entryVersion.major === to.major &&
219
+ entryVersion.minor === to.minor &&
220
+ entryVersion.patch <= to.patch);
221
+ return isAfterFrom && isBeforeOrEqualTo;
222
+ });
223
+ }
224
+ /**
225
+ * Extract breaking changes from changelog
226
+ */
227
+ export function getBreakingChanges(metadata) {
228
+ if (!metadata.changelog) {
229
+ return [];
230
+ }
231
+ return metadata.changelog.filter((entry) => entry.breakingChanges && entry.breakingChanges.length > 0);
232
+ }
233
+ /**
234
+ * Format metadata for display
235
+ */
236
+ export function formatMetadata(metadata) {
237
+ const lines = [
238
+ `Version: ${metadata.version}`,
239
+ `Schema: ${metadata.schemaVersion}`,
240
+ `Created: ${metadata.createdAt}`,
241
+ `Updated: ${metadata.updatedAt}`,
242
+ ];
243
+ if (metadata.deprecationNotice) {
244
+ lines.push('');
245
+ lines.push('⚠️ DEPRECATED');
246
+ lines.push(`Deprecated in: ${metadata.deprecationNotice.deprecatedIn}`);
247
+ if (metadata.deprecationNotice.removedIn) {
248
+ lines.push(`Will be removed in: ${metadata.deprecationNotice.removedIn}`);
249
+ }
250
+ lines.push(`Reason: ${metadata.deprecationNotice.reason}`);
251
+ lines.push(`Migration: ${metadata.deprecationNotice.migration}`);
252
+ }
253
+ if (metadata.changelog && metadata.changelog.length > 0) {
254
+ lines.push('');
255
+ lines.push('Recent Changes:');
256
+ const recentChanges = metadata.changelog.slice(-3).reverse();
257
+ for (const entry of recentChanges) {
258
+ lines.push(` v${entry.version} (${entry.date})`);
259
+ for (const change of entry.changes) {
260
+ lines.push(` - ${change}`);
261
+ }
262
+ if (entry.breakingChanges && entry.breakingChanges.length > 0) {
263
+ lines.push(' ⚠️ Breaking Changes:');
264
+ for (const breaking of entry.breakingChanges) {
265
+ lines.push(` - ${breaking}`);
266
+ }
267
+ }
268
+ }
269
+ }
270
+ return lines.join('\n');
271
+ }
272
+ //# sourceMappingURL=resource-versioning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-versioning.js","sourceRoot":"","sources":["../../../src/utils/resource-versioning.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * Root Manager for MCP File Access Control
3
+ *
4
+ * Implements MCP best practices for file system access control using "roots".
5
+ * Roots are predefined directories that the server is allowed to access,
6
+ * providing both security and autonomous file discovery for Claude.
7
+ *
8
+ * @see https://modelcontextprotocol.io/docs/concepts/roots
9
+ */
10
+ /**
11
+ * A root is a directory that the MCP server is allowed to access
12
+ */
13
+ export interface Root {
14
+ /** Unique identifier for the root */
15
+ name: string;
16
+ /** Absolute path to the root directory */
17
+ path: string;
18
+ /** Human-readable description of what this root contains */
19
+ description: string;
20
+ }
21
+ /**
22
+ * Manages file system roots for MCP server access control
23
+ *
24
+ * @example
25
+ * ```typescript
26
+ * const rootManager = new RootManager('/path/to/project', '/path/to/project/docs/adrs');
27
+ *
28
+ * // Check if path is allowed
29
+ * if (rootManager.isPathAllowed('/path/to/project/src/index.ts')) {
30
+ * // Access granted
31
+ * }
32
+ *
33
+ * // List all roots for Claude
34
+ * const roots = rootManager.listRoots();
35
+ * ```
36
+ */
37
+ export declare class RootManager {
38
+ private roots;
39
+ /**
40
+ * Initialize root manager with project and ADR paths
41
+ *
42
+ * @param projectPath - Path to the project root directory
43
+ * @param adrDirectory - Path to the ADR directory
44
+ */
45
+ constructor(projectPath: string, adrDirectory: string);
46
+ /**
47
+ * Check if a path is within accessible roots
48
+ *
49
+ * @param targetPath - Path to check (can be relative or absolute)
50
+ * @returns true if path is within any root, false otherwise
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * if (!rootManager.isPathAllowed(userPath)) {
55
+ * throw new Error('Access denied: Path is outside accessible roots');
56
+ * }
57
+ * ```
58
+ */
59
+ isPathAllowed(targetPath: string): boolean;
60
+ /**
61
+ * List all accessible roots
62
+ *
63
+ * @returns Array of root definitions
64
+ *
65
+ * @example
66
+ * ```typescript
67
+ * const roots = rootManager.listRoots();
68
+ * roots.forEach(root => {
69
+ * console.log(`${root.name}: ${root.path}`);
70
+ * });
71
+ * ```
72
+ */
73
+ listRoots(): Root[];
74
+ /**
75
+ * Get which root a path belongs to
76
+ *
77
+ * @param targetPath - Path to check
78
+ * @returns Root that contains this path, or null if outside all roots
79
+ *
80
+ * @example
81
+ * ```typescript
82
+ * const root = rootManager.getRootForPath('/path/to/project/src/index.ts');
83
+ * if (root) {
84
+ * console.log(`File is in ${root.name} root`);
85
+ * }
86
+ * ```
87
+ */
88
+ getRootForPath(targetPath: string): Root | null;
89
+ /**
90
+ * Get the relative path from root
91
+ *
92
+ * @param targetPath - Path to get relative path for
93
+ * @returns Relative path from root, or null if outside all roots
94
+ *
95
+ * @example
96
+ * ```typescript
97
+ * const relPath = rootManager.getRelativePathFromRoot('/path/to/project/src/index.ts');
98
+ * // Returns: 'src/index.ts'
99
+ * ```
100
+ */
101
+ getRelativePathFromRoot(targetPath: string): string | null;
102
+ /**
103
+ * Add a custom root (useful for testing or dynamic root management)
104
+ *
105
+ * @param name - Unique identifier for the root
106
+ * @param path - Absolute path to the root directory
107
+ * @param description - Human-readable description
108
+ */
109
+ addRoot(name: string, path: string, description: string): void;
110
+ /**
111
+ * Remove a root by name
112
+ *
113
+ * @param name - Name of the root to remove
114
+ * @returns true if root was removed, false if not found
115
+ */
116
+ removeRoot(name: string): boolean;
117
+ }
118
+ //# sourceMappingURL=root-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"root-manager.d.ts","sourceRoot":"","sources":["../../../src/utils/root-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;GAEG;AACH,MAAM,WAAW,IAAI;IACnB,qCAAqC;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,WAAW;IACtB,OAAO,CAAC,KAAK,CAAgC;IAE7C;;;;;OAKG;gBACS,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM;IAiBrD;;;;;;;;;;;;OAYG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAU1C;;;;;;;;;;;;OAYG;IACH,SAAS,IAAI,IAAI,EAAE;IAInB;;;;;;;;;;;;;OAaG;IACH,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAU/C;;;;;;;;;;;OAWG;IACH,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAQ1D;;;;;;OAMG;IACH,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAQ9D;;;;;OAKG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAGlC"}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * Root Manager for MCP File Access Control
3
+ *
4
+ * Implements MCP best practices for file system access control using "roots".
5
+ * Roots are predefined directories that the server is allowed to access,
6
+ * providing both security and autonomous file discovery for Claude.
7
+ *
8
+ * @see https://modelcontextprotocol.io/docs/concepts/roots
9
+ */
10
+ import { resolve, relative } from 'path';
11
+ /**
12
+ * Manages file system roots for MCP server access control
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const rootManager = new RootManager('/path/to/project', '/path/to/project/docs/adrs');
17
+ *
18
+ * // Check if path is allowed
19
+ * if (rootManager.isPathAllowed('/path/to/project/src/index.ts')) {
20
+ * // Access granted
21
+ * }
22
+ *
23
+ * // List all roots for Claude
24
+ * const roots = rootManager.listRoots();
25
+ * ```
26
+ */
27
+ export class RootManager {
28
+ roots = new Map();
29
+ /**
30
+ * Initialize root manager with project and ADR paths
31
+ *
32
+ * @param projectPath - Path to the project root directory
33
+ * @param adrDirectory - Path to the ADR directory
34
+ */
35
+ constructor(projectPath, adrDirectory) {
36
+ // Root 1: Project directory (entire codebase)
37
+ this.roots.set('project', {
38
+ name: 'project',
39
+ path: resolve(projectPath),
40
+ description: 'Project source code, configuration, and documentation',
41
+ });
42
+ // Root 2: ADR directory (may be inside project, but worth explicit access)
43
+ const resolvedAdrPath = resolve(adrDirectory);
44
+ this.roots.set('adrs', {
45
+ name: 'adrs',
46
+ path: resolvedAdrPath,
47
+ description: 'Architectural Decision Records',
48
+ });
49
+ }
50
+ /**
51
+ * Check if a path is within accessible roots
52
+ *
53
+ * @param targetPath - Path to check (can be relative or absolute)
54
+ * @returns true if path is within any root, false otherwise
55
+ *
56
+ * @example
57
+ * ```typescript
58
+ * if (!rootManager.isPathAllowed(userPath)) {
59
+ * throw new Error('Access denied: Path is outside accessible roots');
60
+ * }
61
+ * ```
62
+ */
63
+ isPathAllowed(targetPath) {
64
+ const resolved = resolve(targetPath);
65
+ for (const root of this.roots.values()) {
66
+ if (resolved.startsWith(root.path)) {
67
+ return true;
68
+ }
69
+ }
70
+ return false;
71
+ }
72
+ /**
73
+ * List all accessible roots
74
+ *
75
+ * @returns Array of root definitions
76
+ *
77
+ * @example
78
+ * ```typescript
79
+ * const roots = rootManager.listRoots();
80
+ * roots.forEach(root => {
81
+ * console.log(`${root.name}: ${root.path}`);
82
+ * });
83
+ * ```
84
+ */
85
+ listRoots() {
86
+ return Array.from(this.roots.values());
87
+ }
88
+ /**
89
+ * Get which root a path belongs to
90
+ *
91
+ * @param targetPath - Path to check
92
+ * @returns Root that contains this path, or null if outside all roots
93
+ *
94
+ * @example
95
+ * ```typescript
96
+ * const root = rootManager.getRootForPath('/path/to/project/src/index.ts');
97
+ * if (root) {
98
+ * console.log(`File is in ${root.name} root`);
99
+ * }
100
+ * ```
101
+ */
102
+ getRootForPath(targetPath) {
103
+ const resolved = resolve(targetPath);
104
+ for (const root of this.roots.values()) {
105
+ if (resolved.startsWith(root.path)) {
106
+ return root;
107
+ }
108
+ }
109
+ return null;
110
+ }
111
+ /**
112
+ * Get the relative path from root
113
+ *
114
+ * @param targetPath - Path to get relative path for
115
+ * @returns Relative path from root, or null if outside all roots
116
+ *
117
+ * @example
118
+ * ```typescript
119
+ * const relPath = rootManager.getRelativePathFromRoot('/path/to/project/src/index.ts');
120
+ * // Returns: 'src/index.ts'
121
+ * ```
122
+ */
123
+ getRelativePathFromRoot(targetPath) {
124
+ const root = this.getRootForPath(targetPath);
125
+ if (!root) {
126
+ return null;
127
+ }
128
+ return relative(root.path, resolve(targetPath));
129
+ }
130
+ /**
131
+ * Add a custom root (useful for testing or dynamic root management)
132
+ *
133
+ * @param name - Unique identifier for the root
134
+ * @param path - Absolute path to the root directory
135
+ * @param description - Human-readable description
136
+ */
137
+ addRoot(name, path, description) {
138
+ this.roots.set(name, {
139
+ name,
140
+ path: resolve(path),
141
+ description,
142
+ });
143
+ }
144
+ /**
145
+ * Remove a root by name
146
+ *
147
+ * @param name - Name of the root to remove
148
+ * @returns true if root was removed, false if not found
149
+ */
150
+ removeRoot(name) {
151
+ return this.roots.delete(name);
152
+ }
153
+ }
154
+ //# sourceMappingURL=root-manager.js.map