@sun-asterisk/sungen 1.0.23 → 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 (364) 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/label-value-assertion.hbs +2 -0
  17. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-cell-by-filter.hbs +3 -0
  18. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-cell-by-index.hbs +3 -0
  19. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-column-exists.hbs +2 -0
  20. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-empty.hbs +2 -0
  21. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-count.hbs +2 -0
  22. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-exists.hbs +2 -0
  23. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-not-exists.hbs +2 -0
  24. package/dist/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-value-assertion.hbs +1 -1
  25. package/dist/generators/test-generator/adapters/playwright/templates/steps/partials/locator-base.hbs +11 -2
  26. package/dist/generators/test-generator/adapters/playwright/templates/steps/partials/locator.hbs +11 -2
  27. package/dist/generators/test-generator/code-generator.d.ts +0 -1
  28. package/dist/generators/test-generator/code-generator.d.ts.map +1 -1
  29. package/dist/generators/test-generator/code-generator.js +0 -47
  30. package/dist/generators/test-generator/code-generator.js.map +1 -1
  31. package/dist/generators/test-generator/patterns/assertion-patterns.d.ts.map +1 -1
  32. package/dist/generators/test-generator/patterns/assertion-patterns.js +33 -8
  33. package/dist/generators/test-generator/patterns/assertion-patterns.js.map +1 -1
  34. package/dist/generators/test-generator/patterns/index.d.ts +4 -1
  35. package/dist/generators/test-generator/patterns/index.d.ts.map +1 -1
  36. package/dist/generators/test-generator/patterns/index.js +17 -5
  37. package/dist/generators/test-generator/patterns/index.js.map +1 -1
  38. package/dist/generators/test-generator/patterns/interaction-patterns.js +1 -1
  39. package/dist/generators/test-generator/patterns/interaction-patterns.js.map +1 -1
  40. package/dist/generators/test-generator/patterns/keyboard-patterns.d.ts +7 -0
  41. package/dist/generators/test-generator/patterns/keyboard-patterns.d.ts.map +1 -0
  42. package/dist/generators/test-generator/patterns/keyboard-patterns.js +47 -0
  43. package/dist/generators/test-generator/patterns/keyboard-patterns.js.map +1 -0
  44. package/dist/generators/test-generator/patterns/scope-patterns.d.ts +7 -0
  45. package/dist/generators/test-generator/patterns/scope-patterns.d.ts.map +1 -0
  46. package/dist/generators/test-generator/patterns/scope-patterns.js +36 -0
  47. package/dist/generators/test-generator/patterns/scope-patterns.js.map +1 -0
  48. package/dist/generators/test-generator/patterns/scroll-patterns.d.ts +7 -0
  49. package/dist/generators/test-generator/patterns/scroll-patterns.d.ts.map +1 -0
  50. package/dist/generators/test-generator/patterns/scroll-patterns.js +25 -0
  51. package/dist/generators/test-generator/patterns/scroll-patterns.js.map +1 -0
  52. package/dist/generators/test-generator/patterns/table-patterns.d.ts +7 -0
  53. package/dist/generators/test-generator/patterns/table-patterns.d.ts.map +1 -0
  54. package/dist/generators/test-generator/patterns/table-patterns.js +192 -0
  55. package/dist/generators/test-generator/patterns/table-patterns.js.map +1 -0
  56. package/dist/generators/test-generator/step-mapper.d.ts +1 -3
  57. package/dist/generators/test-generator/step-mapper.d.ts.map +1 -1
  58. package/dist/generators/test-generator/step-mapper.js +36 -34
  59. package/dist/generators/test-generator/step-mapper.js.map +1 -1
  60. package/dist/generators/test-generator/template-engine.d.ts.map +1 -1
  61. package/dist/generators/test-generator/template-engine.js +4 -1
  62. package/dist/generators/test-generator/template-engine.js.map +1 -1
  63. package/dist/generators/test-generator/types.d.ts +7 -24
  64. package/dist/generators/test-generator/types.d.ts.map +1 -1
  65. package/dist/generators/test-generator/types.js +2 -101
  66. package/dist/generators/test-generator/types.js.map +1 -1
  67. package/dist/generators/test-generator/utils/selector-resolver.d.ts +14 -0
  68. package/dist/generators/test-generator/utils/selector-resolver.d.ts.map +1 -1
  69. package/dist/generators/test-generator/utils/selector-resolver.js +37 -11
  70. package/dist/generators/test-generator/utils/selector-resolver.js.map +1 -1
  71. package/dist/orchestrator/project-initializer.d.ts +8 -0
  72. package/dist/orchestrator/project-initializer.d.ts.map +1 -1
  73. package/dist/orchestrator/project-initializer.js +343 -32
  74. package/dist/orchestrator/project-initializer.js.map +1 -1
  75. package/dist/orchestrator/screen-manager.d.ts +1 -32
  76. package/dist/orchestrator/screen-manager.d.ts.map +1 -1
  77. package/dist/orchestrator/screen-manager.js +55 -216
  78. package/dist/orchestrator/screen-manager.js.map +1 -1
  79. package/dist/utils/selector-types.d.ts +1 -1
  80. package/dist/utils/selector-types.d.ts.map +1 -1
  81. package/dist/utils/selector-types.js +3 -0
  82. package/dist/utils/selector-types.js.map +1 -1
  83. package/package.json +2 -2
  84. package/src/cli/commands/add.ts +5 -3
  85. package/src/cli/commands/generate.ts +90 -38
  86. package/src/cli/index.ts +5 -16
  87. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/frame-enter-action.hbs +1 -0
  88. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/frame-exit-action.hbs +1 -0
  89. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/keyboard-global-action.hbs +1 -0
  90. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/scroll-action.hbs +1 -0
  91. package/src/generators/test-generator/adapters/playwright/templates/steps/actions/table-action-in-row.hbs +2 -0
  92. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/label-value-assertion.hbs +2 -0
  93. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-cell-by-filter.hbs +3 -0
  94. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-cell-by-index.hbs +3 -0
  95. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-column-exists.hbs +2 -0
  96. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-empty.hbs +2 -0
  97. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-count.hbs +2 -0
  98. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-exists.hbs +2 -0
  99. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/table-row-not-exists.hbs +2 -0
  100. package/src/generators/test-generator/adapters/playwright/templates/steps/assertions/visible-with-value-assertion.hbs +1 -1
  101. package/src/generators/test-generator/adapters/playwright/templates/steps/partials/locator-base.hbs +11 -2
  102. package/src/generators/test-generator/adapters/playwright/templates/steps/partials/locator.hbs +11 -2
  103. package/src/generators/test-generator/code-generator.ts +0 -59
  104. package/src/generators/test-generator/patterns/assertion-patterns.ts +39 -8
  105. package/src/generators/test-generator/patterns/index.ts +12 -3
  106. package/src/generators/test-generator/patterns/interaction-patterns.ts +1 -1
  107. package/src/generators/test-generator/patterns/keyboard-patterns.ts +51 -0
  108. package/src/generators/test-generator/patterns/scope-patterns.ts +40 -0
  109. package/src/generators/test-generator/patterns/scroll-patterns.ts +27 -0
  110. package/src/generators/test-generator/patterns/table-patterns.ts +232 -0
  111. package/src/generators/test-generator/step-mapper.ts +39 -34
  112. package/src/generators/test-generator/template-engine.ts +3 -1
  113. package/src/generators/test-generator/types.ts +7 -112
  114. package/src/generators/test-generator/utils/selector-resolver.ts +70 -25
  115. package/src/orchestrator/project-initializer.ts +345 -32
  116. package/src/orchestrator/screen-manager.ts +61 -233
  117. package/src/utils/selector-types.ts +3 -0
  118. package/dist/cli/commands/cache-clear.d.ts +0 -3
  119. package/dist/cli/commands/cache-clear.d.ts.map +0 -1
  120. package/dist/cli/commands/cache-clear.js +0 -24
  121. package/dist/cli/commands/cache-clear.js.map +0 -1
  122. package/dist/cli/commands/full.d.ts +0 -3
  123. package/dist/cli/commands/full.d.ts.map +0 -1
  124. package/dist/cli/commands/full.js +0 -37
  125. package/dist/cli/commands/full.js.map +0 -1
  126. package/dist/cli/commands/live-scan.d.ts +0 -3
  127. package/dist/cli/commands/live-scan.d.ts.map +0 -1
  128. package/dist/cli/commands/live-scan.js +0 -78
  129. package/dist/cli/commands/live-scan.js.map +0 -1
  130. package/dist/cli/commands/map.d.ts +0 -3
  131. package/dist/cli/commands/map.d.ts.map +0 -1
  132. package/dist/cli/commands/map.js +0 -93
  133. package/dist/cli/commands/map.js.map +0 -1
  134. package/dist/cli/commands/validate.d.ts +0 -3
  135. package/dist/cli/commands/validate.d.ts.map +0 -1
  136. package/dist/cli/commands/validate.js +0 -43
  137. package/dist/cli/commands/validate.js.map +0 -1
  138. package/dist/cli/utils.d.ts +0 -6
  139. package/dist/cli/utils.d.ts.map +0 -1
  140. package/dist/cli/utils.js +0 -101
  141. package/dist/cli/utils.js.map +0 -1
  142. package/dist/config/config-loader.d.ts +0 -51
  143. package/dist/config/config-loader.d.ts.map +0 -1
  144. package/dist/config/config-loader.js +0 -216
  145. package/dist/config/config-loader.js.map +0 -1
  146. package/dist/config/config-schema.d.ts +0 -121
  147. package/dist/config/config-schema.d.ts.map +0 -1
  148. package/dist/config/config-schema.js +0 -7
  149. package/dist/config/config-schema.js.map +0 -1
  150. package/dist/core/live-scanner/config-reader.d.ts +0 -10
  151. package/dist/core/live-scanner/config-reader.d.ts.map +0 -1
  152. package/dist/core/live-scanner/config-reader.js +0 -87
  153. package/dist/core/live-scanner/config-reader.js.map +0 -1
  154. package/dist/core/live-scanner/element-finder.d.ts +0 -20
  155. package/dist/core/live-scanner/element-finder.d.ts.map +0 -1
  156. package/dist/core/live-scanner/element-finder.js +0 -486
  157. package/dist/core/live-scanner/element-finder.js.map +0 -1
  158. package/dist/core/live-scanner/index.d.ts +0 -8
  159. package/dist/core/live-scanner/index.d.ts.map +0 -1
  160. package/dist/core/live-scanner/index.js +0 -33
  161. package/dist/core/live-scanner/index.js.map +0 -1
  162. package/dist/core/live-scanner/matrix-reader.d.ts +0 -17
  163. package/dist/core/live-scanner/matrix-reader.d.ts.map +0 -1
  164. package/dist/core/live-scanner/matrix-reader.js +0 -60
  165. package/dist/core/live-scanner/matrix-reader.js.map +0 -1
  166. package/dist/core/live-scanner/matrix-writer.d.ts +0 -7
  167. package/dist/core/live-scanner/matrix-writer.d.ts.map +0 -1
  168. package/dist/core/live-scanner/matrix-writer.js +0 -103
  169. package/dist/core/live-scanner/matrix-writer.js.map +0 -1
  170. package/dist/core/live-scanner/role-fallback.d.ts +0 -15
  171. package/dist/core/live-scanner/role-fallback.d.ts.map +0 -1
  172. package/dist/core/live-scanner/role-fallback.js +0 -45
  173. package/dist/core/live-scanner/role-fallback.js.map +0 -1
  174. package/dist/core/live-scanner/scanner.d.ts +0 -13
  175. package/dist/core/live-scanner/scanner.d.ts.map +0 -1
  176. package/dist/core/live-scanner/scanner.js +0 -243
  177. package/dist/core/live-scanner/scanner.js.map +0 -1
  178. package/dist/core/live-scanner/step-replayer.d.ts +0 -26
  179. package/dist/core/live-scanner/step-replayer.d.ts.map +0 -1
  180. package/dist/core/live-scanner/step-replayer.js +0 -286
  181. package/dist/core/live-scanner/step-replayer.js.map +0 -1
  182. package/dist/core/live-scanner/types.d.ts +0 -52
  183. package/dist/core/live-scanner/types.d.ts.map +0 -1
  184. package/dist/core/live-scanner/types.js +0 -14
  185. package/dist/core/live-scanner/types.js.map +0 -1
  186. package/dist/core/selector-base/annotation-handler.d.ts +0 -45
  187. package/dist/core/selector-base/annotation-handler.d.ts.map +0 -1
  188. package/dist/core/selector-base/annotation-handler.js +0 -102
  189. package/dist/core/selector-base/annotation-handler.js.map +0 -1
  190. package/dist/core/selector-base/base-generator.d.ts +0 -49
  191. package/dist/core/selector-base/base-generator.d.ts.map +0 -1
  192. package/dist/core/selector-base/base-generator.js +0 -214
  193. package/dist/core/selector-base/base-generator.js.map +0 -1
  194. package/dist/core/selector-base/gherkin-parser.d.ts +0 -24
  195. package/dist/core/selector-base/gherkin-parser.d.ts.map +0 -1
  196. package/dist/core/selector-base/gherkin-parser.js +0 -42
  197. package/dist/core/selector-base/gherkin-parser.js.map +0 -1
  198. package/dist/core/selector-mapper/priority-mapper.d.ts +0 -74
  199. package/dist/core/selector-mapper/priority-mapper.d.ts.map +0 -1
  200. package/dist/core/selector-mapper/priority-mapper.js +0 -477
  201. package/dist/core/selector-mapper/priority-mapper.js.map +0 -1
  202. package/dist/core/ui-scanner/heuristics/base-heuristic.d.ts +0 -91
  203. package/dist/core/ui-scanner/heuristics/base-heuristic.d.ts.map +0 -1
  204. package/dist/core/ui-scanner/heuristics/base-heuristic.js +0 -175
  205. package/dist/core/ui-scanner/heuristics/base-heuristic.js.map +0 -1
  206. package/dist/core/ui-scanner/react-scanner.d.ts +0 -32
  207. package/dist/core/ui-scanner/react-scanner.d.ts.map +0 -1
  208. package/dist/core/ui-scanner/react-scanner.js +0 -163
  209. package/dist/core/ui-scanner/react-scanner.js.map +0 -1
  210. package/dist/core/ui-scanner/scanner-interface.d.ts +0 -94
  211. package/dist/core/ui-scanner/scanner-interface.d.ts.map +0 -1
  212. package/dist/core/ui-scanner/scanner-interface.js +0 -33
  213. package/dist/core/ui-scanner/scanner-interface.js.map +0 -1
  214. package/dist/core/ui-scanner/strict-scanner.d.ts +0 -81
  215. package/dist/core/ui-scanner/strict-scanner.d.ts.map +0 -1
  216. package/dist/core/ui-scanner/strict-scanner.js +0 -511
  217. package/dist/core/ui-scanner/strict-scanner.js.map +0 -1
  218. package/dist/core/validator/data-validator.d.ts +0 -38
  219. package/dist/core/validator/data-validator.d.ts.map +0 -1
  220. package/dist/core/validator/data-validator.js +0 -212
  221. package/dist/core/validator/data-validator.js.map +0 -1
  222. package/dist/core/validator/feature-validator.d.ts +0 -27
  223. package/dist/core/validator/feature-validator.d.ts.map +0 -1
  224. package/dist/core/validator/feature-validator.js +0 -182
  225. package/dist/core/validator/feature-validator.js.map +0 -1
  226. package/dist/core/validator/index.d.ts +0 -46
  227. package/dist/core/validator/index.d.ts.map +0 -1
  228. package/dist/core/validator/index.js +0 -17
  229. package/dist/core/validator/index.js.map +0 -1
  230. package/dist/core/validator/screen-validator.d.ts +0 -35
  231. package/dist/core/validator/screen-validator.d.ts.map +0 -1
  232. package/dist/core/validator/screen-validator.js +0 -195
  233. package/dist/core/validator/screen-validator.js.map +0 -1
  234. package/dist/core/validator/selector-validator.d.ts +0 -36
  235. package/dist/core/validator/selector-validator.d.ts.map +0 -1
  236. package/dist/core/validator/selector-validator.js +0 -210
  237. package/dist/core/validator/selector-validator.js.map +0 -1
  238. package/dist/external/ai-provider.d.ts +0 -60
  239. package/dist/external/ai-provider.d.ts.map +0 -1
  240. package/dist/external/ai-provider.js +0 -30
  241. package/dist/external/ai-provider.js.map +0 -1
  242. package/dist/external/anthropic-provider.d.ts +0 -29
  243. package/dist/external/anthropic-provider.d.ts.map +0 -1
  244. package/dist/external/anthropic-provider.js +0 -85
  245. package/dist/external/anthropic-provider.js.map +0 -1
  246. package/dist/generators/cache/cache-manager.d.ts +0 -66
  247. package/dist/generators/cache/cache-manager.d.ts.map +0 -1
  248. package/dist/generators/cache/cache-manager.js +0 -286
  249. package/dist/generators/cache/cache-manager.js.map +0 -1
  250. package/dist/generators/dsl-writer/index.d.ts +0 -33
  251. package/dist/generators/dsl-writer/index.d.ts.map +0 -1
  252. package/dist/generators/dsl-writer/index.js +0 -226
  253. package/dist/generators/dsl-writer/index.js.map +0 -1
  254. package/dist/generators/scaffold-generator/index.d.ts +0 -162
  255. package/dist/generators/scaffold-generator/index.d.ts.map +0 -1
  256. package/dist/generators/scaffold-generator/index.js +0 -868
  257. package/dist/generators/scaffold-generator/index.js.map +0 -1
  258. package/dist/generators/selector-mapper/ai-mapper.d.ts +0 -56
  259. package/dist/generators/selector-mapper/ai-mapper.d.ts.map +0 -1
  260. package/dist/generators/selector-mapper/ai-mapper.js +0 -457
  261. package/dist/generators/selector-mapper/ai-mapper.js.map +0 -1
  262. package/dist/generators/selector-mapper/hybrid-mapper.d.ts +0 -67
  263. package/dist/generators/selector-mapper/hybrid-mapper.d.ts.map +0 -1
  264. package/dist/generators/selector-mapper/hybrid-mapper.js +0 -349
  265. package/dist/generators/selector-mapper/hybrid-mapper.js.map +0 -1
  266. package/dist/generators/selector-mapper/index.d.ts +0 -8
  267. package/dist/generators/selector-mapper/index.d.ts.map +0 -1
  268. package/dist/generators/selector-mapper/index.js +0 -12
  269. package/dist/generators/selector-mapper/index.js.map +0 -1
  270. package/dist/generators/selector-mapper/intelligent-mapper.d.ts +0 -125
  271. package/dist/generators/selector-mapper/intelligent-mapper.d.ts.map +0 -1
  272. package/dist/generators/selector-mapper/intelligent-mapper.js +0 -391
  273. package/dist/generators/selector-mapper/intelligent-mapper.js.map +0 -1
  274. package/dist/generators/test-generator/ai-step-mapper.d.ts +0 -27
  275. package/dist/generators/test-generator/ai-step-mapper.d.ts.map +0 -1
  276. package/dist/generators/test-generator/ai-step-mapper.js +0 -204
  277. package/dist/generators/test-generator/ai-step-mapper.js.map +0 -1
  278. package/dist/generators/test-generator/auth-setup-generator.d.ts +0 -18
  279. package/dist/generators/test-generator/auth-setup-generator.d.ts.map +0 -1
  280. package/dist/generators/test-generator/auth-setup-generator.js +0 -82
  281. package/dist/generators/test-generator/auth-setup-generator.js.map +0 -1
  282. package/dist/generators/test-generator/patterns/legacy-patterns.d.ts +0 -7
  283. package/dist/generators/test-generator/patterns/legacy-patterns.d.ts.map +0 -1
  284. package/dist/generators/test-generator/patterns/legacy-patterns.js +0 -98
  285. package/dist/generators/test-generator/patterns/legacy-patterns.js.map +0 -1
  286. package/dist/generators/test-generator/templates/auth-setup.ts.hbs +0 -36
  287. package/dist/generators/ui-model-builder/deep-scanner.d.ts +0 -121
  288. package/dist/generators/ui-model-builder/deep-scanner.d.ts.map +0 -1
  289. package/dist/generators/ui-model-builder/deep-scanner.js +0 -1113
  290. package/dist/generators/ui-model-builder/deep-scanner.js.map +0 -1
  291. package/dist/generators/ui-model-builder/enhanced-deep-scanner.d.ts +0 -110
  292. package/dist/generators/ui-model-builder/enhanced-deep-scanner.d.ts.map +0 -1
  293. package/dist/generators/ui-model-builder/enhanced-deep-scanner.js +0 -608
  294. package/dist/generators/ui-model-builder/enhanced-deep-scanner.js.map +0 -1
  295. package/dist/generators/ui-model-builder/react-scanner.d.ts +0 -107
  296. package/dist/generators/ui-model-builder/react-scanner.d.ts.map +0 -1
  297. package/dist/generators/ui-model-builder/react-scanner.js +0 -797
  298. package/dist/generators/ui-model-builder/react-scanner.js.map +0 -1
  299. package/dist/orchestrator/cache-manager.d.ts +0 -15
  300. package/dist/orchestrator/cache-manager.d.ts.map +0 -1
  301. package/dist/orchestrator/cache-manager.js +0 -62
  302. package/dist/orchestrator/cache-manager.js.map +0 -1
  303. package/dist/orchestrator/pipeline.d.ts +0 -56
  304. package/dist/orchestrator/pipeline.d.ts.map +0 -1
  305. package/dist/orchestrator/pipeline.js +0 -298
  306. package/dist/orchestrator/pipeline.js.map +0 -1
  307. package/dist/orchestrator/reporter.d.ts +0 -15
  308. package/dist/orchestrator/reporter.d.ts.map +0 -1
  309. package/dist/orchestrator/reporter.js +0 -30
  310. package/dist/orchestrator/reporter.js.map +0 -1
  311. package/src/cli/commands/cache-clear.ts +0 -22
  312. package/src/cli/commands/full.ts +0 -35
  313. package/src/cli/commands/live-scan.ts +0 -82
  314. package/src/cli/commands/map.ts +0 -97
  315. package/src/cli/commands/validate.ts +0 -43
  316. package/src/cli/utils.ts +0 -106
  317. package/src/config/ai-providers.yaml +0 -56
  318. package/src/config/config-loader.ts +0 -248
  319. package/src/config/config-schema.ts +0 -148
  320. package/src/config/default.config.yaml +0 -107
  321. package/src/config/framework.config.yaml +0 -52
  322. package/src/config/routes.yaml +0 -31
  323. package/src/core/live-scanner/config-reader.ts +0 -57
  324. package/src/core/live-scanner/element-finder.ts +0 -541
  325. package/src/core/live-scanner/index.ts +0 -7
  326. package/src/core/live-scanner/matrix-reader.ts +0 -65
  327. package/src/core/live-scanner/matrix-writer.ts +0 -77
  328. package/src/core/live-scanner/role-fallback.ts +0 -43
  329. package/src/core/live-scanner/scanner.ts +0 -254
  330. package/src/core/live-scanner/step-replayer.ts +0 -306
  331. package/src/core/live-scanner/types.ts +0 -58
  332. package/src/core/selector-base/annotation-handler.ts +0 -127
  333. package/src/core/selector-base/base-generator.ts +0 -234
  334. package/src/core/selector-base/gherkin-parser.ts +0 -57
  335. package/src/core/selector-mapper/priority-mapper.ts +0 -607
  336. package/src/core/ui-scanner/heuristics/base-heuristic.ts +0 -216
  337. package/src/core/ui-scanner/react-scanner.ts +0 -156
  338. package/src/core/ui-scanner/scanner-interface.ts +0 -133
  339. package/src/core/ui-scanner/strict-scanner.ts +0 -629
  340. package/src/core/validator/data-validator.ts +0 -202
  341. package/src/core/validator/feature-validator.ts +0 -176
  342. package/src/core/validator/index.ts +0 -57
  343. package/src/core/validator/screen-validator.ts +0 -209
  344. package/src/core/validator/selector-validator.ts +0 -209
  345. package/src/external/ai-provider.ts +0 -90
  346. package/src/external/anthropic-provider.ts +0 -114
  347. package/src/generators/README.md +0 -410
  348. package/src/generators/cache/cache-manager.ts +0 -322
  349. package/src/generators/dsl-writer/index.ts +0 -253
  350. package/src/generators/scaffold-generator/index.ts +0 -1019
  351. package/src/generators/selector-mapper/ai-mapper.ts +0 -528
  352. package/src/generators/selector-mapper/hybrid-mapper.ts +0 -427
  353. package/src/generators/selector-mapper/index.ts +0 -10
  354. package/src/generators/selector-mapper/intelligent-mapper.ts +0 -530
  355. package/src/generators/test-generator/ai-step-mapper.ts +0 -224
  356. package/src/generators/test-generator/auth-setup-generator.ts +0 -59
  357. package/src/generators/test-generator/patterns/legacy-patterns.ts +0 -104
  358. package/src/generators/test-generator/templates/auth-setup.ts.hbs +0 -36
  359. package/src/generators/ui-model-builder/deep-scanner.ts +0 -1244
  360. package/src/generators/ui-model-builder/enhanced-deep-scanner.ts +0 -731
  361. package/src/generators/ui-model-builder/react-scanner.ts +0 -959
  362. package/src/orchestrator/cache-manager.ts +0 -32
  363. package/src/orchestrator/pipeline.ts +0 -354
  364. package/src/orchestrator/reporter.ts +0 -36
@@ -49,112 +49,105 @@ class ScreenManager {
49
49
  * Add a new screen definition
50
50
  */
51
51
  async addScreen(options) {
52
- console.log(`šŸ“± Adding screen: ${options.name}...\n`);
53
52
  // Validate screen name
54
53
  this.validateScreenName(options.name);
55
54
  // Normalize screen name for directory
56
55
  const screenName = this.normalizeScreenName(options.name);
57
56
  const screenDir = path.join(this.screensDir, screenName);
58
- // Derive filename from path or use screen name
59
- const filename = options.path
60
- ? this.extractFilenameFromPath(options.path)
61
- : screenName;
57
+ // Derive filename: --feature flag creates "<screen>-<feature>" name
58
+ let filename;
59
+ if (options.feature) {
60
+ filename = `${screenName}-${this.normalizeScreenName(options.feature)}`;
61
+ }
62
+ else if (options.path) {
63
+ filename = this.extractFilenameFromPath(options.path);
64
+ }
65
+ else {
66
+ filename = screenName;
67
+ }
62
68
  // Create directory structure
63
69
  const featuresDir = path.join(screenDir, 'features');
64
70
  const selectorsDir = path.join(screenDir, 'selectors');
65
71
  const testDataDir = path.join(screenDir, 'test-data');
66
72
  // File paths
67
73
  const featurePath = path.join(featuresDir, `${filename}.feature`);
68
- const selectorOverridePath = path.join(selectorsDir, `${filename}.override.yaml`);
69
- const testDataOverridePath = path.join(testDataDir, `${filename}.override.yaml`);
74
+ const selectorPath = path.join(selectorsDir, `${filename}.yaml`);
75
+ const testDataPath = path.join(testDataDir, `${filename}.yaml`);
70
76
  // Smart behavior: Create dirs only if first file
71
77
  const isFirstFile = !fs.existsSync(screenDir);
72
78
  if (isFirstFile) {
73
- console.log(`šŸ“± Creating screen: ${options.name}...\n`);
74
- // Create directories
79
+ console.log(`Creating screen: ${options.name}\n`);
75
80
  try {
76
81
  if (!fs.existsSync(this.screensDir)) {
77
82
  fs.mkdirSync(this.screensDir, { recursive: true });
78
- console.log(`āœ“ Created directory: qa/screens/\n`);
79
83
  }
80
84
  fs.mkdirSync(featuresDir, { recursive: true });
81
85
  fs.mkdirSync(selectorsDir, { recursive: true });
82
86
  fs.mkdirSync(testDataDir, { recursive: true });
83
87
  }
84
88
  catch (error) {
85
- console.error(`āŒ Error: Failed to create directories`);
86
- console.error(` ${error instanceof Error ? error.message : String(error)}`);
87
- console.error(' Check file permissions and try again.\n');
89
+ console.error(`Error: Failed to create directories`);
90
+ console.error(` ${error instanceof Error ? error.message : String(error)}`);
88
91
  process.exit(1);
89
92
  }
90
93
  }
91
94
  else {
92
- console.log(`šŸ“„ Adding feature to screen: ${options.name}...\n`);
95
+ console.log(`Adding feature to screen: ${options.name}\n`);
93
96
  }
94
97
  // Check file existence to prevent overwrite
95
98
  if (fs.existsSync(featurePath)) {
96
- console.error(`āŒ Error: Feature file "${filename}.feature" already exists`);
97
- console.error(` Path: ${featurePath}`);
98
- console.error(` Use a different --path value or delete existing file.`);
99
+ console.error(`Error: Feature file "${filename}.feature" already exists`);
100
+ console.error(` Path: ${featurePath}`);
101
+ console.error(` Use a different --path or --feature value.`);
99
102
  process.exit(1);
100
103
  }
101
104
  // Generate and write feature file
102
105
  const featureContent = this.generateFeatureTemplate(options, filename);
103
- try {
104
- fs.writeFileSync(featurePath, featureContent, 'utf-8');
105
- }
106
- catch (error) {
107
- console.error(`āŒ Error: Failed to create feature file at ${featurePath}`);
108
- console.error(` ${error instanceof Error ? error.message : String(error)}`);
109
- process.exit(1);
110
- }
111
- // Generate and write selector override file (NOT base file)
112
- const selectorOverrideContent = this.generateSelectorOverrideTemplate(filename);
113
- try {
114
- fs.writeFileSync(selectorOverridePath, selectorOverrideContent, 'utf-8');
106
+ fs.writeFileSync(featurePath, featureContent, 'utf-8');
107
+ // Generate empty selector YAML (with page entry)
108
+ if (!fs.existsSync(selectorPath)) {
109
+ const pagePath = options.path || `/${screenName}`;
110
+ fs.writeFileSync(selectorPath, [
111
+ `# ${options.name} Screen Selectors`,
112
+ `# Fill via AI or manually`,
113
+ ``,
114
+ `${screenName}:`,
115
+ ` type: 'page'`,
116
+ ` value: '${pagePath}'`,
117
+ ` nth: 0`,
118
+ ``,
119
+ ].join('\n'), 'utf-8');
115
120
  }
116
- catch (error) {
117
- console.error(`āŒ Error: Failed to create selector override file at ${selectorOverridePath}`);
118
- console.error(` ${error instanceof Error ? error.message : String(error)}`);
119
- process.exit(1);
120
- }
121
- // Generate and write test data override file (NOT base file)
122
- const testDataOverrideContent = this.generateTestDataOverrideTemplate(filename);
123
- try {
124
- fs.writeFileSync(testDataOverridePath, testDataOverrideContent, 'utf-8');
125
- }
126
- catch (error) {
127
- console.error(`āŒ Error: Failed to create test data override file at ${testDataOverridePath}`);
128
- console.error(` ${error instanceof Error ? error.message : String(error)}`);
129
- process.exit(1);
130
- }
131
- // Display success message
132
- if (isFirstFile) {
133
- console.log(`āœ“ Created screen: ${options.name} at ${screenDir}`);
121
+ // Generate empty test-data YAML
122
+ if (!fs.existsSync(testDataPath)) {
123
+ fs.writeFileSync(testDataPath, [
124
+ `# ${options.name} Screen Test Data`,
125
+ `# Fill via AI or manually`,
126
+ `# Reference in features using {{variable}} syntax`,
127
+ ``,
128
+ ].join('\n'), 'utf-8');
134
129
  }
135
- else {
136
- console.log(`āœ“ Added feature: ${filename} to ${screenName}`);
137
- }
138
- this.displaySuccess(options.name, filename, screenDir);
130
+ // Display success
131
+ console.log(`Created files:`);
132
+ console.log(` ${path.relative(this.cwd, featurePath)}`);
133
+ console.log(` ${path.relative(this.cwd, selectorPath)}`);
134
+ console.log(` ${path.relative(this.cwd, testDataPath)}\n`);
135
+ console.log('Next steps:');
136
+ console.log(` 1. Use AI (Copilot/Claude) to generate Gherkin + selectors from the live page`);
137
+ console.log(` 2. Fill in test-data values`);
138
+ console.log(` 3. Compile: sungen generate --screen ${screenName}`);
139
+ console.log(` 4. Run: npx playwright test\n`);
139
140
  }
140
- /**
141
- * Validate screen name
142
- */
143
141
  validateScreenName(name) {
144
142
  if (!name || name.trim().length === 0) {
145
- console.error('āŒ Error: Screen name cannot be empty');
143
+ console.error('Error: Screen name cannot be empty');
146
144
  process.exit(1);
147
145
  }
148
- // Check if name contains at least one alphanumeric character
149
146
  if (!/[a-zA-Z0-9]/.test(name)) {
150
- console.error('āŒ Error: Screen name must contain at least one alphanumeric character');
151
- console.error(' Valid examples: login, user-profile, Dashboard');
147
+ console.error('Error: Screen name must contain at least one alphanumeric character');
152
148
  process.exit(1);
153
149
  }
154
150
  }
155
- /**
156
- * Normalize screen name to kebab-case for filename
157
- */
158
151
  normalizeScreenName(name) {
159
152
  return name
160
153
  .toLowerCase()
@@ -162,21 +155,12 @@ class ScreenManager {
162
155
  .replace(/^-+|-+$/g, '')
163
156
  .replace(/-+/g, '-');
164
157
  }
165
- /**
166
- * Extract filename from path value
167
- */
168
158
  extractFilenameFromPath(pathString) {
169
- // Remove leading and trailing slashes
170
159
  const cleanPath = pathString.replace(/^\/+/, '').replace(/\/+$/, '');
171
- // Split by '/' and take last segment
172
160
  const segments = cleanPath.split('/');
173
161
  const lastSegment = segments[segments.length - 1];
174
- // Normalize to kebab-case
175
162
  return this.normalizeScreenName(lastSegment);
176
163
  }
177
- /**
178
- * Generate feature file template
179
- */
180
164
  generateFeatureTemplate(options, filename) {
181
165
  const screenName = this.normalizeScreenName(options.name);
182
166
  const featurePath = options.path || `/${screenName}`;
@@ -190,156 +174,11 @@ class ScreenManager {
190
174
 
191
175
  @high
192
176
  Scenario: Sample scenario for ${options.name}
193
- Given User is on [${options.name}] page
177
+ Given User is on [${screenName}] page
194
178
  When User click [element] button
195
179
  Then User see [result] text with {{success}}
196
180
  `;
197
181
  }
198
- /**
199
- * Generate selector YAML template
200
- */
201
- generateSelectorTemplate(options, filename) {
202
- const timestamp = new Date().toISOString().split('T')[0];
203
- const screenPath = options.path || '';
204
- return `# ${options.name} Screen Selectors
205
- # Created: ${timestamp}
206
- ${screenPath ? `# Path: ${screenPath}` : '# Path: (not specified - update as needed)'}
207
-
208
- # Example element - replace with actual elements or use 'sungen map'
209
- #
210
- # Element structure:
211
- # key: element-identifier
212
- # locator: "" # Playwright locator
213
- # type: text|role|placeholder|testid|xpath
214
- # value: "text content" # Element value/text/label
215
- # name: "Display Name" # Optional: readable name
216
- # nth: 0 # Optional: element index if multiple matches
217
-
218
- # element:
219
- # locator: ""
220
- # type: role
221
- # value: "button"
222
- # name: "element"
223
- # nth: 0
224
-
225
- # Next steps:
226
- # 1. Edit the feature file: qa/screens/${filename}/features/${filename}.feature
227
- # 2. Run: sungen map --screen ${filename}
228
- # This will populate selectors from your feature file
229
- #
230
- # Documentation: https://github.com/sun-asterisk/sungen
231
- `;
232
- }
233
- /**
234
- * Generate test data YAML template
235
- */
236
- generateTestDataTemplate(options) {
237
- const timestamp = new Date().toISOString().split('T')[0];
238
- return `# ${options.name} Screen Test Data
239
- # Created: ${timestamp}
240
-
241
- # Define test data variables here
242
- # Example:
243
- # success: "Operation completed successfully"
244
- # username: "testuser@example.com"
245
- # password: "SecurePassword123"
246
-
247
- # Next steps:
248
- # 1. Add test data variables referenced in your feature scenarios
249
- # 2. Use {{variable}} syntax in your feature files to reference these values
250
- `;
251
- }
252
- /**
253
- * Generate selector override YAML template (empty with guidelines)
254
- */
255
- generateSelectorOverrideTemplate(filename) {
256
- return `# ${filename}.override.yaml - User Override File
257
- # This file will NEVER be modified by 'sungen map' command
258
- # Use this to override auto-generated selectors or add custom ones
259
- #
260
- # Format:
261
- # element.key:
262
- # locator: "css-locator-here" # Optional: custom CSS locator
263
- # type: role|testid|placeholder|label|text
264
- # value: "value-for-type"
265
- # name: "Display Name" # Optional
266
- # nth: 0 # Optional: element index
267
- #
268
- # Examples:
269
- # email.field:
270
- # type: testid
271
- # value: "login-email"
272
- #
273
- # submit.button:
274
- # type: role
275
- # value: "button"
276
- # name: "Sign In"
277
- #
278
- # custom.element:
279
- # locator: "#my-custom-id"
280
- # type: placeholder
281
- # value: "Enter text"
282
- #
283
- # Leave empty if no overrides needed
284
- # Base selectors will be auto-generated by: sungen map --screen ${filename}
285
- `;
286
- }
287
- /**
288
- * Generate test-data override YAML template (empty with guidelines)
289
- */
290
- generateTestDataOverrideTemplate(filename) {
291
- return `# ${filename}.override.yaml - User Override File
292
- # This file will NEVER be modified by 'sungen map' command
293
- # Use this to override auto-generated test data or add custom data
294
- #
295
- # Format:
296
- # variable_name: "value"
297
- #
298
- # nested:
299
- # variable: "value"
300
- #
301
- # array_example:
302
- # - "item1"
303
- # - "item2"
304
- #
305
- # Examples:
306
- # # Simple string override
307
- # valid_email: "custom@example.com"
308
- #
309
- # # Nested object override
310
- # api:
311
- # url: "https://staging.example.com"
312
- # timeout: 5000
313
- #
314
- # # Array override
315
- # test_users:
316
- # - "user1@example.com"
317
- # - "user2@example.com"
318
- #
319
- # Leave empty if no overrides needed
320
- # Base test data will be auto-generated by: sungen map --screen ${filename}
321
- `;
322
- }
323
- /**
324
- * Display success message with next steps
325
- */
326
- displaySuccess(name, filename, screenDir) {
327
- console.log('āœ… Screen definition created successfully!\n');
328
- console.log(`Screen: ${name}`);
329
- console.log(`Path: ${screenDir}\n`);
330
- console.log('Created files:');
331
- console.log(` šŸ“„ ${path.join(screenDir, 'features', `${filename}.feature`)}`);
332
- console.log(` šŸ“ ${path.join(screenDir, 'selectors', `${filename}.override.yaml`)} (user-editable)`);
333
- console.log(` šŸ“ ${path.join(screenDir, 'test-data', `${filename}.override.yaml`)} (user-editable)\n`);
334
- console.log('šŸ“Œ Note: Override files will NEVER be modified by automation');
335
- console.log(' Edit these files to customize selectors and test data\n');
336
- console.log('Next steps:');
337
- console.log(` 1. Edit the Gherkin feature file to define test scenarios`);
338
- console.log(` 2. Run: sungen map --screen ${name}`);
339
- console.log(` This will generate BASE selector and test-data files`);
340
- console.log(` (Override files remain untouched)\n`);
341
- console.log('Documentation: https://github.com/sun-asterisk/sungen');
342
- }
343
182
  }
344
183
  exports.ScreenManager = ScreenManager;
345
184
  //# sourceMappingURL=screen-manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"screen-manager.js","sourceRoot":"","sources":["../../src/orchestrator/screen-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"screen-manager.js","sourceRoot":"","sources":["../../src/orchestrator/screen-manager.ts"],"names":[],"mappings":"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"}
@@ -2,6 +2,6 @@
2
2
  * Valid selector types used across scaffold generator, selector resolver, and validator.
3
3
  * Single source of truth — import this instead of hardcoding.
4
4
  */
5
- export declare const VALID_SELECTOR_TYPES: readonly ["placeholder", "role", "testid", "label", "text", "page", "column", "locator", "id"];
5
+ export declare const VALID_SELECTOR_TYPES: readonly ["placeholder", "role", "testid", "label", "text", "page", "column", "locator", "id", "upload", "frame", "table"];
6
6
  export type SelectorType = (typeof VALID_SELECTOR_TYPES)[number];
7
7
  //# sourceMappingURL=selector-types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"selector-types.d.ts","sourceRoot":"","sources":["../../src/utils/selector-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,oBAAoB,gGAUvB,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC"}
1
+ {"version":3,"file":"selector-types.d.ts","sourceRoot":"","sources":["../../src/utils/selector-types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,oBAAoB,4HAavB,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC"}
@@ -15,5 +15,8 @@ exports.VALID_SELECTOR_TYPES = [
15
15
  'column',
16
16
  'locator',
17
17
  'id',
18
+ 'upload',
19
+ 'frame',
20
+ 'table',
18
21
  ];
19
22
  //# sourceMappingURL=selector-types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"selector-types.js","sourceRoot":"","sources":["../../src/utils/selector-types.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACU,QAAA,oBAAoB,GAAG;IAClC,aAAa;IACb,MAAM;IACN,QAAQ;IACR,OAAO;IACP,MAAM;IACN,MAAM;IACN,QAAQ;IACR,SAAS;IACT,IAAI;CACI,CAAC"}
1
+ {"version":3,"file":"selector-types.js","sourceRoot":"","sources":["../../src/utils/selector-types.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACU,QAAA,oBAAoB,GAAG;IAClC,aAAa;IACb,MAAM;IACN,QAAQ;IACR,OAAO;IACP,MAAM;IACN,MAAM;IACN,QAAQ;IACR,SAAS;IACT,IAAI;IACJ,QAAQ;IACR,OAAO;IACP,OAAO;CACC,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@sun-asterisk/sungen",
3
- "version": "1.0.23",
4
- "description": "AI-Native E2E Test Generator - Generate Playwright tests from Gherkin features using AI",
3
+ "version": "2.0.0",
4
+ "description": "Deterministic E2E Test Compiler - Gherkin + Selectors → Playwright tests",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "bin": {
@@ -3,9 +3,10 @@ import { Command } from 'commander';
3
3
  export function registerAddCommand(program: Command): void {
4
4
  program
5
5
  .command('add')
6
- .description('Add screen definition with scaffolded files')
6
+ .description('Add screen or feature definition with scaffolded files')
7
7
  .requiredOption('--screen <name>', 'Screen name')
8
- .option('-p, --path <path>', 'Screen route path')
8
+ .option('-p, --path <path>', 'Screen route path (e.g. /awards)')
9
+ .option('-f, --feature <name>', 'Add additional feature file to existing screen')
9
10
  .option('-d, --description <text>', 'Screen description')
10
11
  .action(async (options) => {
11
12
  try {
@@ -15,10 +16,11 @@ export function registerAddCommand(program: Command): void {
15
16
  await manager.addScreen({
16
17
  name: options.screen,
17
18
  path: options.path,
19
+ feature: options.feature,
18
20
  description: options.description,
19
21
  });
20
22
  } catch (error) {
21
- console.error('āŒ Add screen failed:', error);
23
+ console.error('Error:', error instanceof Error ? error.message : error);
22
24
  process.exit(1);
23
25
  }
24
26
  });
@@ -1,54 +1,106 @@
1
1
  import { Command } from 'commander';
2
- import { ConfigLoader } from '../../config/config-loader';
3
- import { Pipeline } from '../../orchestrator/pipeline';
4
- import { ValidationResult } from '../../core/validator';
5
- import { printValidationResult } from '../utils';
2
+ import * as path from 'path';
3
+ import * as fs from 'fs';
4
+ import { CodeGenerator } from '../../generators/test-generator/code-generator';
5
+
6
+ /**
7
+ * Find .feature files recursively in a directory
8
+ */
9
+ function findFeatureFiles(dir: string): string[] {
10
+ const files: string[] = [];
11
+ if (!fs.existsSync(dir)) return files;
12
+
13
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
14
+ for (const entry of entries) {
15
+ const fullPath = path.join(dir, entry.name);
16
+ if (entry.isDirectory()) {
17
+ files.push(...findFeatureFiles(fullPath));
18
+ } else if (entry.isFile() && entry.name.endsWith('.feature')) {
19
+ files.push(fullPath);
20
+ }
21
+ }
22
+ return files;
23
+ }
24
+
25
+ /**
26
+ * Find feature files for a specific screen
27
+ */
28
+ function findFeatureFilesForScreen(screenName: string): string[] {
29
+ const screenFeaturesDir = path.join(process.cwd(), 'qa', 'screens', screenName, 'features');
30
+ return findFeatureFiles(screenFeaturesDir);
31
+ }
32
+
33
+ /**
34
+ * Find all feature files across all screens
35
+ */
36
+ function findAllFeatureFiles(): string[] {
37
+ const allFiles: string[] = [];
38
+ const screensDir = path.join(process.cwd(), 'qa', 'screens');
39
+
40
+ if (fs.existsSync(screensDir)) {
41
+ const screenDirs = fs.readdirSync(screensDir, { withFileTypes: true })
42
+ .filter(entry => entry.isDirectory())
43
+ .map(entry => entry.name);
44
+
45
+ for (const screenName of screenDirs) {
46
+ const screenFeaturesDir = path.join(screensDir, screenName, 'features');
47
+ allFiles.push(...findFeatureFiles(screenFeaturesDir));
48
+ }
49
+ }
50
+
51
+ return allFiles;
52
+ }
6
53
 
7
54
  export function registerGenerateCommand(program: Command): void {
8
55
  program
9
56
  .command('generate')
10
- .description('Generate Playwright test code from features')
11
- .option('--ai-mapper', 'Enable AI fallback for unknown Gherkin patterns')
12
- .option('--framework <name>', 'Test framework (playwright, appium, integration)', 'playwright')
13
- .option('-s, --screen <name>', 'Filter generation to specific screen')
14
- .option('-f, --force', 'Force regeneration, bypass cache')
15
- .option('--skip-validation', 'Skip validation before generation')
57
+ .description('Generate Playwright test code from Gherkin features')
58
+ .option('-s, --screen <name>', 'Generate tests for a specific screen')
59
+ .option('--all', 'Generate tests for all screens')
60
+ .option('--framework <name>', 'Test framework (default: playwright)', 'playwright')
16
61
  .action(async (options) => {
17
62
  try {
18
- // Run validation first (unless --skip-validation is set)
19
- if (!options.skipValidation) {
20
- const { ScreenValidator } = require('../../core/validator');
21
- const validator = new ScreenValidator();
22
-
23
- let validationResult: ValidationResult;
24
- if (options.screen) {
25
- console.log(`šŸ” Validating screen: ${options.screen}...\n`);
26
- validationResult = validator.validateScreen(options.screen);
27
- } else {
28
- console.log('šŸ” Validating all screens...\n');
29
- validationResult = validator.validateAll();
30
- }
63
+ const screenName = options.screen;
31
64
 
32
- if (!validationResult.valid) {
33
- printValidationResult(validationResult, false);
34
- console.error('\nāŒ Validation failed. Fix errors before generating tests.');
35
- console.error(' Tip: Use --skip-validation to bypass validation (not recommended)');
36
- process.exit(1);
65
+ // Find feature files
66
+ let featureFiles: string[];
67
+ if (screenName) {
68
+ featureFiles = findFeatureFilesForScreen(screenName);
69
+ if (featureFiles.length === 0) {
70
+ throw new Error(
71
+ `No feature files found for screen: ${screenName}\n` +
72
+ `Looked in: qa/screens/${screenName}/features/`
73
+ );
37
74
  }
38
-
39
- console.log(`āœ… Validation passed (${validationResult.summary.totalFiles} files)\n`);
75
+ console.log(`\nGenerating tests: ${screenName}\n`);
76
+ } else {
77
+ featureFiles = findAllFeatureFiles();
78
+ if (featureFiles.length === 0) {
79
+ throw new Error('No feature files found in qa/screens/');
80
+ }
81
+ console.log(`\nGenerating tests for all screens\n`);
40
82
  }
41
83
 
42
- const cliOptions = {
43
- ...program.opts(),
44
- ...options,
45
- };
46
- const config = new ConfigLoader().load(cliOptions);
47
- const pipeline = new Pipeline(config);
84
+ // Output directory
85
+ const outputDir = path.join(process.cwd(), 'specs', 'generated');
86
+
87
+ // Create generator and compile
88
+ const generator = new CodeGenerator({
89
+ framework: options.framework || 'playwright',
90
+ screenName,
91
+ verbose: program.opts().verbose,
92
+ });
93
+
94
+ const results = await generator.generateAllTests(
95
+ path.join(process.cwd(), 'qa', 'screens'),
96
+ outputDir,
97
+ featureFiles
98
+ );
48
99
 
49
- await pipeline.runTestGeneration(options.screen);
100
+ console.log(`\n${results.length} test file(s) generated.`);
101
+ console.log(`Next step: npx playwright test --ui\n`);
50
102
  } catch (error) {
51
- console.error('āŒ Test generation failed:', error);
103
+ console.error('Error:', error instanceof Error ? error.message : error);
52
104
  process.exit(1);
53
105
  }
54
106
  });
package/src/cli/index.ts CHANGED
@@ -1,18 +1,13 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * Sungen CLI - AI-Native E2E Test Generator
4
- * Command-line interface for generating E2E tests from Gherkin features
3
+ * Sungen CLI v2 - Deterministic E2E Test Compiler
4
+ * Compiles Gherkin features + selector YAML + test data → Playwright tests
5
5
  */
6
6
 
7
7
  import { Command } from 'commander';
8
8
  import { registerInitCommand } from './commands/init';
9
9
  import { registerAddCommand } from './commands/add';
10
- import { registerLiveScanCommand } from './commands/live-scan';
11
- import { registerMapCommand } from './commands/map';
12
10
  import { registerGenerateCommand } from './commands/generate';
13
- import { registerFullCommand } from './commands/full';
14
- import { registerValidateCommand } from './commands/validate';
15
- import { registerCacheClearCommand } from './commands/cache-clear';
16
11
  import { registerMakeauthCommand } from './commands/makeauth';
17
12
 
18
13
  async function main() {
@@ -20,23 +15,17 @@ async function main() {
20
15
 
21
16
  program
22
17
  .name('sungen')
23
- .description('AI-Native E2E Test Generator - Generate Playwright tests from Gherkin features')
24
- .version('1.0.23');
18
+ .description('Deterministic E2E Test Compiler — Gherkin + Selectors → Playwright')
19
+ .version('2.0.0');
25
20
 
26
21
  // Global options
27
22
  program
28
- .option('-c, --config <path>', 'Path to custom config file')
29
23
  .option('-v, --verbose', 'Enable verbose logging');
30
24
 
31
- // Register all commands
25
+ // Register commands (5 only)
32
26
  registerInitCommand(program);
33
27
  registerAddCommand(program);
34
- registerLiveScanCommand(program);
35
- registerMapCommand(program);
36
28
  registerGenerateCommand(program);
37
- registerFullCommand(program);
38
- registerValidateCommand(program);
39
- registerCacheClearCommand(program);
40
29
  registerMakeauthCommand(program);
41
30
 
42
31
  await program.parseAsync(process.argv);
@@ -0,0 +1 @@
1
+ const frame = page.frameLocator('{{value}}');