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,433 @@
1
+ import type { Page } from '@playwright/test';
2
+ export interface MindHealConfig {
3
+ ai: AIConfig;
4
+ healing: HealingConfig;
5
+ enterprise: EnterpriseConfig;
6
+ rag: RAGConfig;
7
+ analytics: AnalyticsConfig;
8
+ smartRetry: SmartRetryConfig;
9
+ parallel: ParallelConfig;
10
+ visualVerification: VisualVerificationConfig;
11
+ git: GitConfig;
12
+ reviewServer: ReviewServerConfig;
13
+ reporting: ReportingConfig;
14
+ logging: LoggingConfig;
15
+ }
16
+ export type AIProviderName = 'anthropic' | 'openai' | 'azure-openai' | 'gemini' | 'ollama' | 'aws-bedrock' | 'deepseek' | 'groq' | 'qwen' | 'meta' | 'perplexity';
17
+ export interface AIConfig {
18
+ provider: AIProviderName;
19
+ apiKey: string;
20
+ model?: string;
21
+ maxTokens?: number;
22
+ temperature?: number;
23
+ baseUrl?: string;
24
+ azureDeploymentName?: string;
25
+ azureApiVersion?: string;
26
+ awsRegion?: string;
27
+ awsAccessKeyId?: string;
28
+ awsSecretAccessKey?: string;
29
+ awsSessionToken?: string;
30
+ ollamaHost?: string;
31
+ }
32
+ export interface HealingConfig {
33
+ enabled: boolean;
34
+ maxRetries: number;
35
+ strategies: HealingStrategyName[];
36
+ confidenceThreshold: number;
37
+ cacheHeals: boolean;
38
+ cachePath?: string;
39
+ excludePatterns?: string[];
40
+ domSnapshotDepth?: number;
41
+ handleDialogs: boolean | DialogHandlingConfig;
42
+ }
43
+ export type EnterprisePlatform = 'auto' | 'salesforce' | 'sap' | 'oracle' | 'workday' | 'servicenow' | 'dynamics';
44
+ export interface EnterpriseConfig {
45
+ /** Enable enterprise-specific healing strategies. Default: true */
46
+ enabled: boolean;
47
+ /** Auto-detect platform or specify explicitly. Default: 'auto' */
48
+ platform: EnterprisePlatform;
49
+ /** Wait for enterprise loading indicators before healing. Default: true */
50
+ waitForLoad: boolean;
51
+ /** Max time (ms) to wait for loading indicators. Default: 15000 */
52
+ loadTimeout: number;
53
+ /** Attempt virtual scroll to bring elements into view. Default: true */
54
+ virtualScrolling: boolean;
55
+ /** Custom virtual scroll container selector. Default: auto-detected */
56
+ scrollContainerSelector?: string;
57
+ /** Extra stable attribute names to prioritize (added to built-in list). Default: [] */
58
+ customStableAttributes: string[];
59
+ /** Custom dynamic ID patterns (regex strings) to detect and strip. Default: [] */
60
+ customDynamicIdPatterns: string[];
61
+ }
62
+ export interface DialogHandlingConfig {
63
+ /** Auto-dismiss alert() dialogs. Default: true */
64
+ dismissAlerts: boolean;
65
+ /** Auto-accept confirm() dialogs. Default: true */
66
+ acceptConfirms: boolean;
67
+ /** Auto-respond to prompt() dialogs with this value. Default: '' */
68
+ promptResponse: string;
69
+ /** Log dialog events. Default: true */
70
+ logDialogs: boolean;
71
+ }
72
+ export interface GitConfig {
73
+ enabled: boolean;
74
+ provider: 'github' | 'gitlab' | 'bitbucket';
75
+ token: string;
76
+ baseBranch?: string;
77
+ branchPrefix?: string;
78
+ autoCreatePR: boolean;
79
+ commitMessagePrefix?: string;
80
+ prLabels?: string[];
81
+ prReviewers?: string[];
82
+ repoOwner?: string;
83
+ repoName?: string;
84
+ }
85
+ export interface ReviewServerConfig {
86
+ enabled: boolean | 'auto';
87
+ port: number;
88
+ openBrowser: boolean;
89
+ autoCloseAfterReview: boolean;
90
+ }
91
+ export interface ReportingConfig {
92
+ outputDir?: string;
93
+ generateHTML: boolean;
94
+ generateJSON: boolean;
95
+ }
96
+ export interface LoggingConfig {
97
+ level: 'debug' | 'info' | 'warn' | 'error';
98
+ file?: string;
99
+ }
100
+ export type HealingStrategyName = 'cache' | 'attribute' | 'text' | 'role' | 'css' | 'xpath' | 'table' | 'modal' | 'enterprise' | 'ai';
101
+ export interface HealingResult {
102
+ success: boolean;
103
+ originalLocator: LocatorInfo;
104
+ healedLocator: LocatorInfo | null;
105
+ strategy: HealingStrategyName | null;
106
+ confidence: number;
107
+ reasoning: string;
108
+ duration: number;
109
+ attempts: StrategyAttempt[];
110
+ }
111
+ export interface StrategyAttempt {
112
+ strategy: HealingStrategyName;
113
+ locator: LocatorInfo | null;
114
+ confidence: number;
115
+ duration: number;
116
+ error?: string;
117
+ }
118
+ export interface LocatorInfo {
119
+ type: LocatorType;
120
+ selector: string;
121
+ options?: Record<string, unknown>;
122
+ playwrightExpression: string;
123
+ }
124
+ export type LocatorType = 'css' | 'xpath' | 'role' | 'text' | 'testid' | 'label' | 'placeholder' | 'alttext' | 'title';
125
+ export interface HealingEvent {
126
+ id: string;
127
+ timestamp: number;
128
+ testTitle: string;
129
+ testFile: string;
130
+ pageUrl: string;
131
+ action: string;
132
+ originalLocator: LocatorInfo;
133
+ healedLocator: LocatorInfo | null;
134
+ strategy: HealingStrategyName | null;
135
+ confidence: number;
136
+ reasoning: string;
137
+ duration: number;
138
+ sourceLocation: SourceLocation | null;
139
+ status: 'healed' | 'failed';
140
+ reviewStatus: 'pending' | 'approved' | 'rejected';
141
+ }
142
+ export interface SourceLocation {
143
+ filePath: string;
144
+ line: number;
145
+ column: number;
146
+ }
147
+ export interface DOMSnapshot {
148
+ html: string;
149
+ url: string;
150
+ title: string;
151
+ timestamp: number;
152
+ rootSelector?: string;
153
+ }
154
+ export interface DOMElement {
155
+ tag: string;
156
+ id?: string;
157
+ classes?: string[];
158
+ attributes: Record<string, string>;
159
+ text?: string;
160
+ children: DOMElement[];
161
+ role?: string;
162
+ ariaLabel?: string;
163
+ testId?: string;
164
+ }
165
+ export interface AIProvider {
166
+ name: string;
167
+ suggestLocator(request: AIHealingRequest): Promise<AIHealingResponse>;
168
+ }
169
+ export interface AIHealingRequest {
170
+ originalLocator: LocatorInfo;
171
+ domSnapshot: string;
172
+ pageUrl: string;
173
+ action: string;
174
+ errorMessage: string;
175
+ nearbyElements?: string;
176
+ /** RAG-retrieved context chunks to enhance the AI prompt */
177
+ ragContext?: RAGContextChunk[];
178
+ }
179
+ export interface AIHealingResponse {
180
+ selector: string;
181
+ locatorType: LocatorType;
182
+ confidence: number;
183
+ reasoning: string;
184
+ playwrightExpression: string;
185
+ }
186
+ export interface PRDetails {
187
+ title: string;
188
+ body: string;
189
+ sourceBranch: string;
190
+ targetBranch: string;
191
+ labels: string[];
192
+ reviewers: string[];
193
+ }
194
+ export interface PRResult {
195
+ url: string;
196
+ number: number;
197
+ provider: string;
198
+ }
199
+ export interface CodeModification {
200
+ filePath: string;
201
+ line: number;
202
+ column: number;
203
+ originalCode: string;
204
+ modifiedCode: string;
205
+ healingEvent: HealingEvent;
206
+ }
207
+ export interface ReviewAction {
208
+ eventId: string;
209
+ action: 'approve' | 'reject' | 'edit';
210
+ editedLocator?: string;
211
+ }
212
+ export interface ReviewSummary {
213
+ total: number;
214
+ approved: number;
215
+ rejected: number;
216
+ pending: number;
217
+ }
218
+ export interface CacheEntry {
219
+ originalSelector: string;
220
+ originalType: LocatorType;
221
+ healedSelector: string;
222
+ healedType: LocatorType;
223
+ healedExpression: string;
224
+ pageUrlPattern: string;
225
+ confidence: number;
226
+ strategy: HealingStrategyName;
227
+ createdAt: number;
228
+ usageCount: number;
229
+ lastUsed: number;
230
+ }
231
+ export interface HealCache {
232
+ version: string;
233
+ entries: Record<string, CacheEntry>;
234
+ }
235
+ export interface HealReport {
236
+ sessionId: string;
237
+ startTime: number;
238
+ endTime: number;
239
+ totalTests: number;
240
+ totalHeals: number;
241
+ successfulHeals: number;
242
+ failedHeals: number;
243
+ events: HealingEvent[];
244
+ config: Partial<MindHealConfig>;
245
+ }
246
+ export interface HealingSession {
247
+ id: string;
248
+ startTime: number;
249
+ events: HealingEvent[];
250
+ config: MindHealConfig;
251
+ }
252
+ export interface RAGConfig {
253
+ /** Enable RAG-enhanced AI healing. Default: true */
254
+ enabled: boolean;
255
+ /** Path to the knowledge store file. Default: '.mindheal/knowledge.json' */
256
+ storePath: string;
257
+ /** Maximum number of context chunks to include in the AI prompt. Default: 5 */
258
+ maxContextChunks: number;
259
+ /** Minimum similarity score (0-1) for a chunk to be included. Default: 0.3 */
260
+ similarityThreshold: number;
261
+ /** Knowledge sources to enable. Default: all sources */
262
+ sources: RAGSourceName[];
263
+ /** Paths to scan for page object source files. Default: ['pages', 'src/pages', 'page-objects'] */
264
+ pageObjectPaths: string[];
265
+ /** Paths to scan for component/design system docs. Default: [] */
266
+ componentDocPaths: string[];
267
+ }
268
+ export type RAGSourceName = 'healing-history' | 'page-objects' | 'git-changes' | 'dom-snapshots' | 'component-docs' | 'test-specs';
269
+ export interface RAGContextChunk {
270
+ source: RAGSourceName;
271
+ content: string;
272
+ relevanceScore: number;
273
+ metadata: Record<string, string>;
274
+ }
275
+ export interface RAGKnowledgeEntry {
276
+ id: string;
277
+ source: RAGSourceName;
278
+ content: string;
279
+ tags: string[];
280
+ metadata: Record<string, string>;
281
+ createdAt: number;
282
+ updatedAt: number;
283
+ }
284
+ export interface RAGKnowledgeStore {
285
+ version: string;
286
+ entries: RAGKnowledgeEntry[];
287
+ }
288
+ export interface AnalyticsConfig {
289
+ /** Enable analytics tracking. Default: true */
290
+ enabled: boolean;
291
+ /** Path to the analytics data file. Default: '.mindheal/analytics.json' */
292
+ storePath: string;
293
+ /** Track per-locator healing frequency. Default: true */
294
+ trackLocators: boolean;
295
+ /** Track per-strategy effectiveness. Default: true */
296
+ trackStrategies: boolean;
297
+ /** Track per-test stability scores. Default: true */
298
+ trackTestStability: boolean;
299
+ /** Max history entries to retain. Default: 5000 */
300
+ maxEntries: number;
301
+ /** Auto-prune entries older than this many days. Default: 90 */
302
+ retentionDays: number;
303
+ }
304
+ export interface AnalyticsEntry {
305
+ timestamp: number;
306
+ testFile: string;
307
+ testTitle: string;
308
+ pageUrl: string;
309
+ locatorExpression: string;
310
+ action: string;
311
+ strategy: HealingStrategyName | null;
312
+ confidence: number;
313
+ duration: number;
314
+ success: boolean;
315
+ }
316
+ export interface AnalyticsSnapshot {
317
+ version: string;
318
+ entries: AnalyticsEntry[];
319
+ strategyStats: Record<string, StrategyStats>;
320
+ locatorStats: Record<string, LocatorStats>;
321
+ testStability: Record<string, TestStabilityRecord>;
322
+ lastUpdated: number;
323
+ }
324
+ export interface StrategyStats {
325
+ name: string;
326
+ totalAttempts: number;
327
+ successCount: number;
328
+ failCount: number;
329
+ avgConfidence: number;
330
+ avgDuration: number;
331
+ successRate: number;
332
+ }
333
+ export interface LocatorStats {
334
+ expression: string;
335
+ healCount: number;
336
+ failCount: number;
337
+ lastHealed: number;
338
+ strategies: string[];
339
+ pages: string[];
340
+ }
341
+ export interface TestStabilityRecord {
342
+ testFile: string;
343
+ testTitle: string;
344
+ totalRuns: number;
345
+ healsNeeded: number;
346
+ failedHeals: number;
347
+ stabilityScore: number;
348
+ lastRun: number;
349
+ trend: 'improving' | 'stable' | 'degrading';
350
+ }
351
+ export interface SmartRetryConfig {
352
+ /** Enable smart retry intelligence. Default: true */
353
+ enabled: boolean;
354
+ /** Wait for network idle before healing. Default: true */
355
+ waitForNetworkIdle: boolean;
356
+ /** Network idle timeout in ms. Default: 5000 */
357
+ networkIdleTimeout: number;
358
+ /** Use exponential backoff between retry attempts. Default: true */
359
+ exponentialBackoff: boolean;
360
+ /** Base delay (ms) for exponential backoff. Default: 500 */
361
+ backoffBaseDelay: number;
362
+ /** Max delay (ms) for exponential backoff. Default: 10000 */
363
+ backoffMaxDelay: number;
364
+ /** Enable flaky test detection. Default: true */
365
+ flakyDetection: boolean;
366
+ /** Number of consecutive failures before marking as flaky (vs broken). Default: 3 */
367
+ flakyThreshold: number;
368
+ /** Path to flaky test tracking data. Default: '.mindheal/flaky-tests.json' */
369
+ flakyStorePath: string;
370
+ }
371
+ export interface FlakyTestEntry {
372
+ testFile: string;
373
+ testTitle: string;
374
+ locatorExpression: string;
375
+ failureCount: number;
376
+ successCount: number;
377
+ consecutiveFailures: number;
378
+ isFlaky: boolean;
379
+ lastSeen: number;
380
+ history: Array<{
381
+ timestamp: number;
382
+ passed: boolean;
383
+ }>;
384
+ }
385
+ export interface FlakyTestStore {
386
+ version: string;
387
+ entries: Record<string, FlakyTestEntry>;
388
+ }
389
+ export interface ParallelConfig {
390
+ /** Enable parallel-safe file operations. Default: true */
391
+ enabled: boolean;
392
+ /** Lock timeout in ms. Default: 10000 */
393
+ lockTimeout: number;
394
+ /** Retry interval for acquiring locks in ms. Default: 50 */
395
+ lockRetryInterval: number;
396
+ /** Stale lock threshold in ms (auto-release). Default: 30000 */
397
+ staleLockThreshold: number;
398
+ }
399
+ export interface VisualVerificationConfig {
400
+ /** Enable visual verification after healing. Default: false */
401
+ enabled: boolean;
402
+ /** Directory to store verification screenshots. Default: '.mindheal/screenshots' */
403
+ screenshotDir: string;
404
+ /** Pixel difference threshold (0-1). Default: 0.1 */
405
+ diffThreshold: number;
406
+ /** Capture element screenshot after healing for comparison. Default: true */
407
+ captureElement: boolean;
408
+ /** Capture full page screenshot for context. Default: false */
409
+ captureFullPage: boolean;
410
+ /** Keep screenshots after verification. Default: true */
411
+ keepScreenshots: boolean;
412
+ }
413
+ export interface VisualVerificationResult {
414
+ verified: boolean;
415
+ elementScreenshotPath: string | null;
416
+ fullPageScreenshotPath: string | null;
417
+ boundingBox: {
418
+ x: number;
419
+ y: number;
420
+ width: number;
421
+ height: number;
422
+ } | null;
423
+ elementVisible: boolean;
424
+ elementInViewport: boolean;
425
+ timestamp: number;
426
+ }
427
+ export interface MindHealFixtures {
428
+ page: Page;
429
+ }
430
+ export interface MindHealWorkerFixtures {
431
+ _mindHealSession: HealingSession;
432
+ }
433
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export declare function isCI(): boolean;
2
+ export type GitProvider = 'github' | 'gitlab' | 'bitbucket' | 'unknown';
3
+ export declare function detectGitProvider(): GitProvider;
4
+ export declare function getRepoInfo(): {
5
+ owner: string;
6
+ name: string;
7
+ } | null;
8
+ export declare function getGitRootDir(): string | null;
9
+ export declare function getCurrentBranch(): string | null;
10
+ //# sourceMappingURL=environment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../../src/utils/environment.ts"],"names":[],"mappings":"AAGA,wBAAgB,IAAI,IAAI,OAAO,CAY9B;AAED,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,CAAC;AAExE,wBAAgB,iBAAiB,IAAI,WAAW,CAa/C;AAED,wBAAgB,WAAW,IAAI;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAqBpE;AAED,wBAAgB,aAAa,IAAI,MAAM,GAAG,IAAI,CAM7C;AAED,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,IAAI,CAMhD"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Parallel Execution Safety — File Locking
3
+ *
4
+ * Provides advisory file locking for shared resources (cache, knowledge store,
5
+ * analytics) when Playwright tests run with multiple workers or shards.
6
+ *
7
+ * Uses .lock files with PID + timestamp to detect stale locks.
8
+ * Cross-platform (Windows + macOS + Linux).
9
+ */
10
+ import type { ParallelConfig } from '../types/index';
11
+ export declare class FileLock {
12
+ private readonly config;
13
+ constructor(config: ParallelConfig);
14
+ /**
15
+ * Acquires an advisory lock on the given file path.
16
+ * Returns a release function that MUST be called when done.
17
+ *
18
+ * @param filePath - The file to lock (a .lock file is created alongside it)
19
+ * @returns A function to release the lock
20
+ * @throws If the lock cannot be acquired within the timeout
21
+ */
22
+ acquire(filePath: string): Promise<() => void>;
23
+ /**
24
+ * Executes a function while holding a file lock.
25
+ * Automatically acquires and releases the lock.
26
+ */
27
+ withLock<T>(filePath: string, fn: () => T | Promise<T>): Promise<T>;
28
+ /**
29
+ * Checks if a lock file is stale (process dead or too old).
30
+ */
31
+ private isLockStale;
32
+ /**
33
+ * Safely removes a lock file.
34
+ */
35
+ private removeLock;
36
+ }
37
+ //# sourceMappingURL=file-lock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-lock.d.ts","sourceRoot":"","sources":["../../../src/utils/file-lock.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAUH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AASrD,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiB;gBAE5B,MAAM,EAAE,cAAc;IAIlC;;;;;;;OAOG;IACG,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,CAAC;IAiEpD;;;OAGG;IACG,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAazE;;OAEG;IACH,OAAO,CAAC,WAAW;IAsBnB;;OAEG;IACH,OAAO,CAAC,UAAU;CASnB"}
@@ -0,0 +1,7 @@
1
+ export declare function readFileContent(filePath: string): string;
2
+ export declare function writeFileContent(filePath: string, content: string): void;
3
+ export declare function fileExists(filePath: string): boolean;
4
+ export declare function ensureDirectory(dirPath: string): void;
5
+ export declare function readJsonFile<T>(filePath: string): T | null;
6
+ export declare function writeJsonFile(filePath: string, data: unknown): void;
7
+ //# sourceMappingURL=file-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-utils.d.ts","sourceRoot":"","sources":["../../../src/utils/file-utils.ts"],"names":[],"mappings":"AAIA,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAOxD;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAWxE;AAED,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAIrD;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAS1D;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAEnE"}
@@ -0,0 +1,9 @@
1
+ import type { LoggingConfig } from '../types/index';
2
+ export declare function configureLogger(config: LoggingConfig): void;
3
+ export declare const logger: {
4
+ debug(message: string, data?: unknown): void;
5
+ info(message: string, data?: unknown): void;
6
+ warn(message: string, data?: unknown): void;
7
+ error(message: string, data?: unknown): void;
8
+ };
9
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAUpD,wBAAgB,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI,CAU3D;AAyBD,eAAO,MAAM,MAAM;mBACF,MAAM,SAAS,OAAO,GAAG,IAAI;kBAQ9B,MAAM,SAAS,OAAO,GAAG,IAAI;kBAQ7B,MAAM,SAAS,OAAO,GAAG,IAAI;mBAQ5B,MAAM,SAAS,OAAO,GAAG,IAAI;CAO7C,CAAC"}
package/package.json ADDED
@@ -0,0 +1,106 @@
1
+ {
2
+ "name": "mindheal",
3
+ "version": "1.0.0",
4
+ "description": "AI-powered auto-healing agent for Playwright — fixes broken locators, continues tests, and creates PRs automatically",
5
+ "main": "dist/cjs/index.js",
6
+ "module": "dist/esm/index.js",
7
+ "types": "dist/types/index.d.ts",
8
+ "bin": {
9
+ "mindheal": "./dist/cjs/cli/init.js"
10
+ },
11
+ "exports": {
12
+ ".": {
13
+ "import": "./dist/esm/index.js",
14
+ "require": "./dist/cjs/index.js",
15
+ "types": "./dist/types/index.d.ts"
16
+ },
17
+ "./reporter": {
18
+ "import": "./dist/esm/reporters/heal-reporter.js",
19
+ "require": "./dist/cjs/reporters/heal-reporter.js",
20
+ "types": "./dist/types/reporters/heal-reporter.d.ts"
21
+ }
22
+ },
23
+ "files": [
24
+ "dist",
25
+ "README.md",
26
+ "LICENSE",
27
+ "CHANGELOG.md",
28
+ ".env.example"
29
+ ],
30
+ "scripts": {
31
+ "build": "npm run clean && npm run build:esm && npm run build:cjs && npm run build:types",
32
+ "build:esm": "rollup -c rollup.config.mjs --environment BUILD:esm",
33
+ "build:cjs": "rollup -c rollup.config.mjs --environment BUILD:cjs",
34
+ "build:types": "tsc --project tsconfig.build.json --emitDeclarationOnly",
35
+ "clean": "node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"",
36
+ "typecheck": "tsc --noEmit",
37
+ "lint": "eslint src/ --ext .ts",
38
+ "lint:fix": "eslint src/ --ext .ts --fix",
39
+ "format": "prettier --write \"src/**/*.ts\"",
40
+ "test": "vitest run",
41
+ "test:watch": "vitest",
42
+ "prepublishOnly": "npm run test && npm run build",
43
+ "prepack": "npm run build",
44
+ "pack:dry": "npm pack --dry-run"
45
+ },
46
+ "keywords": [
47
+ "playwright",
48
+ "auto-heal",
49
+ "self-healing",
50
+ "test-automation",
51
+ "locator",
52
+ "ai",
53
+ "testing",
54
+ "e2e",
55
+ "mindheal",
56
+ "enterprise",
57
+ "sap",
58
+ "salesforce",
59
+ "rag",
60
+ "analytics",
61
+ "visual-verification",
62
+ "flaky-test"
63
+ ],
64
+ "author": "Deepak Hiremath",
65
+ "license": "MIT",
66
+ "repository": {
67
+ "type": "git",
68
+ "url": "https://github.com/dvhiremath26/mindheal"
69
+ },
70
+ "bugs": {
71
+ "url": "https://github.com/dvhiremath26/mindheal/issues"
72
+ },
73
+ "engines": {
74
+ "node": ">=18.0.0"
75
+ },
76
+ "peerDependencies": {
77
+ "@playwright/test": ">=1.40.0"
78
+ },
79
+ "dependencies": {
80
+ "express": "^4.18.0",
81
+ "ws": "^8.16.0",
82
+ "ts-morph": "^21.0.0",
83
+ "simple-git": "^3.22.0",
84
+ "open": "^10.0.0",
85
+ "glob": "^10.3.0"
86
+ },
87
+ "devDependencies": {
88
+ "@playwright/test": "^1.44.0",
89
+ "@types/express": "^4.17.21",
90
+ "@types/ws": "^8.5.10",
91
+ "@types/node": "^20.11.0",
92
+ "@typescript-eslint/eslint-plugin": "^7.0.0",
93
+ "@typescript-eslint/parser": "^7.0.0",
94
+ "eslint": "^8.56.0",
95
+ "prettier": "^3.2.0",
96
+ "rollup": "^4.9.0",
97
+ "rollup-plugin-typescript2": "^0.36.0",
98
+ "@rollup/plugin-node-resolve": "^15.2.0",
99
+ "@rollup/plugin-commonjs": "^25.0.0",
100
+ "@rollup/plugin-json": "^6.1.0",
101
+ "@rollup/plugin-typescript": "^12.3.0",
102
+ "tslib": "^2.8.1",
103
+ "typescript": "^5.3.0",
104
+ "vitest": "^1.2.0"
105
+ }
106
+ }