@withbuddi/buddi 0.1.0-pre.27 → 0.1.0-pre.29

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 (1395) hide show
  1. package/README.md +3 -1
  2. package/extension/manifest.json +2 -2
  3. package/node_modules/@buddi/cli/dist/.tsbuildinfo +1 -1
  4. package/node_modules/@buddi/cli/dist/args.d.ts +13 -2
  5. package/node_modules/@buddi/cli/dist/args.d.ts.map +1 -1
  6. package/node_modules/@buddi/cli/dist/args.js +12 -3
  7. package/node_modules/@buddi/cli/dist/args.js.map +1 -1
  8. package/node_modules/@buddi/cli/dist/commands.d.ts +10 -0
  9. package/node_modules/@buddi/cli/dist/commands.d.ts.map +1 -1
  10. package/node_modules/@buddi/cli/dist/commands.js +301 -20
  11. package/node_modules/@buddi/cli/dist/commands.js.map +1 -1
  12. package/node_modules/@buddi/cli/dist/dashboard-cmd.d.ts +3 -0
  13. package/node_modules/@buddi/cli/dist/dashboard-cmd.d.ts.map +1 -1
  14. package/node_modules/@buddi/cli/dist/dashboard-cmd.js +63 -0
  15. package/node_modules/@buddi/cli/dist/dashboard-cmd.js.map +1 -1
  16. package/node_modules/@buddi/cli/dist/doctor-probes.d.ts.map +1 -1
  17. package/node_modules/@buddi/cli/dist/doctor-probes.js +12 -10
  18. package/node_modules/@buddi/cli/dist/doctor-probes.js.map +1 -1
  19. package/node_modules/@buddi/cli/dist/doctor.d.ts +14 -1
  20. package/node_modules/@buddi/cli/dist/doctor.d.ts.map +1 -1
  21. package/node_modules/@buddi/cli/dist/doctor.js +18 -0
  22. package/node_modules/@buddi/cli/dist/doctor.js.map +1 -1
  23. package/node_modules/@buddi/cli/dist/main.d.ts.map +1 -1
  24. package/node_modules/@buddi/cli/dist/main.js +22 -1
  25. package/node_modules/@buddi/cli/dist/main.js.map +1 -1
  26. package/node_modules/@buddi/cli/dist/mcp/gateway-client.d.ts +19 -17
  27. package/node_modules/@buddi/cli/dist/mcp/gateway-client.d.ts.map +1 -1
  28. package/node_modules/@buddi/cli/dist/mcp/gateway-client.js +128 -29
  29. package/node_modules/@buddi/cli/dist/mcp/gateway-client.js.map +1 -1
  30. package/node_modules/@buddi/cli/dist/mcp/tools.d.ts +6 -0
  31. package/node_modules/@buddi/cli/dist/mcp/tools.d.ts.map +1 -1
  32. package/node_modules/@buddi/cli/dist/mcp/tools.js +23 -3
  33. package/node_modules/@buddi/cli/dist/mcp/tools.js.map +1 -1
  34. package/node_modules/@buddi/cli/dist/telegram-cmd.d.ts.map +1 -1
  35. package/node_modules/@buddi/cli/dist/telegram-cmd.js +5 -4
  36. package/node_modules/@buddi/cli/dist/telegram-cmd.js.map +1 -1
  37. package/node_modules/@buddi/core/dist/.tsbuildinfo +1 -1
  38. package/node_modules/@buddi/core/dist/agents/catalog.d.ts +3 -0
  39. package/node_modules/@buddi/core/dist/agents/catalog.d.ts.map +1 -1
  40. package/node_modules/@buddi/core/dist/agents/catalog.js +8 -6
  41. package/node_modules/@buddi/core/dist/agents/catalog.js.map +1 -1
  42. package/node_modules/@buddi/core/dist/agents/edit.d.ts +3 -0
  43. package/node_modules/@buddi/core/dist/agents/edit.d.ts.map +1 -1
  44. package/node_modules/@buddi/core/dist/agents/edit.js +3 -1
  45. package/node_modules/@buddi/core/dist/agents/edit.js.map +1 -1
  46. package/node_modules/@buddi/core/dist/agents/frontmatter.d.ts +22 -12
  47. package/node_modules/@buddi/core/dist/agents/frontmatter.d.ts.map +1 -1
  48. package/node_modules/@buddi/core/dist/agents/frontmatter.js +7 -0
  49. package/node_modules/@buddi/core/dist/agents/frontmatter.js.map +1 -1
  50. package/node_modules/@buddi/core/dist/agents/idle-rollover.d.ts +20 -0
  51. package/node_modules/@buddi/core/dist/agents/idle-rollover.d.ts.map +1 -0
  52. package/node_modules/@buddi/core/dist/agents/idle-rollover.js +30 -0
  53. package/node_modules/@buddi/core/dist/agents/idle-rollover.js.map +1 -0
  54. package/node_modules/@buddi/core/dist/agents/index.d.ts +1 -0
  55. package/node_modules/@buddi/core/dist/agents/index.d.ts.map +1 -1
  56. package/node_modules/@buddi/core/dist/agents/index.js +1 -0
  57. package/node_modules/@buddi/core/dist/agents/index.js.map +1 -1
  58. package/node_modules/@buddi/core/dist/agents/skills.d.ts +2 -2
  59. package/node_modules/@buddi/core/dist/backup/dump.d.ts +9 -0
  60. package/node_modules/@buddi/core/dist/backup/dump.d.ts.map +1 -1
  61. package/node_modules/@buddi/core/dist/backup/dump.js +10 -1
  62. package/node_modules/@buddi/core/dist/backup/dump.js.map +1 -1
  63. package/node_modules/@buddi/core/dist/backup/pending.d.ts +13 -0
  64. package/node_modules/@buddi/core/dist/backup/pending.d.ts.map +1 -1
  65. package/node_modules/@buddi/core/dist/backup/pending.js +56 -4
  66. package/node_modules/@buddi/core/dist/backup/pending.js.map +1 -1
  67. package/node_modules/@buddi/core/dist/backup/restore.d.ts +3 -1
  68. package/node_modules/@buddi/core/dist/backup/restore.d.ts.map +1 -1
  69. package/node_modules/@buddi/core/dist/backup/restore.js +1 -1
  70. package/node_modules/@buddi/core/dist/backup/restore.js.map +1 -1
  71. package/node_modules/@buddi/core/dist/clock-widget.d.ts +38 -0
  72. package/node_modules/@buddi/core/dist/clock-widget.d.ts.map +1 -0
  73. package/node_modules/@buddi/core/dist/clock-widget.js +114 -0
  74. package/node_modules/@buddi/core/dist/clock-widget.js.map +1 -0
  75. package/node_modules/@buddi/core/dist/failures/owner-message.d.ts +25 -0
  76. package/node_modules/@buddi/core/dist/failures/owner-message.d.ts.map +1 -1
  77. package/node_modules/@buddi/core/dist/failures/owner-message.js +90 -0
  78. package/node_modules/@buddi/core/dist/failures/owner-message.js.map +1 -1
  79. package/node_modules/@buddi/core/dist/feedback/index.d.ts +129 -0
  80. package/node_modules/@buddi/core/dist/feedback/index.d.ts.map +1 -0
  81. package/node_modules/@buddi/core/dist/feedback/index.js +180 -0
  82. package/node_modules/@buddi/core/dist/feedback/index.js.map +1 -0
  83. package/node_modules/@buddi/core/dist/groups.d.ts +33 -0
  84. package/node_modules/@buddi/core/dist/groups.d.ts.map +1 -1
  85. package/node_modules/@buddi/core/dist/groups.js +76 -4
  86. package/node_modules/@buddi/core/dist/groups.js.map +1 -1
  87. package/node_modules/@buddi/core/dist/home.d.ts +5 -5
  88. package/node_modules/@buddi/core/dist/host/build.d.ts +19 -1
  89. package/node_modules/@buddi/core/dist/host/build.d.ts.map +1 -1
  90. package/node_modules/@buddi/core/dist/host/build.js +150 -3
  91. package/node_modules/@buddi/core/dist/host/build.js.map +1 -1
  92. package/node_modules/@buddi/core/dist/host/types.d.ts +62 -2
  93. package/node_modules/@buddi/core/dist/host/types.d.ts.map +1 -1
  94. package/node_modules/@buddi/core/dist/index.d.ts +9 -0
  95. package/node_modules/@buddi/core/dist/index.d.ts.map +1 -1
  96. package/node_modules/@buddi/core/dist/index.js +9 -0
  97. package/node_modules/@buddi/core/dist/index.js.map +1 -1
  98. package/node_modules/@buddi/core/dist/learning/policies.d.ts +7 -1
  99. package/node_modules/@buddi/core/dist/learning/policies.d.ts.map +1 -1
  100. package/node_modules/@buddi/core/dist/learning/policies.js +4 -1
  101. package/node_modules/@buddi/core/dist/learning/policies.js.map +1 -1
  102. package/node_modules/@buddi/core/dist/learning/store.d.ts +29 -1
  103. package/node_modules/@buddi/core/dist/learning/store.d.ts.map +1 -1
  104. package/node_modules/@buddi/core/dist/learning/store.js +33 -8
  105. package/node_modules/@buddi/core/dist/learning/store.js.map +1 -1
  106. package/node_modules/@buddi/core/dist/learning/types.d.ts +24 -1
  107. package/node_modules/@buddi/core/dist/learning/types.d.ts.map +1 -1
  108. package/node_modules/@buddi/core/dist/learning/types.js +6 -0
  109. package/node_modules/@buddi/core/dist/learning/types.js.map +1 -1
  110. package/node_modules/@buddi/core/dist/lock.d.ts +76 -0
  111. package/node_modules/@buddi/core/dist/lock.d.ts.map +1 -0
  112. package/node_modules/@buddi/core/dist/lock.js +167 -0
  113. package/node_modules/@buddi/core/dist/lock.js.map +1 -0
  114. package/node_modules/@buddi/core/dist/metrics.d.ts.map +1 -1
  115. package/node_modules/@buddi/core/dist/metrics.js +4 -2
  116. package/node_modules/@buddi/core/dist/metrics.js.map +1 -1
  117. package/node_modules/@buddi/core/dist/onboarding/store.d.ts +5 -0
  118. package/node_modules/@buddi/core/dist/onboarding/store.d.ts.map +1 -1
  119. package/node_modules/@buddi/core/dist/onboarding/store.js +35 -5
  120. package/node_modules/@buddi/core/dist/onboarding/store.js.map +1 -1
  121. package/node_modules/@buddi/core/dist/onboarding/types.d.ts +10 -0
  122. package/node_modules/@buddi/core/dist/onboarding/types.d.ts.map +1 -1
  123. package/node_modules/@buddi/core/dist/onboarding/types.js +2 -0
  124. package/node_modules/@buddi/core/dist/onboarding/types.js.map +1 -1
  125. package/node_modules/@buddi/core/dist/owner-format.d.ts +14 -0
  126. package/node_modules/@buddi/core/dist/owner-format.d.ts.map +1 -0
  127. package/node_modules/@buddi/core/dist/owner-format.js +47 -0
  128. package/node_modules/@buddi/core/dist/owner-format.js.map +1 -0
  129. package/node_modules/@buddi/core/dist/owner-timezone.d.ts +46 -0
  130. package/node_modules/@buddi/core/dist/owner-timezone.d.ts.map +1 -0
  131. package/node_modules/@buddi/core/dist/owner-timezone.js +43 -0
  132. package/node_modules/@buddi/core/dist/owner-timezone.js.map +1 -0
  133. package/node_modules/@buddi/core/dist/owner.d.ts +2 -1
  134. package/node_modules/@buddi/core/dist/owner.d.ts.map +1 -1
  135. package/node_modules/@buddi/core/dist/owner.js.map +1 -1
  136. package/node_modules/@buddi/core/dist/pages.d.ts +37 -38
  137. package/node_modules/@buddi/core/dist/pages.d.ts.map +1 -1
  138. package/node_modules/@buddi/core/dist/pages.js +30 -3
  139. package/node_modules/@buddi/core/dist/pages.js.map +1 -1
  140. package/node_modules/@buddi/core/dist/places.d.ts +110 -0
  141. package/node_modules/@buddi/core/dist/places.d.ts.map +1 -0
  142. package/node_modules/@buddi/core/dist/places.js +239 -0
  143. package/node_modules/@buddi/core/dist/places.js.map +1 -0
  144. package/node_modules/@buddi/core/dist/plugin/index.d.ts +13 -5
  145. package/node_modules/@buddi/core/dist/plugin/index.d.ts.map +1 -1
  146. package/node_modules/@buddi/core/dist/plugin/index.js +3 -0
  147. package/node_modules/@buddi/core/dist/plugin/index.js.map +1 -1
  148. package/node_modules/@buddi/core/dist/plugin/requires.d.ts +75 -0
  149. package/node_modules/@buddi/core/dist/plugin/requires.d.ts.map +1 -0
  150. package/node_modules/@buddi/core/dist/plugin/requires.js +77 -0
  151. package/node_modules/@buddi/core/dist/plugin/requires.js.map +1 -0
  152. package/node_modules/@buddi/core/dist/plugin/uses.d.ts +1 -1
  153. package/node_modules/@buddi/core/dist/plugin/uses.d.ts.map +1 -1
  154. package/node_modules/@buddi/core/dist/plugin/uses.js +2 -0
  155. package/node_modules/@buddi/core/dist/plugin/uses.js.map +1 -1
  156. package/node_modules/@buddi/core/dist/plugin/version.d.ts +1 -1
  157. package/node_modules/@buddi/core/dist/plugin/version.js +1 -1
  158. package/node_modules/@buddi/core/dist/queue/retry-policy.d.ts +5 -0
  159. package/node_modules/@buddi/core/dist/queue/retry-policy.d.ts.map +1 -1
  160. package/node_modules/@buddi/core/dist/queue/retry-policy.js +19 -2
  161. package/node_modules/@buddi/core/dist/queue/retry-policy.js.map +1 -1
  162. package/node_modules/@buddi/core/dist/registry.d.ts +47 -3
  163. package/node_modules/@buddi/core/dist/registry.d.ts.map +1 -1
  164. package/node_modules/@buddi/core/dist/registry.js +150 -3
  165. package/node_modules/@buddi/core/dist/registry.js.map +1 -1
  166. package/node_modules/@buddi/core/dist/scheduler/enqueue.d.ts +71 -0
  167. package/node_modules/@buddi/core/dist/scheduler/enqueue.d.ts.map +1 -0
  168. package/node_modules/@buddi/core/dist/scheduler/enqueue.js +116 -0
  169. package/node_modules/@buddi/core/dist/scheduler/enqueue.js.map +1 -0
  170. package/node_modules/@buddi/core/dist/scheduler/index.d.ts +1 -0
  171. package/node_modules/@buddi/core/dist/scheduler/index.d.ts.map +1 -1
  172. package/node_modules/@buddi/core/dist/scheduler/index.js +1 -0
  173. package/node_modules/@buddi/core/dist/scheduler/index.js.map +1 -1
  174. package/node_modules/@buddi/core/dist/scheduler/missions.d.ts +15 -0
  175. package/node_modules/@buddi/core/dist/scheduler/missions.d.ts.map +1 -1
  176. package/node_modules/@buddi/core/dist/scheduler/missions.js +43 -4
  177. package/node_modules/@buddi/core/dist/scheduler/missions.js.map +1 -1
  178. package/node_modules/@buddi/core/dist/scheduler/types.d.ts +10 -0
  179. package/node_modules/@buddi/core/dist/scheduler/types.d.ts.map +1 -1
  180. package/node_modules/@buddi/core/dist/scheduler/types.js +3 -0
  181. package/node_modules/@buddi/core/dist/scheduler/types.js.map +1 -1
  182. package/node_modules/@buddi/core/dist/secrets/settings.d.ts +6 -6
  183. package/node_modules/@buddi/core/dist/semver.d.ts +17 -0
  184. package/node_modules/@buddi/core/dist/semver.d.ts.map +1 -1
  185. package/node_modules/@buddi/core/dist/semver.js +130 -0
  186. package/node_modules/@buddi/core/dist/semver.js.map +1 -1
  187. package/node_modules/@buddi/core/dist/sentinels/run.d.ts +6 -1
  188. package/node_modules/@buddi/core/dist/sentinels/run.d.ts.map +1 -1
  189. package/node_modules/@buddi/core/dist/sentinels/run.js +43 -24
  190. package/node_modules/@buddi/core/dist/sentinels/run.js.map +1 -1
  191. package/node_modules/@buddi/core/dist/sentinels/types.d.ts +13 -0
  192. package/node_modules/@buddi/core/dist/sentinels/types.d.ts.map +1 -1
  193. package/node_modules/@buddi/core/dist/sentinels/types.js.map +1 -1
  194. package/node_modules/@buddi/core/dist/sources/index.d.ts +1 -0
  195. package/node_modules/@buddi/core/dist/sources/index.d.ts.map +1 -1
  196. package/node_modules/@buddi/core/dist/sources/index.js +1 -0
  197. package/node_modules/@buddi/core/dist/sources/index.js.map +1 -1
  198. package/node_modules/@buddi/core/dist/sources/run.d.ts +8 -0
  199. package/node_modules/@buddi/core/dist/sources/run.d.ts.map +1 -1
  200. package/node_modules/@buddi/core/dist/sources/run.js +1 -1
  201. package/node_modules/@buddi/core/dist/sources/run.js.map +1 -1
  202. package/node_modules/@buddi/core/dist/sources/watch.d.ts +40 -0
  203. package/node_modules/@buddi/core/dist/sources/watch.d.ts.map +1 -0
  204. package/node_modules/@buddi/core/dist/sources/watch.js +81 -0
  205. package/node_modules/@buddi/core/dist/sources/watch.js.map +1 -0
  206. package/node_modules/@buddi/core/dist/time.d.ts +17 -3
  207. package/node_modules/@buddi/core/dist/time.d.ts.map +1 -1
  208. package/node_modules/@buddi/core/dist/time.js +27 -3
  209. package/node_modules/@buddi/core/dist/time.js.map +1 -1
  210. package/node_modules/@buddi/core/dist/tools.d.ts +77 -1
  211. package/node_modules/@buddi/core/dist/tools.d.ts.map +1 -1
  212. package/node_modules/@buddi/core/dist/tools.js.map +1 -1
  213. package/node_modules/@buddi/core/dist/views.d.ts +68 -68
  214. package/node_modules/@buddi/core/dist/views.d.ts.map +1 -1
  215. package/node_modules/@buddi/core/dist/views.js +3 -0
  216. package/node_modules/@buddi/core/dist/views.js.map +1 -1
  217. package/node_modules/@buddi/core/dist/widget-settings.d.ts +161 -0
  218. package/node_modules/@buddi/core/dist/widget-settings.d.ts.map +1 -0
  219. package/node_modules/@buddi/core/dist/widget-settings.js +314 -0
  220. package/node_modules/@buddi/core/dist/widget-settings.js.map +1 -0
  221. package/node_modules/@buddi/core/dist/widgets.d.ts +206 -0
  222. package/node_modules/@buddi/core/dist/widgets.d.ts.map +1 -0
  223. package/node_modules/@buddi/core/dist/widgets.js +247 -0
  224. package/node_modules/@buddi/core/dist/widgets.js.map +1 -0
  225. package/node_modules/@buddi/core/migrations/056_dashboard_sessions.sql +37 -0
  226. package/node_modules/@buddi/core/migrations/057_proposal_decided_by.sql +34 -0
  227. package/node_modules/@buddi/core/migrations/058_message_feedback.sql +50 -0
  228. package/node_modules/@buddi/core/migrations/059_dashboard_lock.sql +33 -0
  229. package/node_modules/@buddi/core/migrations/060_owner_places.sql +30 -0
  230. package/node_modules/@buddi/core/migrations/061_owner_formats.sql +10 -0
  231. package/node_modules/@buddi/core/migrations/062_group_deleted.sql +7 -0
  232. package/node_modules/@buddi/core/migrations/063_provider_account_limits.sql +20 -0
  233. package/node_modules/@buddi/core/migrations/064_mission_coalesce.sql +12 -0
  234. package/node_modules/@buddi/core/migrations/065_api_tokens.sql +28 -0
  235. package/node_modules/@buddi/gateway/dist/.tsbuildinfo +1 -1
  236. package/node_modules/@buddi/gateway/dist/account-limits.d.ts +45 -0
  237. package/node_modules/@buddi/gateway/dist/account-limits.d.ts.map +1 -0
  238. package/node_modules/@buddi/gateway/dist/account-limits.js +87 -0
  239. package/node_modules/@buddi/gateway/dist/account-limits.js.map +1 -0
  240. package/node_modules/@buddi/gateway/dist/accounts-cli.d.ts +88 -0
  241. package/node_modules/@buddi/gateway/dist/accounts-cli.d.ts.map +1 -0
  242. package/node_modules/@buddi/gateway/dist/accounts-cli.js +216 -0
  243. package/node_modules/@buddi/gateway/dist/accounts-cli.js.map +1 -0
  244. package/node_modules/@buddi/gateway/dist/agents/canvas.d.ts +20 -20
  245. package/node_modules/@buddi/gateway/dist/agents/learning-digest.d.ts +11 -1
  246. package/node_modules/@buddi/gateway/dist/agents/learning-digest.d.ts.map +1 -1
  247. package/node_modules/@buddi/gateway/dist/agents/learning-digest.js +43 -4
  248. package/node_modules/@buddi/gateway/dist/agents/learning-digest.js.map +1 -1
  249. package/node_modules/@buddi/gateway/dist/agents/owner-tools.d.ts.map +1 -1
  250. package/node_modules/@buddi/gateway/dist/agents/owner-tools.js +3 -2
  251. package/node_modules/@buddi/gateway/dist/agents/owner-tools.js.map +1 -1
  252. package/node_modules/@buddi/gateway/dist/agents/platform-files.d.ts +2 -0
  253. package/node_modules/@buddi/gateway/dist/agents/platform-files.d.ts.map +1 -1
  254. package/node_modules/@buddi/gateway/dist/agents/platform-files.js +2 -0
  255. package/node_modules/@buddi/gateway/dist/agents/platform-files.js.map +1 -1
  256. package/node_modules/@buddi/gateway/dist/agents/platform.d.ts +40 -20
  257. package/node_modules/@buddi/gateway/dist/agents/platform.d.ts.map +1 -1
  258. package/node_modules/@buddi/gateway/dist/agents/platform.js +46 -3
  259. package/node_modules/@buddi/gateway/dist/agents/platform.js.map +1 -1
  260. package/node_modules/@buddi/gateway/dist/agents-cli.d.ts +1 -1
  261. package/node_modules/@buddi/gateway/dist/agents-cli.d.ts.map +1 -1
  262. package/node_modules/@buddi/gateway/dist/agents-cli.js +12 -2
  263. package/node_modules/@buddi/gateway/dist/agents-cli.js.map +1 -1
  264. package/node_modules/@buddi/gateway/dist/api-token-cli.d.ts +17 -0
  265. package/node_modules/@buddi/gateway/dist/api-token-cli.d.ts.map +1 -0
  266. package/node_modules/@buddi/gateway/dist/api-token-cli.js +108 -0
  267. package/node_modules/@buddi/gateway/dist/api-token-cli.js.map +1 -0
  268. package/node_modules/@buddi/gateway/dist/bootstrap.d.ts +6 -2
  269. package/node_modules/@buddi/gateway/dist/bootstrap.d.ts.map +1 -1
  270. package/node_modules/@buddi/gateway/dist/bootstrap.js +25 -7
  271. package/node_modules/@buddi/gateway/dist/bootstrap.js.map +1 -1
  272. package/node_modules/@buddi/gateway/dist/chat/session.d.ts +5 -0
  273. package/node_modules/@buddi/gateway/dist/chat/session.d.ts.map +1 -1
  274. package/node_modules/@buddi/gateway/dist/chat/session.js +13 -2
  275. package/node_modules/@buddi/gateway/dist/chat/session.js.map +1 -1
  276. package/node_modules/@buddi/gateway/dist/cli.d.ts.map +1 -1
  277. package/node_modules/@buddi/gateway/dist/cli.js +14 -3
  278. package/node_modules/@buddi/gateway/dist/cli.js.map +1 -1
  279. package/node_modules/@buddi/gateway/dist/index.d.ts +3 -0
  280. package/node_modules/@buddi/gateway/dist/index.d.ts.map +1 -1
  281. package/node_modules/@buddi/gateway/dist/index.js +3 -0
  282. package/node_modules/@buddi/gateway/dist/index.js.map +1 -1
  283. package/node_modules/@buddi/gateway/dist/mcp/requests.d.ts.map +1 -1
  284. package/node_modules/@buddi/gateway/dist/mcp/requests.js +1 -0
  285. package/node_modules/@buddi/gateway/dist/mcp/requests.js.map +1 -1
  286. package/node_modules/@buddi/gateway/dist/missions/dead-letter.d.ts +2 -1
  287. package/node_modules/@buddi/gateway/dist/missions/dead-letter.d.ts.map +1 -1
  288. package/node_modules/@buddi/gateway/dist/missions/dead-letter.js +19 -5
  289. package/node_modules/@buddi/gateway/dist/missions/dead-letter.js.map +1 -1
  290. package/node_modules/@buddi/gateway/dist/missions/defaults.d.ts +6 -0
  291. package/node_modules/@buddi/gateway/dist/missions/defaults.d.ts.map +1 -1
  292. package/node_modules/@buddi/gateway/dist/missions/defaults.js +10 -2
  293. package/node_modules/@buddi/gateway/dist/missions/defaults.js.map +1 -1
  294. package/node_modules/@buddi/gateway/dist/missions/execute.d.ts.map +1 -1
  295. package/node_modules/@buddi/gateway/dist/missions/execute.js +14 -8
  296. package/node_modules/@buddi/gateway/dist/missions/execute.js.map +1 -1
  297. package/node_modules/@buddi/gateway/dist/missions/inline.js +1 -1
  298. package/node_modules/@buddi/gateway/dist/missions/inline.js.map +1 -1
  299. package/node_modules/@buddi/gateway/dist/missions/sentinel-wake.d.ts +11 -0
  300. package/node_modules/@buddi/gateway/dist/missions/sentinel-wake.d.ts.map +1 -1
  301. package/node_modules/@buddi/gateway/dist/missions/sentinel-wake.js +37 -1
  302. package/node_modules/@buddi/gateway/dist/missions/sentinel-wake.js.map +1 -1
  303. package/node_modules/@buddi/gateway/dist/missions-cli.d.ts.map +1 -1
  304. package/node_modules/@buddi/gateway/dist/missions-cli.js +5 -5
  305. package/node_modules/@buddi/gateway/dist/missions-cli.js.map +1 -1
  306. package/node_modules/@buddi/gateway/dist/nudges-cli.js +2 -2
  307. package/node_modules/@buddi/gateway/dist/nudges-cli.js.map +1 -1
  308. package/node_modules/@buddi/gateway/dist/owner-seed.js +2 -2
  309. package/node_modules/@buddi/gateway/dist/owner-seed.js.map +1 -1
  310. package/node_modules/@buddi/gateway/dist/plugins/approve.js +4 -1
  311. package/node_modules/@buddi/gateway/dist/plugins/approve.js.map +1 -1
  312. package/node_modules/@buddi/gateway/dist/plugins/live.d.ts +8 -1
  313. package/node_modules/@buddi/gateway/dist/plugins/live.d.ts.map +1 -1
  314. package/node_modules/@buddi/gateway/dist/plugins/live.js +25 -7
  315. package/node_modules/@buddi/gateway/dist/plugins/live.js.map +1 -1
  316. package/node_modules/@buddi/gateway/dist/plugins/load.d.ts +55 -0
  317. package/node_modules/@buddi/gateway/dist/plugins/load.d.ts.map +1 -1
  318. package/node_modules/@buddi/gateway/dist/plugins/load.js +100 -4
  319. package/node_modules/@buddi/gateway/dist/plugins/load.js.map +1 -1
  320. package/node_modules/@buddi/gateway/dist/plugins/paths.d.ts +14 -0
  321. package/node_modules/@buddi/gateway/dist/plugins/paths.d.ts.map +1 -1
  322. package/node_modules/@buddi/gateway/dist/plugins/paths.js +27 -1
  323. package/node_modules/@buddi/gateway/dist/plugins/paths.js.map +1 -1
  324. package/node_modules/@buddi/gateway/dist/plugins/requires.d.ts +79 -0
  325. package/node_modules/@buddi/gateway/dist/plugins/requires.d.ts.map +1 -0
  326. package/node_modules/@buddi/gateway/dist/plugins/requires.js +178 -0
  327. package/node_modules/@buddi/gateway/dist/plugins/requires.js.map +1 -0
  328. package/node_modules/@buddi/gateway/dist/plugins/stage.d.ts +33 -3
  329. package/node_modules/@buddi/gateway/dist/plugins/stage.d.ts.map +1 -1
  330. package/node_modules/@buddi/gateway/dist/plugins/stage.js +41 -6
  331. package/node_modules/@buddi/gateway/dist/plugins/stage.js.map +1 -1
  332. package/node_modules/@buddi/gateway/dist/plugins/update.d.ts +21 -0
  333. package/node_modules/@buddi/gateway/dist/plugins/update.d.ts.map +1 -1
  334. package/node_modules/@buddi/gateway/dist/plugins/update.js +16 -0
  335. package/node_modules/@buddi/gateway/dist/plugins/update.js.map +1 -1
  336. package/node_modules/@buddi/gateway/dist/plugins-cli.d.ts +5 -1
  337. package/node_modules/@buddi/gateway/dist/plugins-cli.d.ts.map +1 -1
  338. package/node_modules/@buddi/gateway/dist/plugins-cli.js +48 -11
  339. package/node_modules/@buddi/gateway/dist/plugins-cli.js.map +1 -1
  340. package/node_modules/@buddi/gateway/dist/provider-accounts.d.ts +4 -0
  341. package/node_modules/@buddi/gateway/dist/provider-accounts.d.ts.map +1 -1
  342. package/node_modules/@buddi/gateway/dist/provider-accounts.js +68 -10
  343. package/node_modules/@buddi/gateway/dist/provider-accounts.js.map +1 -1
  344. package/node_modules/@buddi/gateway/dist/provider-diagnostics.d.ts.map +1 -1
  345. package/node_modules/@buddi/gateway/dist/provider-diagnostics.js +9 -0
  346. package/node_modules/@buddi/gateway/dist/provider-diagnostics.js.map +1 -1
  347. package/node_modules/@buddi/gateway/dist/reminders-cli.js +2 -2
  348. package/node_modules/@buddi/gateway/dist/reminders-cli.js.map +1 -1
  349. package/node_modules/@buddi/gateway/dist/serve.d.ts +2 -0
  350. package/node_modules/@buddi/gateway/dist/serve.d.ts.map +1 -1
  351. package/node_modules/@buddi/gateway/dist/serve.js +78 -8
  352. package/node_modules/@buddi/gateway/dist/serve.js.map +1 -1
  353. package/node_modules/@buddi/gateway/dist/surfaces/browser-continuation.d.ts +2 -1
  354. package/node_modules/@buddi/gateway/dist/surfaces/browser-continuation.d.ts.map +1 -1
  355. package/node_modules/@buddi/gateway/dist/surfaces/browser-continuation.js +8 -5
  356. package/node_modules/@buddi/gateway/dist/surfaces/browser-continuation.js.map +1 -1
  357. package/node_modules/@buddi/gateway/dist/surfaces/browser-handoff.d.ts +27 -4
  358. package/node_modules/@buddi/gateway/dist/surfaces/browser-handoff.d.ts.map +1 -1
  359. package/node_modules/@buddi/gateway/dist/surfaces/browser-handoff.js +57 -7
  360. package/node_modules/@buddi/gateway/dist/surfaces/browser-handoff.js.map +1 -1
  361. package/node_modules/@buddi/gateway/dist/surfaces/carry-over.d.ts +89 -0
  362. package/node_modules/@buddi/gateway/dist/surfaces/carry-over.d.ts.map +1 -0
  363. package/node_modules/@buddi/gateway/dist/surfaces/carry-over.js +172 -0
  364. package/node_modules/@buddi/gateway/dist/surfaces/carry-over.js.map +1 -0
  365. package/node_modules/@buddi/gateway/dist/surfaces/conversation-lifetime.d.ts +5 -2
  366. package/node_modules/@buddi/gateway/dist/surfaces/conversation-lifetime.d.ts.map +1 -1
  367. package/node_modules/@buddi/gateway/dist/surfaces/conversation-lifetime.js +5 -2
  368. package/node_modules/@buddi/gateway/dist/surfaces/conversation-lifetime.js.map +1 -1
  369. package/node_modules/@buddi/gateway/dist/surfaces/failure.d.ts.map +1 -1
  370. package/node_modules/@buddi/gateway/dist/surfaces/failure.js +9 -1
  371. package/node_modules/@buddi/gateway/dist/surfaces/failure.js.map +1 -1
  372. package/node_modules/@buddi/gateway/dist/system-context.d.ts +18 -0
  373. package/node_modules/@buddi/gateway/dist/system-context.d.ts.map +1 -1
  374. package/node_modules/@buddi/gateway/dist/system-context.js +46 -4
  375. package/node_modules/@buddi/gateway/dist/system-context.js.map +1 -1
  376. package/node_modules/@buddi/gateway/dist/telegram/api.d.ts +34 -2
  377. package/node_modules/@buddi/gateway/dist/telegram/api.d.ts.map +1 -1
  378. package/node_modules/@buddi/gateway/dist/telegram/api.js +15 -2
  379. package/node_modules/@buddi/gateway/dist/telegram/api.js.map +1 -1
  380. package/node_modules/@buddi/gateway/dist/telegram/env-owner.d.ts +30 -0
  381. package/node_modules/@buddi/gateway/dist/telegram/env-owner.d.ts.map +1 -0
  382. package/node_modules/@buddi/gateway/dist/telegram/env-owner.js +45 -0
  383. package/node_modules/@buddi/gateway/dist/telegram/env-owner.js.map +1 -0
  384. package/node_modules/@buddi/gateway/dist/telegram/main.d.ts +0 -2
  385. package/node_modules/@buddi/gateway/dist/telegram/main.d.ts.map +1 -1
  386. package/node_modules/@buddi/gateway/dist/telegram/main.js +21 -28
  387. package/node_modules/@buddi/gateway/dist/telegram/main.js.map +1 -1
  388. package/node_modules/@buddi/gateway/dist/telegram/notify.d.ts.map +1 -1
  389. package/node_modules/@buddi/gateway/dist/telegram/notify.js +1 -1
  390. package/node_modules/@buddi/gateway/dist/telegram/notify.js.map +1 -1
  391. package/node_modules/@buddi/gateway/dist/telegram/outbound.d.ts +3 -3
  392. package/node_modules/@buddi/gateway/dist/telegram/outbound.d.ts.map +1 -1
  393. package/node_modules/@buddi/gateway/dist/telegram/outbound.js +19 -5
  394. package/node_modules/@buddi/gateway/dist/telegram/outbound.js.map +1 -1
  395. package/node_modules/@buddi/gateway/dist/telegram/reactions.d.ts +45 -0
  396. package/node_modules/@buddi/gateway/dist/telegram/reactions.d.ts.map +1 -0
  397. package/node_modules/@buddi/gateway/dist/telegram/reactions.js +107 -0
  398. package/node_modules/@buddi/gateway/dist/telegram/reactions.js.map +1 -0
  399. package/node_modules/@buddi/gateway/dist/telegram/surface.d.ts +5 -1
  400. package/node_modules/@buddi/gateway/dist/telegram/surface.d.ts.map +1 -1
  401. package/node_modules/@buddi/gateway/dist/telegram/surface.js +93 -12
  402. package/node_modules/@buddi/gateway/dist/telegram/surface.js.map +1 -1
  403. package/node_modules/@buddi/gateway/dist/tips/engine.d.ts +2 -0
  404. package/node_modules/@buddi/gateway/dist/tips/engine.d.ts.map +1 -1
  405. package/node_modules/@buddi/gateway/dist/tips/engine.js +8 -5
  406. package/node_modules/@buddi/gateway/dist/tips/engine.js.map +1 -1
  407. package/node_modules/@buddi/gateway/dist/tips/facts.d.ts +23 -0
  408. package/node_modules/@buddi/gateway/dist/tips/facts.d.ts.map +1 -1
  409. package/node_modules/@buddi/gateway/dist/tips/facts.js +19 -0
  410. package/node_modules/@buddi/gateway/dist/tips/facts.js.map +1 -1
  411. package/node_modules/@buddi/gateway/dist/tips/route.js +2 -2
  412. package/node_modules/@buddi/gateway/dist/tips/route.js.map +1 -1
  413. package/node_modules/@buddi/gateway/dist/tips/rules.d.ts +3 -2
  414. package/node_modules/@buddi/gateway/dist/tips/rules.d.ts.map +1 -1
  415. package/node_modules/@buddi/gateway/dist/tips/rules.js +26 -0
  416. package/node_modules/@buddi/gateway/dist/tips/rules.js.map +1 -1
  417. package/node_modules/@buddi/gateway/dist/web/agents.d.ts +3 -1
  418. package/node_modules/@buddi/gateway/dist/web/agents.d.ts.map +1 -1
  419. package/node_modules/@buddi/gateway/dist/web/agents.js +20 -2
  420. package/node_modules/@buddi/gateway/dist/web/agents.js.map +1 -1
  421. package/node_modules/@buddi/gateway/dist/web/api-routes.d.ts +103 -0
  422. package/node_modules/@buddi/gateway/dist/web/api-routes.d.ts.map +1 -0
  423. package/node_modules/@buddi/gateway/dist/web/api-routes.js +1200 -0
  424. package/node_modules/@buddi/gateway/dist/web/api-routes.js.map +1 -0
  425. package/node_modules/@buddi/gateway/dist/web/api-scan.d.ts +17 -0
  426. package/node_modules/@buddi/gateway/dist/web/api-scan.d.ts.map +1 -0
  427. package/node_modules/@buddi/gateway/dist/web/api-scan.js +206 -0
  428. package/node_modules/@buddi/gateway/dist/web/api-scan.js.map +1 -0
  429. package/node_modules/@buddi/gateway/dist/web/api-tokens.d.ts +58 -0
  430. package/node_modules/@buddi/gateway/dist/web/api-tokens.d.ts.map +1 -0
  431. package/node_modules/@buddi/gateway/dist/web/api-tokens.js +136 -0
  432. package/node_modules/@buddi/gateway/dist/web/api-tokens.js.map +1 -0
  433. package/node_modules/@buddi/gateway/dist/web/backups.js +2 -2
  434. package/node_modules/@buddi/gateway/dist/web/backups.js.map +1 -1
  435. package/node_modules/@buddi/gateway/dist/web/chat.d.ts +10 -3
  436. package/node_modules/@buddi/gateway/dist/web/chat.d.ts.map +1 -1
  437. package/node_modules/@buddi/gateway/dist/web/chat.js +18 -5
  438. package/node_modules/@buddi/gateway/dist/web/chat.js.map +1 -1
  439. package/node_modules/@buddi/gateway/dist/web/group-lifecycle.d.ts +18 -0
  440. package/node_modules/@buddi/gateway/dist/web/group-lifecycle.d.ts.map +1 -0
  441. package/node_modules/@buddi/gateway/dist/web/group-lifecycle.js +46 -0
  442. package/node_modules/@buddi/gateway/dist/web/group-lifecycle.js.map +1 -0
  443. package/node_modules/@buddi/gateway/dist/web/lock-image.d.ts +37 -0
  444. package/node_modules/@buddi/gateway/dist/web/lock-image.d.ts.map +1 -0
  445. package/node_modules/@buddi/gateway/dist/web/lock-image.js +253 -0
  446. package/node_modules/@buddi/gateway/dist/web/lock-image.js.map +1 -0
  447. package/node_modules/@buddi/gateway/dist/web/lock.d.ts +162 -0
  448. package/node_modules/@buddi/gateway/dist/web/lock.d.ts.map +1 -0
  449. package/node_modules/@buddi/gateway/dist/web/lock.js +472 -0
  450. package/node_modules/@buddi/gateway/dist/web/lock.js.map +1 -0
  451. package/node_modules/@buddi/gateway/dist/web/pages.d.ts +1 -0
  452. package/node_modules/@buddi/gateway/dist/web/pages.d.ts.map +1 -1
  453. package/node_modules/@buddi/gateway/dist/web/pages.js +12 -1
  454. package/node_modules/@buddi/gateway/dist/web/pages.js.map +1 -1
  455. package/node_modules/@buddi/gateway/dist/web/places.d.ts +27 -0
  456. package/node_modules/@buddi/gateway/dist/web/places.d.ts.map +1 -0
  457. package/node_modules/@buddi/gateway/dist/web/places.js +90 -0
  458. package/node_modules/@buddi/gateway/dist/web/places.js.map +1 -0
  459. package/node_modules/@buddi/gateway/dist/web/plugins.d.ts +34 -1
  460. package/node_modules/@buddi/gateway/dist/web/plugins.d.ts.map +1 -1
  461. package/node_modules/@buddi/gateway/dist/web/plugins.js +99 -10
  462. package/node_modules/@buddi/gateway/dist/web/plugins.js.map +1 -1
  463. package/node_modules/@buddi/gateway/dist/web/proposals.d.ts +21 -0
  464. package/node_modules/@buddi/gateway/dist/web/proposals.d.ts.map +1 -1
  465. package/node_modules/@buddi/gateway/dist/web/proposals.js +50 -1
  466. package/node_modules/@buddi/gateway/dist/web/proposals.js.map +1 -1
  467. package/node_modules/@buddi/gateway/dist/web/read.d.ts +6 -0
  468. package/node_modules/@buddi/gateway/dist/web/read.d.ts.map +1 -1
  469. package/node_modules/@buddi/gateway/dist/web/read.js.map +1 -1
  470. package/node_modules/@buddi/gateway/dist/web/recovery.d.ts +19 -2
  471. package/node_modules/@buddi/gateway/dist/web/recovery.d.ts.map +1 -1
  472. package/node_modules/@buddi/gateway/dist/web/recovery.js +148 -7
  473. package/node_modules/@buddi/gateway/dist/web/recovery.js.map +1 -1
  474. package/node_modules/@buddi/gateway/dist/web/server.d.ts +9 -0
  475. package/node_modules/@buddi/gateway/dist/web/server.d.ts.map +1 -1
  476. package/node_modules/@buddi/gateway/dist/web/server.js +479 -52
  477. package/node_modules/@buddi/gateway/dist/web/server.js.map +1 -1
  478. package/node_modules/@buddi/gateway/dist/web/sessions.d.ts +124 -9
  479. package/node_modules/@buddi/gateway/dist/web/sessions.d.ts.map +1 -1
  480. package/node_modules/@buddi/gateway/dist/web/sessions.js +306 -24
  481. package/node_modules/@buddi/gateway/dist/web/sessions.js.map +1 -1
  482. package/node_modules/@buddi/gateway/dist/web/signed-out.d.ts +45 -0
  483. package/node_modules/@buddi/gateway/dist/web/signed-out.d.ts.map +1 -0
  484. package/node_modules/@buddi/gateway/dist/web/signed-out.js +201 -0
  485. package/node_modules/@buddi/gateway/dist/web/signed-out.js.map +1 -0
  486. package/node_modules/@buddi/gateway/dist/web/stream.d.ts.map +1 -1
  487. package/node_modules/@buddi/gateway/dist/web/stream.js +14 -0
  488. package/node_modules/@buddi/gateway/dist/web/stream.js.map +1 -1
  489. package/node_modules/@buddi/gateway/dist/web/tailscale.d.ts +46 -4
  490. package/node_modules/@buddi/gateway/dist/web/tailscale.d.ts.map +1 -1
  491. package/node_modules/@buddi/gateway/dist/web/tailscale.js +88 -16
  492. package/node_modules/@buddi/gateway/dist/web/tailscale.js.map +1 -1
  493. package/node_modules/@buddi/gateway/dist/web/widgets.d.ts +130 -0
  494. package/node_modules/@buddi/gateway/dist/web/widgets.d.ts.map +1 -0
  495. package/node_modules/@buddi/gateway/dist/web/widgets.js +473 -0
  496. package/node_modules/@buddi/gateway/dist/web/widgets.js.map +1 -0
  497. package/node_modules/@buddi/install/dist/.tsbuildinfo +1 -1
  498. package/node_modules/@buddi/install/dist/backup.d.ts +18 -0
  499. package/node_modules/@buddi/install/dist/backup.d.ts.map +1 -1
  500. package/node_modules/@buddi/install/dist/backup.js +39 -2
  501. package/node_modules/@buddi/install/dist/backup.js.map +1 -1
  502. package/node_modules/@buddi/install/dist/kept-data.d.ts +20 -0
  503. package/node_modules/@buddi/install/dist/kept-data.d.ts.map +1 -0
  504. package/node_modules/@buddi/install/dist/kept-data.js +34 -0
  505. package/node_modules/@buddi/install/dist/kept-data.js.map +1 -0
  506. package/node_modules/@buddi/install/dist/launcher.d.ts.map +1 -1
  507. package/node_modules/@buddi/install/dist/launcher.js +17 -3
  508. package/node_modules/@buddi/install/dist/launcher.js.map +1 -1
  509. package/node_modules/@buddi/runtime/dist/.tsbuildinfo +1 -1
  510. package/node_modules/@buddi/runtime/dist/anthropic.d.ts +9 -0
  511. package/node_modules/@buddi/runtime/dist/anthropic.d.ts.map +1 -1
  512. package/node_modules/@buddi/runtime/dist/anthropic.js +26 -9
  513. package/node_modules/@buddi/runtime/dist/anthropic.js.map +1 -1
  514. package/node_modules/@buddi/runtime/dist/codex-direct.d.ts +2 -1
  515. package/node_modules/@buddi/runtime/dist/codex-direct.d.ts.map +1 -1
  516. package/node_modules/@buddi/runtime/dist/codex-direct.js +13 -6
  517. package/node_modules/@buddi/runtime/dist/codex-direct.js.map +1 -1
  518. package/node_modules/@buddi/runtime/dist/index.d.ts +1 -0
  519. package/node_modules/@buddi/runtime/dist/index.d.ts.map +1 -1
  520. package/node_modules/@buddi/runtime/dist/index.js +1 -0
  521. package/node_modules/@buddi/runtime/dist/index.js.map +1 -1
  522. package/node_modules/@buddi/runtime/dist/loop.d.ts +2 -0
  523. package/node_modules/@buddi/runtime/dist/loop.d.ts.map +1 -1
  524. package/node_modules/@buddi/runtime/dist/loop.js +22 -0
  525. package/node_modules/@buddi/runtime/dist/loop.js.map +1 -1
  526. package/node_modules/@buddi/runtime/dist/openai.d.ts.map +1 -1
  527. package/node_modules/@buddi/runtime/dist/openai.js +19 -7
  528. package/node_modules/@buddi/runtime/dist/openai.js.map +1 -1
  529. package/node_modules/@buddi/runtime/dist/rate-limit.d.ts +91 -0
  530. package/node_modules/@buddi/runtime/dist/rate-limit.d.ts.map +1 -0
  531. package/node_modules/@buddi/runtime/dist/rate-limit.js +291 -0
  532. package/node_modules/@buddi/runtime/dist/rate-limit.js.map +1 -0
  533. package/node_modules/@buddi/runtime/dist/retry.d.ts +40 -0
  534. package/node_modules/@buddi/runtime/dist/retry.d.ts.map +1 -1
  535. package/node_modules/@buddi/runtime/dist/retry.js +42 -8
  536. package/node_modules/@buddi/runtime/dist/retry.js.map +1 -1
  537. package/node_modules/@buddi/tool-artifacts/dist/.tsbuildinfo +1 -1
  538. package/node_modules/@buddi/tool-browser/dist/.tsbuildinfo +1 -1
  539. package/node_modules/@buddi/tool-email/dist/.tsbuildinfo +1 -1
  540. package/node_modules/@buddi/tool-email/dist/agent.d.ts.map +1 -1
  541. package/node_modules/@buddi/tool-email/dist/agent.js +11 -0
  542. package/node_modules/@buddi/tool-email/dist/agent.js.map +1 -1
  543. package/node_modules/@buddi/tool-email/dist/folders.d.ts +14 -0
  544. package/node_modules/@buddi/tool-email/dist/folders.d.ts.map +1 -1
  545. package/node_modules/@buddi/tool-email/dist/folders.js +23 -0
  546. package/node_modules/@buddi/tool-email/dist/folders.js.map +1 -1
  547. package/node_modules/@buddi/tool-email/dist/imap/fake.d.ts +144 -3
  548. package/node_modules/@buddi/tool-email/dist/imap/fake.d.ts.map +1 -1
  549. package/node_modules/@buddi/tool-email/dist/imap/fake.js +393 -4
  550. package/node_modules/@buddi/tool-email/dist/imap/fake.js.map +1 -1
  551. package/node_modules/@buddi/tool-email/dist/imap/imapflow-client.d.ts +14 -1
  552. package/node_modules/@buddi/tool-email/dist/imap/imapflow-client.d.ts.map +1 -1
  553. package/node_modules/@buddi/tool-email/dist/imap/imapflow-client.js +222 -2
  554. package/node_modules/@buddi/tool-email/dist/imap/imapflow-client.js.map +1 -1
  555. package/node_modules/@buddi/tool-email/dist/index.d.ts +14 -2
  556. package/node_modules/@buddi/tool-email/dist/index.d.ts.map +1 -1
  557. package/node_modules/@buddi/tool-email/dist/index.js +26 -4
  558. package/node_modules/@buddi/tool-email/dist/index.js.map +1 -1
  559. package/node_modules/@buddi/tool-email/dist/logins.d.ts +24 -0
  560. package/node_modules/@buddi/tool-email/dist/logins.d.ts.map +1 -0
  561. package/node_modules/@buddi/tool-email/dist/logins.js +35 -0
  562. package/node_modules/@buddi/tool-email/dist/logins.js.map +1 -0
  563. package/node_modules/@buddi/tool-email/dist/mail.d.ts +20 -0
  564. package/node_modules/@buddi/tool-email/dist/mail.d.ts.map +1 -1
  565. package/node_modules/@buddi/tool-email/dist/mail.js +26 -0
  566. package/node_modules/@buddi/tool-email/dist/mail.js.map +1 -1
  567. package/node_modules/@buddi/tool-email/dist/mailbox/actions.d.ts +290 -0
  568. package/node_modules/@buddi/tool-email/dist/mailbox/actions.d.ts.map +1 -0
  569. package/node_modules/@buddi/tool-email/dist/mailbox/actions.js +1105 -0
  570. package/node_modules/@buddi/tool-email/dist/mailbox/actions.js.map +1 -0
  571. package/node_modules/@buddi/tool-email/dist/mailbox/arrival.d.ts +61 -0
  572. package/node_modules/@buddi/tool-email/dist/mailbox/arrival.d.ts.map +1 -0
  573. package/node_modules/@buddi/tool-email/dist/mailbox/arrival.js +153 -0
  574. package/node_modules/@buddi/tool-email/dist/mailbox/arrival.js.map +1 -0
  575. package/node_modules/@buddi/tool-email/dist/mailbox/select.d.ts +53 -0
  576. package/node_modules/@buddi/tool-email/dist/mailbox/select.d.ts.map +1 -0
  577. package/node_modules/@buddi/tool-email/dist/mailbox/select.js +124 -0
  578. package/node_modules/@buddi/tool-email/dist/mailbox/select.js.map +1 -0
  579. package/node_modules/@buddi/tool-email/dist/metrics.d.ts +3 -3
  580. package/node_modules/@buddi/tool-email/dist/metrics.js +4 -4
  581. package/node_modules/@buddi/tool-email/dist/pages/accounts.d.ts +37 -1
  582. package/node_modules/@buddi/tool-email/dist/pages/accounts.d.ts.map +1 -1
  583. package/node_modules/@buddi/tool-email/dist/pages/accounts.js +104 -2
  584. package/node_modules/@buddi/tool-email/dist/pages/accounts.js.map +1 -1
  585. package/node_modules/@buddi/tool-email/dist/pages/descriptors.d.ts.map +1 -1
  586. package/node_modules/@buddi/tool-email/dist/pages/descriptors.js +156 -0
  587. package/node_modules/@buddi/tool-email/dist/pages/descriptors.js.map +1 -1
  588. package/node_modules/@buddi/tool-email/dist/pages/drafts-tools.d.ts +2 -2
  589. package/node_modules/@buddi/tool-email/dist/pages/format.d.ts +1 -12
  590. package/node_modules/@buddi/tool-email/dist/pages/format.d.ts.map +1 -1
  591. package/node_modules/@buddi/tool-email/dist/pages/format.js +17 -0
  592. package/node_modules/@buddi/tool-email/dist/pages/format.js.map +1 -1
  593. package/node_modules/@buddi/tool-email/dist/pages/index.d.ts.map +1 -1
  594. package/node_modules/@buddi/tool-email/dist/pages/index.js +5 -1
  595. package/node_modules/@buddi/tool-email/dist/pages/index.js.map +1 -1
  596. package/node_modules/@buddi/tool-email/dist/pages/policies-tools.d.ts +7 -0
  597. package/node_modules/@buddi/tool-email/dist/pages/policies-tools.d.ts.map +1 -1
  598. package/node_modules/@buddi/tool-email/dist/pages/policies-tools.js +11 -2
  599. package/node_modules/@buddi/tool-email/dist/pages/policies-tools.js.map +1 -1
  600. package/node_modules/@buddi/tool-email/dist/pages/queries.d.ts +23 -0
  601. package/node_modules/@buddi/tool-email/dist/pages/queries.d.ts.map +1 -1
  602. package/node_modules/@buddi/tool-email/dist/pages/queries.js +185 -4
  603. package/node_modules/@buddi/tool-email/dist/pages/queries.js.map +1 -1
  604. package/node_modules/@buddi/tool-email/dist/policies/auto.d.ts +133 -0
  605. package/node_modules/@buddi/tool-email/dist/policies/auto.d.ts.map +1 -0
  606. package/node_modules/@buddi/tool-email/dist/policies/auto.js +296 -0
  607. package/node_modules/@buddi/tool-email/dist/policies/auto.js.map +1 -0
  608. package/node_modules/@buddi/tool-email/dist/policies/gate.d.ts +34 -10
  609. package/node_modules/@buddi/tool-email/dist/policies/gate.d.ts.map +1 -1
  610. package/node_modules/@buddi/tool-email/dist/policies/gate.js +27 -12
  611. package/node_modules/@buddi/tool-email/dist/policies/gate.js.map +1 -1
  612. package/node_modules/@buddi/tool-email/dist/policies/learn.d.ts +26 -18
  613. package/node_modules/@buddi/tool-email/dist/policies/learn.d.ts.map +1 -1
  614. package/node_modules/@buddi/tool-email/dist/policies/learn.js +36 -10
  615. package/node_modules/@buddi/tool-email/dist/policies/learn.js.map +1 -1
  616. package/node_modules/@buddi/tool-email/dist/policies/learned.d.ts +25 -2
  617. package/node_modules/@buddi/tool-email/dist/policies/learned.d.ts.map +1 -1
  618. package/node_modules/@buddi/tool-email/dist/policies/learned.js +47 -5
  619. package/node_modules/@buddi/tool-email/dist/policies/learned.js.map +1 -1
  620. package/node_modules/@buddi/tool-email/dist/policies/store.d.ts +8 -2
  621. package/node_modules/@buddi/tool-email/dist/policies/store.d.ts.map +1 -1
  622. package/node_modules/@buddi/tool-email/dist/policies/store.js +19 -5
  623. package/node_modules/@buddi/tool-email/dist/policies/store.js.map +1 -1
  624. package/node_modules/@buddi/tool-email/dist/ports.d.ts +126 -0
  625. package/node_modules/@buddi/tool-email/dist/ports.d.ts.map +1 -1
  626. package/node_modules/@buddi/tool-email/dist/ports.js +6 -0
  627. package/node_modules/@buddi/tool-email/dist/ports.js.map +1 -1
  628. package/node_modules/@buddi/tool-email/dist/rows.d.ts.map +1 -1
  629. package/node_modules/@buddi/tool-email/dist/rows.js +3 -1
  630. package/node_modules/@buddi/tool-email/dist/rows.js.map +1 -1
  631. package/node_modules/@buddi/tool-email/dist/sentinels/waiting-on-me.d.ts +2 -2
  632. package/node_modules/@buddi/tool-email/dist/sentinels/waiting-on-me.d.ts.map +1 -1
  633. package/node_modules/@buddi/tool-email/dist/sentinels/waiting-on-me.js +8 -3
  634. package/node_modules/@buddi/tool-email/dist/sentinels/waiting-on-me.js.map +1 -1
  635. package/node_modules/@buddi/tool-email/dist/sources/idle.d.ts +98 -0
  636. package/node_modules/@buddi/tool-email/dist/sources/idle.d.ts.map +1 -0
  637. package/node_modules/@buddi/tool-email/dist/sources/idle.js +317 -0
  638. package/node_modules/@buddi/tool-email/dist/sources/idle.js.map +1 -0
  639. package/node_modules/@buddi/tool-email/dist/sources/inbox-poll.d.ts +79 -1
  640. package/node_modules/@buddi/tool-email/dist/sources/inbox-poll.d.ts.map +1 -1
  641. package/node_modules/@buddi/tool-email/dist/sources/inbox-poll.js +420 -145
  642. package/node_modules/@buddi/tool-email/dist/sources/inbox-poll.js.map +1 -1
  643. package/node_modules/@buddi/tool-email/dist/sources/presence.d.ts +47 -0
  644. package/node_modules/@buddi/tool-email/dist/sources/presence.d.ts.map +1 -0
  645. package/node_modules/@buddi/tool-email/dist/sources/presence.js +128 -0
  646. package/node_modules/@buddi/tool-email/dist/sources/presence.js.map +1 -0
  647. package/node_modules/@buddi/tool-email/dist/threads.d.ts +2 -0
  648. package/node_modules/@buddi/tool-email/dist/threads.d.ts.map +1 -1
  649. package/node_modules/@buddi/tool-email/dist/threads.js +12 -3
  650. package/node_modules/@buddi/tool-email/dist/threads.js.map +1 -1
  651. package/node_modules/@buddi/tool-email/dist/tools/mailbox.d.ts +108 -0
  652. package/node_modules/@buddi/tool-email/dist/tools/mailbox.d.ts.map +1 -0
  653. package/node_modules/@buddi/tool-email/dist/tools/mailbox.js +359 -0
  654. package/node_modules/@buddi/tool-email/dist/tools/mailbox.js.map +1 -0
  655. package/node_modules/@buddi/tool-email/dist/tools/policies.d.ts +8 -2
  656. package/node_modules/@buddi/tool-email/dist/tools/policies.d.ts.map +1 -1
  657. package/node_modules/@buddi/tool-email/dist/tools/policies.js +43 -3
  658. package/node_modules/@buddi/tool-email/dist/tools/policies.js.map +1 -1
  659. package/node_modules/@buddi/tool-email/dist/tools/read.d.ts +2 -2
  660. package/node_modules/@buddi/tool-email/dist/tools/read.d.ts.map +1 -1
  661. package/node_modules/@buddi/tool-email/dist/tools/read.js +29 -2
  662. package/node_modules/@buddi/tool-email/dist/tools/read.js.map +1 -1
  663. package/node_modules/@buddi/tool-email/dist/tools/threads.d.ts +2 -2
  664. package/node_modules/@buddi/tool-email/dist/tools/triage.d.ts.map +1 -1
  665. package/node_modules/@buddi/tool-email/dist/tools/triage.js +10 -4
  666. package/node_modules/@buddi/tool-email/dist/tools/triage.js.map +1 -1
  667. package/node_modules/@buddi/tool-email/dist/widgets.d.ts +13 -0
  668. package/node_modules/@buddi/tool-email/dist/widgets.d.ts.map +1 -0
  669. package/node_modules/@buddi/tool-email/dist/widgets.js +51 -0
  670. package/node_modules/@buddi/tool-email/dist/widgets.js.map +1 -0
  671. package/node_modules/@buddi/tool-email/migrations/017_mailbox_actions.sql +60 -0
  672. package/node_modules/@buddi/tool-email/migrations/018_learned_auto.sql +30 -0
  673. package/node_modules/@buddi/tool-email/migrations/019_arrival_pending.sql +26 -0
  674. package/node_modules/@buddi/tool-email/migrations/020_mailbox_presence.sql +44 -0
  675. package/node_modules/@buddi/tool-email/migrations/021_learned_line.sql +9 -0
  676. package/node_modules/@buddi/tool-email/migrations/022_bulk_checked.sql +13 -0
  677. package/node_modules/@buddi/tool-email/package.json +3 -2
  678. package/node_modules/@buddi/tool-host/dist/.tsbuildinfo +1 -1
  679. package/node_modules/@buddi/tool-mcp/dist/.tsbuildinfo +1 -1
  680. package/node_modules/@buddi/tool-memory/dist/.tsbuildinfo +1 -1
  681. package/node_modules/@buddi/tool-memory/dist/admin.d.ts +9 -0
  682. package/node_modules/@buddi/tool-memory/dist/admin.d.ts.map +1 -1
  683. package/node_modules/@buddi/tool-memory/dist/admin.js +11 -0
  684. package/node_modules/@buddi/tool-memory/dist/admin.js.map +1 -1
  685. package/node_modules/@buddi/tool-web/dist/.tsbuildinfo +1 -1
  686. package/node_modules/imapflow/CHANGELOG.md +14 -0
  687. package/node_modules/imapflow/dist/cjs/commands/fetch.js +1 -1
  688. package/node_modules/imapflow/dist/cjs/imap-flow.d.ts +2 -0
  689. package/node_modules/imapflow/dist/cjs/imap-flow.js +14 -1
  690. package/node_modules/imapflow/dist/cjs/package-info.d.ts +1 -1
  691. package/node_modules/imapflow/dist/cjs/package-info.js +1 -1
  692. package/node_modules/imapflow/dist/cjs/tools.d.ts +2 -1
  693. package/node_modules/imapflow/dist/cjs/tools.js +8 -6
  694. package/node_modules/imapflow/dist/cjs/types.d.ts +9 -1
  695. package/node_modules/imapflow/dist/esm/commands/fetch.js +1 -1
  696. package/node_modules/imapflow/dist/esm/imap-flow.d.ts +2 -0
  697. package/node_modules/imapflow/dist/esm/imap-flow.js +14 -1
  698. package/node_modules/imapflow/dist/esm/package-info.d.ts +1 -1
  699. package/node_modules/imapflow/dist/esm/package-info.js +1 -1
  700. package/node_modules/imapflow/dist/esm/tools.d.ts +2 -1
  701. package/node_modules/imapflow/dist/esm/tools.js +8 -6
  702. package/node_modules/imapflow/dist/esm/types.d.ts +9 -1
  703. package/node_modules/imapflow/package.json +4 -4
  704. package/package.json +2 -2
  705. package/packages/cli/dist/.tsbuildinfo +1 -1
  706. package/packages/cli/dist/args.d.ts +13 -2
  707. package/packages/cli/dist/args.d.ts.map +1 -1
  708. package/packages/cli/dist/args.js +12 -3
  709. package/packages/cli/dist/args.js.map +1 -1
  710. package/packages/cli/dist/commands.d.ts +10 -0
  711. package/packages/cli/dist/commands.d.ts.map +1 -1
  712. package/packages/cli/dist/commands.js +301 -20
  713. package/packages/cli/dist/commands.js.map +1 -1
  714. package/packages/cli/dist/dashboard-cmd.d.ts +3 -0
  715. package/packages/cli/dist/dashboard-cmd.d.ts.map +1 -1
  716. package/packages/cli/dist/dashboard-cmd.js +63 -0
  717. package/packages/cli/dist/dashboard-cmd.js.map +1 -1
  718. package/packages/cli/dist/doctor-probes.d.ts.map +1 -1
  719. package/packages/cli/dist/doctor-probes.js +12 -10
  720. package/packages/cli/dist/doctor-probes.js.map +1 -1
  721. package/packages/cli/dist/doctor.d.ts +14 -1
  722. package/packages/cli/dist/doctor.d.ts.map +1 -1
  723. package/packages/cli/dist/doctor.js +18 -0
  724. package/packages/cli/dist/doctor.js.map +1 -1
  725. package/packages/cli/dist/main.d.ts.map +1 -1
  726. package/packages/cli/dist/main.js +22 -1
  727. package/packages/cli/dist/main.js.map +1 -1
  728. package/packages/cli/dist/mcp/gateway-client.d.ts +19 -17
  729. package/packages/cli/dist/mcp/gateway-client.d.ts.map +1 -1
  730. package/packages/cli/dist/mcp/gateway-client.js +128 -29
  731. package/packages/cli/dist/mcp/gateway-client.js.map +1 -1
  732. package/packages/cli/dist/mcp/tools.d.ts +6 -0
  733. package/packages/cli/dist/mcp/tools.d.ts.map +1 -1
  734. package/packages/cli/dist/mcp/tools.js +23 -3
  735. package/packages/cli/dist/mcp/tools.js.map +1 -1
  736. package/packages/cli/dist/telegram-cmd.d.ts.map +1 -1
  737. package/packages/cli/dist/telegram-cmd.js +5 -4
  738. package/packages/cli/dist/telegram-cmd.js.map +1 -1
  739. package/packages/core/dist/.tsbuildinfo +1 -1
  740. package/packages/core/dist/agents/catalog.d.ts +3 -0
  741. package/packages/core/dist/agents/catalog.d.ts.map +1 -1
  742. package/packages/core/dist/agents/catalog.js +8 -6
  743. package/packages/core/dist/agents/catalog.js.map +1 -1
  744. package/packages/core/dist/agents/edit.d.ts +3 -0
  745. package/packages/core/dist/agents/edit.d.ts.map +1 -1
  746. package/packages/core/dist/agents/edit.js +3 -1
  747. package/packages/core/dist/agents/edit.js.map +1 -1
  748. package/packages/core/dist/agents/frontmatter.d.ts +22 -12
  749. package/packages/core/dist/agents/frontmatter.d.ts.map +1 -1
  750. package/packages/core/dist/agents/frontmatter.js +7 -0
  751. package/packages/core/dist/agents/frontmatter.js.map +1 -1
  752. package/packages/core/dist/agents/idle-rollover.d.ts +20 -0
  753. package/packages/core/dist/agents/idle-rollover.d.ts.map +1 -0
  754. package/packages/core/dist/agents/idle-rollover.js +30 -0
  755. package/packages/core/dist/agents/idle-rollover.js.map +1 -0
  756. package/packages/core/dist/agents/index.d.ts +1 -0
  757. package/packages/core/dist/agents/index.d.ts.map +1 -1
  758. package/packages/core/dist/agents/index.js +1 -0
  759. package/packages/core/dist/agents/index.js.map +1 -1
  760. package/packages/core/dist/agents/skills.d.ts +2 -2
  761. package/packages/core/dist/backup/dump.d.ts +9 -0
  762. package/packages/core/dist/backup/dump.d.ts.map +1 -1
  763. package/packages/core/dist/backup/dump.js +10 -1
  764. package/packages/core/dist/backup/dump.js.map +1 -1
  765. package/packages/core/dist/backup/pending.d.ts +13 -0
  766. package/packages/core/dist/backup/pending.d.ts.map +1 -1
  767. package/packages/core/dist/backup/pending.js +56 -4
  768. package/packages/core/dist/backup/pending.js.map +1 -1
  769. package/packages/core/dist/backup/restore.d.ts +3 -1
  770. package/packages/core/dist/backup/restore.d.ts.map +1 -1
  771. package/packages/core/dist/backup/restore.js +1 -1
  772. package/packages/core/dist/backup/restore.js.map +1 -1
  773. package/packages/core/dist/clock-widget.d.ts +38 -0
  774. package/packages/core/dist/clock-widget.d.ts.map +1 -0
  775. package/packages/core/dist/clock-widget.js +114 -0
  776. package/packages/core/dist/clock-widget.js.map +1 -0
  777. package/packages/core/dist/failures/owner-message.d.ts +25 -0
  778. package/packages/core/dist/failures/owner-message.d.ts.map +1 -1
  779. package/packages/core/dist/failures/owner-message.js +90 -0
  780. package/packages/core/dist/failures/owner-message.js.map +1 -1
  781. package/packages/core/dist/feedback/index.d.ts +129 -0
  782. package/packages/core/dist/feedback/index.d.ts.map +1 -0
  783. package/packages/core/dist/feedback/index.js +180 -0
  784. package/packages/core/dist/feedback/index.js.map +1 -0
  785. package/packages/core/dist/groups.d.ts +33 -0
  786. package/packages/core/dist/groups.d.ts.map +1 -1
  787. package/packages/core/dist/groups.js +76 -4
  788. package/packages/core/dist/groups.js.map +1 -1
  789. package/packages/core/dist/home.d.ts +5 -5
  790. package/packages/core/dist/host/build.d.ts +19 -1
  791. package/packages/core/dist/host/build.d.ts.map +1 -1
  792. package/packages/core/dist/host/build.js +150 -3
  793. package/packages/core/dist/host/build.js.map +1 -1
  794. package/packages/core/dist/host/types.d.ts +62 -2
  795. package/packages/core/dist/host/types.d.ts.map +1 -1
  796. package/packages/core/dist/index.d.ts +9 -0
  797. package/packages/core/dist/index.d.ts.map +1 -1
  798. package/packages/core/dist/index.js +9 -0
  799. package/packages/core/dist/index.js.map +1 -1
  800. package/packages/core/dist/learning/policies.d.ts +7 -1
  801. package/packages/core/dist/learning/policies.d.ts.map +1 -1
  802. package/packages/core/dist/learning/policies.js +4 -1
  803. package/packages/core/dist/learning/policies.js.map +1 -1
  804. package/packages/core/dist/learning/store.d.ts +29 -1
  805. package/packages/core/dist/learning/store.d.ts.map +1 -1
  806. package/packages/core/dist/learning/store.js +33 -8
  807. package/packages/core/dist/learning/store.js.map +1 -1
  808. package/packages/core/dist/learning/types.d.ts +24 -1
  809. package/packages/core/dist/learning/types.d.ts.map +1 -1
  810. package/packages/core/dist/learning/types.js +6 -0
  811. package/packages/core/dist/learning/types.js.map +1 -1
  812. package/packages/core/dist/lock.d.ts +76 -0
  813. package/packages/core/dist/lock.d.ts.map +1 -0
  814. package/packages/core/dist/lock.js +167 -0
  815. package/packages/core/dist/lock.js.map +1 -0
  816. package/packages/core/dist/metrics.d.ts.map +1 -1
  817. package/packages/core/dist/metrics.js +4 -2
  818. package/packages/core/dist/metrics.js.map +1 -1
  819. package/packages/core/dist/onboarding/store.d.ts +5 -0
  820. package/packages/core/dist/onboarding/store.d.ts.map +1 -1
  821. package/packages/core/dist/onboarding/store.js +35 -5
  822. package/packages/core/dist/onboarding/store.js.map +1 -1
  823. package/packages/core/dist/onboarding/types.d.ts +10 -0
  824. package/packages/core/dist/onboarding/types.d.ts.map +1 -1
  825. package/packages/core/dist/onboarding/types.js +2 -0
  826. package/packages/core/dist/onboarding/types.js.map +1 -1
  827. package/packages/core/dist/owner-format.d.ts +14 -0
  828. package/packages/core/dist/owner-format.d.ts.map +1 -0
  829. package/packages/core/dist/owner-format.js +47 -0
  830. package/packages/core/dist/owner-format.js.map +1 -0
  831. package/packages/core/dist/owner-timezone.d.ts +46 -0
  832. package/packages/core/dist/owner-timezone.d.ts.map +1 -0
  833. package/packages/core/dist/owner-timezone.js +43 -0
  834. package/packages/core/dist/owner-timezone.js.map +1 -0
  835. package/packages/core/dist/owner.d.ts +2 -1
  836. package/packages/core/dist/owner.d.ts.map +1 -1
  837. package/packages/core/dist/owner.js.map +1 -1
  838. package/packages/core/dist/pages.d.ts +37 -38
  839. package/packages/core/dist/pages.d.ts.map +1 -1
  840. package/packages/core/dist/pages.js +30 -3
  841. package/packages/core/dist/pages.js.map +1 -1
  842. package/packages/core/dist/places.d.ts +110 -0
  843. package/packages/core/dist/places.d.ts.map +1 -0
  844. package/packages/core/dist/places.js +239 -0
  845. package/packages/core/dist/places.js.map +1 -0
  846. package/packages/core/dist/plugin/index.d.ts +13 -5
  847. package/packages/core/dist/plugin/index.d.ts.map +1 -1
  848. package/packages/core/dist/plugin/index.js +3 -0
  849. package/packages/core/dist/plugin/index.js.map +1 -1
  850. package/packages/core/dist/plugin/requires.d.ts +75 -0
  851. package/packages/core/dist/plugin/requires.d.ts.map +1 -0
  852. package/packages/core/dist/plugin/requires.js +77 -0
  853. package/packages/core/dist/plugin/requires.js.map +1 -0
  854. package/packages/core/dist/plugin/uses.d.ts +1 -1
  855. package/packages/core/dist/plugin/uses.d.ts.map +1 -1
  856. package/packages/core/dist/plugin/uses.js +2 -0
  857. package/packages/core/dist/plugin/uses.js.map +1 -1
  858. package/packages/core/dist/plugin/version.d.ts +1 -1
  859. package/packages/core/dist/plugin/version.js +1 -1
  860. package/packages/core/dist/queue/retry-policy.d.ts +5 -0
  861. package/packages/core/dist/queue/retry-policy.d.ts.map +1 -1
  862. package/packages/core/dist/queue/retry-policy.js +19 -2
  863. package/packages/core/dist/queue/retry-policy.js.map +1 -1
  864. package/packages/core/dist/registry.d.ts +47 -3
  865. package/packages/core/dist/registry.d.ts.map +1 -1
  866. package/packages/core/dist/registry.js +150 -3
  867. package/packages/core/dist/registry.js.map +1 -1
  868. package/packages/core/dist/scheduler/enqueue.d.ts +71 -0
  869. package/packages/core/dist/scheduler/enqueue.d.ts.map +1 -0
  870. package/packages/core/dist/scheduler/enqueue.js +116 -0
  871. package/packages/core/dist/scheduler/enqueue.js.map +1 -0
  872. package/packages/core/dist/scheduler/index.d.ts +1 -0
  873. package/packages/core/dist/scheduler/index.d.ts.map +1 -1
  874. package/packages/core/dist/scheduler/index.js +1 -0
  875. package/packages/core/dist/scheduler/index.js.map +1 -1
  876. package/packages/core/dist/scheduler/missions.d.ts +15 -0
  877. package/packages/core/dist/scheduler/missions.d.ts.map +1 -1
  878. package/packages/core/dist/scheduler/missions.js +43 -4
  879. package/packages/core/dist/scheduler/missions.js.map +1 -1
  880. package/packages/core/dist/scheduler/types.d.ts +10 -0
  881. package/packages/core/dist/scheduler/types.d.ts.map +1 -1
  882. package/packages/core/dist/scheduler/types.js +3 -0
  883. package/packages/core/dist/scheduler/types.js.map +1 -1
  884. package/packages/core/dist/secrets/settings.d.ts +6 -6
  885. package/packages/core/dist/semver.d.ts +17 -0
  886. package/packages/core/dist/semver.d.ts.map +1 -1
  887. package/packages/core/dist/semver.js +130 -0
  888. package/packages/core/dist/semver.js.map +1 -1
  889. package/packages/core/dist/sentinels/run.d.ts +6 -1
  890. package/packages/core/dist/sentinels/run.d.ts.map +1 -1
  891. package/packages/core/dist/sentinels/run.js +43 -24
  892. package/packages/core/dist/sentinels/run.js.map +1 -1
  893. package/packages/core/dist/sentinels/types.d.ts +13 -0
  894. package/packages/core/dist/sentinels/types.d.ts.map +1 -1
  895. package/packages/core/dist/sentinels/types.js.map +1 -1
  896. package/packages/core/dist/sources/index.d.ts +1 -0
  897. package/packages/core/dist/sources/index.d.ts.map +1 -1
  898. package/packages/core/dist/sources/index.js +1 -0
  899. package/packages/core/dist/sources/index.js.map +1 -1
  900. package/packages/core/dist/sources/run.d.ts +8 -0
  901. package/packages/core/dist/sources/run.d.ts.map +1 -1
  902. package/packages/core/dist/sources/run.js +1 -1
  903. package/packages/core/dist/sources/run.js.map +1 -1
  904. package/packages/core/dist/sources/watch.d.ts +40 -0
  905. package/packages/core/dist/sources/watch.d.ts.map +1 -0
  906. package/packages/core/dist/sources/watch.js +81 -0
  907. package/packages/core/dist/sources/watch.js.map +1 -0
  908. package/packages/core/dist/time.d.ts +17 -3
  909. package/packages/core/dist/time.d.ts.map +1 -1
  910. package/packages/core/dist/time.js +27 -3
  911. package/packages/core/dist/time.js.map +1 -1
  912. package/packages/core/dist/tools.d.ts +77 -1
  913. package/packages/core/dist/tools.d.ts.map +1 -1
  914. package/packages/core/dist/tools.js.map +1 -1
  915. package/packages/core/dist/views.d.ts +68 -68
  916. package/packages/core/dist/views.d.ts.map +1 -1
  917. package/packages/core/dist/views.js +3 -0
  918. package/packages/core/dist/views.js.map +1 -1
  919. package/packages/core/dist/widget-settings.d.ts +161 -0
  920. package/packages/core/dist/widget-settings.d.ts.map +1 -0
  921. package/packages/core/dist/widget-settings.js +314 -0
  922. package/packages/core/dist/widget-settings.js.map +1 -0
  923. package/packages/core/dist/widgets.d.ts +206 -0
  924. package/packages/core/dist/widgets.d.ts.map +1 -0
  925. package/packages/core/dist/widgets.js +247 -0
  926. package/packages/core/dist/widgets.js.map +1 -0
  927. package/packages/core/migrations/056_dashboard_sessions.sql +37 -0
  928. package/packages/core/migrations/057_proposal_decided_by.sql +34 -0
  929. package/packages/core/migrations/058_message_feedback.sql +50 -0
  930. package/packages/core/migrations/059_dashboard_lock.sql +33 -0
  931. package/packages/core/migrations/060_owner_places.sql +30 -0
  932. package/packages/core/migrations/061_owner_formats.sql +10 -0
  933. package/packages/core/migrations/062_group_deleted.sql +7 -0
  934. package/packages/core/migrations/063_provider_account_limits.sql +20 -0
  935. package/packages/core/migrations/064_mission_coalesce.sql +12 -0
  936. package/packages/core/migrations/065_api_tokens.sql +28 -0
  937. package/packages/gateway/dist/.tsbuildinfo +1 -1
  938. package/packages/gateway/dist/account-limits.d.ts +45 -0
  939. package/packages/gateway/dist/account-limits.d.ts.map +1 -0
  940. package/packages/gateway/dist/account-limits.js +87 -0
  941. package/packages/gateway/dist/account-limits.js.map +1 -0
  942. package/packages/gateway/dist/accounts-cli.d.ts +88 -0
  943. package/packages/gateway/dist/accounts-cli.d.ts.map +1 -0
  944. package/packages/gateway/dist/accounts-cli.js +216 -0
  945. package/packages/gateway/dist/accounts-cli.js.map +1 -0
  946. package/packages/gateway/dist/agents/canvas.d.ts +20 -20
  947. package/packages/gateway/dist/agents/learning-digest.d.ts +11 -1
  948. package/packages/gateway/dist/agents/learning-digest.d.ts.map +1 -1
  949. package/packages/gateway/dist/agents/learning-digest.js +43 -4
  950. package/packages/gateway/dist/agents/learning-digest.js.map +1 -1
  951. package/packages/gateway/dist/agents/owner-tools.d.ts.map +1 -1
  952. package/packages/gateway/dist/agents/owner-tools.js +3 -2
  953. package/packages/gateway/dist/agents/owner-tools.js.map +1 -1
  954. package/packages/gateway/dist/agents/platform-files.d.ts +2 -0
  955. package/packages/gateway/dist/agents/platform-files.d.ts.map +1 -1
  956. package/packages/gateway/dist/agents/platform-files.js +2 -0
  957. package/packages/gateway/dist/agents/platform-files.js.map +1 -1
  958. package/packages/gateway/dist/agents/platform.d.ts +40 -20
  959. package/packages/gateway/dist/agents/platform.d.ts.map +1 -1
  960. package/packages/gateway/dist/agents/platform.js +46 -3
  961. package/packages/gateway/dist/agents/platform.js.map +1 -1
  962. package/packages/gateway/dist/agents-cli.d.ts +1 -1
  963. package/packages/gateway/dist/agents-cli.d.ts.map +1 -1
  964. package/packages/gateway/dist/agents-cli.js +12 -2
  965. package/packages/gateway/dist/agents-cli.js.map +1 -1
  966. package/packages/gateway/dist/api-token-cli.d.ts +17 -0
  967. package/packages/gateway/dist/api-token-cli.d.ts.map +1 -0
  968. package/packages/gateway/dist/api-token-cli.js +108 -0
  969. package/packages/gateway/dist/api-token-cli.js.map +1 -0
  970. package/packages/gateway/dist/bootstrap.d.ts +6 -2
  971. package/packages/gateway/dist/bootstrap.d.ts.map +1 -1
  972. package/packages/gateway/dist/bootstrap.js +25 -7
  973. package/packages/gateway/dist/bootstrap.js.map +1 -1
  974. package/packages/gateway/dist/chat/session.d.ts +5 -0
  975. package/packages/gateway/dist/chat/session.d.ts.map +1 -1
  976. package/packages/gateway/dist/chat/session.js +13 -2
  977. package/packages/gateway/dist/chat/session.js.map +1 -1
  978. package/packages/gateway/dist/cli.d.ts.map +1 -1
  979. package/packages/gateway/dist/cli.js +14 -3
  980. package/packages/gateway/dist/cli.js.map +1 -1
  981. package/packages/gateway/dist/index.d.ts +3 -0
  982. package/packages/gateway/dist/index.d.ts.map +1 -1
  983. package/packages/gateway/dist/index.js +3 -0
  984. package/packages/gateway/dist/index.js.map +1 -1
  985. package/packages/gateway/dist/mcp/requests.d.ts.map +1 -1
  986. package/packages/gateway/dist/mcp/requests.js +1 -0
  987. package/packages/gateway/dist/mcp/requests.js.map +1 -1
  988. package/packages/gateway/dist/missions/dead-letter.d.ts +2 -1
  989. package/packages/gateway/dist/missions/dead-letter.d.ts.map +1 -1
  990. package/packages/gateway/dist/missions/dead-letter.js +19 -5
  991. package/packages/gateway/dist/missions/dead-letter.js.map +1 -1
  992. package/packages/gateway/dist/missions/defaults.d.ts +6 -0
  993. package/packages/gateway/dist/missions/defaults.d.ts.map +1 -1
  994. package/packages/gateway/dist/missions/defaults.js +10 -2
  995. package/packages/gateway/dist/missions/defaults.js.map +1 -1
  996. package/packages/gateway/dist/missions/execute.d.ts.map +1 -1
  997. package/packages/gateway/dist/missions/execute.js +14 -8
  998. package/packages/gateway/dist/missions/execute.js.map +1 -1
  999. package/packages/gateway/dist/missions/inline.js +1 -1
  1000. package/packages/gateway/dist/missions/inline.js.map +1 -1
  1001. package/packages/gateway/dist/missions/sentinel-wake.d.ts +11 -0
  1002. package/packages/gateway/dist/missions/sentinel-wake.d.ts.map +1 -1
  1003. package/packages/gateway/dist/missions/sentinel-wake.js +37 -1
  1004. package/packages/gateway/dist/missions/sentinel-wake.js.map +1 -1
  1005. package/packages/gateway/dist/missions-cli.d.ts.map +1 -1
  1006. package/packages/gateway/dist/missions-cli.js +5 -5
  1007. package/packages/gateway/dist/missions-cli.js.map +1 -1
  1008. package/packages/gateway/dist/nudges-cli.js +2 -2
  1009. package/packages/gateway/dist/nudges-cli.js.map +1 -1
  1010. package/packages/gateway/dist/owner-seed.js +2 -2
  1011. package/packages/gateway/dist/owner-seed.js.map +1 -1
  1012. package/packages/gateway/dist/plugins/approve.js +4 -1
  1013. package/packages/gateway/dist/plugins/approve.js.map +1 -1
  1014. package/packages/gateway/dist/plugins/live.d.ts +8 -1
  1015. package/packages/gateway/dist/plugins/live.d.ts.map +1 -1
  1016. package/packages/gateway/dist/plugins/live.js +25 -7
  1017. package/packages/gateway/dist/plugins/live.js.map +1 -1
  1018. package/packages/gateway/dist/plugins/load.d.ts +55 -0
  1019. package/packages/gateway/dist/plugins/load.d.ts.map +1 -1
  1020. package/packages/gateway/dist/plugins/load.js +100 -4
  1021. package/packages/gateway/dist/plugins/load.js.map +1 -1
  1022. package/packages/gateway/dist/plugins/paths.d.ts +14 -0
  1023. package/packages/gateway/dist/plugins/paths.d.ts.map +1 -1
  1024. package/packages/gateway/dist/plugins/paths.js +27 -1
  1025. package/packages/gateway/dist/plugins/paths.js.map +1 -1
  1026. package/packages/gateway/dist/plugins/requires.d.ts +79 -0
  1027. package/packages/gateway/dist/plugins/requires.d.ts.map +1 -0
  1028. package/packages/gateway/dist/plugins/requires.js +178 -0
  1029. package/packages/gateway/dist/plugins/requires.js.map +1 -0
  1030. package/packages/gateway/dist/plugins/stage.d.ts +33 -3
  1031. package/packages/gateway/dist/plugins/stage.d.ts.map +1 -1
  1032. package/packages/gateway/dist/plugins/stage.js +41 -6
  1033. package/packages/gateway/dist/plugins/stage.js.map +1 -1
  1034. package/packages/gateway/dist/plugins/update.d.ts +21 -0
  1035. package/packages/gateway/dist/plugins/update.d.ts.map +1 -1
  1036. package/packages/gateway/dist/plugins/update.js +16 -0
  1037. package/packages/gateway/dist/plugins/update.js.map +1 -1
  1038. package/packages/gateway/dist/plugins-cli.d.ts +5 -1
  1039. package/packages/gateway/dist/plugins-cli.d.ts.map +1 -1
  1040. package/packages/gateway/dist/plugins-cli.js +48 -11
  1041. package/packages/gateway/dist/plugins-cli.js.map +1 -1
  1042. package/packages/gateway/dist/provider-accounts.d.ts +4 -0
  1043. package/packages/gateway/dist/provider-accounts.d.ts.map +1 -1
  1044. package/packages/gateway/dist/provider-accounts.js +68 -10
  1045. package/packages/gateway/dist/provider-accounts.js.map +1 -1
  1046. package/packages/gateway/dist/provider-diagnostics.d.ts.map +1 -1
  1047. package/packages/gateway/dist/provider-diagnostics.js +9 -0
  1048. package/packages/gateway/dist/provider-diagnostics.js.map +1 -1
  1049. package/packages/gateway/dist/reminders-cli.js +2 -2
  1050. package/packages/gateway/dist/reminders-cli.js.map +1 -1
  1051. package/packages/gateway/dist/serve.d.ts +2 -0
  1052. package/packages/gateway/dist/serve.d.ts.map +1 -1
  1053. package/packages/gateway/dist/serve.js +78 -8
  1054. package/packages/gateway/dist/serve.js.map +1 -1
  1055. package/packages/gateway/dist/surfaces/browser-continuation.d.ts +2 -1
  1056. package/packages/gateway/dist/surfaces/browser-continuation.d.ts.map +1 -1
  1057. package/packages/gateway/dist/surfaces/browser-continuation.js +8 -5
  1058. package/packages/gateway/dist/surfaces/browser-continuation.js.map +1 -1
  1059. package/packages/gateway/dist/surfaces/browser-handoff.d.ts +27 -4
  1060. package/packages/gateway/dist/surfaces/browser-handoff.d.ts.map +1 -1
  1061. package/packages/gateway/dist/surfaces/browser-handoff.js +57 -7
  1062. package/packages/gateway/dist/surfaces/browser-handoff.js.map +1 -1
  1063. package/packages/gateway/dist/surfaces/carry-over.d.ts +89 -0
  1064. package/packages/gateway/dist/surfaces/carry-over.d.ts.map +1 -0
  1065. package/packages/gateway/dist/surfaces/carry-over.js +172 -0
  1066. package/packages/gateway/dist/surfaces/carry-over.js.map +1 -0
  1067. package/packages/gateway/dist/surfaces/conversation-lifetime.d.ts +5 -2
  1068. package/packages/gateway/dist/surfaces/conversation-lifetime.d.ts.map +1 -1
  1069. package/packages/gateway/dist/surfaces/conversation-lifetime.js +5 -2
  1070. package/packages/gateway/dist/surfaces/conversation-lifetime.js.map +1 -1
  1071. package/packages/gateway/dist/surfaces/failure.d.ts.map +1 -1
  1072. package/packages/gateway/dist/surfaces/failure.js +9 -1
  1073. package/packages/gateway/dist/surfaces/failure.js.map +1 -1
  1074. package/packages/gateway/dist/system-context.d.ts +18 -0
  1075. package/packages/gateway/dist/system-context.d.ts.map +1 -1
  1076. package/packages/gateway/dist/system-context.js +46 -4
  1077. package/packages/gateway/dist/system-context.js.map +1 -1
  1078. package/packages/gateway/dist/telegram/api.d.ts +34 -2
  1079. package/packages/gateway/dist/telegram/api.d.ts.map +1 -1
  1080. package/packages/gateway/dist/telegram/api.js +15 -2
  1081. package/packages/gateway/dist/telegram/api.js.map +1 -1
  1082. package/packages/gateway/dist/telegram/env-owner.d.ts +30 -0
  1083. package/packages/gateway/dist/telegram/env-owner.d.ts.map +1 -0
  1084. package/packages/gateway/dist/telegram/env-owner.js +45 -0
  1085. package/packages/gateway/dist/telegram/env-owner.js.map +1 -0
  1086. package/packages/gateway/dist/telegram/main.d.ts +0 -2
  1087. package/packages/gateway/dist/telegram/main.d.ts.map +1 -1
  1088. package/packages/gateway/dist/telegram/main.js +21 -28
  1089. package/packages/gateway/dist/telegram/main.js.map +1 -1
  1090. package/packages/gateway/dist/telegram/notify.d.ts.map +1 -1
  1091. package/packages/gateway/dist/telegram/notify.js +1 -1
  1092. package/packages/gateway/dist/telegram/notify.js.map +1 -1
  1093. package/packages/gateway/dist/telegram/outbound.d.ts +3 -3
  1094. package/packages/gateway/dist/telegram/outbound.d.ts.map +1 -1
  1095. package/packages/gateway/dist/telegram/outbound.js +19 -5
  1096. package/packages/gateway/dist/telegram/outbound.js.map +1 -1
  1097. package/packages/gateway/dist/telegram/reactions.d.ts +45 -0
  1098. package/packages/gateway/dist/telegram/reactions.d.ts.map +1 -0
  1099. package/packages/gateway/dist/telegram/reactions.js +107 -0
  1100. package/packages/gateway/dist/telegram/reactions.js.map +1 -0
  1101. package/packages/gateway/dist/telegram/surface.d.ts +5 -1
  1102. package/packages/gateway/dist/telegram/surface.d.ts.map +1 -1
  1103. package/packages/gateway/dist/telegram/surface.js +93 -12
  1104. package/packages/gateway/dist/telegram/surface.js.map +1 -1
  1105. package/packages/gateway/dist/tips/engine.d.ts +2 -0
  1106. package/packages/gateway/dist/tips/engine.d.ts.map +1 -1
  1107. package/packages/gateway/dist/tips/engine.js +8 -5
  1108. package/packages/gateway/dist/tips/engine.js.map +1 -1
  1109. package/packages/gateway/dist/tips/facts.d.ts +23 -0
  1110. package/packages/gateway/dist/tips/facts.d.ts.map +1 -1
  1111. package/packages/gateway/dist/tips/facts.js +19 -0
  1112. package/packages/gateway/dist/tips/facts.js.map +1 -1
  1113. package/packages/gateway/dist/tips/route.js +2 -2
  1114. package/packages/gateway/dist/tips/route.js.map +1 -1
  1115. package/packages/gateway/dist/tips/rules.d.ts +3 -2
  1116. package/packages/gateway/dist/tips/rules.d.ts.map +1 -1
  1117. package/packages/gateway/dist/tips/rules.js +26 -0
  1118. package/packages/gateway/dist/tips/rules.js.map +1 -1
  1119. package/packages/gateway/dist/web/agents.d.ts +3 -1
  1120. package/packages/gateway/dist/web/agents.d.ts.map +1 -1
  1121. package/packages/gateway/dist/web/agents.js +20 -2
  1122. package/packages/gateway/dist/web/agents.js.map +1 -1
  1123. package/packages/gateway/dist/web/api-routes.d.ts +103 -0
  1124. package/packages/gateway/dist/web/api-routes.d.ts.map +1 -0
  1125. package/packages/gateway/dist/web/api-routes.js +1200 -0
  1126. package/packages/gateway/dist/web/api-routes.js.map +1 -0
  1127. package/packages/gateway/dist/web/api-scan.d.ts +17 -0
  1128. package/packages/gateway/dist/web/api-scan.d.ts.map +1 -0
  1129. package/packages/gateway/dist/web/api-scan.js +206 -0
  1130. package/packages/gateway/dist/web/api-scan.js.map +1 -0
  1131. package/packages/gateway/dist/web/api-tokens.d.ts +58 -0
  1132. package/packages/gateway/dist/web/api-tokens.d.ts.map +1 -0
  1133. package/packages/gateway/dist/web/api-tokens.js +136 -0
  1134. package/packages/gateway/dist/web/api-tokens.js.map +1 -0
  1135. package/packages/gateway/dist/web/backups.js +2 -2
  1136. package/packages/gateway/dist/web/backups.js.map +1 -1
  1137. package/packages/gateway/dist/web/chat.d.ts +10 -3
  1138. package/packages/gateway/dist/web/chat.d.ts.map +1 -1
  1139. package/packages/gateway/dist/web/chat.js +18 -5
  1140. package/packages/gateway/dist/web/chat.js.map +1 -1
  1141. package/packages/gateway/dist/web/group-lifecycle.d.ts +18 -0
  1142. package/packages/gateway/dist/web/group-lifecycle.d.ts.map +1 -0
  1143. package/packages/gateway/dist/web/group-lifecycle.js +46 -0
  1144. package/packages/gateway/dist/web/group-lifecycle.js.map +1 -0
  1145. package/packages/gateway/dist/web/lock-image.d.ts +37 -0
  1146. package/packages/gateway/dist/web/lock-image.d.ts.map +1 -0
  1147. package/packages/gateway/dist/web/lock-image.js +253 -0
  1148. package/packages/gateway/dist/web/lock-image.js.map +1 -0
  1149. package/packages/gateway/dist/web/lock.d.ts +162 -0
  1150. package/packages/gateway/dist/web/lock.d.ts.map +1 -0
  1151. package/packages/gateway/dist/web/lock.js +472 -0
  1152. package/packages/gateway/dist/web/lock.js.map +1 -0
  1153. package/packages/gateway/dist/web/pages.d.ts +1 -0
  1154. package/packages/gateway/dist/web/pages.d.ts.map +1 -1
  1155. package/packages/gateway/dist/web/pages.js +12 -1
  1156. package/packages/gateway/dist/web/pages.js.map +1 -1
  1157. package/packages/gateway/dist/web/places.d.ts +27 -0
  1158. package/packages/gateway/dist/web/places.d.ts.map +1 -0
  1159. package/packages/gateway/dist/web/places.js +90 -0
  1160. package/packages/gateway/dist/web/places.js.map +1 -0
  1161. package/packages/gateway/dist/web/plugins.d.ts +34 -1
  1162. package/packages/gateway/dist/web/plugins.d.ts.map +1 -1
  1163. package/packages/gateway/dist/web/plugins.js +99 -10
  1164. package/packages/gateway/dist/web/plugins.js.map +1 -1
  1165. package/packages/gateway/dist/web/proposals.d.ts +21 -0
  1166. package/packages/gateway/dist/web/proposals.d.ts.map +1 -1
  1167. package/packages/gateway/dist/web/proposals.js +50 -1
  1168. package/packages/gateway/dist/web/proposals.js.map +1 -1
  1169. package/packages/gateway/dist/web/read.d.ts +6 -0
  1170. package/packages/gateway/dist/web/read.d.ts.map +1 -1
  1171. package/packages/gateway/dist/web/read.js.map +1 -1
  1172. package/packages/gateway/dist/web/recovery.d.ts +19 -2
  1173. package/packages/gateway/dist/web/recovery.d.ts.map +1 -1
  1174. package/packages/gateway/dist/web/recovery.js +148 -7
  1175. package/packages/gateway/dist/web/recovery.js.map +1 -1
  1176. package/packages/gateway/dist/web/server.d.ts +9 -0
  1177. package/packages/gateway/dist/web/server.d.ts.map +1 -1
  1178. package/packages/gateway/dist/web/server.js +479 -52
  1179. package/packages/gateway/dist/web/server.js.map +1 -1
  1180. package/packages/gateway/dist/web/sessions.d.ts +124 -9
  1181. package/packages/gateway/dist/web/sessions.d.ts.map +1 -1
  1182. package/packages/gateway/dist/web/sessions.js +306 -24
  1183. package/packages/gateway/dist/web/sessions.js.map +1 -1
  1184. package/packages/gateway/dist/web/signed-out.d.ts +45 -0
  1185. package/packages/gateway/dist/web/signed-out.d.ts.map +1 -0
  1186. package/packages/gateway/dist/web/signed-out.js +201 -0
  1187. package/packages/gateway/dist/web/signed-out.js.map +1 -0
  1188. package/packages/gateway/dist/web/stream.d.ts.map +1 -1
  1189. package/packages/gateway/dist/web/stream.js +14 -0
  1190. package/packages/gateway/dist/web/stream.js.map +1 -1
  1191. package/packages/gateway/dist/web/tailscale.d.ts +46 -4
  1192. package/packages/gateway/dist/web/tailscale.d.ts.map +1 -1
  1193. package/packages/gateway/dist/web/tailscale.js +88 -16
  1194. package/packages/gateway/dist/web/tailscale.js.map +1 -1
  1195. package/packages/gateway/dist/web/widgets.d.ts +130 -0
  1196. package/packages/gateway/dist/web/widgets.d.ts.map +1 -0
  1197. package/packages/gateway/dist/web/widgets.js +473 -0
  1198. package/packages/gateway/dist/web/widgets.js.map +1 -0
  1199. package/packages/install/dist/.tsbuildinfo +1 -1
  1200. package/packages/install/dist/backup.d.ts +18 -0
  1201. package/packages/install/dist/backup.d.ts.map +1 -1
  1202. package/packages/install/dist/backup.js +39 -2
  1203. package/packages/install/dist/backup.js.map +1 -1
  1204. package/packages/install/dist/kept-data.d.ts +20 -0
  1205. package/packages/install/dist/kept-data.d.ts.map +1 -0
  1206. package/packages/install/dist/kept-data.js +34 -0
  1207. package/packages/install/dist/kept-data.js.map +1 -0
  1208. package/packages/install/dist/launcher.d.ts.map +1 -1
  1209. package/packages/install/dist/launcher.js +17 -3
  1210. package/packages/install/dist/launcher.js.map +1 -1
  1211. package/packages/runtime/dist/.tsbuildinfo +1 -1
  1212. package/packages/runtime/dist/anthropic.d.ts +9 -0
  1213. package/packages/runtime/dist/anthropic.d.ts.map +1 -1
  1214. package/packages/runtime/dist/anthropic.js +26 -9
  1215. package/packages/runtime/dist/anthropic.js.map +1 -1
  1216. package/packages/runtime/dist/codex-direct.d.ts +2 -1
  1217. package/packages/runtime/dist/codex-direct.d.ts.map +1 -1
  1218. package/packages/runtime/dist/codex-direct.js +13 -6
  1219. package/packages/runtime/dist/codex-direct.js.map +1 -1
  1220. package/packages/runtime/dist/index.d.ts +1 -0
  1221. package/packages/runtime/dist/index.d.ts.map +1 -1
  1222. package/packages/runtime/dist/index.js +1 -0
  1223. package/packages/runtime/dist/index.js.map +1 -1
  1224. package/packages/runtime/dist/loop.d.ts +2 -0
  1225. package/packages/runtime/dist/loop.d.ts.map +1 -1
  1226. package/packages/runtime/dist/loop.js +22 -0
  1227. package/packages/runtime/dist/loop.js.map +1 -1
  1228. package/packages/runtime/dist/openai.d.ts.map +1 -1
  1229. package/packages/runtime/dist/openai.js +19 -7
  1230. package/packages/runtime/dist/openai.js.map +1 -1
  1231. package/packages/runtime/dist/rate-limit.d.ts +91 -0
  1232. package/packages/runtime/dist/rate-limit.d.ts.map +1 -0
  1233. package/packages/runtime/dist/rate-limit.js +291 -0
  1234. package/packages/runtime/dist/rate-limit.js.map +1 -0
  1235. package/packages/runtime/dist/retry.d.ts +40 -0
  1236. package/packages/runtime/dist/retry.d.ts.map +1 -1
  1237. package/packages/runtime/dist/retry.js +42 -8
  1238. package/packages/runtime/dist/retry.js.map +1 -1
  1239. package/packages/tools/artifacts/dist/.tsbuildinfo +1 -1
  1240. package/packages/tools/browser/dist/.tsbuildinfo +1 -1
  1241. package/packages/tools/email/dist/.tsbuildinfo +1 -1
  1242. package/packages/tools/email/dist/agent.d.ts.map +1 -1
  1243. package/packages/tools/email/dist/agent.js +11 -0
  1244. package/packages/tools/email/dist/agent.js.map +1 -1
  1245. package/packages/tools/email/dist/folders.d.ts +14 -0
  1246. package/packages/tools/email/dist/folders.d.ts.map +1 -1
  1247. package/packages/tools/email/dist/folders.js +23 -0
  1248. package/packages/tools/email/dist/folders.js.map +1 -1
  1249. package/packages/tools/email/dist/imap/fake.d.ts +144 -3
  1250. package/packages/tools/email/dist/imap/fake.d.ts.map +1 -1
  1251. package/packages/tools/email/dist/imap/fake.js +393 -4
  1252. package/packages/tools/email/dist/imap/fake.js.map +1 -1
  1253. package/packages/tools/email/dist/imap/imapflow-client.d.ts +14 -1
  1254. package/packages/tools/email/dist/imap/imapflow-client.d.ts.map +1 -1
  1255. package/packages/tools/email/dist/imap/imapflow-client.js +222 -2
  1256. package/packages/tools/email/dist/imap/imapflow-client.js.map +1 -1
  1257. package/packages/tools/email/dist/index.d.ts +14 -2
  1258. package/packages/tools/email/dist/index.d.ts.map +1 -1
  1259. package/packages/tools/email/dist/index.js +26 -4
  1260. package/packages/tools/email/dist/index.js.map +1 -1
  1261. package/packages/tools/email/dist/logins.d.ts +24 -0
  1262. package/packages/tools/email/dist/logins.d.ts.map +1 -0
  1263. package/packages/tools/email/dist/logins.js +35 -0
  1264. package/packages/tools/email/dist/logins.js.map +1 -0
  1265. package/packages/tools/email/dist/mail.d.ts +20 -0
  1266. package/packages/tools/email/dist/mail.d.ts.map +1 -1
  1267. package/packages/tools/email/dist/mail.js +26 -0
  1268. package/packages/tools/email/dist/mail.js.map +1 -1
  1269. package/packages/tools/email/dist/mailbox/actions.d.ts +290 -0
  1270. package/packages/tools/email/dist/mailbox/actions.d.ts.map +1 -0
  1271. package/packages/tools/email/dist/mailbox/actions.js +1105 -0
  1272. package/packages/tools/email/dist/mailbox/actions.js.map +1 -0
  1273. package/packages/tools/email/dist/mailbox/arrival.d.ts +61 -0
  1274. package/packages/tools/email/dist/mailbox/arrival.d.ts.map +1 -0
  1275. package/packages/tools/email/dist/mailbox/arrival.js +153 -0
  1276. package/packages/tools/email/dist/mailbox/arrival.js.map +1 -0
  1277. package/packages/tools/email/dist/mailbox/select.d.ts +53 -0
  1278. package/packages/tools/email/dist/mailbox/select.d.ts.map +1 -0
  1279. package/packages/tools/email/dist/mailbox/select.js +124 -0
  1280. package/packages/tools/email/dist/mailbox/select.js.map +1 -0
  1281. package/packages/tools/email/dist/metrics.d.ts +3 -3
  1282. package/packages/tools/email/dist/metrics.js +4 -4
  1283. package/packages/tools/email/dist/pages/accounts.d.ts +37 -1
  1284. package/packages/tools/email/dist/pages/accounts.d.ts.map +1 -1
  1285. package/packages/tools/email/dist/pages/accounts.js +104 -2
  1286. package/packages/tools/email/dist/pages/accounts.js.map +1 -1
  1287. package/packages/tools/email/dist/pages/descriptors.d.ts.map +1 -1
  1288. package/packages/tools/email/dist/pages/descriptors.js +156 -0
  1289. package/packages/tools/email/dist/pages/descriptors.js.map +1 -1
  1290. package/packages/tools/email/dist/pages/drafts-tools.d.ts +2 -2
  1291. package/packages/tools/email/dist/pages/format.d.ts +1 -12
  1292. package/packages/tools/email/dist/pages/format.d.ts.map +1 -1
  1293. package/packages/tools/email/dist/pages/format.js +17 -0
  1294. package/packages/tools/email/dist/pages/format.js.map +1 -1
  1295. package/packages/tools/email/dist/pages/index.d.ts.map +1 -1
  1296. package/packages/tools/email/dist/pages/index.js +5 -1
  1297. package/packages/tools/email/dist/pages/index.js.map +1 -1
  1298. package/packages/tools/email/dist/pages/policies-tools.d.ts +7 -0
  1299. package/packages/tools/email/dist/pages/policies-tools.d.ts.map +1 -1
  1300. package/packages/tools/email/dist/pages/policies-tools.js +11 -2
  1301. package/packages/tools/email/dist/pages/policies-tools.js.map +1 -1
  1302. package/packages/tools/email/dist/pages/queries.d.ts +23 -0
  1303. package/packages/tools/email/dist/pages/queries.d.ts.map +1 -1
  1304. package/packages/tools/email/dist/pages/queries.js +185 -4
  1305. package/packages/tools/email/dist/pages/queries.js.map +1 -1
  1306. package/packages/tools/email/dist/policies/auto.d.ts +133 -0
  1307. package/packages/tools/email/dist/policies/auto.d.ts.map +1 -0
  1308. package/packages/tools/email/dist/policies/auto.js +296 -0
  1309. package/packages/tools/email/dist/policies/auto.js.map +1 -0
  1310. package/packages/tools/email/dist/policies/gate.d.ts +34 -10
  1311. package/packages/tools/email/dist/policies/gate.d.ts.map +1 -1
  1312. package/packages/tools/email/dist/policies/gate.js +27 -12
  1313. package/packages/tools/email/dist/policies/gate.js.map +1 -1
  1314. package/packages/tools/email/dist/policies/learn.d.ts +26 -18
  1315. package/packages/tools/email/dist/policies/learn.d.ts.map +1 -1
  1316. package/packages/tools/email/dist/policies/learn.js +36 -10
  1317. package/packages/tools/email/dist/policies/learn.js.map +1 -1
  1318. package/packages/tools/email/dist/policies/learned.d.ts +25 -2
  1319. package/packages/tools/email/dist/policies/learned.d.ts.map +1 -1
  1320. package/packages/tools/email/dist/policies/learned.js +47 -5
  1321. package/packages/tools/email/dist/policies/learned.js.map +1 -1
  1322. package/packages/tools/email/dist/policies/store.d.ts +8 -2
  1323. package/packages/tools/email/dist/policies/store.d.ts.map +1 -1
  1324. package/packages/tools/email/dist/policies/store.js +19 -5
  1325. package/packages/tools/email/dist/policies/store.js.map +1 -1
  1326. package/packages/tools/email/dist/ports.d.ts +126 -0
  1327. package/packages/tools/email/dist/ports.d.ts.map +1 -1
  1328. package/packages/tools/email/dist/ports.js +6 -0
  1329. package/packages/tools/email/dist/ports.js.map +1 -1
  1330. package/packages/tools/email/dist/rows.d.ts.map +1 -1
  1331. package/packages/tools/email/dist/rows.js +3 -1
  1332. package/packages/tools/email/dist/rows.js.map +1 -1
  1333. package/packages/tools/email/dist/sentinels/waiting-on-me.d.ts +2 -2
  1334. package/packages/tools/email/dist/sentinels/waiting-on-me.d.ts.map +1 -1
  1335. package/packages/tools/email/dist/sentinels/waiting-on-me.js +8 -3
  1336. package/packages/tools/email/dist/sentinels/waiting-on-me.js.map +1 -1
  1337. package/packages/tools/email/dist/sources/idle.d.ts +98 -0
  1338. package/packages/tools/email/dist/sources/idle.d.ts.map +1 -0
  1339. package/packages/tools/email/dist/sources/idle.js +317 -0
  1340. package/packages/tools/email/dist/sources/idle.js.map +1 -0
  1341. package/packages/tools/email/dist/sources/inbox-poll.d.ts +79 -1
  1342. package/packages/tools/email/dist/sources/inbox-poll.d.ts.map +1 -1
  1343. package/packages/tools/email/dist/sources/inbox-poll.js +420 -145
  1344. package/packages/tools/email/dist/sources/inbox-poll.js.map +1 -1
  1345. package/packages/tools/email/dist/sources/presence.d.ts +47 -0
  1346. package/packages/tools/email/dist/sources/presence.d.ts.map +1 -0
  1347. package/packages/tools/email/dist/sources/presence.js +128 -0
  1348. package/packages/tools/email/dist/sources/presence.js.map +1 -0
  1349. package/packages/tools/email/dist/threads.d.ts +2 -0
  1350. package/packages/tools/email/dist/threads.d.ts.map +1 -1
  1351. package/packages/tools/email/dist/threads.js +12 -3
  1352. package/packages/tools/email/dist/threads.js.map +1 -1
  1353. package/packages/tools/email/dist/tools/mailbox.d.ts +108 -0
  1354. package/packages/tools/email/dist/tools/mailbox.d.ts.map +1 -0
  1355. package/packages/tools/email/dist/tools/mailbox.js +359 -0
  1356. package/packages/tools/email/dist/tools/mailbox.js.map +1 -0
  1357. package/packages/tools/email/dist/tools/policies.d.ts +8 -2
  1358. package/packages/tools/email/dist/tools/policies.d.ts.map +1 -1
  1359. package/packages/tools/email/dist/tools/policies.js +43 -3
  1360. package/packages/tools/email/dist/tools/policies.js.map +1 -1
  1361. package/packages/tools/email/dist/tools/read.d.ts +2 -2
  1362. package/packages/tools/email/dist/tools/read.d.ts.map +1 -1
  1363. package/packages/tools/email/dist/tools/read.js +29 -2
  1364. package/packages/tools/email/dist/tools/read.js.map +1 -1
  1365. package/packages/tools/email/dist/tools/threads.d.ts +2 -2
  1366. package/packages/tools/email/dist/tools/triage.d.ts.map +1 -1
  1367. package/packages/tools/email/dist/tools/triage.js +10 -4
  1368. package/packages/tools/email/dist/tools/triage.js.map +1 -1
  1369. package/packages/tools/email/dist/widgets.d.ts +13 -0
  1370. package/packages/tools/email/dist/widgets.d.ts.map +1 -0
  1371. package/packages/tools/email/dist/widgets.js +51 -0
  1372. package/packages/tools/email/dist/widgets.js.map +1 -0
  1373. package/packages/tools/email/migrations/017_mailbox_actions.sql +60 -0
  1374. package/packages/tools/email/migrations/018_learned_auto.sql +30 -0
  1375. package/packages/tools/email/migrations/019_arrival_pending.sql +26 -0
  1376. package/packages/tools/email/migrations/020_mailbox_presence.sql +44 -0
  1377. package/packages/tools/email/migrations/021_learned_line.sql +9 -0
  1378. package/packages/tools/email/migrations/022_bulk_checked.sql +13 -0
  1379. package/packages/tools/email/package.json +3 -2
  1380. package/packages/tools/host/dist/.tsbuildinfo +1 -1
  1381. package/packages/tools/mcp/dist/.tsbuildinfo +1 -1
  1382. package/packages/tools/memory/dist/.tsbuildinfo +1 -1
  1383. package/packages/tools/memory/dist/admin.d.ts +9 -0
  1384. package/packages/tools/memory/dist/admin.d.ts.map +1 -1
  1385. package/packages/tools/memory/dist/admin.js +11 -0
  1386. package/packages/tools/memory/dist/admin.js.map +1 -1
  1387. package/packages/tools/web/dist/.tsbuildinfo +1 -1
  1388. package/packages/web/dist/assets/index-D8_tmf2k.js +131 -0
  1389. package/packages/web/dist/assets/index-DYQyioa6.css +1 -0
  1390. package/packages/web/dist/assets/{lottie_light-DmJaDM4A.js → lottie_light-Cdn77Osu.js} +1 -1
  1391. package/packages/web/dist/build.json +1 -1
  1392. package/packages/web/dist/index.html +2 -2
  1393. package/packages/web/dist/precache.json +4 -4
  1394. package/packages/web/dist/assets/index-Cn-3X1OI.js +0 -130
  1395. package/packages/web/dist/assets/index-bdj791NB.css +0 -1
@@ -1,11 +1,17 @@
1
- import { INBOX, listAccounts, markAccountSynced } from '../config.js';
1
+ import { findAccount, INBOX, listAccounts, markAccountSynced } from '../config.js';
2
2
  import { mailboxAuth } from '../credentials.js';
3
- import { planFolders } from '../folders.js';
3
+ import { clearLoginFailure, isAuthFailure, recordLoginFailure } from '../logins.js';
4
+ import { applyPendingArrivals, oweArrivalAction } from '../mailbox/arrival.js';
5
+ import { reconcilePendingChanges } from '../mailbox/actions.js';
6
+ import { placeWords, planFolders } from '../folders.js';
4
7
  import { prepareForIngest, triagePrompt } from '../mail.js';
5
8
  import { scanMessageDates, skipDates } from '../dates-store.js';
6
9
  import { applyPolicies } from '../policies/gate.js';
7
10
  import { loadPolicies, recordEvent, settleEvent } from '../policies/store.js';
8
11
  import { ownerReplies, senderVerdicts } from '../policies/learn.js';
12
+ import { sweepOpenBulkCards, tellOwnerLearned } from '../policies/auto.js';
13
+ import { IDLE_SLOW_POLL_SECONDS, IdleWatchers } from './idle.js';
14
+ import { checkPresence } from './presence.js';
9
15
  import { FOLDER_COLUMNS, toFolder } from '../rows.js';
10
16
  import { findThread, joinThread, threadMessages } from '../threads.js';
11
17
  import { PROCESSING_VERSION } from '../tools/shared.js';
@@ -27,6 +33,11 @@ export const MAX_PER_POLL = 50;
27
33
  export const FLAG_SYNC_WINDOW = 2_000;
28
34
  /** Uids per `UID FETCH … FLAGS`, so one command line stays a sane length. */
29
35
  export const FLAG_SYNC_BATCH = 500;
36
+ /**
37
+ * Older mail whose `bulk` was never read from its headers, re-read per poll:
38
+ * at most this many messages, newest first, in one header-only fetch.
39
+ */
40
+ export const BULK_BACKFILL_PER_POLL = 200;
30
41
  /** Deadline for every single IMAP call. Env: `EMAIL_POLL_TIMEOUT_MS`. */
31
42
  export const DEFAULT_POLL_TIMEOUT_MS = 45_000;
32
43
  export const POLL_TIMEOUT_VAR = 'EMAIL_POLL_TIMEOUT_MS';
@@ -100,12 +111,13 @@ export function triageDedupKey(messageRowId) {
100
111
  * LIST/STATUS fills an uninitialised cursor but never replaces one already in
101
112
  * use.
102
113
  */
103
- async function ensureFolder(db, account, name, kind = 'other', synced = false, boundary) {
104
- const { rows } = await db.query(`insert into email.folders (account_id, name, kind, synced, uidvalidity, last_uid)
105
- values ($1, $2, $3, $4, $5, $6)
114
+ async function ensureFolder(db, account, name, kind = 'other', synced = false, boundary, specialUse = null) {
115
+ const { rows } = await db.query(`insert into email.folders (account_id, name, kind, synced, uidvalidity, last_uid, special_use)
116
+ values ($1, $2, $3, $4, $5, $6, $7)
106
117
  on conflict (account_id, name) do update
107
118
  set kind = excluded.kind,
108
119
  synced = excluded.synced,
120
+ special_use = coalesce(excluded.special_use, email.folders.special_use),
109
121
  uidvalidity = case
110
122
  when email.folders.uidvalidity is null and excluded.kind = 'sent'
111
123
  then excluded.uidvalidity
@@ -116,7 +128,7 @@ async function ensureFolder(db, account, name, kind = 'other', synced = false, b
116
128
  then excluded.last_uid
117
129
  else email.folders.last_uid
118
130
  end
119
- returning ${FOLDER_COLUMNS}`, [account.id, name, kind, synced, boundary?.uidValidity ?? null, boundary?.lastUid ?? 0]);
131
+ returning ${FOLDER_COLUMNS}`, [account.id, name, kind, synced, boundary?.uidValidity ?? null, boundary?.lastUid ?? 0, specialUse]);
120
132
  const row = rows[0];
121
133
  if (!row)
122
134
  throw new Error('email.inbox-poll: folder upsert returned no row');
@@ -174,7 +186,11 @@ async function discoverFolders(db, account, client, timeoutMs, log) {
174
186
  }
175
187
  : undefined;
176
188
  try {
177
- await ensureFolder(db, account, folder.name, folder.kind, folder.synced, boundary);
189
+ const use = listed
190
+ ? [listed.specialUse ?? '', ...listed.flags].map((f) => f.trim().toLowerCase())
191
+ .find((f) => ['\\all', '\\archive', '\\trash', '\\junk', '\\sent', '\\drafts'].includes(f)) ?? null
192
+ : null;
193
+ await ensureFolder(db, account, folder.name, folder.kind, folder.synced, boundary, use);
178
194
  if (folder.kind === 'sent')
179
195
  sentPersisted = true;
180
196
  }
@@ -234,12 +250,33 @@ async function commitBatch(db, account, folder, uidValidity, fetched, direction,
234
250
  return db.transaction(async (client) => {
235
251
  const pending = [];
236
252
  for (const message of fetched) {
253
+ /*
254
+ * Back in the inbox: a message buddi holds as gone, placed outside
255
+ * the inbox (archived, labelled, trashed in another app), or put back
256
+ * here with its new uid unknown, arriving under a new uid is the same
257
+ * message — its row follows, and it is neither stored twice nor
258
+ * triaged again.
259
+ */
260
+ if (direction === 'in' && message.messageId) {
261
+ const back = await client.query(`update email.messages m
262
+ set folder_id = $3, uidvalidity = $4, uid = $5, gone_at = null, flags = $6::jsonb
263
+ from email.folders f
264
+ where f.id = m.folder_id and m.account_id = $1 and m.message_id = $2 and m.direction = 'in'
265
+ and (m.gone_at is not null or f.kind <> 'inbox' or m.uidvalidity = 0)
266
+ and not exists (select 1 from email.messages o
267
+ where o.account_id = $1 and o.folder_id = $3 and o.uidvalidity = $4 and o.uid = $5)
268
+ returning m.id`, [account.id, message.messageId, folder.id, uidValidity, message.uid, JSON.stringify(message.flags)]);
269
+ if ((back.rowCount ?? 0) > 0) {
270
+ await client.query(`update email.threads set last_folder_id = $2, last_uidvalidity = $3, last_uid = $4 where last_message_id = $1`, [String(back.rows[0].id), folder.id, uidValidity, message.uid]);
271
+ continue;
272
+ }
273
+ }
237
274
  const { rows } = await client.query(`insert into email.messages
238
275
  (account_id, folder_id, uidvalidity, uid, message_id, thread_key, list_id, from_addr,
239
276
  to_addrs, cc, subject, date, internal_date, snippet, body_text, has_attachments,
240
- attachments, flags, direction, triage_enqueued_at)
277
+ attachments, flags, direction, triage_enqueued_at, bulk)
241
278
  values ($1, $2, $3, $4, $5, $6, $7, $8, $9::jsonb, $10::jsonb, $11, $12, $13, $14, $15,
242
- $16, $17::jsonb, $18::jsonb, $19, $20)
279
+ $16, $17::jsonb, $18::jsonb, $19, $20, $21)
243
280
  on conflict (account_id, folder_id, uidvalidity, uid) do nothing
244
281
  returning id`, [
245
282
  account.id,
@@ -263,6 +300,7 @@ async function commitBatch(db, account, folder, uidValidity, fetched, direction,
263
300
  direction,
264
301
  // Sent mail is nobody's to triage; it is stamped as it lands.
265
302
  direction === 'out' ? now : null,
303
+ message.bulk === true,
266
304
  ]);
267
305
  const id = rows[0]?.id;
268
306
  if (!id)
@@ -344,7 +382,276 @@ export function createInboxPollSource(opts) {
344
382
  const onlyFolder = opts.mailbox;
345
383
  const limit = Math.min(Math.max(1, opts.limit ?? MAX_PER_POLL), MAX_PER_POLL);
346
384
  const agentId = opts.agentId ?? TRIAGE_AGENT_ID;
347
- return {
385
+ const slowPollMs = (opts.slowPollSeconds ?? IDLE_SLOW_POLL_SECONDS) * 1000;
386
+ /*
387
+ * One poll of one account at a time, whoever asked: the scheduled pass, or
388
+ * IDLE. `inFlight` is the lock; `again` is a change IDLE saw while a poll
389
+ * was already running, which earns exactly one more poll after it.
390
+ * `lastPolled` is this process's own clock of when each account last
391
+ * finished, for the slower safety-net period while IDLE is live.
392
+ */
393
+ const inFlight = new Map();
394
+ const again = new Set();
395
+ const lastPolled = new Map();
396
+ let watchers = null;
397
+ let watchCtx = null;
398
+ /** Run `work` as this account's poll. Callers check `inFlight` first; this sets it synchronously. */
399
+ function runLocked(accountId, work) {
400
+ const running = (async () => {
401
+ try {
402
+ await work();
403
+ }
404
+ finally {
405
+ inFlight.delete(accountId);
406
+ lastPolled.set(accountId, Date.now());
407
+ if (again.delete(accountId)) {
408
+ const ctx = watcherCtx();
409
+ // Like IDLE's own debounced poll: a failure is logged (a refused
410
+ // login was already recorded by the poll), never left unhandled.
411
+ if (ctx !== null) {
412
+ pollNow(accountId).catch((err) => {
413
+ (ctx.buddi?.log ?? ((line) => console.error(line)))(`email.inbox-poll: follow-up poll failed: ${err instanceof Error ? err.message : String(err)}`);
414
+ });
415
+ }
416
+ }
417
+ }
418
+ })();
419
+ inFlight.set(accountId, running);
420
+ return running;
421
+ }
422
+ function watcherCtx() {
423
+ return watchers ? watchCtx : null;
424
+ }
425
+ /** IDLE saw a change: this account's poll, now, or once more after the one running. */
426
+ function pollNow(accountId) {
427
+ const ctx = watcherCtx();
428
+ if (ctx === null)
429
+ return Promise.resolve();
430
+ if (inFlight.has(accountId)) {
431
+ again.add(accountId);
432
+ return Promise.resolve();
433
+ }
434
+ return runLocked(accountId, async () => {
435
+ const account = await findAccount(ctx.buddi.db, accountId);
436
+ if (account === null)
437
+ return;
438
+ const pass = { failures: [], triageReady: ctx.buddi.owner.hasAgent(agentId), saidWaiting: false };
439
+ await pollAccount(ctx, account, pass);
440
+ if (pass.failures.length > 0)
441
+ throw pass.failures[0];
442
+ });
443
+ }
444
+ /** One account's whole pass: connect, folders, flags, drain, on-arrival actions. */
445
+ async function pollAccount(ctx, account, pass) {
446
+ const log = ctx.buddi?.log ?? ((line) => console.error(line));
447
+ const env = opts.env ?? process.env;
448
+ const auth = await mailboxAuth(ctx, account, opts.env);
449
+ if (!auth.ok) {
450
+ // A typed configuration problem: say it once per poll and stop. An
451
+ // unattended run that needs a secret fails with a problem; it never
452
+ // hangs and never falls back to asking.
453
+ log(`email.inbox-poll: ${auth.problem.code}: ${auth.problem.message}`);
454
+ return;
455
+ }
456
+ const timeoutMs = Math.max(1, opts.timeoutMs ?? envInt(env, POLL_TIMEOUT_VAR, DEFAULT_POLL_TIMEOUT_MS));
457
+ const backfill = Math.max(0, opts.backfill ?? envInt(env, BACKFILL_VAR, DEFAULT_BACKFILL));
458
+ // The connection is opened for this poll and closed at the end of it,
459
+ // always. A long-lived IMAP session is a socket that silently dies while
460
+ // nobody is looking; one per poll is cheap (half a second) and honest.
461
+ // Both folders are walked over the same connection.
462
+ let client = null;
463
+ const pending = [];
464
+ /*
465
+ * Did this account's pass get all the way through? Only then is it a
466
+ * sync, and only then is `last_synced_at` moved: a Sent folder that
467
+ * timed out still let the inbox land, but it means what we hold for
468
+ * this mailbox is no longer everything the server has, and a metric
469
+ * that stamped it "as of now" would be saying otherwise.
470
+ */
471
+ let complete = true;
472
+ try {
473
+ try {
474
+ client = await withDeadline('connect', timeoutMs, opts.connect(account, auth.value),
475
+ // We gave up waiting, but the connection may still arrive: close it
476
+ // rather than leave a socket nobody owns.
477
+ (late) => void late.close().catch(() => { }));
478
+ }
479
+ catch (err) {
480
+ // The provider refused the password it was given: written on the
481
+ // row so Settings → Email says "Password needed" (`logins.ts`).
482
+ if (isAuthFailure(err)) {
483
+ await recordLoginFailure(ctx.buddi.db, account.id, err, ctx.buddi.clock.now()).catch(() => { });
484
+ log(`email.inbox-poll: ${account.address} refused its stored password; Settings → Email → Set password`);
485
+ }
486
+ throw err;
487
+ }
488
+ await clearLoginFailure(ctx.buddi.db, account.id);
489
+ // Which folders this account has, discovered once and remembered.
490
+ // A caller that named one folder gets that folder and no listing:
491
+ // the CLI and the tests both drive a single mailbox on purpose.
492
+ const folders = onlyFolder
493
+ ? [await ensureFolder(ctx.buddi.db, account, onlyFolder, 'inbox', true)]
494
+ : (await discoverFolders(ctx.buddi.db, account, client, timeoutMs, log)).filter((f) => f.synced);
495
+ // New discovery persists Sent's LIST/STATUS boundary above. This
496
+ // loop is for an older or partially initialised row that still has
497
+ // no generation: try to plant it before INBOX work, but isolate a
498
+ // failed SELECT or cursor write so incoming mail still lands.
499
+ const attemptedSent = new Set();
500
+ for (const folder of folders.filter((f) => f.kind === 'sent' && f.uidValidity === null)) {
501
+ attemptedSent.add(folder.id);
502
+ try {
503
+ await pollFolder(ctx, account, client, folder, { timeoutMs, backfill, limit, log });
504
+ }
505
+ catch (err) {
506
+ log(`email.inbox-poll: could not initialize Sent folder ${account.address}/${folder.name}: ` +
507
+ `${err instanceof Error ? err.message : String(err)}; continuing with INBOX`);
508
+ complete = false;
509
+ pass.failures.push(err);
510
+ }
511
+ }
512
+ // The inbox first: it is the one that wakes anybody, and a Sent
513
+ // folder that times out must not cost the new mail its run.
514
+ for (const folder of [...folders].filter((f) => !attemptedSent.has(f.id)).sort((a, b) => (a.kind === 'inbox' ? -1 : b.kind === 'inbox' ? 1 : 0))) {
515
+ try {
516
+ const polled = await pollFolder(ctx, account, client, folder, {
517
+ timeoutMs,
518
+ backfill,
519
+ limit,
520
+ log,
521
+ });
522
+ pending.push(...polled.pending);
523
+ if (folder.kind === 'inbox') {
524
+ // After ingest, so the new rows are in the window with the
525
+ // flags they arrived with. A re-sync that fails costs nobody
526
+ // their mail: the rows landed, the runs are queued below, and
527
+ // only this pass stops counting as a sync — the unread count
528
+ // it would have corrected is not stamped as current.
529
+ try {
530
+ await syncFlags(ctx.buddi.db, account, client, polled.folder, polled.status, timeoutMs, log);
531
+ }
532
+ catch (err) {
533
+ log(`email.inbox-poll: could not re-sync flags on ${account.address}/${folder.name}: ` +
534
+ `${err instanceof Error ? err.message : String(err)}; new mail still landed`);
535
+ complete = false;
536
+ pass.failures.push(err);
537
+ }
538
+ // What left the inbox in another app (`presence.ts`): after the
539
+ // flags, so a departed row keeps the flags it last had there.
540
+ try {
541
+ const reader = client;
542
+ await checkPresence(ctx.buddi.db, account, reader, polled.folder, polled.status, {
543
+ window: FLAG_SYNC_WINDOW,
544
+ now: ctx.buddi.clock.now(),
545
+ log,
546
+ deadline: (op, work) => withDeadline(op, timeoutMs, work),
547
+ });
548
+ }
549
+ catch (err) {
550
+ log(`email.inbox-poll: could not check what left ${account.address}/${folder.name}: ` +
551
+ `${err instanceof Error ? err.message : String(err)}; new mail still landed`);
552
+ complete = false;
553
+ pass.failures.push(err);
554
+ }
555
+ // Older mail never read for List-Unsubscribe / Precedence: a
556
+ // bounded few, header lines only; a newsletter found keeps the
557
+ // waiting cards for it the way a new one would.
558
+ try {
559
+ const found = await backfillBulk(ctx.buddi.db, client, polled.folder, polled.status, timeoutMs);
560
+ if (found > 0) {
561
+ log(`email.inbox-poll: ${found} older message(s) on ${account.address}/${folder.name} read as sent to many`);
562
+ const proposals = ctx.buddi.proposals;
563
+ if (proposals) {
564
+ const host = { db: ctx.buddi.db, owner: ctx.buddi.owner, proposals };
565
+ const now = ctx.buddi.clock.now();
566
+ if ((await sweepOpenBulkCards(host, now)) > 0)
567
+ await tellOwnerLearned(host, now);
568
+ }
569
+ }
570
+ }
571
+ catch (err) {
572
+ log(`email.inbox-poll: could not re-read older mail's list headers on ${account.address}/${folder.name}: ` +
573
+ `${err instanceof Error ? err.message : String(err)}; new mail still landed`);
574
+ }
575
+ }
576
+ }
577
+ catch (err) {
578
+ if (folder.kind !== 'sent')
579
+ throw err;
580
+ log(`email.inbox-poll: could not poll Sent folder ${account.address}/${folder.name}: ` +
581
+ `${err instanceof Error ? err.message : String(err)}; INBOX was still polled`);
582
+ complete = false;
583
+ pass.failures.push(err);
584
+ }
585
+ }
586
+ /*
587
+ * The pass finished. This is the one place `last_synced_at` moves,
588
+ * and it moves whether or not a single message was new: "we read
589
+ * this mailbox and there was nothing" is an answer, and without a
590
+ * mark of its own it is indistinguishable from never having looked.
591
+ */
592
+ if (complete)
593
+ await markAccountSynced(ctx.buddi.db, account.id, ctx.buddi.clock.now());
594
+ }
595
+ catch (err) {
596
+ complete = false;
597
+ if (err instanceof ImapTimeoutError) {
598
+ // A recorded give-up. Rethrowing it at the end of the pass is
599
+ // deliberate: `runSources` writes it to
600
+ // core.source_runs.last_error and emits `source.polled` with it,
601
+ // so a mailbox that stopped answering is visible rather than silent.
602
+ log(`email.inbox-poll: ${err.message} on ${account.address}; ` +
603
+ `connection closed, retrying next poll`);
604
+ }
605
+ pass.failures.push(err);
606
+ // Whatever did land before the failure is still drained below: a
607
+ // Sent folder that timed out is no reason to sit on the inbox.
608
+ }
609
+ finally {
610
+ await client?.close().catch(() => { });
611
+ }
612
+ try {
613
+ const waiting = await drain(ctx, account, agentId, limit, pending, pass.triageReady);
614
+ if (waiting > 0 && !pass.saidWaiting) {
615
+ pass.saidWaiting = true;
616
+ log(`email.inbox-poll: no triage agent yet — accept the Mail offer on the dashboard`);
617
+ }
618
+ await recordTriageWaiting(ctx.buddi.db, account.id, pass.triageReady ? false : waiting > 0 ? true : null, ctx.buddi.clock.now());
619
+ }
620
+ catch (err) {
621
+ pass.failures.push(err);
622
+ }
623
+ /*
624
+ * Rules with an on-arrival mailbox action (archive, mark read, move):
625
+ * after the gate and the queue, over a connection of their own, and
626
+ * on the undo trail (`mailbox/arrival.ts`). Whatever is owed — this
627
+ * drain's, and an earlier poll's that failed — is tried; a failure is
628
+ * logged, counted, and costs nobody their triage.
629
+ */
630
+ /*
631
+ * Intent first: a mailbox change this process did not finish (buddi
632
+ * stopped between the server change and its record) left a `pending`
633
+ * trail row. Settle it with the server before any new change acts.
634
+ */
635
+ try {
636
+ const settled = await reconcilePendingChanges(ctx, account, { connect: opts.connect, ...(opts.env ? { env: opts.env } : {}) });
637
+ if (settled > 0)
638
+ log(`email.inbox-poll: settled ${settled} interrupted mailbox change(s) on ${account.address} with the server`);
639
+ }
640
+ catch (err) {
641
+ log(`email.inbox-poll: could not settle interrupted mailbox changes on ${account.address}: ` +
642
+ `${err instanceof Error ? err.message : String(err)}; the next poll tries again`);
643
+ }
644
+ {
645
+ try {
646
+ await applyPendingArrivals(ctx, account, { connect: opts.connect, ...(opts.env ? { env: opts.env } : {}) });
647
+ }
648
+ catch (err) {
649
+ log(`email.inbox-poll: on-arrival rule actions on ${account.address} failed: ` +
650
+ `${err instanceof Error ? err.message : String(err)}`);
651
+ }
652
+ }
653
+ }
654
+ const source = {
348
655
  id: 'email.inbox-poll',
349
656
  description: onlyFolder
350
657
  ? `Poll ${onlyFolder} for new mail and start a triage run for each new message.`
@@ -352,7 +659,6 @@ export function createInboxPollSource(opts) {
352
659
  every: POLL_EVERY_SECONDS,
353
660
  async poll(ctx) {
354
661
  const log = ctx.buddi?.log ?? ((line) => console.error(line));
355
- const env = opts.env ?? process.env;
356
662
  // Accounts are plural (docs/email.md §2). Every enabled one is polled in
357
663
  // this pass, each with its own folders and its own cursor per folder. No
358
664
  // mailbox configured is still a valid, running state rather than a
@@ -362,7 +668,6 @@ export function createInboxPollSource(opts) {
362
668
  // a mailbox that stopped answering is collected and rethrown after every
363
669
  // other account has had its turn, so `runSources` still records it in
364
670
  // `core.source_runs.last_error` and the rest of the mail still lands.
365
- const failures = [];
366
671
  /*
367
672
  * Is there anybody to hand new mail to? The triage agent is proposed by
368
673
  * this plugin, not shipped: until the owner accepts it, a run enqueued
@@ -371,140 +676,56 @@ export function createInboxPollSource(opts) {
371
676
  * runs wait, the messages stay unstamped, and the next poll after the
372
677
  * agent exists starts them. Said once per poll, not once per message.
373
678
  */
374
- const triageReady = ctx.buddi.owner.hasAgent(agentId);
375
- let saidWaiting = false;
679
+ const pass = { failures: [], triageReady: ctx.buddi.owner.hasAgent(agentId), saidWaiting: false };
680
+ // The IDLE watchers follow the accounts: one added, removed or turned
681
+ // off since the last pass is picked up here at the latest.
682
+ if (watchers)
683
+ await watchers.reconcile();
376
684
  for (const account of await listAccounts(ctx.buddi.db)) {
377
- const auth = await mailboxAuth(ctx, account, opts.env);
378
- if (!auth.ok) {
379
- // A typed configuration problem: say it once per poll and stop. An
380
- // unattended run that needs a secret fails with a problem; it never
381
- // hangs and never falls back to asking.
382
- log(`email.inbox-poll: ${auth.problem.code}: ${auth.problem.message}`);
685
+ // Never two polls of one account at once: IDLE already has it.
686
+ if (inFlight.has(account.id)) {
687
+ log(`email.inbox-poll: ${account.address} is being polled already (IDLE); skipping it this pass`);
383
688
  continue;
384
689
  }
385
- const timeoutMs = Math.max(1, opts.timeoutMs ?? envInt(env, POLL_TIMEOUT_VAR, DEFAULT_POLL_TIMEOUT_MS));
386
- const backfill = Math.max(0, opts.backfill ?? envInt(env, BACKFILL_VAR, DEFAULT_BACKFILL));
387
- // The connection is opened for this poll and closed at the end of it,
388
- // always. A long-lived IMAP session is a socket that silently dies while
389
- // nobody is looking; one per poll is cheap (half a second) and honest.
390
- // Both folders are walked over the same connection.
391
- let client = null;
392
- const pending = [];
393
- /*
394
- * Did this account's pass get all the way through? Only then is it a
395
- * sync, and only then is `last_synced_at` moved: a Sent folder that
396
- * timed out still let the inbox land, but it means what we hold for
397
- * this mailbox is no longer everything the server has, and a metric
398
- * that stamped it "as of now" would be saying otherwise.
399
- */
400
- let complete = true;
401
- try {
402
- client = await withDeadline('connect', timeoutMs, opts.connect(account, auth.value),
403
- // We gave up waiting, but the connection may still arrive: close it
404
- // rather than leave a socket nobody owns.
405
- (late) => void late.close().catch(() => { }));
406
- // Which folders this account has, discovered once and remembered.
407
- // A caller that named one folder gets that folder and no listing:
408
- // the CLI and the tests both drive a single mailbox on purpose.
409
- const folders = onlyFolder
410
- ? [await ensureFolder(ctx.buddi.db, account, onlyFolder, 'inbox', true)]
411
- : (await discoverFolders(ctx.buddi.db, account, client, timeoutMs, log)).filter((f) => f.synced);
412
- // New discovery persists Sent's LIST/STATUS boundary above. This
413
- // loop is for an older or partially initialised row that still has
414
- // no generation: try to plant it before INBOX work, but isolate a
415
- // failed SELECT or cursor write so incoming mail still lands.
416
- const attemptedSent = new Set();
417
- for (const folder of folders.filter((f) => f.kind === 'sent' && f.uidValidity === null)) {
418
- attemptedSent.add(folder.id);
419
- try {
420
- await pollFolder(ctx, account, client, folder, { timeoutMs, backfill, limit, log });
421
- }
422
- catch (err) {
423
- log(`email.inbox-poll: could not initialize Sent folder ${account.address}/${folder.name}: ` +
424
- `${err instanceof Error ? err.message : String(err)}; continuing with INBOX`);
425
- complete = false;
426
- failures.push(err);
427
- }
428
- }
429
- // The inbox first: it is the one that wakes anybody, and a Sent
430
- // folder that times out must not cost the new mail its run.
431
- for (const folder of [...folders].filter((f) => !attemptedSent.has(f.id)).sort((a, b) => (a.kind === 'inbox' ? -1 : b.kind === 'inbox' ? 1 : 0))) {
432
- try {
433
- const polled = await pollFolder(ctx, account, client, folder, {
434
- timeoutMs,
435
- backfill,
436
- limit,
437
- log,
438
- });
439
- pending.push(...polled.pending);
440
- if (folder.kind === 'inbox') {
441
- // After ingest, so the new rows are in the window with the
442
- // flags they arrived with. A re-sync that fails costs nobody
443
- // their mail: the rows landed, the runs are queued below, and
444
- // only this pass stops counting as a sync — the unread count
445
- // it would have corrected is not stamped as current.
446
- try {
447
- await syncFlags(ctx.buddi.db, account, client, polled.folder, polled.status, timeoutMs, log);
448
- }
449
- catch (err) {
450
- log(`email.inbox-poll: could not re-sync flags on ${account.address}/${folder.name}: ` +
451
- `${err instanceof Error ? err.message : String(err)}; new mail still landed`);
452
- complete = false;
453
- failures.push(err);
454
- }
455
- }
456
- }
457
- catch (err) {
458
- if (folder.kind !== 'sent')
459
- throw err;
460
- log(`email.inbox-poll: could not poll Sent folder ${account.address}/${folder.name}: ` +
461
- `${err instanceof Error ? err.message : String(err)}; INBOX was still polled`);
462
- complete = false;
463
- failures.push(err);
464
- }
465
- }
466
- /*
467
- * The pass finished. This is the one place `last_synced_at` moves,
468
- * and it moves whether or not a single message was new: "we read
469
- * this mailbox and there was nothing" is an answer, and without a
470
- * mark of its own it is indistinguishable from never having looked.
471
- */
472
- if (complete)
473
- await markAccountSynced(ctx.buddi.db, account.id, ctx.buddi.clock.now());
474
- }
475
- catch (err) {
476
- complete = false;
477
- if (err instanceof ImapTimeoutError) {
478
- // A recorded give-up. Rethrowing it at the end of the pass is
479
- // deliberate: `runSources` writes it to
480
- // core.source_runs.last_error and emits `source.polled` with it,
481
- // so a mailbox that stopped answering is visible rather than silent.
482
- log(`email.inbox-poll: ${err.message} on ${account.address}; ` +
483
- `connection closed, retrying next poll`);
484
- }
485
- failures.push(err);
486
- // Whatever did land before the failure is still drained below: a
487
- // Sent folder that timed out is no reason to sit on the inbox.
488
- }
489
- finally {
490
- await client?.close().catch(() => { });
491
- }
492
- try {
493
- const waiting = await drain(ctx, account, agentId, limit, pending, triageReady);
494
- if (waiting > 0 && !saidWaiting) {
495
- saidWaiting = true;
496
- log(`email.inbox-poll: no triage agent yet — accept the Mail offer on the dashboard`);
497
- }
498
- await recordTriageWaiting(ctx.buddi.db, account.id, triageReady ? false : waiting > 0 ? true : null, ctx.buddi.clock.now());
499
- }
500
- catch (err) {
501
- failures.push(err);
502
- }
690
+ // IDLE is live: the server says when mail comes, and this pass is
691
+ // the safety net, at the slower period.
692
+ const last = lastPolled.get(account.id);
693
+ if (watchers?.state(account.id) === 'live' && last !== undefined && Date.now() - last < slowPollMs)
694
+ continue;
695
+ await runLocked(account.id, () => pollAccount(ctx, account, pass));
503
696
  }
504
- if (failures.length > 0)
505
- throw failures[0];
697
+ if (pass.failures.length > 0)
698
+ throw pass.failures[0];
506
699
  },
507
700
  };
701
+ if (opts.idle) {
702
+ const idle = opts.idle;
703
+ source.watch = (ctx) => {
704
+ const manager = new IdleWatchers({
705
+ idle,
706
+ host: ctx.buddi,
707
+ poll: (accountId) => pollNow(accountId),
708
+ ...(opts.env ? { env: opts.env } : {}),
709
+ ...(opts.idleTuning ?? {}),
710
+ });
711
+ watchers = manager;
712
+ watchCtx = ctx;
713
+ void manager.reconcile();
714
+ return {
715
+ async stop() {
716
+ if (watchers === manager) {
717
+ watchers = null;
718
+ watchCtx = null;
719
+ }
720
+ await manager.stop();
721
+ // A poll IDLE started finishes (each IMAP call has its deadline);
722
+ // nothing of this watcher outlives `stop`.
723
+ await Promise.allSettled([...inFlight.values()]);
724
+ },
725
+ };
726
+ };
727
+ }
728
+ return source;
508
729
  }
509
730
  /**
510
731
  * One folder of one account: open it, honour its generation, fetch what is new,
@@ -586,15 +807,14 @@ async function pollFolder(ctx, account, client, folder, opts) {
586
807
  * than skipped.
587
808
  *
588
809
  * **A message gone from INBOX** (archived or deleted in another client) is
589
- * simply not in the answer. `email.messages` has no "still in the inbox"
590
- * field, and this does not invent one: such a row keeps the flags it last had.
591
- * The full fetch could tell it apart; CONDSTORE without QRESYNC cannot.
810
+ * simply not in the answer here, and keeps the flags it last had; the
811
+ * presence check after this (`presence.ts`) is what records that it left.
592
812
  */
593
813
  async function syncFlags(db, account, client, folder, status, timeoutMs, log) {
594
814
  const started = Date.now();
595
815
  const serverModseq = status.highestModseq ?? null;
596
816
  const { rows } = await db.query(`select uid from email.messages
597
- where folder_id = $1 and uidvalidity = $2
817
+ where folder_id = $1 and uidvalidity = $2 and gone_at is null
598
818
  order by uid desc
599
819
  limit $3`, [folder.id, status.uidValidity, FLAG_SYNC_WINDOW]);
600
820
  const uids = rows.map((r) => Number(r.uid)).sort((a, b) => a - b);
@@ -632,11 +852,39 @@ async function syncFlags(db, account, client, folder, status, timeoutMs, log) {
632
852
  log(`email.inbox-poll: flags on ${account.address}/${folder.name} re-synced via ${mode} in ` +
633
853
  `${Date.now() - started}ms — ${uids.length} held, ${reported} reported, ${updated} changed`);
634
854
  }
855
+ /**
856
+ * Read `List-Unsubscribe` and `Precedence` for held messages stored before
857
+ * `messages.bulk` was read at ingest (`bulk_checked = false`), at most
858
+ * `BULK_BACKFILL_PER_POLL` a poll, newest first, and mark them. A message the
859
+ * server no longer has is marked too: there is nothing more to read. Returns
860
+ * how many were found to be bulk. A client without `fetchBulk` reads nothing.
861
+ */
862
+ export async function backfillBulk(db, client, folder, status, timeoutMs, limit = BULK_BACKFILL_PER_POLL) {
863
+ if (!client.fetchBulk)
864
+ return 0;
865
+ const { rows } = await db.query(`select uid from email.messages
866
+ where folder_id = $1 and uidvalidity = $2 and not bulk_checked and gone_at is null
867
+ order by uid desc
868
+ limit $3`, [folder.id, status.uidValidity, limit]);
869
+ const uids = rows.map((r) => Number(r.uid));
870
+ if (uids.length === 0)
871
+ return 0;
872
+ const read = await withDeadline('bulk headers', timeoutMs, client.fetchBulk(folder.name, uids));
873
+ const bulk = uids.filter((uid) => read.get(uid) === true);
874
+ await db.query(`update email.messages
875
+ set bulk_checked = true, bulk = bulk or uid = any($4::bigint[])
876
+ where folder_id = $1 and uidvalidity = $2 and uid = any($3::bigint[])`, [folder.id, status.uidValidity, uids, bulk]);
877
+ return bulk.length;
878
+ }
635
879
  /** Persist the generation and the cursor together, and return the fresh row. */
636
880
  async function plantCursor(db, folderId, uidValidity, lastUid) {
637
881
  const { rows } = await db.query(`update email.folders set uidvalidity = $2, last_uid = $3,
638
882
  -- A modseq belongs to its generation; the next re-sync starts over.
639
- highest_modseq = case when uidvalidity is distinct from $2 then null else highest_modseq end
883
+ highest_modseq = case when uidvalidity is distinct from $2 then null else highest_modseq end,
884
+ -- So does what the presence check last saw (presence.ts).
885
+ presence_uidnext = case when uidvalidity is distinct from $2 then null else presence_uidnext end,
886
+ presence_exists = case when uidvalidity is distinct from $2 then null else presence_exists end,
887
+ presence_modseq = case when uidvalidity is distinct from $2 then null else presence_modseq end
640
888
  where id = $1 returning ${FOLDER_COLUMNS}`, [folderId, uidValidity, lastUid]);
641
889
  const row = rows[0];
642
890
  if (!row)
@@ -751,6 +999,11 @@ async function drain(ctx, account, agentId, limit, pending, triageReady = true)
751
999
  detail: decision.detail,
752
1000
  status: 'done',
753
1001
  }, ctx.buddi.clock.now());
1002
+ // The rule's mailbox action is owed before the stamp lands: a
1003
+ // failed writer connection later must not lose it.
1004
+ if (decision.policy?.params.onArrival) {
1005
+ await oweArrivalAction(tx, account.id, { messageId: message.id, policy: decision.policy });
1006
+ }
754
1007
  await stampOn(tx, message.id, ctx.buddi.clock.now());
755
1008
  });
756
1009
  (ctx.buddi?.log ?? (() => { }))(`email.inbox-poll: ${message.from} handled by policy ${decision.policy.scope} ` +
@@ -780,6 +1033,11 @@ async function drain(ctx, account, agentId, limit, pending, triageReady = true)
780
1033
  throw err;
781
1034
  }
782
1035
  await settleEvent(ctx.buddi.db, message.id, 'done');
1036
+ // Owed before the stamp: once stamped the message is never drained
1037
+ // again, so the action has to be on record by then (`arrival.ts`).
1038
+ if (!decision.refused && decision.policy?.params.onArrival) {
1039
+ await oweArrivalAction(ctx.buddi.db, account.id, { messageId: message.id, policy: decision.policy });
1040
+ }
783
1041
  await stamp(ctx, message.id);
784
1042
  }
785
1043
  return waiting;
@@ -830,7 +1088,9 @@ async function promptFor(ctx, account, message, decision, policies) {
830
1088
  const senderPolicy = decision.policy ??
831
1089
  policies.find((p) => p.scope === 'sender' && p.matcher === message.from.trim().toLowerCase()) ??
832
1090
  null;
1091
+ const place = await placeOf(ctx.buddi.db, message.id);
833
1092
  return triagePrompt({
1093
+ ...(place ? { place } : {}),
834
1094
  messageId: message.id,
835
1095
  from: message.from,
836
1096
  to: message.to,
@@ -861,6 +1121,21 @@ async function promptFor(ctx, account, message, decision, policies) {
861
1121
  ...(instructionFor(decision) ? { instruction: instructionFor(decision) } : {}),
862
1122
  });
863
1123
  }
1124
+ /** Where a message is now, in words, when that is not the inbox (`placeWords`); '' otherwise. */
1125
+ async function placeOf(db, messageId) {
1126
+ const { rows } = await db.query(`select m.gone_at, m.direction, f.kind, f.name, f.special_use
1127
+ from email.messages m left join email.folders f on f.id = m.folder_id where m.id = $1`, [messageId]);
1128
+ const r = rows[0];
1129
+ if (!r)
1130
+ return '';
1131
+ return placeWords({
1132
+ kind: r.kind ?? null,
1133
+ name: r.name ?? null,
1134
+ specialUse: r.special_use ?? null,
1135
+ gone: r.gone_at !== null && r.gone_at !== undefined,
1136
+ direction: r.direction === 'out' ? 'out' : 'in',
1137
+ });
1138
+ }
864
1139
  /** How many earlier turns of the thread are quoted, and how many are a line. */
865
1140
  export const THREAD_TURNS_QUOTED = 3;
866
1141
  export const THREAD_TURNS_LISTED = 10;