waygraph 0.15.49 → 0.15.51

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 (466) hide show
  1. package/dist/analysis/map-check.js +5 -2
  2. package/dist/analysis/practices-check.js +17 -4
  3. package/dist/auto-session/session.js +3 -2
  4. package/dist/browser-path.d.ts +5 -0
  5. package/dist/browser-path.js +18 -0
  6. package/dist/cli/flags.d.ts +7 -5
  7. package/dist/cli/flags.js +9 -32
  8. package/dist/cli/run-chain.js +2 -1
  9. package/dist/commands/check.js +1 -1
  10. package/dist/commands/init.js +5 -0
  11. package/dist/commands/run.js +4 -4
  12. package/dist/commands/session.js +7 -7
  13. package/dist/config.d.ts +34 -0
  14. package/dist/config.js +94 -0
  15. package/dist/core/blocks/effect.d.ts +0 -3
  16. package/dist/core/blocks/method.d.ts +0 -6
  17. package/dist/core/blocks/nav.d.ts +0 -3
  18. package/dist/core/blocks/page.d.ts +0 -3
  19. package/dist/core/flow.js +3 -6
  20. package/dist/env-file.d.ts +10 -0
  21. package/dist/env-file.js +58 -0
  22. package/dist/highlights/types.d.ts +9 -8
  23. package/dist/index.d.ts +5 -0
  24. package/dist/index.js +3 -0
  25. package/dist/runner/inpage/banner.js +10 -2
  26. package/dist/runner/inpage/caption.js +2 -2
  27. package/dist/runner/main.js +10 -6
  28. package/dist/session/auto-explore-run.d.ts +4 -1
  29. package/dist/session/auto-explore-run.js +18 -28
  30. package/dist/traverse/run.js +4 -22
  31. package/dist/types.d.ts +0 -3
  32. package/dist/webserver.d.ts +14 -0
  33. package/dist/webserver.js +91 -0
  34. package/examples/routed-demo/package.json +3 -3
  35. package/examples/routed-demo/playwright.config.ts +8 -8
  36. package/examples/routed-demo/scripts/fixture-server.mjs +12 -31
  37. package/examples/routed-demo/src/map/(app_base)/dashboard/_sel.ts +1 -3
  38. package/examples/routed-demo/src/map/(external)/docs/_sel.ts +1 -3
  39. package/examples/routed-demo/src/pages/dashboard.html +1 -1
  40. package/examples/routed-demo/src/pages/docs.html +1 -1
  41. package/examples/saucedemo/playwright.config.ts +2 -3
  42. package/examples/saucedemo/scripts/prove-add-to-cart-menu.mjs +2 -1
  43. package/examples/saucedemo/scripts/prove-auto-graph.mjs +2 -1
  44. package/examples/saucedemo/scripts/prove-wrong-login-runtime.mjs +2 -1
  45. package/examples/saucedemo/tests/flow-block-verify.spec.ts +2 -7
  46. package/package.json +10 -2
  47. package/templates/quickstart/playwright.config.ts +0 -6
  48. package/templates/scaffold/README.md +5 -3
  49. package/templates/scaffold/STRUCTURE.md +3 -4
  50. package/templates/scaffold/package.json +8 -12
  51. package/templates/scaffold/playwright.config.ts +2 -18
  52. package/templates/scaffold/src/flows/shop.flow.ts +42 -27
  53. package/templates/scaffold/src/map/(app_base)/docs/_nav.block.ts +1 -1
  54. package/templates/scaffold/src/map/(app_base)/docs/_sel.ts +2 -3
  55. package/templates/scaffold/src/map/(app_base)/docs/{docs.html → index.html} +1 -1
  56. package/templates/scaffold/src/map/(app_base)/home/_methods/add-item.effect.block.ts +12 -13
  57. package/templates/scaffold/src/map/(app_base)/home/_methods/assert-hello.method.block.ts +19 -22
  58. package/templates/scaffold/src/map/(app_base)/home/_methods/clear-cart.method.block.ts +7 -8
  59. package/templates/scaffold/src/map/(app_base)/home/_methods/remove-item.effect.block.ts +4 -8
  60. package/templates/scaffold/src/map/(app_base)/home/_nav.block.ts +10 -10
  61. package/templates/scaffold/src/map/(app_base)/home/_sel.ts +2 -4
  62. package/templates/scaffold/src/map/(app_base)/index.html +17 -0
  63. package/templates/scaffold/src/states/demo.states.ts +2 -0
  64. package/templates/scaffold/tests/README.md +3 -2
  65. package/templates/scaffold/tsconfig.json +1 -1
  66. package/templates/skills/waygraph-convention.skill.md +5 -3
  67. package/templates/skills/waygraph-pilot.skill.md +1 -1
  68. package/examples/routed-demo/.waygraph-auto/4d4902b7.log +0 -0
  69. package/examples/routed-demo/.waygraph-auto/51ef462e.log +0 -0
  70. package/examples/routed-demo/.waygraph-auto/71527ad9.log +0 -0
  71. package/examples/routed-demo/.waygraph-auto/ca16778e.log +0 -0
  72. package/examples/routed-demo/scripts/with-fixture.mjs +0 -70
  73. package/examples/saucedemo/.waygraph-auto/00b0c55c.log +0 -22
  74. package/examples/saucedemo/.waygraph-auto/00d147d1.log +0 -21
  75. package/examples/saucedemo/.waygraph-auto/00e5d037.log +0 -5
  76. package/examples/saucedemo/.waygraph-auto/015be8f6.log +0 -6
  77. package/examples/saucedemo/.waygraph-auto/026e188e.log +0 -0
  78. package/examples/saucedemo/.waygraph-auto/02f7dd22.log +0 -20
  79. package/examples/saucedemo/.waygraph-auto/03df352d.log +0 -0
  80. package/examples/saucedemo/.waygraph-auto/0402cfcf.log +0 -6
  81. package/examples/saucedemo/.waygraph-auto/050e5b55.log +0 -0
  82. package/examples/saucedemo/.waygraph-auto/05d76fc3.log +0 -0
  83. package/examples/saucedemo/.waygraph-auto/062b581f.log +0 -20
  84. package/examples/saucedemo/.waygraph-auto/0681582b.log +0 -6
  85. package/examples/saucedemo/.waygraph-auto/07845ed1.log +0 -0
  86. package/examples/saucedemo/.waygraph-auto/07f3e964.log +0 -6
  87. package/examples/saucedemo/.waygraph-auto/0868ae4d.log +0 -0
  88. package/examples/saucedemo/.waygraph-auto/0924ddaa.log +0 -22
  89. package/examples/saucedemo/.waygraph-auto/092d6173.log +0 -5
  90. package/examples/saucedemo/.waygraph-auto/096fea05.log +0 -20
  91. package/examples/saucedemo/.waygraph-auto/09924510.log +0 -0
  92. package/examples/saucedemo/.waygraph-auto/0998c941.log +0 -21
  93. package/examples/saucedemo/.waygraph-auto/0a8c3719.log +0 -0
  94. package/examples/saucedemo/.waygraph-auto/0bf74300.log +0 -21
  95. package/examples/saucedemo/.waygraph-auto/0c01fd29.log +0 -4
  96. package/examples/saucedemo/.waygraph-auto/0c19e232.log +0 -5
  97. package/examples/saucedemo/.waygraph-auto/0c302590.log +0 -0
  98. package/examples/saucedemo/.waygraph-auto/0dee62d6.log +0 -5
  99. package/examples/saucedemo/.waygraph-auto/0eb4c081.log +0 -5
  100. package/examples/saucedemo/.waygraph-auto/0f0cb120.log +0 -0
  101. package/examples/saucedemo/.waygraph-auto/102c38ca.log +0 -0
  102. package/examples/saucedemo/.waygraph-auto/10fd431c.log +0 -0
  103. package/examples/saucedemo/.waygraph-auto/1122c13c.log +0 -0
  104. package/examples/saucedemo/.waygraph-auto/123d1cad.log +0 -5
  105. package/examples/saucedemo/.waygraph-auto/12ed8e28.log +0 -0
  106. package/examples/saucedemo/.waygraph-auto/13c6fe3c.log +0 -0
  107. package/examples/saucedemo/.waygraph-auto/1581b677.log +0 -0
  108. package/examples/saucedemo/.waygraph-auto/164761a5.log +0 -6
  109. package/examples/saucedemo/.waygraph-auto/1905ceb2.log +0 -0
  110. package/examples/saucedemo/.waygraph-auto/1b1d55c6.log +0 -0
  111. package/examples/saucedemo/.waygraph-auto/1b80fd24.log +0 -6
  112. package/examples/saucedemo/.waygraph-auto/1bd7b7bf.log +0 -0
  113. package/examples/saucedemo/.waygraph-auto/1c30a3c2.log +0 -0
  114. package/examples/saucedemo/.waygraph-auto/1c58a174.log +0 -0
  115. package/examples/saucedemo/.waygraph-auto/1cb6f44c.log +0 -5
  116. package/examples/saucedemo/.waygraph-auto/1d90aa9a.log +0 -0
  117. package/examples/saucedemo/.waygraph-auto/1de7d889.log +0 -0
  118. package/examples/saucedemo/.waygraph-auto/1f233a4c.log +0 -6
  119. package/examples/saucedemo/.waygraph-auto/1fdb2100.log +0 -0
  120. package/examples/saucedemo/.waygraph-auto/20e66801.log +0 -0
  121. package/examples/saucedemo/.waygraph-auto/20e91af6.log +0 -5
  122. package/examples/saucedemo/.waygraph-auto/20ffdb77.log +0 -0
  123. package/examples/saucedemo/.waygraph-auto/222d1d09.log +0 -0
  124. package/examples/saucedemo/.waygraph-auto/22f1a704.log +0 -5
  125. package/examples/saucedemo/.waygraph-auto/2324269a.log +0 -0
  126. package/examples/saucedemo/.waygraph-auto/232a1d81.log +0 -0
  127. package/examples/saucedemo/.waygraph-auto/239cced3.log +0 -20
  128. package/examples/saucedemo/.waygraph-auto/25204b46.log +0 -4
  129. package/examples/saucedemo/.waygraph-auto/2553d107.log +0 -0
  130. package/examples/saucedemo/.waygraph-auto/25e2e90f.log +0 -0
  131. package/examples/saucedemo/.waygraph-auto/2708455e.log +0 -22
  132. package/examples/saucedemo/.waygraph-auto/272a96fd.log +0 -20
  133. package/examples/saucedemo/.waygraph-auto/28d7be5d.log +0 -0
  134. package/examples/saucedemo/.waygraph-auto/2a577961.log +0 -0
  135. package/examples/saucedemo/.waygraph-auto/2a6a8266.log +0 -6
  136. package/examples/saucedemo/.waygraph-auto/2b3401cf.log +0 -20
  137. package/examples/saucedemo/.waygraph-auto/2b831907.log +0 -6
  138. package/examples/saucedemo/.waygraph-auto/2b9b56fc.log +0 -20
  139. package/examples/saucedemo/.waygraph-auto/2c79c73a.log +0 -0
  140. package/examples/saucedemo/.waygraph-auto/2c94a05b.log +0 -0
  141. package/examples/saucedemo/.waygraph-auto/2ceccd6d.log +0 -0
  142. package/examples/saucedemo/.waygraph-auto/2e2069e7.log +0 -0
  143. package/examples/saucedemo/.waygraph-auto/2e6bc35e.log +0 -6
  144. package/examples/saucedemo/.waygraph-auto/2efd1983.log +0 -0
  145. package/examples/saucedemo/.waygraph-auto/2f1b0c13.log +0 -6
  146. package/examples/saucedemo/.waygraph-auto/2f4f531e.log +0 -0
  147. package/examples/saucedemo/.waygraph-auto/2f8d4073.log +0 -6
  148. package/examples/saucedemo/.waygraph-auto/2fdbd916.log +0 -0
  149. package/examples/saucedemo/.waygraph-auto/30739278.log +0 -6
  150. package/examples/saucedemo/.waygraph-auto/30a5c848.log +0 -20
  151. package/examples/saucedemo/.waygraph-auto/31cb2e80.log +0 -0
  152. package/examples/saucedemo/.waygraph-auto/322d63cd.log +0 -0
  153. package/examples/saucedemo/.waygraph-auto/3239aa8a.log +0 -6
  154. package/examples/saucedemo/.waygraph-auto/326d87b7.log +0 -6
  155. package/examples/saucedemo/.waygraph-auto/331c6e8e.log +0 -0
  156. package/examples/saucedemo/.waygraph-auto/3351c0b6.log +0 -0
  157. package/examples/saucedemo/.waygraph-auto/33a50dc0.log +0 -0
  158. package/examples/saucedemo/.waygraph-auto/33df0770.log +0 -0
  159. package/examples/saucedemo/.waygraph-auto/340d624d.log +0 -0
  160. package/examples/saucedemo/.waygraph-auto/36367ccf.log +0 -0
  161. package/examples/saucedemo/.waygraph-auto/372536a5.log +0 -6
  162. package/examples/saucedemo/.waygraph-auto/37b56184.log +0 -0
  163. package/examples/saucedemo/.waygraph-auto/38f6799d.log +0 -0
  164. package/examples/saucedemo/.waygraph-auto/3a208bb8.log +0 -20
  165. package/examples/saucedemo/.waygraph-auto/3a412f3c.log +0 -0
  166. package/examples/saucedemo/.waygraph-auto/3a859bd7.log +0 -0
  167. package/examples/saucedemo/.waygraph-auto/3a8674d5.log +0 -6
  168. package/examples/saucedemo/.waygraph-auto/3bdb2f5a.log +0 -0
  169. package/examples/saucedemo/.waygraph-auto/3c1e5fe0.log +0 -22
  170. package/examples/saucedemo/.waygraph-auto/3cb0add7.log +0 -0
  171. package/examples/saucedemo/.waygraph-auto/3e3c0f3b.log +0 -0
  172. package/examples/saucedemo/.waygraph-auto/3e42f0d8.log +0 -0
  173. package/examples/saucedemo/.waygraph-auto/3f088138.log +0 -0
  174. package/examples/saucedemo/.waygraph-auto/401177a3.log +0 -0
  175. package/examples/saucedemo/.waygraph-auto/413d934d.log +0 -0
  176. package/examples/saucedemo/.waygraph-auto/4144071d.log +0 -0
  177. package/examples/saucedemo/.waygraph-auto/4176a3c6.log +0 -0
  178. package/examples/saucedemo/.waygraph-auto/41d0793d.log +0 -4
  179. package/examples/saucedemo/.waygraph-auto/41e6feae.log +0 -0
  180. package/examples/saucedemo/.waygraph-auto/424b4d5d.log +0 -0
  181. package/examples/saucedemo/.waygraph-auto/42e014d1.log +0 -0
  182. package/examples/saucedemo/.waygraph-auto/43253aba.log +0 -0
  183. package/examples/saucedemo/.waygraph-auto/432d09e3.log +0 -22
  184. package/examples/saucedemo/.waygraph-auto/438c6c53.log +0 -22
  185. package/examples/saucedemo/.waygraph-auto/4477db12.log +0 -0
  186. package/examples/saucedemo/.waygraph-auto/47247959.log +0 -0
  187. package/examples/saucedemo/.waygraph-auto/476cff76.log +0 -0
  188. package/examples/saucedemo/.waygraph-auto/4a1258b7.log +0 -0
  189. package/examples/saucedemo/.waygraph-auto/4ad09ece.log +0 -0
  190. package/examples/saucedemo/.waygraph-auto/4adcd179.log +0 -20
  191. package/examples/saucedemo/.waygraph-auto/4c9d9b16.log +0 -21
  192. package/examples/saucedemo/.waygraph-auto/4cebc228.log +0 -20
  193. package/examples/saucedemo/.waygraph-auto/4da39c36.log +0 -6
  194. package/examples/saucedemo/.waygraph-auto/4dbefa7e.log +0 -5
  195. package/examples/saucedemo/.waygraph-auto/4efa7035.log +0 -6
  196. package/examples/saucedemo/.waygraph-auto/505affdc.log +0 -4
  197. package/examples/saucedemo/.waygraph-auto/51bcb60a.log +0 -0
  198. package/examples/saucedemo/.waygraph-auto/527b6d76.log +0 -0
  199. package/examples/saucedemo/.waygraph-auto/5291bc78.log +0 -22
  200. package/examples/saucedemo/.waygraph-auto/535e8922.log +0 -0
  201. package/examples/saucedemo/.waygraph-auto/54274c39.log +0 -5
  202. package/examples/saucedemo/.waygraph-auto/5440ce7e.log +0 -0
  203. package/examples/saucedemo/.waygraph-auto/5738175f.log +0 -22
  204. package/examples/saucedemo/.waygraph-auto/573abedd.log +0 -0
  205. package/examples/saucedemo/.waygraph-auto/57ce5643.log +0 -22
  206. package/examples/saucedemo/.waygraph-auto/5984426b.log +0 -6
  207. package/examples/saucedemo/.waygraph-auto/5a682e7c.log +0 -22
  208. package/examples/saucedemo/.waygraph-auto/5b79320c.log +0 -21
  209. package/examples/saucedemo/.waygraph-auto/5b838485.log +0 -0
  210. package/examples/saucedemo/.waygraph-auto/5c55aaac.log +0 -21
  211. package/examples/saucedemo/.waygraph-auto/5d13bdde.log +0 -0
  212. package/examples/saucedemo/.waygraph-auto/5ed00b16.log +0 -4
  213. package/examples/saucedemo/.waygraph-auto/60b9c066.log +0 -6
  214. package/examples/saucedemo/.waygraph-auto/610dd127.log +0 -0
  215. package/examples/saucedemo/.waygraph-auto/61105500.log +0 -5
  216. package/examples/saucedemo/.waygraph-auto/61333142.log +0 -5
  217. package/examples/saucedemo/.waygraph-auto/6134afe8.log +0 -20
  218. package/examples/saucedemo/.waygraph-auto/61937e83.log +0 -22
  219. package/examples/saucedemo/.waygraph-auto/625e7f65.log +0 -5
  220. package/examples/saucedemo/.waygraph-auto/62a0bdc9.log +0 -22
  221. package/examples/saucedemo/.waygraph-auto/6376fc15.log +0 -0
  222. package/examples/saucedemo/.waygraph-auto/63b0f4cd.log +0 -0
  223. package/examples/saucedemo/.waygraph-auto/6599cbca.log +0 -22
  224. package/examples/saucedemo/.waygraph-auto/6706ead4.log +0 -0
  225. package/examples/saucedemo/.waygraph-auto/67aaca30.log +0 -0
  226. package/examples/saucedemo/.waygraph-auto/685714af.log +0 -0
  227. package/examples/saucedemo/.waygraph-auto/68b10298.log +0 -0
  228. package/examples/saucedemo/.waygraph-auto/68be5e12.log +0 -0
  229. package/examples/saucedemo/.waygraph-auto/68df05a6.log +0 -22
  230. package/examples/saucedemo/.waygraph-auto/68fa0682.log +0 -0
  231. package/examples/saucedemo/.waygraph-auto/693f67c4.log +0 -20
  232. package/examples/saucedemo/.waygraph-auto/69ae030a.log +0 -6
  233. package/examples/saucedemo/.waygraph-auto/69e73f35.log +0 -6
  234. package/examples/saucedemo/.waygraph-auto/6b2333b0.log +0 -5
  235. package/examples/saucedemo/.waygraph-auto/6c4c3817.log +0 -0
  236. package/examples/saucedemo/.waygraph-auto/6c954911.log +0 -0
  237. package/examples/saucedemo/.waygraph-auto/6d65a439.log +0 -5
  238. package/examples/saucedemo/.waygraph-auto/6d700055.log +0 -0
  239. package/examples/saucedemo/.waygraph-auto/6ead848f.log +0 -0
  240. package/examples/saucedemo/.waygraph-auto/6f05bdc1.log +0 -0
  241. package/examples/saucedemo/.waygraph-auto/70279fc3.log +0 -0
  242. package/examples/saucedemo/.waygraph-auto/70c97639.log +0 -0
  243. package/examples/saucedemo/.waygraph-auto/72675b2d.log +0 -6
  244. package/examples/saucedemo/.waygraph-auto/731a14bd.log +0 -0
  245. package/examples/saucedemo/.waygraph-auto/733dd260.log +0 -5
  246. package/examples/saucedemo/.waygraph-auto/73a41843.log +0 -0
  247. package/examples/saucedemo/.waygraph-auto/75016486.log +0 -0
  248. package/examples/saucedemo/.waygraph-auto/752b01c6.log +0 -22
  249. package/examples/saucedemo/.waygraph-auto/75675227.log +0 -6
  250. package/examples/saucedemo/.waygraph-auto/756fd326.log +0 -20
  251. package/examples/saucedemo/.waygraph-auto/75e2e658.log +0 -0
  252. package/examples/saucedemo/.waygraph-auto/76128a2d.log +0 -0
  253. package/examples/saucedemo/.waygraph-auto/76ac1a86.log +0 -0
  254. package/examples/saucedemo/.waygraph-auto/77605295.log +0 -0
  255. package/examples/saucedemo/.waygraph-auto/7773a809.log +0 -0
  256. package/examples/saucedemo/.waygraph-auto/78043767.log +0 -20
  257. package/examples/saucedemo/.waygraph-auto/792671f4.log +0 -22
  258. package/examples/saucedemo/.waygraph-auto/796ab578.log +0 -0
  259. package/examples/saucedemo/.waygraph-auto/79915adb.log +0 -20
  260. package/examples/saucedemo/.waygraph-auto/7a398774.log +0 -6
  261. package/examples/saucedemo/.waygraph-auto/7a72f66e.log +0 -6
  262. package/examples/saucedemo/.waygraph-auto/7a984334.log +0 -4
  263. package/examples/saucedemo/.waygraph-auto/7b226350.log +0 -5
  264. package/examples/saucedemo/.waygraph-auto/7c6ee793.log +0 -20
  265. package/examples/saucedemo/.waygraph-auto/7c726dc4.log +0 -22
  266. package/examples/saucedemo/.waygraph-auto/7c72e8a5.log +0 -4
  267. package/examples/saucedemo/.waygraph-auto/7c99674f.log +0 -0
  268. package/examples/saucedemo/.waygraph-auto/7dbee625.log +0 -22
  269. package/examples/saucedemo/.waygraph-auto/7df66956.log +0 -0
  270. package/examples/saucedemo/.waygraph-auto/7e053160.log +0 -0
  271. package/examples/saucedemo/.waygraph-auto/7e8a6b62.log +0 -0
  272. package/examples/saucedemo/.waygraph-auto/7effd5b2.log +0 -20
  273. package/examples/saucedemo/.waygraph-auto/7f1b4864.log +0 -0
  274. package/examples/saucedemo/.waygraph-auto/7f94fd02.log +0 -0
  275. package/examples/saucedemo/.waygraph-auto/7fdd47ee.log +0 -2
  276. package/examples/saucedemo/.waygraph-auto/802a0b5b.log +0 -0
  277. package/examples/saucedemo/.waygraph-auto/80322e0b.log +0 -0
  278. package/examples/saucedemo/.waygraph-auto/80a4978e.log +0 -6
  279. package/examples/saucedemo/.waygraph-auto/81257bf0.log +0 -0
  280. package/examples/saucedemo/.waygraph-auto/81cfe480.log +0 -22
  281. package/examples/saucedemo/.waygraph-auto/832f5add.log +0 -0
  282. package/examples/saucedemo/.waygraph-auto/8337b6ad.log +0 -0
  283. package/examples/saucedemo/.waygraph-auto/8481aa1c.log +0 -0
  284. package/examples/saucedemo/.waygraph-auto/8493928e.log +0 -0
  285. package/examples/saucedemo/.waygraph-auto/849ed45d.log +0 -0
  286. package/examples/saucedemo/.waygraph-auto/853bde43.log +0 -0
  287. package/examples/saucedemo/.waygraph-auto/8598b4c0.log +0 -0
  288. package/examples/saucedemo/.waygraph-auto/859a261d.log +0 -0
  289. package/examples/saucedemo/.waygraph-auto/86350ea6.log +0 -22
  290. package/examples/saucedemo/.waygraph-auto/86bb598a.log +0 -0
  291. package/examples/saucedemo/.waygraph-auto/86d09876.log +0 -22
  292. package/examples/saucedemo/.waygraph-auto/878ad01b.log +0 -4
  293. package/examples/saucedemo/.waygraph-auto/87c88ba5.log +0 -0
  294. package/examples/saucedemo/.waygraph-auto/87cb80ff.log +0 -0
  295. package/examples/saucedemo/.waygraph-auto/880b2e78.log +0 -6
  296. package/examples/saucedemo/.waygraph-auto/88527936.log +0 -5
  297. package/examples/saucedemo/.waygraph-auto/893023ea.log +0 -5
  298. package/examples/saucedemo/.waygraph-auto/89416718.log +0 -0
  299. package/examples/saucedemo/.waygraph-auto/8996a857.log +0 -6
  300. package/examples/saucedemo/.waygraph-auto/8a64ba0f.log +0 -6
  301. package/examples/saucedemo/.waygraph-auto/8b1cc2aa.log +0 -6
  302. package/examples/saucedemo/.waygraph-auto/8b73d13e.log +0 -6
  303. package/examples/saucedemo/.waygraph-auto/8be93021.log +0 -0
  304. package/examples/saucedemo/.waygraph-auto/8d960d31.log +0 -1
  305. package/examples/saucedemo/.waygraph-auto/8d9e5cd2.log +0 -21
  306. package/examples/saucedemo/.waygraph-auto/8e12e34f.log +0 -22
  307. package/examples/saucedemo/.waygraph-auto/8ec7d260.log +0 -0
  308. package/examples/saucedemo/.waygraph-auto/8ed43279.log +0 -0
  309. package/examples/saucedemo/.waygraph-auto/93acae32.log +0 -5
  310. package/examples/saucedemo/.waygraph-auto/94221b2b.log +0 -0
  311. package/examples/saucedemo/.waygraph-auto/96321a08.log +0 -0
  312. package/examples/saucedemo/.waygraph-auto/9742b6c2.log +0 -6
  313. package/examples/saucedemo/.waygraph-auto/9761c4c4.log +0 -6
  314. package/examples/saucedemo/.waygraph-auto/976394cd.log +0 -20
  315. package/examples/saucedemo/.waygraph-auto/982138cf.log +0 -0
  316. package/examples/saucedemo/.waygraph-auto/99cc93eb.log +0 -6
  317. package/examples/saucedemo/.waygraph-auto/9a26134c.log +0 -20
  318. package/examples/saucedemo/.waygraph-auto/9cbfbedc.log +0 -0
  319. package/examples/saucedemo/.waygraph-auto/9d827954.log +0 -20
  320. package/examples/saucedemo/.waygraph-auto/9dc147d2.log +0 -22
  321. package/examples/saucedemo/.waygraph-auto/9dd78c5e.log +0 -0
  322. package/examples/saucedemo/.waygraph-auto/a1ab5d29.log +0 -0
  323. package/examples/saucedemo/.waygraph-auto/a215a395.log +0 -22
  324. package/examples/saucedemo/.waygraph-auto/a23b7086.log +0 -4
  325. package/examples/saucedemo/.waygraph-auto/a35bd5ec.log +0 -0
  326. package/examples/saucedemo/.waygraph-auto/a4b36275.log +0 -0
  327. package/examples/saucedemo/.waygraph-auto/a4f8d355.log +0 -20
  328. package/examples/saucedemo/.waygraph-auto/a68995e9.log +0 -22
  329. package/examples/saucedemo/.waygraph-auto/a6e4f936.log +0 -22
  330. package/examples/saucedemo/.waygraph-auto/a7da862b.log +0 -0
  331. package/examples/saucedemo/.waygraph-auto/a82e2a48.log +0 -0
  332. package/examples/saucedemo/.waygraph-auto/a8645294.log +0 -0
  333. package/examples/saucedemo/.waygraph-auto/a94738b7.log +0 -0
  334. package/examples/saucedemo/.waygraph-auto/a952eb91.log +0 -0
  335. package/examples/saucedemo/.waygraph-auto/a9559653.log +0 -5
  336. package/examples/saucedemo/.waygraph-auto/aa1beafb.log +0 -0
  337. package/examples/saucedemo/.waygraph-auto/aa226dd0.log +0 -22
  338. package/examples/saucedemo/.waygraph-auto/aa478de2.log +0 -0
  339. package/examples/saucedemo/.waygraph-auto/aa7323f8.log +0 -20
  340. package/examples/saucedemo/.waygraph-auto/aaae4fb0.log +0 -20
  341. package/examples/saucedemo/.waygraph-auto/ac350fc7.log +0 -20
  342. package/examples/saucedemo/.waygraph-auto/ac5dde3d.log +0 -0
  343. package/examples/saucedemo/.waygraph-auto/acc1b63a.log +0 -0
  344. package/examples/saucedemo/.waygraph-auto/ad0bfad9.log +0 -5
  345. package/examples/saucedemo/.waygraph-auto/ad12d191.log +0 -0
  346. package/examples/saucedemo/.waygraph-auto/ae3a9b06.log +0 -0
  347. package/examples/saucedemo/.waygraph-auto/af2fae12.log +0 -0
  348. package/examples/saucedemo/.waygraph-auto/b04638f4.log +0 -6
  349. package/examples/saucedemo/.waygraph-auto/b0752c49.log +0 -0
  350. package/examples/saucedemo/.waygraph-auto/b14811d7.log +0 -6
  351. package/examples/saucedemo/.waygraph-auto/b2d2dbb2.log +0 -22
  352. package/examples/saucedemo/.waygraph-auto/b3d172f3.log +0 -0
  353. package/examples/saucedemo/.waygraph-auto/b48863e5.log +0 -22
  354. package/examples/saucedemo/.waygraph-auto/b5569336.log +0 -0
  355. package/examples/saucedemo/.waygraph-auto/b56968e1.log +0 -6
  356. package/examples/saucedemo/.waygraph-auto/b57921c5.log +0 -0
  357. package/examples/saucedemo/.waygraph-auto/b64e0620.log +0 -20
  358. package/examples/saucedemo/.waygraph-auto/b75168f7.log +0 -1
  359. package/examples/saucedemo/.waygraph-auto/b86a6218.log +0 -6
  360. package/examples/saucedemo/.waygraph-auto/b8e9e956.log +0 -22
  361. package/examples/saucedemo/.waygraph-auto/b9ab0983.log +0 -0
  362. package/examples/saucedemo/.waygraph-auto/b9b310ff.log +0 -21
  363. package/examples/saucedemo/.waygraph-auto/bb0e0e46.log +0 -0
  364. package/examples/saucedemo/.waygraph-auto/bc111745.log +0 -22
  365. package/examples/saucedemo/.waygraph-auto/bf7a77a2.log +0 -0
  366. package/examples/saucedemo/.waygraph-auto/bf85a598.log +0 -0
  367. package/examples/saucedemo/.waygraph-auto/bf8693e7.log +0 -0
  368. package/examples/saucedemo/.waygraph-auto/c0d6f353.log +0 -21
  369. package/examples/saucedemo/.waygraph-auto/c0febcf2.log +0 -20
  370. package/examples/saucedemo/.waygraph-auto/c4c52998.log +0 -6
  371. package/examples/saucedemo/.waygraph-auto/c52bac6d.log +0 -0
  372. package/examples/saucedemo/.waygraph-auto/c60cc55e.log +0 -0
  373. package/examples/saucedemo/.waygraph-auto/c809ceb4.log +0 -22
  374. package/examples/saucedemo/.waygraph-auto/c851cc53.log +0 -6
  375. package/examples/saucedemo/.waygraph-auto/c8987b67.log +0 -0
  376. package/examples/saucedemo/.waygraph-auto/c9d76e32.log +0 -0
  377. package/examples/saucedemo/.waygraph-auto/ca6de7e7.log +0 -0
  378. package/examples/saucedemo/.waygraph-auto/ca8561bc.log +0 -0
  379. package/examples/saucedemo/.waygraph-auto/cae91469.log +0 -0
  380. package/examples/saucedemo/.waygraph-auto/cb05d223.log +0 -0
  381. package/examples/saucedemo/.waygraph-auto/cb86d45b.log +0 -0
  382. package/examples/saucedemo/.waygraph-auto/cb9a1978.log +0 -6
  383. package/examples/saucedemo/.waygraph-auto/cbbc689c.log +0 -6
  384. package/examples/saucedemo/.waygraph-auto/cc989184.log +0 -20
  385. package/examples/saucedemo/.waygraph-auto/cd88364b.log +0 -0
  386. package/examples/saucedemo/.waygraph-auto/cd919e1d.log +0 -0
  387. package/examples/saucedemo/.waygraph-auto/ce584949.log +0 -5
  388. package/examples/saucedemo/.waygraph-auto/cf34b895.log +0 -2
  389. package/examples/saucedemo/.waygraph-auto/cfff9eef.log +0 -20
  390. package/examples/saucedemo/.waygraph-auto/d0f59b21.log +0 -4
  391. package/examples/saucedemo/.waygraph-auto/d1195079.log +0 -20
  392. package/examples/saucedemo/.waygraph-auto/d2ef067a.log +0 -5
  393. package/examples/saucedemo/.waygraph-auto/d37719a6.log +0 -0
  394. package/examples/saucedemo/.waygraph-auto/d425471f.log +0 -6
  395. package/examples/saucedemo/.waygraph-auto/d4afe93f.log +0 -5
  396. package/examples/saucedemo/.waygraph-auto/d50e58f0.log +0 -0
  397. package/examples/saucedemo/.waygraph-auto/d5293921.log +0 -0
  398. package/examples/saucedemo/.waygraph-auto/d62a22c2.log +0 -21
  399. package/examples/saucedemo/.waygraph-auto/d6d1761f.log +0 -22
  400. package/examples/saucedemo/.waygraph-auto/d6d5f411.log +0 -22
  401. package/examples/saucedemo/.waygraph-auto/d6df2771.log +0 -6
  402. package/examples/saucedemo/.waygraph-auto/d7075012.log +0 -21
  403. package/examples/saucedemo/.waygraph-auto/d846cd78.log +0 -0
  404. package/examples/saucedemo/.waygraph-auto/d934da78.log +0 -0
  405. package/examples/saucedemo/.waygraph-auto/d9ddc297.log +0 -0
  406. package/examples/saucedemo/.waygraph-auto/da0a06bf.log +0 -0
  407. package/examples/saucedemo/.waygraph-auto/da6ebb31.log +0 -0
  408. package/examples/saucedemo/.waygraph-auto/db4ac845.log +0 -0
  409. package/examples/saucedemo/.waygraph-auto/db6d7774.log +0 -0
  410. package/examples/saucedemo/.waygraph-auto/db81ba7d.log +0 -0
  411. package/examples/saucedemo/.waygraph-auto/db839827.log +0 -5
  412. package/examples/saucedemo/.waygraph-auto/dc58eb72.log +0 -0
  413. package/examples/saucedemo/.waygraph-auto/dddd057c.log +0 -20
  414. package/examples/saucedemo/.waygraph-auto/dde5e859.log +0 -22
  415. package/examples/saucedemo/.waygraph-auto/ddf975e6.log +0 -0
  416. package/examples/saucedemo/.waygraph-auto/de8cac58.log +0 -0
  417. package/examples/saucedemo/.waygraph-auto/de8cb83d.log +0 -6
  418. package/examples/saucedemo/.waygraph-auto/ded5511a.log +0 -6
  419. package/examples/saucedemo/.waygraph-auto/dedfcb18.log +0 -0
  420. package/examples/saucedemo/.waygraph-auto/def4d9b1.log +0 -0
  421. package/examples/saucedemo/.waygraph-auto/e03cfd8e.log +0 -0
  422. package/examples/saucedemo/.waygraph-auto/e1549e40.log +0 -0
  423. package/examples/saucedemo/.waygraph-auto/e1b0676d.log +0 -21
  424. package/examples/saucedemo/.waygraph-auto/e230f24e.log +0 -0
  425. package/examples/saucedemo/.waygraph-auto/e5111463.log +0 -0
  426. package/examples/saucedemo/.waygraph-auto/e5127c03.log +0 -22
  427. package/examples/saucedemo/.waygraph-auto/e5fc1d7c.log +0 -5
  428. package/examples/saucedemo/.waygraph-auto/e6fd2202.log +0 -0
  429. package/examples/saucedemo/.waygraph-auto/eb38d92e.log +0 -22
  430. package/examples/saucedemo/.waygraph-auto/edaa806d.log +0 -0
  431. package/examples/saucedemo/.waygraph-auto/edaf33de.log +0 -0
  432. package/examples/saucedemo/.waygraph-auto/edd40cbb.log +0 -20
  433. package/examples/saucedemo/.waygraph-auto/eddfbffc.log +0 -6
  434. package/examples/saucedemo/.waygraph-auto/ee86203e.log +0 -0
  435. package/examples/saucedemo/.waygraph-auto/ee9fa1ad.log +0 -5
  436. package/examples/saucedemo/.waygraph-auto/ef319474.log +0 -22
  437. package/examples/saucedemo/.waygraph-auto/f1f38eeb.log +0 -22
  438. package/examples/saucedemo/.waygraph-auto/f24b2915.log +0 -0
  439. package/examples/saucedemo/.waygraph-auto/f28eee8d.log +0 -0
  440. package/examples/saucedemo/.waygraph-auto/f2943898.log +0 -0
  441. package/examples/saucedemo/.waygraph-auto/f33bde90.log +0 -0
  442. package/examples/saucedemo/.waygraph-auto/f43de83c.log +0 -0
  443. package/examples/saucedemo/.waygraph-auto/f6ba7cb4.log +0 -6
  444. package/examples/saucedemo/.waygraph-auto/f7ac4d62.log +0 -20
  445. package/examples/saucedemo/.waygraph-auto/f86224c6.log +0 -0
  446. package/examples/saucedemo/.waygraph-auto/f929bb79.log +0 -0
  447. package/examples/saucedemo/.waygraph-auto/f92d4c6c.log +0 -22
  448. package/examples/saucedemo/.waygraph-auto/f92faf40.log +0 -5
  449. package/examples/saucedemo/.waygraph-auto/fa784369.log +0 -21
  450. package/examples/saucedemo/.waygraph-auto/fb55f723.log +0 -20
  451. package/examples/saucedemo/.waygraph-auto/fba3b738.log +0 -0
  452. package/examples/saucedemo/.waygraph-auto/fc917c18.log +0 -0
  453. package/examples/saucedemo/.waygraph-auto/fe83305d.log +0 -0
  454. package/examples/saucedemo/.waygraph-auto/ff616932.log +0 -0
  455. package/examples/saucedemo/.waygraph-auto/ffdf2854.log +0 -6
  456. package/examples/saucedemo/scripts/capture-auto-headful.mjs +0 -120
  457. package/examples/saucedemo/scripts/capture-wrong-login.mjs +0 -141
  458. package/examples/saucedemo/scripts/demo-device-presets.mjs +0 -188
  459. package/examples/saucedemo/scripts/demo-orientation-gestures-video.mjs +0 -262
  460. package/examples/saucedemo/scripts/show-add-to-cart-menu.mjs +0 -123
  461. package/examples/saucedemo/scripts/show-auto-menu.mjs +0 -72
  462. package/templates/scaffold/scripts/README.md +0 -13
  463. package/templates/scaffold/scripts/fixture-server.mjs +0 -50
  464. package/templates/scaffold/scripts/with-fixture.mjs +0 -69
  465. package/templates/scaffold/test-results/.last-run.json +0 -4
  466. /package/templates/scaffold/src/map/(app_base)/home/{home.html → index.html} +0 -0
File without changes
File without changes
@@ -1,21 +0,0 @@
1
- [21:21:23.818] waygraph pilot: stub.before ctx.title("Signing in · mobile")
2
- [21:21:23.818] waygraph pilot: stub.before ctx.todos n=6 index=0
3
- [21:21:23.818] waygraph pilot: stub.before ctx.device(mobile)
4
- [21:21:23.819] waygraph pilot: stub.before ctx.zoom(1.35)
5
- [21:21:23.819] waygraph pilot: stub.before ring #user-name tone=info label="Username"
6
- [21:21:24.690] waygraph pilot: stub.after ctx.todos n=6 index=1
7
- [21:21:25.888] waygraph pilot: stub.before ring #password tone=planned label="Password"
8
- [21:21:26.064] waygraph pilot: stub.after ctx.todos n=6 index=2
9
- [21:21:27.395] waygraph pilot: stub.before ring #login-button tone=warning label="Login"
10
- [21:21:27.568] waygraph pilot: stub.after ctx.title("Inventory · landscape")
11
- [21:21:27.568] waygraph pilot: stub.after ctx.todos n=6 index=3
12
- [21:21:27.568] waygraph pilot: stub.after ctx.device(mobile)
13
- [21:21:27.568] waygraph pilot: stub.after ring .inventory_list tone=success label="Product shelf"
14
- [21:21:29.892] waygraph pilot: stub.before ctx.title("Open cart · landscape")
15
- [21:21:29.892] waygraph pilot: stub.before ctx.todos n=6 index=5
16
- [21:21:29.892] waygraph pilot: stub.before ctx.device(mobile)
17
- [21:21:29.892] waygraph pilot: stub.before ctx.zoom(1.4)
18
- [21:21:29.892] waygraph pilot: stub.before ring .shopping_cart_link tone=planned label="Cart"
19
- [21:21:30.241] waygraph pilot: stub.after ctx.title("Your cart · desktop")
20
- [21:21:30.241] waygraph pilot: stub.after ring .cart_item tone=success label="Cart items"
21
- [21:21:30.312] waygraph pilot: ring not painted - selector matched nothing (or a zero-size element): .cart_item
File without changes
File without changes
@@ -1,22 +0,0 @@
1
- [13:04:44.176] waygraph pilot: stub.before ctx.title("Signing in · mobile")
2
- [13:04:44.177] waygraph pilot: stub.before ctx.todos n=6 index=0
3
- [13:04:44.177] waygraph pilot: stub.before ctx.device(mobile)
4
- [13:04:44.177] waygraph pilot: stub.before ctx.zoom(1.35)
5
- [13:04:44.177] waygraph pilot: stub.before ring #user-name tone=info label="Username"
6
- [13:04:45.401] waygraph pilot: stub.after ctx.todos n=6 index=1
7
- [13:04:48.550] waygraph pilot: stub.before ring #password tone=planned label="Password"
8
- [13:04:48.656] waygraph pilot: stub.after ctx.todos n=6 index=2
9
- [13:04:52.040] waygraph pilot: stub.before ring #login-button tone=warning label="Login"
10
- [13:04:52.285] waygraph pilot: stub.after ctx.title("Inventory · landscape")
11
- [13:04:52.285] waygraph pilot: stub.after ctx.todos n=6 index=3
12
- [13:04:52.285] waygraph pilot: stub.after ctx.device(mobile)
13
- [13:04:52.285] waygraph pilot: stub.after ring .inventory_list tone=success label="Product shelf"
14
- [13:04:58.453] waygraph pilot: stub.before ctx.title("Pick a product · tablet")
15
- [13:04:58.453] waygraph pilot: stub.before ctx.todos n=6 index=3
16
- [13:04:58.454] waygraph pilot: stub.before ctx.device(tablet)
17
- [13:04:58.454] waygraph pilot: stub.before ctx.zoom(1.35)
18
- [13:04:58.454] waygraph pilot: stub.before ring div.inventory_item:has(button[data-test="add-to-cart-sauce-labs-backpack"], button[data-test="remove-sauce-labs-backpack"]) .inventory_item_name tone=info label="Sauce Labs Backpack"
19
- [13:04:58.454] waygraph pilot: stub.before ring [data-test="add-to-cart-sauce-labs-backpack"] tone=success label="Add to cart"
20
- [13:04:59.651] waygraph pilot: stub.after ctx.title("In the cart")
21
- [13:04:59.651] waygraph pilot: stub.after ctx.todos n=6 index=4
22
- [13:04:59.651] waygraph pilot: stub.after ring .shopping_cart_badge tone=success label="Cart badge"
@@ -1,5 +0,0 @@
1
- [14:11:07.228] waygraph pilot: highlight ctx.todos n=3 index=0
2
- [14:11:07.228] waygraph pilot: highlight ring #user-name tone=planned label="Username"
3
- [14:11:07.228] waygraph pilot: highlight ring #password tone=info label="Password"
4
- [14:11:10.899] waygraph pilot: highlight ring #no-such-element-waygraph tone=danger label="Gone"
5
- [14:11:12.859] waygraph pilot: highlight ring #login-button tone=success label="Login"
File without changes
@@ -1,22 +0,0 @@
1
- [12:51:48.396] waygraph pilot: stub.before ctx.title("Signing in · mobile")
2
- [12:51:48.397] waygraph pilot: stub.before ctx.todos n=6 index=0
3
- [12:51:48.397] waygraph pilot: stub.before ctx.device(mobile)
4
- [12:51:48.397] waygraph pilot: stub.before ctx.zoom(1.35)
5
- [12:51:48.397] waygraph pilot: stub.before ring #user-name tone=info label="Username"
6
- [12:51:49.455] waygraph pilot: stub.after ctx.todos n=6 index=1
7
- [12:51:51.829] waygraph pilot: stub.before ring #password tone=planned label="Password"
8
- [12:51:51.971] waygraph pilot: stub.after ctx.todos n=6 index=2
9
- [12:51:54.622] waygraph pilot: stub.before ring #login-button tone=warning label="Login"
10
- [12:51:55.128] waygraph pilot: stub.after ctx.title("Inventory · landscape")
11
- [12:51:55.128] waygraph pilot: stub.after ctx.todos n=6 index=3
12
- [12:51:55.128] waygraph pilot: stub.after ctx.device(mobile)
13
- [12:51:55.128] waygraph pilot: stub.after ring .inventory_list tone=success label="Product shelf"
14
- [12:52:00.976] waygraph pilot: stub.before ctx.title("Pick a product · tablet")
15
- [12:52:00.976] waygraph pilot: stub.before ctx.todos n=6 index=3
16
- [12:52:00.976] waygraph pilot: stub.before ctx.device(tablet)
17
- [12:52:00.976] waygraph pilot: stub.before ctx.zoom(1.35)
18
- [12:52:00.976] waygraph pilot: stub.before ring div.inventory_item:has(button[data-test="add-to-cart-sauce-labs-backpack"], button[data-test="remove-sauce-labs-backpack"]) .inventory_item_name tone=info label="Sauce Labs Backpack"
19
- [12:52:00.976] waygraph pilot: stub.before ring [data-test="add-to-cart-sauce-labs-backpack"] tone=success label="Add to cart"
20
- [12:52:01.987] waygraph pilot: stub.after ctx.title("In the cart")
21
- [12:52:01.987] waygraph pilot: stub.after ctx.todos n=6 index=4
22
- [12:52:01.987] waygraph pilot: stub.after ring .shopping_cart_badge tone=success label="Cart badge"
File without changes
File without changes
@@ -1,20 +0,0 @@
1
- [14:06:47.793] waygraph pilot: stub.before ctx.title("Signing in · mobile")
2
- [14:06:47.793] waygraph pilot: stub.before ctx.todos n=6 index=0
3
- [14:06:47.793] waygraph pilot: stub.before ctx.device(mobile)
4
- [14:06:47.794] waygraph pilot: stub.before ctx.zoom(1.35)
5
- [14:06:47.794] waygraph pilot: stub.before ring #user-name tone=info label="Username"
6
- [14:06:48.667] waygraph pilot: stub.after ctx.todos n=6 index=1
7
- [14:06:49.789] waygraph pilot: stub.before ring #password tone=planned label="Password"
8
- [14:06:49.897] waygraph pilot: stub.after ctx.todos n=6 index=2
9
- [14:06:51.311] waygraph pilot: stub.before ring #login-button tone=warning label="Login"
10
- [14:06:51.432] waygraph pilot: stub.after ctx.title("Inventory · landscape")
11
- [14:06:51.432] waygraph pilot: stub.after ctx.todos n=6 index=3
12
- [14:06:51.432] waygraph pilot: stub.after ctx.device(mobile)
13
- [14:06:51.432] waygraph pilot: stub.after ring .inventory_list tone=success label="Product shelf"
14
- [14:06:54.278] waygraph pilot: stub.before ctx.title("Open cart · landscape")
15
- [14:06:54.278] waygraph pilot: stub.before ctx.todos n=6 index=5
16
- [14:06:54.278] waygraph pilot: stub.before ctx.device(mobile)
17
- [14:06:54.279] waygraph pilot: stub.before ctx.zoom(1.4)
18
- [14:06:54.279] waygraph pilot: stub.before ring .shopping_cart_link tone=planned label="Cart"
19
- [14:06:54.569] waygraph pilot: stub.after ctx.title("Your cart · desktop")
20
- [14:06:54.570] waygraph pilot: stub.after ring .cart_item tone=success label="Cart items"
@@ -1,6 +0,0 @@
1
- [13:55:50.142] waygraph pilot: stub.before ctx.title("Signing in · mobile")
2
- [13:55:50.142] waygraph pilot: stub.before ctx.todos n=6 index=0
3
- [13:55:50.142] waygraph pilot: stub.before ctx.device(mobile)
4
- [13:55:50.142] waygraph pilot: stub.before ctx.zoom(1.35)
5
- [13:55:50.142] waygraph pilot: stub.before ring #user-name tone=info label="Username"
6
- [13:55:51.352] waygraph pilot: stub.after ctx.todos n=6 index=1
File without changes
@@ -1,5 +0,0 @@
1
- [14:06:39.547] waygraph pilot: highlight ctx.todos n=3 index=0
2
- [14:06:39.547] waygraph pilot: highlight ring #user-name tone=planned label="Username"
3
- [14:06:39.547] waygraph pilot: highlight ring #password tone=info label="Password"
4
- [14:06:43.410] waygraph pilot: highlight ring #no-such-element-waygraph tone=danger label="Gone"
5
- [14:06:45.509] waygraph pilot: highlight ring #login-button tone=success label="Login"
@@ -1,22 +0,0 @@
1
- [13:55:10.634] waygraph pilot: stub.before ctx.title("Signing in · mobile")
2
- [13:55:10.635] waygraph pilot: stub.before ctx.todos n=6 index=0
3
- [13:55:10.635] waygraph pilot: stub.before ctx.device(mobile)
4
- [13:55:10.635] waygraph pilot: stub.before ctx.zoom(1.35)
5
- [13:55:10.635] waygraph pilot: stub.before ring #user-name tone=info label="Username"
6
- [13:55:11.696] waygraph pilot: stub.after ctx.todos n=6 index=1
7
- [13:55:13.705] waygraph pilot: stub.before ring #password tone=planned label="Password"
8
- [13:55:13.820] waygraph pilot: stub.after ctx.todos n=6 index=2
9
- [13:55:16.320] waygraph pilot: stub.before ring #login-button tone=warning label="Login"
10
- [13:55:16.531] waygraph pilot: stub.after ctx.title("Inventory · landscape")
11
- [13:55:16.531] waygraph pilot: stub.after ctx.todos n=6 index=3
12
- [13:55:16.531] waygraph pilot: stub.after ctx.device(mobile)
13
- [13:55:16.531] waygraph pilot: stub.after ring .inventory_list tone=success label="Product shelf"
14
- [13:55:21.623] waygraph pilot: stub.before ctx.title("Pick a product · tablet")
15
- [13:55:21.623] waygraph pilot: stub.before ctx.todos n=6 index=3
16
- [13:55:21.623] waygraph pilot: stub.before ctx.device(tablet)
17
- [13:55:21.623] waygraph pilot: stub.before ctx.zoom(1.35)
18
- [13:55:21.623] waygraph pilot: stub.before ring div.inventory_item:has(button[data-test="add-to-cart-sauce-labs-backpack"], button[data-test="remove-sauce-labs-backpack"]) .inventory_item_name tone=info label="Sauce Labs Backpack"
19
- [13:55:21.623] waygraph pilot: stub.before ring [data-test="add-to-cart-sauce-labs-backpack"] tone=success label="Add to cart"
20
- [13:55:22.739] waygraph pilot: stub.after ctx.title("In the cart")
21
- [13:55:22.739] waygraph pilot: stub.after ctx.todos n=6 index=4
22
- [13:55:22.739] waygraph pilot: stub.after ring .shopping_cart_badge tone=success label="Cart badge"
@@ -1,22 +0,0 @@
1
- [11:37:25.914] waygraph pilot: stub.before ctx.title("Signing in · mobile")
2
- [11:37:25.915] waygraph pilot: stub.before ctx.todos n=6 index=0
3
- [11:37:25.915] waygraph pilot: stub.before ctx.device(mobile)
4
- [11:37:25.915] waygraph pilot: stub.before ctx.zoom(1.35)
5
- [11:37:25.915] waygraph pilot: stub.before ring #user-name tone=info label="Username"
6
- [11:37:27.864] waygraph pilot: stub.after ctx.todos n=6 index=1
7
- [11:37:31.358] waygraph pilot: stub.before ring #password tone=planned label="Password"
8
- [11:37:31.685] waygraph pilot: stub.after ctx.todos n=6 index=2
9
- [11:37:35.206] waygraph pilot: stub.before ring #login-button tone=warning label="Login"
10
- [11:37:35.729] waygraph pilot: stub.after ctx.title("Inventory · landscape")
11
- [11:37:35.729] waygraph pilot: stub.after ctx.todos n=6 index=3
12
- [11:37:35.729] waygraph pilot: stub.after ctx.device(mobile)
13
- [11:37:35.729] waygraph pilot: stub.after ring .inventory_list tone=success label="Product shelf"
14
- [11:37:43.407] waygraph pilot: stub.before ctx.title("Pick a product · tablet")
15
- [11:37:43.407] waygraph pilot: stub.before ctx.todos n=6 index=3
16
- [11:37:43.407] waygraph pilot: stub.before ctx.device(tablet)
17
- [11:37:43.407] waygraph pilot: stub.before ctx.zoom(1.35)
18
- [11:37:43.407] waygraph pilot: stub.before ring div.inventory_item:has(button[data-test="add-to-cart-sauce-labs-backpack"], button[data-test="remove-sauce-labs-backpack"]) .inventory_item_name tone=info label="Sauce Labs Backpack"
19
- [11:37:43.407] waygraph pilot: stub.before ring [data-test="add-to-cart-sauce-labs-backpack"] tone=success label="Add to cart"
20
- [11:37:44.906] waygraph pilot: stub.after ctx.title("In the cart")
21
- [11:37:44.906] waygraph pilot: stub.after ctx.todos n=6 index=4
22
- [11:37:44.906] waygraph pilot: stub.after ring .shopping_cart_badge tone=success label="Cart badge"
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -1,6 +0,0 @@
1
- [14:11:52.958] waygraph pilot: stub.before ctx.title("Signing in · mobile")
2
- [14:11:52.959] waygraph pilot: stub.before ctx.todos n=6 index=0
3
- [14:11:52.959] waygraph pilot: stub.before ctx.device(mobile)
4
- [14:11:52.959] waygraph pilot: stub.before ctx.zoom(1.35)
5
- [14:11:52.959] waygraph pilot: stub.before ring #user-name tone=info label="Username"
6
- [14:11:54.228] waygraph pilot: stub.after ctx.todos n=6 index=1
@@ -1,20 +0,0 @@
1
- [14:00:36.038] waygraph pilot: stub.before ctx.title("Signing in · mobile")
2
- [14:00:36.038] waygraph pilot: stub.before ctx.todos n=6 index=0
3
- [14:00:36.038] waygraph pilot: stub.before ctx.device(mobile)
4
- [14:00:36.038] waygraph pilot: stub.before ctx.zoom(1.35)
5
- [14:00:36.039] waygraph pilot: stub.before ring #user-name tone=info label="Username"
6
- [14:00:37.012] waygraph pilot: stub.after ctx.todos n=6 index=1
7
- [14:00:38.516] waygraph pilot: stub.before ring #password tone=planned label="Password"
8
- [14:00:38.588] waygraph pilot: stub.after ctx.todos n=6 index=2
9
- [14:00:39.825] waygraph pilot: stub.before ring #login-button tone=warning label="Login"
10
- [14:00:40.139] waygraph pilot: stub.after ctx.title("Inventory · landscape")
11
- [14:00:40.139] waygraph pilot: stub.after ctx.todos n=6 index=3
12
- [14:00:40.139] waygraph pilot: stub.after ctx.device(mobile)
13
- [14:00:40.139] waygraph pilot: stub.after ring .inventory_list tone=success label="Product shelf"
14
- [14:00:43.111] waygraph pilot: stub.before ctx.title("Open cart · landscape")
15
- [14:00:43.111] waygraph pilot: stub.before ctx.todos n=6 index=5
16
- [14:00:43.111] waygraph pilot: stub.before ctx.device(mobile)
17
- [14:00:43.111] waygraph pilot: stub.before ctx.zoom(1.4)
18
- [14:00:43.111] waygraph pilot: stub.before ring .shopping_cart_link tone=planned label="Cart"
19
- [14:00:43.323] waygraph pilot: stub.after ctx.title("Your cart · desktop")
20
- [14:00:43.323] waygraph pilot: stub.after ring .cart_item tone=success label="Cart items"
File without changes
File without changes
@@ -1,22 +0,0 @@
1
- [18:20:03.075] waygraph pilot: stub.before ctx.title("Signing in · mobile")
2
- [18:20:03.076] waygraph pilot: stub.before ctx.todos n=6 index=0
3
- [18:20:03.077] waygraph pilot: stub.before ctx.device(mobile)
4
- [18:20:03.077] waygraph pilot: stub.before ctx.zoom(1.35)
5
- [18:20:03.077] waygraph pilot: stub.before ring #user-name tone=info label="Username"
6
- [18:20:04.426] waygraph pilot: stub.after ctx.todos n=6 index=1
7
- [18:20:06.573] waygraph pilot: stub.before ring #password tone=planned label="Password"
8
- [18:20:06.738] waygraph pilot: stub.after ctx.todos n=6 index=2
9
- [18:20:08.639] waygraph pilot: stub.before ring #login-button tone=warning label="Login"
10
- [18:20:08.736] waygraph pilot: stub.after ctx.title("Inventory · landscape")
11
- [18:20:08.736] waygraph pilot: stub.after ctx.todos n=6 index=3
12
- [18:20:08.736] waygraph pilot: stub.after ctx.device(mobile)
13
- [18:20:08.736] waygraph pilot: stub.after ring .inventory_list tone=success label="Product shelf"
14
- [18:20:11.298] waygraph pilot: stub.before ctx.title("Pick a product · tablet")
15
- [18:20:11.298] waygraph pilot: stub.before ctx.todos n=6 index=3
16
- [18:20:11.298] waygraph pilot: stub.before ctx.device(tablet)
17
- [18:20:11.298] waygraph pilot: stub.before ctx.zoom(1.35)
18
- [18:20:11.298] waygraph pilot: stub.before ring div.inventory_item:has(button[data-test="add-to-cart-sauce-labs-backpack"], button[data-test="remove-sauce-labs-backpack"]) .inventory_item_name tone=info label="Sauce Labs Backpack"
19
- [18:20:11.298] waygraph pilot: stub.before ring [data-test="add-to-cart-sauce-labs-backpack"] tone=success label="Add to cart"
20
- [18:20:11.986] waygraph pilot: stub.after ctx.title("In the cart")
21
- [18:20:11.986] waygraph pilot: stub.after ctx.todos n=6 index=4
22
- [18:20:11.986] waygraph pilot: stub.after ring .shopping_cart_badge tone=success label="Cart badge"
@@ -1,5 +0,0 @@
1
- [17:11:21.484] waygraph pilot: highlight ctx.todos n=3 index=0
2
- [17:11:21.486] waygraph pilot: highlight ring #user-name tone=planned label="Username"
3
- [17:11:21.487] waygraph pilot: highlight ring #password tone=info label="Password"
4
- [17:11:25.138] waygraph pilot: highlight ring #no-such-element-waygraph tone=danger label="Gone"
5
- [17:11:26.947] waygraph pilot: highlight ring #login-button tone=success label="Login"
@@ -1,21 +0,0 @@
1
- [18:19:57.299] waygraph pilot: stub.before ctx.title("Signing in · mobile")
2
- [18:19:57.300] waygraph pilot: stub.before ctx.todos n=6 index=0
3
- [18:19:57.300] waygraph pilot: stub.before ctx.device(mobile)
4
- [18:19:57.300] waygraph pilot: stub.before ctx.zoom(1.35)
5
- [18:19:57.300] waygraph pilot: stub.before ring #user-name tone=info label="Username"
6
- [18:19:58.498] waygraph pilot: stub.after ctx.todos n=6 index=1
7
- [18:19:59.896] waygraph pilot: stub.before ring #password tone=planned label="Password"
8
- [18:20:00.105] waygraph pilot: stub.after ctx.todos n=6 index=2
9
- [18:20:01.394] waygraph pilot: stub.before ring #login-button tone=warning label="Login"
10
- [18:20:01.596] waygraph pilot: stub.after ctx.title("Inventory · landscape")
11
- [18:20:01.597] waygraph pilot: stub.after ctx.todos n=6 index=3
12
- [18:20:01.597] waygraph pilot: stub.after ctx.device(mobile)
13
- [18:20:01.597] waygraph pilot: stub.after ring .inventory_list tone=success label="Product shelf"
14
- [18:20:04.415] waygraph pilot: stub.before ctx.title("Open cart · landscape")
15
- [18:20:04.415] waygraph pilot: stub.before ctx.todos n=6 index=5
16
- [18:20:04.415] waygraph pilot: stub.before ctx.device(mobile)
17
- [18:20:04.415] waygraph pilot: stub.before ctx.zoom(1.4)
18
- [18:20:04.415] waygraph pilot: stub.before ring .shopping_cart_link tone=planned label="Cart"
19
- [18:20:04.708] waygraph pilot: stub.after ctx.title("Your cart · desktop")
20
- [18:20:04.708] waygraph pilot: stub.after ring .cart_item tone=success label="Cart items"
21
- [18:20:04.740] waygraph pilot: ring not painted - selector matched nothing (or a zero-size element): .cart_item
@@ -1,20 +0,0 @@
1
- [16:12:39.604] waygraph pilot: stub.before ctx.title("Signing in · mobile")
2
- [16:12:39.605] waygraph pilot: stub.before ctx.todos n=6 index=0
3
- [16:12:39.605] waygraph pilot: stub.before ctx.device(mobile)
4
- [16:12:39.605] waygraph pilot: stub.before ctx.zoom(1.35)
5
- [16:12:39.605] waygraph pilot: stub.before ring #user-name tone=info label="Username"
6
- [16:12:40.582] waygraph pilot: stub.after ctx.todos n=6 index=1
7
- [16:12:42.304] waygraph pilot: stub.before ring #password tone=planned label="Password"
8
- [16:12:42.445] waygraph pilot: stub.after ctx.todos n=6 index=2
9
- [16:12:44.041] waygraph pilot: stub.before ring #login-button tone=warning label="Login"
10
- [16:12:44.385] waygraph pilot: stub.after ctx.title("Inventory · landscape")
11
- [16:12:44.385] waygraph pilot: stub.after ctx.todos n=6 index=3
12
- [16:12:44.385] waygraph pilot: stub.after ctx.device(mobile)
13
- [16:12:44.385] waygraph pilot: stub.after ring .inventory_list tone=success label="Product shelf"
14
- [16:12:47.747] waygraph pilot: stub.before ctx.title("Open cart · landscape")
15
- [16:12:47.747] waygraph pilot: stub.before ctx.todos n=6 index=5
16
- [16:12:47.747] waygraph pilot: stub.before ctx.device(mobile)
17
- [16:12:47.747] waygraph pilot: stub.before ctx.zoom(1.4)
18
- [16:12:47.747] waygraph pilot: stub.before ring .shopping_cart_link tone=planned label="Cart"
19
- [16:12:48.104] waygraph pilot: stub.after ctx.title("Your cart · desktop")
20
- [16:12:48.104] waygraph pilot: stub.after ring .cart_item tone=success label="Cart items"
File without changes
File without changes
File without changes
File without changes
@@ -1,6 +0,0 @@
1
- [16:13:18.032] waygraph pilot: stub.before ctx.title("Signing in · mobile")
2
- [16:13:18.033] waygraph pilot: stub.before ctx.todos n=6 index=0
3
- [16:13:18.033] waygraph pilot: stub.before ctx.device(mobile)
4
- [16:13:18.033] waygraph pilot: stub.before ctx.zoom(1.35)
5
- [16:13:18.033] waygraph pilot: stub.before ring #user-name tone=info label="Username"
6
- [16:13:19.279] waygraph pilot: stub.after ctx.todos n=6 index=1
@@ -1,120 +0,0 @@
1
- import { chromium } from "@playwright/test";
2
- import { join, dirname } from "node:path";
3
- import { fileURLToPath, pathToFileURL } from "node:url";
4
- import { createRequire } from "node:module";
5
-
6
- const require = createRequire(import.meta.url);
7
- const tsxEsm = require.resolve("tsx/esm");
8
- await import(tsxEsm);
9
-
10
- const { buildExploreContext, buildExploreMenu } = await import(
11
- pathToFileURL(join(dirname(fileURLToPath(import.meta.url)), "../../../dist/auto-explore.js")).href
12
- );
13
- const { locate } = await import(
14
- pathToFileURL(join(dirname(fileURLToPath(import.meta.url)), "../../../dist/index.js")).href
15
- );
16
-
17
- const projectDir = join(dirname(fileURLToPath(import.meta.url)), "..");
18
- const outDir = join(projectDir, "../../.tmp/waygraph-auto");
19
- const exe = process.env.CHROME_PATH || process.env.CHROMIUM_PATH;
20
-
21
- const PANEL_CSS =
22
- "#wg-auto-panel{position:fixed;z-index:2147483647;left:50%;bottom:12px;transform:translateX(-50%);" +
23
- "max-width:min(92vw,720px);max-height:calc(100vh - 24px);overflow-y:auto;box-sizing:border-box;" +
24
- "background:rgba(20,10,40,.94);color:#fff;border-radius:14px;padding:16px 20px;" +
25
- "font:14px/1.4 system-ui,sans-serif;box-shadow:0 12px 30px rgba(0,0,0,.35);}" +
26
- "#wg-auto-panel h3{margin:0 0 10px;font-size:16px;}" +
27
- "#wg-auto-panel .wg-here{color:#c9a6ff;margin-bottom:12px;}" +
28
- "#wg-auto-panel .wg-actions{display:flex;flex-direction:column;gap:8px;}" +
29
- "#wg-auto-panel button.wg-act{text-align:left;padding:10px 12px;border-radius:10px;border:1px solid #5b3aa8;" +
30
- "background:#2a1450;color:#fff;font:13px/1.3 system-ui,sans-serif;cursor:pointer;}" +
31
- "#wg-auto-panel .wg-section{margin:12px 0 6px;font-size:11px;font-weight:700;color:#a78bfa;text-transform:uppercase;}" +
32
- "#wg-auto-panel .wg-map{margin:8px 0 12px;padding:8px 10px;border-radius:8px;background:rgba(0,0,0,.25);font-size:11px;line-height:1.5;}" +
33
- "#wg-auto-panel .wg-map .wg-cp{opacity:.55;}#wg-auto-panel .wg-map .wg-cp-here{color:#fff;opacity:1;font-weight:700;}";
34
-
35
- function esc(s) {
36
- return s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/"/g, "&quot;");
37
- }
38
-
39
- function panelHtml(menu, nodeNames, library) {
40
- const here = menu.here;
41
- const hereLabel = here ?? "Unknown — pick Start here";
42
- const chips = nodeNames
43
- .map((cp) => {
44
- const cls = cp === here ? "wg-cp wg-cp-here" : "wg-cp";
45
- return `<span class="${cls}">${esc(cp)}${cp === here ? " (here)" : ""}</span>`;
46
- })
47
- .join(" · ");
48
- let html =
49
- `<style>${PANEL_CSS}</style><div id="wg-auto-panel">` +
50
- `<h3>waygraph auto</h3><div class="wg-here">You are here: <strong>${esc(hereLabel)}</strong></div>` +
51
- `<div class="wg-actions">`;
52
- for (const section of menu.sections) {
53
- html += `<div class="wg-section">${esc(section.title)}</div>`;
54
- for (const c of section.edges) {
55
- const entry = library.get(c.block);
56
- const desc = entry?.description ? `<br><span style="opacity:.85">${esc(entry.description)}</span>` : "";
57
- html +=
58
- `<button class="wg-act"><span class="wg-kind">${esc(c.kind)}</span> ` +
59
- `<strong>${esc(c.block)}</strong> → ${esc(c.to)}${desc}</button>`;
60
- }
61
- }
62
- html += `</div><div class="wg-map"><strong>Screens:</strong> ${chips}</div></div>`;
63
- return html;
64
- }
65
-
66
- async function capture(label, page, menu, nodeNames, library) {
67
- await page.evaluate((inner) => {
68
- let host = document.getElementById("wg-auto-host");
69
- if (!host) {
70
- host = document.createElement("div");
71
- host.id = "wg-auto-host";
72
- document.documentElement.appendChild(host);
73
- }
74
- host.innerHTML = inner;
75
- }, panelHtml(menu, nodeNames, library));
76
- const path = join(outDir, `headful-${label}.png`);
77
- await page.screenshot({ path, fullPage: false });
78
- console.log(path);
79
- }
80
-
81
- const { graph, library } = await buildExploreContext(projectDir);
82
- const nodeNames = graph.nodes.map((n) => n.checkpoint);
83
- const navTags = library.navBlocks.map((n) => n.block);
84
-
85
- const browser = await chromium.launch({
86
- headless: true,
87
- ...(exe ? { executablePath: exe, args: ["--no-sandbox", "--disable-dev-shm-usage"] } : {}),
88
- });
89
- const context = await browser.newContext({
90
- viewport: { width: 1280, height: 900 },
91
- baseURL: "https://www.saucedemo.com",
92
- });
93
- const page = await context.newPage();
94
- await page.goto("/", { waitUntil: "load" });
95
-
96
- async function hereNow(p) {
97
- const path = new URL(p.url()).pathname;
98
- if (path.includes("inventory.html") && !path.includes("inventory-item")) return "LoggedIn";
99
- if (path.includes("inventory-item.html")) return "ItemDetailPage";
100
- if (path.includes("cart.html")) return "CartPage";
101
- if (path === "/" || path === "") {
102
- if (await p.locator("#login-button").isVisible({ timeout: 500 }).catch(() => false)) return "LoginPage";
103
- }
104
- return locate(p, navTags, { timeoutMs: 1500 });
105
- }
106
-
107
- const here1 = await hereNow(page);
108
- const menu1 = await buildExploreMenu(page, graph, library, here1);
109
- await capture("login", page, menu1, nodeNames, library.byName);
110
-
111
- await page.locator("#user-name").fill("standard_user");
112
- await page.locator("#password").fill("secret_sauce");
113
- await page.locator("#login-button").click();
114
- await page.waitForURL(/inventory\.html/);
115
-
116
- const here2 = await hereNow(page);
117
- const menu2 = await buildExploreMenu(page, graph, library, here2);
118
- await capture("logged-in", page, menu2, nodeNames, library.byName);
119
-
120
- await browser.close();
@@ -1,141 +0,0 @@
1
- import { chromium } from "@playwright/test";
2
- import { join, dirname } from "node:path";
3
- import { fileURLToPath, pathToFileURL } from "node:url";
4
- import { createRequire } from "node:module";
5
-
6
- const require = createRequire(import.meta.url);
7
- await import(require.resolve("tsx/esm"));
8
-
9
- const root = join(dirname(fileURLToPath(import.meta.url)), "..");
10
- const outDir = join(root, "../../.tmp/waygraph-auto");
11
- const waygraphDist = join(root, "../../dist");
12
-
13
- const { buildExploreContext, buildExploreMenu } = await import(
14
- pathToFileURL(join(waygraphDist, "auto-explore.js")).href
15
- );
16
- const { Engine, start, end, MemPage } = await import(pathToFileURL(join(waygraphDist, "index.js")).href);
17
-
18
- const exe = process.env.CHROME_PATH || process.env.CHROMIUM_PATH;
19
-
20
- const PANEL_CSS =
21
- "#wg-auto-panel{position:fixed;z-index:2147483647;left:50%;bottom:12px;transform:translateX(-50%);" +
22
- "max-width:min(92vw,720px);max-height:calc(100vh - 24px);overflow-y:auto;box-sizing:border-box;" +
23
- "background:rgba(20,10,40,.94);color:#fff;border-radius:14px;padding:16px 20px;" +
24
- "font:14px/1.4 system-ui,sans-serif;box-shadow:0 12px 30px rgba(0,0,0,.35);}" +
25
- "#wg-auto-panel h3{margin:0 0 10px;font-size:16px;}" +
26
- "#wg-auto-panel .wg-here{color:#c9a6ff;margin-bottom:12px;}" +
27
- "#wg-auto-panel .wg-actions{display:flex;flex-direction:column;gap:8px;}" +
28
- "#wg-auto-panel button.wg-act{text-align:left;padding:10px 12px;border-radius:10px;border:1px solid #5b3aa8;" +
29
- "background:#2a1450;color:#fff;font:13px/1.3 system-ui,sans-serif;cursor:pointer;}" +
30
- "#wg-auto-panel .wg-section{margin:12px 0 6px;font-size:11px;font-weight:700;color:#a78bfa;text-transform:uppercase;}" +
31
- "#wg-auto-panel .wg-map{margin:8px 0 12px;padding:8px 10px;border-radius:8px;background:rgba(0,0,0,.25);font-size:11px;line-height:1.5;}" +
32
- "#wg-auto-panel .wg-map .wg-cp{opacity:.55;}#wg-auto-panel .wg-map .wg-cp-here{color:#fff;opacity:1;font-weight:700;}";
33
-
34
- function esc(s) {
35
- return s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/"/g, "&quot;");
36
- }
37
-
38
- function panelHtml(menu, nodeNames, library, note) {
39
- const here = menu.here;
40
- const hereLabel = here ?? "Unknown";
41
- const chips = nodeNames
42
- .map((cp) => {
43
- const cls = cp === here ? "wg-cp wg-cp-here" : "wg-cp";
44
- return `<span class="${cls}">${esc(cp)}${cp === here ? " (here)" : ""}</span>`;
45
- })
46
- .join(" · ");
47
- let html =
48
- `<style>${PANEL_CSS}</style><div id="wg-auto-panel">` +
49
- `<h3>waygraph auto</h3>` +
50
- (note ? `<div style="color:#fca5a5;margin-bottom:8px;font-size:12px">${esc(note)}</div>` : "") +
51
- `<div class="wg-here">You are here: <strong>${esc(hereLabel)}</strong></div>` +
52
- `<div class="wg-actions">`;
53
- for (const section of menu.sections) {
54
- html += `<div class="wg-section">${esc(section.title)}</div>`;
55
- for (const c of section.edges) {
56
- const entry = library.get(c.block);
57
- const desc = entry?.description ? `<br><span style="opacity:.85">${esc(entry.description)}</span>` : "";
58
- html +=
59
- `<button class="wg-act"><span class="wg-kind">${esc(c.kind)}</span> ` +
60
- `<strong>${esc(c.block)}</strong> → ${esc(c.to)}${desc}</button>`;
61
- }
62
- }
63
- html += `</div><div class="wg-map"><strong>Screens:</strong> ${chips}</div></div>`;
64
- return html;
65
- }
66
-
67
- async function paintPanel(page, menu, nodeNames, library, note) {
68
- await page.evaluate((inner) => {
69
- let host = document.getElementById("wg-auto-host");
70
- if (!host) {
71
- host = document.createElement("div");
72
- host.id = "wg-auto-host";
73
- document.documentElement.appendChild(host);
74
- }
75
- host.innerHTML = inner;
76
- }, panelHtml(menu, nodeNames, library, note));
77
- }
78
-
79
- async function snap(page, name) {
80
- const path = join(outDir, name);
81
- await page.screenshot({ path, fullPage: false });
82
- console.log(path);
83
- return path;
84
- }
85
-
86
- const { graph, library } = await buildExploreContext(root);
87
- const nodeNames = graph.nodes.map((n) => n.checkpoint);
88
-
89
- const { NavLoginBlock } = await import(pathToFileURL(join(root, "src/blocks/saucedemo-web/nav-login.block.js")).href);
90
- const { FillUsernameBlock } = await import(
91
- pathToFileURL(join(root, "src/blocks/saucedemo-web/methods/fill-username.method.block.js")).href
92
- );
93
- const { FillPasswordBlock } = await import(
94
- pathToFileURL(join(root, "src/blocks/saucedemo-web/methods/fill-password.method.block.js")).href
95
- );
96
- const { SubmitLoginBlock } = await import(
97
- pathToFileURL(join(root, "src/blocks/saucedemo-web/methods/submit-login.method.block.js")).href
98
- );
99
- const { LoginCreds } = await import(pathToFileURL(join(root, "src/states/checkout.mem-keys.js")).href);
100
-
101
- const browser = await chromium.launch({
102
- headless: true,
103
- ...(exe ? { executablePath: exe, args: ["--no-sandbox", "--disable-dev-shm-usage"] } : {}),
104
- });
105
- const context = await browser.newContext({
106
- viewport: { width: 1280, height: 900 },
107
- baseURL: "https://www.saucedemo.com",
108
- });
109
- const page = await context.newPage();
110
- const engine = new Engine({ headless: true });
111
- const mem = new MemPage();
112
-
113
- await page.goto("/", { waitUntil: "load" });
114
-
115
- const menuBefore = await buildExploreMenu(page, graph, library, "LoginPage");
116
- await paintPanel(page, menuBefore, nodeNames, library.byName, "Mem: standard_user / wrong-password (intentional)");
117
- await snap(page, "wrong-login-1-before.png");
118
-
119
- mem.set(LoginCreds({ username: "standard_user", password: "wrong-password" }));
120
- const flow = engine.defineFlow([start, NavLoginBlock, FillUsernameBlock, FillPasswordBlock, SubmitLoginBlock, end]);
121
- const runOut = await flow.run(context, mem, { page, closeOnFinish: false });
122
- const result = runOut && typeof runOut === "object" && "result" in runOut ? runOut.result : runOut;
123
-
124
- if (result.__state !== "LoginPage") {
125
- throw new Error(`expected LoginPage after bad password, got ${result?.__state}`);
126
- }
127
-
128
- await page.locator('[data-test="error"]').waitFor({ state: "visible" });
129
-
130
- const menuAfter = await buildExploreMenu(page, graph, library, "LoginPage");
131
- await paintPanel(
132
- page,
133
- menuAfter,
134
- nodeNames,
135
- library.byName,
136
- "submit-login finished → LoginPage (branch on auth failure, not LoggedIn)",
137
- );
138
- await snap(page, "wrong-login-2-after.png");
139
-
140
- console.log("PASS: wrong password stayed on LoginPage with error banner");
141
- await browser.close();