@silasfmartins/testhub 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 (296) hide show
  1. package/.github/copilot-instructions.md +520 -0
  2. package/biome.json +37 -0
  3. package/dist/index.d.ts +45 -0
  4. package/dist/index.js +169 -0
  5. package/dist/scripts/consumer-postinstall.d.ts +15 -0
  6. package/dist/scripts/consumer-postinstall.js +785 -0
  7. package/dist/scripts/generate-docs.d.ts +16 -0
  8. package/dist/scripts/generate-docs.js +1363 -0
  9. package/dist/scripts/generate-index.d.ts +2 -0
  10. package/dist/scripts/generate-index.js +314 -0
  11. package/dist/scripts/init-api.d.ts +2 -0
  12. package/dist/scripts/init-api.js +525 -0
  13. package/dist/scripts/init-banco.d.ts +2 -0
  14. package/dist/scripts/init-banco.js +347 -0
  15. package/dist/scripts/init-frontend.d.ts +2 -0
  16. package/dist/scripts/init-frontend.js +627 -0
  17. package/dist/scripts/init-mobile.d.ts +2 -0
  18. package/dist/scripts/init-mobile.js +481 -0
  19. package/dist/scripts/init-scenarios.d.ts +2 -0
  20. package/dist/scripts/init-scenarios.js +846 -0
  21. package/dist/scripts/init-ssh.d.ts +2 -0
  22. package/dist/scripts/init-ssh.js +639 -0
  23. package/dist/scripts/package-versions.d.ts +57 -0
  24. package/dist/scripts/package-versions.js +768 -0
  25. package/dist/scripts/postinstall.d.ts +1 -0
  26. package/dist/scripts/postinstall.js +527 -0
  27. package/dist/scripts/robust-build.d.ts +7 -0
  28. package/dist/scripts/robust-build.js +88 -0
  29. package/dist/scripts/setup-local-packages.d.ts +31 -0
  30. package/dist/scripts/setup-local-packages.js +237 -0
  31. package/dist/scripts/smart-override.d.ts +2 -0
  32. package/dist/scripts/smart-override.js +1360 -0
  33. package/dist/scripts/sync-configs.d.ts +27 -0
  34. package/dist/scripts/sync-configs.js +248 -0
  35. package/dist/scripts/test-biome-parse.d.ts +5 -0
  36. package/dist/scripts/test-biome-parse.js +84 -0
  37. package/dist/scripts/ultracite-setup.d.ts +4 -0
  38. package/dist/scripts/ultracite-setup.js +310 -0
  39. package/dist/scripts/update-all-init-scripts.d.ts +2 -0
  40. package/dist/scripts/update-all-init-scripts.js +52 -0
  41. package/dist/scripts/update-biome-schema.d.ts +15 -0
  42. package/dist/scripts/update-biome-schema.js +124 -0
  43. package/dist/src/AutoCoreFacade.d.ts +145 -0
  44. package/dist/src/AutoCoreFacade.js +217 -0
  45. package/dist/src/api/ApiActions.d.ts +297 -0
  46. package/dist/src/api/ApiActions.js +1905 -0
  47. package/dist/src/api/Certificate.d.ts +60 -0
  48. package/dist/src/api/Certificate.js +79 -0
  49. package/dist/src/api/JsonResponse.d.ts +116 -0
  50. package/dist/src/api/JsonResponse.js +206 -0
  51. package/dist/src/appium/DeviceFarmViewer.d.ts +79 -0
  52. package/dist/src/appium/DeviceFarmViewer.js +1083 -0
  53. package/dist/src/appium/MobileActions.d.ts +347 -0
  54. package/dist/src/appium/MobileActions.js +1632 -0
  55. package/dist/src/appium/MobileConnection.d.ts +160 -0
  56. package/dist/src/appium/MobileConnection.js +772 -0
  57. package/dist/src/config/envLoader.d.ts +123 -0
  58. package/dist/src/config/envLoader.js +361 -0
  59. package/dist/src/config/jest-safe-setup.d.ts +19 -0
  60. package/dist/src/config/jest-safe-setup.js +369 -0
  61. package/dist/src/config/timeouts.d.ts +32 -0
  62. package/dist/src/config/timeouts.js +38 -0
  63. package/dist/src/desktop/DesktopActions.d.ts +46 -0
  64. package/dist/src/desktop/DesktopActions.js +398 -0
  65. package/dist/src/desktop/DesktopConnection.d.ts +32 -0
  66. package/dist/src/desktop/DesktopConnection.js +84 -0
  67. package/dist/src/domain/entities/TestExecution.d.ts +117 -0
  68. package/dist/src/domain/entities/TestExecution.js +150 -0
  69. package/dist/src/domain/entities/TestReport.d.ts +114 -0
  70. package/dist/src/domain/entities/TestReport.js +179 -0
  71. package/dist/src/domain/repositories/ITestRepository.d.ts +196 -0
  72. package/dist/src/domain/repositories/ITestRepository.js +14 -0
  73. package/dist/src/domain/schemas/ValidationSchemas.d.ts +159 -0
  74. package/dist/src/domain/schemas/ValidationSchemas.js +181 -0
  75. package/dist/src/functions/errors/BaseError.d.ts +78 -0
  76. package/dist/src/functions/errors/BaseError.js +245 -0
  77. package/dist/src/functions/errors/ConfigurationError.d.ts +16 -0
  78. package/dist/src/functions/errors/ConfigurationError.js +48 -0
  79. package/dist/src/functions/errors/ErrorCatalog.d.ts +148 -0
  80. package/dist/src/functions/errors/ErrorCatalog.js +157 -0
  81. package/dist/src/functions/errors/GlobalErrorHandler.d.ts +101 -0
  82. package/dist/src/functions/errors/GlobalErrorHandler.js +281 -0
  83. package/dist/src/functions/errors/IntegrationError.d.ts +17 -0
  84. package/dist/src/functions/errors/IntegrationError.js +51 -0
  85. package/dist/src/functions/errors/SecurityError.d.ts +14 -0
  86. package/dist/src/functions/errors/SecurityError.js +42 -0
  87. package/dist/src/functions/errors/SystemError.d.ts +12 -0
  88. package/dist/src/functions/errors/SystemError.js +36 -0
  89. package/dist/src/functions/errors/ValidationError.d.ts +14 -0
  90. package/dist/src/functions/errors/ValidationError.js +61 -0
  91. package/dist/src/functions/errors/index.d.ts +12 -0
  92. package/dist/src/functions/errors/index.js +13 -0
  93. package/dist/src/global-setup.d.ts +1 -0
  94. package/dist/src/global-setup.js +1037 -0
  95. package/dist/src/helpers/BancoActions.d.ts +188 -0
  96. package/dist/src/helpers/BancoActions.js +581 -0
  97. package/dist/src/helpers/EnviromentHelper.d.ts +17 -0
  98. package/dist/src/helpers/EnviromentHelper.js +66 -0
  99. package/dist/src/helpers/ParallelExecutionHelper.d.ts +183 -0
  100. package/dist/src/helpers/ParallelExecutionHelper.js +375 -0
  101. package/dist/src/helpers/SyncSignal.d.ts +15 -0
  102. package/dist/src/helpers/SyncSignal.js +44 -0
  103. package/dist/src/hubdocs/CategoryDetector.d.ts +83 -0
  104. package/dist/src/hubdocs/CategoryDetector.js +401 -0
  105. package/dist/src/hubdocs/DirectStatementInterceptor.d.ts +54 -0
  106. package/dist/src/hubdocs/DirectStatementInterceptor.js +243 -0
  107. package/dist/src/hubdocs/ExecutionTracker.d.ts +107 -0
  108. package/dist/src/hubdocs/ExecutionTracker.js +702 -0
  109. package/dist/src/hubdocs/HubDocs.d.ts +395 -0
  110. package/dist/src/hubdocs/HubDocs.js +3586 -0
  111. package/dist/src/hubdocs/StatementMethodFilter.d.ts +71 -0
  112. package/dist/src/hubdocs/StatementMethodFilter.js +618 -0
  113. package/dist/src/hubdocs/StatementTracker.d.ts +417 -0
  114. package/dist/src/hubdocs/StatementTracker.js +2419 -0
  115. package/dist/src/hubdocs/SwaggerGenerator.d.ts +59 -0
  116. package/dist/src/hubdocs/SwaggerGenerator.js +405 -0
  117. package/dist/src/hubdocs/index.d.ts +9 -0
  118. package/dist/src/hubdocs/index.js +9 -0
  119. package/dist/src/hubdocs/types.d.ts +114 -0
  120. package/dist/src/hubdocs/types.js +5 -0
  121. package/dist/src/infrastructure/DependencyContainer.d.ts +142 -0
  122. package/dist/src/infrastructure/DependencyContainer.js +250 -0
  123. package/dist/src/infrastructure/adapters/AppiumAdapter.d.ts +168 -0
  124. package/dist/src/infrastructure/adapters/AppiumAdapter.js +468 -0
  125. package/dist/src/infrastructure/adapters/OracleAdapter.d.ts +150 -0
  126. package/dist/src/infrastructure/adapters/OracleAdapter.js +388 -0
  127. package/dist/src/infrastructure/adapters/PlaywrightAdapter.d.ts +192 -0
  128. package/dist/src/infrastructure/adapters/PlaywrightAdapter.js +382 -0
  129. package/dist/src/infrastructure/adapters/SSHAdapter.d.ts +141 -0
  130. package/dist/src/infrastructure/adapters/SSHAdapter.js +428 -0
  131. package/dist/src/interfaces.d.ts +501 -0
  132. package/dist/src/interfaces.js +25 -0
  133. package/dist/src/internal/fakes/__fake-actions__.d.ts +17 -0
  134. package/dist/src/internal/fakes/__fake-actions__.js +21 -0
  135. package/dist/src/internal/fakes/__forbidden__.d.ts +10 -0
  136. package/dist/src/internal/fakes/__forbidden__.js +18 -0
  137. package/dist/src/internal/fakes/__honeypot__.d.ts +15 -0
  138. package/dist/src/internal/fakes/__honeypot__.js +24 -0
  139. package/dist/src/octane/OctaneReporter.d.ts +13 -0
  140. package/dist/src/octane/OctaneReporter.js +61 -0
  141. package/dist/src/playwright/CryptoActions.d.ts +20 -0
  142. package/dist/src/playwright/CryptoActions.js +75 -0
  143. package/dist/src/playwright/EnhancedWebActions.d.ts +7 -0
  144. package/dist/src/playwright/EnhancedWebActions.js +65 -0
  145. package/dist/src/playwright/WebActions.d.ts +1599 -0
  146. package/dist/src/playwright/WebActions.js +11788 -0
  147. package/dist/src/playwright/actions/ActionTimeline.d.ts +36 -0
  148. package/dist/src/playwright/actions/ActionTimeline.js +101 -0
  149. package/dist/src/playwright/actions/RecoveryQueue.d.ts +82 -0
  150. package/dist/src/playwright/actions/RecoveryQueue.js +130 -0
  151. package/dist/src/playwright/actions/SelectorCache.d.ts +53 -0
  152. package/dist/src/playwright/actions/SelectorCache.js +96 -0
  153. package/dist/src/playwright/actions/index.d.ts +13 -0
  154. package/dist/src/playwright/actions/index.js +14 -0
  155. package/dist/src/playwright/actions/types.d.ts +147 -0
  156. package/dist/src/playwright/actions/types.js +5 -0
  157. package/dist/src/playwright/fixtures.d.ts +112 -0
  158. package/dist/src/playwright/fixtures.js +718 -0
  159. package/dist/src/playwright/network-logs-reporter.d.ts +7 -0
  160. package/dist/src/playwright/network-logs-reporter.js +66 -0
  161. package/dist/src/playwright/registerRecoveryWrappers.d.ts +1 -0
  162. package/dist/src/playwright/registerRecoveryWrappers.js +54 -0
  163. package/dist/src/security/BuildSecurity.d.ts +12 -0
  164. package/dist/src/security/BuildSecurity.js +138 -0
  165. package/dist/src/security/EulaProtection.d.ts +70 -0
  166. package/dist/src/security/EulaProtection.js +155 -0
  167. package/dist/src/security/HoneypotManager.d.ts +46 -0
  168. package/dist/src/security/HoneypotManager.js +234 -0
  169. package/dist/src/security/KeysManager.d.ts +36 -0
  170. package/dist/src/security/KeysManager.js +158 -0
  171. package/dist/src/security/ProofOfWorkIntegration.d.ts +64 -0
  172. package/dist/src/security/ProofOfWorkIntegration.js +206 -0
  173. package/dist/src/security/SecurityValidation.d.ts +21 -0
  174. package/dist/src/security/SecurityValidation.js +163 -0
  175. package/dist/src/security/SourceMapProtection.d.ts +55 -0
  176. package/dist/src/security/SourceMapProtection.js +220 -0
  177. package/dist/src/security/protector.d.ts +1 -0
  178. package/dist/src/security/protector.js +97 -0
  179. package/dist/src/ssh/SSHActions.d.ts +262 -0
  180. package/dist/src/ssh/SSHActions.js +790 -0
  181. package/dist/src/ssh/SSHClient.d.ts +99 -0
  182. package/dist/src/ssh/SSHClient.js +409 -0
  183. package/dist/src/statements/BaseStatement.d.ts +38 -0
  184. package/dist/src/statements/BaseStatement.js +78 -0
  185. package/dist/src/testContext/AuthStateManager.d.ts +93 -0
  186. package/dist/src/testContext/AuthStateManager.js +256 -0
  187. package/dist/src/testContext/CoverageManager.d.ts +198 -0
  188. package/dist/src/testContext/CoverageManager.js +917 -0
  189. package/dist/src/testContext/TestAnnotations.d.ts +476 -0
  190. package/dist/src/testContext/TestAnnotations.js +2647 -0
  191. package/dist/src/testContext/TestContext.d.ts +138 -0
  192. package/dist/src/testContext/TestContext.js +369 -0
  193. package/dist/src/testContext/UnifiedHtmlGenerator.d.ts +7 -0
  194. package/dist/src/testContext/UnifiedHtmlGenerator.js +264 -0
  195. package/dist/src/testContext/UnifiedReportManager.d.ts +211 -0
  196. package/dist/src/testContext/UnifiedReportManager.js +1206 -0
  197. package/dist/src/testhub/DynamicConfigManager.d.ts +121 -0
  198. package/dist/src/testhub/DynamicConfigManager.js +320 -0
  199. package/dist/src/testhub/SystemsManager.d.ts +119 -0
  200. package/dist/src/testhub/SystemsManager.js +365 -0
  201. package/dist/src/testhub/TestHubClient.d.ts +335 -0
  202. package/dist/src/testhub/TestHubClient.js +1215 -0
  203. package/dist/src/testhub/TestHubReporter.d.ts +62 -0
  204. package/dist/src/testhub/TestHubReporter.js +576 -0
  205. package/dist/src/testhub/TestHubVars.d.ts +116 -0
  206. package/dist/src/testhub/TestHubVars.js +273 -0
  207. package/dist/src/utils/ActionInterceptor.d.ts +59 -0
  208. package/dist/src/utils/ActionInterceptor.js +741 -0
  209. package/dist/src/utils/ArtifactsCompressor.d.ts +43 -0
  210. package/dist/src/utils/ArtifactsCompressor.js +181 -0
  211. package/dist/src/utils/AutoLogsFinal.d.ts +47 -0
  212. package/dist/src/utils/AutoLogsFinal.js +148 -0
  213. package/dist/src/utils/CodeGenSession.d.ts +114 -0
  214. package/dist/src/utils/CodeGenSession.js +264 -0
  215. package/dist/src/utils/ConfigLogger.d.ts +133 -0
  216. package/dist/src/utils/ConfigLogger.js +611 -0
  217. package/dist/src/utils/CustomReporter.d.ts +22 -0
  218. package/dist/src/utils/CustomReporter.js +352 -0
  219. package/dist/src/utils/DataStore.d.ts +171 -0
  220. package/dist/src/utils/DataStore.js +484 -0
  221. package/dist/src/utils/DatabaseInterceptor.d.ts +19 -0
  222. package/dist/src/utils/DatabaseInterceptor.js +295 -0
  223. package/dist/src/utils/DateHelper.d.ts +16 -0
  224. package/dist/src/utils/DateHelper.js +120 -0
  225. package/dist/src/utils/DateValidator.d.ts +4 -0
  226. package/dist/src/utils/DateValidator.js +51 -0
  227. package/dist/src/utils/DocumentGenerator.d.ts +35 -0
  228. package/dist/src/utils/DocumentGenerator.js +129 -0
  229. package/dist/src/utils/EvidenceCapture.d.ts +90 -0
  230. package/dist/src/utils/EvidenceCapture.js +600 -0
  231. package/dist/src/utils/EvidenceReportGenerator.d.ts +70 -0
  232. package/dist/src/utils/EvidenceReportGenerator.js +799 -0
  233. package/dist/src/utils/FrameManagementUtil.d.ts +42 -0
  234. package/dist/src/utils/FrameManagementUtil.js +75 -0
  235. package/dist/src/utils/GlobalStatementsInterceptor.d.ts +1 -0
  236. package/dist/src/utils/GlobalStatementsInterceptor.js +1 -0
  237. package/dist/src/utils/HTMLTemplate.d.ts +1 -0
  238. package/dist/src/utils/HTMLTemplate.js +1034 -0
  239. package/dist/src/utils/InterceptacaoMagica.d.ts +23 -0
  240. package/dist/src/utils/InterceptacaoMagica.js +365 -0
  241. package/dist/src/utils/LogSanitizer.d.ts +35 -0
  242. package/dist/src/utils/LogSanitizer.js +110 -0
  243. package/dist/src/utils/Logger.d.ts +65 -0
  244. package/dist/src/utils/Logger.js +284 -0
  245. package/dist/src/utils/McpLocalClient.d.ts +141 -0
  246. package/dist/src/utils/McpLocalClient.js +871 -0
  247. package/dist/src/utils/PDFEvidenceGenerator.d.ts +20 -0
  248. package/dist/src/utils/PDFEvidenceGenerator.js +156 -0
  249. package/dist/src/utils/SpecFileAnalyzer.d.ts +35 -0
  250. package/dist/src/utils/SpecFileAnalyzer.js +209 -0
  251. package/dist/src/utils/StatementInterceptor.d.ts +18 -0
  252. package/dist/src/utils/StatementInterceptor.js +87 -0
  253. package/dist/src/utils/StatementLogger.d.ts +33 -0
  254. package/dist/src/utils/StatementLogger.js +113 -0
  255. package/dist/src/utils/StatementsInterceptor.d.ts +1 -0
  256. package/dist/src/utils/StatementsInterceptor.js +1 -0
  257. package/dist/src/utils/TeamsFlushHook.d.ts +17 -0
  258. package/dist/src/utils/TeamsFlushHook.js +168 -0
  259. package/dist/src/utils/TerminalLogCapture.d.ts +158 -0
  260. package/dist/src/utils/TerminalLogCapture.js +531 -0
  261. package/dist/src/utils/TestMethodLogger.d.ts +70 -0
  262. package/dist/src/utils/TestMethodLogger.js +95 -0
  263. package/dist/src/utils/UnifiedTeardown.d.ts +4 -0
  264. package/dist/src/utils/UnifiedTeardown.js +400 -0
  265. package/dist/src/utils/XPathCatalog.d.ts +152 -0
  266. package/dist/src/utils/XPathCatalog.js +350 -0
  267. package/dist/src/utils/generators.d.ts +90 -0
  268. package/dist/src/utils/generators.js +167 -0
  269. package/dist/src/utils/testRecovery/ResilientPlaywright.d.ts +152 -0
  270. package/dist/src/utils/testRecovery/ResilientPlaywright.js +715 -0
  271. package/dist/src/utils/testRecovery/TestRecoveryClient.d.ts +801 -0
  272. package/dist/src/utils/testRecovery/TestRecoveryClient.js +1415 -0
  273. package/dist/src/utils/testRecovery/autoFixCode.d.ts +65 -0
  274. package/dist/src/utils/testRecovery/autoFixCode.js +32 -0
  275. package/dist/vitest.config.d.ts +2 -0
  276. package/dist/vitest.config.js +59 -0
  277. package/dist/wdio.conf.d.ts +1 -0
  278. package/dist/wdio.conf.js +420 -0
  279. package/package.json +137 -0
  280. package/protect-loader.mjs +643 -0
  281. package/scripts/consumer-postinstall.ts +975 -0
  282. package/scripts/generate-index.ts +343 -0
  283. package/scripts/init-api.ts +613 -0
  284. package/scripts/init-banco.ts +437 -0
  285. package/scripts/init-frontend.ts +727 -0
  286. package/scripts/init-mobile.ts +558 -0
  287. package/scripts/init-scenarios.ts +925 -0
  288. package/scripts/init-ssh.ts +734 -0
  289. package/scripts/package-versions.ts +978 -0
  290. package/scripts/postinstall.ts +605 -0
  291. package/scripts/smart-override.ts +1675 -0
  292. package/scripts/sync-configs.ts +302 -0
  293. package/scripts/ultracite-setup.ts +370 -0
  294. package/src/types/globals.d.ts +48 -0
  295. package/tsconfig.json +29 -0
  296. package/types/autocore-sync-signal.d.ts +10 -0
@@ -0,0 +1,520 @@
1
+ # AutoCore Hub - GitHub Copilot Instructions (MCP)
2
+
3
+ Atualizado em: 2026-03-17
4
+ Versao: 2.7.44-r28
5
+
6
+ Este arquivo e a **fonte de verdade** para regras do **MCP** (Model Context Protocol), uso de tools e integracoes (Playwright/Test Recovery/Teams relay).
7
+
8
+ Nao documenta detalhes do **Portal/UI** nem changelog por versao. Para isso, use `AGENTS.md`/`CLAUDE.md`.
9
+
10
+ ## 0) Regras obrigatorias (sempre)
11
+
12
+ 1) **Sincronia de docs (obrigatorio):**
13
+ - Se mudar qualquer regra/fluxo de MCP/tools, atualizar **no mesmo patch**:
14
+ - `.github/copilot-instructions.md`
15
+ - `AGENTS.md` + `CLAUDE.md` (raiz)
16
+ - `backend/*` e `packages/autocore-hub-mcp/*` quando afetados
17
+ - O CI valida versao via `.github/scripts/check-doc-sync.sh` (este arquivo precisa conter `v2.7.44`).
18
+
19
+ 2) **Produtividade (mcp-estimative):**
20
+ - Ao executar qualquer tool (MCP ou nao), registrar **1 tarefa por tool** via `mcp-estimative`:
21
+ - `ai_productivity_start_task` -> executar tool -> `ai_productivity_complete_task`
22
+ - Registrar inclusive em caso de erro/cancelamento.
23
+
24
+ 3) **Auto-normalize apos tool (obrigatorio):**
25
+ - Apos executar qualquer tool que gere/edite codigo/arquivos, rodar `normalize_project` automaticamente.
26
+ - Excecao: se a tool atual for `normalize_project`, nao rodar novamente.
27
+
28
+ 4) **Seguranca e privacidade (obrigatorio):**
29
+ - Nunca expor segredos (URL/token/senha/headers sensiveis) em output/logs.
30
+ - Nunca devolver ciphertext no formato `iv:tag:cipher`.
31
+ - Em sistemas/ambientes privados, respeitar a politica de visibilidade (ver Secao 2).
32
+ - Ao retornar URLs capturadas, mascarar query params sensiveis: `token`, `state`, `password`, `code`, `request_id`, etc.
33
+
34
+ 5) **Escolha de tool (obrigatorio):**
35
+ - Se o usuario pedir explicitamente uma tool, executar **a tool pedida** primeiro.
36
+ - Nao trocar automaticamente por outra tool sem justificativa tecnica clara.
37
+ - Para resolver credenciais de sistema/ambiente, usar sempre `get_system_environment`.
38
+ - `get_system_login_hints` e somente para selectors/hints de login (nao substitui consulta de credenciais).
39
+
40
+ 6) **UI sensivel de integracoes (obrigatorio):**
41
+ - A aba de Apps do MCP (`/dashboard/mcp?activeTab=apps`) deve ser visivel somente para `admin`.
42
+ - Para `manager`/`user`, esconder o trigger da aba e corrigir acesso direto por query string para `chat`.
43
+
44
+ 7) **Auto-fix XPath local-first (obrigatorio):**
45
+ - `fix_xpath_in_attributes` deve executar primeiro no MCP local (maquina do usuario), nunca assumir escrita valida via backend remoto.
46
+ - Fallback remoto so quando explicitamente habilitado (`ALLOW_REMOTE_AUTOFIX_FALLBACK=true`).
47
+ - Em Windows, preservar `projectRoot` com barras invertidas (`C:\\...`) e suportar UNC (`\\\\servidor\\share`).
48
+ - Framework deve aguardar confirmacao do auto-fix (sem `fire-and-forget`) e registrar sucesso/falha com base em `fileUpdated` e validacao em disco.
49
+ - Para inferencia de arquivo/alvo, priorizar `attrCtx.methodName`/`attributesFile` capturados do stack (nao usar `CT` como `methodName` de locator).
50
+ - Quando `className` vier de `Page*`, o MCP local deve tentar mapear para `Attributes*` e, se necessario, buscar por XPath em `src/attributes`, `src/pages` e `tests` antes de desistir.
51
+ - O retorno de auto-fix deve comprovar escrita local (hash/bytes alterados + novo XPath presente) e marcar `success=false` quando a escrita nao for confirmada.
52
+
53
+ 8) **Metadata de recovery (CN/CT/usuario) obrigatoria:**
54
+ - Enviar `testCaseName` (CN), `testCaseId` (CT), `testMethodName` e `executionSource` explicitamente no body de `analyze-failure` e `report-result`.
55
+ - Em fallback, extrair CN/CT de `TestContext.testInfo.titlePath` (CN = penultimo, CT = ultimo item util) para evitar `N/D` no dashboard.
56
+ - Sempre enviar headers de ator (`x-automation-user-*` + aliases); quando variaveis AUTOCORE_* estiverem vazias, usar fallback de runtime (ex.: `USERNAME` no Windows).
57
+
58
+ 9) **Portal Automation (obrigatorio):**
59
+ - Fluxo WEB no Portal deve chamar `codegen` via MCP (`/mcp`), priorizando execucao local-first na maquina do usuario.
60
+ - O `codegen` deve priorizar saida em padrao framework (`.spec.ts` + `src/pages` + `src/attributes`) por padrao; `playwright` puro fica apenas quando `codegenTarget` for explicitamente solicitado.
61
+ - Se backend nao tiver acesso a URL alvo, nao bloquear criacao: manter recorder/codegen no MCP local do usuario.
62
+ - Para sincronizacao de testes salvos por usuario, usar a tool `get_portal_saved_tests` (hash MCP como identidade).
63
+ - No framework, preferir helper backend-first para `get_portal_saved_tests` e helper local-first para `run_local_npm_script`/`codegen`.
64
+ - O framework deve conseguir ler `portalTests[].files`, `portalTests[].cts[].runScript` e `portalTests[].cts[].runCommand` para materializar arquivos locais e sugerir execucao.
65
+ - Conversao API por URL no Portal deve usar `POST /mcp/portal/convert-api-url` (backend baixa spec e converte).
66
+ - Fluxo API no Portal deve manter uma unica acao de geracao no CT (sem botoes duplicados para a mesma conversao) e aceitar URL ou upload de arquivo Swagger/OpenAPI no mesmo fluxo.
67
+ - Fluxo de geracao por prompt no Portal deve cobrir `SSH`, `MOBILE` e `BANCO`, chamando `generate_test` com `testType` correspondente (`ssh`, `mobile`, `banco`).
68
+ - Ambientes no Portal devem ser selecionados por lista (vinculada ao sistema escolhido), sem input livre.
69
+ - Tela de automacao deve resolver `user_hash` automaticamente (`GET /mcp/hash` com fallback `POST /mcp/hash`) antes de bloquear o usuario por hash ausente.
70
+ - Apos gerar codigo no Portal, perguntar se o usuario deseja executar localmente e usar `run_local_npm_script` (`npm run ui:<ambiente>`, `npm run test:<ambiente>`, `npm run ssh:<ambiente>`).
71
+ - Cenarios salvos no Portal com `cenario_id` `portal-auto:*` devem expirar automaticamente em 1 dia (`DATA_RETENTION_PORTAL_SCENARIOS_DAYS`).
72
+ - Na tela `/dashboard/automation/new`, sempre mostrar status de MCP local (`online`, `toolCount`, `playwrightInstalled`, `lastHeartbeat`) e orientar instalacao/start quando offline.
73
+ - Na tela `/dashboard/automation/new`, destacar comandos de AutoStart sem admin para Windows usando Startup do usuario com execucao oculta (background, sem janela de terminal).
74
+ - Se a tool exigir MCP local, retornar comandos de setup/start no erro (`installCommand`, `startCommand`) para UX guiada.
75
+ - No salvamento de cenário (`/execucoes-cenarios`), `ambiente` deve representar **origem de execução** (`LOCAL` ou `AZURE`) e não o tipo de ambiente funcional (`PROD/UAT`), que deve ficar em `defaultEnvironment`.
76
+ - Backend deve tolerar clientes legados sem `ambiente` no payload e assumir `LOCAL` por padrão para não quebrar o save do Portal.
77
+ - Para execução Azure no Portal, gerar YAML com parâmetros padrão (`env`, `test`) + extras opcionais, com suporte a cron/schedule e modo suíte.
78
+
79
+ 10) **Bootstrap do MCP local pelo framework (obrigatorio):**
80
+ - `McpLocalClient` deve tentar iniciar STDIO automaticamente em ordem:
81
+ 1. `HUB_MCP_STDIO_BIN` (quando definido),
82
+ 2. `autocore-hub-mcp` global,
83
+ 3. `npx -y @silasfmartins/testhub-orchestrator-mcp --stdio`.
84
+ - Em `tools/list`, expor somente `codegen`; manter `playwright_execute` apenas como alias de compatibilidade em `tools/call` (sem aparecer na listagem).
85
+ - No `consumer-postinstall` do framework (Windows local), configurar AutoStart do MCP automaticamente apos a instalacao:
86
+ - usar Startup do usuario (`%APPDATA%\\...\\Startup`) sem depender de Task Scheduler,
87
+ - gerar launcher oculto (`autocore-orchestrator-mcp.vbs`) + runner (`autocore-orchestrator-mcp.cmd`),
88
+ - iniciar imediatamente via `wscript.exe` para rodar em background (sem abrir terminal visivel).
89
+ - No `WebActions`, `withRecovery` possui guard de recursão (`_recoveryDepth` estático, máximo 1 nível). Recovery actions como `click_other` que chamam `WebActions.click()` não reentram em novo ciclo de recovery, evitando `RangeError: Maximum call stack size exceeded`.
90
+ - No `WebActions`, a resolucao de XPath deve ser robusta em todos os metodos de interacao:
91
+ - esperar `attached` + `scrollIntoViewIfNeeded` antes de exigir visibilidade,
92
+ - tentar variantes de XPath (`normalizeAxis`, sem indices, `contains(@name/@id, ...)`) sem depender de AutoHealing,
93
+ - buscar em contexto atual, pagina principal e frames priorizando iframes visiveis,
94
+ - em `setText`, permitir `force=true` para campo invisivel porem habilitado,
95
+ - registrar no log o seletor/XPath efetivamente utilizado apos fallback.
96
+
97
+ ## 1) Conceitos MCP no AutoCore Hub
98
+
99
+ - **MCP local (STDIO/CLI/IDE):** roda na maquina do usuario, com acesso a browser (Playwright) e filesystem local.
100
+ - **Backend (Fastify):** expõe APIs, guarda documentos e fila; nao deve depender de internet do backend para automacao em URL interna do usuario.
101
+ - **Contrato de hash MCP:** chamadas para `/mcp` devem enviar `user_hash` (query `?user_hash=` ou header `x-user-hash`). Fallback por JWT existe, mas envio explicito e obrigatorio no framework.
102
+ - **Test Recovery:** o backend **nao faz fetch(url)**; para analisar falha precisa de `pageStructure`/`pageHtml` enviados pelo MCP local.
103
+ - **Execucao vs visualizacao de segredos:**
104
+ - `get_system_environment` em modo de consulta (view) deve mascarar segredos quando o usuario nao pode ver.
105
+ - Fluxos internos de execucao podem usar credenciais sem exibir valores ao usuario.
106
+
107
+ ## 2) Sistemas, ambientes e credenciais (MCP)
108
+
109
+ ### 2.1 EnvironmentType (contrato)
110
+
111
+ Usar **somente** estes valores quando for necessario selecionar ambiente:
112
+ - `PROD`, `PREPROD`, `UAT`, `DEV`, `QA`, `ESTEIRA1`, `ESTEIRA2`, `PRODLIKE`
113
+
114
+ ### 2.2 Multiplas credenciais por ambiente
115
+
116
+ - Um ambiente pode ter `credentials[]`.
117
+ - Existe uma credencial **default** (suffix nulo) e credenciais com `suffix` (ex.: `PARCEIRO`).
118
+ - Ao resolver credenciais para login/Playwright:
119
+ 1) priorizar credencial default em `environment_credentials`
120
+ 2) fallback legado em `environments.username/password` so quando necessario
121
+
122
+ ### 2.3 Privacidade (sistemas/ambientes privados)
123
+
124
+ - Sistema privado: somente `admin`, dono do sistema e membros com `canManage=true` podem **ver** credenciais/variaveis sensiveis.
125
+ - Ambiente privado em sistema publico: visibilidade sensivel e por membros do ambiente com `canManage=true`.
126
+ - Usuario sem permissao:
127
+ - deve receber campos mascarados (`[oculto por permissao]`)
128
+ - deve receber orientacao de que pode **executar** sem ver os valores
129
+
130
+ ## 3) Rotina obrigatoria: Teams relay (`teams.flush`)
131
+
132
+ ### 3.1 Comportamento esperado
133
+
134
+ - O MCP local deve executar `teams.flush` no startup e manter loop (default 60s).
135
+ - O flush consome fila do backend (`/mcp/teams/pending`), envia para Teams (webhook/workflow) e faz ACK (`/mcp/teams/ack`).
136
+ - Backend deve:
137
+ - remover itens `sent` imediatamente apos ACK
138
+ - descartar `pending` nao enviado com mais de 24h
139
+ - aplicar retry com backoff exponencial + jitter para itens `failed`
140
+ - usar status de fila: `pending` -> `processing` -> (`sent`|`failed`|`dead`)
141
+ - evitar loop infinito: circuit breaker por regra/webhook + dead-letter apos max tentativas
142
+ - quando a consulta da fila falhar, o MCP deve retornar diagnostico amigavel (sem stack) e sugerir checagens de migration/config (hotfix v2.7.44)
143
+ - `teams_flush` do backend (MCP HTTP) deve operar em **backend-first por padrão**: claim da fila e envio imediato do webhook no servidor.
144
+ - handoff local continua suportado quando `dispatchMode=local` (release para `pending` e envio via `teams.flush` local).
145
+
146
+ ### 3.2 Configuracao (variaveis)
147
+
148
+ - `HUB_BACKEND_URL`
149
+ - `HUB_MCP_USER_HASH`
150
+ - `HUB_MCP_KEY` (ou `MCP_INTERNAL_KEY` / `TEAMS_RELAY_KEY`)
151
+ - `HUB_TEAMS_FLUSH_ENABLED` (no MCP local, considerar habilitado por padrao)
152
+ - `HUB_TEAMS_FLUSH_INTERVAL_MS` (default `15000`)
153
+ - `HUB_TEAMS_FLUSH_LIMIT`
154
+ - `HUB_TEAMS_FLUSH_IGNORE_SSL` (quando houver proxy/SSL corporativo)
155
+
156
+ ### 3.3 Troubleshooting do erro "fetch failed"
157
+
158
+ Quase sempre e um destes:
159
+ - SSL corporativo (cert auto-assinado): usar `HUB_TEAMS_FLUSH_IGNORE_SSL=true` e/ou `NODE_TLS_REJECT_UNAUTHORIZED=0` (com cautela)
160
+ - No backend (`teams_flush` via MCP HTTP), usar `TEAMS_FLUSH_IGNORE_SSL=true` quando o relay rodar no servidor e houver inspeção TLS corporativa
161
+ - timeout/rede instavel: aplicar retry com backoff e timeout por request
162
+ - `HUB_BACKEND_URL` errado ou bloqueado por firewall
163
+ - webhook PowerAutomate invalido/incompleto: validar URL completa (`https://.../workflows/.../triggers/manual/paths/invoke?...`)
164
+ - quando o backend nao tiver rota de saida para o PowerAutomate, usar `dispatchMode=local` para forcar envio pela maquina do usuario.
165
+
166
+ ### 3.4 Teams Chat (bot) para conversar com MCP
167
+
168
+ - O bot Teams deve encaminhar mensagens para `POST /mcp/integrations/teams/channel`.
169
+ - O payload deve incluir identidade do usuario (`from.aadObjectId`/`from.id`) para manter conversa isolada por usuario.
170
+ - Para onboarding dos usuarios no Teams, usar os endpoints:
171
+ - `GET /mcp/integrations/teams/links` (links de abrir app/chat)
172
+ - `GET /mcp/integrations/teams/package` (zip do app)
173
+ - `GET /mcp/integrations/teams/manifest` (manifest cru)
174
+ - Quando `TEAMS_BOT_APP_ID`/`MicrosoftAppId` estiver configurado, o manifest deve incluir capability `bots` com escopos `personal` e `team`.
175
+ - `GET /mcp/integrations/teams/links` deve expor status real (`appInstallReady`, `personalChatReady`, `isTemplateOnly`, `blockers`) para a UI nao sugerir chat funcional quando o tenant ainda nao foi preparado.
176
+
177
+ ## 4) Auto-normalize obrigatorio (`normalize_project`)
178
+
179
+ ### 4.1 Regra
180
+
181
+ - Sempre rodar `normalize_project` depois de qualquer tool (exceto `normalize_project`).
182
+
183
+ ### 4.2 Correcoes minimas esperadas
184
+
185
+ - Remover `await` indevido em `env.*`:
186
+ - `await env.CEP` -> `env.CEP`
187
+ - `await this.env.CEP` -> `this.env.CEP`
188
+ - Scroll:
189
+ - `UtilsExt.scrollToByJS(...)` -> `await WebActions.scrollToElement(...)`
190
+ - nunca gerar `await await`
191
+ - Windows paths: normalizar `C:\\...` quando `projectRoot` vier do Windows
192
+
193
+ ### 4.3 Variaveis do MCP local
194
+
195
+ - `HUB_AUTO_NORMALIZE_AFTER_TOOL` (default `true`)
196
+ - `HUB_AUTO_NORMALIZE_COOLDOWN_MS` (default `1000`)
197
+
198
+ ## 5) Tool: `generate_test` (reuso de contexto + motor de geração)
199
+
200
+ ### 5.1 Objetivo
201
+
202
+ Gerar código de teste de forma consistente com o fluxo capturado, sistema/ambiente e flavor (Web/API/SSH/Banco/Mobile).
203
+
204
+ ### 5.1.1 Motor de geração de código (compartilhado com `codegen`)
205
+
206
+ O `generate_test` e o `codegen` (via `codegen_export`) compartilham o mesmo motor (`generateMcpTest`) com builders por flavor:
207
+
208
+ **Web (`buildWebTemplates`):**
209
+ - Gera: `Attributes*.ts` (src/attributes) + `PagePlaywright*.ts` (src/pages) + `.spec.ts` (tests)
210
+ - Nomes seguem padrão `PagePlaywright{Sistema}{Assunto}` (ex.: `PagePlaywrightSalesforceCliente`)
211
+ - Nome do arquivo = nome da classe (ex.: `PagePlaywrightSalesforceCliente.ts`)
212
+ - 30+ ações mapeadas para métodos reais do `WebActions`: click, setText, selectOption, hover, doubleClick, rightClick, checkCheckbox, uncheckCheckbox, scrollToElement, clearField, focus, setFiles, validateObject, validateObjectNotExists, validateEquals, takeScreenshot, getText, goBack, refresh, fixedWait, executeJavaScript, mouseMove, clickAndHold, selectDropdownOption, typeSlowly, pressKey, waitForVisible, waitForNetworkIdle, switchTo, switchToDefault
213
+ - **Detecção de estágios:** `splitPagesByStage()` detecta transições automáticas de etapa por keywords nos elementos capturados (13 estágios: Login, Cliente, Endereço, Oportunidade, Cotação, Produto, Qualificação, Proposta, Pagamento, Envio, Contrato, Instalação) e gera Pages/Attributes separadas mesmo em SPAs onde a URL não muda
214
+ - Auto-login: quando login automático ocorre, os passos (username/password/submit) são capturados e geram código de login automaticamente
215
+ - Annotation: `TestAnnotations.Frontend.testInfo`
216
+
217
+ **API (`buildApiTemplates`):**
218
+ - Gera: `Request*.ts` (src/request) + `Statements*.ts` (src/statements) + `.spec.ts` (tests)
219
+ - Usa métodos reais do `ApiActions`: get, post, put, patch, delete, validateEquals, validateNotNull, fixedWait, prepareContextWithCert, createFormData
220
+ - Response tipada como `JsonResponse` com todos os métodos: getStatus, get, getString, getArray, getObject, getFromArray, getStringFromArray, getPath, getPathOrDefault, raw, hasKey, isEmpty, isXml, extractXml, equals
221
+ - Request suporta `ApiRequestOptions` completo: headers, data (JSON body), form (x-www-form-urlencoded), params (query), timeout, certificate (mTLS via `createCertificate`)
222
+ - Annotation: `TestAnnotations.Api.testInfo`
223
+
224
+ **Banco (`buildBancoTemplates`):**
225
+ - Gera: `Model*.ts` (src/models) + `Statements*Db.ts` (src/statements) + `.spec.ts` (tests)
226
+ - Usa métodos reais do `BancoActions`: select, selectColumn, update, execute, executeQuery, executarQuery, validateEquals, esperarPorTempo, executarServico
227
+ - Model gera queries SELECT/UPDATE/INSERT parametrizadas
228
+ - Annotation: `TestAnnotations.Banco.testInfo`
229
+
230
+ **Mobile (`buildMobileTemplates`):**
231
+ - Gera: `PagePlaywright*.ts` (src/pages) + `.spec.ts` (tests)
232
+ - Usa métodos reais do `MobileActions`: click, clickNative, clickByCoordinates, setText, setChar, getText, validateObject, validateObjectNotExist, validateEquals, isPresent, back, swipe, swipeUntilFind, getAttribute, switchToContext, capturarScreenshot, relaunchApp, executeScript, genericSwipeAndroid/iOS, genericSwipeUntilFindAndroid/iOS, clickOnObjectPresence
233
+ - Locators com `ILocator` (android/ios separados)
234
+ - Annotation: `TestAnnotations.Mobile.testInfo`
235
+
236
+ **SSH (`buildSshTemplates`):**
237
+ - Gera: `Statements*Ssh.ts` (src/statements) + `.spec.ts` (tests)
238
+ - `SSHActions.write()` é a ação principal (envio de comandos)
239
+ - Usa métodos reais do `SSHActions`: autoConnect, connectWithKey, connectWithPassword, write, read, writeAndReturnCommand, readOutputCommand, download, desconectar, validateContains, validateNotContains, validateMatches, validateContainsWithTimeout, validateContainsAll, validateContainsAny
240
+ - Estrutura com métodos `conectar()`, `executarComandos()`, `validarResultados()`, `run()`
241
+ - Annotation: `TestAnnotations.SSH.testInfo`
242
+
243
+ ### 5.2 Regra de inferencia de sistema/ambiente
244
+
245
+ 1) Se o prompt atual mencionar explicitamente (ex.: "use o sistema X" / "ambiente UAT"), usar.
246
+ 2) Se o prompt indicar continuidade (ex.: "fluxo anterior", "mesmo sistema"):
247
+ - reaproveitar contexto recente da conversa quando houver `conversationId` com `usePreviousContext=true`.
248
+ 3) Se nao houver contexto confiavel:
249
+ - nao forcar `systemName/environmentType` no teste.
250
+
251
+ ### 5.3 Reuso de elementos do fluxo (obrigatorio)
252
+
253
+ 1) Priorizar `elements` enviados explicitamente na tool.
254
+ 2) Se `elements` nao vier, reaproveitar `capturedElements` da sessao Playwright ativa (`codegen`).
255
+ 3) Se ainda nao houver elementos, inferir steps do prompt atual quando houver XPath/seletor explicito:
256
+ - extrair XPath e acao (`click`, `fill`, `check`, `uncheck`, `select`) por contexto da frase;
257
+ - quando acao for `fill`, tentar inferir valor (`valor`, `value`, `texto`) no mesmo trecho;
258
+ - ignorar XPaths que estejam em contexto de sugestao de recovery (`XPath sugerido`, `autohealing`, `falha no XPath`) para nao poluir o fluxo com seletores nao executados;
259
+ - normalizar `||` para `|` em XPath antes de gerar.
260
+ 4) Mesclar elementos inferidos sem duplicar os capturados da sessao.
261
+ 5) Quando houver `capturedElements`/`elements` confiaveis, priorizar o fluxo capturado em vez de contexto antigo de `pageCode` armazenado em memoria.
262
+ 6) Se o login foi executado automaticamente na sessao (`autoLogin`), os passos de login capturados (username/password/submit) devem entrar em `capturedElements` para o `generate_test` refletir esse fluxo.
263
+ 7) Se nao houver contexto confiavel de elementos, gerar teste sem inventar fluxo.
264
+
265
+ ## 6) Tool: `extract_page_structure` (auto-login resiliente)
266
+
267
+ ### 6.1 Regra principal
268
+
269
+ Retornar a estrutura da **URL alvo** (pos-login), e nao persistir na tela de login.
270
+
271
+ ### 6.2 Estrategia de auto-login (quando `autoLogin=true`)
272
+
273
+ 1) Navegar para `url`.
274
+ 2) Detectar tela de login quando:
275
+ - URL aparenta login (`/login|signin|sso|auth|idp|oauth|saml|entrar/i`), **ou**
276
+ - existe `input[type=password]` e botao de submit.
277
+ 3) Resolver credenciais na ordem:
278
+ - `login.username/password` no payload
279
+ - credencial default via `get_system_environment` (quando houver `systemName/environmentType`)
280
+ - fallback legado (quando ainda existir)
281
+ 3.1) Resolver **login hints** (quando disponivel) para melhorar a selecao de campos/botoes:
282
+ - override no payload `login.*` (`loginUrl`, `ssoSelector`, `usernameSelector`, `passwordSelector`, `submitSelector`, `successUrl`, `successSelector`)
283
+ - hints persistidas no banco via tool `get_system_login_hints` (por `systemName/environmentType`)
284
+ 4) Selecionar inputs **interagiveis**:
285
+ - visivel, habilitado, nao `readonly`, nao `hidden`, nao placeholder mascarado (`***`, `N/D`)
286
+ 5) Preencher `username` e `password`.
287
+ 6) Clicar submit com fallback por texto/aria-label/title:
288
+ - `Entrar`, `Login`, `Enviar`, `Sign in`, `Continue`
289
+ 7) Se houver etapa intermediaria, clicar em:
290
+ - `Next`, `Continue`, `Avancar`, `Prosseguir`, `Concluir login`
291
+ 7.1) Se apos submit aparecer tela intermediaria de autorizacao (ex.: texto `login autorizado` / `authorization successful`), clicar automaticamente em botao de avancar/continuar/prosseguir (`button/a/role=button/input`) antes de concluir o login.
292
+ 7.2) Em headless, se o botao de avancar nao estiver visivel, tentar fallback por locator existente/interagivel (inclusive em frame/iframe) e clicar com estrategia forçada.
293
+ 8) Suporte a `iframe/frame`:
294
+ - varrer frames e tentar o mesmo fluxo dentro do frame certo.
295
+ 9) Confirmar sucesso:
296
+ - nao estar mais em tela de login (sem campo de password, sem erro de login, sem redirect de volta para `/login`) **e** sem etapa pendente de autorizacao/avanco.
297
+ 10) Persistencia de sessao:
298
+ - salvar `storageState` (cookies/localStorage) por sistema/ambiente para reduzir relogin em chamadas futuras.
299
+
300
+ Observacao operacional:
301
+ - Aplicar a mesma rotina de auto-login para `codegen` quando `autoLogin=true` na sessao/parametros.
302
+ - Quando ja existir sessao ativa/logada, `extract_page_structure` deve preservar o contexto atual por padrao (`preserveContext=true`) e so iniciar fluxo do zero com `fromScratch/resetSession` explicito.
303
+
304
+ ### 6.3 Memoria de XPath (Redis + projeto)
305
+
306
+ - `extract_page_structure` deve sempre:
307
+ 1) coletar XPaths da estrutura atual (incluindo `xpathCandidates`);
308
+ 2) consultar hints salvas no Redis por URL/host;
309
+ 3) quando `projectRoot` estiver disponivel, buscar XPaths em arquivos `Attributes*` relacionados ao contexto da tela;
310
+ 4) persistir novos hints no Redis para reuso futuro (tudo que for descoberto ou informado).
311
+ 5) ao atender pedidos de “traga os XPaths desta pagina”, combinar `extract_page_structure` + leitura do Redis (`getDoc`/catalogo da URL) para responder com o maximo de XPaths ja conhecidos.
312
+ - Sempre que houver botao de busca/filtro (ex.: `Pesquisar`), tentar revelar inputs dinamicos pos-clique e incluir esses campos na estrutura antes de finalizar a resposta.
313
+ - Se o usuario informar `xpath`/`xpaths`/`xpathHints`, salvar no Redis com prioridade alta.
314
+ - O output deve incluir bloco de `XPath hints (Redis)` para facilitar debug e reaproveitamento.
315
+
316
+ ### 6.4 Configuracao util
317
+
318
+ - Se falhar em headless: usar `headless: false` ou `HUB_PLAYWRIGHT_HEADLESS=false`.
319
+ - Cookies/sessao:
320
+ - `HUB_PLAYWRIGHT_STORAGE_DIR` (default `~/.autocore-hub/playwright-storage-state`)
321
+ - `HUB_PLAYWRIGHT_STORAGE_TTL_HOURS` (default `24`)
322
+ - SSL corporativo:
323
+ - `HUB_CRAWLER_IGNORE_SSL=true` (ou `HUB_IGNORE_SSL=true`)
324
+ - `NODE_TLS_REJECT_UNAUTHORIZED=0` (ultimo recurso)
325
+
326
+ ## 7) Tool: `codegen` (Playwright assistido + CodeGen)
327
+
328
+ - Usar quando precisa executar acoes (click/fill/navigate) antes de extrair estrutura.
329
+ - Nunca vazar credenciais no output (saneamento obrigatorio).
330
+ - Ao sugerir/gerar seletores, preferir estrategia de fallback com union `|`.
331
+ - Para seletores XPath de input com `contains(...)` (ex.: `//input[contains(@title,'Pesquisa')]`), gerar candidatos equivalentes por `@title/@placeholder/@aria-label` e fallback por label associado.
332
+ - Extração de estrutura deve priorizar coleta ampla de inputs (incluindo `role=searchbox/combobox/textbox` e campos interagiveis colapsados) para alimentar `generate_test` e auto-healing.
333
+ - Ao receber `structure`, usar o mesmo motor de hints do `extract_page_structure` (coleta da estrutura + hints do Redis + hints de `Attributes*`) e persistir o resultado no Redis.
334
+ - Seletores executados (`selector/selectors/xpath/xpaths`) devem ser aproveitados como hints candidatas quando forem XPath validas.
335
+ - Toda acao executada (click/fill/select/press/etc.), seja por comando ou interacao manual no browser aberto, deve persistir o XPath resolvido no Redis associado a URL/host da pagina atual; usar o mesmo mecanismo de hints de `extract_page_structure`.
336
+ - Quando o usuario pedir XPaths de uma pagina, usar o Redis (`getDoc`/catalogo da URL) alem do snapshot atual para responder.
337
+ - Quando uma tool receber XPath explicito e a URL ainda nao estiver no cache, fazer ingest best-effort dessa URL e persistir os hints no Redis; priorizar hints com sucesso comprovado (score maior).
338
+ - Codegen integrado: suportar `action=codegen|codegen_preview|codegen_export|codegen_to_framework` no `codegen`; gerar Playwright puro durante a navegação e permitir migrar para padrão framework via `generate_code`/`codegenTarget=framework|both`.
339
+ - `codegen` e a tool primaria e unica exibida para Playwright/CodeGen.
340
+ - `tools/list` deve sempre anunciar `codegen` (backend e MCP local), mesmo quando Playwright backend estiver desabilitado.
341
+ - Abertura de browser UI (CodeGen/recorder) deve ocorrer na maquina do usuario via MCP local (`autocore-hub-mcp`); evitar executar sessao Playwright UI no backend remoto.
342
+ - No backend MCP HTTP, execução Playwright deve permanecer desabilitada por padrão (`MCP_BACKEND_PLAYWRIGHT_ENABLED=false`/ausente); habilitar no servidor apenas por exceção operacional explícita.
343
+ - Quando o backend MCP responder erro com `requiresLocalMcp=true`, o cliente/framework deve reenviar automaticamente a mesma chamada para o MCP local (sem pedir nova confirmação ao usuário).
344
+ - Se `codegen`/`playwright_execute` for chamado no backend com Playwright backend desabilitado, o backend deve enfileirar reroute por `user_hash` e aguardar execução do MCP local automaticamente.
345
+ - O backend nao deve bloquear reroute apenas por ausencia de heartbeat recente; deve enfileirar e aguardar o MCP local ate timeout.
346
+ - O MCP local deve fazer polling de reroute (`mcp_local_reroute_poll`) e concluir resposta (`mcp_local_reroute_complete`) apos abrir/executar browser na maquina do usuario.
347
+ - O backend pode anunciar `codegen` no `tools/list` por compatibilidade, mas o cliente deve tratar esse tool como **local-first** e rerotear quando o backend indicar `requiresLocalMcp=true`.
348
+ - Manter paridade do schema de entrada entre `codegen` e `playwright_execute` (mesmos atalhos top-level -> `params` e mesmas aliases de ação).
349
+ - Quando vier apenas `systemName`, assumir `environment=PROD` por padrao (sem bloquear pedindo ambiente).
350
+ - Credenciais para `codegen/start/navigate` devem ser resolvidas via `get_system_environment` (credencial default quando usuario nao escolher outra).
351
+ - `codegen action=start` deve iniciar browser local automaticamente quando nao existir sessao ativa; se ja existir sessao, reaproveitar o contexto atual.
352
+ - Compatibilidade legada: aceitar `playwright_execute` internamente (sem anunciar no `tools/list`).
353
+ - Recorder de codegen sempre inicia habilitado no `start`/`navigate` (CodeGen default ON); grava interacoes manuais no browser desde o comeco e so para quando o usuario mandar `codegen_record_stop/toggle` para OFF.
354
+ - Recorder manual: suportar `action=codegen_record_start|codegen_record_status|codegen_record_stop|codegen_record_toggle|codegen_clear`; ao gerar (`codegen_preview`/`codegen_export`/`codegen`) sincronizar eventos gravados para `capturedElements`.
355
+ - MCP local (`packages/autocore-hub-mcp`) deve aceitar `codegen_record_start|codegen_record_status|codegen_record_stop` e aliases comuns de digitacao (`codegen_start_recording`, `codegen_stop_recording`, `codegen_record_state`), evitando erro `-32601` por acao nao suportada.
356
+ - Em erro TLS/certificado para Playwright, orientar explicitamente comando por SO para instalacao:
357
+ - macOS/Linux: `NODE_TLS_REJECT_UNAUTHORIZED=0 npx playwright install chromium`
358
+ - Windows PowerShell: `$env:NODE_TLS_REJECT_UNAUTHORIZED='0'; npx playwright install chromium`
359
+ - Windows CMD: `set NODE_TLS_REJECT_UNAUTHORIZED=0 && npx playwright install chromium`
360
+ - Clientes que chamam MCP local por STDIO devem usar protocolo MCP oficial (`StdioClientTransport` / framing `Content-Length`), não newline JSON ad-hoc.
361
+ - Sessao de CodeGen deve seguir a mesma regra de contexto: reusar sessao ativa por padrao e reiniciar so com `fromScratch=true`/`resetSession=true`.
362
+ - Cada acao executada/capturada deve atualizar contexto no Redis com `recentActions + xpathHints` da pagina atual; quando houver hint Redis com sucesso previo, priorizar esse XPath antes de fallback generico.
363
+ - API push de DOM para execucao sem acesso de rede no backend: `POST /api/page-structure/extract` (alias legado: `/api/xpath-catalog/extract`) recebe `pageHtml/pageStructure` + contexto atual do framework e devolve `elements + xpaths` + hints Redis sem `fetch(url)` remoto.
364
+ - Manter contrato de ações e targets de codegen centralizado em `playwright-execute-contract` para evitar drift entre schema da tool e executor de ação.
365
+ - `codegen action=start` no MCP local deve reutilizar sessao existente mesmo sem `params.url`; se nao houver sessao/URL/sistema, iniciar browser local em `about:blank` para manter UX sem bloqueio.
366
+ - Framework/cliente deve expor dois caminhos claros:
367
+ - `callMcpToolLocalFirst` para `codegen`, `run_local_npm_script` e auto-fix local.
368
+ - `callMcpToolBackendFirst` para tools dependentes de storage/backend, como `get_portal_saved_tests`.
369
+
370
+ ### 7.3 Priorizacao de backlog (CodeGen P0)
371
+
372
+ Ordem obrigatoria de implementacao no framework/cliente:
373
+ 1. `P0-1` local-first + reuso de sessao:
374
+ - `codegen start` abre browser local quando nao houver sessao;
375
+ - com sessao existente, sempre reutilizar por padrao;
376
+ - reroute automatico para MCP local quando backend retornar `requiresLocalMcp=true`.
377
+ 2. `P0-3` fechamento com AutoHealing:
378
+ - ao sucesso de recovery, chamar `fix_xpath_in_attributes` no MCP local;
379
+ - confirmar alteracao real no arquivo (`fileUpdated/filePath` + verificacao em disco);
380
+ - dedupe somente com resultado valido (nunca deduplicar resposta vazia/invalida).
381
+
382
+ ### 7.2 Auto-fix local (`fix_xpath_in_attributes`) - contrato de retorno
383
+
384
+ - A tool deve retornar payload estruturado em `result.success/fileUpdated/filePath/nextAction/error`.
385
+ - Para compatibilidade, pode incluir também `result.content[].text` com JSON serializado do mesmo payload.
386
+ - Cliente/framework deve fazer parse nesta ordem:
387
+ 1) campos estruturados de `result`;
388
+ 2) fallback JSON em `content[].text`.
389
+ - Não aplicar dedupe quando retorno vier vazio/inválido.
390
+ - Auto-fix deve tolerar variação de aspas no XPath (`'`/`"`) entre payload e arquivo local; falha por mismatch de citação deve cair em fallback de comparação normalizada antes de retornar `manual_review`.
391
+
392
+ ## 7.1 Documentos MCP (fonte unica + auditoria)
393
+
394
+ - A pagina de documentos do dashboard e a aba de documentos do MCP devem usar a mesma fonte `mcp_documents` (rotas `/mcp/documents` e `/mcp/admin/documents`), sem duplicar storage.
395
+ - Documentos enviados em qualquer uma das telas devem aparecer automaticamente na outra, respeitando visibilidade (`isPublic`) e permissoes do usuario.
396
+ - ACL obrigatoria:
397
+ - somente o dono do arquivo ou `admin` pode alterar visibilidade (`/mcp/documents/:id/visibility`) e excluir (`DELETE /mcp/documents/:id`);
398
+ - documento privado (`isPublic=false`) e visivel por padrao apenas para dono + admin;
399
+ - compartilhamento adicional por usuario e feito por `/mcp/documents/:id/sharing` (owner/admin), persistindo em `shared_with.users`.
400
+ - Leitura de documento em `/mcp/documents/:id` deve registrar auditoria por usuario quando disponivel em `mcp_document_views` (contagem e ultimo acesso).
401
+ - Endpoint admin para auditoria detalhada: `GET /mcp/documents/:id/views` (retorna leitores + quantidade de leituras por usuario).
402
+ - Download de documento deve permanecer desabilitado por padrao (`MCP_DOCUMENTS_ALLOW_DOWNLOAD=false`), inclusive na UI, mantendo apenas leitura autenticada.
403
+ - Para midias extraidas (`mcp_document_media.file_url`), o frontend deve resolver URL via backend (`getApiUrl`) para evitar quebra de imagem em dominios distintos.
404
+ - UX atual: a central operacional de documentos fica em `/dashboard/documents`; a aba `documents` em `/dashboard/mcp` foi descontinuada e deve redirecionar para essa central.
405
+
406
+ ## 8) Test Recovery (contrato + fila + auto-fix)
407
+
408
+ ### 8.1 `POST /api/test-recovery/analyze-failure` (contexto rico)
409
+
410
+ Enviar sempre que possivel:
411
+ - `context.text`
412
+ - `context.value`
413
+ - `context.filledInputs`
414
+ - `context.filledFields`
415
+ - `context.originalMethod`
416
+ - `testCaseName`/`testCaseId`/`testMethodName` (ou aliases `cn`/`ct`/`methodName`)
417
+ - `executionSource` (`Local` ou `Azure`)
418
+ - `pageStructure` (preferencial) ou `pageHtml` (fallback)
419
+
420
+ Para rastreio correto de usuario no dashboard (evitar `PlaywrightFrame`):
421
+ - enviar `x-automation-user-id` (preferencial), ou `x-automation-user-matricula`/`x-automation-user-email`
422
+ - opcional: `x-automation-user-name`
423
+ - aliases aceitos: `x-user-id`, `x-user-name`, `x-user-email`, `x-user-matricula`, `x-matricula`, `x-framework-user-*`
424
+ - aliases de metadata aceitos: `x-test-name`, `x-test-id`, `x-cn-name`, `x-ct-id`, `x-method`, `x-execution-origin`
425
+
426
+ Importante:
427
+ - O backend **nao faz fetch(url)**; `pageStructure/pageHtml` devem vir do MCP local (`extract_page_structure`/`codegen`).
428
+
429
+ ### 8.2 Resposta `202` (fila assincrona)
430
+
431
+ Se `analyze-failure` responder `202` com `requestId`:
432
+ 1) chamar `GET /api/test-recovery/queue/:requestId`
433
+ 2) aguardar status `completed`
434
+ 3) usar `responsePayload` como resposta final
435
+ 4) se `failed|timeout`, registrar falha e seguir fallback local
436
+
437
+ Recomendacao operacional do framework:
438
+ - polling total >= 90s (evitar timeout prematuro de 30s);
439
+ - backoff curto progressivo (1s, 2s, 3s, 5s, 8s...);
440
+ - para execucao `Local`/`framework`, o backend prioriza fast-path inline; ainda assim manter suporte ao fluxo `202`.
441
+
442
+ ### 8.3 `report-result` (historico consistente)
443
+
444
+ - Sempre reportar sucesso **e** falha.
445
+ - Priorizar `logId` quando existir.
446
+ - `sessionId` e fallback e precisa ser estavel por execucao.
447
+ - Reenviar `testCaseName`/`testCaseId`/`testMethodName` e `executionSource` no `report-result` para corrigir lacunas de metadata.
448
+ - No `auto-fix-local`, enviar `projectRoot` absoluto sempre que possivel; se faltar, enviar fallback por header `x-project-root`.
449
+
450
+ ### 8.4 `actions[]` (inclui `switch_frame`)
451
+
452
+ - Se vier `switch_frame`, alternar para o frame indicado, tentar `suggestedXPath/alternatives`, e voltar para default ao final.
453
+
454
+ ### 8.5 Estrategia de XPath (auto-healing)
455
+
456
+ - Normalizar `||` -> `|`.
457
+ - Preferir union `|` quando existir mais de uma forma plausivel:
458
+ - `//span[text()='Avancar'] | (//span[text()='Avancar'])[2]`
459
+ - Se XPath vier indexado e instavel (ex.: `(//button/span[text()='Avancar'])[2]`):
460
+ - tentar tambem a versao sem indice e escolher por **visibilidade/clickabilidade**.
461
+ - Se XPath apontar para descendente nao clicavel (ex.: `//button/...//span[text()='Avancar']`):
462
+ - promover fallback para o pai clicavel (`//button[...]`) e combinar assinatura de classe + texto (`contains(@class, ...)` + `span[normalize-space(.)=...]`).
463
+ - Drift simples de atributo (`id/name`): gerar fallbacks `starts-with` e `contains` para `@id` e `@name`, inclusive quando o XPath original ja usa `contains/starts-with` (cobre `id="user"` → `id="username"`).
464
+ - Para inputs de pesquisa, incluir também fallbacks `contains(...)` para `@title`, `@placeholder` e `@aria-label`.
465
+ - Checkboxes posicionais (ex.: `slds-checkbox_faux`):
466
+ - combinar fallback por indice + texto/label (`Principal`) quando aplicavel.
467
+
468
+ ## 9) Retencao de dados (storage) - impacto no MCP
469
+
470
+ ### 9.1 Worker automatico
471
+
472
+ - O backend executa limpeza automatica no startup + intervalo.
473
+ - Intervalo padrao do worker: `DATA_RETENTION_INTERVAL_MINUTES=480` (8 horas).
474
+
475
+ ### 9.2 Politica atual
476
+
477
+ - `execucoes_artifacts`: **ate 8 horas** (`DATA_RETENTION_ARTIFACTS_HOURS`, max 8; fallback compativel via `DATA_RETENTION_ARTIFACTS_DAYS`)
478
+ - `notificacoes`, `health_checks`, `mcp_conversations`: **5 dias** (`DATA_RETENTION_DAYS`, default 5)
479
+ - `teams_notification_queue`: remover `sent` imediatamente; descartar `pending` com mais de 24h
480
+
481
+ ## 10) SSL corporativo (MCP local)
482
+
483
+ Quando houver certificado auto-assinado:
484
+ - Preferir `HUB_CRAWLER_IGNORE_SSL=true` / `HUB_IGNORE_SSL=true`
485
+ - Ultimo recurso: `NODE_TLS_REJECT_UNAUTHORIZED=0`
486
+
487
+ ## 11) Tools MCP (nomes e parametros principais)
488
+
489
+ Os nomes abaixo sao contratos. Manter compatibilidade retroativa quando possivel.
490
+
491
+ - `migrate_java_file`: `{ javaCode, fileName, mode? }`
492
+ - `generate_test`: `{ pageCode, pageClassName, testName, systemName?, environmentType?, conversationId?, usePreviousContext?, useCapturedElements?, elements?, flavor?, testType?, prompt?, reuseExistingFiles? }`
493
+ - `flavor`/`testType`: `web` (default), `api`, `banco`, `mobile`, `ssh` — seleciona o builder e padrão de código
494
+ - `elements`: `McpCapturedElement[]` — quando presente, gera código baseado nos elementos capturados (priorizando sobre prompt)
495
+ - Motor compartilhado com `codegen_export` via `generateMcpTest()`
496
+ - `generate_test_example`: `{ ... }`
497
+ - `search_documents`: `{ prompt, limit? }` (lista documentos MCP e retorna IDs relevantes)
498
+ - `getDoc`: `{ id?, documentId?, name?, fileName?, url?, maxChars?, refresh?, syncPlaywright? }` (leitura de documento MCP por ID/nome; para URL delega ao cache do crawler)
499
+ - `list_systems`: `{}`
500
+ - `get_system_environment`: `{ systemName, environmentType?, accessMode? }` (`environmentType` opcional, default `PROD`)
501
+ - `get_system_login_hints`: `{ systemName, environmentType? }` (`environmentType` opcional, default `PROD`)
502
+ - Regra de uso: `get_system_environment` para URL/credenciais; `get_system_login_hints` apenas para selectors/hints de login.
503
+ - `ingestUrl`: `{ url, includeScreenshot? }`
504
+ - `extract_page_structure`: `{ url, autoLogin?, login?, headless?, ignoreSSL?, preserveContext?, keepContext?, includeRuntimeContext? }`
505
+ - `crawler_getDoc`: `{ url, ... }` (leitura do cache Redis/crawler para URL ingerida)
506
+ - `normalize_project`: `{ projectRoot, codeFileHints?, dryRun?, renameFiles?, updateImports?, updateClasses? }`
507
+ - `convert_api_spec`: `{ content, type, mode, projectRoot }`
508
+ - `get_portal_saved_tests`: `{ limit?, executionId?, systemName?, environment?, includeCode? }` (backend-first; retorna `portalTests[]` com `files`, `cts`, `runScript`, `runCommand`, `retention`)
509
+ - `fix_xpath_in_attributes`: `{ projectRoot, oldXPath, newXPath, attributesFile?, className?, methodName?, confidence?, executionSource? }`
510
+ - Para `fix_xpath_in_attributes`, priorizar MCP local via **STDIO direto**; usar bridge HTTP local (`127.0.0.1/localhost`) apenas se o framework optar por esse transporte; backend MCP remoto é fallback de compatibilidade.
511
+ - `codegen`: `{ action?, params?, selector?, ref?, xpath?, locator?, codegenTarget? }` (tool primaria de Playwright/CodeGen, default `action=start`)
512
+ - `action=start|navigate|click|fill|select|codegen_export|codegen_preview|codegen_to_framework|...`
513
+ - `codegenTarget`: `framework` (default), `playwright`, `both` — ao exportar, `framework` gera Attributes+Pages+.spec.ts via `generateMcpTest()`
514
+ - `codegen_export` com `codegenTarget=framework` gera código no padrão do framework a partir dos elementos gravados, detectando estágios automaticamente (Login → Cliente → Oportunidade → etc.)
515
+ - Auto-login do Playwright é capturado em `capturedElements` e gera código de login automaticamente
516
+ - Nome do teste inferido de: `testName` explícito > título da página/URL > nome do sistema
517
+ - `playwright_execute` (legado): manter apenas compatibilidade de chamada interna; nao anunciar em `tools/list`.
518
+ - `run_local_npm_script`: `{ script, projectRoot?, timeoutMs? }` (local-first; executa `npm run <script>` na maquina do usuario)
519
+ - `generate_bpmn_xml`: `{ processDescription }`
520
+ - `teams.flush` (local): `{ limit?, dryRun?, ignoreSSL? }`
package/biome.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "$schema": "https://biomejs.dev/schemas/2.4.7/schema.json",
3
+ "vcs": {
4
+ "enabled": true,
5
+ "clientKind": "git",
6
+ "useIgnoreFile": true
7
+ },
8
+ "files": {
9
+ "includes": ["**", "!!**/dist"]
10
+ },
11
+ "formatter": {
12
+ "enabled": true,
13
+ "indentStyle": "space",
14
+ "indentWidth": 2,
15
+ "lineWidth": 320
16
+ },
17
+ "linter": {
18
+ "enabled": true,
19
+ "rules": {
20
+ "recommended": true
21
+ }
22
+ },
23
+ "javascript": {
24
+ "formatter": {
25
+ "quoteStyle": "single",
26
+ "semicolons": "asNeeded"
27
+ }
28
+ },
29
+ "assist": {
30
+ "enabled": true,
31
+ "actions": {
32
+ "source": {
33
+ "organizeImports": "on"
34
+ }
35
+ }
36
+ }
37
+ }
@@ -0,0 +1,45 @@
1
+ /**
2
+ * @silasfmartins/testhub - Entry Point
3
+ *
4
+ * 🔧 AutoCore Hub - Framework de Automação Unificado
5
+ * Suporte completo para Web, Mobile, API, SSH, Banco e testes mistos
6
+ */
7
+ import "./src/config/jest-safe-setup.js";
8
+ import "./src/security/protector.js";
9
+ import "./src/playwright/registerRecoveryWrappers.js";
10
+ export type { ILocator, IPage } from "./src/interfaces.js";
11
+ export { ApiActions, type ApiRequest } from "./src/api/ApiActions.js";
12
+ export { JsonResponse } from "./src/api/JsonResponse.js";
13
+ export { Direcao, MobileActions } from "./src/appium/MobileActions.js";
14
+ export { MobileConnection } from "./src/appium/MobileConnection.js";
15
+ export { BancoActions } from "./src/helpers/BancoActions.js";
16
+ export { ParallelExecutionHelper } from "./src/helpers/ParallelExecutionHelper.js";
17
+ export { WebActions } from "./src/playwright/WebActions.js";
18
+ export { ActionTimeline, SelectorCache, RecoveryQueue, } from "./src/playwright/actions/index.js";
19
+ export type { ClickOptions, FillOptions, SelectOptions, HoverOptions, ScreenshotOptions, ScrollOptions, KeyboardOptions, NavigationOptions, WaitOptions, ActionEvent, ActionEventType, ActionEventStatus, TimelineSummary, RecoveryQueueItem, } from "./src/playwright/actions/index.js";
20
+ export { test, expect, NetworkLogger } from "./src/playwright/fixtures.js";
21
+ export type { Page, TestInfo, BrowserContext, Browser, NetworkLogEntry, } from "./src/playwright/fixtures.js";
22
+ export { default as NetworkLogsReporter } from "./src/playwright/network-logs-reporter.js";
23
+ export { SSHActions } from "./src/ssh/SSHActions.js";
24
+ export { SSHClient } from "./src/ssh/SSHClient.js";
25
+ export { TestContext } from "./src/testContext/TestContext.js";
26
+ export { UnifiedReportManager } from "./src/testContext/UnifiedReportManager.js";
27
+ export { CoverageManager } from "./src/testContext/CoverageManager.js";
28
+ export { Api, Auto, Banco, Frontend, Mixed, Mobile, SSH, TestAnnotations, } from "./src/testContext/TestAnnotations.js";
29
+ export { cleanupEnvLock } from "./src/config/envLoader.js";
30
+ export { DataStore } from "./src/utils/DataStore.js";
31
+ export { Logger } from "./src/utils/Logger.js";
32
+ export { default as globalSetup } from "./src/global-setup.js";
33
+ export { resolveJestVitestConflict } from "./src/config/jest-safe-setup.js";
34
+ export { TestHubVars } from "./src/testhub/TestHubVars.js";
35
+ export { SyncSignal } from "./src/helpers/SyncSignal.js";
36
+ export { TestRecoveryHelper, testRecoveryHelper, analyzeFailure, markSuccess, getRecoveryStats, getRecoveryLogs, getRecurringFailures, suggestRefactor, impactAnalysis, methodToActionType, inferActionType, isValidActionType, isValidErrorType, type ErrorType, type ActionType, type RecoveryRequest, type RecoveryResponse, type RecoveryContext, type PageElement, type AutoFixLocalRequest, type AutoFixLocalResponse, } from "./src/utils/testRecovery/TestRecoveryClient.js";
37
+ export { ResilientPlaywright, capturePageHtml, captureScreenshotBase64, } from "./src/utils/testRecovery/ResilientPlaywright.js";
38
+ export { teamsFlushAfterExecution } from "./src/utils/TeamsFlushHook.js";
39
+ export { CodeGenSession, type RecordedEvent, type PlaywrightExecuteResult, type CodeGenSessionOptions, type CodegenTarget, type McpTransport, } from "./src/utils/CodeGenSession.js";
40
+ export { XPathCatalog, type XPathCatalogItem, type CatalogGetOptions, type RawPageStructure, type CatalogExtractRequest, type CatalogExtractResponse, } from "./src/utils/XPathCatalog.js";
41
+ export type { PageXPathItem } from "./src/playwright/WebActions.js";
42
+ export { fixXPathViaLocalMcp, clearFixDedupeTracker, clearToolsListCache, callMcpToolLocalFirst, callMcpToolBackendFirst, getPortalSavedTests, runLocalNpmScriptViaMcp, type FixXPathInAttributesParams, type FixXPathInAttributesResult, type PortalSavedTestsParams, type PortalSavedTestsResult, type PortalSavedTestScenario, type PortalSavedTestCt, type PortalSavedTestFile, type RunLocalNpmScriptParams, type RunLocalNpmScriptResult, } from "./src/utils/McpLocalClient.js";
43
+ /** Unified AutoCore API object */
44
+ declare const AutoCoreUnified: Record<string, unknown>;
45
+ export default AutoCoreUnified;