@withbuddi/buddi 0.1.0-pre.50 → 0.1.0-pre.52

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 (462) hide show
  1. package/extension/background.js +1604 -847
  2. package/extension/manifest.json +3 -3
  3. package/extension/popup.css +91 -3
  4. package/extension/popup.html +49 -32
  5. package/extension/popup.js +215 -123
  6. package/node_modules/@buddi/cli/dist/.tsbuildinfo +1 -1
  7. package/node_modules/@buddi/cli/dist/commands.d.ts.map +1 -1
  8. package/node_modules/@buddi/cli/dist/commands.js +11 -1
  9. package/node_modules/@buddi/cli/dist/commands.js.map +1 -1
  10. package/node_modules/@buddi/core/dist/.tsbuildinfo +1 -1
  11. package/node_modules/@buddi/core/dist/plugin/index.d.ts +1 -1
  12. package/node_modules/@buddi/core/dist/plugin/index.d.ts.map +1 -1
  13. package/node_modules/@buddi/core/dist/plugin/index.js.map +1 -1
  14. package/node_modules/@buddi/core/dist/questions/store.d.ts +3 -1
  15. package/node_modules/@buddi/core/dist/questions/store.d.ts.map +1 -1
  16. package/node_modules/@buddi/core/dist/questions/store.js +3 -3
  17. package/node_modules/@buddi/core/dist/questions/store.js.map +1 -1
  18. package/node_modules/@buddi/core/dist/questions/types.d.ts +46 -1
  19. package/node_modules/@buddi/core/dist/questions/types.d.ts.map +1 -1
  20. package/node_modules/@buddi/core/dist/questions/types.js +2 -1
  21. package/node_modules/@buddi/core/dist/questions/types.js.map +1 -1
  22. package/node_modules/@buddi/core/dist/registry.d.ts.map +1 -1
  23. package/node_modules/@buddi/core/dist/registry.js +11 -2
  24. package/node_modules/@buddi/core/dist/registry.js.map +1 -1
  25. package/node_modules/@buddi/core/dist/scheduler/index.d.ts +1 -0
  26. package/node_modules/@buddi/core/dist/scheduler/index.d.ts.map +1 -1
  27. package/node_modules/@buddi/core/dist/scheduler/index.js +1 -0
  28. package/node_modules/@buddi/core/dist/scheduler/index.js.map +1 -1
  29. package/node_modules/@buddi/core/dist/scheduler/manual.d.ts +50 -0
  30. package/node_modules/@buddi/core/dist/scheduler/manual.d.ts.map +1 -0
  31. package/node_modules/@buddi/core/dist/scheduler/manual.js +73 -0
  32. package/node_modules/@buddi/core/dist/scheduler/manual.js.map +1 -0
  33. package/node_modules/@buddi/core/dist/secrets/approval.d.ts +54 -0
  34. package/node_modules/@buddi/core/dist/secrets/approval.d.ts.map +1 -1
  35. package/node_modules/@buddi/core/dist/secrets/approval.js +58 -1
  36. package/node_modules/@buddi/core/dist/secrets/approval.js.map +1 -1
  37. package/node_modules/@buddi/core/dist/secrets/settings.d.ts +178 -0
  38. package/node_modules/@buddi/core/dist/secrets/settings.d.ts.map +1 -1
  39. package/node_modules/@buddi/core/dist/secrets/settings.js +63 -6
  40. package/node_modules/@buddi/core/dist/secrets/settings.js.map +1 -1
  41. package/node_modules/@buddi/core/dist/secrets/store.d.ts +31 -0
  42. package/node_modules/@buddi/core/dist/secrets/store.d.ts.map +1 -1
  43. package/node_modules/@buddi/core/dist/secrets/store.js +75 -0
  44. package/node_modules/@buddi/core/dist/secrets/store.js.map +1 -1
  45. package/node_modules/@buddi/core/dist/secrets/use.d.ts.map +1 -1
  46. package/node_modules/@buddi/core/dist/secrets/use.js +68 -3
  47. package/node_modules/@buddi/core/dist/secrets/use.js.map +1 -1
  48. package/node_modules/@buddi/core/dist/tools.d.ts +22 -0
  49. package/node_modules/@buddi/core/dist/tools.d.ts.map +1 -1
  50. package/node_modules/@buddi/core/dist/tools.js.map +1 -1
  51. package/node_modules/@buddi/core/migrations/080_secret_requests.sql +14 -0
  52. package/node_modules/@buddi/gateway/dist/.tsbuildinfo +1 -1
  53. package/node_modules/@buddi/gateway/dist/chat/session.d.ts.map +1 -1
  54. package/node_modules/@buddi/gateway/dist/chat/session.js +2 -1
  55. package/node_modules/@buddi/gateway/dist/chat/session.js.map +1 -1
  56. package/node_modules/@buddi/gateway/dist/mcp/requests.d.ts.map +1 -1
  57. package/node_modules/@buddi/gateway/dist/mcp/requests.js +9 -1
  58. package/node_modules/@buddi/gateway/dist/mcp/requests.js.map +1 -1
  59. package/node_modules/@buddi/gateway/dist/missions/execute.d.ts.map +1 -1
  60. package/node_modules/@buddi/gateway/dist/missions/execute.js +3 -1
  61. package/node_modules/@buddi/gateway/dist/missions/execute.js.map +1 -1
  62. package/node_modules/@buddi/gateway/dist/missions/reminders.d.ts +7 -2
  63. package/node_modules/@buddi/gateway/dist/missions/reminders.d.ts.map +1 -1
  64. package/node_modules/@buddi/gateway/dist/missions/reminders.js +27 -9
  65. package/node_modules/@buddi/gateway/dist/missions/reminders.js.map +1 -1
  66. package/node_modules/@buddi/gateway/dist/missions/run-now.d.ts +38 -0
  67. package/node_modules/@buddi/gateway/dist/missions/run-now.d.ts.map +1 -0
  68. package/node_modules/@buddi/gateway/dist/missions/run-now.js +62 -0
  69. package/node_modules/@buddi/gateway/dist/missions/run-now.js.map +1 -0
  70. package/node_modules/@buddi/gateway/dist/missions-cli.d.ts +1 -1
  71. package/node_modules/@buddi/gateway/dist/missions-cli.d.ts.map +1 -1
  72. package/node_modules/@buddi/gateway/dist/missions-cli.js +21 -10
  73. package/node_modules/@buddi/gateway/dist/missions-cli.js.map +1 -1
  74. package/node_modules/@buddi/gateway/dist/serve.d.ts +3 -12
  75. package/node_modules/@buddi/gateway/dist/serve.d.ts.map +1 -1
  76. package/node_modules/@buddi/gateway/dist/serve.js +2 -21
  77. package/node_modules/@buddi/gateway/dist/serve.js.map +1 -1
  78. package/node_modules/@buddi/gateway/dist/surfaces/browser-cards.d.ts +15 -3
  79. package/node_modules/@buddi/gateway/dist/surfaces/browser-cards.d.ts.map +1 -1
  80. package/node_modules/@buddi/gateway/dist/surfaces/browser-cards.js +34 -7
  81. package/node_modules/@buddi/gateway/dist/surfaces/browser-cards.js.map +1 -1
  82. package/node_modules/@buddi/gateway/dist/surfaces/offered-actions.d.ts.map +1 -1
  83. package/node_modules/@buddi/gateway/dist/surfaces/offered-actions.js +8 -2
  84. package/node_modules/@buddi/gateway/dist/surfaces/offered-actions.js.map +1 -1
  85. package/node_modules/@buddi/gateway/dist/surfaces/pending-question.d.ts +3 -1
  86. package/node_modules/@buddi/gateway/dist/surfaces/pending-question.d.ts.map +1 -1
  87. package/node_modules/@buddi/gateway/dist/surfaces/pending-question.js.map +1 -1
  88. package/node_modules/@buddi/gateway/dist/surfaces/secret-request.d.ts +173 -0
  89. package/node_modules/@buddi/gateway/dist/surfaces/secret-request.d.ts.map +1 -0
  90. package/node_modules/@buddi/gateway/dist/surfaces/secret-request.js +332 -0
  91. package/node_modules/@buddi/gateway/dist/surfaces/secret-request.js.map +1 -0
  92. package/node_modules/@buddi/gateway/dist/system-context.js +1 -1
  93. package/node_modules/@buddi/gateway/dist/system-context.js.map +1 -1
  94. package/node_modules/@buddi/gateway/dist/telegram/main.d.ts.map +1 -1
  95. package/node_modules/@buddi/gateway/dist/telegram/main.js +14 -3
  96. package/node_modules/@buddi/gateway/dist/telegram/main.js.map +1 -1
  97. package/node_modules/@buddi/gateway/dist/telegram/surface.d.ts.map +1 -1
  98. package/node_modules/@buddi/gateway/dist/telegram/surface.js +4 -1
  99. package/node_modules/@buddi/gateway/dist/telegram/surface.js.map +1 -1
  100. package/node_modules/@buddi/gateway/dist/web/api-routes.d.ts.map +1 -1
  101. package/node_modules/@buddi/gateway/dist/web/api-routes.js +16 -1
  102. package/node_modules/@buddi/gateway/dist/web/api-routes.js.map +1 -1
  103. package/node_modules/@buddi/gateway/dist/web/approval-ask.js +2 -2
  104. package/node_modules/@buddi/gateway/dist/web/approval-ask.js.map +1 -1
  105. package/node_modules/@buddi/gateway/dist/web/browser-capture.d.ts +13 -0
  106. package/node_modules/@buddi/gateway/dist/web/browser-capture.d.ts.map +1 -0
  107. package/node_modules/@buddi/gateway/dist/web/browser-capture.js +24 -0
  108. package/node_modules/@buddi/gateway/dist/web/browser-capture.js.map +1 -0
  109. package/node_modules/@buddi/gateway/dist/web/chat.d.ts +26 -0
  110. package/node_modules/@buddi/gateway/dist/web/chat.d.ts.map +1 -1
  111. package/node_modules/@buddi/gateway/dist/web/chat.js +87 -2
  112. package/node_modules/@buddi/gateway/dist/web/chat.js.map +1 -1
  113. package/node_modules/@buddi/gateway/dist/web/extension.d.ts +30 -0
  114. package/node_modules/@buddi/gateway/dist/web/extension.d.ts.map +1 -1
  115. package/node_modules/@buddi/gateway/dist/web/extension.js +86 -6
  116. package/node_modules/@buddi/gateway/dist/web/extension.js.map +1 -1
  117. package/node_modules/@buddi/gateway/dist/web/onboarding.js +1 -1
  118. package/node_modules/@buddi/gateway/dist/web/onboarding.js.map +1 -1
  119. package/node_modules/@buddi/gateway/dist/web/read.d.ts +2 -0
  120. package/node_modules/@buddi/gateway/dist/web/read.d.ts.map +1 -1
  121. package/node_modules/@buddi/gateway/dist/web/read.js +2 -1
  122. package/node_modules/@buddi/gateway/dist/web/read.js.map +1 -1
  123. package/node_modules/@buddi/gateway/dist/web/remote-hand.d.ts +26 -2
  124. package/node_modules/@buddi/gateway/dist/web/remote-hand.d.ts.map +1 -1
  125. package/node_modules/@buddi/gateway/dist/web/remote-hand.js +89 -28
  126. package/node_modules/@buddi/gateway/dist/web/remote-hand.js.map +1 -1
  127. package/node_modules/@buddi/gateway/dist/web/secret-request.d.ts +54 -0
  128. package/node_modules/@buddi/gateway/dist/web/secret-request.d.ts.map +1 -0
  129. package/node_modules/@buddi/gateway/dist/web/secret-request.js +264 -0
  130. package/node_modules/@buddi/gateway/dist/web/secret-request.js.map +1 -0
  131. package/node_modules/@buddi/gateway/dist/web/secrets.d.ts +1 -0
  132. package/node_modules/@buddi/gateway/dist/web/secrets.d.ts.map +1 -1
  133. package/node_modules/@buddi/gateway/dist/web/secrets.js +1 -1
  134. package/node_modules/@buddi/gateway/dist/web/secrets.js.map +1 -1
  135. package/node_modules/@buddi/gateway/dist/web/server.d.ts.map +1 -1
  136. package/node_modules/@buddi/gateway/dist/web/server.js +76 -4
  137. package/node_modules/@buddi/gateway/dist/web/server.js.map +1 -1
  138. package/node_modules/@buddi/gateway/dist/web/write.d.ts +14 -0
  139. package/node_modules/@buddi/gateway/dist/web/write.d.ts.map +1 -1
  140. package/node_modules/@buddi/gateway/dist/web/write.js +21 -0
  141. package/node_modules/@buddi/gateway/dist/web/write.js.map +1 -1
  142. package/node_modules/@buddi/install/dist/.tsbuildinfo +1 -1
  143. package/node_modules/@buddi/runtime/dist/.tsbuildinfo +1 -1
  144. package/node_modules/@buddi/runtime/dist/anthropic.d.ts +7 -0
  145. package/node_modules/@buddi/runtime/dist/anthropic.d.ts.map +1 -1
  146. package/node_modules/@buddi/runtime/dist/anthropic.js +19 -1
  147. package/node_modules/@buddi/runtime/dist/anthropic.js.map +1 -1
  148. package/node_modules/@buddi/runtime/dist/codex-direct.d.ts +1 -1
  149. package/node_modules/@buddi/runtime/dist/codex-direct.js +1 -1
  150. package/node_modules/@buddi/tool-artifacts/dist/.tsbuildinfo +1 -1
  151. package/node_modules/@buddi/tool-browser/dist/.tsbuildinfo +1 -1
  152. package/node_modules/@buddi/tool-browser/dist/controller.d.ts +16 -1
  153. package/node_modules/@buddi/tool-browser/dist/controller.d.ts.map +1 -1
  154. package/node_modules/@buddi/tool-browser/dist/controller.js +59 -5
  155. package/node_modules/@buddi/tool-browser/dist/controller.js.map +1 -1
  156. package/node_modules/@buddi/tool-browser/dist/driver.d.ts +12 -0
  157. package/node_modules/@buddi/tool-browser/dist/driver.d.ts.map +1 -1
  158. package/node_modules/@buddi/tool-browser/dist/driver.js +41 -2
  159. package/node_modules/@buddi/tool-browser/dist/driver.js.map +1 -1
  160. package/node_modules/@buddi/tool-browser/dist/extension.d.ts +49 -9
  161. package/node_modules/@buddi/tool-browser/dist/extension.d.ts.map +1 -1
  162. package/node_modules/@buddi/tool-browser/dist/extension.js +145 -21
  163. package/node_modules/@buddi/tool-browser/dist/extension.js.map +1 -1
  164. package/node_modules/@buddi/tool-browser/dist/index.d.ts +10 -6
  165. package/node_modules/@buddi/tool-browser/dist/index.d.ts.map +1 -1
  166. package/node_modules/@buddi/tool-browser/dist/index.js +22 -8
  167. package/node_modules/@buddi/tool-browser/dist/index.js.map +1 -1
  168. package/node_modules/@buddi/tool-browser/dist/routes.d.ts +10 -1
  169. package/node_modules/@buddi/tool-browser/dist/routes.d.ts.map +1 -1
  170. package/node_modules/@buddi/tool-browser/dist/routes.js +24 -0
  171. package/node_modules/@buddi/tool-browser/dist/routes.js.map +1 -1
  172. package/node_modules/@buddi/tool-browser/dist/service.d.ts +48 -1
  173. package/node_modules/@buddi/tool-browser/dist/service.d.ts.map +1 -1
  174. package/node_modules/@buddi/tool-browser/dist/service.js +114 -11
  175. package/node_modules/@buddi/tool-browser/dist/service.js.map +1 -1
  176. package/node_modules/@buddi/tool-browser/dist/types.d.ts +54 -3
  177. package/node_modules/@buddi/tool-browser/dist/types.d.ts.map +1 -1
  178. package/node_modules/@buddi/tool-browser/dist/types.js +17 -1
  179. package/node_modules/@buddi/tool-browser/dist/types.js.map +1 -1
  180. package/node_modules/@buddi/tool-email/dist/.tsbuildinfo +1 -1
  181. package/node_modules/@buddi/tool-host/dist/.tsbuildinfo +1 -1
  182. package/node_modules/@buddi/tool-mcp/dist/.tsbuildinfo +1 -1
  183. package/node_modules/@buddi/tool-memory/dist/.tsbuildinfo +1 -1
  184. package/node_modules/@buddi/tool-web/dist/.tsbuildinfo +1 -1
  185. package/node_modules/imapflow/CHANGELOG.md +30 -0
  186. package/node_modules/imapflow/dist/cjs/commands/authenticate.js +15 -4
  187. package/node_modules/imapflow/dist/cjs/commands/enable.js +6 -0
  188. package/node_modules/imapflow/dist/cjs/commands/fetch.js +22 -5
  189. package/node_modules/imapflow/dist/cjs/commands/select.d.ts +3 -14
  190. package/node_modules/imapflow/dist/cjs/commands/select.js +1 -4
  191. package/node_modules/imapflow/dist/cjs/commands/store.js +7 -6
  192. package/node_modules/imapflow/dist/cjs/download.js +139 -5
  193. package/node_modules/imapflow/dist/cjs/imap-flow.d.ts +2 -2
  194. package/node_modules/imapflow/dist/cjs/imap-flow.js +51 -12
  195. package/node_modules/imapflow/dist/cjs/package-info.d.ts +1 -1
  196. package/node_modules/imapflow/dist/cjs/package-info.js +1 -1
  197. package/node_modules/imapflow/dist/cjs/search-compiler.js +6 -3
  198. package/node_modules/imapflow/dist/cjs/tools.d.ts +14 -3
  199. package/node_modules/imapflow/dist/cjs/tools.js +68 -6
  200. package/node_modules/imapflow/dist/cjs/types.d.ts +9 -1
  201. package/node_modules/imapflow/dist/esm/commands/authenticate.js +15 -4
  202. package/node_modules/imapflow/dist/esm/commands/enable.js +6 -0
  203. package/node_modules/imapflow/dist/esm/commands/fetch.js +22 -5
  204. package/node_modules/imapflow/dist/esm/commands/select.d.ts +3 -14
  205. package/node_modules/imapflow/dist/esm/commands/select.js +1 -4
  206. package/node_modules/imapflow/dist/esm/commands/store.js +8 -7
  207. package/node_modules/imapflow/dist/esm/download.js +139 -5
  208. package/node_modules/imapflow/dist/esm/imap-flow.d.ts +2 -2
  209. package/node_modules/imapflow/dist/esm/imap-flow.js +52 -13
  210. package/node_modules/imapflow/dist/esm/package-info.d.ts +1 -1
  211. package/node_modules/imapflow/dist/esm/package-info.js +1 -1
  212. package/node_modules/imapflow/dist/esm/search-compiler.js +6 -3
  213. package/node_modules/imapflow/dist/esm/tools.d.ts +14 -3
  214. package/node_modules/imapflow/dist/esm/tools.js +67 -6
  215. package/node_modules/imapflow/dist/esm/types.d.ts +9 -1
  216. package/node_modules/imapflow/package.json +5 -3
  217. package/node_modules/playwright/README.md +4 -4
  218. package/node_modules/playwright/lib/agents/playwright-test-generator.agent.md +1 -1
  219. package/node_modules/playwright/lib/cli/testActions.js +8 -5
  220. package/node_modules/playwright/lib/common/index.js +37 -23
  221. package/node_modules/playwright/lib/common/index.js.txt +8 -9
  222. package/node_modules/playwright/lib/index.js +16 -4
  223. package/node_modules/playwright/lib/matchers/expect.js +13 -7
  224. package/node_modules/playwright/lib/matchers/expect.js.txt +4 -4
  225. package/node_modules/playwright/lib/program.js +2 -1
  226. package/node_modules/playwright/lib/runner/index.js +438 -244
  227. package/node_modules/playwright/lib/runner/index.js.txt +12 -11
  228. package/node_modules/playwright/lib/transform/babelBundle.js +2612 -2396
  229. package/node_modules/playwright/lib/transform/babelBundle.js.LICENSE +15 -15
  230. package/node_modules/playwright/lib/transform/babelBundle.js.txt +14 -11
  231. package/node_modules/playwright/lib/transform/esmLoader.js +17 -5
  232. package/node_modules/playwright/lib/transform/esmLoader.js.txt +3 -3
  233. package/node_modules/playwright/lib/worker/workerProcessEntry.js +17 -18
  234. package/node_modules/playwright/package.json +2 -7
  235. package/node_modules/playwright/types/test.d.ts +156 -39
  236. package/node_modules/playwright-core/browsers.json +9 -9
  237. package/node_modules/playwright-core/cli.js +1 -0
  238. package/node_modules/playwright-core/lib/bootstrap.js +61 -0
  239. package/node_modules/playwright-core/lib/coreBundle.js +6393 -4170
  240. package/node_modules/playwright-core/lib/server/electron/loader.js +4 -0
  241. package/node_modules/playwright-core/lib/tools/cli-client/cli.js +2 -1
  242. package/node_modules/playwright-core/lib/tools/cli-client/help.json +99 -12
  243. package/node_modules/playwright-core/lib/tools/cli-client/output.js +17 -16
  244. package/node_modules/playwright-core/lib/tools/cli-client/program.js +8 -4
  245. package/node_modules/playwright-core/lib/tools/cli-client/session.js +2 -0
  246. package/node_modules/playwright-core/lib/tools/skills/playwright-cli/SKILL.md +71 -3
  247. package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/pr-attachments.md +60 -0
  248. package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/running-code.md +4 -0
  249. package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/session-management.md +2 -0
  250. package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/test-generation.md +1 -1
  251. package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/video-recording.md +76 -3
  252. package/node_modules/playwright-core/lib/tools/skills/playwright-trace/SKILL.md +1 -1
  253. package/node_modules/playwright-core/lib/utilsBundle.js +948 -227
  254. package/node_modules/playwright-core/lib/utilsBundle.js.LICENSE +6 -6
  255. package/node_modules/playwright-core/lib/vite/htmlReport/report.js +1 -1
  256. package/node_modules/playwright-core/lib/vite/recorder/assets/{codeMirrorModule-CVQWJZAA.js → codeMirrorModule-DK72OMRi.js} +1 -1
  257. package/node_modules/playwright-core/lib/vite/recorder/assets/index-Cn0mmDuv.js +129 -0
  258. package/node_modules/playwright-core/lib/vite/recorder/index.html +1 -1
  259. package/node_modules/playwright-core/lib/vite/traceViewer/assets/{codeMirrorModule-BbkfBe3n.js → codeMirrorModule-BEB2e8M3.js} +1 -1
  260. package/node_modules/playwright-core/lib/vite/traceViewer/assets/defaultSettingsView-D-g2vrvf.js +184 -0
  261. package/node_modules/playwright-core/lib/vite/traceViewer/assets/{xtermModule-DywYcAf8.js → xtermModule-B794rD2Z.js} +1 -1
  262. package/node_modules/playwright-core/lib/vite/traceViewer/{defaultSettingsView.Bqk9acqE.css → defaultSettingsView.C8BeHuxd.css} +1 -1
  263. package/node_modules/playwright-core/lib/vite/traceViewer/{index.B4cLoZK3.js → index.7-c5LSTW.js} +1 -1
  264. package/node_modules/playwright-core/lib/vite/traceViewer/index.html +3 -3
  265. package/node_modules/playwright-core/lib/vite/traceViewer/sw.bundle.js +3 -3
  266. package/node_modules/playwright-core/lib/vite/traceViewer/{uiMode.CU5KtEkS.js → uiMode.CYwC_gH1.js} +4 -4
  267. package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.html +3 -3
  268. package/node_modules/playwright-core/package.json +1 -1
  269. package/node_modules/playwright-core/types/protocol.d.ts +468 -337
  270. package/node_modules/playwright-core/types/types.d.ts +572 -37
  271. package/package.json +2 -2
  272. package/packages/cli/dist/.tsbuildinfo +1 -1
  273. package/packages/cli/dist/commands.d.ts.map +1 -1
  274. package/packages/cli/dist/commands.js +11 -1
  275. package/packages/cli/dist/commands.js.map +1 -1
  276. package/packages/core/dist/.tsbuildinfo +1 -1
  277. package/packages/core/dist/plugin/index.d.ts +1 -1
  278. package/packages/core/dist/plugin/index.d.ts.map +1 -1
  279. package/packages/core/dist/plugin/index.js.map +1 -1
  280. package/packages/core/dist/questions/store.d.ts +3 -1
  281. package/packages/core/dist/questions/store.d.ts.map +1 -1
  282. package/packages/core/dist/questions/store.js +3 -3
  283. package/packages/core/dist/questions/store.js.map +1 -1
  284. package/packages/core/dist/questions/types.d.ts +46 -1
  285. package/packages/core/dist/questions/types.d.ts.map +1 -1
  286. package/packages/core/dist/questions/types.js +2 -1
  287. package/packages/core/dist/questions/types.js.map +1 -1
  288. package/packages/core/dist/registry.d.ts.map +1 -1
  289. package/packages/core/dist/registry.js +11 -2
  290. package/packages/core/dist/registry.js.map +1 -1
  291. package/packages/core/dist/scheduler/index.d.ts +1 -0
  292. package/packages/core/dist/scheduler/index.d.ts.map +1 -1
  293. package/packages/core/dist/scheduler/index.js +1 -0
  294. package/packages/core/dist/scheduler/index.js.map +1 -1
  295. package/packages/core/dist/scheduler/manual.d.ts +50 -0
  296. package/packages/core/dist/scheduler/manual.d.ts.map +1 -0
  297. package/packages/core/dist/scheduler/manual.js +73 -0
  298. package/packages/core/dist/scheduler/manual.js.map +1 -0
  299. package/packages/core/dist/secrets/approval.d.ts +54 -0
  300. package/packages/core/dist/secrets/approval.d.ts.map +1 -1
  301. package/packages/core/dist/secrets/approval.js +58 -1
  302. package/packages/core/dist/secrets/approval.js.map +1 -1
  303. package/packages/core/dist/secrets/settings.d.ts +178 -0
  304. package/packages/core/dist/secrets/settings.d.ts.map +1 -1
  305. package/packages/core/dist/secrets/settings.js +63 -6
  306. package/packages/core/dist/secrets/settings.js.map +1 -1
  307. package/packages/core/dist/secrets/store.d.ts +31 -0
  308. package/packages/core/dist/secrets/store.d.ts.map +1 -1
  309. package/packages/core/dist/secrets/store.js +75 -0
  310. package/packages/core/dist/secrets/store.js.map +1 -1
  311. package/packages/core/dist/secrets/use.d.ts.map +1 -1
  312. package/packages/core/dist/secrets/use.js +68 -3
  313. package/packages/core/dist/secrets/use.js.map +1 -1
  314. package/packages/core/dist/tools.d.ts +22 -0
  315. package/packages/core/dist/tools.d.ts.map +1 -1
  316. package/packages/core/dist/tools.js.map +1 -1
  317. package/packages/core/migrations/080_secret_requests.sql +14 -0
  318. package/packages/gateway/dist/.tsbuildinfo +1 -1
  319. package/packages/gateway/dist/chat/session.d.ts.map +1 -1
  320. package/packages/gateway/dist/chat/session.js +2 -1
  321. package/packages/gateway/dist/chat/session.js.map +1 -1
  322. package/packages/gateway/dist/mcp/requests.d.ts.map +1 -1
  323. package/packages/gateway/dist/mcp/requests.js +9 -1
  324. package/packages/gateway/dist/mcp/requests.js.map +1 -1
  325. package/packages/gateway/dist/missions/execute.d.ts.map +1 -1
  326. package/packages/gateway/dist/missions/execute.js +3 -1
  327. package/packages/gateway/dist/missions/execute.js.map +1 -1
  328. package/packages/gateway/dist/missions/reminders.d.ts +7 -2
  329. package/packages/gateway/dist/missions/reminders.d.ts.map +1 -1
  330. package/packages/gateway/dist/missions/reminders.js +27 -9
  331. package/packages/gateway/dist/missions/reminders.js.map +1 -1
  332. package/packages/gateway/dist/missions/run-now.d.ts +38 -0
  333. package/packages/gateway/dist/missions/run-now.d.ts.map +1 -0
  334. package/packages/gateway/dist/missions/run-now.js +62 -0
  335. package/packages/gateway/dist/missions/run-now.js.map +1 -0
  336. package/packages/gateway/dist/missions-cli.d.ts +1 -1
  337. package/packages/gateway/dist/missions-cli.d.ts.map +1 -1
  338. package/packages/gateway/dist/missions-cli.js +21 -10
  339. package/packages/gateway/dist/missions-cli.js.map +1 -1
  340. package/packages/gateway/dist/serve.d.ts +3 -12
  341. package/packages/gateway/dist/serve.d.ts.map +1 -1
  342. package/packages/gateway/dist/serve.js +2 -21
  343. package/packages/gateway/dist/serve.js.map +1 -1
  344. package/packages/gateway/dist/surfaces/browser-cards.d.ts +15 -3
  345. package/packages/gateway/dist/surfaces/browser-cards.d.ts.map +1 -1
  346. package/packages/gateway/dist/surfaces/browser-cards.js +34 -7
  347. package/packages/gateway/dist/surfaces/browser-cards.js.map +1 -1
  348. package/packages/gateway/dist/surfaces/offered-actions.d.ts.map +1 -1
  349. package/packages/gateway/dist/surfaces/offered-actions.js +8 -2
  350. package/packages/gateway/dist/surfaces/offered-actions.js.map +1 -1
  351. package/packages/gateway/dist/surfaces/pending-question.d.ts +3 -1
  352. package/packages/gateway/dist/surfaces/pending-question.d.ts.map +1 -1
  353. package/packages/gateway/dist/surfaces/pending-question.js.map +1 -1
  354. package/packages/gateway/dist/surfaces/secret-request.d.ts +173 -0
  355. package/packages/gateway/dist/surfaces/secret-request.d.ts.map +1 -0
  356. package/packages/gateway/dist/surfaces/secret-request.js +332 -0
  357. package/packages/gateway/dist/surfaces/secret-request.js.map +1 -0
  358. package/packages/gateway/dist/system-context.js +1 -1
  359. package/packages/gateway/dist/system-context.js.map +1 -1
  360. package/packages/gateway/dist/telegram/main.d.ts.map +1 -1
  361. package/packages/gateway/dist/telegram/main.js +14 -3
  362. package/packages/gateway/dist/telegram/main.js.map +1 -1
  363. package/packages/gateway/dist/telegram/surface.d.ts.map +1 -1
  364. package/packages/gateway/dist/telegram/surface.js +4 -1
  365. package/packages/gateway/dist/telegram/surface.js.map +1 -1
  366. package/packages/gateway/dist/web/api-routes.d.ts.map +1 -1
  367. package/packages/gateway/dist/web/api-routes.js +16 -1
  368. package/packages/gateway/dist/web/api-routes.js.map +1 -1
  369. package/packages/gateway/dist/web/approval-ask.js +2 -2
  370. package/packages/gateway/dist/web/approval-ask.js.map +1 -1
  371. package/packages/gateway/dist/web/browser-capture.d.ts +13 -0
  372. package/packages/gateway/dist/web/browser-capture.d.ts.map +1 -0
  373. package/packages/gateway/dist/web/browser-capture.js +24 -0
  374. package/packages/gateway/dist/web/browser-capture.js.map +1 -0
  375. package/packages/gateway/dist/web/chat.d.ts +26 -0
  376. package/packages/gateway/dist/web/chat.d.ts.map +1 -1
  377. package/packages/gateway/dist/web/chat.js +87 -2
  378. package/packages/gateway/dist/web/chat.js.map +1 -1
  379. package/packages/gateway/dist/web/extension.d.ts +30 -0
  380. package/packages/gateway/dist/web/extension.d.ts.map +1 -1
  381. package/packages/gateway/dist/web/extension.js +86 -6
  382. package/packages/gateway/dist/web/extension.js.map +1 -1
  383. package/packages/gateway/dist/web/onboarding.js +1 -1
  384. package/packages/gateway/dist/web/onboarding.js.map +1 -1
  385. package/packages/gateway/dist/web/read.d.ts +2 -0
  386. package/packages/gateway/dist/web/read.d.ts.map +1 -1
  387. package/packages/gateway/dist/web/read.js +2 -1
  388. package/packages/gateway/dist/web/read.js.map +1 -1
  389. package/packages/gateway/dist/web/remote-hand.d.ts +26 -2
  390. package/packages/gateway/dist/web/remote-hand.d.ts.map +1 -1
  391. package/packages/gateway/dist/web/remote-hand.js +89 -28
  392. package/packages/gateway/dist/web/remote-hand.js.map +1 -1
  393. package/packages/gateway/dist/web/secret-request.d.ts +54 -0
  394. package/packages/gateway/dist/web/secret-request.d.ts.map +1 -0
  395. package/packages/gateway/dist/web/secret-request.js +264 -0
  396. package/packages/gateway/dist/web/secret-request.js.map +1 -0
  397. package/packages/gateway/dist/web/secrets.d.ts +1 -0
  398. package/packages/gateway/dist/web/secrets.d.ts.map +1 -1
  399. package/packages/gateway/dist/web/secrets.js +1 -1
  400. package/packages/gateway/dist/web/secrets.js.map +1 -1
  401. package/packages/gateway/dist/web/server.d.ts.map +1 -1
  402. package/packages/gateway/dist/web/server.js +76 -4
  403. package/packages/gateway/dist/web/server.js.map +1 -1
  404. package/packages/gateway/dist/web/write.d.ts +14 -0
  405. package/packages/gateway/dist/web/write.d.ts.map +1 -1
  406. package/packages/gateway/dist/web/write.js +21 -0
  407. package/packages/gateway/dist/web/write.js.map +1 -1
  408. package/packages/install/dist/.tsbuildinfo +1 -1
  409. package/packages/runtime/dist/.tsbuildinfo +1 -1
  410. package/packages/runtime/dist/anthropic.d.ts +7 -0
  411. package/packages/runtime/dist/anthropic.d.ts.map +1 -1
  412. package/packages/runtime/dist/anthropic.js +19 -1
  413. package/packages/runtime/dist/anthropic.js.map +1 -1
  414. package/packages/runtime/dist/codex-direct.d.ts +1 -1
  415. package/packages/runtime/dist/codex-direct.js +1 -1
  416. package/packages/tools/artifacts/dist/.tsbuildinfo +1 -1
  417. package/packages/tools/browser/dist/.tsbuildinfo +1 -1
  418. package/packages/tools/browser/dist/controller.d.ts +16 -1
  419. package/packages/tools/browser/dist/controller.d.ts.map +1 -1
  420. package/packages/tools/browser/dist/controller.js +59 -5
  421. package/packages/tools/browser/dist/controller.js.map +1 -1
  422. package/packages/tools/browser/dist/driver.d.ts +12 -0
  423. package/packages/tools/browser/dist/driver.d.ts.map +1 -1
  424. package/packages/tools/browser/dist/driver.js +41 -2
  425. package/packages/tools/browser/dist/driver.js.map +1 -1
  426. package/packages/tools/browser/dist/extension.d.ts +49 -9
  427. package/packages/tools/browser/dist/extension.d.ts.map +1 -1
  428. package/packages/tools/browser/dist/extension.js +145 -21
  429. package/packages/tools/browser/dist/extension.js.map +1 -1
  430. package/packages/tools/browser/dist/index.d.ts +10 -6
  431. package/packages/tools/browser/dist/index.d.ts.map +1 -1
  432. package/packages/tools/browser/dist/index.js +22 -8
  433. package/packages/tools/browser/dist/index.js.map +1 -1
  434. package/packages/tools/browser/dist/routes.d.ts +10 -1
  435. package/packages/tools/browser/dist/routes.d.ts.map +1 -1
  436. package/packages/tools/browser/dist/routes.js +24 -0
  437. package/packages/tools/browser/dist/routes.js.map +1 -1
  438. package/packages/tools/browser/dist/service.d.ts +48 -1
  439. package/packages/tools/browser/dist/service.d.ts.map +1 -1
  440. package/packages/tools/browser/dist/service.js +114 -11
  441. package/packages/tools/browser/dist/service.js.map +1 -1
  442. package/packages/tools/browser/dist/types.d.ts +54 -3
  443. package/packages/tools/browser/dist/types.d.ts.map +1 -1
  444. package/packages/tools/browser/dist/types.js +17 -1
  445. package/packages/tools/browser/dist/types.js.map +1 -1
  446. package/packages/tools/email/dist/.tsbuildinfo +1 -1
  447. package/packages/tools/host/dist/.tsbuildinfo +1 -1
  448. package/packages/tools/mcp/dist/.tsbuildinfo +1 -1
  449. package/packages/tools/memory/dist/.tsbuildinfo +1 -1
  450. package/packages/tools/web/dist/.tsbuildinfo +1 -1
  451. package/packages/web/dist/assets/index-oxmxR39o.js +155 -0
  452. package/packages/web/dist/assets/index-rMRjibNI.css +1 -0
  453. package/packages/web/dist/assets/{lottie_light-BJaxbmZQ.js → lottie_light-DROBTM6Y.js} +1 -1
  454. package/packages/web/dist/build.json +1 -1
  455. package/packages/web/dist/index.html +2 -2
  456. package/packages/web/dist/precache.json +4 -4
  457. package/node_modules/playwright/jsx-runtime.js +0 -42
  458. package/node_modules/playwright/jsx-runtime.mjs +0 -21
  459. package/node_modules/playwright-core/lib/vite/recorder/assets/index-hrlLqLtq.js +0 -129
  460. package/node_modules/playwright-core/lib/vite/traceViewer/assets/defaultSettingsView-Ds6CBOo0.js +0 -182
  461. package/packages/web/dist/assets/index-DBVZzTau.css +0 -1
  462. package/packages/web/dist/assets/index-DqoP9iYJ.js +0 -155
@@ -2,6 +2,7 @@
2
2
  import libmime from 'libmime';
3
3
  import { resolveCharset } from './charsets.js';
4
4
  import { compiler } from './handler/imap-handler.js';
5
+ import imapFormalSyntax from './handler/imap-formal-syntax.js';
5
6
  import { createHash } from 'node:crypto';
6
7
  import { JPDecoder } from './jp-decoder.js';
7
8
  import iconv from 'iconv-lite';
@@ -280,7 +281,8 @@ export function buildStatusQueryAttributes(connection, statusQuery) {
280
281
  }
281
282
  break;
282
283
  case 'HIGHESTMODSEQ':
283
- if (connection.capabilities.has('CONDSTORE')) {
284
+ // QRESYNC implies CONDSTORE (RFC 7162 3.2.3)
285
+ if (connection.capabilities.has('CONDSTORE') || connection.capabilities.has('QRESYNC')) {
284
286
  attributes.push({ type: 'ATOM', value: key.toUpperCase() });
285
287
  }
286
288
  break;
@@ -655,30 +657,74 @@ export function getColorFlags(color) {
655
657
  }
656
658
  return result;
657
659
  }
660
+ /**
661
+ * Merges the FETCH rows a server sent for one message into one message object. A server may
662
+ * split the data items of a message over several FETCH responses, and may put an unsolicited
663
+ * one (a flag change made by another session) in between (RFC 9051 sections 7.5.2 and 5.2).
664
+ * Later rows win for single values, bodyParts, binaryParts and partialOrigins are combined.
665
+ *
666
+ * @param rows - Formatted rows of the same message, in the order they arrived
667
+ * @returns One message object holding the data of every row
668
+ */
669
+ export function mergeFetchRows(rows) {
670
+ if (rows.length === 1) {
671
+ return rows[0];
672
+ }
673
+ let merged = {};
674
+ let partialOrigins;
675
+ for (let row of rows) {
676
+ let { bodyParts, binaryParts, ...rest } = row;
677
+ Object.assign(merged, rest);
678
+ // combined into collections of their own, so the rows stay untouched
679
+ bodyParts?.forEach((value, key) => (merged.bodyParts ??= new Map()).set(key, value));
680
+ binaryParts?.forEach(key => (merged.binaryParts ??= new Set()).add(key));
681
+ row.partialOrigins?.forEach((value, key) => (partialOrigins ??= new Map()).set(key, value));
682
+ }
683
+ if (partialOrigins) {
684
+ Object.defineProperty(merged, 'partialOrigins', { value: partialOrigins, writable: true, configurable: true });
685
+ }
686
+ return merged;
687
+ }
658
688
  /**
659
689
  * Formats a raw untagged FETCH response into a structured message object.
660
690
  *
661
691
  * @param untagged - Parsed untagged IMAP response
662
692
  * @param mailbox - Current mailbox state object
663
693
  * @param idHashAlgorithm - Hash for the fallback message id, `md5` unless the client was told otherwise
694
+ * @param connection - Connection the response arrived on, decodes Gmail labels like mailbox names
664
695
  * @returns Formatted message object with properties like seq, uid, flags, envelope, etc.
665
696
  */
666
- export async function formatMessageResponse(untagged, mailbox, idHashAlgorithm) {
697
+ export async function formatMessageResponse(untagged, mailbox, idHashAlgorithm, connection) {
667
698
  let map = {};
668
699
  // The sequence number indexes into mailbox state, so an unusable one is dropped rather
669
700
  // than coerced to NaN or Infinity
670
701
  map.seq = parseUintValue(untagged.command, MAX_UINT32_DIGITS) || undefined;
671
702
  let key;
703
+ // the <origin> of a partial section ("BODY[2]<1024>"), kept for the value that follows
704
+ let origin = false;
705
+ let partialOrigins;
706
+ let recordOrigin = (sectionKey) => {
707
+ if (origin !== false) {
708
+ if (!partialOrigins) {
709
+ partialOrigins = new Map();
710
+ }
711
+ partialOrigins.set(sectionKey, origin);
712
+ }
713
+ };
672
714
  let attributes = ((untagged.attributes && untagged.attributes[1]) || []);
673
715
  for (let i = 0, len = attributes.length; i < len; i++) {
674
716
  let attribute = attributes[i];
675
717
  if (i % 2 === 0) {
718
+ origin = false;
676
719
  key = (await compiler({
677
720
  attributes: [attribute]
678
721
  }))
679
722
  .toString()
680
723
  .toLowerCase()
681
- .replace(/<\d+(\.\d+)?>$/, '');
724
+ .replace(/<(\d+)(\.\d+)?>$/, (match, start) => {
725
+ origin = parseUintValue(start, MAX_UINT32_DIGITS);
726
+ return '';
727
+ });
682
728
  continue;
683
729
  }
684
730
  /* c8 ignore start */ // defensive: key is always a string produced by the compiler above
@@ -723,6 +769,7 @@ export async function formatMessageResponse(untagged, mailbox, idHashAlgorithm)
723
769
  case 'body[]':
724
770
  case 'binary[]':
725
771
  map.source = getBuffer(attribute);
772
+ recordOrigin('');
726
773
  break;
727
774
  case 'uid':
728
775
  // A UID feeds mailbox.uidNext one line below, and from there every range
@@ -769,7 +816,8 @@ export async function formatMessageResponse(untagged, mailbox, idHashAlgorithm)
769
816
  map.threadId = getString(attribute);
770
817
  break;
771
818
  case 'x-gm-labels':
772
- map.labels = new Set(getArray(attribute));
819
+ // labels are mailbox names, modified UTF-7 unless UTF-8 is enabled
820
+ map.labels = new Set(getArray(attribute).map(label => (connection ? decodePath(connection, label) : label)));
773
821
  break;
774
822
  case 'rfc822.size':
775
823
  map.size = getUint(attribute) || 0;
@@ -815,6 +863,7 @@ export async function formatMessageResponse(untagged, mailbox, idHashAlgorithm)
815
863
  map.bodyParts = new Map();
816
864
  }
817
865
  map.bodyParts.set(partKey, value);
866
+ recordOrigin(partKey);
818
867
  if (match[1].toLowerCase() === 'binary') {
819
868
  // The part arrived via FETCH BINARY (RFC 3516, FETCH side folded
820
869
  // into IMAP4rev2), so the server has already removed the
@@ -856,6 +905,10 @@ export async function formatMessageResponse(untagged, mailbox, idHashAlgorithm)
856
905
  .update([path, mailbox.uidValidity?.toString() || '', map.uid.toString()].join(':'))
857
906
  .digest('hex');
858
907
  }
908
+ if (partialOrigins) {
909
+ // non-enumerable, so it stays out of logged and serialized fetch results
910
+ Object.defineProperty(map, 'partialOrigins', { value: partialOrigins, writable: true, configurable: true });
911
+ }
859
912
  if (map.flags) {
860
913
  let flagColor = getFlagColor(map.flags);
861
914
  if (flagColor) {
@@ -1298,14 +1351,22 @@ export function formatDateTime(value) {
1298
1351
  let timeStr = date.toISOString().substring(11, 19);
1299
1352
  return `${dateStr} ${timeStr} +0000`;
1300
1353
  }
1354
+ // the memoized ATOM-CHAR set of RFC 9051 section 9
1355
+ const atomChars = imapFormalSyntax['ATOM-CHAR'];
1301
1356
  /**
1302
- * Normalizes a flag string. Returns false for non-settable flags (e.g. \Recent),
1303
- * and capitalizes system flags properly.
1357
+ * Normalizes a flag string. Returns false for non-settable flags (e.g. \Recent) and for
1358
+ * values that are not valid flags (keywords must be atoms), and capitalizes system flags properly.
1304
1359
  *
1305
1360
  * @param flag - Flag string to normalize
1306
1361
  * @returns Normalized flag string, or false if the flag cannot be set
1307
1362
  */
1308
1363
  export function formatFlag(flag) {
1364
+ // RFC 9051 section 9: flag-keyword is an atom and flag-extension is "\\" atom, the same check
1365
+ // the compiler uses to decide what it can send unquoted
1366
+ let atom = flag.charAt(0) === '\\' ? flag.slice(1) : flag;
1367
+ if (!atom || imapFormalSyntax.verify(atom, atomChars()) >= 0) {
1368
+ return false;
1369
+ }
1309
1370
  switch (flag.toLowerCase()) {
1310
1371
  case '\\recent':
1311
1372
  // can not set or remove
@@ -499,6 +499,8 @@ export interface FetchQueryObject {
499
499
  /** Include full message in the response, up to maxLength bytes */
500
500
  maxLength?: number | undefined;
501
501
  } | undefined;
502
+ /** Email ID (OBJECTID EMAILID or Gmail X-GM-MSGID) is always requested when the server supports either extension, so this is accepted but changes nothing */
503
+ emailId?: boolean | undefined;
502
504
  /** If true then include thread ID in the response (only if server supports either OBJECTID or X-GM-EXT-1 extensions) */
503
505
  threadId?: boolean | undefined;
504
506
  /** If true then include GMail labels in the response (only if server supports X-GM-EXT-1 extension) */
@@ -653,9 +655,11 @@ export interface DownloadOptions {
653
655
  maxBytes?: number | undefined;
654
656
  /** How large content parts to ask from the server. Defaults to 65536 */
655
657
  chunkSize?: number | undefined;
658
+ /** If true then requests the content with FETCH BINARY when the server supports it (BINARY or IMAP4rev2), so the server removes the transfer encoding */
659
+ binary?: boolean | undefined;
656
660
  }
657
661
  /** Options for downloadMany(): the download() options without `chunkSize`, as the parts come in one FETCH */
658
- export type DownloadManyOptions = Pick<DownloadOptions, 'uid' | 'maxBytes'>;
662
+ export type DownloadManyOptions = Pick<DownloadOptions, 'uid' | 'maxBytes' | 'binary'>;
659
663
  export interface DownloadManyPart {
660
664
  meta: DownloadMeta;
661
665
  content?: Buffer | null | undefined;
@@ -706,6 +710,10 @@ export interface MailboxOpenOptions {
706
710
  readOnly?: boolean | undefined;
707
711
  /** Optional description for mailbox lock tracking */
708
712
  description?: string | undefined;
713
+ /** QRESYNC (RFC 7162): HIGHESTMODSEQ from an earlier session. With `uidValidity` and QRESYNC enabled, changes since then are reported as `flags` and `expunge` events. getMailboxLock() only applies it when it selects the mailbox, not when the mailbox is already open */
714
+ changedSince?: bigint | number | string | undefined;
715
+ /** QRESYNC (RFC 7162): the UIDVALIDITY known from the previous session, required with `changedSince` */
716
+ uidValidity?: bigint | number | string | undefined;
709
717
  }
710
718
  export interface MailboxLockOptions extends MailboxOpenOptions {
711
719
  /**
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "imapflow",
3
- "version": "2.2.7",
3
+ "version": "2.2.10",
4
4
  "description": "IMAP Client for Node",
5
5
  "type": "module",
6
6
  "main": "./dist/cjs/imap-flow.js",
@@ -51,7 +51,8 @@
51
51
  "lint": "npm run typecheck && eslint .",
52
52
  "lint:fix": "eslint . --fix",
53
53
  "prepare": "npm run build",
54
- "update": "rm -rf node_modules package-lock.json && ncu -u && npm install"
54
+ "update": "rm -rf node_modules package-lock.json && ncu -u && npm install",
55
+ "test:james": "bash test/integration/run-james-tests.sh"
55
56
  },
56
57
  "repository": {
57
58
  "type": "git",
@@ -74,12 +75,13 @@
74
75
  "eslint": "10.12.0",
75
76
  "eslint-config-prettier": "10.1.8",
76
77
  "globals": "17.13.0",
78
+ "imapkit": "4.1.1",
77
79
  "prettier": "3.9.9",
78
80
  "tsx": "4.23.15",
79
81
  "types-node-legacy": "npm:@types/node@20.0.0",
80
82
  "typescript": "6.0.3",
81
83
  "typescript-eslint": "8.71.1",
82
- "wrangler": "4.147.0"
84
+ "wrangler": "4.148.0"
83
85
  },
84
86
  "dependencies": {
85
87
  "@zone-eu/mailsplit": "5.4.20",
@@ -1,6 +1,6 @@
1
1
  # 🎭 Playwright
2
2
 
3
- [![npm version](https://img.shields.io/npm/v/playwright.svg)](https://www.npmjs.com/package/playwright) <!-- GEN:chromium-version-badge -->[![Chromium version](https://img.shields.io/badge/chromium-153.0.8010.12-blue.svg?logo=google-chrome)](https://www.chromium.org/Home)<!-- GEN:stop --> <!-- GEN:firefox-version-badge -->[![Firefox version](https://img.shields.io/badge/firefox-155.0-blue.svg?logo=firefoxbrowser)](https://www.mozilla.org/en-US/firefox/new/)<!-- GEN:stop --> <!-- GEN:webkit-version-badge -->[![WebKit version](https://img.shields.io/badge/webkit-26.6-blue.svg?logo=safari)](https://webkit.org/)<!-- GEN:stop --> [![Join Discord](https://img.shields.io/badge/join-discord-informational)](https://aka.ms/playwright/discord)
3
+ [![npm version](https://img.shields.io/npm/v/playwright.svg)](https://www.npmjs.com/package/playwright) <!-- GEN:chromium-version-badge -->[![Chromium version](https://img.shields.io/badge/chromium-156.0.8078.4-blue.svg?logo=google-chrome)](https://www.chromium.org/Home)<!-- GEN:stop --> <!-- GEN:firefox-version-badge -->[![Firefox version](https://img.shields.io/badge/firefox-157.0-blue.svg?logo=firefoxbrowser)](https://www.mozilla.org/en-US/firefox/new/)<!-- GEN:stop --> <!-- GEN:webkit-version-badge -->[![WebKit version](https://img.shields.io/badge/webkit-27.2-blue.svg?logo=safari)](https://webkit.org/)<!-- GEN:stop --> [![Join Discord](https://img.shields.io/badge/join-discord-informational)](https://aka.ms/playwright/discord)
4
4
 
5
5
  ## [Documentation](https://playwright.dev) | [API reference](https://playwright.dev/docs/api/class-playwright)
6
6
 
@@ -296,9 +296,9 @@ The [Playwright VS Code extension](https://marketplace.visualstudio.com/items?it
296
296
 
297
297
  | | Linux | macOS | Windows |
298
298
  | :--- | :---: | :---: | :---: |
299
- | Chromium<sup>1</sup> <!-- GEN:chromium-version -->153.0.8010.12<!-- GEN:stop --> | :white_check_mark: | :white_check_mark: | :white_check_mark: |
300
- | WebKit <!-- GEN:webkit-version -->26.6<!-- GEN:stop --> | :white_check_mark: | :white_check_mark: | :white_check_mark: |
301
- | Firefox <!-- GEN:firefox-version -->155.0<!-- GEN:stop --> | :white_check_mark: | :white_check_mark: | :white_check_mark: |
299
+ | Chromium<sup>1</sup> <!-- GEN:chromium-version -->156.0.8078.4<!-- GEN:stop --> | :white_check_mark: | :white_check_mark: | :white_check_mark: |
300
+ | WebKit <!-- GEN:webkit-version -->27.2<!-- GEN:stop --> | :white_check_mark: | :white_check_mark: | :white_check_mark: |
301
+ | Firefox <!-- GEN:firefox-version -->157.0<!-- GEN:stop --> | :white_check_mark: | :white_check_mark: | :white_check_mark: |
302
302
 
303
303
  Headless and headed execution on all platforms. <sup>1</sup> Uses [Chrome for Testing](https://developer.chrome.com/blog/chrome-for-testing) by default.
304
304
 
@@ -68,7 +68,7 @@ application behavior.
68
68
  // seed: tests/seed.spec.ts
69
69
 
70
70
  test.describe('Adding New Todos', () => {
71
- test('Add Valid Todo', async { page } => {
71
+ test('Add Valid Todo', async ({ page }) => {
72
72
  // 1. Click in the "What needs to be done?" input field
73
73
  await page.click(...);
74
74
 
@@ -38,9 +38,7 @@ var import_path = __toESM(require("path"));
38
38
  var import_common = require("../common");
39
39
  var import_runner = require("../runner");
40
40
  const { gracefullyProcessExitDoNotHang } = require("playwright-core/lib/coreBundle").utils;
41
- const { startProfiling, stopProfiling } = require("playwright-core/lib/coreBundle").utils;
42
41
  async function runTests(args, opts) {
43
- await startProfiling();
44
42
  const cliOverrides = overridesFromOptions(opts);
45
43
  cliOverrides.argv = process.argv;
46
44
  const config = await import_common.configLoader.loadConfigFromFile(opts.config, cliOverrides, opts.deps === false);
@@ -71,7 +69,6 @@ async function runTests(args, opts) {
71
69
  project: opts.project || void 0,
72
70
  reporter: Array.isArray(opts.reporter) ? opts.reporter : opts.reporter ? [opts.reporter] : void 0
73
71
  });
74
- await stopProfiling("runner");
75
72
  const exitCode2 = status2 === "interrupted" ? 130 : status2 === "passed" ? 0 : 1;
76
73
  gracefullyProcessExitDoNotHang(exitCode2);
77
74
  return;
@@ -87,13 +84,11 @@ async function runTests(args, opts) {
87
84
  grep: opts.grep
88
85
  }
89
86
  );
90
- await stopProfiling("runner");
91
87
  const exitCode2 = status2 === "interrupted" ? 130 : status2 === "passed" ? 0 : 1;
92
88
  gracefullyProcessExitDoNotHang(exitCode2);
93
89
  return;
94
90
  }
95
91
  const status = await import_runner.testRunner.runAllTestsWithConfig(config, options);
96
- await stopProfiling("runner");
97
92
  const exitCode = status === "interrupted" ? 130 : status === "passed" ? 0 : 1;
98
93
  gracefullyProcessExitDoNotHang(exitCode);
99
94
  }
@@ -130,6 +125,7 @@ function overridesFromOptions(options) {
130
125
  reporter: resolveReporterOption(options.reporter),
131
126
  additionalReporters: resolveReporterOption(options.addReporter),
132
127
  shard: resolveShardOption(options.shard),
128
+ shuffle: resolveShuffleOption(options.shuffle),
133
129
  timeout: options.timeout ? parseInt(options.timeout, 10) : void 0,
134
130
  tsconfig: options.tsconfig ? import_path.default.resolve(process.cwd(), options.tsconfig) : void 0,
135
131
  ignoreSnapshots: options.ignoreSnapshots ? !!options.ignoreSnapshots : void 0,
@@ -167,6 +163,13 @@ function resolveReporterOption(reporter) {
167
163
  return void 0;
168
164
  return reporter.split(",").map((r) => [resolveReporter(r)]);
169
165
  }
166
+ function resolveShuffleOption(shuffle) {
167
+ if (!shuffle)
168
+ return void 0;
169
+ if (shuffle === true)
170
+ return String(Math.floor(Math.random() * 1e9));
171
+ return shuffle;
172
+ }
170
173
  function resolveShardOption(shard) {
171
174
  if (!shard)
172
175
  return void 0;
@@ -518,6 +518,7 @@ var FullConfigInternal = class {
518
518
  metadata: metadata ?? userConfig.metadata,
519
519
  preserveOutput: takeFirst(userConfig.preserveOutput, "always"),
520
520
  projects: [],
521
+ filteredProjects: [],
521
522
  quiet: takeFirst(configCLIOverrides.quiet, userConfig.quiet, false),
522
523
  reporter: [...takeFirst(configCLIOverrides.reporter, resolveReporters(userConfig.reporter, configDir), [[defaultReporter]]), ...configCLIOverrides.additionalReporters ?? []],
523
524
  reportSlowTests: takeFirst(userConfig.reportSlowTests, {
@@ -527,7 +528,7 @@ var FullConfigInternal = class {
527
528
  }),
528
529
  shard: takeFirst(configCLIOverrides.shard, userConfig.shard, null),
529
530
  tags: globalTags,
530
- updateSnapshots: takeFirst(configCLIOverrides.updateSnapshots, userConfig.updateSnapshots, "missing"),
531
+ updateSnapshots: takeFirst(configCLIOverrides.updateSnapshots, userConfig.updateSnapshots, "default"),
531
532
  updateSourceMethod: takeFirst(configCLIOverrides.updateSourceMethod, userConfig.updateSourceMethod, "patch"),
532
533
  version: import_package2.packageJSON.version,
533
534
  workers: resolveWorkers(takeFirst(configCLIOverrides.debug || configCLIOverrides.pause ? 1 : void 0, configCLIOverrides.workers, userConfig.workers, "50%")),
@@ -553,6 +554,7 @@ var FullConfigInternal = class {
553
554
  resolveProjectDependencies(this.projects);
554
555
  this._assignUniqueProjectIds(this.projects);
555
556
  this.config.projects = this.projects.map((p) => p.project);
557
+ this.config.filteredProjects = this.config.projects;
556
558
  }
557
559
  _assignUniqueProjectIds(projects) {
558
560
  const usedNames = /* @__PURE__ */ new Set();
@@ -611,6 +613,7 @@ var FullProjectInternal = class {
611
613
  this.workers = projectConfig.workers ? resolveWorkers(projectConfig.workers) : void 0;
612
614
  if (configCLIOverrides.debug && this.workers)
613
615
  this.workers = 1;
616
+ this.default = projectConfig.default ?? true;
614
617
  }
615
618
  };
616
619
  function pathResolve(baseDir, relative) {
@@ -687,7 +690,7 @@ function toReporters(reporters) {
687
690
  return [[reporters]];
688
691
  return reporters;
689
692
  }
690
- var builtInReporters = ["list", "line", "dot", "json", "junit", "null", "github", "html", "blob", "perfetto"];
693
+ var builtInReporters = ["list", "line", "dot", "json", "junit", "null", "github", "html", "blob", "perfetto", "coverage"];
691
694
  function resolveScript(id, rootDir) {
692
695
  if (!id)
693
696
  return void 0;
@@ -740,6 +743,7 @@ var import_crypto = __toESM(require("crypto"));
740
743
  var import_path4 = __toESM(require("path"));
741
744
  var import_fs4 = __toESM(require("fs"));
742
745
  var json5 = require("playwright-core/lib/utilsBundle").json5;
746
+ var jsxOptionNames = ["jsx", "jsxFactory", "jsxFragmentFactory", "jsxImportSource"];
743
747
  function loadTsConfig(configPath) {
744
748
  try {
745
749
  const references = [];
@@ -779,6 +783,10 @@ function innerLoadTsConfig(configFilePath, references, visited = /* @__PURE__ */
779
783
  }
780
784
  if (parsedConfig.compilerOptions?.allowJs !== void 0)
781
785
  result2.allowJs = parsedConfig.compilerOptions.allowJs;
786
+ for (const name of jsxOptionNames) {
787
+ if (parsedConfig.compilerOptions?.[name] !== void 0)
788
+ result2[name] = parsedConfig.compilerOptions[name];
789
+ }
782
790
  if (parsedConfig.compilerOptions?.paths !== void 0) {
783
791
  result2.paths = {
784
792
  mapping: parsedConfig.compilerOptions.paths,
@@ -947,7 +955,13 @@ function validateTsConfig(tsconfig) {
947
955
  return {
948
956
  allowJs: !!tsconfig.allowJs,
949
957
  pathsBase,
950
- paths: Object.entries(tsconfig.paths?.mapping || {}).map(([key, values]) => ({ key, values })).concat(pathsFallback)
958
+ paths: Object.entries(tsconfig.paths?.mapping || {}).map(([key, values]) => ({ key, values })).concat(pathsFallback),
959
+ jsx: tsconfig.jsx ? {
960
+ jsx: tsconfig.jsx.toLowerCase(),
961
+ jsxFactory: tsconfig.jsxFactory,
962
+ jsxFragmentFactory: tsconfig.jsxFragmentFactory,
963
+ jsxImportSource: tsconfig.jsxImportSource
964
+ } : void 0
951
965
  };
952
966
  }
953
967
  function loadAndValidateTsconfigsForFile(file2) {
@@ -1052,21 +1066,22 @@ function shouldTransform(filename) {
1052
1066
  function transformHook(originalCode, filename, moduleUrl) {
1053
1067
  const hasPreprocessor = process.env.PW_TEST_SOURCE_TRANSFORM && process.env.PW_TEST_SOURCE_TRANSFORM_SCOPE && process.env.PW_TEST_SOURCE_TRANSFORM_SCOPE.split(pathSeparator).some((f) => filename.startsWith(f));
1054
1068
  const pluginsEpilogue = hasPreprocessor ? [[process.env.PW_TEST_SOURCE_TRANSFORM]] : [];
1055
- const hash = calculateHash(originalCode, filename, !!moduleUrl, pluginsEpilogue);
1069
+ const jsx = loadAndValidateTsconfigsForFile(filename).find((tsconfig) => tsconfig.jsx)?.jsx;
1070
+ const hash = calculateHash(originalCode, filename, !!moduleUrl, pluginsEpilogue, jsx);
1056
1071
  const { cachedCode, addToCache, serializedCache } = getFromCompilationCache(filename, hash, moduleUrl);
1057
1072
  if (cachedCode !== void 0)
1058
1073
  return { code: cachedCode, serializedCache };
1059
1074
  process.env.BROWSERSLIST_IGNORE_OLD_DATA = "true";
1060
1075
  const { babelTransform } = require((0, import_package3.libPath)("transform", "babelBundle"));
1061
- const babelResult = babelTransform(originalCode, filename, !!moduleUrl, pluginsEpilogue, _transformConfig.jsxImportSource);
1076
+ const babelResult = babelTransform(originalCode, filename, !!moduleUrl, pluginsEpilogue, jsx);
1062
1077
  if (!babelResult?.code)
1063
1078
  return { code: originalCode, serializedCache };
1064
1079
  const { code, map } = babelResult;
1065
1080
  const added = addToCache(code, map);
1066
1081
  return { code, serializedCache: added.serializedCache };
1067
1082
  }
1068
- function calculateHash(content, filePath, isModule2, pluginsEpilogue) {
1069
- const hash = import_crypto.default.createHash("sha1").update(isModule2 ? "esm" : "no_esm").update(content).update(filePath).update(version).update(pluginsEpilogue.map((p) => p[0]).join(",")).digest("hex");
1083
+ function calculateHash(content, filePath, isModule2, pluginsEpilogue, jsx) {
1084
+ const hash = import_crypto.default.createHash("sha1").update(isModule2 ? "esm" : "no_esm").update(content).update(filePath).update(version).update(pluginsEpilogue.map((p) => p[0]).join(",")).update(jsx ? JSON.stringify(jsx) : "").digest("hex");
1070
1085
  return hash;
1071
1086
  }
1072
1087
  async function requireOrImport(file) {
@@ -1283,8 +1298,7 @@ async function loadConfig(location, overrides, ignoreProjectDependencies = false
1283
1298
  }
1284
1299
  }
1285
1300
  const external = userConfig.build?.external || [];
1286
- const jsxImportSource = import_path7.default.dirname(require.resolve("playwright"));
1287
- await setTransformConfig({ external, jsxImportSource });
1301
+ await setTransformConfig({ external });
1288
1302
  if (!overrides?.tsconfig)
1289
1303
  await setSingleTSConfig(fullConfig?.singleTSConfigPath);
1290
1304
  return fullConfig;
@@ -1387,8 +1401,8 @@ function validateConfig(file2, config) {
1387
1401
  throw errorWithFile(file2, `config.shard.current must be a positive number, not greater than config.shard.total`);
1388
1402
  }
1389
1403
  if ("updateSnapshots" in config && config.updateSnapshots !== void 0) {
1390
- if (typeof config.updateSnapshots !== "string" || !["all", "changed", "missing", "none"].includes(config.updateSnapshots))
1391
- throw errorWithFile(file2, `config.updateSnapshots must be one of "all", "changed", "missing" or "none"`);
1404
+ if (typeof config.updateSnapshots !== "string" || !["all", "changed", "missing", "none", "default"].includes(config.updateSnapshots))
1405
+ throw errorWithFile(file2, `config.updateSnapshots must be one of "all", "changed", "missing", "none" or "default"`);
1392
1406
  }
1393
1407
  if ("retryStrategy" in config && config.retryStrategy !== void 0) {
1394
1408
  if (typeof config.retryStrategy !== "string" || !["immediate", "isolated"].includes(config.retryStrategy))
@@ -1424,6 +1438,10 @@ function validateProject(file2, project, title) {
1424
1438
  if (typeof project.testDir !== "string")
1425
1439
  throw errorWithFile(file2, `${title}.testDir must be a string`);
1426
1440
  }
1441
+ if (project.expect?.toHaveScreenshot?.type !== void 0) {
1442
+ if (!["png", "webp"].includes(project.expect.toHaveScreenshot.type))
1443
+ throw errorWithFile(file2, `${title}.expect.toHaveScreenshot.type must be one of "png" or "webp"`);
1444
+ }
1427
1445
  for (const prop of ["testIgnore", "testMatch"]) {
1428
1446
  if (prop in project && project[prop] !== void 0) {
1429
1447
  const value = project[prop];
@@ -1889,7 +1907,6 @@ var import_bootstrap = require("playwright-core/lib/bootstrap");
1889
1907
  var import_package4 = require("../package");
1890
1908
  var { ManualPromise } = require("playwright-core/lib/coreBundle").iso;
1891
1909
  var { setTimeOrigin } = require("playwright-core/lib/coreBundle").iso;
1892
- var { startProfiling, stopProfiling } = require("playwright-core/lib/coreBundle").utils;
1893
1910
  var { setBoxedStackPrefixes } = require("playwright-core/lib/coreBundle").utils;
1894
1911
  var ProcessRunner = class {
1895
1912
  async gracefullyClose() {
@@ -1909,7 +1926,6 @@ var ProcessRunner = class {
1909
1926
  var gracefullyCloseCalled = false;
1910
1927
  var forceExitInitiated = false;
1911
1928
  var processRunner;
1912
- var processName;
1913
1929
  var startingEnv = { ...process.env };
1914
1930
  setBoxedStackPrefixes([import_package4.packageRoot]);
1915
1931
  function startProcessRunner(create) {
@@ -1922,10 +1938,8 @@ function startProcessRunner(create) {
1922
1938
  process.on("message", async (message) => {
1923
1939
  if (message.method === "__init__") {
1924
1940
  const { processParams, runnerParams } = message.params;
1925
- void startProfiling();
1926
1941
  setTimeOrigin(processParams.timeOrigin);
1927
1942
  processRunner = create(runnerParams);
1928
- processName = processParams.processName;
1929
1943
  return;
1930
1944
  }
1931
1945
  if (message.method === "__stop__") {
@@ -1955,7 +1969,7 @@ var kHeartbeatInterval = 1e3;
1955
1969
  async function gracefullyCloseAndExit(forceExit) {
1956
1970
  if (forceExit && !forceExitInitiated) {
1957
1971
  forceExitInitiated = true;
1958
- setTimeout(() => process.exit(0), kForceExitTimeout);
1972
+ setTimeout(() => (0, import_bootstrap.processExit)(0), kForceExitTimeout);
1959
1973
  }
1960
1974
  if (!gracefullyCloseCalled) {
1961
1975
  gracefullyCloseCalled = true;
@@ -1964,10 +1978,7 @@ async function gracefullyCloseAndExit(forceExit) {
1964
1978
  await processRunner?.gracefullyClose().catch(() => {
1965
1979
  });
1966
1980
  clearInterval(heartbeat);
1967
- if (processName)
1968
- await stopProfiling(processName).catch(() => {
1969
- });
1970
- process.exit(0);
1981
+ (0, import_bootstrap.processExit)(0);
1971
1982
  }
1972
1983
  }
1973
1984
  function sendMessageToParent(message) {
@@ -2323,6 +2334,8 @@ var TestTypeImpl = class _TestTypeImpl {
2323
2334
  const suite = this._currentSuite(location, `test.describe.configure()`);
2324
2335
  if (!suite)
2325
2336
  return;
2337
+ if (options.lock !== void 0)
2338
+ suite._locks.push(...validateTestDetails({ lock: options.lock }, location).locks);
2326
2339
  if (options.timeout !== void 0)
2327
2340
  suite._timeout = options.timeout;
2328
2341
  if (options.retries !== void 0)
@@ -2395,13 +2408,13 @@ var TestTypeImpl = class _TestTypeImpl {
2395
2408
  if (!testInfo)
2396
2409
  throw new Error(`test.step() can only be called from a test`);
2397
2410
  await testInfo._onUserStepBegin?.(title);
2398
- const step = testInfo._addStep({ category: "test.step", title, subtitle: options.subtitle, location: options.location, box: options.box, params: options.params });
2411
+ const step = testInfo._addStep({ category: "test.step", title, subtitle: options.subtitle, stack: options.location ? [options.location] : void 0, box: options.box, params: options.params });
2399
2412
  return await currentZone().with("stepZone", step).run(async () => {
2400
2413
  try {
2401
2414
  let result2 = void 0;
2402
2415
  result2 = await raceAgainstDeadline(async () => {
2403
2416
  try {
2404
- return await step.info._runStepBody(expectation === "skip", body, step.location);
2417
+ return await step.info._runStepBody(expectation === "skip", body, step.stack[0]);
2405
2418
  } catch (e) {
2406
2419
  if (result2?.timedOut)
2407
2420
  testInfo._failWithError(e);
@@ -2473,6 +2486,7 @@ var baseFullConfig = {
2473
2486
  metadata: {},
2474
2487
  preserveOutput: "always",
2475
2488
  projects: [],
2489
+ filteredProjects: [],
2476
2490
  reporter: [[process.env.CI ? "dot" : "list"]],
2477
2491
  reportSlowTests: {
2478
2492
  max: 5,
@@ -2484,7 +2498,7 @@ var baseFullConfig = {
2484
2498
  quiet: false,
2485
2499
  shard: null,
2486
2500
  tags: [],
2487
- updateSnapshots: "missing",
2501
+ updateSnapshots: "default",
2488
2502
  updateSourceMethod: "patch",
2489
2503
  version: "",
2490
2504
  workers: 0,
@@ -1,34 +1,33 @@
1
1
  # packages/playwright/lib/common/index.js
2
- # total: 112.8 KB
2
+ # total: 113.6 KB
3
3
 
4
4
  ## Inlined (20)
5
- 12.3 KB packages/playwright/src/common/config.ts
6
- 13.6 KB packages/playwright/src/common/configLoader.ts
5
+ 12.5 KB packages/playwright/src/common/config.ts
6
+ 13.8 KB packages/playwright/src/common/configLoader.ts
7
7
  11.5 KB packages/playwright/src/common/fixtures.ts
8
8
  0.8 KB packages/playwright/src/common/index.ts
9
9
  1.3 KB packages/playwright/src/common/ipc.ts
10
10
  2.1 KB packages/playwright/src/common/poolBuilder.ts
11
- 4.1 KB packages/playwright/src/common/process.ts
11
+ 3.9 KB packages/playwright/src/common/process.ts
12
12
  4.9 KB packages/playwright/src/common/suiteUtils.ts
13
13
  8.7 KB packages/playwright/src/common/test.ts
14
14
  2.0 KB packages/playwright/src/common/testLoader.ts
15
- 12.7 KB packages/playwright/src/common/testType.ts
15
+ 12.9 KB packages/playwright/src/common/testType.ts
16
16
  1.4 KB packages/playwright/src/common/validators.ts
17
17
  1.3 KB packages/playwright/src/isomorphic/teleReceiver.ts
18
18
  7.8 KB packages/playwright/src/transform/compilationCache.ts
19
19
  1.7 KB packages/playwright/src/transform/esmLoaderSync.ts
20
20
  1.1 KB packages/playwright/src/transform/pirates.ts
21
21
  1.1 KB packages/playwright/src/transform/portTransport.ts
22
- 11.6 KB packages/playwright/src/transform/transform.ts
23
- 2.9 KB packages/playwright/src/transform/tsconfig-loader.ts
22
+ 12.0 KB packages/playwright/src/transform/transform.ts
23
+ 3.2 KB packages/playwright/src/transform/tsconfig-loader.ts
24
24
  7.0 KB packages/playwright/src/util.ts
25
25
 
26
- ## External (8)
26
+ ## External (7)
27
27
  ../globals
28
28
  ../matchers/expect
29
29
  ../package
30
30
  ../transform/esmLoader.js
31
- playwright
32
31
  playwright-core/lib/bootstrap
33
32
  playwright-core/lib/coreBundle
34
33
  playwright-core/lib/utilsBundle
@@ -92,19 +92,19 @@ const utilityFixtures = {
92
92
  const zone = currentZone().data("stepZone");
93
93
  const isExpectCall = channel.type === "Frame" && channel.method === "expect" || channel.type === "Page" && channel.method === "expectScreenshot";
94
94
  if (zone && zone.category === "expect" && isExpectCall) {
95
- data.stepId = zone.stepId;
95
+ data.callId = zone.stepId;
96
96
  return;
97
97
  }
98
98
  const params = renderParamsForCall({ type: channel.type, method: channel.method, params: channel.params });
99
99
  const step = testInfo2._addStep({
100
- location: data.frames[0],
100
+ stack: data.frames,
101
101
  category: "pw:api",
102
102
  title: renderTitle(channel.type, channel.method, channel.params, data.title),
103
103
  subtitle: renderSubtitle(channel.type, channel.method, channel.params),
104
104
  params,
105
105
  group: getActionGroup({ type: channel.type, method: channel.method })
106
106
  }, tracingGroupSteps[tracingGroupSteps.length - 1]);
107
- data.stepId = step.stepId;
107
+ data.callId = step.stepId;
108
108
  if (channel.type === "Tracing" && channel.method === "tracingGroup") {
109
109
  tracingGroupSteps.push(step);
110
110
  } else {
@@ -249,6 +249,7 @@ const playwrightFixtures = {
249
249
  permissions: [({ contextOptions }, use) => use(contextOptions.permissions), { option: true, box: true }],
250
250
  proxy: [({ contextOptions }, use) => use(contextOptions.proxy), { option: true, box: true }],
251
251
  reducedMotion: [({ contextOptions }, use) => use(contextOptions.reducedMotion === void 0 ? "no-preference" : contextOptions.reducedMotion), { option: true, box: true }],
252
+ screen: [({ contextOptions }, use) => use(contextOptions.screen), { option: true, box: true }],
252
253
  storageState: [({ contextOptions }, use) => use(contextOptions.storageState), { option: true, box: true }],
253
254
  clientCertificates: [({ contextOptions }, use) => use(contextOptions.clientCertificates), { option: true, box: true }],
254
255
  timezoneId: [({ contextOptions }, use) => use(contextOptions.timezoneId), { option: true, box: true }],
@@ -281,6 +282,7 @@ const playwrightFixtures = {
281
282
  permissions,
282
283
  proxy,
283
284
  reducedMotion,
285
+ screen,
284
286
  storageState,
285
287
  viewport,
286
288
  timezoneId,
@@ -326,6 +328,8 @@ const playwrightFixtures = {
326
328
  options.proxy = proxy;
327
329
  if (reducedMotion !== void 0)
328
330
  options.reducedMotion = reducedMotion;
331
+ if (screen !== void 0)
332
+ options.screen = screen;
329
333
  if (storageState !== void 0)
330
334
  options.storageState = storageState;
331
335
  if (clientCertificates?.length)
@@ -385,6 +389,7 @@ const playwrightFixtures = {
385
389
  recordVideo: {
386
390
  dir: tracing().artifactsDir(),
387
391
  size: typeof video === "string" ? void 0 : video.size,
392
+ fps: typeof video === "string" ? void 0 : video.fps,
388
393
  showActions: show?.actions
389
394
  }
390
395
  } : {};
@@ -755,7 +760,7 @@ async function installScreencastTitleUpdater(testInfo, context, testAnnotate) {
755
760
  const position = testAnnotate.position ?? "top-left";
756
761
  const fontSize = testAnnotate.fontSize ?? 14;
757
762
  const level = testAnnotate.level ?? "step";
758
- const updateOverlay = async () => {
763
+ const doUpdateOverlay = async () => {
759
764
  const parts = level === "step" ? [...testTitle, ...stepStack] : testTitle;
760
765
  const html = createTestOverlay(parts, position, fontSize);
761
766
  for (const page of context.pages()) {
@@ -765,6 +770,13 @@ async function installScreencastTitleUpdater(testInfo, context, testAnnotate) {
765
770
  overlays.set(page, disposable);
766
771
  }
767
772
  };
773
+ let lastUpdate = Promise.resolve();
774
+ const updateOverlay = () => {
775
+ const result = lastUpdate.then(doUpdateOverlay);
776
+ lastUpdate = result.catch(() => {
777
+ });
778
+ return result;
779
+ };
768
780
  testInfo._onUserStepBegin = async (title) => {
769
781
  stepStack.push(title);
770
782
  await updateOverlay();