@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,5 +1,4 @@
1
1
  import { ParsedStep } from '../gherkin-parser';
2
- import { AIStepMapper } from './ai-step-mapper';
3
2
  import { TemplateEngine } from './template-engine';
4
3
  import { PatternRegistry, PatternContext } from './patterns';
5
4
  import { SelectorResolver } from './utils/selector-resolver';
@@ -18,8 +17,6 @@ export interface MappedStep {
18
17
  */
19
18
  export class StepMapper {
20
19
  private stepCounter: number = 0;
21
- private aiMapper: AIStepMapper | null = null;
22
- private useAI: boolean = false;
23
20
  private verbose: boolean = false;
24
21
  private templateEngine: TemplateEngine;
25
22
  private patternRegistry: PatternRegistry;
@@ -31,9 +28,9 @@ export class StepMapper {
31
28
  private featurePath?: string;
32
29
  private currentScenarioSteps?: ParsedStep[];
33
30
  private inDialogScope: boolean = false;
31
+ private inFrameScope: boolean = false;
34
32
 
35
- constructor(options: { useAI?: boolean; verbose?: boolean; baseURL?: string; featureName?: string; screenName?: string; featurePath?: string } = {}) {
36
- this.useAI = options.useAI ?? false;
33
+ constructor(options: { verbose?: boolean; baseURL?: string; featureName?: string; screenName?: string; featurePath?: string } = {}) {
37
34
  this.verbose = options.verbose ?? false;
38
35
  this.baseURL = options.baseURL || null; // null means path-only navigation
39
36
  this.featureName = options.featureName;
@@ -46,18 +43,8 @@ export class StepMapper {
46
43
  this.selectorResolver = new SelectorResolver(undefined, options.screenName);
47
44
  this.dataResolver = new DataResolver(undefined, options.screenName);
48
45
 
49
- if (this.useAI) {
50
- try {
51
- this.aiMapper = new AIStepMapper(this.verbose);
52
- if (this.verbose) {
53
- console.log(` [StepMapper] AI fallback enabled (${this.patternRegistry.getPatternCount()} patterns loaded)`);
54
- }
55
- } catch (error) {
56
- console.warn('[StepMapper] AI mapper initialization failed:', error);
57
- this.useAI = false;
58
- }
59
- } else if (this.verbose) {
60
- console.log(` [StepMapper] Dictionary mode (${this.patternRegistry.getPatternCount()} patterns loaded)`);
46
+ if (this.verbose) {
47
+ console.log(` [StepMapper] ${this.patternRegistry.getPatternCount()} patterns loaded`);
61
48
  }
62
49
  }
63
50
 
@@ -75,8 +62,9 @@ export class StepMapper {
75
62
  */
76
63
  setScenarioContext(steps: ParsedStep[]): void {
77
64
  this.currentScenarioSteps = steps;
78
- // Reset dialog scope at the start of each new scenario
65
+ // Reset dialog and frame scope at the start of each new scenario
79
66
  this.inDialogScope = false;
67
+ this.inFrameScope = false;
80
68
  this.templateEngine.resetBaseContext();
81
69
  }
82
70
 
@@ -87,6 +75,32 @@ export class StepMapper {
87
75
  mapStep(step: ParsedStep): MappedStep | Promise<MappedStep> {
88
76
  this.stepCounter++;
89
77
 
78
+ // Frame scope directives — intercept before pattern matching
79
+ if (/\bswitch(?:es)?\s+to\b/i.test(step.text) &&
80
+ (step.elementType === 'frame' || step.elementType === 'iframe')) {
81
+ const selectorRef = step.selectorRef || '';
82
+
83
+ if (selectorRef.toLowerCase() === 'main') {
84
+ // Exit frame scope
85
+ this.inFrameScope = false;
86
+ this.templateEngine.setBaseContext({ inFrame: false });
87
+ return { code: '// Back to main page context', comment: 'Exit frame scope' };
88
+ }
89
+
90
+ // Enter frame scope
91
+ this.inFrameScope = true;
92
+ let frameSelector = selectorRef;
93
+ try {
94
+ const resolved = this.selectorResolver.resolveSelector(selectorRef, this.featureName, 'frame', 0);
95
+ frameSelector = resolved.value || selectorRef;
96
+ } catch {
97
+ // Use selectorRef as-is
98
+ }
99
+ this.templateEngine.setBaseContext({ inFrame: true, frameSelector });
100
+ const code = `const frame = page.frameLocator('${frameSelector}');`;
101
+ return { code, comment: `Switch to ${selectorRef} frame` };
102
+ }
103
+
90
104
  // Dialog scope directives — intercept before pattern matching
91
105
  if (/\buse dialog\b/i.test(step.text)) {
92
106
  this.inDialogScope = true;
@@ -142,15 +156,7 @@ export class StepMapper {
142
156
  return mappedStep;
143
157
  }
144
158
 
145
- // Fallback to AI if enabled
146
- if (this.useAI && this.aiMapper) {
147
- if (this.verbose) {
148
- console.log(` → AI fallback for: ${step.text.substring(0, 50)}...`);
149
- }
150
- return this.aiMapper.mapStep(step);
151
- }
152
-
153
- // No pattern matched and no AI - return generic code with comment
159
+ // No pattern matched - return TODO comment
154
160
  return {
155
161
  code: `// TODO: Implement step: ${step.text}`,
156
162
  comment: `Unrecognized step pattern: ${step.text}`,
@@ -112,8 +112,10 @@ export class TemplateEngine {
112
112
  }
113
113
  });
114
114
 
115
- // Returns the Playwright root object — scoped to dialog when inDialog is true
115
+ // Returns the Playwright root object — scoped to dialog or frame when active
116
116
  Handlebars.registerHelper('pageRoot', function(this: any) {
117
+ // Frame scope takes precedence (frame > dialog > page)
118
+ if (this.inFrame) return 'frame';
117
119
  if (!this.inDialog) return 'page';
118
120
  const partial = Handlebars.partials['dialog-root'];
119
121
  if (partial) {
@@ -1,38 +1,17 @@
1
1
  /**
2
- * Test Generator Interface
3
- * Defines contract for test framework code generators
2
+ * Test Generator Types
3
+ * Core type definitions for the test generation compiler
4
4
  */
5
5
 
6
- import { RuntimeConfig } from '../../config/config-schema';
7
- import { ParsedFeature } from '../../core/selector-base/gherkin-parser';
8
- import * as path from 'path';
9
-
10
6
  /**
11
- * Main Test Generator Interface
12
- */
13
- export interface TestGenerator {
14
- readonly framework: string;
15
-
16
- generate(
17
- feature: ParsedFeature,
18
- selectors: Record<string, any>,
19
- testData: Record<string, any>,
20
- config: RuntimeConfig
21
- ): Promise<GeneratedTest>;
22
-
23
- getFileExtension(): string;
24
-
25
- validate(): boolean;
26
- }
27
-
28
- /**
29
- * Generated Test Result (executor-level)
7
+ * Generated Test Result
30
8
  */
31
9
  export interface GeneratedTest {
32
- feature: string;
33
- outputPath: string;
10
+ featureName: string;
11
+ filePath: string;
34
12
  code: string;
35
- stats: GenerationStats;
13
+ sourceFile?: string;
14
+ stepCount?: number;
36
15
  }
37
16
 
38
17
  /**
@@ -42,90 +21,6 @@ export interface GenerationStats {
42
21
  totalScenarios: number;
43
22
  totalSteps: number;
44
23
  dictionaryMatched: number;
45
- aiGenerated: number;
46
24
  todoCount: number;
47
25
  generationTime: number;
48
26
  }
49
-
50
- /**
51
- * Test Generator Factory
52
- */
53
- export class TestGeneratorFactory {
54
- static create(framework: string, config: RuntimeConfig): TestGenerator {
55
- switch (framework) {
56
- case 'playwright': {
57
- const { CodeGenerator } = require('./code-generator');
58
-
59
- return {
60
- framework: 'playwright',
61
-
62
- async generate(
63
- feature: ParsedFeature,
64
- selectors: Record<string, any>,
65
- testData: Record<string, any>,
66
- cfg: RuntimeConfig
67
- ): Promise<GeneratedTest> {
68
- const startTime = Date.now();
69
-
70
- let screenName: string | undefined;
71
- if (feature.sourceFile) {
72
- const sourceDir = path.dirname(feature.sourceFile);
73
- const parts = sourceDir.split(path.sep);
74
- const screensIndex = parts.indexOf('screens');
75
- if (screensIndex >= 0 && screensIndex < parts.length - 2) {
76
- screenName = parts[screensIndex + 1];
77
- }
78
- }
79
-
80
- const generator = new CodeGenerator({
81
- useAI: cfg.testGenerator.enableAIFallback,
82
- verbose: cfg.verbose,
83
- screenName,
84
- });
85
-
86
- const outputDir = cfg.paths.specsDir;
87
- const result = await generator.generateTest(feature, outputDir);
88
- generator.writeTest(result);
89
-
90
- const countSteps = (f: ParsedFeature) =>
91
- f.scenarios.reduce((sum: number, s: any) => sum + (s.steps ? s.steps.length : 0), 0);
92
- const countTodos = (code: string) => (code.match(/\/\/ TODO/g) || []).length;
93
-
94
- const stats: GenerationStats = {
95
- totalScenarios: feature.scenarios.length,
96
- totalSteps: countSteps(feature),
97
- dictionaryMatched: 0,
98
- aiGenerated: 0,
99
- todoCount: countTodos(result.code),
100
- generationTime: Date.now() - startTime,
101
- };
102
-
103
- return {
104
- feature: feature.name,
105
- outputPath: result.filePath,
106
- code: result.code,
107
- stats,
108
- };
109
- },
110
-
111
- getFileExtension() {
112
- return '.spec.ts';
113
- },
114
-
115
- validate() {
116
- return true;
117
- },
118
- };
119
- }
120
-
121
- case 'appium':
122
- throw new Error('Appium generator not yet implemented');
123
-
124
- case 'integration':
125
- throw new Error('Integration test generator not yet implemented');
126
-
127
- default:
128
- throw new Error(`Unsupported test framework: ${framework}`);
129
- }
130
- }
131
- }
@@ -190,15 +190,33 @@ function convertJapaneseToRomaji(text: string): string {
190
190
 
191
191
  import { SelectorType } from '../../../utils/selector-types';
192
192
 
193
- // New structured selector format
193
+ // Structured selector format v2
194
194
  interface SelectorEntry {
195
- locator?: string; // CSS locator (optional, empty string means use type/value)
196
- type?: SelectorType; // Locator strategy
197
- value?: string; // Natural language value for the locator (e.g., 'button', 'link' for role)
198
- name?: string; // Accessible name for role-based selectors (e.g., 'Login', 'Submit')
199
- nth?: number; // Element index (0 = no index, 1+ = append .nth())
200
- exact?: boolean; // Whether to use exact matching (default: false)
201
- inputMethod?: string; // 'pressSequentially' for contenteditable/rich-text elements
195
+ locator?: string; // CSS locator (optional, empty string means use type/value)
196
+ type?: SelectorType; // Locator strategy
197
+ value?: string; // Natural language value for the locator (e.g., 'button', 'link' for role)
198
+ name?: string; // Accessible name for role-based selectors (e.g., 'Login', 'Submit')
199
+ nth?: number; // Element index (0 = no index, 1+ = append .nth())
200
+ exact?: boolean; // Whether to use exact matching (default: false)
201
+ inputMethod?: string; // 'pressSequentially' for contenteditable/rich-text elements
202
+
203
+ // === v2: Disambiguation ===
204
+ scope?: string; // Parent landmark aria-label to scope within (e.g., 'desktop navigation')
205
+ match?: 'exact' | 'partial'; // For getByText matching (default: partial)
206
+
207
+ // === v2: Complex Elements ===
208
+ variant?: 'native' | 'custom' | 'dragdrop'; // Dropdown/upload subtype
209
+ trigger?: string; // Visible button that triggers hidden file input
210
+ frame?: string; // iframe selector for cross-frame elements
211
+ contenteditable?: boolean; // Rich text editor (contenteditable div)
212
+
213
+ // === v2: Table ===
214
+ columns?: Record<string, { index: number; header: string; elements?: Record<string, SelectorEntry> }>;
215
+ pagination?: Record<string, string>;
216
+
217
+ // === v2: Assertion Helpers ===
218
+ attribute?: string; // Attribute to check (for "has" assertions)
219
+ pattern?: string; // Regex for attribute value
202
220
  }
203
221
 
204
222
  // New selector file structure: flat key-value pairs
@@ -220,12 +238,24 @@ interface LegacySelectorFile {
220
238
  export interface ResolvedSelector {
221
239
  strategy: 'testid' | 'id' | 'placeholder' | 'label' | 'text' | 'css' | 'role' | 'locator';
222
240
  value: string;
223
- role?: string; // For role-based selectors (e.g., 'button', 'link')
224
- name?: string; // For accessible name in role selectors
225
- locator?: string; // CSS locator for fallback
226
- nth?: number; // Index for .nth() if multiple matches exist
227
- exact?: boolean; // Whether to use exact matching (default: false)
241
+ role?: string; // For role-based selectors (e.g., 'button', 'link')
242
+ name?: string; // For accessible name in role selectors
243
+ locator?: string; // CSS locator for fallback
244
+ nth?: number; // Index for .nth() if multiple matches exist
245
+ exact?: boolean; // Whether to use exact matching (default: false)
228
246
  inputMethod?: string; // 'pressSequentially' for contenteditable/rich-text elements
247
+
248
+ // === v2 fields ===
249
+ scope?: string; // Parent landmark to scope within
250
+ match?: 'exact' | 'partial'; // For getByText exact matching
251
+ variant?: 'native' | 'custom' | 'dragdrop'; // Dropdown/upload type
252
+ trigger?: string; // Button that triggers hidden file input
253
+ frame?: string; // iframe selector
254
+ contenteditable?: boolean; // Rich text editor
255
+ columns?: Record<string, { index: number; header: string; elements?: Record<string, any> }>;
256
+ pagination?: Record<string, string>;
257
+ attribute?: string; // Attribute to check
258
+ pattern?: string; // Regex for attribute value
229
259
  }
230
260
 
231
261
  /**
@@ -520,17 +550,32 @@ export class SelectorResolver {
520
550
  // Check if name exists in entry (even if empty string), use it; otherwise use originalLabel
521
551
  const name = entry.name !== undefined && entry.name !== null ? entry.name : originalLabel;
522
552
  const nth = entry.nth || 0;
523
- const exact = entry.exact === true;
553
+ const exact = entry.exact === true || entry.match === 'exact';
524
554
  const inputMethod = entry.inputMethod;
525
555
 
526
- // Helper to attach inputMethod only when present
527
- const withInputMethod = (resolved: ResolvedSelector): ResolvedSelector =>
528
- inputMethod ? { ...resolved, inputMethod } : resolved;
556
+ // v2 fields
557
+ const v2Fields: Partial<ResolvedSelector> = {};
558
+ if (entry.scope) v2Fields.scope = entry.scope;
559
+ if (entry.match) v2Fields.match = entry.match;
560
+ if (entry.variant) v2Fields.variant = entry.variant;
561
+ if (entry.trigger) v2Fields.trigger = entry.trigger;
562
+ if (entry.frame) v2Fields.frame = entry.frame;
563
+ if (entry.contenteditable) v2Fields.contenteditable = true;
564
+ if (entry.columns) v2Fields.columns = entry.columns;
565
+ if (entry.pagination) v2Fields.pagination = entry.pagination;
566
+ if (entry.attribute) v2Fields.attribute = entry.attribute;
567
+ if (entry.pattern) v2Fields.pattern = entry.pattern;
568
+
569
+ // Helper to attach v2 fields and inputMethod
570
+ const withExtras = (resolved: ResolvedSelector): ResolvedSelector => {
571
+ if (inputMethod) resolved.inputMethod = inputMethod;
572
+ return { ...resolved, ...v2Fields };
573
+ };
529
574
 
530
575
  // If type is 'locator', use locator field (or value as fallback) as the CSS locator directly
531
576
  if (type === 'locator') {
532
577
  const locatorValue = locator && locator.trim() ? locator : value;
533
- return withInputMethod({
578
+ return withExtras({
534
579
  strategy: 'locator',
535
580
  value: locatorValue,
536
581
  locator: locatorValue,
@@ -540,7 +585,7 @@ export class SelectorResolver {
540
585
 
541
586
  // If custom locator is provided and type is not 'locator', use it as CSS selector
542
587
  if (locator && locator.trim()) {
543
- return withInputMethod({
588
+ return withExtras({
544
589
  strategy: 'css',
545
590
  value: locator,
546
591
  locator: locator,
@@ -551,7 +596,7 @@ export class SelectorResolver {
551
596
  // Use type-based strategy
552
597
  switch (type) {
553
598
  case 'placeholder':
554
- return withInputMethod({
599
+ return withExtras({
555
600
  strategy: 'placeholder',
556
601
  value,
557
602
  nth,
@@ -559,7 +604,7 @@ export class SelectorResolver {
559
604
  });
560
605
 
561
606
  case 'role':
562
- return withInputMethod({
607
+ return withExtras({
563
608
  strategy: 'role',
564
609
  role: value,
565
610
  name: name, // Use the name field for accessible name
@@ -569,14 +614,14 @@ export class SelectorResolver {
569
614
  });
570
615
 
571
616
  case 'testid':
572
- return withInputMethod({
617
+ return withExtras({
573
618
  strategy: 'testid',
574
619
  value,
575
620
  nth,
576
621
  });
577
622
 
578
623
  case 'label':
579
- return withInputMethod({
624
+ return withExtras({
580
625
  strategy: 'label',
581
626
  value,
582
627
  nth,
@@ -584,7 +629,7 @@ export class SelectorResolver {
584
629
  });
585
630
 
586
631
  case 'text':
587
- return withInputMethod({
632
+ return withExtras({
588
633
  strategy: 'text',
589
634
  value,
590
635
  nth,
@@ -593,7 +638,7 @@ export class SelectorResolver {
593
638
 
594
639
  default:
595
640
  // Fallback to placeholder
596
- return withInputMethod({
641
+ return withExtras({
597
642
  strategy: 'placeholder',
598
643
  value,
599
644
  nth,