mindheal 1.0.0

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 (255) hide show
  1. package/.env.example +48 -0
  2. package/CHANGELOG.md +27 -0
  3. package/LICENSE +21 -0
  4. package/README.md +481 -0
  5. package/dist/cjs/ai/ai-provider.js +46 -0
  6. package/dist/cjs/ai/ai-provider.js.map +1 -0
  7. package/dist/cjs/ai/anthropic-provider.js +106 -0
  8. package/dist/cjs/ai/anthropic-provider.js.map +1 -0
  9. package/dist/cjs/ai/azure-openai-provider.js +130 -0
  10. package/dist/cjs/ai/azure-openai-provider.js.map +1 -0
  11. package/dist/cjs/ai/bedrock-provider.js +183 -0
  12. package/dist/cjs/ai/bedrock-provider.js.map +1 -0
  13. package/dist/cjs/ai/deepseek-provider.js +118 -0
  14. package/dist/cjs/ai/deepseek-provider.js.map +1 -0
  15. package/dist/cjs/ai/gemini-provider.js +129 -0
  16. package/dist/cjs/ai/gemini-provider.js.map +1 -0
  17. package/dist/cjs/ai/groq-provider.js +118 -0
  18. package/dist/cjs/ai/groq-provider.js.map +1 -0
  19. package/dist/cjs/ai/meta-provider.js +118 -0
  20. package/dist/cjs/ai/meta-provider.js.map +1 -0
  21. package/dist/cjs/ai/ollama-provider.js +127 -0
  22. package/dist/cjs/ai/ollama-provider.js.map +1 -0
  23. package/dist/cjs/ai/openai-provider.js +117 -0
  24. package/dist/cjs/ai/openai-provider.js.map +1 -0
  25. package/dist/cjs/ai/perplexity-provider.js +118 -0
  26. package/dist/cjs/ai/perplexity-provider.js.map +1 -0
  27. package/dist/cjs/ai/prompt-templates.js +174 -0
  28. package/dist/cjs/ai/prompt-templates.js.map +1 -0
  29. package/dist/cjs/ai/qwen-provider.js +118 -0
  30. package/dist/cjs/ai/qwen-provider.js.map +1 -0
  31. package/dist/cjs/analytics/healing-analytics.js +263 -0
  32. package/dist/cjs/analytics/healing-analytics.js.map +1 -0
  33. package/dist/cjs/cli/init.js +517 -0
  34. package/dist/cjs/cli/init.js.map +1 -0
  35. package/dist/cjs/config/config-loader.js +135 -0
  36. package/dist/cjs/config/config-loader.js.map +1 -0
  37. package/dist/cjs/config/defaults.js +109 -0
  38. package/dist/cjs/config/defaults.js.map +1 -0
  39. package/dist/cjs/core/dom-snapshot.js +280 -0
  40. package/dist/cjs/core/dom-snapshot.js.map +1 -0
  41. package/dist/cjs/core/enterprise-strategy.js +702 -0
  42. package/dist/cjs/core/enterprise-strategy.js.map +1 -0
  43. package/dist/cjs/core/healer.js +283 -0
  44. package/dist/cjs/core/healer.js.map +1 -0
  45. package/dist/cjs/core/interceptor.js +945 -0
  46. package/dist/cjs/core/interceptor.js.map +1 -0
  47. package/dist/cjs/core/locator-analyzer.js +172 -0
  48. package/dist/cjs/core/locator-analyzer.js.map +1 -0
  49. package/dist/cjs/core/locator-strategies.js +891 -0
  50. package/dist/cjs/core/locator-strategies.js.map +1 -0
  51. package/dist/cjs/core/self-heal-cache.js +178 -0
  52. package/dist/cjs/core/self-heal-cache.js.map +1 -0
  53. package/dist/cjs/core/smart-retry.js +248 -0
  54. package/dist/cjs/core/smart-retry.js.map +1 -0
  55. package/dist/cjs/core/visual-verification.js +262 -0
  56. package/dist/cjs/core/visual-verification.js.map +1 -0
  57. package/dist/cjs/git/code-modifier.js +184 -0
  58. package/dist/cjs/git/code-modifier.js.map +1 -0
  59. package/dist/cjs/git/git-operations.js +145 -0
  60. package/dist/cjs/git/git-operations.js.map +1 -0
  61. package/dist/cjs/git/pr-creator.js +190 -0
  62. package/dist/cjs/git/pr-creator.js.map +1 -0
  63. package/dist/cjs/index.js +97 -0
  64. package/dist/cjs/index.js.map +1 -0
  65. package/dist/cjs/rag/context-retriever.js +289 -0
  66. package/dist/cjs/rag/context-retriever.js.map +1 -0
  67. package/dist/cjs/rag/embeddings.js +82 -0
  68. package/dist/cjs/rag/embeddings.js.map +1 -0
  69. package/dist/cjs/rag/knowledge-store.js +159 -0
  70. package/dist/cjs/rag/knowledge-store.js.map +1 -0
  71. package/dist/cjs/reporters/heal-report.js +279 -0
  72. package/dist/cjs/reporters/heal-report.js.map +1 -0
  73. package/dist/cjs/reporters/heal-reporter.js +294 -0
  74. package/dist/cjs/reporters/heal-reporter.js.map +1 -0
  75. package/dist/cjs/server/review-server.js +166 -0
  76. package/dist/cjs/server/review-server.js.map +1 -0
  77. package/dist/cjs/server/routes.js +92 -0
  78. package/dist/cjs/server/routes.js.map +1 -0
  79. package/dist/cjs/utils/environment.js +57 -0
  80. package/dist/cjs/utils/environment.js.map +1 -0
  81. package/dist/cjs/utils/file-lock.js +136 -0
  82. package/dist/cjs/utils/file-lock.js.map +1 -0
  83. package/dist/cjs/utils/file-utils.js +49 -0
  84. package/dist/cjs/utils/file-utils.js.map +1 -0
  85. package/dist/cjs/utils/logger.js +78 -0
  86. package/dist/cjs/utils/logger.js.map +1 -0
  87. package/dist/esm/ai/ai-provider.js +44 -0
  88. package/dist/esm/ai/ai-provider.js.map +1 -0
  89. package/dist/esm/ai/anthropic-provider.js +104 -0
  90. package/dist/esm/ai/anthropic-provider.js.map +1 -0
  91. package/dist/esm/ai/azure-openai-provider.js +128 -0
  92. package/dist/esm/ai/azure-openai-provider.js.map +1 -0
  93. package/dist/esm/ai/bedrock-provider.js +181 -0
  94. package/dist/esm/ai/bedrock-provider.js.map +1 -0
  95. package/dist/esm/ai/deepseek-provider.js +116 -0
  96. package/dist/esm/ai/deepseek-provider.js.map +1 -0
  97. package/dist/esm/ai/gemini-provider.js +127 -0
  98. package/dist/esm/ai/gemini-provider.js.map +1 -0
  99. package/dist/esm/ai/groq-provider.js +116 -0
  100. package/dist/esm/ai/groq-provider.js.map +1 -0
  101. package/dist/esm/ai/meta-provider.js +116 -0
  102. package/dist/esm/ai/meta-provider.js.map +1 -0
  103. package/dist/esm/ai/ollama-provider.js +125 -0
  104. package/dist/esm/ai/ollama-provider.js.map +1 -0
  105. package/dist/esm/ai/openai-provider.js +115 -0
  106. package/dist/esm/ai/openai-provider.js.map +1 -0
  107. package/dist/esm/ai/perplexity-provider.js +116 -0
  108. package/dist/esm/ai/perplexity-provider.js.map +1 -0
  109. package/dist/esm/ai/prompt-templates.js +171 -0
  110. package/dist/esm/ai/prompt-templates.js.map +1 -0
  111. package/dist/esm/ai/qwen-provider.js +116 -0
  112. package/dist/esm/ai/qwen-provider.js.map +1 -0
  113. package/dist/esm/analytics/healing-analytics.js +261 -0
  114. package/dist/esm/analytics/healing-analytics.js.map +1 -0
  115. package/dist/esm/cli/init.js +495 -0
  116. package/dist/esm/cli/init.js.map +1 -0
  117. package/dist/esm/config/config-loader.js +132 -0
  118. package/dist/esm/config/config-loader.js.map +1 -0
  119. package/dist/esm/config/defaults.js +107 -0
  120. package/dist/esm/config/defaults.js.map +1 -0
  121. package/dist/esm/core/dom-snapshot.js +278 -0
  122. package/dist/esm/core/dom-snapshot.js.map +1 -0
  123. package/dist/esm/core/enterprise-strategy.js +695 -0
  124. package/dist/esm/core/enterprise-strategy.js.map +1 -0
  125. package/dist/esm/core/healer.js +281 -0
  126. package/dist/esm/core/healer.js.map +1 -0
  127. package/dist/esm/core/interceptor.js +940 -0
  128. package/dist/esm/core/interceptor.js.map +1 -0
  129. package/dist/esm/core/locator-analyzer.js +169 -0
  130. package/dist/esm/core/locator-analyzer.js.map +1 -0
  131. package/dist/esm/core/locator-strategies.js +882 -0
  132. package/dist/esm/core/locator-strategies.js.map +1 -0
  133. package/dist/esm/core/self-heal-cache.js +176 -0
  134. package/dist/esm/core/self-heal-cache.js.map +1 -0
  135. package/dist/esm/core/smart-retry.js +246 -0
  136. package/dist/esm/core/smart-retry.js.map +1 -0
  137. package/dist/esm/core/visual-verification.js +260 -0
  138. package/dist/esm/core/visual-verification.js.map +1 -0
  139. package/dist/esm/git/code-modifier.js +182 -0
  140. package/dist/esm/git/code-modifier.js.map +1 -0
  141. package/dist/esm/git/git-operations.js +143 -0
  142. package/dist/esm/git/git-operations.js.map +1 -0
  143. package/dist/esm/git/pr-creator.js +188 -0
  144. package/dist/esm/git/pr-creator.js.map +1 -0
  145. package/dist/esm/index.js +37 -0
  146. package/dist/esm/index.js.map +1 -0
  147. package/dist/esm/rag/context-retriever.js +287 -0
  148. package/dist/esm/rag/context-retriever.js.map +1 -0
  149. package/dist/esm/rag/embeddings.js +77 -0
  150. package/dist/esm/rag/embeddings.js.map +1 -0
  151. package/dist/esm/rag/knowledge-store.js +157 -0
  152. package/dist/esm/rag/knowledge-store.js.map +1 -0
  153. package/dist/esm/reporters/heal-report.js +277 -0
  154. package/dist/esm/reporters/heal-report.js.map +1 -0
  155. package/dist/esm/reporters/heal-reporter.js +290 -0
  156. package/dist/esm/reporters/heal-reporter.js.map +1 -0
  157. package/dist/esm/server/review-server.js +164 -0
  158. package/dist/esm/server/review-server.js.map +1 -0
  159. package/dist/esm/server/routes.js +90 -0
  160. package/dist/esm/server/routes.js.map +1 -0
  161. package/dist/esm/utils/environment.js +53 -0
  162. package/dist/esm/utils/environment.js.map +1 -0
  163. package/dist/esm/utils/file-lock.js +134 -0
  164. package/dist/esm/utils/file-lock.js.map +1 -0
  165. package/dist/esm/utils/file-utils.js +43 -0
  166. package/dist/esm/utils/file-utils.js.map +1 -0
  167. package/dist/esm/utils/logger.js +75 -0
  168. package/dist/esm/utils/logger.js.map +1 -0
  169. package/dist/types/ai/ai-provider.d.ts +4 -0
  170. package/dist/types/ai/ai-provider.d.ts.map +1 -0
  171. package/dist/types/ai/anthropic-provider.d.ts +11 -0
  172. package/dist/types/ai/anthropic-provider.d.ts.map +1 -0
  173. package/dist/types/ai/azure-openai-provider.d.ts +13 -0
  174. package/dist/types/ai/azure-openai-provider.d.ts.map +1 -0
  175. package/dist/types/ai/bedrock-provider.d.ts +14 -0
  176. package/dist/types/ai/bedrock-provider.d.ts.map +1 -0
  177. package/dist/types/ai/deepseek-provider.d.ts +12 -0
  178. package/dist/types/ai/deepseek-provider.d.ts.map +1 -0
  179. package/dist/types/ai/gemini-provider.d.ts +12 -0
  180. package/dist/types/ai/gemini-provider.d.ts.map +1 -0
  181. package/dist/types/ai/groq-provider.d.ts +12 -0
  182. package/dist/types/ai/groq-provider.d.ts.map +1 -0
  183. package/dist/types/ai/meta-provider.d.ts +12 -0
  184. package/dist/types/ai/meta-provider.d.ts.map +1 -0
  185. package/dist/types/ai/ollama-provider.d.ts +10 -0
  186. package/dist/types/ai/ollama-provider.d.ts.map +1 -0
  187. package/dist/types/ai/openai-provider.d.ts +11 -0
  188. package/dist/types/ai/openai-provider.d.ts.map +1 -0
  189. package/dist/types/ai/perplexity-provider.d.ts +12 -0
  190. package/dist/types/ai/perplexity-provider.d.ts.map +1 -0
  191. package/dist/types/ai/prompt-templates.d.ts +11 -0
  192. package/dist/types/ai/prompt-templates.d.ts.map +1 -0
  193. package/dist/types/ai/qwen-provider.d.ts +12 -0
  194. package/dist/types/ai/qwen-provider.d.ts.map +1 -0
  195. package/dist/types/analytics/healing-analytics.d.ts +36 -0
  196. package/dist/types/analytics/healing-analytics.d.ts.map +1 -0
  197. package/dist/types/cli/init.d.ts +15 -0
  198. package/dist/types/cli/init.d.ts.map +1 -0
  199. package/dist/types/config/config-loader.d.ts +4 -0
  200. package/dist/types/config/config-loader.d.ts.map +1 -0
  201. package/dist/types/config/defaults.d.ts +3 -0
  202. package/dist/types/config/defaults.d.ts.map +1 -0
  203. package/dist/types/core/dom-snapshot.d.ts +12 -0
  204. package/dist/types/core/dom-snapshot.d.ts.map +1 -0
  205. package/dist/types/core/enterprise-strategy.d.ts +56 -0
  206. package/dist/types/core/enterprise-strategy.d.ts.map +1 -0
  207. package/dist/types/core/healer.d.ts +52 -0
  208. package/dist/types/core/healer.d.ts.map +1 -0
  209. package/dist/types/core/interceptor.d.ts +64 -0
  210. package/dist/types/core/interceptor.d.ts.map +1 -0
  211. package/dist/types/core/locator-analyzer.d.ts +31 -0
  212. package/dist/types/core/locator-analyzer.d.ts.map +1 -0
  213. package/dist/types/core/locator-strategies.d.ts +45 -0
  214. package/dist/types/core/locator-strategies.d.ts.map +1 -0
  215. package/dist/types/core/self-heal-cache.d.ts +51 -0
  216. package/dist/types/core/self-heal-cache.d.ts.map +1 -0
  217. package/dist/types/core/smart-retry.d.ts +64 -0
  218. package/dist/types/core/smart-retry.d.ts.map +1 -0
  219. package/dist/types/core/visual-verification.d.ts +46 -0
  220. package/dist/types/core/visual-verification.d.ts.map +1 -0
  221. package/dist/types/git/code-modifier.d.ts +51 -0
  222. package/dist/types/git/code-modifier.d.ts.map +1 -0
  223. package/dist/types/git/git-operations.d.ts +40 -0
  224. package/dist/types/git/git-operations.d.ts.map +1 -0
  225. package/dist/types/git/pr-creator.d.ts +27 -0
  226. package/dist/types/git/pr-creator.d.ts.map +1 -0
  227. package/dist/types/index.d.ts +40 -0
  228. package/dist/types/index.d.ts.map +1 -0
  229. package/dist/types/rag/context-retriever.d.ts +69 -0
  230. package/dist/types/rag/context-retriever.d.ts.map +1 -0
  231. package/dist/types/rag/embeddings.d.ts +32 -0
  232. package/dist/types/rag/embeddings.d.ts.map +1 -0
  233. package/dist/types/rag/index.d.ts +12 -0
  234. package/dist/types/rag/index.d.ts.map +1 -0
  235. package/dist/types/rag/knowledge-store.d.ts +38 -0
  236. package/dist/types/rag/knowledge-store.d.ts.map +1 -0
  237. package/dist/types/reporters/heal-report.d.ts +29 -0
  238. package/dist/types/reporters/heal-report.d.ts.map +1 -0
  239. package/dist/types/reporters/heal-reporter.d.ts +49 -0
  240. package/dist/types/reporters/heal-reporter.d.ts.map +1 -0
  241. package/dist/types/server/review-server.d.ts +20 -0
  242. package/dist/types/server/review-server.d.ts.map +1 -0
  243. package/dist/types/server/routes.d.ts +4 -0
  244. package/dist/types/server/routes.d.ts.map +1 -0
  245. package/dist/types/types/index.d.ts +433 -0
  246. package/dist/types/types/index.d.ts.map +1 -0
  247. package/dist/types/utils/environment.d.ts +10 -0
  248. package/dist/types/utils/environment.d.ts.map +1 -0
  249. package/dist/types/utils/file-lock.d.ts +37 -0
  250. package/dist/types/utils/file-lock.d.ts.map +1 -0
  251. package/dist/types/utils/file-utils.d.ts +7 -0
  252. package/dist/types/utils/file-utils.d.ts.map +1 -0
  253. package/dist/types/utils/logger.d.ts +9 -0
  254. package/dist/types/utils/logger.d.ts.map +1 -0
  255. package/package.json +106 -0
@@ -0,0 +1,69 @@
1
+ /**
2
+ * RAG Context Retriever — collects relevant context from all knowledge sources.
3
+ *
4
+ * Before the AI healing strategy runs, the retriever searches the knowledge store
5
+ * for entries that are relevant to the current broken locator. The returned
6
+ * context chunks are injected into the AI prompt so the model can make better
7
+ * decisions based on project-specific knowledge.
8
+ *
9
+ * Six knowledge sources are supported:
10
+ * 1. healing-history — previously healed locators for the same page/selector
11
+ * 2. page-objects — POM class metadata (selectors, method names, file paths)
12
+ * 3. git-changes — recent git diffs that may explain why a locator broke
13
+ * 4. dom-snapshots — historical DOM snapshots of the same page
14
+ * 5. component-docs — component library / design system documentation
15
+ * 6. test-specs — test file context (describe blocks, step descriptions)
16
+ */
17
+ import type { RAGConfig, RAGContextChunk, LocatorInfo, HealingEvent } from '../types/index';
18
+ import { KnowledgeStore } from './knowledge-store';
19
+ export declare class ContextRetriever {
20
+ private readonly config;
21
+ private readonly store;
22
+ constructor(config: RAGConfig, store: KnowledgeStore);
23
+ /**
24
+ * Retrieve relevant context for a broken locator.
25
+ *
26
+ * Builds a search query from the locator info + page URL, queries the
27
+ * knowledge store, and returns ranked context chunks that meet the
28
+ * similarity threshold.
29
+ */
30
+ retrieve(originalLocator: LocatorInfo, pageUrl: string, action: string, errorMessage: string): RAGContextChunk[];
31
+ /**
32
+ * Ingest a completed healing event into the knowledge store so future
33
+ * healings can learn from it.
34
+ */
35
+ ingestHealingEvent(event: HealingEvent): void;
36
+ /**
37
+ * Ingest page object metadata into the knowledge store.
38
+ * Call this when scanning page object files during initialization.
39
+ */
40
+ ingestPageObject(filePath: string, selectors: string[], className: string): void;
41
+ /**
42
+ * Ingest git diff context into the knowledge store.
43
+ * Call this when a git change is detected that might affect locators.
44
+ */
45
+ ingestGitChange(filePath: string, diff: string, commitMessage: string): void;
46
+ /**
47
+ * Ingest a DOM snapshot into the knowledge store.
48
+ * Stores a condensed version for future reference.
49
+ */
50
+ ingestDOMSnapshot(pageUrl: string, html: string, title: string): void;
51
+ /**
52
+ * Ingest component/design-system documentation.
53
+ */
54
+ ingestComponentDoc(componentName: string, doc: string, filePath: string): void;
55
+ /**
56
+ * Ingest test spec context (describe blocks, test titles, step descriptions).
57
+ */
58
+ ingestTestSpec(testFile: string, testTitle: string, steps: string[]): void;
59
+ /**
60
+ * Build a rich search query from the healing context.
61
+ * Combines locator info, URL, action, and error for best TF-IDF matching.
62
+ */
63
+ private buildQuery;
64
+ /**
65
+ * Get the knowledge store instance (for direct access / testing).
66
+ */
67
+ getStore(): KnowledgeStore;
68
+ }
69
+ //# sourceMappingURL=context-retriever.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-retriever.d.ts","sourceRoot":"","sources":["../../../src/rag/context-retriever.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EAEf,WAAW,EACX,YAAY,EACb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGnD,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiB;gBAE3B,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc;IAKpD;;;;;;OAMG;IACH,QAAQ,CACN,eAAe,EAAE,WAAW,EAC5B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,GACnB,eAAe,EAAE;IAsCpB;;;OAGG;IACH,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI;IAyC7C;;;OAGG;IACH,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IA8BhF;;;OAGG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI;IA6B5E;;;OAGG;IACH,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IA8BrE;;OAEG;IACH,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAsB9E;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAgC1E;;;OAGG;IACH,OAAO,CAAC,UAAU;IAmBlB;;OAEG;IACH,QAAQ,IAAI,cAAc;CAG3B"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Lightweight text similarity engine for RAG retrieval.
3
+ *
4
+ * Uses TF-IDF-style term weighting with cosine similarity — no external
5
+ * embedding model or vector DB required. This is intentionally simple so
6
+ * MindHeal works offline (e.g. with Ollama) without any extra infrastructure.
7
+ *
8
+ * For large knowledge bases, consumers can swap in a real vector DB via the
9
+ * `ContextRetriever` interface.
10
+ */
11
+ /**
12
+ * Tokenizes text into lowercase alphanumeric terms, splitting on non-word
13
+ * characters. Also generates bigrams for better matching on locator patterns
14
+ * like "submit-btn" or "getByTestId".
15
+ */
16
+ export declare function tokenize(text: string): string[];
17
+ export type TermVector = Map<string, number>;
18
+ /**
19
+ * Builds a term-frequency vector from a list of tokens.
20
+ */
21
+ export declare function buildTermVector(tokens: string[]): TermVector;
22
+ /**
23
+ * Computes cosine similarity between two term vectors.
24
+ * Returns a value between 0 (completely different) and 1 (identical).
25
+ */
26
+ export declare function cosineSimilarity(a: TermVector, b: TermVector): number;
27
+ /**
28
+ * Computes similarity between two text strings.
29
+ * Convenience wrapper over tokenize → buildTermVector → cosineSimilarity.
30
+ */
31
+ export declare function textSimilarity(textA: string, textB: string): number;
32
+ //# sourceMappingURL=embeddings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddings.d.ts","sourceRoot":"","sources":["../../../src/rag/embeddings.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAU/C;AAID,MAAM,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE7C;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,UAAU,CAa5D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,MAAM,CAmBrE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAUnE"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * RAG (Retrieval-Augmented Generation) module.
3
+ *
4
+ * Provides context-aware AI healing by maintaining a knowledge store
5
+ * of healing history, page objects, git changes, DOM snapshots,
6
+ * component docs, and test specs.
7
+ */
8
+ export { KnowledgeStore } from './knowledge-store';
9
+ export { ContextRetriever } from './context-retriever';
10
+ export { tokenize, buildTermVector, cosineSimilarity, textSimilarity } from './embeddings';
11
+ export type { TermVector } from './embeddings';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/rag/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC3F,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * File-backed knowledge store for RAG context.
3
+ *
4
+ * Stores healing history, page object metadata, git diffs, DOM snapshots,
5
+ * component docs, and test specs as searchable entries. Uses lightweight
6
+ * TF-IDF similarity for retrieval — no vector DB required.
7
+ */
8
+ import type { RAGKnowledgeEntry, RAGSourceName, RAGContextChunk } from '../types/index';
9
+ export declare class KnowledgeStore {
10
+ private readonly storePath;
11
+ private entries;
12
+ private loaded;
13
+ constructor(storePath: string);
14
+ load(): void;
15
+ save(): void;
16
+ add(entry: Omit<RAGKnowledgeEntry, 'id' | 'createdAt' | 'updatedAt'>): RAGKnowledgeEntry;
17
+ /**
18
+ * Add or update an entry. If an entry with matching source + tags exists,
19
+ * update it instead of creating a duplicate.
20
+ */
21
+ upsert(entry: Omit<RAGKnowledgeEntry, 'id' | 'createdAt' | 'updatedAt'>): RAGKnowledgeEntry;
22
+ getAll(): RAGKnowledgeEntry[];
23
+ getBySource(source: RAGSourceName): RAGKnowledgeEntry[];
24
+ /**
25
+ * Search the knowledge store for entries relevant to the query.
26
+ * Returns ranked results above the similarity threshold.
27
+ */
28
+ search(query: string, options?: {
29
+ sources?: RAGSourceName[];
30
+ maxResults?: number;
31
+ similarityThreshold?: number;
32
+ }): RAGContextChunk[];
33
+ /**
34
+ * Get entry count.
35
+ */
36
+ get size(): number;
37
+ }
38
+ //# sourceMappingURL=knowledge-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-store.d.ts","sourceRoot":"","sources":["../../../src/rag/knowledge-store.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,iBAAiB,EAEjB,aAAa,EACb,eAAe,EAChB,MAAM,gBAAgB,CAAC;AAUxB,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,MAAM,CAAU;gBAEZ,SAAS,EAAE,MAAM;IAQ7B,IAAI,IAAI,IAAI;IAkCZ,IAAI,IAAI,IAAI;IAiBZ,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,GAAG,iBAAiB;IAuBxF;;;OAGG;IACH,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,GAAG,WAAW,GAAG,WAAW,CAAC,GAAG,iBAAiB;IAmB3F,MAAM,IAAI,iBAAiB,EAAE;IAI7B,WAAW,CAAC,MAAM,EAAE,aAAa,GAAG,iBAAiB,EAAE;IAMvD;;;OAGG;IACH,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;QACP,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;QAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,mBAAmB,CAAC,EAAE,MAAM,CAAC;KACzB,GACL,eAAe,EAAE;IA6CpB;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
@@ -0,0 +1,29 @@
1
+ import type { HealReport } from '../types/index';
2
+ /**
3
+ * Generates HTML and JSON healing reports summarizing all healing events
4
+ * from a test run.
5
+ */
6
+ export declare class HealReportGenerator {
7
+ /**
8
+ * Serialize a HealReport to a formatted JSON string.
9
+ */
10
+ generateJSON(report: HealReport): string;
11
+ /**
12
+ * Generate a self-contained HTML report with inline styles.
13
+ */
14
+ generateHTML(report: HealReport): string;
15
+ /**
16
+ * Persist the report to disk in JSON and/or HTML format.
17
+ */
18
+ saveReport(report: HealReport, outputDir: string, generateHTML: boolean, generateJSON: boolean): Promise<void>;
19
+ private computeStats;
20
+ private computeStrategyBreakdown;
21
+ private renderEventRow;
22
+ private confidenceColor;
23
+ private strategyColor;
24
+ private escapeHTML;
25
+ private formatDate;
26
+ private formatDuration;
27
+ private shortenPath;
28
+ }
29
+ //# sourceMappingURL=heal-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heal-report.d.ts","sourceRoot":"","sources":["../../../src/reporters/heal-report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAqC,MAAM,gBAAgB,CAAC;AAKpF;;;GAGG;AACH,qBAAa,mBAAmB;IAC9B;;OAEG;IACI,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAI/C;;OAEG;IACI,YAAY,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM;IAoI/C;;OAEG;IACU,UAAU,CACrB,MAAM,EAAE,UAAU,EAClB,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,OAAO,EACrB,YAAY,EAAE,OAAO,GACpB,OAAO,CAAC,IAAI,CAAC;IAoChB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,wBAAwB;IAYhC,OAAO,CAAC,cAAc;IAmCtB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,UAAU;IASlB,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,WAAW;CAKpB"}
@@ -0,0 +1,49 @@
1
+ import type { Reporter, FullConfig, Suite, TestCase, TestResult, FullResult } from '@playwright/test/reporter';
2
+ import type { MindHealConfig } from '../types/index';
3
+ /**
4
+ * Custom Playwright reporter that hooks into the test lifecycle to collect
5
+ * healing events, generate reports, and optionally create PRs or launch the
6
+ * interactive review server.
7
+ *
8
+ * Usage in `playwright.config.ts`:
9
+ * ```ts
10
+ * reporter: [['mindheal/reporter', { ai: { provider: 'anthropic', apiKey: '...' } }]]
11
+ * ```
12
+ */
13
+ export default class HealReporter implements Reporter {
14
+ private config;
15
+ private startTime;
16
+ private totalTests;
17
+ private reportGenerator;
18
+ constructor(options?: Partial<MindHealConfig>);
19
+ /**
20
+ * Called once before tests start running.
21
+ */
22
+ onBegin(config: FullConfig, suite: Suite): void;
23
+ /**
24
+ * Called after each test finishes. Used to tag healing events with the
25
+ * test title so the report is more informative.
26
+ */
27
+ onTestEnd(test: TestCase, result: TestResult): void;
28
+ /**
29
+ * Called once after all tests have completed. Drives report generation,
30
+ * git operations, and the review server workflow.
31
+ */
32
+ onEnd(result: FullResult): Promise<void>;
33
+ private handleCIWorkflow;
34
+ private handleLocalWorkflow;
35
+ /**
36
+ * Apply approved code modifications using the AST-based CodeModifier.
37
+ */
38
+ private applyApprovedModifications;
39
+ /**
40
+ * Convert healing events into CodeModification objects for the CodeModifier.
41
+ * Events without source locations or healed locators are skipped.
42
+ */
43
+ private buildModifications;
44
+ /**
45
+ * Build a markdown PR description summarizing all modifications.
46
+ */
47
+ private buildPRBody;
48
+ }
49
+ //# sourceMappingURL=heal-reporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"heal-reporter.d.ts","sourceRoot":"","sources":["../../../src/reporters/heal-reporter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,UAAU,EACV,KAAK,EACL,QAAQ,EACR,UAAU,EACV,UAAU,EACX,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EACV,cAAc,EAIf,MAAM,gBAAgB,CAAC;AAWxB;;;;;;;;;GASG;AACH,MAAM,CAAC,OAAO,OAAO,YAAa,YAAW,QAAQ;IACnD,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,eAAe,CAAsB;gBAEjC,OAAO,GAAE,OAAO,CAAC,cAAc,CAAM;IAKjD;;OAEG;IACH,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAS/C;;;OAGG;IACH,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IAenD;;;OAGG;IACG,KAAK,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;YAkFhC,gBAAgB;YA0EhB,mBAAmB;IAiDjC;;OAEG;YACW,0BAA0B;IAuBxC;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAwB1B;;OAEG;IACH,OAAO,CAAC,WAAW;CA6BpB"}
@@ -0,0 +1,20 @@
1
+ import type { ReviewServerConfig, HealingEvent } from '../types/index';
2
+ export declare class ReviewServer {
3
+ private readonly config;
4
+ private events;
5
+ private app;
6
+ private httpServer;
7
+ private wss;
8
+ private reviewResolve;
9
+ constructor(config: ReviewServerConfig, events: HealingEvent[]);
10
+ start(): Promise<void>;
11
+ stop(): Promise<void>;
12
+ waitForReview(): Promise<HealingEvent[]>;
13
+ private setupApp;
14
+ private onEventUpdated;
15
+ private broadcastUpdate;
16
+ private broadcastAllReviewed;
17
+ private allReviewed;
18
+ private buildSummary;
19
+ }
20
+ //# sourceMappingURL=review-server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-server.d.ts","sourceRoot":"","sources":["../../../src/server/review-server.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EACV,kBAAkB,EAClB,YAAY,EAEb,MAAM,gBAAgB,CAAC;AAIxB,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,GAAG,CAAgC;IAC3C,OAAO,CAAC,aAAa,CAAmD;gBAE5D,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,YAAY,EAAE;IAUxD,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA0CtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAwBrB,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;IAY9C,OAAO,CAAC,QAAQ;IA4BhB,OAAO,CAAC,cAAc;IA4BtB,OAAO,CAAC,eAAe;IAgBvB,OAAO,CAAC,oBAAoB;IAe5B,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,YAAY;CAQrB"}
@@ -0,0 +1,4 @@
1
+ import express from 'express';
2
+ import type { HealingEvent } from '../types/index';
3
+ export declare function createRoutes(events: HealingEvent[], onUpdate: (event: HealingEvent) => void): express.Router;
4
+ //# sourceMappingURL=routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../../src/server/routes.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,gBAAgB,CAAC;AAElE,wBAAgB,YAAY,CAC1B,MAAM,EAAE,YAAY,EAAE,EACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,GACtC,OAAO,CAAC,MAAM,CA4GhB"}