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
@@ -7,10 +7,13 @@
7
7
  * contributes only its stable name and purpose, exactly as the executor sees
8
8
  * it in the projected params.
9
9
  *
10
- * Executor identity is deliberately absent (OQ10's conservative default):
11
- * entries are shared across roster members and carry their producer as
12
- * provenance on the entry, so a future ReplayPolicy can reject foreign traces
13
- * without a re-key.
10
+ * The agent a step runs with is part of the key: its configured name, since
11
+ * two agents of one test (`agent: ['buyer', 'admin']`) act as different
12
+ * people, and a digest of the context it reads, since a test's
13
+ * `agentContext` decides what the step does. The context is digested after
14
+ * redaction, so a registered secret in it contributes its name only. The
15
+ * executor that produced a trace stays provenance on the entry: the agent's
16
+ * name already keeps two configured agents apart.
14
17
  */
15
18
  import { canonicalDigest, sha256Hex } from '../internal/ids.js';
16
19
  import { TRACE_SCHEMA_VERSION } from './trace.js';
@@ -99,6 +102,8 @@ export function buildTraceCacheKey(parts) {
99
102
  instructionDigest: parts.signature.instructionDigest,
100
103
  paramsDigest: parts.signature.paramsDigest,
101
104
  appIdentity: parts.target.appIdentity,
105
+ agent: parts.agent.name,
106
+ agentContextDigest: sha256Hex(parts.agent.context ?? ''),
102
107
  policyVersion: parts.policyVersion,
103
108
  };
104
109
  }
@@ -106,4 +111,3 @@ export function buildTraceCacheKey(parts) {
106
111
  export function traceCacheKeyHash(key) {
107
112
  return canonicalDigest(key);
108
113
  }
109
- //# sourceMappingURL=identity.js.map
@@ -20,12 +20,15 @@ import { type ActionTrace, type DerivedReason, type TraceProvenance, type TraceT
20
20
  export interface TraceRecorderOptions {
21
21
  /** The run's secret redactor; applied to every recorded string. */
22
22
  readonly redact: (text: string) => string;
23
+ /** `redact` for a field cut at its observed limit (`SecretLedger.redactCut`). */
24
+ readonly redactCut: (text: string) => string;
23
25
  readonly maxActions?: number;
24
26
  }
25
27
  export declare class TraceRecorder {
26
28
  private readonly actions;
27
29
  private truncated;
28
30
  private readonly redact;
31
+ private readonly redactCut;
29
32
  private readonly maxActions;
30
33
  constructor(options: TraceRecorderOptions);
31
34
  private lastActionAt;
@@ -61,8 +64,10 @@ export declare class TraceRecorder {
61
64
  readonly summary: string;
62
65
  readonly startPath?: string;
63
66
  readonly endPath?: string;
64
- /** Already projected and capped by `describeAnchors`; recorded as given. */
67
+ /** Already projected and capped by `describeDelta`; recorded as given. */
65
68
  readonly endAnchors?: readonly TraceTargetDescriptor[];
69
+ /** The other side of the same delta: what was on screen at the start and gone at the end. */
70
+ readonly goneAnchors?: readonly TraceTargetDescriptor[];
66
71
  /** How long the recorded run took to reach its end state, plus margin. */
67
72
  readonly endWaitMs?: number;
68
73
  }): ActionTrace | undefined;
@@ -84,4 +89,12 @@ export declare class TraceRecorder {
84
89
  private verbatim;
85
90
  private push;
86
91
  }
87
- //# sourceMappingURL=recorder.d.ts.map
92
+ /**
93
+ * Provenance as an entry stores it. Harness identity rather than screen
94
+ * content, so the redactor here is belt and braces: a title or agent name
95
+ * that happened to carry a registered secret is masked like any other
96
+ * recorded string, and provenance is not replay input, so masking it poisons
97
+ * nothing. A step compares its own provenance in this form to the entries
98
+ * the store holds.
99
+ */
100
+ export declare function recordedProvenance(provenance: TraceProvenance, redact: (text: string) => string): TraceProvenance;
@@ -24,9 +24,11 @@ export class TraceRecorder {
24
24
  actions = [];
25
25
  truncated = false;
26
26
  redact;
27
+ redactCut;
27
28
  maxActions;
28
29
  constructor(options) {
29
30
  this.redact = options.redact;
31
+ this.redactCut = options.redactCut;
30
32
  this.maxActions = Math.min(options.maxActions ?? MAX_TRACE_ACTIONS, MAX_TRACE_ACTIONS);
31
33
  }
32
34
  lastActionAt;
@@ -40,7 +42,7 @@ export class TraceRecorder {
40
42
  }
41
43
  /** Records one committed grammar action. */
42
44
  record(action) {
43
- this.push(this.toRecorded(action, describeAction(action, this.redact)));
45
+ this.push(this.toRecorded(action, describeAction(action, { redact: this.redact, redactCut: this.redactCut })));
44
46
  this.lastActionAt = Date.now();
45
47
  }
46
48
  /**
@@ -69,9 +71,10 @@ export class TraceRecorder {
69
71
  if (this.actions.length === 0)
70
72
  return undefined;
71
73
  const summary = bound(this.redact(conclusion.summary), MAX_TRACE_SUMMARY_CHARS);
72
- // Anchors are replay preconditions, so they follow the input rule: a path
73
- // the redactor alters carried a secret (a token in a query string) and
74
- // the trace is marked non-replayable rather than storing it verbatim.
74
+ // Locations are replay preconditions, so they follow the input rule: a
75
+ // path the redactor alters carried a secret (a token in a query string),
76
+ // and one too long to keep whole cannot be compared, so either marks the
77
+ // trace non-replayable rather than storing it bent.
75
78
  const startPath = this.anchorPath(conclusion.startPath);
76
79
  const endPath = this.anchorPath(conclusion.endPath);
77
80
  return {
@@ -80,21 +83,16 @@ export class TraceRecorder {
80
83
  name: conclusion.executor.name,
81
84
  ...(conclusion.executor.version === undefined ? {} : { version: conclusion.executor.version }),
82
85
  },
83
- recordedFor: {
84
- // Harness identity rather than screen content, so the redactor here is
85
- // belt and braces: a title that happened to carry a registered secret
86
- // is masked like any other recorded string, and provenance is not
87
- // replay input, so masking it poisons nothing.
88
- testId: bound(this.redact(conclusion.recordedFor.testId), MAX_TRACE_DESCRIPTOR_CHARS),
89
- targetId: bound(this.redact(conclusion.recordedFor.targetId), MAX_TRACE_DESCRIPTOR_CHARS),
90
- instructionDigest: conclusion.recordedFor.instructionDigest,
91
- },
86
+ recordedFor: recordedProvenance(conclusion.recordedFor, this.redact),
92
87
  summary: summary.trim() === '' ? 'step passed' : summary,
93
88
  ...(startPath === undefined ? {} : { startPath }),
94
89
  ...(endPath === undefined ? {} : { endPath }),
95
90
  ...(conclusion.endAnchors === undefined || conclusion.endAnchors.length === 0
96
91
  ? {}
97
92
  : { endAnchors: conclusion.endAnchors }),
93
+ ...(conclusion.goneAnchors === undefined || conclusion.goneAnchors.length === 0
94
+ ? {}
95
+ : { goneAnchors: conclusion.goneAnchors }),
98
96
  ...(conclusion.endWaitMs === undefined
99
97
  ? {}
100
98
  : { endWaitMs: Math.min(MAX_TRACE_END_WAIT_MS, Math.max(0, Math.round(conclusion.endWaitMs))) }),
@@ -102,12 +100,7 @@ export class TraceRecorder {
102
100
  };
103
101
  }
104
102
  anchorPath(value) {
105
- if (value === undefined || value === '')
106
- return undefined;
107
- const redacted = this.redact(value);
108
- if (redacted !== value)
109
- this.truncated = true;
110
- return bound(redacted, MAX_TRACE_DESCRIPTOR_CHARS);
103
+ return value === undefined || value === '' ? undefined : this.verbatim(value);
111
104
  }
112
105
  /**
113
106
  * Builds the stored variant for one action. The descriptor and the prose
@@ -117,13 +110,15 @@ export class TraceRecorder {
117
110
  * kept whole.
118
111
  */
119
112
  toRecorded(action, { target, summary, destination }) {
120
- // A targeted commit whose node yields no durable descriptor cannot be
121
- // re-found; the trace stays honest by poisoning instead of guessing.
113
+ // A targeted commit whose node yields no descriptor a replay could
114
+ // re-find it by (none at all, or an unnamed twin with no named row to
115
+ // tell it apart) cannot replay; the trace stays honest by poisoning
116
+ // instead of guessing.
122
117
  const require = (descriptor) => {
123
- if (descriptor !== undefined)
118
+ if (descriptor !== undefined && isRelocatableDescriptor(descriptor))
124
119
  return descriptor;
125
120
  this.truncated = true;
126
- return { role: 'unknown' };
121
+ return descriptor ?? { role: 'unknown' };
127
122
  };
128
123
  const requireTarget = () => require(target);
129
124
  if (isNodeAction(action))
@@ -240,4 +235,21 @@ function sameTarget(a, b) {
240
235
  a.position?.index === b.position?.index &&
241
236
  a.position?.of === b.position?.of);
242
237
  }
243
- //# sourceMappingURL=recorder.js.map
238
+ /**
239
+ * Provenance as an entry stores it. Harness identity rather than screen
240
+ * content, so the redactor here is belt and braces: a title or agent name
241
+ * that happened to carry a registered secret is masked like any other
242
+ * recorded string, and provenance is not replay input, so masking it poisons
243
+ * nothing. A step compares its own provenance in this form to the entries
244
+ * the store holds.
245
+ */
246
+ export function recordedProvenance(provenance, redact) {
247
+ return {
248
+ testId: bound(redact(provenance.testId), MAX_TRACE_DESCRIPTOR_CHARS),
249
+ targetId: bound(redact(provenance.targetId), MAX_TRACE_DESCRIPTOR_CHARS),
250
+ instructionDigest: provenance.instructionDigest,
251
+ ...(provenance.paramsDigest === undefined ? {} : { paramsDigest: provenance.paramsDigest }),
252
+ ...(provenance.callIndex === undefined ? {} : { callIndex: provenance.callIndex }),
253
+ ...(provenance.agent === undefined ? {} : { agent: bound(redact(provenance.agent), MAX_TRACE_DESCRIPTOR_CHARS) }),
254
+ };
255
+ }
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Recordings stored under a key the runner no longer derives.
3
+ *
4
+ * A key names everything that can change replay (`identity.ts`), so a new
5
+ * replay policy, an engine minor, or an agent's context changing turns every
6
+ * entry recorded before into a lookup miss, the same `no-entry` as a step
7
+ * that was never recorded. `cache.strict` lets a never-recorded step run
8
+ * live, so without this it would let a whole committed cache go quietly
9
+ * unused. The entries say which step they were recorded for
10
+ * (`TraceProvenance`), and a step whose own key misses while the store holds
11
+ * a recording made for exactly that step is stale, not new.
12
+ *
13
+ * Only the file store can be listed. The listing is read once per worker
14
+ * and target, on the first strict miss that asks, and kept: every entry
15
+ * written since has a key the run derives, so it is a hit rather than a
16
+ * candidate here.
17
+ */
18
+ import type { ResolvedCacheConfig } from '../config/resolve.ts';
19
+ import { FileCacheStore } from './store.ts';
20
+ import type { TraceProvenance } from './trace.ts';
21
+ export declare class StoredRecordings {
22
+ private readonly store;
23
+ /** Key hashes by `stepKey` of the step each entry was recorded for. */
24
+ private listing;
25
+ constructor(store: FileCacheStore);
26
+ /**
27
+ * The key hash of an entry recorded for `step` under a key other than
28
+ * `keyHash`, or undefined when there is none or the store cannot be
29
+ * listed. `step` is in the form an entry stores it (`recordedProvenance`).
30
+ * Only an entry that records the whole step counts: one written before the
31
+ * params, occurrence, and agent were recorded could belong to another call
32
+ * of the same instruction, and a read-write run that replays it completes
33
+ * it (`flushStagedTraces`). A truncated entry never replays under any key,
34
+ * so it is never the reason a step is stale.
35
+ */
36
+ underAnotherKey(keyHash: string, step: TraceProvenance): Promise<string | undefined>;
37
+ /** Every replayable entry that records its whole step, by `stepKey`. */
38
+ private list;
39
+ }
40
+ /**
41
+ * The listing `cache.strict` checks a run's misses against, for the file
42
+ * store only. Undefined when strict is off, the cache is off, or a custom
43
+ * `cache.store` replaced the file store, which `CacheStore` gives no way to
44
+ * list.
45
+ */
46
+ export declare function storedRecordingsFor(cache: ResolvedCacheConfig): StoredRecordings | undefined;
@@ -0,0 +1,89 @@
1
+ /**
2
+ * Recordings stored under a key the runner no longer derives.
3
+ *
4
+ * A key names everything that can change replay (`identity.ts`), so a new
5
+ * replay policy, an engine minor, or an agent's context changing turns every
6
+ * entry recorded before into a lookup miss, the same `no-entry` as a step
7
+ * that was never recorded. `cache.strict` lets a never-recorded step run
8
+ * live, so without this it would let a whole committed cache go quietly
9
+ * unused. The entries say which step they were recorded for
10
+ * (`TraceProvenance`), and a step whose own key misses while the store holds
11
+ * a recording made for exactly that step is stale, not new.
12
+ *
13
+ * Only the file store can be listed. The listing is read once per worker
14
+ * and target, on the first strict miss that asks, and kept: every entry
15
+ * written since has a key the run derives, so it is a hit rather than a
16
+ * candidate here.
17
+ */
18
+ import { FileCacheStore, MAX_CACHE_WIRE_BYTES } from './store.js';
19
+ export class StoredRecordings {
20
+ store;
21
+ /** Key hashes by `stepKey` of the step each entry was recorded for. */
22
+ listing;
23
+ constructor(store) {
24
+ this.store = store;
25
+ }
26
+ /**
27
+ * The key hash of an entry recorded for `step` under a key other than
28
+ * `keyHash`, or undefined when there is none or the store cannot be
29
+ * listed. `step` is in the form an entry stores it (`recordedProvenance`).
30
+ * Only an entry that records the whole step counts: one written before the
31
+ * params, occurrence, and agent were recorded could belong to another call
32
+ * of the same instruction, and a read-write run that replays it completes
33
+ * it (`flushStagedTraces`). A truncated entry never replays under any key,
34
+ * so it is never the reason a step is stale.
35
+ */
36
+ async underAnotherKey(keyHash, step) {
37
+ const key = stepKey(step);
38
+ if (key === undefined)
39
+ return undefined;
40
+ let listing;
41
+ try {
42
+ this.listing ??= this.list();
43
+ listing = await this.listing;
44
+ }
45
+ catch {
46
+ return undefined;
47
+ }
48
+ for (const candidate of listing.get(key) ?? []) {
49
+ if (candidate === keyHash)
50
+ continue;
51
+ // Listed once: an entry evicted since is no evidence.
52
+ const read = await this.store.read(candidate).catch(() => undefined);
53
+ if (read?.status === 'hit')
54
+ return candidate;
55
+ }
56
+ return undefined;
57
+ }
58
+ /** Every replayable entry that records its whole step, by `stepKey`. */
59
+ async list() {
60
+ const steps = new Map();
61
+ for (const keyHash of await this.store.keyHashes()) {
62
+ const read = await this.store.read(keyHash);
63
+ if (read.status !== 'hit' || read.entry.payload.truncated === true)
64
+ continue;
65
+ const key = read.entry.payload.recordedFor === undefined ? undefined : stepKey(read.entry.payload.recordedFor);
66
+ if (key !== undefined)
67
+ steps.set(key, [...(steps.get(key) ?? []), keyHash]);
68
+ }
69
+ return steps;
70
+ }
71
+ }
72
+ /**
73
+ * The listing `cache.strict` checks a run's misses against, for the file
74
+ * store only. Undefined when strict is off, the cache is off, or a custom
75
+ * `cache.store` replaced the file store, which `CacheStore` gives no way to
76
+ * list.
77
+ */
78
+ export function storedRecordingsFor(cache) {
79
+ if (cache.strict === false || cache.mode === 'off' || cache.store !== undefined)
80
+ return undefined;
81
+ return new StoredRecordings(new FileCacheStore({ directory: cache.dir, maxBytes: MAX_CACHE_WIRE_BYTES, writable: false }));
82
+ }
83
+ /** The whole step as one map key, or undefined when the provenance does not record all of it. */
84
+ function stepKey(step) {
85
+ const { testId, targetId, instructionDigest, paramsDigest, callIndex, agent } = step;
86
+ if (paramsDigest === undefined || callIndex === undefined || agent === undefined)
87
+ return undefined;
88
+ return JSON.stringify([testId, targetId, instructionDigest, paramsDigest, callIndex, agent]);
89
+ }
@@ -14,7 +14,7 @@
14
14
  * means — is exported so end anchors (`anchors.ts`) are checked by the same
15
15
  * rules and can never drift from relocation.
16
16
  */
17
- import type { SemanticNode } from '../engine/surface.ts';
17
+ import type { RedactedNode } from '../agent/observation.ts';
18
18
  import type { TracePosition, TraceTargetDescriptor } from './trace.ts';
19
19
  /**
20
20
  * Version of the replay/relocation policy, part of every cache key. Bumping
@@ -22,7 +22,7 @@ import type { TracePosition, TraceTargetDescriptor } from './trace.ts';
22
22
  * change, because an entry recorded under different rules could relocate to a
23
23
  * different node.
24
24
  */
25
- export declare const REPLAY_POLICY_VERSION = "conservative/5";
25
+ export declare const REPLAY_POLICY_VERSION = "conservative/6";
26
26
  /**
27
27
  * The share of the viewport a scrolled node must have covered when it was
28
28
  * addressed (`ScrollAction.spans`) to scroll as the viewport does once it
@@ -45,14 +45,16 @@ export type RelocationResult = {
45
45
  readonly candidates: readonly string[];
46
46
  };
47
47
  export type DescriptorField = keyof TraceTargetDescriptor;
48
- export interface DescriptorMatchOptions {
49
- readonly redact: (text: string) => string;
50
- }
51
- /** A node's descriptor projection alongside its per-observation id. */
52
- export interface DescribedNode {
53
- readonly id: string;
54
- readonly descriptor: TraceTargetDescriptor;
55
- }
48
+ /**
49
+ * Whether a descriptor can identify a node at all. Role or selector alone
50
+ * cannot: a wrong match acts on the wrong control, so such a descriptor is
51
+ * not relocatable and, as an anchor, would prove nothing. An anonymous one
52
+ * is relocatable by its recorded place only when that place means something
53
+ * on the next screen: it was the one unnamed control of its role, or it sits
54
+ * in a named container (`within`) that tells it from its twins. A place
55
+ * counted among twins with no container is an order, and rows that reorder
56
+ * would hand the action to the wrong one, so such a target hands off.
57
+ */
56
58
  export declare function isRelocatableDescriptor(descriptor: TraceTargetDescriptor): boolean;
57
59
  /**
58
60
  * The tiers a recorded descriptor is matched in, strictest first:
@@ -70,8 +72,6 @@ export declare function isRelocatableDescriptor(descriptor: TraceTargetDescripto
70
72
  export declare function descriptorTiers(descriptor: TraceTargetDescriptor): readonly TraceTargetDescriptor[];
71
73
  /** Every listed field the recording captured must be present and equal on the candidate. */
72
74
  export declare function fieldsEqual(recorded: TraceTargetDescriptor, candidate: TraceTargetDescriptor, fields: readonly DescriptorField[]): boolean;
73
- /** Projects every node of an observation the way the recorder described its targets. */
74
- export declare function describeNodes(nodes: ReadonlyMap<string, SemanticNode>, options: DescriptorMatchOptions): readonly DescribedNode[];
75
75
  /**
76
76
  * Relocates one descriptor against the nodes of a fresh observation, tier by
77
77
  * tier (`descriptorTiers`), each exactly-one-or-diverge. Ambiguity at any
@@ -81,12 +81,11 @@ export declare function describeNodes(nodes: ReadonlyMap<string, SemanticNode>,
81
81
  * same twins and noted which one it acted on, so the same count of twins
82
82
  * resolves to the same one; any other count diverges as before.
83
83
  */
84
- export declare function relocateDescriptor(descriptor: TraceTargetDescriptor, nodes: ReadonlyMap<string, SemanticNode>, options: DescriptorMatchOptions): RelocationResult;
84
+ export declare function relocateDescriptor(descriptor: TraceTargetDescriptor, nodes: ReadonlyMap<string, RedactedNode>): RelocationResult;
85
85
  /**
86
86
  * Where `node` stands among the controls its own description matches on the
87
87
  * screen it was acted on, or undefined when the description already names it
88
88
  * alone. Recorded with the target so a replay can tell one "Set up" button per
89
89
  * card apart without an app change; a distinct label makes it unnecessary.
90
90
  */
91
- export declare function describePosition(node: SemanticNode, within: string | undefined, nodes: ReadonlyMap<string, SemanticNode>, options: DescriptorMatchOptions): TracePosition | undefined;
92
- //# sourceMappingURL=relocate.d.ts.map
91
+ export declare function describePosition(node: RedactedNode, within: string | undefined, nodes: ReadonlyMap<string, RedactedNode>): TracePosition | undefined;
@@ -21,7 +21,7 @@ import { containerKey, describeTarget, parentsOf } from '../agent/actions.js';
21
21
  * change, because an entry recorded under different rules could relocate to a
22
22
  * different node.
23
23
  */
24
- export const REPLAY_POLICY_VERSION = 'conservative/5';
24
+ export const REPLAY_POLICY_VERSION = 'conservative/6';
25
25
  /**
26
26
  * The share of the viewport a scrolled node must have covered when it was
27
27
  * addressed (`ScrollAction.spans`) to scroll as the viewport does once it
@@ -33,18 +33,13 @@ export const MAIN_LIST_SHARE = 0.5;
33
33
  const IDENTITY_FIELDS = ['role', 'name', 'testId', 'placeholder', 'inputPurpose'];
34
34
  /** Text is identity too when neither a test id nor a name was recorded. */
35
35
  const IDENTITY_FIELDS_WITH_TEXT = [...IDENTITY_FIELDS, 'text'];
36
- /**
37
- * Whether a descriptor can identify a node at all. Role or selector alone
38
- * cannot: a wrong match acts on the wrong control, so such a descriptor is
39
- * not relocatable and, as an anchor, would prove nothing.
40
- */
41
36
  /**
42
37
  * A descriptor with nothing to identify the control by: no test id, name,
43
- * text, or placeholder, only a role. A form built without labels is made of
44
- * these. Such a descriptor relocates by its place among the unnamed
45
- * controls of its kind, so it is relocatable only once a position was
46
- * recorded for it, and it is matched strictly (`fieldsIdentical`): an
47
- * unnamed textbox must never stand in for a named one.
38
+ * text, or placeholder, only a role. An icon button and a form built
39
+ * without labels are made of these. Such a descriptor relocates by its place
40
+ * among the unnamed controls of its kind, and it is matched strictly
41
+ * (`fieldsIdentical`): an unnamed textbox must never stand in for a named
42
+ * one.
48
43
  */
49
44
  function isAnonymous(descriptor) {
50
45
  return (descriptor.testId === undefined &&
@@ -52,8 +47,21 @@ function isAnonymous(descriptor) {
52
47
  descriptor.text === undefined &&
53
48
  descriptor.placeholder === undefined);
54
49
  }
50
+ /**
51
+ * Whether a descriptor can identify a node at all. Role or selector alone
52
+ * cannot: a wrong match acts on the wrong control, so such a descriptor is
53
+ * not relocatable and, as an anchor, would prove nothing. An anonymous one
54
+ * is relocatable by its recorded place only when that place means something
55
+ * on the next screen: it was the one unnamed control of its role, or it sits
56
+ * in a named container (`within`) that tells it from its twins. A place
57
+ * counted among twins with no container is an order, and rows that reorder
58
+ * would hand the action to the wrong one, so such a target hands off.
59
+ */
55
60
  export function isRelocatableDescriptor(descriptor) {
56
- return isAnonymous(descriptor) ? descriptor.role !== undefined && descriptor.position !== undefined : true;
61
+ if (!isAnonymous(descriptor))
62
+ return true;
63
+ const { position } = descriptor;
64
+ return descriptor.role !== undefined && position !== undefined && (position.of === 1 || descriptor.within !== undefined);
57
65
  }
58
66
  /** The semantic tier of a descriptor: every identity field but the test id. */
59
67
  function withoutTestId(descriptor) {
@@ -102,17 +110,17 @@ function fieldsIdentical(recorded, candidate, fields) {
102
110
  */
103
111
  const projections = new WeakMap();
104
112
  /** Projects every node of an observation the way the recorder described its targets. */
105
- export function describeNodes(nodes, options) {
113
+ function describeNodes(nodes) {
106
114
  const cached = projections.get(nodes);
107
- if (cached !== undefined && cached.redact === options.redact)
108
- return cached.described;
115
+ if (cached !== undefined)
116
+ return cached;
109
117
  const described = [];
110
118
  for (const [id, node] of nodes) {
111
- const descriptor = describeTarget(node, options.redact);
119
+ const descriptor = describeTarget(node);
112
120
  if (descriptor !== undefined)
113
121
  described.push({ id, descriptor });
114
122
  }
115
- projections.set(nodes, { redact: options.redact, described });
123
+ projections.set(nodes, described);
116
124
  return described;
117
125
  }
118
126
  /**
@@ -124,8 +132,8 @@ export function describeNodes(nodes, options) {
124
132
  * same twins and noted which one it acted on, so the same count of twins
125
133
  * resolves to the same one; any other count diverges as before.
126
134
  */
127
- export function relocateDescriptor(descriptor, nodes, options) {
128
- const matches = matchingIds(descriptor, nodes, options);
135
+ export function relocateDescriptor(descriptor, nodes) {
136
+ const matches = matchingIds(descriptor, nodes);
129
137
  if (matches.length === 0)
130
138
  return { kind: 'failed', failure: 'target-not-found' };
131
139
  const { position } = descriptor;
@@ -146,8 +154,8 @@ export function relocateDescriptor(descriptor, nodes, options) {
146
154
  * matches. The recorder uses the same projection to notice, before it writes a
147
155
  * target, that the description alone would not tell the target from its twins.
148
156
  */
149
- function matchingIds(descriptor, nodes, options) {
150
- const candidates = describeNodes(nodes, options);
157
+ function matchingIds(descriptor, nodes) {
158
+ const candidates = describeNodes(nodes);
151
159
  // A recorded container key must hold: the same "Delete" in another row is
152
160
  // a different control. Checked against the tree the candidates came from,
153
161
  // never guessed.
@@ -155,7 +163,7 @@ function matchingIds(descriptor, nodes, options) {
155
163
  ? candidates
156
164
  : (() => {
157
165
  const parents = parentsOf(nodes);
158
- return candidates.filter((candidate) => containerKey(candidate.id, nodes, parents, options.redact) === descriptor.within);
166
+ return candidates.filter((candidate) => containerKey(candidate.id, nodes, parents) === descriptor.within);
159
167
  })();
160
168
  for (const tier of descriptorTiers(descriptor)) {
161
169
  const matches = tierMatches(tier, keyed);
@@ -183,8 +191,8 @@ const MAX_POSITIONED_TWINS = 1000;
183
191
  * alone. Recorded with the target so a replay can tell one "Set up" button per
184
192
  * card apart without an app change; a distinct label makes it unnecessary.
185
193
  */
186
- export function describePosition(node, within, nodes, options) {
187
- const described = describeTarget(node, options.redact);
194
+ export function describePosition(node, within, nodes) {
195
+ const described = describeTarget(node);
188
196
  if (described === undefined || (described.role === undefined && isAnonymous(described)))
189
197
  return undefined;
190
198
  // An anonymous target has no identity to match alone; its position is what
@@ -192,10 +200,9 @@ export function describePosition(node, within, nodes, options) {
192
200
  // it is the only one, and described with a placeholder position to do so.
193
201
  const anonymous = isAnonymous(described);
194
202
  const probe = { ...described, ...(within === undefined ? {} : { within }), ...(anonymous ? { position: { index: 0, of: 1 } } : {}) };
195
- const ids = matchingIds(probe, nodes, options);
203
+ const ids = matchingIds(probe, nodes);
196
204
  if (ids.length < (anonymous ? 1 : 2) || ids.length > MAX_POSITIONED_TWINS)
197
205
  return undefined;
198
206
  const index = ids.indexOf(node.ref.id);
199
207
  return index === -1 ? undefined : { index, of: ids.length };
200
208
  }
201
- //# sourceMappingURL=relocate.js.map
@@ -4,44 +4,42 @@
4
4
  * The replay precondition asks "is the app on the screen this recording
5
5
  * began on", and the postcondition "did we land where the recording landed".
6
6
  * A URL answers neither directly: it carries the id the app minted for this
7
- * run's record, the slug of the record the test happened to open, a search
8
- * term in the query, a tracking parameter, a fragment. All of that changes
9
- * between two visits to the same screen, and none of it is the screen.
7
+ * run's record, a cache buster, a session token, a fragment. All of that
8
+ * changes between two visits to the same screen, and none of it is the
9
+ * screen.
10
10
  *
11
- * So a location is reduced to its route: the pathname's segments, with every
12
- * segment that looks minted per record (a uuid, a hex or digit run, a long
13
- * token mixing letters and digits, text with whitespace) replaced by `:id`;
14
- * the query and the fragment dropped, except that an app routing in the
15
- * fragment (`#/companies/1`) routes by that path. A value the call marked
16
- * with `unique()` needs no rule here: the recording spells it as a
11
+ * So a location is reduced to its route: the origin it is on, the pathname's
12
+ * segments, and the query's parameters, with every segment or parameter
13
+ * value that looks minted per record (a uuid, a hex or digit run, a long
14
+ * token mixing letters and digits, a prefixed record id, text with
15
+ * whitespace) replaced by `:id`.
16
+ * Every other query value is part of the screen: `?mode=unsafe` is not
17
+ * `?mode=safe`, and `?tab=notes` shows other controls than no tab. The
18
+ * fragment is dropped, except that an app routing in the fragment
19
+ * (`#/companies/1`) routes by that path and its query. A value the call
20
+ * marked with `unique()` needs no rule here: the recording spells it as a
17
21
  * placeholder in every spelling a URL gives it, its slug included
18
22
  * (`cache/template.ts`), and replay fills in this run's value on both sides.
19
23
  *
20
- * Two routes that still differ in exactly one segment are `undecided`: a slug
21
- * of a record the runner never saw the value of reads as two literals, and
22
- * only the screen can say whether they are the same page. At the end of a
23
- * step the recorded anchors can, because they are the step's own effect. At
24
- * the start nothing recorded is specific to the screen (the controls a start
25
- * screen shows are mostly the app's header and sidebar, shared by every
26
- * screen), so an undecided start is a miss. A device engine reports a screen
27
- * title in place of a URL, which is already a route and compares as itself.
24
+ * The origin is relative to the app (`appLocation`): a location on the app's
25
+ * own origin is kept as its path, so a recording made against one deployment
26
+ * of the app replays on another that shares its `app.identity`, while a
27
+ * screen on any other origin keeps its origin and is another route.
28
+ *
29
+ * Two routes are the same screen only when they read alike. A literal that
30
+ * differs, a slug the runner never saw the value of, is another screen at
31
+ * both ends of a step: nothing recorded can tell a record's slug from a
32
+ * route word, and a screen that looks alike on another route (a settings
33
+ * page and a profile page sharing one layout) is exactly where a wrong link
34
+ * lands. A device engine reports a screen title in place of a URL, which is
35
+ * already a route and compares as itself.
28
36
  */
29
- export type Route = {
30
- readonly kind: 'url';
31
- readonly segments: readonly string[];
32
- } | {
33
- readonly kind: 'opaque';
34
- readonly location: string;
35
- };
36
- export type RouteVerdict = 'same' | 'different' | 'undecided';
37
- /** The route of a location. */
38
- export declare function routeOf(location: string): Route;
39
- /** A route as one line, for tests and diagnostics: `/companies/:id`, or the opaque location. */
40
- export declare function routeKey(route: Route): string;
41
37
  /**
42
- * Whether two routes are the same screen: `same` when they read alike,
43
- * `undecided` when routes of one depth differ in exactly one segment, which
44
- * the screen must settle, and `different` otherwise.
38
+ * A location as the cache compares it: a URL on the app's own origin as its
39
+ * path, query, and fragment, so a recording follows the app to another
40
+ * deployment of it; anything else (another origin, a device screen title)
41
+ * as it is.
45
42
  */
46
- export declare function compareRoutes(recorded: Route, live: Route): RouteVerdict;
47
- //# sourceMappingURL=route.d.ts.map
43
+ export declare function appLocation(location: string, appOrigin: string | undefined): string;
44
+ /** Whether two locations name the same screen: one origin, and segments and query that read alike. */
45
+ export declare function sameRoute(recorded: string, live: string): boolean;