@withbuddi/buddi 0.1.0-pre.30 → 0.1.0-pre.32

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 (600) hide show
  1. package/README.md +58 -368
  2. package/examples/agents/concierge/agent.md +10 -2
  3. package/extension/manifest.json +2 -2
  4. package/node_modules/@buddi/cli/dist/.tsbuildinfo +1 -1
  5. package/node_modules/@buddi/cli/dist/agents-catalogue-cmd.d.ts +50 -0
  6. package/node_modules/@buddi/cli/dist/agents-catalogue-cmd.d.ts.map +1 -0
  7. package/node_modules/@buddi/cli/dist/agents-catalogue-cmd.js +328 -0
  8. package/node_modules/@buddi/cli/dist/agents-catalogue-cmd.js.map +1 -0
  9. package/node_modules/@buddi/cli/dist/args.d.ts +5 -0
  10. package/node_modules/@buddi/cli/dist/args.d.ts.map +1 -1
  11. package/node_modules/@buddi/cli/dist/args.js +8 -0
  12. package/node_modules/@buddi/cli/dist/args.js.map +1 -1
  13. package/node_modules/@buddi/cli/dist/commands.d.ts.map +1 -1
  14. package/node_modules/@buddi/cli/dist/commands.js +63 -1
  15. package/node_modules/@buddi/cli/dist/commands.js.map +1 -1
  16. package/node_modules/@buddi/cli/dist/doctor-probes.d.ts.map +1 -1
  17. package/node_modules/@buddi/cli/dist/doctor-probes.js +4 -11
  18. package/node_modules/@buddi/cli/dist/doctor-probes.js.map +1 -1
  19. package/node_modules/@buddi/cli/dist/doctor.d.ts +16 -0
  20. package/node_modules/@buddi/cli/dist/doctor.d.ts.map +1 -1
  21. package/node_modules/@buddi/cli/dist/doctor.js +30 -0
  22. package/node_modules/@buddi/cli/dist/doctor.js.map +1 -1
  23. package/node_modules/@buddi/cli/dist/main.d.ts.map +1 -1
  24. package/node_modules/@buddi/cli/dist/main.js +44 -9
  25. package/node_modules/@buddi/cli/dist/main.js.map +1 -1
  26. package/node_modules/@buddi/cli/dist/mcp/tools.d.ts.map +1 -1
  27. package/node_modules/@buddi/cli/dist/mcp/tools.js +3 -1
  28. package/node_modules/@buddi/cli/dist/mcp/tools.js.map +1 -1
  29. package/node_modules/@buddi/cli/dist/skills-cmd.d.ts +15 -0
  30. package/node_modules/@buddi/cli/dist/skills-cmd.d.ts.map +1 -0
  31. package/node_modules/@buddi/cli/dist/skills-cmd.js +54 -0
  32. package/node_modules/@buddi/cli/dist/skills-cmd.js.map +1 -0
  33. package/node_modules/@buddi/cli/dist/status.d.ts +15 -9
  34. package/node_modules/@buddi/cli/dist/status.d.ts.map +1 -1
  35. package/node_modules/@buddi/cli/dist/status.js +6 -11
  36. package/node_modules/@buddi/cli/dist/status.js.map +1 -1
  37. package/node_modules/@buddi/core/dist/.tsbuildinfo +1 -1
  38. package/node_modules/@buddi/core/dist/actions/store.d.ts +8 -0
  39. package/node_modules/@buddi/core/dist/actions/store.d.ts.map +1 -1
  40. package/node_modules/@buddi/core/dist/actions/store.js +13 -0
  41. package/node_modules/@buddi/core/dist/actions/store.js.map +1 -1
  42. package/node_modules/@buddi/core/dist/agents/catalog.d.ts +11 -3
  43. package/node_modules/@buddi/core/dist/agents/catalog.d.ts.map +1 -1
  44. package/node_modules/@buddi/core/dist/agents/catalog.js +58 -10
  45. package/node_modules/@buddi/core/dist/agents/catalog.js.map +1 -1
  46. package/node_modules/@buddi/core/dist/agents/frontmatter.d.ts +1 -1
  47. package/node_modules/@buddi/core/dist/agents/frontmatter.d.ts.map +1 -1
  48. package/node_modules/@buddi/core/dist/agents/frontmatter.js +1 -1
  49. package/node_modules/@buddi/core/dist/agents/frontmatter.js.map +1 -1
  50. package/node_modules/@buddi/core/dist/agents/skills.d.ts +29 -3
  51. package/node_modules/@buddi/core/dist/agents/skills.d.ts.map +1 -1
  52. package/node_modules/@buddi/core/dist/agents/skills.js +49 -2
  53. package/node_modules/@buddi/core/dist/agents/skills.js.map +1 -1
  54. package/node_modules/@buddi/core/dist/clock-widget.d.ts.map +1 -1
  55. package/node_modules/@buddi/core/dist/clock-widget.js +5 -3
  56. package/node_modules/@buddi/core/dist/clock-widget.js.map +1 -1
  57. package/node_modules/@buddi/core/dist/host/build.d.ts.map +1 -1
  58. package/node_modules/@buddi/core/dist/host/build.js +11 -0
  59. package/node_modules/@buddi/core/dist/host/build.js.map +1 -1
  60. package/node_modules/@buddi/core/dist/host/types.d.ts +7 -0
  61. package/node_modules/@buddi/core/dist/host/types.d.ts.map +1 -1
  62. package/node_modules/@buddi/core/dist/learning/store.d.ts +7 -0
  63. package/node_modules/@buddi/core/dist/learning/store.d.ts.map +1 -1
  64. package/node_modules/@buddi/core/dist/learning/store.js +6 -0
  65. package/node_modules/@buddi/core/dist/learning/store.js.map +1 -1
  66. package/node_modules/@buddi/core/dist/notifications/agent.d.ts +7 -0
  67. package/node_modules/@buddi/core/dist/notifications/agent.d.ts.map +1 -1
  68. package/node_modules/@buddi/core/dist/notifications/agent.js +2 -0
  69. package/node_modules/@buddi/core/dist/notifications/agent.js.map +1 -1
  70. package/node_modules/@buddi/core/dist/notifications/index.d.ts +1 -0
  71. package/node_modules/@buddi/core/dist/notifications/index.d.ts.map +1 -1
  72. package/node_modules/@buddi/core/dist/notifications/index.js +1 -0
  73. package/node_modules/@buddi/core/dist/notifications/index.js.map +1 -1
  74. package/node_modules/@buddi/core/dist/notifications/needs.d.ts +49 -0
  75. package/node_modules/@buddi/core/dist/notifications/needs.d.ts.map +1 -0
  76. package/node_modules/@buddi/core/dist/notifications/needs.js +41 -0
  77. package/node_modules/@buddi/core/dist/notifications/needs.js.map +1 -0
  78. package/node_modules/@buddi/core/dist/notifications/notify.d.ts.map +1 -1
  79. package/node_modules/@buddi/core/dist/notifications/notify.js +16 -7
  80. package/node_modules/@buddi/core/dist/notifications/notify.js.map +1 -1
  81. package/node_modules/@buddi/core/dist/notifications/store.d.ts.map +1 -1
  82. package/node_modules/@buddi/core/dist/notifications/store.js +2 -1
  83. package/node_modules/@buddi/core/dist/notifications/store.js.map +1 -1
  84. package/node_modules/@buddi/core/dist/notifications/types.d.ts +10 -0
  85. package/node_modules/@buddi/core/dist/notifications/types.d.ts.map +1 -1
  86. package/node_modules/@buddi/core/dist/notifications/types.js.map +1 -1
  87. package/node_modules/@buddi/core/dist/offers/store.d.ts.map +1 -1
  88. package/node_modules/@buddi/core/dist/offers/store.js +9 -4
  89. package/node_modules/@buddi/core/dist/offers/store.js.map +1 -1
  90. package/node_modules/@buddi/core/dist/offers/types.d.ts +24 -1
  91. package/node_modules/@buddi/core/dist/offers/types.d.ts.map +1 -1
  92. package/node_modules/@buddi/core/dist/offers/types.js +23 -1
  93. package/node_modules/@buddi/core/dist/offers/types.js.map +1 -1
  94. package/node_modules/@buddi/core/dist/owner-timezone.d.ts +20 -22
  95. package/node_modules/@buddi/core/dist/owner-timezone.d.ts.map +1 -1
  96. package/node_modules/@buddi/core/dist/owner-timezone.js +17 -25
  97. package/node_modules/@buddi/core/dist/owner-timezone.js.map +1 -1
  98. package/node_modules/@buddi/core/dist/plugin/version.d.ts +1 -1
  99. package/node_modules/@buddi/core/dist/plugin/version.js +1 -1
  100. package/node_modules/@buddi/core/dist/scheduler/missions.d.ts +86 -11
  101. package/node_modules/@buddi/core/dist/scheduler/missions.d.ts.map +1 -1
  102. package/node_modules/@buddi/core/dist/scheduler/missions.js +160 -36
  103. package/node_modules/@buddi/core/dist/scheduler/missions.js.map +1 -1
  104. package/node_modules/@buddi/core/dist/scheduler/runner.d.ts.map +1 -1
  105. package/node_modules/@buddi/core/dist/scheduler/runner.js +6 -1
  106. package/node_modules/@buddi/core/dist/scheduler/runner.js.map +1 -1
  107. package/node_modules/@buddi/core/dist/scheduler/types.d.ts +22 -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 +6 -0
  110. package/node_modules/@buddi/core/dist/scheduler/types.js.map +1 -1
  111. package/node_modules/@buddi/core/dist/web-settings.d.ts +13 -0
  112. package/node_modules/@buddi/core/dist/web-settings.d.ts.map +1 -1
  113. package/node_modules/@buddi/core/dist/web-settings.js +26 -0
  114. package/node_modules/@buddi/core/dist/web-settings.js.map +1 -1
  115. package/node_modules/@buddi/core/dist/widgets.d.ts +13 -5
  116. package/node_modules/@buddi/core/dist/widgets.d.ts.map +1 -1
  117. package/node_modules/@buddi/core/dist/widgets.js +10 -1
  118. package/node_modules/@buddi/core/dist/widgets.js.map +1 -1
  119. package/node_modules/@buddi/core/migrations/068_notification_action.sql +12 -0
  120. package/node_modules/@buddi/core/migrations/069_schedule_zone_explicit.sql +18 -0
  121. package/node_modules/@buddi/core/migrations/070_offer_handoff.sql +15 -0
  122. package/node_modules/@buddi/core/migrations/071_mission_lifespan.sql +19 -0
  123. package/node_modules/@buddi/gateway/dist/.tsbuildinfo +1 -1
  124. package/node_modules/@buddi/gateway/dist/agents/canvas.d.ts +6 -6
  125. package/node_modules/@buddi/gateway/dist/agents/catalogue-package.d.ts +313 -0
  126. package/node_modules/@buddi/gateway/dist/agents/catalogue-package.d.ts.map +1 -0
  127. package/node_modules/@buddi/gateway/dist/agents/catalogue-package.js +356 -0
  128. package/node_modules/@buddi/gateway/dist/agents/catalogue-package.js.map +1 -0
  129. package/node_modules/@buddi/gateway/dist/agents/learning-digest.d.ts +29 -7
  130. package/node_modules/@buddi/gateway/dist/agents/learning-digest.d.ts.map +1 -1
  131. package/node_modules/@buddi/gateway/dist/agents/learning-digest.js +87 -38
  132. package/node_modules/@buddi/gateway/dist/agents/learning-digest.js.map +1 -1
  133. package/node_modules/@buddi/gateway/dist/agents/owner-tools.d.ts.map +1 -1
  134. package/node_modules/@buddi/gateway/dist/agents/owner-tools.js +11 -1
  135. package/node_modules/@buddi/gateway/dist/agents/owner-tools.js.map +1 -1
  136. package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.d.ts +361 -0
  137. package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.d.ts.map +1 -0
  138. package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.js +1021 -0
  139. package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.js.map +1 -0
  140. package/node_modules/@buddi/gateway/dist/agents/platform-names.d.ts.map +1 -1
  141. package/node_modules/@buddi/gateway/dist/agents/platform-names.js +3 -0
  142. package/node_modules/@buddi/gateway/dist/agents/platform-names.js.map +1 -1
  143. package/node_modules/@buddi/gateway/dist/agents/platform.d.ts +62 -25
  144. package/node_modules/@buddi/gateway/dist/agents/platform.d.ts.map +1 -1
  145. package/node_modules/@buddi/gateway/dist/agents/platform.js +123 -29
  146. package/node_modules/@buddi/gateway/dist/agents/platform.js.map +1 -1
  147. package/node_modules/@buddi/gateway/dist/agents-cli.d.ts +1 -1
  148. package/node_modules/@buddi/gateway/dist/agents-cli.d.ts.map +1 -1
  149. package/node_modules/@buddi/gateway/dist/agents-cli.js +6 -0
  150. package/node_modules/@buddi/gateway/dist/agents-cli.js.map +1 -1
  151. package/node_modules/@buddi/gateway/dist/bootstrap.d.ts.map +1 -1
  152. package/node_modules/@buddi/gateway/dist/bootstrap.js +13 -1
  153. package/node_modules/@buddi/gateway/dist/bootstrap.js.map +1 -1
  154. package/node_modules/@buddi/gateway/dist/index.d.ts +1 -0
  155. package/node_modules/@buddi/gateway/dist/index.d.ts.map +1 -1
  156. package/node_modules/@buddi/gateway/dist/index.js +1 -0
  157. package/node_modules/@buddi/gateway/dist/index.js.map +1 -1
  158. package/node_modules/@buddi/gateway/dist/missions/defaults.d.ts +0 -6
  159. package/node_modules/@buddi/gateway/dist/missions/defaults.d.ts.map +1 -1
  160. package/node_modules/@buddi/gateway/dist/missions/defaults.js +4 -8
  161. package/node_modules/@buddi/gateway/dist/missions/defaults.js.map +1 -1
  162. package/node_modules/@buddi/gateway/dist/missions/execute.d.ts +6 -0
  163. package/node_modules/@buddi/gateway/dist/missions/execute.d.ts.map +1 -1
  164. package/node_modules/@buddi/gateway/dist/missions/execute.js +74 -2
  165. package/node_modules/@buddi/gateway/dist/missions/execute.js.map +1 -1
  166. package/node_modules/@buddi/gateway/dist/missions/reminders.d.ts +10 -0
  167. package/node_modules/@buddi/gateway/dist/missions/reminders.d.ts.map +1 -1
  168. package/node_modules/@buddi/gateway/dist/missions/reminders.js +86 -17
  169. package/node_modules/@buddi/gateway/dist/missions/reminders.js.map +1 -1
  170. package/node_modules/@buddi/gateway/dist/missions/zone-provenance.d.ts +13 -0
  171. package/node_modules/@buddi/gateway/dist/missions/zone-provenance.d.ts.map +1 -0
  172. package/node_modules/@buddi/gateway/dist/missions/zone-provenance.js +31 -0
  173. package/node_modules/@buddi/gateway/dist/missions/zone-provenance.js.map +1 -0
  174. package/node_modules/@buddi/gateway/dist/missions-cli.js +2 -2
  175. package/node_modules/@buddi/gateway/dist/missions-cli.js.map +1 -1
  176. package/node_modules/@buddi/gateway/dist/plugins/load.d.ts.map +1 -1
  177. package/node_modules/@buddi/gateway/dist/plugins/load.js +12 -5
  178. package/node_modules/@buddi/gateway/dist/plugins/load.js.map +1 -1
  179. package/node_modules/@buddi/gateway/dist/plugins/provenance.d.ts +35 -1
  180. package/node_modules/@buddi/gateway/dist/plugins/provenance.d.ts.map +1 -1
  181. package/node_modules/@buddi/gateway/dist/plugins/provenance.js +39 -1
  182. package/node_modules/@buddi/gateway/dist/plugins/provenance.js.map +1 -1
  183. package/node_modules/@buddi/gateway/dist/serve.d.ts.map +1 -1
  184. package/node_modules/@buddi/gateway/dist/serve.js +10 -10
  185. package/node_modules/@buddi/gateway/dist/serve.js.map +1 -1
  186. package/node_modules/@buddi/gateway/dist/surfaces/handoff.d.ts +62 -0
  187. package/node_modules/@buddi/gateway/dist/surfaces/handoff.d.ts.map +1 -0
  188. package/node_modules/@buddi/gateway/dist/surfaces/handoff.js +121 -0
  189. package/node_modules/@buddi/gateway/dist/surfaces/handoff.js.map +1 -0
  190. package/node_modules/@buddi/gateway/dist/surfaces/offered-actions.d.ts +2 -0
  191. package/node_modules/@buddi/gateway/dist/surfaces/offered-actions.d.ts.map +1 -1
  192. package/node_modules/@buddi/gateway/dist/surfaces/offered-actions.js +1 -1
  193. package/node_modules/@buddi/gateway/dist/surfaces/offered-actions.js.map +1 -1
  194. package/node_modules/@buddi/gateway/dist/telegram/channel.d.ts +11 -1
  195. package/node_modules/@buddi/gateway/dist/telegram/channel.d.ts.map +1 -1
  196. package/node_modules/@buddi/gateway/dist/telegram/channel.js +13 -2
  197. package/node_modules/@buddi/gateway/dist/telegram/channel.js.map +1 -1
  198. package/node_modules/@buddi/gateway/dist/telegram/main.d.ts.map +1 -1
  199. package/node_modules/@buddi/gateway/dist/telegram/main.js +7 -1
  200. package/node_modules/@buddi/gateway/dist/telegram/main.js.map +1 -1
  201. package/node_modules/@buddi/gateway/dist/telegram/surface.d.ts +9 -1
  202. package/node_modules/@buddi/gateway/dist/telegram/surface.d.ts.map +1 -1
  203. package/node_modules/@buddi/gateway/dist/telegram/surface.js +58 -6
  204. package/node_modules/@buddi/gateway/dist/telegram/surface.js.map +1 -1
  205. package/node_modules/@buddi/gateway/dist/web/agent-offers.d.ts +0 -30
  206. package/node_modules/@buddi/gateway/dist/web/agent-offers.d.ts.map +1 -1
  207. package/node_modules/@buddi/gateway/dist/web/agent-offers.js +1 -64
  208. package/node_modules/@buddi/gateway/dist/web/agent-offers.js.map +1 -1
  209. package/node_modules/@buddi/gateway/dist/web/api-routes.d.ts +1 -0
  210. package/node_modules/@buddi/gateway/dist/web/api-routes.d.ts.map +1 -1
  211. package/node_modules/@buddi/gateway/dist/web/api-routes.js +126 -7
  212. package/node_modules/@buddi/gateway/dist/web/api-routes.js.map +1 -1
  213. package/node_modules/@buddi/gateway/dist/web/catalogue-source.d.ts +33 -0
  214. package/node_modules/@buddi/gateway/dist/web/catalogue-source.d.ts.map +1 -0
  215. package/node_modules/@buddi/gateway/dist/web/catalogue-source.js +124 -0
  216. package/node_modules/@buddi/gateway/dist/web/catalogue-source.js.map +1 -0
  217. package/node_modules/@buddi/gateway/dist/web/catalogue.d.ts +155 -0
  218. package/node_modules/@buddi/gateway/dist/web/catalogue.d.ts.map +1 -0
  219. package/node_modules/@buddi/gateway/dist/web/catalogue.js +734 -0
  220. package/node_modules/@buddi/gateway/dist/web/catalogue.js.map +1 -0
  221. package/node_modules/@buddi/gateway/dist/web/chat.d.ts +3 -1
  222. package/node_modules/@buddi/gateway/dist/web/chat.d.ts.map +1 -1
  223. package/node_modules/@buddi/gateway/dist/web/chat.js +8 -1
  224. package/node_modules/@buddi/gateway/dist/web/chat.js.map +1 -1
  225. package/node_modules/@buddi/gateway/dist/web/client-key.d.ts +24 -0
  226. package/node_modules/@buddi/gateway/dist/web/client-key.d.ts.map +1 -0
  227. package/node_modules/@buddi/gateway/dist/web/client-key.js +17 -0
  228. package/node_modules/@buddi/gateway/dist/web/client-key.js.map +1 -0
  229. package/node_modules/@buddi/gateway/dist/web/lock.d.ts +5 -1
  230. package/node_modules/@buddi/gateway/dist/web/lock.d.ts.map +1 -1
  231. package/node_modules/@buddi/gateway/dist/web/lock.js +4 -15
  232. package/node_modules/@buddi/gateway/dist/web/lock.js.map +1 -1
  233. package/node_modules/@buddi/gateway/dist/web/market.d.ts +1 -0
  234. package/node_modules/@buddi/gateway/dist/web/market.d.ts.map +1 -1
  235. package/node_modules/@buddi/gateway/dist/web/market.js +6 -0
  236. package/node_modules/@buddi/gateway/dist/web/market.js.map +1 -1
  237. package/node_modules/@buddi/gateway/dist/web/needs-you.d.ts +36 -0
  238. package/node_modules/@buddi/gateway/dist/web/needs-you.d.ts.map +1 -0
  239. package/node_modules/@buddi/gateway/dist/web/needs-you.js +65 -0
  240. package/node_modules/@buddi/gateway/dist/web/needs-you.js.map +1 -0
  241. package/node_modules/@buddi/gateway/dist/web/notifications.d.ts +9 -1
  242. package/node_modules/@buddi/gateway/dist/web/notifications.d.ts.map +1 -1
  243. package/node_modules/@buddi/gateway/dist/web/notifications.js +14 -3
  244. package/node_modules/@buddi/gateway/dist/web/notifications.js.map +1 -1
  245. package/node_modules/@buddi/gateway/dist/web/read.d.ts +27 -1
  246. package/node_modules/@buddi/gateway/dist/web/read.d.ts.map +1 -1
  247. package/node_modules/@buddi/gateway/dist/web/read.js +57 -8
  248. package/node_modules/@buddi/gateway/dist/web/read.js.map +1 -1
  249. package/node_modules/@buddi/gateway/dist/web/server.d.ts.map +1 -1
  250. package/node_modules/@buddi/gateway/dist/web/server.js +165 -13
  251. package/node_modules/@buddi/gateway/dist/web/server.js.map +1 -1
  252. package/node_modules/@buddi/gateway/dist/web/skills.d.ts +120 -0
  253. package/node_modules/@buddi/gateway/dist/web/skills.d.ts.map +1 -0
  254. package/node_modules/@buddi/gateway/dist/web/skills.js +672 -0
  255. package/node_modules/@buddi/gateway/dist/web/skills.js.map +1 -0
  256. package/node_modules/@buddi/gateway/dist/web/take-on.d.ts +35 -1
  257. package/node_modules/@buddi/gateway/dist/web/take-on.d.ts.map +1 -1
  258. package/node_modules/@buddi/gateway/dist/web/take-on.js +76 -51
  259. package/node_modules/@buddi/gateway/dist/web/take-on.js.map +1 -1
  260. package/node_modules/@buddi/gateway/dist/web/write.d.ts +9 -1
  261. package/node_modules/@buddi/gateway/dist/web/write.d.ts.map +1 -1
  262. package/node_modules/@buddi/gateway/dist/web/write.js +39 -2
  263. package/node_modules/@buddi/gateway/dist/web/write.js.map +1 -1
  264. package/node_modules/@buddi/gateway/package.json +0 -1
  265. package/node_modules/@buddi/install/dist/.tsbuildinfo +1 -1
  266. package/node_modules/@buddi/install/dist/doctor-timezone.d.ts +17 -0
  267. package/node_modules/@buddi/install/dist/doctor-timezone.d.ts.map +1 -0
  268. package/node_modules/@buddi/install/dist/doctor-timezone.js +34 -0
  269. package/node_modules/@buddi/install/dist/doctor-timezone.js.map +1 -0
  270. package/node_modules/@buddi/install/dist/launcher.d.ts.map +1 -1
  271. package/node_modules/@buddi/install/dist/launcher.js +3 -0
  272. package/node_modules/@buddi/install/dist/launcher.js.map +1 -1
  273. package/node_modules/@buddi/runtime/dist/.tsbuildinfo +1 -1
  274. package/node_modules/@buddi/tool-artifacts/dist/.tsbuildinfo +1 -1
  275. package/node_modules/@buddi/tool-browser/dist/.tsbuildinfo +1 -1
  276. package/node_modules/@buddi/tool-email/dist/.tsbuildinfo +1 -1
  277. package/node_modules/@buddi/tool-email/dist/needs-you.d.ts +4 -1
  278. package/node_modules/@buddi/tool-email/dist/needs-you.d.ts.map +1 -1
  279. package/node_modules/@buddi/tool-email/dist/needs-you.js +2 -0
  280. package/node_modules/@buddi/tool-email/dist/needs-you.js.map +1 -1
  281. package/node_modules/@buddi/tool-email/migrations/026_attention_filed.sql +89 -0
  282. package/node_modules/@buddi/tool-host/dist/.tsbuildinfo +1 -1
  283. package/node_modules/@buddi/tool-mcp/dist/.tsbuildinfo +1 -1
  284. package/node_modules/@buddi/tool-memory/dist/.tsbuildinfo +1 -1
  285. package/node_modules/@buddi/tool-web/dist/.tsbuildinfo +1 -1
  286. package/package.json +2 -2
  287. package/packages/cli/dist/.tsbuildinfo +1 -1
  288. package/packages/cli/dist/agents-catalogue-cmd.d.ts +50 -0
  289. package/packages/cli/dist/agents-catalogue-cmd.d.ts.map +1 -0
  290. package/packages/cli/dist/agents-catalogue-cmd.js +328 -0
  291. package/packages/cli/dist/agents-catalogue-cmd.js.map +1 -0
  292. package/packages/cli/dist/args.d.ts +5 -0
  293. package/packages/cli/dist/args.d.ts.map +1 -1
  294. package/packages/cli/dist/args.js +8 -0
  295. package/packages/cli/dist/args.js.map +1 -1
  296. package/packages/cli/dist/commands.d.ts.map +1 -1
  297. package/packages/cli/dist/commands.js +63 -1
  298. package/packages/cli/dist/commands.js.map +1 -1
  299. package/packages/cli/dist/doctor-probes.d.ts.map +1 -1
  300. package/packages/cli/dist/doctor-probes.js +4 -11
  301. package/packages/cli/dist/doctor-probes.js.map +1 -1
  302. package/packages/cli/dist/doctor.d.ts +16 -0
  303. package/packages/cli/dist/doctor.d.ts.map +1 -1
  304. package/packages/cli/dist/doctor.js +30 -0
  305. package/packages/cli/dist/doctor.js.map +1 -1
  306. package/packages/cli/dist/main.d.ts.map +1 -1
  307. package/packages/cli/dist/main.js +44 -9
  308. package/packages/cli/dist/main.js.map +1 -1
  309. package/packages/cli/dist/mcp/tools.d.ts.map +1 -1
  310. package/packages/cli/dist/mcp/tools.js +3 -1
  311. package/packages/cli/dist/mcp/tools.js.map +1 -1
  312. package/packages/cli/dist/skills-cmd.d.ts +15 -0
  313. package/packages/cli/dist/skills-cmd.d.ts.map +1 -0
  314. package/packages/cli/dist/skills-cmd.js +54 -0
  315. package/packages/cli/dist/skills-cmd.js.map +1 -0
  316. package/packages/cli/dist/status.d.ts +15 -9
  317. package/packages/cli/dist/status.d.ts.map +1 -1
  318. package/packages/cli/dist/status.js +6 -11
  319. package/packages/cli/dist/status.js.map +1 -1
  320. package/packages/core/dist/.tsbuildinfo +1 -1
  321. package/packages/core/dist/actions/store.d.ts +8 -0
  322. package/packages/core/dist/actions/store.d.ts.map +1 -1
  323. package/packages/core/dist/actions/store.js +13 -0
  324. package/packages/core/dist/actions/store.js.map +1 -1
  325. package/packages/core/dist/agents/catalog.d.ts +11 -3
  326. package/packages/core/dist/agents/catalog.d.ts.map +1 -1
  327. package/packages/core/dist/agents/catalog.js +58 -10
  328. package/packages/core/dist/agents/catalog.js.map +1 -1
  329. package/packages/core/dist/agents/frontmatter.d.ts +1 -1
  330. package/packages/core/dist/agents/frontmatter.d.ts.map +1 -1
  331. package/packages/core/dist/agents/frontmatter.js +1 -1
  332. package/packages/core/dist/agents/frontmatter.js.map +1 -1
  333. package/packages/core/dist/agents/skills.d.ts +29 -3
  334. package/packages/core/dist/agents/skills.d.ts.map +1 -1
  335. package/packages/core/dist/agents/skills.js +49 -2
  336. package/packages/core/dist/agents/skills.js.map +1 -1
  337. package/packages/core/dist/clock-widget.d.ts.map +1 -1
  338. package/packages/core/dist/clock-widget.js +5 -3
  339. package/packages/core/dist/clock-widget.js.map +1 -1
  340. package/packages/core/dist/host/build.d.ts.map +1 -1
  341. package/packages/core/dist/host/build.js +11 -0
  342. package/packages/core/dist/host/build.js.map +1 -1
  343. package/packages/core/dist/host/types.d.ts +7 -0
  344. package/packages/core/dist/host/types.d.ts.map +1 -1
  345. package/packages/core/dist/learning/store.d.ts +7 -0
  346. package/packages/core/dist/learning/store.d.ts.map +1 -1
  347. package/packages/core/dist/learning/store.js +6 -0
  348. package/packages/core/dist/learning/store.js.map +1 -1
  349. package/packages/core/dist/notifications/agent.d.ts +7 -0
  350. package/packages/core/dist/notifications/agent.d.ts.map +1 -1
  351. package/packages/core/dist/notifications/agent.js +2 -0
  352. package/packages/core/dist/notifications/agent.js.map +1 -1
  353. package/packages/core/dist/notifications/index.d.ts +1 -0
  354. package/packages/core/dist/notifications/index.d.ts.map +1 -1
  355. package/packages/core/dist/notifications/index.js +1 -0
  356. package/packages/core/dist/notifications/index.js.map +1 -1
  357. package/packages/core/dist/notifications/needs.d.ts +49 -0
  358. package/packages/core/dist/notifications/needs.d.ts.map +1 -0
  359. package/packages/core/dist/notifications/needs.js +41 -0
  360. package/packages/core/dist/notifications/needs.js.map +1 -0
  361. package/packages/core/dist/notifications/notify.d.ts.map +1 -1
  362. package/packages/core/dist/notifications/notify.js +16 -7
  363. package/packages/core/dist/notifications/notify.js.map +1 -1
  364. package/packages/core/dist/notifications/store.d.ts.map +1 -1
  365. package/packages/core/dist/notifications/store.js +2 -1
  366. package/packages/core/dist/notifications/store.js.map +1 -1
  367. package/packages/core/dist/notifications/types.d.ts +10 -0
  368. package/packages/core/dist/notifications/types.d.ts.map +1 -1
  369. package/packages/core/dist/notifications/types.js.map +1 -1
  370. package/packages/core/dist/offers/store.d.ts.map +1 -1
  371. package/packages/core/dist/offers/store.js +9 -4
  372. package/packages/core/dist/offers/store.js.map +1 -1
  373. package/packages/core/dist/offers/types.d.ts +24 -1
  374. package/packages/core/dist/offers/types.d.ts.map +1 -1
  375. package/packages/core/dist/offers/types.js +23 -1
  376. package/packages/core/dist/offers/types.js.map +1 -1
  377. package/packages/core/dist/owner-timezone.d.ts +20 -22
  378. package/packages/core/dist/owner-timezone.d.ts.map +1 -1
  379. package/packages/core/dist/owner-timezone.js +17 -25
  380. package/packages/core/dist/owner-timezone.js.map +1 -1
  381. package/packages/core/dist/plugin/version.d.ts +1 -1
  382. package/packages/core/dist/plugin/version.js +1 -1
  383. package/packages/core/dist/scheduler/missions.d.ts +86 -11
  384. package/packages/core/dist/scheduler/missions.d.ts.map +1 -1
  385. package/packages/core/dist/scheduler/missions.js +160 -36
  386. package/packages/core/dist/scheduler/missions.js.map +1 -1
  387. package/packages/core/dist/scheduler/runner.d.ts.map +1 -1
  388. package/packages/core/dist/scheduler/runner.js +6 -1
  389. package/packages/core/dist/scheduler/runner.js.map +1 -1
  390. package/packages/core/dist/scheduler/types.d.ts +22 -0
  391. package/packages/core/dist/scheduler/types.d.ts.map +1 -1
  392. package/packages/core/dist/scheduler/types.js +6 -0
  393. package/packages/core/dist/scheduler/types.js.map +1 -1
  394. package/packages/core/dist/web-settings.d.ts +13 -0
  395. package/packages/core/dist/web-settings.d.ts.map +1 -1
  396. package/packages/core/dist/web-settings.js +26 -0
  397. package/packages/core/dist/web-settings.js.map +1 -1
  398. package/packages/core/dist/widgets.d.ts +13 -5
  399. package/packages/core/dist/widgets.d.ts.map +1 -1
  400. package/packages/core/dist/widgets.js +10 -1
  401. package/packages/core/dist/widgets.js.map +1 -1
  402. package/packages/core/migrations/068_notification_action.sql +12 -0
  403. package/packages/core/migrations/069_schedule_zone_explicit.sql +18 -0
  404. package/packages/core/migrations/070_offer_handoff.sql +15 -0
  405. package/packages/core/migrations/071_mission_lifespan.sql +19 -0
  406. package/packages/gateway/dist/.tsbuildinfo +1 -1
  407. package/packages/gateway/dist/agents/canvas.d.ts +6 -6
  408. package/packages/gateway/dist/agents/catalogue-package.d.ts +313 -0
  409. package/packages/gateway/dist/agents/catalogue-package.d.ts.map +1 -0
  410. package/packages/gateway/dist/agents/catalogue-package.js +356 -0
  411. package/packages/gateway/dist/agents/catalogue-package.js.map +1 -0
  412. package/packages/gateway/dist/agents/learning-digest.d.ts +29 -7
  413. package/packages/gateway/dist/agents/learning-digest.d.ts.map +1 -1
  414. package/packages/gateway/dist/agents/learning-digest.js +87 -38
  415. package/packages/gateway/dist/agents/learning-digest.js.map +1 -1
  416. package/packages/gateway/dist/agents/owner-tools.d.ts.map +1 -1
  417. package/packages/gateway/dist/agents/owner-tools.js +11 -1
  418. package/packages/gateway/dist/agents/owner-tools.js.map +1 -1
  419. package/packages/gateway/dist/agents/platform-catalogue.d.ts +361 -0
  420. package/packages/gateway/dist/agents/platform-catalogue.d.ts.map +1 -0
  421. package/packages/gateway/dist/agents/platform-catalogue.js +1021 -0
  422. package/packages/gateway/dist/agents/platform-catalogue.js.map +1 -0
  423. package/packages/gateway/dist/agents/platform-names.d.ts.map +1 -1
  424. package/packages/gateway/dist/agents/platform-names.js +3 -0
  425. package/packages/gateway/dist/agents/platform-names.js.map +1 -1
  426. package/packages/gateway/dist/agents/platform.d.ts +62 -25
  427. package/packages/gateway/dist/agents/platform.d.ts.map +1 -1
  428. package/packages/gateway/dist/agents/platform.js +123 -29
  429. package/packages/gateway/dist/agents/platform.js.map +1 -1
  430. package/packages/gateway/dist/agents-cli.d.ts +1 -1
  431. package/packages/gateway/dist/agents-cli.d.ts.map +1 -1
  432. package/packages/gateway/dist/agents-cli.js +6 -0
  433. package/packages/gateway/dist/agents-cli.js.map +1 -1
  434. package/packages/gateway/dist/bootstrap.d.ts.map +1 -1
  435. package/packages/gateway/dist/bootstrap.js +13 -1
  436. package/packages/gateway/dist/bootstrap.js.map +1 -1
  437. package/packages/gateway/dist/index.d.ts +1 -0
  438. package/packages/gateway/dist/index.d.ts.map +1 -1
  439. package/packages/gateway/dist/index.js +1 -0
  440. package/packages/gateway/dist/index.js.map +1 -1
  441. package/packages/gateway/dist/missions/defaults.d.ts +0 -6
  442. package/packages/gateway/dist/missions/defaults.d.ts.map +1 -1
  443. package/packages/gateway/dist/missions/defaults.js +4 -8
  444. package/packages/gateway/dist/missions/defaults.js.map +1 -1
  445. package/packages/gateway/dist/missions/execute.d.ts +6 -0
  446. package/packages/gateway/dist/missions/execute.d.ts.map +1 -1
  447. package/packages/gateway/dist/missions/execute.js +74 -2
  448. package/packages/gateway/dist/missions/execute.js.map +1 -1
  449. package/packages/gateway/dist/missions/reminders.d.ts +10 -0
  450. package/packages/gateway/dist/missions/reminders.d.ts.map +1 -1
  451. package/packages/gateway/dist/missions/reminders.js +86 -17
  452. package/packages/gateway/dist/missions/reminders.js.map +1 -1
  453. package/packages/gateway/dist/missions/zone-provenance.d.ts +13 -0
  454. package/packages/gateway/dist/missions/zone-provenance.d.ts.map +1 -0
  455. package/packages/gateway/dist/missions/zone-provenance.js +31 -0
  456. package/packages/gateway/dist/missions/zone-provenance.js.map +1 -0
  457. package/packages/gateway/dist/missions-cli.js +2 -2
  458. package/packages/gateway/dist/missions-cli.js.map +1 -1
  459. package/packages/gateway/dist/plugins/load.d.ts.map +1 -1
  460. package/packages/gateway/dist/plugins/load.js +12 -5
  461. package/packages/gateway/dist/plugins/load.js.map +1 -1
  462. package/packages/gateway/dist/plugins/provenance.d.ts +35 -1
  463. package/packages/gateway/dist/plugins/provenance.d.ts.map +1 -1
  464. package/packages/gateway/dist/plugins/provenance.js +39 -1
  465. package/packages/gateway/dist/plugins/provenance.js.map +1 -1
  466. package/packages/gateway/dist/serve.d.ts.map +1 -1
  467. package/packages/gateway/dist/serve.js +10 -10
  468. package/packages/gateway/dist/serve.js.map +1 -1
  469. package/packages/gateway/dist/surfaces/handoff.d.ts +62 -0
  470. package/packages/gateway/dist/surfaces/handoff.d.ts.map +1 -0
  471. package/packages/gateway/dist/surfaces/handoff.js +121 -0
  472. package/packages/gateway/dist/surfaces/handoff.js.map +1 -0
  473. package/packages/gateway/dist/surfaces/offered-actions.d.ts +2 -0
  474. package/packages/gateway/dist/surfaces/offered-actions.d.ts.map +1 -1
  475. package/packages/gateway/dist/surfaces/offered-actions.js +1 -1
  476. package/packages/gateway/dist/surfaces/offered-actions.js.map +1 -1
  477. package/packages/gateway/dist/telegram/channel.d.ts +11 -1
  478. package/packages/gateway/dist/telegram/channel.d.ts.map +1 -1
  479. package/packages/gateway/dist/telegram/channel.js +13 -2
  480. package/packages/gateway/dist/telegram/channel.js.map +1 -1
  481. package/packages/gateway/dist/telegram/main.d.ts.map +1 -1
  482. package/packages/gateway/dist/telegram/main.js +7 -1
  483. package/packages/gateway/dist/telegram/main.js.map +1 -1
  484. package/packages/gateway/dist/telegram/surface.d.ts +9 -1
  485. package/packages/gateway/dist/telegram/surface.d.ts.map +1 -1
  486. package/packages/gateway/dist/telegram/surface.js +58 -6
  487. package/packages/gateway/dist/telegram/surface.js.map +1 -1
  488. package/packages/gateway/dist/web/agent-offers.d.ts +0 -30
  489. package/packages/gateway/dist/web/agent-offers.d.ts.map +1 -1
  490. package/packages/gateway/dist/web/agent-offers.js +1 -64
  491. package/packages/gateway/dist/web/agent-offers.js.map +1 -1
  492. package/packages/gateway/dist/web/api-routes.d.ts +1 -0
  493. package/packages/gateway/dist/web/api-routes.d.ts.map +1 -1
  494. package/packages/gateway/dist/web/api-routes.js +126 -7
  495. package/packages/gateway/dist/web/api-routes.js.map +1 -1
  496. package/packages/gateway/dist/web/catalogue-source.d.ts +33 -0
  497. package/packages/gateway/dist/web/catalogue-source.d.ts.map +1 -0
  498. package/packages/gateway/dist/web/catalogue-source.js +124 -0
  499. package/packages/gateway/dist/web/catalogue-source.js.map +1 -0
  500. package/packages/gateway/dist/web/catalogue.d.ts +155 -0
  501. package/packages/gateway/dist/web/catalogue.d.ts.map +1 -0
  502. package/packages/gateway/dist/web/catalogue.js +734 -0
  503. package/packages/gateway/dist/web/catalogue.js.map +1 -0
  504. package/packages/gateway/dist/web/chat.d.ts +3 -1
  505. package/packages/gateway/dist/web/chat.d.ts.map +1 -1
  506. package/packages/gateway/dist/web/chat.js +8 -1
  507. package/packages/gateway/dist/web/chat.js.map +1 -1
  508. package/packages/gateway/dist/web/client-key.d.ts +24 -0
  509. package/packages/gateway/dist/web/client-key.d.ts.map +1 -0
  510. package/packages/gateway/dist/web/client-key.js +17 -0
  511. package/packages/gateway/dist/web/client-key.js.map +1 -0
  512. package/packages/gateway/dist/web/lock.d.ts +5 -1
  513. package/packages/gateway/dist/web/lock.d.ts.map +1 -1
  514. package/packages/gateway/dist/web/lock.js +4 -15
  515. package/packages/gateway/dist/web/lock.js.map +1 -1
  516. package/packages/gateway/dist/web/market.d.ts +1 -0
  517. package/packages/gateway/dist/web/market.d.ts.map +1 -1
  518. package/packages/gateway/dist/web/market.js +6 -0
  519. package/packages/gateway/dist/web/market.js.map +1 -1
  520. package/packages/gateway/dist/web/needs-you.d.ts +36 -0
  521. package/packages/gateway/dist/web/needs-you.d.ts.map +1 -0
  522. package/packages/gateway/dist/web/needs-you.js +65 -0
  523. package/packages/gateway/dist/web/needs-you.js.map +1 -0
  524. package/packages/gateway/dist/web/notifications.d.ts +9 -1
  525. package/packages/gateway/dist/web/notifications.d.ts.map +1 -1
  526. package/packages/gateway/dist/web/notifications.js +14 -3
  527. package/packages/gateway/dist/web/notifications.js.map +1 -1
  528. package/packages/gateway/dist/web/read.d.ts +27 -1
  529. package/packages/gateway/dist/web/read.d.ts.map +1 -1
  530. package/packages/gateway/dist/web/read.js +57 -8
  531. package/packages/gateway/dist/web/read.js.map +1 -1
  532. package/packages/gateway/dist/web/server.d.ts.map +1 -1
  533. package/packages/gateway/dist/web/server.js +165 -13
  534. package/packages/gateway/dist/web/server.js.map +1 -1
  535. package/packages/gateway/dist/web/skills.d.ts +120 -0
  536. package/packages/gateway/dist/web/skills.d.ts.map +1 -0
  537. package/packages/gateway/dist/web/skills.js +672 -0
  538. package/packages/gateway/dist/web/skills.js.map +1 -0
  539. package/packages/gateway/dist/web/take-on.d.ts +35 -1
  540. package/packages/gateway/dist/web/take-on.d.ts.map +1 -1
  541. package/packages/gateway/dist/web/take-on.js +76 -51
  542. package/packages/gateway/dist/web/take-on.js.map +1 -1
  543. package/packages/gateway/dist/web/write.d.ts +9 -1
  544. package/packages/gateway/dist/web/write.d.ts.map +1 -1
  545. package/packages/gateway/dist/web/write.js +39 -2
  546. package/packages/gateway/dist/web/write.js.map +1 -1
  547. package/packages/gateway/package.json +0 -1
  548. package/packages/install/dist/.tsbuildinfo +1 -1
  549. package/packages/install/dist/doctor-timezone.d.ts +17 -0
  550. package/packages/install/dist/doctor-timezone.d.ts.map +1 -0
  551. package/packages/install/dist/doctor-timezone.js +34 -0
  552. package/packages/install/dist/doctor-timezone.js.map +1 -0
  553. package/packages/install/dist/launcher.d.ts.map +1 -1
  554. package/packages/install/dist/launcher.js +3 -0
  555. package/packages/install/dist/launcher.js.map +1 -1
  556. package/packages/runtime/dist/.tsbuildinfo +1 -1
  557. package/packages/tools/artifacts/dist/.tsbuildinfo +1 -1
  558. package/packages/tools/browser/dist/.tsbuildinfo +1 -1
  559. package/packages/tools/email/dist/.tsbuildinfo +1 -1
  560. package/packages/tools/email/dist/needs-you.d.ts +4 -1
  561. package/packages/tools/email/dist/needs-you.d.ts.map +1 -1
  562. package/packages/tools/email/dist/needs-you.js +2 -0
  563. package/packages/tools/email/dist/needs-you.js.map +1 -1
  564. package/packages/tools/email/migrations/026_attention_filed.sql +89 -0
  565. package/packages/tools/host/dist/.tsbuildinfo +1 -1
  566. package/packages/tools/mcp/dist/.tsbuildinfo +1 -1
  567. package/packages/tools/memory/dist/.tsbuildinfo +1 -1
  568. package/packages/tools/web/dist/.tsbuildinfo +1 -1
  569. package/packages/web/dist/assets/index-BldmgplG.css +1 -0
  570. package/packages/web/dist/assets/index-C8GaSH__.js +132 -0
  571. package/packages/web/dist/assets/{lottie_light-Ls7i1ATS.js → lottie_light-DdwKPR04.js} +1 -1
  572. package/packages/web/dist/build.json +1 -1
  573. package/packages/web/dist/index.html +2 -2
  574. package/packages/web/dist/precache.json +4 -4
  575. package/node_modules/@buddi/gateway/dist/agents/starter-team.d.ts +0 -59
  576. package/node_modules/@buddi/gateway/dist/agents/starter-team.d.ts.map +0 -1
  577. package/node_modules/@buddi/gateway/dist/agents/starter-team.js +0 -156
  578. package/node_modules/@buddi/gateway/dist/agents/starter-team.js.map +0 -1
  579. package/node_modules/@buddi/gateway/src/agents/starter/keeper/agent.md +0 -31
  580. package/node_modules/@buddi/gateway/src/agents/starter/keeper/skills/keeping-a-history.md +0 -22
  581. package/node_modules/@buddi/gateway/src/agents/starter/planner/agent.md +0 -30
  582. package/node_modules/@buddi/gateway/src/agents/starter/planner/skills/holding-a-follow-up.md +0 -17
  583. package/node_modules/@buddi/gateway/src/agents/starter/planner/skills/writing-the-morning-brief.md +0 -32
  584. package/node_modules/@buddi/gateway/src/agents/starter/scout/agent.md +0 -33
  585. package/node_modules/@buddi/gateway/src/agents/starter/scout/skills/answering-with-sources.md +0 -23
  586. package/node_modules/@buddi/gateway/src/agents/starter/scout/skills/the-web-is-evidence.md +0 -25
  587. package/packages/gateway/dist/agents/starter-team.d.ts +0 -59
  588. package/packages/gateway/dist/agents/starter-team.d.ts.map +0 -1
  589. package/packages/gateway/dist/agents/starter-team.js +0 -156
  590. package/packages/gateway/dist/agents/starter-team.js.map +0 -1
  591. package/packages/gateway/src/agents/starter/keeper/agent.md +0 -31
  592. package/packages/gateway/src/agents/starter/keeper/skills/keeping-a-history.md +0 -22
  593. package/packages/gateway/src/agents/starter/planner/agent.md +0 -30
  594. package/packages/gateway/src/agents/starter/planner/skills/holding-a-follow-up.md +0 -17
  595. package/packages/gateway/src/agents/starter/planner/skills/writing-the-morning-brief.md +0 -32
  596. package/packages/gateway/src/agents/starter/scout/agent.md +0 -33
  597. package/packages/gateway/src/agents/starter/scout/skills/answering-with-sources.md +0 -23
  598. package/packages/gateway/src/agents/starter/scout/skills/the-web-is-evidence.md +0 -25
  599. package/packages/web/dist/assets/index-WS4UjGsy.js +0 -129
  600. package/packages/web/dist/assets/index-Zrt_o2UG.css +0 -1
@@ -0,0 +1,356 @@
1
+ /**
2
+ * An agent package from the catalogue (buddi-planning/specs/agent-catalogue.md
3
+ * §3): what one listing in the market's `agents` index is, read strictly.
4
+ *
5
+ * A package is configuration, never code: a persona, a few text skills, a
6
+ * tool grant, missions that arrive off, the picks the install sheet asks, and
7
+ * three example asks. Nothing in it runs. So the reading here is strict on
8
+ * purpose: an unknown field is refused, a field v1 does not allow (`model`,
9
+ * `provider`, `account`, `delegates`, `bundles`, roles) is refused by name, and
10
+ * the integrity the market wrote is recomputed and must match before anything
11
+ * is planned from it.
12
+ *
13
+ * The index carries each package as its `agent.json` plus what the folder
14
+ * holds beside it (buddi-market `scripts/index.mjs`): `persona` (persona.md,
15
+ * inline), `skills` (`[{ file, text }]`, each `skills/<file>`), `avatar`
16
+ * (`{ url, sha256 }`: the picture on withbuddi.com and its hash) and `page`.
17
+ *
18
+ * The integrity (buddi-market `scripts/agents.mjs`, `agentIntegrity`) is
19
+ * `sha256-<base64>` of one canonical JSON document:
20
+ *
21
+ * { "agent.json": <agent.json without integrity and claims>,
22
+ * "persona.md": <its text>,
23
+ * "skills": { "<file>.md": <its text>, … },
24
+ * "avatar.png": "sha256-<base64 of the picture's sha256>" | null }
25
+ *
26
+ * canonical: keys sorted at every depth, no whitespace. Key order and
27
+ * whitespace in the file therefore never move it.
28
+ */
29
+ import { createHash } from 'node:crypto';
30
+ import { z } from 'zod';
31
+ import { HANDLE, HANDLE_MIN, IDLE_ROLLOVERS, KEBAB, parseCron, parseSkillFile, STARTERS_MAX, } from '@buddi/core';
32
+ /** The catalogue's categories, in the order the chips are drawn (§13: Life is the sixth). */
33
+ export const CATALOGUE_CATEGORIES = ['work', 'money', 'home', 'health', 'learning', 'life'];
34
+ /** What the install sheet may ask (§7). */
35
+ export const FILL_KINDS = ['mailbox', 'calendar', 'place', 'time', 'text'];
36
+ /** Requirements that are not plugins (§3 `needs`). */
37
+ export const PACKAGE_NEEDS = ['mailbox', 'image-account'];
38
+ /** As a package writes them: `mailbox?` is a mailbox that makes it better, never one it waits for. */
39
+ export const PACKAGE_NEED_WORDS = ['mailbox', 'mailbox?', 'image-account'];
40
+ /** Sizes the market check holds a package to; buddi holds the index to the same. */
41
+ export const MAX_PERSONA_BYTES = 16 * 1024;
42
+ export const MAX_SKILL_BYTES = 8 * 1024;
43
+ export const MAX_SKILLS = 8;
44
+ /**
45
+ * Tools no package may ask for in v1 (§9), on top of `checkTools`' own rule
46
+ * that no `platform.*` write is grantable. Owner-only tools are left out of
47
+ * every grant by the registry already. The owner may add any of these by hand
48
+ * after the install; a package never carries them.
49
+ */
50
+ export const CATALOGUE_DENIED = [
51
+ 'host.*',
52
+ 'secret.*',
53
+ 'secrets.*',
54
+ 'developer.*',
55
+ 'mcp.*',
56
+ 'agent.delegate',
57
+ 'owner.set_profile',
58
+ 'owner.finish_onboarding',
59
+ 'owner.rename_me',
60
+ 'email.send',
61
+ 'email.add_account',
62
+ 'email.remove_account',
63
+ 'email.set_password',
64
+ ];
65
+ /** Fields a v1 package may not carry, refused by name rather than as "unknown". */
66
+ const NOT_IN_V1 = ['model', 'provider', 'account', 'delegates', 'bundles'];
67
+ const semverLike = z.string().regex(/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(-[0-9A-Za-z.-]+)?$/, 'a semver version, like 1.0.0');
68
+ const kebab = z.string().regex(KEBAB, 'kebab-case');
69
+ const ident = z.string().regex(/^[a-z][a-z0-9-]{1,39}$/, 'lower-case letters, digits and hyphens');
70
+ const rangeMap = z.record(kebab, z.string().min(1).max(64));
71
+ const missionSchema = z
72
+ .object({
73
+ id: ident,
74
+ name: z.string().min(1).max(60),
75
+ cron: z.string().regex(/^\S+ \S+ \S+ \S+ \S+$/, 'five cron fields'),
76
+ prompt: z.string().min(1).max(4000),
77
+ misfirePolicy: z.enum(['replay-all', 'coalesce', 'latest-only', 'skip-after-deadline']).optional(),
78
+ alwaysDeliver: z.boolean().optional(),
79
+ })
80
+ .strict();
81
+ const fillSchema = z
82
+ .object({
83
+ id: ident,
84
+ kind: z.enum(FILL_KINDS),
85
+ label: z.string().min(1).max(80),
86
+ optional: z.boolean().optional(),
87
+ /** For a `time` pick: which mission's hour it sets. */
88
+ mission: ident.optional(),
89
+ })
90
+ .strict();
91
+ /** `agent.json`, strict. */
92
+ export const agentManifestSchema = z
93
+ .object({
94
+ kind: z.literal('agent'),
95
+ name: ident,
96
+ version: semverLike,
97
+ handle: z.string().min(HANDLE_MIN).max(32).regex(HANDLE, 'a handle: lower-case letters, digits and hyphens'),
98
+ title: z.string().min(1).max(40),
99
+ pitch: z.string().min(1).max(120),
100
+ description: z.string().min(1).max(240),
101
+ about: z.string().min(1).max(600),
102
+ category: z.enum(CATALOGUE_CATEGORIES),
103
+ trust: z.literal('by-buddi'),
104
+ author: z.object({ name: z.string().min(1).max(80), url: z.string().regex(/^https:\/\//).optional() }).strict(),
105
+ license: z.string().min(1).max(60),
106
+ buddi: z.string().min(1).max(64),
107
+ requires: rangeMap,
108
+ optional: rangeMap,
109
+ needs: z.array(z.enum(PACKAGE_NEED_WORDS)).max(4),
110
+ tools: z.array(z.string().regex(/^[a-z][a-z0-9_]*\.([a-z][a-z0-9_]*|\*)\??$/, 'a tool name or family glob')).min(1).max(64),
111
+ missions: z.array(missionSchema).max(6),
112
+ fills: z.array(fillSchema).max(6),
113
+ examples: z.array(z.string().min(1).max(120)).max(STARTERS_MAX),
114
+ language: z.enum(['mirror', 'en', 'fr']),
115
+ idleRollover: z.enum(IDLE_ROLLOVERS).optional(),
116
+ /** By-buddi packages may answer for roles (CFO: overview, recap, credit), so role missions and watchers reach them. */
117
+ roles: z.array(z.string().regex(/^[a-z][a-z0-9-]{1,31}$/)).max(6).optional(),
118
+ replaces: z.array(z.string().regex(/^[a-z][a-z0-9-]*\/[a-z][a-z0-9-]*$/, '<source>/<agent id>')).max(4),
119
+ changes: z.string().min(1).max(200),
120
+ integrity: z.string().regex(/^sha256-[A-Za-z0-9+/]{43}=$/, 'sha256-<base64>'),
121
+ claims: z.record(z.string(), z.unknown()).optional(),
122
+ })
123
+ .strict();
124
+ export class PackageRefusal extends Error {
125
+ name = 'PackageRefusal';
126
+ }
127
+ const indexExtras = z
128
+ .object({
129
+ persona: z.string().min(1),
130
+ skills: z.array(z.object({ file: z.string().regex(/^[a-z][a-z0-9-]{1,63}\.md$/), text: z.string() }).strict()).max(MAX_SKILLS).optional(),
131
+ avatar: z
132
+ .object({ url: z.string().url(), sha256: z.string().regex(/^sha256-[A-Za-z0-9+/]{43}=$/) })
133
+ .strict()
134
+ .nullable()
135
+ .optional(),
136
+ page: z.string().url().nullable().optional(),
137
+ })
138
+ .strict();
139
+ const INDEX_EXTRA_KEYS = ['persona', 'skills', 'avatar', 'page'];
140
+ function sha256Hex(text) {
141
+ return createHash('sha256').update(text).digest('hex');
142
+ }
143
+ /** `sha256-<base64>`: how the market writes a hash. */
144
+ export function sriSha256(bytes) {
145
+ return `sha256-${createHash('sha256').update(bytes).digest('base64')}`;
146
+ }
147
+ /** Keys sorted at every depth, no whitespace: the form the integrity hashes. */
148
+ export function canonicalJson(value) {
149
+ if (Array.isArray(value))
150
+ return `[${value.map(canonicalJson).join(',')}]`;
151
+ if (value !== null && typeof value === 'object') {
152
+ const record = value;
153
+ return `{${Object.keys(record)
154
+ .sort()
155
+ .map((k) => `${JSON.stringify(k)}:${canonicalJson(record[k])}`)
156
+ .join(',')}}`;
157
+ }
158
+ return JSON.stringify(value);
159
+ }
160
+ /** The package integrity (see the header): over the manifest, the persona, each skill and the picture's hash. */
161
+ export function packageIntegrity(input) {
162
+ const { integrity: _integrity, claims: _claims, ...manifest } = input.manifest;
163
+ const doc = {
164
+ 'agent.json': manifest,
165
+ 'persona.md': input.persona,
166
+ skills: Object.fromEntries(input.skills.map((skill) => [skill.file, skill.text])),
167
+ 'avatar.png': input.avatarSha256,
168
+ };
169
+ return sriSha256(Buffer.from(canonicalJson(doc), 'utf8'));
170
+ }
171
+ /** The first zod problem, as one sentence with its path. */
172
+ function firstIssue(error) {
173
+ const issue = error.issues[0];
174
+ if (!issue)
175
+ return 'not a package';
176
+ if (issue.code === 'unrecognized_keys')
177
+ return `unknown field ${issue.keys.map((k) => `"${k}"`).join(', ')}`;
178
+ const where = issue.path.length === 0 ? '' : `${issue.path.join('.')}: `;
179
+ return `${where}${issue.message}`;
180
+ }
181
+ /**
182
+ * Read one index listing into a package, or refuse with the reason. Checks the
183
+ * shape, the v1 limits, the sizes, the skills' own frontmatter, the missions'
184
+ * schedules, the fills' references, the `?` tools against `optional`, the
185
+ * denylist, and the integrity.
186
+ */
187
+ export function parseAgentPackage(raw) {
188
+ if (raw === null || typeof raw !== 'object' || Array.isArray(raw))
189
+ throw new PackageRefusal('a listing is an object');
190
+ const record = raw;
191
+ const name = typeof record.name === 'string' ? record.name : '?';
192
+ for (const field of NOT_IN_V1) {
193
+ if (field in record)
194
+ throw new PackageRefusal(`${name}: "${field}" is not allowed in a v1 package`);
195
+ }
196
+ const manifestPart = {};
197
+ const extraPart = {};
198
+ for (const [key, value] of Object.entries(record)) {
199
+ if (INDEX_EXTRA_KEYS.includes(key))
200
+ extraPart[key] = value;
201
+ else
202
+ manifestPart[key] = value;
203
+ }
204
+ const manifest = agentManifestSchema.safeParse(manifestPart);
205
+ if (!manifest.success)
206
+ throw new PackageRefusal(`${name}: ${firstIssue(manifest.error)}`);
207
+ const extras = indexExtras.safeParse(extraPart);
208
+ if (!extras.success)
209
+ throw new PackageRefusal(`${name}: ${firstIssue(extras.error)}`);
210
+ const m = manifest.data;
211
+ const persona = extras.data.persona;
212
+ if (Buffer.byteLength(persona, 'utf8') > MAX_PERSONA_BYTES)
213
+ throw new PackageRefusal(`${name}: persona.md is larger than 16 KB`);
214
+ const skills = (extras.data.skills ?? []).map((skill) => {
215
+ if (Buffer.byteLength(skill.text, 'utf8') > MAX_SKILL_BYTES) {
216
+ throw new PackageRefusal(`${name}: skills/${skill.file} is larger than 8 KB`);
217
+ }
218
+ const fileName = skill.file.slice(0, -'.md'.length);
219
+ let parsed;
220
+ try {
221
+ parsed = parseSkillFile(skill.text, { fileName });
222
+ }
223
+ catch (err) {
224
+ throw new PackageRefusal(`${name}: skills/${skill.file} does not load: ${err instanceof Error ? err.message : String(err)}`);
225
+ }
226
+ return { file: skill.file, text: skill.text, name: parsed.name, description: parsed.description, body: parsed.body };
227
+ });
228
+ if ((m.roles?.length ?? 0) > 0 && m.trust !== 'by-buddi')
229
+ throw new PackageRefusal(`${name}: roles are for by-buddi packages only`);
230
+ if (m.needs.includes('mailbox') && m.needs.includes('mailbox?'))
231
+ throw new PackageRefusal(`${name}: needs names mailbox and mailbox? both`);
232
+ for (const mission of m.missions) {
233
+ if (mission.misfirePolicy === 'skip-after-deadline') {
234
+ throw new PackageRefusal(`${name}: mission "${mission.id}" skips after a deadline it cannot name; buddi takes another misfire policy`);
235
+ }
236
+ try {
237
+ parseCron(mission.cron);
238
+ }
239
+ catch (err) {
240
+ throw new PackageRefusal(`${name}: mission "${mission.id}" has a schedule that does not parse: ${err instanceof Error ? err.message : String(err)}`);
241
+ }
242
+ }
243
+ const missionIds = new Set(m.missions.map((mission) => mission.id));
244
+ if (missionIds.size !== m.missions.length)
245
+ throw new PackageRefusal(`${name}: two missions share an id`);
246
+ const fillIds = new Set(m.fills.map((fill) => fill.id));
247
+ if (fillIds.size !== m.fills.length)
248
+ throw new PackageRefusal(`${name}: two picks share an id`);
249
+ for (const fill of m.fills) {
250
+ if (fill.kind === 'time') {
251
+ if (fill.mission === undefined || !missionIds.has(fill.mission)) {
252
+ throw new PackageRefusal(`${name}: the time pick "${fill.id}" must name one of the package's missions`);
253
+ }
254
+ }
255
+ else if (fill.mission !== undefined) {
256
+ throw new PackageRefusal(`${name}: only a time pick names a mission ("${fill.id}" is ${fill.kind})`);
257
+ }
258
+ }
259
+ for (const tool of m.tools) {
260
+ const trimmed = tool.trim();
261
+ if (trimmed.endsWith('?')) {
262
+ const family = trimmed.slice(0, -1).split('.')[0] ?? '';
263
+ // A mail tool holds only if provided when the mailbox is optional (`mailbox?`).
264
+ if (family === 'email' && m.needs.includes('mailbox?'))
265
+ continue;
266
+ if (!(family in m.optional)) {
267
+ throw new PackageRefusal(`${name}: "${trimmed}" holds only if provided, so its plugin "${family}" must be in "optional"`);
268
+ }
269
+ }
270
+ }
271
+ const denied = deniedTools(m.tools, []);
272
+ if (denied.length > 0)
273
+ throw new PackageRefusal(`${name}: a package may not ask for ${denied.join(', ')}`);
274
+ for (const plugin of Object.keys(m.requires)) {
275
+ if (plugin in m.optional)
276
+ throw new PackageRefusal(`${name}: "${plugin}" is both required and optional`);
277
+ }
278
+ const avatar = extras.data.avatar?.url ?? null;
279
+ const avatarSha256 = extras.data.avatar?.sha256 ?? null;
280
+ const computed = packageIntegrity({ manifest: manifestPart, persona, skills, avatarSha256 });
281
+ if (computed !== m.integrity) {
282
+ throw new PackageRefusal(`${name}: what withbuddi.com lists does not hash to its integrity (${m.integrity}), so buddi will not use it`);
283
+ }
284
+ return { manifest: m, persona, skills, avatar, avatarSha256, page: extras.data.page ?? null };
285
+ }
286
+ function globMatches(pattern, name) {
287
+ if (!pattern.includes('*'))
288
+ return pattern === name;
289
+ const re = new RegExp(`^${pattern.split('*').map((part) => part.replace(/[.+^${}()|[\]\\?]/g, '\\$&')).join('.*')}$`);
290
+ return re.test(name);
291
+ }
292
+ /**
293
+ * The tools the denylist refuses: any resolved name it covers, and any
294
+ * declared entry that names a denied family or tool even while nothing here
295
+ * provides it (`host.*?`).
296
+ */
297
+ export function deniedTools(declared, resolved) {
298
+ const out = new Set();
299
+ for (const name of resolved)
300
+ if (CATALOGUE_DENIED.some((deny) => globMatches(deny, name)))
301
+ out.add(name);
302
+ for (const entry of declared) {
303
+ const pattern = entry.trim().replace(/\?$/, '');
304
+ for (const deny of CATALOGUE_DENIED) {
305
+ const denyFamily = deny.endsWith('.*') ? deny.slice(0, -2) : null;
306
+ const entryFamily = pattern.endsWith('.*') ? pattern.slice(0, -2) : null;
307
+ if (globMatches(deny, pattern) ||
308
+ (denyFamily !== null && (pattern === denyFamily || pattern.startsWith(`${denyFamily}.`))) ||
309
+ // `email.*` would reach `email.send`: refused as the family it is.
310
+ (entryFamily !== null && !deny.includes('*') && deny.startsWith(`${entryFamily}.`))) {
311
+ out.add(pattern);
312
+ }
313
+ }
314
+ }
315
+ return [...out];
316
+ }
317
+ /** `17:00` → [17, 0]; null when it is not a time of day. */
318
+ export function parseClock(value) {
319
+ const match = /^([01]?\d|2[0-3]):([0-5]\d)$/.exec(value.trim());
320
+ return match ? [Number(match[1]), Number(match[2])] : null;
321
+ }
322
+ /** The hour a cron fires at, as HH:MM, when it names exactly one. */
323
+ export function cronClock(cron) {
324
+ const [minute, hour] = cron.trim().split(/\s+/);
325
+ if (!minute || !hour || !/^\d+$/.test(minute) || !/^\d+$/.test(hour))
326
+ return null;
327
+ return `${hour.padStart(2, '0')}:${minute.padStart(2, '0')}`;
328
+ }
329
+ /** The cron with its minute and hour moved to `clock`; unchanged when either is not a plain number. */
330
+ export function cronAt(cron, clock) {
331
+ const parts = cron.trim().split(/\s+/);
332
+ const at = parseClock(clock);
333
+ if (!at || parts.length !== 5 || cronClock(cron) === null)
334
+ return cron;
335
+ return [String(at[1]), String(at[0]), ...parts.slice(2)].join(' ');
336
+ }
337
+ /**
338
+ * The persona as written into the agent file: the package's verbatim, then
339
+ * "## For this owner" built from the picks and nothing else (§7). A time pick
340
+ * moves its mission instead; an empty pick says nothing. The owner's name,
341
+ * timezone, language and places are never written: every agent is told them
342
+ * on every turn.
343
+ */
344
+ export function composePackagePersona(persona, picks) {
345
+ const lines = picks
346
+ .filter((pick) => pick.kind !== 'time' && pick.value.trim() !== '')
347
+ .map((pick) => `- ${pick.label.trim().replace(/[?:.\s]+$/, '')}: ${pick.value.trim()}`);
348
+ if (lines.length === 0)
349
+ return persona.trim();
350
+ return `${persona.trim()}\n\n## For this owner\n\n${lines.join('\n')}`;
351
+ }
352
+ /** sha256 hex of a text, for the sidecar's file hash. */
353
+ export function fileHash(text) {
354
+ return sha256Hex(text);
355
+ }
356
+ //# sourceMappingURL=catalogue-package.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalogue-package.js","sourceRoot":"","sources":["../../src/agents/catalogue-package.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,11 @@
1
1
  /**
2
2
  * The weekly learning digest (docs/learning.md §5).
3
3
  *
4
- * Once a week, one message on Telegram and a card on Home: what buddi learned
5
- * (memory notes added, skills, rules and changes kept: counts and up to three
6
- * names each), what it proposes (the open count, with a link to Settings →
7
- * Proposals), and what it stopped doing (how many times a plugin's gate acted
8
- * on a rule the owner kept, from the plugins that record it; "not measured
9
- * yet" when none does, never a number made up here).
4
+ * Once a week, one message on Telegram and a card on Home, in the owner's
5
+ * words (`digestSummary`): what buddi remembered, the rules and skills kept
6
+ * (counts, with a place to look — never raw rule names), the suggestions
7
+ * waiting, and how often kept rules stepped in, from the plugins that count it.
8
+ * A kind with nothing in it is left out rather than said as "nothing".
10
9
  *
11
10
  * It rides the mission scheduler as the `learning-digest` mission, so the
12
11
  * owner's day and hour are an ordinary schedule revision, a missed Sunday
@@ -87,9 +86,31 @@ export declare function composeDigest(pool: Pool, input: {
87
86
  manifests: readonly PluginManifest[];
88
87
  nameOf?: ((agentId: string) => string | undefined) | undefined;
89
88
  }): Promise<LearningDigest>;
89
+ /** One line of the digest, in the owner's words, with at most one place to go. */
90
+ export interface DigestLine {
91
+ /** Stable per kind: memory, rules, skills, changes, open, handled. */
92
+ key: string;
93
+ text: string;
94
+ link?: {
95
+ label: string;
96
+ route: string;
97
+ };
98
+ }
99
+ /** Where the Home card's links go: dashboard routes, never a plugin's own page. */
100
+ export declare const DIGEST_ROUTES: {
101
+ readonly memory: "#/settings/memory";
102
+ readonly proposals: "#/settings/proposals";
103
+ };
104
+ /**
105
+ * The digest as a person would say it: one line per kind with a count and one
106
+ * place to look, never a list of raw rule names or a note cut mid-sentence.
107
+ * A kind with nothing in it has no line; "nothing was waiting" is not news.
108
+ */
109
+ export declare function digestSummary(d: LearningDigest): DigestLine[];
90
110
  /**
91
111
  * The digest as one plain-text message: no markdown, since Telegram shows the
92
- * characters, and no question, since nobody answers a digest.
112
+ * characters, and no question, since nobody answers a digest. The same lines
113
+ * as the Home card, with the suggestions' link spelled out.
93
114
  */
94
115
  export declare function digestText(d: LearningDigest, proposalsUrl: string): string;
95
116
  export interface DigestRunResult {
@@ -115,5 +136,6 @@ export declare function runLearningDigest(deps: {
115
136
  /** The latest digest, for the Home card, or null before the first one. */
116
137
  export declare function latestDigest(pool: Pool): Promise<(LearningDigest & {
117
138
  delivered: boolean;
139
+ summary: DigestLine[];
118
140
  }) | null>;
119
141
  //# sourceMappingURL=learning-digest.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"learning-digest.d.ts","sourceRoot":"","sources":["../../src/agents/learning-digest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"learning-digest.d.ts","sourceRoot":"","sources":["../../src/agents/learning-digest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AACH,OAAO,EAQL,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,cAAc,EAEpB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAE/B,eAAO,MAAM,kBAAkB,oBAAoB,CAAC;AACpD,+FAA+F;AAC/F,eAAO,MAAM,sBAAsB,UAAU,CAAC;AAC9C,eAAO,MAAM,qBAAqB,oBAAoB,CAAC;AAEvD,gDAAgD;AAChD,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAGtC,eAAO,MAAM,SAAS,yFAA0F,CAAC;AAEjH,gEAAgE;AAChE,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAQlF;AAYD;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAWrF;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,8EAA8E;IAC9E,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CASzG;AAED,qFAAqF;AACrF,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,IAAI,EACV,KAAK,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EACpC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,IAAI,CAAC,CAQf;AAMD,MAAM,WAAW,cAAc;IAC7B,kEAAkE;IAClE,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,SAAS,CAAC;IAClB,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,EAAE,SAAS,CAAC;IACnB,2CAA2C;IAC3C,IAAI,EAAE,MAAM,CAAC;IACb;;;OAGG;IACH,OAAO,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,GAAG,IAAI,CAAC;IACpE;;;;OAIG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,gFAAgF;IAChF,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAOD,+EAA+E;AAC/E,wBAAgB,WAAW,CAAC,CAAC,EAAE,cAAc,GAAG,OAAO,CAGtD;AAwBD,wBAAsB,aAAa,CACjC,IAAI,EAAE,IAAI,EACV,KAAK,EAAE;IAAE,GAAG,EAAE,IAAI,CAAC;IAAC,SAAS,EAAE,SAAS,cAAc,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC,GAAG,SAAS,CAAA;CAAE,GACzH,OAAO,CAAC,cAAc,CAAC,CAuCzB;AAED,kFAAkF;AAClF,MAAM,WAAW,UAAU;IACzB,sEAAsE;IACtE,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CACzC;AAED,mFAAmF;AACnF,eAAO,MAAM,aAAa;;;CAGhB,CAAC;AAmBX;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,cAAc,GAAG,UAAU,EAAE,CA2C7D;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAO1E;AAmBD,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,cAAc,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAC5C,IAAI,EAAE,IAAI,CAAC;IACX,GAAG,EAAE,IAAI,CAAC;IACV,SAAS,EAAE,SAAS,cAAc,EAAE,CAAC;IACrC,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC,GAAG,SAAS,CAAC;CAChE,GAAG,OAAO,CAAC,eAAe,CAAC,CAqB3B;AAED,0EAA0E;AAC1E,wBAAsB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,cAAc,GAAG;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,UAAU,EAAE,CAAA;CAAE,CAAC,GAAG,IAAI,CAAC,CAO/H"}
@@ -1,12 +1,11 @@
1
1
  /**
2
2
  * The weekly learning digest (docs/learning.md §5).
3
3
  *
4
- * Once a week, one message on Telegram and a card on Home: what buddi learned
5
- * (memory notes added, skills, rules and changes kept: counts and up to three
6
- * names each), what it proposes (the open count, with a link to Settings →
7
- * Proposals), and what it stopped doing (how many times a plugin's gate acted
8
- * on a rule the owner kept, from the plugins that record it; "not measured
9
- * yet" when none does, never a number made up here).
4
+ * Once a week, one message on Telegram and a card on Home, in the owner's
5
+ * words (`digestSummary`): what buddi remembered, the rules and skills kept
6
+ * (counts, with a place to look — never raw rule names), the suggestions
7
+ * waiting, and how often kept rules stepped in, from the plugins that count it.
8
+ * A kind with nothing in it is left out rather than said as "nothing".
10
9
  *
11
10
  * It rides the mission scheduler as the `learning-digest` mission, so the
12
11
  * owner's day and hour are an ordinary schedule revision, a missed Sunday
@@ -63,6 +62,7 @@ export async function ensureDigestMission(pool, timezone) {
63
62
  await setSchedule(pool, LEARNING_DIGEST_ID, {
64
63
  cron: digestCron(DEFAULT_DIGEST_DAY, DEFAULT_DIGEST_HOUR),
65
64
  timezone,
65
+ timezoneExplicit: false,
66
66
  misfirePolicy: 'coalesce',
67
67
  });
68
68
  }
@@ -86,9 +86,9 @@ export async function setDigestSchedule(pool, input, timezone) {
86
86
  await ensureDigestMission(pool, timezone);
87
87
  const spec = await getActiveSchedule(pool, LEARNING_DIGEST_ID);
88
88
  const cron = digestCron(input.day, input.hour);
89
- if (spec && spec.cron === cron && spec.timezone === timezone)
89
+ if (spec && spec.cron === cron && spec.timezone === timezone && !spec.timezoneExplicit)
90
90
  return;
91
- await setSchedule(pool, LEARNING_DIGEST_ID, { cron, timezone, misfirePolicy: 'coalesce' });
91
+ await setSchedule(pool, LEARNING_DIGEST_ID, { cron, timezone, timezoneExplicit: false, misfirePolicy: 'coalesce' });
92
92
  }
93
93
  /** An agent as the digest names it: its display name, else its id. */
94
94
  function agentName(d, id) {
@@ -160,41 +160,90 @@ export async function composeDigest(pool, input) {
160
160
  ...(Object.keys(agentNames).length > 0 ? { agentNames } : {}),
161
161
  };
162
162
  }
163
- function tallyPhrase(t, one, many) {
164
- if (t.count === 0)
165
- return null;
166
- const names = t.names.length > 0 ? ` (${t.names.join('; ')}${t.count > t.names.length ? '; …' : ''})` : '';
167
- return `${t.count} ${t.count === 1 ? one : many}${names}`;
163
+ /** Where the Home card's links go: dashboard routes, never a plugin's own page. */
164
+ export const DIGEST_ROUTES = {
165
+ memory: '#/settings/memory',
166
+ proposals: '#/settings/proposals',
167
+ };
168
+ /** Actions that only make mail (or anything) quieter: "Quieted N senders". */
169
+ const QUIET_ACTIONS = new Set(['ignore', 'archive', 'mute']);
170
+ function counted(n, one, many = `${one}s`) {
171
+ return `${n} ${n === 1 ? one : many}`;
172
+ }
173
+ /** "A, B and C", or "A, B and 4 more" when there were more than named. */
174
+ function namesList(names, count) {
175
+ const shown = names.map((n) => n.trim()).filter((n) => n !== '' && !n.endsWith('…'));
176
+ if (shown.length === 0)
177
+ return '';
178
+ const more = count - shown.length;
179
+ if (more > 0)
180
+ return `${shown.join(', ')} and ${more} more`;
181
+ if (shown.length === 1)
182
+ return shown[0];
183
+ return `${shown.slice(0, -1).join(', ')} and ${shown[shown.length - 1]}`;
184
+ }
185
+ /**
186
+ * The digest as a person would say it: one line per kind with a count and one
187
+ * place to look, never a list of raw rule names or a note cut mid-sentence.
188
+ * A kind with nothing in it has no line; "nothing was waiting" is not news.
189
+ */
190
+ export function digestSummary(d) {
191
+ const lines = [];
192
+ if (d.memory.count > 0) {
193
+ lines.push({ key: 'memory', text: `Remembered ${counted(d.memory.count, 'thing')}`, link: { label: 'See memory', route: DIGEST_ROUTES.memory } });
194
+ }
195
+ if (d.rules.count > 0) {
196
+ const actions = d.rules.actions ?? {};
197
+ const plugins = Object.keys(d.rules.plugins ?? {});
198
+ const quiet = Object.keys(actions).length > 0 && Object.keys(actions).every((a) => QUIET_ACTIONS.has(a));
199
+ const route = plugins.length === 1 ? `${DIGEST_ROUTES.proposals}?plugin=${encodeURIComponent(plugins[0])}` : DIGEST_ROUTES.proposals;
200
+ lines.push({
201
+ key: 'rules',
202
+ text: quiet ? `Quieted ${counted(d.rules.count, 'sender')}` : `Kept ${counted(d.rules.count, 'new rule')}`,
203
+ link: { label: 'See rules', route },
204
+ });
205
+ }
206
+ if (d.skills.count > 0) {
207
+ const names = namesList(d.skills.names, d.skills.count);
208
+ lines.push({ key: 'skills', text: `Kept ${counted(d.skills.count, 'skill')}${names ? `: ${names}` : ''}` });
209
+ }
210
+ if (d.changes.count > 0) {
211
+ lines.push({
212
+ key: 'changes',
213
+ text: `Changed how your agents work ${d.changes.count === 1 ? 'once' : `${d.changes.count} times`}`,
214
+ link: { label: 'See what changed', route: DIGEST_ROUTES.proposals },
215
+ });
216
+ }
217
+ if (d.open > 0) {
218
+ lines.push({
219
+ key: 'open',
220
+ text: `${counted(d.open, 'suggestion')} ${d.open === 1 ? 'waits' : 'wait'} for you`,
221
+ link: { label: 'Review', route: DIGEST_ROUTES.proposals },
222
+ });
223
+ }
224
+ if (d.stopped && d.stopped.total > 0) {
225
+ const acting = Object.entries(d.stopped.byPlugin).filter(([, n]) => n > 0).map(([plugin]) => plugin);
226
+ const mailOnly = acting.length === 1 && acting[0] === 'email';
227
+ lines.push({
228
+ key: 'handled',
229
+ text: mailOnly ? `Your rules handled ${counted(d.stopped.total, 'email')}` : `Your rules stepped in ${d.stopped.total === 1 ? 'once' : `${d.stopped.total} times`}`,
230
+ });
231
+ }
232
+ return lines;
168
233
  }
169
234
  /**
170
235
  * The digest as one plain-text message: no markdown, since Telegram shows the
171
- * characters, and no question, since nobody answers a digest.
236
+ * characters, and no question, since nobody answers a digest. The same lines
237
+ * as the Home card, with the suggestions' link spelled out.
172
238
  */
173
239
  export function digestText(d, proposalsUrl) {
174
- const learned = [
175
- tallyPhrase(d.memory, 'memory note', 'memory notes'),
176
- tallyPhrase(d.skills, 'skill kept', 'skills kept'),
177
- tallyPhrase(d.rules, 'rule kept', 'rules kept'),
178
- tallyPhrase(d.changes, 'change to an agent kept', 'changes to agents kept'),
179
- ].filter((p) => p !== null);
180
240
  const lines = ['What buddi learned this week.'];
181
- lines.push(learned.length > 0 ? `Learned: ${learned.join(', ')}.` : 'Learned: nothing new.');
182
- lines.push(d.open > 0
183
- ? `Proposes: ${d.open} ${d.open === 1 ? 'proposal waits' : 'proposals wait'} for you to keep or discard: ${proposalsUrl}`
184
- : 'Proposes: nothing is waiting for you.');
185
- if (d.stopped === null) {
186
- lines.push('Stopped doing: not measured yet.');
187
- }
188
- else {
189
- const by = Object.entries(d.stopped.byPlugin)
190
- .filter(([, n]) => n > 0)
191
- .map(([plugin, n]) => `${plugin} ${n}`);
192
- lines.push(d.stopped.total > 0
193
- ? `Stopped doing: rules you kept acted ${d.stopped.total} ${d.stopped.total === 1 ? 'time' : 'times'} (${by.join(', ')}).`
194
- : 'Stopped doing: no rule you kept acted this week.');
195
- }
196
- const reactions = feedbackLines(d);
197
- lines.push(...reactions);
241
+ const summary = digestSummary(d);
242
+ if (summary.length === 0)
243
+ lines.push('Nothing new this week.');
244
+ for (const line of summary)
245
+ lines.push(line.key === 'open' ? `${line.text}: ${proposalsUrl}` : `${line.text}.`);
246
+ lines.push(...feedbackLines(d));
198
247
  return lines.join('\n');
199
248
  }
200
249
  /** "Your reactions: …" and the 👎 notes, or nothing when there were none. */
@@ -249,6 +298,6 @@ export async function runLearningDigest(deps) {
249
298
  export async function latestDigest(pool) {
250
299
  const { rows } = await pool.query(`select payload from core.events where kind = $1 order by created_at desc, id desc limit 1`, [LEARNING_DIGEST_EVENT]);
251
300
  const payload = rows[0]?.payload;
252
- return payload ? { ...payload, delivered: payload.delivered === true } : null;
301
+ return payload ? { ...payload, delivered: payload.delivered === true, summary: digestSummary(payload) } : null;
253
302
  }
254
303
  //# sourceMappingURL=learning-digest.js.map