@withbuddi/buddi 0.1.0-pre.22 → 0.1.0-pre.23

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 (399) hide show
  1. package/README.md +6 -4
  2. package/node_modules/@buddi/cli/dist/.tsbuildinfo +1 -1
  3. package/node_modules/@buddi/cli/dist/commands.d.ts.map +1 -1
  4. package/node_modules/@buddi/cli/dist/commands.js +20 -1
  5. package/node_modules/@buddi/cli/dist/commands.js.map +1 -1
  6. package/node_modules/@buddi/cli/dist/doctor-probes.d.ts.map +1 -1
  7. package/node_modules/@buddi/cli/dist/doctor-probes.js +1 -0
  8. package/node_modules/@buddi/cli/dist/doctor-probes.js.map +1 -1
  9. package/node_modules/@buddi/cli/dist/doctor.d.ts +2 -0
  10. package/node_modules/@buddi/cli/dist/doctor.d.ts.map +1 -1
  11. package/node_modules/@buddi/cli/dist/doctor.js +7 -0
  12. package/node_modules/@buddi/cli/dist/doctor.js.map +1 -1
  13. package/node_modules/@buddi/core/dist/.tsbuildinfo +1 -1
  14. package/node_modules/@buddi/core/dist/agents/catalog.d.ts +37 -2
  15. package/node_modules/@buddi/core/dist/agents/catalog.d.ts.map +1 -1
  16. package/node_modules/@buddi/core/dist/agents/catalog.js +49 -11
  17. package/node_modules/@buddi/core/dist/agents/catalog.js.map +1 -1
  18. package/node_modules/@buddi/core/dist/home.d.ts +30 -1
  19. package/node_modules/@buddi/core/dist/home.d.ts.map +1 -1
  20. package/node_modules/@buddi/core/dist/home.js +1 -1
  21. package/node_modules/@buddi/core/dist/home.js.map +1 -1
  22. package/node_modules/@buddi/core/dist/host/build.d.ts.map +1 -1
  23. package/node_modules/@buddi/core/dist/host/build.js +37 -3
  24. package/node_modules/@buddi/core/dist/host/build.js.map +1 -1
  25. package/node_modules/@buddi/core/dist/host/http.d.ts +32 -0
  26. package/node_modules/@buddi/core/dist/host/http.d.ts.map +1 -1
  27. package/node_modules/@buddi/core/dist/host/http.js +102 -2
  28. package/node_modules/@buddi/core/dist/host/http.js.map +1 -1
  29. package/node_modules/@buddi/core/dist/host/types.d.ts +8 -0
  30. package/node_modules/@buddi/core/dist/host/types.d.ts.map +1 -1
  31. package/node_modules/@buddi/core/dist/index.d.ts +1 -0
  32. package/node_modules/@buddi/core/dist/index.d.ts.map +1 -1
  33. package/node_modules/@buddi/core/dist/index.js +1 -0
  34. package/node_modules/@buddi/core/dist/index.js.map +1 -1
  35. package/node_modules/@buddi/core/dist/learning/announce.d.ts +1 -1
  36. package/node_modules/@buddi/core/dist/notifications/focus.d.ts +42 -0
  37. package/node_modules/@buddi/core/dist/notifications/focus.d.ts.map +1 -0
  38. package/node_modules/@buddi/core/dist/notifications/focus.js +150 -0
  39. package/node_modules/@buddi/core/dist/notifications/focus.js.map +1 -0
  40. package/node_modules/@buddi/core/dist/notifications/index.d.ts +1 -0
  41. package/node_modules/@buddi/core/dist/notifications/index.d.ts.map +1 -1
  42. package/node_modules/@buddi/core/dist/notifications/index.js +1 -0
  43. package/node_modules/@buddi/core/dist/notifications/index.js.map +1 -1
  44. package/node_modules/@buddi/core/dist/notifications/notify.d.ts +66 -7
  45. package/node_modules/@buddi/core/dist/notifications/notify.d.ts.map +1 -1
  46. package/node_modules/@buddi/core/dist/notifications/notify.js +123 -38
  47. package/node_modules/@buddi/core/dist/notifications/notify.js.map +1 -1
  48. package/node_modules/@buddi/core/dist/notifications/store.d.ts +6 -4
  49. package/node_modules/@buddi/core/dist/notifications/store.d.ts.map +1 -1
  50. package/node_modules/@buddi/core/dist/notifications/store.js +24 -23
  51. package/node_modules/@buddi/core/dist/notifications/store.js.map +1 -1
  52. package/node_modules/@buddi/core/dist/notifications/types.d.ts +46 -3
  53. package/node_modules/@buddi/core/dist/notifications/types.d.ts.map +1 -1
  54. package/node_modules/@buddi/core/dist/notifications/types.js +12 -0
  55. package/node_modules/@buddi/core/dist/notifications/types.js.map +1 -1
  56. package/node_modules/@buddi/core/dist/pages.d.ts +186 -6
  57. package/node_modules/@buddi/core/dist/pages.d.ts.map +1 -1
  58. package/node_modules/@buddi/core/dist/pages.js +232 -13
  59. package/node_modules/@buddi/core/dist/pages.js.map +1 -1
  60. package/node_modules/@buddi/core/dist/plugin/author.d.ts +42 -0
  61. package/node_modules/@buddi/core/dist/plugin/author.d.ts.map +1 -0
  62. package/node_modules/@buddi/core/dist/plugin/author.js +77 -0
  63. package/node_modules/@buddi/core/dist/plugin/author.js.map +1 -0
  64. package/node_modules/@buddi/core/dist/plugin/index.d.ts +7 -3
  65. package/node_modules/@buddi/core/dist/plugin/index.d.ts.map +1 -1
  66. package/node_modules/@buddi/core/dist/plugin/index.js +3 -0
  67. package/node_modules/@buddi/core/dist/plugin/index.js.map +1 -1
  68. package/node_modules/@buddi/core/dist/plugin/version.d.ts +1 -1
  69. package/node_modules/@buddi/core/dist/plugin/version.d.ts.map +1 -1
  70. package/node_modules/@buddi/core/dist/plugin/version.js +1 -1
  71. package/node_modules/@buddi/core/dist/plugin/version.js.map +1 -1
  72. package/node_modules/@buddi/core/dist/plugins/record.d.ts +8 -0
  73. package/node_modules/@buddi/core/dist/plugins/record.d.ts.map +1 -1
  74. package/node_modules/@buddi/core/dist/plugins/record.js +17 -0
  75. package/node_modules/@buddi/core/dist/plugins/record.js.map +1 -1
  76. package/node_modules/@buddi/core/dist/plugins/types.d.ts +7 -0
  77. package/node_modules/@buddi/core/dist/plugins/types.d.ts.map +1 -1
  78. package/node_modules/@buddi/core/dist/plugins/types.js.map +1 -1
  79. package/node_modules/@buddi/core/dist/registry.d.ts +2 -0
  80. package/node_modules/@buddi/core/dist/registry.d.ts.map +1 -1
  81. package/node_modules/@buddi/core/dist/registry.js +15 -4
  82. package/node_modules/@buddi/core/dist/registry.js.map +1 -1
  83. package/node_modules/@buddi/core/dist/scheduler/materialize.js +1 -1
  84. package/node_modules/@buddi/core/dist/scheduler/missions.d.ts +10 -0
  85. package/node_modules/@buddi/core/dist/scheduler/missions.d.ts.map +1 -1
  86. package/node_modules/@buddi/core/dist/scheduler/missions.js +29 -1
  87. package/node_modules/@buddi/core/dist/scheduler/missions.js.map +1 -1
  88. package/node_modules/@buddi/core/dist/scheduler/types.d.ts +7 -0
  89. package/node_modules/@buddi/core/dist/scheduler/types.d.ts.map +1 -1
  90. package/node_modules/@buddi/core/dist/scheduler/types.js +1 -0
  91. package/node_modules/@buddi/core/dist/scheduler/types.js.map +1 -1
  92. package/node_modules/@buddi/core/dist/tools.d.ts +8 -0
  93. package/node_modules/@buddi/core/dist/tools.d.ts.map +1 -1
  94. package/node_modules/@buddi/core/dist/tools.js.map +1 -1
  95. package/node_modules/@buddi/core/dist/views.d.ts +178 -3
  96. package/node_modules/@buddi/core/dist/views.d.ts.map +1 -1
  97. package/node_modules/@buddi/core/dist/views.js +56 -1
  98. package/node_modules/@buddi/core/dist/views.js.map +1 -1
  99. package/node_modules/@buddi/core/migrations/051_notification_focus.sql +20 -0
  100. package/node_modules/@buddi/core/migrations/052_mission_paused_reason.sql +6 -0
  101. package/node_modules/@buddi/gateway/dist/.tsbuildinfo +1 -1
  102. package/node_modules/@buddi/gateway/dist/agents/catalog.d.ts +6 -0
  103. package/node_modules/@buddi/gateway/dist/agents/catalog.d.ts.map +1 -1
  104. package/node_modules/@buddi/gateway/dist/agents/catalog.js +17 -1
  105. package/node_modules/@buddi/gateway/dist/agents/catalog.js.map +1 -1
  106. package/node_modules/@buddi/gateway/dist/agents/starter-team.d.ts +2 -0
  107. package/node_modules/@buddi/gateway/dist/agents/starter-team.d.ts.map +1 -1
  108. package/node_modules/@buddi/gateway/dist/agents/starter-team.js +8 -3
  109. package/node_modules/@buddi/gateway/dist/agents/starter-team.js.map +1 -1
  110. package/node_modules/@buddi/gateway/dist/missions-cli.d.ts.map +1 -1
  111. package/node_modules/@buddi/gateway/dist/missions-cli.js +6 -3
  112. package/node_modules/@buddi/gateway/dist/missions-cli.js.map +1 -1
  113. package/node_modules/@buddi/gateway/dist/plugins/approve.d.ts.map +1 -1
  114. package/node_modules/@buddi/gateway/dist/plugins/approve.js +9 -2
  115. package/node_modules/@buddi/gateway/dist/plugins/approve.js.map +1 -1
  116. package/node_modules/@buddi/gateway/dist/plugins/index.d.ts +1 -0
  117. package/node_modules/@buddi/gateway/dist/plugins/index.d.ts.map +1 -1
  118. package/node_modules/@buddi/gateway/dist/plugins/index.js +1 -0
  119. package/node_modules/@buddi/gateway/dist/plugins/index.js.map +1 -1
  120. package/node_modules/@buddi/gateway/dist/plugins/load.d.ts +5 -0
  121. package/node_modules/@buddi/gateway/dist/plugins/load.d.ts.map +1 -1
  122. package/node_modules/@buddi/gateway/dist/plugins/load.js +10 -1
  123. package/node_modules/@buddi/gateway/dist/plugins/load.js.map +1 -1
  124. package/node_modules/@buddi/gateway/dist/plugins/provenance.d.ts.map +1 -1
  125. package/node_modules/@buddi/gateway/dist/plugins/provenance.js +10 -3
  126. package/node_modules/@buddi/gateway/dist/plugins/provenance.js.map +1 -1
  127. package/node_modules/@buddi/gateway/dist/plugins/scaffold.d.ts +8 -0
  128. package/node_modules/@buddi/gateway/dist/plugins/scaffold.d.ts.map +1 -1
  129. package/node_modules/@buddi/gateway/dist/plugins/scaffold.js +46 -7
  130. package/node_modules/@buddi/gateway/dist/plugins/scaffold.js.map +1 -1
  131. package/node_modules/@buddi/gateway/dist/plugins/stage.d.ts +6 -1
  132. package/node_modules/@buddi/gateway/dist/plugins/stage.d.ts.map +1 -1
  133. package/node_modules/@buddi/gateway/dist/plugins/stage.js +3 -1
  134. package/node_modules/@buddi/gateway/dist/plugins/stage.js.map +1 -1
  135. package/node_modules/@buddi/gateway/dist/plugins/toggle.d.ts +21 -0
  136. package/node_modules/@buddi/gateway/dist/plugins/toggle.d.ts.map +1 -0
  137. package/node_modules/@buddi/gateway/dist/plugins/toggle.js +86 -0
  138. package/node_modules/@buddi/gateway/dist/plugins/toggle.js.map +1 -0
  139. package/node_modules/@buddi/gateway/dist/plugins-cli.d.ts +19 -3
  140. package/node_modules/@buddi/gateway/dist/plugins-cli.d.ts.map +1 -1
  141. package/node_modules/@buddi/gateway/dist/plugins-cli.js +79 -9
  142. package/node_modules/@buddi/gateway/dist/plugins-cli.js.map +1 -1
  143. package/node_modules/@buddi/gateway/dist/serve.js +3 -3
  144. package/node_modules/@buddi/gateway/dist/serve.js.map +1 -1
  145. package/node_modules/@buddi/gateway/dist/speech-cli.d.ts +13 -0
  146. package/node_modules/@buddi/gateway/dist/speech-cli.d.ts.map +1 -1
  147. package/node_modules/@buddi/gateway/dist/speech-cli.js +40 -1
  148. package/node_modules/@buddi/gateway/dist/speech-cli.js.map +1 -1
  149. package/node_modules/@buddi/gateway/dist/telegram/focus.d.ts +27 -0
  150. package/node_modules/@buddi/gateway/dist/telegram/focus.d.ts.map +1 -0
  151. package/node_modules/@buddi/gateway/dist/telegram/focus.js +72 -0
  152. package/node_modules/@buddi/gateway/dist/telegram/focus.js.map +1 -0
  153. package/node_modules/@buddi/gateway/dist/telegram/main.d.ts.map +1 -1
  154. package/node_modules/@buddi/gateway/dist/telegram/main.js +1 -0
  155. package/node_modules/@buddi/gateway/dist/telegram/main.js.map +1 -1
  156. package/node_modules/@buddi/gateway/dist/telegram/surface.d.ts +2 -0
  157. package/node_modules/@buddi/gateway/dist/telegram/surface.d.ts.map +1 -1
  158. package/node_modules/@buddi/gateway/dist/telegram/surface.js +24 -1
  159. package/node_modules/@buddi/gateway/dist/telegram/surface.js.map +1 -1
  160. package/node_modules/@buddi/gateway/dist/web/agent-offers.js +1 -1
  161. package/node_modules/@buddi/gateway/dist/web/agent-offers.js.map +1 -1
  162. package/node_modules/@buddi/gateway/dist/web/notifications.d.ts +8 -1
  163. package/node_modules/@buddi/gateway/dist/web/notifications.d.ts.map +1 -1
  164. package/node_modules/@buddi/gateway/dist/web/notifications.js +23 -1
  165. package/node_modules/@buddi/gateway/dist/web/notifications.js.map +1 -1
  166. package/node_modules/@buddi/gateway/dist/web/plugins.d.ts +6 -1
  167. package/node_modules/@buddi/gateway/dist/web/plugins.d.ts.map +1 -1
  168. package/node_modules/@buddi/gateway/dist/web/plugins.js +42 -4
  169. package/node_modules/@buddi/gateway/dist/web/plugins.js.map +1 -1
  170. package/node_modules/@buddi/gateway/dist/web/profile.d.ts +2 -0
  171. package/node_modules/@buddi/gateway/dist/web/profile.d.ts.map +1 -1
  172. package/node_modules/@buddi/gateway/dist/web/profile.js +2 -1
  173. package/node_modules/@buddi/gateway/dist/web/profile.js.map +1 -1
  174. package/node_modules/@buddi/gateway/dist/web/rail.d.ts +33 -0
  175. package/node_modules/@buddi/gateway/dist/web/rail.d.ts.map +1 -0
  176. package/node_modules/@buddi/gateway/dist/web/rail.js +45 -0
  177. package/node_modules/@buddi/gateway/dist/web/rail.js.map +1 -0
  178. package/node_modules/@buddi/gateway/dist/web/read.d.ts +46 -0
  179. package/node_modules/@buddi/gateway/dist/web/read.d.ts.map +1 -1
  180. package/node_modules/@buddi/gateway/dist/web/read.js +78 -2
  181. package/node_modules/@buddi/gateway/dist/web/read.js.map +1 -1
  182. package/node_modules/@buddi/gateway/dist/web/server.d.ts.map +1 -1
  183. package/node_modules/@buddi/gateway/dist/web/server.js +36 -6
  184. package/node_modules/@buddi/gateway/dist/web/server.js.map +1 -1
  185. package/node_modules/@buddi/gateway/src/agents/starter/planner/agent.md +2 -2
  186. package/node_modules/@buddi/gateway/src/agents/starter/planner/skills/writing-the-morning-brief.md +18 -11
  187. package/node_modules/@buddi/install/dist/.tsbuildinfo +1 -1
  188. package/node_modules/@buddi/runtime/dist/.tsbuildinfo +1 -1
  189. package/node_modules/@buddi/tool-artifacts/dist/.tsbuildinfo +1 -1
  190. package/node_modules/@buddi/tool-browser/dist/.tsbuildinfo +1 -1
  191. package/node_modules/@buddi/tool-email/dist/.tsbuildinfo +1 -1
  192. package/node_modules/@buddi/tool-host/dist/.tsbuildinfo +1 -1
  193. package/node_modules/@buddi/tool-mcp/dist/.tsbuildinfo +1 -1
  194. package/node_modules/@buddi/tool-memory/dist/.tsbuildinfo +1 -1
  195. package/node_modules/@buddi/tool-web/dist/.tsbuildinfo +1 -1
  196. package/package.json +2 -2
  197. package/packages/cli/dist/.tsbuildinfo +1 -1
  198. package/packages/cli/dist/commands.d.ts.map +1 -1
  199. package/packages/cli/dist/commands.js +20 -1
  200. package/packages/cli/dist/commands.js.map +1 -1
  201. package/packages/cli/dist/doctor-probes.d.ts.map +1 -1
  202. package/packages/cli/dist/doctor-probes.js +1 -0
  203. package/packages/cli/dist/doctor-probes.js.map +1 -1
  204. package/packages/cli/dist/doctor.d.ts +2 -0
  205. package/packages/cli/dist/doctor.d.ts.map +1 -1
  206. package/packages/cli/dist/doctor.js +7 -0
  207. package/packages/cli/dist/doctor.js.map +1 -1
  208. package/packages/core/dist/.tsbuildinfo +1 -1
  209. package/packages/core/dist/agents/catalog.d.ts +37 -2
  210. package/packages/core/dist/agents/catalog.d.ts.map +1 -1
  211. package/packages/core/dist/agents/catalog.js +49 -11
  212. package/packages/core/dist/agents/catalog.js.map +1 -1
  213. package/packages/core/dist/home.d.ts +30 -1
  214. package/packages/core/dist/home.d.ts.map +1 -1
  215. package/packages/core/dist/home.js +1 -1
  216. package/packages/core/dist/home.js.map +1 -1
  217. package/packages/core/dist/host/build.d.ts.map +1 -1
  218. package/packages/core/dist/host/build.js +37 -3
  219. package/packages/core/dist/host/build.js.map +1 -1
  220. package/packages/core/dist/host/http.d.ts +32 -0
  221. package/packages/core/dist/host/http.d.ts.map +1 -1
  222. package/packages/core/dist/host/http.js +102 -2
  223. package/packages/core/dist/host/http.js.map +1 -1
  224. package/packages/core/dist/host/types.d.ts +8 -0
  225. package/packages/core/dist/host/types.d.ts.map +1 -1
  226. package/packages/core/dist/index.d.ts +1 -0
  227. package/packages/core/dist/index.d.ts.map +1 -1
  228. package/packages/core/dist/index.js +1 -0
  229. package/packages/core/dist/index.js.map +1 -1
  230. package/packages/core/dist/learning/announce.d.ts +1 -1
  231. package/packages/core/dist/notifications/focus.d.ts +42 -0
  232. package/packages/core/dist/notifications/focus.d.ts.map +1 -0
  233. package/packages/core/dist/notifications/focus.js +150 -0
  234. package/packages/core/dist/notifications/focus.js.map +1 -0
  235. package/packages/core/dist/notifications/index.d.ts +1 -0
  236. package/packages/core/dist/notifications/index.d.ts.map +1 -1
  237. package/packages/core/dist/notifications/index.js +1 -0
  238. package/packages/core/dist/notifications/index.js.map +1 -1
  239. package/packages/core/dist/notifications/notify.d.ts +66 -7
  240. package/packages/core/dist/notifications/notify.d.ts.map +1 -1
  241. package/packages/core/dist/notifications/notify.js +123 -38
  242. package/packages/core/dist/notifications/notify.js.map +1 -1
  243. package/packages/core/dist/notifications/store.d.ts +6 -4
  244. package/packages/core/dist/notifications/store.d.ts.map +1 -1
  245. package/packages/core/dist/notifications/store.js +24 -23
  246. package/packages/core/dist/notifications/store.js.map +1 -1
  247. package/packages/core/dist/notifications/types.d.ts +46 -3
  248. package/packages/core/dist/notifications/types.d.ts.map +1 -1
  249. package/packages/core/dist/notifications/types.js +12 -0
  250. package/packages/core/dist/notifications/types.js.map +1 -1
  251. package/packages/core/dist/pages.d.ts +186 -6
  252. package/packages/core/dist/pages.d.ts.map +1 -1
  253. package/packages/core/dist/pages.js +232 -13
  254. package/packages/core/dist/pages.js.map +1 -1
  255. package/packages/core/dist/plugin/author.d.ts +42 -0
  256. package/packages/core/dist/plugin/author.d.ts.map +1 -0
  257. package/packages/core/dist/plugin/author.js +77 -0
  258. package/packages/core/dist/plugin/author.js.map +1 -0
  259. package/packages/core/dist/plugin/index.d.ts +7 -3
  260. package/packages/core/dist/plugin/index.d.ts.map +1 -1
  261. package/packages/core/dist/plugin/index.js +3 -0
  262. package/packages/core/dist/plugin/index.js.map +1 -1
  263. package/packages/core/dist/plugin/version.d.ts +1 -1
  264. package/packages/core/dist/plugin/version.d.ts.map +1 -1
  265. package/packages/core/dist/plugin/version.js +1 -1
  266. package/packages/core/dist/plugin/version.js.map +1 -1
  267. package/packages/core/dist/plugins/record.d.ts +8 -0
  268. package/packages/core/dist/plugins/record.d.ts.map +1 -1
  269. package/packages/core/dist/plugins/record.js +17 -0
  270. package/packages/core/dist/plugins/record.js.map +1 -1
  271. package/packages/core/dist/plugins/types.d.ts +7 -0
  272. package/packages/core/dist/plugins/types.d.ts.map +1 -1
  273. package/packages/core/dist/plugins/types.js.map +1 -1
  274. package/packages/core/dist/registry.d.ts +2 -0
  275. package/packages/core/dist/registry.d.ts.map +1 -1
  276. package/packages/core/dist/registry.js +15 -4
  277. package/packages/core/dist/registry.js.map +1 -1
  278. package/packages/core/dist/scheduler/materialize.js +1 -1
  279. package/packages/core/dist/scheduler/missions.d.ts +10 -0
  280. package/packages/core/dist/scheduler/missions.d.ts.map +1 -1
  281. package/packages/core/dist/scheduler/missions.js +29 -1
  282. package/packages/core/dist/scheduler/missions.js.map +1 -1
  283. package/packages/core/dist/scheduler/types.d.ts +7 -0
  284. package/packages/core/dist/scheduler/types.d.ts.map +1 -1
  285. package/packages/core/dist/scheduler/types.js +1 -0
  286. package/packages/core/dist/scheduler/types.js.map +1 -1
  287. package/packages/core/dist/tools.d.ts +8 -0
  288. package/packages/core/dist/tools.d.ts.map +1 -1
  289. package/packages/core/dist/tools.js.map +1 -1
  290. package/packages/core/dist/views.d.ts +178 -3
  291. package/packages/core/dist/views.d.ts.map +1 -1
  292. package/packages/core/dist/views.js +56 -1
  293. package/packages/core/dist/views.js.map +1 -1
  294. package/packages/core/migrations/051_notification_focus.sql +20 -0
  295. package/packages/core/migrations/052_mission_paused_reason.sql +6 -0
  296. package/packages/gateway/dist/.tsbuildinfo +1 -1
  297. package/packages/gateway/dist/agents/catalog.d.ts +6 -0
  298. package/packages/gateway/dist/agents/catalog.d.ts.map +1 -1
  299. package/packages/gateway/dist/agents/catalog.js +17 -1
  300. package/packages/gateway/dist/agents/catalog.js.map +1 -1
  301. package/packages/gateway/dist/agents/starter-team.d.ts +2 -0
  302. package/packages/gateway/dist/agents/starter-team.d.ts.map +1 -1
  303. package/packages/gateway/dist/agents/starter-team.js +8 -3
  304. package/packages/gateway/dist/agents/starter-team.js.map +1 -1
  305. package/packages/gateway/dist/missions-cli.d.ts.map +1 -1
  306. package/packages/gateway/dist/missions-cli.js +6 -3
  307. package/packages/gateway/dist/missions-cli.js.map +1 -1
  308. package/packages/gateway/dist/plugins/approve.d.ts.map +1 -1
  309. package/packages/gateway/dist/plugins/approve.js +9 -2
  310. package/packages/gateway/dist/plugins/approve.js.map +1 -1
  311. package/packages/gateway/dist/plugins/index.d.ts +1 -0
  312. package/packages/gateway/dist/plugins/index.d.ts.map +1 -1
  313. package/packages/gateway/dist/plugins/index.js +1 -0
  314. package/packages/gateway/dist/plugins/index.js.map +1 -1
  315. package/packages/gateway/dist/plugins/load.d.ts +5 -0
  316. package/packages/gateway/dist/plugins/load.d.ts.map +1 -1
  317. package/packages/gateway/dist/plugins/load.js +10 -1
  318. package/packages/gateway/dist/plugins/load.js.map +1 -1
  319. package/packages/gateway/dist/plugins/provenance.d.ts.map +1 -1
  320. package/packages/gateway/dist/plugins/provenance.js +10 -3
  321. package/packages/gateway/dist/plugins/provenance.js.map +1 -1
  322. package/packages/gateway/dist/plugins/scaffold.d.ts +8 -0
  323. package/packages/gateway/dist/plugins/scaffold.d.ts.map +1 -1
  324. package/packages/gateway/dist/plugins/scaffold.js +46 -7
  325. package/packages/gateway/dist/plugins/scaffold.js.map +1 -1
  326. package/packages/gateway/dist/plugins/stage.d.ts +6 -1
  327. package/packages/gateway/dist/plugins/stage.d.ts.map +1 -1
  328. package/packages/gateway/dist/plugins/stage.js +3 -1
  329. package/packages/gateway/dist/plugins/stage.js.map +1 -1
  330. package/packages/gateway/dist/plugins/toggle.d.ts +21 -0
  331. package/packages/gateway/dist/plugins/toggle.d.ts.map +1 -0
  332. package/packages/gateway/dist/plugins/toggle.js +86 -0
  333. package/packages/gateway/dist/plugins/toggle.js.map +1 -0
  334. package/packages/gateway/dist/plugins-cli.d.ts +19 -3
  335. package/packages/gateway/dist/plugins-cli.d.ts.map +1 -1
  336. package/packages/gateway/dist/plugins-cli.js +79 -9
  337. package/packages/gateway/dist/plugins-cli.js.map +1 -1
  338. package/packages/gateway/dist/serve.js +3 -3
  339. package/packages/gateway/dist/serve.js.map +1 -1
  340. package/packages/gateway/dist/speech-cli.d.ts +13 -0
  341. package/packages/gateway/dist/speech-cli.d.ts.map +1 -1
  342. package/packages/gateway/dist/speech-cli.js +40 -1
  343. package/packages/gateway/dist/speech-cli.js.map +1 -1
  344. package/packages/gateway/dist/telegram/focus.d.ts +27 -0
  345. package/packages/gateway/dist/telegram/focus.d.ts.map +1 -0
  346. package/packages/gateway/dist/telegram/focus.js +72 -0
  347. package/packages/gateway/dist/telegram/focus.js.map +1 -0
  348. package/packages/gateway/dist/telegram/main.d.ts.map +1 -1
  349. package/packages/gateway/dist/telegram/main.js +1 -0
  350. package/packages/gateway/dist/telegram/main.js.map +1 -1
  351. package/packages/gateway/dist/telegram/surface.d.ts +2 -0
  352. package/packages/gateway/dist/telegram/surface.d.ts.map +1 -1
  353. package/packages/gateway/dist/telegram/surface.js +24 -1
  354. package/packages/gateway/dist/telegram/surface.js.map +1 -1
  355. package/packages/gateway/dist/web/agent-offers.js +1 -1
  356. package/packages/gateway/dist/web/agent-offers.js.map +1 -1
  357. package/packages/gateway/dist/web/notifications.d.ts +8 -1
  358. package/packages/gateway/dist/web/notifications.d.ts.map +1 -1
  359. package/packages/gateway/dist/web/notifications.js +23 -1
  360. package/packages/gateway/dist/web/notifications.js.map +1 -1
  361. package/packages/gateway/dist/web/plugins.d.ts +6 -1
  362. package/packages/gateway/dist/web/plugins.d.ts.map +1 -1
  363. package/packages/gateway/dist/web/plugins.js +42 -4
  364. package/packages/gateway/dist/web/plugins.js.map +1 -1
  365. package/packages/gateway/dist/web/profile.d.ts +2 -0
  366. package/packages/gateway/dist/web/profile.d.ts.map +1 -1
  367. package/packages/gateway/dist/web/profile.js +2 -1
  368. package/packages/gateway/dist/web/profile.js.map +1 -1
  369. package/packages/gateway/dist/web/rail.d.ts +33 -0
  370. package/packages/gateway/dist/web/rail.d.ts.map +1 -0
  371. package/packages/gateway/dist/web/rail.js +45 -0
  372. package/packages/gateway/dist/web/rail.js.map +1 -0
  373. package/packages/gateway/dist/web/read.d.ts +46 -0
  374. package/packages/gateway/dist/web/read.d.ts.map +1 -1
  375. package/packages/gateway/dist/web/read.js +78 -2
  376. package/packages/gateway/dist/web/read.js.map +1 -1
  377. package/packages/gateway/dist/web/server.d.ts.map +1 -1
  378. package/packages/gateway/dist/web/server.js +36 -6
  379. package/packages/gateway/dist/web/server.js.map +1 -1
  380. package/packages/gateway/src/agents/starter/planner/agent.md +2 -2
  381. package/packages/gateway/src/agents/starter/planner/skills/writing-the-morning-brief.md +18 -11
  382. package/packages/install/dist/.tsbuildinfo +1 -1
  383. package/packages/runtime/dist/.tsbuildinfo +1 -1
  384. package/packages/tools/artifacts/dist/.tsbuildinfo +1 -1
  385. package/packages/tools/browser/dist/.tsbuildinfo +1 -1
  386. package/packages/tools/email/dist/.tsbuildinfo +1 -1
  387. package/packages/tools/host/dist/.tsbuildinfo +1 -1
  388. package/packages/tools/mcp/dist/.tsbuildinfo +1 -1
  389. package/packages/tools/memory/dist/.tsbuildinfo +1 -1
  390. package/packages/tools/web/dist/.tsbuildinfo +1 -1
  391. package/packages/web/dist/assets/index-4hpqlMjL.css +1 -0
  392. package/packages/web/dist/assets/index-B8crjABB.js +125 -0
  393. package/packages/web/dist/assets/{lottie_light-BCNsQpt8.js → lottie_light-e1djomjW.js} +1 -1
  394. package/packages/web/dist/build.json +1 -1
  395. package/packages/web/dist/index.html +2 -2
  396. package/packages/web/dist/precache.json +4 -4
  397. package/packages/web/dist/sw.js +8 -1
  398. package/packages/web/dist/assets/index-CBEdA2dN.js +0 -125
  399. package/packages/web/dist/assets/index-Ddp9egOQ.css +0 -1
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Focus modes: what is sent and what waits (docs/notifications.md, "Focus").
3
+ *
4
+ * Pure: which focus is on at an instant (a manual one wins over a schedule
5
+ * while it lasts), which kinds it holds, when a duration ends, and the
6
+ * checks for what the owner sends. Holding, releasing and the one message at
7
+ * the end live in `notify.ts`.
8
+ */
9
+ import { LOCAL_TIME, localDateString, localMinutesOfDay, minutesOfLocalTime, nextLocalTime } from '../time.js';
10
+ import { ALWAYS_REACH, FOCUS_MODES, NOTIFICATION_KINDS, WEEKDAYS, } from './types.js';
11
+ /** How the owner reads a mode. */
12
+ export const FOCUS_LABELS = {
13
+ normal: 'Normal',
14
+ 'urgent-only': 'Urgent only',
15
+ 'do-not-disturb': 'Do not disturb',
16
+ };
17
+ /** The `now` kinds Urgent only still lets through, beside approvals and questions. */
18
+ export const URGENT_KINDS = new Set(['watcher', 'failure']);
19
+ /** "Until tomorrow morning": the next time the owner's clock reads this. */
20
+ export const FOCUS_MORNING = '08:00';
21
+ /** Does this mode hold a message of this kind and urgency for the end of the focus? */
22
+ export function focusHolds(mode, kind, urgency) {
23
+ if (mode === 'normal' || urgency !== 'now' || ALWAYS_REACH.has(kind))
24
+ return false;
25
+ if (mode === 'urgent-only')
26
+ return !URGENT_KINDS.has(kind);
27
+ return true;
28
+ }
29
+ /** Every kind this mode holds when it is `now`. */
30
+ export function heldKinds(mode) {
31
+ return NOTIFICATION_KINDS.filter((kind) => focusHolds(mode, kind, 'now'));
32
+ }
33
+ const STRENGTH = { normal: 0, 'urgent-only': 1, 'do-not-disturb': 2 };
34
+ /** The owner's weekday at `at`, `days` back. */
35
+ export function localWeekday(at, timezone, daysBack = 0) {
36
+ const [y, m, d] = localDateString(at, timezone).split('-').map(Number);
37
+ const js = new Date(Date.UTC(y, m - 1, d - daysBack)).getUTCDay();
38
+ return WEEKDAYS[(js + 6) % 7];
39
+ }
40
+ /** The schedule on at `now`, the strongest when two are, with the instant it ends. */
41
+ export function scheduledFocus(schedules, now, timezone) {
42
+ const at = localMinutesOfDay(now, timezone);
43
+ const today = localWeekday(now, timezone);
44
+ const yesterday = localWeekday(now, timezone, 1);
45
+ let best = null;
46
+ for (const s of schedules) {
47
+ const from = minutesOfLocalTime(s.from);
48
+ const to = minutesOfLocalTime(s.to);
49
+ const on = from < to
50
+ ? s.days.includes(today) && at >= from && at < to
51
+ : (s.days.includes(today) && at >= from) || (s.days.includes(yesterday) && at < to);
52
+ if (!on)
53
+ continue;
54
+ const until = nextLocalTime(now, timezone, s.to);
55
+ if (!best || STRENGTH[s.mode] > STRENGTH[best.mode] || (s.mode === best.mode && until > best.until)) {
56
+ best = { mode: s.mode, until };
57
+ }
58
+ }
59
+ return best ? { mode: best.mode, until: best.until.toISOString(), startedAt: null, by: 'schedule' } : null;
60
+ }
61
+ /** Is the manual focus still in force at `now`? */
62
+ export function manualFocusLasts(focus, now) {
63
+ return focus !== null && (focus.until === null || Date.parse(focus.until) > now.getTime());
64
+ }
65
+ /**
66
+ * The focus in force at `now`: the manual one while it lasts (a manual
67
+ * `normal` is "turned off" over a schedule, until that schedule ends), else
68
+ * the strongest schedule on, else none.
69
+ */
70
+ export function activeFocus(settings, now, timezone) {
71
+ if (manualFocusLasts(settings.focus, now)) {
72
+ const f = settings.focus;
73
+ if (f.mode === 'normal')
74
+ return null;
75
+ return { mode: f.mode, until: f.until, startedAt: f.startedAt, by: f.by };
76
+ }
77
+ return scheduledFocus(settings.schedules, now, timezone);
78
+ }
79
+ /** When a focus picked at `now` for `duration` ends; null for "until I turn it off"; undefined when it is not a duration. */
80
+ export function focusEnd(duration, now, timezone) {
81
+ const d = duration.trim().toLowerCase();
82
+ if (d === 'indefinite' || d === 'off' || d === '')
83
+ return null;
84
+ if (d === 'tomorrow')
85
+ return nextLocalTime(now, timezone, FOCUS_MORNING);
86
+ const hours = /^(\d{1,2})h$/.exec(d);
87
+ if (hours) {
88
+ const n = Number(hours[1]);
89
+ if (n >= 1 && n <= 24)
90
+ return new Date(now.getTime() + n * 3_600_000);
91
+ }
92
+ return undefined;
93
+ }
94
+ /** Quiet hours, as the first schedule: Do not disturb on every day. */
95
+ export function schedulesFromQuietHours(start, end) {
96
+ if (!start || !end || start === end)
97
+ return [];
98
+ return [{ mode: 'do-not-disturb', days: [...WEEKDAYS], from: start, to: end }];
99
+ }
100
+ /** Check the schedules the page sent; the list to store, or the sentence that says what is wrong. */
101
+ export function parseFocusSchedules(input) {
102
+ if (input === undefined || input === null)
103
+ return { ok: true, schedules: [] };
104
+ if (!Array.isArray(input))
105
+ return { ok: false, message: 'schedules must be a list.' };
106
+ const out = [];
107
+ for (const [i, raw] of input.entries()) {
108
+ const n = i + 1;
109
+ if (!raw || typeof raw !== 'object')
110
+ return { ok: false, message: `Schedule ${n} must be an object.` };
111
+ const o = raw;
112
+ if (o.mode !== 'urgent-only' && o.mode !== 'do-not-disturb') {
113
+ return { ok: false, message: `Schedule ${n} must be Do not disturb or Urgent only.` };
114
+ }
115
+ if (!Array.isArray(o.days) || o.days.length === 0 || !o.days.every((d) => WEEKDAYS.includes(d))) {
116
+ return { ok: false, message: `Schedule ${n} needs at least one day.` };
117
+ }
118
+ const from = typeof o.from === 'string' ? o.from.trim() : '';
119
+ const to = typeof o.to === 'string' ? o.to.trim() : '';
120
+ if (!LOCAL_TIME.test(from) || !LOCAL_TIME.test(to))
121
+ return { ok: false, message: `Schedule ${n} needs times like 22:00.` };
122
+ if (from === to)
123
+ return { ok: false, message: `Schedule ${n} cannot start and end at the same time.` };
124
+ const days = WEEKDAYS.filter((d) => o.days.includes(d));
125
+ out.push({ mode: o.mode, days, from, to });
126
+ }
127
+ return { ok: true, schedules: out };
128
+ }
129
+ /** A stored focus value, or null when it is not one. */
130
+ export function toFocusSetting(value) {
131
+ if (!value || typeof value !== 'object')
132
+ return null;
133
+ const o = value;
134
+ if (!FOCUS_MODES.includes(o.mode))
135
+ return null;
136
+ if (o.until !== null && typeof o.until !== 'string')
137
+ return null;
138
+ if (typeof o.startedAt !== 'string')
139
+ return null;
140
+ const by = o.by === 'telegram' || o.by === 'schedule' ? o.by : 'dashboard';
141
+ return { mode: o.mode, until: o.until ?? null, startedAt: o.startedAt, by };
142
+ }
143
+ /** Stored schedules, or null when the column was never written. */
144
+ export function toFocusSchedules(value) {
145
+ if (value === null || value === undefined)
146
+ return null;
147
+ const parsed = parseFocusSchedules(value);
148
+ return parsed.ok ? parsed.schedules : [];
149
+ }
150
+ //# sourceMappingURL=focus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus.js","sourceRoot":"","sources":["../../src/notifications/focus.ts"],"names":[],"mappings":"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"}
@@ -3,4 +3,5 @@ export * from './channels.js';
3
3
  export * from './store.js';
4
4
  export * from './notify.js';
5
5
  export * from './topic.js';
6
+ export * from './focus.js';
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/notifications/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/notifications/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
@@ -3,4 +3,5 @@ export * from './channels.js';
3
3
  export * from './store.js';
4
4
  export * from './notify.js';
5
5
  export * from './topic.js';
6
+ export * from './focus.js';
6
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/notifications/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/notifications/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import type { Queryable } from '../owner.js';
2
- import { type NotificationSettings, type NotifyDeps, type NotifyResult, type OwnerMessage } from './types.js';
2
+ import { type FocusDuration } from './focus.js';
3
+ import { type FocusMode, type FocusSetting, type FocusState, type NotificationSettings, type NotifyDeps, type NotifyResult, type OwnerMessage } from './types.js';
3
4
  /** A `now` message shown on the dashboard goes to the channel after this long unseen. */
4
5
  export declare const ESCALATE_AFTER_MS: number;
5
6
  /** The rate rule: more than this many fires of one key in an hour lowers `now` to `today`. */
@@ -8,8 +9,30 @@ export declare const RATE_LIMIT_PER_HOUR = 3;
8
9
  export declare const LOWERED_SENTENCE = "This came up more than three times in an hour, so it waits for the end of the day.";
9
10
  /** The surface whose presence means "shown on the dashboard". */
10
11
  export declare const DASHBOARD_SURFACE = "web";
11
- /** Inside quiet hours at `now`, and the instant they end; null when there are none or it is not quiet. */
12
- export declare function quietUntil(settings: NotificationSettings, now: Date, timezone: string): Date | null;
12
+ type Route = {
13
+ state: 'shown';
14
+ dueAt: Date;
15
+ channel: 'dashboard';
16
+ } | {
17
+ state: 'held';
18
+ dueAt: Date | null;
19
+ heldFor?: FocusMode;
20
+ } | {
21
+ state: 'stored';
22
+ } | {
23
+ state: 'deliver';
24
+ };
25
+ /**
26
+ * Where a message goes, before any channel is asked. Exported for the
27
+ * routing table's tests; `notifyOwner` is the one caller.
28
+ */
29
+ export declare function route(message: Pick<OwnerMessage, 'kind' | 'urgency'>, ctx: {
30
+ now: Date;
31
+ timezone: string;
32
+ settings: NotificationSettings;
33
+ onDashboard: boolean;
34
+ focus: FocusState | null;
35
+ }): Route;
13
36
  /**
14
37
  * Tell the owner something. Writes the row, routes it, and never throws for
15
38
  * a channel's sake: a message with nowhere to go is a row with `error`.
@@ -20,16 +43,52 @@ export declare function notifyOwner(db: Queryable, deps: NotifyDeps, message: Ow
20
43
  export interface NotificationsTickResult {
21
44
  escalated: number;
22
45
  endOfDay: number;
46
+ /** Rows told in the one message at the end of a focus. */
47
+ focusEnded: number;
23
48
  failed: number;
24
49
  }
25
50
  /**
26
51
  * The later half of routing: runs on the gateway's 60-second loop.
27
52
  *
28
- * 1. Quiet hours: a `now` row that falls due while it is quiet (and is not an
29
- * approval or a question) waits for the end of them.
30
- * 2. Escalation: a `now` row shown on the dashboard and not seen, or held
31
- * through quiet hours, goes to its channel.
53
+ * 1. Focus: a `now` row that falls due while a focus holds its kind waits
54
+ * for the end of the focus; when the focus ends, what waited goes out as
55
+ * one message (`settleFocus`).
56
+ * 2. Escalation: a `now` row shown on the dashboard and not seen goes to its
57
+ * channel.
32
58
  * 3. End of the day: every held `today` row goes out as one message.
33
59
  */
34
60
  export declare function notificationsTick(db: Queryable, deps: NotifyDeps, now?: Date): Promise<NotificationsTickResult>;
61
+ /**
62
+ * Keep held rows in step with the focus in force, and say what waited when
63
+ * it ends.
64
+ *
65
+ * While a focus is on, a `now` row of a kind it holds that falls due on the
66
+ * dashboard unseen is held too, and every row it holds is dated to its end
67
+ * (a longer or shorter focus moves them all). Rows held by a focus that no
68
+ * longer holds them (it ended, was turned off, or became Urgent only) go out
69
+ * as one message on the owner's channel, "While you were in Do not disturb:
70
+ * 4 things.", one line each, and are marked sent in it; nothing held,
71
+ * nothing said. Rows the owner already dealt with are left out.
72
+ */
73
+ export declare function settleFocus(db: Queryable, settings: NotificationSettings, timezone: string, now: Date): Promise<{
74
+ told: number;
75
+ failed: number;
76
+ }>;
77
+ /** "While you were in Do not disturb: 4 things." */
78
+ export declare function focusSummaryTitle(mode: FocusMode, count: number): string;
79
+ /** The focus in force now, for the owner menu and /focus; null when none is. */
80
+ export declare function readFocusState(db: Queryable, deps?: NotifyDeps): Promise<FocusState | null>;
81
+ /**
82
+ * Switch the manual focus: a mode for a duration (`1h`, `3h`, `tomorrow`,
83
+ * `indefinite`), or `normal` to turn it off. Turning off while a schedule is
84
+ * on keeps it off until that schedule ends: a manual choice wins while it
85
+ * lasts. Held rows are settled at once, so turning off says what waited now,
86
+ * not at the next tick. Throws for a mode or duration that is not one.
87
+ */
88
+ export declare function setFocus(db: Queryable, deps: NotifyDeps, input: {
89
+ mode: FocusMode;
90
+ duration?: FocusDuration;
91
+ by: FocusSetting['by'];
92
+ }): Promise<FocusState | null>;
93
+ export {};
35
94
  //# sourceMappingURL=notify.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"notify.d.ts","sourceRoot":"","sources":["../../src/notifications/notify.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAkB7C,OAAO,EAKL,KAAK,oBAAoB,EAEzB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,YAAY,EAElB,MAAM,YAAY,CAAC;AAEpB,yFAAyF;AACzF,eAAO,MAAM,iBAAiB,QAAc,CAAC;AAE7C,8FAA8F;AAC9F,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,oEAAoE;AACpE,eAAO,MAAM,gBAAgB,uFAAuF,CAAC;AAErH,iEAAiE;AACjE,eAAO,MAAM,iBAAiB,QAAQ,CAAC;AAYvC,0GAA0G;AAC1G,wBAAgB,UAAU,CAAC,QAAQ,EAAE,oBAAoB,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAOnG;AA0FD;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAqG/G;AA2CD,yBAAyB;AACzB,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;;;GAQG;AACH,wBAAsB,iBAAiB,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,GAAE,IAAiC,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAsEjJ"}
1
+ {"version":3,"file":"notify.d.ts","sourceRoot":"","sources":["../../src/notifications/notify.ts"],"names":[],"mappings":"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"}
@@ -6,21 +6,22 @@
6
6
  *
7
7
  * now the owner is on the dashboard → shown there; if nobody has seen it
8
8
  * in ten minutes, the default channel anyway. Away → the default
9
- * channel at once. Quiet hours hold it until they end, except
10
- * approvals and questions.
9
+ * channel at once. A focus (focus.ts) holds what its mode holds
10
+ * until it ends; approvals and questions always go.
11
11
  * today held until the end of the owner's day, then one message for all.
12
12
  * digest stored; the recap reads it.
13
13
  *
14
- * `notificationsTick` does the later half: escalations, the end of quiet
15
- * hours, the end of the day. Every transition is one UPDATE guarded by the
14
+ * `notificationsTick` does the later half: escalations, the end of a focus
15
+ * (one message for what waited), the end of the day. Every transition is one UPDATE guarded by the
16
16
  * state it leaves, so two ticks never send one row twice.
17
17
  */
18
18
  import { getOwnerProfile } from '../onboarding/store.js';
19
19
  import { scrubText } from '../secrets/scrub.js';
20
- import { isKnownTimezone, localDateString, localMinutesOfDay, minutesOfLocalTime, nextLocalTime, timezoneFromEnv, } from '../time.js';
20
+ import { isKnownTimezone, localDateString, nextLocalTime, timezoneFromEnv } from '../time.js';
21
21
  import { channelFor, deliverTo } from './channels.js';
22
+ import { activeFocus, FOCUS_LABELS, focusEnd, focusHolds, heldKinds, scheduledFocus } from './focus.js';
22
23
  import { notificationTopic, sameTopic, TOPIC_WINDOW_MS } from './topic.js';
23
- import { NOTIFICATION_COLUMNS, presentSurfaces, readNotificationSettings, toNotification, } from './store.js';
24
+ import { NOTIFICATION_COLUMNS, presentSurfaces, readNotificationSettings, toNotification, writeFocus, } from './store.js';
24
25
  import { ALWAYS_REACH, NOTIFICATION_KINDS, NOTIFICATION_URGENCIES, } from './types.js';
25
26
  /** A `now` message shown on the dashboard goes to the channel after this long unseen. */
26
27
  export const ESCALATE_AFTER_MS = 10 * 60_000;
@@ -41,17 +42,11 @@ async function ownerTimezone(db, deps) {
41
42
  }
42
43
  return deps.timezone ?? timezoneFromEnv();
43
44
  }
44
- /** Inside quiet hours at `now`, and the instant they end; null when there are none or it is not quiet. */
45
- export function quietUntil(settings, now, timezone) {
46
- if (!settings.quietStart || !settings.quietEnd)
47
- return null;
48
- const start = minutesOfLocalTime(settings.quietStart);
49
- const end = minutesOfLocalTime(settings.quietEnd);
50
- const at = localMinutesOfDay(now, timezone);
51
- const quiet = start < end ? at >= start && at < end : at >= start || at < end;
52
- return quiet ? nextLocalTime(now, timezone, settings.quietEnd) : null;
53
- }
54
- function route(message, ctx) {
45
+ /**
46
+ * Where a message goes, before any channel is asked. Exported for the
47
+ * routing table's tests; `notifyOwner` is the one caller.
48
+ */
49
+ export function route(message, ctx) {
55
50
  const always = ALWAYS_REACH.has(message.kind);
56
51
  if (!always && ctx.settings.perKind[message.kind] === 'off')
57
52
  return { state: 'stored' };
@@ -63,9 +58,9 @@ function route(message, ctx) {
63
58
  if (ctx.onDashboard) {
64
59
  return { state: 'shown', dueAt: new Date(ctx.now.getTime() + ESCALATE_AFTER_MS), channel: 'dashboard' };
65
60
  }
66
- const quiet = always ? null : quietUntil(ctx.settings, ctx.now, ctx.timezone);
67
- if (quiet)
68
- return { state: 'held', dueAt: quiet };
61
+ if (ctx.focus && focusHolds(ctx.focus.mode, message.kind, message.urgency)) {
62
+ return { state: 'held', dueAt: ctx.focus.until ? new Date(ctx.focus.until) : null, heldFor: ctx.focus.mode };
63
+ }
69
64
  return { state: 'deliver' };
70
65
  }
71
66
  function checkMessage(message) {
@@ -161,7 +156,8 @@ export async function notifyOwner(db, deps, message) {
161
156
  }
162
157
  const title = lowered ? `${baseTitle} ${LOWERED_SENTENCE}` : baseTitle;
163
158
  const onDashboard = (await presentSurfaces(db, now)).includes(DASHBOARD_SURFACE);
164
- let next = route({ kind: message.kind, urgency }, { now, timezone, settings, onDashboard });
159
+ const focus = activeFocus(settings, now, timezone);
160
+ let next = route({ kind: message.kind, urgency }, { now, timezone, settings, onDashboard, focus });
165
161
  // A repeat shown on the dashboard keeps the clock it started, unless the
166
162
  // owner had already seen the earlier one: then the new content is unseen.
167
163
  if (next.state === 'shown' && existing?.state === 'shown' && existing.seenAt === null && existing.dueAt) {
@@ -170,16 +166,18 @@ export async function notifyOwner(db, deps, message) {
170
166
  const state = next.state === 'deliver' ? 'sending' : next.state;
171
167
  const dueAt = 'dueAt' in next ? next.dueAt : null;
172
168
  const channel = next.state === 'shown' ? 'dashboard' : null;
169
+ const heldFor = next.state === 'held' ? next.heldFor ?? null : null;
173
170
  const offers = JSON.stringify(message.offers ?? []);
174
171
  let row;
175
172
  if (existing) {
176
173
  const { rows } = await db.query(`update core.owner_notifications
177
174
  set urgency = $2, title = $3, text = $4, link = $5, offers = $6::jsonb, agent_id = coalesce($7, agent_id),
178
175
  topic = coalesce($15, topic), plugin_id = coalesce($8, plugin_id), action_id = coalesce($9::uuid, action_id), state = $10, due_at = $11,
179
- channel = $12, fired_count = fired_count + 1, lowered = $13, seen_at = null, error = null, updated_at = $14
176
+ channel = $12, fired_count = fired_count + 1, lowered = $13, seen_at = null, error = null, updated_at = $14,
177
+ held_for = $16
180
178
  where id = $1 and sent_at is null and state in ('shown', 'held', 'stored', 'failed')
181
179
  returning ${NOTIFICATION_COLUMNS}`, [existing.id, urgency, title, text, message.link?.route ?? null, offers, message.agentId ?? null,
182
- message.pluginId ?? null, message.actionId ?? null, state, dueAt, channel, lowered, now, topic]);
180
+ message.pluginId ?? null, message.actionId ?? null, state, dueAt, channel, lowered, now, topic, heldFor]);
183
181
  if (rows[0])
184
182
  row = toNotification(rows[0]);
185
183
  else
@@ -188,10 +186,10 @@ export async function notifyOwner(db, deps, message) {
188
186
  if (!existing) {
189
187
  const { rows } = await db.query(`insert into core.owner_notifications
190
188
  (kind, urgency, title, text, link, offers, dedupe_key, agent_id, plugin_id, action_id, state, due_at, channel,
191
- lowered, created_at, updated_at, topic)
192
- values ($1, $2, $3, $4, $5, $6::jsonb, $7, $8, $9, $10::uuid, $11, $12, $13, $14, $15, $15, $16)
189
+ lowered, created_at, updated_at, topic, held_for)
190
+ values ($1, $2, $3, $4, $5, $6::jsonb, $7, $8, $9, $10::uuid, $11, $12, $13, $14, $15, $15, $16, $17)
193
191
  returning ${NOTIFICATION_COLUMNS}`, [message.kind, urgency, title, text, message.link?.route ?? null, offers, dedupeKey, message.agentId ?? null,
194
- message.pluginId ?? null, message.actionId ?? null, state, dueAt, channel, lowered, now, topic]);
192
+ message.pluginId ?? null, message.actionId ?? null, state, dueAt, channel, lowered, now, topic, heldFor]);
195
193
  row = toNotification(rows[0]);
196
194
  }
197
195
  row = row;
@@ -243,25 +241,24 @@ async function foldIntoTopic(db, message, now) {
243
241
  /**
244
242
  * The later half of routing: runs on the gateway's 60-second loop.
245
243
  *
246
- * 1. Quiet hours: a `now` row that falls due while it is quiet (and is not an
247
- * approval or a question) waits for the end of them.
248
- * 2. Escalation: a `now` row shown on the dashboard and not seen, or held
249
- * through quiet hours, goes to its channel.
244
+ * 1. Focus: a `now` row that falls due while a focus holds its kind waits
245
+ * for the end of the focus; when the focus ends, what waited goes out as
246
+ * one message (`settleFocus`).
247
+ * 2. Escalation: a `now` row shown on the dashboard and not seen goes to its
248
+ * channel.
250
249
  * 3. End of the day: every held `today` row goes out as one message.
251
250
  */
252
251
  export async function notificationsTick(db, deps, now = deps.now?.() ?? new Date()) {
253
252
  const timezone = await ownerTimezone(db, deps);
254
253
  const settings = await readNotificationSettings(db);
255
- const outcome = { escalated: 0, endOfDay: 0, failed: 0 };
256
- const quiet = quietUntil(settings, now, timezone);
257
- if (quiet) {
258
- await db.query(`update core.owner_notifications set state = 'held', due_at = $2, updated_at = $1
259
- where urgency = 'now' and due_at <= $1 and acted_at is null and kind not in ('approval', 'question')
260
- and ((state = 'shown' and seen_at is null) or state = 'held')`, [now, quiet]);
261
- }
254
+ const outcome = { escalated: 0, endOfDay: 0, focusEnded: 0, failed: 0 };
255
+ const settled = await settleFocus(db, settings, timezone, now);
256
+ outcome.focusEnded = settled.told;
257
+ outcome.failed += settled.failed;
258
+ // A row held by a focus waits for `settleFocus`, never for its own `due_at`.
262
259
  const { rows: claimed } = await db.query(`update core.owner_notifications set state = 'sending', updated_at = $1
263
260
  where urgency = 'now' and due_at <= $1 and acted_at is null
264
- and ((state = 'shown' and seen_at is null) or state = 'held')
261
+ and ((state = 'shown' and seen_at is null) or (state = 'held' and held_for is null))
265
262
  returning ${NOTIFICATION_COLUMNS}`, [now]);
266
263
  for (const raw of claimed) {
267
264
  const sent = await sendClaimed(db, toNotification(raw), settings, now);
@@ -302,4 +299,92 @@ export async function notificationsTick(db, deps, now = deps.now?.() ?? new Date
302
299
  }
303
300
  return outcome;
304
301
  }
302
+ /**
303
+ * Keep held rows in step with the focus in force, and say what waited when
304
+ * it ends.
305
+ *
306
+ * While a focus is on, a `now` row of a kind it holds that falls due on the
307
+ * dashboard unseen is held too, and every row it holds is dated to its end
308
+ * (a longer or shorter focus moves them all). Rows held by a focus that no
309
+ * longer holds them (it ended, was turned off, or became Urgent only) go out
310
+ * as one message on the owner's channel, "While you were in Do not disturb:
311
+ * 4 things.", one line each, and are marked sent in it; nothing held,
312
+ * nothing said. Rows the owner already dealt with are left out.
313
+ */
314
+ export async function settleFocus(db, settings, timezone, now) {
315
+ const focus = activeFocus(settings, now, timezone);
316
+ const holding = focus ? heldKinds(focus.mode) : [];
317
+ if (focus && holding.length > 0) {
318
+ await db.query(`update core.owner_notifications set state = 'held', due_at = $2, held_for = $3, updated_at = $1
319
+ where urgency = 'now' and acted_at is null and kind = any($4::text[])
320
+ and ((state = 'shown' and seen_at is null and due_at <= $1) or (state = 'held' and held_for is not null))`, [now, focus.until, focus.mode, holding]);
321
+ }
322
+ await db.query(`update core.owner_notifications set state = 'stored', updated_at = $1
323
+ where state = 'held' and held_for is not null and acted_at is not null and not (kind = any($2::text[]))`, [now, holding]);
324
+ const { rows: claimed } = await db.query(`update core.owner_notifications set state = 'sending', updated_at = $1
325
+ where state = 'held' and held_for is not null and acted_at is null and not (kind = any($2::text[]))
326
+ returning ${NOTIFICATION_COLUMNS}`, [now, holding]);
327
+ if (claimed.length === 0)
328
+ return { told: 0, failed: 0 };
329
+ const rows = claimed.map(toNotification).sort((a, b) => a.createdAt.localeCompare(b.createdAt));
330
+ const mode = rows.some((r) => r.heldFor === 'do-not-disturb') ? 'do-not-disturb' : 'urgent-only';
331
+ const message = {
332
+ id: `focus:${now.toISOString()}`,
333
+ kind: 'recap',
334
+ urgency: 'now',
335
+ title: focusSummaryTitle(mode, rows.length),
336
+ text: rows.map((r) => `- ${r.agentId ?? r.pluginId ?? 'buddi'}: ${r.title}`).join('\n'),
337
+ parts: rows.map(toDeliverable),
338
+ };
339
+ const kind = await channelFor(settings);
340
+ const answer = kind === null || kind === 'off' ? { ok: false, error: 'no channel' } : await deliverTo(kind, message);
341
+ const ids = rows.map((r) => r.id);
342
+ if (answer.ok) {
343
+ await db.query(`update core.owner_notifications set state = 'sent', channel = $2, sent_at = $3, error = null, updated_at = $3
344
+ where id = any($1::uuid[]) and state = 'sending'`, [ids, kind, now]);
345
+ return { told: rows.length, failed: 0 };
346
+ }
347
+ await db.query(`update core.owner_notifications set state = 'failed', channel = $2, error = $3, updated_at = $4
348
+ where id = any($1::uuid[]) and state = 'sending'`, [ids, kind === 'off' ? null : kind, answer.error, now]);
349
+ return { told: 0, failed: rows.length };
350
+ }
351
+ /** "While you were in Do not disturb: 4 things." */
352
+ export function focusSummaryTitle(mode, count) {
353
+ return `While you were in ${FOCUS_LABELS[mode]}: ${count} ${count === 1 ? 'thing' : 'things'}.`;
354
+ }
355
+ /** The focus in force now, for the owner menu and /focus; null when none is. */
356
+ export async function readFocusState(db, deps = {}) {
357
+ const now = deps.now?.() ?? new Date();
358
+ return activeFocus(await readNotificationSettings(db), now, await ownerTimezone(db, deps));
359
+ }
360
+ /**
361
+ * Switch the manual focus: a mode for a duration (`1h`, `3h`, `tomorrow`,
362
+ * `indefinite`), or `normal` to turn it off. Turning off while a schedule is
363
+ * on keeps it off until that schedule ends: a manual choice wins while it
364
+ * lasts. Held rows are settled at once, so turning off says what waited now,
365
+ * not at the next tick. Throws for a mode or duration that is not one.
366
+ */
367
+ export async function setFocus(db, deps, input) {
368
+ const now = deps.now?.() ?? new Date();
369
+ const timezone = await ownerTimezone(db, deps);
370
+ const settings = await readNotificationSettings(db);
371
+ let focus;
372
+ if (input.mode === 'normal') {
373
+ const scheduled = scheduledFocus(settings.schedules, now, timezone);
374
+ focus = scheduled ? { mode: 'normal', until: scheduled.until, startedAt: now.toISOString(), by: input.by } : null;
375
+ }
376
+ else if (input.mode === 'urgent-only' || input.mode === 'do-not-disturb') {
377
+ const end = focusEnd(input.duration ?? 'indefinite', now, timezone);
378
+ if (end === undefined)
379
+ throw new Error(`"${String(input.duration)}" is not a duration (1h, 3h, tomorrow or indefinite)`);
380
+ focus = { mode: input.mode, until: end?.toISOString() ?? null, startedAt: now.toISOString(), by: input.by };
381
+ }
382
+ else {
383
+ throw new Error(`"${String(input.mode)}" is not a focus mode`);
384
+ }
385
+ await writeFocus(db, focus);
386
+ const next = { ...settings, focus };
387
+ await settleFocus(db, next, timezone, now);
388
+ return activeFocus(next, now, timezone);
389
+ }
305
390
  //# sourceMappingURL=notify.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"notify.js","sourceRoot":"","sources":["../../src/notifications/notify.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"notify.js","sourceRoot":"","sources":["../../src/notifications/notify.ts"],"names":[],"mappings":"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"}