e2e 0.15.2 → 0.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1024) hide show
  1. package/dist/.build.json +1 -1
  2. package/dist/agent/act-validation.d.ts +10 -1
  3. package/dist/agent/act-validation.js +48 -1
  4. package/dist/agent/act.d.ts +1 -2
  5. package/dist/agent/act.js +29 -9
  6. package/dist/agent/action-dispatcher.d.ts +0 -1
  7. package/dist/agent/action-dispatcher.js +4 -6
  8. package/dist/agent/action-names.d.ts +0 -1
  9. package/dist/agent/action-names.js +0 -1
  10. package/dist/agent/actions.d.ts +32 -24
  11. package/dist/agent/actions.js +38 -25
  12. package/dist/agent/agent-brand.d.ts +0 -1
  13. package/dist/agent/agent-brand.js +0 -1
  14. package/dist/agent/ai-sdk.d.ts +7 -1
  15. package/dist/agent/ai-sdk.js +11 -1
  16. package/dist/agent/call-options.d.ts +0 -1
  17. package/dist/agent/call-options.js +0 -1
  18. package/dist/agent/default-agent.d.ts +0 -1
  19. package/dist/agent/default-agent.js +0 -1
  20. package/dist/agent/derived.d.ts +0 -1
  21. package/dist/agent/derived.js +0 -1
  22. package/dist/agent/error.d.ts +0 -1
  23. package/dist/agent/error.js +0 -1
  24. package/dist/agent/executor.d.ts +0 -1
  25. package/dist/agent/executor.js +0 -1
  26. package/dist/agent/index.d.ts +0 -1
  27. package/dist/agent/index.js +0 -1
  28. package/dist/agent/interactive-step.d.ts +0 -1
  29. package/dist/agent/interactive-step.js +0 -1
  30. package/dist/agent/invocation.d.ts +0 -1
  31. package/dist/agent/invocation.js +10 -5
  32. package/dist/agent/ledger.d.ts +0 -1
  33. package/dist/agent/ledger.js +0 -1
  34. package/dist/agent/loop-guards.d.ts +0 -1
  35. package/dist/agent/loop-guards.js +0 -1
  36. package/dist/agent/model/adapter.d.ts +0 -1
  37. package/dist/agent/model/adapter.js +0 -1
  38. package/dist/agent/model/overflow.d.ts +0 -1
  39. package/dist/agent/model/overflow.js +0 -1
  40. package/dist/agent/model/provider-hints.d.ts +0 -1
  41. package/dist/agent/model/provider-hints.js +0 -1
  42. package/dist/agent/model/schema.d.ts +0 -1
  43. package/dist/agent/model/schema.js +0 -1
  44. package/dist/agent/model/sdk.d.ts +0 -1
  45. package/dist/agent/model/sdk.js +2 -1
  46. package/dist/agent/model/stall.d.ts +0 -1
  47. package/dist/agent/model/stall.js +0 -1
  48. package/dist/agent/model/tool-choice.d.ts +0 -1
  49. package/dist/agent/model/tool-choice.js +0 -1
  50. package/dist/agent/observation-budget.d.ts +0 -1
  51. package/dist/agent/observation-budget.js +0 -1
  52. package/dist/agent/observation-feed.d.ts +5 -7
  53. package/dist/agent/observation-feed.js +5 -8
  54. package/dist/agent/observation.d.ts +40 -12
  55. package/dist/agent/observation.js +109 -60
  56. package/dist/agent/operation-queue.d.ts +0 -1
  57. package/dist/agent/operation-queue.js +0 -1
  58. package/dist/agent/phases.d.ts +0 -1
  59. package/dist/agent/phases.js +0 -1
  60. package/dist/agent/pixels.d.ts +0 -1
  61. package/dist/agent/pixels.js +0 -1
  62. package/dist/agent/point-tap.d.ts +8 -9
  63. package/dist/agent/point-tap.js +1 -2
  64. package/dist/agent/primitives.d.ts +6 -1
  65. package/dist/agent/primitives.js +4 -2
  66. package/dist/agent/prompts.d.ts +0 -1
  67. package/dist/agent/prompts.js +0 -1
  68. package/dist/agent/protocol.d.ts +0 -1
  69. package/dist/agent/protocol.js +0 -1
  70. package/dist/agent/public.d.ts +0 -1
  71. package/dist/agent/public.js +0 -1
  72. package/dist/agent/reading.d.ts +0 -1
  73. package/dist/agent/reading.js +0 -1
  74. package/dist/agent/replay.d.ts +19 -9
  75. package/dist/agent/replay.js +11 -15
  76. package/dist/agent/screen-update.d.ts +0 -1
  77. package/dist/agent/screen-update.js +0 -1
  78. package/dist/agent/scroll-target.d.ts +2 -4
  79. package/dist/agent/scroll-target.js +0 -1
  80. package/dist/agent/secrets.d.ts +0 -1
  81. package/dist/agent/secrets.js +0 -1
  82. package/dist/agent/settle-policy.d.ts +0 -1
  83. package/dist/agent/settle-policy.js +0 -1
  84. package/dist/agent/step-accounting.d.ts +0 -1
  85. package/dist/agent/step-accounting.js +0 -1
  86. package/dist/agent/step-cache.d.ts +41 -15
  87. package/dist/agent/step-cache.js +147 -63
  88. package/dist/agent/tool-loop.d.ts +0 -1
  89. package/dist/agent/tool-loop.js +2 -1
  90. package/dist/agent/tool-output.d.ts +0 -1
  91. package/dist/agent/tool-output.js +0 -1
  92. package/dist/agent/tool.d.ts +0 -1
  93. package/dist/agent/tool.js +0 -1
  94. package/dist/agent/transcript-compaction.d.ts +0 -1
  95. package/dist/agent/transcript-compaction.js +0 -1
  96. package/dist/agent/upload-paths.d.ts +0 -1
  97. package/dist/agent/upload-paths.js +0 -1
  98. package/dist/agent/usage.d.ts +0 -1
  99. package/dist/agent/usage.js +0 -1
  100. package/dist/cache/anchors.d.ts +72 -24
  101. package/dist/cache/anchors.js +233 -61
  102. package/dist/cache/context.d.ts +25 -15
  103. package/dist/cache/context.js +50 -9
  104. package/dist/cache/decide.d.ts +2 -3
  105. package/dist/cache/decide.js +4 -7
  106. package/dist/cache/identity.d.ts +18 -5
  107. package/dist/cache/identity.js +9 -5
  108. package/dist/cache/recorder.d.ts +15 -2
  109. package/dist/cache/recorder.js +36 -24
  110. package/dist/cache/rekeyed.d.ts +46 -0
  111. package/dist/cache/rekeyed.js +89 -0
  112. package/dist/cache/relocate.d.ts +14 -15
  113. package/dist/cache/relocate.js +33 -26
  114. package/dist/cache/route.d.ts +32 -34
  115. package/dist/cache/route.js +94 -51
  116. package/dist/cache/store.d.ts +6 -1
  117. package/dist/cache/store.js +21 -2
  118. package/dist/cache/template.d.ts +0 -1
  119. package/dist/cache/template.js +0 -1
  120. package/dist/cache/trace.d.ts +53 -15
  121. package/dist/cache/trace.js +70 -29
  122. package/dist/cli/bin.d.ts +0 -1
  123. package/dist/cli/bin.js +0 -1
  124. package/dist/cli/cache.d.ts +0 -1
  125. package/dist/cli/cache.js +0 -1
  126. package/dist/cli/docs-url.d.ts +0 -1
  127. package/dist/cli/docs-url.js +0 -1
  128. package/dist/cli/feedback.d.ts +0 -1
  129. package/dist/cli/feedback.js +0 -1
  130. package/dist/cli/guide.d.ts +0 -1
  131. package/dist/cli/guide.js +0 -1
  132. package/dist/cli/index.d.ts +0 -1
  133. package/dist/cli/index.js +10 -11
  134. package/dist/cli/init/agent-skill.d.ts +0 -1
  135. package/dist/cli/init/agent-skill.js +0 -1
  136. package/dist/cli/init/engines.d.ts +1 -4
  137. package/dist/cli/init/engines.js +2 -3
  138. package/dist/cli/init/gateways.d.ts +1 -2
  139. package/dist/cli/init/gateways.js +11 -2
  140. package/dist/cli/init/mcp-config.d.ts +0 -1
  141. package/dist/cli/init/mcp-config.js +0 -1
  142. package/dist/cli/init/package.d.ts +0 -1
  143. package/dist/cli/init/package.js +0 -1
  144. package/dist/cli/init/scaffold.d.ts +0 -1
  145. package/dist/cli/init/scaffold.js +0 -1
  146. package/dist/cli/init/sibling-versions.json +1 -1
  147. package/dist/cli/init/versions.d.ts +0 -9
  148. package/dist/cli/init/versions.js +1 -11
  149. package/dist/cli/init.d.ts +0 -1
  150. package/dist/cli/init.js +0 -1
  151. package/dist/cli/mcp.d.ts +9 -2
  152. package/dist/cli/mcp.js +14 -2
  153. package/dist/cli/signals.d.ts +0 -1
  154. package/dist/cli/signals.js +0 -1
  155. package/dist/cli/skill.d.ts +0 -1
  156. package/dist/cli/skill.js +0 -1
  157. package/dist/cli/telemetry.d.ts +0 -1
  158. package/dist/cli/telemetry.js +1 -2
  159. package/dist/cli/wordmark.d.ts +0 -1
  160. package/dist/cli/wordmark.js +0 -1
  161. package/dist/collect/collect.d.ts +0 -1
  162. package/dist/collect/collect.js +3 -2
  163. package/dist/collect/registry.d.ts +6 -3
  164. package/dist/collect/registry.js +31 -14
  165. package/dist/collect/select.d.ts +0 -1
  166. package/dist/collect/select.js +0 -1
  167. package/dist/config/agent.d.ts +0 -1
  168. package/dist/config/agent.js +0 -1
  169. package/dist/config/app.d.ts +0 -1
  170. package/dist/config/app.js +0 -1
  171. package/dist/config/command.d.ts +0 -1
  172. package/dist/config/command.js +0 -1
  173. package/dist/config/diagnose.d.ts +0 -1
  174. package/dist/config/diagnose.js +0 -1
  175. package/dist/config/esm-hooks.d.ts +0 -1
  176. package/dist/config/esm-hooks.js +0 -1
  177. package/dist/config/load.d.ts +0 -1
  178. package/dist/config/load.js +0 -1
  179. package/dist/config/resolve.d.ts +1 -1
  180. package/dist/config/resolve.js +33 -2
  181. package/dist/config/secrets.d.ts +0 -1
  182. package/dist/config/secrets.js +0 -1
  183. package/dist/config/targets.d.ts +0 -1
  184. package/dist/config/targets.js +0 -1
  185. package/dist/config/validate.d.ts +0 -1
  186. package/dist/config/validate.js +0 -1
  187. package/dist/engine/contract.d.ts +0 -1
  188. package/dist/engine/contract.js +0 -1
  189. package/dist/engine/index.d.ts +3 -4
  190. package/dist/engine/index.js +4 -4
  191. package/dist/engine/manifest.d.ts +0 -1
  192. package/dist/engine/manifest.js +0 -1
  193. package/dist/engine/recording.d.ts +0 -1
  194. package/dist/engine/recording.js +0 -1
  195. package/dist/engine/resolve.d.ts +0 -1
  196. package/dist/engine/resolve.js +0 -1
  197. package/dist/engine/session.d.ts +0 -1
  198. package/dist/engine/session.js +0 -1
  199. package/dist/engine/surface.d.ts +0 -1
  200. package/dist/engine/surface.js +0 -1
  201. package/dist/engine/timing.d.ts +0 -1
  202. package/dist/engine/timing.js +0 -1
  203. package/dist/expect/async.d.ts +0 -1
  204. package/dist/expect/async.js +101 -59
  205. package/dist/expect/attempt.d.ts +0 -1
  206. package/dist/expect/attempt.js +0 -1
  207. package/dist/expect/index.d.ts +0 -1
  208. package/dist/expect/index.js +0 -1
  209. package/dist/expect/poll-scope.d.ts +52 -0
  210. package/dist/expect/poll-scope.js +113 -0
  211. package/dist/expect/poll.d.ts +0 -1
  212. package/dist/expect/poll.js +31 -5
  213. package/dist/expect/soft.d.ts +0 -1
  214. package/dist/expect/soft.js +0 -1
  215. package/dist/expect/values.d.ts +0 -1
  216. package/dist/expect/values.js +11 -5
  217. package/dist/explore/body.d.ts +0 -1
  218. package/dist/explore/body.js +0 -1
  219. package/dist/explore/executor.d.ts +0 -1
  220. package/dist/explore/executor.js +0 -1
  221. package/dist/explore/index.d.ts +0 -1
  222. package/dist/explore/index.js +16 -2
  223. package/dist/explore/plan.d.ts +0 -1
  224. package/dist/explore/plan.js +0 -1
  225. package/dist/explore/progress.d.ts +0 -1
  226. package/dist/explore/progress.js +0 -1
  227. package/dist/explore/state.d.ts +0 -1
  228. package/dist/explore/state.js +0 -1
  229. package/dist/index.d.ts +0 -1
  230. package/dist/index.js +0 -1
  231. package/dist/internal/abandoned.d.ts +11 -0
  232. package/dist/internal/abandoned.js +23 -0
  233. package/dist/internal/ai-trace.d.ts +0 -1
  234. package/dist/internal/ai-trace.js +0 -1
  235. package/dist/internal/atomic-write.d.ts +0 -1
  236. package/dist/internal/atomic-write.js +0 -1
  237. package/dist/internal/brands.d.ts +2 -1
  238. package/dist/internal/brands.js +2 -1
  239. package/dist/internal/client-identity.d.ts +9 -0
  240. package/dist/internal/client-identity.js +14 -0
  241. package/dist/internal/debug.d.ts +0 -1
  242. package/dist/internal/debug.js +0 -1
  243. package/dist/internal/env.d.ts +0 -1
  244. package/dist/internal/env.js +0 -1
  245. package/dist/internal/errors.d.ts +0 -1
  246. package/dist/internal/errors.js +0 -1
  247. package/dist/internal/geometry.d.ts +0 -1
  248. package/dist/internal/geometry.js +0 -1
  249. package/dist/internal/git.d.ts +0 -1
  250. package/dist/internal/git.js +0 -1
  251. package/dist/internal/globs.d.ts +0 -1
  252. package/dist/internal/globs.js +0 -1
  253. package/dist/internal/ids.d.ts +0 -1
  254. package/dist/internal/ids.js +0 -1
  255. package/dist/internal/json-value.d.ts +0 -1
  256. package/dist/internal/json-value.js +0 -1
  257. package/dist/internal/keys.d.ts +0 -1
  258. package/dist/internal/keys.js +0 -1
  259. package/dist/internal/node-version.d.ts +0 -1
  260. package/dist/internal/node-version.js +0 -1
  261. package/dist/internal/objects.d.ts +0 -1
  262. package/dist/internal/objects.js +0 -1
  263. package/dist/internal/options.d.ts +0 -1
  264. package/dist/internal/options.js +0 -1
  265. package/dist/internal/package-manager.d.ts +0 -1
  266. package/dist/internal/package-manager.js +0 -1
  267. package/dist/internal/package-version.d.ts +0 -1
  268. package/dist/internal/package-version.js +0 -1
  269. package/dist/internal/paths.d.ts +0 -1
  270. package/dist/internal/paths.js +0 -1
  271. package/dist/internal/realm-slot.d.ts +0 -1
  272. package/dist/internal/realm-slot.js +0 -1
  273. package/dist/internal/recording-modes.d.ts +0 -1
  274. package/dist/internal/recording-modes.js +0 -1
  275. package/dist/internal/redact.d.ts +7 -5
  276. package/dist/internal/redact.js +116 -24
  277. package/dist/internal/regexp.d.ts +0 -1
  278. package/dist/internal/regexp.js +0 -1
  279. package/dist/internal/roles.d.ts +0 -1
  280. package/dist/internal/roles.js +0 -1
  281. package/dist/internal/skip.d.ts +0 -1
  282. package/dist/internal/skip.js +0 -1
  283. package/dist/internal/source.d.ts +0 -1
  284. package/dist/internal/source.js +0 -1
  285. package/dist/internal/standard-schema.d.ts +0 -1
  286. package/dist/internal/standard-schema.js +0 -1
  287. package/dist/internal/suggest.d.ts +0 -1
  288. package/dist/internal/suggest.js +0 -1
  289. package/dist/internal/text.d.ts +8 -1
  290. package/dist/internal/text.js +13 -2
  291. package/dist/internal/time.d.ts +6 -1
  292. package/dist/internal/time.js +25 -14
  293. package/dist/internal/urls.d.ts +9 -6
  294. package/dist/internal/urls.js +19 -11
  295. package/dist/internal/vcs.d.ts +0 -1
  296. package/dist/internal/vcs.js +0 -1
  297. package/dist/internal/zip.d.ts +0 -1
  298. package/dist/internal/zip.js +0 -1
  299. package/dist/locator/engine.d.ts +12 -3
  300. package/dist/locator/engine.js +8 -4
  301. package/dist/locator/expression.d.ts +0 -1
  302. package/dist/locator/expression.js +0 -1
  303. package/dist/locator/screen.d.ts +0 -1
  304. package/dist/locator/screen.js +28 -5
  305. package/dist/mcp/catalog.d.ts +7 -3
  306. package/dist/mcp/catalog.js +8 -9
  307. package/dist/mcp/config.d.ts +0 -1
  308. package/dist/mcp/config.js +0 -1
  309. package/dist/mcp/recording.d.ts +0 -1
  310. package/dist/mcp/recording.js +0 -1
  311. package/dist/mcp/server.d.ts +8 -1
  312. package/dist/mcp/server.js +8 -5
  313. package/dist/mcp/session.d.ts +4 -2
  314. package/dist/mcp/session.js +44 -22
  315. package/dist/mcp/sessions.d.ts +2 -1
  316. package/dist/mcp/sessions.js +5 -2
  317. package/dist/mcp/tools.d.ts +7 -6
  318. package/dist/mcp/tools.js +36 -11
  319. package/dist/mcp/usage.d.ts +61 -0
  320. package/dist/mcp/usage.js +73 -0
  321. package/dist/oauth/callback-server.d.ts +0 -1
  322. package/dist/oauth/callback-server.js +0 -1
  323. package/dist/oauth/chatgpt.d.ts +0 -1
  324. package/dist/oauth/chatgpt.js +3 -24
  325. package/dist/oauth/cli.d.ts +0 -1
  326. package/dist/oauth/cli.js +1 -1
  327. package/dist/oauth/copilot.d.ts +5 -5
  328. package/dist/oauth/copilot.js +80 -8
  329. package/dist/oauth/device-code.d.ts +0 -1
  330. package/dist/oauth/device-code.js +0 -1
  331. package/dist/oauth/errors.d.ts +0 -1
  332. package/dist/oauth/errors.js +0 -1
  333. package/dist/oauth/fetch.d.ts +0 -1
  334. package/dist/oauth/fetch.js +0 -1
  335. package/dist/oauth/grok.d.ts +0 -1
  336. package/dist/oauth/grok.js +2 -2
  337. package/dist/oauth/jwt.d.ts +0 -1
  338. package/dist/oauth/jwt.js +0 -1
  339. package/dist/oauth/login.d.ts +0 -1
  340. package/dist/oauth/login.js +0 -1
  341. package/dist/oauth/models.d.ts +0 -1
  342. package/dist/oauth/models.js +2 -2
  343. package/dist/oauth/opencode-console.d.ts +10 -0
  344. package/dist/oauth/opencode-console.js +133 -0
  345. package/dist/oauth/pkce.d.ts +0 -1
  346. package/dist/oauth/pkce.js +0 -1
  347. package/dist/oauth/providers/github-copilot.d.ts +12 -1
  348. package/dist/oauth/providers/github-copilot.js +80 -19
  349. package/dist/oauth/providers/openai.d.ts +0 -1
  350. package/dist/oauth/providers/openai.js +1 -2
  351. package/dist/oauth/providers/opencode-console.d.ts +31 -0
  352. package/dist/oauth/providers/opencode-console.js +148 -0
  353. package/dist/oauth/providers/xai.d.ts +0 -1
  354. package/dist/oauth/providers/xai.js +0 -1
  355. package/dist/oauth/providers.d.ts +2 -7
  356. package/dist/oauth/providers.js +3 -8
  357. package/dist/oauth/responses.d.ts +9 -0
  358. package/dist/oauth/responses.js +23 -0
  359. package/dist/oauth/sse.d.ts +0 -1
  360. package/dist/oauth/sse.js +0 -1
  361. package/dist/oauth/store.d.ts +0 -1
  362. package/dist/oauth/store.js +0 -1
  363. package/dist/oauth/token-endpoint.d.ts +0 -1
  364. package/dist/oauth/token-endpoint.js +0 -1
  365. package/dist/oauth/types.d.ts +0 -1
  366. package/dist/oauth/types.js +0 -1
  367. package/dist/params.d.ts +0 -1
  368. package/dist/params.js +0 -1
  369. package/dist/report/build.d.ts +26 -1
  370. package/dist/report/build.js +16 -9
  371. package/dist/report/builtin.d.ts +0 -1
  372. package/dist/report/builtin.js +0 -1
  373. package/dist/report/code-frame.d.ts +0 -1
  374. package/dist/report/code-frame.js +0 -1
  375. package/dist/report/debug-steps.d.ts +0 -1
  376. package/dist/report/debug-steps.js +0 -1
  377. package/dist/report/explore-text.d.ts +0 -1
  378. package/dist/report/explore-text.js +0 -1
  379. package/dist/report/failure-text.d.ts +6 -2
  380. package/dist/report/failure-text.js +14 -5
  381. package/dist/report/format.d.ts +10 -6
  382. package/dist/report/format.js +12 -6
  383. package/dist/report/json.d.ts +0 -1
  384. package/dist/report/json.js +0 -1
  385. package/dist/report/junit.d.ts +0 -1
  386. package/dist/report/junit.js +11 -13
  387. package/dist/report/list-explore.d.ts +0 -1
  388. package/dist/report/list-explore.js +0 -1
  389. package/dist/report/list-model.d.ts +0 -1
  390. package/dist/report/list-model.js +0 -1
  391. package/dist/report/list-steps.d.ts +0 -1
  392. package/dist/report/list-steps.js +0 -1
  393. package/dist/report/list.d.ts +1 -1
  394. package/dist/report/list.js +38 -19
  395. package/dist/report/live-window.d.ts +0 -1
  396. package/dist/report/live-window.js +0 -1
  397. package/dist/report/markdown-text.d.ts +0 -1
  398. package/dist/report/markdown-text.js +0 -1
  399. package/dist/report/markdown.d.ts +1 -2
  400. package/dist/report/markdown.js +37 -15
  401. package/dist/report/outcome.d.ts +0 -1
  402. package/dist/report/outcome.js +0 -1
  403. package/dist/report/repeats.d.ts +6 -2
  404. package/dist/report/repeats.js +12 -4
  405. package/dist/report/running-tree.d.ts +0 -1
  406. package/dist/report/running-tree.js +0 -1
  407. package/dist/report/write.d.ts +0 -1
  408. package/dist/report/write.js +0 -1
  409. package/dist/run/app-ports.d.ts +0 -1
  410. package/dist/run/app-ports.js +0 -1
  411. package/dist/run/artifacts.d.ts +18 -1
  412. package/dist/run/artifacts.js +68 -2
  413. package/dist/run/budget.d.ts +0 -1
  414. package/dist/run/budget.js +0 -1
  415. package/dist/run/declared-processes.d.ts +0 -1
  416. package/dist/run/declared-processes.js +0 -1
  417. package/dist/run/events.d.ts +0 -1
  418. package/dist/run/events.js +0 -1
  419. package/dist/run/execute.d.ts +9 -1
  420. package/dist/run/execute.js +55 -29
  421. package/dist/run/extended-fixtures.d.ts +0 -1
  422. package/dist/run/extended-fixtures.js +6 -3
  423. package/dist/run/failure-evidence.d.ts +0 -1
  424. package/dist/run/failure-evidence.js +4 -3
  425. package/dist/run/fixture-recording.d.ts +0 -1
  426. package/dist/run/fixture-recording.js +0 -1
  427. package/dist/run/fixtures.d.ts +0 -1
  428. package/dist/run/fixtures.js +6 -9
  429. package/dist/run/in-process.d.ts +2 -1
  430. package/dist/run/in-process.js +1 -1
  431. package/dist/run/last-run.d.ts +42 -9
  432. package/dist/run/last-run.js +121 -15
  433. package/dist/run/managed-process.d.ts +0 -1
  434. package/dist/run/managed-process.js +0 -1
  435. package/dist/run/output.d.ts +0 -1
  436. package/dist/run/output.js +0 -1
  437. package/dist/run/process-pool.d.ts +0 -1
  438. package/dist/run/process-pool.js +0 -1
  439. package/dist/run/provision.d.ts +0 -1
  440. package/dist/run/provision.js +0 -1
  441. package/dist/run/realm.d.ts +6 -2
  442. package/dist/run/realm.js +21 -8
  443. package/dist/run/records.d.ts +16 -1
  444. package/dist/run/records.js +26 -1
  445. package/dist/run/retry.d.ts +3 -2
  446. package/dist/run/retry.js +4 -3
  447. package/dist/run/runner.d.ts +3 -2
  448. package/dist/run/runner.js +70 -32
  449. package/dist/run/scheduler.d.ts +0 -1
  450. package/dist/run/scheduler.js +0 -1
  451. package/dist/run/secrecy.d.ts +15 -1
  452. package/dist/run/secrecy.js +27 -2
  453. package/dist/run/serial.d.ts +2 -1
  454. package/dist/run/serial.js +8 -6
  455. package/dist/run/sessions.d.ts +0 -1
  456. package/dist/run/sessions.js +0 -1
  457. package/dist/run/standalone.d.ts +0 -1
  458. package/dist/run/standalone.js +3 -3
  459. package/dist/run/steps.d.ts +2 -9
  460. package/dist/run/steps.js +7 -22
  461. package/dist/run/trace-redaction.d.ts +0 -1
  462. package/dist/run/trace-redaction.js +0 -1
  463. package/dist/run/unit-runner.d.ts +0 -1
  464. package/dist/run/unit-runner.js +0 -1
  465. package/dist/run/units.d.ts +0 -1
  466. package/dist/run/units.js +0 -1
  467. package/dist/run/worker/entry.d.ts +0 -1
  468. package/dist/run/worker/entry.js +7 -7
  469. package/dist/run/worker/handle.d.ts +0 -1
  470. package/dist/run/worker/handle.js +0 -1
  471. package/dist/run/worker/protocol.d.ts +2 -1
  472. package/dist/run/worker/protocol.js +0 -1
  473. package/dist/run/worker/session.d.ts +2 -1
  474. package/dist/run/worker/session.js +1 -1
  475. package/dist/run/worker-models.d.ts +0 -1
  476. package/dist/run/worker-models.js +0 -1
  477. package/dist/secrets.d.ts +0 -1
  478. package/dist/secrets.js +0 -1
  479. package/dist/telemetry/checkout.d.ts +0 -1
  480. package/dist/telemetry/checkout.js +0 -1
  481. package/dist/telemetry/environment.d.ts +0 -1
  482. package/dist/telemetry/environment.js +0 -1
  483. package/dist/telemetry/events.d.ts +26 -10
  484. package/dist/telemetry/events.js +108 -13
  485. package/dist/telemetry/failure-kind.d.ts +0 -1
  486. package/dist/telemetry/failure-kind.js +0 -1
  487. package/dist/telemetry/posthog.d.ts +0 -1
  488. package/dist/telemetry/posthog.js +0 -1
  489. package/dist/telemetry/project.d.ts +0 -1
  490. package/dist/telemetry/project.js +0 -1
  491. package/dist/telemetry/store.d.ts +0 -1
  492. package/dist/telemetry/store.js +0 -1
  493. package/dist/telemetry/telemetry.d.ts +19 -8
  494. package/dist/telemetry/telemetry.js +26 -9
  495. package/dist/telemetry/token.d.ts +0 -1
  496. package/dist/telemetry/token.js +0 -1
  497. package/dist/types.d.ts +34 -26
  498. package/dist/types.js +0 -1
  499. package/docs/agents.mdx +6 -3
  500. package/docs/assertions.mdx +94 -0
  501. package/docs/authentication.mdx +3 -1
  502. package/docs/browser.mdx +42 -6
  503. package/docs/cache.mdx +64 -18
  504. package/docs/ci.mdx +11 -7
  505. package/docs/debugging.mdx +6 -3
  506. package/docs/executors.mdx +5 -3
  507. package/docs/github.mdx +12 -4
  508. package/docs/{writing-tests.mdx → goals.mdx} +21 -101
  509. package/docs/index.mdx +4 -4
  510. package/docs/integrations/kernel.mdx +1 -1
  511. package/docs/locators.mdx +64 -0
  512. package/docs/migrate/cypress.mdx +2 -2
  513. package/docs/migrate/maestro.mdx +2 -2
  514. package/docs/migrate/playwright.mdx +22 -16
  515. package/docs/migrate/selenium.mdx +2 -2
  516. package/docs/mobile.mdx +61 -4
  517. package/docs/models.mdx +53 -7
  518. package/docs/physical-devices.mdx +76 -0
  519. package/docs/quickstart.mdx +4 -3
  520. package/docs/reference/app.mdx +1 -1
  521. package/docs/reference/cli.mdx +30 -11
  522. package/docs/reference/config.mdx +25 -7
  523. package/docs/reference/engine.mdx +4 -3
  524. package/docs/reference/environment.mdx +8 -1
  525. package/docs/reference/errors.mdx +5 -5
  526. package/docs/reference/expect.mdx +79 -24
  527. package/docs/reference/mcp.mdx +3 -0
  528. package/docs/reference/mobile.mdx +23 -13
  529. package/docs/reference/reporters.mdx +8 -2
  530. package/docs/reference/screen.mdx +30 -7
  531. package/docs/reference/test.mdx +11 -4
  532. package/docs/reference/web.mdx +131 -23
  533. package/docs/security.mdx +45 -19
  534. package/docs/subscriptions.mdx +97 -9
  535. package/docs/telemetry.mdx +48 -6
  536. package/package.json +18 -4
  537. package/schema/report-v1.schema.json +14 -1
  538. package/skills/e2e/SKILL.md +2 -2
  539. package/skills/e2e/references/agent.md +22 -11
  540. package/skills/e2e/references/debugging.md +4 -4
  541. package/skills/e2e/references/mcp.md +3 -0
  542. package/skills/e2e/references/running.md +13 -8
  543. package/skills/e2e/references/setup.md +42 -15
  544. package/skills/e2e/references/writing-tests.md +43 -15
  545. package/dist/agent/act-validation.d.ts.map +0 -1
  546. package/dist/agent/act-validation.js.map +0 -1
  547. package/dist/agent/act.d.ts.map +0 -1
  548. package/dist/agent/act.js.map +0 -1
  549. package/dist/agent/action-dispatcher.d.ts.map +0 -1
  550. package/dist/agent/action-dispatcher.js.map +0 -1
  551. package/dist/agent/action-names.d.ts.map +0 -1
  552. package/dist/agent/action-names.js.map +0 -1
  553. package/dist/agent/actions.d.ts.map +0 -1
  554. package/dist/agent/actions.js.map +0 -1
  555. package/dist/agent/agent-brand.d.ts.map +0 -1
  556. package/dist/agent/agent-brand.js.map +0 -1
  557. package/dist/agent/ai-sdk.d.ts.map +0 -1
  558. package/dist/agent/ai-sdk.js.map +0 -1
  559. package/dist/agent/call-options.d.ts.map +0 -1
  560. package/dist/agent/call-options.js.map +0 -1
  561. package/dist/agent/default-agent.d.ts.map +0 -1
  562. package/dist/agent/default-agent.js.map +0 -1
  563. package/dist/agent/derived.d.ts.map +0 -1
  564. package/dist/agent/derived.js.map +0 -1
  565. package/dist/agent/error.d.ts.map +0 -1
  566. package/dist/agent/error.js.map +0 -1
  567. package/dist/agent/executor.d.ts.map +0 -1
  568. package/dist/agent/executor.js.map +0 -1
  569. package/dist/agent/index.d.ts.map +0 -1
  570. package/dist/agent/index.js.map +0 -1
  571. package/dist/agent/interactive-step.d.ts.map +0 -1
  572. package/dist/agent/interactive-step.js.map +0 -1
  573. package/dist/agent/invocation.d.ts.map +0 -1
  574. package/dist/agent/invocation.js.map +0 -1
  575. package/dist/agent/ledger.d.ts.map +0 -1
  576. package/dist/agent/ledger.js.map +0 -1
  577. package/dist/agent/loop-guards.d.ts.map +0 -1
  578. package/dist/agent/loop-guards.js.map +0 -1
  579. package/dist/agent/model/adapter.d.ts.map +0 -1
  580. package/dist/agent/model/adapter.js.map +0 -1
  581. package/dist/agent/model/overflow.d.ts.map +0 -1
  582. package/dist/agent/model/overflow.js.map +0 -1
  583. package/dist/agent/model/provider-hints.d.ts.map +0 -1
  584. package/dist/agent/model/provider-hints.js.map +0 -1
  585. package/dist/agent/model/schema.d.ts.map +0 -1
  586. package/dist/agent/model/schema.js.map +0 -1
  587. package/dist/agent/model/sdk.d.ts.map +0 -1
  588. package/dist/agent/model/sdk.js.map +0 -1
  589. package/dist/agent/model/stall.d.ts.map +0 -1
  590. package/dist/agent/model/stall.js.map +0 -1
  591. package/dist/agent/model/tool-choice.d.ts.map +0 -1
  592. package/dist/agent/model/tool-choice.js.map +0 -1
  593. package/dist/agent/observation-budget.d.ts.map +0 -1
  594. package/dist/agent/observation-budget.js.map +0 -1
  595. package/dist/agent/observation-feed.d.ts.map +0 -1
  596. package/dist/agent/observation-feed.js.map +0 -1
  597. package/dist/agent/observation.d.ts.map +0 -1
  598. package/dist/agent/observation.js.map +0 -1
  599. package/dist/agent/operation-queue.d.ts.map +0 -1
  600. package/dist/agent/operation-queue.js.map +0 -1
  601. package/dist/agent/phases.d.ts.map +0 -1
  602. package/dist/agent/phases.js.map +0 -1
  603. package/dist/agent/pixels.d.ts.map +0 -1
  604. package/dist/agent/pixels.js.map +0 -1
  605. package/dist/agent/point-tap.d.ts.map +0 -1
  606. package/dist/agent/point-tap.js.map +0 -1
  607. package/dist/agent/primitives.d.ts.map +0 -1
  608. package/dist/agent/primitives.js.map +0 -1
  609. package/dist/agent/prompts.d.ts.map +0 -1
  610. package/dist/agent/prompts.js.map +0 -1
  611. package/dist/agent/protocol.d.ts.map +0 -1
  612. package/dist/agent/protocol.js.map +0 -1
  613. package/dist/agent/public.d.ts.map +0 -1
  614. package/dist/agent/public.js.map +0 -1
  615. package/dist/agent/reading.d.ts.map +0 -1
  616. package/dist/agent/reading.js.map +0 -1
  617. package/dist/agent/replay.d.ts.map +0 -1
  618. package/dist/agent/replay.js.map +0 -1
  619. package/dist/agent/screen-update.d.ts.map +0 -1
  620. package/dist/agent/screen-update.js.map +0 -1
  621. package/dist/agent/scroll-target.d.ts.map +0 -1
  622. package/dist/agent/scroll-target.js.map +0 -1
  623. package/dist/agent/secrets.d.ts.map +0 -1
  624. package/dist/agent/secrets.js.map +0 -1
  625. package/dist/agent/settle-policy.d.ts.map +0 -1
  626. package/dist/agent/settle-policy.js.map +0 -1
  627. package/dist/agent/step-accounting.d.ts.map +0 -1
  628. package/dist/agent/step-accounting.js.map +0 -1
  629. package/dist/agent/step-cache.d.ts.map +0 -1
  630. package/dist/agent/step-cache.js.map +0 -1
  631. package/dist/agent/tool-loop.d.ts.map +0 -1
  632. package/dist/agent/tool-loop.js.map +0 -1
  633. package/dist/agent/tool-output.d.ts.map +0 -1
  634. package/dist/agent/tool-output.js.map +0 -1
  635. package/dist/agent/tool.d.ts.map +0 -1
  636. package/dist/agent/tool.js.map +0 -1
  637. package/dist/agent/transcript-compaction.d.ts.map +0 -1
  638. package/dist/agent/transcript-compaction.js.map +0 -1
  639. package/dist/agent/upload-paths.d.ts.map +0 -1
  640. package/dist/agent/upload-paths.js.map +0 -1
  641. package/dist/agent/usage.d.ts.map +0 -1
  642. package/dist/agent/usage.js.map +0 -1
  643. package/dist/cache/anchors.d.ts.map +0 -1
  644. package/dist/cache/anchors.js.map +0 -1
  645. package/dist/cache/context.d.ts.map +0 -1
  646. package/dist/cache/context.js.map +0 -1
  647. package/dist/cache/decide.d.ts.map +0 -1
  648. package/dist/cache/decide.js.map +0 -1
  649. package/dist/cache/identity.d.ts.map +0 -1
  650. package/dist/cache/identity.js.map +0 -1
  651. package/dist/cache/recorder.d.ts.map +0 -1
  652. package/dist/cache/recorder.js.map +0 -1
  653. package/dist/cache/relocate.d.ts.map +0 -1
  654. package/dist/cache/relocate.js.map +0 -1
  655. package/dist/cache/route.d.ts.map +0 -1
  656. package/dist/cache/route.js.map +0 -1
  657. package/dist/cache/store.d.ts.map +0 -1
  658. package/dist/cache/store.js.map +0 -1
  659. package/dist/cache/template.d.ts.map +0 -1
  660. package/dist/cache/template.js.map +0 -1
  661. package/dist/cache/trace.d.ts.map +0 -1
  662. package/dist/cache/trace.js.map +0 -1
  663. package/dist/cli/bin.d.ts.map +0 -1
  664. package/dist/cli/bin.js.map +0 -1
  665. package/dist/cli/cache.d.ts.map +0 -1
  666. package/dist/cli/cache.js.map +0 -1
  667. package/dist/cli/docs-url.d.ts.map +0 -1
  668. package/dist/cli/docs-url.js.map +0 -1
  669. package/dist/cli/feedback.d.ts.map +0 -1
  670. package/dist/cli/feedback.js.map +0 -1
  671. package/dist/cli/guide.d.ts.map +0 -1
  672. package/dist/cli/guide.js.map +0 -1
  673. package/dist/cli/index.d.ts.map +0 -1
  674. package/dist/cli/index.js.map +0 -1
  675. package/dist/cli/init/agent-skill.d.ts.map +0 -1
  676. package/dist/cli/init/agent-skill.js.map +0 -1
  677. package/dist/cli/init/engines.d.ts.map +0 -1
  678. package/dist/cli/init/engines.js.map +0 -1
  679. package/dist/cli/init/gateways.d.ts.map +0 -1
  680. package/dist/cli/init/gateways.js.map +0 -1
  681. package/dist/cli/init/mcp-config.d.ts.map +0 -1
  682. package/dist/cli/init/mcp-config.js.map +0 -1
  683. package/dist/cli/init/package.d.ts.map +0 -1
  684. package/dist/cli/init/package.js.map +0 -1
  685. package/dist/cli/init/scaffold.d.ts.map +0 -1
  686. package/dist/cli/init/scaffold.js.map +0 -1
  687. package/dist/cli/init/versions.d.ts.map +0 -1
  688. package/dist/cli/init/versions.js.map +0 -1
  689. package/dist/cli/init.d.ts.map +0 -1
  690. package/dist/cli/init.js.map +0 -1
  691. package/dist/cli/mcp.d.ts.map +0 -1
  692. package/dist/cli/mcp.js.map +0 -1
  693. package/dist/cli/signals.d.ts.map +0 -1
  694. package/dist/cli/signals.js.map +0 -1
  695. package/dist/cli/skill.d.ts.map +0 -1
  696. package/dist/cli/skill.js.map +0 -1
  697. package/dist/cli/telemetry.d.ts.map +0 -1
  698. package/dist/cli/telemetry.js.map +0 -1
  699. package/dist/cli/wordmark.d.ts.map +0 -1
  700. package/dist/cli/wordmark.js.map +0 -1
  701. package/dist/collect/collect.d.ts.map +0 -1
  702. package/dist/collect/collect.js.map +0 -1
  703. package/dist/collect/registry.d.ts.map +0 -1
  704. package/dist/collect/registry.js.map +0 -1
  705. package/dist/collect/select.d.ts.map +0 -1
  706. package/dist/collect/select.js.map +0 -1
  707. package/dist/config/agent.d.ts.map +0 -1
  708. package/dist/config/agent.js.map +0 -1
  709. package/dist/config/app.d.ts.map +0 -1
  710. package/dist/config/app.js.map +0 -1
  711. package/dist/config/command.d.ts.map +0 -1
  712. package/dist/config/command.js.map +0 -1
  713. package/dist/config/diagnose.d.ts.map +0 -1
  714. package/dist/config/diagnose.js.map +0 -1
  715. package/dist/config/esm-hooks.d.ts.map +0 -1
  716. package/dist/config/esm-hooks.js.map +0 -1
  717. package/dist/config/load.d.ts.map +0 -1
  718. package/dist/config/load.js.map +0 -1
  719. package/dist/config/resolve.d.ts.map +0 -1
  720. package/dist/config/resolve.js.map +0 -1
  721. package/dist/config/secrets.d.ts.map +0 -1
  722. package/dist/config/secrets.js.map +0 -1
  723. package/dist/config/targets.d.ts.map +0 -1
  724. package/dist/config/targets.js.map +0 -1
  725. package/dist/config/validate.d.ts.map +0 -1
  726. package/dist/config/validate.js.map +0 -1
  727. package/dist/engine/contract.d.ts.map +0 -1
  728. package/dist/engine/contract.js.map +0 -1
  729. package/dist/engine/index.d.ts.map +0 -1
  730. package/dist/engine/index.js.map +0 -1
  731. package/dist/engine/manifest.d.ts.map +0 -1
  732. package/dist/engine/manifest.js.map +0 -1
  733. package/dist/engine/recording.d.ts.map +0 -1
  734. package/dist/engine/recording.js.map +0 -1
  735. package/dist/engine/resolve.d.ts.map +0 -1
  736. package/dist/engine/resolve.js.map +0 -1
  737. package/dist/engine/session.d.ts.map +0 -1
  738. package/dist/engine/session.js.map +0 -1
  739. package/dist/engine/surface.d.ts.map +0 -1
  740. package/dist/engine/surface.js.map +0 -1
  741. package/dist/engine/timing.d.ts.map +0 -1
  742. package/dist/engine/timing.js.map +0 -1
  743. package/dist/expect/async.d.ts.map +0 -1
  744. package/dist/expect/async.js.map +0 -1
  745. package/dist/expect/attempt.d.ts.map +0 -1
  746. package/dist/expect/attempt.js.map +0 -1
  747. package/dist/expect/index.d.ts.map +0 -1
  748. package/dist/expect/index.js.map +0 -1
  749. package/dist/expect/poll.d.ts.map +0 -1
  750. package/dist/expect/poll.js.map +0 -1
  751. package/dist/expect/soft.d.ts.map +0 -1
  752. package/dist/expect/soft.js.map +0 -1
  753. package/dist/expect/values.d.ts.map +0 -1
  754. package/dist/expect/values.js.map +0 -1
  755. package/dist/explore/body.d.ts.map +0 -1
  756. package/dist/explore/body.js.map +0 -1
  757. package/dist/explore/executor.d.ts.map +0 -1
  758. package/dist/explore/executor.js.map +0 -1
  759. package/dist/explore/index.d.ts.map +0 -1
  760. package/dist/explore/index.js.map +0 -1
  761. package/dist/explore/plan.d.ts.map +0 -1
  762. package/dist/explore/plan.js.map +0 -1
  763. package/dist/explore/progress.d.ts.map +0 -1
  764. package/dist/explore/progress.js.map +0 -1
  765. package/dist/explore/state.d.ts.map +0 -1
  766. package/dist/explore/state.js.map +0 -1
  767. package/dist/index.d.ts.map +0 -1
  768. package/dist/index.js.map +0 -1
  769. package/dist/internal/ai-trace.d.ts.map +0 -1
  770. package/dist/internal/ai-trace.js.map +0 -1
  771. package/dist/internal/atomic-write.d.ts.map +0 -1
  772. package/dist/internal/atomic-write.js.map +0 -1
  773. package/dist/internal/brands.d.ts.map +0 -1
  774. package/dist/internal/brands.js.map +0 -1
  775. package/dist/internal/debug.d.ts.map +0 -1
  776. package/dist/internal/debug.js.map +0 -1
  777. package/dist/internal/env.d.ts.map +0 -1
  778. package/dist/internal/env.js.map +0 -1
  779. package/dist/internal/errors.d.ts.map +0 -1
  780. package/dist/internal/errors.js.map +0 -1
  781. package/dist/internal/geometry.d.ts.map +0 -1
  782. package/dist/internal/geometry.js.map +0 -1
  783. package/dist/internal/git.d.ts.map +0 -1
  784. package/dist/internal/git.js.map +0 -1
  785. package/dist/internal/globs.d.ts.map +0 -1
  786. package/dist/internal/globs.js.map +0 -1
  787. package/dist/internal/ids.d.ts.map +0 -1
  788. package/dist/internal/ids.js.map +0 -1
  789. package/dist/internal/json-value.d.ts.map +0 -1
  790. package/dist/internal/json-value.js.map +0 -1
  791. package/dist/internal/keys.d.ts.map +0 -1
  792. package/dist/internal/keys.js.map +0 -1
  793. package/dist/internal/node-version.d.ts.map +0 -1
  794. package/dist/internal/node-version.js.map +0 -1
  795. package/dist/internal/objects.d.ts.map +0 -1
  796. package/dist/internal/objects.js.map +0 -1
  797. package/dist/internal/options.d.ts.map +0 -1
  798. package/dist/internal/options.js.map +0 -1
  799. package/dist/internal/package-manager.d.ts.map +0 -1
  800. package/dist/internal/package-manager.js.map +0 -1
  801. package/dist/internal/package-version.d.ts.map +0 -1
  802. package/dist/internal/package-version.js.map +0 -1
  803. package/dist/internal/paths.d.ts.map +0 -1
  804. package/dist/internal/paths.js.map +0 -1
  805. package/dist/internal/realm-slot.d.ts.map +0 -1
  806. package/dist/internal/realm-slot.js.map +0 -1
  807. package/dist/internal/recording-modes.d.ts.map +0 -1
  808. package/dist/internal/recording-modes.js.map +0 -1
  809. package/dist/internal/redact.d.ts.map +0 -1
  810. package/dist/internal/redact.js.map +0 -1
  811. package/dist/internal/regexp.d.ts.map +0 -1
  812. package/dist/internal/regexp.js.map +0 -1
  813. package/dist/internal/roles.d.ts.map +0 -1
  814. package/dist/internal/roles.js.map +0 -1
  815. package/dist/internal/skip.d.ts.map +0 -1
  816. package/dist/internal/skip.js.map +0 -1
  817. package/dist/internal/source.d.ts.map +0 -1
  818. package/dist/internal/source.js.map +0 -1
  819. package/dist/internal/standard-schema.d.ts.map +0 -1
  820. package/dist/internal/standard-schema.js.map +0 -1
  821. package/dist/internal/suggest.d.ts.map +0 -1
  822. package/dist/internal/suggest.js.map +0 -1
  823. package/dist/internal/text.d.ts.map +0 -1
  824. package/dist/internal/text.js.map +0 -1
  825. package/dist/internal/time.d.ts.map +0 -1
  826. package/dist/internal/time.js.map +0 -1
  827. package/dist/internal/urls.d.ts.map +0 -1
  828. package/dist/internal/urls.js.map +0 -1
  829. package/dist/internal/vcs.d.ts.map +0 -1
  830. package/dist/internal/vcs.js.map +0 -1
  831. package/dist/internal/zip.d.ts.map +0 -1
  832. package/dist/internal/zip.js.map +0 -1
  833. package/dist/locator/engine.d.ts.map +0 -1
  834. package/dist/locator/engine.js.map +0 -1
  835. package/dist/locator/expression.d.ts.map +0 -1
  836. package/dist/locator/expression.js.map +0 -1
  837. package/dist/locator/screen.d.ts.map +0 -1
  838. package/dist/locator/screen.js.map +0 -1
  839. package/dist/mcp/catalog.d.ts.map +0 -1
  840. package/dist/mcp/catalog.js.map +0 -1
  841. package/dist/mcp/config.d.ts.map +0 -1
  842. package/dist/mcp/config.js.map +0 -1
  843. package/dist/mcp/recording.d.ts.map +0 -1
  844. package/dist/mcp/recording.js.map +0 -1
  845. package/dist/mcp/server.d.ts.map +0 -1
  846. package/dist/mcp/server.js.map +0 -1
  847. package/dist/mcp/session.d.ts.map +0 -1
  848. package/dist/mcp/session.js.map +0 -1
  849. package/dist/mcp/sessions.d.ts.map +0 -1
  850. package/dist/mcp/sessions.js.map +0 -1
  851. package/dist/mcp/tools.d.ts.map +0 -1
  852. package/dist/mcp/tools.js.map +0 -1
  853. package/dist/oauth/callback-server.d.ts.map +0 -1
  854. package/dist/oauth/callback-server.js.map +0 -1
  855. package/dist/oauth/chatgpt.d.ts.map +0 -1
  856. package/dist/oauth/chatgpt.js.map +0 -1
  857. package/dist/oauth/cli.d.ts.map +0 -1
  858. package/dist/oauth/cli.js.map +0 -1
  859. package/dist/oauth/copilot.d.ts.map +0 -1
  860. package/dist/oauth/copilot.js.map +0 -1
  861. package/dist/oauth/device-code.d.ts.map +0 -1
  862. package/dist/oauth/device-code.js.map +0 -1
  863. package/dist/oauth/errors.d.ts.map +0 -1
  864. package/dist/oauth/errors.js.map +0 -1
  865. package/dist/oauth/fetch.d.ts.map +0 -1
  866. package/dist/oauth/fetch.js.map +0 -1
  867. package/dist/oauth/grok.d.ts.map +0 -1
  868. package/dist/oauth/grok.js.map +0 -1
  869. package/dist/oauth/jwt.d.ts.map +0 -1
  870. package/dist/oauth/jwt.js.map +0 -1
  871. package/dist/oauth/login.d.ts.map +0 -1
  872. package/dist/oauth/login.js.map +0 -1
  873. package/dist/oauth/models.d.ts.map +0 -1
  874. package/dist/oauth/models.js.map +0 -1
  875. package/dist/oauth/pkce.d.ts.map +0 -1
  876. package/dist/oauth/pkce.js.map +0 -1
  877. package/dist/oauth/providers/github-copilot.d.ts.map +0 -1
  878. package/dist/oauth/providers/github-copilot.js.map +0 -1
  879. package/dist/oauth/providers/openai.d.ts.map +0 -1
  880. package/dist/oauth/providers/openai.js.map +0 -1
  881. package/dist/oauth/providers/xai.d.ts.map +0 -1
  882. package/dist/oauth/providers/xai.js.map +0 -1
  883. package/dist/oauth/providers.d.ts.map +0 -1
  884. package/dist/oauth/providers.js.map +0 -1
  885. package/dist/oauth/sse.d.ts.map +0 -1
  886. package/dist/oauth/sse.js.map +0 -1
  887. package/dist/oauth/store.d.ts.map +0 -1
  888. package/dist/oauth/store.js.map +0 -1
  889. package/dist/oauth/token-endpoint.d.ts.map +0 -1
  890. package/dist/oauth/token-endpoint.js.map +0 -1
  891. package/dist/oauth/types.d.ts.map +0 -1
  892. package/dist/oauth/types.js.map +0 -1
  893. package/dist/params.d.ts.map +0 -1
  894. package/dist/params.js.map +0 -1
  895. package/dist/report/build.d.ts.map +0 -1
  896. package/dist/report/build.js.map +0 -1
  897. package/dist/report/builtin.d.ts.map +0 -1
  898. package/dist/report/builtin.js.map +0 -1
  899. package/dist/report/code-frame.d.ts.map +0 -1
  900. package/dist/report/code-frame.js.map +0 -1
  901. package/dist/report/debug-steps.d.ts.map +0 -1
  902. package/dist/report/debug-steps.js.map +0 -1
  903. package/dist/report/explore-text.d.ts.map +0 -1
  904. package/dist/report/explore-text.js.map +0 -1
  905. package/dist/report/failure-text.d.ts.map +0 -1
  906. package/dist/report/failure-text.js.map +0 -1
  907. package/dist/report/format.d.ts.map +0 -1
  908. package/dist/report/format.js.map +0 -1
  909. package/dist/report/json.d.ts.map +0 -1
  910. package/dist/report/json.js.map +0 -1
  911. package/dist/report/junit.d.ts.map +0 -1
  912. package/dist/report/junit.js.map +0 -1
  913. package/dist/report/list-explore.d.ts.map +0 -1
  914. package/dist/report/list-explore.js.map +0 -1
  915. package/dist/report/list-model.d.ts.map +0 -1
  916. package/dist/report/list-model.js.map +0 -1
  917. package/dist/report/list-steps.d.ts.map +0 -1
  918. package/dist/report/list-steps.js.map +0 -1
  919. package/dist/report/list.d.ts.map +0 -1
  920. package/dist/report/list.js.map +0 -1
  921. package/dist/report/live-window.d.ts.map +0 -1
  922. package/dist/report/live-window.js.map +0 -1
  923. package/dist/report/markdown-text.d.ts.map +0 -1
  924. package/dist/report/markdown-text.js.map +0 -1
  925. package/dist/report/markdown.d.ts.map +0 -1
  926. package/dist/report/markdown.js.map +0 -1
  927. package/dist/report/outcome.d.ts.map +0 -1
  928. package/dist/report/outcome.js.map +0 -1
  929. package/dist/report/repeats.d.ts.map +0 -1
  930. package/dist/report/repeats.js.map +0 -1
  931. package/dist/report/running-tree.d.ts.map +0 -1
  932. package/dist/report/running-tree.js.map +0 -1
  933. package/dist/report/write.d.ts.map +0 -1
  934. package/dist/report/write.js.map +0 -1
  935. package/dist/run/app-ports.d.ts.map +0 -1
  936. package/dist/run/app-ports.js.map +0 -1
  937. package/dist/run/artifacts.d.ts.map +0 -1
  938. package/dist/run/artifacts.js.map +0 -1
  939. package/dist/run/budget.d.ts.map +0 -1
  940. package/dist/run/budget.js.map +0 -1
  941. package/dist/run/declared-processes.d.ts.map +0 -1
  942. package/dist/run/declared-processes.js.map +0 -1
  943. package/dist/run/events.d.ts.map +0 -1
  944. package/dist/run/events.js.map +0 -1
  945. package/dist/run/execute.d.ts.map +0 -1
  946. package/dist/run/execute.js.map +0 -1
  947. package/dist/run/extended-fixtures.d.ts.map +0 -1
  948. package/dist/run/extended-fixtures.js.map +0 -1
  949. package/dist/run/failure-evidence.d.ts.map +0 -1
  950. package/dist/run/failure-evidence.js.map +0 -1
  951. package/dist/run/fixture-recording.d.ts.map +0 -1
  952. package/dist/run/fixture-recording.js.map +0 -1
  953. package/dist/run/fixtures.d.ts.map +0 -1
  954. package/dist/run/fixtures.js.map +0 -1
  955. package/dist/run/in-process.d.ts.map +0 -1
  956. package/dist/run/in-process.js.map +0 -1
  957. package/dist/run/last-run.d.ts.map +0 -1
  958. package/dist/run/last-run.js.map +0 -1
  959. package/dist/run/managed-process.d.ts.map +0 -1
  960. package/dist/run/managed-process.js.map +0 -1
  961. package/dist/run/output.d.ts.map +0 -1
  962. package/dist/run/output.js.map +0 -1
  963. package/dist/run/process-pool.d.ts.map +0 -1
  964. package/dist/run/process-pool.js.map +0 -1
  965. package/dist/run/provision.d.ts.map +0 -1
  966. package/dist/run/provision.js.map +0 -1
  967. package/dist/run/realm.d.ts.map +0 -1
  968. package/dist/run/realm.js.map +0 -1
  969. package/dist/run/records.d.ts.map +0 -1
  970. package/dist/run/records.js.map +0 -1
  971. package/dist/run/retry.d.ts.map +0 -1
  972. package/dist/run/retry.js.map +0 -1
  973. package/dist/run/runner.d.ts.map +0 -1
  974. package/dist/run/runner.js.map +0 -1
  975. package/dist/run/scheduler.d.ts.map +0 -1
  976. package/dist/run/scheduler.js.map +0 -1
  977. package/dist/run/secrecy.d.ts.map +0 -1
  978. package/dist/run/secrecy.js.map +0 -1
  979. package/dist/run/serial.d.ts.map +0 -1
  980. package/dist/run/serial.js.map +0 -1
  981. package/dist/run/sessions.d.ts.map +0 -1
  982. package/dist/run/sessions.js.map +0 -1
  983. package/dist/run/standalone.d.ts.map +0 -1
  984. package/dist/run/standalone.js.map +0 -1
  985. package/dist/run/steps.d.ts.map +0 -1
  986. package/dist/run/steps.js.map +0 -1
  987. package/dist/run/trace-redaction.d.ts.map +0 -1
  988. package/dist/run/trace-redaction.js.map +0 -1
  989. package/dist/run/unit-runner.d.ts.map +0 -1
  990. package/dist/run/unit-runner.js.map +0 -1
  991. package/dist/run/units.d.ts.map +0 -1
  992. package/dist/run/units.js.map +0 -1
  993. package/dist/run/worker/entry.d.ts.map +0 -1
  994. package/dist/run/worker/entry.js.map +0 -1
  995. package/dist/run/worker/handle.d.ts.map +0 -1
  996. package/dist/run/worker/handle.js.map +0 -1
  997. package/dist/run/worker/protocol.d.ts.map +0 -1
  998. package/dist/run/worker/protocol.js.map +0 -1
  999. package/dist/run/worker/session.d.ts.map +0 -1
  1000. package/dist/run/worker/session.js.map +0 -1
  1001. package/dist/run/worker-models.d.ts.map +0 -1
  1002. package/dist/run/worker-models.js.map +0 -1
  1003. package/dist/secrets.d.ts.map +0 -1
  1004. package/dist/secrets.js.map +0 -1
  1005. package/dist/telemetry/checkout.d.ts.map +0 -1
  1006. package/dist/telemetry/checkout.js.map +0 -1
  1007. package/dist/telemetry/environment.d.ts.map +0 -1
  1008. package/dist/telemetry/environment.js.map +0 -1
  1009. package/dist/telemetry/events.d.ts.map +0 -1
  1010. package/dist/telemetry/events.js.map +0 -1
  1011. package/dist/telemetry/failure-kind.d.ts.map +0 -1
  1012. package/dist/telemetry/failure-kind.js.map +0 -1
  1013. package/dist/telemetry/posthog.d.ts.map +0 -1
  1014. package/dist/telemetry/posthog.js.map +0 -1
  1015. package/dist/telemetry/project.d.ts.map +0 -1
  1016. package/dist/telemetry/project.js.map +0 -1
  1017. package/dist/telemetry/store.d.ts.map +0 -1
  1018. package/dist/telemetry/store.js.map +0 -1
  1019. package/dist/telemetry/telemetry.d.ts.map +0 -1
  1020. package/dist/telemetry/telemetry.js.map +0 -1
  1021. package/dist/telemetry/token.d.ts.map +0 -1
  1022. package/dist/telemetry/token.js.map +0 -1
  1023. package/dist/types.d.ts.map +0 -1
  1024. package/dist/types.js.map +0 -1
@@ -165,4 +165,3 @@ export async function loadConfigModule(configPath, options = {}) {
165
165
  }
166
166
  return defaultExport;
167
167
  }
168
- //# sourceMappingURL=load.js.map
@@ -34,6 +34,7 @@ export interface ResolvedConfig {
34
34
  readonly assertionTimeout: number;
35
35
  readonly cleanupTimeout: number;
36
36
  readonly retries: number;
37
+ readonly failOnSkippedFailure: boolean;
37
38
  readonly workers: number;
38
39
  /** Host store every produced artifact is handed to; undefined keeps files local only. */
39
40
  readonly artifactStore: ArtifactStore | undefined;
@@ -130,4 +131,3 @@ export declare function resolveConfig(raw: E2EConfig, options: {
130
131
  * because the ports never enter them.
131
132
  */
132
133
  export declare function assignPorts(config: ResolvedConfig, ports: PortAssignments): ResolvedConfig;
133
- //# sourceMappingURL=resolve.d.ts.map
@@ -25,6 +25,7 @@ const TOP_LEVEL_KEYS = new Set([
25
25
  'assertionTimeout',
26
26
  'cleanupTimeout',
27
27
  'retries',
28
+ 'failOnSkippedFailure',
28
29
  'workers',
29
30
  'artifacts',
30
31
  'output',
@@ -111,6 +112,10 @@ export function resolveConfig(raw, options) {
111
112
  const workers = boundedInt(cli.workers, '--workers', 1, 1024) ??
112
113
  boundedInt(raw.workers, 'workers', 1, 1024) ??
113
114
  (ci ? 1 : Math.max(1, Math.floor(os.availableParallelism() / 2)));
115
+ const failOnSkippedFailure = raw.failOnSkippedFailure === undefined ? false : raw.failOnSkippedFailure;
116
+ if (typeof failOnSkippedFailure !== 'boolean') {
117
+ throw new ConfigurationError('INVALID_CONFIG', 'failOnSkippedFailure must be a boolean');
118
+ }
114
119
  const artifactStore = resolveArtifactStore(raw);
115
120
  const { reporters, customReporters } = resolveReporters(raw, cli);
116
121
  const projectId = resolveProjectId(raw.projectId, options.projectRoot);
@@ -134,6 +139,7 @@ export function resolveConfig(raw, options) {
134
139
  assertionTimeout,
135
140
  cleanupTimeout,
136
141
  retries,
142
+ failOnSkippedFailure,
137
143
  workers,
138
144
  artifactStore,
139
145
  output,
@@ -533,6 +539,8 @@ function resolveSecrets(raw, env) {
533
539
  const credentials = new Map();
534
540
  const secrets = new Map();
535
541
  const allSecrets = new Map();
542
+ checkEnvNameCollisions('E2E_USER', 'credentials', Object.keys(raw.credentials ?? {}));
543
+ checkEnvNameCollisions('E2E_SECRET', 'secrets', Object.keys(raw.secrets ?? {}));
536
544
  for (const [name, credential] of Object.entries(raw.credentials ?? {})) {
537
545
  const prefix = envName('E2E_USER', name);
538
546
  const username = env[`${prefix}_USERNAME`] ?? credential.username;
@@ -561,6 +569,29 @@ function resolveSecrets(raw, env) {
561
569
  }
562
570
  return { credentials, secrets, allSecrets };
563
571
  }
572
+ /**
573
+ * Two entries of one namespace whose names map to the same override variable
574
+ * (`api-key` and `api_key` both read `E2E_SECRET_API_KEY`) would both take one
575
+ * rotated value, so the config load refuses them, whether or not the variable
576
+ * is set. The message names the entries and the variable, never a value.
577
+ */
578
+ function checkEnvNameCollisions(prefix, namespace, names) {
579
+ const byEnvName = new Map();
580
+ for (const name of names) {
581
+ const variable = envName(prefix, name);
582
+ byEnvName.set(variable, [...(byEnvName.get(variable) ?? []), name]);
583
+ }
584
+ for (const [variable, group] of byEnvName) {
585
+ if (group.length < 2)
586
+ continue;
587
+ const quoted = group.map((name) => `"${name}"`);
588
+ const entries = `${quoted.slice(0, -1).join(', ')} and ${quoted.at(-1)}`;
589
+ const variables = prefix === 'E2E_USER'
590
+ ? `the override variables ${variable}_USERNAME and ${variable}_PASSWORD`
591
+ : `the override variable ${variable}`;
592
+ throw new ConfigurationError('INVALID_CONFIG', `${namespace} ${entries} share ${variables}, so one value set there would replace all of them; rename all but one`);
593
+ }
594
+ }
564
595
  /**
565
596
  * Every secret an engine's options hold (a `secrets.get()` the config
566
597
  * evaluated before any run existed) names a configured secret, so a typo
@@ -643,9 +674,10 @@ function computeConfigDigest(raw, projectId, targets) {
643
674
  // reporter object changes nothing about what a run records, so it never
644
675
  // enters the digest either; the built-in ids digest as they always have,
645
676
  // so adding a reporter to a config leaves its cache valid.
677
+ // `failOnSkippedFailure` decides only the exit code, never what runs.
646
678
  // `targets` digest by declaration below and never enter the clone: an
647
679
  // engine holds `secrets.get()` handles, which refuse to serialize.
648
- const { artifacts: _artifacts, output: _output, trace: _trace, video: _video, targets: _targets, credentials: _credentials, secrets: _secrets, agents, cache, reporters, ...plain } = raw;
680
+ const { failOnSkippedFailure: _failOnSkippedFailure, artifacts: _artifacts, output: _output, trace: _trace, video: _video, targets: _targets, credentials: _credentials, secrets: _secrets, agents, cache, reporters, ...plain } = raw;
649
681
  const sanitized = {
650
682
  ...structuredCloneJsonSafe(plain),
651
683
  ...(reporters === undefined
@@ -716,4 +748,3 @@ function structuredCloneJsonSafe(value) {
716
748
  return isModelInstance(item) ? modelIdentity(item) : item;
717
749
  }) ?? 'null');
718
750
  }
719
- //# sourceMappingURL=resolve.js.map
@@ -94,4 +94,3 @@ export declare function isSecretValue(value: unknown): value is string | SecretP
94
94
  export declare function secretValueProblem(value: unknown): string;
95
95
  /** `E2E_USER_ADMIN`, `E2E_SECRET_STRIPE_KEY`: the name uppercased, everything outside A-Z0-9 as `_`. */
96
96
  export declare function envName(prefix: 'E2E_USER' | 'E2E_SECRET', name: string): string;
97
- //# sourceMappingURL=secrets.d.ts.map
@@ -45,4 +45,3 @@ export function secretValueProblem(value) {
45
45
  export function envName(prefix, name) {
46
46
  return `${prefix}_${name.toUpperCase().replaceAll(/[^A-Z0-9]/g, '_')}`;
47
47
  }
48
- //# sourceMappingURL=secrets.js.map
@@ -78,4 +78,3 @@ export declare function digestTargets(targets: readonly ResolvedTarget[]): {
78
78
  capabilities: import("../engine/index.ts").EngineCapability[];
79
79
  };
80
80
  }[];
81
- //# sourceMappingURL=targets.d.ts.map
@@ -117,4 +117,3 @@ function resolvePlatform(target, where) {
117
117
  }
118
118
  return platform;
119
119
  }
120
- //# sourceMappingURL=targets.js.map
@@ -11,4 +11,3 @@ export declare function describeValue(value: unknown): string;
11
11
  export declare function boundedInt(value: number | undefined, label: string, min: number, max: number): number | undefined;
12
12
  /** An absolute http(s) URL, or undefined when the value is absent. */
13
13
  export declare function httpUrl(value: string | undefined, label: string): string | undefined;
14
- //# sourceMappingURL=validate.d.ts.map
@@ -54,4 +54,3 @@ export function httpUrl(value, label) {
54
54
  }
55
55
  return value;
56
56
  }
57
- //# sourceMappingURL=validate.js.map
@@ -370,4 +370,3 @@ export declare class EngineError extends Error {
370
370
  cause?: unknown;
371
371
  });
372
372
  }
373
- //# sourceMappingURL=contract.d.ts.map
@@ -165,4 +165,3 @@ export class EngineError extends Error {
165
165
  this.retryable = options.retryable;
166
166
  }
167
167
  }
168
- //# sourceMappingURL=contract.js.map
@@ -22,7 +22,7 @@
22
22
  */
23
23
  import { engineBrand } from '../internal/brands.ts';
24
24
  export { ConfigurationError, InfrastructureError, TestError } from '../internal/errors.ts';
25
- export { rejectUnknownKeys } from '../internal/options.ts';
25
+ export { rejectUnknownKeys, rejectUnknownOptions } from '../internal/options.ts';
26
26
  export { validateJsonValue, type JsonValueRules } from '../internal/json-value.ts';
27
27
  export { describePattern, matchesText, toTextPattern } from '../internal/text.ts';
28
28
  export { resolveExpression, type ResolveExpressionOptions } from './resolve.ts';
@@ -147,8 +147,8 @@ export interface EngineFixtureContext {
147
147
  /**
148
148
  * Resolves a navigation target against the base URL. Throws
149
149
  * `APP_URL_REQUIRED` when the target declares no URL and `POLICY_DENIED`
150
- * for a `file:`, `data:`, or `javascript:` scheme, so a fixture never
151
- * re-implements the rule the harness owns.
150
+ * for any scheme but `http:` and `https:` (`about:blank` aside), so a
151
+ * fixture never re-implements the rule the harness owns.
152
152
  */
153
153
  resolveUrl(url: string): string;
154
154
  };
@@ -711,4 +711,3 @@ export interface EngineHandle extends Engine {
711
711
  readonly capabilities: ReadonlySet<EngineCapability>;
712
712
  }
713
713
  export { defineEngine, isEngineHandle } from './manifest.ts';
714
- //# sourceMappingURL=index.d.ts.map
@@ -24,10 +24,11 @@ import { engineBrand } from '../internal/brands.js';
24
24
  // Semantics the spec requires every engine and contributed fixture to
25
25
  // reproduce exactly, exported so an engine never carries its own copy: the
26
26
  // runner error taxonomy, text-pattern matching, locator resolution over a
27
- // semantic tree, URL matching, assertion polling, and the JSON-value rules
28
- // for data a fixture returns, and the unknown-key check config options get.
27
+ // semantic tree, URL matching, assertion polling, option-bag validation, the
28
+ // JSON-value rules for data a fixture returns, and the unknown-key check
29
+ // config options get.
29
30
  export { ConfigurationError, InfrastructureError, TestError } from '../internal/errors.js';
30
- export { rejectUnknownKeys } from '../internal/options.js';
31
+ export { rejectUnknownKeys, rejectUnknownOptions } from '../internal/options.js';
31
32
  export { validateJsonValue } from '../internal/json-value.js';
32
33
  export { describePattern, matchesText, toTextPattern } from '../internal/text.js';
33
34
  export { resolveExpression } from './resolve.js';
@@ -39,4 +40,3 @@ export { obj } from '../internal/objects.js';
39
40
  export { ENGINE_ERROR_CODES, ENGINE_SPI_VERSION, EngineError, KEY_MODIFIERS, KEY_NAMES, LOCATOR_ACTION_KINDS, OBSERVED_NAME_LIMIT, OBSERVED_TEXT_LIMIT, POINTER_ACTION_KINDS, RETRYABLE_ENGINE_ERROR_CODES, parseKey, } from './contract.js';
40
41
  export { isSecret } from '../secrets.js';
41
42
  export { defineEngine, isEngineHandle } from './manifest.js';
42
- //# sourceMappingURL=index.js.map
@@ -15,4 +15,3 @@ import type { Engine, EngineHandle } from './index.ts';
15
15
  export declare function defineEngine(spec: Engine): EngineHandle;
16
16
  /** True for a defineEngine-branded handle, across realms. */
17
17
  export declare function isEngineHandle(value: unknown): value is EngineHandle;
18
- //# sourceMappingURL=manifest.d.ts.map
@@ -290,4 +290,3 @@ export function isEngineHandle(value) {
290
290
  value !== null &&
291
291
  value[engineBrand] === true);
292
292
  }
293
- //# sourceMappingURL=manifest.js.map
@@ -75,4 +75,3 @@ export declare function stopProviderRecording(recording: ProviderRecording, targ
75
75
  * undefined for anything else.
76
76
  */
77
77
  export declare function hostedVideoUrl(url: unknown): string | undefined;
78
- //# sourceMappingURL=recording.d.ts.map
@@ -94,4 +94,3 @@ export function hostedVideoUrl(url) {
94
94
  return undefined;
95
95
  }
96
96
  }
97
- //# sourceMappingURL=recording.js.map
@@ -34,4 +34,3 @@ export interface ResolveExpressionOptions {
34
34
  * `frame` is `FRAME_NOT_FOUND`: a semantic tree has no nested documents.
35
35
  */
36
36
  export declare function resolveExpression(expression: LocatorExpression, nodes: readonly SemanticNode[], options?: ResolveExpressionOptions): SemanticNode[];
37
- //# sourceMappingURL=resolve.d.ts.map
@@ -162,4 +162,3 @@ function matchesQuery(node, query) {
162
162
  return node.testId !== undefined && matchesText(node.testId, query.value);
163
163
  }
164
164
  }
165
- //# sourceMappingURL=resolve.js.map
@@ -22,4 +22,3 @@ export interface EngineSessionOptions {
22
22
  * minted per adapter, so refs can never leak across attempts.
23
23
  */
24
24
  export declare function createEngineSession(options: EngineSessionOptions): TargetSession;
25
- //# sourceMappingURL=session.d.ts.map
@@ -305,4 +305,3 @@ export function createEngineSession(options) {
305
305
  };
306
306
  return session;
307
307
  }
308
- //# sourceMappingURL=session.js.map
@@ -121,4 +121,3 @@ export interface TargetSession {
121
121
  /** Ends the attempt's isolation within the operation's budget. Idempotent. */
122
122
  close(operation: OperationContext): Promise<void>;
123
123
  }
124
- //# sourceMappingURL=surface.d.ts.map
@@ -8,4 +8,3 @@
8
8
  * Re-exports the contract vocabulary so internal modules import one path.
9
9
  */
10
10
  export { EngineError } from './contract.js';
11
- //# sourceMappingURL=surface.js.map
@@ -1,3 +1,2 @@
1
1
  /** Checks cancellation before dispatching a thunk, then abandons the wait on abort. */
2
2
  export declare function raceAbort<T>(work: Promise<T> | (() => Promise<T>), signal: AbortSignal, label: string): Promise<T>;
3
- //# sourceMappingURL=timing.d.ts.map
@@ -5,4 +5,3 @@ import { EngineError } from './contract.js';
5
5
  export function raceAbort(work, signal, label) {
6
6
  return withAbort(work, signal, () => new EngineError('CANCELLED', `${label} cancelled`, { retryable: false }));
7
7
  }
8
- //# sourceMappingURL=timing.js.map
@@ -2,4 +2,3 @@
2
2
  import type { LocatorInternals } from '../locator/screen.ts';
3
3
  import type { AsyncExpectation } from '../types.ts';
4
4
  export declare function createAsyncExpectation(internals: LocatorInternals): AsyncExpectation;
5
- //# sourceMappingURL=async.d.ts.map
@@ -1,14 +1,25 @@
1
1
  /** Runner-owned polling locator assertions. */
2
2
  import { TestError } from '../internal/errors.js';
3
- import { isTextMatch, normalizeText, compareText, matchesText, toTextPattern, describePattern, } from '../internal/text.js';
3
+ import { rejectUnknownOptions } from '../internal/options.js';
4
+ import { isTextMatch, normalizeText, compareText, toTextPattern, describePattern, withIgnoreCase, } from '../internal/text.js';
4
5
  import { isValueControl } from '../internal/roles.js';
5
6
  import { Deadline, pollCondition } from '../internal/time.js';
6
7
  import { attributeOf, denySecureRead, isNodeVisible } from '../locator/engine.js';
7
8
  import { describeExpression } from '../locator/expression.js';
8
9
  const STATE_MATCHERS = {
9
- toBeEnabled: { key: 'disabled', expected: false, describeExpected: 'enabled' },
10
+ toBeEnabled: {
11
+ key: 'disabled',
12
+ expected: false,
13
+ describeExpected: 'enabled',
14
+ flag: { option: 'enabled', describeExpected: 'disabled' },
15
+ },
10
16
  toBeDisabled: { key: 'disabled', expected: true, describeExpected: 'disabled' },
11
- toBeChecked: { key: 'checked', expected: true, describeExpected: 'checked' },
17
+ toBeChecked: {
18
+ key: 'checked',
19
+ expected: true,
20
+ describeExpected: 'checked',
21
+ flag: { option: 'checked', describeExpected: 'unchecked' },
22
+ },
12
23
  toBeSelected: { key: 'selected', expected: true, describeExpected: 'selected' },
13
24
  toBeExpanded: { key: 'expanded', expected: true, describeExpected: 'expanded' },
14
25
  toBeFocused: { key: 'focused', expected: true, describeExpected: 'focused' },
@@ -19,24 +30,28 @@ const TEXT_MATCHERS = {
19
30
  mode: 'equals',
20
31
  normalize: true,
21
32
  describeExpected: (pattern) => `text ${pattern}`,
33
+ takesIgnoreCase: true,
22
34
  },
23
35
  toContainText: {
24
36
  field: 'text',
25
37
  mode: 'contains',
26
38
  normalize: true,
27
39
  describeExpected: (pattern) => `text containing ${pattern}`,
40
+ takesIgnoreCase: true,
28
41
  },
29
42
  toHaveValue: {
30
43
  field: 'value',
31
44
  mode: 'equals',
32
45
  normalize: false,
33
46
  describeExpected: (pattern) => `value ${pattern}`,
47
+ takesIgnoreCase: false,
34
48
  },
35
49
  toHaveAccessibleName: {
36
50
  field: 'name',
37
51
  mode: 'equals',
38
52
  normalize: true,
39
53
  describeExpected: (pattern) => `accessible name ${pattern}`,
54
+ takesIgnoreCase: true,
40
55
  },
41
56
  };
42
57
  class AsyncExpectationImpl {
@@ -52,9 +67,28 @@ class AsyncExpectationImpl {
52
67
  get label() {
53
68
  return describeExpression(this.internals.expression);
54
69
  }
70
+ /** The matcher's name as its step and its errors print it: `expect.not.toBeChecked`. */
71
+ api(name) {
72
+ return `expect.${this.negated ? 'not.' : ''}${name}`;
73
+ }
74
+ /**
75
+ * Refuses an option `name` does not take before anything is read: a
76
+ * JavaScript caller's Playwright option must fail, not run as if absent.
77
+ * Returns the boolean `flag` option, `undefined` when absent.
78
+ */
79
+ readOptions(name, options, flag) {
80
+ const api = this.api(name);
81
+ rejectUnknownOptions(api, options, flag === undefined ? ['timeout'] : [flag, 'timeout']);
82
+ if (flag === undefined || options === undefined)
83
+ return undefined;
84
+ const value = Reflect.get(options, flag);
85
+ if (value === undefined || typeof value === 'boolean')
86
+ return value;
87
+ throw new TestError('INVALID_ARGUMENT', `${api} option ${flag} must be a boolean`);
88
+ }
55
89
  async poll(spec, timeout) {
56
90
  const { engine } = this.internals.context;
57
- const api = `expect.${this.negated ? 'not.' : ''}${spec.name}`;
91
+ const api = this.api(spec.name);
58
92
  await this.internals.context.steps.run('assertion', api, this.label, async () => {
59
93
  const deadline = engine.deadline(timeout ?? engine.assertionTimeout);
60
94
  let lastSample = { count: 0, node: null, nodes: [] };
@@ -110,32 +144,48 @@ class AsyncExpectationImpl {
110
144
  const refs = await engine.resolveAll(this.internals.expression, deadline);
111
145
  return { count: refs.length, node: null, nodes: [] };
112
146
  }
113
- const { node, count } = await engine.tryRead(this.internals.expression, deadline);
147
+ const missingFrame = spec.evaluableWithoutNode === true ? 'empty' : 'wait';
148
+ const { node, count } = await engine.tryRead(this.internals.expression, deadline, missingFrame);
114
149
  return { count, node, nodes: [] };
115
150
  }
116
- stateMatcher(name, timeout) {
151
+ /** A state matcher; its Playwright flag set to `false` expects the opposite state. */
152
+ stateMatcher(name, options) {
117
153
  const def = STATE_MATCHERS[name];
154
+ const holds = this.readOptions(name, options, def.flag?.option) ?? true;
155
+ const expected = holds ? def.expected : !def.expected;
118
156
  return this.poll({
119
157
  name,
120
- predicate: (sample) => sample.node !== null && (sample.node.states?.[def.key] === true) === def.expected,
121
- describeExpected: def.describeExpected,
158
+ predicate: (sample) => sample.node !== null && (sample.node.states?.[def.key] === true) === expected,
159
+ describeExpected: holds || def.flag === undefined ? def.describeExpected : def.flag.describeExpected,
122
160
  observed: observedState,
161
+ }, options?.timeout);
162
+ }
163
+ /** `toBeVisible` and `toBeHidden`: not visible means hidden or absent. */
164
+ visibilityMatcher(name, visible, timeout) {
165
+ return this.poll({
166
+ name,
167
+ evaluableWithoutNode: true,
168
+ predicate: (sample) => isNodeVisible(sample.node) === visible,
169
+ describeExpected: visible ? 'visible' : 'hidden or absent',
170
+ observed: visible ? observedState : (sample) => (isNodeVisible(sample.node) ? 'visible' : 'hidden'),
123
171
  }, timeout);
124
172
  }
125
- textMatcher(name, expected, timeout) {
126
- if (isTextMatchList(expected))
127
- return this.textListMatcher(name, expected, timeout);
173
+ textMatcher(name, expected, options) {
128
174
  const def = TEXT_MATCHERS[name];
129
- const pattern = toTextPattern(expected, { exact: true });
175
+ const ignoreCase = this.readOptions(name, options, def.takesIgnoreCase ? 'ignoreCase' : undefined);
176
+ const comparison = { mode: def.mode, normalize: def.normalize, ignoreCase };
177
+ if (isTextMatchList(expected))
178
+ return this.textListMatcher(name, expected, comparison, options?.timeout);
179
+ const pattern = withIgnoreCase(toTextPattern(expected, { exact: true }), ignoreCase);
130
180
  return this.poll({
131
181
  name,
132
182
  readsWithheld: def.field !== 'name',
133
183
  evaluableNode: (node) => readField(def, node) !== undefined,
134
184
  predicate: (sample) => {
135
185
  const actual = sample.node === null ? undefined : readField(def, sample.node);
136
- return actual !== undefined && compareText(actual, pattern, def);
186
+ return actual !== undefined && compareText(actual, pattern, comparison);
137
187
  },
138
- describeExpected: def.describeExpected(describePattern(pattern)),
188
+ describeExpected: def.describeExpected(describeText(pattern, ignoreCase)),
139
189
  observed: (sample) => {
140
190
  if (sample.node === null)
141
191
  return 'no node';
@@ -144,23 +194,23 @@ class AsyncExpectationImpl {
144
194
  return `no ${def.field} (not a form control)`;
145
195
  return `${def.field} ${printField(def, actual)}`;
146
196
  },
147
- }, timeout);
197
+ }, options?.timeout);
148
198
  }
149
199
  /**
150
200
  * The list form. `toHaveText` needs exactly as many matches as entries,
151
201
  * each match satisfying the entry at its position; `toContainText` needs
152
202
  * each entry contained by a distinct match, in order, as Playwright's does.
153
203
  */
154
- textListMatcher(name, expected, timeout) {
204
+ textListMatcher(name, expected, comparison, timeout) {
155
205
  const def = TEXT_MATCHERS[name];
156
- const patterns = expected.map((entry) => toTextPattern(entry, { exact: true }));
206
+ const patterns = expected.map((entry) => withIgnoreCase(toTextPattern(entry, { exact: true }), comparison.ignoreCase));
157
207
  const printed = (node) => {
158
208
  const actual = readField(def, node);
159
209
  return actual === undefined ? `no ${def.field}` : printField(def, actual);
160
210
  };
161
211
  const satisfies = (node, pattern) => {
162
212
  const actual = readField(def, node);
163
- return actual !== undefined && compareText(actual, pattern, def);
213
+ return actual !== undefined && compareText(actual, pattern, comparison);
164
214
  };
165
215
  const matchesList = def.mode === 'contains' ? matchesSubsequence : matchesPositionally;
166
216
  return this.poll({
@@ -168,75 +218,62 @@ class AsyncExpectationImpl {
168
218
  readsWithheld: def.field !== 'name',
169
219
  wholeSet: 'read',
170
220
  predicate: (sample) => matchesList(sample.nodes, patterns, satisfies),
171
- describeExpected: def.describeExpected(`[${patterns.map(describePattern).join(', ')}]`),
221
+ describeExpected: def.describeExpected(`[${patterns.map((pattern) => describeText(pattern, comparison.ignoreCase)).join(', ')}]`),
172
222
  observed: (sample) => `${def.field} [${sample.nodes.map(printed).join(', ')}]`,
173
223
  }, timeout);
174
224
  }
175
225
  toBeVisible(options) {
176
- return this.poll({
177
- name: 'toBeVisible',
178
- evaluableWithoutNode: true,
179
- predicate: (sample) => isNodeVisible(sample.node),
180
- describeExpected: 'visible',
181
- observed: observedState,
182
- }, options?.timeout);
226
+ const visible = this.readOptions('toBeVisible', options, 'visible') ?? true;
227
+ return this.visibilityMatcher('toBeVisible', visible, options?.timeout);
183
228
  }
184
229
  toBeHidden(options) {
185
- return this.poll({
186
- name: 'toBeHidden',
187
- evaluableWithoutNode: true,
188
- predicate: (sample) => !isNodeVisible(sample.node),
189
- describeExpected: 'hidden or absent',
190
- observed: (sample) => (isNodeVisible(sample.node) ? 'visible' : 'hidden'),
191
- }, options?.timeout);
230
+ this.readOptions('toBeHidden', options);
231
+ return this.visibilityMatcher('toBeHidden', false, options?.timeout);
192
232
  }
193
233
  toBeAttached(options) {
234
+ const attached = this.readOptions('toBeAttached', options, 'attached') ?? true;
194
235
  return this.poll({
195
236
  name: 'toBeAttached',
196
237
  evaluableWithoutNode: true,
197
- predicate: (sample) => sample.node !== null,
198
- describeExpected: 'attached',
238
+ predicate: (sample) => (sample.node !== null) === attached,
239
+ describeExpected: attached ? 'attached' : 'detached',
199
240
  observed: (sample) => (sample.node === null ? 'no node' : 'attached'),
200
241
  }, options?.timeout);
201
242
  }
202
243
  toBeEnabled(options) {
203
- return this.stateMatcher('toBeEnabled', options?.timeout);
244
+ return this.stateMatcher('toBeEnabled', options);
204
245
  }
205
246
  toBeDisabled(options) {
206
- return this.stateMatcher('toBeDisabled', options?.timeout);
247
+ return this.stateMatcher('toBeDisabled', options);
207
248
  }
208
249
  toBeChecked(options) {
209
- return this.stateMatcher('toBeChecked', options?.timeout);
250
+ return this.stateMatcher('toBeChecked', options);
210
251
  }
211
252
  toBeSelected(options) {
212
- return this.stateMatcher('toBeSelected', options?.timeout);
253
+ return this.stateMatcher('toBeSelected', options);
213
254
  }
214
255
  toBeExpanded(options) {
215
- return this.stateMatcher('toBeExpanded', options?.timeout);
256
+ return this.stateMatcher('toBeExpanded', options);
216
257
  }
217
258
  toBeFocused(options) {
218
- return this.stateMatcher('toBeFocused', options?.timeout);
259
+ return this.stateMatcher('toBeFocused', options);
219
260
  }
220
261
  toHaveText(expected, options) {
221
- return this.textMatcher('toHaveText', expected, options?.timeout);
262
+ return this.textMatcher('toHaveText', expected, options);
222
263
  }
223
264
  toContainText(expected, options) {
224
- return this.textMatcher('toContainText', expected, options?.timeout);
265
+ return this.textMatcher('toContainText', expected, options);
225
266
  }
226
267
  toHaveValue(expected, options) {
227
- return this.textMatcher('toHaveValue', expected, options?.timeout);
268
+ return this.textMatcher('toHaveValue', expected, options);
228
269
  }
229
270
  toHaveAttribute(name, valueOrOptions, options) {
230
- let value;
231
- let timeout;
232
- if (isTextMatch(valueOrOptions)) {
233
- value = valueOrOptions;
234
- timeout = options?.timeout;
235
- }
236
- else {
237
- timeout = valueOrOptions?.timeout;
238
- }
239
- const pattern = value === undefined ? undefined : toTextPattern(value, { exact: true });
271
+ const hasValue = isTextMatch(valueOrOptions);
272
+ // Presence reads the third argument too when the value is `undefined`, as Playwright does.
273
+ const bag = hasValue ? options : valueOrOptions === undefined ? options : valueOrOptions;
274
+ const ignoreCase = this.readOptions('toHaveAttribute', bag, hasValue ? 'ignoreCase' : undefined);
275
+ const pattern = hasValue ? withIgnoreCase(toTextPattern(valueOrOptions, { exact: true }), ignoreCase) : undefined;
276
+ const comparison = { mode: 'equals', normalize: true, ignoreCase };
240
277
  return this.poll({
241
278
  name: 'toHaveAttribute',
242
279
  readsWithheld: true,
@@ -244,11 +281,11 @@ class AsyncExpectationImpl {
244
281
  if (sample.node === null)
245
282
  return false;
246
283
  const attribute = attributeOf(sample.node, name);
247
- return attribute !== null && (pattern === undefined || matchesText(attribute, pattern));
284
+ return attribute !== null && (pattern === undefined || compareText(attribute, pattern, comparison));
248
285
  },
249
286
  describeExpected: pattern === undefined
250
287
  ? `attribute "${name}"`
251
- : `attribute "${name}" ${describePattern(pattern)}`,
288
+ : `attribute "${name}" ${describeText(pattern, ignoreCase)}`,
252
289
  observed: (sample) => {
253
290
  if (sample.node === null)
254
291
  return 'no node';
@@ -257,12 +294,13 @@ class AsyncExpectationImpl {
257
294
  ? `attribute "${name}" absent`
258
295
  : `attribute "${name}" ${JSON.stringify(attribute)}`;
259
296
  },
260
- }, timeout);
297
+ }, bag?.timeout);
261
298
  }
262
299
  toHaveAccessibleName(expected, options) {
263
- return this.textMatcher('toHaveAccessibleName', expected, options?.timeout);
300
+ return this.textMatcher('toHaveAccessibleName', expected, options);
264
301
  }
265
302
  toHaveCount(expected, options) {
303
+ this.readOptions('toHaveCount', options);
266
304
  return this.poll({
267
305
  name: 'toHaveCount',
268
306
  wholeSet: true,
@@ -310,6 +348,11 @@ function readField(def, node) {
310
348
  return '';
311
349
  return isValueControl(node) ? '' : undefined;
312
350
  }
351
+ /** A pattern as a failure message prints it, marking a string compared ignoring case. */
352
+ function describeText(pattern, ignoreCase) {
353
+ const described = describePattern(pattern);
354
+ return pattern.kind === 'string' && ignoreCase === true ? `${described} (ignoring case)` : described;
355
+ }
313
356
  /** The field as the failure message prints it: normalized when the comparison was, so the message shows what got compared. */
314
357
  function printField(def, actual) {
315
358
  return JSON.stringify(def.normalize ? normalizeText(actual) : actual);
@@ -326,4 +369,3 @@ function observedState(sample) {
326
369
  export function createAsyncExpectation(internals) {
327
370
  return new AsyncExpectationImpl(internals, false);
328
371
  }
329
- //# sourceMappingURL=async.js.map
@@ -16,4 +16,3 @@ export interface PublishedAttempt {
16
16
  export declare function publishAttempt(context: PublishedAttempt, until: AbortSignal): void;
17
17
  /** The attempt a poll runs inside, or undefined in a standalone script. */
18
18
  export declare function currentAttempt(): PublishedAttempt | undefined;
19
- //# sourceMappingURL=attempt.d.ts.map
@@ -30,4 +30,3 @@ export function publishAttempt(context, until) {
30
30
  export function currentAttempt() {
31
31
  return slot.get(globalThis);
32
32
  }
33
- //# sourceMappingURL=attempt.js.map
@@ -7,4 +7,3 @@ import type { Expect } from '../types.ts';
7
7
  * end of the body instead of throwing it.
8
8
  */
9
9
  export declare const expect: Expect;
10
- //# sourceMappingURL=index.d.ts.map
@@ -43,4 +43,3 @@ export const expect = Object.assign(dispatch, {
43
43
  stringContaining: (sample) => new StringContaining(sample),
44
44
  stringMatching: (sample) => new StringMatching(sample),
45
45
  });
46
- //# sourceMappingURL=index.js.map