@withbuddi/buddi 0.1.0-pre.37 → 0.1.0-pre.39

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 (815) hide show
  1. package/extension/background.js +764 -32
  2. package/extension/manifest.json +2 -2
  3. package/node_modules/@buddi/cli/dist/.tsbuildinfo +1 -1
  4. package/node_modules/@buddi/cli/dist/access-cmd.d.ts +10 -0
  5. package/node_modules/@buddi/cli/dist/access-cmd.d.ts.map +1 -0
  6. package/node_modules/@buddi/cli/dist/access-cmd.js +180 -0
  7. package/node_modules/@buddi/cli/dist/access-cmd.js.map +1 -0
  8. package/node_modules/@buddi/cli/dist/args.d.ts +10 -0
  9. package/node_modules/@buddi/cli/dist/args.d.ts.map +1 -1
  10. package/node_modules/@buddi/cli/dist/args.js +34 -1
  11. package/node_modules/@buddi/cli/dist/args.js.map +1 -1
  12. package/node_modules/@buddi/cli/dist/commands.d.ts.map +1 -1
  13. package/node_modules/@buddi/cli/dist/commands.js +39 -2
  14. package/node_modules/@buddi/cli/dist/commands.js.map +1 -1
  15. package/node_modules/@buddi/cli/dist/doctor-probes.d.ts.map +1 -1
  16. package/node_modules/@buddi/cli/dist/doctor-probes.js +54 -29
  17. package/node_modules/@buddi/cli/dist/doctor-probes.js.map +1 -1
  18. package/node_modules/@buddi/cli/dist/doctor.d.ts +36 -12
  19. package/node_modules/@buddi/cli/dist/doctor.d.ts.map +1 -1
  20. package/node_modules/@buddi/cli/dist/doctor.js +32 -9
  21. package/node_modules/@buddi/cli/dist/doctor.js.map +1 -1
  22. package/node_modules/@buddi/cli/dist/main.d.ts +2 -0
  23. package/node_modules/@buddi/cli/dist/main.d.ts.map +1 -1
  24. package/node_modules/@buddi/cli/dist/main.js +20 -2
  25. package/node_modules/@buddi/cli/dist/main.js.map +1 -1
  26. package/node_modules/@buddi/core/dist/.tsbuildinfo +1 -1
  27. package/node_modules/@buddi/core/dist/agents/catalog.d.ts +2 -0
  28. package/node_modules/@buddi/core/dist/agents/catalog.d.ts.map +1 -1
  29. package/node_modules/@buddi/core/dist/agents/catalog.js +1 -0
  30. package/node_modules/@buddi/core/dist/agents/catalog.js.map +1 -1
  31. package/node_modules/@buddi/core/dist/agents/edit.d.ts +2 -0
  32. package/node_modules/@buddi/core/dist/agents/edit.d.ts.map +1 -1
  33. package/node_modules/@buddi/core/dist/agents/edit.js +3 -1
  34. package/node_modules/@buddi/core/dist/agents/edit.js.map +1 -1
  35. package/node_modules/@buddi/core/dist/agents/frontmatter.d.ts +11 -0
  36. package/node_modules/@buddi/core/dist/agents/frontmatter.d.ts.map +1 -1
  37. package/node_modules/@buddi/core/dist/agents/frontmatter.js +7 -0
  38. package/node_modules/@buddi/core/dist/agents/frontmatter.js.map +1 -1
  39. package/node_modules/@buddi/core/dist/index.d.ts +1 -0
  40. package/node_modules/@buddi/core/dist/index.d.ts.map +1 -1
  41. package/node_modules/@buddi/core/dist/index.js +1 -0
  42. package/node_modules/@buddi/core/dist/index.js.map +1 -1
  43. package/node_modules/@buddi/core/dist/plugin/index.d.ts +3 -0
  44. package/node_modules/@buddi/core/dist/plugin/index.d.ts.map +1 -1
  45. package/node_modules/@buddi/core/dist/plugin/index.js +3 -0
  46. package/node_modules/@buddi/core/dist/plugin/index.js.map +1 -1
  47. package/node_modules/@buddi/core/dist/plugin/version.d.ts +1 -1
  48. package/node_modules/@buddi/core/dist/plugin/version.js +1 -1
  49. package/node_modules/@buddi/core/dist/questions/store.d.ts +12 -0
  50. package/node_modules/@buddi/core/dist/questions/store.d.ts.map +1 -1
  51. package/node_modules/@buddi/core/dist/questions/store.js +11 -1
  52. package/node_modules/@buddi/core/dist/questions/store.js.map +1 -1
  53. package/node_modules/@buddi/core/dist/questions/types.d.ts +8 -0
  54. package/node_modules/@buddi/core/dist/questions/types.d.ts.map +1 -1
  55. package/node_modules/@buddi/core/dist/questions/types.js +15 -0
  56. package/node_modules/@buddi/core/dist/questions/types.js.map +1 -1
  57. package/node_modules/@buddi/core/dist/queue/jobs.d.ts +8 -0
  58. package/node_modules/@buddi/core/dist/queue/jobs.d.ts.map +1 -1
  59. package/node_modules/@buddi/core/dist/queue/jobs.js +9 -3
  60. package/node_modules/@buddi/core/dist/queue/jobs.js.map +1 -1
  61. package/node_modules/@buddi/core/dist/queue/worker.d.ts +2 -0
  62. package/node_modules/@buddi/core/dist/queue/worker.d.ts.map +1 -1
  63. package/node_modules/@buddi/core/dist/queue/worker.js +2 -1
  64. package/node_modules/@buddi/core/dist/queue/worker.js.map +1 -1
  65. package/node_modules/@buddi/core/dist/registry.d.ts +7 -1
  66. package/node_modules/@buddi/core/dist/registry.d.ts.map +1 -1
  67. package/node_modules/@buddi/core/dist/registry.js +73 -11
  68. package/node_modules/@buddi/core/dist/registry.js.map +1 -1
  69. package/node_modules/@buddi/core/dist/routes.d.ts +153 -0
  70. package/node_modules/@buddi/core/dist/routes.d.ts.map +1 -0
  71. package/node_modules/@buddi/core/dist/routes.js +47 -0
  72. package/node_modules/@buddi/core/dist/routes.js.map +1 -0
  73. package/node_modules/@buddi/core/dist/scheduler/missions.d.ts +5 -3
  74. package/node_modules/@buddi/core/dist/scheduler/missions.d.ts.map +1 -1
  75. package/node_modules/@buddi/core/dist/scheduler/missions.js +9 -7
  76. package/node_modules/@buddi/core/dist/scheduler/missions.js.map +1 -1
  77. package/node_modules/@buddi/core/dist/scheduler/types.d.ts +7 -0
  78. package/node_modules/@buddi/core/dist/scheduler/types.d.ts.map +1 -1
  79. package/node_modules/@buddi/core/dist/scheduler/types.js +1 -0
  80. package/node_modules/@buddi/core/dist/scheduler/types.js.map +1 -1
  81. package/node_modules/@buddi/core/dist/tools.d.ts +59 -2
  82. package/node_modules/@buddi/core/dist/tools.d.ts.map +1 -1
  83. package/node_modules/@buddi/core/dist/tools.js.map +1 -1
  84. package/node_modules/@buddi/core/migrations/075_access_providers.sql +43 -0
  85. package/node_modules/@buddi/core/migrations/076_mission_browser.sql +7 -0
  86. package/node_modules/@buddi/gateway/dist/.tsbuildinfo +1 -1
  87. package/node_modules/@buddi/gateway/dist/agents/canvas.d.ts +12 -12
  88. package/node_modules/@buddi/gateway/dist/agents/catalogue-package.d.ts +38 -20
  89. package/node_modules/@buddi/gateway/dist/agents/catalogue-package.d.ts.map +1 -1
  90. package/node_modules/@buddi/gateway/dist/agents/catalogue-package.js +6 -0
  91. package/node_modules/@buddi/gateway/dist/agents/catalogue-package.js.map +1 -1
  92. package/node_modules/@buddi/gateway/dist/agents/delegation.d.ts +10 -0
  93. package/node_modules/@buddi/gateway/dist/agents/delegation.d.ts.map +1 -1
  94. package/node_modules/@buddi/gateway/dist/agents/delegation.js +1 -0
  95. package/node_modules/@buddi/gateway/dist/agents/delegation.js.map +1 -1
  96. package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.d.ts +7 -1
  97. package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.d.ts.map +1 -1
  98. package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.js +15 -6
  99. package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.js.map +1 -1
  100. package/node_modules/@buddi/gateway/dist/bootstrap.d.ts.map +1 -1
  101. package/node_modules/@buddi/gateway/dist/bootstrap.js +8 -0
  102. package/node_modules/@buddi/gateway/dist/bootstrap.js.map +1 -1
  103. package/node_modules/@buddi/gateway/dist/browser-host.d.ts +30 -1
  104. package/node_modules/@buddi/gateway/dist/browser-host.d.ts.map +1 -1
  105. package/node_modules/@buddi/gateway/dist/browser-host.js +56 -1
  106. package/node_modules/@buddi/gateway/dist/browser-host.js.map +1 -1
  107. package/node_modules/@buddi/gateway/dist/chat/session.d.ts.map +1 -1
  108. package/node_modules/@buddi/gateway/dist/chat/session.js +9 -5
  109. package/node_modules/@buddi/gateway/dist/chat/session.js.map +1 -1
  110. package/node_modules/@buddi/gateway/dist/index.d.ts +2 -1
  111. package/node_modules/@buddi/gateway/dist/index.d.ts.map +1 -1
  112. package/node_modules/@buddi/gateway/dist/index.js +2 -1
  113. package/node_modules/@buddi/gateway/dist/index.js.map +1 -1
  114. package/node_modules/@buddi/gateway/dist/missions/ask-cap.d.ts +26 -0
  115. package/node_modules/@buddi/gateway/dist/missions/ask-cap.d.ts.map +1 -0
  116. package/node_modules/@buddi/gateway/dist/missions/ask-cap.js +83 -0
  117. package/node_modules/@buddi/gateway/dist/missions/ask-cap.js.map +1 -0
  118. package/node_modules/@buddi/gateway/dist/missions/execute.d.ts +45 -1
  119. package/node_modules/@buddi/gateway/dist/missions/execute.d.ts.map +1 -1
  120. package/node_modules/@buddi/gateway/dist/missions/execute.js +156 -10
  121. package/node_modules/@buddi/gateway/dist/missions/execute.js.map +1 -1
  122. package/node_modules/@buddi/gateway/dist/missions/parked.d.ts +139 -0
  123. package/node_modules/@buddi/gateway/dist/missions/parked.d.ts.map +1 -0
  124. package/node_modules/@buddi/gateway/dist/missions/parked.js +255 -0
  125. package/node_modules/@buddi/gateway/dist/missions/parked.js.map +1 -0
  126. package/node_modules/@buddi/gateway/dist/serve.d.ts +7 -0
  127. package/node_modules/@buddi/gateway/dist/serve.d.ts.map +1 -1
  128. package/node_modules/@buddi/gateway/dist/serve.js +49 -9
  129. package/node_modules/@buddi/gateway/dist/serve.js.map +1 -1
  130. package/node_modules/@buddi/gateway/dist/surfaces/browser-cards.d.ts +18 -0
  131. package/node_modules/@buddi/gateway/dist/surfaces/browser-cards.d.ts.map +1 -0
  132. package/node_modules/@buddi/gateway/dist/surfaces/browser-cards.js +42 -0
  133. package/node_modules/@buddi/gateway/dist/surfaces/browser-cards.js.map +1 -0
  134. package/node_modules/@buddi/gateway/dist/surfaces/browser-continuation.js +1 -1
  135. package/node_modules/@buddi/gateway/dist/surfaces/browser-continuation.js.map +1 -1
  136. package/node_modules/@buddi/gateway/dist/surfaces/owner-request.d.ts +6 -0
  137. package/node_modules/@buddi/gateway/dist/surfaces/owner-request.d.ts.map +1 -1
  138. package/node_modules/@buddi/gateway/dist/surfaces/owner-request.js +7 -1
  139. package/node_modules/@buddi/gateway/dist/surfaces/owner-request.js.map +1 -1
  140. package/node_modules/@buddi/gateway/dist/system-context.d.ts +7 -0
  141. package/node_modules/@buddi/gateway/dist/system-context.d.ts.map +1 -1
  142. package/node_modules/@buddi/gateway/dist/system-context.js +14 -7
  143. package/node_modules/@buddi/gateway/dist/system-context.js.map +1 -1
  144. package/node_modules/@buddi/gateway/dist/telegram/browser-view.d.ts +17 -17
  145. package/node_modules/@buddi/gateway/dist/telegram/browser-view.d.ts.map +1 -1
  146. package/node_modules/@buddi/gateway/dist/telegram/browser-view.js +33 -37
  147. package/node_modules/@buddi/gateway/dist/telegram/browser-view.js.map +1 -1
  148. package/node_modules/@buddi/gateway/dist/telegram/channel.d.ts.map +1 -1
  149. package/node_modules/@buddi/gateway/dist/telegram/channel.js +17 -1
  150. package/node_modules/@buddi/gateway/dist/telegram/channel.js.map +1 -1
  151. package/node_modules/@buddi/gateway/dist/telegram/main.d.ts.map +1 -1
  152. package/node_modules/@buddi/gateway/dist/telegram/main.js +11 -3
  153. package/node_modules/@buddi/gateway/dist/telegram/main.js.map +1 -1
  154. package/node_modules/@buddi/gateway/dist/telegram/surface.d.ts.map +1 -1
  155. package/node_modules/@buddi/gateway/dist/telegram/surface.js +10 -0
  156. package/node_modules/@buddi/gateway/dist/telegram/surface.js.map +1 -1
  157. package/node_modules/@buddi/gateway/dist/tips/facts.d.ts +8 -0
  158. package/node_modules/@buddi/gateway/dist/tips/facts.d.ts.map +1 -1
  159. package/node_modules/@buddi/gateway/dist/tips/facts.js +8 -2
  160. package/node_modules/@buddi/gateway/dist/tips/facts.js.map +1 -1
  161. package/node_modules/@buddi/gateway/dist/tips/rules.d.ts +2 -0
  162. package/node_modules/@buddi/gateway/dist/tips/rules.d.ts.map +1 -1
  163. package/node_modules/@buddi/gateway/dist/tips/rules.js +15 -0
  164. package/node_modules/@buddi/gateway/dist/tips/rules.js.map +1 -1
  165. package/node_modules/@buddi/gateway/dist/web/access/arrival.d.ts +24 -0
  166. package/node_modules/@buddi/gateway/dist/web/access/arrival.d.ts.map +1 -0
  167. package/node_modules/@buddi/gateway/dist/web/access/arrival.js +18 -0
  168. package/node_modules/@buddi/gateway/dist/web/access/arrival.js.map +1 -0
  169. package/node_modules/@buddi/gateway/dist/web/access/cloudflare-api.d.ts +124 -0
  170. package/node_modules/@buddi/gateway/dist/web/access/cloudflare-api.d.ts.map +1 -0
  171. package/node_modules/@buddi/gateway/dist/web/access/cloudflare-api.js +206 -0
  172. package/node_modules/@buddi/gateway/dist/web/access/cloudflare-api.js.map +1 -0
  173. package/node_modules/@buddi/gateway/dist/web/access/cloudflare-setup.d.ts +163 -0
  174. package/node_modules/@buddi/gateway/dist/web/access/cloudflare-setup.d.ts.map +1 -0
  175. package/node_modules/@buddi/gateway/dist/web/access/cloudflare-setup.js +438 -0
  176. package/node_modules/@buddi/gateway/dist/web/access/cloudflare-setup.js.map +1 -0
  177. package/node_modules/@buddi/gateway/dist/web/access/cloudflare-token.d.ts +31 -0
  178. package/node_modules/@buddi/gateway/dist/web/access/cloudflare-token.d.ts.map +1 -0
  179. package/node_modules/@buddi/gateway/dist/web/access/cloudflare-token.js +74 -0
  180. package/node_modules/@buddi/gateway/dist/web/access/cloudflare-token.js.map +1 -0
  181. package/node_modules/@buddi/gateway/dist/web/access/cloudflare.d.ts +145 -0
  182. package/node_modules/@buddi/gateway/dist/web/access/cloudflare.d.ts.map +1 -0
  183. package/node_modules/@buddi/gateway/dist/web/access/cloudflare.js +474 -0
  184. package/node_modules/@buddi/gateway/dist/web/access/cloudflare.js.map +1 -0
  185. package/node_modules/@buddi/gateway/dist/web/access/index.d.ts +9 -0
  186. package/node_modules/@buddi/gateway/dist/web/access/index.d.ts.map +1 -0
  187. package/node_modules/@buddi/gateway/dist/web/access/index.js +9 -0
  188. package/node_modules/@buddi/gateway/dist/web/access/index.js.map +1 -0
  189. package/node_modules/@buddi/gateway/dist/web/access/ingress.d.ts +30 -0
  190. package/node_modules/@buddi/gateway/dist/web/access/ingress.d.ts.map +1 -0
  191. package/node_modules/@buddi/gateway/dist/web/access/ingress.js +76 -0
  192. package/node_modules/@buddi/gateway/dist/web/access/ingress.js.map +1 -0
  193. package/node_modules/@buddi/gateway/dist/web/access/provider.d.ts +173 -0
  194. package/node_modules/@buddi/gateway/dist/web/access/provider.d.ts.map +1 -0
  195. package/node_modules/@buddi/gateway/dist/web/access/provider.js +11 -0
  196. package/node_modules/@buddi/gateway/dist/web/access/provider.js.map +1 -0
  197. package/node_modules/@buddi/gateway/dist/web/access/registry.d.ts +33 -0
  198. package/node_modules/@buddi/gateway/dist/web/access/registry.d.ts.map +1 -0
  199. package/node_modules/@buddi/gateway/dist/web/access/registry.js +32 -0
  200. package/node_modules/@buddi/gateway/dist/web/access/registry.js.map +1 -0
  201. package/node_modules/@buddi/gateway/dist/web/{tailscale.d.ts → access/tailscale.d.ts} +27 -0
  202. package/node_modules/@buddi/gateway/dist/web/access/tailscale.d.ts.map +1 -0
  203. package/node_modules/@buddi/gateway/dist/web/{tailscale.js → access/tailscale.js} +118 -3
  204. package/node_modules/@buddi/gateway/dist/web/access/tailscale.js.map +1 -0
  205. package/node_modules/@buddi/gateway/dist/web/agents.d.ts +2 -0
  206. package/node_modules/@buddi/gateway/dist/web/agents.d.ts.map +1 -1
  207. package/node_modules/@buddi/gateway/dist/web/agents.js +19 -1
  208. package/node_modules/@buddi/gateway/dist/web/agents.js.map +1 -1
  209. package/node_modules/@buddi/gateway/dist/web/api-routes.d.ts +4 -3
  210. package/node_modules/@buddi/gateway/dist/web/api-routes.d.ts.map +1 -1
  211. package/node_modules/@buddi/gateway/dist/web/api-routes.js +106 -19
  212. package/node_modules/@buddi/gateway/dist/web/api-routes.js.map +1 -1
  213. package/node_modules/@buddi/gateway/dist/web/attention.d.ts.map +1 -1
  214. package/node_modules/@buddi/gateway/dist/web/attention.js +11 -3
  215. package/node_modules/@buddi/gateway/dist/web/attention.js.map +1 -1
  216. package/node_modules/@buddi/gateway/dist/web/chat.d.ts +23 -0
  217. package/node_modules/@buddi/gateway/dist/web/chat.d.ts.map +1 -1
  218. package/node_modules/@buddi/gateway/dist/web/chat.js +62 -2
  219. package/node_modules/@buddi/gateway/dist/web/chat.js.map +1 -1
  220. package/node_modules/@buddi/gateway/dist/web/client-key.d.ts +3 -0
  221. package/node_modules/@buddi/gateway/dist/web/client-key.d.ts.map +1 -1
  222. package/node_modules/@buddi/gateway/dist/web/client-key.js +8 -1
  223. package/node_modules/@buddi/gateway/dist/web/client-key.js.map +1 -1
  224. package/node_modules/@buddi/gateway/dist/web/extension.d.ts +21 -1
  225. package/node_modules/@buddi/gateway/dist/web/extension.d.ts.map +1 -1
  226. package/node_modules/@buddi/gateway/dist/web/extension.js +183 -3
  227. package/node_modules/@buddi/gateway/dist/web/extension.js.map +1 -1
  228. package/node_modules/@buddi/gateway/dist/web/http.d.ts +7 -0
  229. package/node_modules/@buddi/gateway/dist/web/http.d.ts.map +1 -1
  230. package/node_modules/@buddi/gateway/dist/web/http.js +15 -1
  231. package/node_modules/@buddi/gateway/dist/web/http.js.map +1 -1
  232. package/node_modules/@buddi/gateway/dist/web/index.d.ts +1 -1
  233. package/node_modules/@buddi/gateway/dist/web/index.d.ts.map +1 -1
  234. package/node_modules/@buddi/gateway/dist/web/index.js +1 -1
  235. package/node_modules/@buddi/gateway/dist/web/index.js.map +1 -1
  236. package/node_modules/@buddi/gateway/dist/web/onboarding.js +1 -1
  237. package/node_modules/@buddi/gateway/dist/web/onboarding.js.map +1 -1
  238. package/node_modules/@buddi/gateway/dist/web/remote-hand.d.ts.map +1 -1
  239. package/node_modules/@buddi/gateway/dist/web/remote-hand.js +45 -2
  240. package/node_modules/@buddi/gateway/dist/web/remote-hand.js.map +1 -1
  241. package/node_modules/@buddi/gateway/dist/web/secrets.d.ts +26 -1
  242. package/node_modules/@buddi/gateway/dist/web/secrets.d.ts.map +1 -1
  243. package/node_modules/@buddi/gateway/dist/web/secrets.js +66 -3
  244. package/node_modules/@buddi/gateway/dist/web/secrets.js.map +1 -1
  245. package/node_modules/@buddi/gateway/dist/web/server.d.ts +38 -2
  246. package/node_modules/@buddi/gateway/dist/web/server.d.ts.map +1 -1
  247. package/node_modules/@buddi/gateway/dist/web/server.js +634 -147
  248. package/node_modules/@buddi/gateway/dist/web/server.js.map +1 -1
  249. package/node_modules/@buddi/gateway/dist/web/sessions.d.ts +24 -14
  250. package/node_modules/@buddi/gateway/dist/web/sessions.d.ts.map +1 -1
  251. package/node_modules/@buddi/gateway/dist/web/sessions.js +42 -14
  252. package/node_modules/@buddi/gateway/dist/web/sessions.js.map +1 -1
  253. package/node_modules/@buddi/gateway/dist/web/signed-out.d.ts +10 -0
  254. package/node_modules/@buddi/gateway/dist/web/signed-out.d.ts.map +1 -1
  255. package/node_modules/@buddi/gateway/dist/web/signed-out.js +47 -0
  256. package/node_modules/@buddi/gateway/dist/web/signed-out.js.map +1 -1
  257. package/node_modules/@buddi/gateway/dist/web/version.d.ts +2 -0
  258. package/node_modules/@buddi/gateway/dist/web/version.d.ts.map +1 -1
  259. package/node_modules/@buddi/gateway/dist/web/version.js +5 -1
  260. package/node_modules/@buddi/gateway/dist/web/version.js.map +1 -1
  261. package/node_modules/@buddi/install/dist/.tsbuildinfo +1 -1
  262. package/node_modules/@buddi/install/dist/app-layout.d.ts +127 -0
  263. package/node_modules/@buddi/install/dist/app-layout.d.ts.map +1 -0
  264. package/node_modules/@buddi/install/dist/app-layout.js +323 -0
  265. package/node_modules/@buddi/install/dist/app-layout.js.map +1 -0
  266. package/node_modules/@buddi/install/dist/index.d.ts +1 -0
  267. package/node_modules/@buddi/install/dist/index.d.ts.map +1 -1
  268. package/node_modules/@buddi/install/dist/index.js +1 -0
  269. package/node_modules/@buddi/install/dist/index.js.map +1 -1
  270. package/node_modules/@buddi/install/dist/launcher.d.ts.map +1 -1
  271. package/node_modules/@buddi/install/dist/launcher.js +18 -4
  272. package/node_modules/@buddi/install/dist/launcher.js.map +1 -1
  273. package/node_modules/@buddi/install/dist/provenance.d.ts +34 -0
  274. package/node_modules/@buddi/install/dist/provenance.d.ts.map +1 -0
  275. package/node_modules/@buddi/install/dist/provenance.js +200 -0
  276. package/node_modules/@buddi/install/dist/provenance.js.map +1 -0
  277. package/node_modules/@buddi/install/dist/supervisor.d.ts.map +1 -1
  278. package/node_modules/@buddi/install/dist/supervisor.js +9 -4
  279. package/node_modules/@buddi/install/dist/supervisor.js.map +1 -1
  280. package/node_modules/@buddi/install/dist/upgrade.d.ts +77 -3
  281. package/node_modules/@buddi/install/dist/upgrade.d.ts.map +1 -1
  282. package/node_modules/@buddi/install/dist/upgrade.js +325 -43
  283. package/node_modules/@buddi/install/dist/upgrade.js.map +1 -1
  284. package/node_modules/@buddi/runtime/dist/.tsbuildinfo +1 -1
  285. package/node_modules/@buddi/runtime/dist/delegate.d.ts +8 -0
  286. package/node_modules/@buddi/runtime/dist/delegate.d.ts.map +1 -1
  287. package/node_modules/@buddi/runtime/dist/delegate.js +19 -1
  288. package/node_modules/@buddi/runtime/dist/delegate.js.map +1 -1
  289. package/node_modules/@buddi/runtime/dist/loop.d.ts +2 -0
  290. package/node_modules/@buddi/runtime/dist/loop.d.ts.map +1 -1
  291. package/node_modules/@buddi/runtime/dist/loop.js +18 -4
  292. package/node_modules/@buddi/runtime/dist/loop.js.map +1 -1
  293. package/node_modules/@buddi/tool-artifacts/dist/.tsbuildinfo +1 -1
  294. package/node_modules/@buddi/tool-browser/dist/.tsbuildinfo +1 -1
  295. package/node_modules/@buddi/tool-browser/dist/availability.d.ts +2 -2
  296. package/node_modules/@buddi/tool-browser/dist/availability.d.ts.map +1 -1
  297. package/node_modules/@buddi/tool-browser/dist/availability.js +2 -2
  298. package/node_modules/@buddi/tool-browser/dist/availability.js.map +1 -1
  299. package/node_modules/@buddi/tool-browser/dist/controller.d.ts +82 -58
  300. package/node_modules/@buddi/tool-browser/dist/controller.d.ts.map +1 -1
  301. package/node_modules/@buddi/tool-browser/dist/controller.js +823 -217
  302. package/node_modules/@buddi/tool-browser/dist/controller.js.map +1 -1
  303. package/node_modules/@buddi/tool-browser/dist/driver.d.ts +3 -1
  304. package/node_modules/@buddi/tool-browser/dist/driver.d.ts.map +1 -1
  305. package/node_modules/@buddi/tool-browser/dist/driver.js +82 -1
  306. package/node_modules/@buddi/tool-browser/dist/driver.js.map +1 -1
  307. package/node_modules/@buddi/tool-browser/dist/extension.d.ts +70 -5
  308. package/node_modules/@buddi/tool-browser/dist/extension.d.ts.map +1 -1
  309. package/node_modules/@buddi/tool-browser/dist/extension.js +94 -9
  310. package/node_modules/@buddi/tool-browser/dist/extension.js.map +1 -1
  311. package/node_modules/@buddi/tool-browser/dist/index.d.ts +17 -7
  312. package/node_modules/@buddi/tool-browser/dist/index.d.ts.map +1 -1
  313. package/node_modules/@buddi/tool-browser/dist/index.js +35 -15
  314. package/node_modules/@buddi/tool-browser/dist/index.js.map +1 -1
  315. package/node_modules/@buddi/tool-browser/dist/logins.d.ts +150 -0
  316. package/node_modules/@buddi/tool-browser/dist/logins.d.ts.map +1 -0
  317. package/node_modules/@buddi/tool-browser/dist/logins.js +476 -0
  318. package/node_modules/@buddi/tool-browser/dist/logins.js.map +1 -0
  319. package/node_modules/@buddi/tool-browser/dist/manager.d.ts +39 -21
  320. package/node_modules/@buddi/tool-browser/dist/manager.d.ts.map +1 -1
  321. package/node_modules/@buddi/tool-browser/dist/manager.js +229 -136
  322. package/node_modules/@buddi/tool-browser/dist/manager.js.map +1 -1
  323. package/node_modules/@buddi/tool-browser/dist/routes.d.ts +151 -0
  324. package/node_modules/@buddi/tool-browser/dist/routes.d.ts.map +1 -0
  325. package/node_modules/@buddi/tool-browser/dist/routes.js +331 -0
  326. package/node_modules/@buddi/tool-browser/dist/routes.js.map +1 -0
  327. package/node_modules/@buddi/tool-browser/dist/secrets.d.ts +3 -1
  328. package/node_modules/@buddi/tool-browser/dist/secrets.d.ts.map +1 -1
  329. package/node_modules/@buddi/tool-browser/dist/secrets.js +10 -6
  330. package/node_modules/@buddi/tool-browser/dist/secrets.js.map +1 -1
  331. package/node_modules/@buddi/tool-browser/dist/service.d.ts +182 -115
  332. package/node_modules/@buddi/tool-browser/dist/service.d.ts.map +1 -1
  333. package/node_modules/@buddi/tool-browser/dist/service.js +491 -388
  334. package/node_modules/@buddi/tool-browser/dist/service.js.map +1 -1
  335. package/node_modules/@buddi/tool-browser/dist/settings.d.ts +88 -0
  336. package/node_modules/@buddi/tool-browser/dist/settings.d.ts.map +1 -0
  337. package/node_modules/@buddi/tool-browser/dist/settings.js +86 -0
  338. package/node_modules/@buddi/tool-browser/dist/settings.js.map +1 -0
  339. package/node_modules/@buddi/tool-browser/dist/telemetry.d.ts +203 -0
  340. package/node_modules/@buddi/tool-browser/dist/telemetry.d.ts.map +1 -0
  341. package/node_modules/@buddi/tool-browser/dist/telemetry.js +142 -0
  342. package/node_modules/@buddi/tool-browser/dist/telemetry.js.map +1 -0
  343. package/node_modules/@buddi/tool-browser/dist/types.d.ts +102 -3
  344. package/node_modules/@buddi/tool-browser/dist/types.d.ts.map +1 -1
  345. package/node_modules/@buddi/tool-browser/dist/types.js +27 -9
  346. package/node_modules/@buddi/tool-browser/dist/types.js.map +1 -1
  347. package/node_modules/@buddi/tool-email/dist/.tsbuildinfo +1 -1
  348. package/node_modules/@buddi/tool-host/dist/.tsbuildinfo +1 -1
  349. package/node_modules/@buddi/tool-mcp/dist/.tsbuildinfo +1 -1
  350. package/node_modules/@buddi/tool-memory/dist/.tsbuildinfo +1 -1
  351. package/node_modules/@buddi/tool-web/dist/.tsbuildinfo +1 -1
  352. package/node_modules/hono/dist/cjs/hono-base.js +2 -0
  353. package/node_modules/hono/dist/cjs/middleware/language/language.js +1 -1
  354. package/node_modules/hono/dist/cjs/middleware/mount/index.js +71 -0
  355. package/node_modules/hono/dist/cjs/request.js +4 -4
  356. package/node_modules/hono/dist/hono-base.js +2 -0
  357. package/node_modules/hono/dist/middleware/mount/index.js +70 -0
  358. package/node_modules/hono/dist/request.js +4 -4
  359. package/node_modules/hono/dist/types/hono-base.d.ts +2 -0
  360. package/node_modules/hono/dist/types/jsx/base.d.ts +1 -1
  361. package/node_modules/hono/dist/types/middleware/mount/index.d.ts +46 -0
  362. package/node_modules/hono/dist/types/request.d.ts +4 -4
  363. package/node_modules/hono/package.json +9 -1
  364. package/node_modules/imapflow/CHANGELOG.md +15 -0
  365. package/node_modules/imapflow/dist/cjs/package-info.d.ts +1 -1
  366. package/node_modules/imapflow/dist/cjs/package-info.js +1 -1
  367. package/node_modules/imapflow/dist/cjs/search-compiler.js +21 -31
  368. package/node_modules/imapflow/dist/esm/package-info.d.ts +1 -1
  369. package/node_modules/imapflow/dist/esm/package-info.js +1 -1
  370. package/node_modules/imapflow/dist/esm/search-compiler.js +21 -31
  371. package/node_modules/imapflow/package.json +2 -2
  372. package/node_modules/pino/CONTRIBUTING.md +1 -5
  373. package/node_modules/pino/LICENSE +1 -1
  374. package/node_modules/pino/README.md +1 -1
  375. package/node_modules/pino/SECURITY.md +2 -18
  376. package/node_modules/pino/browser.js +8 -68
  377. package/node_modules/pino/docs/api.md +4 -75
  378. package/node_modules/pino/docs/asynchronous.md +3 -18
  379. package/node_modules/pino/docs/browser.md +0 -63
  380. package/node_modules/pino/docs/child-loggers.md +1 -22
  381. package/node_modules/pino/docs/ecosystem.md +0 -1
  382. package/node_modules/pino/docs/help.md +3 -11
  383. package/node_modules/pino/docs/lts.md +0 -29
  384. package/node_modules/pino/docs/pretty.md +0 -3
  385. package/node_modules/pino/docs/redaction.md +8 -3
  386. package/node_modules/pino/docs/transports.md +0 -71
  387. package/node_modules/pino/docs/web.md +14 -11
  388. package/node_modules/pino/eslint.config.js +7 -15
  389. package/node_modules/pino/lib/caller.js +0 -10
  390. package/node_modules/pino/lib/meta.js +1 -1
  391. package/node_modules/pino/lib/multistream.js +7 -15
  392. package/node_modules/pino/lib/redaction.js +3 -8
  393. package/node_modules/pino/lib/symbols.js +1 -3
  394. package/node_modules/pino/lib/tools.js +2 -2
  395. package/node_modules/pino/lib/transport.js +1 -14
  396. package/node_modules/pino/lib/worker.js +1 -4
  397. package/node_modules/pino/package.json +22 -14
  398. package/node_modules/pino/pino.d.ts +736 -709
  399. package/node_modules/pino/pino.js +2 -27
  400. package/node_modules/pino/test/basic.test.js +0 -66
  401. package/node_modules/pino/test/escaping.test.js +0 -17
  402. package/node_modules/pino/test/fixtures/ts/transpile.cjs +3 -3
  403. package/node_modules/pino/test/helper.js +2 -6
  404. package/node_modules/pino/test/multistream.test.js +0 -64
  405. package/node_modules/pino/test/redact.test.js +0 -30
  406. package/node_modules/pino/test/transport/core.test.js +0 -85
  407. package/node_modules/pino/test/transport/sync-false.test.js +0 -12
  408. package/node_modules/pino/test/transport/uses-pino-config.test.js +4 -4
  409. package/node_modules/pino/test/types/pino-import.test-d.cts +30 -0
  410. package/node_modules/pino/test/types/pino-multistream.test-d.ts +28 -0
  411. package/node_modules/pino/test/types/pino-top-export.test-d.ts +34 -0
  412. package/node_modules/pino/test/types/{pino-transport.tst.ts → pino-transport.test-d.ts} +70 -85
  413. package/node_modules/pino/test/types/pino-type-only.test-d.ts +75 -0
  414. package/node_modules/pino/test/types/{pino.tst.ts → pino.test-d.ts} +137 -135
  415. package/node_modules/pino/test/types/pino.ts +7 -14
  416. package/node_modules/pino/tsconfig.json +6 -6
  417. package/node_modules/real-require/README.md +6 -6
  418. package/node_modules/real-require/package.json +21 -10
  419. package/node_modules/real-require/src/index.js +2 -2
  420. package/node_modules/thread-stream/node_modules/real-require/LICENSE.md +21 -0
  421. package/node_modules/thread-stream/node_modules/real-require/README.md +51 -0
  422. package/node_modules/thread-stream/node_modules/real-require/package.json +38 -0
  423. package/node_modules/thread-stream/node_modules/real-require/src/index.js +14 -0
  424. package/package.json +2 -2
  425. package/packages/cli/dist/.tsbuildinfo +1 -1
  426. package/packages/cli/dist/access-cmd.d.ts +10 -0
  427. package/packages/cli/dist/access-cmd.d.ts.map +1 -0
  428. package/packages/cli/dist/access-cmd.js +180 -0
  429. package/packages/cli/dist/access-cmd.js.map +1 -0
  430. package/packages/cli/dist/args.d.ts +10 -0
  431. package/packages/cli/dist/args.d.ts.map +1 -1
  432. package/packages/cli/dist/args.js +34 -1
  433. package/packages/cli/dist/args.js.map +1 -1
  434. package/packages/cli/dist/commands.d.ts.map +1 -1
  435. package/packages/cli/dist/commands.js +39 -2
  436. package/packages/cli/dist/commands.js.map +1 -1
  437. package/packages/cli/dist/doctor-probes.d.ts.map +1 -1
  438. package/packages/cli/dist/doctor-probes.js +54 -29
  439. package/packages/cli/dist/doctor-probes.js.map +1 -1
  440. package/packages/cli/dist/doctor.d.ts +36 -12
  441. package/packages/cli/dist/doctor.d.ts.map +1 -1
  442. package/packages/cli/dist/doctor.js +32 -9
  443. package/packages/cli/dist/doctor.js.map +1 -1
  444. package/packages/cli/dist/main.d.ts +2 -0
  445. package/packages/cli/dist/main.d.ts.map +1 -1
  446. package/packages/cli/dist/main.js +20 -2
  447. package/packages/cli/dist/main.js.map +1 -1
  448. package/packages/core/dist/.tsbuildinfo +1 -1
  449. package/packages/core/dist/agents/catalog.d.ts +2 -0
  450. package/packages/core/dist/agents/catalog.d.ts.map +1 -1
  451. package/packages/core/dist/agents/catalog.js +1 -0
  452. package/packages/core/dist/agents/catalog.js.map +1 -1
  453. package/packages/core/dist/agents/edit.d.ts +2 -0
  454. package/packages/core/dist/agents/edit.d.ts.map +1 -1
  455. package/packages/core/dist/agents/edit.js +3 -1
  456. package/packages/core/dist/agents/edit.js.map +1 -1
  457. package/packages/core/dist/agents/frontmatter.d.ts +11 -0
  458. package/packages/core/dist/agents/frontmatter.d.ts.map +1 -1
  459. package/packages/core/dist/agents/frontmatter.js +7 -0
  460. package/packages/core/dist/agents/frontmatter.js.map +1 -1
  461. package/packages/core/dist/index.d.ts +1 -0
  462. package/packages/core/dist/index.d.ts.map +1 -1
  463. package/packages/core/dist/index.js +1 -0
  464. package/packages/core/dist/index.js.map +1 -1
  465. package/packages/core/dist/plugin/index.d.ts +3 -0
  466. package/packages/core/dist/plugin/index.d.ts.map +1 -1
  467. package/packages/core/dist/plugin/index.js +3 -0
  468. package/packages/core/dist/plugin/index.js.map +1 -1
  469. package/packages/core/dist/plugin/version.d.ts +1 -1
  470. package/packages/core/dist/plugin/version.js +1 -1
  471. package/packages/core/dist/questions/store.d.ts +12 -0
  472. package/packages/core/dist/questions/store.d.ts.map +1 -1
  473. package/packages/core/dist/questions/store.js +11 -1
  474. package/packages/core/dist/questions/store.js.map +1 -1
  475. package/packages/core/dist/questions/types.d.ts +8 -0
  476. package/packages/core/dist/questions/types.d.ts.map +1 -1
  477. package/packages/core/dist/questions/types.js +15 -0
  478. package/packages/core/dist/questions/types.js.map +1 -1
  479. package/packages/core/dist/queue/jobs.d.ts +8 -0
  480. package/packages/core/dist/queue/jobs.d.ts.map +1 -1
  481. package/packages/core/dist/queue/jobs.js +9 -3
  482. package/packages/core/dist/queue/jobs.js.map +1 -1
  483. package/packages/core/dist/queue/worker.d.ts +2 -0
  484. package/packages/core/dist/queue/worker.d.ts.map +1 -1
  485. package/packages/core/dist/queue/worker.js +2 -1
  486. package/packages/core/dist/queue/worker.js.map +1 -1
  487. package/packages/core/dist/registry.d.ts +7 -1
  488. package/packages/core/dist/registry.d.ts.map +1 -1
  489. package/packages/core/dist/registry.js +73 -11
  490. package/packages/core/dist/registry.js.map +1 -1
  491. package/packages/core/dist/routes.d.ts +153 -0
  492. package/packages/core/dist/routes.d.ts.map +1 -0
  493. package/packages/core/dist/routes.js +47 -0
  494. package/packages/core/dist/routes.js.map +1 -0
  495. package/packages/core/dist/scheduler/missions.d.ts +5 -3
  496. package/packages/core/dist/scheduler/missions.d.ts.map +1 -1
  497. package/packages/core/dist/scheduler/missions.js +9 -7
  498. package/packages/core/dist/scheduler/missions.js.map +1 -1
  499. package/packages/core/dist/scheduler/types.d.ts +7 -0
  500. package/packages/core/dist/scheduler/types.d.ts.map +1 -1
  501. package/packages/core/dist/scheduler/types.js +1 -0
  502. package/packages/core/dist/scheduler/types.js.map +1 -1
  503. package/packages/core/dist/tools.d.ts +59 -2
  504. package/packages/core/dist/tools.d.ts.map +1 -1
  505. package/packages/core/dist/tools.js.map +1 -1
  506. package/packages/core/migrations/075_access_providers.sql +43 -0
  507. package/packages/core/migrations/076_mission_browser.sql +7 -0
  508. package/packages/gateway/dist/.tsbuildinfo +1 -1
  509. package/packages/gateway/dist/agents/canvas.d.ts +12 -12
  510. package/packages/gateway/dist/agents/catalogue-package.d.ts +38 -20
  511. package/packages/gateway/dist/agents/catalogue-package.d.ts.map +1 -1
  512. package/packages/gateway/dist/agents/catalogue-package.js +6 -0
  513. package/packages/gateway/dist/agents/catalogue-package.js.map +1 -1
  514. package/packages/gateway/dist/agents/delegation.d.ts +10 -0
  515. package/packages/gateway/dist/agents/delegation.d.ts.map +1 -1
  516. package/packages/gateway/dist/agents/delegation.js +1 -0
  517. package/packages/gateway/dist/agents/delegation.js.map +1 -1
  518. package/packages/gateway/dist/agents/platform-catalogue.d.ts +7 -1
  519. package/packages/gateway/dist/agents/platform-catalogue.d.ts.map +1 -1
  520. package/packages/gateway/dist/agents/platform-catalogue.js +15 -6
  521. package/packages/gateway/dist/agents/platform-catalogue.js.map +1 -1
  522. package/packages/gateway/dist/bootstrap.d.ts.map +1 -1
  523. package/packages/gateway/dist/bootstrap.js +8 -0
  524. package/packages/gateway/dist/bootstrap.js.map +1 -1
  525. package/packages/gateway/dist/browser-host.d.ts +30 -1
  526. package/packages/gateway/dist/browser-host.d.ts.map +1 -1
  527. package/packages/gateway/dist/browser-host.js +56 -1
  528. package/packages/gateway/dist/browser-host.js.map +1 -1
  529. package/packages/gateway/dist/chat/session.d.ts.map +1 -1
  530. package/packages/gateway/dist/chat/session.js +9 -5
  531. package/packages/gateway/dist/chat/session.js.map +1 -1
  532. package/packages/gateway/dist/index.d.ts +2 -1
  533. package/packages/gateway/dist/index.d.ts.map +1 -1
  534. package/packages/gateway/dist/index.js +2 -1
  535. package/packages/gateway/dist/index.js.map +1 -1
  536. package/packages/gateway/dist/missions/ask-cap.d.ts +26 -0
  537. package/packages/gateway/dist/missions/ask-cap.d.ts.map +1 -0
  538. package/packages/gateway/dist/missions/ask-cap.js +83 -0
  539. package/packages/gateway/dist/missions/ask-cap.js.map +1 -0
  540. package/packages/gateway/dist/missions/execute.d.ts +45 -1
  541. package/packages/gateway/dist/missions/execute.d.ts.map +1 -1
  542. package/packages/gateway/dist/missions/execute.js +156 -10
  543. package/packages/gateway/dist/missions/execute.js.map +1 -1
  544. package/packages/gateway/dist/missions/parked.d.ts +139 -0
  545. package/packages/gateway/dist/missions/parked.d.ts.map +1 -0
  546. package/packages/gateway/dist/missions/parked.js +255 -0
  547. package/packages/gateway/dist/missions/parked.js.map +1 -0
  548. package/packages/gateway/dist/serve.d.ts +7 -0
  549. package/packages/gateway/dist/serve.d.ts.map +1 -1
  550. package/packages/gateway/dist/serve.js +49 -9
  551. package/packages/gateway/dist/serve.js.map +1 -1
  552. package/packages/gateway/dist/surfaces/browser-cards.d.ts +18 -0
  553. package/packages/gateway/dist/surfaces/browser-cards.d.ts.map +1 -0
  554. package/packages/gateway/dist/surfaces/browser-cards.js +42 -0
  555. package/packages/gateway/dist/surfaces/browser-cards.js.map +1 -0
  556. package/packages/gateway/dist/surfaces/browser-continuation.js +1 -1
  557. package/packages/gateway/dist/surfaces/browser-continuation.js.map +1 -1
  558. package/packages/gateway/dist/surfaces/owner-request.d.ts +6 -0
  559. package/packages/gateway/dist/surfaces/owner-request.d.ts.map +1 -1
  560. package/packages/gateway/dist/surfaces/owner-request.js +7 -1
  561. package/packages/gateway/dist/surfaces/owner-request.js.map +1 -1
  562. package/packages/gateway/dist/system-context.d.ts +7 -0
  563. package/packages/gateway/dist/system-context.d.ts.map +1 -1
  564. package/packages/gateway/dist/system-context.js +14 -7
  565. package/packages/gateway/dist/system-context.js.map +1 -1
  566. package/packages/gateway/dist/telegram/browser-view.d.ts +17 -17
  567. package/packages/gateway/dist/telegram/browser-view.d.ts.map +1 -1
  568. package/packages/gateway/dist/telegram/browser-view.js +33 -37
  569. package/packages/gateway/dist/telegram/browser-view.js.map +1 -1
  570. package/packages/gateway/dist/telegram/channel.d.ts.map +1 -1
  571. package/packages/gateway/dist/telegram/channel.js +17 -1
  572. package/packages/gateway/dist/telegram/channel.js.map +1 -1
  573. package/packages/gateway/dist/telegram/main.d.ts.map +1 -1
  574. package/packages/gateway/dist/telegram/main.js +11 -3
  575. package/packages/gateway/dist/telegram/main.js.map +1 -1
  576. package/packages/gateway/dist/telegram/surface.d.ts.map +1 -1
  577. package/packages/gateway/dist/telegram/surface.js +10 -0
  578. package/packages/gateway/dist/telegram/surface.js.map +1 -1
  579. package/packages/gateway/dist/tips/facts.d.ts +8 -0
  580. package/packages/gateway/dist/tips/facts.d.ts.map +1 -1
  581. package/packages/gateway/dist/tips/facts.js +8 -2
  582. package/packages/gateway/dist/tips/facts.js.map +1 -1
  583. package/packages/gateway/dist/tips/rules.d.ts +2 -0
  584. package/packages/gateway/dist/tips/rules.d.ts.map +1 -1
  585. package/packages/gateway/dist/tips/rules.js +15 -0
  586. package/packages/gateway/dist/tips/rules.js.map +1 -1
  587. package/packages/gateway/dist/web/access/arrival.d.ts +24 -0
  588. package/packages/gateway/dist/web/access/arrival.d.ts.map +1 -0
  589. package/packages/gateway/dist/web/access/arrival.js +18 -0
  590. package/packages/gateway/dist/web/access/arrival.js.map +1 -0
  591. package/packages/gateway/dist/web/access/cloudflare-api.d.ts +124 -0
  592. package/packages/gateway/dist/web/access/cloudflare-api.d.ts.map +1 -0
  593. package/packages/gateway/dist/web/access/cloudflare-api.js +206 -0
  594. package/packages/gateway/dist/web/access/cloudflare-api.js.map +1 -0
  595. package/packages/gateway/dist/web/access/cloudflare-setup.d.ts +163 -0
  596. package/packages/gateway/dist/web/access/cloudflare-setup.d.ts.map +1 -0
  597. package/packages/gateway/dist/web/access/cloudflare-setup.js +438 -0
  598. package/packages/gateway/dist/web/access/cloudflare-setup.js.map +1 -0
  599. package/packages/gateway/dist/web/access/cloudflare-token.d.ts +31 -0
  600. package/packages/gateway/dist/web/access/cloudflare-token.d.ts.map +1 -0
  601. package/packages/gateway/dist/web/access/cloudflare-token.js +74 -0
  602. package/packages/gateway/dist/web/access/cloudflare-token.js.map +1 -0
  603. package/packages/gateway/dist/web/access/cloudflare.d.ts +145 -0
  604. package/packages/gateway/dist/web/access/cloudflare.d.ts.map +1 -0
  605. package/packages/gateway/dist/web/access/cloudflare.js +474 -0
  606. package/packages/gateway/dist/web/access/cloudflare.js.map +1 -0
  607. package/packages/gateway/dist/web/access/index.d.ts +9 -0
  608. package/packages/gateway/dist/web/access/index.d.ts.map +1 -0
  609. package/packages/gateway/dist/web/access/index.js +9 -0
  610. package/packages/gateway/dist/web/access/index.js.map +1 -0
  611. package/packages/gateway/dist/web/access/ingress.d.ts +30 -0
  612. package/packages/gateway/dist/web/access/ingress.d.ts.map +1 -0
  613. package/packages/gateway/dist/web/access/ingress.js +76 -0
  614. package/packages/gateway/dist/web/access/ingress.js.map +1 -0
  615. package/packages/gateway/dist/web/access/provider.d.ts +173 -0
  616. package/packages/gateway/dist/web/access/provider.d.ts.map +1 -0
  617. package/packages/gateway/dist/web/access/provider.js +11 -0
  618. package/packages/gateway/dist/web/access/provider.js.map +1 -0
  619. package/packages/gateway/dist/web/access/registry.d.ts +33 -0
  620. package/packages/gateway/dist/web/access/registry.d.ts.map +1 -0
  621. package/packages/gateway/dist/web/access/registry.js +32 -0
  622. package/packages/gateway/dist/web/access/registry.js.map +1 -0
  623. package/packages/gateway/dist/web/{tailscale.d.ts → access/tailscale.d.ts} +27 -0
  624. package/packages/gateway/dist/web/access/tailscale.d.ts.map +1 -0
  625. package/packages/gateway/dist/web/{tailscale.js → access/tailscale.js} +118 -3
  626. package/packages/gateway/dist/web/access/tailscale.js.map +1 -0
  627. package/packages/gateway/dist/web/agents.d.ts +2 -0
  628. package/packages/gateway/dist/web/agents.d.ts.map +1 -1
  629. package/packages/gateway/dist/web/agents.js +19 -1
  630. package/packages/gateway/dist/web/agents.js.map +1 -1
  631. package/packages/gateway/dist/web/api-routes.d.ts +4 -3
  632. package/packages/gateway/dist/web/api-routes.d.ts.map +1 -1
  633. package/packages/gateway/dist/web/api-routes.js +106 -19
  634. package/packages/gateway/dist/web/api-routes.js.map +1 -1
  635. package/packages/gateway/dist/web/attention.d.ts.map +1 -1
  636. package/packages/gateway/dist/web/attention.js +11 -3
  637. package/packages/gateway/dist/web/attention.js.map +1 -1
  638. package/packages/gateway/dist/web/chat.d.ts +23 -0
  639. package/packages/gateway/dist/web/chat.d.ts.map +1 -1
  640. package/packages/gateway/dist/web/chat.js +62 -2
  641. package/packages/gateway/dist/web/chat.js.map +1 -1
  642. package/packages/gateway/dist/web/client-key.d.ts +3 -0
  643. package/packages/gateway/dist/web/client-key.d.ts.map +1 -1
  644. package/packages/gateway/dist/web/client-key.js +8 -1
  645. package/packages/gateway/dist/web/client-key.js.map +1 -1
  646. package/packages/gateway/dist/web/extension.d.ts +21 -1
  647. package/packages/gateway/dist/web/extension.d.ts.map +1 -1
  648. package/packages/gateway/dist/web/extension.js +183 -3
  649. package/packages/gateway/dist/web/extension.js.map +1 -1
  650. package/packages/gateway/dist/web/http.d.ts +7 -0
  651. package/packages/gateway/dist/web/http.d.ts.map +1 -1
  652. package/packages/gateway/dist/web/http.js +15 -1
  653. package/packages/gateway/dist/web/http.js.map +1 -1
  654. package/packages/gateway/dist/web/index.d.ts +1 -1
  655. package/packages/gateway/dist/web/index.d.ts.map +1 -1
  656. package/packages/gateway/dist/web/index.js +1 -1
  657. package/packages/gateway/dist/web/index.js.map +1 -1
  658. package/packages/gateway/dist/web/onboarding.js +1 -1
  659. package/packages/gateway/dist/web/onboarding.js.map +1 -1
  660. package/packages/gateway/dist/web/remote-hand.d.ts.map +1 -1
  661. package/packages/gateway/dist/web/remote-hand.js +45 -2
  662. package/packages/gateway/dist/web/remote-hand.js.map +1 -1
  663. package/packages/gateway/dist/web/secrets.d.ts +26 -1
  664. package/packages/gateway/dist/web/secrets.d.ts.map +1 -1
  665. package/packages/gateway/dist/web/secrets.js +66 -3
  666. package/packages/gateway/dist/web/secrets.js.map +1 -1
  667. package/packages/gateway/dist/web/server.d.ts +38 -2
  668. package/packages/gateway/dist/web/server.d.ts.map +1 -1
  669. package/packages/gateway/dist/web/server.js +634 -147
  670. package/packages/gateway/dist/web/server.js.map +1 -1
  671. package/packages/gateway/dist/web/sessions.d.ts +24 -14
  672. package/packages/gateway/dist/web/sessions.d.ts.map +1 -1
  673. package/packages/gateway/dist/web/sessions.js +42 -14
  674. package/packages/gateway/dist/web/sessions.js.map +1 -1
  675. package/packages/gateway/dist/web/signed-out.d.ts +10 -0
  676. package/packages/gateway/dist/web/signed-out.d.ts.map +1 -1
  677. package/packages/gateway/dist/web/signed-out.js +47 -0
  678. package/packages/gateway/dist/web/signed-out.js.map +1 -1
  679. package/packages/gateway/dist/web/version.d.ts +2 -0
  680. package/packages/gateway/dist/web/version.d.ts.map +1 -1
  681. package/packages/gateway/dist/web/version.js +5 -1
  682. package/packages/gateway/dist/web/version.js.map +1 -1
  683. package/packages/install/dist/.tsbuildinfo +1 -1
  684. package/packages/install/dist/app-layout.d.ts +127 -0
  685. package/packages/install/dist/app-layout.d.ts.map +1 -0
  686. package/packages/install/dist/app-layout.js +323 -0
  687. package/packages/install/dist/app-layout.js.map +1 -0
  688. package/packages/install/dist/index.d.ts +1 -0
  689. package/packages/install/dist/index.d.ts.map +1 -1
  690. package/packages/install/dist/index.js +1 -0
  691. package/packages/install/dist/index.js.map +1 -1
  692. package/packages/install/dist/launcher.d.ts.map +1 -1
  693. package/packages/install/dist/launcher.js +18 -4
  694. package/packages/install/dist/launcher.js.map +1 -1
  695. package/packages/install/dist/provenance.d.ts +34 -0
  696. package/packages/install/dist/provenance.d.ts.map +1 -0
  697. package/packages/install/dist/provenance.js +200 -0
  698. package/packages/install/dist/provenance.js.map +1 -0
  699. package/packages/install/dist/supervisor.d.ts.map +1 -1
  700. package/packages/install/dist/supervisor.js +9 -4
  701. package/packages/install/dist/supervisor.js.map +1 -1
  702. package/packages/install/dist/upgrade.d.ts +77 -3
  703. package/packages/install/dist/upgrade.d.ts.map +1 -1
  704. package/packages/install/dist/upgrade.js +325 -43
  705. package/packages/install/dist/upgrade.js.map +1 -1
  706. package/packages/runtime/dist/.tsbuildinfo +1 -1
  707. package/packages/runtime/dist/delegate.d.ts +8 -0
  708. package/packages/runtime/dist/delegate.d.ts.map +1 -1
  709. package/packages/runtime/dist/delegate.js +19 -1
  710. package/packages/runtime/dist/delegate.js.map +1 -1
  711. package/packages/runtime/dist/loop.d.ts +2 -0
  712. package/packages/runtime/dist/loop.d.ts.map +1 -1
  713. package/packages/runtime/dist/loop.js +18 -4
  714. package/packages/runtime/dist/loop.js.map +1 -1
  715. package/packages/tools/artifacts/dist/.tsbuildinfo +1 -1
  716. package/packages/tools/browser/dist/.tsbuildinfo +1 -1
  717. package/packages/tools/browser/dist/availability.d.ts +2 -2
  718. package/packages/tools/browser/dist/availability.d.ts.map +1 -1
  719. package/packages/tools/browser/dist/availability.js +2 -2
  720. package/packages/tools/browser/dist/availability.js.map +1 -1
  721. package/packages/tools/browser/dist/controller.d.ts +82 -58
  722. package/packages/tools/browser/dist/controller.d.ts.map +1 -1
  723. package/packages/tools/browser/dist/controller.js +823 -217
  724. package/packages/tools/browser/dist/controller.js.map +1 -1
  725. package/packages/tools/browser/dist/driver.d.ts +3 -1
  726. package/packages/tools/browser/dist/driver.d.ts.map +1 -1
  727. package/packages/tools/browser/dist/driver.js +82 -1
  728. package/packages/tools/browser/dist/driver.js.map +1 -1
  729. package/packages/tools/browser/dist/extension.d.ts +70 -5
  730. package/packages/tools/browser/dist/extension.d.ts.map +1 -1
  731. package/packages/tools/browser/dist/extension.js +94 -9
  732. package/packages/tools/browser/dist/extension.js.map +1 -1
  733. package/packages/tools/browser/dist/index.d.ts +17 -7
  734. package/packages/tools/browser/dist/index.d.ts.map +1 -1
  735. package/packages/tools/browser/dist/index.js +35 -15
  736. package/packages/tools/browser/dist/index.js.map +1 -1
  737. package/packages/tools/browser/dist/logins.d.ts +150 -0
  738. package/packages/tools/browser/dist/logins.d.ts.map +1 -0
  739. package/packages/tools/browser/dist/logins.js +476 -0
  740. package/packages/tools/browser/dist/logins.js.map +1 -0
  741. package/packages/tools/browser/dist/manager.d.ts +39 -21
  742. package/packages/tools/browser/dist/manager.d.ts.map +1 -1
  743. package/packages/tools/browser/dist/manager.js +229 -136
  744. package/packages/tools/browser/dist/manager.js.map +1 -1
  745. package/packages/tools/browser/dist/routes.d.ts +151 -0
  746. package/packages/tools/browser/dist/routes.d.ts.map +1 -0
  747. package/packages/tools/browser/dist/routes.js +331 -0
  748. package/packages/tools/browser/dist/routes.js.map +1 -0
  749. package/packages/tools/browser/dist/secrets.d.ts +3 -1
  750. package/packages/tools/browser/dist/secrets.d.ts.map +1 -1
  751. package/packages/tools/browser/dist/secrets.js +10 -6
  752. package/packages/tools/browser/dist/secrets.js.map +1 -1
  753. package/packages/tools/browser/dist/service.d.ts +182 -115
  754. package/packages/tools/browser/dist/service.d.ts.map +1 -1
  755. package/packages/tools/browser/dist/service.js +491 -388
  756. package/packages/tools/browser/dist/service.js.map +1 -1
  757. package/packages/tools/browser/dist/settings.d.ts +88 -0
  758. package/packages/tools/browser/dist/settings.d.ts.map +1 -0
  759. package/packages/tools/browser/dist/settings.js +86 -0
  760. package/packages/tools/browser/dist/settings.js.map +1 -0
  761. package/packages/tools/browser/dist/telemetry.d.ts +203 -0
  762. package/packages/tools/browser/dist/telemetry.d.ts.map +1 -0
  763. package/packages/tools/browser/dist/telemetry.js +142 -0
  764. package/packages/tools/browser/dist/telemetry.js.map +1 -0
  765. package/packages/tools/browser/dist/types.d.ts +102 -3
  766. package/packages/tools/browser/dist/types.d.ts.map +1 -1
  767. package/packages/tools/browser/dist/types.js +27 -9
  768. package/packages/tools/browser/dist/types.js.map +1 -1
  769. package/packages/tools/email/dist/.tsbuildinfo +1 -1
  770. package/packages/tools/host/dist/.tsbuildinfo +1 -1
  771. package/packages/tools/mcp/dist/.tsbuildinfo +1 -1
  772. package/packages/tools/memory/dist/.tsbuildinfo +1 -1
  773. package/packages/tools/web/dist/.tsbuildinfo +1 -1
  774. package/packages/web/dist/assets/index-DYfeUW-0.css +1 -0
  775. package/packages/web/dist/assets/index-vpc904_b.js +146 -0
  776. package/packages/web/dist/assets/{lottie_light-CKJ88Yuk.js → lottie_light-BFAMYgLA.js} +1 -1
  777. package/packages/web/dist/build.json +1 -1
  778. package/packages/web/dist/index.html +2 -2
  779. package/packages/web/dist/precache.json +4 -4
  780. package/node_modules/@buddi/gateway/dist/web/apps.d.ts +0 -18
  781. package/node_modules/@buddi/gateway/dist/web/apps.d.ts.map +0 -1
  782. package/node_modules/@buddi/gateway/dist/web/apps.js +0 -84
  783. package/node_modules/@buddi/gateway/dist/web/apps.js.map +0 -1
  784. package/node_modules/@buddi/gateway/dist/web/tailscale.d.ts.map +0 -1
  785. package/node_modules/@buddi/gateway/dist/web/tailscale.js.map +0 -1
  786. package/node_modules/@buddi/tool-browser/dist/computer.d.ts +0 -153
  787. package/node_modules/@buddi/tool-browser/dist/computer.d.ts.map +0 -1
  788. package/node_modules/@buddi/tool-browser/dist/computer.js +0 -392
  789. package/node_modules/@buddi/tool-browser/dist/computer.js.map +0 -1
  790. package/node_modules/@buddi/tool-browser/dist/native/buddi-computer +0 -0
  791. package/node_modules/pino/test/browser-bindings.test.js +0 -114
  792. package/node_modules/pino/test/browser-redaction.test.js +0 -264
  793. package/node_modules/pino/test/browser-set-bindings.test.js +0 -99
  794. package/node_modules/pino/test/caller.test.js +0 -20
  795. package/node_modules/pino/test/fixtures/caller-loop.js +0 -6
  796. package/node_modules/pino/test/smoke.js +0 -59
  797. package/node_modules/pino/test/types/pino-import.tst.cts +0 -30
  798. package/node_modules/pino/test/types/pino-import.tst.js +0 -73
  799. package/node_modules/pino/test/types/pino-multistream.tst.ts +0 -49
  800. package/node_modules/pino/test/types/pino-top-export.tst.ts +0 -32
  801. package/node_modules/pino/test/types/pino-type-only.tst.ts +0 -77
  802. package/node_modules/pino/test/types/tsconfig.json +0 -10
  803. package/packages/gateway/dist/web/apps.d.ts +0 -18
  804. package/packages/gateway/dist/web/apps.d.ts.map +0 -1
  805. package/packages/gateway/dist/web/apps.js +0 -84
  806. package/packages/gateway/dist/web/apps.js.map +0 -1
  807. package/packages/gateway/dist/web/tailscale.d.ts.map +0 -1
  808. package/packages/gateway/dist/web/tailscale.js.map +0 -1
  809. package/packages/tools/browser/dist/computer.d.ts +0 -153
  810. package/packages/tools/browser/dist/computer.d.ts.map +0 -1
  811. package/packages/tools/browser/dist/computer.js +0 -392
  812. package/packages/tools/browser/dist/computer.js.map +0 -1
  813. package/packages/tools/browser/dist/native/buddi-computer +0 -0
  814. package/packages/web/dist/assets/index-CN1AXMI1.css +0 -1
  815. package/packages/web/dist/assets/index-CQRE9LJX.js +0 -145
@@ -1,8 +1,14 @@
1
1
  // src/protocol.ts
2
2
  var COMMAND_NAMES = ["navigate", "observe", "click", "fill", "select", "press", "scroll", "tab", "close", "fieldInfo", "secretFill"];
3
- var HAND_COMMANDS = ["screencast.start", "screencast.stop", "input"];
3
+ var HAND_COMMANDS = ["screencast.start", "screencast.stop", "input", "hold", "unhold"];
4
4
  var PreconditionError = class extends Error {
5
5
  };
6
+ var OpenedError = class extends Error {
7
+ constructor(message, page) {
8
+ super(message);
9
+ this.page = page;
10
+ }
11
+ };
6
12
  var CancelledError = class extends Error {
7
13
  };
8
14
  var Cancellation = class {
@@ -148,6 +154,18 @@ var Protocol = class {
148
154
  case "command":
149
155
  await this.#command(message);
150
156
  return;
157
+ case "loginAck": {
158
+ const id = message["id"];
159
+ if (!this.#authenticated || typeof id !== "string" || id.length > 64) return;
160
+ const ask = message["ask"];
161
+ if (ask === "save" || ask === "update" || ask === "none") {
162
+ this.#options.onLoginAck?.(id, { ask });
163
+ return;
164
+ }
165
+ const reason = typeof message["reason"] === "string" ? message["reason"].slice(0, 300) : "";
166
+ this.#options.onLoginAck?.(id, message["saved"] === true ? { saved: true } : { saved: false, reason: reason || "buddi could not keep that login." });
167
+ return;
168
+ }
151
169
  default:
152
170
  return;
153
171
  }
@@ -212,7 +230,14 @@ var Protocol = class {
212
230
  if (error instanceof CancelledError) {
213
231
  this.#options.send({ type: "result", id, ok: false, error: "cancelled", precondition: !cancel.dispatched });
214
232
  } else {
215
- this.#options.send({ type: "result", id, ok: false, error: sentence(error), precondition: error instanceof PreconditionError });
233
+ this.#options.send({
234
+ type: "result",
235
+ id,
236
+ ok: false,
237
+ error: sentence(error),
238
+ precondition: error instanceof PreconditionError,
239
+ ...error instanceof OpenedError ? { page: error.page } : {}
240
+ });
216
241
  }
217
242
  } finally {
218
243
  this.#running.delete(id);
@@ -229,11 +254,477 @@ function sentence(error) {
229
254
  return /[.!?]$/.test(trimmed) ? trimmed : `${trimmed}.`;
230
255
  }
231
256
 
257
+ // src/bar.ts
258
+ var OWNER_WAIT_MS = 3e4;
259
+ var BAR_AFTER_MS = 3e3;
260
+ var BAR_POLL_MS = 500;
261
+ async function waitForOwner(probes, limits = {}) {
262
+ const waitMs = limits.waitMs ?? OWNER_WAIT_MS;
263
+ const barAfter = limits.barAfterMs ?? BAR_AFTER_MS;
264
+ const poll = limits.pollMs ?? BAR_POLL_MS;
265
+ const start = probes.now();
266
+ let shown = false;
267
+ const maxPolls = Math.ceil(waitMs / poll);
268
+ try {
269
+ for (let polls = 0; ; polls++) {
270
+ if (!await probes.watched()) return "left";
271
+ const elapsed = Math.max(probes.now() - start, polls * poll);
272
+ if (!shown && elapsed >= barAfter) {
273
+ shown = true;
274
+ await probes.show().catch(() => void 0);
275
+ }
276
+ if (shown) {
277
+ const choice = await probes.choice().catch(() => void 0);
278
+ if (choice) return choice;
279
+ }
280
+ if (elapsed >= waitMs || polls >= maxPolls) return "timeout";
281
+ await probes.wait(poll);
282
+ }
283
+ } finally {
284
+ if (shown) await probes.hide().catch(() => void 0);
285
+ }
286
+ }
287
+ function showBar(agent) {
288
+ const holder = globalThis;
289
+ holder["__buddiBar"] = { choice: void 0 };
290
+ const doc = globalThis.document;
291
+ if (!doc || doc.getElementById("buddi-working-bar")) return;
292
+ const host = doc.createElement("div");
293
+ host.id = "buddi-working-bar";
294
+ host.setAttribute("style", "position:fixed;top:0;left:0;right:0;z-index:2147483647;all:initial;");
295
+ const root = host.attachShadow({ mode: "closed" });
296
+ const bar = doc.createElement("div");
297
+ bar.setAttribute("role", "status");
298
+ bar.setAttribute("style", "position:fixed;top:0;left:0;right:0;display:flex;gap:12px;align-items:center;justify-content:flex-end;padding:6px 16px;font:13px/1.4 system-ui,-apple-system,sans-serif;background:#1f2a44;color:#fff;box-shadow:0 1px 4px rgba(0,0,0,.25);");
299
+ const label = doc.createElement("span");
300
+ label.textContent = `${agent || "buddi"} is working here`;
301
+ label.setAttribute("style", "margin-right:auto;");
302
+ const button = (text2, choice, primary) => {
303
+ const b = doc.createElement("button");
304
+ b.type = "button";
305
+ b.textContent = text2;
306
+ b.setAttribute("style", `font:inherit;cursor:pointer;border-radius:6px;padding:3px 10px;border:1px solid #fff;${primary ? "background:#fff;color:#1f2a44;" : "background:transparent;color:#fff;"}`);
307
+ b.addEventListener("click", () => {
308
+ holder["__buddiBar"] = { choice };
309
+ });
310
+ return b;
311
+ };
312
+ bar.append(label, button("Take over", "takeover", false), button("Let it continue", "continue", true));
313
+ root.append(bar);
314
+ (doc.documentElement ?? doc.body).append(host);
315
+ }
316
+ function readBar() {
317
+ const holder = globalThis;
318
+ const choice = holder["__buddiBar"]?.choice;
319
+ if (choice) holder["__buddiBar"] = { choice: void 0 };
320
+ return choice;
321
+ }
322
+ function hideBar() {
323
+ const doc = globalThis.document;
324
+ doc?.getElementById("buddi-working-bar")?.remove();
325
+ const holder = globalThis;
326
+ delete holder["__buddiBar"];
327
+ }
328
+ var GIVE_BACK_MESSAGE = "buddi-give-back";
329
+ function showHeldBar(session) {
330
+ const doc = globalThis.document;
331
+ if (!doc || doc.getElementById("buddi-held-bar")) return;
332
+ const host = doc.createElement("div");
333
+ host.id = "buddi-held-bar";
334
+ host.setAttribute("style", "position:fixed;top:0;left:0;right:0;z-index:2147483647;all:initial;");
335
+ const root = host.attachShadow({ mode: "closed" });
336
+ const bar = doc.createElement("div");
337
+ bar.setAttribute("role", "status");
338
+ bar.setAttribute("style", "position:fixed;top:0;left:0;right:0;display:flex;gap:12px;align-items:center;justify-content:flex-end;padding:6px 16px;font:13px/1.4 system-ui,-apple-system,sans-serif;background:#1f2a44;color:#fff;box-shadow:0 1px 4px rgba(0,0,0,.25);");
339
+ const label = doc.createElement("span");
340
+ label.textContent = "buddi is waiting";
341
+ label.setAttribute("style", "margin-right:auto;");
342
+ const give = doc.createElement("button");
343
+ give.type = "button";
344
+ give.textContent = "Give it back";
345
+ give.setAttribute("style", "font:inherit;cursor:pointer;border-radius:6px;padding:3px 10px;border:1px solid #fff;background:#fff;color:#1f2a44;");
346
+ give.addEventListener("click", () => {
347
+ const runtime = globalThis.chrome?.runtime;
348
+ void runtime?.sendMessage({ type: "buddi-give-back", session })?.catch?.(() => void 0);
349
+ host.remove();
350
+ });
351
+ bar.append(label, give);
352
+ root.append(bar);
353
+ (doc.documentElement ?? doc.body).append(host);
354
+ const asking = [];
355
+ const restore = () => {
356
+ for (const button of asking.splice(0)) button.remove();
357
+ label.textContent = "buddi is waiting";
358
+ give.style.display = "";
359
+ };
360
+ globalThis["__buddiHeldAsk"] = (question, choices) => {
361
+ restore();
362
+ label.textContent = question;
363
+ give.style.display = "none";
364
+ for (const choice of choices) {
365
+ const b = doc.createElement("button");
366
+ b.type = "button";
367
+ b.textContent = choice.label;
368
+ b.setAttribute("style", `font:inherit;cursor:pointer;border-radius:6px;padding:3px 10px;border:1px solid #fff;${choice.primary ? "background:#fff;color:#1f2a44;" : "background:transparent;color:#fff;"}`);
369
+ b.addEventListener("click", () => {
370
+ restore();
371
+ choice.pick();
372
+ });
373
+ asking.push(b);
374
+ bar.insertBefore(b, give);
375
+ }
376
+ return restore;
377
+ };
378
+ }
379
+ function hideHeldBar() {
380
+ const doc = globalThis.document;
381
+ doc?.getElementById("buddi-held-bar")?.remove();
382
+ delete globalThis["__buddiHeldAsk"];
383
+ }
384
+ var LOGIN_MESSAGE = "buddi-login";
385
+ var LOGIN_PROMPT_MS = 2 * 6e4;
386
+ function watchHeldLogins(session, facts) {
387
+ const holder = globalThis;
388
+ const known = { never: [...facts?.never ?? []], saved: [...facts?.saved ?? []] };
389
+ const existing = holder["__buddiHeldLogins"];
390
+ if (existing) {
391
+ existing.session = session;
392
+ existing.facts = known;
393
+ return;
394
+ }
395
+ const doc = globalThis.document;
396
+ if (!doc) return;
397
+ const state = { session, facts: known, last: "", lastAt: 0, typedAt: 0, cached: void 0, timer: void 0, drop: void 0 };
398
+ holder["__buddiHeldLogins"] = state;
399
+ const runtime = () => globalThis.chrome?.runtime;
400
+ const call = async (message) => {
401
+ try {
402
+ return await runtime()?.sendMessage(message);
403
+ } catch {
404
+ return void 0;
405
+ }
406
+ };
407
+ const site = () => (globalThis.location?.hostname ?? "").toLowerCase().replace(/^www\./, "");
408
+ const listed = (where) => state.facts.never.some((entry) => {
409
+ const bare = entry.toLowerCase().replace(/^www\./, "");
410
+ return where === bare || where.endsWith(`.${bare}`);
411
+ });
412
+ const bar = () => {
413
+ const question = holder["__buddiHeldAsk"];
414
+ return typeof question === "function" ? question : void 0;
415
+ };
416
+ const prompt = (where, update) => {
417
+ const question = bar();
418
+ if (!question) return;
419
+ if (state.drop) clearTimeout(state.drop);
420
+ let answered = false;
421
+ const save = () => {
422
+ if (answered) return;
423
+ answered = true;
424
+ const asking = bar();
425
+ asking?.(update ? "Updating\u2026" : "Saving\u2026", []);
426
+ void call({ type: "buddi-login", session: state.session, decision: "save" }).then((reply) => {
427
+ const answer = reply;
428
+ const now = bar();
429
+ if (!now) return;
430
+ if (answer?.saved === true) {
431
+ const restore2 = now(update ? `Updated the login for ${where}` : `Saved the login for ${where}`, []);
432
+ if (state.drop) clearTimeout(state.drop);
433
+ state.drop = setTimeout(restore2, 2e3);
434
+ return;
435
+ }
436
+ const reason = typeof answer?.reason === "string" && answer.reason !== "" ? answer.reason : "buddi did not answer. Try again.";
437
+ now(reason, [
438
+ { label: "Try again", primary: true, pick: () => {
439
+ answered = false;
440
+ save();
441
+ } },
442
+ { label: "Not now", pick: () => {
443
+ void call({ type: "buddi-login", session: state.session, decision: "later" });
444
+ } }
445
+ ]);
446
+ });
447
+ };
448
+ const restore = question(update ? `Update the login for ${where}?` : `Save this login for ${where}?`, [
449
+ { label: update ? "Update" : "Save", primary: true, pick: save },
450
+ { label: "Not now", pick: () => {
451
+ answered = true;
452
+ void call({ type: "buddi-login", session: state.session, decision: "later" });
453
+ } },
454
+ { label: "Never for this site", pick: () => {
455
+ answered = true;
456
+ state.facts.never.push(where);
457
+ void call({ type: "buddi-login", session: state.session, decision: "never" });
458
+ } }
459
+ ]);
460
+ state.drop = setTimeout(() => {
461
+ if (!answered) restore();
462
+ }, 2 * 6e4);
463
+ };
464
+ const ask = (found) => {
465
+ const where = site();
466
+ if (where === "" || listed(where) || !bar()) return;
467
+ const update = state.facts.saved.some((login) => login.site === where && login.username === found.username);
468
+ void call({ type: "buddi-login-seen", session: state.session, username: found.username, password: found.password, update }).then((reply) => {
469
+ const asked = reply;
470
+ if (holder["__buddiHeldLogins"] !== state || !asked || typeof asked !== "object") return;
471
+ prompt(where, asked.update === true);
472
+ });
473
+ };
474
+ void call({ type: "buddi-login-pending", session: state.session }).then((reply) => {
475
+ const waiting = reply;
476
+ if (holder["__buddiHeldLogins"] !== state || !waiting || typeof waiting.site !== "string") return;
477
+ prompt(waiting.site, waiting.update === true);
478
+ });
479
+ const NOT_SUBMIT = /\b(show|hide|reveal|toggle|eye|forgot|reset|cancel|back|close|sign ?up|register|create)\b/i;
480
+ const USER = /user|email|login|account|ident|phone|mail/i;
481
+ const passwords = (root) => Array.from(root.querySelectorAll('input[type="password" i]'));
482
+ const usernameFor = (password) => {
483
+ const scope = password.form ?? doc;
484
+ const inputs = Array.from(scope.querySelectorAll("input")).filter((input) => ["text", "email", "tel", ""].includes((input.getAttribute("type") ?? "").toLowerCase()) && input.value.trim() !== "");
485
+ const marked = inputs.find((input) => (input.getAttribute("autocomplete") ?? "").toLowerCase().includes("username") || (input.getAttribute("type") ?? "").toLowerCase() === "email");
486
+ if (marked) return marked.value.trim();
487
+ const before = inputs.filter((input) => (input.compareDocumentPosition(password) & 4) !== 0);
488
+ const pick = before[before.length - 1] ?? inputs.find((input) => USER.test(`${input.name} ${input.id} ${input.getAttribute("autocomplete") ?? ""}`));
489
+ return pick ? pick.value.trim() : "";
490
+ };
491
+ const read = (scope) => {
492
+ const field = passwords(scope ?? doc).find((input) => input.value !== "");
493
+ return field ? { username: usernameFor(field), password: field.value } : void 0;
494
+ };
495
+ const send2 = (found) => {
496
+ if (holder["__buddiHeldLogins"] !== state) return;
497
+ if (!found || found.password === "") return;
498
+ const key = `${found.username}\0${found.password}`;
499
+ const now = Date.now();
500
+ if (key === state.last && now - state.lastAt < 5e3) return;
501
+ state.last = key;
502
+ state.lastAt = now;
503
+ state.cached = void 0;
504
+ ask(found);
505
+ };
506
+ doc.addEventListener("submit", (event) => {
507
+ send2(read(event.target) ?? state.cached);
508
+ }, true);
509
+ doc.addEventListener("keydown", (event) => {
510
+ if (event.key !== "Enter") return;
511
+ const target = event.target;
512
+ if (!target || target.tagName !== "INPUT") return;
513
+ send2(read(target.form ?? doc));
514
+ }, true);
515
+ doc.addEventListener("click", (event) => {
516
+ const target = event.target;
517
+ const button = target?.closest?.('button, input[type="submit" i], input[type="image" i], input[type="button" i], [role="button"]');
518
+ if (!button) return;
519
+ const words = `${button.textContent ?? ""} ${button.getAttribute("aria-label") ?? ""} ${button.getAttribute("value") ?? ""} ${button.getAttribute("title") ?? ""}`;
520
+ if (NOT_SUBMIT.test(words)) return;
521
+ send2(read(button.form ?? doc));
522
+ }, true);
523
+ doc.addEventListener("input", (event) => {
524
+ const target = event.target;
525
+ if ((target?.getAttribute?.("type") ?? "").toLowerCase() !== "password") return;
526
+ state.typedAt = Date.now();
527
+ state.cached = read(target.form ?? doc);
528
+ }, true);
529
+ const Observer = globalThis.PerformanceObserver;
530
+ if (typeof Observer === "function") {
531
+ try {
532
+ new Observer((list) => {
533
+ if (!state.cached || Date.now() - state.typedAt > 1e4) return;
534
+ const fetched = list.getEntries().some((entry) => ["fetch", "xmlhttprequest"].includes(entry.initiatorType));
535
+ if (!fetched) return;
536
+ if (state.timer) clearTimeout(state.timer);
537
+ state.timer = setTimeout(() => {
538
+ const still = passwords(doc).some((input) => input.isConnected && input.value !== "" && input.getClientRects().length > 0);
539
+ if (!still) send2(state.cached);
540
+ }, 1500);
541
+ }).observe({ type: "resource", buffered: false });
542
+ } catch {
543
+ }
544
+ }
545
+ }
546
+ var LOGIN_SEEN_MESSAGE = "buddi-login-seen";
547
+ var LOGIN_PENDING_MESSAGE = "buddi-login-pending";
548
+ function heldLoginRequest(message, sender, heldTab) {
549
+ const request = message;
550
+ if (!request || typeof request.session !== "string" || request.session === "") return void 0;
551
+ if (heldTab === void 0 || sender?.tab?.id !== heldTab) return void 0;
552
+ const session = request.session;
553
+ const url = sender.url ?? "";
554
+ if (request.type === LOGIN_SEEN_MESSAGE) {
555
+ if (typeof request.password !== "string" || request.password === "" || request.password.length > 1024) return void 0;
556
+ const username = typeof request.username === "string" ? request.username.slice(0, 200) : "";
557
+ return { kind: "seen", session, tabId: heldTab, url, username, password: request.password, update: request.update === true };
558
+ }
559
+ if (request.type === LOGIN_PENDING_MESSAGE) return { kind: "pending", session, tabId: heldTab, url };
560
+ if (request.type === LOGIN_MESSAGE && (request.decision === "save" || request.decision === "later" || request.decision === "never")) {
561
+ return { kind: "answer", session, tabId: heldTab, decision: request.decision };
562
+ }
563
+ return void 0;
564
+ }
565
+
566
+ // src/held-logins.ts
567
+ var HELD_LOGIN_MS = 2 * 6e4;
568
+ var LOGIN_ACK_MS = 2e4;
569
+ var LOGIN_CHECK_MS = 5e3;
570
+ var NO_ANSWER = "buddi did not answer. Try again.";
571
+ var GONE = "That question is gone; add the login in Settings \u2192 Keys and secrets.";
572
+ function siteName(host) {
573
+ return host.toLowerCase().replace(/^www\./, "");
574
+ }
575
+ function siteKey(host) {
576
+ const labels = siteName(host).split(".").filter(Boolean);
577
+ if (labels.length <= 2) return labels.join(".");
578
+ const [second, top] = labels.slice(-2);
579
+ const keep = top.length === 2 && second.length <= 3 ? 3 : 2;
580
+ return labels.slice(-keep).join(".");
581
+ }
582
+ function webOrigin(url) {
583
+ try {
584
+ const parsed = new URL(url ?? "");
585
+ return parsed.protocol === "https:" || parsed.protocol === "http:" ? parsed : void 0;
586
+ } catch {
587
+ return void 0;
588
+ }
589
+ }
590
+ var HeldLogins = class {
591
+ constructor(send2, options = {}) {
592
+ this.send = send2;
593
+ this.options = options;
594
+ }
595
+ #byTab = /* @__PURE__ */ new Map();
596
+ /** Frames waiting for buddi's answer, by id. */
597
+ #waiting = /* @__PURE__ */ new Map();
598
+ #id() {
599
+ return (this.options.uuid ?? (() => crypto.randomUUID()))();
600
+ }
601
+ /** Send a frame and wait for buddi's answer to it; undefined when none comes in time or the tab's pair goes. */
602
+ #ask(tabId, frame, ms) {
603
+ const id = this.#id();
604
+ return new Promise((resolve) => {
605
+ const timer2 = setTimeout(() => {
606
+ this.#waiting.delete(id);
607
+ resolve(void 0);
608
+ }, ms);
609
+ this.#waiting.set(id, { tabId, resolve, timer: timer2 });
610
+ this.send({ ...frame, id });
611
+ });
612
+ }
613
+ /**
614
+ * A sign-in went out in a held tab: keep the pair, with the origin Chrome
615
+ * reports for the page (never the page's claim), and ask buddi whether it
616
+ * is worth a question. Replaces whatever this tab was waiting on. Resolves
617
+ * to the question to draw, or undefined: a page not on the web, or nothing
618
+ * to ask (the pair is dropped then). With no word from buddi in time, the
619
+ * tab asks as the hold's facts said (`pair.update`).
620
+ */
621
+ async capture(tabId, session, url, pair) {
622
+ const where = webOrigin(url);
623
+ if (!where || pair.password === "" || pair.password.length > 1024) return void 0;
624
+ this.clearTab(tabId);
625
+ let settle = () => {
626
+ };
627
+ const entry = {
628
+ tabId,
629
+ session,
630
+ origin: where.origin,
631
+ site: siteName(where.hostname),
632
+ username: pair.username.slice(0, 200),
633
+ password: pair.password,
634
+ update: pair.update === true,
635
+ timer: setTimeout(() => this.clearTab(tabId), this.options.holdMs ?? HELD_LOGIN_MS),
636
+ checked: new Promise((resolve) => {
637
+ settle = resolve;
638
+ })
639
+ };
640
+ this.#byTab.set(tabId, entry);
641
+ const word = await this.#ask(tabId, { type: "login", session, decision: "check", origin: entry.origin, username: entry.username, password: entry.password }, this.options.checkMs ?? LOGIN_CHECK_MS);
642
+ if (this.#byTab.get(tabId) !== entry) {
643
+ settle(false);
644
+ return void 0;
645
+ }
646
+ if (word && "ask" in word) {
647
+ if (word.ask === "none") {
648
+ this.clearTab(tabId);
649
+ settle(false);
650
+ return void 0;
651
+ }
652
+ entry.update = word.ask === "update";
653
+ }
654
+ settle(true);
655
+ return { site: entry.site, username: entry.username, update: entry.update };
656
+ }
657
+ /** The question still waiting in this tab, for a page of the same site (once buddi said it is worth asking). */
658
+ async pending(tabId, session, url) {
659
+ const entry = this.#byTab.get(tabId);
660
+ const where = webOrigin(url);
661
+ if (!entry || entry.session !== session || !where || siteKey(where.hostname) !== siteKey(entry.site)) return void 0;
662
+ if (!await entry.checked || this.#byTab.get(tabId) !== entry) return void 0;
663
+ return { site: entry.site, username: entry.username, update: entry.update };
664
+ }
665
+ /** Save: the pair goes to buddi with the original origin; the answer is what buddi says became of it. */
666
+ async save(tabId, session) {
667
+ const entry = this.#byTab.get(tabId);
668
+ if (!entry || entry.session !== session) return { saved: false, reason: GONE };
669
+ const answer = await this.#ask(tabId, { type: "login", session: entry.session, decision: "save", origin: entry.origin, username: entry.username, password: entry.password }, this.options.ackMs ?? LOGIN_ACK_MS);
670
+ if (!answer || !("saved" in answer)) return { saved: false, reason: NO_ANSWER };
671
+ if (answer.saved && this.#byTab.get(tabId) === entry) this.clearTab(tabId);
672
+ return answer;
673
+ }
674
+ /** Never for this site: the site alone goes to buddi, and the pair is dropped. */
675
+ never(tabId, session) {
676
+ const entry = this.#byTab.get(tabId);
677
+ if (!entry || entry.session !== session) return false;
678
+ this.clearTab(tabId);
679
+ this.send({ type: "login", session: entry.session, decision: "never", origin: entry.origin, username: entry.username });
680
+ return true;
681
+ }
682
+ /** Not now: nothing goes anywhere. */
683
+ dismiss(tabId, session) {
684
+ const entry = this.#byTab.get(tabId);
685
+ if (entry && entry.session === session) this.clearTab(tabId);
686
+ }
687
+ /** buddi's answer to a frame this worker sent. */
688
+ ack(id, answer) {
689
+ const waiting = this.#waiting.get(id);
690
+ if (!waiting) return;
691
+ this.#waiting.delete(id);
692
+ clearTimeout(waiting.timer);
693
+ waiting.resolve(answer);
694
+ }
695
+ clearTab(tabId) {
696
+ const entry = this.#byTab.get(tabId);
697
+ if (entry) {
698
+ this.#byTab.delete(tabId);
699
+ clearTimeout(entry.timer);
700
+ entry.password = "";
701
+ }
702
+ for (const [id, waiting] of this.#waiting) {
703
+ if (waiting.tabId !== tabId) continue;
704
+ this.#waiting.delete(id);
705
+ clearTimeout(waiting.timer);
706
+ waiting.resolve(void 0);
707
+ }
708
+ }
709
+ clearSession(session) {
710
+ for (const entry of [...this.#byTab.values()]) if (entry.session === session) this.clearTab(entry.tabId);
711
+ }
712
+ clear() {
713
+ for (const tabId of [...this.#byTab.keys()]) this.clearTab(tabId);
714
+ }
715
+ get size() {
716
+ return this.#byTab.size;
717
+ }
718
+ };
719
+
232
720
  // src/commands.ts
233
721
  var TAKEN = "The owner took this tab; observe again to continue in a new one.";
234
722
  var MOVED = "This page has changed since that observation. Observe again.";
235
- var WATCHED = "You are looking at this tab. buddi only acts in background tabs; observe again to continue in a new one.";
723
+ var WATCHED = "You are looking at this tab. buddi waited and asked in the tab; nothing was done.";
724
+ var TAKEN_IN_TAB = "The owner took over this tab from the bar in it.";
236
725
  var GROUP_TITLE = "buddi";
726
+ var NEW_WINDOW_NOTE = "Your Chrome couldn't open a tab in that window; opened a new window instead.";
727
+ var NO_WINDOW_NOTE = "Your Chrome had no ordinary window open, so the page opened in a new one, in the background.";
237
728
  var MAX_FRAMES = 11;
238
729
  var MAX_TREE = 32e3;
239
730
  var MAX_TARGETS = 240;
@@ -427,14 +918,28 @@ var BrowserCommands = class {
427
918
  #uuid;
428
919
  #contentFile;
429
920
  #onFrame;
921
+ #onEvent;
922
+ /** Sessions the owner let carry on in a tab they are looking at, by tab id. */
923
+ #inView = /* @__PURE__ */ new Map();
924
+ /** Sessions whose tab the owner holds (taken over in place), by tab id. */
925
+ #held = /* @__PURE__ */ new Map();
926
+ /** What a held tab need not ask about before offering to save a sign-in, as buddi said at the hold. */
927
+ #heldLogins = /* @__PURE__ */ new Map();
928
+ /** Sign-ins seen in held tabs, waiting for the owner's answer: one per tab, two minutes, gone on unhold or close. */
929
+ logins;
430
930
  #now;
431
931
  #wait;
432
932
  /** How many things want the debugger on this tab. A screencast is one of them, and it outlives a command. */
433
933
  #attached = /* @__PURE__ */ new Map();
434
934
  #casts = /* @__PURE__ */ new Map();
435
935
  #castsByTab = /* @__PURE__ */ new Map();
936
+ #ownerWaitMs;
436
937
  constructor(chrome2, options = {}) {
437
938
  this.#chrome = chrome2;
939
+ this.logins = new HeldLogins(options.onLogin ?? (() => void 0));
940
+ chrome2.tabs.onRemoved?.addListener((tabId) => this.logins.clearTab(tabId));
941
+ this.#onEvent = options.onEvent ?? (() => void 0);
942
+ this.#ownerWaitMs = options.ownerWaitMs;
438
943
  this.#wait = options.wait ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
439
944
  this.#onFrame = options.onFrame ?? (() => void 0);
440
945
  this.#now = options.now ?? (() => Date.now());
@@ -446,6 +951,11 @@ var BrowserCommands = class {
446
951
  const cast = this.#castsByTab.get(tabId);
447
952
  if (cast) this.#forgetCast(cast);
448
953
  });
954
+ chrome2.tabs.onUpdated?.addListener((tabId, change) => {
955
+ if (change.status !== "complete" || ![...this.#held.values()].includes(tabId)) return;
956
+ const session = [...this.#held].find(([, held]) => held === tabId)?.[0];
957
+ if (session) void this.#drawHeld(tabId, session);
958
+ });
449
959
  this.#uuid = options.uuid ?? (() => crypto.randomUUID());
450
960
  this.#contentFile = options.contentFile ?? "content.js";
451
961
  }
@@ -482,6 +992,10 @@ var BrowserCommands = class {
482
992
  }
483
993
  case "input":
484
994
  return this.#input(command, cancel);
995
+ case "hold":
996
+ return this.#hold(command, cancel);
997
+ case "unhold":
998
+ return this.#unhold(command.session);
485
999
  case "close":
486
1000
  return this.#close(command, cancel);
487
1001
  default:
@@ -499,12 +1013,96 @@ var BrowserCommands = class {
499
1013
  for (const session of [...this.#casts.keys()]) void this.#stopScreencast(session).catch(() => void 0);
500
1014
  this.#sessions.clear();
501
1015
  this.#refs.clear();
1016
+ this.#inView.clear();
1017
+ this.#held.clear();
1018
+ this.#heldLogins.clear();
1019
+ this.logins.clear();
1020
+ }
1021
+ /* ---- take-over in place ---- */
1022
+ /**
1023
+ * The owner takes the page where it is: the session's tab becomes the
1024
+ * active one, its window comes to the front, and the bar in it says buddi
1025
+ * is waiting, with Give it back. Nothing is streamed; it is their Chrome.
1026
+ */
1027
+ async #hold(command, cancel) {
1028
+ const session = await this.#session(command.session);
1029
+ const tab = await this.#ownTab(session, this.#activeKey(session));
1030
+ const tabId = tab.id;
1031
+ cancel.check();
1032
+ cancel.dispatch();
1033
+ await this.#chrome.tabs.update(tabId, { active: true });
1034
+ if (tab.windowId !== void 0) await this.#chrome.windows.update?.(tab.windowId, { focused: true });
1035
+ this.#held.set(command.session, tabId);
1036
+ const logins = heldLoginFacts(command.args.logins);
1037
+ if (logins) this.#heldLogins.set(command.session, logins);
1038
+ else this.#heldLogins.delete(command.session);
1039
+ await this.#drawHeld(tabId, command.session);
1040
+ return {};
1041
+ }
1042
+ /**
1043
+ * The waiting bar in a held tab, and the watch that offers to save a sign-in
1044
+ * the owner makes there (docs/browser.md, "Saving a sign-in"). Drawn again on
1045
+ * every page the tab loads while it is held.
1046
+ */
1047
+ async #drawHeld(tabId, session) {
1048
+ await this.#chrome.scripting.executeScript({ target: { tabId }, func: showHeldBar, args: [session] }).catch(() => void 0);
1049
+ const facts = this.#heldLogins.get(session) ?? null;
1050
+ await this.#chrome.scripting.executeScript({ target: { tabId }, func: watchHeldLogins, args: [session, facts] }).catch(() => void 0);
1051
+ }
1052
+ /** The tab a session holds, when the owner holds one: where a save-prompt answer may come from. */
1053
+ heldTab(session) {
1054
+ return this.#held.get(session);
1055
+ }
1056
+ /**
1057
+ * A sign-in message from a held tab's page (`heldLoginRequest`): a pair
1058
+ * seen, a page asking whether a question still waits for it, or the
1059
+ * owner's answer. The reply goes back to the page — a Save's is what buddi
1060
+ * said became of it. Undefined for a message this worker does not believe.
1061
+ */
1062
+ loginMessage(message, sender) {
1063
+ const session = message?.session;
1064
+ const request = heldLoginRequest(message, sender, typeof session === "string" ? this.#held.get(session) : void 0);
1065
+ if (!request) return void 0;
1066
+ if (request.kind === "seen") return this.logins.capture(request.tabId, request.session, request.url, request).then((asked) => asked ?? null);
1067
+ if (request.kind === "pending") return this.logins.pending(request.tabId, request.session, request.url).then((asked) => asked ?? null);
1068
+ if (request.decision === "save") return this.logins.save(request.tabId, request.session);
1069
+ if (request.decision === "never") return Promise.resolve({ ok: this.logins.never(request.tabId, request.session) });
1070
+ this.logins.dismiss(request.tabId, request.session);
1071
+ return Promise.resolve({ ok: true });
1072
+ }
1073
+ /**
1074
+ * Given back (from the Canvas, or the bar): the bar goes, and the agent may
1075
+ * act in that tab although the owner is looking at it — they just handed it
1076
+ * over there, so waiting for them to leave it would be asking twice.
1077
+ */
1078
+ async #unhold(session) {
1079
+ const tabId = this.#held.get(session);
1080
+ this.#held.delete(session);
1081
+ this.#heldLogins.delete(session);
1082
+ this.logins.clearSession(session);
1083
+ if (tabId === void 0) return {};
1084
+ this.#inView.set(session, tabId);
1085
+ await this.#chrome.scripting.executeScript({ target: { tabId }, func: hideHeldBar }).catch(() => void 0);
1086
+ return {};
1087
+ }
1088
+ /**
1089
+ * Give it back pressed in a held tab's bar. Refused from any other tab than
1090
+ * the one the session holds; a worker that was restarted since (and so
1091
+ * forgot what it held) passes it on, and the gateway resumes only a page
1092
+ * that is in the owner's hands. It hears it as the Canvas's Give it back.
1093
+ */
1094
+ async giveBack(session, tabId) {
1095
+ const held = this.#held.get(session);
1096
+ if (tabId === void 0 || held !== void 0 && held !== tabId) return false;
1097
+ await this.#unhold(session);
1098
+ this.#onEvent({ type: "event", name: "giveback", session });
1099
+ return true;
502
1100
  }
503
1101
  /* ---- sessions and tabs ---- */
504
1102
  async #session(session) {
505
1103
  const existing = this.#sessions.get(session);
506
1104
  if (existing) return existing;
507
- const created = { groupId: -1, tabs: /* @__PURE__ */ new Map(), active: null, generation: 0 };
1105
+ const created = { groupId: -1, ungrouped: /* @__PURE__ */ new Set(), tabs: /* @__PURE__ */ new Map(), active: null, generation: 0 };
508
1106
  this.#sessions.set(session, created);
509
1107
  return created;
510
1108
  }
@@ -528,12 +1126,17 @@ var BrowserCommands = class {
528
1126
  this.#forget(session, key);
529
1127
  throw new PreconditionError("That tab is gone. Observe again to continue in a new one.");
530
1128
  }
531
- if (session.groupId >= 0 && tab.groupId !== session.groupId) {
1129
+ if (this.#taken(session, tab)) {
532
1130
  this.#forget(session, key);
533
1131
  throw new PreconditionError(TAKEN);
534
1132
  }
535
1133
  return tab;
536
1134
  }
1135
+ /** The owner dragged this tab out of the session's group. A tab that never made it into the group cannot have been. */
1136
+ #taken(session, tab) {
1137
+ if (tab.id !== void 0 && session.ungrouped.has(tab.id)) return false;
1138
+ return session.groupId >= 0 && tab.groupId !== session.groupId;
1139
+ }
537
1140
  #activeKey(session) {
538
1141
  if (!session.active) throw new PreconditionError("This conversation has no browser tab yet. Navigate to open one.");
539
1142
  return session.active;
@@ -542,31 +1145,131 @@ var BrowserCommands = class {
542
1145
  * Reading a tab is harmless; typing into one the owner is reading is not.
543
1146
  *
544
1147
  * Unless the typing is theirs: a command marked `owner` came from the hand on
545
- * the dashboard, and refusing it would refuse the owner their own browser.
1148
+ * the dashboard. Otherwise, a tab the owner is looking at is waited on: up to
1149
+ * thirty seconds for them to leave it, with the bar in the tab after three
1150
+ * (Take over · Let it continue). Let it continue lets the agent act in view
1151
+ * for as long as that tab stays the one; Take over tells the gateway, which
1152
+ * hands the page to the owner exactly like the Canvas button.
546
1153
  */
547
- async #background(tab, owner = false) {
548
- if (owner) return;
549
- if (tab.active !== true || tab.windowId === void 0) return;
1154
+ async #background(tab, command) {
1155
+ if (command.owner) return;
1156
+ if (tab.id === void 0 || !await this.#watched(tab.id)) return;
1157
+ if (this.#inView.get(command.session) === tab.id) return;
1158
+ const tabId = tab.id;
1159
+ const outcome = await waitForOwner({
1160
+ watched: () => this.#watched(tabId),
1161
+ show: async () => {
1162
+ await this.#chrome.scripting.executeScript({ target: { tabId }, func: showBar, args: ["buddi"] });
1163
+ },
1164
+ hide: async () => {
1165
+ await this.#chrome.scripting.executeScript({ target: { tabId }, func: hideBar });
1166
+ },
1167
+ choice: async () => {
1168
+ const [frame] = await this.#chrome.scripting.executeScript({ target: { tabId }, func: readBar });
1169
+ const choice = frame?.result;
1170
+ return choice === "continue" || choice === "takeover" ? choice : void 0;
1171
+ },
1172
+ wait: (ms) => this.#wait(ms),
1173
+ now: () => this.#now()
1174
+ }, this.#ownerWaitMs !== void 0 ? { waitMs: this.#ownerWaitMs } : {});
1175
+ if (outcome === "left") return;
1176
+ if (outcome === "continue") {
1177
+ this.#inView.set(command.session, tabId);
1178
+ return;
1179
+ }
1180
+ if (outcome === "takeover") {
1181
+ this.#onEvent({ type: "event", name: "takeover", session: command.session });
1182
+ throw new PreconditionError(TAKEN_IN_TAB);
1183
+ }
1184
+ throw new PreconditionError(WATCHED);
1185
+ }
1186
+ /** Is the owner looking at this tab right now: active, in a focused window? */
1187
+ async #watched(tabId) {
1188
+ const tab = await this.#chrome.tabs.get(tabId).catch(() => void 0);
1189
+ if (!tab || tab.active !== true || tab.windowId === void 0) return false;
550
1190
  const window = await this.#chrome.windows.get(tab.windowId).catch(() => void 0);
551
- if (window?.focused) throw new PreconditionError(WATCHED);
1191
+ return window?.focused === true;
552
1192
  }
553
1193
  /** Where the tab actually is now, which a redirect may have changed. */
554
1194
  #liveUrl(tab) {
555
1195
  return checkUrl(tab.url ?? "");
556
1196
  }
1197
+ /**
1198
+ * An ordinary window to open the tab in: the group's own when it has one,
1199
+ * else the one the owner used last, else any. `null` when Chrome has none
1200
+ * (only popups or installed apps' windows), `undefined` when this Chrome
1201
+ * cannot say, in which case Chrome picks as it always did.
1202
+ */
1203
+ async #normalWindow(session) {
1204
+ const windows = this.#chrome.windows;
1205
+ if (!windows.getLastFocused && !windows.getAll) return void 0;
1206
+ const normal = (window) => window?.id !== void 0 && (window.type === void 0 || window.type === "normal");
1207
+ if (session.groupId >= 0) {
1208
+ const group = await this.#chrome.tabGroups.get(session.groupId).catch(() => void 0);
1209
+ if (group?.windowId !== void 0) {
1210
+ const found = await windows.get(group.windowId).catch(() => void 0);
1211
+ if (normal(found)) return found.id;
1212
+ }
1213
+ }
1214
+ const last2 = await windows.getLastFocused?.({ windowTypes: ["normal"] }).catch(() => void 0);
1215
+ if (normal(last2)) return last2.id;
1216
+ const all = await windows.getAll?.({ windowTypes: ["normal"] }).catch(() => void 0);
1217
+ return all?.find(normal)?.id ?? null;
1218
+ }
1219
+ /**
1220
+ * One background tab, in an ordinary window, in the session's group.
1221
+ *
1222
+ * The group is cosmetic: Chrome refuses it in a window without a tab strip,
1223
+ * and that refusal must not undo a page that has already opened. No
1224
+ * ordinary window at all, or one that would not take the tab, and the page
1225
+ * opens in a new window that does not take the focus. Nothing here
1226
+ * activates a tab or focuses a window: the owner keeps working.
1227
+ */
557
1228
  async #openTab(session, url, cancel) {
1229
+ const windowId = await this.#normalWindow(session);
558
1230
  cancel.dispatch();
559
- const tab = await this.#chrome.tabs.create({ url, active: false });
560
- if (tab.id === void 0) throw new Error("Chrome opened a tab without an id.");
561
- const groupId = await this.#chrome.tabs.group(session.groupId >= 0 ? { tabIds: [tab.id], groupId: session.groupId } : { tabIds: [tab.id] });
562
- if (session.groupId !== groupId) {
563
- session.groupId = groupId;
564
- await this.#chrome.tabGroups.update(groupId, { title: GROUP_TITLE, collapsed: false }).catch(() => void 0);
1231
+ let tab;
1232
+ let note;
1233
+ let groupable = true;
1234
+ if (windowId === void 0) {
1235
+ tab = await this.#chrome.tabs.create({ url, active: false });
1236
+ } else if (windowId !== null) {
1237
+ tab = await this.#chrome.tabs.create({ url, active: false, windowId }).catch(() => void 0);
1238
+ if (!tab) note = NEW_WINDOW_NOTE;
1239
+ } else {
1240
+ note = NO_WINDOW_NOTE;
1241
+ }
1242
+ if (!tab) {
1243
+ if (!this.#chrome.windows.create) throw new Error("Your Chrome has no ordinary window to open a tab in. Open a Chrome window and try again.");
1244
+ const created = await this.#chrome.windows.create({ url, focused: false, state: "normal" });
1245
+ tab = created.tabs?.[0];
1246
+ groupable = false;
1247
+ }
1248
+ if (tab?.id === void 0) throw new Error("Chrome opened a tab without an id.");
1249
+ const tabId = tab.id;
1250
+ if (groupable) {
1251
+ try {
1252
+ const groupId = await this.#chrome.tabs.group(session.groupId >= 0 ? { tabIds: [tabId], groupId: session.groupId } : { tabIds: [tabId] });
1253
+ if (session.groupId !== groupId) {
1254
+ session.groupId = groupId;
1255
+ await this.#chrome.tabGroups.update(groupId, { title: GROUP_TITLE, collapsed: false }).catch(() => void 0);
1256
+ }
1257
+ } catch {
1258
+ session.ungrouped.add(tabId);
1259
+ }
1260
+ } else {
1261
+ session.ungrouped.add(tabId);
565
1262
  }
566
1263
  const key = `tab-${this.#uuid().slice(0, 12)}`;
567
- session.tabs.set(key, tab.id);
1264
+ session.tabs.set(key, tabId);
568
1265
  session.active = key;
569
- return tab.id;
1266
+ return { tabId, key, ...note ? { note } : {} };
1267
+ }
1268
+ /** What a failure after the tab opened carries back: the page is there. */
1269
+ async #openedError(error, tabId, key, url) {
1270
+ const tab = await this.#chrome.tabs.get(tabId).catch(() => void 0);
1271
+ const message = error instanceof Error ? error.message : String(error);
1272
+ return new OpenedError(message, { tabId: key, url: tab?.url ?? url, title: tab?.title ?? "" });
570
1273
  }
571
1274
  /** The key of this session's current tab, opening one when there is none to reuse. */
572
1275
  async #reuseOrOpen(session, url, cancel) {
@@ -577,11 +1280,17 @@ var BrowserCommands = class {
577
1280
  cancel.dispatch();
578
1281
  await this.#chrome.tabs.update(tab.id, { url });
579
1282
  await this.#waitForLoad(tab.id);
580
- return;
1283
+ return void 0;
581
1284
  }
582
1285
  }
583
1286
  const opened = await this.#openTab(session, url, cancel);
584
- await this.#waitForLoad(opened);
1287
+ try {
1288
+ await this.#waitForLoad(opened.tabId);
1289
+ } catch (error) {
1290
+ if (error instanceof CancelledError) throw error;
1291
+ throw await this.#openedError(error, opened.tabId, opened.key, url);
1292
+ }
1293
+ return opened.note;
585
1294
  }
586
1295
  /**
587
1296
  * Wait for what the input may have started, not for what was already there.
@@ -621,8 +1330,8 @@ var BrowserCommands = class {
621
1330
  session.observed = void 0;
622
1331
  this.#refs.delete(command.session);
623
1332
  cancel.check();
624
- await this.#reuseOrOpen(session, url, cancel);
625
- return {};
1333
+ const note = await this.#reuseOrOpen(session, url, cancel);
1334
+ return note ? { observation: { note } } : {};
626
1335
  }
627
1336
  async #tab(command) {
628
1337
  const session = await this.#session(command.session);
@@ -636,13 +1345,14 @@ var BrowserCommands = class {
636
1345
  }
637
1346
  /** Closes this session's own tabs, and only the ones still in its group. */
638
1347
  async #close(command, cancel) {
1348
+ this.#inView.delete(command.session);
639
1349
  const session = this.#sessions.get(command.session);
640
1350
  if (!session) return {};
641
1351
  const ids = [];
642
1352
  for (const [key, tabId] of [...session.tabs]) {
643
1353
  const tab = await this.#chrome.tabs.get(tabId).catch(() => void 0);
644
1354
  if (!tab) continue;
645
- if (session.groupId >= 0 && tab.groupId !== session.groupId) {
1355
+ if (this.#taken(session, tab)) {
646
1356
  this.#forget(session, key);
647
1357
  continue;
648
1358
  }
@@ -662,7 +1372,7 @@ var BrowserCommands = class {
662
1372
  const live = [];
663
1373
  for (const [key, tabId] of [...session.tabs]) {
664
1374
  const tab = await this.#chrome.tabs.get(tabId).catch(() => void 0);
665
- if (!tab || session.groupId >= 0 && tab.groupId !== session.groupId) {
1375
+ if (!tab || this.#taken(session, tab)) {
666
1376
  this.#forget(session, key);
667
1377
  continue;
668
1378
  }
@@ -821,7 +1531,7 @@ Scroll: ${scroll.x}, ${scroll.y}`.slice(0, MAX_TREE);
821
1531
  const ref = this.#ref(command.session, session, command.args["target"]);
822
1532
  const tab = await this.#ownTab(session, ref.tabKey);
823
1533
  if (ref.frameId === 0 && this.#liveUrl(tab) !== ref.docUrl) throw new PreconditionError(MOVED);
824
- await this.#background(tab, command.owner);
1534
+ await this.#background(tab, command);
825
1535
  cancel.check();
826
1536
  return { ref, tab };
827
1537
  }
@@ -1002,11 +1712,11 @@ Scroll: ${scroll.x}, ${scroll.y}`.slice(0, MAX_TREE);
1002
1712
  await this.#stopScreencast(command.session);
1003
1713
  throw new PreconditionError("That tab is gone. Observe again to continue in a new one.");
1004
1714
  }
1005
- if (session.groupId >= 0 && tab.groupId !== session.groupId) {
1715
+ if (this.#taken(session, tab)) {
1006
1716
  await this.#stopScreencast(command.session);
1007
1717
  throw new PreconditionError(TAKEN);
1008
1718
  }
1009
- await this.#background(tab, command.owner);
1719
+ await this.#background(tab, command);
1010
1720
  const event = inputEvent(command.args);
1011
1721
  cancel.check();
1012
1722
  cancel.dispatch();
@@ -1060,7 +1770,7 @@ Scroll: ${scroll.x}, ${scroll.y}`.slice(0, MAX_TREE);
1060
1770
  const ref = this.#ref(command.session, session, { ref: str(command.args, "ref") });
1061
1771
  const tab = await this.#ownTab(session, ref.tabKey);
1062
1772
  if (ref.frameId === 0 && this.#liveUrl(tab) !== ref.docUrl) throw new PreconditionError(MOVED);
1063
- await this.#background(tab, command.owner);
1773
+ await this.#background(tab, command);
1064
1774
  cancel.check();
1065
1775
  const [frame] = await this.#chrome.scripting.executeScript({
1066
1776
  target: { tabId: ref.tabId, frameIds: [ref.frameId] },
@@ -1088,7 +1798,7 @@ Scroll: ${scroll.x}, ${scroll.y}`.slice(0, MAX_TREE);
1088
1798
  if (value === "") throw new PreconditionError("The fill arrived with nothing in it.");
1089
1799
  const tab = await this.#ownTab(session, ref.tabKey);
1090
1800
  if (ref.frameId === 0 && this.#liveUrl(tab) !== ref.docUrl) throw new PreconditionError(MOVED);
1091
- await this.#background(tab, command.owner);
1801
+ await this.#background(tab, command);
1092
1802
  cancel.check();
1093
1803
  cancel.dispatch();
1094
1804
  const [frame] = await this.#chrome.scripting.executeScript({
@@ -1148,7 +1858,7 @@ Scroll: ${scroll.x}, ${scroll.y}`.slice(0, MAX_TREE);
1148
1858
  if (!observed || observed.generation !== session.generation) throw new PreconditionError("Stale page observation. Observe again before scrolling.");
1149
1859
  const tab = await this.#ownTab(session, observed.tabKey);
1150
1860
  if (this.#liveUrl(tab) !== observed.url) throw new PreconditionError(MOVED);
1151
- await this.#background(tab, command.owner);
1861
+ await this.#background(tab, command);
1152
1862
  const tabId = tab.id;
1153
1863
  const direction = str(command.args, "direction") === "up" ? "up" : "down";
1154
1864
  cancel.check();
@@ -1235,6 +1945,13 @@ function pressRef(ref, key, code, keyCode) {
1235
1945
  element.dispatchEvent(new KeyboardEvent(type, { key, code, keyCode, bubbles: true, cancelable: true }));
1236
1946
  }
1237
1947
  }
1948
+ function heldLoginFacts(raw) {
1949
+ if (!raw || typeof raw !== "object") return void 0;
1950
+ const { never, saved } = raw;
1951
+ const sites = Array.isArray(never) ? never.filter((site) => typeof site === "string" && site.length <= 253).slice(0, 500) : [];
1952
+ const kept = Array.isArray(saved) ? saved.filter((login) => typeof login?.site === "string" && typeof login?.username === "string").slice(0, 500).map(({ site, username }) => ({ site, username })) : [];
1953
+ return { never: sites, saved: kept };
1954
+ }
1238
1955
 
1239
1956
  // src/external.ts
1240
1957
  function isLoopbackOrigin(origin) {
@@ -1310,7 +2027,7 @@ function flush(open) {
1310
2027
  }
1311
2028
  }
1312
2029
  }
1313
- var commands = new BrowserCommands(chrome, { onFrame: send });
2030
+ var commands = new BrowserCommands(chrome, { onFrame: send, onEvent: send, onLogin: send });
1314
2031
  var attempt = 0;
1315
2032
  var timer;
1316
2033
  var silence;
@@ -1323,6 +2040,7 @@ var protocol = new Protocol({
1323
2040
  execute: (command, cancel) => commands.run(command, cancel),
1324
2041
  // The socket ended: sessions and refs go with it. The tabs do not.
1325
2042
  onReset: () => commands.reset(),
2043
+ onLoginAck: (id, answer) => commands.logins.ack(id, answer),
1326
2044
  onState: (state) => {
1327
2045
  last = state;
1328
2046
  safely(() => chrome.runtime.sendMessage({ type: "buddi-state", state }).catch(() => void 0));
@@ -1416,9 +2134,23 @@ function schedule() {
1416
2134
  safely(() => connect());
1417
2135
  }, wait);
1418
2136
  }
1419
- chrome.runtime.onMessage.addListener((message, _sender, respond) => {
2137
+ chrome.runtime.onMessage.addListener((message, sender, respond) => {
1420
2138
  const request = message;
1421
2139
  if (!request || typeof request.type !== "string") return;
2140
+ if (request.type === GIVE_BACK_MESSAGE) {
2141
+ const tabId = sender?.tab?.id;
2142
+ if (typeof request.session === "string") safely(() => commands.giveBack(request.session, tabId).then(() => void 0));
2143
+ return;
2144
+ }
2145
+ if (request.type === LOGIN_MESSAGE || request.type === LOGIN_SEEN_MESSAGE || request.type === LOGIN_PENDING_MESSAGE) {
2146
+ const reply = commands.loginMessage(message, sender);
2147
+ if (!reply) {
2148
+ respond(null);
2149
+ return;
2150
+ }
2151
+ safely(() => reply.then((answer) => respond(answer), () => respond(null)));
2152
+ return true;
2153
+ }
1422
2154
  if (request.type === "buddi-get-state") {
1423
2155
  respond({ state: last });
1424
2156
  return;