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,200 @@
1
+ /**
2
+ * Research Index Resource
3
+ * Provides access to research documents and findings
4
+ */
5
+ import * as fs from 'fs/promises';
6
+ import * as path from 'path';
7
+ import { McpAdrError } from '../types/index.js';
8
+ import { resourceCache, generateETag } from './resource-cache.js';
9
+ /**
10
+ * Extract title from markdown content
11
+ */
12
+ function extractTitle(content) {
13
+ const lines = content.split('\n');
14
+ for (const line of lines) {
15
+ const trimmed = line.trim();
16
+ if (trimmed.startsWith('# ')) {
17
+ return trimmed.substring(2).trim();
18
+ }
19
+ }
20
+ return 'Untitled';
21
+ }
22
+ /**
23
+ * Extract topic from filename
24
+ */
25
+ function extractTopic(filename) {
26
+ // Remove extension and parse filename
27
+ // Example: perform_research_test_research_001.md -> research
28
+ const baseName = filename.replace(/\.md$/, '');
29
+ const parts = baseName.split('_');
30
+ // Try to find meaningful topic
31
+ if (parts.includes('research')) {
32
+ const researchIndex = parts.indexOf('research');
33
+ if (researchIndex > 0) {
34
+ return parts.slice(0, researchIndex + 1).join('_');
35
+ }
36
+ return 'research';
37
+ }
38
+ return parts[0] || 'general';
39
+ }
40
+ /**
41
+ * Group documents by topic
42
+ */
43
+ function groupByTopic(docs) {
44
+ const grouped = {};
45
+ for (const doc of docs) {
46
+ grouped[doc.topic] = (grouped[doc.topic] || 0) + 1;
47
+ }
48
+ return grouped;
49
+ }
50
+ /**
51
+ * Generate comprehensive research document index resource with metadata and categorization.
52
+ *
53
+ * Scans project research directories and builds an index of all research documents with
54
+ * metadata including titles, topics, word counts, file sizes, and last modified dates.
55
+ * Supports multiple research directories for organizational flexibility.
56
+ *
57
+ * **Scanned Directories:**
58
+ * - `docs/research/` - Primary research documentation
59
+ * - `custom/research/` - Custom user research notes
60
+ *
61
+ * **Document Extraction:**
62
+ * - Title: Extracted from first H1 heading or filename
63
+ * - Topic: Derived from filename prefix or directory structure
64
+ * - Metadata: Word count, file size, last modified timestamp
65
+ *
66
+ * @returns Promise resolving to resource generation result containing:
67
+ * - data: Complete research index with documents array and summary statistics
68
+ * - contentType: "application/json"
69
+ * - lastModified: ISO timestamp of generation
70
+ * - cacheKey: "research-index:current"
71
+ * - ttl: Cache duration (300 seconds / 5 minutes)
72
+ * - etag: Entity tag for cache validation
73
+ *
74
+ * @throws {McpAdrError} When research index generation fails due to:
75
+ * - RESOURCE_GENERATION_ERROR: File system access errors or markdown parsing failures
76
+ * - Cache operation failures
77
+ *
78
+ * @example
79
+ * ```typescript
80
+ * const researchIndex = await generateResearchIndexResource();
81
+ *
82
+ * console.log(`Total research documents: ${researchIndex.data.summary.total}`);
83
+ * console.log(`Topics covered: ${researchIndex.data.summary.byTopic.length}`);
84
+ * console.log(`Total words: ${researchIndex.data.summary.totalWords}`);
85
+ *
86
+ * // Find research by topic
87
+ * const architectureDocs = researchIndex.data.documents.filter(
88
+ * doc => doc.topic === 'architecture'
89
+ * );
90
+ * console.log(`Architecture research docs: ${architectureDocs.length}`);
91
+ *
92
+ * // Sort by recency
93
+ * const recentDocs = researchIndex.data.documents
94
+ * .sort((a, b) => new Date(b.lastModified).getTime() - new Date(a.lastModified).getTime())
95
+ * .slice(0, 5);
96
+ *
97
+ * // Expected output structure:
98
+ * {
99
+ * data: {
100
+ * version: "1.0.0",
101
+ * timestamp: "2025-10-12T17:00:00.000Z",
102
+ * summary: {
103
+ * total: 55,
104
+ * byTopic: {
105
+ * "performance": 12,
106
+ * "security": 8,
107
+ * "architecture": 15
108
+ * },
109
+ * totalWords: 45000,
110
+ * averageWordCount: 818
111
+ * },
112
+ * documents: [
113
+ * {
114
+ * id: "perform_research_research_001",
115
+ * title: "TypeScript Performance Optimization",
116
+ * topic: "performance",
117
+ * path: "docs/research/perform_research_research_001.md",
118
+ * lastModified: "2025-10-10T12:00:00.000Z",
119
+ * wordCount: 1250,
120
+ * size: 8192
121
+ * }
122
+ * ]
123
+ * },
124
+ * contentType: "application/json",
125
+ * cacheKey: "research-index:current",
126
+ * ttl: 300
127
+ * }
128
+ * ```
129
+ *
130
+ * @since v2.0.0
131
+ * @see {@link extractTitle} for title extraction logic
132
+ * @see {@link extractTopic} for topic categorization
133
+ */
134
+ export async function generateResearchIndexResource() {
135
+ try {
136
+ const cacheKey = 'research-index:current';
137
+ // Check cache
138
+ const cached = await resourceCache.get(cacheKey);
139
+ if (cached) {
140
+ return cached;
141
+ }
142
+ const researchDirs = ['docs/research', 'custom/research'];
143
+ const researchDocs = [];
144
+ for (const dir of researchDirs) {
145
+ const fullPath = path.resolve(process.cwd(), dir);
146
+ try {
147
+ await fs.access(fullPath);
148
+ const files = await fs.readdir(fullPath);
149
+ for (const file of files) {
150
+ if (file.endsWith('.md')) {
151
+ const filePath = path.join(fullPath, file);
152
+ const content = await fs.readFile(filePath, 'utf-8');
153
+ const stats = await fs.stat(filePath);
154
+ researchDocs.push({
155
+ id: file.replace(/\.md$/, ''),
156
+ title: extractTitle(content),
157
+ topic: extractTopic(file),
158
+ path: path.join(dir, file),
159
+ lastModified: stats.mtime.toISOString(),
160
+ wordCount: content.split(/\s+/).filter(w => w.length > 0).length,
161
+ size: stats.size,
162
+ });
163
+ }
164
+ }
165
+ }
166
+ catch {
167
+ // Directory doesn't exist or can't be accessed, skip
168
+ console.warn(`[ResearchIndexResource] Cannot access directory: ${fullPath}`);
169
+ }
170
+ }
171
+ // Sort by last modified (newest first)
172
+ researchDocs.sort((a, b) => new Date(b.lastModified).getTime() - new Date(a.lastModified).getTime());
173
+ const researchIndexData = {
174
+ version: '1.0.0',
175
+ timestamp: new Date().toISOString(),
176
+ summary: {
177
+ total: researchDocs.length,
178
+ byTopic: groupByTopic(researchDocs),
179
+ totalWordCount: researchDocs.reduce((sum, doc) => sum + doc.wordCount, 0),
180
+ totalSize: researchDocs.reduce((sum, doc) => sum + doc.size, 0),
181
+ },
182
+ documents: researchDocs,
183
+ };
184
+ const result = {
185
+ data: researchIndexData,
186
+ contentType: 'application/json',
187
+ lastModified: new Date().toISOString(),
188
+ cacheKey,
189
+ ttl: 300, // 5 minutes cache
190
+ etag: generateETag(researchIndexData),
191
+ };
192
+ // Cache result
193
+ resourceCache.set(cacheKey, result, result.ttl);
194
+ return result;
195
+ }
196
+ catch (error) {
197
+ throw new McpAdrError(`Failed to generate research index resource: ${error instanceof Error ? error.message : String(error)}`, 'RESOURCE_GENERATION_ERROR');
198
+ }
199
+ }
200
+ //# sourceMappingURL=research-index-resource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"research-index-resource.js","sourceRoot":"","sources":["../../../src/resources/research-index-resource.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * Resource-level caching infrastructure for MCP resources
3
+ * Provides efficient caching with TTL support, cache management,
4
+ * and conditional request support (ETags, Last-Modified)
5
+ */
6
+ import type { ResourceMetadata } from '../utils/resource-versioning.js';
7
+ export interface CacheEntry {
8
+ data: any;
9
+ expiry: number;
10
+ createdAt: number;
11
+ accessCount: number;
12
+ lastAccessed: number;
13
+ etag?: string;
14
+ lastModified?: string;
15
+ version?: string;
16
+ metadata?: ResourceMetadata;
17
+ }
18
+ export interface CacheStats {
19
+ totalEntries: number;
20
+ validEntries: number;
21
+ expiredEntries: number;
22
+ cacheSize: number;
23
+ hitRate: number;
24
+ totalHits: number;
25
+ totalMisses: number;
26
+ }
27
+ /**
28
+ * Resource cache with TTL support and statistics tracking
29
+ */
30
+ export declare class ResourceCache {
31
+ private cache;
32
+ private hits;
33
+ private misses;
34
+ /**
35
+ * Get cached resource by key
36
+ * @param key Cache key
37
+ * @returns Cached data or null if not found/expired
38
+ */
39
+ get<T>(key: string): Promise<T | null>;
40
+ /**
41
+ * Get cached resource with conditional request support
42
+ * @param key Cache key
43
+ * @param conditionalHeaders Optional conditional headers
44
+ * @returns Result with data, metadata, and notModified flag
45
+ */
46
+ getWithConditional<T>(key: string, conditionalHeaders?: {
47
+ ifNoneMatch?: string;
48
+ ifModifiedSince?: string;
49
+ }): Promise<{
50
+ data: T | null;
51
+ notModified: boolean;
52
+ etag?: string;
53
+ lastModified?: string;
54
+ version?: string;
55
+ metadata?: ResourceMetadata;
56
+ }>;
57
+ /**
58
+ * Set cached resource with TTL
59
+ * @param key Cache key
60
+ * @param data Data to cache
61
+ * @param ttl Time to live in seconds
62
+ * @param metadata Optional metadata (etag, lastModified, version, resourceMetadata)
63
+ */
64
+ set(key: string, data: any, ttl: number, metadata?: {
65
+ etag?: string;
66
+ lastModified?: string;
67
+ version?: string;
68
+ resourceMetadata?: ResourceMetadata;
69
+ }): void;
70
+ /**
71
+ * Check if key exists and is valid
72
+ * @param key Cache key
73
+ * @returns True if key exists and is not expired
74
+ */
75
+ has(key: string): boolean;
76
+ /**
77
+ * Delete cached resource
78
+ * @param key Cache key
79
+ * @returns True if key was deleted
80
+ */
81
+ delete(key: string): boolean;
82
+ /**
83
+ * Clear cache entries matching pattern
84
+ * @param pattern Optional pattern to match keys (substring match)
85
+ */
86
+ clear(pattern?: string): void;
87
+ /**
88
+ * Clean up expired entries
89
+ * @returns Number of entries removed
90
+ */
91
+ cleanup(): number;
92
+ /**
93
+ * Get cache statistics
94
+ * @returns Cache statistics object
95
+ */
96
+ getStats(): CacheStats;
97
+ /**
98
+ * Get all cache keys
99
+ * @returns Array of all cache keys
100
+ */
101
+ keys(): string[];
102
+ /**
103
+ * Get cache entries sorted by access count
104
+ * @param limit Maximum number of entries to return
105
+ * @returns Top entries by access count
106
+ */
107
+ getTopEntries(limit?: number): Array<{
108
+ key: string;
109
+ accessCount: number;
110
+ }>;
111
+ /**
112
+ * Get least recently used entries
113
+ * @param limit Maximum number of entries to return
114
+ * @returns Least recently used entries
115
+ */
116
+ getLRUEntries(limit?: number): Array<{
117
+ key: string;
118
+ lastAccessed: number;
119
+ }>;
120
+ /**
121
+ * Evict least recently used entries to reduce cache size
122
+ * @param targetSize Target number of entries
123
+ * @returns Number of entries evicted
124
+ */
125
+ evictLRU(targetSize: number): number;
126
+ /**
127
+ * Reset cache statistics
128
+ */
129
+ resetStats(): void;
130
+ }
131
+ /**
132
+ * Singleton resource cache instance
133
+ */
134
+ export declare const resourceCache: ResourceCache;
135
+ export declare function startAutomaticCleanup(intervalMs?: number): void;
136
+ export declare function stopAutomaticCleanup(): void;
137
+ /**
138
+ * Generate ETag for resource data
139
+ * @deprecated Use generateStrongETag from conditional-request.ts instead
140
+ * @param data Resource data
141
+ * @returns ETag string
142
+ */
143
+ export declare function generateETag(data: any): string;
144
+ //# sourceMappingURL=resource-cache.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-cache.d.ts","sourceRoot":"","sources":["../../../src/resources/resource-cache.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,316 @@
1
+ /**
2
+ * Resource-level caching infrastructure for MCP resources
3
+ * Provides efficient caching with TTL support, cache management,
4
+ * and conditional request support (ETags, Last-Modified)
5
+ */
6
+ import { generateStrongETag } from '../utils/conditional-request.js';
7
+ /**
8
+ * Resource cache with TTL support and statistics tracking
9
+ */
10
+ export class ResourceCache {
11
+ cache = new Map();
12
+ hits = 0;
13
+ misses = 0;
14
+ /**
15
+ * Get cached resource by key
16
+ * @param key Cache key
17
+ * @returns Cached data or null if not found/expired
18
+ */
19
+ async get(key) {
20
+ const entry = this.cache.get(key);
21
+ if (!entry) {
22
+ this.misses++;
23
+ return null;
24
+ }
25
+ // Check if expired
26
+ if (entry.expiry <= Date.now()) {
27
+ this.cache.delete(key);
28
+ this.misses++;
29
+ return null;
30
+ }
31
+ // Update access stats
32
+ entry.accessCount++;
33
+ entry.lastAccessed = Date.now();
34
+ this.hits++;
35
+ return entry.data;
36
+ }
37
+ /**
38
+ * Get cached resource with conditional request support
39
+ * @param key Cache key
40
+ * @param conditionalHeaders Optional conditional headers
41
+ * @returns Result with data, metadata, and notModified flag
42
+ */
43
+ async getWithConditional(key, conditionalHeaders) {
44
+ const entry = this.cache.get(key);
45
+ if (!entry) {
46
+ this.misses++;
47
+ return { data: null, notModified: false };
48
+ }
49
+ // Check if expired
50
+ if (entry.expiry <= Date.now()) {
51
+ this.cache.delete(key);
52
+ this.misses++;
53
+ return { data: null, notModified: false };
54
+ }
55
+ // Check conditional request headers
56
+ if (conditionalHeaders && entry.etag && entry.lastModified) {
57
+ const { ifNoneMatch, ifModifiedSince } = conditionalHeaders;
58
+ // Import conditional request utilities
59
+ const { evaluateConditionalRequest } = await import('../utils/conditional-request.js');
60
+ // Build params object without undefined values
61
+ const params = {
62
+ currentETag: entry.etag,
63
+ lastModified: entry.lastModified,
64
+ };
65
+ if (ifNoneMatch) {
66
+ params.ifNoneMatch = ifNoneMatch;
67
+ }
68
+ if (ifModifiedSince) {
69
+ params.ifModifiedSince = ifModifiedSince;
70
+ }
71
+ const result = evaluateConditionalRequest(params);
72
+ if (result.notModified) {
73
+ // Resource not modified, don't return data
74
+ entry.accessCount++;
75
+ entry.lastAccessed = Date.now();
76
+ this.hits++;
77
+ const response = {
78
+ data: null,
79
+ notModified: true,
80
+ etag: entry.etag,
81
+ lastModified: entry.lastModified,
82
+ };
83
+ if (entry.version) {
84
+ response.version = entry.version;
85
+ }
86
+ if (entry.metadata) {
87
+ response.metadata = entry.metadata;
88
+ }
89
+ return response;
90
+ }
91
+ }
92
+ // Update access stats
93
+ entry.accessCount++;
94
+ entry.lastAccessed = Date.now();
95
+ this.hits++;
96
+ // Build return object without undefined values
97
+ const result = {
98
+ data: entry.data,
99
+ notModified: false,
100
+ };
101
+ if (entry.etag) {
102
+ result.etag = entry.etag;
103
+ }
104
+ if (entry.lastModified) {
105
+ result.lastModified = entry.lastModified;
106
+ }
107
+ if (entry.version) {
108
+ result.version = entry.version;
109
+ }
110
+ if (entry.metadata) {
111
+ result.metadata = entry.metadata;
112
+ }
113
+ return result;
114
+ }
115
+ /**
116
+ * Set cached resource with TTL
117
+ * @param key Cache key
118
+ * @param data Data to cache
119
+ * @param ttl Time to live in seconds
120
+ * @param metadata Optional metadata (etag, lastModified, version, resourceMetadata)
121
+ */
122
+ set(key, data, ttl, metadata) {
123
+ const now = Date.now();
124
+ const lastModified = metadata?.lastModified || new Date(now).toISOString();
125
+ const etag = metadata?.etag || generateStrongETag(data);
126
+ const version = metadata?.version;
127
+ const resourceMetadata = metadata?.resourceMetadata;
128
+ const entry = {
129
+ data,
130
+ expiry: now + ttl * 1000,
131
+ createdAt: now,
132
+ accessCount: 0,
133
+ lastAccessed: now,
134
+ etag,
135
+ lastModified,
136
+ };
137
+ if (version) {
138
+ entry.version = version;
139
+ }
140
+ if (resourceMetadata) {
141
+ entry.metadata = resourceMetadata;
142
+ }
143
+ this.cache.set(key, entry);
144
+ }
145
+ /**
146
+ * Check if key exists and is valid
147
+ * @param key Cache key
148
+ * @returns True if key exists and is not expired
149
+ */
150
+ has(key) {
151
+ const entry = this.cache.get(key);
152
+ if (!entry)
153
+ return false;
154
+ if (entry.expiry <= Date.now()) {
155
+ this.cache.delete(key);
156
+ return false;
157
+ }
158
+ return true;
159
+ }
160
+ /**
161
+ * Delete cached resource
162
+ * @param key Cache key
163
+ * @returns True if key was deleted
164
+ */
165
+ delete(key) {
166
+ return this.cache.delete(key);
167
+ }
168
+ /**
169
+ * Clear cache entries matching pattern
170
+ * @param pattern Optional pattern to match keys (substring match)
171
+ */
172
+ clear(pattern) {
173
+ if (!pattern) {
174
+ this.cache.clear();
175
+ this.hits = 0;
176
+ this.misses = 0;
177
+ return;
178
+ }
179
+ const keysToDelete = [];
180
+ for (const key of this.cache.keys()) {
181
+ if (key.includes(pattern)) {
182
+ keysToDelete.push(key);
183
+ }
184
+ }
185
+ keysToDelete.forEach(key => this.cache.delete(key));
186
+ }
187
+ /**
188
+ * Clean up expired entries
189
+ * @returns Number of entries removed
190
+ */
191
+ cleanup() {
192
+ const now = Date.now();
193
+ let removed = 0;
194
+ for (const [key, entry] of this.cache.entries()) {
195
+ if (entry.expiry <= now) {
196
+ this.cache.delete(key);
197
+ removed++;
198
+ }
199
+ }
200
+ return removed;
201
+ }
202
+ /**
203
+ * Get cache statistics
204
+ * @returns Cache statistics object
205
+ */
206
+ getStats() {
207
+ const entries = Array.from(this.cache.values());
208
+ const now = Date.now();
209
+ const validEntries = entries.filter(e => e.expiry > now);
210
+ const expiredEntries = entries.filter(e => e.expiry <= now);
211
+ const totalRequests = this.hits + this.misses;
212
+ const hitRate = totalRequests > 0 ? this.hits / totalRequests : 0;
213
+ return {
214
+ totalEntries: this.cache.size,
215
+ validEntries: validEntries.length,
216
+ expiredEntries: expiredEntries.length,
217
+ cacheSize: JSON.stringify(entries).length,
218
+ hitRate,
219
+ totalHits: this.hits,
220
+ totalMisses: this.misses,
221
+ };
222
+ }
223
+ /**
224
+ * Get all cache keys
225
+ * @returns Array of all cache keys
226
+ */
227
+ keys() {
228
+ return Array.from(this.cache.keys());
229
+ }
230
+ /**
231
+ * Get cache entries sorted by access count
232
+ * @param limit Maximum number of entries to return
233
+ * @returns Top entries by access count
234
+ */
235
+ getTopEntries(limit = 10) {
236
+ const entries = Array.from(this.cache.entries())
237
+ .map(([key, entry]) => ({
238
+ key,
239
+ accessCount: entry.accessCount,
240
+ }))
241
+ .sort((a, b) => b.accessCount - a.accessCount)
242
+ .slice(0, limit);
243
+ return entries;
244
+ }
245
+ /**
246
+ * Get least recently used entries
247
+ * @param limit Maximum number of entries to return
248
+ * @returns Least recently used entries
249
+ */
250
+ getLRUEntries(limit = 10) {
251
+ const entries = Array.from(this.cache.entries())
252
+ .map(([key, entry]) => ({
253
+ key,
254
+ lastAccessed: entry.lastAccessed,
255
+ }))
256
+ .sort((a, b) => a.lastAccessed - b.lastAccessed)
257
+ .slice(0, limit);
258
+ return entries;
259
+ }
260
+ /**
261
+ * Evict least recently used entries to reduce cache size
262
+ * @param targetSize Target number of entries
263
+ * @returns Number of entries evicted
264
+ */
265
+ evictLRU(targetSize) {
266
+ if (this.cache.size <= targetSize)
267
+ return 0;
268
+ const entriesToEvict = this.cache.size - targetSize;
269
+ const lruEntries = this.getLRUEntries(entriesToEvict);
270
+ lruEntries.forEach(({ key }) => this.cache.delete(key));
271
+ return entriesToEvict;
272
+ }
273
+ /**
274
+ * Reset cache statistics
275
+ */
276
+ resetStats() {
277
+ this.hits = 0;
278
+ this.misses = 0;
279
+ }
280
+ }
281
+ /**
282
+ * Singleton resource cache instance
283
+ */
284
+ export const resourceCache = new ResourceCache();
285
+ /**
286
+ * Start automatic cleanup interval
287
+ * Cleans up expired entries every 5 minutes
288
+ */
289
+ let cleanupInterval = null;
290
+ export function startAutomaticCleanup(intervalMs = 5 * 60 * 1000) {
291
+ if (cleanupInterval) {
292
+ clearInterval(cleanupInterval);
293
+ }
294
+ cleanupInterval = setInterval(() => {
295
+ const removed = resourceCache.cleanup();
296
+ if (removed > 0) {
297
+ console.log(`[ResourceCache] Cleaned up ${removed} expired entries`);
298
+ }
299
+ }, intervalMs);
300
+ }
301
+ export function stopAutomaticCleanup() {
302
+ if (cleanupInterval) {
303
+ clearInterval(cleanupInterval);
304
+ cleanupInterval = null;
305
+ }
306
+ }
307
+ /**
308
+ * Generate ETag for resource data
309
+ * @deprecated Use generateStrongETag from conditional-request.ts instead
310
+ * @param data Resource data
311
+ * @returns ETag string
312
+ */
313
+ export function generateETag(data) {
314
+ return generateStrongETag(data);
315
+ }
316
+ //# sourceMappingURL=resource-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-cache.js","sourceRoot":"","sources":["../../../src/resources/resource-cache.ts"],"names":[],"mappings":"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"}