@withbuddi/buddi 0.1.0-pre.19 → 0.1.0-pre.21

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 (525) hide show
  1. package/README.md +1 -1
  2. package/node_modules/@buddi/cli/dist/.tsbuildinfo +1 -1
  3. package/node_modules/@buddi/cli/dist/args.d.ts +6 -0
  4. package/node_modules/@buddi/cli/dist/args.d.ts.map +1 -1
  5. package/node_modules/@buddi/cli/dist/args.js +15 -0
  6. package/node_modules/@buddi/cli/dist/args.js.map +1 -1
  7. package/node_modules/@buddi/cli/dist/commands.d.ts.map +1 -1
  8. package/node_modules/@buddi/cli/dist/commands.js +18 -1
  9. package/node_modules/@buddi/cli/dist/commands.js.map +1 -1
  10. package/node_modules/@buddi/cli/dist/main.d.ts.map +1 -1
  11. package/node_modules/@buddi/cli/dist/main.js +19 -2
  12. package/node_modules/@buddi/cli/dist/main.js.map +1 -1
  13. package/node_modules/@buddi/cli/dist/status.d.ts +10 -0
  14. package/node_modules/@buddi/cli/dist/status.d.ts.map +1 -1
  15. package/node_modules/@buddi/cli/dist/status.js +4 -0
  16. package/node_modules/@buddi/cli/dist/status.js.map +1 -1
  17. package/node_modules/@buddi/core/dist/.tsbuildinfo +1 -1
  18. package/node_modules/@buddi/core/dist/agents/catalog.d.ts.map +1 -1
  19. package/node_modules/@buddi/core/dist/agents/catalog.js +7 -1
  20. package/node_modules/@buddi/core/dist/agents/catalog.js.map +1 -1
  21. package/node_modules/@buddi/core/dist/host/build.d.ts.map +1 -1
  22. package/node_modules/@buddi/core/dist/host/build.js +33 -16
  23. package/node_modules/@buddi/core/dist/host/build.js.map +1 -1
  24. package/node_modules/@buddi/core/dist/host/types.d.ts +17 -0
  25. package/node_modules/@buddi/core/dist/host/types.d.ts.map +1 -1
  26. package/node_modules/@buddi/core/dist/pages/__fixtures__/demo.d.ts.map +1 -1
  27. package/node_modules/@buddi/core/dist/pages/__fixtures__/demo.js +1 -0
  28. package/node_modules/@buddi/core/dist/pages/__fixtures__/demo.js.map +1 -1
  29. package/node_modules/@buddi/core/dist/pages.d.ts +74 -0
  30. package/node_modules/@buddi/core/dist/pages.d.ts.map +1 -1
  31. package/node_modules/@buddi/core/dist/pages.js +27 -1
  32. package/node_modules/@buddi/core/dist/pages.js.map +1 -1
  33. package/node_modules/@buddi/core/dist/plugin/index.d.ts +2 -2
  34. package/node_modules/@buddi/core/dist/plugin/index.d.ts.map +1 -1
  35. package/node_modules/@buddi/core/dist/plugin/version.d.ts +1 -1
  36. package/node_modules/@buddi/core/dist/plugin/version.js +1 -1
  37. package/node_modules/@buddi/core/dist/provider-accounts.d.ts +15 -1
  38. package/node_modules/@buddi/core/dist/provider-accounts.d.ts.map +1 -1
  39. package/node_modules/@buddi/core/dist/provider-accounts.js +22 -1
  40. package/node_modules/@buddi/core/dist/provider-accounts.js.map +1 -1
  41. package/node_modules/@buddi/core/dist/provider.d.ts +6 -0
  42. package/node_modules/@buddi/core/dist/provider.d.ts.map +1 -1
  43. package/node_modules/@buddi/core/dist/provider.js.map +1 -1
  44. package/node_modules/@buddi/core/dist/surfaces.d.ts +11 -0
  45. package/node_modules/@buddi/core/dist/surfaces.d.ts.map +1 -1
  46. package/node_modules/@buddi/core/dist/surfaces.js +4 -0
  47. package/node_modules/@buddi/core/dist/surfaces.js.map +1 -1
  48. package/node_modules/@buddi/core/migrations/046_ollama_device_key.sql +7 -0
  49. package/node_modules/@buddi/core/migrations/047_reported_context_windows.sql +5 -0
  50. package/node_modules/@buddi/core/migrations/048_surface_chat_voice.sql +13 -0
  51. package/node_modules/@buddi/core/migrations/049_surface_chat_voice_form.sql +8 -0
  52. package/node_modules/@buddi/gateway/dist/.tsbuildinfo +1 -1
  53. package/node_modules/@buddi/gateway/dist/agents-cli.d.ts +2 -0
  54. package/node_modules/@buddi/gateway/dist/agents-cli.d.ts.map +1 -1
  55. package/node_modules/@buddi/gateway/dist/agents-cli.js +5 -3
  56. package/node_modules/@buddi/gateway/dist/agents-cli.js.map +1 -1
  57. package/node_modules/@buddi/gateway/dist/chat/session.d.ts.map +1 -1
  58. package/node_modules/@buddi/gateway/dist/chat/session.js +2 -2
  59. package/node_modules/@buddi/gateway/dist/chat/session.js.map +1 -1
  60. package/node_modules/@buddi/gateway/dist/chat/usage.d.ts +16 -0
  61. package/node_modules/@buddi/gateway/dist/chat/usage.d.ts.map +1 -1
  62. package/node_modules/@buddi/gateway/dist/chat/usage.js +53 -11
  63. package/node_modules/@buddi/gateway/dist/chat/usage.js.map +1 -1
  64. package/node_modules/@buddi/gateway/dist/codex-accounts.d.ts +24 -11
  65. package/node_modules/@buddi/gateway/dist/codex-accounts.d.ts.map +1 -1
  66. package/node_modules/@buddi/gateway/dist/codex-accounts.js +151 -215
  67. package/node_modules/@buddi/gateway/dist/codex-accounts.js.map +1 -1
  68. package/node_modules/@buddi/gateway/dist/index.d.ts +2 -0
  69. package/node_modules/@buddi/gateway/dist/index.d.ts.map +1 -1
  70. package/node_modules/@buddi/gateway/dist/index.js +2 -0
  71. package/node_modules/@buddi/gateway/dist/index.js.map +1 -1
  72. package/node_modules/@buddi/gateway/dist/ollama-accounts.d.ts +87 -0
  73. package/node_modules/@buddi/gateway/dist/ollama-accounts.d.ts.map +1 -0
  74. package/node_modules/@buddi/gateway/dist/ollama-accounts.js +179 -0
  75. package/node_modules/@buddi/gateway/dist/ollama-accounts.js.map +1 -0
  76. package/node_modules/@buddi/gateway/dist/provider-accounts.d.ts +51 -1
  77. package/node_modules/@buddi/gateway/dist/provider-accounts.d.ts.map +1 -1
  78. package/node_modules/@buddi/gateway/dist/provider-accounts.js +184 -25
  79. package/node_modules/@buddi/gateway/dist/provider-accounts.js.map +1 -1
  80. package/node_modules/@buddi/gateway/dist/speech-cli.d.ts +43 -0
  81. package/node_modules/@buddi/gateway/dist/speech-cli.d.ts.map +1 -0
  82. package/node_modules/@buddi/gateway/dist/speech-cli.js +105 -0
  83. package/node_modules/@buddi/gateway/dist/speech-cli.js.map +1 -0
  84. package/node_modules/@buddi/gateway/dist/surfaces/context-budget.d.ts.map +1 -1
  85. package/node_modules/@buddi/gateway/dist/surfaces/context-budget.js +10 -3
  86. package/node_modules/@buddi/gateway/dist/surfaces/context-budget.js.map +1 -1
  87. package/node_modules/@buddi/gateway/dist/telegram/api.d.ts +10 -0
  88. package/node_modules/@buddi/gateway/dist/telegram/api.d.ts.map +1 -1
  89. package/node_modules/@buddi/gateway/dist/telegram/api.js +12 -0
  90. package/node_modules/@buddi/gateway/dist/telegram/api.js.map +1 -1
  91. package/node_modules/@buddi/gateway/dist/telegram/browser-view.d.ts +2 -1
  92. package/node_modules/@buddi/gateway/dist/telegram/browser-view.d.ts.map +1 -1
  93. package/node_modules/@buddi/gateway/dist/telegram/browser-view.js +4 -2
  94. package/node_modules/@buddi/gateway/dist/telegram/browser-view.js.map +1 -1
  95. package/node_modules/@buddi/gateway/dist/telegram/main.d.ts.map +1 -1
  96. package/node_modules/@buddi/gateway/dist/telegram/main.js +10 -2
  97. package/node_modules/@buddi/gateway/dist/telegram/main.js.map +1 -1
  98. package/node_modules/@buddi/gateway/dist/telegram/surface.d.ts +25 -0
  99. package/node_modules/@buddi/gateway/dist/telegram/surface.d.ts.map +1 -1
  100. package/node_modules/@buddi/gateway/dist/telegram/surface.js +212 -10
  101. package/node_modules/@buddi/gateway/dist/telegram/surface.js.map +1 -1
  102. package/node_modules/@buddi/gateway/dist/telegram/voice.d.ts +112 -0
  103. package/node_modules/@buddi/gateway/dist/telegram/voice.d.ts.map +1 -0
  104. package/node_modules/@buddi/gateway/dist/telegram/voice.js +220 -0
  105. package/node_modules/@buddi/gateway/dist/telegram/voice.js.map +1 -0
  106. package/node_modules/@buddi/gateway/dist/web/chat.d.ts +31 -8
  107. package/node_modules/@buddi/gateway/dist/web/chat.d.ts.map +1 -1
  108. package/node_modules/@buddi/gateway/dist/web/chat.js +3 -2
  109. package/node_modules/@buddi/gateway/dist/web/chat.js.map +1 -1
  110. package/node_modules/@buddi/gateway/dist/web/onboarding.d.ts +13 -2
  111. package/node_modules/@buddi/gateway/dist/web/onboarding.d.ts.map +1 -1
  112. package/node_modules/@buddi/gateway/dist/web/onboarding.js +24 -3
  113. package/node_modules/@buddi/gateway/dist/web/onboarding.js.map +1 -1
  114. package/node_modules/@buddi/gateway/dist/web/read.d.ts +15 -12
  115. package/node_modules/@buddi/gateway/dist/web/read.d.ts.map +1 -1
  116. package/node_modules/@buddi/gateway/dist/web/read.js +9 -10
  117. package/node_modules/@buddi/gateway/dist/web/read.js.map +1 -1
  118. package/node_modules/@buddi/gateway/dist/web/server.d.ts.map +1 -1
  119. package/node_modules/@buddi/gateway/dist/web/server.js +29 -13
  120. package/node_modules/@buddi/gateway/dist/web/server.js.map +1 -1
  121. package/node_modules/@buddi/gateway/dist/web/speech.d.ts +47 -0
  122. package/node_modules/@buddi/gateway/dist/web/speech.d.ts.map +1 -0
  123. package/node_modules/@buddi/gateway/dist/web/speech.js +83 -0
  124. package/node_modules/@buddi/gateway/dist/web/speech.js.map +1 -0
  125. package/node_modules/@buddi/gateway/dist/web/stream.d.ts +0 -24
  126. package/node_modules/@buddi/gateway/dist/web/stream.d.ts.map +1 -1
  127. package/node_modules/@buddi/gateway/dist/web/stream.js +26 -2
  128. package/node_modules/@buddi/gateway/dist/web/stream.js.map +1 -1
  129. package/node_modules/@buddi/gateway/dist/web/usage-view.d.ts +15 -0
  130. package/node_modules/@buddi/gateway/dist/web/usage-view.d.ts.map +1 -0
  131. package/node_modules/@buddi/gateway/dist/web/usage-view.js +20 -0
  132. package/node_modules/@buddi/gateway/dist/web/usage-view.js.map +1 -0
  133. package/node_modules/@buddi/install/dist/.tsbuildinfo +1 -1
  134. package/node_modules/@buddi/runtime/dist/.tsbuildinfo +1 -1
  135. package/node_modules/@buddi/runtime/dist/anthropic.d.ts +18 -0
  136. package/node_modules/@buddi/runtime/dist/anthropic.d.ts.map +1 -1
  137. package/node_modules/@buddi/runtime/dist/anthropic.js +65 -13
  138. package/node_modules/@buddi/runtime/dist/anthropic.js.map +1 -1
  139. package/node_modules/@buddi/runtime/dist/codex-direct.d.ts +55 -0
  140. package/node_modules/@buddi/runtime/dist/codex-direct.d.ts.map +1 -0
  141. package/node_modules/@buddi/runtime/dist/codex-direct.js +342 -0
  142. package/node_modules/@buddi/runtime/dist/codex-direct.js.map +1 -0
  143. package/node_modules/@buddi/runtime/dist/codex-oauth.d.ts +66 -0
  144. package/node_modules/@buddi/runtime/dist/codex-oauth.d.ts.map +1 -0
  145. package/node_modules/@buddi/runtime/dist/codex-oauth.js +210 -0
  146. package/node_modules/@buddi/runtime/dist/codex-oauth.js.map +1 -0
  147. package/node_modules/@buddi/runtime/dist/codex-profile.d.ts +19 -0
  148. package/node_modules/@buddi/runtime/dist/codex-profile.d.ts.map +1 -0
  149. package/node_modules/@buddi/runtime/dist/codex-profile.js +99 -0
  150. package/node_modules/@buddi/runtime/dist/codex-profile.js.map +1 -0
  151. package/node_modules/@buddi/runtime/dist/context-window.d.ts.map +1 -1
  152. package/node_modules/@buddi/runtime/dist/context-window.js +17 -4
  153. package/node_modules/@buddi/runtime/dist/context-window.js.map +1 -1
  154. package/node_modules/@buddi/runtime/dist/delegate.d.ts +24 -0
  155. package/node_modules/@buddi/runtime/dist/delegate.d.ts.map +1 -1
  156. package/node_modules/@buddi/runtime/dist/delegate.js +87 -11
  157. package/node_modules/@buddi/runtime/dist/delegate.js.map +1 -1
  158. package/node_modules/@buddi/runtime/dist/index.d.ts +4 -4
  159. package/node_modules/@buddi/runtime/dist/index.d.ts.map +1 -1
  160. package/node_modules/@buddi/runtime/dist/index.js +5 -5
  161. package/node_modules/@buddi/runtime/dist/index.js.map +1 -1
  162. package/node_modules/@buddi/runtime/dist/loop.d.ts +7 -0
  163. package/node_modules/@buddi/runtime/dist/loop.d.ts.map +1 -1
  164. package/node_modules/@buddi/runtime/dist/loop.js +54 -8
  165. package/node_modules/@buddi/runtime/dist/loop.js.map +1 -1
  166. package/node_modules/@buddi/runtime/dist/ollama-signing.d.ts +52 -0
  167. package/node_modules/@buddi/runtime/dist/ollama-signing.d.ts.map +1 -0
  168. package/node_modules/@buddi/runtime/dist/ollama-signing.js +154 -0
  169. package/node_modules/@buddi/runtime/dist/ollama-signing.js.map +1 -0
  170. package/node_modules/@buddi/runtime/dist/openai.d.ts +16 -4
  171. package/node_modules/@buddi/runtime/dist/openai.d.ts.map +1 -1
  172. package/node_modules/@buddi/runtime/dist/openai.js +44 -11
  173. package/node_modules/@buddi/runtime/dist/openai.js.map +1 -1
  174. package/node_modules/@buddi/runtime/dist/provider-models.d.ts +2 -0
  175. package/node_modules/@buddi/runtime/dist/provider-models.d.ts.map +1 -1
  176. package/node_modules/@buddi/runtime/dist/provider-models.js +13 -4
  177. package/node_modules/@buddi/runtime/dist/provider-models.js.map +1 -1
  178. package/node_modules/@buddi/tool-artifacts/dist/.tsbuildinfo +1 -1
  179. package/node_modules/@buddi/tool-browser/dist/.tsbuildinfo +1 -1
  180. package/node_modules/@buddi/tool-browser/dist/computer.d.ts +53 -1
  181. package/node_modules/@buddi/tool-browser/dist/computer.d.ts.map +1 -1
  182. package/node_modules/@buddi/tool-browser/dist/computer.js +154 -5
  183. package/node_modules/@buddi/tool-browser/dist/computer.js.map +1 -1
  184. package/node_modules/@buddi/tool-browser/dist/controller.d.ts +20 -3
  185. package/node_modules/@buddi/tool-browser/dist/controller.d.ts.map +1 -1
  186. package/node_modules/@buddi/tool-browser/dist/controller.js +170 -5
  187. package/node_modules/@buddi/tool-browser/dist/controller.js.map +1 -1
  188. package/node_modules/@buddi/tool-browser/dist/index.d.ts.map +1 -1
  189. package/node_modules/@buddi/tool-browser/dist/index.js +9 -1
  190. package/node_modules/@buddi/tool-browser/dist/index.js.map +1 -1
  191. package/node_modules/@buddi/tool-browser/dist/service.d.ts +14 -1
  192. package/node_modules/@buddi/tool-browser/dist/service.d.ts.map +1 -1
  193. package/node_modules/@buddi/tool-browser/dist/service.js +28 -5
  194. package/node_modules/@buddi/tool-browser/dist/service.js.map +1 -1
  195. package/node_modules/@buddi/tool-browser/dist/types.d.ts +11 -0
  196. package/node_modules/@buddi/tool-browser/dist/types.d.ts.map +1 -1
  197. package/node_modules/@buddi/tool-browser/dist/types.js +16 -3
  198. package/node_modules/@buddi/tool-browser/dist/types.js.map +1 -1
  199. package/node_modules/@buddi/tool-browser/package.json +1 -1
  200. package/node_modules/@buddi/tool-email/dist/.tsbuildinfo +1 -1
  201. package/node_modules/@buddi/tool-host/dist/.tsbuildinfo +1 -1
  202. package/node_modules/@buddi/tool-memory/dist/.tsbuildinfo +1 -1
  203. package/node_modules/@buddi/tool-web/dist/.tsbuildinfo +1 -1
  204. package/node_modules/imapflow/CHANGELOG.md +29 -0
  205. package/node_modules/imapflow/dist/cjs/commands/append.js +12 -12
  206. package/node_modules/imapflow/dist/cjs/commands/authenticate.d.ts +3 -8
  207. package/node_modules/imapflow/dist/cjs/commands/close.js +2 -1
  208. package/node_modules/imapflow/dist/cjs/commands/copy.js +4 -4
  209. package/node_modules/imapflow/dist/cjs/commands/create.js +2 -3
  210. package/node_modules/imapflow/dist/cjs/commands/delete.js +4 -4
  211. package/node_modules/imapflow/dist/cjs/commands/expunge.js +8 -5
  212. package/node_modules/imapflow/dist/cjs/commands/fetch.js +12 -10
  213. package/node_modules/imapflow/dist/cjs/commands/idle.js +6 -2
  214. package/node_modules/imapflow/dist/cjs/commands/list.js +22 -18
  215. package/node_modules/imapflow/dist/cjs/commands/move.js +11 -6
  216. package/node_modules/imapflow/dist/cjs/commands/namespace.js +1 -1
  217. package/node_modules/imapflow/dist/cjs/commands/quota.js +10 -9
  218. package/node_modules/imapflow/dist/cjs/commands/rename.js +4 -4
  219. package/node_modules/imapflow/dist/cjs/commands/search.js +7 -8
  220. package/node_modules/imapflow/dist/cjs/commands/select.js +12 -9
  221. package/node_modules/imapflow/dist/cjs/commands/status.js +11 -11
  222. package/node_modules/imapflow/dist/cjs/commands/store.js +5 -5
  223. package/node_modules/imapflow/dist/cjs/commands/subscribe.js +2 -17
  224. package/node_modules/imapflow/dist/cjs/commands/subscription.d.ts +10 -0
  225. package/node_modules/imapflow/dist/cjs/commands/subscription.js +29 -0
  226. package/node_modules/imapflow/dist/cjs/commands/unsubscribe.js +2 -17
  227. package/node_modules/imapflow/dist/cjs/download.d.ts +22 -0
  228. package/node_modules/imapflow/dist/cjs/download.js +588 -0
  229. package/node_modules/imapflow/dist/cjs/errors.d.ts +50 -1
  230. package/node_modules/imapflow/dist/cjs/errors.js +53 -1
  231. package/node_modules/imapflow/dist/cjs/handler/imap-compiler.js +1 -1
  232. package/node_modules/imapflow/dist/cjs/handler/imap-stream.d.ts +13 -2
  233. package/node_modules/imapflow/dist/cjs/handler/imap-stream.js +51 -30
  234. package/node_modules/imapflow/dist/cjs/handler/parser-instance.js +2 -2
  235. package/node_modules/imapflow/dist/cjs/handler/token-parser.js +15 -9
  236. package/node_modules/imapflow/dist/cjs/imap-flow.d.ts +30 -84
  237. package/node_modules/imapflow/dist/cjs/imap-flow.js +282 -734
  238. package/node_modules/imapflow/dist/cjs/jp-decoder.js +1 -1
  239. package/node_modules/imapflow/dist/cjs/package-info.d.ts +1 -1
  240. package/node_modules/imapflow/dist/cjs/package-info.js +3 -3
  241. package/node_modules/imapflow/dist/cjs/search-compiler.js +5 -12
  242. package/node_modules/imapflow/dist/cjs/tools.d.ts +52 -11
  243. package/node_modules/imapflow/dist/cjs/tools.js +86 -23
  244. package/node_modules/imapflow/dist/cjs/types.d.ts +30 -16
  245. package/node_modules/imapflow/dist/esm/commands/append.js +13 -13
  246. package/node_modules/imapflow/dist/esm/commands/authenticate.d.ts +3 -8
  247. package/node_modules/imapflow/dist/esm/commands/close.js +2 -1
  248. package/node_modules/imapflow/dist/esm/commands/copy.js +5 -5
  249. package/node_modules/imapflow/dist/esm/commands/create.js +3 -4
  250. package/node_modules/imapflow/dist/esm/commands/delete.js +5 -5
  251. package/node_modules/imapflow/dist/esm/commands/expunge.js +9 -6
  252. package/node_modules/imapflow/dist/esm/commands/fetch.js +13 -11
  253. package/node_modules/imapflow/dist/esm/commands/idle.js +7 -3
  254. package/node_modules/imapflow/dist/esm/commands/list.js +22 -18
  255. package/node_modules/imapflow/dist/esm/commands/move.js +12 -7
  256. package/node_modules/imapflow/dist/esm/commands/namespace.js +2 -2
  257. package/node_modules/imapflow/dist/esm/commands/quota.js +11 -10
  258. package/node_modules/imapflow/dist/esm/commands/rename.js +5 -5
  259. package/node_modules/imapflow/dist/esm/commands/search.js +8 -9
  260. package/node_modules/imapflow/dist/esm/commands/select.js +13 -10
  261. package/node_modules/imapflow/dist/esm/commands/status.js +12 -12
  262. package/node_modules/imapflow/dist/esm/commands/store.js +6 -6
  263. package/node_modules/imapflow/dist/esm/commands/subscribe.js +2 -17
  264. package/node_modules/imapflow/dist/esm/commands/subscription.d.ts +10 -0
  265. package/node_modules/imapflow/dist/esm/commands/subscription.js +26 -0
  266. package/node_modules/imapflow/dist/esm/commands/unsubscribe.js +2 -17
  267. package/node_modules/imapflow/dist/esm/download.d.ts +22 -0
  268. package/node_modules/imapflow/dist/esm/download.js +581 -0
  269. package/node_modules/imapflow/dist/esm/errors.d.ts +50 -1
  270. package/node_modules/imapflow/dist/esm/errors.js +52 -0
  271. package/node_modules/imapflow/dist/esm/handler/imap-compiler.js +1 -1
  272. package/node_modules/imapflow/dist/esm/handler/imap-stream.d.ts +13 -2
  273. package/node_modules/imapflow/dist/esm/handler/imap-stream.js +51 -30
  274. package/node_modules/imapflow/dist/esm/handler/parser-instance.js +2 -2
  275. package/node_modules/imapflow/dist/esm/handler/token-parser.js +15 -9
  276. package/node_modules/imapflow/dist/esm/imap-flow.d.ts +30 -84
  277. package/node_modules/imapflow/dist/esm/imap-flow.js +282 -735
  278. package/node_modules/imapflow/dist/esm/jp-decoder.js +1 -1
  279. package/node_modules/imapflow/dist/esm/package-info.d.ts +1 -1
  280. package/node_modules/imapflow/dist/esm/package-info.js +3 -3
  281. package/node_modules/imapflow/dist/esm/search-compiler.js +5 -12
  282. package/node_modules/imapflow/dist/esm/tools.d.ts +52 -11
  283. package/node_modules/imapflow/dist/esm/tools.js +79 -21
  284. package/node_modules/imapflow/dist/esm/types.d.ts +30 -16
  285. package/node_modules/imapflow/package.json +4 -4
  286. package/package.json +2 -2
  287. package/packages/cli/dist/.tsbuildinfo +1 -1
  288. package/packages/cli/dist/args.d.ts +6 -0
  289. package/packages/cli/dist/args.d.ts.map +1 -1
  290. package/packages/cli/dist/args.js +15 -0
  291. package/packages/cli/dist/args.js.map +1 -1
  292. package/packages/cli/dist/commands.d.ts.map +1 -1
  293. package/packages/cli/dist/commands.js +18 -1
  294. package/packages/cli/dist/commands.js.map +1 -1
  295. package/packages/cli/dist/main.d.ts.map +1 -1
  296. package/packages/cli/dist/main.js +19 -2
  297. package/packages/cli/dist/main.js.map +1 -1
  298. package/packages/cli/dist/status.d.ts +10 -0
  299. package/packages/cli/dist/status.d.ts.map +1 -1
  300. package/packages/cli/dist/status.js +4 -0
  301. package/packages/cli/dist/status.js.map +1 -1
  302. package/packages/core/dist/.tsbuildinfo +1 -1
  303. package/packages/core/dist/agents/catalog.d.ts.map +1 -1
  304. package/packages/core/dist/agents/catalog.js +7 -1
  305. package/packages/core/dist/agents/catalog.js.map +1 -1
  306. package/packages/core/dist/host/build.d.ts.map +1 -1
  307. package/packages/core/dist/host/build.js +33 -16
  308. package/packages/core/dist/host/build.js.map +1 -1
  309. package/packages/core/dist/host/types.d.ts +17 -0
  310. package/packages/core/dist/host/types.d.ts.map +1 -1
  311. package/packages/core/dist/pages/__fixtures__/demo.d.ts.map +1 -1
  312. package/packages/core/dist/pages/__fixtures__/demo.js +1 -0
  313. package/packages/core/dist/pages/__fixtures__/demo.js.map +1 -1
  314. package/packages/core/dist/pages.d.ts +74 -0
  315. package/packages/core/dist/pages.d.ts.map +1 -1
  316. package/packages/core/dist/pages.js +27 -1
  317. package/packages/core/dist/pages.js.map +1 -1
  318. package/packages/core/dist/plugin/index.d.ts +2 -2
  319. package/packages/core/dist/plugin/index.d.ts.map +1 -1
  320. package/packages/core/dist/plugin/version.d.ts +1 -1
  321. package/packages/core/dist/plugin/version.js +1 -1
  322. package/packages/core/dist/provider-accounts.d.ts +15 -1
  323. package/packages/core/dist/provider-accounts.d.ts.map +1 -1
  324. package/packages/core/dist/provider-accounts.js +22 -1
  325. package/packages/core/dist/provider-accounts.js.map +1 -1
  326. package/packages/core/dist/provider.d.ts +6 -0
  327. package/packages/core/dist/provider.d.ts.map +1 -1
  328. package/packages/core/dist/provider.js.map +1 -1
  329. package/packages/core/dist/surfaces.d.ts +11 -0
  330. package/packages/core/dist/surfaces.d.ts.map +1 -1
  331. package/packages/core/dist/surfaces.js +4 -0
  332. package/packages/core/dist/surfaces.js.map +1 -1
  333. package/packages/core/migrations/046_ollama_device_key.sql +7 -0
  334. package/packages/core/migrations/047_reported_context_windows.sql +5 -0
  335. package/packages/core/migrations/048_surface_chat_voice.sql +13 -0
  336. package/packages/core/migrations/049_surface_chat_voice_form.sql +8 -0
  337. package/packages/gateway/dist/.tsbuildinfo +1 -1
  338. package/packages/gateway/dist/agents-cli.d.ts +2 -0
  339. package/packages/gateway/dist/agents-cli.d.ts.map +1 -1
  340. package/packages/gateway/dist/agents-cli.js +5 -3
  341. package/packages/gateway/dist/agents-cli.js.map +1 -1
  342. package/packages/gateway/dist/chat/session.d.ts.map +1 -1
  343. package/packages/gateway/dist/chat/session.js +2 -2
  344. package/packages/gateway/dist/chat/session.js.map +1 -1
  345. package/packages/gateway/dist/chat/usage.d.ts +16 -0
  346. package/packages/gateway/dist/chat/usage.d.ts.map +1 -1
  347. package/packages/gateway/dist/chat/usage.js +53 -11
  348. package/packages/gateway/dist/chat/usage.js.map +1 -1
  349. package/packages/gateway/dist/codex-accounts.d.ts +24 -11
  350. package/packages/gateway/dist/codex-accounts.d.ts.map +1 -1
  351. package/packages/gateway/dist/codex-accounts.js +151 -215
  352. package/packages/gateway/dist/codex-accounts.js.map +1 -1
  353. package/packages/gateway/dist/index.d.ts +2 -0
  354. package/packages/gateway/dist/index.d.ts.map +1 -1
  355. package/packages/gateway/dist/index.js +2 -0
  356. package/packages/gateway/dist/index.js.map +1 -1
  357. package/packages/gateway/dist/ollama-accounts.d.ts +87 -0
  358. package/packages/gateway/dist/ollama-accounts.d.ts.map +1 -0
  359. package/packages/gateway/dist/ollama-accounts.js +179 -0
  360. package/packages/gateway/dist/ollama-accounts.js.map +1 -0
  361. package/packages/gateway/dist/provider-accounts.d.ts +51 -1
  362. package/packages/gateway/dist/provider-accounts.d.ts.map +1 -1
  363. package/packages/gateway/dist/provider-accounts.js +184 -25
  364. package/packages/gateway/dist/provider-accounts.js.map +1 -1
  365. package/packages/gateway/dist/speech-cli.d.ts +43 -0
  366. package/packages/gateway/dist/speech-cli.d.ts.map +1 -0
  367. package/packages/gateway/dist/speech-cli.js +105 -0
  368. package/packages/gateway/dist/speech-cli.js.map +1 -0
  369. package/packages/gateway/dist/surfaces/context-budget.d.ts.map +1 -1
  370. package/packages/gateway/dist/surfaces/context-budget.js +10 -3
  371. package/packages/gateway/dist/surfaces/context-budget.js.map +1 -1
  372. package/packages/gateway/dist/telegram/api.d.ts +10 -0
  373. package/packages/gateway/dist/telegram/api.d.ts.map +1 -1
  374. package/packages/gateway/dist/telegram/api.js +12 -0
  375. package/packages/gateway/dist/telegram/api.js.map +1 -1
  376. package/packages/gateway/dist/telegram/browser-view.d.ts +2 -1
  377. package/packages/gateway/dist/telegram/browser-view.d.ts.map +1 -1
  378. package/packages/gateway/dist/telegram/browser-view.js +4 -2
  379. package/packages/gateway/dist/telegram/browser-view.js.map +1 -1
  380. package/packages/gateway/dist/telegram/main.d.ts.map +1 -1
  381. package/packages/gateway/dist/telegram/main.js +10 -2
  382. package/packages/gateway/dist/telegram/main.js.map +1 -1
  383. package/packages/gateway/dist/telegram/surface.d.ts +25 -0
  384. package/packages/gateway/dist/telegram/surface.d.ts.map +1 -1
  385. package/packages/gateway/dist/telegram/surface.js +212 -10
  386. package/packages/gateway/dist/telegram/surface.js.map +1 -1
  387. package/packages/gateway/dist/telegram/voice.d.ts +112 -0
  388. package/packages/gateway/dist/telegram/voice.d.ts.map +1 -0
  389. package/packages/gateway/dist/telegram/voice.js +220 -0
  390. package/packages/gateway/dist/telegram/voice.js.map +1 -0
  391. package/packages/gateway/dist/web/chat.d.ts +31 -8
  392. package/packages/gateway/dist/web/chat.d.ts.map +1 -1
  393. package/packages/gateway/dist/web/chat.js +3 -2
  394. package/packages/gateway/dist/web/chat.js.map +1 -1
  395. package/packages/gateway/dist/web/onboarding.d.ts +13 -2
  396. package/packages/gateway/dist/web/onboarding.d.ts.map +1 -1
  397. package/packages/gateway/dist/web/onboarding.js +24 -3
  398. package/packages/gateway/dist/web/onboarding.js.map +1 -1
  399. package/packages/gateway/dist/web/read.d.ts +15 -12
  400. package/packages/gateway/dist/web/read.d.ts.map +1 -1
  401. package/packages/gateway/dist/web/read.js +9 -10
  402. package/packages/gateway/dist/web/read.js.map +1 -1
  403. package/packages/gateway/dist/web/server.d.ts.map +1 -1
  404. package/packages/gateway/dist/web/server.js +29 -13
  405. package/packages/gateway/dist/web/server.js.map +1 -1
  406. package/packages/gateway/dist/web/speech.d.ts +47 -0
  407. package/packages/gateway/dist/web/speech.d.ts.map +1 -0
  408. package/packages/gateway/dist/web/speech.js +83 -0
  409. package/packages/gateway/dist/web/speech.js.map +1 -0
  410. package/packages/gateway/dist/web/stream.d.ts +0 -24
  411. package/packages/gateway/dist/web/stream.d.ts.map +1 -1
  412. package/packages/gateway/dist/web/stream.js +26 -2
  413. package/packages/gateway/dist/web/stream.js.map +1 -1
  414. package/packages/gateway/dist/web/usage-view.d.ts +15 -0
  415. package/packages/gateway/dist/web/usage-view.d.ts.map +1 -0
  416. package/packages/gateway/dist/web/usage-view.js +20 -0
  417. package/packages/gateway/dist/web/usage-view.js.map +1 -0
  418. package/packages/install/dist/.tsbuildinfo +1 -1
  419. package/packages/runtime/dist/.tsbuildinfo +1 -1
  420. package/packages/runtime/dist/anthropic.d.ts +18 -0
  421. package/packages/runtime/dist/anthropic.d.ts.map +1 -1
  422. package/packages/runtime/dist/anthropic.js +65 -13
  423. package/packages/runtime/dist/anthropic.js.map +1 -1
  424. package/packages/runtime/dist/codex-direct.d.ts +55 -0
  425. package/packages/runtime/dist/codex-direct.d.ts.map +1 -0
  426. package/packages/runtime/dist/codex-direct.js +342 -0
  427. package/packages/runtime/dist/codex-direct.js.map +1 -0
  428. package/packages/runtime/dist/codex-oauth.d.ts +66 -0
  429. package/packages/runtime/dist/codex-oauth.d.ts.map +1 -0
  430. package/packages/runtime/dist/codex-oauth.js +210 -0
  431. package/packages/runtime/dist/codex-oauth.js.map +1 -0
  432. package/packages/runtime/dist/codex-profile.d.ts +19 -0
  433. package/packages/runtime/dist/codex-profile.d.ts.map +1 -0
  434. package/packages/runtime/dist/codex-profile.js +99 -0
  435. package/packages/runtime/dist/codex-profile.js.map +1 -0
  436. package/packages/runtime/dist/context-window.d.ts.map +1 -1
  437. package/packages/runtime/dist/context-window.js +17 -4
  438. package/packages/runtime/dist/context-window.js.map +1 -1
  439. package/packages/runtime/dist/delegate.d.ts +24 -0
  440. package/packages/runtime/dist/delegate.d.ts.map +1 -1
  441. package/packages/runtime/dist/delegate.js +87 -11
  442. package/packages/runtime/dist/delegate.js.map +1 -1
  443. package/packages/runtime/dist/index.d.ts +4 -4
  444. package/packages/runtime/dist/index.d.ts.map +1 -1
  445. package/packages/runtime/dist/index.js +5 -5
  446. package/packages/runtime/dist/index.js.map +1 -1
  447. package/packages/runtime/dist/loop.d.ts +7 -0
  448. package/packages/runtime/dist/loop.d.ts.map +1 -1
  449. package/packages/runtime/dist/loop.js +54 -8
  450. package/packages/runtime/dist/loop.js.map +1 -1
  451. package/packages/runtime/dist/ollama-signing.d.ts +52 -0
  452. package/packages/runtime/dist/ollama-signing.d.ts.map +1 -0
  453. package/packages/runtime/dist/ollama-signing.js +154 -0
  454. package/packages/runtime/dist/ollama-signing.js.map +1 -0
  455. package/packages/runtime/dist/openai.d.ts +16 -4
  456. package/packages/runtime/dist/openai.d.ts.map +1 -1
  457. package/packages/runtime/dist/openai.js +44 -11
  458. package/packages/runtime/dist/openai.js.map +1 -1
  459. package/packages/runtime/dist/provider-models.d.ts +2 -0
  460. package/packages/runtime/dist/provider-models.d.ts.map +1 -1
  461. package/packages/runtime/dist/provider-models.js +13 -4
  462. package/packages/runtime/dist/provider-models.js.map +1 -1
  463. package/packages/tools/artifacts/dist/.tsbuildinfo +1 -1
  464. package/packages/tools/browser/dist/.tsbuildinfo +1 -1
  465. package/packages/tools/browser/dist/computer.d.ts +53 -1
  466. package/packages/tools/browser/dist/computer.d.ts.map +1 -1
  467. package/packages/tools/browser/dist/computer.js +154 -5
  468. package/packages/tools/browser/dist/computer.js.map +1 -1
  469. package/packages/tools/browser/dist/controller.d.ts +20 -3
  470. package/packages/tools/browser/dist/controller.d.ts.map +1 -1
  471. package/packages/tools/browser/dist/controller.js +170 -5
  472. package/packages/tools/browser/dist/controller.js.map +1 -1
  473. package/packages/tools/browser/dist/index.d.ts.map +1 -1
  474. package/packages/tools/browser/dist/index.js +9 -1
  475. package/packages/tools/browser/dist/index.js.map +1 -1
  476. package/packages/tools/browser/dist/service.d.ts +14 -1
  477. package/packages/tools/browser/dist/service.d.ts.map +1 -1
  478. package/packages/tools/browser/dist/service.js +28 -5
  479. package/packages/tools/browser/dist/service.js.map +1 -1
  480. package/packages/tools/browser/dist/types.d.ts +11 -0
  481. package/packages/tools/browser/dist/types.d.ts.map +1 -1
  482. package/packages/tools/browser/dist/types.js +16 -3
  483. package/packages/tools/browser/dist/types.js.map +1 -1
  484. package/packages/tools/browser/package.json +1 -1
  485. package/packages/tools/email/dist/.tsbuildinfo +1 -1
  486. package/packages/tools/host/dist/.tsbuildinfo +1 -1
  487. package/packages/tools/memory/dist/.tsbuildinfo +1 -1
  488. package/packages/tools/web/dist/.tsbuildinfo +1 -1
  489. package/packages/web/dist/assets/index-D5cRFcgm.css +1 -0
  490. package/packages/web/dist/assets/index-GCFB1vBV.js +125 -0
  491. package/packages/web/dist/index.html +2 -2
  492. package/node_modules/@buddi/runtime/dist/codex-app-server.d.ts +0 -20
  493. package/node_modules/@buddi/runtime/dist/codex-app-server.d.ts.map +0 -1
  494. package/node_modules/@buddi/runtime/dist/codex-app-server.js +0 -172
  495. package/node_modules/@buddi/runtime/dist/codex-app-server.js.map +0 -1
  496. package/node_modules/@buddi/runtime/dist/codex-policy.d.ts +0 -6
  497. package/node_modules/@buddi/runtime/dist/codex-policy.d.ts.map +0 -1
  498. package/node_modules/@buddi/runtime/dist/codex-policy.js +0 -79
  499. package/node_modules/@buddi/runtime/dist/codex-policy.js.map +0 -1
  500. package/node_modules/@buddi/runtime/dist/codex-rpc.d.ts +0 -34
  501. package/node_modules/@buddi/runtime/dist/codex-rpc.d.ts.map +0 -1
  502. package/node_modules/@buddi/runtime/dist/codex-rpc.js +0 -152
  503. package/node_modules/@buddi/runtime/dist/codex-rpc.js.map +0 -1
  504. package/node_modules/@buddi/runtime/dist/codex-session.d.ts +0 -30
  505. package/node_modules/@buddi/runtime/dist/codex-session.d.ts.map +0 -1
  506. package/node_modules/@buddi/runtime/dist/codex-session.js +0 -169
  507. package/node_modules/@buddi/runtime/dist/codex-session.js.map +0 -1
  508. package/packages/runtime/dist/codex-app-server.d.ts +0 -20
  509. package/packages/runtime/dist/codex-app-server.d.ts.map +0 -1
  510. package/packages/runtime/dist/codex-app-server.js +0 -172
  511. package/packages/runtime/dist/codex-app-server.js.map +0 -1
  512. package/packages/runtime/dist/codex-policy.d.ts +0 -6
  513. package/packages/runtime/dist/codex-policy.d.ts.map +0 -1
  514. package/packages/runtime/dist/codex-policy.js +0 -79
  515. package/packages/runtime/dist/codex-policy.js.map +0 -1
  516. package/packages/runtime/dist/codex-rpc.d.ts +0 -34
  517. package/packages/runtime/dist/codex-rpc.d.ts.map +0 -1
  518. package/packages/runtime/dist/codex-rpc.js +0 -152
  519. package/packages/runtime/dist/codex-rpc.js.map +0 -1
  520. package/packages/runtime/dist/codex-session.d.ts +0 -30
  521. package/packages/runtime/dist/codex-session.d.ts.map +0 -1
  522. package/packages/runtime/dist/codex-session.js +0 -169
  523. package/packages/runtime/dist/codex-session.js.map +0 -1
  524. package/packages/web/dist/assets/index-B727JQsO.css +0 -1
  525. package/packages/web/dist/assets/index-OA0xgibo.js +0 -123
@@ -1,4 +1,4 @@
1
- import { spawn } from 'node:child_process';
1
+ import { execFile, spawn } from 'node:child_process';
2
2
  import { randomUUID } from 'node:crypto';
3
3
  import { fileURLToPath } from 'node:url';
4
4
  import { z } from 'zod';
@@ -15,6 +15,111 @@ export const settingsSchema = z.object({
15
15
  /** A Chromium profile directory ("Default", "Profile 2"). Absent: whatever window is in front. */
16
16
  browserProfile: z.string().min(1).max(100).regex(/^[A-Za-z0-9 ._-]+$/).optional(),
17
17
  }).strict().refine((value) => value.allowedApps.includes(value.browserApp), 'The selected browser must also be in allowedApps');
18
+ function execText(file, args) {
19
+ return new Promise((resolve, reject) => {
20
+ execFile(file, args, { timeout: 5_000, maxBuffer: 4 << 20, env: computerEnvironment() }, (error, stdout) => error ? reject(error) : resolve(String(stdout)));
21
+ });
22
+ }
23
+ /** Levenshtein distance, bounded by the two strings' lengths. */
24
+ function editDistance(a, b) {
25
+ let previous = Array.from({ length: b.length + 1 }, (_, i) => i);
26
+ for (let i = 1; i <= a.length; i++) {
27
+ const row = [i];
28
+ for (let j = 1; j <= b.length; j++)
29
+ row[j] = Math.min(previous[j] + 1, row[j - 1] + 1, previous[j - 1] + (a[i - 1] === b[j - 1] ? 0 : 1));
30
+ previous = row;
31
+ }
32
+ return previous[b.length];
33
+ }
34
+ /**
35
+ * A display name close to what was asked, ignoring case: one contains the
36
+ * other (three letters at least), or a small edit distance — two for a name
37
+ * up to eight characters, three above, always less than half of what was asked.
38
+ * The same name is not "close": it matched.
39
+ */
40
+ export function isNearName(asked, name) {
41
+ const a = asked.trim().toLowerCase();
42
+ const n = name.trim().toLowerCase().replace(/\.app$/, '');
43
+ if (!a || !n || a === n)
44
+ return false;
45
+ if (Math.min(a.length, n.length) >= 3 && (n.includes(a) || a.includes(n)))
46
+ return true;
47
+ const limit = Math.min(Math.max(a.length, n.length) <= 8 ? 2 : 3, Math.floor((a.length - 1) / 2));
48
+ return Math.abs(a.length - n.length) <= limit && editDistance(a, n) <= limit;
49
+ }
50
+ const appName = (appPath) => appPath.replace(/^.*\//, '').replace(/\.app$/i, '');
51
+ /** Each bundle's id and display name, through `mdls`. A bundle without an id is left out. */
52
+ async function describeApps(paths) {
53
+ const found = await Promise.all(paths.map(async (appPath) => {
54
+ try {
55
+ const [id, name] = (await execText('mdls', ['-raw', '-nullMarker', '', '-name', 'kMDItemCFBundleIdentifier', '-name', 'kMDItemDisplayName', appPath])).split('\0');
56
+ return id?.trim() ? [{ bundleId: id.trim(), name: (name ?? '').trim().replace(/\.app$/i, '') || appName(appPath) }] : [];
57
+ }
58
+ catch {
59
+ return [];
60
+ }
61
+ }));
62
+ return found.flat();
63
+ }
64
+ /**
65
+ * Installed applications through Spotlight: `mdfind` for the bundles, `mdls`
66
+ * for each one's bundle id and display name. Five seconds per call; nothing
67
+ * is opened. A name is matched exactly, ignoring case, with or without `.app`.
68
+ * `near` lists every application bundle once and keeps the few whose file
69
+ * name is close before asking `mdls` about them.
70
+ */
71
+ export const spotlightApps = async (query) => {
72
+ if (process.platform !== 'darwin')
73
+ return [];
74
+ const quoted = (text) => text.replace(/[\\'"*?]/g, (c) => `\\${c}`);
75
+ const bundles = "kMDItemContentType == 'com.apple.application-bundle'";
76
+ const filter = 'near' in query ? bundles
77
+ : 'name' in query ? `${bundles} && (kMDItemDisplayName == '${quoted(query.name)}'c || kMDItemDisplayName == '${quoted(query.name)}.app'c)`
78
+ : `${bundles} && kMDItemCFBundleIdentifier == '${quoted(query.bundleId)}'`;
79
+ const bundlePaths = (await execText('mdfind', [filter])).split('\n').map((line) => line.trim()).filter(Boolean);
80
+ const paths = 'near' in query ? bundlePaths.slice(0, 5_000).filter((appPath) => isNearName(query.near, appName(appPath))).slice(0, 10) : bundlePaths.slice(0, 20);
81
+ return describeApps(paths);
82
+ };
83
+ const unique = (apps) => [...new Map(apps.map((app) => [app.bundleId, app])).values()];
84
+ const listed = (apps) => apps.map((app) => `${app.name} (${app.bundleId})`).join(', ');
85
+ /**
86
+ * The one application a name or a bundle id stands for, or the refusal.
87
+ * Several copies of the same bundle id are one app. A name that matches
88
+ * nothing gets the close names back, never one picked for the agent.
89
+ */
90
+ export async function resolveApp(query, resolver = spotlightApps) {
91
+ let found;
92
+ try {
93
+ found = await resolver(query);
94
+ }
95
+ catch {
96
+ found = [];
97
+ }
98
+ if ('bundleId' in query)
99
+ found = found.filter((app) => app.bundleId === query.bundleId);
100
+ else
101
+ found = found.filter((app) => app.name.toLowerCase() === query.name.trim().toLowerCase());
102
+ const apps = unique(found);
103
+ const asked = 'name' in query ? query.name.trim() : query.bundleId;
104
+ if (apps.length === 0 && 'name' in query) {
105
+ let near;
106
+ try {
107
+ near = unique((await resolver({ near: asked })).filter((app) => isNearName(asked, app.name))).slice(0, 5);
108
+ }
109
+ catch {
110
+ near = [];
111
+ }
112
+ if (near.length === 1)
113
+ throw new BrowserPreconditionError(`No app called ${asked}. Did you mean ${listed(near)}? Ask again with that name.`);
114
+ if (near.length > 1)
115
+ throw new BrowserPreconditionError(`No app called ${asked}. Close names: ${listed(near)}. Say which.`);
116
+ }
117
+ if (apps.length === 0)
118
+ throw new BrowserPreconditionError('name' in query ? `No installed app is called ${asked}.` : `No installed app has the bundle id ${asked}.`);
119
+ if (apps.length > 1)
120
+ throw new BrowserPreconditionError(`Several apps are called ${asked}: ${listed(apps)}. Say which bundle id.`);
121
+ return apps[0];
122
+ }
18
123
  /** Do not copy vault/provider/database secrets into the native UI helper. */
19
124
  export function computerEnvironment(env = process.env) {
20
125
  return Object.fromEntries(['PATH', 'HOME', 'TMPDIR', 'LANG', 'LC_ALL', 'USER', 'LOGNAME']
@@ -80,11 +185,15 @@ export class NativeComputerBridge {
80
185
  const nodeSchema = z.object({ path: z.array(z.number().int().min(0)), role: z.string(), name: z.string(), value: z.string(), secure: z.boolean(), enabled: z.boolean(),
81
186
  bounds: z.object({ x: z.number(), y: z.number(), width: z.number().positive(), height: z.number().positive() }) });
82
187
  const snapshotSchema = z.object({ identity: z.string(), title: z.string(), nodes: z.array(nodeSchema).max(500), jpeg: z.string(), width: z.number().positive(), height: z.number().positive(), imageHash: z.string() });
188
+ /** The native helper's refusal when the selected app is not the frontmost one (Computer.swift, `state`). */
189
+ const NOT_IN_FRONT = /selected app is no longer in front/i;
83
190
  const roles = { AXButton: 'button', AXLink: 'link', AXTextField: 'textbox', AXTextArea: 'textbox', AXCheckBox: 'checkbox', AXRadioButton: 'radio', AXComboBox: 'combobox', AXPopUpButton: 'combobox', AXMenuItem: 'menuitem' };
84
191
  export class ComputerDriver {
85
192
  settings;
86
193
  bridge;
87
194
  allowedHosts;
195
+ allows;
196
+ nameOf;
88
197
  preservesWindows = true;
89
198
  /**
90
199
  * No remote hand in computer mode.
@@ -101,10 +210,50 @@ export class ComputerDriver {
101
210
  #observation;
102
211
  #picture;
103
212
  #generation = 0;
104
- constructor(settings, bridge = new NativeComputerBridge(), allowedHosts) {
213
+ /**
214
+ * `allows` is the controller's answer for an app: the owner's list, or an
215
+ * app the owner allowed once for the conversation acting now. Without it,
216
+ * the settings' list alone.
217
+ */
218
+ constructor(settings, bridge = new NativeComputerBridge(), allowedHosts, allows = (appId) => settings.allowedApps.includes(appId),
219
+ /** An app's display name for the agent's sentences. Absent or unknown: the bundle id. */
220
+ nameOf = async () => undefined) {
105
221
  this.settings = settings;
106
222
  this.bridge = bridge;
107
223
  this.allowedHosts = allowedHosts;
224
+ this.allows = allows;
225
+ this.nameOf = nameOf;
226
+ }
227
+ /**
228
+ * The helper, with its "not in front" refusal said to the agent: the owner's
229
+ * own window came forward (the dashboard, typically), and open brings the
230
+ * app back. Nothing was sent to either app.
231
+ */
232
+ async #run(input) {
233
+ try {
234
+ return await this.bridge.run(input);
235
+ }
236
+ catch (error) {
237
+ if (!(error instanceof BrowserPreconditionError) || !NOT_IN_FRONT.test(error.message))
238
+ throw error;
239
+ const appId = String(input.appId ?? this.#appId ?? '');
240
+ const name = async (id) => { try {
241
+ return (await this.nameOf(id)) || id;
242
+ }
243
+ catch {
244
+ return id;
245
+ } };
246
+ let front;
247
+ try {
248
+ const focused = await this.bridge.run({ operation: 'focused' });
249
+ front = typeof focused.appId === 'string' && focused.appId.trim() ? focused.appId.trim() : undefined;
250
+ }
251
+ catch {
252
+ front = undefined;
253
+ }
254
+ const inFront = front && front !== appId ? ` (${await name(front)} is)` : '';
255
+ throw new BrowserPreconditionError(`${await name(appId)} is no longer in front${inFront}. Call open with the same app to bring it forward, then observe again. No input was sent.`);
256
+ }
108
257
  }
109
258
  async start() {
110
259
  const permissions = await this.bridge.run({ operation: 'permissions', prompt: false });
@@ -120,7 +269,7 @@ export class ComputerDriver {
120
269
  }
121
270
  if (command.action === 'open' || command.action === 'navigate') {
122
271
  const appId = command.action === 'navigate' ? this.settings.browserApp : command.appId;
123
- if (!this.settings.allowedApps.includes(appId))
272
+ if (!this.allows(appId))
124
273
  throw new BrowserPreconditionError('This app is not owner-allowed. Ask the owner to add its bundle ID in Computer settings.');
125
274
  let url;
126
275
  if (command.action === 'navigate') {
@@ -170,14 +319,14 @@ export class ComputerDriver {
170
319
  ...(node ? { target: node } : {}), ...(command.target?.x !== undefined ? { x: command.target.x, y: command.target.y, imageHash: snapshot.imageHash } : {}),
171
320
  value: command.value, key: command.key, direction: command.direction };
172
321
  this.#invalidate(); // Never replay evidence once dispatch may have started.
173
- await this.bridge.run(input);
322
+ await this.#run(input);
174
323
  }
175
324
  async observe() {
176
325
  if (!this.#appId)
177
326
  throw new BrowserPreconditionError('No selected application. Open an allowed app first.');
178
327
  const generation = this.#generation;
179
328
  const appId = this.#appId;
180
- const snapshot = snapshotSchema.parse(await this.bridge.run({ operation: 'observe', appId }));
329
+ const snapshot = snapshotSchema.parse(await this.#run({ operation: 'observe', appId }));
181
330
  if (generation !== this.#generation)
182
331
  throw new Error('Computer observation cancelled');
183
332
  this.#snapshot = snapshot;
@@ -1 +1 @@
1
- {"version":3,"file":"computer.js","sourceRoot":"","sources":["../src/computer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAuC,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,wBAAwB,EAA6D,MAAM,YAAY,CAAC;AAEjH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,mBAAmB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,qBAAqB,CAAU,CAAC;AAC5K,gFAAgF;AAChF,MAAM,CAAC,MAAM,YAAY,GAAsB,CAAC,mBAAmB,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,mBAAmB,CAAC,CAAC;AAC5I,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,wGAAwG;IACxG,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC;IAC3E,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAC;IAC5D,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,mBAAmB,EAAE,kBAAkB,CAAC,CAAC;IAC5I,kGAAkG;IAClG,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,QAAQ,EAAE;CAClF,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,kDAAkD,CAAC,CAAC;AAQhI,6EAA6E;AAC7E,MAAM,UAAU,mBAAmB,CAAC,MAAyB,OAAO,CAAC,GAAG;IACtE,OAAO,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC;SACtF,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED,mFAAmF;AACnF,MAAM,OAAO,oBAAoB;IAEV;IADrB,SAAS,GAAG,IAAI,GAAG,EAAkC,CAAC;IACtD,YAAqB,aAAa,aAAa,CAAC,IAAI,GAAG,CAAC,+BAA+B,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAArF,eAAU,GAAV,UAAU,CAA2E;IAAG,CAAC;IAC9G,GAAG,CAAC,KAA8B;QAChC,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,wBAAwB,CAAC,qHAAqH,CAAC,CAAC,CAAC;QAC9M,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,mBAAmB,EAAE,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;YAC1G,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAC1B,MAAM,MAAM,GAAa,EAAE,CAAC;YAAC,IAAI,IAAI,GAAG,CAAC,CAAC;YAAC,IAAI,OAA0B,CAAC;YAC1E,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,OAAO,GAAG,IAAI,KAAK,CAAC,yFAAyF,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,KAAK,aAAa,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAChP,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBACxC,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC;gBACrB,IAAI,IAAI,GAAG,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;oBAAC,OAAO,GAAG,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;oBAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBAAC,CAAC;;oBACtH,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC1B,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,8CAA8C;YACrE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAClC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,OAAO,GAAG,IAAI,KAAK,CAAC,gCAAgC,KAAK,CAAC,OAAO,6CAA6C,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACnJ,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;gBACjC,YAAY,CAAC,KAAK,CAAC,CAAC;gBAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAClD,IAAI,OAAO,EAAE,CAAC;oBAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBAAC,OAAO;gBAAC,CAAC;gBACzC,IAAI,IAAI,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;oBAAC,MAAM,CAAC,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC,CAAC;oBAAC,OAAO;gBAAC,CAAC;gBACnI,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAA4B,CAAC;oBAC7F,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;wBAAE,MAAM,MAAM,CAAC,UAAU,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,wBAAwB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;oBAC/I,OAAO,CAAC,MAAM,CAAC,CAAC;gBAClB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAAC,CAAC;YACpC,CAAC,CAAC,CAAC;YACH,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;QACzC,CAAC,CAAC,CAAC;IACL,CAAC;IACD,MAAM,KAAW,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;CAC9E;AAED,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;IACpK,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AACrH,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAExN,MAAM,KAAK,GAA2B,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;AAEvP,MAAM,OAAO,cAAc;IAiBJ;IAAoC;IAA8D;IAhB9G,gBAAgB,GAAG,IAAI,CAAC;IACjC;;;;;;;OAOG;IACM,YAAY,GAAG,KAAK,CAAC;IACrB,WAAW,GAAG,0CAA0C,CAAC;IAClE,MAAM,CAAU;IAChB,SAAS,CAAY;IACrB,YAAY,CAAe;IAC3B,QAAQ,CAAU;IAClB,WAAW,GAAG,CAAC,CAAC;IAChB,YAAqB,QAAyB,EAAW,SAAyB,IAAI,oBAAoB,EAAE,EAAW,YAAgC;QAAlI,aAAQ,GAAR,QAAQ,CAAiB;QAAW,WAAM,GAAN,MAAM,CAA6C;QAAW,iBAAY,GAAZ,YAAY,CAAoB;IAAG,CAAC;IAC3J,KAAK,CAAC,KAAK;QACT,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAC;QACvF,IAAI,CAAC,WAAW,CAAC,aAAa,IAAI,CAAC,WAAW,CAAC,eAAe;YAAE,MAAM,IAAI,wBAAwB,CAAC,2KAA2K,CAAC,CAAC;IAClR,CAAC;IACD,WAAW,KAAW,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC;IAC7G,KAAK,CAAC,OAAO,CAAC,OAAuB;QACnC,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;YAAC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,OAAO;QAAC,CAAC;QAC/D,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAC/D,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,KAAM,CAAC;YACxF,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,MAAM,IAAI,wBAAwB,CAAC,yFAAyF,CAAC,CAAC;YAC9K,IAAI,GAAuB,CAAC;YAC5B,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBAClC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAI,CAAC,CAAC,GAAG,CAAC;gBAC3C,IAAI,IAAI,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC;oBAAE,MAAM,IAAI,wBAAwB,CAAC,uDAAuD,CAAC,CAAC;gBAC5K,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;YACrB,CAAC;YACD,IAAI,CAAC,WAAW,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,KAAK,UAAU,IAAI,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;YACzH,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACrF,IAAI,UAAU,KAAK,IAAI,CAAC,WAAW;gBAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;YAClF,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;YACpB,IAAI,GAAG;gBAAE,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACtH,OAAO;QACT,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,wBAAwB,CAAC,sDAAsD,CAAC,CAAC;QAC7G,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO;QACzC,IAAI,OAAO,CAAC,MAAM,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK;YAAE,MAAM,IAAI,wBAAwB,CAAC,yHAAyH,CAAC,CAAC;QAC3N,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,OAAO,CAAC,WAAW,KAAK,IAAI,CAAC,YAAY,EAAE,EAAE;YAAE,MAAM,IAAI,wBAAwB,CAAC,0DAA0D,CAAC,CAAC;QACrK,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;QAChC,IAAI,IAA2C,CAAC;QAChD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,SAAS,EAAE,CAAC;YACpC,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,QAAQ,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM;gBAAE,MAAM,IAAI,wBAAwB,CAAC,wEAAwE,CAAC,CAAC;QAC9P,CAAC;aAAM,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAC1B,IAAI,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;gBACvB,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACnD,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC9D,CAAC;iBAAM,CAAC;gBACN,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;gBACrK,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;oBAAE,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC9C,CAAC;YACD,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,wBAAwB,CAAC,gHAAgH,CAAC,CAAC;QAClM,CAAC;QACD,MAAM,KAAK,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ;YACvG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1J,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;QACzE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,wDAAwD;QAC5E,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,wBAAwB,CAAC,qDAAqD,CAAC,CAAC;QAC5G,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAC9F,IAAI,UAAU,KAAK,IAAI,CAAC,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACvF,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAClM,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACrD,IAAI,CAAC,YAAY,GAAG,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,SAAS,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK;YACzF,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,cAAc,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QAC7S,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IACD;;;;OAIG;IACH,QAAQ,CAAU;IAClB,KAAK,CAAC,eAAe;QACnB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QAC/D,MAAM,KAAK,GAAG,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,IAAI,CAAC,QAAQ,GAAG,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;QACjD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IACD;;;;;OAKG;IACH,KAAK,CAAC,UAAU,CAAC,KAAa;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC5B,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,wBAAwB,CAAC,yGAAyG,CAAC,CAAC;QAC1J,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC;QACpC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,wDAAwD;QAC5E,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACjE,IAAI,UAAU,KAAK,IAAI,CAAC,WAAW;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IACpF,CAAC;IACD,KAAK,CAAC,UAAU,KAAkC,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzE,KAAK,CAAC,KAAK,KAAoB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,wCAAwC,CAAC,CAAC;IACvI,KAAK,CAAC,QAAQ,KAAoB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IACjG,MAAM,KAAW,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;CACvC"}
1
+ {"version":3,"file":"computer.js","sourceRoot":"","sources":["../src/computer.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
- import type { ToolContext } from '@buddi/core/plugin';
1
+ import { type EffectDescription, type ToolContext } from '@buddi/core/plugin';
2
2
  import { BrowserManager } from './manager.js';
3
3
  import type { GuardedLookup } from './proxy.js';
4
- import { type ComputerBridge, type ControlSettings } from './computer.js';
4
+ import { type AppResolver, type ComputerBridge, type ControlSettings } from './computer.js';
5
5
  import { type ExtensionBridge } from './extension.js';
6
6
  import type { BrowserController, BrowserHandOffer, BrowserScope, BrowserStatus, BrowserRollover, SecretFillInput, SecretTypeInput } from './service.js';
7
- import type { BrowserCommand } from './types.js';
7
+ import { type BrowserCommand } from './types.js';
8
8
  import { type BrowserAvailability, type InstallOutcome, type LaunchCheck, type ProbeDeps } from './availability.js';
9
9
  /** Owner-only mode switch. No automatic fallback and no model-selected driver. */
10
10
  export declare class HostController implements BrowserController {
@@ -27,6 +27,8 @@ export declare class HostController implements BrowserController {
27
27
  installer?: (onLine: (line: string) => void) => Promise<InstallOutcome>;
28
28
  /** How the launch check launches. Injectable, so a test never opens a browser. */
29
29
  launch?: ProbeDeps['launch'];
30
+ /** How an app name or bundle id is found on this Mac. Defaults to Spotlight. Injectable for tests. */
31
+ resolveApp?: AppResolver;
30
32
  };
31
33
  constructor(dir: string, options?: {
32
34
  channel?: 'chrome';
@@ -45,6 +47,8 @@ export declare class HostController implements BrowserController {
45
47
  installer?: (onLine: (line: string) => void) => Promise<InstallOutcome>;
46
48
  /** How the launch check launches. Injectable, so a test never opens a browser. */
47
49
  launch?: ProbeDeps['launch'];
50
+ /** How an app name or bundle id is found on this Mac. Defaults to Spotlight. Injectable for tests. */
51
+ resolveApp?: AppResolver;
48
52
  });
49
53
  /**
50
54
  * The gateway hands its WebSocket endpoint over once it exists.
@@ -71,6 +75,19 @@ export declare class HostController implements BrowserController {
71
75
  checkLaunch(): Promise<LaunchCheck>;
72
76
  enable(): Promise<void>;
73
77
  status(scope?: BrowserScope): BrowserStatus;
78
+ /**
79
+ * Session for everything but an `open`, in computer mode, of an app the
80
+ * owner has not allowed: that one is gated, so the owner gets a card.
81
+ *
82
+ * Asked once per app and conversation, from core's own ledger: a yes Once
83
+ * lets it through (remembered here, too, for the screen guards), a no is
84
+ * refused without a second card, and a card still waiting is not doubled.
85
+ */
86
+ tierFor(command: BrowserCommand, ctx: ToolContext): Promise<{
87
+ tier: 'session' | 'gated';
88
+ reason?: string;
89
+ }>;
90
+ describe(command: BrowserCommand, ctx: ToolContext): Promise<EffectDescription>;
74
91
  screenshot(sessionId?: string): Buffer | undefined;
75
92
  hand(scope?: BrowserScope): BrowserHandOffer;
76
93
  rollover(input: BrowserRollover): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../src/controller.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,EAAwD,KAAK,cAAc,EAA4B,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAC1J,OAAO,EAAkC,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtF,OAAO,KAAK,EAAE,iBAAiB,EAAuB,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC7K,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAiK,KAAK,mBAAmB,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnR,kFAAkF;AAClF,qBAAa,cAAe,YAAW,iBAAiB;;IAU1C,QAAQ,CAAC,GAAG,EAAE,MAAM;IAAE,QAAQ,CAAC,OAAO,EAAE;QAClD,OAAO,CAAC,EAAE,QAAQ,CAAC;QAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QACrD,MAAM,CAAC,EAAE,MAAM,cAAc,CAAC;QAC9B,eAAe,CAAC,EAAE,MAAM,eAAe,CAAC;QACxC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,cAAc,CAAC;QACxD,MAAM,CAAC,EAAE,aAAa,CAAC;QACvB,mFAAmF;QACnF,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;QAC3B,wEAAwE;QACxE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;QACxB,8DAA8D;QAC9D,MAAM,CAAC,EAAE,MAAM,mBAAmB,CAAC;QACnC,6DAA6D;QAC7D,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;QACxE,kFAAkF;QAClF,MAAM,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;KAC9B;gBAhBoB,GAAG,EAAE,MAAM,EAAW,OAAO,GAAE;QAClD,OAAO,CAAC,EAAE,QAAQ,CAAC;QAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QACrD,MAAM,CAAC,EAAE,MAAM,cAAc,CAAC;QAC9B,eAAe,CAAC,EAAE,MAAM,eAAe,CAAC;QACxC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,cAAc,CAAC;QACxD,MAAM,CAAC,EAAE,aAAa,CAAC;QACvB,mFAAmF;QACnF,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;QAC3B,wEAAwE;QACxE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;QACxB,8DAA8D;QAC9D,MAAM,CAAC,EAAE,MAAM,mBAAmB,CAAC;QACnC,6DAA6D;QAC7D,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;QACxE,kFAAkF;QAClF,MAAM,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;KACzB;IACN;;;;;;;OAOG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,eAAe,GAAG,IAAI;IA6BjD;;;;OAIG;IACH,cAAc,IAAI,aAAa;IAqB/B;;;;;;OAMG;IACG,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC;IAanC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAW7B,MAAM,CAAC,KAAK,CAAC,EAAE,YAAY,GAAG,aAAa;IAM3C,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAClD,IAAI,CAAC,KAAK,CAAC,EAAE,YAAY,GAAG,gBAAgB;IAI5C,QAAQ,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO;IAInC,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAwBpE,UAAU,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAGtE,UAAU,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAGtE,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAIvG,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;IAiBjD,gBAAgB,CAAC,MAAM,UAAQ,GAAG,OAAO,CAAC,aAAa,CAAC;IAaxD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAChC"}
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../src/controller.ts"],"names":[],"mappings":"AAGA,OAAO,EAAe,KAAK,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAC3F,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,EAAmF,KAAK,WAAW,EAAE,KAAK,cAAc,EAA4B,KAAK,eAAe,EAAqB,MAAM,eAAe,CAAC;AAC1N,OAAO,EAAkC,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACtF,OAAO,KAAK,EAAE,iBAAiB,EAAuB,gBAAgB,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC7K,OAAO,EAA4B,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAiK,KAAK,mBAAmB,EAAE,KAAK,cAAc,EAAE,KAAK,WAAW,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAWnR,kFAAkF;AAClF,qBAAa,cAAe,YAAW,iBAAiB;;IAc1C,QAAQ,CAAC,GAAG,EAAE,MAAM;IAAE,QAAQ,CAAC,OAAO,EAAE;QAClD,OAAO,CAAC,EAAE,QAAQ,CAAC;QAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QACrD,MAAM,CAAC,EAAE,MAAM,cAAc,CAAC;QAC9B,eAAe,CAAC,EAAE,MAAM,eAAe,CAAC;QACxC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,cAAc,CAAC;QACxD,MAAM,CAAC,EAAE,aAAa,CAAC;QACvB,mFAAmF;QACnF,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;QAC3B,wEAAwE;QACxE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;QACxB,8DAA8D;QAC9D,MAAM,CAAC,EAAE,MAAM,mBAAmB,CAAC;QACnC,6DAA6D;QAC7D,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;QACxE,kFAAkF;QAClF,MAAM,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC7B,sGAAsG;QACtG,UAAU,CAAC,EAAE,WAAW,CAAC;KAC1B;gBAlBoB,GAAG,EAAE,MAAM,EAAW,OAAO,GAAE;QAClD,OAAO,CAAC,EAAE,QAAQ,CAAC;QAAC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;QACrD,MAAM,CAAC,EAAE,MAAM,cAAc,CAAC;QAC9B,eAAe,CAAC,EAAE,MAAM,eAAe,CAAC;QACxC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,cAAc,CAAC;QACxD,MAAM,CAAC,EAAE,aAAa,CAAC;QACvB,mFAAmF;QACnF,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;QAC3B,wEAAwE;QACxE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;QACxB,8DAA8D;QAC9D,MAAM,CAAC,EAAE,MAAM,mBAAmB,CAAC;QACnC,6DAA6D;QAC7D,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;QACxE,kFAAkF;QAClF,MAAM,CAAC,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;QAC7B,sGAAsG;QACtG,UAAU,CAAC,EAAE,WAAW,CAAC;KACrB;IACN;;;;;;;OAOG;IACH,YAAY,CAAC,MAAM,EAAE,MAAM,eAAe,GAAG,IAAI;IA8BjD;;;;OAIG;IACH,cAAc,IAAI,aAAa;IAqB/B;;;;;;OAMG;IACG,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC;IAanC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAW7B,MAAM,CAAC,KAAK,CAAC,EAAE,YAAY,GAAG,aAAa;IAoC3C;;;;;;;OAOG;IACG,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC;QAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAkB3G,QAAQ,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA+CrF,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAClD,IAAI,CAAC,KAAK,CAAC,EAAE,YAAY,GAAG,gBAAgB;IAI5C,QAAQ,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO;IAOnC,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAkCpE,UAAU,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAGtE,UAAU,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAGtE,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAIvG,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;IAiBjD,gBAAgB,CAAC,MAAM,UAAQ,GAAG,OAAO,CAAC,aAAa,CAAC;IAaxD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAChC"}
@@ -1,12 +1,20 @@
1
1
  import { mkdir, readFile, rename, writeFile } from 'node:fs/promises';
2
2
  import path from 'node:path';
3
3
  import { randomUUID } from 'node:crypto';
4
+ import { ToolRefusal } from '@buddi/core/plugin';
4
5
  import { BrowserManager } from './manager.js';
5
6
  import { PlaywrightHost } from './host.js';
6
7
  import { PlaywrightDriver } from './driver.js';
7
- import { ComputerDriver, NativeComputerBridge, settingsSchema } from './computer.js';
8
+ import { ComputerDriver, NativeComputerBridge, resolveApp, settingsSchema, spotlightApps } from './computer.js';
8
9
  import { ExtensionDriver, NOT_CONNECTED } from './extension.js';
10
+ import { BrowserPreconditionError } from './types.js';
9
11
  import { detectBrowser, HEADLESS_NOTE, installBrowser, InstallProgressReader, missingLibrariesMessage, needsHeadless, noSandboxMessage, NO_BROWSER_STATUS, probeLaunch } from './availability.js';
12
+ const UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i;
13
+ /** The one control an app card carries: how long the yes lasts. */
14
+ const REMEMBER = { key: 'remember', label: 'Allow', options: ['Once', 'Always'], default: 'Once' };
15
+ function isAppEnvelope(value) {
16
+ return typeof value === 'object' && value !== null && typeof value.allowApp === 'string';
17
+ }
10
18
  /** Owner-only mode switch. No automatic fallback and no model-selected driver. */
11
19
  export class HostController {
12
20
  dir;
@@ -20,6 +28,10 @@ export class HostController {
20
28
  #extension;
21
29
  #problem;
22
30
  #install;
31
+ /** Apps the owner allowed Once, by conversation. Memory only: the ledger answers again after a restart. */
32
+ #once = new Map();
33
+ /** The conversation whose `browser.act` is running, for the driver's app check. */
34
+ #acting;
23
35
  constructor(dir, options = {}) {
24
36
  this.dir = dir;
25
37
  this.options = options;
@@ -45,7 +57,7 @@ export class HostController {
45
57
  return new BrowserManager(() => new ExtensionDriver(this.#extension?.() ?? offline, this.options.allowedHosts), { controlFile: path.join(this.dir, 'control.json') });
46
58
  }
47
59
  if (this.#settings.mode === 'computer')
48
- return new BrowserManager(() => new ComputerDriver(this.#settings, this.options.bridge?.(), this.options.allowedHosts), {
60
+ return new BrowserManager(() => new ComputerDriver(this.#settings, this.options.bridge?.(), this.options.allowedHosts, (appId) => this.#allowed(appId, this.#acting), (appId) => this.#nameOf(appId)), {
49
61
  controlFile: path.join(this.dir, 'control.json'), maxSessions: 1, allowOpen: true,
50
62
  });
51
63
  const host = new PlaywrightHost({ profileDir: path.join(this.dir, 'profile'), channel: this.options.channel, allowedHosts: this.options.allowedHosts, ...(this.options.lookup ? { lookup: this.options.lookup } : {}),
@@ -138,7 +150,137 @@ export class HostController {
138
150
  const status = this.#manager.status(scope);
139
151
  const metadata = { mode: this.#settings.mode, settings: { ...this.#settings, allowedApps: [...this.#settings.allowedApps] }, permissions: this.#permissions,
140
152
  ...(this.#settings.mode === 'playwright' ? { browser: this.#engine() } : {}) };
141
- return { ...status, ...metadata, ...(status.sessions ? { sessions: status.sessions.map((session) => ({ ...session, ...metadata })) } : {}) };
153
+ const once = (entry) => {
154
+ const allowed = entry.session ? this.#once.get(entry.session.conversationId) : undefined;
155
+ return allowed?.size && entry.session ? { ...entry, session: { ...entry.session, allowedOnce: [...allowed] } } : entry;
156
+ };
157
+ return once({ ...status, ...metadata, ...(status.sessions ? { sessions: status.sessions.map((session) => once({ ...session, ...metadata })) } : {}) });
158
+ }
159
+ /** On the owner's list, or allowed Once in this conversation. */
160
+ #allowed(appId, conversationId) {
161
+ return this.#settings.allowedApps.includes(appId) || (conversationId !== undefined && this.#once.get(conversationId)?.has(appId) === true);
162
+ }
163
+ /** Display names already looked up, by bundle id, for the agent's sentences. */
164
+ #names = new Map();
165
+ #remember(app) { if (app.name !== app.bundleId)
166
+ this.#names.set(app.bundleId, app.name); return app; }
167
+ /** An app's display name, from an earlier lookup or Spotlight. Undefined when not found. */
168
+ async #nameOf(appId) {
169
+ const known = this.#names.get(appId);
170
+ if (known)
171
+ return known;
172
+ try {
173
+ return this.#remember(await resolveApp({ bundleId: appId }, this.options.resolveApp ?? spotlightApps)).name;
174
+ }
175
+ catch {
176
+ return undefined;
177
+ }
178
+ }
179
+ /** The app an `open` names, as found on this Mac. An allowed bundle id needs no lookup. */
180
+ async #resolve(command, conversationId) {
181
+ const resolver = this.options.resolveApp ?? spotlightApps;
182
+ if (command.app !== undefined)
183
+ return this.#remember(await resolveApp({ name: command.app }, resolver));
184
+ const appId = command.appId;
185
+ if (this.#allowed(appId, conversationId))
186
+ return { bundleId: appId, name: this.#names.get(appId) ?? appId };
187
+ return this.#remember(await resolveApp({ bundleId: appId }, resolver));
188
+ }
189
+ /** `#resolve`, with its refusal said as the tool's own sentence. */
190
+ async #resolveOrRefuse(command, conversationId) {
191
+ try {
192
+ return await this.#resolve(command, conversationId);
193
+ }
194
+ catch (error) {
195
+ throw error instanceof BrowserPreconditionError ? new ToolRefusal(error.message) : error;
196
+ }
197
+ }
198
+ /**
199
+ * Session for everything but an `open`, in computer mode, of an app the
200
+ * owner has not allowed: that one is gated, so the owner gets a card.
201
+ *
202
+ * Asked once per app and conversation, from core's own ledger: a yes Once
203
+ * lets it through (remembered here, too, for the screen guards), a no is
204
+ * refused without a second card, and a card still waiting is not doubled.
205
+ */
206
+ async tierFor(command, ctx) {
207
+ if (command.action !== 'open' || this.#settings.mode !== 'computer')
208
+ return { tier: 'session' };
209
+ const app = await this.#resolveOrRefuse(command, ctx.conversationId);
210
+ if (this.#allowed(app.bundleId, ctx.conversationId))
211
+ return { tier: 'session' };
212
+ const conversationId = ctx.conversationId;
213
+ if (conversationId && UUID.test(conversationId) && ctx.buddi?.approvals.decisionsInConversation) {
214
+ const cards = (await ctx.buddi.approvals.decisionsInConversation('browser.act', conversationId))
215
+ .filter((card) => isAppEnvelope(card.envelope) && card.envelope.allowApp === app.bundleId);
216
+ const last = cards.at(-1);
217
+ if (last?.state === 'rejected')
218
+ throw new ToolRefusal(`The owner said no to ${app.name} this time.`);
219
+ if (last?.state === 'pending')
220
+ throw new ToolRefusal(`The owner has not answered the card about ${app.name} yet. Tell them it is waiting, and wait.`);
221
+ if (last && ['approved', 'executing', 'succeeded'].includes(last.state) && (last.choices?.remember ?? 'Once') === 'Once') {
222
+ this.#allowOnce(conversationId, app.bundleId);
223
+ return { tier: 'session' };
224
+ }
225
+ }
226
+ return { tier: 'gated' };
227
+ }
228
+ async describe(command, ctx) {
229
+ // Always looked up, never read from an allowance: the executor describes
230
+ // again before it runs, and the card must say the same both times.
231
+ const app = await this.#resolveOrRefuse(command, undefined);
232
+ const agent = ctx.agentId ?? 'An agent';
233
+ const envelope = { tool: 'browser.act', allowApp: app.bundleId, name: app.name };
234
+ return {
235
+ envelope,
236
+ preview: `Use ${app.name} on your computer?\n${agent} wants to open ${app.name} (${app.bundleId}). While it works, buddi sees that window's screen and sends it to the model, as with the apps you allowed already.`,
237
+ choices: [{ ...REMEMBER, options: [...REMEMBER.options] }],
238
+ };
239
+ }
240
+ #allowOnce(conversationId, appId) {
241
+ const apps = this.#once.get(conversationId) ?? new Set();
242
+ apps.add(appId);
243
+ this.#once.set(conversationId, apps);
244
+ }
245
+ /**
246
+ * The owner said yes on the card. Once: this conversation. Always: the
247
+ * owner's list, written the way Settings writes it — without restarting
248
+ * the driver, since the agent's session is usually live. A full list falls
249
+ * back to Once and says so.
250
+ */
251
+ async #grant(command, ctx) {
252
+ if (this.#settings.mode !== 'computer')
253
+ throw new BrowserPreconditionError('Computer control is no longer on, so there is no app to allow. Ask the owner.');
254
+ if (!ctx.conversationId)
255
+ throw new Error('An app is allowed for a conversation, and this call has none.');
256
+ const app = await this.#resolve(command, undefined);
257
+ let remember = ctx.choices?.remember === 'Always' ? 'Always' : 'Once';
258
+ let note = '';
259
+ if (remember === 'Always' && !this.#settings.allowedApps.includes(app.bundleId)) {
260
+ if (this.#settings.allowedApps.length >= 32) {
261
+ remember = 'Once';
262
+ note = ' The list of apps is full (32), so it is allowed for this conversation only.';
263
+ }
264
+ else
265
+ await this.#writeSettings({ ...this.#settings, allowedApps: [...this.#settings.allowedApps, app.bundleId] });
266
+ }
267
+ if (remember === 'Once')
268
+ this.#allowOnce(ctx.conversationId, app.bundleId);
269
+ const how = remember === 'Always' ? 'Always: it is now on the list in Settings' : 'Once: for this conversation';
270
+ return {
271
+ allowed: { appId: app.bundleId, name: app.name, remember },
272
+ message: `Allowed ${app.name} (${how}).${note}`,
273
+ forAgent: `The owner allowed ${app.name} (${remember}). Nothing was opened yet: call browser.act {action:"open", appId:"${app.bundleId}"} again to open it.${note}`,
274
+ };
275
+ }
276
+ async #writeSettings(next) {
277
+ const parsed = settingsSchema.parse(next);
278
+ await mkdir(this.dir, { recursive: true, mode: 0o700 });
279
+ const file = path.join(this.dir, 'settings.json');
280
+ const temp = `${file}.${randomUUID()}.tmp`;
281
+ await writeFile(temp, JSON.stringify(parsed), { mode: 0o600 });
282
+ await rename(temp, file);
283
+ this.#settings = parsed;
142
284
  }
143
285
  screenshot(sessionId) { return this.#manager.screenshot(sessionId); }
144
286
  hand(scope) {
@@ -149,7 +291,13 @@ export class HostController {
149
291
  rollover(input) {
150
292
  if (this.#changing)
151
293
  throw new Error('Control settings are changing. Wait before continuing.');
152
- return this.#manager.rollover(input);
294
+ const moved = this.#manager.rollover(input);
295
+ const once = this.#once.get(input.previousConversationId);
296
+ if (moved && once) {
297
+ this.#once.delete(input.previousConversationId);
298
+ this.#once.set(input.conversationId, once);
299
+ }
300
+ return moved;
153
301
  }
154
302
  async execute(command, ctx) {
155
303
  if (this.#changing)
@@ -164,7 +312,24 @@ export class HostController {
164
312
  }
165
313
  if (this.#settings.mode !== 'computer' && (command.action === 'open' || command.target?.x !== undefined))
166
314
  throw new Error('Native apps and coordinate targets require Computer mode. Only the owner can change modes.');
167
- return this.#manager.execute(command, ctx);
315
+ // The owner's yes on an app card, run by core's executor: record it; the agent opens next.
316
+ if (ctx.actionId !== undefined && command.action === 'open')
317
+ return this.#grant(command, ctx);
318
+ let run = command;
319
+ if (command.action === 'open') {
320
+ const app = await this.#resolve(command, ctx.conversationId);
321
+ if (!this.#allowed(app.bundleId, ctx.conversationId))
322
+ throw new BrowserPreconditionError(`${app.name} is not allowed yet. Ask to open it again so the owner gets a card.`);
323
+ run = { ...command, appId: app.bundleId, app: undefined };
324
+ }
325
+ this.#acting = ctx.conversationId;
326
+ try {
327
+ return await this.#manager.execute(run, ctx);
328
+ }
329
+ finally {
330
+ if (this.#acting === ctx.conversationId)
331
+ this.#acting = undefined;
332
+ }
168
333
  }
169
334
  /**
170
335
  * The gates `execute` runs before anything reaches a manager, secret uses