@withbuddi/buddi 0.1.0-pre.43 → 0.1.0-pre.45

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 (695) hide show
  1. package/examples/agents/agent-father/agent.md +12 -5
  2. package/examples/agents/concierge/agent.md +11 -3
  3. package/extension/icons/128.png +0 -0
  4. package/extension/icons/16.png +0 -0
  5. package/extension/icons/32.png +0 -0
  6. package/extension/icons/48.png +0 -0
  7. package/extension/manifest.json +7 -3
  8. package/node_modules/@buddi/cli/dist/.tsbuildinfo +1 -1
  9. package/node_modules/@buddi/cli/dist/access-cmd.d.ts +2 -1
  10. package/node_modules/@buddi/cli/dist/access-cmd.d.ts.map +1 -1
  11. package/node_modules/@buddi/cli/dist/access-cmd.js +40 -7
  12. package/node_modules/@buddi/cli/dist/access-cmd.js.map +1 -1
  13. package/node_modules/@buddi/cli/dist/args.d.ts +2 -1
  14. package/node_modules/@buddi/cli/dist/args.d.ts.map +1 -1
  15. package/node_modules/@buddi/cli/dist/args.js +7 -3
  16. package/node_modules/@buddi/cli/dist/args.js.map +1 -1
  17. package/node_modules/@buddi/cli/dist/commands.d.ts.map +1 -1
  18. package/node_modules/@buddi/cli/dist/commands.js +3 -2
  19. package/node_modules/@buddi/cli/dist/commands.js.map +1 -1
  20. package/node_modules/@buddi/cli/dist/main.js +1 -1
  21. package/node_modules/@buddi/cli/dist/main.js.map +1 -1
  22. package/node_modules/@buddi/cli/dist/mcp/server.js +1 -1
  23. package/node_modules/@buddi/cli/dist/mcp/server.js.map +1 -1
  24. package/node_modules/@buddi/cli/dist/mcp/tools.d.ts.map +1 -1
  25. package/node_modules/@buddi/cli/dist/mcp/tools.js +60 -0
  26. package/node_modules/@buddi/cli/dist/mcp/tools.js.map +1 -1
  27. package/node_modules/@buddi/core/dist/.tsbuildinfo +1 -1
  28. package/node_modules/@buddi/core/dist/lock.d.ts +15 -1
  29. package/node_modules/@buddi/core/dist/lock.d.ts.map +1 -1
  30. package/node_modules/@buddi/core/dist/lock.js +15 -1
  31. package/node_modules/@buddi/core/dist/lock.js.map +1 -1
  32. package/node_modules/@buddi/core/dist/pages.d.ts +75 -0
  33. package/node_modules/@buddi/core/dist/pages.d.ts.map +1 -1
  34. package/node_modules/@buddi/core/dist/pages.js +14 -0
  35. package/node_modules/@buddi/core/dist/pages.js.map +1 -1
  36. package/node_modules/@buddi/core/dist/plugin/index.d.ts +2 -2
  37. package/node_modules/@buddi/core/dist/plugin/index.d.ts.map +1 -1
  38. package/node_modules/@buddi/core/dist/plugin/index.js.map +1 -1
  39. package/node_modules/@buddi/core/dist/plugin/version.d.ts +1 -1
  40. package/node_modules/@buddi/core/dist/plugin/version.js +1 -1
  41. package/node_modules/@buddi/core/dist/provider-accounts.d.ts +32 -0
  42. package/node_modules/@buddi/core/dist/provider-accounts.d.ts.map +1 -1
  43. package/node_modules/@buddi/core/dist/provider-accounts.js +22 -0
  44. package/node_modules/@buddi/core/dist/provider-accounts.js.map +1 -1
  45. package/node_modules/@buddi/core/dist/tools.d.ts +6 -1
  46. package/node_modules/@buddi/core/dist/tools.d.ts.map +1 -1
  47. package/node_modules/@buddi/core/dist/tools.js.map +1 -1
  48. package/node_modules/@buddi/core/migrations/077_lock_background_portrait.sql +5 -0
  49. package/node_modules/@buddi/gateway/dist/.tsbuildinfo +1 -1
  50. package/node_modules/@buddi/gateway/dist/agents/agent-intro.d.ts +31 -0
  51. package/node_modules/@buddi/gateway/dist/agents/agent-intro.d.ts.map +1 -0
  52. package/node_modules/@buddi/gateway/dist/agents/agent-intro.js +116 -0
  53. package/node_modules/@buddi/gateway/dist/agents/agent-intro.js.map +1 -0
  54. package/node_modules/@buddi/gateway/dist/agents/delegation.d.ts +10 -0
  55. package/node_modules/@buddi/gateway/dist/agents/delegation.d.ts.map +1 -1
  56. package/node_modules/@buddi/gateway/dist/agents/delegation.js +18 -1
  57. package/node_modules/@buddi/gateway/dist/agents/delegation.js.map +1 -1
  58. package/node_modules/@buddi/gateway/dist/agents/owner-tools.d.ts +21 -8
  59. package/node_modules/@buddi/gateway/dist/agents/owner-tools.d.ts.map +1 -1
  60. package/node_modules/@buddi/gateway/dist/agents/owner-tools.js +201 -36
  61. package/node_modules/@buddi/gateway/dist/agents/owner-tools.js.map +1 -1
  62. package/node_modules/@buddi/gateway/dist/agents/platform.d.ts +14 -1
  63. package/node_modules/@buddi/gateway/dist/agents/platform.d.ts.map +1 -1
  64. package/node_modules/@buddi/gateway/dist/agents/platform.js +44 -11
  65. package/node_modules/@buddi/gateway/dist/agents/platform.js.map +1 -1
  66. package/node_modules/@buddi/gateway/dist/bootstrap.d.ts.map +1 -1
  67. package/node_modules/@buddi/gateway/dist/bootstrap.js +2 -0
  68. package/node_modules/@buddi/gateway/dist/bootstrap.js.map +1 -1
  69. package/node_modules/@buddi/gateway/dist/edition-origin.d.ts +57 -0
  70. package/node_modules/@buddi/gateway/dist/edition-origin.d.ts.map +1 -0
  71. package/node_modules/@buddi/gateway/dist/edition-origin.js +156 -0
  72. package/node_modules/@buddi/gateway/dist/edition-origin.js.map +1 -0
  73. package/node_modules/@buddi/gateway/dist/evals/golden.d.ts +5 -0
  74. package/node_modules/@buddi/gateway/dist/evals/golden.d.ts.map +1 -1
  75. package/node_modules/@buddi/gateway/dist/evals/golden.js +48 -0
  76. package/node_modules/@buddi/gateway/dist/evals/golden.js.map +1 -1
  77. package/node_modules/@buddi/gateway/dist/mcp/requests.d.ts +8 -2
  78. package/node_modules/@buddi/gateway/dist/mcp/requests.d.ts.map +1 -1
  79. package/node_modules/@buddi/gateway/dist/mcp/requests.js +74 -1
  80. package/node_modules/@buddi/gateway/dist/mcp/requests.js.map +1 -1
  81. package/node_modules/@buddi/gateway/dist/owner-profile-edit.d.ts +160 -0
  82. package/node_modules/@buddi/gateway/dist/owner-profile-edit.d.ts.map +1 -0
  83. package/node_modules/@buddi/gateway/dist/owner-profile-edit.js +296 -0
  84. package/node_modules/@buddi/gateway/dist/owner-profile-edit.js.map +1 -0
  85. package/node_modules/@buddi/gateway/dist/provider-accounts.d.ts.map +1 -1
  86. package/node_modules/@buddi/gateway/dist/provider-accounts.js +2 -1
  87. package/node_modules/@buddi/gateway/dist/provider-accounts.js.map +1 -1
  88. package/node_modules/@buddi/gateway/dist/system-context.d.ts +9 -0
  89. package/node_modules/@buddi/gateway/dist/system-context.d.ts.map +1 -1
  90. package/node_modules/@buddi/gateway/dist/system-context.js +28 -2
  91. package/node_modules/@buddi/gateway/dist/system-context.js.map +1 -1
  92. package/node_modules/@buddi/gateway/dist/telegram/approvals.d.ts +6 -0
  93. package/node_modules/@buddi/gateway/dist/telegram/approvals.d.ts.map +1 -1
  94. package/node_modules/@buddi/gateway/dist/telegram/approvals.js +10 -2
  95. package/node_modules/@buddi/gateway/dist/telegram/approvals.js.map +1 -1
  96. package/node_modules/@buddi/gateway/dist/telegram/main.d.ts.map +1 -1
  97. package/node_modules/@buddi/gateway/dist/telegram/main.js +10 -3
  98. package/node_modules/@buddi/gateway/dist/telegram/main.js.map +1 -1
  99. package/node_modules/@buddi/gateway/dist/telegram/outbound.d.ts +9 -0
  100. package/node_modules/@buddi/gateway/dist/telegram/outbound.d.ts.map +1 -1
  101. package/node_modules/@buddi/gateway/dist/telegram/outbound.js +43 -0
  102. package/node_modules/@buddi/gateway/dist/telegram/outbound.js.map +1 -1
  103. package/node_modules/@buddi/gateway/dist/telegram/surface.d.ts +2 -0
  104. package/node_modules/@buddi/gateway/dist/telegram/surface.d.ts.map +1 -1
  105. package/node_modules/@buddi/gateway/dist/telegram/surface.js +2 -1
  106. package/node_modules/@buddi/gateway/dist/telegram/surface.js.map +1 -1
  107. package/node_modules/@buddi/gateway/dist/tips/engine.d.ts +32 -0
  108. package/node_modules/@buddi/gateway/dist/tips/engine.d.ts.map +1 -1
  109. package/node_modules/@buddi/gateway/dist/tips/engine.js +69 -0
  110. package/node_modules/@buddi/gateway/dist/tips/engine.js.map +1 -1
  111. package/node_modules/@buddi/gateway/dist/tips/route.d.ts +1 -3
  112. package/node_modules/@buddi/gateway/dist/tips/route.d.ts.map +1 -1
  113. package/node_modules/@buddi/gateway/dist/tips/route.js +54 -30
  114. package/node_modules/@buddi/gateway/dist/tips/route.js.map +1 -1
  115. package/node_modules/@buddi/gateway/dist/web/access/cloudflare-connector.d.ts +63 -0
  116. package/node_modules/@buddi/gateway/dist/web/access/cloudflare-connector.d.ts.map +1 -0
  117. package/node_modules/@buddi/gateway/dist/web/access/cloudflare-connector.js +87 -0
  118. package/node_modules/@buddi/gateway/dist/web/access/cloudflare-connector.js.map +1 -0
  119. package/node_modules/@buddi/gateway/dist/web/access/cloudflare-setup.d.ts +39 -4
  120. package/node_modules/@buddi/gateway/dist/web/access/cloudflare-setup.d.ts.map +1 -1
  121. package/node_modules/@buddi/gateway/dist/web/access/cloudflare-setup.js +99 -11
  122. package/node_modules/@buddi/gateway/dist/web/access/cloudflare-setup.js.map +1 -1
  123. package/node_modules/@buddi/gateway/dist/web/access/cloudflare-token.js +1 -1
  124. package/node_modules/@buddi/gateway/dist/web/access/cloudflare-token.js.map +1 -1
  125. package/node_modules/@buddi/gateway/dist/web/access/index.d.ts +1 -0
  126. package/node_modules/@buddi/gateway/dist/web/access/index.d.ts.map +1 -1
  127. package/node_modules/@buddi/gateway/dist/web/access/index.js +1 -0
  128. package/node_modules/@buddi/gateway/dist/web/access/index.js.map +1 -1
  129. package/node_modules/@buddi/gateway/dist/web/agent-offers.d.ts +10 -1
  130. package/node_modules/@buddi/gateway/dist/web/agent-offers.d.ts.map +1 -1
  131. package/node_modules/@buddi/gateway/dist/web/agent-offers.js +14 -1
  132. package/node_modules/@buddi/gateway/dist/web/agent-offers.js.map +1 -1
  133. package/node_modules/@buddi/gateway/dist/web/api-routes.d.ts.map +1 -1
  134. package/node_modules/@buddi/gateway/dist/web/api-routes.js +37 -8
  135. package/node_modules/@buddi/gateway/dist/web/api-routes.js.map +1 -1
  136. package/node_modules/@buddi/gateway/dist/web/approval-ask.d.ts +16 -0
  137. package/node_modules/@buddi/gateway/dist/web/approval-ask.d.ts.map +1 -0
  138. package/node_modules/@buddi/gateway/dist/web/approval-ask.js +51 -0
  139. package/node_modules/@buddi/gateway/dist/web/approval-ask.js.map +1 -0
  140. package/node_modules/@buddi/gateway/dist/web/chat.d.ts +6 -0
  141. package/node_modules/@buddi/gateway/dist/web/chat.d.ts.map +1 -1
  142. package/node_modules/@buddi/gateway/dist/web/chat.js +4 -0
  143. package/node_modules/@buddi/gateway/dist/web/chat.js.map +1 -1
  144. package/node_modules/@buddi/gateway/dist/web/live.d.ts +7 -0
  145. package/node_modules/@buddi/gateway/dist/web/live.d.ts.map +1 -1
  146. package/node_modules/@buddi/gateway/dist/web/live.js +12 -0
  147. package/node_modules/@buddi/gateway/dist/web/live.js.map +1 -1
  148. package/node_modules/@buddi/gateway/dist/web/lock-backgrounds.d.ts +9 -0
  149. package/node_modules/@buddi/gateway/dist/web/lock-backgrounds.d.ts.map +1 -0
  150. package/node_modules/@buddi/gateway/dist/web/lock-backgrounds.js +60 -0
  151. package/node_modules/@buddi/gateway/dist/web/lock-backgrounds.js.map +1 -0
  152. package/node_modules/@buddi/gateway/dist/web/lock.d.ts +13 -1
  153. package/node_modules/@buddi/gateway/dist/web/lock.d.ts.map +1 -1
  154. package/node_modules/@buddi/gateway/dist/web/lock.js +84 -23
  155. package/node_modules/@buddi/gateway/dist/web/lock.js.map +1 -1
  156. package/node_modules/@buddi/gateway/dist/web/places.d.ts +5 -0
  157. package/node_modules/@buddi/gateway/dist/web/places.d.ts.map +1 -1
  158. package/node_modules/@buddi/gateway/dist/web/places.js +11 -4
  159. package/node_modules/@buddi/gateway/dist/web/places.js.map +1 -1
  160. package/node_modules/@buddi/gateway/dist/web/server.d.ts +3 -0
  161. package/node_modules/@buddi/gateway/dist/web/server.d.ts.map +1 -1
  162. package/node_modules/@buddi/gateway/dist/web/server.js +63 -50
  163. package/node_modules/@buddi/gateway/dist/web/server.js.map +1 -1
  164. package/node_modules/@buddi/install/dist/.tsbuildinfo +1 -1
  165. package/node_modules/@buddi/install/dist/cloudflared.d.ts +121 -0
  166. package/node_modules/@buddi/install/dist/cloudflared.d.ts.map +1 -0
  167. package/node_modules/@buddi/install/dist/cloudflared.js +451 -0
  168. package/node_modules/@buddi/install/dist/cloudflared.js.map +1 -0
  169. package/node_modules/@buddi/install/dist/index.d.ts +1 -0
  170. package/node_modules/@buddi/install/dist/index.d.ts.map +1 -1
  171. package/node_modules/@buddi/install/dist/index.js +1 -0
  172. package/node_modules/@buddi/install/dist/index.js.map +1 -1
  173. package/node_modules/@buddi/install/dist/supervisor.d.ts +6 -1
  174. package/node_modules/@buddi/install/dist/supervisor.d.ts.map +1 -1
  175. package/node_modules/@buddi/install/dist/supervisor.js +51 -5
  176. package/node_modules/@buddi/install/dist/supervisor.js.map +1 -1
  177. package/node_modules/@buddi/runtime/dist/.tsbuildinfo +1 -1
  178. package/node_modules/@buddi/runtime/dist/codex-direct.d.ts +1 -1
  179. package/node_modules/@buddi/runtime/dist/codex-direct.js +1 -1
  180. package/node_modules/@buddi/runtime/dist/grounding.d.ts +54 -0
  181. package/node_modules/@buddi/runtime/dist/grounding.d.ts.map +1 -0
  182. package/node_modules/@buddi/runtime/dist/grounding.js +158 -0
  183. package/node_modules/@buddi/runtime/dist/grounding.js.map +1 -0
  184. package/node_modules/@buddi/runtime/dist/index.d.ts +1 -0
  185. package/node_modules/@buddi/runtime/dist/index.d.ts.map +1 -1
  186. package/node_modules/@buddi/runtime/dist/index.js +1 -0
  187. package/node_modules/@buddi/runtime/dist/index.js.map +1 -1
  188. package/node_modules/@buddi/runtime/dist/loop.d.ts +13 -0
  189. package/node_modules/@buddi/runtime/dist/loop.d.ts.map +1 -1
  190. package/node_modules/@buddi/runtime/dist/loop.js +98 -3
  191. package/node_modules/@buddi/runtime/dist/loop.js.map +1 -1
  192. package/node_modules/@buddi/tool-artifacts/dist/.tsbuildinfo +1 -1
  193. package/node_modules/@buddi/tool-browser/dist/.tsbuildinfo +1 -1
  194. package/node_modules/@buddi/tool-email/dist/.tsbuildinfo +1 -1
  195. package/node_modules/@buddi/tool-email/dist/agent.d.ts +6 -1
  196. package/node_modules/@buddi/tool-email/dist/agent.d.ts.map +1 -1
  197. package/node_modules/@buddi/tool-email/dist/agent.js +6 -1
  198. package/node_modules/@buddi/tool-email/dist/agent.js.map +1 -1
  199. package/node_modules/@buddi/tool-email/dist/html.d.ts +16 -0
  200. package/node_modules/@buddi/tool-email/dist/html.d.ts.map +1 -0
  201. package/node_modules/@buddi/tool-email/dist/html.js +273 -0
  202. package/node_modules/@buddi/tool-email/dist/html.js.map +1 -0
  203. package/node_modules/@buddi/tool-email/dist/imap/fake.d.ts +8 -0
  204. package/node_modules/@buddi/tool-email/dist/imap/fake.d.ts.map +1 -1
  205. package/node_modules/@buddi/tool-email/dist/imap/fake.js +15 -0
  206. package/node_modules/@buddi/tool-email/dist/imap/fake.js.map +1 -1
  207. package/node_modules/@buddi/tool-email/dist/imap/imapflow-client.d.ts +7 -0
  208. package/node_modules/@buddi/tool-email/dist/imap/imapflow-client.d.ts.map +1 -1
  209. package/node_modules/@buddi/tool-email/dist/imap/imapflow-client.js +79 -17
  210. package/node_modules/@buddi/tool-email/dist/imap/imapflow-client.js.map +1 -1
  211. package/node_modules/@buddi/tool-email/dist/index.d.ts +5 -1
  212. package/node_modules/@buddi/tool-email/dist/index.d.ts.map +1 -1
  213. package/node_modules/@buddi/tool-email/dist/index.js +11 -3
  214. package/node_modules/@buddi/tool-email/dist/index.js.map +1 -1
  215. package/node_modules/@buddi/tool-email/dist/mail.d.ts.map +1 -1
  216. package/node_modules/@buddi/tool-email/dist/mail.js +7 -0
  217. package/node_modules/@buddi/tool-email/dist/mail.js.map +1 -1
  218. package/node_modules/@buddi/tool-email/dist/pages/descriptors.d.ts.map +1 -1
  219. package/node_modules/@buddi/tool-email/dist/pages/descriptors.js +208 -176
  220. package/node_modules/@buddi/tool-email/dist/pages/descriptors.js.map +1 -1
  221. package/node_modules/@buddi/tool-email/dist/pages/index.d.ts +3 -1
  222. package/node_modules/@buddi/tool-email/dist/pages/index.d.ts.map +1 -1
  223. package/node_modules/@buddi/tool-email/dist/pages/index.js +5 -2
  224. package/node_modules/@buddi/tool-email/dist/pages/index.js.map +1 -1
  225. package/node_modules/@buddi/tool-email/dist/pages/queries.d.ts +17 -3
  226. package/node_modules/@buddi/tool-email/dist/pages/queries.d.ts.map +1 -1
  227. package/node_modules/@buddi/tool-email/dist/pages/queries.js +283 -62
  228. package/node_modules/@buddi/tool-email/dist/pages/queries.js.map +1 -1
  229. package/node_modules/@buddi/tool-email/dist/pages/thread-tools.d.ts +25 -0
  230. package/node_modules/@buddi/tool-email/dist/pages/thread-tools.d.ts.map +1 -0
  231. package/node_modules/@buddi/tool-email/dist/pages/thread-tools.js +33 -0
  232. package/node_modules/@buddi/tool-email/dist/pages/thread-tools.js.map +1 -0
  233. package/node_modules/@buddi/tool-email/dist/ports.d.ts +25 -0
  234. package/node_modules/@buddi/tool-email/dist/ports.d.ts.map +1 -1
  235. package/node_modules/@buddi/tool-email/dist/ports.js.map +1 -1
  236. package/node_modules/@buddi/tool-email/dist/retention.d.ts.map +1 -1
  237. package/node_modules/@buddi/tool-email/dist/retention.js +1 -0
  238. package/node_modules/@buddi/tool-email/dist/retention.js.map +1 -1
  239. package/node_modules/@buddi/tool-email/dist/sources/inbox-poll.d.ts +9 -1
  240. package/node_modules/@buddi/tool-email/dist/sources/inbox-poll.d.ts.map +1 -1
  241. package/node_modules/@buddi/tool-email/dist/sources/inbox-poll.js +5 -2
  242. package/node_modules/@buddi/tool-email/dist/sources/inbox-poll.js.map +1 -1
  243. package/node_modules/@buddi/tool-email/dist/text-cleanup.d.ts +69 -0
  244. package/node_modules/@buddi/tool-email/dist/text-cleanup.d.ts.map +1 -0
  245. package/node_modules/@buddi/tool-email/dist/text-cleanup.js +96 -0
  246. package/node_modules/@buddi/tool-email/dist/text-cleanup.js.map +1 -0
  247. package/node_modules/@buddi/tool-email/dist/text.d.ts +29 -0
  248. package/node_modules/@buddi/tool-email/dist/text.d.ts.map +1 -0
  249. package/node_modules/@buddi/tool-email/dist/text.js +153 -0
  250. package/node_modules/@buddi/tool-email/dist/text.js.map +1 -0
  251. package/node_modules/@buddi/tool-email/dist/worker.d.ts +64 -0
  252. package/node_modules/@buddi/tool-email/dist/worker.d.ts.map +1 -0
  253. package/node_modules/@buddi/tool-email/dist/worker.js +123 -0
  254. package/node_modules/@buddi/tool-email/dist/worker.js.map +1 -0
  255. package/node_modules/@buddi/tool-email/migrations/028_reading.sql +23 -0
  256. package/node_modules/@buddi/tool-email/package.json +1 -0
  257. package/node_modules/@buddi/tool-host/dist/.tsbuildinfo +1 -1
  258. package/node_modules/@buddi/tool-mcp/dist/.tsbuildinfo +1 -1
  259. package/node_modules/@buddi/tool-memory/dist/.tsbuildinfo +1 -1
  260. package/node_modules/@buddi/tool-web/dist/.tsbuildinfo +1 -1
  261. package/node_modules/entities/LICENSE +11 -0
  262. package/node_modules/entities/decode.d.ts +1 -0
  263. package/node_modules/entities/decode.js +3 -0
  264. package/node_modules/entities/dist/commonjs/decode-codepoint.d.ts +19 -0
  265. package/node_modules/entities/dist/commonjs/decode-codepoint.d.ts.map +1 -0
  266. package/node_modules/entities/dist/commonjs/decode-codepoint.js +77 -0
  267. package/node_modules/entities/dist/commonjs/decode-codepoint.js.map +1 -0
  268. package/node_modules/entities/dist/commonjs/decode.d.ts +209 -0
  269. package/node_modules/entities/dist/commonjs/decode.d.ts.map +1 -0
  270. package/node_modules/entities/dist/commonjs/decode.js +511 -0
  271. package/node_modules/entities/dist/commonjs/decode.js.map +1 -0
  272. package/node_modules/entities/dist/commonjs/encode.d.ts +22 -0
  273. package/node_modules/entities/dist/commonjs/encode.d.ts.map +1 -0
  274. package/node_modules/entities/dist/commonjs/encode.js +73 -0
  275. package/node_modules/entities/dist/commonjs/encode.js.map +1 -0
  276. package/node_modules/entities/dist/commonjs/escape.d.ts +43 -0
  277. package/node_modules/entities/dist/commonjs/escape.d.ts.map +1 -0
  278. package/node_modules/entities/dist/commonjs/escape.js +121 -0
  279. package/node_modules/entities/dist/commonjs/escape.js.map +1 -0
  280. package/node_modules/entities/dist/commonjs/generated/decode-data-html.d.ts +2 -0
  281. package/node_modules/entities/dist/commonjs/generated/decode-data-html.d.ts.map +1 -0
  282. package/node_modules/entities/dist/commonjs/generated/decode-data-html.js +10 -0
  283. package/node_modules/entities/dist/commonjs/generated/decode-data-html.js.map +1 -0
  284. package/node_modules/entities/dist/commonjs/generated/decode-data-xml.d.ts +2 -0
  285. package/node_modules/entities/dist/commonjs/generated/decode-data-xml.d.ts.map +1 -0
  286. package/node_modules/entities/dist/commonjs/generated/decode-data-xml.js +10 -0
  287. package/node_modules/entities/dist/commonjs/generated/decode-data-xml.js.map +1 -0
  288. package/node_modules/entities/dist/commonjs/generated/encode-html.d.ts +8 -0
  289. package/node_modules/entities/dist/commonjs/generated/encode-html.d.ts.map +1 -0
  290. package/node_modules/entities/dist/commonjs/generated/encode-html.js +13 -0
  291. package/node_modules/entities/dist/commonjs/generated/encode-html.js.map +1 -0
  292. package/node_modules/entities/dist/commonjs/index.d.ts +96 -0
  293. package/node_modules/entities/dist/commonjs/index.d.ts.map +1 -0
  294. package/node_modules/entities/dist/commonjs/index.js +131 -0
  295. package/node_modules/entities/dist/commonjs/index.js.map +1 -0
  296. package/node_modules/entities/dist/commonjs/package.json +3 -0
  297. package/node_modules/entities/dist/esm/decode-codepoint.d.ts +19 -0
  298. package/node_modules/entities/dist/esm/decode-codepoint.d.ts.map +1 -0
  299. package/node_modules/entities/dist/esm/decode-codepoint.js +72 -0
  300. package/node_modules/entities/dist/esm/decode-codepoint.js.map +1 -0
  301. package/node_modules/entities/dist/esm/decode.d.ts +209 -0
  302. package/node_modules/entities/dist/esm/decode.d.ts.map +1 -0
  303. package/node_modules/entities/dist/esm/decode.js +497 -0
  304. package/node_modules/entities/dist/esm/decode.js.map +1 -0
  305. package/node_modules/entities/dist/esm/encode.d.ts +22 -0
  306. package/node_modules/entities/dist/esm/encode.d.ts.map +1 -0
  307. package/node_modules/entities/dist/esm/encode.js +69 -0
  308. package/node_modules/entities/dist/esm/encode.js.map +1 -0
  309. package/node_modules/entities/dist/esm/escape.d.ts +43 -0
  310. package/node_modules/entities/dist/esm/escape.d.ts.map +1 -0
  311. package/node_modules/entities/dist/esm/escape.js +117 -0
  312. package/node_modules/entities/dist/esm/escape.js.map +1 -0
  313. package/node_modules/entities/dist/esm/generated/decode-data-html.d.ts +2 -0
  314. package/node_modules/entities/dist/esm/generated/decode-data-html.d.ts.map +1 -0
  315. package/node_modules/entities/dist/esm/generated/decode-data-html.js +7 -0
  316. package/node_modules/entities/dist/esm/generated/decode-data-html.js.map +1 -0
  317. package/node_modules/entities/dist/esm/generated/decode-data-xml.d.ts +2 -0
  318. package/node_modules/entities/dist/esm/generated/decode-data-xml.d.ts.map +1 -0
  319. package/node_modules/entities/dist/esm/generated/decode-data-xml.js +7 -0
  320. package/node_modules/entities/dist/esm/generated/decode-data-xml.js.map +1 -0
  321. package/node_modules/entities/dist/esm/generated/encode-html.d.ts +8 -0
  322. package/node_modules/entities/dist/esm/generated/encode-html.d.ts.map +1 -0
  323. package/node_modules/entities/dist/esm/generated/encode-html.js +10 -0
  324. package/node_modules/entities/dist/esm/generated/encode-html.js.map +1 -0
  325. package/node_modules/entities/dist/esm/index.d.ts +96 -0
  326. package/node_modules/entities/dist/esm/index.d.ts.map +1 -0
  327. package/node_modules/entities/dist/esm/index.js +107 -0
  328. package/node_modules/entities/dist/esm/index.js.map +1 -0
  329. package/node_modules/entities/dist/esm/package.json +3 -0
  330. package/node_modules/entities/escape.d.ts +1 -0
  331. package/node_modules/entities/escape.js +3 -0
  332. package/node_modules/entities/package.json +118 -0
  333. package/node_modules/entities/readme.md +122 -0
  334. package/node_modules/entities/src/decode-codepoint.ts +81 -0
  335. package/node_modules/entities/src/decode.spec.ts +320 -0
  336. package/node_modules/entities/src/decode.ts +620 -0
  337. package/node_modules/entities/src/encode.spec.ts +78 -0
  338. package/node_modules/entities/src/encode.ts +77 -0
  339. package/node_modules/entities/src/escape.spec.ts +14 -0
  340. package/node_modules/entities/src/escape.ts +148 -0
  341. package/node_modules/entities/src/generated/.eslintrc.json +10 -0
  342. package/node_modules/entities/src/generated/decode-data-html.ts +8 -0
  343. package/node_modules/entities/src/generated/decode-data-xml.ts +8 -0
  344. package/node_modules/entities/src/generated/encode-html.ts +17 -0
  345. package/node_modules/entities/src/index.spec.ts +125 -0
  346. package/node_modules/entities/src/index.ts +188 -0
  347. package/node_modules/marked/bin/main.js +1 -1
  348. package/node_modules/marked/lib/marked.d.ts +7 -0
  349. package/node_modules/marked/lib/marked.esm.js +14 -14
  350. package/node_modules/marked/lib/marked.esm.js.map +3 -3
  351. package/node_modules/marked/lib/marked.umd.js +19 -19
  352. package/node_modules/marked/lib/marked.umd.js.map +3 -3
  353. package/node_modules/marked/man/marked.1 +1 -1
  354. package/node_modules/marked/package.json +1 -1
  355. package/node_modules/parse5/LICENSE +19 -0
  356. package/node_modules/parse5/README.md +38 -0
  357. package/node_modules/parse5/dist/cjs/common/doctype.d.ts +4 -0
  358. package/node_modules/parse5/dist/cjs/common/doctype.js +118 -0
  359. package/node_modules/parse5/dist/cjs/common/error-codes.d.ts +67 -0
  360. package/node_modules/parse5/dist/cjs/common/error-codes.js +66 -0
  361. package/node_modules/parse5/dist/cjs/common/foreign-content.d.ts +9 -0
  362. package/node_modules/parse5/dist/cjs/common/foreign-content.js +237 -0
  363. package/node_modules/parse5/dist/cjs/common/html.d.ts +289 -0
  364. package/node_modules/parse5/dist/cjs/common/html.js +528 -0
  365. package/node_modules/parse5/dist/cjs/common/token.d.ts +84 -0
  366. package/node_modules/parse5/dist/cjs/common/token.js +24 -0
  367. package/node_modules/parse5/dist/cjs/common/unicode.d.ts +42 -0
  368. package/node_modules/parse5/dist/cjs/common/unicode.js +70 -0
  369. package/node_modules/parse5/dist/cjs/index.d.ts +71 -0
  370. package/node_modules/parse5/dist/cjs/index.js +54 -0
  371. package/node_modules/parse5/dist/cjs/package.json +1 -0
  372. package/node_modules/parse5/dist/cjs/parser/formatting-element-list.d.ts +36 -0
  373. package/node_modules/parse5/dist/cjs/parser/formatting-element-list.js +114 -0
  374. package/node_modules/parse5/dist/cjs/parser/index.d.ts +221 -0
  375. package/node_modules/parse5/dist/cjs/parser/index.js +3240 -0
  376. package/node_modules/parse5/dist/cjs/parser/open-element-stack.d.ts +53 -0
  377. package/node_modules/parse5/dist/cjs/parser/open-element-stack.js +328 -0
  378. package/node_modules/parse5/dist/cjs/serializer/index.d.ts +60 -0
  379. package/node_modules/parse5/dist/cjs/serializer/index.js +172 -0
  380. package/node_modules/parse5/dist/cjs/tokenizer/index.d.ts +247 -0
  381. package/node_modules/parse5/dist/cjs/tokenizer/index.js +2714 -0
  382. package/node_modules/parse5/dist/cjs/tokenizer/preprocessor.d.ts +36 -0
  383. package/node_modules/parse5/dist/cjs/tokenizer/preprocessor.js +200 -0
  384. package/node_modules/parse5/dist/cjs/tree-adapters/default.d.ts +84 -0
  385. package/node_modules/parse5/dist/cjs/tree-adapters/default.js +176 -0
  386. package/node_modules/parse5/dist/cjs/tree-adapters/interface.d.ts +255 -0
  387. package/node_modules/parse5/dist/cjs/tree-adapters/interface.js +2 -0
  388. package/node_modules/parse5/dist/common/doctype.d.ts +4 -0
  389. package/node_modules/parse5/dist/common/doctype.js +114 -0
  390. package/node_modules/parse5/dist/common/error-codes.d.ts +67 -0
  391. package/node_modules/parse5/dist/common/error-codes.js +63 -0
  392. package/node_modules/parse5/dist/common/foreign-content.d.ts +9 -0
  393. package/node_modules/parse5/dist/common/foreign-content.js +228 -0
  394. package/node_modules/parse5/dist/common/html.d.ts +289 -0
  395. package/node_modules/parse5/dist/common/html.js +523 -0
  396. package/node_modules/parse5/dist/common/token.d.ts +84 -0
  397. package/node_modules/parse5/dist/common/token.js +20 -0
  398. package/node_modules/parse5/dist/common/unicode.d.ts +42 -0
  399. package/node_modules/parse5/dist/common/unicode.js +62 -0
  400. package/node_modules/parse5/dist/index.d.ts +71 -0
  401. package/node_modules/parse5/dist/index.js +42 -0
  402. package/node_modules/parse5/dist/parser/formatting-element-list.d.ts +36 -0
  403. package/node_modules/parse5/dist/parser/formatting-element-list.js +110 -0
  404. package/node_modules/parse5/dist/parser/index.d.ts +221 -0
  405. package/node_modules/parse5/dist/parser/index.js +3245 -0
  406. package/node_modules/parse5/dist/parser/open-element-stack.d.ts +53 -0
  407. package/node_modules/parse5/dist/parser/open-element-stack.js +324 -0
  408. package/node_modules/parse5/dist/serializer/index.d.ts +60 -0
  409. package/node_modules/parse5/dist/serializer/index.js +168 -0
  410. package/node_modules/parse5/dist/tokenizer/index.d.ts +247 -0
  411. package/node_modules/parse5/dist/tokenizer/index.js +2710 -0
  412. package/node_modules/parse5/dist/tokenizer/preprocessor.d.ts +36 -0
  413. package/node_modules/parse5/dist/tokenizer/preprocessor.js +196 -0
  414. package/node_modules/parse5/dist/tree-adapters/default.d.ts +84 -0
  415. package/node_modules/parse5/dist/tree-adapters/default.js +173 -0
  416. package/node_modules/parse5/dist/tree-adapters/interface.d.ts +255 -0
  417. package/node_modules/parse5/dist/tree-adapters/interface.js +1 -0
  418. package/node_modules/parse5/package.json +50 -0
  419. package/package.json +2 -2
  420. package/packages/cli/dist/.tsbuildinfo +1 -1
  421. package/packages/cli/dist/access-cmd.d.ts +2 -1
  422. package/packages/cli/dist/access-cmd.d.ts.map +1 -1
  423. package/packages/cli/dist/access-cmd.js +40 -7
  424. package/packages/cli/dist/access-cmd.js.map +1 -1
  425. package/packages/cli/dist/args.d.ts +2 -1
  426. package/packages/cli/dist/args.d.ts.map +1 -1
  427. package/packages/cli/dist/args.js +7 -3
  428. package/packages/cli/dist/args.js.map +1 -1
  429. package/packages/cli/dist/commands.d.ts.map +1 -1
  430. package/packages/cli/dist/commands.js +3 -2
  431. package/packages/cli/dist/commands.js.map +1 -1
  432. package/packages/cli/dist/main.js +1 -1
  433. package/packages/cli/dist/main.js.map +1 -1
  434. package/packages/cli/dist/mcp/server.js +1 -1
  435. package/packages/cli/dist/mcp/server.js.map +1 -1
  436. package/packages/cli/dist/mcp/tools.d.ts.map +1 -1
  437. package/packages/cli/dist/mcp/tools.js +60 -0
  438. package/packages/cli/dist/mcp/tools.js.map +1 -1
  439. package/packages/core/dist/.tsbuildinfo +1 -1
  440. package/packages/core/dist/lock.d.ts +15 -1
  441. package/packages/core/dist/lock.d.ts.map +1 -1
  442. package/packages/core/dist/lock.js +15 -1
  443. package/packages/core/dist/lock.js.map +1 -1
  444. package/packages/core/dist/pages.d.ts +75 -0
  445. package/packages/core/dist/pages.d.ts.map +1 -1
  446. package/packages/core/dist/pages.js +14 -0
  447. package/packages/core/dist/pages.js.map +1 -1
  448. package/packages/core/dist/plugin/index.d.ts +2 -2
  449. package/packages/core/dist/plugin/index.d.ts.map +1 -1
  450. package/packages/core/dist/plugin/index.js.map +1 -1
  451. package/packages/core/dist/plugin/version.d.ts +1 -1
  452. package/packages/core/dist/plugin/version.js +1 -1
  453. package/packages/core/dist/provider-accounts.d.ts +32 -0
  454. package/packages/core/dist/provider-accounts.d.ts.map +1 -1
  455. package/packages/core/dist/provider-accounts.js +22 -0
  456. package/packages/core/dist/provider-accounts.js.map +1 -1
  457. package/packages/core/dist/tools.d.ts +6 -1
  458. package/packages/core/dist/tools.d.ts.map +1 -1
  459. package/packages/core/dist/tools.js.map +1 -1
  460. package/packages/core/migrations/077_lock_background_portrait.sql +5 -0
  461. package/packages/gateway/dist/.tsbuildinfo +1 -1
  462. package/packages/gateway/dist/agents/agent-intro.d.ts +31 -0
  463. package/packages/gateway/dist/agents/agent-intro.d.ts.map +1 -0
  464. package/packages/gateway/dist/agents/agent-intro.js +116 -0
  465. package/packages/gateway/dist/agents/agent-intro.js.map +1 -0
  466. package/packages/gateway/dist/agents/delegation.d.ts +10 -0
  467. package/packages/gateway/dist/agents/delegation.d.ts.map +1 -1
  468. package/packages/gateway/dist/agents/delegation.js +18 -1
  469. package/packages/gateway/dist/agents/delegation.js.map +1 -1
  470. package/packages/gateway/dist/agents/owner-tools.d.ts +21 -8
  471. package/packages/gateway/dist/agents/owner-tools.d.ts.map +1 -1
  472. package/packages/gateway/dist/agents/owner-tools.js +201 -36
  473. package/packages/gateway/dist/agents/owner-tools.js.map +1 -1
  474. package/packages/gateway/dist/agents/platform.d.ts +14 -1
  475. package/packages/gateway/dist/agents/platform.d.ts.map +1 -1
  476. package/packages/gateway/dist/agents/platform.js +44 -11
  477. package/packages/gateway/dist/agents/platform.js.map +1 -1
  478. package/packages/gateway/dist/bootstrap.d.ts.map +1 -1
  479. package/packages/gateway/dist/bootstrap.js +2 -0
  480. package/packages/gateway/dist/bootstrap.js.map +1 -1
  481. package/packages/gateway/dist/edition-origin.d.ts +57 -0
  482. package/packages/gateway/dist/edition-origin.d.ts.map +1 -0
  483. package/packages/gateway/dist/edition-origin.js +156 -0
  484. package/packages/gateway/dist/edition-origin.js.map +1 -0
  485. package/packages/gateway/dist/evals/golden.d.ts +5 -0
  486. package/packages/gateway/dist/evals/golden.d.ts.map +1 -1
  487. package/packages/gateway/dist/evals/golden.js +48 -0
  488. package/packages/gateway/dist/evals/golden.js.map +1 -1
  489. package/packages/gateway/dist/mcp/requests.d.ts +8 -2
  490. package/packages/gateway/dist/mcp/requests.d.ts.map +1 -1
  491. package/packages/gateway/dist/mcp/requests.js +74 -1
  492. package/packages/gateway/dist/mcp/requests.js.map +1 -1
  493. package/packages/gateway/dist/owner-profile-edit.d.ts +160 -0
  494. package/packages/gateway/dist/owner-profile-edit.d.ts.map +1 -0
  495. package/packages/gateway/dist/owner-profile-edit.js +296 -0
  496. package/packages/gateway/dist/owner-profile-edit.js.map +1 -0
  497. package/packages/gateway/dist/provider-accounts.d.ts.map +1 -1
  498. package/packages/gateway/dist/provider-accounts.js +2 -1
  499. package/packages/gateway/dist/provider-accounts.js.map +1 -1
  500. package/packages/gateway/dist/system-context.d.ts +9 -0
  501. package/packages/gateway/dist/system-context.d.ts.map +1 -1
  502. package/packages/gateway/dist/system-context.js +28 -2
  503. package/packages/gateway/dist/system-context.js.map +1 -1
  504. package/packages/gateway/dist/telegram/approvals.d.ts +6 -0
  505. package/packages/gateway/dist/telegram/approvals.d.ts.map +1 -1
  506. package/packages/gateway/dist/telegram/approvals.js +10 -2
  507. package/packages/gateway/dist/telegram/approvals.js.map +1 -1
  508. package/packages/gateway/dist/telegram/main.d.ts.map +1 -1
  509. package/packages/gateway/dist/telegram/main.js +10 -3
  510. package/packages/gateway/dist/telegram/main.js.map +1 -1
  511. package/packages/gateway/dist/telegram/outbound.d.ts +9 -0
  512. package/packages/gateway/dist/telegram/outbound.d.ts.map +1 -1
  513. package/packages/gateway/dist/telegram/outbound.js +43 -0
  514. package/packages/gateway/dist/telegram/outbound.js.map +1 -1
  515. package/packages/gateway/dist/telegram/surface.d.ts +2 -0
  516. package/packages/gateway/dist/telegram/surface.d.ts.map +1 -1
  517. package/packages/gateway/dist/telegram/surface.js +2 -1
  518. package/packages/gateway/dist/telegram/surface.js.map +1 -1
  519. package/packages/gateway/dist/tips/engine.d.ts +32 -0
  520. package/packages/gateway/dist/tips/engine.d.ts.map +1 -1
  521. package/packages/gateway/dist/tips/engine.js +69 -0
  522. package/packages/gateway/dist/tips/engine.js.map +1 -1
  523. package/packages/gateway/dist/tips/route.d.ts +1 -3
  524. package/packages/gateway/dist/tips/route.d.ts.map +1 -1
  525. package/packages/gateway/dist/tips/route.js +54 -30
  526. package/packages/gateway/dist/tips/route.js.map +1 -1
  527. package/packages/gateway/dist/web/access/cloudflare-connector.d.ts +63 -0
  528. package/packages/gateway/dist/web/access/cloudflare-connector.d.ts.map +1 -0
  529. package/packages/gateway/dist/web/access/cloudflare-connector.js +87 -0
  530. package/packages/gateway/dist/web/access/cloudflare-connector.js.map +1 -0
  531. package/packages/gateway/dist/web/access/cloudflare-setup.d.ts +39 -4
  532. package/packages/gateway/dist/web/access/cloudflare-setup.d.ts.map +1 -1
  533. package/packages/gateway/dist/web/access/cloudflare-setup.js +99 -11
  534. package/packages/gateway/dist/web/access/cloudflare-setup.js.map +1 -1
  535. package/packages/gateway/dist/web/access/cloudflare-token.js +1 -1
  536. package/packages/gateway/dist/web/access/cloudflare-token.js.map +1 -1
  537. package/packages/gateway/dist/web/access/index.d.ts +1 -0
  538. package/packages/gateway/dist/web/access/index.d.ts.map +1 -1
  539. package/packages/gateway/dist/web/access/index.js +1 -0
  540. package/packages/gateway/dist/web/access/index.js.map +1 -1
  541. package/packages/gateway/dist/web/agent-offers.d.ts +10 -1
  542. package/packages/gateway/dist/web/agent-offers.d.ts.map +1 -1
  543. package/packages/gateway/dist/web/agent-offers.js +14 -1
  544. package/packages/gateway/dist/web/agent-offers.js.map +1 -1
  545. package/packages/gateway/dist/web/api-routes.d.ts.map +1 -1
  546. package/packages/gateway/dist/web/api-routes.js +37 -8
  547. package/packages/gateway/dist/web/api-routes.js.map +1 -1
  548. package/packages/gateway/dist/web/approval-ask.d.ts +16 -0
  549. package/packages/gateway/dist/web/approval-ask.d.ts.map +1 -0
  550. package/packages/gateway/dist/web/approval-ask.js +51 -0
  551. package/packages/gateway/dist/web/approval-ask.js.map +1 -0
  552. package/packages/gateway/dist/web/chat.d.ts +6 -0
  553. package/packages/gateway/dist/web/chat.d.ts.map +1 -1
  554. package/packages/gateway/dist/web/chat.js +4 -0
  555. package/packages/gateway/dist/web/chat.js.map +1 -1
  556. package/packages/gateway/dist/web/live.d.ts +7 -0
  557. package/packages/gateway/dist/web/live.d.ts.map +1 -1
  558. package/packages/gateway/dist/web/live.js +12 -0
  559. package/packages/gateway/dist/web/live.js.map +1 -1
  560. package/packages/gateway/dist/web/lock-backgrounds.d.ts +9 -0
  561. package/packages/gateway/dist/web/lock-backgrounds.d.ts.map +1 -0
  562. package/packages/gateway/dist/web/lock-backgrounds.js +60 -0
  563. package/packages/gateway/dist/web/lock-backgrounds.js.map +1 -0
  564. package/packages/gateway/dist/web/lock.d.ts +13 -1
  565. package/packages/gateway/dist/web/lock.d.ts.map +1 -1
  566. package/packages/gateway/dist/web/lock.js +84 -23
  567. package/packages/gateway/dist/web/lock.js.map +1 -1
  568. package/packages/gateway/dist/web/places.d.ts +5 -0
  569. package/packages/gateway/dist/web/places.d.ts.map +1 -1
  570. package/packages/gateway/dist/web/places.js +11 -4
  571. package/packages/gateway/dist/web/places.js.map +1 -1
  572. package/packages/gateway/dist/web/server.d.ts +3 -0
  573. package/packages/gateway/dist/web/server.d.ts.map +1 -1
  574. package/packages/gateway/dist/web/server.js +63 -50
  575. package/packages/gateway/dist/web/server.js.map +1 -1
  576. package/packages/install/dist/.tsbuildinfo +1 -1
  577. package/packages/install/dist/cloudflared.d.ts +121 -0
  578. package/packages/install/dist/cloudflared.d.ts.map +1 -0
  579. package/packages/install/dist/cloudflared.js +451 -0
  580. package/packages/install/dist/cloudflared.js.map +1 -0
  581. package/packages/install/dist/index.d.ts +1 -0
  582. package/packages/install/dist/index.d.ts.map +1 -1
  583. package/packages/install/dist/index.js +1 -0
  584. package/packages/install/dist/index.js.map +1 -1
  585. package/packages/install/dist/supervisor.d.ts +6 -1
  586. package/packages/install/dist/supervisor.d.ts.map +1 -1
  587. package/packages/install/dist/supervisor.js +51 -5
  588. package/packages/install/dist/supervisor.js.map +1 -1
  589. package/packages/runtime/dist/.tsbuildinfo +1 -1
  590. package/packages/runtime/dist/codex-direct.d.ts +1 -1
  591. package/packages/runtime/dist/codex-direct.js +1 -1
  592. package/packages/runtime/dist/grounding.d.ts +54 -0
  593. package/packages/runtime/dist/grounding.d.ts.map +1 -0
  594. package/packages/runtime/dist/grounding.js +158 -0
  595. package/packages/runtime/dist/grounding.js.map +1 -0
  596. package/packages/runtime/dist/index.d.ts +1 -0
  597. package/packages/runtime/dist/index.d.ts.map +1 -1
  598. package/packages/runtime/dist/index.js +1 -0
  599. package/packages/runtime/dist/index.js.map +1 -1
  600. package/packages/runtime/dist/loop.d.ts +13 -0
  601. package/packages/runtime/dist/loop.d.ts.map +1 -1
  602. package/packages/runtime/dist/loop.js +98 -3
  603. package/packages/runtime/dist/loop.js.map +1 -1
  604. package/packages/tools/artifacts/dist/.tsbuildinfo +1 -1
  605. package/packages/tools/browser/dist/.tsbuildinfo +1 -1
  606. package/packages/tools/email/dist/.tsbuildinfo +1 -1
  607. package/packages/tools/email/dist/agent.d.ts +6 -1
  608. package/packages/tools/email/dist/agent.d.ts.map +1 -1
  609. package/packages/tools/email/dist/agent.js +6 -1
  610. package/packages/tools/email/dist/agent.js.map +1 -1
  611. package/packages/tools/email/dist/html.d.ts +16 -0
  612. package/packages/tools/email/dist/html.d.ts.map +1 -0
  613. package/packages/tools/email/dist/html.js +273 -0
  614. package/packages/tools/email/dist/html.js.map +1 -0
  615. package/packages/tools/email/dist/imap/fake.d.ts +8 -0
  616. package/packages/tools/email/dist/imap/fake.d.ts.map +1 -1
  617. package/packages/tools/email/dist/imap/fake.js +15 -0
  618. package/packages/tools/email/dist/imap/fake.js.map +1 -1
  619. package/packages/tools/email/dist/imap/imapflow-client.d.ts +7 -0
  620. package/packages/tools/email/dist/imap/imapflow-client.d.ts.map +1 -1
  621. package/packages/tools/email/dist/imap/imapflow-client.js +79 -17
  622. package/packages/tools/email/dist/imap/imapflow-client.js.map +1 -1
  623. package/packages/tools/email/dist/index.d.ts +5 -1
  624. package/packages/tools/email/dist/index.d.ts.map +1 -1
  625. package/packages/tools/email/dist/index.js +11 -3
  626. package/packages/tools/email/dist/index.js.map +1 -1
  627. package/packages/tools/email/dist/mail.d.ts.map +1 -1
  628. package/packages/tools/email/dist/mail.js +7 -0
  629. package/packages/tools/email/dist/mail.js.map +1 -1
  630. package/packages/tools/email/dist/pages/descriptors.d.ts.map +1 -1
  631. package/packages/tools/email/dist/pages/descriptors.js +208 -176
  632. package/packages/tools/email/dist/pages/descriptors.js.map +1 -1
  633. package/packages/tools/email/dist/pages/index.d.ts +3 -1
  634. package/packages/tools/email/dist/pages/index.d.ts.map +1 -1
  635. package/packages/tools/email/dist/pages/index.js +5 -2
  636. package/packages/tools/email/dist/pages/index.js.map +1 -1
  637. package/packages/tools/email/dist/pages/queries.d.ts +17 -3
  638. package/packages/tools/email/dist/pages/queries.d.ts.map +1 -1
  639. package/packages/tools/email/dist/pages/queries.js +283 -62
  640. package/packages/tools/email/dist/pages/queries.js.map +1 -1
  641. package/packages/tools/email/dist/pages/thread-tools.d.ts +25 -0
  642. package/packages/tools/email/dist/pages/thread-tools.d.ts.map +1 -0
  643. package/packages/tools/email/dist/pages/thread-tools.js +33 -0
  644. package/packages/tools/email/dist/pages/thread-tools.js.map +1 -0
  645. package/packages/tools/email/dist/ports.d.ts +25 -0
  646. package/packages/tools/email/dist/ports.d.ts.map +1 -1
  647. package/packages/tools/email/dist/ports.js.map +1 -1
  648. package/packages/tools/email/dist/retention.d.ts.map +1 -1
  649. package/packages/tools/email/dist/retention.js +1 -0
  650. package/packages/tools/email/dist/retention.js.map +1 -1
  651. package/packages/tools/email/dist/sources/inbox-poll.d.ts +9 -1
  652. package/packages/tools/email/dist/sources/inbox-poll.d.ts.map +1 -1
  653. package/packages/tools/email/dist/sources/inbox-poll.js +5 -2
  654. package/packages/tools/email/dist/sources/inbox-poll.js.map +1 -1
  655. package/packages/tools/email/dist/text-cleanup.d.ts +69 -0
  656. package/packages/tools/email/dist/text-cleanup.d.ts.map +1 -0
  657. package/packages/tools/email/dist/text-cleanup.js +96 -0
  658. package/packages/tools/email/dist/text-cleanup.js.map +1 -0
  659. package/packages/tools/email/dist/text.d.ts +29 -0
  660. package/packages/tools/email/dist/text.d.ts.map +1 -0
  661. package/packages/tools/email/dist/text.js +153 -0
  662. package/packages/tools/email/dist/text.js.map +1 -0
  663. package/packages/tools/email/dist/worker.d.ts +64 -0
  664. package/packages/tools/email/dist/worker.d.ts.map +1 -0
  665. package/packages/tools/email/dist/worker.js +123 -0
  666. package/packages/tools/email/dist/worker.js.map +1 -0
  667. package/packages/tools/email/migrations/028_reading.sql +23 -0
  668. package/packages/tools/email/package.json +1 -0
  669. package/packages/tools/host/dist/.tsbuildinfo +1 -1
  670. package/packages/tools/mcp/dist/.tsbuildinfo +1 -1
  671. package/packages/tools/memory/dist/.tsbuildinfo +1 -1
  672. package/packages/tools/web/dist/.tsbuildinfo +1 -1
  673. package/packages/web/dist/apple-touch-icon.png +0 -0
  674. package/packages/web/dist/assets/index-CPFSREcP.css +1 -0
  675. package/packages/web/dist/assets/index-DYUn1V0x.js +150 -0
  676. package/packages/web/dist/assets/{lottie_light-CHWAvOde.js → lottie_light-DxWeiVDC.js} +1 -1
  677. package/packages/web/dist/backgrounds/golden-streak-portrait.jpg +0 -0
  678. package/packages/web/dist/backgrounds/golden-streak-thumb.jpg +0 -0
  679. package/packages/web/dist/backgrounds/manifest.json +18 -0
  680. package/packages/web/dist/backgrounds/peoria-autumn-waterfront-thumb.jpg +0 -0
  681. package/packages/web/dist/backgrounds/peoria-autumn-waterfront.jpg +0 -0
  682. package/packages/web/dist/build.json +1 -1
  683. package/packages/web/dist/favicon-16.png +0 -0
  684. package/packages/web/dist/favicon-32.png +0 -0
  685. package/packages/web/dist/favicon.ico +0 -0
  686. package/packages/web/dist/icon-192.png +0 -0
  687. package/packages/web/dist/icon-512.png +0 -0
  688. package/packages/web/dist/index.html +6 -3
  689. package/packages/web/dist/manifest.webmanifest +1 -1
  690. package/packages/web/dist/maskable-512.png +0 -0
  691. package/packages/web/dist/precache.json +7 -5
  692. package/packages/web/dist/assets/index-BB52n8Fa.js +0 -146
  693. package/packages/web/dist/assets/index-CY4cPN4I.css +0 -1
  694. package/packages/web/dist/favicon.png +0 -0
  695. package/packages/web/dist/icon-maskable-512.png +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../src/tips/route.ts"],"names":[],"mappings":"AAgBA,OAAO,EAA6B,KAAK,KAAK,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AACvF,OAAO,EAAQ,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAEhD,eAAO,MAAM,cAAc,eAAe,CAAC;AAC3C,eAAO,MAAM,gBAAgB,iBAAiB,CAAC;AAE/C,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5B,GAAG,EAAE,MAAM,IAAI,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,KAAK,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;CACf;AAOD,mEAAmE;AACnE,wBAAsB,WAAW,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAGxE;AAED,wBAAsB,SAAS,CAC7B,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACjG,OAAO,CAAC,SAAS,CAAC,CA6DpB"}
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../src/tips/route.ts"],"names":[],"mappings":"AAoBA,OAAO,EAA6B,KAAK,KAAK,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC;AACvF,OAAO,EAAQ,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAEhD,eAAO,MAAM,cAAc,eAAe,CAAC;AAE3C,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;IAC5B,GAAG,EAAE,MAAM,IAAI,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,sDAAsD;IACtD,KAAK,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;CACf;AAOD,wBAAsB,SAAS,CAC7B,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GACjH,OAAO,CAAC,SAAS,CAAC,CAuFpB"}
@@ -1,54 +1,41 @@
1
1
  /**
2
2
  * The tips' routes (docs/dashboard.md, Home):
3
3
  *
4
- * GET /api/tips { tips: [...rows], enabled } every rule and where it stands (the Tips list)
5
- * GET /api/tips/current { tip | null, enabled } today's tip, if any
4
+ * GET /api/tips { tips: [...rows] } every rule and where it stands
5
+ * GET /api/tips/current { tip | null } today's tip, if any
6
+ * GET /api/tips/queue { tips: [...], dismissed } the bulb's stack: today's tip first, then every other
7
+ * one that holds and is not dismissed, ready ones before those in their cooldown;
8
+ * `dismissed` counts the dismissed ones that hold
9
+ * (`?peek=1`: today's and the ready ones only, nothing marked shown: for the bulb's dot)
10
+ * GET /api/tips/dismissed { tips: [...] } the dismissed ones the queue counts, for "Bring back"
6
11
  * POST /api/tips/:id/dismiss "Not this again": never again
7
12
  * POST /api/tips/:id/later ×: not before its cooldown has passed
8
13
  * POST /api/tips/:id/restore "Bring back": forget a dismissal
9
14
  * POST /api/tips/seen-page { page } the dashboard opened a page (once a day each)
10
- * GET /api/tips/settings { enabled }
11
- * PUT /api/tips/settings { enabled } Settings → Notifications → Tips on Home
12
15
  *
13
- * State lives in `core.web_settings`: `tips.state` (the engine's), `tips.enabled`
14
- * (absent is on) and `tips.pages`.
16
+ * State lives in `core.web_settings`: `tips.state` (the engine's) and
17
+ * `tips.pages`. A `tips.enabled` left from the old "Tips on Home" switch is
18
+ * ignored: tips sit behind the bulb, which is the owner's choice to look.
15
19
  */
16
- import { dayIn, dismissTip, laterTip, listTips, pickTip, restoreTip, viewOf } from './engine.js';
20
+ import { dayIn, dismissTip, laterTip, listDismissed, listTips, pickQueue, pickTip, restoreTip, viewOf } from './engine.js';
17
21
  import { PAGE_NAME, recordPageSeen } from './facts.js';
18
22
  import { TIPS } from './rules.js';
19
23
  export const TIPS_STATE_KEY = 'tips.state';
20
- export const TIPS_ENABLED_KEY = 'tips.enabled';
21
24
  async function readState(store) {
22
25
  const value = await store.read(TIPS_STATE_KEY).catch(() => null);
23
26
  return value && typeof value === 'object' && !Array.isArray(value) ? value : {};
24
27
  }
25
- /** Whether tips are on. Anything but an explicit `false` is on. */
26
- export async function tipsEnabled(store) {
27
- const value = await store.read(TIPS_ENABLED_KEY).catch(() => null);
28
- return value !== false;
29
- }
30
28
  export async function tipsRoute(deps, request) {
31
29
  const { method, path } = request;
32
30
  const body = request.body ?? {};
33
31
  const rules = deps.rules ?? TIPS;
34
32
  const today = dayIn(deps.now(), deps.timezone);
35
- if (path === '/api/tips/settings') {
36
- if (method === 'PUT') {
37
- if (typeof body.enabled !== 'boolean')
38
- return { status: 400, body: { error: '`enabled` must be true or false.' } };
39
- await deps.store.write(TIPS_ENABLED_KEY, body.enabled);
40
- }
41
- else if (method !== 'GET') {
42
- return { status: 405, body: { error: 'GET or PUT.' } };
43
- }
44
- return { status: 200, body: { enabled: await tipsEnabled(deps.store) } };
45
- }
46
33
  if (path === '/api/tips') {
47
34
  if (method !== 'GET')
48
35
  return { status: 405, body: { error: 'GET only.' } };
49
- // Reads only: listing never marks a tip shown. It reads while tips are off too.
36
+ // Reads only: listing never marks a tip shown.
50
37
  const tips = listTips(rules, await deps.facts(), await readState(deps.store), today);
51
- return { status: 200, body: { tips, enabled: await tipsEnabled(deps.store) } };
38
+ return { status: 200, body: { tips } };
52
39
  }
53
40
  if (path === '/api/tips/current') {
54
41
  if (method !== 'GET')
@@ -59,16 +46,53 @@ export async function tipsRoute(deps, request) {
59
46
  if (preview !== null) {
60
47
  const rule = rules.find((r) => r.id === preview);
61
48
  return rule
62
- ? { status: 200, body: { tip: viewOf(rule, await deps.facts()), enabled: true, preview: true } }
49
+ ? { status: 200, body: { tip: viewOf(rule, await deps.facts()), preview: true } }
63
50
  : { status: 404, body: { error: `No tip called "${preview}". Known: ${rules.map((r) => r.id).join(', ')}.` } };
64
51
  }
65
- if (!(await tipsEnabled(deps.store)))
66
- return { status: 200, body: { tip: null, enabled: false } };
67
52
  const previous = await readState(deps.store);
68
53
  const { tip, state } = pickTip(rules, await deps.facts(), previous, today);
69
54
  if (JSON.stringify(state) !== JSON.stringify(previous))
70
55
  await deps.store.write(TIPS_STATE_KEY, state);
71
- return { status: 200, body: { tip, enabled: true } };
56
+ return { status: 200, body: { tip } };
57
+ }
58
+ if (path === '/api/tips/queue') {
59
+ if (method !== 'GET')
60
+ return { status: 405, body: { error: 'GET only.' } };
61
+ // `?preview=a,b,c` stacks those rules' cards as they would look, touching no state.
62
+ const preview = request.preview ?? null;
63
+ if (preview !== null) {
64
+ const ids = preview.split(',').map((id) => id.trim()).filter(Boolean);
65
+ const unknown = ids.filter((id) => !rules.some((r) => r.id === id));
66
+ if (ids.length === 0 || unknown.length) {
67
+ return { status: 404, body: { error: `No tip called "${unknown[0] ?? preview}". Known: ${rules.map((r) => r.id).join(', ')}.` } };
68
+ }
69
+ const f = await deps.facts();
70
+ return { status: 200, body: { tips: ids.map((id) => viewOf(rules.find((r) => r.id === id), f)), preview: true } };
71
+ }
72
+ const previous = await readState(deps.store);
73
+ const { tips, state, dismissed } = pickQueue(rules, await deps.facts(), previous, today, { open: !request.peek });
74
+ // A peek keeps the holds counting but marks nothing shown: the owner has
75
+ // not opened the stack, so no tip's cooldown starts.
76
+ const front = tips[0]?.id;
77
+ if (request.peek && front && state[front]?.shownAt !== previous[front]?.shownAt) {
78
+ const before = previous[front]?.shownAt;
79
+ if (before)
80
+ state[front] = { ...state[front], shownAt: before };
81
+ else {
82
+ const { shownAt: _s, ...rest } = state[front];
83
+ state[front] = rest;
84
+ }
85
+ }
86
+ if (JSON.stringify(state) !== JSON.stringify(previous))
87
+ await deps.store.write(TIPS_STATE_KEY, state);
88
+ return { status: 200, body: { tips, dismissed } };
89
+ }
90
+ if (path === '/api/tips/dismissed') {
91
+ if (method !== 'GET')
92
+ return { status: 405, body: { error: 'GET only.' } };
93
+ // Reads only: the state is what the queue left it as.
94
+ const tips = listDismissed(rules, await deps.facts(), await readState(deps.store), today);
95
+ return { status: 200, body: { tips } };
72
96
  }
73
97
  if (path === '/api/tips/seen-page') {
74
98
  if (method !== 'POST')
@@ -1 +1 @@
1
- {"version":3,"file":"route.js","sourceRoot":"","sources":["../../src/tips/route.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../src/tips/route.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * The gateway's half of the connector the supervisor runs (slate R73vdX4bOO).
3
+ *
4
+ * The tunnel's connector token is an owner secret, `CLOUDFLARE_TUNNEL_TOKEN`,
5
+ * bound pre-approved to the gateway's own `access.cloudflare` destination
6
+ * (target `connector`). "Set it up for me" keeps it there; the supervisor
7
+ * reads it at each spawn and hands it to cloudflared in its environment;
8
+ * Remove forgets it.
9
+ *
10
+ * Whether the connector should run is read from the database by the
11
+ * supervisor (`cloudflareConnectorPlan`): Cloudflare Access on, a tunnel in
12
+ * the setup record, a token kept, and the owner hasn't chosen Cloudflare's
13
+ * system service instead.
14
+ *
15
+ * The setup engine and the setting's Save reach the supervisor over its
16
+ * control socket (`supervisorConnector`): `POST /connector {action}`.
17
+ */
18
+ import { type Vault } from '@buddi/core';
19
+ import type { Pool } from 'pg';
20
+ export declare const CONNECTOR_TOKEN_SECRET = "CLOUDFLARE_TUNNEL_TOKEN";
21
+ export type ConnectorState = 'running' | 'starting' | 'stopped' | 'missing-binary' | 'system-daemon';
22
+ /** What the supervisor answers on `/connector` (install's cloudflared.ts, ConnectorStatus). */
23
+ export interface ConnectorView {
24
+ state: ConnectorState;
25
+ mode: 'buddi' | 'system';
26
+ systemDaemon: string | null;
27
+ binary: {
28
+ path: string;
29
+ source: 'path' | 'downloaded';
30
+ } | null;
31
+ detail?: string | undefined;
32
+ brew?: string | undefined;
33
+ pid: number | null;
34
+ log: string;
35
+ removedBinary?: boolean | undefined;
36
+ }
37
+ /** What the setup engine needs of the connector. */
38
+ export interface ConnectorControl {
39
+ saveToken(token: string): Promise<void>;
40
+ forgetToken(): Promise<void>;
41
+ /** Ask the supervisor to match the setting now; its status after. */
42
+ sync(): Promise<ConnectorView>;
43
+ /** Stop it and delete the binary buddi downloaded. */
44
+ remove(): Promise<ConnectorView>;
45
+ }
46
+ export interface ConnectorTokenStore {
47
+ has(): Promise<boolean>;
48
+ put(value: string): Promise<void>;
49
+ use(): Promise<string | null>;
50
+ remove(): Promise<void>;
51
+ }
52
+ export declare function connectorTokenStore(pool: Pool, vault: Vault | undefined): ConnectorTokenStore;
53
+ /** Should the supervisor run the connector, and for which tunnel? */
54
+ export declare function cloudflareConnectorPlan(pool: Pool): Promise<{
55
+ wanted: boolean;
56
+ mode: 'buddi' | 'system';
57
+ tunnelId: string | null;
58
+ }>;
59
+ /** The supervisor's `/connector`, or throws when it can't be reached. */
60
+ export declare function supervisorConnector(socket: string, tokens: ConnectorTokenStore): ConnectorControl;
61
+ /** Is a supervisor answering on this socket? */
62
+ export declare function supervisorAnswers(socket: string | undefined): Promise<boolean>;
63
+ //# sourceMappingURL=cloudflare-connector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudflare-connector.d.ts","sourceRoot":"","sources":["../../../src/web/access/cloudflare-connector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAiG,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AACxI,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAM/B,eAAO,MAAM,sBAAsB,4BAA4B,CAAC;AAGhE,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,gBAAgB,GAAG,eAAe,CAAC;AAErG,+FAA+F;AAC/F,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,cAAc,CAAC;IACtB,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IACzB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,YAAY,CAAA;KAAE,GAAG,IAAI,CAAC;IAC/D,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,aAAa,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;CACrC;AAED,oDAAoD;AACpD,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,qEAAqE;IACrE,IAAI,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IAC/B,sDAAsD;IACtD,MAAM,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,mBAAmB;IAClC,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACxB,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,GAAG,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC9B,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACzB;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,SAAS,GAAG,mBAAmB,CA+B7F;AAED,qEAAqE;AACrE,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,CAQzI;AAED,yEAAyE;AACzE,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,GAAG,gBAAgB,CAYjG;AAED,gDAAgD;AAChD,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAGpF"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * The gateway's half of the connector the supervisor runs (slate R73vdX4bOO).
3
+ *
4
+ * The tunnel's connector token is an owner secret, `CLOUDFLARE_TUNNEL_TOKEN`,
5
+ * bound pre-approved to the gateway's own `access.cloudflare` destination
6
+ * (target `connector`). "Set it up for me" keeps it there; the supervisor
7
+ * reads it at each spawn and hands it to cloudflared in its environment;
8
+ * Remove forgets it.
9
+ *
10
+ * Whether the connector should run is read from the database by the
11
+ * supervisor (`cloudflareConnectorPlan`): Cloudflare Access on, a tunnel in
12
+ * the setup record, a token kept, and the owner hasn't chosen Cloudflare's
13
+ * system service instead.
14
+ *
15
+ * The setup engine and the setting's Save reach the supervisor over its
16
+ * control socket (`supervisorConnector`): `POST /connector {action}`.
17
+ */
18
+ import { deleteOwnerSecret, findSecret, putOwnerSecret, readWebSetting, useOwnerSecret } from '@buddi/core';
19
+ import { supervisorCall } from '../service.js';
20
+ import { CLOUDFLARE_SETTING_KEY, toCloudflareSetting } from './cloudflare.js';
21
+ import { CLOUDFLARE_SETUP_KEY } from './cloudflare-setup.js';
22
+ import { ACCESS_CLOUDFLARE_KIND, registerCloudflareTokenDestination } from './cloudflare-token.js';
23
+ export const CONNECTOR_TOKEN_SECRET = 'CLOUDFLARE_TUNNEL_TOKEN';
24
+ const TARGET = 'connector';
25
+ export function connectorTokenStore(pool, vault) {
26
+ registerCloudflareTokenDestination();
27
+ return {
28
+ has: async () => (await findSecret(pool, CONNECTOR_TOKEN_SECRET)) !== null,
29
+ async put(value) {
30
+ if (!vault)
31
+ throw new Error('This installation has no vault, so the connector token cannot be kept.');
32
+ await putOwnerSecret(pool, vault, {
33
+ name: CONNECTOR_TOKEN_SECRET,
34
+ value: value.trim(),
35
+ bindings: [{ kind: ACCESS_CLOUDFLARE_KIND, target: TARGET, rule: 'pre-approved' }],
36
+ });
37
+ },
38
+ async use() {
39
+ let value = null;
40
+ const result = await useOwnerSecret({
41
+ pool,
42
+ vault,
43
+ plugin: 'access',
44
+ buddi: { version: '0.0', plugin: 'access' },
45
+ now: () => new Date(),
46
+ deliverInto: (delivered) => { value = delivered; },
47
+ }, { name: CONNECTOR_TOKEN_SECRET, kind: ACCESS_CLOUDFLARE_KIND, target: TARGET });
48
+ return 'done' in result ? value : null;
49
+ },
50
+ async remove() {
51
+ if (vault && (await findSecret(pool, CONNECTOR_TOKEN_SECRET)) !== null)
52
+ await deleteOwnerSecret(pool, vault, CONNECTOR_TOKEN_SECRET);
53
+ },
54
+ };
55
+ }
56
+ /** Should the supervisor run the connector, and for which tunnel? */
57
+ export async function cloudflareConnectorPlan(pool) {
58
+ const setting = toCloudflareSetting(await readWebSetting(pool, CLOUDFLARE_SETTING_KEY));
59
+ const row = await readWebSetting(pool, CLOUDFLARE_SETUP_KEY);
60
+ const record = row && typeof row === 'object' && typeof row.host === 'string' ? row : null;
61
+ const mode = record?.connector === 'system' ? 'system' : 'buddi';
62
+ const tunnelId = record?.tunnelId ?? null;
63
+ const token = tunnelId ? (await findSecret(pool, CONNECTOR_TOKEN_SECRET)) !== null : false;
64
+ return { wanted: setting.enabled && tunnelId !== null && token, mode, tunnelId };
65
+ }
66
+ /** The supervisor's `/connector`, or throws when it can't be reached. */
67
+ export function supervisorConnector(socket, tokens) {
68
+ const ask = async (action) => {
69
+ const reply = await supervisorCall(socket, '/connector', 'POST', { action }, 200_000);
70
+ if (reply.status !== 200)
71
+ throw new Error(reply.body?.error ?? `The supervisor answered ${reply.status}.`);
72
+ return reply.body;
73
+ };
74
+ return {
75
+ saveToken: (token) => tokens.put(token),
76
+ forgetToken: () => tokens.remove(),
77
+ sync: () => ask('sync'),
78
+ remove: () => ask('remove'),
79
+ };
80
+ }
81
+ /** Is a supervisor answering on this socket? */
82
+ export async function supervisorAnswers(socket) {
83
+ if (!socket?.trim())
84
+ return false;
85
+ return supervisorCall(socket, '/status', 'GET', undefined, 3_000).then((r) => r.status === 200, () => false);
86
+ }
87
+ //# sourceMappingURL=cloudflare-connector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cloudflare-connector.js","sourceRoot":"","sources":["../../../src/web/access/cloudflare-connector.ts"],"names":[],"mappings":"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"}
@@ -6,9 +6,13 @@
6
6
  * `buddi-<host>`, its ingress (`<host>` → the ingress listener), a proxied
7
7
  * CNAME, a reusable Allow policy for the owner's email and a self-hosted
8
8
  * Access application for the hostname. It reads the application's AUD tag and
9
- * the team domain, fills in `access.cloudflare`, shows the one command buddi
10
- * never runs itself (`sudo cloudflared service install <token>`), waits for
11
- * the tunnel to report healthy and runs Test my setup.
9
+ * the team domain, fills in `access.cloudflare`, keeps the tunnel's connector
10
+ * token as an owner secret and asks the supervisor to run cloudflared itself
11
+ * (install's cloudflared.ts; no command to copy), waits for the tunnel to
12
+ * report healthy and runs Test my setup. A system service from an earlier
13
+ * setup (`sudo cloudflared service install`) is named, with the one line that
14
+ * removes it, or used instead when the owner says so. Without a supervisor (a
15
+ * checkout's `buddi serve`) the step falls back to the line to run by hand.
12
16
  *
13
17
  * Idempotent: the ids of what buddi made are kept in the setup record, so a
14
18
  * second run after a failure picks up where the first stopped. An object of
@@ -27,6 +31,7 @@
27
31
  */
28
32
  import type { CloudflareApi } from './cloudflare-api.js';
29
33
  import { type CloudflareAccessSetting } from './cloudflare.js';
34
+ import type { ConnectorControl, ConnectorState, ConnectorView } from './cloudflare-connector.js';
30
35
  /** Where the record of what buddi made lives (a web setting). Ids only, never a token. */
31
36
  export declare const CLOUDFLARE_SETUP_KEY = "access.cloudflare.setup";
32
37
  /** The owner secret holding the API token. */
@@ -57,12 +62,33 @@ export interface SetupInstall {
57
62
  /** What to say beside it: the brew path on a Mac, the package on Linux. */
58
63
  note: string;
59
64
  }
65
+ /** The connector the supervisor runs, as the step shows it. */
66
+ export interface SetupConnector {
67
+ state: ConnectorState;
68
+ mode: 'buddi' | 'system';
69
+ detail?: string | undefined;
70
+ /** The Homebrew line, when cloudflared is missing on a Mac with brew. */
71
+ brew?: string | undefined;
72
+ /** Cloudflare's system service is installed: the line that removes it, and why. */
73
+ systemDaemon?: {
74
+ file: string;
75
+ command: string;
76
+ why: string;
77
+ } | undefined;
78
+ /** Where cloudflared's lines go. */
79
+ log?: string | undefined;
80
+ }
81
+ /** Why a system service and buddi's own connector can't both run. */
82
+ export declare const SYSTEM_DAEMON_WHY = "Cloudflare\u2019s system service from an earlier setup is installed on this computer. Two connectors for one tunnel fight over its connections, so buddi doesn\u2019t start its own while it is there. Remove it with this line, or use it instead.";
83
+ export declare function connectorOf(view: ConnectorView, platform: NodeJS.Platform): SetupConnector;
60
84
  export interface SetupProgress {
61
85
  state: 'idle' | 'running' | 'waiting' | 'done' | 'failed' | 'stopped' | 'removing' | 'removed';
62
86
  host: string;
63
87
  email: string;
64
88
  steps: SetupStep[];
65
89
  install: SetupInstall | null;
90
+ /** The connector buddi runs (or the system service it uses), when a supervisor runs buddi. */
91
+ connector: SetupConnector | null;
66
92
  /** The sentence for a failure, a stop or a partial removal. */
67
93
  error: string | null;
68
94
  /** The address, once it is set up. */
@@ -89,6 +115,8 @@ export interface SetupRecord {
89
115
  policyId?: string | undefined;
90
116
  appId?: string | undefined;
91
117
  aud?: string | undefined;
118
+ /** Who runs the connector: buddi's supervisor (the default) or Cloudflare's system service. */
119
+ connector?: 'buddi' | 'system' | undefined;
92
120
  at: string;
93
121
  }
94
122
  export interface SetupInput {
@@ -97,6 +125,8 @@ export interface SetupInput {
97
125
  zone?: string | undefined;
98
126
  /** "Use it anyway": take over an object of buddi's name that buddi didn't make. */
99
127
  adopt?: boolean | undefined;
128
+ /** "Use Cloudflare’s system service instead": buddi starts no connector of its own. */
129
+ useSystemDaemon?: boolean | undefined;
100
130
  }
101
131
  export interface SetupDeps {
102
132
  api: CloudflareApi;
@@ -123,6 +153,11 @@ export interface SetupDeps {
123
153
  * its first await). Without one, the run claims its own and lets it go.
124
154
  */
125
155
  lease?: SetupLease | undefined;
156
+ /**
157
+ * The supervisor's connector. Absent (a checkout's `buddi serve`, a CLI
158
+ * with no supervisor answering), the step shows the line to run by hand.
159
+ */
160
+ connector?: ConnectorControl | undefined;
126
161
  }
127
162
  export type SetupOperation = 'setup' | 'remove';
128
163
  export interface SetupLease {
@@ -155,7 +190,7 @@ export declare function runCloudflareSetup(input: SetupInput, deps: SetupDeps, o
155
190
  * what is left. Turns signing in through Cloudflare off when the setting is
156
191
  * the one setup filled in, and forgets the record. Never throws.
157
192
  */
158
- export declare function removeCloudflareSetup(deps: Pick<SetupDeps, 'api' | 'platform' | 'readSetting' | 'saveSetting' | 'readRecord' | 'saveRecord' | 'lease'> & {
193
+ export declare function removeCloudflareSetup(deps: Pick<SetupDeps, 'api' | 'platform' | 'readSetting' | 'saveSetting' | 'readRecord' | 'saveRecord' | 'lease' | 'connector'> & {
159
194
  host?: string | undefined;
160
195
  }, onProgress?: (p: SetupProgress) => void): Promise<SetupProgress>;
161
196
  /** "a, b and c". */
@@ -1 +1 @@
1
- {"version":3,"file":"cloudflare-setup.d.ts","sourceRoot":"","sources":["../../../src/web/access/cloudflare-setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cloudflare-setup.d.ts","sourceRoot":"","sources":["../../../src/web/access/cloudflare-setup.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,18 @@ const ownsRecord = (r) => (r.comment ?? '').startsWith('Made by buddi');
15
15
  /** How often the tunnel's health is asked, and for how long. */
16
16
  export const HEALTH_POLL_MS = 5_000;
17
17
  export const HEALTH_WAIT_MS = 30 * 60_000;
18
+ /** Why a system service and buddi's own connector can't both run. */
19
+ export const SYSTEM_DAEMON_WHY = 'Cloudflare’s system service from an earlier setup is installed on this computer. Two connectors for one tunnel fight over its connections, so buddi doesn’t start its own while it is there. Remove it with this line, or use it instead.';
20
+ export function connectorOf(view, platform) {
21
+ return {
22
+ state: view.state,
23
+ mode: view.mode,
24
+ ...(view.detail ? { detail: view.detail } : {}),
25
+ ...(view.brew ? { brew: view.brew } : {}),
26
+ ...(view.systemDaemon ? { systemDaemon: { file: view.systemDaemon, command: uninstallFor(platform), why: SYSTEM_DAEMON_WHY } } : {}),
27
+ log: view.log,
28
+ };
29
+ }
18
30
  /** In this process, the one setup or removal going, or null. */
19
31
  let operation = null;
20
32
  /** Claim the one operation slot, synchronously; null when another holds it. */
@@ -80,7 +92,7 @@ const LABELS = {
80
92
  dns: 'Adding the DNS record',
81
93
  access: 'Creating the Access application',
82
94
  save: 'Filling in buddi’s settings',
83
- connector: 'Install the connector',
95
+ connector: 'Starting the connector…',
84
96
  healthy: 'Waiting for the tunnel to connect',
85
97
  test: 'Testing the setup',
86
98
  };
@@ -89,7 +101,7 @@ export function freshProgress(host = '', email = '') {
89
101
  return {
90
102
  state: 'idle', host, email,
91
103
  steps: ORDER.map((id) => ({ id, state: 'next', text: LABELS[id] })),
92
- install: null, error: null, url: null, removed: [], uninstall: null, adoptable: false,
104
+ install: null, connector: null, error: null, url: null, removed: [], uninstall: null, adoptable: false,
93
105
  };
94
106
  }
95
107
  function sentence(error) {
@@ -284,12 +296,53 @@ async function setupRun(input, deps, onProgress) {
284
296
  throw new SetupError(checked.error);
285
297
  await deps.saveSetting(checked.value);
286
298
  finish('save', 'buddi’s settings filled in');
287
- // 7. The one command buddi does not run.
299
+ // 7. The connector: the supervisor runs it, or (no supervisor) the owner does.
288
300
  at('connector');
289
- p.install = installFor(await api.tunnelToken(accountId, tunnel.id), deps.platform);
301
+ const connectorToken = await api.tunnelToken(accountId, tunnel.id);
302
+ if (!CONNECTOR_TOKEN.test(connectorToken))
303
+ throw new CloudflareApiError('Cloudflare answered without the tunnel’s connector token.', 200, []);
304
+ const control = deps.connector;
305
+ const systemMode = input.useSystemDaemon === true;
306
+ let view = null;
307
+ const look = async () => {
308
+ if (!control)
309
+ return;
310
+ try {
311
+ view = await control.sync();
312
+ }
313
+ catch {
314
+ view = null;
315
+ }
316
+ p.connector = view ? connectorOf(view, deps.platform) : null;
317
+ const s = step('connector');
318
+ if (s.state === 'done')
319
+ return;
320
+ const v = view;
321
+ s.text = !v ? 'Starting the connector… (buddi’s supervisor isn’t answering)'
322
+ : v.mode === 'system' ? 'Using Cloudflare’s system service'
323
+ : v.state === 'running' ? 'Connector running'
324
+ : v.state === 'missing-binary' ? 'cloudflared isn’t on this computer'
325
+ : v.state === 'system-daemon' ? 'Cloudflare’s system service is in the way'
326
+ : 'Starting the connector…';
327
+ if (v?.state === 'running' && v.mode === 'buddi')
328
+ finish('connector', 'Connector running');
329
+ };
330
+ if (control) {
331
+ record.connector = systemMode ? 'system' : 'buddi';
332
+ await deps.saveRecord(record);
333
+ await control.saveToken(connectorToken);
334
+ // The system service runs whatever token it was installed with: the line, should it be another tunnel's.
335
+ if (systemMode)
336
+ p.install = { ...installFor(connectorToken, deps.platform), note: 'Only if the system service runs another tunnel: uninstall it (sudo cloudflared service uninstall), then install it again with this line.' };
337
+ await look();
338
+ }
339
+ else {
340
+ step('connector').text = 'Install the connector';
341
+ p.install = installFor(connectorToken, deps.platform);
342
+ }
290
343
  p.state = 'waiting';
291
344
  emit();
292
- // 8. Wait for cloudflared to connect.
345
+ // 8. Wait for the tunnel to connect.
293
346
  const deadline = now().getTime() + (deps.waitMs ?? HEALTH_WAIT_MS);
294
347
  let healthy = false;
295
348
  let first = true;
@@ -307,19 +360,37 @@ async function setupRun(input, deps, onProgress) {
307
360
  if (now().getTime() >= deadline)
308
361
  break;
309
362
  await sleep(deps.pollMs ?? HEALTH_POLL_MS, deps.signal);
363
+ if (!deps.signal?.aborted && control) {
364
+ await look();
365
+ emit();
366
+ }
310
367
  }
311
368
  if (!healthy) {
312
369
  if (deps.signal?.aborted) {
313
370
  p.state = 'stopped';
314
- p.error = 'Stopped waiting. Everything buddi made stays; run the command, then Set it up again to finish.';
371
+ p.error = control
372
+ ? 'Stopped waiting. Everything buddi made stays; Set it up again to finish.'
373
+ : 'Stopped waiting. Everything buddi made stays; run the command, then Set it up again to finish.';
315
374
  emit();
316
375
  return p;
317
376
  }
318
- current = 'healthy';
319
- throw new SetupError('The tunnel hasn’t connected yet. Run the command above on this computer, then try again.');
377
+ const v = view;
378
+ current = !control || v?.state === 'running' || v?.mode === 'system' ? 'healthy' : 'connector';
379
+ if (!control)
380
+ throw new SetupError('The tunnel hasn’t connected yet. Run the command above on this computer, then try again.');
381
+ if (!v)
382
+ throw new SetupError('buddi’s supervisor didn’t answer, so the connector isn’t running. Restart buddi, then Set it up again.');
383
+ if (v.mode === 'system')
384
+ throw new SetupError('The tunnel hasn’t connected through Cloudflare’s system service. Check that it runs this tunnel’s token, then Set it up again.');
385
+ if (v.state === 'system-daemon')
386
+ throw new SetupError('Cloudflare’s system service is still installed. Remove it (sudo cloudflared service uninstall) or use it instead, then Set it up again.');
387
+ if (v.state === 'missing-binary')
388
+ throw new SetupError(`cloudflared isn’t on this computer and buddi couldn’t download it. ${v.brew ? `Run ${v.brew}` : 'Install it from Cloudflare’s downloads page'}, then Set it up again.`);
389
+ throw new SetupError('The tunnel hasn’t connected yet. cloudflared’s own lines are in logs/cloudflared.log in buddi’s data folder.');
320
390
  }
321
- finish('connector', 'Connector installed');
322
- finish('healthy', 'Tunnel connected');
391
+ const v = view;
392
+ finish('connector', !control ? 'Connector installed' : v?.mode === 'system' ? 'Cloudflare’s system service connected' : 'Connector running');
393
+ finish('healthy', 'Connected');
323
394
  // 9. Test my setup.
324
395
  at('test');
325
396
  const tested = await deps.test(teamDomain);
@@ -403,6 +474,22 @@ async function removeRun(deps, onProgress) {
403
474
  record[key] = undefined;
404
475
  await deps.saveRecord(record).catch(() => undefined);
405
476
  };
477
+ // The connector first: its token forgotten (so nothing starts it again), the child stopped, a downloaded cloudflared deleted.
478
+ let systemDaemon = !deps.connector;
479
+ if (deps.connector) {
480
+ try {
481
+ await deps.connector.forgetToken();
482
+ const view = await deps.connector.remove();
483
+ if (view.removedBinary) {
484
+ p.removed.push('the cloudflared buddi downloaded');
485
+ emit();
486
+ }
487
+ systemDaemon = view.systemDaemon !== null;
488
+ }
489
+ catch {
490
+ failures.push('buddi’s connector could not be stopped; restart buddi to stop it.');
491
+ }
492
+ }
406
493
  const account = record.accountId;
407
494
  const zone = record.zone.id;
408
495
  await attempt('the Access application', 'appId', (id) => api.deleteApp(account, id));
@@ -422,7 +509,8 @@ async function removeRun(deps, onProgress) {
422
509
  if (failures.length === 0)
423
510
  await deps.saveRecord(null).catch(() => undefined);
424
511
  p.state = 'removed';
425
- p.uninstall = uninstallFor(deps.platform);
512
+ // Cloudflare's system service is the owner's to remove: buddi never runs sudo.
513
+ p.uninstall = systemDaemon ? uninstallFor(deps.platform) : null;
426
514
  p.error = failures.length ? `Some of it is still there. ${failures.join(' ')} Try Remove again.` : null;
427
515
  emit();
428
516
  return p;