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
@@ -11,17 +11,17 @@
11
11
  * for the route precondition. The initial capture can also serve the executor
12
12
  * when replay performed no action.
13
13
  */
14
- import { anchorsPresent, describeAnchors } from '../cache/anchors.js';
14
+ import { deltaEvidenced, deltaHolds, describeDelta } from '../cache/anchors.js';
15
15
  import { decideTraceReplay, opensWithNavigate } from '../cache/decide.js';
16
- import { compareRoutes, routeOf } from '../cache/route.js';
17
- import { instructionDigest } from '../cache/identity.js';
18
- import { TraceRecorder } from '../cache/recorder.js';
16
+ import { sameRoute } from '../cache/route.js';
17
+ import { recordedProvenance, TraceRecorder } from '../cache/recorder.js';
19
18
  import { expandTrace, templateParams, templatesCollide, templateTrace } from '../cache/template.js';
20
19
  import { readTraceEntry } from '../cache/trace.js';
21
20
  import { sleep } from '../internal/time.js';
22
21
  import { AgentError, isAgentError, isModelUnreachable } from './error.js';
23
22
  import { isRuntimeHardStop } from './executor.js';
24
- import { replayTrace, verifyAnchors, } from './replay.js';
23
+ import { replayTrace, verifyEndState, } from './replay.js';
24
+ import { redactNodesAgain } from './observation.js';
25
25
  /** The outcome of a step that threw `cause`. */
26
26
  export function failedStepOutcome(cause) {
27
27
  if (isModelUnreachable(cause))
@@ -48,9 +48,8 @@ const STALE_REASONS = new Set([
48
48
  const END_WAIT_MARGIN_MS = 10_000;
49
49
  /**
50
50
  * How long a replay waits for a recorded destination path to be the current
51
- * one. A step that moved records no anchors: the path is its whole
52
- * postcondition, and the replayed tap that starts the navigation returns
53
- * before the new document commits. Reading the path once, right after the
51
+ * one. The replayed tap that starts a navigation returns before the new
52
+ * document commits. Reading the path once, right after the
54
53
  * tap, hands every navigation off as an end-mismatch; polling with the
55
54
  * settling backoff lets the destination arrive. Bounded like anchor polling.
56
55
  */
@@ -60,8 +59,11 @@ export class StepTraceSession {
60
59
  host;
61
60
  cache;
62
61
  keyHash;
62
+ /** The claimed key and the step it names, which an entry records as its provenance. */
63
+ claim;
63
64
  recorder;
64
65
  options;
66
+ redaction;
65
67
  info;
66
68
  prefix;
67
69
  startPath;
@@ -85,6 +87,8 @@ export class StepTraceSession {
85
87
  replayedWhole = false;
86
88
  /** True once a cached entry's actions were run this step, fully or partly. */
87
89
  consumedReplay = false;
90
+ /** True once the store returned an entry for this step, whether or not it replayed. */
91
+ readEntryHit = false;
88
92
  /** True once `cache.strict` failed the step on its recording, which is then kept for review rather than evicted. */
89
93
  failedStale = false;
90
94
  /** Grammar actions recorded so far when an end-mismatch hand-off happened. */
@@ -92,13 +96,15 @@ export class StepTraceSession {
92
96
  constructor(host, options) {
93
97
  this.host = host;
94
98
  this.options = options;
99
+ this.redaction = { redact: options.redact, redactCut: options.redactCut };
95
100
  this.cache = options.cache;
96
101
  // The key digests the params as the recording spells them, a placeholder
97
102
  // where each `unique()` value was, so every run's value finds one entry.
98
- this.keyHash = options.cache.claimKeyHash('act', options.instruction, templateParams(options.params, options.templates));
103
+ this.claim = options.cache.claimKey('act', options.instruction, templateParams(options.params, options.templates), options.agent);
104
+ this.keyHash = this.claim.keyHash;
99
105
  if (options.cache.mode === 'read-write') {
100
106
  this.recorder = new TraceRecorder({
101
- redact: options.redact,
107
+ ...this.redaction,
102
108
  maxActions: options.maxActions,
103
109
  });
104
110
  }
@@ -144,6 +150,8 @@ export class StepTraceSession {
144
150
  this.info = this.missed(read.reason, 0);
145
151
  if (read.unavailable !== true)
146
152
  this.failIfStale();
153
+ if (read.reason === 'no-entry')
154
+ await this.failIfRekeyed();
147
155
  return undefined;
148
156
  }
149
157
  // With an entry in hand the step is the cache's from its first moment: the
@@ -151,6 +159,7 @@ export class StepTraceSession {
151
159
  // replay finishes stays the cache's through its verdict and the re-stage,
152
160
  // so a reporter never shows a model turn that is not coming. Only a replay
153
161
  // that cannot finish the step hands it to the model.
162
+ this.readEntryHit = true;
154
163
  this.host.replaying(true);
155
164
  const verdict = await this.replayEntry(read.entry);
156
165
  if (verdict === undefined) {
@@ -173,6 +182,23 @@ export class StepTraceSession {
173
182
  this.failedStale = true;
174
183
  throw new AgentError('REPLAY_STALE', `the recording of this step no longer replays (${reason}), and cache.strict hands no step to the agent; ${strict.advice}`);
175
184
  }
185
+ /**
186
+ * Under `cache.strict`, ends a step whose key found no entry while the
187
+ * store holds a recording made for the same step under another key: the
188
+ * runner, the engine, the app, or the agent's context changed since, and
189
+ * the recording no longer replays as surely as one that diverged. A step
190
+ * whose instruction or params changed is a new step and still runs live.
191
+ */
192
+ async failIfRekeyed() {
193
+ const { strict } = this.cache;
194
+ if (strict === false || strict.recordings === undefined)
195
+ return;
196
+ const previous = await strict.recordings.underAnotherKey(this.keyHash, recordedProvenance(this.claim.step, this.options.redact));
197
+ if (previous === undefined)
198
+ return;
199
+ this.failedStale = true;
200
+ throw new AgentError('REPLAY_STALE', `the recording of this step no longer replays: the store holds it under another cache key (${previous}.json), since the runner, the engine, the app, or the agent's context changed after it was recorded, and cache.strict hands no step to the agent; ${strict.advice}`);
201
+ }
176
202
  /**
177
203
  * Closes the session once the step has settled. The whole write-side
178
204
  * decision lives here, in read-write mode only:
@@ -192,6 +218,10 @@ export class StepTraceSession {
192
218
  * anchor, or end wait, so drift is repaired only once a relocation fails
193
219
  * and the hand-off that follows re-records.
194
220
  * - passed otherwise: stage the recorded trace for attempt-end settlement.
221
+ * When this pass leaves nothing to stage (it changed nothing a replay
222
+ * could check) and an entry was read for the step, evict that entry: it
223
+ * did not serve this pass, and nothing recorded will replace it, so
224
+ * keeping it would hand every later run off the same way.
195
225
  * - failed after consuming a replay: evict. Without this, a diverged replay
196
226
  * whose step then fails stages nothing — and the poisoned entry would
197
227
  * replay its bad prefix on every future first attempt.
@@ -219,10 +249,15 @@ export class StepTraceSession {
219
249
  if (this.repairedAfterEndMismatch(recorder))
220
250
  await this.evict();
221
251
  else if (this.replayedWhole) {
222
- this.cache.staged.push({ kind: 'keep', keyHash: this.keyHash, stepIndex: this.options.stepIndex });
252
+ this.cache.staged.push({
253
+ kind: 'keep',
254
+ keyHash: this.keyHash,
255
+ stepIndex: this.options.stepIndex,
256
+ recordedFor: recordedProvenance(this.claim.step, this.options.redact),
257
+ });
223
258
  }
224
- else
225
- await this.stage(recorder, verdictSummary);
259
+ else if (!(await this.stage(recorder, verdictSummary)) && this.readEntryHit)
260
+ await this.evict();
226
261
  return;
227
262
  }
228
263
  }
@@ -289,10 +324,33 @@ export class StepTraceSession {
289
324
  this.info = this.missed(decision.reason, trace.actions.length);
290
325
  return undefined;
291
326
  }
292
- const outcome = await replayTrace(this.host, trace, start?.kind === 'semantic' ? { initial: start } : {});
327
+ // Every screen the replay looks at, in order, from the start: the end
328
+ // check measures the recorded delta from the first of them on the route
329
+ // the replay ends on, so a free action is preceded by a look until one
330
+ // on the recorded end route has been seen.
331
+ const screens = start === undefined ? [] : [start];
332
+ const onEndRoute = (screen) => screen !== undefined && (trace.endPath === undefined || (screen.path !== undefined && sameRoute(screen.path, trace.endPath)));
333
+ const host = this.host;
334
+ const watched = {
335
+ get traceEligible() {
336
+ return host.traceEligible;
337
+ },
338
+ observe: async (mode) => {
339
+ const screen = await host.observe(mode);
340
+ screens.push(screen);
341
+ return screen;
342
+ },
343
+ actions: host.actions,
344
+ signal: host.signal,
345
+ remainingMs: () => host.remainingMs(),
346
+ };
347
+ const outcome = await replayTrace(watched, trace, {
348
+ ...(start?.kind === 'semantic' ? { initial: start } : {}),
349
+ looksBeforeFree: () => !onEndRoute(screens.at(-1)),
350
+ });
293
351
  this.consumedReplay = true;
294
352
  const stopReason = outcome.completed
295
- ? (await this.endStateMatches(trace))
353
+ ? start?.kind === 'semantic' && (await this.endStateMatches(trace, start, screens))
296
354
  ? undefined
297
355
  : 'end-mismatch'
298
356
  : (outcome.stopReason ?? 'action-failed');
@@ -309,57 +367,59 @@ export class StepTraceSession {
309
367
  }
310
368
  /**
311
369
  * The trace's postcondition against the live screen: the recorded end
312
- * route (when the live location is known) and every recorded end anchor
313
- * present again. A route the path leaves undecided is the recorded screen
314
- * only if the anchors are already on it, which then needs no second look.
370
+ * route when the live location is known, the recorded delta on the
371
+ * screen (`deltaHolds`), and evidence that the replay produced it rather
372
+ * than finding it there (`deltaEvidenced`). The evidence is measured from
373
+ * the first screen the replay saw on the route it ended on (`screens`, in
374
+ * order): the start for a step that stays on one screen, the page a
375
+ * recorded navigate opened before the switch on it was tapped. An outcome
376
+ * already showing there proves nothing, and neither does a recording with
377
+ * no delta at all.
315
378
  */
316
- async endStateMatches(trace) {
379
+ async endStateMatches(trace, start, screens) {
317
380
  if (!this.host.traceEligible)
318
381
  return false;
319
382
  const arrived = await this.endScreen(trace);
320
383
  if (arrived === undefined)
321
384
  return false;
322
- if (arrived.anchorsSeen)
323
- return true;
324
- return (await verifyAnchors(this.host, trace.endAnchors ?? [], {
325
- initial: arrived.screen,
385
+ // Both captures may predate a secret the replay resolved; read with the
386
+ // ledger as it is now, an unchanged node is no change.
387
+ const baseline = baselineScreen(screens, arrived.path);
388
+ const baselineNodes = baseline === undefined ? undefined : redactNodesAgain(baseline.nodes, this.redaction);
389
+ if (!deltaEvidenced(trace, baselineNodes, inputTargets(trace)))
390
+ return false;
391
+ const beforeNodes = baselineNodes ?? redactNodesAgain(start.nodes, this.redaction);
392
+ // Every look the wait takes must still be on the recorded end route: a
393
+ // screen that moved on after the route first matched is another screen.
394
+ const holds = (screen) => (trace.endPath === undefined || screen.path === undefined || sameRoute(screen.path, trace.endPath)) &&
395
+ deltaHolds(trace, screen.nodes, beforeNodes);
396
+ return (await verifyEndState(this.host, holds, {
397
+ initial: arrived,
326
398
  ...(trace.endWaitMs === undefined ? {} : { waitMs: trace.endWaitMs }),
327
399
  })) && this.host.traceEligible;
328
400
  }
329
401
  /**
330
402
  * Captures the semantic end state once its route matches the recording,
331
- * polling while a navigation the last action started commits. Reports
332
- * whether the anchors were what settled the route, so the caller does not
333
- * verify them again. A route still undecided when the poll runs out is
334
- * handed on with the anchors unseen: the caller's anchor wait, sized by
335
- * the recording, is the one that decides it, as for a route that matched.
403
+ * polling while a navigation the last action started commits. A route
404
+ * that never matches is another screen, whatever it shows: a link that
405
+ * now lands on a page sharing the recorded one's layout is exactly the
406
+ * flow that went wrong.
336
407
  */
337
408
  async endScreen(trace) {
338
409
  const startedMs = Date.now();
339
- const recorded = trace.endPath === undefined ? undefined : routeOf(trace.endPath);
340
- const anchors = trace.endAnchors ?? [];
410
+ const recorded = trace.endPath;
341
411
  for (let attempt = 0;; attempt += 1) {
342
412
  const observation = await probeScreen(this.host, 'raw');
343
413
  if (observation?.kind !== 'semantic' || !this.host.traceEligible)
344
414
  return undefined;
345
- if (recorded === undefined || observation.path === undefined)
346
- return { screen: observation, anchorsSeen: false };
347
- const verdict = compareRoutes(recorded, routeOf(observation.path));
348
- if (verdict === 'same')
349
- return { screen: observation, anchorsSeen: false };
350
- // A path the runner cannot recognize as the recorded route is the
351
- // recorded screen only if the recorded effect is visibly on it; with
352
- // no anchors recorded there is nothing to see, and it is another screen.
353
- const undecided = verdict === 'undecided' && anchors.length > 0;
354
- if (undecided && anchorsPresent(anchors, observation.nodes, { redact: this.options.redact })) {
355
- return { screen: observation, anchorsSeen: true };
356
- }
415
+ if (recorded === undefined || observation.path === undefined || sameRoute(recorded, observation.path))
416
+ return observation;
357
417
  const delay = END_PATH_DELAYS_MS[attempt];
358
418
  if (delay === undefined ||
359
419
  Date.now() - startedMs + delay > END_PATH_TIMEOUT_MS ||
360
420
  this.host.remainingMs() <= delay ||
361
421
  this.host.signal.aborted) {
362
- return undecided ? { screen: observation, anchorsSeen: false } : undefined;
422
+ return undefined;
363
423
  }
364
424
  await sleep(delay, this.host.signal);
365
425
  }
@@ -401,32 +461,36 @@ export class StepTraceSession {
401
461
  *
402
462
  * The end path and a fresh settled observation are the trace's
403
463
  * postcondition — the state the step passed in. The delta between the
404
- * baseline and the passing observation becomes the end anchors. When the
405
- * step moved to another pathname the whole new screen is the delta, and its
406
- * first stable anchors back the path check, which matches a created
407
- * record's page up to the id the app minted for it. A postcondition that
408
- * cannot be captured stages nothing: a trace without its check would
409
- * replay on mechanics alone.
464
+ * baseline and the passing observation becomes the anchors: what appeared
465
+ * and what vanished. When the step moved to another pathname the whole new
466
+ * screen is the delta, and its first stable anchors back the path check,
467
+ * which matches a created record's page up to the id the app minted for
468
+ * it. A postcondition that cannot be captured stages nothing, and neither
469
+ * does a step that changed nothing a replay could check, no node and no
470
+ * route: a trace without its check would replay on mechanics alone.
410
471
  */
411
472
  async stage(recorder, verdictSummary) {
412
473
  if (!this.host.traceEligible || this.startNodes === undefined || recorder.recordedCount === 0)
413
- return;
474
+ return false;
414
475
  const observation = await probeScreen(this.host, 'held-still');
415
476
  if (!this.host.traceEligible || observation?.kind !== 'semantic')
416
- return;
477
+ return false;
417
478
  const { nodes: endNodes, path: endPath } = observation;
418
- const endAnchors = describeAnchors(this.startNodes, endNodes, this.options);
479
+ // The start capture may predate a secret this step resolved; read with
480
+ // the ledger as it is now, an unchanged node is no delta.
481
+ const startNodes = redactNodesAgain(this.startNodes, this.redaction);
482
+ const routeMoved = this.startPath !== undefined && endPath !== undefined && !sameRoute(this.startPath, endPath);
483
+ const delta = describeDelta(startNodes, endNodes, routeMoved);
484
+ if (delta.appeared.length === 0 && delta.gone.length === 0 && !routeMoved)
485
+ return false;
419
486
  const trace = recorder.finalize({
420
487
  executor: this.options.executor,
421
- recordedFor: {
422
- testId: this.cache.identity.testId,
423
- targetId: this.cache.identity.targetId,
424
- instructionDigest: instructionDigest(this.options.instruction),
425
- },
488
+ recordedFor: this.claim.step,
426
489
  summary: verdictSummary ?? 'step passed',
427
490
  ...(this.startPath === undefined ? {} : { startPath: this.startPath }),
428
491
  ...(endPath === undefined ? {} : { endPath }),
429
- endAnchors,
492
+ endAnchors: delta.appeared,
493
+ goneAnchors: delta.gone,
430
494
  // How long the app took to show its end state after the last action,
431
495
  // plus room for a slower day: the budget a replay waits for the anchors
432
496
  // to return. Measured from the last action, not the step's start: the
@@ -435,12 +499,12 @@ export class StepTraceSession {
435
499
  endWaitMs: Date.now() - (recorder.lastActionAtMs ?? this.startedMs) + END_WAIT_MARGIN_MS,
436
500
  });
437
501
  if (trace === undefined)
438
- return;
502
+ return false;
439
503
  // A trace with no start anchor — no recorded path (a surface without a URL)
440
504
  // and no opening navigate — could never replay: `wrong-context` forever.
441
505
  // Writing it would be pure store traffic, so it is not written at all.
442
506
  if (trace.startPath === undefined && !opensWithNavigate(trace))
443
- return;
507
+ return false;
444
508
  // Stored with a slot where each `unique()` value appeared, so the next
445
509
  // run's values — a fresh timestamped name — replay the same flow. A
446
510
  // recording that cannot be templated safely is not written at all; when
@@ -448,12 +512,13 @@ export class StepTraceSession {
448
512
  if (templatesCollide(this.options.params, this.options.templates)) {
449
513
  if (this.info !== undefined)
450
514
  this.info = { ...this.info, notRecorded: 'param-collision' };
451
- return;
515
+ return false;
452
516
  }
453
517
  const templated = templateTrace(trace, this.options.templates);
454
518
  if (templated === undefined)
455
- return;
519
+ return false;
456
520
  this.cache.staged.push({ kind: 'write', keyHash: this.keyHash, trace: templated, stepIndex: this.options.stepIndex });
521
+ return true;
457
522
  }
458
523
  /**
459
524
  * Awaited so the step does not close — and a later read cannot be served
@@ -476,6 +541,26 @@ export class StepTraceSession {
476
541
  };
477
542
  }
478
543
  }
544
+ /** The controls a trace's input actions set a value or a state on: their changed anchors echo the input. */
545
+ function inputTargets(trace) {
546
+ return trace.actions.flatMap((action) => ('target' in action && action.target !== undefined ? [action.target] : []));
547
+ }
548
+ /**
549
+ * The first semantic screen of the replay's last stretch on the route it
550
+ * ended on (`endPath`), or undefined when its last screen before the end
551
+ * was on another route, so the last action moved it. A screen or an end
552
+ * without a location counts as on the route: there is nothing to compare.
553
+ */
554
+ function baselineScreen(screens, endPath) {
555
+ let baseline;
556
+ for (const screen of screens) {
557
+ if (endPath !== undefined && screen.path !== undefined && !sameRoute(screen.path, endPath))
558
+ baseline = undefined;
559
+ else if (screen.kind === 'semantic')
560
+ baseline ??= screen;
561
+ }
562
+ return baseline;
563
+ }
479
564
  /**
480
565
  * One cache capture, settled as far as `mode` asks, or undefined when the
481
566
  * surface cannot be observed right now, which is the executor's business,
@@ -511,4 +596,3 @@ export function recordedVerdictOf(summary) {
511
596
  const at = summary.indexOf(RECORDED_VERDICT_SEPARATOR);
512
597
  return at === -1 ? summary : summary.slice(at + RECORDED_VERDICT_SEPARATOR.length);
513
598
  }
514
- //# sourceMappingURL=step-cache.js.map
@@ -80,4 +80,3 @@ export interface PreparedTurn {
80
80
  * Its model turns per step are the agent's `maxModelCalls`.
81
81
  */
82
82
  export declare function createToolLoopExecutor(options: ToolLoopExecutorOptions): StepExecutor;
83
- //# sourceMappingURL=tool-loop.d.ts.map
@@ -11,6 +11,7 @@
11
11
  * - model-call accounting and a step transcript for `--debug`.
12
12
  */
13
13
  import { asSdkLanguageModel, loadAiSdk } from './ai-sdk.js';
14
+ import { MODEL_REQUEST_HEADERS } from '../internal/client-identity.js';
14
15
  import { ConfigurationError, withHint } from '../internal/errors.js';
15
16
  import { failureHint, isAbort, TRANSPORT_RETRIES } from './model/sdk.js';
16
17
  import { isContextOverflow } from './model/overflow.js';
@@ -241,6 +242,7 @@ class LoopRun {
241
242
  toolChoice: this.toolChoice,
242
243
  ...(providerOptions === undefined ? {} : { providerOptions: providerOptions }),
243
244
  maxRetries: TRANSPORT_RETRIES,
245
+ headers: MODEL_REQUEST_HEADERS,
244
246
  stopWhen: [
245
247
  () => this.conclusion.concluded() || this.hardStop !== undefined,
246
248
  // Counted across every generate call of the step, so a retry after an
@@ -632,4 +634,3 @@ function safeJson(value) {
632
634
  return String(value);
633
635
  }
634
636
  }
635
- //# sourceMappingURL=tool-loop.js.map
@@ -28,4 +28,3 @@ export declare function boundToolOutput(text: string, limits?: {
28
28
  maxLines: number;
29
29
  maxBytes: number;
30
30
  }): BoundToolOutput;
31
- //# sourceMappingURL=tool-output.d.ts.map
@@ -57,4 +57,3 @@ function formatBytes(bytes) {
57
57
  return `${String(bytes)} B`;
58
58
  return `${(bytes / 1024).toFixed(1)} KB`;
59
59
  }
60
- //# sourceMappingURL=tool-output.js.map
@@ -35,4 +35,3 @@ export type ToolContext = Pick<StepExecutorContext, 'observe' | 'attachScreensho
35
35
  export declare function getToolContext(options: object): ToolContext;
36
36
  /** Carries harness capabilities alongside SDK options without replacing the project's SDK context. */
37
37
  export declare function withToolContext(options: ToolExecutionOptions<unknown>, context: ToolContext): ToolExecutionOptions<unknown>;
38
- //# sourceMappingURL=tool.d.ts.map
@@ -50,4 +50,3 @@ const TOOL_CONTEXT = Symbol.for('e2e.tool-context.v1');
50
50
  export function withToolContext(options, context) {
51
51
  return Object.assign({}, options, { [TOOL_CONTEXT]: context });
52
52
  }
53
- //# sourceMappingURL=tool.js.map
@@ -35,4 +35,3 @@ export interface CompactScreenshotHistoryOptions {
35
35
  * array unchanged when nothing qualifies.
36
36
  */
37
37
  export declare function compactScreenshotHistory(messages: ModelMessage[], options?: CompactScreenshotHistoryOptions): ModelMessage[];
38
- //# sourceMappingURL=transcript-compaction.d.ts.map
@@ -183,4 +183,3 @@ function carriesImage(part) {
183
183
  function isImage(item) {
184
184
  return item.type === 'file' && (item.mediaType ?? '').startsWith('image/');
185
185
  }
186
- //# sourceMappingURL=transcript-compaction.js.map
@@ -25,4 +25,3 @@ export interface AuthorizedUpload {
25
25
  */
26
26
  export declare function authorizeUploadPaths(host: UploadPolicyHost, paths: unknown, projectRoot: string): AuthorizedUpload;
27
27
  export {};
28
- //# sourceMappingURL=upload-paths.d.ts.map
@@ -54,4 +54,3 @@ export function authorizeUploadPaths(host, paths, projectRoot) {
54
54
  host.recordPolicy('upload.path', 'allowed');
55
55
  return { given: paths, resolved };
56
56
  }
57
- //# sourceMappingURL=upload-paths.js.map
@@ -45,4 +45,3 @@ export declare const MAX_REASONING_CHARS = 600;
45
45
  */
46
46
  export declare function reasoningField(text: string | undefined, redact: (text: string) => string): Pick<StepEvent, 'reasoning'>;
47
47
  export {};
48
- //# sourceMappingURL=usage.d.ts.map
@@ -89,4 +89,3 @@ export function reasoningField(text, redact) {
89
89
  const trimmed = text?.trim() ?? '';
90
90
  return trimmed === '' ? {} : { reasoning: bound(redact(trimmed), MAX_REASONING_CHARS) };
91
91
  }
92
- //# sourceMappingURL=usage.js.map
@@ -1,37 +1,85 @@
1
1
  /**
2
- * End anchors.
2
+ * Anchors: the step's recorded delta.
3
3
  *
4
4
  * A recording run does not end when its last action commits; it ends when the
5
5
  * executor looks at the screen and judges the step done. The trace used to
6
6
  * keep only the actions and drop that look, so a replay could run every
7
7
  * recorded action mechanically — a fill that never committed, a save that
8
8
  * produced an unnamed record — and self-finalize with nothing checking the
9
- * effect. Anchors restore the check as data: the descriptors of nodes that
10
- * were on screen when the step passed and were not there when it began. They
11
- * are the step's own delta, checked by the relocation vocabulary
12
- * (`relocate.ts`) with two deliberate differences: every recorded field must
13
- * be equal, text included, and presence is enough — uniqueness is not asked.
9
+ * effect. Anchors restore the check as data: the descriptors of nodes the
10
+ * step made appear (`endAnchors`) and of nodes it made vanish
11
+ * (`goneAnchors`), each with the states a step sets on a control it leaves
12
+ * on screen (a switch turned on, a field typed into). They are checked by
13
+ * the relocation vocabulary (`relocate.ts`) with two deliberate differences:
14
+ * every recorded field must be equal, text, value, and states included, and
15
+ * presence is enough, uniqueness is not asked.
16
+ *
17
+ * A replay passes on its own only when the delta happened again: everything
18
+ * that appeared is there, everything that vanished is gone, and at least one
19
+ * of those changes, or the route, actually moved during the replay
20
+ * (`deltaEvidenced`), so a status that already read "Submitted" before a
21
+ * submit that did nothing is no proof. An alert the replay raised that the
22
+ * recording never saw is an outcome the recording did not have, whatever
23
+ * else matched (`deltaHolds`).
14
24
  */
15
- import type { SemanticNode } from '../engine/surface.ts';
16
- import { type DescriptorMatchOptions } from './relocate.ts';
25
+ import type { RedactedNode } from '../agent/observation.ts';
17
26
  import { type TraceTargetDescriptor } from './trace.ts';
18
- export type AnchorOptions = DescriptorMatchOptions;
27
+ /** The two sides of one step's delta, each projected, deduplicated, ordered, and capped. */
28
+ export interface StepDelta {
29
+ /** On screen when the step passed, not when it began. */
30
+ readonly appeared: TraceTargetDescriptor[];
31
+ /** On screen when the step began, not when it passed. */
32
+ readonly gone: TraceTargetDescriptor[];
33
+ }
34
+ /** The recorded delta a replay checks, as a trace carries it. */
35
+ export interface RecordedDelta {
36
+ readonly endAnchors?: readonly TraceTargetDescriptor[];
37
+ readonly goneAnchors?: readonly TraceTargetDescriptor[];
38
+ }
19
39
  /**
20
- * Derives the end anchors of one step: relocatable descriptors present in the
21
- * passing observation and absent from the starting one, deduplicated, capped.
22
- * Leaves come first, then containers, each in document order: a container's
23
- * accessible name is usually the concatenation of its children's, so it
24
- * repeats what the leaves already say — and on a list-heavy screen those
25
- * repeats would crowd the one status line that names the effect out of the
26
- * cap.
40
+ * Derives one step's delta between its starting observation and its passing
41
+ * one. Each side is ordered announcements first, then leaves, then
42
+ * containers, each in document order: a container's accessible name is
43
+ * usually the concatenation of its children's, so it repeats what the
44
+ * leaves already say, and on a list-heavy screen those repeats would crowd
45
+ * the one status line that names the effect out of the cap. `routeMoved`
46
+ * says the step ended on another route than it began on, whose counts are
47
+ * that screen's data rather than the step's result (`COUNT_TEXT`).
48
+ *
49
+ * A node counts as gone only when no end node matches its anchor the way
50
+ * `deltaHolds` checks one, on the recorded fields alone: a radio label
51
+ * "Express" the pick replaced with a status reading "Express" vanished, but
52
+ * an anchor of that text would still match the status, and the recording
53
+ * would fail its own check on every replay.
27
54
  */
28
- export declare function describeAnchors(startNodes: ReadonlyMap<string, SemanticNode>, endNodes: ReadonlyMap<string, SemanticNode>, options: AnchorOptions): TraceTargetDescriptor[];
55
+ export declare function describeDelta(startNodes: ReadonlyMap<string, RedactedNode>, endNodes: ReadonlyMap<string, RedactedNode>, routeMoved: boolean): StepDelta;
29
56
  /**
30
- * Whether every anchor is present in a fresh observation: some tier of the
31
- * anchor (`descriptorTiers` — so a test id that churned per render is
32
- * forgiven when the remaining fields still identify the node) equals some
33
- * candidate on every anchor field. Two matching nodes are the effect twice
34
- * over, not an ambiguity.
57
+ * Whether the recorded end state holds on a fresh observation: every
58
+ * appeared anchor present (some tier of it, `descriptorTiers`, so a test id
59
+ * that churned per render is forgiven when the remaining fields still
60
+ * identify the node, equal on every anchor field and state), no gone anchor
61
+ * present, and no alert on screen that was not on `beforeNodes` and is not
62
+ * one the recording saw appear. Two nodes matching one anchor are the effect
63
+ * twice over, not an ambiguity.
64
+ */
65
+ export declare function deltaHolds(delta: RecordedDelta, nodes: ReadonlyMap<string, RedactedNode>, beforeNodes: ReadonlyMap<string, RedactedNode>): boolean;
66
+ /**
67
+ * Whether the replay itself produced some of the recorded delta, measured
68
+ * from `baselineNodes`, the first screen the replay saw on the route it
69
+ * ended on: an anchor that appeared was absent there, or a gone one was
70
+ * there. Without that, every check `deltaHolds` makes could have held before
71
+ * the actions that should have produced it: the screen already read the
72
+ * outcome, and nothing the replay did is proven to have done anything. A
73
+ * recording with no delta at all is never evidence. Undefined `baselineNodes`
74
+ * means the replay saw no screen on that route before its last action, so
75
+ * that action moved the route, which is the evidence.
76
+ *
77
+ * A control one of the trace's own actions targeted (`inputTargets`) that
78
+ * shows on both sides of the delta, a field typed into or a switch flipped,
79
+ * echoes the input: the replay typed, so the value is there, whatever the
80
+ * step was for. Such echoes are evidence only when the delta holds nothing
81
+ * else; otherwise the rest of the delta must have moved, so a subscribe
82
+ * form typed into on a page that already read "You're subscribed" proves
83
+ * nothing.
35
84
  */
36
- export declare function anchorsPresent(anchors: readonly TraceTargetDescriptor[], nodes: ReadonlyMap<string, SemanticNode>, options: AnchorOptions): boolean;
37
- //# sourceMappingURL=anchors.d.ts.map
85
+ export declare function deltaEvidenced(delta: RecordedDelta, baselineNodes: ReadonlyMap<string, RedactedNode> | undefined, inputTargets: readonly TraceTargetDescriptor[]): boolean;