e2e 0.15.2 → 0.16.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 (979) 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 +22 -5
  6. package/dist/agent/action-dispatcher.d.ts +0 -1
  7. package/dist/agent/action-dispatcher.js +0 -1
  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 +0 -1
  11. package/dist/agent/actions.js +0 -1
  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 +0 -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 +0 -1
  53. package/dist/agent/observation-feed.js +0 -1
  54. package/dist/agent/observation.d.ts +0 -1
  55. package/dist/agent/observation.js +0 -1
  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 +0 -1
  63. package/dist/agent/point-tap.js +0 -1
  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 +0 -1
  75. package/dist/agent/replay.js +0 -1
  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 +0 -1
  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 +0 -1
  87. package/dist/agent/step-cache.js +0 -1
  88. package/dist/agent/tool-loop.d.ts +0 -1
  89. package/dist/agent/tool-loop.js +0 -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 +0 -1
  101. package/dist/cache/anchors.js +0 -1
  102. package/dist/cache/context.d.ts +0 -1
  103. package/dist/cache/context.js +0 -1
  104. package/dist/cache/decide.d.ts +0 -1
  105. package/dist/cache/decide.js +0 -1
  106. package/dist/cache/identity.d.ts +0 -1
  107. package/dist/cache/identity.js +0 -1
  108. package/dist/cache/recorder.d.ts +0 -1
  109. package/dist/cache/recorder.js +0 -1
  110. package/dist/cache/relocate.d.ts +0 -1
  111. package/dist/cache/relocate.js +0 -1
  112. package/dist/cache/route.d.ts +0 -1
  113. package/dist/cache/route.js +0 -1
  114. package/dist/cache/store.d.ts +0 -1
  115. package/dist/cache/store.js +0 -1
  116. package/dist/cache/template.d.ts +0 -1
  117. package/dist/cache/template.js +0 -1
  118. package/dist/cache/trace.d.ts +0 -1
  119. package/dist/cache/trace.js +0 -1
  120. package/dist/cli/bin.d.ts +0 -1
  121. package/dist/cli/bin.js +0 -1
  122. package/dist/cli/cache.d.ts +0 -1
  123. package/dist/cli/cache.js +0 -1
  124. package/dist/cli/docs-url.d.ts +0 -1
  125. package/dist/cli/docs-url.js +0 -1
  126. package/dist/cli/feedback.d.ts +0 -1
  127. package/dist/cli/feedback.js +0 -1
  128. package/dist/cli/guide.d.ts +0 -1
  129. package/dist/cli/guide.js +0 -1
  130. package/dist/cli/index.d.ts +0 -1
  131. package/dist/cli/index.js +2 -3
  132. package/dist/cli/init/agent-skill.d.ts +0 -1
  133. package/dist/cli/init/agent-skill.js +0 -1
  134. package/dist/cli/init/engines.d.ts +0 -1
  135. package/dist/cli/init/engines.js +0 -1
  136. package/dist/cli/init/gateways.d.ts +0 -1
  137. package/dist/cli/init/gateways.js +0 -1
  138. package/dist/cli/init/mcp-config.d.ts +0 -1
  139. package/dist/cli/init/mcp-config.js +0 -1
  140. package/dist/cli/init/package.d.ts +0 -1
  141. package/dist/cli/init/package.js +0 -1
  142. package/dist/cli/init/scaffold.d.ts +0 -1
  143. package/dist/cli/init/scaffold.js +0 -1
  144. package/dist/cli/init/sibling-versions.json +1 -1
  145. package/dist/cli/init/versions.d.ts +0 -1
  146. package/dist/cli/init/versions.js +0 -1
  147. package/dist/cli/init.d.ts +0 -1
  148. package/dist/cli/init.js +0 -1
  149. package/dist/cli/mcp.d.ts +9 -2
  150. package/dist/cli/mcp.js +14 -2
  151. package/dist/cli/signals.d.ts +0 -1
  152. package/dist/cli/signals.js +0 -1
  153. package/dist/cli/skill.d.ts +0 -1
  154. package/dist/cli/skill.js +0 -1
  155. package/dist/cli/telemetry.d.ts +0 -1
  156. package/dist/cli/telemetry.js +1 -2
  157. package/dist/cli/wordmark.d.ts +0 -1
  158. package/dist/cli/wordmark.js +0 -1
  159. package/dist/collect/collect.d.ts +0 -1
  160. package/dist/collect/collect.js +3 -2
  161. package/dist/collect/registry.d.ts +6 -3
  162. package/dist/collect/registry.js +31 -14
  163. package/dist/collect/select.d.ts +0 -1
  164. package/dist/collect/select.js +0 -1
  165. package/dist/config/agent.d.ts +0 -1
  166. package/dist/config/agent.js +0 -1
  167. package/dist/config/app.d.ts +0 -1
  168. package/dist/config/app.js +0 -1
  169. package/dist/config/command.d.ts +0 -1
  170. package/dist/config/command.js +0 -1
  171. package/dist/config/diagnose.d.ts +0 -1
  172. package/dist/config/diagnose.js +0 -1
  173. package/dist/config/esm-hooks.d.ts +0 -1
  174. package/dist/config/esm-hooks.js +0 -1
  175. package/dist/config/load.d.ts +0 -1
  176. package/dist/config/load.js +0 -1
  177. package/dist/config/resolve.d.ts +0 -1
  178. package/dist/config/resolve.js +0 -1
  179. package/dist/config/secrets.d.ts +0 -1
  180. package/dist/config/secrets.js +0 -1
  181. package/dist/config/targets.d.ts +0 -1
  182. package/dist/config/targets.js +0 -1
  183. package/dist/config/validate.d.ts +0 -1
  184. package/dist/config/validate.js +0 -1
  185. package/dist/engine/contract.d.ts +0 -1
  186. package/dist/engine/contract.js +0 -1
  187. package/dist/engine/index.d.ts +1 -2
  188. package/dist/engine/index.js +4 -4
  189. package/dist/engine/manifest.d.ts +0 -1
  190. package/dist/engine/manifest.js +0 -1
  191. package/dist/engine/recording.d.ts +0 -1
  192. package/dist/engine/recording.js +0 -1
  193. package/dist/engine/resolve.d.ts +0 -1
  194. package/dist/engine/resolve.js +0 -1
  195. package/dist/engine/session.d.ts +0 -1
  196. package/dist/engine/session.js +0 -1
  197. package/dist/engine/surface.d.ts +0 -1
  198. package/dist/engine/surface.js +0 -1
  199. package/dist/engine/timing.d.ts +0 -1
  200. package/dist/engine/timing.js +0 -1
  201. package/dist/expect/async.d.ts +0 -1
  202. package/dist/expect/async.js +99 -58
  203. package/dist/expect/attempt.d.ts +0 -1
  204. package/dist/expect/attempt.js +0 -1
  205. package/dist/expect/index.d.ts +0 -1
  206. package/dist/expect/index.js +0 -1
  207. package/dist/expect/poll.d.ts +0 -1
  208. package/dist/expect/poll.js +0 -1
  209. package/dist/expect/soft.d.ts +0 -1
  210. package/dist/expect/soft.js +0 -1
  211. package/dist/expect/values.d.ts +0 -1
  212. package/dist/expect/values.js +0 -1
  213. package/dist/explore/body.d.ts +0 -1
  214. package/dist/explore/body.js +0 -1
  215. package/dist/explore/executor.d.ts +0 -1
  216. package/dist/explore/executor.js +0 -1
  217. package/dist/explore/index.d.ts +0 -1
  218. package/dist/explore/index.js +16 -2
  219. package/dist/explore/plan.d.ts +0 -1
  220. package/dist/explore/plan.js +0 -1
  221. package/dist/explore/progress.d.ts +0 -1
  222. package/dist/explore/progress.js +0 -1
  223. package/dist/explore/state.d.ts +0 -1
  224. package/dist/explore/state.js +0 -1
  225. package/dist/index.d.ts +0 -1
  226. package/dist/index.js +0 -1
  227. package/dist/internal/ai-trace.d.ts +0 -1
  228. package/dist/internal/ai-trace.js +0 -1
  229. package/dist/internal/atomic-write.d.ts +0 -1
  230. package/dist/internal/atomic-write.js +0 -1
  231. package/dist/internal/brands.d.ts +0 -1
  232. package/dist/internal/brands.js +0 -1
  233. package/dist/internal/debug.d.ts +0 -1
  234. package/dist/internal/debug.js +0 -1
  235. package/dist/internal/env.d.ts +0 -1
  236. package/dist/internal/env.js +0 -1
  237. package/dist/internal/errors.d.ts +0 -1
  238. package/dist/internal/errors.js +0 -1
  239. package/dist/internal/geometry.d.ts +0 -1
  240. package/dist/internal/geometry.js +0 -1
  241. package/dist/internal/git.d.ts +0 -1
  242. package/dist/internal/git.js +0 -1
  243. package/dist/internal/globs.d.ts +0 -1
  244. package/dist/internal/globs.js +0 -1
  245. package/dist/internal/ids.d.ts +0 -1
  246. package/dist/internal/ids.js +0 -1
  247. package/dist/internal/json-value.d.ts +0 -1
  248. package/dist/internal/json-value.js +0 -1
  249. package/dist/internal/keys.d.ts +0 -1
  250. package/dist/internal/keys.js +0 -1
  251. package/dist/internal/node-version.d.ts +0 -1
  252. package/dist/internal/node-version.js +0 -1
  253. package/dist/internal/objects.d.ts +0 -1
  254. package/dist/internal/objects.js +0 -1
  255. package/dist/internal/options.d.ts +0 -1
  256. package/dist/internal/options.js +0 -1
  257. package/dist/internal/package-manager.d.ts +0 -1
  258. package/dist/internal/package-manager.js +0 -1
  259. package/dist/internal/package-version.d.ts +0 -1
  260. package/dist/internal/package-version.js +0 -1
  261. package/dist/internal/paths.d.ts +0 -1
  262. package/dist/internal/paths.js +0 -1
  263. package/dist/internal/realm-slot.d.ts +0 -1
  264. package/dist/internal/realm-slot.js +0 -1
  265. package/dist/internal/recording-modes.d.ts +0 -1
  266. package/dist/internal/recording-modes.js +0 -1
  267. package/dist/internal/redact.d.ts +0 -1
  268. package/dist/internal/redact.js +0 -1
  269. package/dist/internal/regexp.d.ts +0 -1
  270. package/dist/internal/regexp.js +0 -1
  271. package/dist/internal/roles.d.ts +0 -1
  272. package/dist/internal/roles.js +0 -1
  273. package/dist/internal/skip.d.ts +0 -1
  274. package/dist/internal/skip.js +0 -1
  275. package/dist/internal/source.d.ts +0 -1
  276. package/dist/internal/source.js +0 -1
  277. package/dist/internal/standard-schema.d.ts +0 -1
  278. package/dist/internal/standard-schema.js +0 -1
  279. package/dist/internal/suggest.d.ts +0 -1
  280. package/dist/internal/suggest.js +0 -1
  281. package/dist/internal/text.d.ts +8 -1
  282. package/dist/internal/text.js +13 -2
  283. package/dist/internal/time.d.ts +0 -1
  284. package/dist/internal/time.js +0 -1
  285. package/dist/internal/urls.d.ts +0 -1
  286. package/dist/internal/urls.js +0 -1
  287. package/dist/internal/vcs.d.ts +0 -1
  288. package/dist/internal/vcs.js +0 -1
  289. package/dist/internal/zip.d.ts +0 -1
  290. package/dist/internal/zip.js +0 -1
  291. package/dist/locator/engine.d.ts +0 -1
  292. package/dist/locator/engine.js +0 -1
  293. package/dist/locator/expression.d.ts +0 -1
  294. package/dist/locator/expression.js +0 -1
  295. package/dist/locator/screen.d.ts +0 -1
  296. package/dist/locator/screen.js +0 -1
  297. package/dist/mcp/catalog.d.ts +4 -1
  298. package/dist/mcp/catalog.js +2 -3
  299. package/dist/mcp/config.d.ts +0 -1
  300. package/dist/mcp/config.js +0 -1
  301. package/dist/mcp/recording.d.ts +0 -1
  302. package/dist/mcp/recording.js +0 -1
  303. package/dist/mcp/server.d.ts +8 -1
  304. package/dist/mcp/server.js +8 -5
  305. package/dist/mcp/session.d.ts +4 -2
  306. package/dist/mcp/session.js +43 -21
  307. package/dist/mcp/sessions.d.ts +2 -1
  308. package/dist/mcp/sessions.js +5 -2
  309. package/dist/mcp/tools.d.ts +7 -6
  310. package/dist/mcp/tools.js +36 -11
  311. package/dist/mcp/usage.d.ts +61 -0
  312. package/dist/mcp/usage.js +73 -0
  313. package/dist/oauth/callback-server.d.ts +0 -1
  314. package/dist/oauth/callback-server.js +0 -1
  315. package/dist/oauth/chatgpt.d.ts +0 -1
  316. package/dist/oauth/chatgpt.js +0 -1
  317. package/dist/oauth/cli.d.ts +0 -1
  318. package/dist/oauth/cli.js +0 -1
  319. package/dist/oauth/copilot.d.ts +0 -1
  320. package/dist/oauth/copilot.js +0 -1
  321. package/dist/oauth/device-code.d.ts +0 -1
  322. package/dist/oauth/device-code.js +0 -1
  323. package/dist/oauth/errors.d.ts +0 -1
  324. package/dist/oauth/errors.js +0 -1
  325. package/dist/oauth/fetch.d.ts +0 -1
  326. package/dist/oauth/fetch.js +0 -1
  327. package/dist/oauth/grok.d.ts +0 -1
  328. package/dist/oauth/grok.js +0 -1
  329. package/dist/oauth/jwt.d.ts +0 -1
  330. package/dist/oauth/jwt.js +0 -1
  331. package/dist/oauth/login.d.ts +0 -1
  332. package/dist/oauth/login.js +0 -1
  333. package/dist/oauth/models.d.ts +0 -1
  334. package/dist/oauth/models.js +0 -1
  335. package/dist/oauth/pkce.d.ts +0 -1
  336. package/dist/oauth/pkce.js +0 -1
  337. package/dist/oauth/providers/github-copilot.d.ts +0 -1
  338. package/dist/oauth/providers/github-copilot.js +10 -3
  339. package/dist/oauth/providers/openai.d.ts +0 -1
  340. package/dist/oauth/providers/openai.js +1 -2
  341. package/dist/oauth/providers/xai.d.ts +0 -1
  342. package/dist/oauth/providers/xai.js +0 -1
  343. package/dist/oauth/providers.d.ts +0 -1
  344. package/dist/oauth/providers.js +0 -1
  345. package/dist/oauth/sse.d.ts +0 -1
  346. package/dist/oauth/sse.js +0 -1
  347. package/dist/oauth/store.d.ts +0 -1
  348. package/dist/oauth/store.js +0 -1
  349. package/dist/oauth/token-endpoint.d.ts +0 -1
  350. package/dist/oauth/token-endpoint.js +0 -1
  351. package/dist/oauth/types.d.ts +0 -1
  352. package/dist/oauth/types.js +0 -1
  353. package/dist/params.d.ts +0 -1
  354. package/dist/params.js +0 -1
  355. package/dist/report/build.d.ts +0 -1
  356. package/dist/report/build.js +0 -1
  357. package/dist/report/builtin.d.ts +0 -1
  358. package/dist/report/builtin.js +0 -1
  359. package/dist/report/code-frame.d.ts +0 -1
  360. package/dist/report/code-frame.js +0 -1
  361. package/dist/report/debug-steps.d.ts +0 -1
  362. package/dist/report/debug-steps.js +0 -1
  363. package/dist/report/explore-text.d.ts +0 -1
  364. package/dist/report/explore-text.js +0 -1
  365. package/dist/report/failure-text.d.ts +0 -1
  366. package/dist/report/failure-text.js +0 -1
  367. package/dist/report/format.d.ts +0 -1
  368. package/dist/report/format.js +0 -1
  369. package/dist/report/json.d.ts +0 -1
  370. package/dist/report/json.js +0 -1
  371. package/dist/report/junit.d.ts +0 -1
  372. package/dist/report/junit.js +0 -1
  373. package/dist/report/list-explore.d.ts +0 -1
  374. package/dist/report/list-explore.js +0 -1
  375. package/dist/report/list-model.d.ts +0 -1
  376. package/dist/report/list-model.js +0 -1
  377. package/dist/report/list-steps.d.ts +0 -1
  378. package/dist/report/list-steps.js +0 -1
  379. package/dist/report/list.d.ts +0 -1
  380. package/dist/report/list.js +0 -1
  381. package/dist/report/live-window.d.ts +0 -1
  382. package/dist/report/live-window.js +0 -1
  383. package/dist/report/markdown-text.d.ts +0 -1
  384. package/dist/report/markdown-text.js +0 -1
  385. package/dist/report/markdown.d.ts +0 -1
  386. package/dist/report/markdown.js +0 -1
  387. package/dist/report/outcome.d.ts +0 -1
  388. package/dist/report/outcome.js +0 -1
  389. package/dist/report/repeats.d.ts +0 -1
  390. package/dist/report/repeats.js +0 -1
  391. package/dist/report/running-tree.d.ts +0 -1
  392. package/dist/report/running-tree.js +0 -1
  393. package/dist/report/write.d.ts +0 -1
  394. package/dist/report/write.js +0 -1
  395. package/dist/run/app-ports.d.ts +0 -1
  396. package/dist/run/app-ports.js +0 -1
  397. package/dist/run/artifacts.d.ts +0 -1
  398. package/dist/run/artifacts.js +0 -1
  399. package/dist/run/budget.d.ts +0 -1
  400. package/dist/run/budget.js +0 -1
  401. package/dist/run/declared-processes.d.ts +0 -1
  402. package/dist/run/declared-processes.js +0 -1
  403. package/dist/run/events.d.ts +0 -1
  404. package/dist/run/events.js +0 -1
  405. package/dist/run/execute.d.ts +0 -1
  406. package/dist/run/execute.js +6 -5
  407. package/dist/run/extended-fixtures.d.ts +0 -1
  408. package/dist/run/extended-fixtures.js +0 -1
  409. package/dist/run/failure-evidence.d.ts +0 -1
  410. package/dist/run/failure-evidence.js +0 -1
  411. package/dist/run/fixture-recording.d.ts +0 -1
  412. package/dist/run/fixture-recording.js +0 -1
  413. package/dist/run/fixtures.d.ts +0 -1
  414. package/dist/run/fixtures.js +0 -1
  415. package/dist/run/in-process.d.ts +0 -1
  416. package/dist/run/in-process.js +0 -1
  417. package/dist/run/last-run.d.ts +0 -1
  418. package/dist/run/last-run.js +0 -1
  419. package/dist/run/managed-process.d.ts +0 -1
  420. package/dist/run/managed-process.js +0 -1
  421. package/dist/run/output.d.ts +0 -1
  422. package/dist/run/output.js +0 -1
  423. package/dist/run/process-pool.d.ts +0 -1
  424. package/dist/run/process-pool.js +0 -1
  425. package/dist/run/provision.d.ts +0 -1
  426. package/dist/run/provision.js +0 -1
  427. package/dist/run/realm.d.ts +2 -1
  428. package/dist/run/realm.js +1 -2
  429. package/dist/run/records.d.ts +0 -1
  430. package/dist/run/records.js +0 -1
  431. package/dist/run/retry.d.ts +0 -1
  432. package/dist/run/retry.js +0 -1
  433. package/dist/run/runner.d.ts +2 -1
  434. package/dist/run/runner.js +1 -2
  435. package/dist/run/scheduler.d.ts +0 -1
  436. package/dist/run/scheduler.js +0 -1
  437. package/dist/run/secrecy.d.ts +15 -1
  438. package/dist/run/secrecy.js +27 -2
  439. package/dist/run/serial.d.ts +0 -1
  440. package/dist/run/serial.js +0 -1
  441. package/dist/run/sessions.d.ts +0 -1
  442. package/dist/run/sessions.js +0 -1
  443. package/dist/run/standalone.d.ts +0 -1
  444. package/dist/run/standalone.js +3 -3
  445. package/dist/run/steps.d.ts +2 -3
  446. package/dist/run/steps.js +4 -2
  447. package/dist/run/trace-redaction.d.ts +0 -1
  448. package/dist/run/trace-redaction.js +0 -1
  449. package/dist/run/unit-runner.d.ts +0 -1
  450. package/dist/run/unit-runner.js +0 -1
  451. package/dist/run/units.d.ts +0 -1
  452. package/dist/run/units.js +0 -1
  453. package/dist/run/worker/entry.d.ts +0 -1
  454. package/dist/run/worker/entry.js +2 -3
  455. package/dist/run/worker/handle.d.ts +0 -1
  456. package/dist/run/worker/handle.js +0 -1
  457. package/dist/run/worker/protocol.d.ts +0 -1
  458. package/dist/run/worker/protocol.js +0 -1
  459. package/dist/run/worker/session.d.ts +0 -1
  460. package/dist/run/worker/session.js +0 -1
  461. package/dist/run/worker-models.d.ts +0 -1
  462. package/dist/run/worker-models.js +0 -1
  463. package/dist/secrets.d.ts +0 -1
  464. package/dist/secrets.js +0 -1
  465. package/dist/telemetry/checkout.d.ts +0 -1
  466. package/dist/telemetry/checkout.js +0 -1
  467. package/dist/telemetry/environment.d.ts +0 -1
  468. package/dist/telemetry/environment.js +0 -1
  469. package/dist/telemetry/events.d.ts +26 -10
  470. package/dist/telemetry/events.js +107 -13
  471. package/dist/telemetry/failure-kind.d.ts +0 -1
  472. package/dist/telemetry/failure-kind.js +0 -1
  473. package/dist/telemetry/posthog.d.ts +0 -1
  474. package/dist/telemetry/posthog.js +0 -1
  475. package/dist/telemetry/project.d.ts +0 -1
  476. package/dist/telemetry/project.js +0 -1
  477. package/dist/telemetry/store.d.ts +0 -1
  478. package/dist/telemetry/store.js +0 -1
  479. package/dist/telemetry/telemetry.d.ts +19 -8
  480. package/dist/telemetry/telemetry.js +26 -9
  481. package/dist/telemetry/token.d.ts +0 -1
  482. package/dist/telemetry/token.js +0 -1
  483. package/dist/types.d.ts +25 -23
  484. package/dist/types.js +0 -1
  485. package/docs/executors.mdx +1 -1
  486. package/docs/migrate/playwright.mdx +4 -1
  487. package/docs/mobile.mdx +40 -0
  488. package/docs/reference/cli.mdx +3 -1
  489. package/docs/reference/engine.mdx +1 -0
  490. package/docs/reference/expect.mdx +48 -15
  491. package/docs/reference/mcp.mdx +3 -0
  492. package/docs/reference/web.mdx +6 -2
  493. package/docs/security.mdx +19 -3
  494. package/docs/subscriptions.mdx +9 -0
  495. package/docs/telemetry.mdx +47 -5
  496. package/package.json +4 -3
  497. package/skills/e2e/references/mcp.md +3 -0
  498. package/skills/e2e/references/setup.md +6 -0
  499. package/skills/e2e/references/writing-tests.md +11 -0
  500. package/dist/agent/act-validation.d.ts.map +0 -1
  501. package/dist/agent/act-validation.js.map +0 -1
  502. package/dist/agent/act.d.ts.map +0 -1
  503. package/dist/agent/act.js.map +0 -1
  504. package/dist/agent/action-dispatcher.d.ts.map +0 -1
  505. package/dist/agent/action-dispatcher.js.map +0 -1
  506. package/dist/agent/action-names.d.ts.map +0 -1
  507. package/dist/agent/action-names.js.map +0 -1
  508. package/dist/agent/actions.d.ts.map +0 -1
  509. package/dist/agent/actions.js.map +0 -1
  510. package/dist/agent/agent-brand.d.ts.map +0 -1
  511. package/dist/agent/agent-brand.js.map +0 -1
  512. package/dist/agent/ai-sdk.d.ts.map +0 -1
  513. package/dist/agent/ai-sdk.js.map +0 -1
  514. package/dist/agent/call-options.d.ts.map +0 -1
  515. package/dist/agent/call-options.js.map +0 -1
  516. package/dist/agent/default-agent.d.ts.map +0 -1
  517. package/dist/agent/default-agent.js.map +0 -1
  518. package/dist/agent/derived.d.ts.map +0 -1
  519. package/dist/agent/derived.js.map +0 -1
  520. package/dist/agent/error.d.ts.map +0 -1
  521. package/dist/agent/error.js.map +0 -1
  522. package/dist/agent/executor.d.ts.map +0 -1
  523. package/dist/agent/executor.js.map +0 -1
  524. package/dist/agent/index.d.ts.map +0 -1
  525. package/dist/agent/index.js.map +0 -1
  526. package/dist/agent/interactive-step.d.ts.map +0 -1
  527. package/dist/agent/interactive-step.js.map +0 -1
  528. package/dist/agent/invocation.d.ts.map +0 -1
  529. package/dist/agent/invocation.js.map +0 -1
  530. package/dist/agent/ledger.d.ts.map +0 -1
  531. package/dist/agent/ledger.js.map +0 -1
  532. package/dist/agent/loop-guards.d.ts.map +0 -1
  533. package/dist/agent/loop-guards.js.map +0 -1
  534. package/dist/agent/model/adapter.d.ts.map +0 -1
  535. package/dist/agent/model/adapter.js.map +0 -1
  536. package/dist/agent/model/overflow.d.ts.map +0 -1
  537. package/dist/agent/model/overflow.js.map +0 -1
  538. package/dist/agent/model/provider-hints.d.ts.map +0 -1
  539. package/dist/agent/model/provider-hints.js.map +0 -1
  540. package/dist/agent/model/schema.d.ts.map +0 -1
  541. package/dist/agent/model/schema.js.map +0 -1
  542. package/dist/agent/model/sdk.d.ts.map +0 -1
  543. package/dist/agent/model/sdk.js.map +0 -1
  544. package/dist/agent/model/stall.d.ts.map +0 -1
  545. package/dist/agent/model/stall.js.map +0 -1
  546. package/dist/agent/model/tool-choice.d.ts.map +0 -1
  547. package/dist/agent/model/tool-choice.js.map +0 -1
  548. package/dist/agent/observation-budget.d.ts.map +0 -1
  549. package/dist/agent/observation-budget.js.map +0 -1
  550. package/dist/agent/observation-feed.d.ts.map +0 -1
  551. package/dist/agent/observation-feed.js.map +0 -1
  552. package/dist/agent/observation.d.ts.map +0 -1
  553. package/dist/agent/observation.js.map +0 -1
  554. package/dist/agent/operation-queue.d.ts.map +0 -1
  555. package/dist/agent/operation-queue.js.map +0 -1
  556. package/dist/agent/phases.d.ts.map +0 -1
  557. package/dist/agent/phases.js.map +0 -1
  558. package/dist/agent/pixels.d.ts.map +0 -1
  559. package/dist/agent/pixels.js.map +0 -1
  560. package/dist/agent/point-tap.d.ts.map +0 -1
  561. package/dist/agent/point-tap.js.map +0 -1
  562. package/dist/agent/primitives.d.ts.map +0 -1
  563. package/dist/agent/primitives.js.map +0 -1
  564. package/dist/agent/prompts.d.ts.map +0 -1
  565. package/dist/agent/prompts.js.map +0 -1
  566. package/dist/agent/protocol.d.ts.map +0 -1
  567. package/dist/agent/protocol.js.map +0 -1
  568. package/dist/agent/public.d.ts.map +0 -1
  569. package/dist/agent/public.js.map +0 -1
  570. package/dist/agent/reading.d.ts.map +0 -1
  571. package/dist/agent/reading.js.map +0 -1
  572. package/dist/agent/replay.d.ts.map +0 -1
  573. package/dist/agent/replay.js.map +0 -1
  574. package/dist/agent/screen-update.d.ts.map +0 -1
  575. package/dist/agent/screen-update.js.map +0 -1
  576. package/dist/agent/scroll-target.d.ts.map +0 -1
  577. package/dist/agent/scroll-target.js.map +0 -1
  578. package/dist/agent/secrets.d.ts.map +0 -1
  579. package/dist/agent/secrets.js.map +0 -1
  580. package/dist/agent/settle-policy.d.ts.map +0 -1
  581. package/dist/agent/settle-policy.js.map +0 -1
  582. package/dist/agent/step-accounting.d.ts.map +0 -1
  583. package/dist/agent/step-accounting.js.map +0 -1
  584. package/dist/agent/step-cache.d.ts.map +0 -1
  585. package/dist/agent/step-cache.js.map +0 -1
  586. package/dist/agent/tool-loop.d.ts.map +0 -1
  587. package/dist/agent/tool-loop.js.map +0 -1
  588. package/dist/agent/tool-output.d.ts.map +0 -1
  589. package/dist/agent/tool-output.js.map +0 -1
  590. package/dist/agent/tool.d.ts.map +0 -1
  591. package/dist/agent/tool.js.map +0 -1
  592. package/dist/agent/transcript-compaction.d.ts.map +0 -1
  593. package/dist/agent/transcript-compaction.js.map +0 -1
  594. package/dist/agent/upload-paths.d.ts.map +0 -1
  595. package/dist/agent/upload-paths.js.map +0 -1
  596. package/dist/agent/usage.d.ts.map +0 -1
  597. package/dist/agent/usage.js.map +0 -1
  598. package/dist/cache/anchors.d.ts.map +0 -1
  599. package/dist/cache/anchors.js.map +0 -1
  600. package/dist/cache/context.d.ts.map +0 -1
  601. package/dist/cache/context.js.map +0 -1
  602. package/dist/cache/decide.d.ts.map +0 -1
  603. package/dist/cache/decide.js.map +0 -1
  604. package/dist/cache/identity.d.ts.map +0 -1
  605. package/dist/cache/identity.js.map +0 -1
  606. package/dist/cache/recorder.d.ts.map +0 -1
  607. package/dist/cache/recorder.js.map +0 -1
  608. package/dist/cache/relocate.d.ts.map +0 -1
  609. package/dist/cache/relocate.js.map +0 -1
  610. package/dist/cache/route.d.ts.map +0 -1
  611. package/dist/cache/route.js.map +0 -1
  612. package/dist/cache/store.d.ts.map +0 -1
  613. package/dist/cache/store.js.map +0 -1
  614. package/dist/cache/template.d.ts.map +0 -1
  615. package/dist/cache/template.js.map +0 -1
  616. package/dist/cache/trace.d.ts.map +0 -1
  617. package/dist/cache/trace.js.map +0 -1
  618. package/dist/cli/bin.d.ts.map +0 -1
  619. package/dist/cli/bin.js.map +0 -1
  620. package/dist/cli/cache.d.ts.map +0 -1
  621. package/dist/cli/cache.js.map +0 -1
  622. package/dist/cli/docs-url.d.ts.map +0 -1
  623. package/dist/cli/docs-url.js.map +0 -1
  624. package/dist/cli/feedback.d.ts.map +0 -1
  625. package/dist/cli/feedback.js.map +0 -1
  626. package/dist/cli/guide.d.ts.map +0 -1
  627. package/dist/cli/guide.js.map +0 -1
  628. package/dist/cli/index.d.ts.map +0 -1
  629. package/dist/cli/index.js.map +0 -1
  630. package/dist/cli/init/agent-skill.d.ts.map +0 -1
  631. package/dist/cli/init/agent-skill.js.map +0 -1
  632. package/dist/cli/init/engines.d.ts.map +0 -1
  633. package/dist/cli/init/engines.js.map +0 -1
  634. package/dist/cli/init/gateways.d.ts.map +0 -1
  635. package/dist/cli/init/gateways.js.map +0 -1
  636. package/dist/cli/init/mcp-config.d.ts.map +0 -1
  637. package/dist/cli/init/mcp-config.js.map +0 -1
  638. package/dist/cli/init/package.d.ts.map +0 -1
  639. package/dist/cli/init/package.js.map +0 -1
  640. package/dist/cli/init/scaffold.d.ts.map +0 -1
  641. package/dist/cli/init/scaffold.js.map +0 -1
  642. package/dist/cli/init/versions.d.ts.map +0 -1
  643. package/dist/cli/init/versions.js.map +0 -1
  644. package/dist/cli/init.d.ts.map +0 -1
  645. package/dist/cli/init.js.map +0 -1
  646. package/dist/cli/mcp.d.ts.map +0 -1
  647. package/dist/cli/mcp.js.map +0 -1
  648. package/dist/cli/signals.d.ts.map +0 -1
  649. package/dist/cli/signals.js.map +0 -1
  650. package/dist/cli/skill.d.ts.map +0 -1
  651. package/dist/cli/skill.js.map +0 -1
  652. package/dist/cli/telemetry.d.ts.map +0 -1
  653. package/dist/cli/telemetry.js.map +0 -1
  654. package/dist/cli/wordmark.d.ts.map +0 -1
  655. package/dist/cli/wordmark.js.map +0 -1
  656. package/dist/collect/collect.d.ts.map +0 -1
  657. package/dist/collect/collect.js.map +0 -1
  658. package/dist/collect/registry.d.ts.map +0 -1
  659. package/dist/collect/registry.js.map +0 -1
  660. package/dist/collect/select.d.ts.map +0 -1
  661. package/dist/collect/select.js.map +0 -1
  662. package/dist/config/agent.d.ts.map +0 -1
  663. package/dist/config/agent.js.map +0 -1
  664. package/dist/config/app.d.ts.map +0 -1
  665. package/dist/config/app.js.map +0 -1
  666. package/dist/config/command.d.ts.map +0 -1
  667. package/dist/config/command.js.map +0 -1
  668. package/dist/config/diagnose.d.ts.map +0 -1
  669. package/dist/config/diagnose.js.map +0 -1
  670. package/dist/config/esm-hooks.d.ts.map +0 -1
  671. package/dist/config/esm-hooks.js.map +0 -1
  672. package/dist/config/load.d.ts.map +0 -1
  673. package/dist/config/load.js.map +0 -1
  674. package/dist/config/resolve.d.ts.map +0 -1
  675. package/dist/config/resolve.js.map +0 -1
  676. package/dist/config/secrets.d.ts.map +0 -1
  677. package/dist/config/secrets.js.map +0 -1
  678. package/dist/config/targets.d.ts.map +0 -1
  679. package/dist/config/targets.js.map +0 -1
  680. package/dist/config/validate.d.ts.map +0 -1
  681. package/dist/config/validate.js.map +0 -1
  682. package/dist/engine/contract.d.ts.map +0 -1
  683. package/dist/engine/contract.js.map +0 -1
  684. package/dist/engine/index.d.ts.map +0 -1
  685. package/dist/engine/index.js.map +0 -1
  686. package/dist/engine/manifest.d.ts.map +0 -1
  687. package/dist/engine/manifest.js.map +0 -1
  688. package/dist/engine/recording.d.ts.map +0 -1
  689. package/dist/engine/recording.js.map +0 -1
  690. package/dist/engine/resolve.d.ts.map +0 -1
  691. package/dist/engine/resolve.js.map +0 -1
  692. package/dist/engine/session.d.ts.map +0 -1
  693. package/dist/engine/session.js.map +0 -1
  694. package/dist/engine/surface.d.ts.map +0 -1
  695. package/dist/engine/surface.js.map +0 -1
  696. package/dist/engine/timing.d.ts.map +0 -1
  697. package/dist/engine/timing.js.map +0 -1
  698. package/dist/expect/async.d.ts.map +0 -1
  699. package/dist/expect/async.js.map +0 -1
  700. package/dist/expect/attempt.d.ts.map +0 -1
  701. package/dist/expect/attempt.js.map +0 -1
  702. package/dist/expect/index.d.ts.map +0 -1
  703. package/dist/expect/index.js.map +0 -1
  704. package/dist/expect/poll.d.ts.map +0 -1
  705. package/dist/expect/poll.js.map +0 -1
  706. package/dist/expect/soft.d.ts.map +0 -1
  707. package/dist/expect/soft.js.map +0 -1
  708. package/dist/expect/values.d.ts.map +0 -1
  709. package/dist/expect/values.js.map +0 -1
  710. package/dist/explore/body.d.ts.map +0 -1
  711. package/dist/explore/body.js.map +0 -1
  712. package/dist/explore/executor.d.ts.map +0 -1
  713. package/dist/explore/executor.js.map +0 -1
  714. package/dist/explore/index.d.ts.map +0 -1
  715. package/dist/explore/index.js.map +0 -1
  716. package/dist/explore/plan.d.ts.map +0 -1
  717. package/dist/explore/plan.js.map +0 -1
  718. package/dist/explore/progress.d.ts.map +0 -1
  719. package/dist/explore/progress.js.map +0 -1
  720. package/dist/explore/state.d.ts.map +0 -1
  721. package/dist/explore/state.js.map +0 -1
  722. package/dist/index.d.ts.map +0 -1
  723. package/dist/index.js.map +0 -1
  724. package/dist/internal/ai-trace.d.ts.map +0 -1
  725. package/dist/internal/ai-trace.js.map +0 -1
  726. package/dist/internal/atomic-write.d.ts.map +0 -1
  727. package/dist/internal/atomic-write.js.map +0 -1
  728. package/dist/internal/brands.d.ts.map +0 -1
  729. package/dist/internal/brands.js.map +0 -1
  730. package/dist/internal/debug.d.ts.map +0 -1
  731. package/dist/internal/debug.js.map +0 -1
  732. package/dist/internal/env.d.ts.map +0 -1
  733. package/dist/internal/env.js.map +0 -1
  734. package/dist/internal/errors.d.ts.map +0 -1
  735. package/dist/internal/errors.js.map +0 -1
  736. package/dist/internal/geometry.d.ts.map +0 -1
  737. package/dist/internal/geometry.js.map +0 -1
  738. package/dist/internal/git.d.ts.map +0 -1
  739. package/dist/internal/git.js.map +0 -1
  740. package/dist/internal/globs.d.ts.map +0 -1
  741. package/dist/internal/globs.js.map +0 -1
  742. package/dist/internal/ids.d.ts.map +0 -1
  743. package/dist/internal/ids.js.map +0 -1
  744. package/dist/internal/json-value.d.ts.map +0 -1
  745. package/dist/internal/json-value.js.map +0 -1
  746. package/dist/internal/keys.d.ts.map +0 -1
  747. package/dist/internal/keys.js.map +0 -1
  748. package/dist/internal/node-version.d.ts.map +0 -1
  749. package/dist/internal/node-version.js.map +0 -1
  750. package/dist/internal/objects.d.ts.map +0 -1
  751. package/dist/internal/objects.js.map +0 -1
  752. package/dist/internal/options.d.ts.map +0 -1
  753. package/dist/internal/options.js.map +0 -1
  754. package/dist/internal/package-manager.d.ts.map +0 -1
  755. package/dist/internal/package-manager.js.map +0 -1
  756. package/dist/internal/package-version.d.ts.map +0 -1
  757. package/dist/internal/package-version.js.map +0 -1
  758. package/dist/internal/paths.d.ts.map +0 -1
  759. package/dist/internal/paths.js.map +0 -1
  760. package/dist/internal/realm-slot.d.ts.map +0 -1
  761. package/dist/internal/realm-slot.js.map +0 -1
  762. package/dist/internal/recording-modes.d.ts.map +0 -1
  763. package/dist/internal/recording-modes.js.map +0 -1
  764. package/dist/internal/redact.d.ts.map +0 -1
  765. package/dist/internal/redact.js.map +0 -1
  766. package/dist/internal/regexp.d.ts.map +0 -1
  767. package/dist/internal/regexp.js.map +0 -1
  768. package/dist/internal/roles.d.ts.map +0 -1
  769. package/dist/internal/roles.js.map +0 -1
  770. package/dist/internal/skip.d.ts.map +0 -1
  771. package/dist/internal/skip.js.map +0 -1
  772. package/dist/internal/source.d.ts.map +0 -1
  773. package/dist/internal/source.js.map +0 -1
  774. package/dist/internal/standard-schema.d.ts.map +0 -1
  775. package/dist/internal/standard-schema.js.map +0 -1
  776. package/dist/internal/suggest.d.ts.map +0 -1
  777. package/dist/internal/suggest.js.map +0 -1
  778. package/dist/internal/text.d.ts.map +0 -1
  779. package/dist/internal/text.js.map +0 -1
  780. package/dist/internal/time.d.ts.map +0 -1
  781. package/dist/internal/time.js.map +0 -1
  782. package/dist/internal/urls.d.ts.map +0 -1
  783. package/dist/internal/urls.js.map +0 -1
  784. package/dist/internal/vcs.d.ts.map +0 -1
  785. package/dist/internal/vcs.js.map +0 -1
  786. package/dist/internal/zip.d.ts.map +0 -1
  787. package/dist/internal/zip.js.map +0 -1
  788. package/dist/locator/engine.d.ts.map +0 -1
  789. package/dist/locator/engine.js.map +0 -1
  790. package/dist/locator/expression.d.ts.map +0 -1
  791. package/dist/locator/expression.js.map +0 -1
  792. package/dist/locator/screen.d.ts.map +0 -1
  793. package/dist/locator/screen.js.map +0 -1
  794. package/dist/mcp/catalog.d.ts.map +0 -1
  795. package/dist/mcp/catalog.js.map +0 -1
  796. package/dist/mcp/config.d.ts.map +0 -1
  797. package/dist/mcp/config.js.map +0 -1
  798. package/dist/mcp/recording.d.ts.map +0 -1
  799. package/dist/mcp/recording.js.map +0 -1
  800. package/dist/mcp/server.d.ts.map +0 -1
  801. package/dist/mcp/server.js.map +0 -1
  802. package/dist/mcp/session.d.ts.map +0 -1
  803. package/dist/mcp/session.js.map +0 -1
  804. package/dist/mcp/sessions.d.ts.map +0 -1
  805. package/dist/mcp/sessions.js.map +0 -1
  806. package/dist/mcp/tools.d.ts.map +0 -1
  807. package/dist/mcp/tools.js.map +0 -1
  808. package/dist/oauth/callback-server.d.ts.map +0 -1
  809. package/dist/oauth/callback-server.js.map +0 -1
  810. package/dist/oauth/chatgpt.d.ts.map +0 -1
  811. package/dist/oauth/chatgpt.js.map +0 -1
  812. package/dist/oauth/cli.d.ts.map +0 -1
  813. package/dist/oauth/cli.js.map +0 -1
  814. package/dist/oauth/copilot.d.ts.map +0 -1
  815. package/dist/oauth/copilot.js.map +0 -1
  816. package/dist/oauth/device-code.d.ts.map +0 -1
  817. package/dist/oauth/device-code.js.map +0 -1
  818. package/dist/oauth/errors.d.ts.map +0 -1
  819. package/dist/oauth/errors.js.map +0 -1
  820. package/dist/oauth/fetch.d.ts.map +0 -1
  821. package/dist/oauth/fetch.js.map +0 -1
  822. package/dist/oauth/grok.d.ts.map +0 -1
  823. package/dist/oauth/grok.js.map +0 -1
  824. package/dist/oauth/jwt.d.ts.map +0 -1
  825. package/dist/oauth/jwt.js.map +0 -1
  826. package/dist/oauth/login.d.ts.map +0 -1
  827. package/dist/oauth/login.js.map +0 -1
  828. package/dist/oauth/models.d.ts.map +0 -1
  829. package/dist/oauth/models.js.map +0 -1
  830. package/dist/oauth/pkce.d.ts.map +0 -1
  831. package/dist/oauth/pkce.js.map +0 -1
  832. package/dist/oauth/providers/github-copilot.d.ts.map +0 -1
  833. package/dist/oauth/providers/github-copilot.js.map +0 -1
  834. package/dist/oauth/providers/openai.d.ts.map +0 -1
  835. package/dist/oauth/providers/openai.js.map +0 -1
  836. package/dist/oauth/providers/xai.d.ts.map +0 -1
  837. package/dist/oauth/providers/xai.js.map +0 -1
  838. package/dist/oauth/providers.d.ts.map +0 -1
  839. package/dist/oauth/providers.js.map +0 -1
  840. package/dist/oauth/sse.d.ts.map +0 -1
  841. package/dist/oauth/sse.js.map +0 -1
  842. package/dist/oauth/store.d.ts.map +0 -1
  843. package/dist/oauth/store.js.map +0 -1
  844. package/dist/oauth/token-endpoint.d.ts.map +0 -1
  845. package/dist/oauth/token-endpoint.js.map +0 -1
  846. package/dist/oauth/types.d.ts.map +0 -1
  847. package/dist/oauth/types.js.map +0 -1
  848. package/dist/params.d.ts.map +0 -1
  849. package/dist/params.js.map +0 -1
  850. package/dist/report/build.d.ts.map +0 -1
  851. package/dist/report/build.js.map +0 -1
  852. package/dist/report/builtin.d.ts.map +0 -1
  853. package/dist/report/builtin.js.map +0 -1
  854. package/dist/report/code-frame.d.ts.map +0 -1
  855. package/dist/report/code-frame.js.map +0 -1
  856. package/dist/report/debug-steps.d.ts.map +0 -1
  857. package/dist/report/debug-steps.js.map +0 -1
  858. package/dist/report/explore-text.d.ts.map +0 -1
  859. package/dist/report/explore-text.js.map +0 -1
  860. package/dist/report/failure-text.d.ts.map +0 -1
  861. package/dist/report/failure-text.js.map +0 -1
  862. package/dist/report/format.d.ts.map +0 -1
  863. package/dist/report/format.js.map +0 -1
  864. package/dist/report/json.d.ts.map +0 -1
  865. package/dist/report/json.js.map +0 -1
  866. package/dist/report/junit.d.ts.map +0 -1
  867. package/dist/report/junit.js.map +0 -1
  868. package/dist/report/list-explore.d.ts.map +0 -1
  869. package/dist/report/list-explore.js.map +0 -1
  870. package/dist/report/list-model.d.ts.map +0 -1
  871. package/dist/report/list-model.js.map +0 -1
  872. package/dist/report/list-steps.d.ts.map +0 -1
  873. package/dist/report/list-steps.js.map +0 -1
  874. package/dist/report/list.d.ts.map +0 -1
  875. package/dist/report/list.js.map +0 -1
  876. package/dist/report/live-window.d.ts.map +0 -1
  877. package/dist/report/live-window.js.map +0 -1
  878. package/dist/report/markdown-text.d.ts.map +0 -1
  879. package/dist/report/markdown-text.js.map +0 -1
  880. package/dist/report/markdown.d.ts.map +0 -1
  881. package/dist/report/markdown.js.map +0 -1
  882. package/dist/report/outcome.d.ts.map +0 -1
  883. package/dist/report/outcome.js.map +0 -1
  884. package/dist/report/repeats.d.ts.map +0 -1
  885. package/dist/report/repeats.js.map +0 -1
  886. package/dist/report/running-tree.d.ts.map +0 -1
  887. package/dist/report/running-tree.js.map +0 -1
  888. package/dist/report/write.d.ts.map +0 -1
  889. package/dist/report/write.js.map +0 -1
  890. package/dist/run/app-ports.d.ts.map +0 -1
  891. package/dist/run/app-ports.js.map +0 -1
  892. package/dist/run/artifacts.d.ts.map +0 -1
  893. package/dist/run/artifacts.js.map +0 -1
  894. package/dist/run/budget.d.ts.map +0 -1
  895. package/dist/run/budget.js.map +0 -1
  896. package/dist/run/declared-processes.d.ts.map +0 -1
  897. package/dist/run/declared-processes.js.map +0 -1
  898. package/dist/run/events.d.ts.map +0 -1
  899. package/dist/run/events.js.map +0 -1
  900. package/dist/run/execute.d.ts.map +0 -1
  901. package/dist/run/execute.js.map +0 -1
  902. package/dist/run/extended-fixtures.d.ts.map +0 -1
  903. package/dist/run/extended-fixtures.js.map +0 -1
  904. package/dist/run/failure-evidence.d.ts.map +0 -1
  905. package/dist/run/failure-evidence.js.map +0 -1
  906. package/dist/run/fixture-recording.d.ts.map +0 -1
  907. package/dist/run/fixture-recording.js.map +0 -1
  908. package/dist/run/fixtures.d.ts.map +0 -1
  909. package/dist/run/fixtures.js.map +0 -1
  910. package/dist/run/in-process.d.ts.map +0 -1
  911. package/dist/run/in-process.js.map +0 -1
  912. package/dist/run/last-run.d.ts.map +0 -1
  913. package/dist/run/last-run.js.map +0 -1
  914. package/dist/run/managed-process.d.ts.map +0 -1
  915. package/dist/run/managed-process.js.map +0 -1
  916. package/dist/run/output.d.ts.map +0 -1
  917. package/dist/run/output.js.map +0 -1
  918. package/dist/run/process-pool.d.ts.map +0 -1
  919. package/dist/run/process-pool.js.map +0 -1
  920. package/dist/run/provision.d.ts.map +0 -1
  921. package/dist/run/provision.js.map +0 -1
  922. package/dist/run/realm.d.ts.map +0 -1
  923. package/dist/run/realm.js.map +0 -1
  924. package/dist/run/records.d.ts.map +0 -1
  925. package/dist/run/records.js.map +0 -1
  926. package/dist/run/retry.d.ts.map +0 -1
  927. package/dist/run/retry.js.map +0 -1
  928. package/dist/run/runner.d.ts.map +0 -1
  929. package/dist/run/runner.js.map +0 -1
  930. package/dist/run/scheduler.d.ts.map +0 -1
  931. package/dist/run/scheduler.js.map +0 -1
  932. package/dist/run/secrecy.d.ts.map +0 -1
  933. package/dist/run/secrecy.js.map +0 -1
  934. package/dist/run/serial.d.ts.map +0 -1
  935. package/dist/run/serial.js.map +0 -1
  936. package/dist/run/sessions.d.ts.map +0 -1
  937. package/dist/run/sessions.js.map +0 -1
  938. package/dist/run/standalone.d.ts.map +0 -1
  939. package/dist/run/standalone.js.map +0 -1
  940. package/dist/run/steps.d.ts.map +0 -1
  941. package/dist/run/steps.js.map +0 -1
  942. package/dist/run/trace-redaction.d.ts.map +0 -1
  943. package/dist/run/trace-redaction.js.map +0 -1
  944. package/dist/run/unit-runner.d.ts.map +0 -1
  945. package/dist/run/unit-runner.js.map +0 -1
  946. package/dist/run/units.d.ts.map +0 -1
  947. package/dist/run/units.js.map +0 -1
  948. package/dist/run/worker/entry.d.ts.map +0 -1
  949. package/dist/run/worker/entry.js.map +0 -1
  950. package/dist/run/worker/handle.d.ts.map +0 -1
  951. package/dist/run/worker/handle.js.map +0 -1
  952. package/dist/run/worker/protocol.d.ts.map +0 -1
  953. package/dist/run/worker/protocol.js.map +0 -1
  954. package/dist/run/worker/session.d.ts.map +0 -1
  955. package/dist/run/worker/session.js.map +0 -1
  956. package/dist/run/worker-models.d.ts.map +0 -1
  957. package/dist/run/worker-models.js.map +0 -1
  958. package/dist/secrets.d.ts.map +0 -1
  959. package/dist/secrets.js.map +0 -1
  960. package/dist/telemetry/checkout.d.ts.map +0 -1
  961. package/dist/telemetry/checkout.js.map +0 -1
  962. package/dist/telemetry/environment.d.ts.map +0 -1
  963. package/dist/telemetry/environment.js.map +0 -1
  964. package/dist/telemetry/events.d.ts.map +0 -1
  965. package/dist/telemetry/events.js.map +0 -1
  966. package/dist/telemetry/failure-kind.d.ts.map +0 -1
  967. package/dist/telemetry/failure-kind.js.map +0 -1
  968. package/dist/telemetry/posthog.d.ts.map +0 -1
  969. package/dist/telemetry/posthog.js.map +0 -1
  970. package/dist/telemetry/project.d.ts.map +0 -1
  971. package/dist/telemetry/project.js.map +0 -1
  972. package/dist/telemetry/store.d.ts.map +0 -1
  973. package/dist/telemetry/store.js.map +0 -1
  974. package/dist/telemetry/telemetry.d.ts.map +0 -1
  975. package/dist/telemetry/telemetry.js.map +0 -1
  976. package/dist/telemetry/token.d.ts.map +0 -1
  977. package/dist/telemetry/token.js.map +0 -1
  978. package/dist/types.d.ts.map +0 -1
  979. package/dist/types.js.map +0 -1
@@ -1,16 +1,18 @@
1
1
  /**
2
2
  * The events e2e sends, built from facts the CLI already holds. Every
3
3
  * property is a count, a duration, a version, or a short token. The builders
4
- * copy no title, file, URL, instruction, message, or stack out of the report;
5
- * the one look at a message, in `failure-kind.ts`, yields a token from a
6
- * closed list.
7
- * The names a project declares for its engines, platforms, and model pass
8
- * through when they are plain tokens, so a homegrown engine counts as itself;
9
- * a name shaped like a path, a URL, or a sentence folds to `other`, and an
10
- * error code that is not an upper-case token, the shape of every runner
11
- * code, folds to `OTHER`. The unit tests hold the payload to that promise.
4
+ * copy no title, file, URL, instruction, message, or stack out of the report,
5
+ * the config, or an MCP session; the one look at a message, in
6
+ * `failure-kind.ts`, yields a token from a closed list.
7
+ * The names a project declares for its engines, platforms, and model, and the
8
+ * name an MCP client gives itself, pass through when they are plain tokens,
9
+ * so a homegrown engine counts as itself; a name shaped like a path, a URL,
10
+ * or a sentence folds to `other`, and an error code that is not an upper-case
11
+ * token, the shape of every runner code, folds to `OTHER`. The unit tests
12
+ * hold the payload to that promise.
12
13
  */
13
- import { GRAMMAR_ACTION_NAMES, PROJECT_TOOL_EVENT_PREFIX } from '../agent/action-names.js';
14
+ import { GRAMMAR_ACTION_NAMES, GRAMMAR_TOOL_NAMES, PROJECT_TOOL_EVENT_PREFIX } from '../agent/action-names.js';
15
+ import { modelLabel } from '../config/agent.js';
14
16
  import { STEP_KINDS } from '../run/steps.js';
15
17
  import { failureKind } from './failure-kind.js';
16
18
  import { errorCodeToken, plainToken } from './token.js';
@@ -20,6 +22,8 @@ export const EVENT_CLI_SESSION = 'e2e_cli_session';
20
22
  export const EVENT_RUN_COMPLETED = 'e2e_run_completed';
21
23
  /** One per `e2e init`, however it ended: what was chosen and whether anything was written. */
22
24
  export const EVENT_INIT_COMPLETED = 'e2e_init_completed';
25
+ /** One per `open_session` an `e2e mcp` server served, sent when the session closes or its open fails. */
26
+ export const EVENT_MCP_SESSION = 'e2e_mcp_session';
23
27
  /** The session's error code for a flag or argument commander rejected; no runner code exists for it. */
24
28
  export const USAGE_ERROR_CODE = 'CLI_USAGE';
25
29
  const SEMVER = /^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?$/u;
@@ -80,6 +84,10 @@ function engineLabel(engine) {
80
84
  function unique(values) {
81
85
  return [...new Set(values)].toSorted();
82
86
  }
87
+ /** Counts keyed in sorted order, so equal counts serialize equally. */
88
+ function sortedCounts(counts) {
89
+ return Object.fromEntries([...counts].toSorted());
90
+ }
83
91
  /** Every scope the run recorded, across plain results and serial groups. */
84
92
  function* scopes(report) {
85
93
  for (const result of report.run.results)
@@ -117,7 +125,7 @@ function agentActions(steps) {
117
125
  counts.set(name, (counts.get(name) ?? 0) + 1);
118
126
  }
119
127
  }
120
- return Object.fromEntries([...counts].toSorted());
128
+ return sortedCounts(counts);
121
129
  }
122
130
  /** Whether anyone priced the model calls: a gateway that did, nobody, or no calls to price. */
123
131
  function costSource(usage, modelCalls) {
@@ -129,7 +137,50 @@ function durationMs(startedAt, finishedAt) {
129
137
  const duration = Date.parse(finishedAt) - Date.parse(startedAt);
130
138
  return Number.isFinite(duration) ? Math.max(0, duration) : null;
131
139
  }
132
- export function runCompletedEvent(report, flags) {
140
+ /**
141
+ * Which config features a run used: counts, booleans, and the runner's own
142
+ * option ids, never a name, a path, or a value the project wrote.
143
+ */
144
+ function configFeatures(config) {
145
+ const agents = [...config.agents.values()];
146
+ return {
147
+ config_workers: config.workers,
148
+ config_retries: config.retries,
149
+ config_agents: config.agents.size,
150
+ config_custom_executor: agents.some((agent) => agent.executor !== undefined),
151
+ config_separate_judge: agents.some((agent) => agent.judge !== undefined && (agent.model === undefined || modelLabel(agent.judge) !== modelLabel(agent.model))),
152
+ config_project_tools: new Set(agents.flatMap((agent) => Object.keys(agent.tools))).size,
153
+ config_credentials: config.credentials.size,
154
+ config_secrets: config.secrets.size,
155
+ config_cache_mode: config.cache.mode,
156
+ config_cache_store: config.cache.store === undefined ? 'file' : 'custom',
157
+ config_cache_strict: config.cache.strict !== false,
158
+ config_reporters: unique(config.reporters),
159
+ config_custom_reporters: config.customReporters.length,
160
+ config_artifact_store: config.artifactStore !== undefined,
161
+ config_trace_modes: unique(config.targets.map((target) => target.trace.mode)),
162
+ config_video_modes: unique(config.targets.map((target) => target.video.mode)),
163
+ config_app_commands: config.targets.filter((target) => target.app.command !== undefined).length,
164
+ config_environments: unique(config.targets.map((target) => target.app.environment)),
165
+ };
166
+ }
167
+ const EXPLORE_STEP_STATUSES = ['passed', 'failed', 'blocked', 'exhausted'];
168
+ const SEVERITIES = [1, 2, 3, 4, 5];
169
+ /** What `e2e explore` was given and found, by count: never the goal, a step's charter, or a finding's words. */
170
+ function exploreProperties(explore) {
171
+ return {
172
+ explore_ended: explore.ended,
173
+ explore_max_steps: explore.budgets.maxSteps,
174
+ explore_timeout_ms: explore.budgets.timeoutMs,
175
+ explore_steps: explore.steps.length,
176
+ ...Object.fromEntries(EXPLORE_STEP_STATUSES.map((status) => [`explore_steps_${status}`, explore.steps.filter((step) => step.status === status).length])),
177
+ explore_assessed: explore.summary !== undefined,
178
+ explore_issues: explore.findings.filter((finding) => finding.kind === 'issue').length,
179
+ explore_warnings: explore.findings.filter((finding) => finding.kind === 'warning').length,
180
+ explore_findings_by_severity: Object.fromEntries(SEVERITIES.map((severity) => [String(severity), explore.findings.filter((finding) => finding.severity === severity).length])),
181
+ };
182
+ }
183
+ export function runCompletedEvent(report, context) {
133
184
  const { run } = report;
134
185
  const recorded = [...scopes(report)];
135
186
  const steps = recorded.flatMap((scope) => scope.steps ?? []);
@@ -144,10 +195,11 @@ export function runCompletedEvent(report, flags) {
144
195
  name: EVENT_RUN_COMPLETED,
145
196
  at: run.finishedAt,
146
197
  properties: {
198
+ command: context.command,
147
199
  status: run.status,
148
200
  exit_code: run.exitCode,
149
201
  duration_ms: durationMs(run.startedAt, run.finishedAt),
150
- flags: [...flags],
202
+ flags: [...context.flags],
151
203
  tests_discovered: run.summary.discovered,
152
204
  tests_selected: run.summary.selected,
153
205
  tests_executed: run.summary.executed,
@@ -180,7 +232,49 @@ export function runCompletedEvent(report, flags) {
180
232
  primary_error_code: primary === undefined ? null : errorCodeToken(primary.code),
181
233
  error_codes: unique(errors.map((error) => errorCodeToken(error.code))).slice(0, MAX_ERROR_CODES),
182
234
  error_kinds: unique(errors.flatMap(failureKind)).slice(0, MAX_ERROR_CODES),
235
+ // A run whose config never loaded has no features to report.
236
+ ...(context.config === undefined ? {} : configFeatures(context.config)),
237
+ ...(run.explore === undefined ? {} : exploreProperties(run.explore)),
238
+ },
239
+ };
240
+ }
241
+ /**
242
+ * The catalog tools an MCP session serves itself, by name: the grammar and
243
+ * the session's own (`createSessionCatalog`). A project's tools arrive
244
+ * counted together; any name outside this set folds to `other`.
245
+ */
246
+ const SESSION_TOOLS = new Set([...GRAMMAR_TOOL_NAMES, 'locate', 'start_recording', 'stop_recording']);
247
+ /** One MCP session: the client, the target's platform and engine, how it ended, and its calls by the runner's tool names. */
248
+ export function mcpSessionEvent(summary, client) {
249
+ const calls = new Map();
250
+ for (const [name, count] of summary.toolCalls) {
251
+ const key = SESSION_TOOLS.has(name) ? name : 'other';
252
+ calls.set(key, (calls.get(key) ?? 0) + count);
253
+ }
254
+ if (summary.projectToolCalls > 0)
255
+ calls.set('tool', summary.projectToolCalls);
256
+ const codes = new Map();
257
+ for (const [code, count] of summary.errorCodes) {
258
+ const key = errorCodeToken(code);
259
+ codes.set(key, (codes.get(key) ?? 0) + count);
260
+ }
261
+ return {
262
+ name: EVENT_MCP_SESSION,
263
+ properties: {
264
+ client: client === undefined ? null : plainToken(client.name),
265
+ client_version: client === undefined ? null : plainToken(client.version),
266
+ outcome: summary.outcome,
267
+ ended_by: summary.endedBy ?? null,
268
+ error_code: summary.openErrorCode === undefined ? null : errorCodeToken(summary.openErrorCode),
269
+ platform: summary.platform === undefined ? null : plainToken(summary.platform),
270
+ engine: summary.engine === undefined ? null : engineLabel(summary.engine),
271
+ headed: summary.headed,
272
+ duration_ms: Math.max(0, Math.round(summary.durationMs)),
273
+ sessions_open: summary.concurrent,
274
+ calls_total: [...calls.values()].reduce((total, count) => total + count, 0),
275
+ calls_failed: summary.failedCalls,
276
+ calls: sortedCounts(calls),
277
+ error_codes: sortedCounts(new Map([...codes].toSorted().slice(0, MAX_ERROR_CODES))),
183
278
  },
184
279
  };
185
280
  }
186
- //# sourceMappingURL=events.js.map
@@ -13,4 +13,3 @@
13
13
  import type { ReportError } from '../report/build.ts';
14
14
  /** `CODE:kind` for an error whose code only says where it surfaced; nothing for every other code. */
15
15
  export declare function failureKind(error: ReportError): string[];
16
- //# sourceMappingURL=failure-kind.d.ts.map
@@ -41,4 +41,3 @@ export function failureKind(error) {
41
41
  const kind = FAILURE_KINDS.find(([, pattern]) => pattern.test(error.message))?.[0] ?? 'other';
42
42
  return [`${error.code}:${kind}`];
43
43
  }
44
- //# sourceMappingURL=failure-kind.js.map
@@ -30,4 +30,3 @@ export interface PostBatchOptions {
30
30
  }
31
31
  /** Sends the batch; resolves to whether PostHog accepted it. */
32
32
  export declare function postBatch(events: readonly PostHogEvent[], options: PostBatchOptions): Promise<boolean>;
33
- //# sourceMappingURL=posthog.d.ts.map
@@ -26,4 +26,3 @@ export async function postBatch(events, options) {
26
26
  return false;
27
27
  }
28
28
  }
29
- //# sourceMappingURL=posthog.js.map
@@ -15,4 +15,3 @@
15
15
  * working directory is not a project.
16
16
  */
17
17
  export declare function anonymousProjectId(projectRoot: string, salt: string | undefined): Promise<string | undefined>;
18
- //# sourceMappingURL=project.d.ts.map
@@ -39,4 +39,3 @@ export async function anonymousProjectId(projectRoot, salt) {
39
39
  return undefined;
40
40
  return sha256Hex(`path\n${salt}\n${projectRoot}`);
41
41
  }
42
- //# sourceMappingURL=project.js.map
@@ -55,4 +55,3 @@ export declare class TelemetryStore {
55
55
  markNotified(version: number, at: string): void;
56
56
  private write;
57
57
  }
58
- //# sourceMappingURL=store.d.ts.map
@@ -163,4 +163,3 @@ export class TelemetryStore {
163
163
  }
164
164
  }
165
165
  }
166
- //# sourceMappingURL=store.js.map
@@ -4,8 +4,10 @@
4
4
  * One instance lives for one CLI invocation. Commands hand it events; at the
5
5
  * end of the invocation `flush` sends them in a single bounded request, so a
6
6
  * command never waits on telemetry for more than the flush budget and never
7
- * fails because of it. Telemetry is a CLI concern only: the runner never
8
- * constructs this class.
7
+ * fails because of it. A long-lived command (`e2e mcp`) sends what it has
8
+ * queued as it goes with `sendQueued`, so a client that kills it loses only
9
+ * what was still in progress. Telemetry is a CLI concern only: the runner
10
+ * never constructs this class.
9
11
  *
10
12
  * Off means off at every step. `E2E_TELEMETRY_DISABLED`, `DO_NOT_TRACK`, a
11
13
  * source checkout of the repository, an `e2e telemetry disable`, or a
@@ -26,7 +28,7 @@
26
28
  import { type TelemetryEvent } from './events.ts';
27
29
  import { anonymousProjectId } from './project.ts';
28
30
  /** Bumped when what is collected changes enough that the notice must show again. */
29
- export declare const NOTICE_VERSION = 2;
31
+ export declare const NOTICE_VERSION = 3;
30
32
  export type TelemetryDisabledBy = 'E2E_TELEMETRY_DISABLED' | 'DO_NOT_TRACK' | 'checkout' | 'preference' | 'store';
31
33
  export interface TelemetryOptions {
32
34
  /** The e2e version, sent with every event. */
@@ -66,6 +68,8 @@ export declare class Telemetry {
66
68
  private command;
67
69
  private failure;
68
70
  private exitCode;
71
+ /** Sends `sendQueued` started that have not settled; the flush waits for them. */
72
+ private readonly sending;
69
73
  constructor(options: TelemetryOptions);
70
74
  /** Opened on first use, so `--version` and `--help` never touch the disk; undefined when the file cannot exist. */
71
75
  private store;
@@ -117,11 +121,18 @@ export declare class Telemetry {
117
121
  /** The session event, first in the batch; absent for an invocation that never reached a command. */
118
122
  private sessionEvent;
119
123
  /**
120
- * Sends everything queued in one request, or prints it under debug. One
121
- * deadline covers the project lookup still running and the request; a
122
- * lost batch is the accepted cost of a command that never waits on
123
- * telemetry.
124
+ * Sends everything queued in one request, or prints it under debug, and
125
+ * waits for the sends `sendQueued` started. One deadline covers the
126
+ * project lookup still running and the request; a lost batch is the
127
+ * accepted cost of a command that never waits on telemetry.
124
128
  */
125
129
  flush(maxWaitMs?: number): Promise<void>;
130
+ /**
131
+ * Sends what is queued now, without the session event, which only the
132
+ * flush at the end can complete. For a command that runs until its client
133
+ * goes away; the caller need not wait, the flush does.
134
+ */
135
+ sendQueued(maxWaitMs?: number): Promise<void>;
136
+ /** Sends `events` in one bounded request, or prints them under debug; nothing when off. */
137
+ private send;
126
138
  }
127
- //# sourceMappingURL=telemetry.d.ts.map
@@ -4,8 +4,10 @@
4
4
  * One instance lives for one CLI invocation. Commands hand it events; at the
5
5
  * end of the invocation `flush` sends them in a single bounded request, so a
6
6
  * command never waits on telemetry for more than the flush budget and never
7
- * fails because of it. Telemetry is a CLI concern only: the runner never
8
- * constructs this class.
7
+ * fails because of it. A long-lived command (`e2e mcp`) sends what it has
8
+ * queued as it goes with `sendQueued`, so a client that kills it loses only
9
+ * what was still in progress. Telemetry is a CLI concern only: the runner
10
+ * never constructs this class.
9
11
  *
10
12
  * Off means off at every step. `E2E_TELEMETRY_DISABLED`, `DO_NOT_TRACK`, a
11
13
  * source checkout of the repository, an `e2e telemetry disable`, or a
@@ -34,13 +36,13 @@ import { postBatch } from './posthog.js';
34
36
  import { anonymousProjectId } from './project.js';
35
37
  import { preferencesPath, TelemetryStore, telemetryConfigDir } from './store.js';
36
38
  /** Bumped when what is collected changes enough that the notice must show again. */
37
- export const NOTICE_VERSION = 2;
39
+ export const NOTICE_VERSION = 3;
38
40
  /** The longest a flush may hold the process; the project lookup and the request share it. */
39
41
  const DEFAULT_FLUSH_MS = 2_000;
40
42
  /** The one-time notice: what is collected, and the two ways out. */
41
43
  function noticeText() {
42
44
  return [
43
- `${picocolors.bold('e2e collects anonymous usage telemetry')} to improve the framework: the command, the versions, the OS, and run counts. Never test names, app data, or credentials.`,
45
+ `${picocolors.bold('e2e collects anonymous usage telemetry')} to improve the framework: the command, the versions, the OS, and summaries of runs and MCP sessions. Never test names, app data, or credentials.`,
44
46
  `Opt out with ${picocolors.cyan('e2e telemetry disable')} or ${picocolors.cyan('E2E_TELEMETRY_DISABLED=1')}. What is sent: ${picocolors.underline(`${DOCS_URL}/telemetry`)}`,
45
47
  '',
46
48
  '',
@@ -74,6 +76,8 @@ export class Telemetry {
74
76
  command;
75
77
  failure;
76
78
  exitCode;
79
+ /** Sends `sendQueued` started that have not settled; the flush waits for them. */
80
+ sending = new Set();
77
81
  constructor(options) {
78
82
  this.version = options.version;
79
83
  this.env = options.env ?? process.env;
@@ -200,14 +204,28 @@ export class Telemetry {
200
204
  return [cliSessionEvent(this.command.name, this.command.flags, ended)];
201
205
  }
202
206
  /**
203
- * Sends everything queued in one request, or prints it under debug. One
204
- * deadline covers the project lookup still running and the request; a
205
- * lost batch is the accepted cost of a command that never waits on
206
- * telemetry.
207
+ * Sends everything queued in one request, or prints it under debug, and
208
+ * waits for the sends `sendQueued` started. One deadline covers the
209
+ * project lookup still running and the request; a lost batch is the
210
+ * accepted cost of a command that never waits on telemetry.
207
211
  */
208
212
  async flush(maxWaitMs = DEFAULT_FLUSH_MS) {
209
213
  const events = [...this.sessionEvent(), ...this.queue.splice(0)];
210
214
  this.command = undefined;
215
+ await Promise.all([this.send(events, maxWaitMs), ...this.sending]);
216
+ }
217
+ /**
218
+ * Sends what is queued now, without the session event, which only the
219
+ * flush at the end can complete. For a command that runs until its client
220
+ * goes away; the caller need not wait, the flush does.
221
+ */
222
+ sendQueued(maxWaitMs = DEFAULT_FLUSH_MS) {
223
+ const sending = this.send(this.queue.splice(0), maxWaitMs).finally(() => this.sending.delete(sending));
224
+ this.sending.add(sending);
225
+ return sending;
226
+ }
227
+ /** Sends `events` in one bounded request, or prints them under debug; nothing when off. */
228
+ async send(events, maxWaitMs) {
211
229
  if (events.length === 0)
212
230
  return;
213
231
  // A choice saved from another process while this command ran wins over the snapshot taken at its start.
@@ -250,4 +268,3 @@ export class Telemetry {
250
268
  await postBatch(items, { signal: deadline, fetch: this.fetchImpl });
251
269
  }
252
270
  }
253
- //# sourceMappingURL=telemetry.js.map
@@ -9,4 +9,3 @@
9
9
  export declare function plainToken(value: string): string;
10
10
  /** A runner error code as it is, `OTHER` for a code shaped like a project's own. */
11
11
  export declare function errorCodeToken(code: string): string;
12
- //# sourceMappingURL=token.d.ts.map
@@ -15,4 +15,3 @@ export function plainToken(value) {
15
15
  export function errorCodeToken(code) {
16
16
  return ERROR_CODE.test(code) ? code : 'OTHER';
17
17
  }
18
- //# sourceMappingURL=token.js.map
package/dist/types.d.ts CHANGED
@@ -585,31 +585,39 @@ export interface TestAPI<Fixtures = TestFixtures> {
585
585
  /** Registers a suite-instance teardown hook. */
586
586
  afterAll(fn: SuiteHookFn): void;
587
587
  }
588
+ /**
589
+ * The locator matchers. An option a matcher does not take, or a flag that is
590
+ * not a boolean, is `INVALID_ARGUMENT` before the first read.
591
+ */
588
592
  export interface AsyncExpectation {
589
593
  /** Inverts the matcher. A negated matcher passes after 1000 ms of continuous truth. */
590
594
  readonly not: AsyncExpectation;
591
- /** Waits for visibility. */
595
+ /** Waits for visibility; `visible: false` waits for hidden or absent state, as `toBeHidden`. */
592
596
  toBeVisible(options?: {
597
+ visible?: boolean;
593
598
  timeout?: number;
594
599
  }): Promise<void>;
595
600
  /** Waits for hidden or absent state. */
596
601
  toBeHidden(options?: {
597
602
  timeout?: number;
598
603
  }): Promise<void>;
599
- /** Waits for one match to exist, visible or not. */
604
+ /** Waits for one match to exist, visible or not; `attached: false` waits for none. */
600
605
  toBeAttached(options?: {
606
+ attached?: boolean;
601
607
  timeout?: number;
602
608
  }): Promise<void>;
603
- /** Waits for enabled state. */
609
+ /** Waits for enabled state; `enabled: false` waits for disabled state. */
604
610
  toBeEnabled(options?: {
611
+ enabled?: boolean;
605
612
  timeout?: number;
606
613
  }): Promise<void>;
607
614
  /** Waits for disabled state. */
608
615
  toBeDisabled(options?: {
609
616
  timeout?: number;
610
617
  }): Promise<void>;
611
- /** Waits for checked state. */
618
+ /** Waits for checked state; `checked: false` waits for unchecked state. */
612
619
  toBeChecked(options?: {
620
+ checked?: boolean;
613
621
  timeout?: number;
614
622
  }): Promise<void>;
615
623
  /** Waits for selected state. */
@@ -625,19 +633,11 @@ export interface AsyncExpectation {
625
633
  timeout?: number;
626
634
  }): Promise<void>;
627
635
  /** Waits for exact normalized text; a list waits for exactly that many matches, each with its entry's text, in order. */
628
- toHaveText(expected: TextMatch, options?: {
629
- timeout?: number;
630
- }): Promise<void>;
631
- toHaveText(expected: readonly TextMatch[], options?: {
632
- timeout?: number;
633
- }): Promise<void>;
636
+ toHaveText(expected: TextMatch, options?: TextMatcherOptions): Promise<void>;
637
+ toHaveText(expected: readonly TextMatch[], options?: TextMatcherOptions): Promise<void>;
634
638
  /** Waits for contained normalized text; a list waits for each entry to be contained by a distinct match, in order, extra matches allowed. */
635
- toContainText(expected: TextMatch, options?: {
636
- timeout?: number;
637
- }): Promise<void>;
638
- toContainText(expected: readonly TextMatch[], options?: {
639
- timeout?: number;
640
- }): Promise<void>;
639
+ toContainText(expected: TextMatch, options?: TextMatcherOptions): Promise<void>;
640
+ toContainText(expected: readonly TextMatch[], options?: TextMatcherOptions): Promise<void>;
641
641
  /** Waits for a form control's value, compared as it is. */
642
642
  toHaveValue(expected: TextMatch, options?: {
643
643
  timeout?: number;
@@ -646,17 +646,20 @@ export interface AsyncExpectation {
646
646
  toHaveAttribute(name: string, options?: {
647
647
  timeout?: number;
648
648
  }): Promise<void>;
649
- toHaveAttribute(name: string, value: TextMatch, options?: {
650
- timeout?: number;
651
- }): Promise<void>;
649
+ toHaveAttribute(name: string, value: TextMatch, options?: TextMatcherOptions): Promise<void>;
652
650
  /** Waits for an exact match count. */
653
651
  toHaveCount(expected: number, options?: {
654
652
  timeout?: number;
655
653
  }): Promise<void>;
656
654
  /** Waits for an accessible name. */
657
- toHaveAccessibleName(expected: TextMatch, options?: {
658
- timeout?: number;
659
- }): Promise<void>;
655
+ toHaveAccessibleName(expected: TextMatch, options?: TextMatcherOptions): Promise<void>;
656
+ }
657
+ /** Options of a locator matcher that compares text. */
658
+ export interface TextMatcherOptions {
659
+ /** Compares a string case-insensitively; on a RegExp, `true` adds the `i` flag and `false` removes it. */
660
+ ignoreCase?: boolean;
661
+ /** Assertion budget in milliseconds. */
662
+ timeout?: number;
660
663
  }
661
664
  /**
662
665
  * An object that carries its own expectation surface, so `expect(object)`
@@ -1313,4 +1316,3 @@ export interface E2EConfig {
1313
1316
  */
1314
1317
  secrets?: Readonly<Record<string, SecretConfig>>;
1315
1318
  }
1316
- //# sourceMappingURL=types.d.ts.map
package/dist/types.js CHANGED
@@ -3,4 +3,3 @@
3
3
  * `tests/types/sdk-types.ts` pins the parts that are easy to loosen by accident.
4
4
  */
5
5
  export {};
6
- //# sourceMappingURL=types.js.map
@@ -128,7 +128,7 @@ The executor receives this context:
128
128
 
129
129
  | Member | What it is |
130
130
  | --- | --- |
131
- | `ctx.step` | The instruction, params, and `index` in the attempt's timeline |
131
+ | `ctx.step` | The instruction, params, and `index` in the attempt's timeline. A registered secret value the test spelled into the instruction or a param string reads `<secret:name>`; a `secrets.get()` handle is a placeholder you fill with `typeSecret` |
132
132
  | `ctx.observe({ tree, pixels })` | Redacted screen text, with an optional node tree and masked screenshot |
133
133
  | `ctx.actions` | Checked and recorded actions: `tap`, `doubleTap`, `longPress`, `secondaryTap`, `hover`, `type`, `typeSecret`, `press`, `select`, `check`, `drag`, `scrollTo`, `scrollUntil`, `upload`, `scroll`, `navigate`, `back`, and the point and keyboard verbs below |
134
134
  | `ctx.target` | The target's `name` and `platform`, and `verbs`, the actions its engine supports. Offer only these to the model. |
@@ -171,6 +171,9 @@ what to do today.
171
171
  | `toHaveText()`, `toContainText()` | compare the rendered text, as `{ useInnerText: true }` does in Playwright | by design |
172
172
  | `toHaveValue()`, `toHaveAttribute()`, `toHaveCount()`, `toHaveAccessibleName()` | the same | same |
173
173
  | `toHaveText(['a', 'b'])`, `toContainText([...])` on several matches | the same: `toHaveText` needs the count to match, `toContainText` an ordered subsequence | same |
174
+ | `toBeChecked({ checked: false })`, `toBeEnabled({ enabled })`, `toBeVisible({ visible })`, `toBeAttached({ attached })` | the same | same |
175
+ | `{ ignoreCase }` on `toHaveText()`, `toContainText()`, `toHaveAccessibleName()`, `toHaveAttribute(name, value)` | the same | same |
176
+ | `toBeChecked({ indeterminate })`, `{ useInnerText }`, `toHaveURL(url, { ignoreCase })` | not yet; `INVALID_ARGUMENT`, so the matcher never passes on its default | missing |
174
177
  | `toHaveAttribute('aria-selected', 'true')`, `'aria-expanded'` | `toBeSelected()`, `toBeExpanded()` | renamed |
175
178
  | a positive matcher on several matches | `LOCATOR_AMBIGUOUS` at once; narrow with `filter`, `first`, or `{ visible: true }` | by design |
176
179
  | `toBeAttached()` | the same; passes on a hidden match too | same |
@@ -201,7 +204,7 @@ what to do today.
201
204
  | `page.goBack()` | `app.back()`, or `browser.back()` | renamed |
202
205
  | `page.goForward()`, `page.reload()` | `browser.forward()`, `browser.reload()` | web only |
203
206
  | `page.url()`, `page.title()` | `browser.url()`, `browser.title()` | web only |
204
- | `page.waitForURL()` | `browser.waitForURL()`; a string or `RegExp`, no predicate function | web only |
207
+ | `page.waitForURL()` | `browser.waitForURL()`; a string or `RegExp`, no predicate function, and `timeout` is its only option, so `waitUntil` is `INVALID_ARGUMENT` | web only |
205
208
  | `page.waitForLoadState()` | not yet; `browser.goto(url, { waitUntil })` on the navigation itself | missing |
206
209
  | `page.waitForFunction(fn)` | `expect.poll(() => browser.evaluate(fn)).toBeTruthy()` | missing |
207
210
  | `page.waitForTimeout(ms)` | a locator assertion on the state you are waiting for: `toBeVisible()` on what appears, `toBeHidden()` on what goes away | by design |
package/docs/mobile.mdx CHANGED
@@ -106,6 +106,46 @@ One test launches with its own through `device.openApp`:
106
106
  await device.openApp('com.example.app', { relaunch: true, permissions: { camera: 'deny' } });
107
107
  ```
108
108
 
109
+ ### Expo development builds
110
+
111
+ A development build (`expo-dev-client`) opens on the dev launcher and loads
112
+ its JavaScript from a dev server. On an iOS simulator, launch arguments open
113
+ the server directly and turn off the dev menu, its onboarding sheet, and its
114
+ floating action button, so nothing covers the app. `app.command` starts the
115
+ server for the run:
116
+
117
+ ```ts title="e2e.config.ts"
118
+ import type { E2EConfig } from 'e2e';
119
+ import { mobile } from '@e2e-dev/mobile';
120
+
121
+ export default {
122
+ targets: [
123
+ {
124
+ engine: mobile({ platform: 'ios' }),
125
+ app: {
126
+ bundleId: 'com.example.app',
127
+ launchArguments: [
128
+ '--initialUrl', 'http://localhost:8081',
129
+ '-EXDevMenuShowsAtLaunch', 'NO',
130
+ '-EXDevMenuIsOnboardingFinished', 'YES',
131
+ '-EXDevMenuShowFloatingActionButton', 'NO',
132
+ ],
133
+ command: { executable: 'npx', args: ['expo', 'start', '--port', '8081'] },
134
+ readyUrl: 'http://localhost:8081/status',
135
+ },
136
+ },
137
+ ],
138
+ } satisfies E2EConfig;
139
+ ```
140
+
141
+ Start each test with `app.open()`: the warm-up in `prepare` passes no launch
142
+ arguments, so it rests on the dev launcher. The first launch waits for the dev
143
+ server to bundle the app; a test's first check may need a longer timeout than
144
+ the rest. A test that relaunches with its own `launchArguments` replaces the
145
+ target's, so it lists these again. expo-dev-launcher on Android does not read
146
+ `--initialUrl`: open the server there with `device.openLink` and the build's
147
+ `exp+<slug>://expo-development-client/?url=<encoded server URL>` link.
148
+
109
149
  ## Several devices
110
150
 
111
151
  Add a target for each platform:
@@ -240,7 +240,9 @@ bunx e2e models openai # one provider
240
240
 
241
241
  Asks the vendor which models the stored login serves and prints one line per
242
242
  model: the id `chatgpt()`, `copilot()`, or `grok()` takes, the vendor's name
243
- for it, and its notes (reasoning levels, vision, preview, hidden). Without a
243
+ for it, and its notes (reasoning levels, vision, preview, hidden, and for
244
+ Copilot `not enabled` or `no chat completions` when `copilot()` cannot call
245
+ it). Without a
244
246
  stored login, or when the named provider has none, exits 1 with the sign-in
245
247
  command; when one of several logins fails to list, the others still print and
246
248
  the command exits 1. An unknown provider exits 2. See
@@ -964,6 +964,7 @@ Use these helpers to keep behavior consistent across engines:
964
964
  | `pollCondition({ deadline, signal, negated, evaluate, onTimeout })`, `Deadline` | Assertion polling and the negation grace window |
965
965
  | `validateJsonValue(value, label, rules?)` | Checks a value is plain JSON: a top-level `undefined` passes; a non-finite number, a cycle, an object that is not a plain object or array, or a function, symbol, bigint, or `undefined` inside is `INVALID_ARGUMENT` naming `label`. A `Secret` is `POLICY_DENIED` unless `rules.onSecret` throws its own; `rules.maxDepth` caps the nesting |
966
966
  | `rejectUnknownKeys(label, value, keys, code?)` | Throws `INVALID_CONFIG` for the first own key of `value` outside `keys`, naming the nearest known key when one is a plausible typo (`web() has unknown key "viewprt"; did you mean "viewport"?`) and the known keys otherwise: the check the runner runs on its own config objects, for an engine factory's options. Pass `'INVALID_ARGUMENT'` as `code` for an object a test passes to a fixture method |
967
+ | `rejectUnknownOptions(api, options, known, code?)` | `INVALID_ARGUMENT` (or `code`, `INVALID_LOCATOR` for a locator option) for an option key a fixture method or matcher does not take, so a JavaScript caller's unsupported option fails instead of running on the default. `options` must be a plain object or `undefined`; a class instance or array is refused, and non-enumerable own keys count as keys |
967
968
  | `obj`, `raceAbort`, `withTimeout`, `withinCleanupBudget` | See [Contributed fixtures](#contributed-fixtures) |
968
969
  | `isProviderRecording(value)` | Whether what a provider's `record` resolved to is a recording: a parseable `startedAt` and a `stop`. Check it before keeping one, so a malformed recording fails the start, named, instead of the stop |
969
970
  | `stopProviderRecording(recording, { artifactsDir, provider, leaseId, signal })` | Ends a hosted service's recording and checks it into a `VideoSegment`; see [Provider recordings](#provider-recordings) |