@sun-asterisk/sungen 1.0.24 → 2.0.1

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 (378) 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 +10 -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 +5 -3
  56. package/dist/generators/test-generator/step-mapper.d.ts.map +1 -1
  57. package/dist/generators/test-generator/step-mapper.js +38 -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 +12 -0
  71. package/dist/orchestrator/project-initializer.d.ts.map +1 -1
  72. package/dist/orchestrator/project-initializer.js +72 -160
  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/orchestrator/templates/ai-rules.md +189 -0
  79. package/dist/orchestrator/templates/gitignore +16 -0
  80. package/dist/orchestrator/templates/playwright.config.d.ts +10 -0
  81. package/dist/orchestrator/templates/playwright.config.d.ts.map +1 -0
  82. package/dist/orchestrator/templates/playwright.config.js +77 -0
  83. package/dist/orchestrator/templates/playwright.config.js.map +1 -0
  84. package/dist/orchestrator/templates/playwright.config.ts +80 -0
  85. package/dist/orchestrator/templates/readme.md +197 -0
  86. package/dist/utils/selector-types.d.ts +1 -1
  87. package/dist/utils/selector-types.d.ts.map +1 -1
  88. package/dist/utils/selector-types.js +3 -0
  89. package/dist/utils/selector-types.js.map +1 -1
  90. package/docs/gherkin standards/gherkin-core-standard.md +377 -0
  91. package/docs/gherkin standards/gherkin-core-standard.vi.md +303 -0
  92. package/docs/gherkin-dictionary.md +1071 -0
  93. package/docs/makeauth.md +225 -0
  94. package/package.json +4 -3
  95. package/src/cli/commands/add.ts +5 -3
  96. package/src/cli/commands/generate.ts +90 -38
  97. package/src/cli/index.ts +5 -16
  98. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/frame-enter-action.hbs +1 -0
  99. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/frame-exit-action.hbs +1 -0
  100. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/keyboard-global-action.hbs +1 -0
  101. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/scroll-action.hbs +1 -0
  102. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/table-action-in-row.hbs +2 -0
  103. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-cell-by-filter.hbs +3 -0
  104. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-cell-by-index.hbs +3 -0
  105. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-column-exists.hbs +2 -0
  106. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-empty.hbs +2 -0
  107. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-count.hbs +2 -0
  108. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-exists.hbs +2 -0
  109. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-not-exists.hbs +2 -0
  110. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-value-assertion.hbs +1 -1
  111. package/src/generators/test-generator/adapters/playwright/templates/steps/partials/locator-base.hbs +11 -2
  112. package/src/generators/test-generator/adapters/playwright/templates/steps/partials/locator.hbs +11 -2
  113. package/src/generators/test-generator/code-generator.ts +11 -59
  114. package/src/generators/test-generator/patterns/assertion-patterns.ts +2 -0
  115. package/src/generators/test-generator/patterns/index.ts +12 -3
  116. package/src/generators/test-generator/patterns/interaction-patterns.ts +1 -1
  117. package/src/generators/test-generator/patterns/keyboard-patterns.ts +51 -0
  118. package/src/generators/test-generator/patterns/scope-patterns.ts +40 -0
  119. package/src/generators/test-generator/patterns/scroll-patterns.ts +27 -0
  120. package/src/generators/test-generator/patterns/table-patterns.ts +232 -0
  121. package/src/generators/test-generator/step-mapper.ts +42 -27
  122. package/src/generators/test-generator/template-engine.ts +3 -1
  123. package/src/generators/test-generator/types.ts +7 -112
  124. package/src/generators/test-generator/utils/selector-resolver.ts +70 -25
  125. package/src/orchestrator/project-initializer.ts +75 -160
  126. package/src/orchestrator/screen-manager.ts +61 -233
  127. package/src/orchestrator/templates/ai-rules.md +189 -0
  128. package/src/orchestrator/templates/gitignore +16 -0
  129. package/src/orchestrator/templates/playwright.config.ts +80 -0
  130. package/src/orchestrator/templates/readme.md +197 -0
  131. package/src/utils/selector-types.ts +3 -0
  132. package/dist/cli/commands/cache-clear.d.ts +0 -3
  133. package/dist/cli/commands/cache-clear.d.ts.map +0 -1
  134. package/dist/cli/commands/cache-clear.js +0 -24
  135. package/dist/cli/commands/cache-clear.js.map +0 -1
  136. package/dist/cli/commands/full.d.ts +0 -3
  137. package/dist/cli/commands/full.d.ts.map +0 -1
  138. package/dist/cli/commands/full.js +0 -37
  139. package/dist/cli/commands/full.js.map +0 -1
  140. package/dist/cli/commands/live-scan.d.ts +0 -3
  141. package/dist/cli/commands/live-scan.d.ts.map +0 -1
  142. package/dist/cli/commands/live-scan.js +0 -78
  143. package/dist/cli/commands/live-scan.js.map +0 -1
  144. package/dist/cli/commands/map.d.ts +0 -3
  145. package/dist/cli/commands/map.d.ts.map +0 -1
  146. package/dist/cli/commands/map.js +0 -93
  147. package/dist/cli/commands/map.js.map +0 -1
  148. package/dist/cli/commands/validate.d.ts +0 -3
  149. package/dist/cli/commands/validate.d.ts.map +0 -1
  150. package/dist/cli/commands/validate.js +0 -43
  151. package/dist/cli/commands/validate.js.map +0 -1
  152. package/dist/cli/utils.d.ts +0 -6
  153. package/dist/cli/utils.d.ts.map +0 -1
  154. package/dist/cli/utils.js +0 -101
  155. package/dist/cli/utils.js.map +0 -1
  156. package/dist/config/config-loader.d.ts +0 -51
  157. package/dist/config/config-loader.d.ts.map +0 -1
  158. package/dist/config/config-loader.js +0 -216
  159. package/dist/config/config-loader.js.map +0 -1
  160. package/dist/config/config-schema.d.ts +0 -121
  161. package/dist/config/config-schema.d.ts.map +0 -1
  162. package/dist/config/config-schema.js +0 -7
  163. package/dist/config/config-schema.js.map +0 -1
  164. package/dist/core/live-scanner/config-reader.d.ts +0 -10
  165. package/dist/core/live-scanner/config-reader.d.ts.map +0 -1
  166. package/dist/core/live-scanner/config-reader.js +0 -87
  167. package/dist/core/live-scanner/config-reader.js.map +0 -1
  168. package/dist/core/live-scanner/element-finder.d.ts +0 -20
  169. package/dist/core/live-scanner/element-finder.d.ts.map +0 -1
  170. package/dist/core/live-scanner/element-finder.js +0 -481
  171. package/dist/core/live-scanner/element-finder.js.map +0 -1
  172. package/dist/core/live-scanner/index.d.ts +0 -8
  173. package/dist/core/live-scanner/index.d.ts.map +0 -1
  174. package/dist/core/live-scanner/index.js +0 -33
  175. package/dist/core/live-scanner/index.js.map +0 -1
  176. package/dist/core/live-scanner/matrix-reader.d.ts +0 -17
  177. package/dist/core/live-scanner/matrix-reader.d.ts.map +0 -1
  178. package/dist/core/live-scanner/matrix-reader.js +0 -60
  179. package/dist/core/live-scanner/matrix-reader.js.map +0 -1
  180. package/dist/core/live-scanner/matrix-writer.d.ts +0 -7
  181. package/dist/core/live-scanner/matrix-writer.d.ts.map +0 -1
  182. package/dist/core/live-scanner/matrix-writer.js +0 -103
  183. package/dist/core/live-scanner/matrix-writer.js.map +0 -1
  184. package/dist/core/live-scanner/role-fallback.d.ts +0 -15
  185. package/dist/core/live-scanner/role-fallback.d.ts.map +0 -1
  186. package/dist/core/live-scanner/role-fallback.js +0 -46
  187. package/dist/core/live-scanner/role-fallback.js.map +0 -1
  188. package/dist/core/live-scanner/scanner.d.ts +0 -22
  189. package/dist/core/live-scanner/scanner.d.ts.map +0 -1
  190. package/dist/core/live-scanner/scanner.js +0 -303
  191. package/dist/core/live-scanner/scanner.js.map +0 -1
  192. package/dist/core/live-scanner/step-replayer.d.ts +0 -26
  193. package/dist/core/live-scanner/step-replayer.d.ts.map +0 -1
  194. package/dist/core/live-scanner/step-replayer.js +0 -473
  195. package/dist/core/live-scanner/step-replayer.js.map +0 -1
  196. package/dist/core/live-scanner/types.d.ts +0 -52
  197. package/dist/core/live-scanner/types.d.ts.map +0 -1
  198. package/dist/core/live-scanner/types.js +0 -14
  199. package/dist/core/live-scanner/types.js.map +0 -1
  200. package/dist/core/selector-base/annotation-handler.d.ts +0 -45
  201. package/dist/core/selector-base/annotation-handler.d.ts.map +0 -1
  202. package/dist/core/selector-base/annotation-handler.js +0 -102
  203. package/dist/core/selector-base/annotation-handler.js.map +0 -1
  204. package/dist/core/selector-base/base-generator.d.ts +0 -49
  205. package/dist/core/selector-base/base-generator.d.ts.map +0 -1
  206. package/dist/core/selector-base/base-generator.js +0 -214
  207. package/dist/core/selector-base/base-generator.js.map +0 -1
  208. package/dist/core/selector-base/gherkin-parser.d.ts +0 -24
  209. package/dist/core/selector-base/gherkin-parser.d.ts.map +0 -1
  210. package/dist/core/selector-base/gherkin-parser.js +0 -42
  211. package/dist/core/selector-base/gherkin-parser.js.map +0 -1
  212. package/dist/core/selector-mapper/priority-mapper.d.ts +0 -74
  213. package/dist/core/selector-mapper/priority-mapper.d.ts.map +0 -1
  214. package/dist/core/selector-mapper/priority-mapper.js +0 -477
  215. package/dist/core/selector-mapper/priority-mapper.js.map +0 -1
  216. package/dist/core/ui-scanner/heuristics/base-heuristic.d.ts +0 -91
  217. package/dist/core/ui-scanner/heuristics/base-heuristic.d.ts.map +0 -1
  218. package/dist/core/ui-scanner/heuristics/base-heuristic.js +0 -175
  219. package/dist/core/ui-scanner/heuristics/base-heuristic.js.map +0 -1
  220. package/dist/core/ui-scanner/react-scanner.d.ts +0 -32
  221. package/dist/core/ui-scanner/react-scanner.d.ts.map +0 -1
  222. package/dist/core/ui-scanner/react-scanner.js +0 -163
  223. package/dist/core/ui-scanner/react-scanner.js.map +0 -1
  224. package/dist/core/ui-scanner/scanner-interface.d.ts +0 -94
  225. package/dist/core/ui-scanner/scanner-interface.d.ts.map +0 -1
  226. package/dist/core/ui-scanner/scanner-interface.js +0 -33
  227. package/dist/core/ui-scanner/scanner-interface.js.map +0 -1
  228. package/dist/core/ui-scanner/strict-scanner.d.ts +0 -81
  229. package/dist/core/ui-scanner/strict-scanner.d.ts.map +0 -1
  230. package/dist/core/ui-scanner/strict-scanner.js +0 -511
  231. package/dist/core/ui-scanner/strict-scanner.js.map +0 -1
  232. package/dist/core/validator/data-validator.d.ts +0 -38
  233. package/dist/core/validator/data-validator.d.ts.map +0 -1
  234. package/dist/core/validator/data-validator.js +0 -212
  235. package/dist/core/validator/data-validator.js.map +0 -1
  236. package/dist/core/validator/feature-validator.d.ts +0 -27
  237. package/dist/core/validator/feature-validator.d.ts.map +0 -1
  238. package/dist/core/validator/feature-validator.js +0 -182
  239. package/dist/core/validator/feature-validator.js.map +0 -1
  240. package/dist/core/validator/index.d.ts +0 -46
  241. package/dist/core/validator/index.d.ts.map +0 -1
  242. package/dist/core/validator/index.js +0 -17
  243. package/dist/core/validator/index.js.map +0 -1
  244. package/dist/core/validator/screen-validator.d.ts +0 -35
  245. package/dist/core/validator/screen-validator.d.ts.map +0 -1
  246. package/dist/core/validator/screen-validator.js +0 -195
  247. package/dist/core/validator/screen-validator.js.map +0 -1
  248. package/dist/core/validator/selector-validator.d.ts +0 -36
  249. package/dist/core/validator/selector-validator.d.ts.map +0 -1
  250. package/dist/core/validator/selector-validator.js +0 -210
  251. package/dist/core/validator/selector-validator.js.map +0 -1
  252. package/dist/external/ai-provider.d.ts +0 -60
  253. package/dist/external/ai-provider.d.ts.map +0 -1
  254. package/dist/external/ai-provider.js +0 -30
  255. package/dist/external/ai-provider.js.map +0 -1
  256. package/dist/external/anthropic-provider.d.ts +0 -29
  257. package/dist/external/anthropic-provider.d.ts.map +0 -1
  258. package/dist/external/anthropic-provider.js +0 -85
  259. package/dist/external/anthropic-provider.js.map +0 -1
  260. package/dist/generators/cache/cache-manager.d.ts +0 -66
  261. package/dist/generators/cache/cache-manager.d.ts.map +0 -1
  262. package/dist/generators/cache/cache-manager.js +0 -286
  263. package/dist/generators/cache/cache-manager.js.map +0 -1
  264. package/dist/generators/dsl-writer/index.d.ts +0 -33
  265. package/dist/generators/dsl-writer/index.d.ts.map +0 -1
  266. package/dist/generators/dsl-writer/index.js +0 -226
  267. package/dist/generators/dsl-writer/index.js.map +0 -1
  268. package/dist/generators/scaffold-generator/index.d.ts +0 -162
  269. package/dist/generators/scaffold-generator/index.d.ts.map +0 -1
  270. package/dist/generators/scaffold-generator/index.js +0 -877
  271. package/dist/generators/scaffold-generator/index.js.map +0 -1
  272. package/dist/generators/selector-mapper/ai-mapper.d.ts +0 -56
  273. package/dist/generators/selector-mapper/ai-mapper.d.ts.map +0 -1
  274. package/dist/generators/selector-mapper/ai-mapper.js +0 -457
  275. package/dist/generators/selector-mapper/ai-mapper.js.map +0 -1
  276. package/dist/generators/selector-mapper/hybrid-mapper.d.ts +0 -67
  277. package/dist/generators/selector-mapper/hybrid-mapper.d.ts.map +0 -1
  278. package/dist/generators/selector-mapper/hybrid-mapper.js +0 -349
  279. package/dist/generators/selector-mapper/hybrid-mapper.js.map +0 -1
  280. package/dist/generators/selector-mapper/index.d.ts +0 -8
  281. package/dist/generators/selector-mapper/index.d.ts.map +0 -1
  282. package/dist/generators/selector-mapper/index.js +0 -12
  283. package/dist/generators/selector-mapper/index.js.map +0 -1
  284. package/dist/generators/selector-mapper/intelligent-mapper.d.ts +0 -125
  285. package/dist/generators/selector-mapper/intelligent-mapper.d.ts.map +0 -1
  286. package/dist/generators/selector-mapper/intelligent-mapper.js +0 -391
  287. package/dist/generators/selector-mapper/intelligent-mapper.js.map +0 -1
  288. package/dist/generators/test-generator/ai-step-mapper.d.ts +0 -27
  289. package/dist/generators/test-generator/ai-step-mapper.d.ts.map +0 -1
  290. package/dist/generators/test-generator/ai-step-mapper.js +0 -204
  291. package/dist/generators/test-generator/ai-step-mapper.js.map +0 -1
  292. package/dist/generators/test-generator/auth-setup-generator.d.ts +0 -18
  293. package/dist/generators/test-generator/auth-setup-generator.d.ts.map +0 -1
  294. package/dist/generators/test-generator/auth-setup-generator.js +0 -82
  295. package/dist/generators/test-generator/auth-setup-generator.js.map +0 -1
  296. package/dist/generators/test-generator/patterns/legacy-patterns.d.ts +0 -7
  297. package/dist/generators/test-generator/patterns/legacy-patterns.d.ts.map +0 -1
  298. package/dist/generators/test-generator/patterns/legacy-patterns.js +0 -98
  299. package/dist/generators/test-generator/patterns/legacy-patterns.js.map +0 -1
  300. package/dist/generators/test-generator/templates/auth-setup.ts.hbs +0 -36
  301. package/dist/generators/ui-model-builder/deep-scanner.d.ts +0 -121
  302. package/dist/generators/ui-model-builder/deep-scanner.d.ts.map +0 -1
  303. package/dist/generators/ui-model-builder/deep-scanner.js +0 -1113
  304. package/dist/generators/ui-model-builder/deep-scanner.js.map +0 -1
  305. package/dist/generators/ui-model-builder/enhanced-deep-scanner.d.ts +0 -110
  306. package/dist/generators/ui-model-builder/enhanced-deep-scanner.d.ts.map +0 -1
  307. package/dist/generators/ui-model-builder/enhanced-deep-scanner.js +0 -608
  308. package/dist/generators/ui-model-builder/enhanced-deep-scanner.js.map +0 -1
  309. package/dist/generators/ui-model-builder/react-scanner.d.ts +0 -107
  310. package/dist/generators/ui-model-builder/react-scanner.d.ts.map +0 -1
  311. package/dist/generators/ui-model-builder/react-scanner.js +0 -797
  312. package/dist/generators/ui-model-builder/react-scanner.js.map +0 -1
  313. package/dist/orchestrator/cache-manager.d.ts +0 -15
  314. package/dist/orchestrator/cache-manager.d.ts.map +0 -1
  315. package/dist/orchestrator/cache-manager.js +0 -62
  316. package/dist/orchestrator/cache-manager.js.map +0 -1
  317. package/dist/orchestrator/pipeline.d.ts +0 -56
  318. package/dist/orchestrator/pipeline.d.ts.map +0 -1
  319. package/dist/orchestrator/pipeline.js +0 -298
  320. package/dist/orchestrator/pipeline.js.map +0 -1
  321. package/dist/orchestrator/reporter.d.ts +0 -15
  322. package/dist/orchestrator/reporter.d.ts.map +0 -1
  323. package/dist/orchestrator/reporter.js +0 -30
  324. package/dist/orchestrator/reporter.js.map +0 -1
  325. package/src/cli/commands/cache-clear.ts +0 -22
  326. package/src/cli/commands/full.ts +0 -35
  327. package/src/cli/commands/live-scan.ts +0 -82
  328. package/src/cli/commands/map.ts +0 -97
  329. package/src/cli/commands/validate.ts +0 -43
  330. package/src/cli/utils.ts +0 -106
  331. package/src/config/ai-providers.yaml +0 -56
  332. package/src/config/config-loader.ts +0 -248
  333. package/src/config/config-schema.ts +0 -148
  334. package/src/config/default.config.yaml +0 -107
  335. package/src/config/framework.config.yaml +0 -52
  336. package/src/config/routes.yaml +0 -31
  337. package/src/core/live-scanner/config-reader.ts +0 -57
  338. package/src/core/live-scanner/element-finder.ts +0 -534
  339. package/src/core/live-scanner/index.ts +0 -7
  340. package/src/core/live-scanner/matrix-reader.ts +0 -65
  341. package/src/core/live-scanner/matrix-writer.ts +0 -77
  342. package/src/core/live-scanner/role-fallback.ts +0 -44
  343. package/src/core/live-scanner/scanner.ts +0 -321
  344. package/src/core/live-scanner/step-replayer.ts +0 -503
  345. package/src/core/live-scanner/types.ts +0 -58
  346. package/src/core/selector-base/annotation-handler.ts +0 -127
  347. package/src/core/selector-base/base-generator.ts +0 -234
  348. package/src/core/selector-base/gherkin-parser.ts +0 -57
  349. package/src/core/selector-mapper/priority-mapper.ts +0 -607
  350. package/src/core/ui-scanner/heuristics/base-heuristic.ts +0 -216
  351. package/src/core/ui-scanner/react-scanner.ts +0 -156
  352. package/src/core/ui-scanner/scanner-interface.ts +0 -133
  353. package/src/core/ui-scanner/strict-scanner.ts +0 -629
  354. package/src/core/validator/data-validator.ts +0 -202
  355. package/src/core/validator/feature-validator.ts +0 -176
  356. package/src/core/validator/index.ts +0 -57
  357. package/src/core/validator/screen-validator.ts +0 -209
  358. package/src/core/validator/selector-validator.ts +0 -209
  359. package/src/external/ai-provider.ts +0 -90
  360. package/src/external/anthropic-provider.ts +0 -114
  361. package/src/generators/README.md +0 -410
  362. package/src/generators/cache/cache-manager.ts +0 -322
  363. package/src/generators/dsl-writer/index.ts +0 -253
  364. package/src/generators/scaffold-generator/index.ts +0 -1029
  365. package/src/generators/selector-mapper/ai-mapper.ts +0 -528
  366. package/src/generators/selector-mapper/hybrid-mapper.ts +0 -427
  367. package/src/generators/selector-mapper/index.ts +0 -10
  368. package/src/generators/selector-mapper/intelligent-mapper.ts +0 -530
  369. package/src/generators/test-generator/ai-step-mapper.ts +0 -224
  370. package/src/generators/test-generator/auth-setup-generator.ts +0 -59
  371. package/src/generators/test-generator/patterns/legacy-patterns.ts +0 -104
  372. package/src/generators/test-generator/templates/auth-setup.ts.hbs +0 -36
  373. package/src/generators/ui-model-builder/deep-scanner.ts +0 -1244
  374. package/src/generators/ui-model-builder/enhanced-deep-scanner.ts +0 -731
  375. package/src/generators/ui-model-builder/react-scanner.ts +0 -959
  376. package/src/orchestrator/cache-manager.ts +0 -32
  377. package/src/orchestrator/pipeline.ts +0 -354
  378. package/src/orchestrator/reporter.ts +0 -36
@@ -1,530 +0,0 @@
1
- /**
2
- * Intelligent Selector Mapper with Context-Aware Scoring
3
- *
4
- * Maps logical element names (from Gherkin) to actual UI elements using:
5
- * 1. Semantic context understanding
6
- * 2. Multi-criteria scoring algorithm
7
- * 3. Ambiguity detection and resolution
8
- * 4. Reasoning generation for transparency
9
- */
10
-
11
- interface EnhancedUIElement {
12
- key: string;
13
- tag: string;
14
- text: string | null;
15
- testId?: string;
16
- role?: string;
17
- id?: string;
18
- name?: string;
19
- placeholder?: string;
20
- semanticContext: {
21
- purpose: string;
22
- section: string;
23
- interactionType: string;
24
- formContext?: {
25
- formName: string;
26
- fieldName: string;
27
- formPurpose: string;
28
- };
29
- spatialContext: {
30
- precedingText?: string;
31
- followingText?: string;
32
- nearbyLabels?: string[];
33
- };
34
- accessibility: {
35
- ariaRole?: string;
36
- ariaLabel?: string;
37
- implicitRole?: string;
38
- };
39
- };
40
- selectorStrategies: Array<{
41
- type: string;
42
- selector: string;
43
- confidence: string;
44
- stability: string;
45
- playwrightCode?: string;
46
- }>;
47
- }
48
-
49
- interface SelectorMapping {
50
- logicalName: string;
51
- element: EnhancedUIElement;
52
- primary: {
53
- type: string;
54
- selector: string;
55
- playwright: string;
56
- confidence: string;
57
- };
58
- fallbacks: Array<{
59
- type: string;
60
- selector: string;
61
- playwright: string;
62
- }>;
63
- score: number;
64
- reasoning: string[];
65
- contextClues: string[];
66
- ambiguityWarning?: string;
67
- }
68
-
69
- export class IntelligentSelectorMapper {
70
- /**
71
- * Map a logical name to best matching element using context
72
- */
73
- mapElement(
74
- logicalName: string,
75
- elements: EnhancedUIElement[],
76
- gherkinContext?: string
77
- ): SelectorMapping | null {
78
- // 1. Find candidates
79
- const candidates = this.findCandidates(logicalName, elements);
80
-
81
- if (candidates.length === 0) {
82
- console.warn(`⚠️ No candidates found for: ${logicalName}`);
83
- return null;
84
- }
85
-
86
- // 2. Score each candidate
87
- const scored = candidates.map(element => ({
88
- element,
89
- score: this.scoreElement(element, logicalName, gherkinContext),
90
- reasoning: this.generateReasoning(element, logicalName, gherkinContext),
91
- contextClues: this.extractContextClues(element, gherkinContext),
92
- }));
93
-
94
- // 3. Sort by score
95
- scored.sort((a, b) => b.score - a.score);
96
-
97
- // 4. Detect ambiguity
98
- const best = scored[0];
99
- const secondBest = scored[1];
100
- const ambiguityWarning = this.detectAmbiguity(best, secondBest);
101
-
102
- // 5. Build mapping
103
- const primary = this.selectPrimaryStrategy(best.element);
104
- const fallbacks = best.element.selectorStrategies
105
- .filter(s => s !== primary)
106
- .sort((a, b) => this.strategyPriority(b) - this.strategyPriority(a));
107
-
108
- return {
109
- logicalName,
110
- element: best.element,
111
- primary: {
112
- type: primary.type,
113
- selector: primary.selector,
114
- playwright: primary.playwrightCode || primary.selector,
115
- confidence: primary.confidence,
116
- },
117
- fallbacks: fallbacks.map(s => ({
118
- type: s.type,
119
- selector: s.selector,
120
- playwright: s.playwrightCode || s.selector,
121
- })),
122
- score: best.score,
123
- reasoning: best.reasoning,
124
- contextClues: best.contextClues,
125
- ambiguityWarning,
126
- };
127
- }
128
-
129
- /**
130
- * Find candidate elements that might match logical name
131
- */
132
- private findCandidates(logicalName: string, elements: EnhancedUIElement[]): EnhancedUIElement[] {
133
- const normalized = this.normalizeLogicalName(logicalName);
134
- const keywords = normalized.split(/[-_\s]+/);
135
-
136
- return elements.filter(element => {
137
- // Match by text content
138
- if (element.text && this.textMatches(element.text, keywords)) {
139
- return true;
140
- }
141
-
142
- // Match by ARIA label
143
- if (element.semanticContext.accessibility.ariaLabel) {
144
- if (this.textMatches(element.semanticContext.accessibility.ariaLabel, keywords)) {
145
- return true;
146
- }
147
- }
148
-
149
- // Match by form field name
150
- if (element.semanticContext.formContext?.fieldName) {
151
- if (this.textMatches(element.semanticContext.formContext.fieldName, keywords)) {
152
- return true;
153
- }
154
- }
155
-
156
- // Match by element name
157
- if (element.name && this.textMatches(element.name, keywords)) {
158
- return true;
159
- }
160
-
161
- // Match by placeholder
162
- if (element.placeholder && this.textMatches(element.placeholder, keywords)) {
163
- return true;
164
- }
165
-
166
- // Match by purpose + tag
167
- const purposeMatch = keywords.some(k =>
168
- element.semanticContext.purpose.toLowerCase().includes(k)
169
- );
170
- const tagMatch = keywords.some(k => element.tag.toLowerCase().includes(k));
171
-
172
- if (purposeMatch || tagMatch) {
173
- return true;
174
- }
175
-
176
- return false;
177
- });
178
- }
179
-
180
- /**
181
- * Score an element based on how well it matches logical name
182
- */
183
- private scoreElement(
184
- element: EnhancedUIElement,
185
- logicalName: string,
186
- gherkinContext?: string
187
- ): number {
188
- let score = 0;
189
- const normalized = this.normalizeLogicalName(logicalName);
190
- const keywords = normalized.split(/[-_\s]+/);
191
-
192
- // === TEXT CONTENT MATCHING (0-50 points) ===
193
- if (element.text) {
194
- const textNorm = element.text.toLowerCase();
195
- if (textNorm === normalized) {
196
- score += 50; // Exact match
197
- } else if (keywords.every(k => textNorm.includes(k))) {
198
- score += 35; // Contains all keywords
199
- } else if (keywords.some(k => textNorm.includes(k))) {
200
- score += 20; // Contains some keywords
201
- }
202
- }
203
-
204
- // === ARIA LABEL MATCHING (0-45 points) ===
205
- const ariaLabel = element.semanticContext.accessibility.ariaLabel;
206
- if (ariaLabel) {
207
- const ariaNorm = ariaLabel.toLowerCase();
208
- if (ariaNorm === normalized) {
209
- score += 45;
210
- } else if (keywords.every(k => ariaNorm.includes(k))) {
211
- score += 30;
212
- } else if (keywords.some(k => ariaNorm.includes(k))) {
213
- score += 15;
214
- }
215
- }
216
-
217
- // === FORM FIELD NAME MATCHING (0-40 points) ===
218
- if (element.semanticContext.formContext) {
219
- const fieldName = element.semanticContext.formContext.fieldName.toLowerCase();
220
- if (fieldName === normalized) {
221
- score += 40;
222
- } else if (keywords.every(k => fieldName.includes(k))) {
223
- score += 25;
224
- } else if (keywords.some(k => fieldName.includes(k))) {
225
- score += 12;
226
- }
227
- }
228
-
229
- // === NAME ATTRIBUTE MATCHING (0-35 points) ===
230
- if (element.name) {
231
- const nameNorm = element.name.toLowerCase();
232
- if (nameNorm === normalized) {
233
- score += 35;
234
- } else if (keywords.every(k => nameNorm.includes(k))) {
235
- score += 20;
236
- } else if (keywords.some(k => nameNorm.includes(k))) {
237
- score += 10;
238
- }
239
- }
240
-
241
- // === PLACEHOLDER MATCHING (0-30 points) ===
242
- if (element.placeholder) {
243
- const placeholderNorm = element.placeholder.toLowerCase();
244
- if (keywords.every(k => placeholderNorm.includes(k))) {
245
- score += 30;
246
- } else if (keywords.some(k => placeholderNorm.includes(k))) {
247
- score += 15;
248
- }
249
- }
250
-
251
- // === PURPOSE MATCHING (0-20 points) ===
252
- const purposeKeywords = {
253
- button: 'action',
254
- input: 'input',
255
- link: 'navigation',
256
- select: 'input',
257
- checkbox: 'input',
258
- };
259
-
260
- keywords.forEach(keyword => {
261
- if (purposeKeywords[keyword] === element.semanticContext.purpose) {
262
- score += 20;
263
- }
264
- });
265
-
266
- // === TAG MATCHING (0-15 points) ===
267
- keywords.forEach(keyword => {
268
- if (element.tag.toLowerCase() === keyword) {
269
- score += 15;
270
- }
271
- });
272
-
273
- // === GHERKIN CONTEXT MATCHING (0-25 points) ===
274
- if (gherkinContext) {
275
- const contextNorm = gherkinContext.toLowerCase();
276
-
277
- // Preceding text mentioned
278
- if (element.semanticContext.spatialContext.precedingText) {
279
- const preceding = element.semanticContext.spatialContext.precedingText.toLowerCase();
280
- if (contextNorm.includes(preceding)) {
281
- score += 15;
282
- }
283
- }
284
-
285
- // Section mentioned
286
- if (contextNorm.includes(element.semanticContext.section)) {
287
- score += 10;
288
- }
289
-
290
- // Form context mentioned
291
- if (element.semanticContext.formContext) {
292
- const formPurpose = element.semanticContext.formContext.formPurpose;
293
- if (contextNorm.includes(formPurpose)) {
294
- score += 10;
295
- }
296
- }
297
- }
298
-
299
- // === SELECTOR QUALITY BONUS (0-20 points) ===
300
- const hasHighConfARIA = element.selectorStrategies.some(
301
- s => s.type === 'aria' && s.confidence === 'high'
302
- );
303
- if (hasHighConfARIA) {
304
- score += 20;
305
- }
306
-
307
- // === UNIQUENESS PENALTY (0 to -30 points) ===
308
- // This would require passing all elements to check for duplicates
309
- // For now, skip this in basic implementation
310
-
311
- return Math.max(0, score);
312
- }
313
-
314
- /**
315
- * Generate human-readable reasoning for the mapping
316
- */
317
- private generateReasoning(
318
- element: EnhancedUIElement,
319
- logicalName: string,
320
- gherkinContext?: string
321
- ): string[] {
322
- const reasons: string[] = [];
323
-
324
- // Text match
325
- if (element.text) {
326
- reasons.push(`Text: "${element.text}"`);
327
- }
328
-
329
- // ARIA label
330
- if (element.semanticContext.accessibility.ariaLabel) {
331
- reasons.push(`ARIA label: "${element.semanticContext.accessibility.ariaLabel}"`);
332
- }
333
-
334
- // Form context
335
- if (element.semanticContext.formContext) {
336
- reasons.push(
337
- `Form field: ${element.semanticContext.formContext.formName}/${element.semanticContext.formContext.fieldName}`
338
- );
339
- }
340
-
341
- // Element type
342
- reasons.push(`Element: <${element.tag}>`);
343
-
344
- // Purpose
345
- reasons.push(`Purpose: ${element.semanticContext.purpose}`);
346
-
347
- // Section
348
- if (element.semanticContext.section !== 'main') {
349
- reasons.push(`Section: ${element.semanticContext.section}`);
350
- }
351
-
352
- // Preceding text
353
- if (element.semanticContext.spatialContext.precedingText) {
354
- reasons.push(`After: "${element.semanticContext.spatialContext.precedingText}"`);
355
- }
356
-
357
- return reasons;
358
- }
359
-
360
- /**
361
- * Extract context clues that helped with matching
362
- */
363
- private extractContextClues(
364
- element: EnhancedUIElement,
365
- gherkinContext?: string
366
- ): string[] {
367
- const clues: string[] = [];
368
-
369
- if (element.semanticContext.section !== 'main') {
370
- clues.push(`section:${element.semanticContext.section}`);
371
- }
372
-
373
- if (element.semanticContext.formContext) {
374
- clues.push(`form:${element.semanticContext.formContext.formName}`);
375
- }
376
-
377
- if (element.semanticContext.accessibility.ariaLabel) {
378
- clues.push(`aria-label`);
379
- }
380
-
381
- if (element.semanticContext.spatialContext.precedingText) {
382
- clues.push(`has-preceding-text`);
383
- }
384
-
385
- if (gherkinContext) {
386
- clues.push(`gherkin-context-used`);
387
- }
388
-
389
- return clues;
390
- }
391
-
392
- /**
393
- * Detect if there's ambiguity between top candidates
394
- */
395
- private detectAmbiguity(
396
- best: { score: number; element: EnhancedUIElement },
397
- secondBest?: { score: number; element: EnhancedUIElement }
398
- ): string | undefined {
399
- if (!secondBest) return undefined;
400
-
401
- const scoreDiff = best.score - secondBest.score;
402
-
403
- if (scoreDiff < 10) {
404
- return `⚠️ Low confidence - score difference only ${scoreDiff} points. Consider adding more specific identifiers.`;
405
- }
406
-
407
- if (scoreDiff < 20) {
408
- return `⚠️ Moderate confidence - multiple similar elements found.`;
409
- }
410
-
411
- return undefined;
412
- }
413
-
414
- /**
415
- * Select the best selector strategy for an element
416
- */
417
- private selectPrimaryStrategy(element: EnhancedUIElement): any {
418
- // Priority: high-conf ARIA > high-conf semantic > testid > medium-conf ARIA > CSS
419
- const strategies = element.selectorStrategies;
420
-
421
- // Try high-confidence ARIA first
422
- const highAria = strategies.find(s => s.type === 'aria' && s.confidence === 'high');
423
- if (highAria) return highAria;
424
-
425
- // Try high-confidence semantic
426
- const highSemantic = strategies.find(s => s.type === 'semantic' && s.confidence === 'high');
427
- if (highSemantic) return highSemantic;
428
-
429
- // Try testid
430
- const testid = strategies.find(s => s.type === 'testid');
431
- if (testid) return testid;
432
-
433
- // Try medium-confidence ARIA
434
- const medAria = strategies.find(s => s.type === 'aria' && s.confidence === 'medium');
435
- if (medAria) return medAria;
436
-
437
- // Try any semantic
438
- const semantic = strategies.find(s => s.type === 'semantic');
439
- if (semantic) return semantic;
440
-
441
- // Fallback to first available
442
- return strategies[0];
443
- }
444
-
445
- /**
446
- * Get priority score for a strategy type
447
- */
448
- private strategyPriority(strategy: any): number {
449
- const priorities = {
450
- aria: { high: 100, medium: 80, low: 60 },
451
- semantic: { high: 90, medium: 70, low: 50 },
452
- testid: { high: 85, medium: 85, low: 85 },
453
- css: { high: 40, medium: 30, low: 20 },
454
- };
455
-
456
- const typePriority = priorities[strategy.type] || { high: 10, medium: 5, low: 1 };
457
- return typePriority[strategy.confidence] || 1;
458
- }
459
-
460
- /**
461
- * Normalize logical name for comparison
462
- */
463
- private normalizeLogicalName(name: string): string {
464
- return name
465
- .toLowerCase()
466
- .replace(/[-_.]/g, ' ')
467
- .replace(/\s+/g, ' ')
468
- .trim();
469
- }
470
-
471
- /**
472
- * Check if text matches keywords
473
- */
474
- private textMatches(text: string, keywords: string[]): boolean {
475
- const textNorm = text.toLowerCase();
476
- return keywords.some(keyword => textNorm.includes(keyword));
477
- }
478
-
479
- /**
480
- * Map multiple logical names at once
481
- */
482
- mapElements(
483
- logicalNames: string[],
484
- elements: EnhancedUIElement[],
485
- gherkinContexts?: Record<string, string>
486
- ): Record<string, SelectorMapping | null> {
487
- const mappings: Record<string, SelectorMapping | null> = {};
488
-
489
- logicalNames.forEach(name => {
490
- const context = gherkinContexts?.[name];
491
- mappings[name] = this.mapElement(name, elements, context);
492
- });
493
-
494
- return mappings;
495
- }
496
-
497
- /**
498
- * Generate statistics about mappings
499
- */
500
- generateStats(mappings: Record<string, SelectorMapping | null>) {
501
- const total = Object.keys(mappings).length;
502
- const successful = Object.values(mappings).filter(m => m !== null).length;
503
- const failed = total - successful;
504
-
505
- const selectorTypeBreakdown: Record<string, number> = {};
506
- const confidenceBreakdown: Record<string, number> = {};
507
- const ambiguityCount = Object.values(mappings).filter(
508
- m => m && m.ambiguityWarning
509
- ).length;
510
-
511
- Object.values(mappings).forEach(mapping => {
512
- if (mapping) {
513
- selectorTypeBreakdown[mapping.primary.type] =
514
- (selectorTypeBreakdown[mapping.primary.type] || 0) + 1;
515
- confidenceBreakdown[mapping.primary.confidence] =
516
- (confidenceBreakdown[mapping.primary.confidence] || 0) + 1;
517
- }
518
- });
519
-
520
- return {
521
- total,
522
- successful,
523
- failed,
524
- successRate: ((successful / total) * 100).toFixed(1) + '%',
525
- selectorTypeBreakdown,
526
- confidenceBreakdown,
527
- ambiguityCount,
528
- };
529
- }
530
- }