@withbuddi/buddi 0.1.0-pre.51 → 0.1.0-pre.53

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 (503) 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/core/dist/.tsbuildinfo +1 -1
  8. package/node_modules/@buddi/core/dist/plugin/index.d.ts +1 -1
  9. package/node_modules/@buddi/core/dist/plugin/index.d.ts.map +1 -1
  10. package/node_modules/@buddi/core/dist/plugin/index.js.map +1 -1
  11. package/node_modules/@buddi/core/dist/questions/store.d.ts +3 -1
  12. package/node_modules/@buddi/core/dist/questions/store.d.ts.map +1 -1
  13. package/node_modules/@buddi/core/dist/questions/store.js +3 -3
  14. package/node_modules/@buddi/core/dist/questions/store.js.map +1 -1
  15. package/node_modules/@buddi/core/dist/questions/types.d.ts +46 -1
  16. package/node_modules/@buddi/core/dist/questions/types.d.ts.map +1 -1
  17. package/node_modules/@buddi/core/dist/questions/types.js +2 -1
  18. package/node_modules/@buddi/core/dist/questions/types.js.map +1 -1
  19. package/node_modules/@buddi/core/dist/secrets/approval.d.ts +54 -0
  20. package/node_modules/@buddi/core/dist/secrets/approval.d.ts.map +1 -1
  21. package/node_modules/@buddi/core/dist/secrets/approval.js +58 -1
  22. package/node_modules/@buddi/core/dist/secrets/approval.js.map +1 -1
  23. package/node_modules/@buddi/core/dist/secrets/settings.d.ts +178 -0
  24. package/node_modules/@buddi/core/dist/secrets/settings.d.ts.map +1 -1
  25. package/node_modules/@buddi/core/dist/secrets/settings.js +63 -6
  26. package/node_modules/@buddi/core/dist/secrets/settings.js.map +1 -1
  27. package/node_modules/@buddi/core/dist/secrets/store.d.ts +31 -0
  28. package/node_modules/@buddi/core/dist/secrets/store.d.ts.map +1 -1
  29. package/node_modules/@buddi/core/dist/secrets/store.js +75 -0
  30. package/node_modules/@buddi/core/dist/secrets/store.js.map +1 -1
  31. package/node_modules/@buddi/core/dist/secrets/use.d.ts.map +1 -1
  32. package/node_modules/@buddi/core/dist/secrets/use.js +68 -3
  33. package/node_modules/@buddi/core/dist/secrets/use.js.map +1 -1
  34. package/node_modules/@buddi/core/dist/tools.d.ts +22 -0
  35. package/node_modules/@buddi/core/dist/tools.d.ts.map +1 -1
  36. package/node_modules/@buddi/core/dist/tools.js.map +1 -1
  37. package/node_modules/@buddi/core/migrations/080_secret_requests.sql +14 -0
  38. package/node_modules/@buddi/gateway/dist/.tsbuildinfo +1 -1
  39. package/node_modules/@buddi/gateway/dist/chat/session.d.ts.map +1 -1
  40. package/node_modules/@buddi/gateway/dist/chat/session.js +2 -1
  41. package/node_modules/@buddi/gateway/dist/chat/session.js.map +1 -1
  42. package/node_modules/@buddi/gateway/dist/missions/execute.d.ts.map +1 -1
  43. package/node_modules/@buddi/gateway/dist/missions/execute.js +3 -1
  44. package/node_modules/@buddi/gateway/dist/missions/execute.js.map +1 -1
  45. package/node_modules/@buddi/gateway/dist/surfaces/browser-cards.d.ts +15 -3
  46. package/node_modules/@buddi/gateway/dist/surfaces/browser-cards.d.ts.map +1 -1
  47. package/node_modules/@buddi/gateway/dist/surfaces/browser-cards.js +34 -7
  48. package/node_modules/@buddi/gateway/dist/surfaces/browser-cards.js.map +1 -1
  49. package/node_modules/@buddi/gateway/dist/surfaces/offered-actions.d.ts.map +1 -1
  50. package/node_modules/@buddi/gateway/dist/surfaces/offered-actions.js +8 -2
  51. package/node_modules/@buddi/gateway/dist/surfaces/offered-actions.js.map +1 -1
  52. package/node_modules/@buddi/gateway/dist/surfaces/pending-question.d.ts +3 -1
  53. package/node_modules/@buddi/gateway/dist/surfaces/pending-question.d.ts.map +1 -1
  54. package/node_modules/@buddi/gateway/dist/surfaces/pending-question.js.map +1 -1
  55. package/node_modules/@buddi/gateway/dist/surfaces/secret-request.d.ts +173 -0
  56. package/node_modules/@buddi/gateway/dist/surfaces/secret-request.d.ts.map +1 -0
  57. package/node_modules/@buddi/gateway/dist/surfaces/secret-request.js +332 -0
  58. package/node_modules/@buddi/gateway/dist/surfaces/secret-request.js.map +1 -0
  59. package/node_modules/@buddi/gateway/dist/system-context.js +1 -1
  60. package/node_modules/@buddi/gateway/dist/system-context.js.map +1 -1
  61. package/node_modules/@buddi/gateway/dist/telegram/main.d.ts.map +1 -1
  62. package/node_modules/@buddi/gateway/dist/telegram/main.js +14 -3
  63. package/node_modules/@buddi/gateway/dist/telegram/main.js.map +1 -1
  64. package/node_modules/@buddi/gateway/dist/telegram/surface.d.ts.map +1 -1
  65. package/node_modules/@buddi/gateway/dist/telegram/surface.js +4 -1
  66. package/node_modules/@buddi/gateway/dist/telegram/surface.js.map +1 -1
  67. package/node_modules/@buddi/gateway/dist/web/api-routes.d.ts.map +1 -1
  68. package/node_modules/@buddi/gateway/dist/web/api-routes.js +9 -1
  69. package/node_modules/@buddi/gateway/dist/web/api-routes.js.map +1 -1
  70. package/node_modules/@buddi/gateway/dist/web/approval-ask.js +2 -2
  71. package/node_modules/@buddi/gateway/dist/web/approval-ask.js.map +1 -1
  72. package/node_modules/@buddi/gateway/dist/web/browser-capture.d.ts +13 -0
  73. package/node_modules/@buddi/gateway/dist/web/browser-capture.d.ts.map +1 -0
  74. package/node_modules/@buddi/gateway/dist/web/browser-capture.js +24 -0
  75. package/node_modules/@buddi/gateway/dist/web/browser-capture.js.map +1 -0
  76. package/node_modules/@buddi/gateway/dist/web/chat.d.ts +26 -0
  77. package/node_modules/@buddi/gateway/dist/web/chat.d.ts.map +1 -1
  78. package/node_modules/@buddi/gateway/dist/web/chat.js +87 -2
  79. package/node_modules/@buddi/gateway/dist/web/chat.js.map +1 -1
  80. package/node_modules/@buddi/gateway/dist/web/extension.d.ts +30 -0
  81. package/node_modules/@buddi/gateway/dist/web/extension.d.ts.map +1 -1
  82. package/node_modules/@buddi/gateway/dist/web/extension.js +86 -6
  83. package/node_modules/@buddi/gateway/dist/web/extension.js.map +1 -1
  84. package/node_modules/@buddi/gateway/dist/web/onboarding.js +1 -1
  85. package/node_modules/@buddi/gateway/dist/web/onboarding.js.map +1 -1
  86. package/node_modules/@buddi/gateway/dist/web/remote-hand.d.ts +26 -2
  87. package/node_modules/@buddi/gateway/dist/web/remote-hand.d.ts.map +1 -1
  88. package/node_modules/@buddi/gateway/dist/web/remote-hand.js +89 -28
  89. package/node_modules/@buddi/gateway/dist/web/remote-hand.js.map +1 -1
  90. package/node_modules/@buddi/gateway/dist/web/secret-request.d.ts +54 -0
  91. package/node_modules/@buddi/gateway/dist/web/secret-request.d.ts.map +1 -0
  92. package/node_modules/@buddi/gateway/dist/web/secret-request.js +264 -0
  93. package/node_modules/@buddi/gateway/dist/web/secret-request.js.map +1 -0
  94. package/node_modules/@buddi/gateway/dist/web/secrets.d.ts +1 -0
  95. package/node_modules/@buddi/gateway/dist/web/secrets.d.ts.map +1 -1
  96. package/node_modules/@buddi/gateway/dist/web/secrets.js +1 -1
  97. package/node_modules/@buddi/gateway/dist/web/secrets.js.map +1 -1
  98. package/node_modules/@buddi/gateway/dist/web/server.d.ts.map +1 -1
  99. package/node_modules/@buddi/gateway/dist/web/server.js +72 -3
  100. package/node_modules/@buddi/gateway/dist/web/server.js.map +1 -1
  101. package/node_modules/@buddi/install/dist/.tsbuildinfo +1 -1
  102. package/node_modules/@buddi/install/dist/app-layout.d.ts +24 -0
  103. package/node_modules/@buddi/install/dist/app-layout.d.ts.map +1 -1
  104. package/node_modules/@buddi/install/dist/app-layout.js +64 -2
  105. package/node_modules/@buddi/install/dist/app-layout.js.map +1 -1
  106. package/node_modules/@buddi/install/dist/launcher.d.ts.map +1 -1
  107. package/node_modules/@buddi/install/dist/launcher.js +89 -10
  108. package/node_modules/@buddi/install/dist/launcher.js.map +1 -1
  109. package/node_modules/@buddi/install/dist/linux-install.d.ts +41 -0
  110. package/node_modules/@buddi/install/dist/linux-install.d.ts.map +1 -0
  111. package/node_modules/@buddi/install/dist/linux-install.js +86 -0
  112. package/node_modules/@buddi/install/dist/linux-install.js.map +1 -0
  113. package/node_modules/@buddi/install/dist/runtime-info.d.ts +23 -0
  114. package/node_modules/@buddi/install/dist/runtime-info.d.ts.map +1 -0
  115. package/node_modules/@buddi/install/dist/runtime-info.js +69 -0
  116. package/node_modules/@buddi/install/dist/runtime-info.js.map +1 -0
  117. package/node_modules/@buddi/install/dist/supervisor.d.ts.map +1 -1
  118. package/node_modules/@buddi/install/dist/supervisor.js +8 -6
  119. package/node_modules/@buddi/install/dist/supervisor.js.map +1 -1
  120. package/node_modules/@buddi/install/dist/uninstall.d.ts +20 -0
  121. package/node_modules/@buddi/install/dist/uninstall.d.ts.map +1 -1
  122. package/node_modules/@buddi/install/dist/uninstall.js +50 -1
  123. package/node_modules/@buddi/install/dist/uninstall.js.map +1 -1
  124. package/node_modules/@buddi/install/dist/upgrade.d.ts +4 -1
  125. package/node_modules/@buddi/install/dist/upgrade.d.ts.map +1 -1
  126. package/node_modules/@buddi/install/dist/upgrade.js +77 -51
  127. package/node_modules/@buddi/install/dist/upgrade.js.map +1 -1
  128. package/node_modules/@buddi/runtime/dist/.tsbuildinfo +1 -1
  129. package/node_modules/@buddi/runtime/dist/anthropic.d.ts +7 -0
  130. package/node_modules/@buddi/runtime/dist/anthropic.d.ts.map +1 -1
  131. package/node_modules/@buddi/runtime/dist/anthropic.js +19 -1
  132. package/node_modules/@buddi/runtime/dist/anthropic.js.map +1 -1
  133. package/node_modules/@buddi/tool-artifacts/dist/.tsbuildinfo +1 -1
  134. package/node_modules/@buddi/tool-browser/dist/.tsbuildinfo +1 -1
  135. package/node_modules/@buddi/tool-browser/dist/controller.d.ts +16 -1
  136. package/node_modules/@buddi/tool-browser/dist/controller.d.ts.map +1 -1
  137. package/node_modules/@buddi/tool-browser/dist/controller.js +59 -5
  138. package/node_modules/@buddi/tool-browser/dist/controller.js.map +1 -1
  139. package/node_modules/@buddi/tool-browser/dist/driver.d.ts +12 -0
  140. package/node_modules/@buddi/tool-browser/dist/driver.d.ts.map +1 -1
  141. package/node_modules/@buddi/tool-browser/dist/driver.js +41 -2
  142. package/node_modules/@buddi/tool-browser/dist/driver.js.map +1 -1
  143. package/node_modules/@buddi/tool-browser/dist/extension.d.ts +49 -9
  144. package/node_modules/@buddi/tool-browser/dist/extension.d.ts.map +1 -1
  145. package/node_modules/@buddi/tool-browser/dist/extension.js +145 -21
  146. package/node_modules/@buddi/tool-browser/dist/extension.js.map +1 -1
  147. package/node_modules/@buddi/tool-browser/dist/index.d.ts +10 -6
  148. package/node_modules/@buddi/tool-browser/dist/index.d.ts.map +1 -1
  149. package/node_modules/@buddi/tool-browser/dist/index.js +22 -8
  150. package/node_modules/@buddi/tool-browser/dist/index.js.map +1 -1
  151. package/node_modules/@buddi/tool-browser/dist/routes.d.ts +10 -1
  152. package/node_modules/@buddi/tool-browser/dist/routes.d.ts.map +1 -1
  153. package/node_modules/@buddi/tool-browser/dist/routes.js +24 -0
  154. package/node_modules/@buddi/tool-browser/dist/routes.js.map +1 -1
  155. package/node_modules/@buddi/tool-browser/dist/service.d.ts +48 -1
  156. package/node_modules/@buddi/tool-browser/dist/service.d.ts.map +1 -1
  157. package/node_modules/@buddi/tool-browser/dist/service.js +114 -11
  158. package/node_modules/@buddi/tool-browser/dist/service.js.map +1 -1
  159. package/node_modules/@buddi/tool-browser/dist/types.d.ts +54 -3
  160. package/node_modules/@buddi/tool-browser/dist/types.d.ts.map +1 -1
  161. package/node_modules/@buddi/tool-browser/dist/types.js +17 -1
  162. package/node_modules/@buddi/tool-browser/dist/types.js.map +1 -1
  163. package/node_modules/@buddi/tool-email/dist/.tsbuildinfo +1 -1
  164. package/node_modules/@buddi/tool-host/dist/.tsbuildinfo +1 -1
  165. package/node_modules/@buddi/tool-mcp/dist/.tsbuildinfo +1 -1
  166. package/node_modules/@buddi/tool-memory/dist/.tsbuildinfo +1 -1
  167. package/node_modules/@buddi/tool-web/dist/.tsbuildinfo +1 -1
  168. package/node_modules/@hono/node-server/package.json +2 -2
  169. package/node_modules/@types/node/README.md +1 -1
  170. package/node_modules/@types/node/package.json +2 -2
  171. package/node_modules/@types/node/util.d.ts +6 -3
  172. package/node_modules/content-disposition/README.md +105 -35
  173. package/node_modules/content-disposition/dist/index.d.ts +72 -0
  174. package/node_modules/content-disposition/dist/index.js +388 -0
  175. package/node_modules/content-disposition/dist/index.js.map +1 -0
  176. package/node_modules/content-disposition/package.json +31 -19
  177. package/node_modules/docx/dist/index.cjs +182 -80
  178. package/node_modules/docx/dist/index.d.cts +63 -6
  179. package/node_modules/docx/dist/index.d.ts +63 -6
  180. package/node_modules/docx/dist/index.iife.js +182 -80
  181. package/node_modules/docx/dist/index.mjs +182 -80
  182. package/node_modules/docx/dist/index.umd.cjs +182 -80
  183. package/node_modules/docx/dist/layout.cjs +1 -6
  184. package/node_modules/docx/dist/layout.iife.js +1 -6
  185. package/node_modules/docx/dist/layout.mjs +1 -6
  186. package/node_modules/docx/dist/layout.umd.cjs +1 -6
  187. package/node_modules/docx/package.json +4 -3
  188. package/node_modules/express/Readme.md +15 -9
  189. package/node_modules/express/lib/application.js +2 -2
  190. package/node_modules/express/lib/request.js +32 -19
  191. package/node_modules/express/lib/response.js +27 -30
  192. package/node_modules/express/node_modules/content-type/LICENSE +22 -0
  193. package/node_modules/express/node_modules/content-type/README.md +71 -0
  194. package/node_modules/express/node_modules/content-type/dist/index.d.ts +46 -0
  195. package/node_modules/express/node_modules/content-type/dist/index.js +176 -0
  196. package/node_modules/express/node_modules/content-type/dist/index.js.map +1 -0
  197. package/node_modules/express/node_modules/content-type/package.json +52 -0
  198. package/node_modules/express/package.json +10 -10
  199. package/node_modules/imapflow/CHANGELOG.md +48 -0
  200. package/node_modules/imapflow/dist/cjs/commands/append.d.ts +1 -1
  201. package/node_modules/imapflow/dist/cjs/commands/append.js +15 -4
  202. package/node_modules/imapflow/dist/cjs/commands/compress.js +2 -2
  203. package/node_modules/imapflow/dist/cjs/commands/id.js +5 -3
  204. package/node_modules/imapflow/dist/cjs/commands/idle.js +9 -9
  205. package/node_modules/imapflow/dist/cjs/commands/list.js +2 -2
  206. package/node_modules/imapflow/dist/cjs/commands/namespace.js +18 -14
  207. package/node_modules/imapflow/dist/cjs/commands/quota.js +2 -3
  208. package/node_modules/imapflow/dist/cjs/commands/select.d.ts +3 -14
  209. package/node_modules/imapflow/dist/cjs/commands/select.js +1 -4
  210. package/node_modules/imapflow/dist/cjs/commands/status.js +2 -4
  211. package/node_modules/imapflow/dist/cjs/connection-deadline.d.ts +1 -1
  212. package/node_modules/imapflow/dist/cjs/connection-deadline.js +2 -4
  213. package/node_modules/imapflow/dist/cjs/download.js +66 -35
  214. package/node_modules/imapflow/dist/cjs/errors.d.ts +15 -0
  215. package/node_modules/imapflow/dist/cjs/errors.js +22 -0
  216. package/node_modules/imapflow/dist/cjs/handler/imap-compiler.d.ts +4 -4
  217. package/node_modules/imapflow/dist/cjs/handler/imap-compiler.js +18 -18
  218. package/node_modules/imapflow/dist/cjs/handler/imap-parser.js +28 -3
  219. package/node_modules/imapflow/dist/cjs/handler/imap-stream.js +9 -8
  220. package/node_modules/imapflow/dist/cjs/handler/limits.d.ts +1 -1
  221. package/node_modules/imapflow/dist/cjs/handler/limits.js +5 -7
  222. package/node_modules/imapflow/dist/cjs/handler/parser-instance.js +23 -38
  223. package/node_modules/imapflow/dist/cjs/handler/token-parser.d.ts +12 -0
  224. package/node_modules/imapflow/dist/cjs/handler/token-parser.js +44 -104
  225. package/node_modules/imapflow/dist/cjs/imap-flow.d.ts +4 -3
  226. package/node_modules/imapflow/dist/cjs/imap-flow.js +128 -78
  227. package/node_modules/imapflow/dist/cjs/package-info.d.ts +1 -1
  228. package/node_modules/imapflow/dist/cjs/package-info.js +1 -1
  229. package/node_modules/imapflow/dist/cjs/proxy-connection.js +2 -5
  230. package/node_modules/imapflow/dist/cjs/search-compiler.js +2 -3
  231. package/node_modules/imapflow/dist/cjs/tools.d.ts +24 -3
  232. package/node_modules/imapflow/dist/cjs/tools.js +59 -18
  233. package/node_modules/imapflow/dist/cjs/types.d.ts +20 -1
  234. package/node_modules/imapflow/dist/esm/commands/append.d.ts +1 -1
  235. package/node_modules/imapflow/dist/esm/commands/append.js +15 -4
  236. package/node_modules/imapflow/dist/esm/commands/compress.js +2 -2
  237. package/node_modules/imapflow/dist/esm/commands/id.js +6 -4
  238. package/node_modules/imapflow/dist/esm/commands/idle.js +9 -9
  239. package/node_modules/imapflow/dist/esm/commands/list.js +3 -3
  240. package/node_modules/imapflow/dist/esm/commands/namespace.js +19 -15
  241. package/node_modules/imapflow/dist/esm/commands/quota.js +3 -4
  242. package/node_modules/imapflow/dist/esm/commands/select.d.ts +3 -14
  243. package/node_modules/imapflow/dist/esm/commands/select.js +1 -4
  244. package/node_modules/imapflow/dist/esm/commands/status.js +2 -4
  245. package/node_modules/imapflow/dist/esm/connection-deadline.d.ts +1 -1
  246. package/node_modules/imapflow/dist/esm/connection-deadline.js +2 -4
  247. package/node_modules/imapflow/dist/esm/download.js +66 -35
  248. package/node_modules/imapflow/dist/esm/errors.d.ts +15 -0
  249. package/node_modules/imapflow/dist/esm/errors.js +21 -0
  250. package/node_modules/imapflow/dist/esm/handler/imap-compiler.d.ts +4 -4
  251. package/node_modules/imapflow/dist/esm/handler/imap-compiler.js +18 -18
  252. package/node_modules/imapflow/dist/esm/handler/imap-parser.js +28 -3
  253. package/node_modules/imapflow/dist/esm/handler/imap-stream.js +9 -8
  254. package/node_modules/imapflow/dist/esm/handler/limits.d.ts +1 -1
  255. package/node_modules/imapflow/dist/esm/handler/limits.js +5 -7
  256. package/node_modules/imapflow/dist/esm/handler/parser-instance.js +23 -38
  257. package/node_modules/imapflow/dist/esm/handler/token-parser.d.ts +12 -0
  258. package/node_modules/imapflow/dist/esm/handler/token-parser.js +44 -104
  259. package/node_modules/imapflow/dist/esm/imap-flow.d.ts +4 -3
  260. package/node_modules/imapflow/dist/esm/imap-flow.js +130 -80
  261. package/node_modules/imapflow/dist/esm/package-info.d.ts +1 -1
  262. package/node_modules/imapflow/dist/esm/package-info.js +1 -1
  263. package/node_modules/imapflow/dist/esm/proxy-connection.js +2 -5
  264. package/node_modules/imapflow/dist/esm/search-compiler.js +2 -3
  265. package/node_modules/imapflow/dist/esm/tools.d.ts +24 -3
  266. package/node_modules/imapflow/dist/esm/tools.js +58 -19
  267. package/node_modules/imapflow/dist/esm/types.d.ts +20 -1
  268. package/node_modules/imapflow/package.json +6 -3
  269. package/node_modules/playwright/README.md +4 -4
  270. package/node_modules/playwright/lib/agents/playwright-test-generator.agent.md +1 -1
  271. package/node_modules/playwright/lib/cli/testActions.js +8 -5
  272. package/node_modules/playwright/lib/common/index.js +37 -23
  273. package/node_modules/playwright/lib/common/index.js.txt +8 -9
  274. package/node_modules/playwright/lib/index.js +16 -4
  275. package/node_modules/playwright/lib/matchers/expect.js +13 -7
  276. package/node_modules/playwright/lib/matchers/expect.js.txt +4 -4
  277. package/node_modules/playwright/lib/program.js +2 -1
  278. package/node_modules/playwright/lib/runner/index.js +438 -244
  279. package/node_modules/playwright/lib/runner/index.js.txt +12 -11
  280. package/node_modules/playwright/lib/transform/babelBundle.js +2612 -2396
  281. package/node_modules/playwright/lib/transform/babelBundle.js.LICENSE +15 -15
  282. package/node_modules/playwright/lib/transform/babelBundle.js.txt +14 -11
  283. package/node_modules/playwright/lib/transform/esmLoader.js +17 -5
  284. package/node_modules/playwright/lib/transform/esmLoader.js.txt +3 -3
  285. package/node_modules/playwright/lib/worker/workerProcessEntry.js +17 -18
  286. package/node_modules/playwright/package.json +2 -7
  287. package/node_modules/playwright/types/test.d.ts +156 -39
  288. package/node_modules/playwright-core/browsers.json +9 -9
  289. package/node_modules/playwright-core/cli.js +1 -0
  290. package/node_modules/playwright-core/lib/bootstrap.js +61 -0
  291. package/node_modules/playwright-core/lib/coreBundle.js +6393 -4170
  292. package/node_modules/playwright-core/lib/server/electron/loader.js +4 -0
  293. package/node_modules/playwright-core/lib/tools/cli-client/cli.js +2 -1
  294. package/node_modules/playwright-core/lib/tools/cli-client/help.json +99 -12
  295. package/node_modules/playwright-core/lib/tools/cli-client/output.js +17 -16
  296. package/node_modules/playwright-core/lib/tools/cli-client/program.js +8 -4
  297. package/node_modules/playwright-core/lib/tools/cli-client/session.js +2 -0
  298. package/node_modules/playwright-core/lib/tools/skills/playwright-cli/SKILL.md +71 -3
  299. package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/pr-attachments.md +60 -0
  300. package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/running-code.md +4 -0
  301. package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/session-management.md +2 -0
  302. package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/test-generation.md +1 -1
  303. package/node_modules/playwright-core/lib/tools/skills/playwright-cli/references/video-recording.md +76 -3
  304. package/node_modules/playwright-core/lib/tools/skills/playwright-trace/SKILL.md +1 -1
  305. package/node_modules/playwright-core/lib/utilsBundle.js +948 -227
  306. package/node_modules/playwright-core/lib/utilsBundle.js.LICENSE +6 -6
  307. package/node_modules/playwright-core/lib/vite/htmlReport/report.js +1 -1
  308. package/node_modules/playwright-core/lib/vite/recorder/assets/{codeMirrorModule-CVQWJZAA.js → codeMirrorModule-DK72OMRi.js} +1 -1
  309. package/node_modules/playwright-core/lib/vite/recorder/assets/index-Cn0mmDuv.js +129 -0
  310. package/node_modules/playwright-core/lib/vite/recorder/index.html +1 -1
  311. package/node_modules/playwright-core/lib/vite/traceViewer/assets/{codeMirrorModule-BbkfBe3n.js → codeMirrorModule-BEB2e8M3.js} +1 -1
  312. package/node_modules/playwright-core/lib/vite/traceViewer/assets/defaultSettingsView-D-g2vrvf.js +184 -0
  313. package/node_modules/playwright-core/lib/vite/traceViewer/assets/{xtermModule-DywYcAf8.js → xtermModule-B794rD2Z.js} +1 -1
  314. package/node_modules/playwright-core/lib/vite/traceViewer/{defaultSettingsView.Bqk9acqE.css → defaultSettingsView.C8BeHuxd.css} +1 -1
  315. package/node_modules/playwright-core/lib/vite/traceViewer/{index.B4cLoZK3.js → index.7-c5LSTW.js} +1 -1
  316. package/node_modules/playwright-core/lib/vite/traceViewer/index.html +3 -3
  317. package/node_modules/playwright-core/lib/vite/traceViewer/sw.bundle.js +3 -3
  318. package/node_modules/playwright-core/lib/vite/traceViewer/{uiMode.CU5KtEkS.js → uiMode.CYwC_gH1.js} +4 -4
  319. package/node_modules/playwright-core/lib/vite/traceViewer/uiMode.html +3 -3
  320. package/node_modules/playwright-core/package.json +1 -1
  321. package/node_modules/playwright-core/types/protocol.d.ts +468 -337
  322. package/node_modules/playwright-core/types/types.d.ts +572 -37
  323. package/node_modules/process-warning/.github/workflows/ci.yml +1 -1
  324. package/node_modules/process-warning/.github/workflows/lock-threads.yml +1 -1
  325. package/node_modules/process-warning/.github/workflows/release.yml +24 -0
  326. package/node_modules/process-warning/README.md +46 -46
  327. package/node_modules/process-warning/package.json +1 -1
  328. package/package.json +2 -2
  329. package/packages/cli/dist/.tsbuildinfo +1 -1
  330. package/packages/core/dist/.tsbuildinfo +1 -1
  331. package/packages/core/dist/plugin/index.d.ts +1 -1
  332. package/packages/core/dist/plugin/index.d.ts.map +1 -1
  333. package/packages/core/dist/plugin/index.js.map +1 -1
  334. package/packages/core/dist/questions/store.d.ts +3 -1
  335. package/packages/core/dist/questions/store.d.ts.map +1 -1
  336. package/packages/core/dist/questions/store.js +3 -3
  337. package/packages/core/dist/questions/store.js.map +1 -1
  338. package/packages/core/dist/questions/types.d.ts +46 -1
  339. package/packages/core/dist/questions/types.d.ts.map +1 -1
  340. package/packages/core/dist/questions/types.js +2 -1
  341. package/packages/core/dist/questions/types.js.map +1 -1
  342. package/packages/core/dist/secrets/approval.d.ts +54 -0
  343. package/packages/core/dist/secrets/approval.d.ts.map +1 -1
  344. package/packages/core/dist/secrets/approval.js +58 -1
  345. package/packages/core/dist/secrets/approval.js.map +1 -1
  346. package/packages/core/dist/secrets/settings.d.ts +178 -0
  347. package/packages/core/dist/secrets/settings.d.ts.map +1 -1
  348. package/packages/core/dist/secrets/settings.js +63 -6
  349. package/packages/core/dist/secrets/settings.js.map +1 -1
  350. package/packages/core/dist/secrets/store.d.ts +31 -0
  351. package/packages/core/dist/secrets/store.d.ts.map +1 -1
  352. package/packages/core/dist/secrets/store.js +75 -0
  353. package/packages/core/dist/secrets/store.js.map +1 -1
  354. package/packages/core/dist/secrets/use.d.ts.map +1 -1
  355. package/packages/core/dist/secrets/use.js +68 -3
  356. package/packages/core/dist/secrets/use.js.map +1 -1
  357. package/packages/core/dist/tools.d.ts +22 -0
  358. package/packages/core/dist/tools.d.ts.map +1 -1
  359. package/packages/core/dist/tools.js.map +1 -1
  360. package/packages/core/migrations/080_secret_requests.sql +14 -0
  361. package/packages/gateway/dist/.tsbuildinfo +1 -1
  362. package/packages/gateway/dist/chat/session.d.ts.map +1 -1
  363. package/packages/gateway/dist/chat/session.js +2 -1
  364. package/packages/gateway/dist/chat/session.js.map +1 -1
  365. package/packages/gateway/dist/missions/execute.d.ts.map +1 -1
  366. package/packages/gateway/dist/missions/execute.js +3 -1
  367. package/packages/gateway/dist/missions/execute.js.map +1 -1
  368. package/packages/gateway/dist/surfaces/browser-cards.d.ts +15 -3
  369. package/packages/gateway/dist/surfaces/browser-cards.d.ts.map +1 -1
  370. package/packages/gateway/dist/surfaces/browser-cards.js +34 -7
  371. package/packages/gateway/dist/surfaces/browser-cards.js.map +1 -1
  372. package/packages/gateway/dist/surfaces/offered-actions.d.ts.map +1 -1
  373. package/packages/gateway/dist/surfaces/offered-actions.js +8 -2
  374. package/packages/gateway/dist/surfaces/offered-actions.js.map +1 -1
  375. package/packages/gateway/dist/surfaces/pending-question.d.ts +3 -1
  376. package/packages/gateway/dist/surfaces/pending-question.d.ts.map +1 -1
  377. package/packages/gateway/dist/surfaces/pending-question.js.map +1 -1
  378. package/packages/gateway/dist/surfaces/secret-request.d.ts +173 -0
  379. package/packages/gateway/dist/surfaces/secret-request.d.ts.map +1 -0
  380. package/packages/gateway/dist/surfaces/secret-request.js +332 -0
  381. package/packages/gateway/dist/surfaces/secret-request.js.map +1 -0
  382. package/packages/gateway/dist/system-context.js +1 -1
  383. package/packages/gateway/dist/system-context.js.map +1 -1
  384. package/packages/gateway/dist/telegram/main.d.ts.map +1 -1
  385. package/packages/gateway/dist/telegram/main.js +14 -3
  386. package/packages/gateway/dist/telegram/main.js.map +1 -1
  387. package/packages/gateway/dist/telegram/surface.d.ts.map +1 -1
  388. package/packages/gateway/dist/telegram/surface.js +4 -1
  389. package/packages/gateway/dist/telegram/surface.js.map +1 -1
  390. package/packages/gateway/dist/web/api-routes.d.ts.map +1 -1
  391. package/packages/gateway/dist/web/api-routes.js +9 -1
  392. package/packages/gateway/dist/web/api-routes.js.map +1 -1
  393. package/packages/gateway/dist/web/approval-ask.js +2 -2
  394. package/packages/gateway/dist/web/approval-ask.js.map +1 -1
  395. package/packages/gateway/dist/web/browser-capture.d.ts +13 -0
  396. package/packages/gateway/dist/web/browser-capture.d.ts.map +1 -0
  397. package/packages/gateway/dist/web/browser-capture.js +24 -0
  398. package/packages/gateway/dist/web/browser-capture.js.map +1 -0
  399. package/packages/gateway/dist/web/chat.d.ts +26 -0
  400. package/packages/gateway/dist/web/chat.d.ts.map +1 -1
  401. package/packages/gateway/dist/web/chat.js +87 -2
  402. package/packages/gateway/dist/web/chat.js.map +1 -1
  403. package/packages/gateway/dist/web/extension.d.ts +30 -0
  404. package/packages/gateway/dist/web/extension.d.ts.map +1 -1
  405. package/packages/gateway/dist/web/extension.js +86 -6
  406. package/packages/gateway/dist/web/extension.js.map +1 -1
  407. package/packages/gateway/dist/web/onboarding.js +1 -1
  408. package/packages/gateway/dist/web/onboarding.js.map +1 -1
  409. package/packages/gateway/dist/web/remote-hand.d.ts +26 -2
  410. package/packages/gateway/dist/web/remote-hand.d.ts.map +1 -1
  411. package/packages/gateway/dist/web/remote-hand.js +89 -28
  412. package/packages/gateway/dist/web/remote-hand.js.map +1 -1
  413. package/packages/gateway/dist/web/secret-request.d.ts +54 -0
  414. package/packages/gateway/dist/web/secret-request.d.ts.map +1 -0
  415. package/packages/gateway/dist/web/secret-request.js +264 -0
  416. package/packages/gateway/dist/web/secret-request.js.map +1 -0
  417. package/packages/gateway/dist/web/secrets.d.ts +1 -0
  418. package/packages/gateway/dist/web/secrets.d.ts.map +1 -1
  419. package/packages/gateway/dist/web/secrets.js +1 -1
  420. package/packages/gateway/dist/web/secrets.js.map +1 -1
  421. package/packages/gateway/dist/web/server.d.ts.map +1 -1
  422. package/packages/gateway/dist/web/server.js +72 -3
  423. package/packages/gateway/dist/web/server.js.map +1 -1
  424. package/packages/install/dist/.tsbuildinfo +1 -1
  425. package/packages/install/dist/app-layout.d.ts +24 -0
  426. package/packages/install/dist/app-layout.d.ts.map +1 -1
  427. package/packages/install/dist/app-layout.js +64 -2
  428. package/packages/install/dist/app-layout.js.map +1 -1
  429. package/packages/install/dist/launcher.d.ts.map +1 -1
  430. package/packages/install/dist/launcher.js +89 -10
  431. package/packages/install/dist/launcher.js.map +1 -1
  432. package/packages/install/dist/linux-install.d.ts +41 -0
  433. package/packages/install/dist/linux-install.d.ts.map +1 -0
  434. package/packages/install/dist/linux-install.js +86 -0
  435. package/packages/install/dist/linux-install.js.map +1 -0
  436. package/packages/install/dist/runtime-info.d.ts +23 -0
  437. package/packages/install/dist/runtime-info.d.ts.map +1 -0
  438. package/packages/install/dist/runtime-info.js +69 -0
  439. package/packages/install/dist/runtime-info.js.map +1 -0
  440. package/packages/install/dist/supervisor.d.ts.map +1 -1
  441. package/packages/install/dist/supervisor.js +8 -6
  442. package/packages/install/dist/supervisor.js.map +1 -1
  443. package/packages/install/dist/uninstall.d.ts +20 -0
  444. package/packages/install/dist/uninstall.d.ts.map +1 -1
  445. package/packages/install/dist/uninstall.js +50 -1
  446. package/packages/install/dist/uninstall.js.map +1 -1
  447. package/packages/install/dist/upgrade.d.ts +4 -1
  448. package/packages/install/dist/upgrade.d.ts.map +1 -1
  449. package/packages/install/dist/upgrade.js +77 -51
  450. package/packages/install/dist/upgrade.js.map +1 -1
  451. package/packages/runtime/dist/.tsbuildinfo +1 -1
  452. package/packages/runtime/dist/anthropic.d.ts +7 -0
  453. package/packages/runtime/dist/anthropic.d.ts.map +1 -1
  454. package/packages/runtime/dist/anthropic.js +19 -1
  455. package/packages/runtime/dist/anthropic.js.map +1 -1
  456. package/packages/tools/artifacts/dist/.tsbuildinfo +1 -1
  457. package/packages/tools/browser/dist/.tsbuildinfo +1 -1
  458. package/packages/tools/browser/dist/controller.d.ts +16 -1
  459. package/packages/tools/browser/dist/controller.d.ts.map +1 -1
  460. package/packages/tools/browser/dist/controller.js +59 -5
  461. package/packages/tools/browser/dist/controller.js.map +1 -1
  462. package/packages/tools/browser/dist/driver.d.ts +12 -0
  463. package/packages/tools/browser/dist/driver.d.ts.map +1 -1
  464. package/packages/tools/browser/dist/driver.js +41 -2
  465. package/packages/tools/browser/dist/driver.js.map +1 -1
  466. package/packages/tools/browser/dist/extension.d.ts +49 -9
  467. package/packages/tools/browser/dist/extension.d.ts.map +1 -1
  468. package/packages/tools/browser/dist/extension.js +145 -21
  469. package/packages/tools/browser/dist/extension.js.map +1 -1
  470. package/packages/tools/browser/dist/index.d.ts +10 -6
  471. package/packages/tools/browser/dist/index.d.ts.map +1 -1
  472. package/packages/tools/browser/dist/index.js +22 -8
  473. package/packages/tools/browser/dist/index.js.map +1 -1
  474. package/packages/tools/browser/dist/routes.d.ts +10 -1
  475. package/packages/tools/browser/dist/routes.d.ts.map +1 -1
  476. package/packages/tools/browser/dist/routes.js +24 -0
  477. package/packages/tools/browser/dist/routes.js.map +1 -1
  478. package/packages/tools/browser/dist/service.d.ts +48 -1
  479. package/packages/tools/browser/dist/service.d.ts.map +1 -1
  480. package/packages/tools/browser/dist/service.js +114 -11
  481. package/packages/tools/browser/dist/service.js.map +1 -1
  482. package/packages/tools/browser/dist/types.d.ts +54 -3
  483. package/packages/tools/browser/dist/types.d.ts.map +1 -1
  484. package/packages/tools/browser/dist/types.js +17 -1
  485. package/packages/tools/browser/dist/types.js.map +1 -1
  486. package/packages/tools/email/dist/.tsbuildinfo +1 -1
  487. package/packages/tools/host/dist/.tsbuildinfo +1 -1
  488. package/packages/tools/mcp/dist/.tsbuildinfo +1 -1
  489. package/packages/tools/memory/dist/.tsbuildinfo +1 -1
  490. package/packages/tools/web/dist/.tsbuildinfo +1 -1
  491. package/packages/web/dist/assets/index-DgpPl0TR.js +155 -0
  492. package/packages/web/dist/assets/index-rMRjibNI.css +1 -0
  493. package/packages/web/dist/assets/{lottie_light-D7CS-IeP.js → lottie_light-twPed1FM.js} +1 -1
  494. package/packages/web/dist/build.json +1 -1
  495. package/packages/web/dist/index.html +2 -2
  496. package/packages/web/dist/precache.json +4 -4
  497. package/node_modules/content-disposition/index.js +0 -536
  498. package/node_modules/playwright/jsx-runtime.js +0 -42
  499. package/node_modules/playwright/jsx-runtime.mjs +0 -21
  500. package/node_modules/playwright-core/lib/vite/recorder/assets/index-hrlLqLtq.js +0 -129
  501. package/node_modules/playwright-core/lib/vite/traceViewer/assets/defaultSettingsView-Ds6CBOo0.js +0 -182
  502. package/packages/web/dist/assets/index-BibqUZwt.js +0 -155
  503. package/packages/web/dist/assets/index-DBVZzTau.css +0 -1
@@ -32,6 +32,7 @@ exports.getSelectedMailbox = getSelectedMailbox;
32
32
  exports.getFolderTree = getFolderTree;
33
33
  exports.getFlagColor = getFlagColor;
34
34
  exports.getColorFlags = getColorFlags;
35
+ exports.mergeFetchRows = mergeFetchRows;
35
36
  exports.formatMessageResponse = formatMessageResponse;
36
37
  exports.processName = processName;
37
38
  exports.decodeText = decodeText;
@@ -48,6 +49,7 @@ exports.isValidSequenceValue = isValidSequenceValue;
48
49
  exports.isDecimalString = isDecimalString;
49
50
  exports.isUnsafeKey = isUnsafeKey;
50
51
  exports.getStringList = getStringList;
52
+ exports.getStringValue = getStringValue;
51
53
  exports.parseBigIntValue = parseBigIntValue;
52
54
  exports.parseUintValue = parseUintValue;
53
55
  exports.expandRange = expandRange;
@@ -144,13 +146,7 @@ const CONNECTION_ERROR_SITE_KEYS = ['rejectedFrom', 'command', 'path'];
144
146
  * @returns The stamped error
145
147
  */
146
148
  function buildConnectionError(cid, code, message, meta) {
147
- const error = new Error(message);
148
- error.code = code;
149
- error.cid = cid;
150
- if (meta) {
151
- Object.assign(error, meta);
152
- }
153
- return error;
149
+ return (0, errors_js_1.createImapError)(message, code, { cid, ...meta });
154
150
  }
155
151
  /**
156
152
  * Re-stamps an existing connection error for a different rejection site.
@@ -172,6 +168,7 @@ function buildConnectionError(cid, code, message, meta) {
172
168
  * @returns A separate error describing the same failure at the new site
173
169
  */
174
170
  function restampConnectionError(err, meta) {
171
+ // the original code is carried over unchanged, whatever its origin
175
172
  let error = buildConnectionError(err.cid, err.code, err.message, err);
176
173
  for (let key of CONNECTION_ERROR_SITE_KEYS) {
177
174
  delete error[key];
@@ -271,12 +268,15 @@ function logConnectionError(connection, msg, err) {
271
268
  /**
272
269
  * Whether a command failed because the server answered it with a tagged NO or BAD, as opposed
273
270
  * to a lost connection, a timeout or a local failure that says nothing about the server's answer.
271
+ * A throttled command (ETHROTTLE, Microsoft 365 answers it with BAD) was not refused: the server
272
+ * asks to try again later, so a throttled login is not a rejected credential and a throttled
273
+ * IDLE does not mean the server lacks IDLE.
274
274
  *
275
275
  * @param err - The error the command failed with
276
- * @returns True for a tagged NO or BAD
276
+ * @returns True for a tagged NO or BAD that is not throttling
277
277
  */
278
278
  function isServerRefusal(err) {
279
- return !!err && (err.responseStatus === 'NO' || err.responseStatus === 'BAD');
279
+ return !!err && (err.responseStatus === 'NO' || err.responseStatus === 'BAD') && err.code !== errors_js_1.ImapFlowErrorCode.ETHROTTLE;
280
280
  }
281
281
  /**
282
282
  * Checks whether IMAP4rev2 semantics are active for the connection: either the
@@ -522,12 +522,13 @@ function getTextValues(attributes) {
522
522
  * @param response - Parsed IMAP server response
523
523
  * @returns Compiled response text, or false if no response
524
524
  */
525
+ // Async although nothing in it awaits any more: `imapflow/lib/tools` deep imports may chain on the promise
525
526
  async function getErrorText(response) {
526
527
  if (!response) {
527
528
  return false;
528
529
  }
529
530
  try {
530
- return (await (0, imap_handler_js_1.compiler)(response)).toString();
531
+ return (0, imap_handler_js_1.compiler)(response).toString();
531
532
  }
532
533
  catch {
533
534
  // The wire encoder refuses values that cannot be expressed as a valid IMAP
@@ -536,7 +537,7 @@ async function getErrorText(response) {
536
537
  // tolerates stray bytes inside an OK/NO/BAD atom, and those bytes then have
537
538
  // no valid re-encoding. This text is diagnostic, so fall back to the logging
538
539
  // encoder rather than replacing the server's error with an encoding failure.
539
- return (await (0, imap_handler_js_1.compiler)(response, { isLogging: true })).toString();
540
+ return (0, imap_handler_js_1.compiler)(response, { isLogging: true }).toString();
540
541
  }
541
542
  }
542
543
  /**
@@ -713,6 +714,34 @@ function getColorFlags(color) {
713
714
  }
714
715
  return result;
715
716
  }
717
+ /**
718
+ * Merges the FETCH rows a server sent for one message into one message object. A server may
719
+ * split the data items of a message over several FETCH responses, and may put an unsolicited
720
+ * one (a flag change made by another session) in between (RFC 9051 sections 7.5.2 and 5.2).
721
+ * Later rows win for single values, bodyParts, binaryParts and partialOrigins are combined.
722
+ *
723
+ * @param rows - Formatted rows of the same message, in the order they arrived
724
+ * @returns One message object holding the data of every row
725
+ */
726
+ function mergeFetchRows(rows) {
727
+ if (rows.length === 1) {
728
+ return rows[0];
729
+ }
730
+ let merged = {};
731
+ let partialOrigins;
732
+ for (let row of rows) {
733
+ let { bodyParts, binaryParts, ...rest } = row;
734
+ Object.assign(merged, rest);
735
+ // combined into collections of their own, so the rows stay untouched
736
+ bodyParts?.forEach((value, key) => (merged.bodyParts ??= new Map()).set(key, value));
737
+ binaryParts?.forEach(key => (merged.binaryParts ??= new Set()).add(key));
738
+ row.partialOrigins?.forEach((value, key) => (partialOrigins ??= new Map()).set(key, value));
739
+ }
740
+ if (partialOrigins) {
741
+ Object.defineProperty(merged, 'partialOrigins', { value: partialOrigins, writable: true, configurable: true });
742
+ }
743
+ return merged;
744
+ }
716
745
  /**
717
746
  * Formats a raw untagged FETCH response into a structured message object.
718
747
  *
@@ -722,6 +751,7 @@ function getColorFlags(color) {
722
751
  * @param connection - Connection the response arrived on, decodes Gmail labels like mailbox names
723
752
  * @returns Formatted message object with properties like seq, uid, flags, envelope, etc.
724
753
  */
754
+ // Async although nothing in it awaits any more: `imapflow/lib/tools` deep imports may chain on the promise
725
755
  async function formatMessageResponse(untagged, mailbox, idHashAlgorithm, connection) {
726
756
  let map = {};
727
757
  // The sequence number indexes into mailbox state, so an unusable one is dropped rather
@@ -744,9 +774,9 @@ async function formatMessageResponse(untagged, mailbox, idHashAlgorithm, connect
744
774
  let attribute = attributes[i];
745
775
  if (i % 2 === 0) {
746
776
  origin = false;
747
- key = (await (0, imap_handler_js_1.compiler)({
777
+ key = (0, imap_handler_js_1.compiler)({
748
778
  attributes: [attribute]
749
- }))
779
+ })
750
780
  .toString()
751
781
  .toLowerCase()
752
782
  .replace(/<(\d+)(\.\d+)?>$/, (match, start) => {
@@ -1473,16 +1503,27 @@ function getStringList(list) {
1473
1503
  }
1474
1504
  let strings = [];
1475
1505
  for (let entry of list) {
1476
- let value = entry && entry.value;
1477
- if (Buffer.isBuffer(value)) {
1478
- value = value.toString();
1479
- }
1480
- if (value && typeof value === 'string') {
1506
+ let value = getStringValue(entry);
1507
+ if (value) {
1481
1508
  strings.push(value);
1482
1509
  }
1483
1510
  }
1484
1511
  return strings;
1485
1512
  }
1513
+ /**
1514
+ * Reads the text of a string value from a response. A server may send any string as a literal,
1515
+ * which arrives as a Buffer and is decoded as UTF-8.
1516
+ *
1517
+ * @param attribute - Parsed attribute from a response
1518
+ * @returns The string, or undefined when the attribute holds no string (NIL, a list)
1519
+ */
1520
+ function getStringValue(attribute) {
1521
+ let value = attribute && attribute.value;
1522
+ if (Buffer.isBuffer(value)) {
1523
+ return value.toString();
1524
+ }
1525
+ return typeof value === 'string' ? value : undefined;
1526
+ }
1486
1527
  /**
1487
1528
  * Parses an untrusted decimal value from a server response into a BigInt.
1488
1529
  *
@@ -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
  /**
@@ -797,6 +805,15 @@ export interface LogEvent {
797
805
  /** Additional log data */
798
806
  [key: string]: any;
799
807
  }
808
+ /** A message the server marked with the ALERT response code, to be shown to the user (RFC 9051 section 7.1) */
809
+ export interface AlertEvent {
810
+ /** The alert text */
811
+ message: string;
812
+ /** The response that carried it */
813
+ response: 'OK' | 'NO' | 'BAD' | 'BYE' | 'PREAUTH';
814
+ /** Tag of the command it completed, missing for an untagged response */
815
+ tag?: string | undefined;
816
+ }
800
817
  export interface ResponseEvent {
801
818
  /** Response type */
802
819
  response: string;
@@ -862,4 +879,6 @@ export interface ImapFlowEvents {
862
879
  log: [entry: LogEvent];
863
880
  /** Response event */
864
881
  response: [response: ResponseEvent];
882
+ /** The server sent an ALERT: text meant for the user, such as a planned shutdown or an account problem */
883
+ alert: [alert: AlertEvent];
865
884
  }
@@ -19,4 +19,4 @@ export interface AppendResult extends AppendResponseObject {
19
19
  * @returns Append result with UID info if available, or undefined if preconditions not met
20
20
  * @throws {Error} If the APPEND command fails or message exceeds APPENDLIMIT
21
21
  */
22
- export default function append(connection: ImapFlow, destination: string | string[], content: Buffer | string, flags?: string | string[] | undefined, idate?: Date | string | false | undefined): Promise<AppendResult | undefined>;
22
+ export default function append(connection: ImapFlow, destination: string | string[], content: Buffer | Uint8Array | string, flags?: string | string[] | undefined, idate?: Date | string | false | undefined): Promise<AppendResult | undefined>;
@@ -1,4 +1,5 @@
1
1
  import { formatFlag, canUseFlag, formatDateTime, normalizePath, encodePath, comparePaths, parseBigIntValue, parseUintValue, MAX_UINT32_DIGITS, getSelectedMailbox, emitSafe, isAuthenticatedState, reportCommandError, logConnectionError } from '../tools.js';
2
+ import { createImapError } from '../errors.js';
2
3
  /**
3
4
  * Appends a message to a mailbox.
4
5
  *
@@ -15,14 +16,24 @@ export default async function append(connection, destination, content, flags, id
15
16
  // nothing to do here
16
17
  return;
17
18
  }
19
+ // The literal size marker is announced from these bytes, so anything that is not
20
+ // bytes (a Readable, a plain object) is refused here instead of desyncing the session
21
+ let message;
18
22
  if (typeof content === 'string') {
19
- content = Buffer.from(content);
23
+ message = Buffer.from(content);
24
+ }
25
+ else if (content instanceof Uint8Array) {
26
+ // a Buffer as is, any other Uint8Array as a view over the same memory, not a copy
27
+ message = Buffer.isBuffer(content) ? content : Buffer.from(content.buffer, content.byteOffset, content.byteLength);
28
+ }
29
+ else {
30
+ throw createImapError('Message content must be a Buffer, Uint8Array or string', 'InvalidMessageContent');
20
31
  }
21
32
  // APPENDLIMIT capability (RFC 7889): server may advertise the maximum message
22
33
  // size it accepts. Check before sending to avoid a wasted round-trip.
23
34
  if (connection.capabilities.has('APPENDLIMIT')) {
24
35
  let appendLimit = connection.capabilities.get('APPENDLIMIT');
25
- if (typeof appendLimit === 'number' && appendLimit < content.length) {
36
+ if (typeof appendLimit === 'number' && appendLimit < message.length) {
26
37
  let err = new Error('Message content too big for APPENDLIMIT=' + appendLimit);
27
38
  err.serverResponseCode = 'APPENDLIMIT';
28
39
  throw err;
@@ -79,9 +90,9 @@ export default async function append(connection, destination, content, flags, id
79
90
  // Regular literals cannot contain NUL bytes per the IMAP grammar.
80
91
  let isLiteral8 = false;
81
92
  if (connection.capabilities.has('BINARY') && !connection.disableBinary) {
82
- isLiteral8 = content.indexOf(Buffer.from([0])) >= 0;
93
+ isLiteral8 = message.indexOf(0) >= 0;
83
94
  }
84
- attributes.push({ type: 'LITERAL', value: content, isLiteral8 });
95
+ attributes.push({ type: 'LITERAL', value: message, isLiteral8 });
85
96
  let map = { destination };
86
97
  if (connection.mailbox && connection.mailbox.path) {
87
98
  map.path = connection.mailbox.path;
@@ -1,3 +1,4 @@
1
+ import { createImapError } from '../errors.js';
1
2
  /**
2
3
  * Requests DEFLATE compression from the server.
3
4
  *
@@ -33,8 +34,7 @@ export default async function compress(connection) {
33
34
  // back its unconsumed tail on unpipe so the transport can feed it into the
34
35
  // inflater - not something a command module can reach from here.
35
36
  if (response.hasTrailingData) {
36
- let error = new Error('Server sent data between the COMPRESS response and the compression layer switch');
37
- error.code = 'COMPRESS_TRAILING_DATA';
37
+ let error = createImapError('Server sent data between the COMPRESS response and the compression layer switch', 'COMPRESS_TRAILING_DATA');
38
38
  connection.log.error({ err: error, cid: connection.id });
39
39
  // Schedule the close before releasing parser backpressure, so the buffered
40
40
  // deflate-framed bytes cannot settle anything before teardown begins. This is
@@ -1,4 +1,4 @@
1
- import { formatDateTime, isUnsafeKey } from '../tools.js';
1
+ import { formatDateTime, isUnsafeKey, getStringValue } from '../tools.js';
2
2
  /**
3
3
  * Sends ID info to the server and updates server info data based on the response.
4
4
  *
@@ -36,17 +36,19 @@ export default async function id(connection, clientInfo) {
36
36
  let params = untagged.attributes && untagged.attributes[0];
37
37
  let key;
38
38
  (Array.isArray(params) ? params : [].concat(params || [])).forEach((val, i) => {
39
+ // keys are strings and values nstrings, either may come as a literal
40
+ let value = getStringValue(val);
39
41
  if (i % 2 === 0) {
40
- key = val.value;
42
+ key = value;
41
43
  }
42
- else if (typeof key === 'string' && typeof val.value === 'string') {
44
+ else if (key !== undefined && value !== undefined) {
43
45
  // The server picks the keys of this object, which the caller reads
44
46
  // back as serverInfo: a prototype-chain name is skipped as it is for
45
47
  // every other server-named key, so it can neither be shadowed nor
46
48
  // written through
47
49
  let name = key.toLowerCase().trim();
48
50
  if (!isUnsafeKey(name)) {
49
- map[name] = val.value;
51
+ map[name] = value;
50
52
  }
51
53
  }
52
54
  });
@@ -1,4 +1,5 @@
1
1
  import { guardedPromise, hasCapability, isServerRefusal, logConnectionError, restampConnectionError, unrefTimer, clearTimer, getSelectedMailbox } from '../tools.js';
2
+ import { createImapError } from '../errors.js';
2
3
  const NOOP_INTERVAL = 2 * 60 * 1000;
3
4
  /**
4
5
  * Marks the connection as idling on behalf of one session and returns a release function.
@@ -124,14 +125,15 @@ async function runIdle(connection) {
124
125
  }
125
126
  catch (err) {
126
127
  logConnectionError(connection, 'IDLE session failed', err);
127
- // A tagged NO or BAD only means the server refused IDLE; the connection is still usable,
128
- // so the waiters are released by the finally block below and their own commands run.
129
- // Anything else (close, lost socket, parser failure) fails the waiters too.
130
- let refusedByServer = isServerRefusal(err);
131
- if (refusedByServer) {
128
+ // A tagged NO or BAD only means the server did not run IDLE; the connection is still
129
+ // usable, so the waiters are released by the finally block below and their own commands
130
+ // run. Anything else (close, lost socket, parser failure) fails the waiters too. Only a
131
+ // refusal turns IDLE off for the session, a throttled IDLE is tried again later.
132
+ let answeredByServer = err.responseStatus === 'NO' || err.responseStatus === 'BAD';
133
+ if (isServerRefusal(err)) {
132
134
  connection.skipIdle = true;
133
135
  }
134
- if (preCheckWaitQueue.length && !refusedByServer) {
136
+ if (preCheckWaitQueue.length && !answeredByServer) {
135
137
  // One error for the whole queue: every waiter failed at the same site, for the same
136
138
  // reason. Built inside the guard so a teardown with nothing queued - the common case -
137
139
  // does not pay for an Error and its stack capture.
@@ -188,9 +190,7 @@ async function pollOnce(connection, session) {
188
190
  highestModseq: true
189
191
  });
190
192
  if (!status) {
191
- let err = new Error('STATUS poll failed');
192
- err.code = 'PollFailed';
193
- throw err;
193
+ throw createImapError('STATUS poll failed', 'PollFailed');
194
194
  }
195
195
  break;
196
196
  }
@@ -1,4 +1,4 @@
1
- import { decodePath, encodePath, normalizePath, enhanceCommandError, hasCapability, isRev2Active, buildStatusQueryAttributes, getStringList } from '../tools.js';
1
+ import { decodePath, encodePath, normalizePath, enhanceCommandError, hasCapability, isRev2Active, buildStatusQueryAttributes, getStringList, getStringValue } from '../tools.js';
2
2
  import { parseStatusList } from './status-fields.js';
3
3
  import { specialUse } from '../special-use.js';
4
4
  /**
@@ -155,7 +155,7 @@ export default async function list(connection, reference, mailbox, options) {
155
155
  path: normalizePath(connection, decodePath(connection, rawPath)),
156
156
  pathAsListed: rawPath,
157
157
  flags: new Set(getStringList(untagged.attributes[0])),
158
- delimiter: (untagged.attributes[1] && untagged.attributes[1].value),
158
+ delimiter: getStringValue(untagged.attributes[1]),
159
159
  listed: true
160
160
  };
161
161
  normalizeFlags(entry);
@@ -396,7 +396,7 @@ export default async function list(connection, reference, mailbox, options) {
396
396
  path: normalizePath(connection, decodePath(connection, rawPath)),
397
397
  pathAsListed: rawPath,
398
398
  flags: new Set(getStringList(untagged.attributes[0])),
399
- delimiter: (untagged.attributes[1] && untagged.attributes[1].value),
399
+ delimiter: getStringValue(untagged.attributes[1]),
400
400
  subscribed: true
401
401
  };
402
402
  if (entry.path.toUpperCase() === 'INBOX') {
@@ -1,4 +1,4 @@
1
- import { hasCapability, getStringList, isAuthenticatedState } from '../tools.js';
1
+ import { hasCapability, getStringList, getStringValue, isAuthenticatedState } from '../tools.js';
2
2
  /**
3
3
  * Requests NAMESPACE info from the server.
4
4
  *
@@ -91,8 +91,9 @@ async function getListPrefix(connection) {
91
91
  return;
92
92
  }
93
93
  map.flags = new Set(getStringList(untagged.attributes[0]));
94
- map.delimiter = (untagged.attributes[1] && untagged.attributes[1].value);
95
- map.prefix = ((untagged.attributes[2] && untagged.attributes[2].value) || '');
94
+ // the name may be a literal, which arrives as a Buffer
95
+ map.delimiter = getStringValue(untagged.attributes[1]) || null;
96
+ map.prefix = getStringValue(untagged.attributes[2]) || '';
96
97
  if (map.delimiter && map.prefix.charAt(0) === map.delimiter) {
97
98
  map.prefix = map.prefix.slice(1);
98
99
  }
@@ -117,22 +118,25 @@ function getNamsepaceInfo(attribute) {
117
118
  if (!attribute || !Array.isArray(attribute) || !attribute.length) {
118
119
  return false;
119
120
  }
120
- return attribute
121
- .filter(entry => {
122
- let pair = entry;
123
- // RFC 2342 section 5 allows the delimiter to be NIL when the namespace has
124
- // no hierarchy. The token parser emits a literal `null` for NIL.
125
- return pair.length >= 2 && pair[0] && typeof pair[0].value === 'string' && (pair[1] === null || (pair[1] && typeof pair[1].value === 'string'));
126
- })
127
- .map(entry => {
121
+ let entries = [];
122
+ for (let entry of attribute) {
123
+ if (!Array.isArray(entry)) {
124
+ continue;
125
+ }
128
126
  let pair = entry;
129
- let prefix = pair[0].value;
130
- let delimiter = pair[1] === null ? null : pair[1].value;
127
+ let prefix = getStringValue(pair[0]);
128
+ // RFC 2342 section 5 allows the delimiter to be NIL when the namespace has no hierarchy.
129
+ // The token parser emits a literal `null` for NIL.
130
+ let delimiter = pair[1] === null ? null : getStringValue(pair[1]);
131
+ if (pair.length < 2 || prefix === undefined || delimiter === undefined) {
132
+ continue;
133
+ }
131
134
  // Append the delimiter to the prefix if it doesn't already end with one,
132
135
  // so callers can construct full paths by simply concatenating prefix + name.
133
136
  if (delimiter && prefix && prefix.charAt(prefix.length - 1) !== delimiter) {
134
137
  prefix += delimiter;
135
138
  }
136
- return { prefix, delimiter };
137
- });
139
+ entries.push({ prefix, delimiter });
140
+ }
141
+ return entries;
138
142
  }
@@ -1,4 +1,4 @@
1
- import { encodePath, normalizePath, parseUintValue, isUnsafeKey, isAuthenticatedState, reportCommandError } from '../tools.js';
1
+ import { encodePath, normalizePath, parseUintValue, isUnsafeKey, isAuthenticatedState, reportCommandError, getStringValue } from '../tools.js';
2
2
  /**
3
3
  * Requests quota information for a mailbox.
4
4
  *
@@ -79,9 +79,8 @@ export default async function quota(connection, path) {
79
79
  // QUOTAROOT response tells us which quota root applies to this mailbox.
80
80
  // A mailbox may have zero or one quota root.
81
81
  QUOTAROOT: async (untagged) => {
82
- let quotaRoot = untagged.attributes && untagged.attributes[1] && typeof untagged.attributes[1].value === 'string'
83
- ? untagged.attributes[1].value
84
- : false;
82
+ // the root name is an astring, which may come as a literal
83
+ let quotaRoot = getStringValue(untagged.attributes && untagged.attributes[1]);
85
84
  if (quotaRoot) {
86
85
  map.quotaRoot = quotaRoot;
87
86
  }
@@ -1,24 +1,13 @@
1
1
  import type { ImapFlow } from '../imap-flow.js';
2
2
  import type { MailboxObject, MailboxOpenOptions } from '../types.js';
3
- /**
4
- * Options for SELECT/EXAMINE: the public open options plus the QRESYNC resynchronization
5
- * parameters, which are only honored when the QRESYNC extension has been enabled
6
- */
7
- export interface SelectOptions extends MailboxOpenOptions {
8
- /** QRESYNC modseq value to fetch changes since */
9
- changedSince?: bigint | number | string | undefined;
10
- /** QRESYNC UID validity value */
11
- uidValidity?: bigint | number | string | undefined;
12
- }
3
+ /** SELECT/EXAMINE options, the QRESYNC parameters are part of the public mailboxOpen() options */
4
+ export type SelectOptions = MailboxOpenOptions;
13
5
  /**
14
6
  * Selects or examines a mailbox, making it the current mailbox for subsequent operations.
15
7
  *
16
8
  * @param connection - IMAP connection instance
17
9
  * @param path - Mailbox path to select
18
- * @param options - Select options
19
- * @param options.readOnly - If true, use EXAMINE instead of SELECT (read-only access)
20
- * @param options.changedSince - QRESYNC modseq value to fetch changes since
21
- * @param options.uidValidity - QRESYNC UID validity value
10
+ * @param options - Select options, see MailboxOpenOptions
22
11
  * @returns Mailbox info object with path, flags, exists, uidNext, uidValidity, highestModseq, etc., or undefined if preconditions not met
23
12
  * @throws If the SELECT/EXAMINE command fails
24
13
  */
@@ -48,10 +48,7 @@ const VALUED_RESPONSE_CODES = Object.assign(Object.create(null), {
48
48
  *
49
49
  * @param connection - IMAP connection instance
50
50
  * @param path - Mailbox path to select
51
- * @param options - Select options
52
- * @param options.readOnly - If true, use EXAMINE instead of SELECT (read-only access)
53
- * @param options.changedSince - QRESYNC modseq value to fetch changes since
54
- * @param options.uidValidity - QRESYNC UID validity value
51
+ * @param options - Select options, see MailboxOpenOptions
55
52
  * @returns Mailbox info object with path, flags, exists, uidNext, uidValidity, highestModseq, etc., or undefined if preconditions not met
56
53
  * @throws If the SELECT/EXAMINE command fails
57
54
  */
@@ -1,5 +1,6 @@
1
1
  import { encodePath, normalizePath, buildStatusQueryAttributes, isRev2Active, isAuthenticatedState, emitSafe, getSelectedMailbox, logConnectionError } from '../tools.js';
2
2
  import { parseStatusList } from './status-fields.js';
3
+ import { createImapError } from '../errors.js';
3
4
  // STATUS fields that also refresh the live mailbox state when the queried mailbox is the
4
5
  // currently selected one. Keyed by the output property name parseStatusList() reports.
5
6
  const MAILBOX_UPDATERS = {
@@ -96,10 +97,7 @@ export default async function status(connection, path, query) {
96
97
  return false;
97
98
  });
98
99
  if (folders && !folders.length) {
99
- let error = new Error(`Mailbox doesn't exist: ${path}`);
100
- error.code = 'NotFound';
101
- error.response = err;
102
- throw error;
100
+ throw createImapError(`Mailbox doesn't exist: ${path}`, 'NotFound', { response: err });
103
101
  }
104
102
  }
105
103
  connection.log.warn({ err, cid: connection.id });
@@ -1,4 +1,4 @@
1
- import type { ImapFlowError } from './errors.js';
1
+ import { type ImapFlowError } from './errors.js';
2
2
  export declare const CONNECT_TIMEOUT: number;
3
3
  /**
4
4
  * One deadline for an entire connection attempt.
@@ -1,4 +1,5 @@
1
1
  import { clearTimer } from './tools.js';
2
+ import { createImapError } from './errors.js';
2
3
  // Default upper bound for establishing a usable transport, including DNS and proxy negotiation.
3
4
  export const CONNECT_TIMEOUT = 90 * 1000;
4
5
  /**
@@ -28,10 +29,7 @@ export class ConnectionDeadline {
28
29
  * @returns The shared `CONNECT_TIMEOUT` error.
29
30
  */
30
31
  error() {
31
- let err = new Error('Failed to establish connection in required time');
32
- err.code = 'CONNECT_TIMEOUT';
33
- err.details = { connectionTimeout: this.timeout };
34
- return err;
32
+ return createImapError('Failed to establish connection in required time', 'CONNECT_TIMEOUT', { details: { connectionTimeout: this.timeout } });
35
33
  }
36
34
  /**
37
35
  * Maps a dependency's own expiry onto the shared `CONNECT_TIMEOUT` shape, so callers see one