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

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 (696) hide show
  1. package/README.md +58 -368
  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 +6 -1
  5. package/node_modules/@buddi/cli/dist/args.d.ts.map +1 -1
  6. package/node_modules/@buddi/cli/dist/args.js +7 -2
  7. package/node_modules/@buddi/cli/dist/args.js.map +1 -1
  8. package/node_modules/@buddi/cli/dist/commands.d.ts.map +1 -1
  9. package/node_modules/@buddi/cli/dist/commands.js +14 -4
  10. package/node_modules/@buddi/cli/dist/commands.js.map +1 -1
  11. package/node_modules/@buddi/cli/dist/doctor-probes.d.ts.map +1 -1
  12. package/node_modules/@buddi/cli/dist/doctor-probes.js +6 -12
  13. package/node_modules/@buddi/cli/dist/doctor-probes.js.map +1 -1
  14. package/node_modules/@buddi/cli/dist/doctor.d.ts +16 -0
  15. package/node_modules/@buddi/cli/dist/doctor.d.ts.map +1 -1
  16. package/node_modules/@buddi/cli/dist/doctor.js +30 -0
  17. package/node_modules/@buddi/cli/dist/doctor.js.map +1 -1
  18. package/node_modules/@buddi/cli/dist/jobs-cmd.d.ts +4 -0
  19. package/node_modules/@buddi/cli/dist/jobs-cmd.d.ts.map +1 -1
  20. package/node_modules/@buddi/cli/dist/jobs-cmd.js +53 -4
  21. package/node_modules/@buddi/cli/dist/jobs-cmd.js.map +1 -1
  22. package/node_modules/@buddi/cli/dist/main.d.ts.map +1 -1
  23. package/node_modules/@buddi/cli/dist/main.js +27 -9
  24. package/node_modules/@buddi/cli/dist/main.js.map +1 -1
  25. package/node_modules/@buddi/cli/dist/mcp/tools.d.ts.map +1 -1
  26. package/node_modules/@buddi/cli/dist/mcp/tools.js +3 -1
  27. package/node_modules/@buddi/cli/dist/mcp/tools.js.map +1 -1
  28. package/node_modules/@buddi/cli/dist/status.d.ts +15 -9
  29. package/node_modules/@buddi/cli/dist/status.d.ts.map +1 -1
  30. package/node_modules/@buddi/cli/dist/status.js +6 -11
  31. package/node_modules/@buddi/cli/dist/status.js.map +1 -1
  32. package/node_modules/@buddi/core/dist/.tsbuildinfo +1 -1
  33. package/node_modules/@buddi/core/dist/actions/store.d.ts +8 -0
  34. package/node_modules/@buddi/core/dist/actions/store.d.ts.map +1 -1
  35. package/node_modules/@buddi/core/dist/actions/store.js +13 -0
  36. package/node_modules/@buddi/core/dist/actions/store.js.map +1 -1
  37. package/node_modules/@buddi/core/dist/clock-widget.d.ts.map +1 -1
  38. package/node_modules/@buddi/core/dist/clock-widget.js +5 -3
  39. package/node_modules/@buddi/core/dist/clock-widget.js.map +1 -1
  40. package/node_modules/@buddi/core/dist/host/build.d.ts.map +1 -1
  41. package/node_modules/@buddi/core/dist/host/build.js +11 -0
  42. package/node_modules/@buddi/core/dist/host/build.js.map +1 -1
  43. package/node_modules/@buddi/core/dist/host/types.d.ts +7 -0
  44. package/node_modules/@buddi/core/dist/host/types.d.ts.map +1 -1
  45. package/node_modules/@buddi/core/dist/learning/store.d.ts +7 -0
  46. package/node_modules/@buddi/core/dist/learning/store.d.ts.map +1 -1
  47. package/node_modules/@buddi/core/dist/learning/store.js +6 -0
  48. package/node_modules/@buddi/core/dist/learning/store.js.map +1 -1
  49. package/node_modules/@buddi/core/dist/lock.d.ts +8 -2
  50. package/node_modules/@buddi/core/dist/lock.d.ts.map +1 -1
  51. package/node_modules/@buddi/core/dist/lock.js +20 -5
  52. package/node_modules/@buddi/core/dist/lock.js.map +1 -1
  53. package/node_modules/@buddi/core/dist/notifications/agent.d.ts +7 -0
  54. package/node_modules/@buddi/core/dist/notifications/agent.d.ts.map +1 -1
  55. package/node_modules/@buddi/core/dist/notifications/agent.js +2 -0
  56. package/node_modules/@buddi/core/dist/notifications/agent.js.map +1 -1
  57. package/node_modules/@buddi/core/dist/notifications/index.d.ts +1 -0
  58. package/node_modules/@buddi/core/dist/notifications/index.d.ts.map +1 -1
  59. package/node_modules/@buddi/core/dist/notifications/index.js +1 -0
  60. package/node_modules/@buddi/core/dist/notifications/index.js.map +1 -1
  61. package/node_modules/@buddi/core/dist/notifications/needs.d.ts +49 -0
  62. package/node_modules/@buddi/core/dist/notifications/needs.d.ts.map +1 -0
  63. package/node_modules/@buddi/core/dist/notifications/needs.js +41 -0
  64. package/node_modules/@buddi/core/dist/notifications/needs.js.map +1 -0
  65. package/node_modules/@buddi/core/dist/notifications/notify.d.ts.map +1 -1
  66. package/node_modules/@buddi/core/dist/notifications/notify.js +16 -7
  67. package/node_modules/@buddi/core/dist/notifications/notify.js.map +1 -1
  68. package/node_modules/@buddi/core/dist/notifications/store.d.ts.map +1 -1
  69. package/node_modules/@buddi/core/dist/notifications/store.js +2 -1
  70. package/node_modules/@buddi/core/dist/notifications/store.js.map +1 -1
  71. package/node_modules/@buddi/core/dist/notifications/types.d.ts +10 -0
  72. package/node_modules/@buddi/core/dist/notifications/types.d.ts.map +1 -1
  73. package/node_modules/@buddi/core/dist/notifications/types.js.map +1 -1
  74. package/node_modules/@buddi/core/dist/owner-timezone.d.ts +20 -22
  75. package/node_modules/@buddi/core/dist/owner-timezone.d.ts.map +1 -1
  76. package/node_modules/@buddi/core/dist/owner-timezone.js +17 -25
  77. package/node_modules/@buddi/core/dist/owner-timezone.js.map +1 -1
  78. package/node_modules/@buddi/core/dist/pages.d.ts +3 -1
  79. package/node_modules/@buddi/core/dist/pages.d.ts.map +1 -1
  80. package/node_modules/@buddi/core/dist/pages.js +6 -1
  81. package/node_modules/@buddi/core/dist/pages.js.map +1 -1
  82. package/node_modules/@buddi/core/dist/plugin/index.d.ts +1 -1
  83. package/node_modules/@buddi/core/dist/plugin/index.d.ts.map +1 -1
  84. package/node_modules/@buddi/core/dist/plugin/index.js.map +1 -1
  85. package/node_modules/@buddi/core/dist/plugin/version.d.ts +1 -1
  86. package/node_modules/@buddi/core/dist/plugin/version.js +1 -1
  87. package/node_modules/@buddi/core/dist/queue/failures.d.ts +84 -0
  88. package/node_modules/@buddi/core/dist/queue/failures.d.ts.map +1 -0
  89. package/node_modules/@buddi/core/dist/queue/failures.js +195 -0
  90. package/node_modules/@buddi/core/dist/queue/failures.js.map +1 -0
  91. package/node_modules/@buddi/core/dist/queue/index.d.ts +1 -0
  92. package/node_modules/@buddi/core/dist/queue/index.d.ts.map +1 -1
  93. package/node_modules/@buddi/core/dist/queue/index.js +1 -0
  94. package/node_modules/@buddi/core/dist/queue/index.js.map +1 -1
  95. package/node_modules/@buddi/core/dist/queue/jobs.d.ts +39 -3
  96. package/node_modules/@buddi/core/dist/queue/jobs.d.ts.map +1 -1
  97. package/node_modules/@buddi/core/dist/queue/jobs.js +54 -4
  98. package/node_modules/@buddi/core/dist/queue/jobs.js.map +1 -1
  99. package/node_modules/@buddi/core/dist/queue/types.d.ts +20 -0
  100. package/node_modules/@buddi/core/dist/queue/types.d.ts.map +1 -1
  101. package/node_modules/@buddi/core/dist/queue/types.js +17 -0
  102. package/node_modules/@buddi/core/dist/queue/types.js.map +1 -1
  103. package/node_modules/@buddi/core/dist/scheduler/missions.d.ts +39 -10
  104. package/node_modules/@buddi/core/dist/scheduler/missions.d.ts.map +1 -1
  105. package/node_modules/@buddi/core/dist/scheduler/missions.js +44 -17
  106. package/node_modules/@buddi/core/dist/scheduler/missions.js.map +1 -1
  107. package/node_modules/@buddi/core/dist/scheduler/types.d.ts +7 -0
  108. package/node_modules/@buddi/core/dist/scheduler/types.d.ts.map +1 -1
  109. package/node_modules/@buddi/core/dist/scheduler/types.js +1 -0
  110. package/node_modules/@buddi/core/dist/scheduler/types.js.map +1 -1
  111. package/node_modules/@buddi/core/dist/secrets/settings.d.ts.map +1 -1
  112. package/node_modules/@buddi/core/dist/secrets/settings.js +23 -3
  113. package/node_modules/@buddi/core/dist/secrets/settings.js.map +1 -1
  114. package/node_modules/@buddi/core/dist/sentinels/digest.d.ts +8 -1
  115. package/node_modules/@buddi/core/dist/sentinels/digest.d.ts.map +1 -1
  116. package/node_modules/@buddi/core/dist/sentinels/digest.js +10 -3
  117. package/node_modules/@buddi/core/dist/sentinels/digest.js.map +1 -1
  118. package/node_modules/@buddi/core/dist/sentinels/index.d.ts +1 -0
  119. package/node_modules/@buddi/core/dist/sentinels/index.d.ts.map +1 -1
  120. package/node_modules/@buddi/core/dist/sentinels/index.js +1 -0
  121. package/node_modules/@buddi/core/dist/sentinels/index.js.map +1 -1
  122. package/node_modules/@buddi/core/dist/sentinels/mutes.d.ts +51 -0
  123. package/node_modules/@buddi/core/dist/sentinels/mutes.d.ts.map +1 -0
  124. package/node_modules/@buddi/core/dist/sentinels/mutes.js +86 -0
  125. package/node_modules/@buddi/core/dist/sentinels/mutes.js.map +1 -0
  126. package/node_modules/@buddi/core/dist/sentinels/run.d.ts +14 -4
  127. package/node_modules/@buddi/core/dist/sentinels/run.d.ts.map +1 -1
  128. package/node_modules/@buddi/core/dist/sentinels/run.js +64 -20
  129. package/node_modules/@buddi/core/dist/sentinels/run.js.map +1 -1
  130. package/node_modules/@buddi/core/dist/sentinels/types.d.ts +152 -2
  131. package/node_modules/@buddi/core/dist/sentinels/types.d.ts.map +1 -1
  132. package/node_modules/@buddi/core/dist/sentinels/types.js +126 -2
  133. package/node_modules/@buddi/core/dist/sentinels/types.js.map +1 -1
  134. package/node_modules/@buddi/core/dist/views.d.ts +112 -112
  135. package/node_modules/@buddi/core/dist/views.d.ts.map +1 -1
  136. package/node_modules/@buddi/core/dist/views.js +2 -0
  137. package/node_modules/@buddi/core/dist/views.js.map +1 -1
  138. package/node_modules/@buddi/core/dist/web-settings.d.ts +13 -0
  139. package/node_modules/@buddi/core/dist/web-settings.d.ts.map +1 -1
  140. package/node_modules/@buddi/core/dist/web-settings.js +26 -0
  141. package/node_modules/@buddi/core/dist/web-settings.js.map +1 -1
  142. package/node_modules/@buddi/core/dist/widgets.d.ts +13 -5
  143. package/node_modules/@buddi/core/dist/widgets.d.ts.map +1 -1
  144. package/node_modules/@buddi/core/dist/widgets.js +10 -1
  145. package/node_modules/@buddi/core/dist/widgets.js.map +1 -1
  146. package/node_modules/@buddi/core/migrations/066_alert_decisions.sql +45 -0
  147. package/node_modules/@buddi/core/migrations/067_job_acknowledged.sql +21 -0
  148. package/node_modules/@buddi/core/migrations/068_notification_action.sql +12 -0
  149. package/node_modules/@buddi/core/migrations/069_schedule_zone_explicit.sql +18 -0
  150. package/node_modules/@buddi/gateway/dist/.tsbuildinfo +1 -1
  151. package/node_modules/@buddi/gateway/dist/agents/learning-digest.d.ts +29 -7
  152. package/node_modules/@buddi/gateway/dist/agents/learning-digest.d.ts.map +1 -1
  153. package/node_modules/@buddi/gateway/dist/agents/learning-digest.js +87 -38
  154. package/node_modules/@buddi/gateway/dist/agents/learning-digest.js.map +1 -1
  155. package/node_modules/@buddi/gateway/dist/agents/owner-tools.d.ts.map +1 -1
  156. package/node_modules/@buddi/gateway/dist/agents/owner-tools.js +11 -1
  157. package/node_modules/@buddi/gateway/dist/agents/owner-tools.js.map +1 -1
  158. package/node_modules/@buddi/gateway/dist/agents/platform.d.ts.map +1 -1
  159. package/node_modules/@buddi/gateway/dist/agents/platform.js +2 -0
  160. package/node_modules/@buddi/gateway/dist/agents/platform.js.map +1 -1
  161. package/node_modules/@buddi/gateway/dist/chat/conversations.d.ts.map +1 -1
  162. package/node_modules/@buddi/gateway/dist/chat/conversations.js +8 -2
  163. package/node_modules/@buddi/gateway/dist/chat/conversations.js.map +1 -1
  164. package/node_modules/@buddi/gateway/dist/index.d.ts +1 -0
  165. package/node_modules/@buddi/gateway/dist/index.d.ts.map +1 -1
  166. package/node_modules/@buddi/gateway/dist/index.js +1 -0
  167. package/node_modules/@buddi/gateway/dist/index.js.map +1 -1
  168. package/node_modules/@buddi/gateway/dist/missions/defaults.d.ts +0 -6
  169. package/node_modules/@buddi/gateway/dist/missions/defaults.d.ts.map +1 -1
  170. package/node_modules/@buddi/gateway/dist/missions/defaults.js +4 -8
  171. package/node_modules/@buddi/gateway/dist/missions/defaults.js.map +1 -1
  172. package/node_modules/@buddi/gateway/dist/missions/execute.d.ts.map +1 -1
  173. package/node_modules/@buddi/gateway/dist/missions/execute.js +36 -2
  174. package/node_modules/@buddi/gateway/dist/missions/execute.js.map +1 -1
  175. package/node_modules/@buddi/gateway/dist/missions/goals.d.ts +12 -1
  176. package/node_modules/@buddi/gateway/dist/missions/goals.d.ts.map +1 -1
  177. package/node_modules/@buddi/gateway/dist/missions/goals.js +21 -1
  178. package/node_modules/@buddi/gateway/dist/missions/goals.js.map +1 -1
  179. package/node_modules/@buddi/gateway/dist/missions/reminders.d.ts.map +1 -1
  180. package/node_modules/@buddi/gateway/dist/missions/reminders.js +4 -1
  181. package/node_modules/@buddi/gateway/dist/missions/reminders.js.map +1 -1
  182. package/node_modules/@buddi/gateway/dist/missions/sentinel-wake.d.ts +3 -0
  183. package/node_modules/@buddi/gateway/dist/missions/sentinel-wake.d.ts.map +1 -1
  184. package/node_modules/@buddi/gateway/dist/missions/sentinel-wake.js +4 -1
  185. package/node_modules/@buddi/gateway/dist/missions/sentinel-wake.js.map +1 -1
  186. package/node_modules/@buddi/gateway/dist/missions/zone-provenance.d.ts +13 -0
  187. package/node_modules/@buddi/gateway/dist/missions/zone-provenance.d.ts.map +1 -0
  188. package/node_modules/@buddi/gateway/dist/missions/zone-provenance.js +36 -0
  189. package/node_modules/@buddi/gateway/dist/missions/zone-provenance.js.map +1 -0
  190. package/node_modules/@buddi/gateway/dist/missions-cli.js +2 -2
  191. package/node_modules/@buddi/gateway/dist/missions-cli.js.map +1 -1
  192. package/node_modules/@buddi/gateway/dist/serve.d.ts.map +1 -1
  193. package/node_modules/@buddi/gateway/dist/serve.js +10 -10
  194. package/node_modules/@buddi/gateway/dist/serve.js.map +1 -1
  195. package/node_modules/@buddi/gateway/dist/surfaces/offered-actions.d.ts +17 -0
  196. package/node_modules/@buddi/gateway/dist/surfaces/offered-actions.d.ts.map +1 -1
  197. package/node_modules/@buddi/gateway/dist/surfaces/offered-actions.js +27 -0
  198. package/node_modules/@buddi/gateway/dist/surfaces/offered-actions.js.map +1 -1
  199. package/node_modules/@buddi/gateway/dist/telegram/channel.d.ts +11 -1
  200. package/node_modules/@buddi/gateway/dist/telegram/channel.d.ts.map +1 -1
  201. package/node_modules/@buddi/gateway/dist/telegram/channel.js +13 -2
  202. package/node_modules/@buddi/gateway/dist/telegram/channel.js.map +1 -1
  203. package/node_modules/@buddi/gateway/dist/web/alerts.d.ts +179 -0
  204. package/node_modules/@buddi/gateway/dist/web/alerts.d.ts.map +1 -0
  205. package/node_modules/@buddi/gateway/dist/web/alerts.js +363 -0
  206. package/node_modules/@buddi/gateway/dist/web/alerts.js.map +1 -0
  207. package/node_modules/@buddi/gateway/dist/web/api-routes.d.ts.map +1 -1
  208. package/node_modules/@buddi/gateway/dist/web/api-routes.js +53 -9
  209. package/node_modules/@buddi/gateway/dist/web/api-routes.js.map +1 -1
  210. package/node_modules/@buddi/gateway/dist/web/chat.d.ts +1 -0
  211. package/node_modules/@buddi/gateway/dist/web/chat.d.ts.map +1 -1
  212. package/node_modules/@buddi/gateway/dist/web/chat.js +4 -3
  213. package/node_modules/@buddi/gateway/dist/web/chat.js.map +1 -1
  214. package/node_modules/@buddi/gateway/dist/web/lock.d.ts +12 -5
  215. package/node_modules/@buddi/gateway/dist/web/lock.d.ts.map +1 -1
  216. package/node_modules/@buddi/gateway/dist/web/lock.js +23 -28
  217. package/node_modules/@buddi/gateway/dist/web/lock.js.map +1 -1
  218. package/node_modules/@buddi/gateway/dist/web/needs-you.d.ts +36 -0
  219. package/node_modules/@buddi/gateway/dist/web/needs-you.d.ts.map +1 -0
  220. package/node_modules/@buddi/gateway/dist/web/needs-you.js +65 -0
  221. package/node_modules/@buddi/gateway/dist/web/needs-you.js.map +1 -0
  222. package/node_modules/@buddi/gateway/dist/web/notifications.d.ts +9 -1
  223. package/node_modules/@buddi/gateway/dist/web/notifications.d.ts.map +1 -1
  224. package/node_modules/@buddi/gateway/dist/web/notifications.js +14 -3
  225. package/node_modules/@buddi/gateway/dist/web/notifications.js.map +1 -1
  226. package/node_modules/@buddi/gateway/dist/web/plugins.d.ts.map +1 -1
  227. package/node_modules/@buddi/gateway/dist/web/plugins.js +17 -3
  228. package/node_modules/@buddi/gateway/dist/web/plugins.js.map +1 -1
  229. package/node_modules/@buddi/gateway/dist/web/read.d.ts +69 -27
  230. package/node_modules/@buddi/gateway/dist/web/read.d.ts.map +1 -1
  231. package/node_modules/@buddi/gateway/dist/web/read.js +103 -43
  232. package/node_modules/@buddi/gateway/dist/web/read.js.map +1 -1
  233. package/node_modules/@buddi/gateway/dist/web/secrets.d.ts +61 -1
  234. package/node_modules/@buddi/gateway/dist/web/secrets.d.ts.map +1 -1
  235. package/node_modules/@buddi/gateway/dist/web/secrets.js +111 -3
  236. package/node_modules/@buddi/gateway/dist/web/secrets.js.map +1 -1
  237. package/node_modules/@buddi/gateway/dist/web/server.d.ts.map +1 -1
  238. package/node_modules/@buddi/gateway/dist/web/server.js +152 -11
  239. package/node_modules/@buddi/gateway/dist/web/server.js.map +1 -1
  240. package/node_modules/@buddi/gateway/dist/web/widgets.d.ts +1 -0
  241. package/node_modules/@buddi/gateway/dist/web/widgets.d.ts.map +1 -1
  242. package/node_modules/@buddi/gateway/dist/web/widgets.js +6 -1
  243. package/node_modules/@buddi/gateway/dist/web/widgets.js.map +1 -1
  244. package/node_modules/@buddi/gateway/dist/web/write.d.ts +23 -0
  245. package/node_modules/@buddi/gateway/dist/web/write.d.ts.map +1 -1
  246. package/node_modules/@buddi/gateway/dist/web/write.js +50 -1
  247. package/node_modules/@buddi/gateway/dist/web/write.js.map +1 -1
  248. package/node_modules/@buddi/install/dist/.tsbuildinfo +1 -1
  249. package/node_modules/@buddi/install/dist/doctor-timezone.d.ts +17 -0
  250. package/node_modules/@buddi/install/dist/doctor-timezone.d.ts.map +1 -0
  251. package/node_modules/@buddi/install/dist/doctor-timezone.js +34 -0
  252. package/node_modules/@buddi/install/dist/doctor-timezone.js.map +1 -0
  253. package/node_modules/@buddi/install/dist/launcher.d.ts.map +1 -1
  254. package/node_modules/@buddi/install/dist/launcher.js +3 -0
  255. package/node_modules/@buddi/install/dist/launcher.js.map +1 -1
  256. package/node_modules/@buddi/runtime/dist/.tsbuildinfo +1 -1
  257. package/node_modules/@buddi/runtime/dist/anthropic.d.ts +6 -0
  258. package/node_modules/@buddi/runtime/dist/anthropic.d.ts.map +1 -1
  259. package/node_modules/@buddi/runtime/dist/anthropic.js.map +1 -1
  260. package/node_modules/@buddi/runtime/dist/openai.d.ts +34 -1
  261. package/node_modules/@buddi/runtime/dist/openai.d.ts.map +1 -1
  262. package/node_modules/@buddi/runtime/dist/openai.js +66 -12
  263. package/node_modules/@buddi/runtime/dist/openai.js.map +1 -1
  264. package/node_modules/@buddi/tool-artifacts/dist/.tsbuildinfo +1 -1
  265. package/node_modules/@buddi/tool-browser/dist/.tsbuildinfo +1 -1
  266. package/node_modules/@buddi/tool-email/dist/.tsbuildinfo +1 -1
  267. package/node_modules/@buddi/tool-email/dist/agent.js +1 -1
  268. package/node_modules/@buddi/tool-email/dist/imap/imapflow-client.d.ts +8 -0
  269. package/node_modules/@buddi/tool-email/dist/imap/imapflow-client.d.ts.map +1 -1
  270. package/node_modules/@buddi/tool-email/dist/imap/imapflow-client.js +59 -4
  271. package/node_modules/@buddi/tool-email/dist/imap/imapflow-client.js.map +1 -1
  272. package/node_modules/@buddi/tool-email/dist/mail.d.ts +42 -0
  273. package/node_modules/@buddi/tool-email/dist/mail.d.ts.map +1 -1
  274. package/node_modules/@buddi/tool-email/dist/mail.js +116 -0
  275. package/node_modules/@buddi/tool-email/dist/mail.js.map +1 -1
  276. package/node_modules/@buddi/tool-email/dist/mailbox/select.d.ts +6 -0
  277. package/node_modules/@buddi/tool-email/dist/mailbox/select.d.ts.map +1 -1
  278. package/node_modules/@buddi/tool-email/dist/mailbox/select.js +11 -0
  279. package/node_modules/@buddi/tool-email/dist/mailbox/select.js.map +1 -1
  280. package/node_modules/@buddi/tool-email/dist/metrics.d.ts +5 -6
  281. package/node_modules/@buddi/tool-email/dist/metrics.d.ts.map +1 -1
  282. package/node_modules/@buddi/tool-email/dist/metrics.js +4 -5
  283. package/node_modules/@buddi/tool-email/dist/metrics.js.map +1 -1
  284. package/node_modules/@buddi/tool-email/dist/needs-you.d.ts +61 -0
  285. package/node_modules/@buddi/tool-email/dist/needs-you.d.ts.map +1 -0
  286. package/node_modules/@buddi/tool-email/dist/needs-you.js +99 -0
  287. package/node_modules/@buddi/tool-email/dist/needs-you.js.map +1 -0
  288. package/node_modules/@buddi/tool-email/dist/pages/descriptors.d.ts.map +1 -1
  289. package/node_modules/@buddi/tool-email/dist/pages/descriptors.js +110 -78
  290. package/node_modules/@buddi/tool-email/dist/pages/descriptors.js.map +1 -1
  291. package/node_modules/@buddi/tool-email/dist/pages/drafts-tools.d.ts +2 -2
  292. package/node_modules/@buddi/tool-email/dist/pages/queries.d.ts +7 -0
  293. package/node_modules/@buddi/tool-email/dist/pages/queries.d.ts.map +1 -1
  294. package/node_modules/@buddi/tool-email/dist/pages/queries.js +31 -3
  295. package/node_modules/@buddi/tool-email/dist/pages/queries.js.map +1 -1
  296. package/node_modules/@buddi/tool-email/dist/ports.d.ts +8 -0
  297. package/node_modules/@buddi/tool-email/dist/ports.d.ts.map +1 -1
  298. package/node_modules/@buddi/tool-email/dist/ports.js.map +1 -1
  299. package/node_modules/@buddi/tool-email/dist/sentinels/suspicious-sender.d.ts.map +1 -1
  300. package/node_modules/@buddi/tool-email/dist/sentinels/suspicious-sender.js +4 -1
  301. package/node_modules/@buddi/tool-email/dist/sentinels/suspicious-sender.js.map +1 -1
  302. package/node_modules/@buddi/tool-email/dist/sentinels/waiting-on-me.d.ts +18 -21
  303. package/node_modules/@buddi/tool-email/dist/sentinels/waiting-on-me.d.ts.map +1 -1
  304. package/node_modules/@buddi/tool-email/dist/sentinels/waiting-on-me.js +39 -63
  305. package/node_modules/@buddi/tool-email/dist/sentinels/waiting-on-me.js.map +1 -1
  306. package/node_modules/@buddi/tool-email/dist/sources/inbox-poll.d.ts.map +1 -1
  307. package/node_modules/@buddi/tool-email/dist/sources/inbox-poll.js +3 -2
  308. package/node_modules/@buddi/tool-email/dist/sources/inbox-poll.js.map +1 -1
  309. package/node_modules/@buddi/tool-email/dist/suspicions-store.d.ts +6 -0
  310. package/node_modules/@buddi/tool-email/dist/suspicions-store.d.ts.map +1 -1
  311. package/node_modules/@buddi/tool-email/dist/suspicions-store.js +16 -1
  312. package/node_modules/@buddi/tool-email/dist/suspicions-store.js.map +1 -1
  313. package/node_modules/@buddi/tool-email/dist/threads.d.ts +17 -2
  314. package/node_modules/@buddi/tool-email/dist/threads.d.ts.map +1 -1
  315. package/node_modules/@buddi/tool-email/dist/threads.js +35 -14
  316. package/node_modules/@buddi/tool-email/dist/threads.js.map +1 -1
  317. package/node_modules/@buddi/tool-email/dist/tools/mailbox.d.ts +3 -0
  318. package/node_modules/@buddi/tool-email/dist/tools/mailbox.d.ts.map +1 -1
  319. package/node_modules/@buddi/tool-email/dist/tools/mailbox.js +5 -0
  320. package/node_modules/@buddi/tool-email/dist/tools/mailbox.js.map +1 -1
  321. package/node_modules/@buddi/tool-email/dist/tools/threads.d.ts +7 -3
  322. package/node_modules/@buddi/tool-email/dist/tools/threads.d.ts.map +1 -1
  323. package/node_modules/@buddi/tool-email/dist/tools/threads.js +18 -5
  324. package/node_modules/@buddi/tool-email/dist/tools/threads.js.map +1 -1
  325. package/node_modules/@buddi/tool-email/dist/watchers.d.ts +91 -7
  326. package/node_modules/@buddi/tool-email/dist/watchers.d.ts.map +1 -1
  327. package/node_modules/@buddi/tool-email/dist/watchers.js +164 -1
  328. package/node_modules/@buddi/tool-email/dist/watchers.js.map +1 -1
  329. package/node_modules/@buddi/tool-email/dist/widgets.d.ts +3 -2
  330. package/node_modules/@buddi/tool-email/dist/widgets.d.ts.map +1 -1
  331. package/node_modules/@buddi/tool-email/dist/widgets.js +2 -2
  332. package/node_modules/@buddi/tool-email/dist/widgets.js.map +1 -1
  333. package/node_modules/@buddi/tool-email/migrations/023_attention.sql +100 -0
  334. package/node_modules/@buddi/tool-email/migrations/024_auth_domain.sql +9 -0
  335. package/node_modules/@buddi/tool-email/migrations/025_thread_ignore.sql +77 -0
  336. package/node_modules/@buddi/tool-email/migrations/026_attention_filed.sql +89 -0
  337. package/node_modules/@buddi/tool-email/package.json +1 -1
  338. package/node_modules/@buddi/tool-host/dist/.tsbuildinfo +1 -1
  339. package/node_modules/@buddi/tool-mcp/dist/.tsbuildinfo +1 -1
  340. package/node_modules/@buddi/tool-memory/dist/.tsbuildinfo +1 -1
  341. package/node_modules/@buddi/tool-web/dist/.tsbuildinfo +1 -1
  342. package/node_modules/ip-address/README.md +34 -34
  343. package/node_modules/ip-address/dist/ipv4.js +7 -0
  344. package/node_modules/ip-address/dist/ipv4.js.map +1 -1
  345. package/node_modules/ip-address/package.json +1 -1
  346. package/package.json +2 -2
  347. package/packages/cli/dist/.tsbuildinfo +1 -1
  348. package/packages/cli/dist/args.d.ts +6 -1
  349. package/packages/cli/dist/args.d.ts.map +1 -1
  350. package/packages/cli/dist/args.js +7 -2
  351. package/packages/cli/dist/args.js.map +1 -1
  352. package/packages/cli/dist/commands.d.ts.map +1 -1
  353. package/packages/cli/dist/commands.js +14 -4
  354. package/packages/cli/dist/commands.js.map +1 -1
  355. package/packages/cli/dist/doctor-probes.d.ts.map +1 -1
  356. package/packages/cli/dist/doctor-probes.js +6 -12
  357. package/packages/cli/dist/doctor-probes.js.map +1 -1
  358. package/packages/cli/dist/doctor.d.ts +16 -0
  359. package/packages/cli/dist/doctor.d.ts.map +1 -1
  360. package/packages/cli/dist/doctor.js +30 -0
  361. package/packages/cli/dist/doctor.js.map +1 -1
  362. package/packages/cli/dist/jobs-cmd.d.ts +4 -0
  363. package/packages/cli/dist/jobs-cmd.d.ts.map +1 -1
  364. package/packages/cli/dist/jobs-cmd.js +53 -4
  365. package/packages/cli/dist/jobs-cmd.js.map +1 -1
  366. package/packages/cli/dist/main.d.ts.map +1 -1
  367. package/packages/cli/dist/main.js +27 -9
  368. package/packages/cli/dist/main.js.map +1 -1
  369. package/packages/cli/dist/mcp/tools.d.ts.map +1 -1
  370. package/packages/cli/dist/mcp/tools.js +3 -1
  371. package/packages/cli/dist/mcp/tools.js.map +1 -1
  372. package/packages/cli/dist/status.d.ts +15 -9
  373. package/packages/cli/dist/status.d.ts.map +1 -1
  374. package/packages/cli/dist/status.js +6 -11
  375. package/packages/cli/dist/status.js.map +1 -1
  376. package/packages/core/dist/.tsbuildinfo +1 -1
  377. package/packages/core/dist/actions/store.d.ts +8 -0
  378. package/packages/core/dist/actions/store.d.ts.map +1 -1
  379. package/packages/core/dist/actions/store.js +13 -0
  380. package/packages/core/dist/actions/store.js.map +1 -1
  381. package/packages/core/dist/clock-widget.d.ts.map +1 -1
  382. package/packages/core/dist/clock-widget.js +5 -3
  383. package/packages/core/dist/clock-widget.js.map +1 -1
  384. package/packages/core/dist/host/build.d.ts.map +1 -1
  385. package/packages/core/dist/host/build.js +11 -0
  386. package/packages/core/dist/host/build.js.map +1 -1
  387. package/packages/core/dist/host/types.d.ts +7 -0
  388. package/packages/core/dist/host/types.d.ts.map +1 -1
  389. package/packages/core/dist/learning/store.d.ts +7 -0
  390. package/packages/core/dist/learning/store.d.ts.map +1 -1
  391. package/packages/core/dist/learning/store.js +6 -0
  392. package/packages/core/dist/learning/store.js.map +1 -1
  393. package/packages/core/dist/lock.d.ts +8 -2
  394. package/packages/core/dist/lock.d.ts.map +1 -1
  395. package/packages/core/dist/lock.js +20 -5
  396. package/packages/core/dist/lock.js.map +1 -1
  397. package/packages/core/dist/notifications/agent.d.ts +7 -0
  398. package/packages/core/dist/notifications/agent.d.ts.map +1 -1
  399. package/packages/core/dist/notifications/agent.js +2 -0
  400. package/packages/core/dist/notifications/agent.js.map +1 -1
  401. package/packages/core/dist/notifications/index.d.ts +1 -0
  402. package/packages/core/dist/notifications/index.d.ts.map +1 -1
  403. package/packages/core/dist/notifications/index.js +1 -0
  404. package/packages/core/dist/notifications/index.js.map +1 -1
  405. package/packages/core/dist/notifications/needs.d.ts +49 -0
  406. package/packages/core/dist/notifications/needs.d.ts.map +1 -0
  407. package/packages/core/dist/notifications/needs.js +41 -0
  408. package/packages/core/dist/notifications/needs.js.map +1 -0
  409. package/packages/core/dist/notifications/notify.d.ts.map +1 -1
  410. package/packages/core/dist/notifications/notify.js +16 -7
  411. package/packages/core/dist/notifications/notify.js.map +1 -1
  412. package/packages/core/dist/notifications/store.d.ts.map +1 -1
  413. package/packages/core/dist/notifications/store.js +2 -1
  414. package/packages/core/dist/notifications/store.js.map +1 -1
  415. package/packages/core/dist/notifications/types.d.ts +10 -0
  416. package/packages/core/dist/notifications/types.d.ts.map +1 -1
  417. package/packages/core/dist/notifications/types.js.map +1 -1
  418. package/packages/core/dist/owner-timezone.d.ts +20 -22
  419. package/packages/core/dist/owner-timezone.d.ts.map +1 -1
  420. package/packages/core/dist/owner-timezone.js +17 -25
  421. package/packages/core/dist/owner-timezone.js.map +1 -1
  422. package/packages/core/dist/pages.d.ts +3 -1
  423. package/packages/core/dist/pages.d.ts.map +1 -1
  424. package/packages/core/dist/pages.js +6 -1
  425. package/packages/core/dist/pages.js.map +1 -1
  426. package/packages/core/dist/plugin/index.d.ts +1 -1
  427. package/packages/core/dist/plugin/index.d.ts.map +1 -1
  428. package/packages/core/dist/plugin/index.js.map +1 -1
  429. package/packages/core/dist/plugin/version.d.ts +1 -1
  430. package/packages/core/dist/plugin/version.js +1 -1
  431. package/packages/core/dist/queue/failures.d.ts +84 -0
  432. package/packages/core/dist/queue/failures.d.ts.map +1 -0
  433. package/packages/core/dist/queue/failures.js +195 -0
  434. package/packages/core/dist/queue/failures.js.map +1 -0
  435. package/packages/core/dist/queue/index.d.ts +1 -0
  436. package/packages/core/dist/queue/index.d.ts.map +1 -1
  437. package/packages/core/dist/queue/index.js +1 -0
  438. package/packages/core/dist/queue/index.js.map +1 -1
  439. package/packages/core/dist/queue/jobs.d.ts +39 -3
  440. package/packages/core/dist/queue/jobs.d.ts.map +1 -1
  441. package/packages/core/dist/queue/jobs.js +54 -4
  442. package/packages/core/dist/queue/jobs.js.map +1 -1
  443. package/packages/core/dist/queue/types.d.ts +20 -0
  444. package/packages/core/dist/queue/types.d.ts.map +1 -1
  445. package/packages/core/dist/queue/types.js +17 -0
  446. package/packages/core/dist/queue/types.js.map +1 -1
  447. package/packages/core/dist/scheduler/missions.d.ts +39 -10
  448. package/packages/core/dist/scheduler/missions.d.ts.map +1 -1
  449. package/packages/core/dist/scheduler/missions.js +44 -17
  450. package/packages/core/dist/scheduler/missions.js.map +1 -1
  451. package/packages/core/dist/scheduler/types.d.ts +7 -0
  452. package/packages/core/dist/scheduler/types.d.ts.map +1 -1
  453. package/packages/core/dist/scheduler/types.js +1 -0
  454. package/packages/core/dist/scheduler/types.js.map +1 -1
  455. package/packages/core/dist/secrets/settings.d.ts.map +1 -1
  456. package/packages/core/dist/secrets/settings.js +23 -3
  457. package/packages/core/dist/secrets/settings.js.map +1 -1
  458. package/packages/core/dist/sentinels/digest.d.ts +8 -1
  459. package/packages/core/dist/sentinels/digest.d.ts.map +1 -1
  460. package/packages/core/dist/sentinels/digest.js +10 -3
  461. package/packages/core/dist/sentinels/digest.js.map +1 -1
  462. package/packages/core/dist/sentinels/index.d.ts +1 -0
  463. package/packages/core/dist/sentinels/index.d.ts.map +1 -1
  464. package/packages/core/dist/sentinels/index.js +1 -0
  465. package/packages/core/dist/sentinels/index.js.map +1 -1
  466. package/packages/core/dist/sentinels/mutes.d.ts +51 -0
  467. package/packages/core/dist/sentinels/mutes.d.ts.map +1 -0
  468. package/packages/core/dist/sentinels/mutes.js +86 -0
  469. package/packages/core/dist/sentinels/mutes.js.map +1 -0
  470. package/packages/core/dist/sentinels/run.d.ts +14 -4
  471. package/packages/core/dist/sentinels/run.d.ts.map +1 -1
  472. package/packages/core/dist/sentinels/run.js +64 -20
  473. package/packages/core/dist/sentinels/run.js.map +1 -1
  474. package/packages/core/dist/sentinels/types.d.ts +152 -2
  475. package/packages/core/dist/sentinels/types.d.ts.map +1 -1
  476. package/packages/core/dist/sentinels/types.js +126 -2
  477. package/packages/core/dist/sentinels/types.js.map +1 -1
  478. package/packages/core/dist/views.d.ts +112 -112
  479. package/packages/core/dist/views.d.ts.map +1 -1
  480. package/packages/core/dist/views.js +2 -0
  481. package/packages/core/dist/views.js.map +1 -1
  482. package/packages/core/dist/web-settings.d.ts +13 -0
  483. package/packages/core/dist/web-settings.d.ts.map +1 -1
  484. package/packages/core/dist/web-settings.js +26 -0
  485. package/packages/core/dist/web-settings.js.map +1 -1
  486. package/packages/core/dist/widgets.d.ts +13 -5
  487. package/packages/core/dist/widgets.d.ts.map +1 -1
  488. package/packages/core/dist/widgets.js +10 -1
  489. package/packages/core/dist/widgets.js.map +1 -1
  490. package/packages/core/migrations/066_alert_decisions.sql +45 -0
  491. package/packages/core/migrations/067_job_acknowledged.sql +21 -0
  492. package/packages/core/migrations/068_notification_action.sql +12 -0
  493. package/packages/core/migrations/069_schedule_zone_explicit.sql +18 -0
  494. package/packages/gateway/dist/.tsbuildinfo +1 -1
  495. package/packages/gateway/dist/agents/learning-digest.d.ts +29 -7
  496. package/packages/gateway/dist/agents/learning-digest.d.ts.map +1 -1
  497. package/packages/gateway/dist/agents/learning-digest.js +87 -38
  498. package/packages/gateway/dist/agents/learning-digest.js.map +1 -1
  499. package/packages/gateway/dist/agents/owner-tools.d.ts.map +1 -1
  500. package/packages/gateway/dist/agents/owner-tools.js +11 -1
  501. package/packages/gateway/dist/agents/owner-tools.js.map +1 -1
  502. package/packages/gateway/dist/agents/platform.d.ts.map +1 -1
  503. package/packages/gateway/dist/agents/platform.js +2 -0
  504. package/packages/gateway/dist/agents/platform.js.map +1 -1
  505. package/packages/gateway/dist/chat/conversations.d.ts.map +1 -1
  506. package/packages/gateway/dist/chat/conversations.js +8 -2
  507. package/packages/gateway/dist/chat/conversations.js.map +1 -1
  508. package/packages/gateway/dist/index.d.ts +1 -0
  509. package/packages/gateway/dist/index.d.ts.map +1 -1
  510. package/packages/gateway/dist/index.js +1 -0
  511. package/packages/gateway/dist/index.js.map +1 -1
  512. package/packages/gateway/dist/missions/defaults.d.ts +0 -6
  513. package/packages/gateway/dist/missions/defaults.d.ts.map +1 -1
  514. package/packages/gateway/dist/missions/defaults.js +4 -8
  515. package/packages/gateway/dist/missions/defaults.js.map +1 -1
  516. package/packages/gateway/dist/missions/execute.d.ts.map +1 -1
  517. package/packages/gateway/dist/missions/execute.js +36 -2
  518. package/packages/gateway/dist/missions/execute.js.map +1 -1
  519. package/packages/gateway/dist/missions/goals.d.ts +12 -1
  520. package/packages/gateway/dist/missions/goals.d.ts.map +1 -1
  521. package/packages/gateway/dist/missions/goals.js +21 -1
  522. package/packages/gateway/dist/missions/goals.js.map +1 -1
  523. package/packages/gateway/dist/missions/reminders.d.ts.map +1 -1
  524. package/packages/gateway/dist/missions/reminders.js +4 -1
  525. package/packages/gateway/dist/missions/reminders.js.map +1 -1
  526. package/packages/gateway/dist/missions/sentinel-wake.d.ts +3 -0
  527. package/packages/gateway/dist/missions/sentinel-wake.d.ts.map +1 -1
  528. package/packages/gateway/dist/missions/sentinel-wake.js +4 -1
  529. package/packages/gateway/dist/missions/sentinel-wake.js.map +1 -1
  530. package/packages/gateway/dist/missions/zone-provenance.d.ts +13 -0
  531. package/packages/gateway/dist/missions/zone-provenance.d.ts.map +1 -0
  532. package/packages/gateway/dist/missions/zone-provenance.js +36 -0
  533. package/packages/gateway/dist/missions/zone-provenance.js.map +1 -0
  534. package/packages/gateway/dist/missions-cli.js +2 -2
  535. package/packages/gateway/dist/missions-cli.js.map +1 -1
  536. package/packages/gateway/dist/serve.d.ts.map +1 -1
  537. package/packages/gateway/dist/serve.js +10 -10
  538. package/packages/gateway/dist/serve.js.map +1 -1
  539. package/packages/gateway/dist/surfaces/offered-actions.d.ts +17 -0
  540. package/packages/gateway/dist/surfaces/offered-actions.d.ts.map +1 -1
  541. package/packages/gateway/dist/surfaces/offered-actions.js +27 -0
  542. package/packages/gateway/dist/surfaces/offered-actions.js.map +1 -1
  543. package/packages/gateway/dist/telegram/channel.d.ts +11 -1
  544. package/packages/gateway/dist/telegram/channel.d.ts.map +1 -1
  545. package/packages/gateway/dist/telegram/channel.js +13 -2
  546. package/packages/gateway/dist/telegram/channel.js.map +1 -1
  547. package/packages/gateway/dist/web/alerts.d.ts +179 -0
  548. package/packages/gateway/dist/web/alerts.d.ts.map +1 -0
  549. package/packages/gateway/dist/web/alerts.js +363 -0
  550. package/packages/gateway/dist/web/alerts.js.map +1 -0
  551. package/packages/gateway/dist/web/api-routes.d.ts.map +1 -1
  552. package/packages/gateway/dist/web/api-routes.js +53 -9
  553. package/packages/gateway/dist/web/api-routes.js.map +1 -1
  554. package/packages/gateway/dist/web/chat.d.ts +1 -0
  555. package/packages/gateway/dist/web/chat.d.ts.map +1 -1
  556. package/packages/gateway/dist/web/chat.js +4 -3
  557. package/packages/gateway/dist/web/chat.js.map +1 -1
  558. package/packages/gateway/dist/web/lock.d.ts +12 -5
  559. package/packages/gateway/dist/web/lock.d.ts.map +1 -1
  560. package/packages/gateway/dist/web/lock.js +23 -28
  561. package/packages/gateway/dist/web/lock.js.map +1 -1
  562. package/packages/gateway/dist/web/needs-you.d.ts +36 -0
  563. package/packages/gateway/dist/web/needs-you.d.ts.map +1 -0
  564. package/packages/gateway/dist/web/needs-you.js +65 -0
  565. package/packages/gateway/dist/web/needs-you.js.map +1 -0
  566. package/packages/gateway/dist/web/notifications.d.ts +9 -1
  567. package/packages/gateway/dist/web/notifications.d.ts.map +1 -1
  568. package/packages/gateway/dist/web/notifications.js +14 -3
  569. package/packages/gateway/dist/web/notifications.js.map +1 -1
  570. package/packages/gateway/dist/web/plugins.d.ts.map +1 -1
  571. package/packages/gateway/dist/web/plugins.js +17 -3
  572. package/packages/gateway/dist/web/plugins.js.map +1 -1
  573. package/packages/gateway/dist/web/read.d.ts +69 -27
  574. package/packages/gateway/dist/web/read.d.ts.map +1 -1
  575. package/packages/gateway/dist/web/read.js +103 -43
  576. package/packages/gateway/dist/web/read.js.map +1 -1
  577. package/packages/gateway/dist/web/secrets.d.ts +61 -1
  578. package/packages/gateway/dist/web/secrets.d.ts.map +1 -1
  579. package/packages/gateway/dist/web/secrets.js +111 -3
  580. package/packages/gateway/dist/web/secrets.js.map +1 -1
  581. package/packages/gateway/dist/web/server.d.ts.map +1 -1
  582. package/packages/gateway/dist/web/server.js +152 -11
  583. package/packages/gateway/dist/web/server.js.map +1 -1
  584. package/packages/gateway/dist/web/widgets.d.ts +1 -0
  585. package/packages/gateway/dist/web/widgets.d.ts.map +1 -1
  586. package/packages/gateway/dist/web/widgets.js +6 -1
  587. package/packages/gateway/dist/web/widgets.js.map +1 -1
  588. package/packages/gateway/dist/web/write.d.ts +23 -0
  589. package/packages/gateway/dist/web/write.d.ts.map +1 -1
  590. package/packages/gateway/dist/web/write.js +50 -1
  591. package/packages/gateway/dist/web/write.js.map +1 -1
  592. package/packages/install/dist/.tsbuildinfo +1 -1
  593. package/packages/install/dist/doctor-timezone.d.ts +17 -0
  594. package/packages/install/dist/doctor-timezone.d.ts.map +1 -0
  595. package/packages/install/dist/doctor-timezone.js +34 -0
  596. package/packages/install/dist/doctor-timezone.js.map +1 -0
  597. package/packages/install/dist/launcher.d.ts.map +1 -1
  598. package/packages/install/dist/launcher.js +3 -0
  599. package/packages/install/dist/launcher.js.map +1 -1
  600. package/packages/runtime/dist/.tsbuildinfo +1 -1
  601. package/packages/runtime/dist/anthropic.d.ts +6 -0
  602. package/packages/runtime/dist/anthropic.d.ts.map +1 -1
  603. package/packages/runtime/dist/anthropic.js.map +1 -1
  604. package/packages/runtime/dist/openai.d.ts +34 -1
  605. package/packages/runtime/dist/openai.d.ts.map +1 -1
  606. package/packages/runtime/dist/openai.js +66 -12
  607. package/packages/runtime/dist/openai.js.map +1 -1
  608. package/packages/tools/artifacts/dist/.tsbuildinfo +1 -1
  609. package/packages/tools/browser/dist/.tsbuildinfo +1 -1
  610. package/packages/tools/email/dist/.tsbuildinfo +1 -1
  611. package/packages/tools/email/dist/agent.js +1 -1
  612. package/packages/tools/email/dist/imap/imapflow-client.d.ts +8 -0
  613. package/packages/tools/email/dist/imap/imapflow-client.d.ts.map +1 -1
  614. package/packages/tools/email/dist/imap/imapflow-client.js +59 -4
  615. package/packages/tools/email/dist/imap/imapflow-client.js.map +1 -1
  616. package/packages/tools/email/dist/mail.d.ts +42 -0
  617. package/packages/tools/email/dist/mail.d.ts.map +1 -1
  618. package/packages/tools/email/dist/mail.js +116 -0
  619. package/packages/tools/email/dist/mail.js.map +1 -1
  620. package/packages/tools/email/dist/mailbox/select.d.ts +6 -0
  621. package/packages/tools/email/dist/mailbox/select.d.ts.map +1 -1
  622. package/packages/tools/email/dist/mailbox/select.js +11 -0
  623. package/packages/tools/email/dist/mailbox/select.js.map +1 -1
  624. package/packages/tools/email/dist/metrics.d.ts +5 -6
  625. package/packages/tools/email/dist/metrics.d.ts.map +1 -1
  626. package/packages/tools/email/dist/metrics.js +4 -5
  627. package/packages/tools/email/dist/metrics.js.map +1 -1
  628. package/packages/tools/email/dist/needs-you.d.ts +61 -0
  629. package/packages/tools/email/dist/needs-you.d.ts.map +1 -0
  630. package/packages/tools/email/dist/needs-you.js +99 -0
  631. package/packages/tools/email/dist/needs-you.js.map +1 -0
  632. package/packages/tools/email/dist/pages/descriptors.d.ts.map +1 -1
  633. package/packages/tools/email/dist/pages/descriptors.js +110 -78
  634. package/packages/tools/email/dist/pages/descriptors.js.map +1 -1
  635. package/packages/tools/email/dist/pages/drafts-tools.d.ts +2 -2
  636. package/packages/tools/email/dist/pages/queries.d.ts +7 -0
  637. package/packages/tools/email/dist/pages/queries.d.ts.map +1 -1
  638. package/packages/tools/email/dist/pages/queries.js +31 -3
  639. package/packages/tools/email/dist/pages/queries.js.map +1 -1
  640. package/packages/tools/email/dist/ports.d.ts +8 -0
  641. package/packages/tools/email/dist/ports.d.ts.map +1 -1
  642. package/packages/tools/email/dist/ports.js.map +1 -1
  643. package/packages/tools/email/dist/sentinels/suspicious-sender.d.ts.map +1 -1
  644. package/packages/tools/email/dist/sentinels/suspicious-sender.js +4 -1
  645. package/packages/tools/email/dist/sentinels/suspicious-sender.js.map +1 -1
  646. package/packages/tools/email/dist/sentinels/waiting-on-me.d.ts +18 -21
  647. package/packages/tools/email/dist/sentinels/waiting-on-me.d.ts.map +1 -1
  648. package/packages/tools/email/dist/sentinels/waiting-on-me.js +39 -63
  649. package/packages/tools/email/dist/sentinels/waiting-on-me.js.map +1 -1
  650. package/packages/tools/email/dist/sources/inbox-poll.d.ts.map +1 -1
  651. package/packages/tools/email/dist/sources/inbox-poll.js +3 -2
  652. package/packages/tools/email/dist/sources/inbox-poll.js.map +1 -1
  653. package/packages/tools/email/dist/suspicions-store.d.ts +6 -0
  654. package/packages/tools/email/dist/suspicions-store.d.ts.map +1 -1
  655. package/packages/tools/email/dist/suspicions-store.js +16 -1
  656. package/packages/tools/email/dist/suspicions-store.js.map +1 -1
  657. package/packages/tools/email/dist/threads.d.ts +17 -2
  658. package/packages/tools/email/dist/threads.d.ts.map +1 -1
  659. package/packages/tools/email/dist/threads.js +35 -14
  660. package/packages/tools/email/dist/threads.js.map +1 -1
  661. package/packages/tools/email/dist/tools/mailbox.d.ts +3 -0
  662. package/packages/tools/email/dist/tools/mailbox.d.ts.map +1 -1
  663. package/packages/tools/email/dist/tools/mailbox.js +5 -0
  664. package/packages/tools/email/dist/tools/mailbox.js.map +1 -1
  665. package/packages/tools/email/dist/tools/threads.d.ts +7 -3
  666. package/packages/tools/email/dist/tools/threads.d.ts.map +1 -1
  667. package/packages/tools/email/dist/tools/threads.js +18 -5
  668. package/packages/tools/email/dist/tools/threads.js.map +1 -1
  669. package/packages/tools/email/dist/watchers.d.ts +91 -7
  670. package/packages/tools/email/dist/watchers.d.ts.map +1 -1
  671. package/packages/tools/email/dist/watchers.js +164 -1
  672. package/packages/tools/email/dist/watchers.js.map +1 -1
  673. package/packages/tools/email/dist/widgets.d.ts +3 -2
  674. package/packages/tools/email/dist/widgets.d.ts.map +1 -1
  675. package/packages/tools/email/dist/widgets.js +2 -2
  676. package/packages/tools/email/dist/widgets.js.map +1 -1
  677. package/packages/tools/email/migrations/023_attention.sql +100 -0
  678. package/packages/tools/email/migrations/024_auth_domain.sql +9 -0
  679. package/packages/tools/email/migrations/025_thread_ignore.sql +77 -0
  680. package/packages/tools/email/migrations/026_attention_filed.sql +89 -0
  681. package/packages/tools/email/package.json +1 -1
  682. package/packages/tools/host/dist/.tsbuildinfo +1 -1
  683. package/packages/tools/mcp/dist/.tsbuildinfo +1 -1
  684. package/packages/tools/memory/dist/.tsbuildinfo +1 -1
  685. package/packages/tools/web/dist/.tsbuildinfo +1 -1
  686. package/packages/web/dist/assets/earth-2560-Ce3xs8Cb.webp +0 -0
  687. package/packages/web/dist/assets/earth-phone-BqC7cDhk.webp +0 -0
  688. package/packages/web/dist/assets/index-BYRgwiZp.css +1 -0
  689. package/packages/web/dist/assets/index-Qb1N-6kN.js +129 -0
  690. package/packages/web/dist/assets/{lottie_light-Cdn77Osu.js → lottie_light-DU37j1-6.js} +1 -1
  691. package/packages/web/dist/build.json +1 -1
  692. package/packages/web/dist/index.html +2 -2
  693. package/packages/web/dist/precache.json +4 -4
  694. package/packages/web/dist/sw.js +3 -2
  695. package/packages/web/dist/assets/index-D8_tmf2k.js +0 -131
  696. package/packages/web/dist/assets/index-DYQyioa6.css +0 -1
@@ -22,7 +22,66 @@ export interface RouteReply {
22
22
  status: number;
23
23
  body: unknown;
24
24
  }
25
- /** `GET /api/secrets` — the page's one read: secrets, destinations, buddi's own keys. */
25
+ /**
26
+ * What holds a secret by name: the thing whose row says "my credential is the
27
+ * owner secret called this". The page names a secret by it (a mailbox's
28
+ * address, a model account's label, a connection's name) instead of the
29
+ * generated name, and a secret nothing holds any more is "not used by
30
+ * anything" — a suggestion to remove it, never a removal.
31
+ */
32
+ export type SecretUser =
33
+ /** `loginFailedAt`: the mail server turned the password down at that time (the Email page's own record), until a login works again. */
34
+ {
35
+ kind: 'mailbox';
36
+ id: string;
37
+ address: string;
38
+ provider: string;
39
+ auth: 'app-password' | 'xoauth2';
40
+ loginFailedAt: string | null;
41
+ } | {
42
+ kind: 'model-account';
43
+ id: string;
44
+ label: string;
45
+ auth: string;
46
+ } | {
47
+ kind: 'connection';
48
+ id: string;
49
+ name: string;
50
+ variable: string | null;
51
+ };
52
+ /**
53
+ * Every row that names an owner secret as its credential, by secret name, and
54
+ * whether every lookup answered. A table that is not installed holds nothing;
55
+ * any other failure — a timeout, a lost connection — leaves `complete` false,
56
+ * because "nothing found" is then not an answer (`isUnused`).
57
+ */
58
+ export declare function readSecretUsers(pool: Pick<Pool, 'query'>): Promise<{
59
+ users: Map<string, SecretUser[]>;
60
+ complete: boolean;
61
+ }>;
62
+ /** `readSecretUsers`, the users alone. */
63
+ export declare function secretUsers(pool: Pick<Pool, 'query'>): Promise<Map<string, SecretUser[]>>;
64
+ interface ListedSecret {
65
+ name: string;
66
+ bindings: Array<{
67
+ kind: string;
68
+ target: unknown;
69
+ }>;
70
+ }
71
+ /**
72
+ * Whether nothing can reach a secret any more: it has bindings, and every one
73
+ * of them is dead — a held kind whose mailbox, account or connection no longer
74
+ * names this secret, or a kind no installed plugin registers. A secret with no
75
+ * binding at all is unused only when it was never the owner's own: a name a
76
+ * mailbox, an account or a connection generated, or the old `.env` mailbox
77
+ * password. An owner's fresh secret with no binding is "not usable yet", a
78
+ * different sentence the page says itself.
79
+ *
80
+ * `complete` false — a lookup of what holds secrets failed — means nobody
81
+ * knows: never unused then, only confirmed absence counts.
82
+ */
83
+ export declare function isUnused(secret: ListedSecret, users: readonly SecretUser[], registered: ReadonlySet<string>, complete?: boolean): boolean;
84
+ /** `GET /api/secrets` — the page's one read: secrets, destinations, buddi's own keys, and what holds each secret. */
26
85
  export declare function listSecrets(deps: SecretsDeps): Promise<RouteReply>;
27
86
  /** `GET /api/secrets/uses` — the use log, whole or one secret's. */
28
87
  export declare function secretUses(deps: SecretsDeps, url: URL): Promise<RouteReply>;
@@ -30,4 +89,5 @@ export declare function secretUses(deps: SecretsDeps, url: URL): Promise<RouteRe
30
89
  export declare function secretsAct(deps: SecretsDeps, body: unknown, session: {
31
90
  id: string;
32
91
  }): Promise<RouteReply>;
92
+ export {};
33
93
  //# sourceMappingURL=secrets.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/web/secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,EAAmC,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAEvG,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,YAAY,CAAC;IACvB,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;IACjC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;CACf;AAgCD,yFAAyF;AACzF,wBAAsB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAGxE;AAED,oEAAoE;AACpE,wBAAsB,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAKjF;AAED,+DAA+D;AAC/D,wBAAsB,UAAU,CAC9B,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,OAAO,EACb,OAAO,EAAE;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GACtB,OAAO,CAAC,UAAU,CAAC,CAOrB"}
1
+ {"version":3,"file":"secrets.d.ts","sourceRoot":"","sources":["../../src/web/secrets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAC/B,OAAO,EAAmC,KAAK,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AAKvG,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,YAAY,CAAC;IACvB,GAAG,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;IACjC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;CACf;AAgCD;;;;;;GAMG;AACH,MAAM,MAAM,UAAU;AACpB,uIAAuI;AACrI;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,cAAc,GAAG,SAAS,CAAC;IAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAClI;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAClE;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC;AAW9E;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC,CAiDjI;AAED,0CAA0C;AAC1C,wBAAsB,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,CAE/F;AAED,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACpD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,UAAU,EAAE,EAAE,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,QAAQ,UAAO,GAAG,OAAO,CAKtI;AAKD,qHAAqH;AACrH,wBAAsB,WAAW,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAiBxE;AAED,oEAAoE;AACpE,wBAAsB,UAAU,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAKjF;AAED,+DAA+D;AAC/D,wBAAsB,UAAU,CAC9B,IAAI,EAAE,WAAW,EACjB,IAAI,EAAE,OAAO,EACb,OAAO,EAAE;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,GACtB,OAAO,CAAC,UAAU,CAAC,CAOrB"}
@@ -1,4 +1,7 @@
1
1
  import { OWNER_AGENT_ID, SECRETS_QUERIES } from '@buddi/core';
2
+ import { listAccounts } from '@buddi/tool-email';
3
+ import { LEGACY_PASSWORD_VAR } from '../owner-secrets.js';
4
+ import { mailProvider } from './recovery.js';
2
5
  const reply = (status, body) => ({ status, body });
3
6
  /** Writes from one session: the act route's own budget, reused here. */
4
7
  const lastWrite = new Map();
@@ -31,10 +34,115 @@ async function invoke(deps, tool, args, session) {
31
34
  return reply(400, { error: result.message });
32
35
  }
33
36
  const SETTINGS_TOOLS = new Set(['secrets.put', 'secrets.rename', 'secrets.rebind', 'secrets.delete', 'secrets.scrub_history']);
34
- /** `GET /api/secrets` — the page's one read: secrets, destinations, buddi's own keys. */
37
+ /** The kinds whose target names the thing that holds the secret: the binding is alive only while that thing still points back. */
38
+ const HELD_KINDS = new Set(['email.account', 'accounts.provider', 'mcp.env']);
39
+ /** A table or schema that is not installed: a confirmed absence, not a failed lookup. */
40
+ function notInstalled(err) {
41
+ const code = err?.code;
42
+ return code === '42P01' || code === '3F000';
43
+ }
44
+ /**
45
+ * Every row that names an owner secret as its credential, by secret name, and
46
+ * whether every lookup answered. A table that is not installed holds nothing;
47
+ * any other failure — a timeout, a lost connection — leaves `complete` false,
48
+ * because "nothing found" is then not an answer (`isUnused`).
49
+ */
50
+ export async function readSecretUsers(pool) {
51
+ const users = new Map();
52
+ let complete = true;
53
+ const failed = (err) => {
54
+ if (!notInstalled(err))
55
+ complete = false;
56
+ };
57
+ const add = (name, user) => {
58
+ if (!name)
59
+ return;
60
+ users.set(name, [...(users.get(name) ?? []), user]);
61
+ };
62
+ try {
63
+ for (const account of await listAccounts(pool, { enabledOnly: false })) {
64
+ const user = { kind: 'mailbox', id: account.id, address: account.address, provider: mailProvider(account.imapHost), auth: account.authMode, loginFailedAt: account.loginFailedAt ?? null };
65
+ add(account.secretName, user);
66
+ // A mailbox the old `.env` named still falls back to `GMAIL_APP_PASSWORD`
67
+ // until its own password is set (`adoptEnvMailbox`, `missingMailboxes`).
68
+ if (account.addedVia === 'env' && account.secretName !== LEGACY_PASSWORD_VAR)
69
+ add(LEGACY_PASSWORD_VAR, user);
70
+ }
71
+ }
72
+ catch (err) {
73
+ // No email schema: no mailboxes here.
74
+ failed(err);
75
+ }
76
+ try {
77
+ const { rows } = await pool.query(`select id, label, auth, secret_ref from core.provider_accounts where not deleting`);
78
+ for (const row of rows)
79
+ add(row.secret_ref, { kind: 'model-account', id: row.id, label: row.label, auth: row.auth });
80
+ }
81
+ catch (err) {
82
+ // An installation that predates model accounts.
83
+ failed(err);
84
+ }
85
+ try {
86
+ const { rows } = await pool.query(`select id::text as id, name, vault_ref, env from mcp.connections`);
87
+ for (const row of rows) {
88
+ add(row.vault_ref, { kind: 'connection', id: row.id, name: row.name, variable: null });
89
+ if (!Array.isArray(row.env))
90
+ continue;
91
+ for (const entry of row.env) {
92
+ if (typeof entry.secretRef === 'string') {
93
+ add(entry.secretRef, { kind: 'connection', id: row.id, name: row.name, variable: typeof entry.name === 'string' ? entry.name : null });
94
+ }
95
+ }
96
+ }
97
+ }
98
+ catch (err) {
99
+ // No connections table: nothing connected here.
100
+ failed(err);
101
+ }
102
+ return { users, complete };
103
+ }
104
+ /** `readSecretUsers`, the users alone. */
105
+ export async function secretUsers(pool) {
106
+ return (await readSecretUsers(pool)).users;
107
+ }
108
+ /**
109
+ * Whether nothing can reach a secret any more: it has bindings, and every one
110
+ * of them is dead — a held kind whose mailbox, account or connection no longer
111
+ * names this secret, or a kind no installed plugin registers. A secret with no
112
+ * binding at all is unused only when it was never the owner's own: a name a
113
+ * mailbox, an account or a connection generated, or the old `.env` mailbox
114
+ * password. An owner's fresh secret with no binding is "not usable yet", a
115
+ * different sentence the page says itself.
116
+ *
117
+ * `complete` false — a lookup of what holds secrets failed — means nobody
118
+ * knows: never unused then, only confirmed absence counts.
119
+ */
120
+ export function isUnused(secret, users, registered, complete = true) {
121
+ if (users.length > 0)
122
+ return false;
123
+ if (!complete)
124
+ return false;
125
+ if (secret.bindings.length === 0)
126
+ return GENERATED_NAME.test(secret.name) || secret.name === LEGACY_PASSWORD_VAR;
127
+ return secret.bindings.every((binding) => HELD_KINDS.has(binding.kind) || !registered.has(binding.kind));
128
+ }
129
+ /** The names buddi itself generates for a credential it keeps for a row. */
130
+ const GENERATED_NAME = /^(PROVIDER_ACCOUNT_|CODEX_ACCOUNT_|ANTHROPIC_ACCOUNT_|OLLAMA_DEVICE_|MCP_TOKEN_|MCP_ENV_|MCP_CONNECTION_|EMAIL_[A-Z0-9_]+_[0-9a-f]{8}$)/;
131
+ /** `GET /api/secrets` — the page's one read: secrets, destinations, buddi's own keys, and what holds each secret. */
35
132
  export async function listSecrets(deps) {
36
- const result = await SECRETS_QUERIES[0].produce({}, { ...deps.ctx, db: deps.pool, now: deps.now ?? (() => new Date()) });
37
- return reply(200, result);
133
+ const result = (await SECRETS_QUERIES[0].produce({}, { ...deps.ctx, db: deps.pool, now: deps.now ?? (() => new Date()) }));
134
+ const { users, complete } = await readSecretUsers(deps.pool);
135
+ const registered = new Set(result.destinations.map((d) => d.kind));
136
+ return reply(200, {
137
+ ...result,
138
+ secrets: result.secrets.map((secret) => {
139
+ const usedBy = users.get(secret.name) ?? [];
140
+ // `usageUnknown`: it would read as unused, but a lookup failed — the page
141
+ // says it couldn't check instead of offering Remove.
142
+ const usageUnknown = !complete && isUnused(secret, usedBy, registered, true);
143
+ return { ...secret, usedBy, unused: isUnused(secret, usedBy, registered, complete), ...(usageUnknown ? { usageUnknown } : {}) };
144
+ }),
145
+ });
38
146
  }
39
147
  /** `GET /api/secrets/uses` — the use log, whole or one secret's. */
40
148
  export async function secretUses(deps, url) {
@@ -1 +1 @@
1
- {"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/web/secrets.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"secrets.js","sourceRoot":"","sources":["../../src/web/secrets.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/web/server.ts"],"names":[],"mappings":"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"}
@@ -61,11 +61,12 @@ import { mlxhBaseUrl, probeMlxh } from '../mlxh.js';
61
61
  import { OnboardingRefusal, WEB_ONBOARDING_STEPS, WEB_ONBOARDING_SURFACE, claimOpeningTurn, createFirstAgent, probeOllama, readOnboarding, rebindBrain, updateFirstAgent, withFirstRunFacts, readFirstAgentPersona } from './onboarding.js';
62
62
  import { TakeOnRefusal, readTakeOn, startTakeOn } from './take-on.js';
63
63
  import { TelegramWebError, saveTelegramToken, telegramBot, telegramDevices, telegramPairing, telegramStatus, unpairTelegramDevice, } from './telegram.js';
64
- import { PAGE_ROUTE, sendPageFile, actOnPage, listPageDescriptors, runPageQuery, } from './pages.js';
64
+ import { PAGE_ROUTE, sendPageFile, actOnPage, actRateLimited, listPageDescriptors, runPageQuery, } from './pages.js';
65
65
  import { listSecrets, secretUses, secretsAct } from './secrets.js';
66
66
  import { sayRoute, transcribeRoute } from './speech.js';
67
67
  import { createServer } from 'node:http';
68
- import { getAction, idleRolloverMs, inRecovery, listPendingActions, isJobState, parseAgentFile, setSentinelEnabled, snoozeFinding } from '@buddi/core';
68
+ import { getAction, idleRolloverMs, inRecovery, listMissions, listPendingActions, isJobState, parseAgentFile, setSentinelEnabled, snoozeFinding, snoozeFindings, unmuteFindings } from '@buddi/core';
69
+ import { actOnAlerts, askPrompt, findingsForAsk, muteAlert } from './alerts.js';
69
70
  import { connectionsOf } from '@buddi/tool-mcp';
70
71
  import { CONNECTIONS_CALLBACK_PATH, connectionsRoute } from './connections.js';
71
72
  import { browserHost } from '../browser-host.js';
@@ -93,7 +94,7 @@ import { retryHref, sendSignedOut, wantsSignedOutPage } from './signed-out.js';
93
94
  import { extensionEndpoint } from './extension.js';
94
95
  import { REMOTE_HAND_SOCKET_PATH, RemoteHandEndpoint } from './remote-hand.js';
95
96
  import { csrfCookieName, CSRF_HEADER, sessionCookieName, requestPort, BodyTooLargeError, first, cookieHeader, parseCookies, parseUrl, readJsonBody, remoteKey, requestOrigin, requestScope, sendEmpty, sendJson, sendText, } from './http.js';
96
- import { boundedLimit, readAgents, readApprovals, readConversation, readConversations, readEventKinds, readEvents, readJobs, readMissions, readOverview, setGlanceHidden, readOffers, readReminders, readSentinels, toApprovalView, } from './read.js';
97
+ import { boundedLimit, readAgents, readApprovals, readConversation, readConversations, readEventKinds, readEvents, readJobs, readJobFailures, readMissions, readOverview, setGlanceHidden, setHomeDismissed, readOffers, readReminders, readSentinels, toApprovalView, } from './read.js';
97
98
  import { RateLimiter, SessionStore, } from './sessions.js';
98
99
  import { supervisorCall } from './service.js';
99
100
  import { backupJobRoute, createBackupRoute, discardUpload, listBackups, passphraseRoute, receiveUpload, restoreRoute, scheduleRoute, verifyBackupRoute, } from './backups.js';
@@ -109,16 +110,17 @@ import { readFacts, webSettingsStore } from '../tips/facts.js';
109
110
  import { dismissAgentOffer, isPendingAccept, raiseAgentOffers, readAgentOffers, readTeammates } from './agent-offers.js';
110
111
  import { currentVersion, upgradeJobRoute, upgradeRoute, versionCheckRoute, versionRoute, } from './version.js';
111
112
  import { leaveRecoveryMode, readRecoveryView } from './recovery.js';
113
+ import { readNeedsYou } from './needs-you.js';
112
114
  import { readRail, setRailPageHidden } from './rail.js';
113
115
  import { BUILD_MISSING, serveAsset, serveShellAtRoot } from './static.js';
114
- import { StreamBudget, resumeCursor, streamConversation } from './stream.js';
116
+ import { StreamBudget, frame, resumeCursor, streamConversation } from './stream.js';
115
117
  import { ensureWebToken, verifyTicket } from './token.js';
116
118
  import { MAX_UPLOAD_BYTES, readUpload } from './upload.js';
117
119
  import { LOCKED_BODY, LockUnavailable, allowedWhileLocked, clientOf, createLock } from './lock.js';
118
120
  import { matchApiRoute, TOKEN_REFUSALS } from './api-routes.js';
119
121
  import { apiTokensRoute, bearerOf, verifyApiToken } from './api-tokens.js';
120
122
  import { LockImageRefusal, MAX_LOCK_IMAGE_BYTES, normaliseLockImage } from './lock-image.js';
121
- import { cancelJobFromWeb, cancelReminderFromWeb, decideApprovalFromWeb, retryJobFromWeb, setMissionEnabledFromWeb, setPausedFromWeb, setScheduleFromWeb, dismissOfferFromWeb, dismissOffersFromWeb, takeOfferFromWeb, } from './write.js';
123
+ import { cancelJobFromWeb, cancelReminderFromWeb, decideApprovalFromWeb, retryJobFromWeb, retryJobsFromWeb, dismissJobsFromWeb, undismissJobsFromWeb, setMissionEnabledFromWeb, setPausedFromWeb, setScheduleFromWeb, dismissOfferFromWeb, dismissOffersFromWeb, takeOfferFromWeb, } from './write.js';
122
124
  /** How often approvals past their expiry are swept, and waiting delegations told. */
123
125
  export const EXPIRY_SWEEP_MS = 60_000;
124
126
  /**
@@ -137,6 +139,16 @@ const WEB_CHATS = new WeakMap();
137
139
  * it down, and a caller that built a bare `createWebApp` is unaffected.
138
140
  */
139
141
  const PREVIEW_APPS = new WeakMap();
142
+ /**
143
+ * What a dashboard says to its open pages just before it closes: one
144
+ * `closing` frame on every live stream, naming the restart or stop the page
145
+ * itself asked for when it was one (`for`), so a page another device or the
146
+ * CLI restarted under draws "Restarting buddi" rather than errors, and
147
+ * reloads once the next process answers `/_buddi/ready` with a new `boot`.
148
+ */
149
+ const CLOSING_SAYS = new WeakMap();
150
+ /** How long a closing frame may take to reach the pages before the sockets go. */
151
+ const CLOSING_FLUSH_MS = 250;
140
152
  /** The chat surface this server is running, if any. */
141
153
  /** The most of a text file a preview shows; the download has the whole. */
142
154
  const PREVIEW_TEXT_BYTES = 100_000;
@@ -302,8 +314,33 @@ export function createWebApp(deps) {
302
314
  * stream are asked again, so one left idle past the delay is locked and cut
303
315
  * off even if its page never says a word.
304
316
  */
305
- const lock = createLock({ pool: deps.pool, sessions, now: deps.now, get timezone() { return deps.timezone; }, widgets, log });
317
+ /*
318
+ * What needs the owner, counted once (web/needs-you.ts): Home's counts, the
319
+ * rail's badge and the lock screen all read this, so they agree.
320
+ */
321
+ const needsYou = () => readNeedsYou({
322
+ pool: deps.pool,
323
+ registry: deps.registry,
324
+ now: deps.now(),
325
+ agentOffers: async () => (await readAgentOffers({
326
+ registry: deps.registry, ctx: deps.ctx, now: deps.now, log, pool: deps.pool, agentIds: () => deps.catalog.list().map((a) => a.id),
327
+ })).offers,
328
+ signals: async () => {
329
+ const service = deps.connections ?? connectionsOf(deps.registry.manifests());
330
+ return service ? service.signals() : [];
331
+ },
332
+ recoveryActive: () => inRecovery(deps.pool),
333
+ });
334
+ const lock = createLock({ pool: deps.pool, sessions, now: deps.now, get timezone() { return deps.timezone; }, widgets, needsYou, log });
306
335
  const openStreams = new Map();
336
+ /*
337
+ * This process's boot: answered by `/_buddi/ready`, so a page that watches a
338
+ * restart can tell the process that went from the one that came back.
339
+ * Random, and nothing else: it says which run this is, not when or where.
340
+ */
341
+ const boot = randomUUID();
342
+ /** Set when a page asked the supervisor to restart or stop this process: what the closing frame says. */
343
+ let goingAway;
307
344
  /*
308
345
  * The session a live API token acts through: minted on its first request,
309
346
  * kept in memory only, one per token (and scope), so a stream budget or a
@@ -572,6 +609,31 @@ export function createWebApp(deps) {
572
609
  if (chat)
573
610
  WEB_CHATS.set(server, chat);
574
611
  PREVIEW_APPS.set(server, previews);
612
+ CLOSING_SAYS.set(server, async () => {
613
+ const said = frame('closing', goingAway === undefined ? {} : { for: goingAway });
614
+ const flushed = [];
615
+ for (const { responses } of openStreams.values()) {
616
+ for (const res of responses) {
617
+ if (res.writableEnded || res.destroyed)
618
+ continue;
619
+ // Ended, not just written: an ended response is flushed before its
620
+ // socket goes, where a frame still queued would be dropped with it.
621
+ flushed.push(new Promise((resolve) => {
622
+ try {
623
+ res.end(said, () => resolve());
624
+ }
625
+ catch {
626
+ resolve();
627
+ }
628
+ }));
629
+ }
630
+ }
631
+ if (flushed.length === 0)
632
+ return;
633
+ let timer;
634
+ await Promise.race([Promise.all(flushed), new Promise((resolve) => { timer = setTimeout(resolve, CLOSING_FLUSH_MS); })]);
635
+ clearTimeout(timer);
636
+ });
575
637
  // "Your browser": the only path this server ever upgrades. Attached here
576
638
  // rather than in `startWebServer` so every caller, tests included, has it.
577
639
  extension.attach(server);
@@ -594,7 +656,7 @@ export function createWebApp(deps) {
594
656
  const challenge = url.searchParams.get('challenge') ?? '';
595
657
  if (!/^[a-f0-9]{64}$/.test(challenge))
596
658
  return sendEmpty(res, 400);
597
- return sendJson(res, 200, { proof: createHmac('sha256', deps.token).update(`buddi-ready-v1:${challenge}`).digest('hex') });
659
+ return sendJson(res, 200, { proof: createHmac('sha256', deps.token).update(`buddi-ready-v1:${challenge}`).digest('hex'), boot }, { 'Cache-Control': 'no-store' });
598
660
  }
599
661
  // A remote socket or proxy metadata can only earn remote access. It
600
662
  // decides how long a session minted now lives, and it must keep matching
@@ -1311,6 +1373,8 @@ export function createWebApp(deps) {
1311
1373
  // Every surface's runs (Telegram, the queue, the terminal), not only
1312
1374
  // this dashboard's; a chat send still being set up counts too.
1313
1375
  running: Math.max(runningAgentRuns(), chat?.runningCount ?? 0),
1376
+ // What needs the owner, by the one rule: Home's counts and the rail's badge.
1377
+ needsYou: await needsYou(),
1314
1378
  });
1315
1379
  case '/api/events':
1316
1380
  return sendJson(res, 200, await readEvents(deps.pool, {
@@ -1335,8 +1399,16 @@ export function createWebApp(deps) {
1335
1399
  kind: q.get('kind') ?? undefined,
1336
1400
  limit: boundedLimit(q.get('limit')),
1337
1401
  offset: Math.max(0, Math.min(Number(q.get('offset') ?? 0) || 0, 100_000)),
1402
+ failed: q.get('failed') === 'open' || q.get('failed') === 'dismissed' ? q.get('failed') : undefined,
1403
+ hideDismissed: q.get('dismissed') === '0',
1338
1404
  }));
1339
1405
  }
1406
+ // Failed jobs grouped by what broke them: the ones still asking, and
1407
+ // the dismissed ones (by the owner, or quiet after 14 days) apart.
1408
+ case '/api/jobs/failures': {
1409
+ const names = new Map(deps.catalog.list().map((a) => [a.id, a.name]));
1410
+ return sendJson(res, 200, await readJobFailures(deps.pool, now, (id) => names.get(id) ?? null));
1411
+ }
1340
1412
  case '/api/approvals': {
1341
1413
  const approvals = await readApprovals(deps.pool, now, boundedLimit(q.get('limit'), 50));
1342
1414
  return sendJson(res, 200, { pending: approvals.pending.map(a => ({ ...a, ...permissionScopes(a.tool) })),
@@ -1358,7 +1430,7 @@ export function createWebApp(deps) {
1358
1430
  },
1359
1431
  });
1360
1432
  case '/api/notifications':
1361
- return reply(res, await listNotificationsRoute(deps.pool, q.get('limit')));
1433
+ return reply(res, await listNotificationsRoute(deps.pool, q.get('limit'), { needs: q.get('needs') === '1', offset: q.get('offset') }));
1362
1434
  case '/api/notifications/settings':
1363
1435
  return reply(res, await notificationSettingsRoute(deps.pool, 'GET'));
1364
1436
  case '/api/notifications/focus':
@@ -1368,7 +1440,7 @@ export function createWebApp(deps) {
1368
1440
  reminders: await readReminders(deps.pool, boundedLimit(q.get('limit'))),
1369
1441
  });
1370
1442
  case '/api/sentinels':
1371
- return sendJson(res, 200, await readSentinels(deps.pool, deps.registry, boundedLimit(q.get('limit'), 50)));
1443
+ return sendJson(res, 200, await readSentinels(deps.pool, deps.registry, deps.now()));
1372
1444
  case '/api/chat/agents':
1373
1445
  return sendJson(res, 200, readChatAgents(deps.catalog, await avatarVersions(deps.pool)));
1374
1446
  // Which agents are waiting on the owner. One small query, and the only
@@ -2267,14 +2339,64 @@ export function createWebApp(deps) {
2267
2339
  return sendJson(res, 400, { error: 'Expected agentId and conversationId.' });
2268
2340
  return sendJson(res, 200, { stopped: host.stop(deps.ctx.ownerId, body.agentId, body.conversationId) });
2269
2341
  }
2342
+ /*
2343
+ * Alerts (alerts.ts): the owner's verbs on what the watchers found. Snooze
2344
+ * one ("Not now" for a week with `days`, "Not needed" without), several at
2345
+ * once (Clear all, and its Undo), silence a subject or a kind, run what a
2346
+ * finding declared, or ask the agent that answers for it.
2347
+ */
2270
2348
  const alert = /^\/api\/alerts\/([^/]+)\/snooze$/.exec(path);
2271
2349
  if (alert) {
2272
2350
  if (typeof body.snoozed !== 'boolean')
2273
2351
  return sendJson(res, 400, { error: '`snoozed` must be true or false' });
2274
- const finding = await snoozeFinding(deps.pool, decodeURIComponent(alert[1]), body.snoozed, deps.now());
2352
+ const days = typeof body.days === 'number' && Number.isFinite(body.days) && body.days > 0 && body.days <= 90 ? body.days : null;
2353
+ const until = body.snoozed && days !== null ? new Date(deps.now().getTime() + days * 86_400_000) : null;
2354
+ const finding = await snoozeFinding(deps.pool, decodeURIComponent(alert[1]), body.snoozed, deps.now(), until);
2275
2355
  if (!finding)
2276
2356
  return sendJson(res, 404, { error: 'No open alert has that key.' });
2277
- return sendJson(res, 200, { key: finding.key, snoozedAt: finding.snoozedAt ? finding.snoozedAt.toISOString() : null });
2357
+ return sendJson(res, 200, {
2358
+ key: finding.key,
2359
+ snoozedAt: finding.snoozedAt ? finding.snoozedAt.toISOString() : null,
2360
+ snoozedUntil: finding.snoozedUntil ? finding.snoozedUntil.toISOString() : null,
2361
+ });
2362
+ }
2363
+ if (path === '/api/alerts/snooze') {
2364
+ const keys = Array.isArray(body.keys) ? body.keys.filter((k) => typeof k === 'string').slice(0, 500) : null;
2365
+ if (keys === null || typeof body.snoozed !== 'boolean')
2366
+ return sendJson(res, 400, { error: 'Send `{ keys: string[], snoozed: boolean, days? }`.' });
2367
+ const days = typeof body.days === 'number' && Number.isFinite(body.days) && body.days > 0 && body.days <= 90 ? body.days : null;
2368
+ const until = body.snoozed && days !== null ? new Date(deps.now().getTime() + days * 86_400_000) : null;
2369
+ return sendJson(res, 200, { keys: await snoozeFindings(deps.pool, keys, body.snoozed, deps.now(), until) });
2370
+ }
2371
+ if (path === '/api/alerts/mute')
2372
+ return reply(res, await muteAlert(deps.pool, body, deps.now()));
2373
+ const unmute = /^\/api\/alerts\/mutes\/([^/]+)\/remove$/.exec(path);
2374
+ if (unmute) {
2375
+ const removed = await unmuteFindings(deps.pool, decodeURIComponent(unmute[1]));
2376
+ return removed ? sendJson(res, 200, { removed: true }) : sendJson(res, 404, { error: 'Nothing is silenced under that id.' });
2377
+ }
2378
+ if (path === '/api/alerts/act') {
2379
+ if (actRateLimited(session.id, deps.now().getTime()))
2380
+ return sendJson(res, 429, { error: 'Too many writes from this page. Wait a moment and try again.' });
2381
+ return reply(res, await actOnAlerts({ pool: deps.pool, registry: deps.registry, ctx: deps.ctx, now: deps.now }, body, session));
2382
+ }
2383
+ if (path === '/api/alerts/ask') {
2384
+ const keys = Array.isArray(body.keys) ? body.keys.filter((k) => typeof k === 'string') : [];
2385
+ const findings = await findingsForAsk(deps.pool, keys);
2386
+ if (findings.length === 0)
2387
+ return sendJson(res, 404, { error: 'No alert has those keys.' });
2388
+ if (!chat)
2389
+ return sendJson(res, 503, { error: 'Chat is not running in this process.' });
2390
+ // The agent that answers for them, else whoever runs the wake mission.
2391
+ const wake = (await listMissions(deps.pool)).find((m) => m.id === 'sentinel-wake');
2392
+ const agentId = findings.find((f) => f.agentId !== null && deps.catalog.get(f.agentId) !== undefined)?.agentId ?? wake?.agentId ?? null;
2393
+ if (agentId === null)
2394
+ return sendJson(res, 409, { error: 'No agent answers for this alert yet.' });
2395
+ const { label, prompt } = askPrompt(findings);
2396
+ const sent = await chat.send({ agentId, text: prompt, offer: { id: `alert:${findings[0].key}`.slice(0, 200), label, brief: true } });
2397
+ if (!sent.ok)
2398
+ return sendJson(res, sent.status, { error: sent.error });
2399
+ return sendJson(res, 200, { agentId, conversationId: sent.conversationId, runId: sent.runId });
2278
2400
  }
2279
2401
  /*
2280
2402
  * A watcher, switched off or back on. Off means it does not run: it raises
@@ -2302,6 +2424,11 @@ export function createWebApp(deps) {
2302
2424
  const state = await setSentinelEnabled(deps.pool, sentinelId, body.enabled, deps.now());
2303
2425
  return sendJson(res, 200, { sentinelId: state.sentinelId, enabled: state.enabled });
2304
2426
  }
2427
+ /* One thing on Home closed until it changes (the digest's ×, a notice's Not now), or shown again. */
2428
+ if (path === '/api/home/dismiss') {
2429
+ const result = await setHomeDismissed(deps.pool, body.slot, body.token === undefined ? undefined : body.token);
2430
+ return sendJson(res, result.status, result.body);
2431
+ }
2305
2432
  /* One Home glance, hidden or shown again (Home's ×, Settings → Appearance). */
2306
2433
  const glanceHidden = /^\/api\/home\/glances\/([^/]+)\/hidden$/.exec(path);
2307
2434
  if (glanceHidden) {
@@ -2530,8 +2657,10 @@ export function createWebApp(deps) {
2530
2657
  }
2531
2658
  const outcome = await leaveRecoveryMode({ pool: deps.pool, env: deps.env ?? process.env, log }, deps.ctx.ownerId, { dropPending: body.dropPending !== false, keepGrants: keep }, now);
2532
2659
  if (socket) {
2660
+ goingAway = 'restart';
2533
2661
  res.once('finish', () => {
2534
2662
  void supervisorCall(socket, '/restart', 'POST').catch((err) => {
2663
+ goingAway = undefined;
2535
2664
  log(`web: supervisor restart after leaving recovery failed: ${err instanceof Error ? err.message : String(err)}`);
2536
2665
  });
2537
2666
  });
@@ -2571,8 +2700,10 @@ export function createWebApp(deps) {
2571
2700
  return sendJson(res, 503, { error: 'The supervisor is not answering on its control socket. Run buddi in a terminal.' });
2572
2701
  }
2573
2702
  }
2703
+ goingAway = action === 'stop' ? 'stop' : 'restart';
2574
2704
  res.once('finish', () => {
2575
2705
  void supervisorCall(socket, `/${action}`, 'POST').catch((err) => {
2706
+ goingAway = undefined;
2576
2707
  log(`web: supervisor ${action} failed: ${err instanceof Error ? err.message : String(err)}`);
2577
2708
  });
2578
2709
  });
@@ -3013,6 +3144,14 @@ export function createWebApp(deps) {
3013
3144
  return sendJson(res, 400, { error: change });
3014
3145
  return finish(res, setAgentEngineFromWeb({ catalog: deps.catalog, env: deps.env ?? process.env }, decodeURIComponent(engine[1]), change));
3015
3146
  }
3147
+ // Failed jobs in bulk — by ids, by cause group, or every one still asking.
3148
+ // Dismiss keeps them on record and out of the footer's count.
3149
+ if (path === '/api/jobs/dismiss')
3150
+ return finish(res, await dismissJobsFromWeb(writeDeps, body));
3151
+ if (path === '/api/jobs/undismiss')
3152
+ return finish(res, await undismissJobsFromWeb(writeDeps, body));
3153
+ if (path === '/api/jobs/retry')
3154
+ return finish(res, await retryJobsFromWeb(writeDeps, body));
3016
3155
  const job = /^\/api\/jobs\/([^/]+)\/(retry|cancel)$/.exec(path);
3017
3156
  if (job) {
3018
3157
  const jobId = decodeURIComponent(job[1]);
@@ -3276,6 +3415,8 @@ export async function startWebServer(deps) {
3276
3415
  close: async () => {
3277
3416
  if (expirySweep)
3278
3417
  clearInterval(expirySweep);
3418
+ // Said before anything closes, while the streams can still carry it.
3419
+ await CLOSING_SAYS.get(server)?.();
3279
3420
  // Both listeners, both awaited. A preview socket still open is a port
3280
3421
  // still held, and the next thing to want it — the next test, the
3281
3422
  // gateway coming back up — finds it taken.