@sun-asterisk/sungen 1.0.24 → 2.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 (362) hide show
  1. package/README.md +198 -74
  2. package/dist/cli/commands/add.d.ts.map +1 -1
  3. package/dist/cli/commands/add.js +5 -3
  4. package/dist/cli/commands/add.js.map +1 -1
  5. package/dist/cli/commands/generate.d.ts.map +1 -1
  6. package/dist/cli/commands/generate.js +110 -35
  7. package/dist/cli/commands/generate.js.map +1 -1
  8. package/dist/cli/index.d.ts +2 -2
  9. package/dist/cli/index.js +5 -16
  10. package/dist/cli/index.js.map +1 -1
  11. package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/frame-enter-action.hbs +1 -0
  12. package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/frame-exit-action.hbs +1 -0
  13. package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/keyboard-global-action.hbs +1 -0
  14. package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/scroll-action.hbs +1 -0
  15. package/dist/generators/test-generator/adapters/playwright/templates/steps/actions/table-action-in-row.hbs +2 -0
  16. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-cell-by-filter.hbs +3 -0
  17. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-cell-by-index.hbs +3 -0
  18. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-column-exists.hbs +2 -0
  19. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-empty.hbs +2 -0
  20. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-count.hbs +2 -0
  21. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-exists.hbs +2 -0
  22. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-not-exists.hbs +2 -0
  23. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-value-assertion.hbs +1 -1
  24. package/dist/generators/test-generator/adapters/playwright/templates/steps/partials/locator-base.hbs +11 -2
  25. package/dist/generators/test-generator/adapters/playwright/templates/steps/partials/locator.hbs +11 -2
  26. package/dist/generators/test-generator/code-generator.d.ts +0 -1
  27. package/dist/generators/test-generator/code-generator.d.ts.map +1 -1
  28. package/dist/generators/test-generator/code-generator.js +0 -47
  29. package/dist/generators/test-generator/code-generator.js.map +1 -1
  30. package/dist/generators/test-generator/patterns/assertion-patterns.d.ts.map +1 -1
  31. package/dist/generators/test-generator/patterns/assertion-patterns.js +2 -0
  32. package/dist/generators/test-generator/patterns/assertion-patterns.js.map +1 -1
  33. package/dist/generators/test-generator/patterns/index.d.ts +4 -1
  34. package/dist/generators/test-generator/patterns/index.d.ts.map +1 -1
  35. package/dist/generators/test-generator/patterns/index.js +17 -5
  36. package/dist/generators/test-generator/patterns/index.js.map +1 -1
  37. package/dist/generators/test-generator/patterns/interaction-patterns.js +1 -1
  38. package/dist/generators/test-generator/patterns/interaction-patterns.js.map +1 -1
  39. package/dist/generators/test-generator/patterns/keyboard-patterns.d.ts +7 -0
  40. package/dist/generators/test-generator/patterns/keyboard-patterns.d.ts.map +1 -0
  41. package/dist/generators/test-generator/patterns/keyboard-patterns.js +47 -0
  42. package/dist/generators/test-generator/patterns/keyboard-patterns.js.map +1 -0
  43. package/dist/generators/test-generator/patterns/scope-patterns.d.ts +7 -0
  44. package/dist/generators/test-generator/patterns/scope-patterns.d.ts.map +1 -0
  45. package/dist/generators/test-generator/patterns/scope-patterns.js +36 -0
  46. package/dist/generators/test-generator/patterns/scope-patterns.js.map +1 -0
  47. package/dist/generators/test-generator/patterns/scroll-patterns.d.ts +7 -0
  48. package/dist/generators/test-generator/patterns/scroll-patterns.d.ts.map +1 -0
  49. package/dist/generators/test-generator/patterns/scroll-patterns.js +25 -0
  50. package/dist/generators/test-generator/patterns/scroll-patterns.js.map +1 -0
  51. package/dist/generators/test-generator/patterns/table-patterns.d.ts +7 -0
  52. package/dist/generators/test-generator/patterns/table-patterns.d.ts.map +1 -0
  53. package/dist/generators/test-generator/patterns/table-patterns.js +192 -0
  54. package/dist/generators/test-generator/patterns/table-patterns.js.map +1 -0
  55. package/dist/generators/test-generator/step-mapper.d.ts +1 -3
  56. package/dist/generators/test-generator/step-mapper.d.ts.map +1 -1
  57. package/dist/generators/test-generator/step-mapper.js +30 -27
  58. package/dist/generators/test-generator/step-mapper.js.map +1 -1
  59. package/dist/generators/test-generator/template-engine.d.ts.map +1 -1
  60. package/dist/generators/test-generator/template-engine.js +4 -1
  61. package/dist/generators/test-generator/template-engine.js.map +1 -1
  62. package/dist/generators/test-generator/types.d.ts +7 -24
  63. package/dist/generators/test-generator/types.d.ts.map +1 -1
  64. package/dist/generators/test-generator/types.js +2 -101
  65. package/dist/generators/test-generator/types.js.map +1 -1
  66. package/dist/generators/test-generator/utils/selector-resolver.d.ts +14 -0
  67. package/dist/generators/test-generator/utils/selector-resolver.d.ts.map +1 -1
  68. package/dist/generators/test-generator/utils/selector-resolver.js +37 -11
  69. package/dist/generators/test-generator/utils/selector-resolver.js.map +1 -1
  70. package/dist/orchestrator/project-initializer.d.ts +8 -0
  71. package/dist/orchestrator/project-initializer.d.ts.map +1 -1
  72. package/dist/orchestrator/project-initializer.js +343 -32
  73. package/dist/orchestrator/project-initializer.js.map +1 -1
  74. package/dist/orchestrator/screen-manager.d.ts +1 -32
  75. package/dist/orchestrator/screen-manager.d.ts.map +1 -1
  76. package/dist/orchestrator/screen-manager.js +55 -216
  77. package/dist/orchestrator/screen-manager.js.map +1 -1
  78. package/dist/utils/selector-types.d.ts +1 -1
  79. package/dist/utils/selector-types.d.ts.map +1 -1
  80. package/dist/utils/selector-types.js +3 -0
  81. package/dist/utils/selector-types.js.map +1 -1
  82. package/package.json +2 -2
  83. package/src/cli/commands/add.ts +5 -3
  84. package/src/cli/commands/generate.ts +90 -38
  85. package/src/cli/index.ts +5 -16
  86. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/frame-enter-action.hbs +1 -0
  87. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/frame-exit-action.hbs +1 -0
  88. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/keyboard-global-action.hbs +1 -0
  89. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/scroll-action.hbs +1 -0
  90. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/table-action-in-row.hbs +2 -0
  91. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-cell-by-filter.hbs +3 -0
  92. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-cell-by-index.hbs +3 -0
  93. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-column-exists.hbs +2 -0
  94. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-empty.hbs +2 -0
  95. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-count.hbs +2 -0
  96. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-exists.hbs +2 -0
  97. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-not-exists.hbs +2 -0
  98. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-value-assertion.hbs +1 -1
  99. package/src/generators/test-generator/adapters/playwright/templates/steps/partials/locator-base.hbs +11 -2
  100. package/src/generators/test-generator/adapters/playwright/templates/steps/partials/locator.hbs +11 -2
  101. package/src/generators/test-generator/code-generator.ts +0 -59
  102. package/src/generators/test-generator/patterns/assertion-patterns.ts +2 -0
  103. package/src/generators/test-generator/patterns/index.ts +12 -3
  104. package/src/generators/test-generator/patterns/interaction-patterns.ts +1 -1
  105. package/src/generators/test-generator/patterns/keyboard-patterns.ts +51 -0
  106. package/src/generators/test-generator/patterns/scope-patterns.ts +40 -0
  107. package/src/generators/test-generator/patterns/scroll-patterns.ts +27 -0
  108. package/src/generators/test-generator/patterns/table-patterns.ts +232 -0
  109. package/src/generators/test-generator/step-mapper.ts +33 -27
  110. package/src/generators/test-generator/template-engine.ts +3 -1
  111. package/src/generators/test-generator/types.ts +7 -112
  112. package/src/generators/test-generator/utils/selector-resolver.ts +70 -25
  113. package/src/orchestrator/project-initializer.ts +345 -32
  114. package/src/orchestrator/screen-manager.ts +61 -233
  115. package/src/utils/selector-types.ts +3 -0
  116. package/dist/cli/commands/cache-clear.d.ts +0 -3
  117. package/dist/cli/commands/cache-clear.d.ts.map +0 -1
  118. package/dist/cli/commands/cache-clear.js +0 -24
  119. package/dist/cli/commands/cache-clear.js.map +0 -1
  120. package/dist/cli/commands/full.d.ts +0 -3
  121. package/dist/cli/commands/full.d.ts.map +0 -1
  122. package/dist/cli/commands/full.js +0 -37
  123. package/dist/cli/commands/full.js.map +0 -1
  124. package/dist/cli/commands/live-scan.d.ts +0 -3
  125. package/dist/cli/commands/live-scan.d.ts.map +0 -1
  126. package/dist/cli/commands/live-scan.js +0 -78
  127. package/dist/cli/commands/live-scan.js.map +0 -1
  128. package/dist/cli/commands/map.d.ts +0 -3
  129. package/dist/cli/commands/map.d.ts.map +0 -1
  130. package/dist/cli/commands/map.js +0 -93
  131. package/dist/cli/commands/map.js.map +0 -1
  132. package/dist/cli/commands/validate.d.ts +0 -3
  133. package/dist/cli/commands/validate.d.ts.map +0 -1
  134. package/dist/cli/commands/validate.js +0 -43
  135. package/dist/cli/commands/validate.js.map +0 -1
  136. package/dist/cli/utils.d.ts +0 -6
  137. package/dist/cli/utils.d.ts.map +0 -1
  138. package/dist/cli/utils.js +0 -101
  139. package/dist/cli/utils.js.map +0 -1
  140. package/dist/config/config-loader.d.ts +0 -51
  141. package/dist/config/config-loader.d.ts.map +0 -1
  142. package/dist/config/config-loader.js +0 -216
  143. package/dist/config/config-loader.js.map +0 -1
  144. package/dist/config/config-schema.d.ts +0 -121
  145. package/dist/config/config-schema.d.ts.map +0 -1
  146. package/dist/config/config-schema.js +0 -7
  147. package/dist/config/config-schema.js.map +0 -1
  148. package/dist/core/live-scanner/config-reader.d.ts +0 -10
  149. package/dist/core/live-scanner/config-reader.d.ts.map +0 -1
  150. package/dist/core/live-scanner/config-reader.js +0 -87
  151. package/dist/core/live-scanner/config-reader.js.map +0 -1
  152. package/dist/core/live-scanner/element-finder.d.ts +0 -20
  153. package/dist/core/live-scanner/element-finder.d.ts.map +0 -1
  154. package/dist/core/live-scanner/element-finder.js +0 -481
  155. package/dist/core/live-scanner/element-finder.js.map +0 -1
  156. package/dist/core/live-scanner/index.d.ts +0 -8
  157. package/dist/core/live-scanner/index.d.ts.map +0 -1
  158. package/dist/core/live-scanner/index.js +0 -33
  159. package/dist/core/live-scanner/index.js.map +0 -1
  160. package/dist/core/live-scanner/matrix-reader.d.ts +0 -17
  161. package/dist/core/live-scanner/matrix-reader.d.ts.map +0 -1
  162. package/dist/core/live-scanner/matrix-reader.js +0 -60
  163. package/dist/core/live-scanner/matrix-reader.js.map +0 -1
  164. package/dist/core/live-scanner/matrix-writer.d.ts +0 -7
  165. package/dist/core/live-scanner/matrix-writer.d.ts.map +0 -1
  166. package/dist/core/live-scanner/matrix-writer.js +0 -103
  167. package/dist/core/live-scanner/matrix-writer.js.map +0 -1
  168. package/dist/core/live-scanner/role-fallback.d.ts +0 -15
  169. package/dist/core/live-scanner/role-fallback.d.ts.map +0 -1
  170. package/dist/core/live-scanner/role-fallback.js +0 -46
  171. package/dist/core/live-scanner/role-fallback.js.map +0 -1
  172. package/dist/core/live-scanner/scanner.d.ts +0 -22
  173. package/dist/core/live-scanner/scanner.d.ts.map +0 -1
  174. package/dist/core/live-scanner/scanner.js +0 -303
  175. package/dist/core/live-scanner/scanner.js.map +0 -1
  176. package/dist/core/live-scanner/step-replayer.d.ts +0 -26
  177. package/dist/core/live-scanner/step-replayer.d.ts.map +0 -1
  178. package/dist/core/live-scanner/step-replayer.js +0 -473
  179. package/dist/core/live-scanner/step-replayer.js.map +0 -1
  180. package/dist/core/live-scanner/types.d.ts +0 -52
  181. package/dist/core/live-scanner/types.d.ts.map +0 -1
  182. package/dist/core/live-scanner/types.js +0 -14
  183. package/dist/core/live-scanner/types.js.map +0 -1
  184. package/dist/core/selector-base/annotation-handler.d.ts +0 -45
  185. package/dist/core/selector-base/annotation-handler.d.ts.map +0 -1
  186. package/dist/core/selector-base/annotation-handler.js +0 -102
  187. package/dist/core/selector-base/annotation-handler.js.map +0 -1
  188. package/dist/core/selector-base/base-generator.d.ts +0 -49
  189. package/dist/core/selector-base/base-generator.d.ts.map +0 -1
  190. package/dist/core/selector-base/base-generator.js +0 -214
  191. package/dist/core/selector-base/base-generator.js.map +0 -1
  192. package/dist/core/selector-base/gherkin-parser.d.ts +0 -24
  193. package/dist/core/selector-base/gherkin-parser.d.ts.map +0 -1
  194. package/dist/core/selector-base/gherkin-parser.js +0 -42
  195. package/dist/core/selector-base/gherkin-parser.js.map +0 -1
  196. package/dist/core/selector-mapper/priority-mapper.d.ts +0 -74
  197. package/dist/core/selector-mapper/priority-mapper.d.ts.map +0 -1
  198. package/dist/core/selector-mapper/priority-mapper.js +0 -477
  199. package/dist/core/selector-mapper/priority-mapper.js.map +0 -1
  200. package/dist/core/ui-scanner/heuristics/base-heuristic.d.ts +0 -91
  201. package/dist/core/ui-scanner/heuristics/base-heuristic.d.ts.map +0 -1
  202. package/dist/core/ui-scanner/heuristics/base-heuristic.js +0 -175
  203. package/dist/core/ui-scanner/heuristics/base-heuristic.js.map +0 -1
  204. package/dist/core/ui-scanner/react-scanner.d.ts +0 -32
  205. package/dist/core/ui-scanner/react-scanner.d.ts.map +0 -1
  206. package/dist/core/ui-scanner/react-scanner.js +0 -163
  207. package/dist/core/ui-scanner/react-scanner.js.map +0 -1
  208. package/dist/core/ui-scanner/scanner-interface.d.ts +0 -94
  209. package/dist/core/ui-scanner/scanner-interface.d.ts.map +0 -1
  210. package/dist/core/ui-scanner/scanner-interface.js +0 -33
  211. package/dist/core/ui-scanner/scanner-interface.js.map +0 -1
  212. package/dist/core/ui-scanner/strict-scanner.d.ts +0 -81
  213. package/dist/core/ui-scanner/strict-scanner.d.ts.map +0 -1
  214. package/dist/core/ui-scanner/strict-scanner.js +0 -511
  215. package/dist/core/ui-scanner/strict-scanner.js.map +0 -1
  216. package/dist/core/validator/data-validator.d.ts +0 -38
  217. package/dist/core/validator/data-validator.d.ts.map +0 -1
  218. package/dist/core/validator/data-validator.js +0 -212
  219. package/dist/core/validator/data-validator.js.map +0 -1
  220. package/dist/core/validator/feature-validator.d.ts +0 -27
  221. package/dist/core/validator/feature-validator.d.ts.map +0 -1
  222. package/dist/core/validator/feature-validator.js +0 -182
  223. package/dist/core/validator/feature-validator.js.map +0 -1
  224. package/dist/core/validator/index.d.ts +0 -46
  225. package/dist/core/validator/index.d.ts.map +0 -1
  226. package/dist/core/validator/index.js +0 -17
  227. package/dist/core/validator/index.js.map +0 -1
  228. package/dist/core/validator/screen-validator.d.ts +0 -35
  229. package/dist/core/validator/screen-validator.d.ts.map +0 -1
  230. package/dist/core/validator/screen-validator.js +0 -195
  231. package/dist/core/validator/screen-validator.js.map +0 -1
  232. package/dist/core/validator/selector-validator.d.ts +0 -36
  233. package/dist/core/validator/selector-validator.d.ts.map +0 -1
  234. package/dist/core/validator/selector-validator.js +0 -210
  235. package/dist/core/validator/selector-validator.js.map +0 -1
  236. package/dist/external/ai-provider.d.ts +0 -60
  237. package/dist/external/ai-provider.d.ts.map +0 -1
  238. package/dist/external/ai-provider.js +0 -30
  239. package/dist/external/ai-provider.js.map +0 -1
  240. package/dist/external/anthropic-provider.d.ts +0 -29
  241. package/dist/external/anthropic-provider.d.ts.map +0 -1
  242. package/dist/external/anthropic-provider.js +0 -85
  243. package/dist/external/anthropic-provider.js.map +0 -1
  244. package/dist/generators/cache/cache-manager.d.ts +0 -66
  245. package/dist/generators/cache/cache-manager.d.ts.map +0 -1
  246. package/dist/generators/cache/cache-manager.js +0 -286
  247. package/dist/generators/cache/cache-manager.js.map +0 -1
  248. package/dist/generators/dsl-writer/index.d.ts +0 -33
  249. package/dist/generators/dsl-writer/index.d.ts.map +0 -1
  250. package/dist/generators/dsl-writer/index.js +0 -226
  251. package/dist/generators/dsl-writer/index.js.map +0 -1
  252. package/dist/generators/scaffold-generator/index.d.ts +0 -162
  253. package/dist/generators/scaffold-generator/index.d.ts.map +0 -1
  254. package/dist/generators/scaffold-generator/index.js +0 -877
  255. package/dist/generators/scaffold-generator/index.js.map +0 -1
  256. package/dist/generators/selector-mapper/ai-mapper.d.ts +0 -56
  257. package/dist/generators/selector-mapper/ai-mapper.d.ts.map +0 -1
  258. package/dist/generators/selector-mapper/ai-mapper.js +0 -457
  259. package/dist/generators/selector-mapper/ai-mapper.js.map +0 -1
  260. package/dist/generators/selector-mapper/hybrid-mapper.d.ts +0 -67
  261. package/dist/generators/selector-mapper/hybrid-mapper.d.ts.map +0 -1
  262. package/dist/generators/selector-mapper/hybrid-mapper.js +0 -349
  263. package/dist/generators/selector-mapper/hybrid-mapper.js.map +0 -1
  264. package/dist/generators/selector-mapper/index.d.ts +0 -8
  265. package/dist/generators/selector-mapper/index.d.ts.map +0 -1
  266. package/dist/generators/selector-mapper/index.js +0 -12
  267. package/dist/generators/selector-mapper/index.js.map +0 -1
  268. package/dist/generators/selector-mapper/intelligent-mapper.d.ts +0 -125
  269. package/dist/generators/selector-mapper/intelligent-mapper.d.ts.map +0 -1
  270. package/dist/generators/selector-mapper/intelligent-mapper.js +0 -391
  271. package/dist/generators/selector-mapper/intelligent-mapper.js.map +0 -1
  272. package/dist/generators/test-generator/ai-step-mapper.d.ts +0 -27
  273. package/dist/generators/test-generator/ai-step-mapper.d.ts.map +0 -1
  274. package/dist/generators/test-generator/ai-step-mapper.js +0 -204
  275. package/dist/generators/test-generator/ai-step-mapper.js.map +0 -1
  276. package/dist/generators/test-generator/auth-setup-generator.d.ts +0 -18
  277. package/dist/generators/test-generator/auth-setup-generator.d.ts.map +0 -1
  278. package/dist/generators/test-generator/auth-setup-generator.js +0 -82
  279. package/dist/generators/test-generator/auth-setup-generator.js.map +0 -1
  280. package/dist/generators/test-generator/patterns/legacy-patterns.d.ts +0 -7
  281. package/dist/generators/test-generator/patterns/legacy-patterns.d.ts.map +0 -1
  282. package/dist/generators/test-generator/patterns/legacy-patterns.js +0 -98
  283. package/dist/generators/test-generator/patterns/legacy-patterns.js.map +0 -1
  284. package/dist/generators/test-generator/templates/auth-setup.ts.hbs +0 -36
  285. package/dist/generators/ui-model-builder/deep-scanner.d.ts +0 -121
  286. package/dist/generators/ui-model-builder/deep-scanner.d.ts.map +0 -1
  287. package/dist/generators/ui-model-builder/deep-scanner.js +0 -1113
  288. package/dist/generators/ui-model-builder/deep-scanner.js.map +0 -1
  289. package/dist/generators/ui-model-builder/enhanced-deep-scanner.d.ts +0 -110
  290. package/dist/generators/ui-model-builder/enhanced-deep-scanner.d.ts.map +0 -1
  291. package/dist/generators/ui-model-builder/enhanced-deep-scanner.js +0 -608
  292. package/dist/generators/ui-model-builder/enhanced-deep-scanner.js.map +0 -1
  293. package/dist/generators/ui-model-builder/react-scanner.d.ts +0 -107
  294. package/dist/generators/ui-model-builder/react-scanner.d.ts.map +0 -1
  295. package/dist/generators/ui-model-builder/react-scanner.js +0 -797
  296. package/dist/generators/ui-model-builder/react-scanner.js.map +0 -1
  297. package/dist/orchestrator/cache-manager.d.ts +0 -15
  298. package/dist/orchestrator/cache-manager.d.ts.map +0 -1
  299. package/dist/orchestrator/cache-manager.js +0 -62
  300. package/dist/orchestrator/cache-manager.js.map +0 -1
  301. package/dist/orchestrator/pipeline.d.ts +0 -56
  302. package/dist/orchestrator/pipeline.d.ts.map +0 -1
  303. package/dist/orchestrator/pipeline.js +0 -298
  304. package/dist/orchestrator/pipeline.js.map +0 -1
  305. package/dist/orchestrator/reporter.d.ts +0 -15
  306. package/dist/orchestrator/reporter.d.ts.map +0 -1
  307. package/dist/orchestrator/reporter.js +0 -30
  308. package/dist/orchestrator/reporter.js.map +0 -1
  309. package/src/cli/commands/cache-clear.ts +0 -22
  310. package/src/cli/commands/full.ts +0 -35
  311. package/src/cli/commands/live-scan.ts +0 -82
  312. package/src/cli/commands/map.ts +0 -97
  313. package/src/cli/commands/validate.ts +0 -43
  314. package/src/cli/utils.ts +0 -106
  315. package/src/config/ai-providers.yaml +0 -56
  316. package/src/config/config-loader.ts +0 -248
  317. package/src/config/config-schema.ts +0 -148
  318. package/src/config/default.config.yaml +0 -107
  319. package/src/config/framework.config.yaml +0 -52
  320. package/src/config/routes.yaml +0 -31
  321. package/src/core/live-scanner/config-reader.ts +0 -57
  322. package/src/core/live-scanner/element-finder.ts +0 -534
  323. package/src/core/live-scanner/index.ts +0 -7
  324. package/src/core/live-scanner/matrix-reader.ts +0 -65
  325. package/src/core/live-scanner/matrix-writer.ts +0 -77
  326. package/src/core/live-scanner/role-fallback.ts +0 -44
  327. package/src/core/live-scanner/scanner.ts +0 -321
  328. package/src/core/live-scanner/step-replayer.ts +0 -503
  329. package/src/core/live-scanner/types.ts +0 -58
  330. package/src/core/selector-base/annotation-handler.ts +0 -127
  331. package/src/core/selector-base/base-generator.ts +0 -234
  332. package/src/core/selector-base/gherkin-parser.ts +0 -57
  333. package/src/core/selector-mapper/priority-mapper.ts +0 -607
  334. package/src/core/ui-scanner/heuristics/base-heuristic.ts +0 -216
  335. package/src/core/ui-scanner/react-scanner.ts +0 -156
  336. package/src/core/ui-scanner/scanner-interface.ts +0 -133
  337. package/src/core/ui-scanner/strict-scanner.ts +0 -629
  338. package/src/core/validator/data-validator.ts +0 -202
  339. package/src/core/validator/feature-validator.ts +0 -176
  340. package/src/core/validator/index.ts +0 -57
  341. package/src/core/validator/screen-validator.ts +0 -209
  342. package/src/core/validator/selector-validator.ts +0 -209
  343. package/src/external/ai-provider.ts +0 -90
  344. package/src/external/anthropic-provider.ts +0 -114
  345. package/src/generators/README.md +0 -410
  346. package/src/generators/cache/cache-manager.ts +0 -322
  347. package/src/generators/dsl-writer/index.ts +0 -253
  348. package/src/generators/scaffold-generator/index.ts +0 -1029
  349. package/src/generators/selector-mapper/ai-mapper.ts +0 -528
  350. package/src/generators/selector-mapper/hybrid-mapper.ts +0 -427
  351. package/src/generators/selector-mapper/index.ts +0 -10
  352. package/src/generators/selector-mapper/intelligent-mapper.ts +0 -530
  353. package/src/generators/test-generator/ai-step-mapper.ts +0 -224
  354. package/src/generators/test-generator/auth-setup-generator.ts +0 -59
  355. package/src/generators/test-generator/patterns/legacy-patterns.ts +0 -104
  356. package/src/generators/test-generator/templates/auth-setup.ts.hbs +0 -36
  357. package/src/generators/ui-model-builder/deep-scanner.ts +0 -1244
  358. package/src/generators/ui-model-builder/enhanced-deep-scanner.ts +0 -731
  359. package/src/generators/ui-model-builder/react-scanner.ts +0 -959
  360. package/src/orchestrator/cache-manager.ts +0 -32
  361. package/src/orchestrator/pipeline.ts +0 -354
  362. package/src/orchestrator/reporter.ts +0 -36
@@ -1,427 +0,0 @@
1
- /**
2
- * Hybrid Selector Mapper
3
- * Combines heuristic matching (fast, free) with AI fallback (slow, accurate)
4
- *
5
- * Strategy:
6
- * 1. Try heuristic matching (90% success, 0 cost, instant)
7
- * 2. Fallback to AI mapping (10% cases, paid, 2-5s)
8
- *
9
- * Benefits:
10
- * - 90% cost reduction
11
- * - 10x faster mapping
12
- * - Deterministic results for common elements
13
- */
14
-
15
- import { AIMapper, AIMapperConfig } from './ai-mapper';
16
- import { UIModel, UIElement, SelectorDSL, SelectorEntry } from '../types';
17
-
18
- // ============================================================================
19
- // Heuristic Matcher
20
- // ============================================================================
21
-
22
- interface HeuristicMatch {
23
- selector: string;
24
- confidence: number; // 0.0 to 1.0
25
- method: 'exact-testid' | 'exact-id' | 'pattern' | 'context' | 'none';
26
- reason?: string;
27
- }
28
-
29
- class HeuristicMatcher {
30
- /**
31
- * Try to map element ID to selector using heuristics
32
- */
33
- static match(elementId: string, uiElements: UIElement[]): HeuristicMatch {
34
- // Remove brackets if present: [login.email] -> login.email
35
- const cleanId = elementId.replace(/[\[\]]/g, '');
36
- // Extract element name: login.email -> email
37
- const parts = cleanId.split('.');
38
- const elementName = parts.length > 1 ? parts[parts.length - 1] : cleanId;
39
-
40
- // Strategy 1: Exact data-testid match (highest confidence)
41
- const testIdMatch = this.matchByTestId(elementName, uiElements);
42
- if (testIdMatch.confidence > 0.95) return testIdMatch;
43
-
44
- // Strategy 2: Exact id attribute match
45
- const idMatch = this.matchById(elementName, uiElements);
46
- if (idMatch.confidence > 0.9) return idMatch;
47
-
48
- // Strategy 3: Pattern matching (email, password, submit...)
49
- const patternMatch = this.matchByPattern(elementName, uiElements);
50
- if (patternMatch.confidence > 0.85) return patternMatch;
51
-
52
- // Strategy 4: Context-aware matching
53
- const contextMatch = this.matchByContext(elementName, uiElements);
54
- if (contextMatch.confidence > 0.8) return contextMatch;
55
-
56
- // No confident match - send to AI
57
- return {
58
- selector: '',
59
- confidence: 0,
60
- method: 'none',
61
- reason: 'No heuristic match found, needs AI mapping'
62
- };
63
- }
64
-
65
- /**
66
- * Strategy 1: data-testid exact or partial match
67
- */
68
- private static matchByTestId(elementName: string, elements: UIElement[]): HeuristicMatch {
69
- const normalized = elementName.toLowerCase().replace(/[-_]/g, '');
70
-
71
- for (const el of elements) {
72
- const testId = el.testId;
73
- if (!testId) continue;
74
-
75
- const testIdNorm = testId.toLowerCase().replace(/[-_]/g, '');
76
-
77
- // Exact match
78
- if (testIdNorm === normalized) {
79
- return {
80
- selector: `[data-testid="${testId}"]`,
81
- confidence: 1.0,
82
- method: 'exact-testid',
83
- reason: `Exact match: ${elementName} → ${testId}`
84
- };
85
- }
86
-
87
- // Partial match (testid contains element name)
88
- if (testIdNorm.includes(normalized)) {
89
- return {
90
- selector: `[data-testid="${testId}"]`,
91
- confidence: 0.95,
92
- method: 'exact-testid',
93
- reason: `Partial match: ${elementName} in ${testId}`
94
- };
95
- }
96
- }
97
-
98
- return { selector: '', confidence: 0, method: 'none' };
99
- }
100
-
101
- /**
102
- * Strategy 2: id attribute match
103
- */
104
- private static matchById(elementName: string, elements: UIElement[]): HeuristicMatch {
105
- const normalized = elementName.toLowerCase().replace(/[-_]/g, '');
106
-
107
- for (const el of elements) {
108
- const id = el.id;
109
- if (!id) continue;
110
-
111
- const idNorm = id.toLowerCase().replace(/[-_]/g, '');
112
-
113
- // Exact match
114
- if (idNorm === normalized) {
115
- return {
116
- selector: `#${id}`,
117
- confidence: 0.95,
118
- method: 'exact-id',
119
- reason: `Exact id match: ${elementName} → #${id}`
120
- };
121
- }
122
-
123
- // Partial match
124
- if (idNorm.includes(normalized) || normalized.includes(idNorm)) {
125
- return {
126
- selector: `#${id}`,
127
- confidence: 0.9,
128
- method: 'exact-id',
129
- reason: `Partial id match: ${elementName} ā‰ˆ #${id}`
130
- };
131
- }
132
- }
133
-
134
- return { selector: '', confidence: 0, method: 'none' };
135
- }
136
-
137
- /**
138
- * Strategy 3: Pattern matching for common elements
139
- */
140
- private static matchByPattern(elementName: string, elements: UIElement[]): HeuristicMatch {
141
- const patterns = [
142
- {
143
- name: 'email-input',
144
- keywords: ['email', 'mail'],
145
- confidence: 0.9,
146
- matches: (el: UIElement) =>
147
- el.tag === 'input' &&
148
- (el.props?.type === 'email' || el.id?.includes('email'))
149
- },
150
- {
151
- name: 'password-input',
152
- keywords: ['password', 'pass', 'pw'],
153
- confidence: 0.9,
154
- matches: (el: UIElement) =>
155
- el.tag === 'input' && el.props?.type === 'password'
156
- },
157
- {
158
- name: 'submit-button',
159
- keywords: ['submit', 'btn', 'button', 'login', 'register', 'signin', 'signup'],
160
- confidence: 0.85,
161
- matches: (el: UIElement) =>
162
- el.tag === 'button' && el.props?.type === 'submit'
163
- },
164
- {
165
- name: 'textarea',
166
- keywords: ['message', 'textarea', 'text', 'input', 'comment'],
167
- confidence: 0.8,
168
- matches: (el: UIElement) =>
169
- el.tag === 'textarea'
170
- }
171
- ];
172
-
173
- const nameLower = elementName.toLowerCase();
174
-
175
- for (const pattern of patterns) {
176
- if (!pattern.keywords.some(kw => nameLower.includes(kw))) continue;
177
-
178
- // Find matching element
179
- for (const el of elements) {
180
- if (!pattern.matches(el)) continue;
181
-
182
- return {
183
- selector: this.buildSelector(el),
184
- confidence: pattern.confidence,
185
- method: 'pattern',
186
- reason: `Pattern match: ${elementName} → ${pattern.name}`
187
- };
188
- }
189
- }
190
-
191
- return { selector: '', confidence: 0, method: 'none' };
192
- }
193
-
194
- /**
195
- * Strategy 4: Context-aware matching
196
- */
197
- private static matchByContext(elementName: string, elements: UIElement[]): HeuristicMatch {
198
- const nameLower = elementName.toLowerCase();
199
-
200
- // Submit buttons
201
- if (nameLower.includes('submit') || nameLower.includes('login') || nameLower.includes('register')) {
202
- const submitBtn = elements.find(el =>
203
- el.tag === 'button' &&
204
- el.props?.type === 'submit'
205
- );
206
-
207
- if (submitBtn) {
208
- return {
209
- selector: this.buildSelector(submitBtn),
210
- confidence: 0.85,
211
- method: 'context',
212
- reason: `Context: ${elementName} matched submit button`
213
- };
214
- }
215
- }
216
-
217
- // Links (signup, login, etc.)
218
- if (nameLower.includes('link')) {
219
- const link = elements.find(el => el.tag === 'a');
220
- if (link) {
221
- return {
222
- selector: this.buildSelector(link),
223
- confidence: 0.8,
224
- method: 'context',
225
- reason: `Context: ${elementName} matched link`
226
- };
227
- }
228
- }
229
-
230
- return { selector: '', confidence: 0, method: 'none' };
231
- }
232
-
233
- /**
234
- * Build selector from UI element
235
- */
236
- private static buildSelector(el: UIElement): string {
237
- // Prefer data-testid
238
- if (el.testId) {
239
- return `[data-testid="${el.testId}"]`;
240
- }
241
-
242
- // Then id
243
- if (el.id) {
244
- return `#${el.id}`;
245
- }
246
-
247
- // Then type
248
- if (el.tag && el.props?.type) {
249
- return `${el.tag}[type="${el.props.type}"]`;
250
- }
251
-
252
- // Fallback to tag
253
- return el.tag || 'div';
254
- }
255
- }
256
-
257
- // ============================================================================
258
- // Hybrid Mapper Class
259
- // ============================================================================
260
-
261
- export interface HybridMapperConfig extends AIMapperConfig {
262
- heuristicFirst?: boolean; // Default: true
263
- minHeuristicConfidence?: number; // Default: 0.8
264
- }
265
-
266
- export interface HybridMappingStats {
267
- total: number;
268
- heuristicMatches: number;
269
- aiMatches: number;
270
- heuristicSuccessRate: number;
271
- estimatedCost: number;
272
- estimatedTime: number;
273
- }
274
-
275
- export class HybridMapper {
276
- private aiMapper: AIMapper;
277
- private config: HybridMapperConfig;
278
- private stats: HybridMappingStats;
279
-
280
- constructor(config: HybridMapperConfig) {
281
- this.config = {
282
- heuristicFirst: true,
283
- minHeuristicConfidence: 0.8,
284
- ...config
285
- };
286
- this.aiMapper = new AIMapper(config);
287
- this.stats = {
288
- total: 0,
289
- heuristicMatches: 0,
290
- aiMatches: 0,
291
- heuristicSuccessRate: 0,
292
- estimatedCost: 0,
293
- estimatedTime: 0
294
- };
295
- }
296
-
297
- /**
298
- * Map element IDs to selectors using hybrid approach
299
- */
300
- async mapSelectors(uiModel: UIModel, elementIds: string[]): Promise<SelectorDSL> {
301
- const startTime = Date.now();
302
- this.stats.total = elementIds.length;
303
-
304
- if (this.config.verbose) {
305
- console.log('\nšŸ”„ Hybrid Mapping Strategy:');
306
- console.log(` Total elements: ${elementIds.length}`);
307
- console.log(` Trying heuristics first...`);
308
- }
309
-
310
- // Prepare result structure
311
- const result: SelectorDSL = {};
312
-
313
- // Track which elements need AI mapping
314
- const needsAI: string[] = [];
315
- const heuristicResults: Record<string, HeuristicMatch> = {};
316
-
317
- // Step 1: Try heuristic matching for all elements
318
- for (const elementId of elementIds) {
319
- const match = HeuristicMatcher.match(elementId, uiModel.elements);
320
-
321
- if (match.confidence >= this.config.minHeuristicConfidence!) {
322
- // Heuristic success!
323
- const cleanId = elementId.replace(/[\[\]]/g, '').split('.').pop() || elementId;
324
- result[cleanId] = {
325
- selector: match.selector,
326
- type: 'selector',
327
- description: `Matched by heuristic: ${match.method}`,
328
- discoveryMethod: 'ai-static-analysis',
329
- confidence: match.confidence >= 0.9 ? 'high' : match.confidence >= 0.8 ? 'medium' : 'low'
330
- };
331
- heuristicResults[elementId] = match;
332
- this.stats.heuristicMatches++;
333
-
334
- if (this.config.verbose) {
335
- console.log(` āœ… [Heuristic] ${elementId} → ${match.selector} (${match.method}, ${match.confidence.toFixed(2)})`);
336
- }
337
- } else {
338
- // Need AI
339
- needsAI.push(elementId);
340
- if (this.config.verbose) {
341
- console.log(` ā­ļø [Needs AI] ${elementId} (heuristic confidence: ${match.confidence.toFixed(2)})`);
342
- }
343
- }
344
- }
345
-
346
- // Step 2: Use AI for remaining elements
347
- if (needsAI.length > 0) {
348
- if (this.config.verbose) {
349
- console.log(`\nšŸ¤– Calling AI for ${needsAI.length} elements...`);
350
- }
351
-
352
- const aiResult = await this.aiMapper.mapSelectors({
353
- uiModel,
354
- elementIds: needsAI
355
- });
356
-
357
- // Merge AI results (aiResult.selectors contains the SelectorDSL)
358
- for (const [key, value] of Object.entries(aiResult.selectors)) {
359
- result[key] = value;
360
- }
361
-
362
- this.stats.aiMatches = needsAI.length;
363
- this.stats.estimatedCost = (needsAI.length * 0.002); // ~$0.002 per element
364
- }
365
-
366
- // Calculate stats
367
- const endTime = Date.now();
368
- this.stats.heuristicSuccessRate = (this.stats.heuristicMatches / this.stats.total) * 100;
369
- this.stats.estimatedTime = endTime - startTime;
370
-
371
- // Print summary
372
- if (this.config.verbose) {
373
- console.log('\nšŸ“Š Mapping Stats:');
374
- console.log(` Total: ${this.stats.total}`);
375
- console.log(` Heuristic: ${this.stats.heuristicMatches} (${this.stats.heuristicSuccessRate.toFixed(1)}%)`);
376
- console.log(` AI: ${this.stats.aiMatches} (${(100 - this.stats.heuristicSuccessRate).toFixed(1)}%)`);
377
- console.log(` Cost: ~$${this.stats.estimatedCost.toFixed(3)}`);
378
- console.log(` Time: ${this.stats.estimatedTime}ms`);
379
- console.log(` Savings: ~${(this.stats.heuristicSuccessRate).toFixed(0)}% cost reduction`);
380
- }
381
-
382
- return result;
383
- }
384
-
385
- /**
386
- * Get mapping statistics
387
- */
388
- getStats(): HybridMappingStats {
389
- return { ...this.stats };
390
- }
391
-
392
- /**
393
- * Reset statistics
394
- */
395
- resetStats(): void {
396
- this.stats = {
397
- total: 0,
398
- heuristicMatches: 0,
399
- aiMatches: 0,
400
- heuristicSuccessRate: 0,
401
- estimatedCost: 0,
402
- estimatedTime: 0
403
- };
404
- }
405
- }
406
-
407
- /**
408
- * Example Usage:
409
- *
410
- * const mapper = new HybridMapper({
411
- * provider: 'anthropic',
412
- * apiKey: process.env.ANTHROPIC_API_KEY,
413
- * verbose: true,
414
- * heuristicFirst: true,
415
- * minHeuristicConfidence: 0.8
416
- * });
417
- *
418
- * const selectors = await mapper.mapSelectors(uiModel, [
419
- * '[login.email]',
420
- * '[login.password]',
421
- * '[login.submit]'
422
- * ]);
423
- *
424
- * const stats = mapper.getStats();
425
- * console.log(`Heuristic success: ${stats.heuristicSuccessRate}%`);
426
- * console.log(`Cost: $${stats.estimatedCost}`);
427
- */
@@ -1,10 +0,0 @@
1
- /**
2
- * Selector Mapper Exports
3
- * Main entry point for selector mapping functionality
4
- */
5
-
6
- export { AIMapper, type AIMapperConfig } from './ai-mapper';
7
- export { HybridMapper, type HybridMapperConfig, type HybridMappingStats } from './hybrid-mapper';
8
-
9
- // Re-export for convenience
10
- export type { UIModel, UIElement, SelectorDSL, SelectorEntry } from '../types';