waygraph 0.15.47 → 0.15.50

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/dist/analysis/graph.js +2 -2
  2. package/dist/auto-session/session.js +3 -3
  3. package/dist/cli/discover.d.ts +1 -1
  4. package/dist/cli/discover.js +1 -1
  5. package/dist/cli/flags.d.ts +7 -5
  6. package/dist/cli/flags.js +9 -32
  7. package/dist/cli/run-chain.js +1 -1
  8. package/dist/cli.js +1 -1
  9. package/dist/{agent-dive.js → commands/agent-dive-scaffold.js} +2 -2
  10. package/dist/commands/agent-dive.js +1 -1
  11. package/dist/commands/check.js +1 -1
  12. package/dist/commands/run.js +4 -4
  13. package/dist/commands/session.js +7 -7
  14. package/dist/config.d.ts +34 -0
  15. package/dist/config.js +94 -0
  16. package/dist/{engine/core.js → core/block.js} +6 -6
  17. package/dist/core/blocks/api.d.ts +54 -0
  18. package/dist/core/blocks/api.js +75 -0
  19. package/dist/{engine → core}/blocks/effect.d.ts +1 -1
  20. package/dist/{engine → core}/blocks/effect.js +1 -1
  21. package/dist/{engine → core}/blocks/method.d.ts +1 -1
  22. package/dist/{engine → core}/blocks/method.js +1 -1
  23. package/dist/{engine → core}/blocks/nav.js +1 -1
  24. package/dist/{engine → core}/blocks/page.js +1 -1
  25. package/dist/{engine → core}/branch-regression.js +2 -3
  26. package/dist/{engine → core}/compose.js +4 -4
  27. package/dist/{engine/engine-class.d.ts → core/engine.d.ts} +2 -133
  28. package/dist/core/engine.js +50 -0
  29. package/dist/{engine → core}/flow.js +5 -5
  30. package/dist/core/map-builder.d.ts +171 -0
  31. package/dist/{engine/engine-class.js → core/map-builder.js} +82 -98
  32. package/dist/{engine → core}/run-graph.js +4 -6
  33. package/dist/core.d.ts +14 -0
  34. package/dist/core.js +15 -0
  35. package/dist/env-file.d.ts +10 -0
  36. package/dist/env-file.js +58 -0
  37. package/dist/errors.d.ts +54 -20
  38. package/dist/errors.js +67 -20
  39. package/dist/highlights/run-phase.js +15 -2
  40. package/dist/highlights/stub-ctx.js +16 -0
  41. package/dist/highlights/types.d.ts +38 -0
  42. package/dist/index.d.ts +7 -3
  43. package/dist/index.js +2 -1
  44. package/dist/mem-page.js +2 -2
  45. package/dist/mem-stub.d.ts +1 -1
  46. package/dist/pilot-overlay/fixtures.js +42 -10
  47. package/dist/pilot-overlay/shell.js +23 -10
  48. package/dist/runner/banner-log.js +1 -0
  49. package/dist/runner/device-stage.js +35 -15
  50. package/dist/runner/inpage/banner.d.ts +9 -1
  51. package/dist/runner/inpage/banner.js +27 -2
  52. package/dist/runner/inpage/caption.d.ts +3 -0
  53. package/dist/runner/inpage/caption.js +23 -0
  54. package/dist/runner/inpage/core.js +32 -9
  55. package/dist/runner/inpage/network.d.ts +15 -0
  56. package/dist/runner/inpage/network.js +217 -0
  57. package/dist/runner/inpage/panel-chrome.js +41 -1
  58. package/dist/runner/inpage/swipe-zoom.js +1 -1
  59. package/dist/runner/inpage/todos.js +6 -1
  60. package/dist/runner/main.js +9 -2
  61. package/dist/runner/network-capture.d.ts +9 -0
  62. package/dist/runner/network-capture.js +126 -0
  63. package/dist/runner/overlay-css.js +71 -7
  64. package/dist/runner/overlay-install.js +39 -2
  65. package/dist/runner/overlay-stage.js +5 -0
  66. package/dist/runner/rings.js +69 -45
  67. package/dist/runner/slides.js +14 -8
  68. package/dist/runner/step-mode.js +12 -0
  69. package/dist/runner/step-panels.js +9 -3
  70. package/dist/runner/teardown.js +16 -9
  71. package/dist/session/auto-explore-run.d.ts +5 -2
  72. package/dist/session/auto-explore-run.js +52 -36
  73. package/dist/{step-overlay.d.ts → session/step-overlay.d.ts} +1 -1
  74. package/dist/{step-overlay.js → session/step-overlay.js} +1 -1
  75. package/dist/trait.d.ts +1 -0
  76. package/dist/trait.js +15 -0
  77. package/dist/traverse/run.js +3 -22
  78. package/dist/ui/components/ring.js +4 -2
  79. package/dist/ui/overlay.css +36 -3
  80. package/examples/saucedemo/.waygraph-auto/00d147d1.log +21 -0
  81. package/examples/saucedemo/.waygraph-auto/0402cfcf.log +6 -0
  82. package/examples/saucedemo/.waygraph-auto/062b581f.log +20 -0
  83. package/examples/saucedemo/.waygraph-auto/0681582b.log +6 -0
  84. package/examples/saucedemo/.waygraph-auto/07f3e964.log +6 -0
  85. package/examples/saucedemo/.waygraph-auto/0868ae4d.log +0 -0
  86. package/examples/saucedemo/.waygraph-auto/0924ddaa.log +22 -0
  87. package/examples/saucedemo/.waygraph-auto/092d6173.log +5 -0
  88. package/examples/saucedemo/.waygraph-auto/09924510.log +0 -0
  89. package/examples/saucedemo/.waygraph-auto/0998c941.log +21 -0
  90. package/examples/saucedemo/.waygraph-auto/0bf74300.log +21 -0
  91. package/examples/saucedemo/.waygraph-auto/0c01fd29.log +4 -0
  92. package/examples/saucedemo/.waygraph-auto/0c302590.log +0 -0
  93. package/examples/saucedemo/.waygraph-auto/0dee62d6.log +5 -0
  94. package/examples/saucedemo/.waygraph-auto/0eb4c081.log +5 -0
  95. package/examples/saucedemo/.waygraph-auto/10fd431c.log +0 -0
  96. package/examples/saucedemo/.waygraph-auto/13c6fe3c.log +0 -0
  97. package/examples/saucedemo/.waygraph-auto/1581b677.log +0 -0
  98. package/examples/saucedemo/.waygraph-auto/161cc8dd.log +22 -0
  99. package/examples/saucedemo/.waygraph-auto/164761a5.log +6 -0
  100. package/examples/saucedemo/.waygraph-auto/1905ceb2.log +0 -0
  101. package/examples/saucedemo/.waygraph-auto/1b1d55c6.log +0 -0
  102. package/examples/saucedemo/.waygraph-auto/1b80fd24.log +6 -0
  103. package/examples/saucedemo/.waygraph-auto/1c30a3c2.log +0 -0
  104. package/examples/saucedemo/.waygraph-auto/1d90aa9a.log +0 -0
  105. package/examples/saucedemo/.waygraph-auto/1de7d889.log +0 -0
  106. package/examples/saucedemo/.waygraph-auto/1f233a4c.log +6 -0
  107. package/examples/saucedemo/.waygraph-auto/20e66801.log +0 -0
  108. package/examples/saucedemo/.waygraph-auto/20ffdb77.log +0 -0
  109. package/examples/saucedemo/.waygraph-auto/22048fff.log +4 -0
  110. package/examples/saucedemo/.waygraph-auto/22f1a704.log +5 -0
  111. package/examples/saucedemo/.waygraph-auto/239cced3.log +20 -0
  112. package/examples/saucedemo/.waygraph-auto/25204b46.log +4 -0
  113. package/examples/saucedemo/.waygraph-auto/25e2e90f.log +0 -0
  114. package/examples/saucedemo/.waygraph-auto/2708455e.log +22 -0
  115. package/examples/saucedemo/.waygraph-auto/272a96fd.log +20 -0
  116. package/examples/saucedemo/.waygraph-auto/28d7be5d.log +0 -0
  117. package/examples/saucedemo/.waygraph-auto/2a6a8266.log +6 -0
  118. package/examples/saucedemo/.waygraph-auto/2b3401cf.log +20 -0
  119. package/examples/saucedemo/.waygraph-auto/2ceccd6d.log +0 -0
  120. package/examples/saucedemo/.waygraph-auto/2f1b0c13.log +6 -0
  121. package/examples/saucedemo/.waygraph-auto/2f8d4073.log +6 -0
  122. package/examples/saucedemo/.waygraph-auto/30739278.log +6 -0
  123. package/examples/saucedemo/.waygraph-auto/31cb2e80.log +0 -0
  124. package/examples/saucedemo/.waygraph-auto/322d63cd.log +0 -0
  125. package/examples/saucedemo/.waygraph-auto/3239aa8a.log +6 -0
  126. package/examples/saucedemo/.waygraph-auto/326d87b7.log +6 -0
  127. package/examples/saucedemo/.waygraph-auto/3351c0b6.log +0 -0
  128. package/examples/saucedemo/.waygraph-auto/33df0770.log +0 -0
  129. package/examples/saucedemo/.waygraph-auto/340d624d.log +0 -0
  130. package/examples/saucedemo/.waygraph-auto/36367ccf.log +0 -0
  131. package/examples/saucedemo/.waygraph-auto/372536a5.log +6 -0
  132. package/examples/saucedemo/.waygraph-auto/3a412f3c.log +0 -0
  133. package/examples/saucedemo/.waygraph-auto/3a859bd7.log +0 -0
  134. package/examples/saucedemo/.waygraph-auto/3cb0add7.log +0 -0
  135. package/examples/saucedemo/.waygraph-auto/3e42f0d8.log +0 -0
  136. package/examples/saucedemo/.waygraph-auto/4144071d.log +0 -0
  137. package/examples/saucedemo/.waygraph-auto/4176a3c6.log +0 -0
  138. package/examples/saucedemo/.waygraph-auto/41d0793d.log +4 -0
  139. package/examples/saucedemo/.waygraph-auto/424b4d5d.log +0 -0
  140. package/examples/saucedemo/.waygraph-auto/43253aba.log +0 -0
  141. package/examples/saucedemo/.waygraph-auto/438c6c53.log +22 -0
  142. package/examples/saucedemo/.waygraph-auto/4477db12.log +0 -0
  143. package/examples/saucedemo/.waygraph-auto/4a1258b7.log +0 -0
  144. package/examples/saucedemo/.waygraph-auto/4adcd179.log +20 -0
  145. package/examples/saucedemo/.waygraph-auto/4c9d9b16.log +21 -0
  146. package/examples/saucedemo/.waygraph-auto/4da39c36.log +6 -0
  147. package/examples/saucedemo/.waygraph-auto/4dbefa7e.log +5 -0
  148. package/examples/saucedemo/.waygraph-auto/4efa7035.log +6 -0
  149. package/examples/saucedemo/.waygraph-auto/505affdc.log +4 -0
  150. package/examples/saucedemo/.waygraph-auto/51bcb60a.log +0 -0
  151. package/examples/saucedemo/.waygraph-auto/5291bc78.log +22 -0
  152. package/examples/saucedemo/.waygraph-auto/54274c39.log +5 -0
  153. package/examples/saucedemo/.waygraph-auto/5440ce7e.log +0 -0
  154. package/examples/saucedemo/.waygraph-auto/5738175f.log +22 -0
  155. package/examples/saucedemo/.waygraph-auto/57ce5643.log +22 -0
  156. package/examples/saucedemo/.waygraph-auto/5984426b.log +6 -0
  157. package/examples/saucedemo/.waygraph-auto/5a682e7c.log +22 -0
  158. package/examples/saucedemo/.waygraph-auto/5b79320c.log +21 -0
  159. package/examples/saucedemo/.waygraph-auto/5c55aaac.log +21 -0
  160. package/examples/saucedemo/.waygraph-auto/5d285cd3.log +0 -0
  161. package/examples/saucedemo/.waygraph-auto/5ed00b16.log +4 -0
  162. package/examples/saucedemo/.waygraph-auto/60b9c066.log +6 -0
  163. package/examples/saucedemo/.waygraph-auto/610dd127.log +0 -0
  164. package/examples/saucedemo/.waygraph-auto/61105500.log +5 -0
  165. package/examples/saucedemo/.waygraph-auto/6134afe8.log +20 -0
  166. package/examples/saucedemo/.waygraph-auto/62a0bdc9.log +22 -0
  167. package/examples/saucedemo/.waygraph-auto/6376fc15.log +0 -0
  168. package/examples/saucedemo/.waygraph-auto/6599cbca.log +22 -0
  169. package/examples/saucedemo/.waygraph-auto/67aaca30.log +0 -0
  170. package/examples/saucedemo/.waygraph-auto/68b10298.log +0 -0
  171. package/examples/saucedemo/.waygraph-auto/68be5e12.log +0 -0
  172. package/examples/saucedemo/.waygraph-auto/68df05a6.log +22 -0
  173. package/examples/saucedemo/.waygraph-auto/693f67c4.log +20 -0
  174. package/examples/saucedemo/.waygraph-auto/69ae030a.log +6 -0
  175. package/examples/saucedemo/.waygraph-auto/69e73f35.log +6 -0
  176. package/examples/saucedemo/.waygraph-auto/6b2333b0.log +5 -0
  177. package/examples/saucedemo/.waygraph-auto/6c4c3817.log +0 -0
  178. package/examples/saucedemo/.waygraph-auto/6c954911.log +0 -0
  179. package/examples/saucedemo/.waygraph-auto/6d65a439.log +5 -0
  180. package/examples/saucedemo/.waygraph-auto/6d700055.log +0 -0
  181. package/examples/saucedemo/.waygraph-auto/6ead848f.log +0 -0
  182. package/examples/saucedemo/.waygraph-auto/72675b2d.log +6 -0
  183. package/examples/saucedemo/.waygraph-auto/733dd260.log +5 -0
  184. package/examples/saucedemo/.waygraph-auto/75016486.log +0 -0
  185. package/examples/saucedemo/.waygraph-auto/752b01c6.log +22 -0
  186. package/examples/saucedemo/.waygraph-auto/75675227.log +6 -0
  187. package/examples/saucedemo/.waygraph-auto/75e2e658.log +0 -0
  188. package/examples/saucedemo/.waygraph-auto/76ac1a86.log +0 -0
  189. package/examples/saucedemo/.waygraph-auto/77605295.log +0 -0
  190. package/examples/saucedemo/.waygraph-auto/792671f4.log +22 -0
  191. package/examples/saucedemo/.waygraph-auto/79915adb.log +20 -0
  192. package/examples/saucedemo/.waygraph-auto/7a398774.log +6 -0
  193. package/examples/saucedemo/.waygraph-auto/7a72f66e.log +6 -0
  194. package/examples/saucedemo/.waygraph-auto/7a984334.log +4 -0
  195. package/examples/saucedemo/.waygraph-auto/7c6ee793.log +20 -0
  196. package/examples/saucedemo/.waygraph-auto/7c726dc4.log +22 -0
  197. package/examples/saucedemo/.waygraph-auto/7c72e8a5.log +4 -0
  198. package/examples/saucedemo/.waygraph-auto/7dbee625.log +22 -0
  199. package/examples/saucedemo/.waygraph-auto/7df66956.log +0 -0
  200. package/examples/saucedemo/.waygraph-auto/7e053160.log +0 -0
  201. package/examples/saucedemo/.waygraph-auto/7fcb512f.log +22 -0
  202. package/examples/saucedemo/.waygraph-auto/802a0b5b.log +0 -0
  203. package/examples/saucedemo/.waygraph-auto/80322e0b.log +0 -0
  204. package/examples/saucedemo/.waygraph-auto/80a4978e.log +6 -0
  205. package/examples/saucedemo/.waygraph-auto/81cfe480.log +22 -0
  206. package/examples/saucedemo/.waygraph-auto/832f5add.log +0 -0
  207. package/examples/saucedemo/.waygraph-auto/8337b6ad.log +0 -0
  208. package/examples/saucedemo/.waygraph-auto/8493928e.log +0 -0
  209. package/examples/saucedemo/.waygraph-auto/84dc6480.log +6 -0
  210. package/examples/saucedemo/.waygraph-auto/853bde43.log +0 -0
  211. package/examples/saucedemo/.waygraph-auto/86350ea6.log +22 -0
  212. package/examples/saucedemo/.waygraph-auto/86bb598a.log +0 -0
  213. package/examples/saucedemo/.waygraph-auto/86d09876.log +22 -0
  214. package/examples/saucedemo/.waygraph-auto/878ad01b.log +4 -0
  215. package/examples/saucedemo/.waygraph-auto/87c88ba5.log +0 -0
  216. package/examples/saucedemo/.waygraph-auto/87cb80ff.log +0 -0
  217. package/examples/saucedemo/.waygraph-auto/880b2e78.log +6 -0
  218. package/examples/saucedemo/.waygraph-auto/88527936.log +5 -0
  219. package/examples/saucedemo/.waygraph-auto/88eda676.log +0 -0
  220. package/examples/saucedemo/.waygraph-auto/893023ea.log +5 -0
  221. package/examples/saucedemo/.waygraph-auto/89416718.log +0 -0
  222. package/examples/saucedemo/.waygraph-auto/8996a857.log +6 -0
  223. package/examples/saucedemo/.waygraph-auto/8a08b68d.log +6 -0
  224. package/examples/saucedemo/.waygraph-auto/8a64ba0f.log +6 -0
  225. package/examples/saucedemo/.waygraph-auto/8b1cc2aa.log +6 -0
  226. package/examples/saucedemo/.waygraph-auto/8b73d13e.log +6 -0
  227. package/examples/saucedemo/.waygraph-auto/8d9e5cd2.log +21 -0
  228. package/examples/saucedemo/.waygraph-auto/8ec7d260.log +0 -0
  229. package/examples/saucedemo/.waygraph-auto/8ed43279.log +0 -0
  230. package/examples/saucedemo/.waygraph-auto/93acae32.log +5 -0
  231. package/examples/saucedemo/.waygraph-auto/96321a08.log +0 -0
  232. package/examples/saucedemo/.waygraph-auto/9742b6c2.log +6 -0
  233. package/examples/saucedemo/.waygraph-auto/99cc93eb.log +6 -0
  234. package/examples/saucedemo/.waygraph-auto/9cbfbedc.log +0 -0
  235. package/examples/saucedemo/.waygraph-auto/9dc147d2.log +22 -0
  236. package/examples/saucedemo/.waygraph-auto/a215a395.log +22 -0
  237. package/examples/saucedemo/.waygraph-auto/a23b7086.log +4 -0
  238. package/examples/saucedemo/.waygraph-auto/a35bd5ec.log +0 -0
  239. package/examples/saucedemo/.waygraph-auto/a68995e9.log +22 -0
  240. package/examples/saucedemo/.waygraph-auto/a6e4f936.log +22 -0
  241. package/examples/saucedemo/.waygraph-auto/a7da862b.log +0 -0
  242. package/examples/saucedemo/.waygraph-auto/a82e2a48.log +0 -0
  243. package/examples/saucedemo/.waygraph-auto/a952eb91.log +0 -0
  244. package/examples/saucedemo/.waygraph-auto/a9559653.log +5 -0
  245. package/examples/saucedemo/.waygraph-auto/aa478de2.log +0 -0
  246. package/examples/saucedemo/.waygraph-auto/ac350fc7.log +20 -0
  247. package/examples/saucedemo/.waygraph-auto/acc1b63a.log +0 -0
  248. package/examples/saucedemo/.waygraph-auto/ad12d191.log +0 -0
  249. package/examples/saucedemo/.waygraph-auto/b04638f4.log +6 -0
  250. package/examples/saucedemo/.waygraph-auto/b48863e5.log +22 -0
  251. package/examples/saucedemo/.waygraph-auto/b56968e1.log +6 -0
  252. package/examples/saucedemo/.waygraph-auto/b64e0620.log +20 -0
  253. package/examples/saucedemo/.waygraph-auto/b86a6218.log +6 -0
  254. package/examples/saucedemo/.waygraph-auto/b8e9e956.log +22 -0
  255. package/examples/saucedemo/.waygraph-auto/b9b310ff.log +21 -0
  256. package/examples/saucedemo/.waygraph-auto/bc111745.log +22 -0
  257. package/examples/saucedemo/.waygraph-auto/bf7a77a2.log +0 -0
  258. package/examples/saucedemo/.waygraph-auto/c0d6f353.log +21 -0
  259. package/examples/saucedemo/.waygraph-auto/c0febcf2.log +20 -0
  260. package/examples/saucedemo/.waygraph-auto/c4c52998.log +6 -0
  261. package/examples/saucedemo/.waygraph-auto/c809ceb4.log +22 -0
  262. package/examples/saucedemo/.waygraph-auto/ca6de7e7.log +0 -0
  263. package/examples/saucedemo/.waygraph-auto/ca8561bc.log +0 -0
  264. package/examples/saucedemo/.waygraph-auto/cb86d45b.log +0 -0
  265. package/examples/saucedemo/.waygraph-auto/cb9a1978.log +6 -0
  266. package/examples/saucedemo/.waygraph-auto/cbbc689c.log +6 -0
  267. package/examples/saucedemo/.waygraph-auto/cd88364b.log +0 -0
  268. package/examples/saucedemo/.waygraph-auto/cd919e1d.log +0 -0
  269. package/examples/saucedemo/.waygraph-auto/cfff9eef.log +20 -0
  270. package/examples/saucedemo/.waygraph-auto/d0f59b21.log +4 -0
  271. package/examples/saucedemo/.waygraph-auto/d1195079.log +20 -0
  272. package/examples/saucedemo/.waygraph-auto/d2ef067a.log +5 -0
  273. package/examples/saucedemo/.waygraph-auto/d425471f.log +6 -0
  274. package/examples/saucedemo/.waygraph-auto/d5293921.log +0 -0
  275. package/examples/saucedemo/.waygraph-auto/d62a22c2.log +21 -0
  276. package/examples/saucedemo/.waygraph-auto/d6d1761f.log +22 -0
  277. package/examples/saucedemo/.waygraph-auto/d6d5f411.log +22 -0
  278. package/examples/saucedemo/.waygraph-auto/d6df2771.log +6 -0
  279. package/examples/saucedemo/.waygraph-auto/d7075012.log +21 -0
  280. package/examples/saucedemo/.waygraph-auto/d9ddc297.log +0 -0
  281. package/examples/saucedemo/.waygraph-auto/db4ac845.log +0 -0
  282. package/examples/saucedemo/.waygraph-auto/db6d7774.log +0 -0
  283. package/examples/saucedemo/.waygraph-auto/db839827.log +5 -0
  284. package/examples/saucedemo/.waygraph-auto/dde5e859.log +22 -0
  285. package/examples/saucedemo/.waygraph-auto/de8cac58.log +0 -0
  286. package/examples/saucedemo/.waygraph-auto/dedfcb18.log +0 -0
  287. package/examples/saucedemo/.waygraph-auto/def4d9b1.log +0 -0
  288. package/examples/saucedemo/.waygraph-auto/e1549e40.log +0 -0
  289. package/examples/saucedemo/.waygraph-auto/e1b0676d.log +21 -0
  290. package/examples/saucedemo/.waygraph-auto/e5111463.log +0 -0
  291. package/examples/saucedemo/.waygraph-auto/e5fc1d7c.log +5 -0
  292. package/examples/saucedemo/.waygraph-auto/e6fd2202.log +0 -0
  293. package/examples/saucedemo/.waygraph-auto/edaa806d.log +0 -0
  294. package/examples/saucedemo/.waygraph-auto/edaf33de.log +0 -0
  295. package/examples/saucedemo/.waygraph-auto/edd40cbb.log +20 -0
  296. package/examples/saucedemo/.waygraph-auto/eddfbffc.log +6 -0
  297. package/examples/saucedemo/.waygraph-auto/ee9fa1ad.log +5 -0
  298. package/examples/saucedemo/.waygraph-auto/ef319474.log +22 -0
  299. package/examples/saucedemo/.waygraph-auto/f28eee8d.log +0 -0
  300. package/examples/saucedemo/.waygraph-auto/f33bde90.log +0 -0
  301. package/examples/saucedemo/.waygraph-auto/f6ba7cb4.log +6 -0
  302. package/examples/saucedemo/.waygraph-auto/f7ac4d62.log +20 -0
  303. package/examples/saucedemo/.waygraph-auto/f929bb79.log +0 -0
  304. package/examples/saucedemo/.waygraph-auto/f92d4c6c.log +22 -0
  305. package/examples/saucedemo/.waygraph-auto/f92faf40.log +5 -0
  306. package/examples/saucedemo/.waygraph-auto/fa784369.log +21 -0
  307. package/examples/saucedemo/.waygraph-auto/fb55f723.log +20 -0
  308. package/examples/saucedemo/.waygraph-auto/fba3b738.log +0 -0
  309. package/examples/saucedemo/.waygraph-auto/fdf66b74.log +0 -0
  310. package/examples/saucedemo/.waygraph-auto/ffdf2854.log +6 -0
  311. package/examples/saucedemo/README.md +13 -2
  312. package/examples/saucedemo/package.json +4 -0
  313. package/examples/saucedemo/src/flows/api-demo.flow.ts +37 -0
  314. package/examples/saucedemo/src/flows/checkout.flow.ts +34 -11
  315. package/package.json +5 -3
  316. package/templates/scaffold/src/flows/shop.flow.ts +42 -27
  317. package/dist/auto-explore-run.d.ts +0 -37
  318. package/dist/auto-explore-run.js +0 -670
  319. package/dist/auto-explore.d.ts +0 -57
  320. package/dist/auto-explore.js +0 -376
  321. package/dist/auto-session-ipc.d.ts +0 -150
  322. package/dist/auto-session-ipc.js +0 -497
  323. package/dist/block-inject.d.ts +0 -15
  324. package/dist/block-inject.js +0 -91
  325. package/dist/browser.d.ts +0 -15
  326. package/dist/browser.js +0 -29
  327. package/dist/coverage-gap.d.ts +0 -11
  328. package/dist/coverage-gap.js +0 -119
  329. package/dist/engine.d.ts +0 -12
  330. package/dist/engine.js +0 -13
  331. package/dist/graph.d.ts +0 -92
  332. package/dist/graph.js +0 -467
  333. package/dist/highlight-shorthand.d.ts +0 -24
  334. package/dist/highlight-shorthand.js +0 -30
  335. package/dist/map-check.d.ts +0 -18
  336. package/dist/map-check.js +0 -140
  337. package/dist/overlay-beacon.d.ts +0 -44
  338. package/dist/overlay-beacon.js +0 -85
  339. package/dist/pilot.d.ts +0 -54
  340. package/dist/pilot.js +0 -80
  341. package/dist/practices-check.d.ts +0 -14
  342. package/dist/practices-check.js +0 -195
  343. package/dist/traverse-coverage.d.ts +0 -59
  344. package/dist/traverse-coverage.js +0 -127
  345. package/dist/traverse-lease.d.ts +0 -18
  346. package/dist/traverse-lease.js +0 -62
  347. package/dist/traverse-run.d.ts +0 -47
  348. package/dist/traverse-run.js +0 -439
  349. package/dist/ui/compose.d.ts +0 -4
  350. package/dist/ui/compose.js +0 -7
  351. /package/dist/{verbose-log.d.ts → auto-session/verbose-log.d.ts} +0 -0
  352. /package/dist/{verbose-log.js → auto-session/verbose-log.js} +0 -0
  353. /package/dist/{agent-dive.d.ts → commands/agent-dive-scaffold.d.ts} +0 -0
  354. /package/dist/{engine/core.d.ts → core/block.d.ts} +0 -0
  355. /package/dist/{engine → core}/blocks/nav.d.ts +0 -0
  356. /package/dist/{engine → core}/blocks/page.d.ts +0 -0
  357. /package/dist/{engine → core}/branch-regression.d.ts +0 -0
  358. /package/dist/{engine → core}/compose.d.ts +0 -0
  359. /package/dist/{engine → core}/config.d.ts +0 -0
  360. /package/dist/{engine → core}/config.js +0 -0
  361. /package/dist/{engine → core}/flow.d.ts +0 -0
  362. /package/dist/{engine → core}/locate.d.ts +0 -0
  363. /package/dist/{engine → core}/locate.js +0 -0
  364. /package/dist/{engine → core}/run-graph.d.ts +0 -0
@@ -1,35 +1,14 @@
1
1
  import { createInterface } from "node:readline/promises";
2
2
  import { ensureShadowRoot } from "../ui/shadow.js";
3
3
  import { stdin as input, stdout as output } from "node:process";
4
- import { existsSync, readFileSync } from "node:fs";
5
- import { join } from "node:path";
6
- import { Engine, start, end, locate } from "../engine.js";
4
+ import { Engine, start, end, locate } from "../core.js";
7
5
  import { MemPage } from "../mem-page.js";
8
6
  import { buildExploreContext, buildExploreMenu, } from "./auto-explore.js";
9
- import { installDemoChrome, instrumentInteractionHighlighting } from "../step-overlay.js";
10
- export function resolveBaseUrl(projectDir) {
11
- const pkgPath = join(projectDir, "package.json");
12
- if (existsSync(pkgPath)) {
13
- try {
14
- const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
15
- const fromPkg = pkg.waygraph?.baseUrl ?? pkg.waygraph?.baseURL;
16
- if (typeof fromPkg === "string" && fromPkg.trim())
17
- return fromPkg.trim();
18
- }
19
- catch {
20
- /* ignore */
21
- }
22
- }
23
- for (const name of ["playwright.config.ts", "playwright.config.mts", "playwright.config.js"]) {
24
- const p = join(projectDir, name);
25
- if (!existsSync(p))
26
- continue;
27
- const m = readFileSync(p, "utf-8").match(/baseURL\s*:\s*["']([^"']+)["']/);
28
- if (m?.[1])
29
- return m[1];
30
- }
31
- return undefined;
32
- }
7
+ import { installDemoChrome, instrumentInteractionHighlighting } from "./step-overlay.js";
8
+ import { resolveBaseUrl } from "../config.js";
9
+ /** See `../config.js`'s own `resolveBaseUrl` - re-exported so existing importers of this module
10
+ * don't need to change their import path. */
11
+ export { resolveBaseUrl };
33
12
  /** URL-first - several Checkpoints share nav verify traits (e.g. LoggedIn = /inventory.html). */
34
13
  async function inferCheckpointFromUrl(page) {
35
14
  try {
@@ -355,6 +334,37 @@ async function headfulPick(page, menu, library, mem, waitPick) {
355
334
  memIdx++;
356
335
  }
357
336
  }
337
+ // Pre-resolve every candidate's hover-preview box THROUGH Playwright's own locator (>>
338
+ // piercing / :has-text() / :visible support), once, here on the Node side - not a raw selector
339
+ // string handed to the page for a per-mouseenter document.querySelector to fail silently on
340
+ // (same class of bug as rings.js's showRing; see its own comment for the full story). A
341
+ // mouseenter handler can't itself await a Node-side locator without visible hover lag, so the
342
+ // box is embedded as a data attribute instead and the in-page handler just reads it.
343
+ const hlSelectors = new Set();
344
+ for (const section of menu.sections) {
345
+ for (const c of section.edges) {
346
+ const entry = library.get(c.block);
347
+ const navClick = entry?.block?.__waygraphNavClick;
348
+ const hl = c.instanceOption?.highlight ?? (typeof navClick === "string" ? navClick : undefined);
349
+ if (hl)
350
+ hlSelectors.add(hl);
351
+ }
352
+ }
353
+ const hlBoxes = new Map();
354
+ await Promise.all([...hlSelectors].map(async (sel) => {
355
+ const loc = page.locator(sel).first();
356
+ const box = (await loc.count().catch(() => 0)) > 0
357
+ ? await loc
358
+ .evaluate((el) => {
359
+ const r = el.getBoundingClientRect();
360
+ if (r.width < 1 && r.height < 1)
361
+ return null;
362
+ return { x: r.x, y: r.y, width: r.width, height: r.height };
363
+ })
364
+ .catch(() => null)
365
+ : null;
366
+ hlBoxes.set(sel, box);
367
+ }));
358
368
  html += `<div class="wg-actions">`;
359
369
  let idx = 0;
360
370
  if (menu.sections.length === 0) {
@@ -366,7 +376,8 @@ async function headfulPick(page, menu, library, mem, waitPick) {
366
376
  const entry = library.get(c.block);
367
377
  const navClick = entry?.block?.__waygraphNavClick;
368
378
  const hl = c.instanceOption?.highlight ?? (typeof navClick === "string" ? navClick : undefined);
369
- const hlAttr = hl ? ` data-hl="${esc(hl)}"` : "";
379
+ const hlBox = hl ? hlBoxes.get(hl) : null;
380
+ const hlAttr = hlBox ? ` data-hl-box='${esc(JSON.stringify(hlBox))}'` : "";
370
381
  if (c.label) {
371
382
  html += `<button class="wg-act" data-idx="${idx}"${hlAttr}>${esc(c.label)}</button>`;
372
383
  }
@@ -476,14 +487,19 @@ async function headfulPick(page, menu, library, mem, waitPick) {
476
487
  window.__wgAutoPick?.(idx);
477
488
  });
478
489
  btn.addEventListener("mouseenter", () => {
479
- const sel = btn.getAttribute("data-hl");
480
- if (!sel) return;
481
- const el = document.querySelector(sel);
482
- if (!el || typeof window.__wgPositionRing !== "function") return;
483
- const r = el.getBoundingClientRect();
484
- if (r.width < 1 && r.height < 1) return;
490
+ // Pre-resolved on the Node side via Playwright's own locator (>> piercing / :has-text()
491
+ // support) when this menu was built - see headfulPick's own comment for why a
492
+ // mouseenter handler can't itself round-trip to a Node-side locator per hover.
493
+ const raw = btn.getAttribute("data-hl-box");
494
+ if (!raw || typeof window.__wgPositionRing !== "function") return;
495
+ let box;
496
+ try {
497
+ box = JSON.parse(raw);
498
+ } catch {
499
+ return;
500
+ }
485
501
  window.__wgPositionRing(
486
- { x: r.x, y: r.y, width: r.width, height: r.height },
502
+ box,
487
503
  btn.textContent?.trim()?.slice(0, 80) || "target",
488
504
  "auto",
489
505
  );
@@ -540,7 +556,7 @@ async function cliPick(menu, rl) {
540
556
  export async function runAutoExplore(projectDir, options = {}) {
541
557
  lastRunNote = null;
542
558
  const cli = options.cli === true;
543
- const baseURL = options.baseURL ?? resolveBaseUrl(projectDir) ?? process.env.WAYGRAPH_BASE_URL;
559
+ const baseURL = options.baseURL ?? (await resolveBaseUrl(projectDir)) ?? process.env.WAYGRAPH_BASE_URL;
544
560
  const startUrl = options.startUrl ?? baseURL;
545
561
  const { graph, library } = await buildExploreContext(projectDir, options.blocksSelect ? { blocksSelect: options.blocksSelect } : undefined);
546
562
  if (options.blocksSelect) {
@@ -1,5 +1,5 @@
1
1
  import type { Page } from "@playwright/test";
2
- import type { MemPage } from "./mem-page.js";
2
+ import type { MemPage } from "../mem-page.js";
3
3
  export declare function installDemoChrome(page: Page, title?: string, options?: {
4
4
  banner?: boolean;
5
5
  }): Promise<void>;
@@ -1,4 +1,4 @@
1
- import { ensureShadowRoot } from "./ui/shadow.js";
1
+ import { ensureShadowRoot } from "../ui/shadow.js";
2
2
  const FAVICON = "data:image/svg+xml," +
3
3
  encodeURIComponent("<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'><circle cx='16' cy='16' r='14' fill='#7C3AED'/></svg>");
4
4
  export async function installDemoChrome(page, title = "waygraph auto", options = {}) {
package/dist/trait.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import type { Page } from "@playwright/test";
2
2
  import type { MemPage } from "./mem-page.js";
3
+ import "urlpattern-polyfill";
3
4
  /**
4
5
  * A named, independently-reportable check. `check` never runs before `resolve` has
5
6
  * already decided the Checkpoint, and it can only confirm or fail loud - it has no
package/dist/trait.js CHANGED
@@ -1,3 +1,12 @@
1
+ // URLPattern is only a Node global from v23.8+ (and even then, Node's own, not a browser's) -
2
+ // CI's Node 20/22 matrix has no global at all. Side-effect import only: the polyfill package sets
3
+ // globalThis.URLPattern itself, but only when one doesn't already exist - so below Node 23.8 this
4
+ // becomes THE global, and from 23.8 up it's a no-op and the native one stays. Playwright's own
5
+ // waitForURL(pattern) checks `pattern instanceof globalThis.URLPattern` internally, so the instance
6
+ // constructed below must always come from whatever ends up on globalThis, not this import
7
+ // directly - a named `import { URLPattern }` gives a fixed class that's a different constructor
8
+ // than the native global on newer Node, and `instanceof` would then fail on those versions.
9
+ import "urlpattern-polyfill";
1
10
  /**
2
11
  * Common, generic Trait factories - reusable across any Block, not one-off
3
12
  * `{ name, check }` objects written inline per Block. Reach for one of these
@@ -36,6 +45,12 @@ export function urlMatches(pattern) {
36
45
  // `verify()` case this was originally written for - just via the same
37
46
  // mechanism every other Trait already uses instead of its own
38
47
  // hardcoded, wrong-context value.
48
+ // Cast, not a bare `urlPattern` reference: @types/node and the polyfill both declare an
49
+ // ambient global `URLPattern` (`skipLibCheck` hides the conflict between them instead of
50
+ // erroring), and they resolve to two DIFFERENT types depending on where in the program the
51
+ // name is looked up - so the very same runtime value that satisfies Playwright's actual
52
+ // (structural, .test()-based) check at runtime fails typechecking as "not assignable" against
53
+ // whichever of the two ambient declarations Playwright's own .d.ts happens to see.
39
54
  await page.waitForURL(urlPattern);
40
55
  return true;
41
56
  },
@@ -1,29 +1,10 @@
1
- /**
2
- * Phase B+D: graph traverse (serial or --parallel with --session clone).
3
- * Walk unused legal edges until leaf / budget / break.
4
- */
5
- import { readFileSync, existsSync } from "node:fs";
6
- import { join } from "node:path";
7
- import { Engine, start, end, locate } from "../engine.js";
1
+ import { Engine, start, end, locate } from "../core.js";
8
2
  import { MemPage } from "../mem-page.js";
9
3
  import { buildExploreContext, buildExploreMenu, } from "../session/auto-explore.js";
10
4
  import { defaultMemValueForKey } from "../session/auto-explore-run.js";
5
+ import { resolveBaseUrl } from "../config.js";
11
6
  import { EdgeLeaseCoordinator } from "./lease.js";
12
7
  import { buildCoverageReport, collectGraphEdgeKeys, defaultCoverageOutPath, formatCoverageLine, writeCoverageReport, } from "./coverage.js";
13
- function resolveBaseUrl(projectDir) {
14
- if (process.env.WAYGRAPH_BASE_URL)
15
- return process.env.WAYGRAPH_BASE_URL;
16
- const pkgPath = join(projectDir, "package.json");
17
- if (!existsSync(pkgPath))
18
- return undefined;
19
- try {
20
- const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
21
- return pkg.waygraph?.baseUrl;
22
- }
23
- catch {
24
- return undefined;
25
- }
26
- }
27
8
  function seedMem(library, mem, dataJson) {
28
9
  const raw = dataJson ?? process.env.WAYGRAPH_DATA ?? process.env.WAYGRAPH_AUTO_MEM;
29
10
  let envParsed = {};
@@ -257,7 +238,7 @@ export async function runTraverse(projectDir, options = {}) {
257
238
  const maxVisitsPerEdge = options.maxVisitsPerEdge ?? 1;
258
239
  const timeoutMs = options.timeoutMs ?? 15 * 60_000;
259
240
  const headed = options.headed === true || process.env.WAYGRAPH_HEADED === "1";
260
- const baseURL = options.baseURL ?? resolveBaseUrl(projectDir) ?? process.env.WAYGRAPH_BASE_URL;
241
+ const baseURL = options.baseURL ?? (await resolveBaseUrl(projectDir)) ?? process.env.WAYGRAPH_BASE_URL;
261
242
  const startUrl = options.startUrl ?? baseURL;
262
243
  const minEdgeCoverage = options.minEdgeCoverage != null && Number.isFinite(options.minEdgeCoverage)
263
244
  ? options.minEdgeCoverage
@@ -1,6 +1,8 @@
1
1
  import { TONES } from "../tokens.js";
2
- /** Prefix icon for gray (auto) labels. */
3
- const ROBOT = 'content:"\\1F916\\00a0";';
2
+ /** Prefix icon for gray (auto) labels - a real inline SVG (terminal chevron), not an emoji. */
3
+ const ROBOT = 'content:"";display:inline-block;width:12px;height:12px;margin-right:5px;vertical-align:-1px;' +
4
+ "background-repeat:no-repeat;background-size:contain;" +
5
+ "background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='M2.5 3.5l5 4.5-5 4.5M8.5 12.5h5' stroke='white' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E\");";
4
6
  const toneNames = Object.keys(TONES);
5
7
  /** Tone rules for `sel[data-tone=x]{...}` from the token table. */
6
8
  function toneRules(sel, decl, only) {
@@ -93,8 +93,14 @@
93
93
  .wg-ring-el-label[data-tone=danger] { --wg-tone-bg: var(--wg-tone-danger-bg); --wg-tone-fg: var(--wg-tone-danger-fg); }
94
94
  .wg-ring-el-label[data-tone=success] { --wg-tone-bg: var(--wg-tone-success-bg); --wg-tone-fg: var(--wg-tone-success-fg); }
95
95
  .wg-ring-el-label[data-tone=orange] { --wg-tone-bg: var(--wg-tone-orange-bg); --wg-tone-fg: var(--wg-tone-orange-fg); }
96
- /* Gray (auto) = a real Playwright-driven instruction - mark it, a human/AI watching can't "see" DOM state otherwise. */
97
- .wg-ring-el-label[data-tone=auto]::before { content: "\1F916\00a0"; }
96
+ /* Gray (auto) = a real Playwright-driven instruction - mark it, a human/AI watching can't "see" DOM
97
+ state otherwise. A real inline SVG icon (small terminal chevron), not an emoji - emoji rendering
98
+ is font/OS-dependent and reads as an unpolished placeholder next to the rest of this design. */
99
+ .wg-ring-el-label[data-tone=auto]::before {
100
+ content: ""; display: inline-block; width: 12px; height: 12px; margin-right: 5px;
101
+ vertical-align: -1px; background-repeat: no-repeat; background-size: contain;
102
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none'%3E%3Cpath d='M2.5 3.5l5 4.5-5 4.5M8.5 12.5h5' stroke='white' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
103
+ }
98
104
  .wg-ring-el-label[data-size=sm] { font-size: 10px; line-height: 1.25; padding: 4px 7px; border-radius: 5px; }
99
105
  .wg-ring-el-label[data-size=lg] { font-size: 16px; line-height: 1.35; padding: 8px 14px; border-radius: 9px; max-width: min(480px, 85vw); }
100
106
  .wg-ring-el-label[data-weight=bold] { font-weight: 800; }
@@ -136,6 +142,9 @@
136
142
  #wg-banner[data-pos=left] { left: 14px; right: auto; transform: none; }
137
143
  #wg-banner[data-pos=center] { left: 50%; right: auto; transform: translateX(-50%); }
138
144
  #wg-banner[data-pos=right] { right: 14px; left: auto; transform: none; }
145
+ /* Same "auto opacity" step-back the todo dock already has (.wg-todo-behind) while a ring caption
146
+ is the current focus - added via __wgBannerSetBehind, not just the collision-driven move. */
147
+ #wg-banner.wg-banner-behind { opacity: .42; }
139
148
  #wg-banner .wg-banner-tag {
140
149
  display: block; font-size: 10px; font-weight: 700; color: var(--wg-accent-soft);
141
150
  letter-spacing: .05em; text-transform: uppercase; margin-bottom: 2px;
@@ -151,7 +160,7 @@
151
160
  * duplicate of this file's own rules, is consolidated.
152
161
  */
153
162
  #wg-pilot-fx-todos {
154
- position: fixed; z-index: var(--wg-z-fx); top: 72px; max-width: 280px; max-height: calc(100vh - 100px);
163
+ position: fixed; z-index: var(--wg-z-fx); top: 104px; max-width: 280px; max-height: calc(100vh - 132px);
155
164
  overflow: auto; font: 12px/1.4 ui-sans-serif, system-ui, sans-serif; color: #fff;
156
165
  background: var(--wg-surface); border-radius: var(--wg-radius-md); padding: 10px 12px;
157
166
  box-shadow: var(--wg-shadow-dock); pointer-events: auto; transition: opacity .25s ease;
@@ -181,3 +190,27 @@
181
190
  background: var(--wg-surface); color: #fff; border-radius: var(--wg-radius-sm);
182
191
  box-shadow: 0 2px 8px rgba(0,0,0,.25);
183
192
  }
193
+
194
+
195
+ /*
196
+ * Bottom subtitle caption (#wg-caption-bar) - a white rounded card, not a full-width dark scrim
197
+ * (matches the rest of the overlay's light "toast" surfaces - banner/panel are the dark violet
198
+ * chrome, this narrates the PAGE itself so it reads as a caption card, not more chrome).
199
+ */
200
+ #wg-caption-bar {
201
+ position: fixed; z-index: var(--wg-z-focus); left: 0; right: 0; bottom: 0;
202
+ /* Bottom padding clears the collapsed step-pill (#wg-panel, bottom:12px, ~40px tall,
203
+ z-index:2147483647 - always on top) - without it the pill sat right over the caption card,
204
+ both centered at the bottom of the viewport (see #wg-typing-badge's own bottom:88px, same
205
+ reason). */
206
+ padding: 0 6% 64px; display: flex; justify-content: center;
207
+ pointer-events: none; opacity: 0; transform: translateY(6px);
208
+ transition: opacity .3s ease, transform .3s ease;
209
+ }
210
+ #wg-caption-bar.wg-in { opacity: 1; transform: translateY(0); }
211
+ #wg-caption-bar .wg-caption-text {
212
+ font: 500 15px/1.4 var(--wg-font); color: #1c1917; text-align: center;
213
+ max-width: 82%; text-wrap: balance;
214
+ background: #fff; border-radius: var(--wg-radius-lg);
215
+ padding: 10px 18px; box-shadow: var(--wg-shadow-banner);
216
+ }
@@ -0,0 +1,21 @@
1
+ [18:43:31.014] waygraph pilot: stub.before ctx.title("Signing in · mobile")
2
+ [18:43:31.014] waygraph pilot: stub.before ctx.todos n=6 index=0
3
+ [18:43:31.015] waygraph pilot: stub.before ctx.device(mobile)
4
+ [18:43:31.015] waygraph pilot: stub.before ctx.zoom(1.35)
5
+ [18:43:31.015] waygraph pilot: stub.before ring #user-name tone=info label="Username"
6
+ [18:43:31.780] waygraph pilot: stub.after ctx.todos n=6 index=1
7
+ [18:43:32.878] waygraph pilot: stub.before ring #password tone=planned label="Password"
8
+ [18:43:33.035] waygraph pilot: stub.after ctx.todos n=6 index=2
9
+ [18:43:34.170] waygraph pilot: stub.before ring #login-button tone=warning label="Login"
10
+ [18:43:34.393] waygraph pilot: stub.after ctx.title("Inventory · landscape")
11
+ [18:43:34.393] waygraph pilot: stub.after ctx.todos n=6 index=3
12
+ [18:43:34.393] waygraph pilot: stub.after ctx.device(mobile)
13
+ [18:43:34.393] waygraph pilot: stub.after ring .inventory_list tone=success label="Product shelf"
14
+ [18:43:37.076] waygraph pilot: stub.before ctx.title("Open cart · landscape")
15
+ [18:43:37.076] waygraph pilot: stub.before ctx.todos n=6 index=5
16
+ [18:43:37.076] waygraph pilot: stub.before ctx.device(mobile)
17
+ [18:43:37.076] waygraph pilot: stub.before ctx.zoom(1.4)
18
+ [18:43:37.076] waygraph pilot: stub.before ring .shopping_cart_link tone=planned label="Cart"
19
+ [18:43:37.510] waygraph pilot: stub.after ctx.title("Your cart · desktop")
20
+ [18:43:37.511] waygraph pilot: stub.after ring .cart_item tone=success label="Cart items"
21
+ [18:43:37.589] waygraph pilot: ring not painted - selector matched nothing (or a zero-size element): .cart_item
@@ -0,0 +1,6 @@
1
+ [14:01:13.381] waygraph pilot: stub.before ctx.title("Signing in · mobile")
2
+ [14:01:13.382] waygraph pilot: stub.before ctx.todos n=6 index=0
3
+ [14:01:13.382] waygraph pilot: stub.before ctx.device(mobile)
4
+ [14:01:13.382] waygraph pilot: stub.before ctx.zoom(1.35)
5
+ [14:01:13.382] waygraph pilot: stub.before ring #user-name tone=info label="Username"
6
+ [14:01:14.418] waygraph pilot: stub.after ctx.todos n=6 index=1
@@ -0,0 +1,20 @@
1
+ [15:11:57.159] waygraph pilot: stub.before ctx.title("Signing in · mobile")
2
+ [15:11:57.159] waygraph pilot: stub.before ctx.todos n=6 index=0
3
+ [15:11:57.160] waygraph pilot: stub.before ctx.device(mobile)
4
+ [15:11:57.160] waygraph pilot: stub.before ctx.zoom(1.35)
5
+ [15:11:57.160] waygraph pilot: stub.before ring #user-name tone=info label="Username"
6
+ [15:11:58.387] waygraph pilot: stub.after ctx.todos n=6 index=1
7
+ [15:11:59.771] waygraph pilot: stub.before ring #password tone=planned label="Password"
8
+ [15:11:59.868] waygraph pilot: stub.after ctx.todos n=6 index=2
9
+ [15:12:01.498] waygraph pilot: stub.before ring #login-button tone=warning label="Login"
10
+ [15:12:01.761] waygraph pilot: stub.after ctx.title("Inventory · landscape")
11
+ [15:12:01.763] waygraph pilot: stub.after ctx.todos n=6 index=3
12
+ [15:12:01.763] waygraph pilot: stub.after ctx.device(mobile)
13
+ [15:12:01.763] waygraph pilot: stub.after ring .inventory_list tone=success label="Product shelf"
14
+ [15:12:05.024] waygraph pilot: stub.before ctx.title("Open cart · landscape")
15
+ [15:12:05.024] waygraph pilot: stub.before ctx.todos n=6 index=5
16
+ [15:12:05.024] waygraph pilot: stub.before ctx.device(mobile)
17
+ [15:12:05.024] waygraph pilot: stub.before ctx.zoom(1.4)
18
+ [15:12:05.024] waygraph pilot: stub.before ring .shopping_cart_link tone=planned label="Cart"
19
+ [15:12:05.374] waygraph pilot: stub.after ctx.title("Your cart · desktop")
20
+ [15:12:05.374] waygraph pilot: stub.after ring .cart_item tone=success label="Cart items"
@@ -0,0 +1,6 @@
1
+ [10:25:35.405] waygraph pilot: highlight ctx.todos n=3 index=0
2
+ [10:25:35.406] waygraph pilot: highlight ring #user-name tone=planned label="Username"
3
+ [10:25:35.406] waygraph pilot: highlight ring #password tone=info label="Password"
4
+ [10:25:40.761] waygraph pilot: highlight ring #no-such-element-waygraph tone=danger label="Gone"
5
+ [10:25:40.795] waygraph pilot: ring not painted - selector matched nothing (or a zero-size element): #no-such-element-waygraph
6
+ [10:25:44.204] waygraph pilot: highlight ring #login-button tone=success label="Login"
@@ -0,0 +1,6 @@
1
+ [18:22:04.004] waygraph pilot: stub.before ctx.title("Signing in · mobile")
2
+ [18:22:04.004] waygraph pilot: stub.before ctx.todos n=6 index=0
3
+ [18:22:04.005] waygraph pilot: stub.before ctx.device(mobile)
4
+ [18:22:04.005] waygraph pilot: stub.before ctx.zoom(1.35)
5
+ [18:22:04.005] waygraph pilot: stub.before ring #user-name tone=info label="Username"
6
+ [18:22:05.633] waygraph pilot: stub.after ctx.todos n=6 index=1
File without changes
@@ -0,0 +1,22 @@
1
+ [11:09:34.839] waygraph pilot: stub.before ctx.title("Signing in · mobile")
2
+ [11:09:34.839] waygraph pilot: stub.before ctx.todos n=6 index=0
3
+ [11:09:34.839] waygraph pilot: stub.before ctx.device(mobile)
4
+ [11:09:34.839] waygraph pilot: stub.before ctx.zoom(1.35)
5
+ [11:09:34.839] waygraph pilot: stub.before ring #user-name tone=info label="Username"
6
+ [11:09:35.582] waygraph pilot: stub.after ctx.todos n=6 index=1
7
+ [11:09:38.020] waygraph pilot: stub.before ring #password tone=planned label="Password"
8
+ [11:09:38.142] waygraph pilot: stub.after ctx.todos n=6 index=2
9
+ [11:09:41.474] waygraph pilot: stub.before ring #login-button tone=warning label="Login"
10
+ [11:09:41.984] waygraph pilot: stub.after ctx.title("Inventory · landscape")
11
+ [11:09:41.985] waygraph pilot: stub.after ctx.todos n=6 index=3
12
+ [11:09:41.985] waygraph pilot: stub.after ctx.device(mobile)
13
+ [11:09:41.985] waygraph pilot: stub.after ring .inventory_list tone=success label="Product shelf"
14
+ [11:09:47.467] waygraph pilot: stub.before ctx.title("Pick a product · tablet")
15
+ [11:09:47.467] waygraph pilot: stub.before ctx.todos n=6 index=3
16
+ [11:09:47.467] waygraph pilot: stub.before ctx.device(tablet)
17
+ [11:09:47.467] waygraph pilot: stub.before ctx.zoom(1.35)
18
+ [11:09:47.468] 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:09:47.468] waygraph pilot: stub.before ring [data-test="add-to-cart-sauce-labs-backpack"] tone=success label="Add to cart"
20
+ [11:09:48.774] waygraph pilot: stub.after ctx.title("In the cart")
21
+ [11:09:48.775] waygraph pilot: stub.after ctx.todos n=6 index=4
22
+ [11:09:48.775] waygraph pilot: stub.after ring .shopping_cart_badge tone=success label="Cart badge"
@@ -0,0 +1,5 @@
1
+ [14:52:25.116] waygraph pilot: highlight ctx.todos n=3 index=0
2
+ [14:52:25.117] waygraph pilot: highlight ring #user-name tone=planned label="Username"
3
+ [14:52:25.117] waygraph pilot: highlight ring #password tone=info label="Password"
4
+ [14:52:30.181] waygraph pilot: highlight ring #no-such-element-waygraph tone=danger label="Gone"
5
+ [14:52:32.860] waygraph pilot: highlight ring #login-button tone=success label="Login"
File without changes
@@ -0,0 +1,21 @@
1
+ [21:17:29.924] waygraph pilot: stub.before ctx.title("Signing in · mobile")
2
+ [21:17:29.924] waygraph pilot: stub.before ctx.todos n=6 index=0
3
+ [21:17:29.925] waygraph pilot: stub.before ctx.device(mobile)
4
+ [21:17:29.925] waygraph pilot: stub.before ctx.zoom(1.35)
5
+ [21:17:29.925] waygraph pilot: stub.before ring #user-name tone=info label="Username"
6
+ [21:17:30.749] waygraph pilot: stub.after ctx.todos n=6 index=1
7
+ [21:17:31.891] waygraph pilot: stub.before ring #password tone=planned label="Password"
8
+ [21:17:31.976] waygraph pilot: stub.after ctx.todos n=6 index=2
9
+ [21:17:33.127] waygraph pilot: stub.before ring #login-button tone=warning label="Login"
10
+ [21:17:33.363] waygraph pilot: stub.after ctx.title("Inventory · landscape")
11
+ [21:17:33.363] waygraph pilot: stub.after ctx.todos n=6 index=3
12
+ [21:17:33.363] waygraph pilot: stub.after ctx.device(mobile)
13
+ [21:17:33.363] waygraph pilot: stub.after ring .inventory_list tone=success label="Product shelf"
14
+ [21:17:35.572] waygraph pilot: stub.before ctx.title("Open cart · landscape")
15
+ [21:17:35.572] waygraph pilot: stub.before ctx.todos n=6 index=5
16
+ [21:17:35.572] waygraph pilot: stub.before ctx.device(mobile)
17
+ [21:17:35.572] waygraph pilot: stub.before ctx.zoom(1.4)
18
+ [21:17:35.572] waygraph pilot: stub.before ring .shopping_cart_link tone=planned label="Cart"
19
+ [21:17:35.828] waygraph pilot: stub.after ctx.title("Your cart · desktop")
20
+ [21:17:35.828] waygraph pilot: stub.after ring .cart_item tone=success label="Cart items"
21
+ [21:17:35.891] waygraph pilot: ring not painted - selector matched nothing (or a zero-size element): .cart_item
@@ -0,0 +1,21 @@
1
+ [10:25:18.860] waygraph pilot: stub.before ctx.title("Signing in · mobile")
2
+ [10:25:18.861] waygraph pilot: stub.before ctx.todos n=6 index=0
3
+ [10:25:18.861] waygraph pilot: stub.before ctx.device(mobile)
4
+ [10:25:18.861] waygraph pilot: stub.before ctx.zoom(1.35)
5
+ [10:25:18.862] waygraph pilot: stub.before ring #user-name tone=info label="Username"
6
+ [10:25:19.866] waygraph pilot: stub.after ctx.todos n=6 index=1
7
+ [10:25:21.296] waygraph pilot: stub.before ring #password tone=planned label="Password"
8
+ [10:25:21.478] waygraph pilot: stub.after ctx.todos n=6 index=2
9
+ [10:25:22.909] waygraph pilot: stub.before ring #login-button tone=warning label="Login"
10
+ [10:25:23.176] waygraph pilot: stub.after ctx.title("Inventory · landscape")
11
+ [10:25:23.176] waygraph pilot: stub.after ctx.todos n=6 index=3
12
+ [10:25:23.176] waygraph pilot: stub.after ctx.device(mobile)
13
+ [10:25:23.176] waygraph pilot: stub.after ring .inventory_list tone=success label="Product shelf"
14
+ [10:25:25.875] waygraph pilot: stub.before ctx.title("Open cart · landscape")
15
+ [10:25:25.875] waygraph pilot: stub.before ctx.todos n=6 index=5
16
+ [10:25:25.875] waygraph pilot: stub.before ctx.device(mobile)
17
+ [10:25:25.875] waygraph pilot: stub.before ctx.zoom(1.4)
18
+ [10:25:25.875] waygraph pilot: stub.before ring .shopping_cart_link tone=planned label="Cart"
19
+ [10:25:26.216] waygraph pilot: stub.after ctx.title("Your cart · desktop")
20
+ [10:25:26.224] waygraph pilot: stub.after ring .cart_item tone=success label="Cart items"
21
+ [10:25:26.263] waygraph pilot: ring not painted - selector matched nothing (or a zero-size element): .cart_item
@@ -0,0 +1,4 @@
1
+ [21:17:15.760] waygraph pilot: highlight ring #user-name tone=planned label="Username"
2
+ [21:17:15.760] waygraph pilot: highlight ring #password tone=info label="Password"
3
+ [21:17:15.760] waygraph pilot: highlight ring #login-button tone=success label="Login"
4
+ [21:17:20.189] waygraph pilot: highlight ring #user-name tone=planned label="Username"
File without changes
@@ -0,0 +1,5 @@
1
+ [16:11:45.876] waygraph pilot: highlight ctx.todos n=3 index=0
2
+ [16:11:45.876] waygraph pilot: highlight ring #user-name tone=planned label="Username"
3
+ [16:11:45.876] waygraph pilot: highlight ring #password tone=info label="Password"
4
+ [16:11:48.257] waygraph pilot: highlight ring #no-such-element-waygraph tone=danger label="Gone"
5
+ [16:11:49.767] waygraph pilot: highlight ring #login-button tone=success label="Login"
@@ -0,0 +1,5 @@
1
+ [16:26:28.654] waygraph pilot: highlight ctx.todos n=3 index=0
2
+ [16:26:28.656] waygraph pilot: highlight ring #user-name tone=planned label="Username"
3
+ [16:26:28.659] waygraph pilot: highlight ring #password tone=info label="Password"
4
+ [16:26:32.406] waygraph pilot: highlight ring #no-such-element-waygraph tone=danger label="Gone"
5
+ [16:26:34.485] waygraph pilot: highlight ring #login-button tone=success label="Login"
File without changes
File without changes
File without changes
@@ -0,0 +1,22 @@
1
+ [16:29:47.576] waygraph pilot: stub.before ctx.title("Signing in · mobile")
2
+ [16:29:47.576] waygraph pilot: stub.before ctx.todos n=6 index=0
3
+ [16:29:47.576] waygraph pilot: stub.before ctx.device(mobile)
4
+ [16:29:47.576] waygraph pilot: stub.before ctx.zoom(1.35)
5
+ [16:29:47.576] waygraph pilot: stub.before ring #user-name tone=info label="Username"
6
+ [16:29:48.942] waygraph pilot: stub.after ctx.todos n=6 index=1
7
+ [16:29:50.794] waygraph pilot: stub.before ring #password tone=planned label="Password"
8
+ [16:29:50.965] waygraph pilot: stub.after ctx.todos n=6 index=2
9
+ [16:29:52.406] waygraph pilot: stub.before ring #login-button tone=warning label="Login"
10
+ [16:29:52.726] waygraph pilot: stub.after ctx.title("Inventory · landscape")
11
+ [16:29:52.727] waygraph pilot: stub.after ctx.todos n=6 index=3
12
+ [16:29:52.727] waygraph pilot: stub.after ctx.device(mobile)
13
+ [16:29:52.727] waygraph pilot: stub.after ring .inventory_list tone=success label="Product shelf"
14
+ [16:29:54.148] waygraph pilot: ring not painted - selector matched nothing (or a zero-size element): .inventory_list
15
+ [16:29:58.462] waygraph pilot: stub.before ctx.title("Open cart · landscape")
16
+ [16:29:58.462] waygraph pilot: stub.before ctx.todos n=6 index=5
17
+ [16:29:58.462] waygraph pilot: stub.before ctx.device(mobile)
18
+ [16:29:58.462] waygraph pilot: stub.before ctx.zoom(1.4)
19
+ [16:29:58.462] waygraph pilot: stub.before ring .shopping_cart_link tone=planned label="Cart"
20
+ [16:29:58.870] waygraph pilot: stub.after ctx.title("Your cart · desktop")
21
+ [16:29:58.871] waygraph pilot: stub.after ring .cart_item tone=success label="Cart items"
22
+ [16:29:58.934] waygraph pilot: ring not painted - selector matched nothing (or a zero-size element): .cart_item
@@ -0,0 +1,6 @@
1
+ [18:30:36.145] waygraph pilot: highlight ctx.todos n=3 index=0
2
+ [18:30:36.145] waygraph pilot: highlight ring #user-name tone=planned label="Username"
3
+ [18:30:36.145] waygraph pilot: highlight ring #password tone=info label="Password"
4
+ [18:30:39.932] waygraph pilot: highlight ring #no-such-element-waygraph tone=danger label="Gone"
5
+ [18:30:39.969] waygraph pilot: ring not painted - selector matched nothing (or a zero-size element): #no-such-element-waygraph
6
+ [18:30:42.370] waygraph pilot: highlight ring #login-button tone=success label="Login"
File without changes
File without changes
@@ -0,0 +1,6 @@
1
+ [23:45:06.157] waygraph pilot: highlight ctx.todos n=3 index=0
2
+ [23:45:06.157] waygraph pilot: highlight ring #user-name tone=planned label="Username"
3
+ [23:45:06.157] waygraph pilot: highlight ring #password tone=info label="Password"
4
+ [23:45:10.675] waygraph pilot: highlight ring #no-such-element-waygraph tone=danger label="Gone"
5
+ [23:45:10.718] waygraph pilot: ring not painted - selector matched nothing (or a zero-size element): #no-such-element-waygraph
6
+ [23:45:13.465] waygraph pilot: highlight ring #login-button tone=success label="Login"
File without changes
File without changes
File without changes
@@ -0,0 +1,6 @@
1
+ [21:21:37.246] waygraph pilot: highlight ctx.todos n=3 index=0
2
+ [21:21:37.246] waygraph pilot: highlight ring #user-name tone=planned label="Username"
3
+ [21:21:37.246] waygraph pilot: highlight ring #password tone=info label="Password"
4
+ [21:21:41.392] waygraph pilot: highlight ring #no-such-element-waygraph tone=danger label="Gone"
5
+ [21:21:41.436] waygraph pilot: ring not painted - selector matched nothing (or a zero-size element): #no-such-element-waygraph
6
+ [21:21:44.243] waygraph pilot: highlight ring #login-button tone=success label="Login"
File without changes
File without changes
@@ -0,0 +1,4 @@
1
+ [16:29:18.968] waygraph pilot: highlight ring #user-name tone=planned label="Username"
2
+ [16:29:18.969] waygraph pilot: highlight ring #password tone=info label="Password"
3
+ [16:29:18.969] waygraph pilot: highlight ring #login-button tone=success label="Login"
4
+ [16:29:23.306] waygraph pilot: highlight ring #user-name tone=planned label="Username"
@@ -0,0 +1,5 @@
1
+ [18:15:25.473] waygraph pilot: highlight ctx.todos n=3 index=0
2
+ [18:15:25.474] waygraph pilot: highlight ring #user-name tone=planned label="Username"
3
+ [18:15:25.474] waygraph pilot: highlight ring #password tone=info label="Password"
4
+ [18:15:29.893] waygraph pilot: highlight ring #no-such-element-waygraph tone=danger label="Gone"
5
+ [18:15:59.935] waygraph pilot: ring not painted - selector matched nothing (or a zero-size element): #no-such-element-waygraph
@@ -0,0 +1,20 @@
1
+ [17:00:37.043] waygraph pilot: stub.before ctx.title("Signing in · mobile")
2
+ [17:00:37.044] waygraph pilot: stub.before ctx.todos n=6 index=0
3
+ [17:00:37.045] waygraph pilot: stub.before ctx.device(mobile)
4
+ [17:00:37.046] waygraph pilot: stub.before ctx.zoom(1.35)
5
+ [17:00:37.046] waygraph pilot: stub.before ring #user-name tone=info label="Username"
6
+ [17:00:38.833] waygraph pilot: stub.after ctx.todos n=6 index=1
7
+ [17:00:42.333] waygraph pilot: stub.before ring #password tone=planned label="Password"
8
+ [17:00:42.621] waygraph pilot: stub.after ctx.todos n=6 index=2
9
+ [17:00:45.360] waygraph pilot: stub.before ring #login-button tone=warning label="Login"
10
+ [17:00:45.661] waygraph pilot: stub.after ctx.title("Inventory · landscape")
11
+ [17:00:45.661] waygraph pilot: stub.after ctx.todos n=6 index=3
12
+ [17:00:45.662] waygraph pilot: stub.after ctx.device(mobile)
13
+ [17:00:45.662] waygraph pilot: stub.after ring .inventory_list tone=success label="Product shelf"
14
+ [17:00:50.559] waygraph pilot: stub.before ctx.title("Open cart · landscape")
15
+ [17:00:50.559] waygraph pilot: stub.before ctx.todos n=6 index=5
16
+ [17:00:50.559] waygraph pilot: stub.before ctx.device(mobile)
17
+ [17:00:50.559] waygraph pilot: stub.before ctx.zoom(1.4)
18
+ [17:00:50.559] waygraph pilot: stub.before ring .shopping_cart_link tone=planned label="Cart"
19
+ [17:00:51.181] waygraph pilot: stub.after ctx.title("Your cart · desktop")
20
+ [17:00:51.181] waygraph pilot: stub.after ring .cart_item tone=success label="Cart items"
@@ -0,0 +1,4 @@
1
+ [18:39:40.816] waygraph pilot: highlight ring #user-name tone=planned label="Username"
2
+ [18:39:40.816] waygraph pilot: highlight ring #password tone=info label="Password"
3
+ [18:39:40.816] waygraph pilot: highlight ring #login-button tone=success label="Login"
4
+ [18:39:43.269] waygraph pilot: highlight ring #user-name tone=planned label="Username"
File without changes
@@ -0,0 +1,22 @@
1
+ [14:57:24.022] waygraph pilot: stub.before ctx.title("Signing in · mobile")
2
+ [14:57:24.023] waygraph pilot: stub.before ctx.todos n=6 index=0
3
+ [14:57:24.024] waygraph pilot: stub.before ctx.device(mobile)
4
+ [14:57:24.024] waygraph pilot: stub.before ctx.zoom(1.35)
5
+ [14:57:24.024] waygraph pilot: stub.before ring #user-name tone=info label="Username"
6
+ [14:57:25.406] waygraph pilot: stub.after ctx.todos n=6 index=1
7
+ [14:57:28.612] waygraph pilot: stub.before ring #password tone=planned label="Password"
8
+ [14:57:28.798] waygraph pilot: stub.after ctx.todos n=6 index=2
9
+ [14:57:31.717] waygraph pilot: stub.before ring #login-button tone=warning label="Login"
10
+ [14:57:32.072] waygraph pilot: stub.after ctx.title("Inventory · landscape")
11
+ [14:57:32.072] waygraph pilot: stub.after ctx.todos n=6 index=3
12
+ [14:57:32.072] waygraph pilot: stub.after ctx.device(mobile)
13
+ [14:57:32.073] waygraph pilot: stub.after ring .inventory_list tone=success label="Product shelf"
14
+ [14:57:39.956] waygraph pilot: stub.before ctx.title("Pick a product · tablet")
15
+ [14:57:39.957] waygraph pilot: stub.before ctx.todos n=6 index=3
16
+ [14:57:39.957] waygraph pilot: stub.before ctx.device(tablet)
17
+ [14:57:39.957] waygraph pilot: stub.before ctx.zoom(1.35)
18
+ [14:57:39.957] 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
+ [14:57:39.957] waygraph pilot: stub.before ring [data-test="add-to-cart-sauce-labs-backpack"] tone=success label="Add to cart"
20
+ [14:57:41.454] waygraph pilot: stub.after ctx.title("In the cart")
21
+ [14:57:41.455] waygraph pilot: stub.after ctx.todos n=6 index=4
22
+ [14:57:41.455] waygraph pilot: stub.after ring .shopping_cart_badge tone=success label="Cart badge"