@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.
- package/README.md +58 -368
- package/examples/agents/concierge/agent.md +10 -2
- package/extension/manifest.json +2 -2
- package/node_modules/@buddi/cli/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/cli/dist/agents-catalogue-cmd.d.ts +50 -0
- package/node_modules/@buddi/cli/dist/agents-catalogue-cmd.d.ts.map +1 -0
- package/node_modules/@buddi/cli/dist/agents-catalogue-cmd.js +328 -0
- package/node_modules/@buddi/cli/dist/agents-catalogue-cmd.js.map +1 -0
- package/node_modules/@buddi/cli/dist/args.d.ts +5 -0
- package/node_modules/@buddi/cli/dist/args.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/args.js +8 -0
- package/node_modules/@buddi/cli/dist/args.js.map +1 -1
- package/node_modules/@buddi/cli/dist/commands.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/commands.js +63 -1
- package/node_modules/@buddi/cli/dist/commands.js.map +1 -1
- package/node_modules/@buddi/cli/dist/doctor-probes.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/doctor-probes.js +4 -11
- package/node_modules/@buddi/cli/dist/doctor-probes.js.map +1 -1
- package/node_modules/@buddi/cli/dist/doctor.d.ts +16 -0
- package/node_modules/@buddi/cli/dist/doctor.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/doctor.js +30 -0
- package/node_modules/@buddi/cli/dist/doctor.js.map +1 -1
- package/node_modules/@buddi/cli/dist/main.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/main.js +44 -9
- package/node_modules/@buddi/cli/dist/main.js.map +1 -1
- package/node_modules/@buddi/cli/dist/mcp/tools.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/mcp/tools.js +3 -1
- package/node_modules/@buddi/cli/dist/mcp/tools.js.map +1 -1
- package/node_modules/@buddi/cli/dist/skills-cmd.d.ts +15 -0
- package/node_modules/@buddi/cli/dist/skills-cmd.d.ts.map +1 -0
- package/node_modules/@buddi/cli/dist/skills-cmd.js +54 -0
- package/node_modules/@buddi/cli/dist/skills-cmd.js.map +1 -0
- package/node_modules/@buddi/cli/dist/status.d.ts +15 -9
- package/node_modules/@buddi/cli/dist/status.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/status.js +6 -11
- package/node_modules/@buddi/cli/dist/status.js.map +1 -1
- package/node_modules/@buddi/core/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/core/dist/actions/store.d.ts +8 -0
- package/node_modules/@buddi/core/dist/actions/store.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/actions/store.js +13 -0
- package/node_modules/@buddi/core/dist/actions/store.js.map +1 -1
- package/node_modules/@buddi/core/dist/agents/catalog.d.ts +11 -3
- package/node_modules/@buddi/core/dist/agents/catalog.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/agents/catalog.js +58 -10
- package/node_modules/@buddi/core/dist/agents/catalog.js.map +1 -1
- package/node_modules/@buddi/core/dist/agents/frontmatter.d.ts +1 -1
- package/node_modules/@buddi/core/dist/agents/frontmatter.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/agents/frontmatter.js +1 -1
- package/node_modules/@buddi/core/dist/agents/frontmatter.js.map +1 -1
- package/node_modules/@buddi/core/dist/agents/skills.d.ts +29 -3
- package/node_modules/@buddi/core/dist/agents/skills.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/agents/skills.js +49 -2
- package/node_modules/@buddi/core/dist/agents/skills.js.map +1 -1
- package/node_modules/@buddi/core/dist/clock-widget.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/clock-widget.js +5 -3
- package/node_modules/@buddi/core/dist/clock-widget.js.map +1 -1
- package/node_modules/@buddi/core/dist/host/build.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/host/build.js +11 -0
- package/node_modules/@buddi/core/dist/host/build.js.map +1 -1
- package/node_modules/@buddi/core/dist/host/types.d.ts +7 -0
- package/node_modules/@buddi/core/dist/host/types.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/learning/store.d.ts +7 -0
- package/node_modules/@buddi/core/dist/learning/store.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/learning/store.js +6 -0
- package/node_modules/@buddi/core/dist/learning/store.js.map +1 -1
- package/node_modules/@buddi/core/dist/notifications/agent.d.ts +7 -0
- package/node_modules/@buddi/core/dist/notifications/agent.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/notifications/agent.js +2 -0
- package/node_modules/@buddi/core/dist/notifications/agent.js.map +1 -1
- package/node_modules/@buddi/core/dist/notifications/index.d.ts +1 -0
- package/node_modules/@buddi/core/dist/notifications/index.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/notifications/index.js +1 -0
- package/node_modules/@buddi/core/dist/notifications/index.js.map +1 -1
- package/node_modules/@buddi/core/dist/notifications/needs.d.ts +49 -0
- package/node_modules/@buddi/core/dist/notifications/needs.d.ts.map +1 -0
- package/node_modules/@buddi/core/dist/notifications/needs.js +41 -0
- package/node_modules/@buddi/core/dist/notifications/needs.js.map +1 -0
- package/node_modules/@buddi/core/dist/notifications/notify.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/notifications/notify.js +16 -7
- package/node_modules/@buddi/core/dist/notifications/notify.js.map +1 -1
- package/node_modules/@buddi/core/dist/notifications/store.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/notifications/store.js +2 -1
- package/node_modules/@buddi/core/dist/notifications/store.js.map +1 -1
- package/node_modules/@buddi/core/dist/notifications/types.d.ts +10 -0
- package/node_modules/@buddi/core/dist/notifications/types.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/notifications/types.js.map +1 -1
- package/node_modules/@buddi/core/dist/offers/store.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/offers/store.js +9 -4
- package/node_modules/@buddi/core/dist/offers/store.js.map +1 -1
- package/node_modules/@buddi/core/dist/offers/types.d.ts +24 -1
- package/node_modules/@buddi/core/dist/offers/types.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/offers/types.js +23 -1
- package/node_modules/@buddi/core/dist/offers/types.js.map +1 -1
- package/node_modules/@buddi/core/dist/owner-timezone.d.ts +20 -22
- package/node_modules/@buddi/core/dist/owner-timezone.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/owner-timezone.js +17 -25
- package/node_modules/@buddi/core/dist/owner-timezone.js.map +1 -1
- package/node_modules/@buddi/core/dist/plugin/version.d.ts +1 -1
- package/node_modules/@buddi/core/dist/plugin/version.js +1 -1
- package/node_modules/@buddi/core/dist/scheduler/missions.d.ts +86 -11
- package/node_modules/@buddi/core/dist/scheduler/missions.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/scheduler/missions.js +160 -36
- package/node_modules/@buddi/core/dist/scheduler/missions.js.map +1 -1
- package/node_modules/@buddi/core/dist/scheduler/runner.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/scheduler/runner.js +6 -1
- package/node_modules/@buddi/core/dist/scheduler/runner.js.map +1 -1
- package/node_modules/@buddi/core/dist/scheduler/types.d.ts +22 -0
- package/node_modules/@buddi/core/dist/scheduler/types.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/scheduler/types.js +6 -0
- package/node_modules/@buddi/core/dist/scheduler/types.js.map +1 -1
- package/node_modules/@buddi/core/dist/web-settings.d.ts +13 -0
- package/node_modules/@buddi/core/dist/web-settings.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/web-settings.js +26 -0
- package/node_modules/@buddi/core/dist/web-settings.js.map +1 -1
- package/node_modules/@buddi/core/dist/widgets.d.ts +13 -5
- package/node_modules/@buddi/core/dist/widgets.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/widgets.js +10 -1
- package/node_modules/@buddi/core/dist/widgets.js.map +1 -1
- package/node_modules/@buddi/core/migrations/068_notification_action.sql +12 -0
- package/node_modules/@buddi/core/migrations/069_schedule_zone_explicit.sql +18 -0
- package/node_modules/@buddi/core/migrations/070_offer_handoff.sql +15 -0
- package/node_modules/@buddi/core/migrations/071_mission_lifespan.sql +19 -0
- package/node_modules/@buddi/gateway/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/gateway/dist/agents/canvas.d.ts +6 -6
- package/node_modules/@buddi/gateway/dist/agents/catalogue-package.d.ts +313 -0
- package/node_modules/@buddi/gateway/dist/agents/catalogue-package.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/agents/catalogue-package.js +356 -0
- package/node_modules/@buddi/gateway/dist/agents/catalogue-package.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/agents/learning-digest.d.ts +29 -7
- package/node_modules/@buddi/gateway/dist/agents/learning-digest.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/learning-digest.js +87 -38
- package/node_modules/@buddi/gateway/dist/agents/learning-digest.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/owner-tools.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/owner-tools.js +11 -1
- package/node_modules/@buddi/gateway/dist/agents/owner-tools.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.d.ts +361 -0
- package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.js +1021 -0
- package/node_modules/@buddi/gateway/dist/agents/platform-catalogue.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/agents/platform-names.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/platform-names.js +3 -0
- package/node_modules/@buddi/gateway/dist/agents/platform-names.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/platform.d.ts +62 -25
- package/node_modules/@buddi/gateway/dist/agents/platform.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/platform.js +123 -29
- package/node_modules/@buddi/gateway/dist/agents/platform.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents-cli.d.ts +1 -1
- package/node_modules/@buddi/gateway/dist/agents-cli.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents-cli.js +6 -0
- package/node_modules/@buddi/gateway/dist/agents-cli.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/bootstrap.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/bootstrap.js +13 -1
- package/node_modules/@buddi/gateway/dist/bootstrap.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/index.d.ts +1 -0
- package/node_modules/@buddi/gateway/dist/index.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/index.js +1 -0
- package/node_modules/@buddi/gateway/dist/index.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/defaults.d.ts +0 -6
- package/node_modules/@buddi/gateway/dist/missions/defaults.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/defaults.js +4 -8
- package/node_modules/@buddi/gateway/dist/missions/defaults.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/execute.d.ts +6 -0
- package/node_modules/@buddi/gateway/dist/missions/execute.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/execute.js +74 -2
- package/node_modules/@buddi/gateway/dist/missions/execute.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/reminders.d.ts +10 -0
- package/node_modules/@buddi/gateway/dist/missions/reminders.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/reminders.js +86 -17
- package/node_modules/@buddi/gateway/dist/missions/reminders.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/zone-provenance.d.ts +13 -0
- package/node_modules/@buddi/gateway/dist/missions/zone-provenance.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/missions/zone-provenance.js +31 -0
- package/node_modules/@buddi/gateway/dist/missions/zone-provenance.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/missions-cli.js +2 -2
- package/node_modules/@buddi/gateway/dist/missions-cli.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins/load.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins/load.js +12 -5
- package/node_modules/@buddi/gateway/dist/plugins/load.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins/provenance.d.ts +35 -1
- package/node_modules/@buddi/gateway/dist/plugins/provenance.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins/provenance.js +39 -1
- package/node_modules/@buddi/gateway/dist/plugins/provenance.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/serve.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/serve.js +10 -10
- package/node_modules/@buddi/gateway/dist/serve.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/surfaces/handoff.d.ts +62 -0
- package/node_modules/@buddi/gateway/dist/surfaces/handoff.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/surfaces/handoff.js +121 -0
- package/node_modules/@buddi/gateway/dist/surfaces/handoff.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/surfaces/offered-actions.d.ts +2 -0
- package/node_modules/@buddi/gateway/dist/surfaces/offered-actions.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/surfaces/offered-actions.js +1 -1
- package/node_modules/@buddi/gateway/dist/surfaces/offered-actions.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/channel.d.ts +11 -1
- package/node_modules/@buddi/gateway/dist/telegram/channel.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/channel.js +13 -2
- package/node_modules/@buddi/gateway/dist/telegram/channel.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/main.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/main.js +7 -1
- package/node_modules/@buddi/gateway/dist/telegram/main.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/surface.d.ts +9 -1
- package/node_modules/@buddi/gateway/dist/telegram/surface.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/surface.js +58 -6
- package/node_modules/@buddi/gateway/dist/telegram/surface.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/agent-offers.d.ts +0 -30
- package/node_modules/@buddi/gateway/dist/web/agent-offers.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/agent-offers.js +1 -64
- package/node_modules/@buddi/gateway/dist/web/agent-offers.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/api-routes.d.ts +1 -0
- package/node_modules/@buddi/gateway/dist/web/api-routes.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/api-routes.js +126 -7
- package/node_modules/@buddi/gateway/dist/web/api-routes.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/catalogue-source.d.ts +33 -0
- package/node_modules/@buddi/gateway/dist/web/catalogue-source.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/catalogue-source.js +124 -0
- package/node_modules/@buddi/gateway/dist/web/catalogue-source.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/catalogue.d.ts +155 -0
- package/node_modules/@buddi/gateway/dist/web/catalogue.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/catalogue.js +734 -0
- package/node_modules/@buddi/gateway/dist/web/catalogue.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/chat.d.ts +3 -1
- package/node_modules/@buddi/gateway/dist/web/chat.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/chat.js +8 -1
- package/node_modules/@buddi/gateway/dist/web/chat.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/client-key.d.ts +24 -0
- package/node_modules/@buddi/gateway/dist/web/client-key.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/client-key.js +17 -0
- package/node_modules/@buddi/gateway/dist/web/client-key.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/lock.d.ts +5 -1
- package/node_modules/@buddi/gateway/dist/web/lock.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/lock.js +4 -15
- package/node_modules/@buddi/gateway/dist/web/lock.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/market.d.ts +1 -0
- package/node_modules/@buddi/gateway/dist/web/market.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/market.js +6 -0
- package/node_modules/@buddi/gateway/dist/web/market.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/needs-you.d.ts +36 -0
- package/node_modules/@buddi/gateway/dist/web/needs-you.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/needs-you.js +65 -0
- package/node_modules/@buddi/gateway/dist/web/needs-you.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/notifications.d.ts +9 -1
- package/node_modules/@buddi/gateway/dist/web/notifications.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/notifications.js +14 -3
- package/node_modules/@buddi/gateway/dist/web/notifications.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/read.d.ts +27 -1
- package/node_modules/@buddi/gateway/dist/web/read.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/read.js +57 -8
- package/node_modules/@buddi/gateway/dist/web/read.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/server.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/server.js +165 -13
- package/node_modules/@buddi/gateway/dist/web/server.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/skills.d.ts +120 -0
- package/node_modules/@buddi/gateway/dist/web/skills.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/skills.js +672 -0
- package/node_modules/@buddi/gateway/dist/web/skills.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/take-on.d.ts +35 -1
- package/node_modules/@buddi/gateway/dist/web/take-on.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/take-on.js +76 -51
- package/node_modules/@buddi/gateway/dist/web/take-on.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/write.d.ts +9 -1
- package/node_modules/@buddi/gateway/dist/web/write.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/write.js +39 -2
- package/node_modules/@buddi/gateway/dist/web/write.js.map +1 -1
- package/node_modules/@buddi/gateway/package.json +0 -1
- package/node_modules/@buddi/install/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/install/dist/doctor-timezone.d.ts +17 -0
- package/node_modules/@buddi/install/dist/doctor-timezone.d.ts.map +1 -0
- package/node_modules/@buddi/install/dist/doctor-timezone.js +34 -0
- package/node_modules/@buddi/install/dist/doctor-timezone.js.map +1 -0
- package/node_modules/@buddi/install/dist/launcher.d.ts.map +1 -1
- package/node_modules/@buddi/install/dist/launcher.js +3 -0
- package/node_modules/@buddi/install/dist/launcher.js.map +1 -1
- package/node_modules/@buddi/runtime/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-artifacts/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-browser/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-email/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-email/dist/needs-you.d.ts +4 -1
- package/node_modules/@buddi/tool-email/dist/needs-you.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/needs-you.js +2 -0
- package/node_modules/@buddi/tool-email/dist/needs-you.js.map +1 -1
- package/node_modules/@buddi/tool-email/migrations/026_attention_filed.sql +89 -0
- package/node_modules/@buddi/tool-host/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-mcp/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-memory/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-web/dist/.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/packages/cli/dist/.tsbuildinfo +1 -1
- package/packages/cli/dist/agents-catalogue-cmd.d.ts +50 -0
- package/packages/cli/dist/agents-catalogue-cmd.d.ts.map +1 -0
- package/packages/cli/dist/agents-catalogue-cmd.js +328 -0
- package/packages/cli/dist/agents-catalogue-cmd.js.map +1 -0
- package/packages/cli/dist/args.d.ts +5 -0
- package/packages/cli/dist/args.d.ts.map +1 -1
- package/packages/cli/dist/args.js +8 -0
- package/packages/cli/dist/args.js.map +1 -1
- package/packages/cli/dist/commands.d.ts.map +1 -1
- package/packages/cli/dist/commands.js +63 -1
- package/packages/cli/dist/commands.js.map +1 -1
- package/packages/cli/dist/doctor-probes.d.ts.map +1 -1
- package/packages/cli/dist/doctor-probes.js +4 -11
- package/packages/cli/dist/doctor-probes.js.map +1 -1
- package/packages/cli/dist/doctor.d.ts +16 -0
- package/packages/cli/dist/doctor.d.ts.map +1 -1
- package/packages/cli/dist/doctor.js +30 -0
- package/packages/cli/dist/doctor.js.map +1 -1
- package/packages/cli/dist/main.d.ts.map +1 -1
- package/packages/cli/dist/main.js +44 -9
- package/packages/cli/dist/main.js.map +1 -1
- package/packages/cli/dist/mcp/tools.d.ts.map +1 -1
- package/packages/cli/dist/mcp/tools.js +3 -1
- package/packages/cli/dist/mcp/tools.js.map +1 -1
- package/packages/cli/dist/skills-cmd.d.ts +15 -0
- package/packages/cli/dist/skills-cmd.d.ts.map +1 -0
- package/packages/cli/dist/skills-cmd.js +54 -0
- package/packages/cli/dist/skills-cmd.js.map +1 -0
- package/packages/cli/dist/status.d.ts +15 -9
- package/packages/cli/dist/status.d.ts.map +1 -1
- package/packages/cli/dist/status.js +6 -11
- package/packages/cli/dist/status.js.map +1 -1
- package/packages/core/dist/.tsbuildinfo +1 -1
- package/packages/core/dist/actions/store.d.ts +8 -0
- package/packages/core/dist/actions/store.d.ts.map +1 -1
- package/packages/core/dist/actions/store.js +13 -0
- package/packages/core/dist/actions/store.js.map +1 -1
- package/packages/core/dist/agents/catalog.d.ts +11 -3
- package/packages/core/dist/agents/catalog.d.ts.map +1 -1
- package/packages/core/dist/agents/catalog.js +58 -10
- package/packages/core/dist/agents/catalog.js.map +1 -1
- package/packages/core/dist/agents/frontmatter.d.ts +1 -1
- package/packages/core/dist/agents/frontmatter.d.ts.map +1 -1
- package/packages/core/dist/agents/frontmatter.js +1 -1
- package/packages/core/dist/agents/frontmatter.js.map +1 -1
- package/packages/core/dist/agents/skills.d.ts +29 -3
- package/packages/core/dist/agents/skills.d.ts.map +1 -1
- package/packages/core/dist/agents/skills.js +49 -2
- package/packages/core/dist/agents/skills.js.map +1 -1
- package/packages/core/dist/clock-widget.d.ts.map +1 -1
- package/packages/core/dist/clock-widget.js +5 -3
- package/packages/core/dist/clock-widget.js.map +1 -1
- package/packages/core/dist/host/build.d.ts.map +1 -1
- package/packages/core/dist/host/build.js +11 -0
- package/packages/core/dist/host/build.js.map +1 -1
- package/packages/core/dist/host/types.d.ts +7 -0
- package/packages/core/dist/host/types.d.ts.map +1 -1
- package/packages/core/dist/learning/store.d.ts +7 -0
- package/packages/core/dist/learning/store.d.ts.map +1 -1
- package/packages/core/dist/learning/store.js +6 -0
- package/packages/core/dist/learning/store.js.map +1 -1
- package/packages/core/dist/notifications/agent.d.ts +7 -0
- package/packages/core/dist/notifications/agent.d.ts.map +1 -1
- package/packages/core/dist/notifications/agent.js +2 -0
- package/packages/core/dist/notifications/agent.js.map +1 -1
- package/packages/core/dist/notifications/index.d.ts +1 -0
- package/packages/core/dist/notifications/index.d.ts.map +1 -1
- package/packages/core/dist/notifications/index.js +1 -0
- package/packages/core/dist/notifications/index.js.map +1 -1
- package/packages/core/dist/notifications/needs.d.ts +49 -0
- package/packages/core/dist/notifications/needs.d.ts.map +1 -0
- package/packages/core/dist/notifications/needs.js +41 -0
- package/packages/core/dist/notifications/needs.js.map +1 -0
- package/packages/core/dist/notifications/notify.d.ts.map +1 -1
- package/packages/core/dist/notifications/notify.js +16 -7
- package/packages/core/dist/notifications/notify.js.map +1 -1
- package/packages/core/dist/notifications/store.d.ts.map +1 -1
- package/packages/core/dist/notifications/store.js +2 -1
- package/packages/core/dist/notifications/store.js.map +1 -1
- package/packages/core/dist/notifications/types.d.ts +10 -0
- package/packages/core/dist/notifications/types.d.ts.map +1 -1
- package/packages/core/dist/notifications/types.js.map +1 -1
- package/packages/core/dist/offers/store.d.ts.map +1 -1
- package/packages/core/dist/offers/store.js +9 -4
- package/packages/core/dist/offers/store.js.map +1 -1
- package/packages/core/dist/offers/types.d.ts +24 -1
- package/packages/core/dist/offers/types.d.ts.map +1 -1
- package/packages/core/dist/offers/types.js +23 -1
- package/packages/core/dist/offers/types.js.map +1 -1
- package/packages/core/dist/owner-timezone.d.ts +20 -22
- package/packages/core/dist/owner-timezone.d.ts.map +1 -1
- package/packages/core/dist/owner-timezone.js +17 -25
- package/packages/core/dist/owner-timezone.js.map +1 -1
- package/packages/core/dist/plugin/version.d.ts +1 -1
- package/packages/core/dist/plugin/version.js +1 -1
- package/packages/core/dist/scheduler/missions.d.ts +86 -11
- package/packages/core/dist/scheduler/missions.d.ts.map +1 -1
- package/packages/core/dist/scheduler/missions.js +160 -36
- package/packages/core/dist/scheduler/missions.js.map +1 -1
- package/packages/core/dist/scheduler/runner.d.ts.map +1 -1
- package/packages/core/dist/scheduler/runner.js +6 -1
- package/packages/core/dist/scheduler/runner.js.map +1 -1
- package/packages/core/dist/scheduler/types.d.ts +22 -0
- package/packages/core/dist/scheduler/types.d.ts.map +1 -1
- package/packages/core/dist/scheduler/types.js +6 -0
- package/packages/core/dist/scheduler/types.js.map +1 -1
- package/packages/core/dist/web-settings.d.ts +13 -0
- package/packages/core/dist/web-settings.d.ts.map +1 -1
- package/packages/core/dist/web-settings.js +26 -0
- package/packages/core/dist/web-settings.js.map +1 -1
- package/packages/core/dist/widgets.d.ts +13 -5
- package/packages/core/dist/widgets.d.ts.map +1 -1
- package/packages/core/dist/widgets.js +10 -1
- package/packages/core/dist/widgets.js.map +1 -1
- package/packages/core/migrations/068_notification_action.sql +12 -0
- package/packages/core/migrations/069_schedule_zone_explicit.sql +18 -0
- package/packages/core/migrations/070_offer_handoff.sql +15 -0
- package/packages/core/migrations/071_mission_lifespan.sql +19 -0
- package/packages/gateway/dist/.tsbuildinfo +1 -1
- package/packages/gateway/dist/agents/canvas.d.ts +6 -6
- package/packages/gateway/dist/agents/catalogue-package.d.ts +313 -0
- package/packages/gateway/dist/agents/catalogue-package.d.ts.map +1 -0
- package/packages/gateway/dist/agents/catalogue-package.js +356 -0
- package/packages/gateway/dist/agents/catalogue-package.js.map +1 -0
- package/packages/gateway/dist/agents/learning-digest.d.ts +29 -7
- package/packages/gateway/dist/agents/learning-digest.d.ts.map +1 -1
- package/packages/gateway/dist/agents/learning-digest.js +87 -38
- package/packages/gateway/dist/agents/learning-digest.js.map +1 -1
- package/packages/gateway/dist/agents/owner-tools.d.ts.map +1 -1
- package/packages/gateway/dist/agents/owner-tools.js +11 -1
- package/packages/gateway/dist/agents/owner-tools.js.map +1 -1
- package/packages/gateway/dist/agents/platform-catalogue.d.ts +361 -0
- package/packages/gateway/dist/agents/platform-catalogue.d.ts.map +1 -0
- package/packages/gateway/dist/agents/platform-catalogue.js +1021 -0
- package/packages/gateway/dist/agents/platform-catalogue.js.map +1 -0
- package/packages/gateway/dist/agents/platform-names.d.ts.map +1 -1
- package/packages/gateway/dist/agents/platform-names.js +3 -0
- package/packages/gateway/dist/agents/platform-names.js.map +1 -1
- package/packages/gateway/dist/agents/platform.d.ts +62 -25
- package/packages/gateway/dist/agents/platform.d.ts.map +1 -1
- package/packages/gateway/dist/agents/platform.js +123 -29
- package/packages/gateway/dist/agents/platform.js.map +1 -1
- package/packages/gateway/dist/agents-cli.d.ts +1 -1
- package/packages/gateway/dist/agents-cli.d.ts.map +1 -1
- package/packages/gateway/dist/agents-cli.js +6 -0
- package/packages/gateway/dist/agents-cli.js.map +1 -1
- package/packages/gateway/dist/bootstrap.d.ts.map +1 -1
- package/packages/gateway/dist/bootstrap.js +13 -1
- package/packages/gateway/dist/bootstrap.js.map +1 -1
- package/packages/gateway/dist/index.d.ts +1 -0
- package/packages/gateway/dist/index.d.ts.map +1 -1
- package/packages/gateway/dist/index.js +1 -0
- package/packages/gateway/dist/index.js.map +1 -1
- package/packages/gateway/dist/missions/defaults.d.ts +0 -6
- package/packages/gateway/dist/missions/defaults.d.ts.map +1 -1
- package/packages/gateway/dist/missions/defaults.js +4 -8
- package/packages/gateway/dist/missions/defaults.js.map +1 -1
- package/packages/gateway/dist/missions/execute.d.ts +6 -0
- package/packages/gateway/dist/missions/execute.d.ts.map +1 -1
- package/packages/gateway/dist/missions/execute.js +74 -2
- package/packages/gateway/dist/missions/execute.js.map +1 -1
- package/packages/gateway/dist/missions/reminders.d.ts +10 -0
- package/packages/gateway/dist/missions/reminders.d.ts.map +1 -1
- package/packages/gateway/dist/missions/reminders.js +86 -17
- package/packages/gateway/dist/missions/reminders.js.map +1 -1
- package/packages/gateway/dist/missions/zone-provenance.d.ts +13 -0
- package/packages/gateway/dist/missions/zone-provenance.d.ts.map +1 -0
- package/packages/gateway/dist/missions/zone-provenance.js +31 -0
- package/packages/gateway/dist/missions/zone-provenance.js.map +1 -0
- package/packages/gateway/dist/missions-cli.js +2 -2
- package/packages/gateway/dist/missions-cli.js.map +1 -1
- package/packages/gateway/dist/plugins/load.d.ts.map +1 -1
- package/packages/gateway/dist/plugins/load.js +12 -5
- package/packages/gateway/dist/plugins/load.js.map +1 -1
- package/packages/gateway/dist/plugins/provenance.d.ts +35 -1
- package/packages/gateway/dist/plugins/provenance.d.ts.map +1 -1
- package/packages/gateway/dist/plugins/provenance.js +39 -1
- package/packages/gateway/dist/plugins/provenance.js.map +1 -1
- package/packages/gateway/dist/serve.d.ts.map +1 -1
- package/packages/gateway/dist/serve.js +10 -10
- package/packages/gateway/dist/serve.js.map +1 -1
- package/packages/gateway/dist/surfaces/handoff.d.ts +62 -0
- package/packages/gateway/dist/surfaces/handoff.d.ts.map +1 -0
- package/packages/gateway/dist/surfaces/handoff.js +121 -0
- package/packages/gateway/dist/surfaces/handoff.js.map +1 -0
- package/packages/gateway/dist/surfaces/offered-actions.d.ts +2 -0
- package/packages/gateway/dist/surfaces/offered-actions.d.ts.map +1 -1
- package/packages/gateway/dist/surfaces/offered-actions.js +1 -1
- package/packages/gateway/dist/surfaces/offered-actions.js.map +1 -1
- package/packages/gateway/dist/telegram/channel.d.ts +11 -1
- package/packages/gateway/dist/telegram/channel.d.ts.map +1 -1
- package/packages/gateway/dist/telegram/channel.js +13 -2
- package/packages/gateway/dist/telegram/channel.js.map +1 -1
- package/packages/gateway/dist/telegram/main.d.ts.map +1 -1
- package/packages/gateway/dist/telegram/main.js +7 -1
- package/packages/gateway/dist/telegram/main.js.map +1 -1
- package/packages/gateway/dist/telegram/surface.d.ts +9 -1
- package/packages/gateway/dist/telegram/surface.d.ts.map +1 -1
- package/packages/gateway/dist/telegram/surface.js +58 -6
- package/packages/gateway/dist/telegram/surface.js.map +1 -1
- package/packages/gateway/dist/web/agent-offers.d.ts +0 -30
- package/packages/gateway/dist/web/agent-offers.d.ts.map +1 -1
- package/packages/gateway/dist/web/agent-offers.js +1 -64
- package/packages/gateway/dist/web/agent-offers.js.map +1 -1
- package/packages/gateway/dist/web/api-routes.d.ts +1 -0
- package/packages/gateway/dist/web/api-routes.d.ts.map +1 -1
- package/packages/gateway/dist/web/api-routes.js +126 -7
- package/packages/gateway/dist/web/api-routes.js.map +1 -1
- package/packages/gateway/dist/web/catalogue-source.d.ts +33 -0
- package/packages/gateway/dist/web/catalogue-source.d.ts.map +1 -0
- package/packages/gateway/dist/web/catalogue-source.js +124 -0
- package/packages/gateway/dist/web/catalogue-source.js.map +1 -0
- package/packages/gateway/dist/web/catalogue.d.ts +155 -0
- package/packages/gateway/dist/web/catalogue.d.ts.map +1 -0
- package/packages/gateway/dist/web/catalogue.js +734 -0
- package/packages/gateway/dist/web/catalogue.js.map +1 -0
- package/packages/gateway/dist/web/chat.d.ts +3 -1
- package/packages/gateway/dist/web/chat.d.ts.map +1 -1
- package/packages/gateway/dist/web/chat.js +8 -1
- package/packages/gateway/dist/web/chat.js.map +1 -1
- package/packages/gateway/dist/web/client-key.d.ts +24 -0
- package/packages/gateway/dist/web/client-key.d.ts.map +1 -0
- package/packages/gateway/dist/web/client-key.js +17 -0
- package/packages/gateway/dist/web/client-key.js.map +1 -0
- package/packages/gateway/dist/web/lock.d.ts +5 -1
- package/packages/gateway/dist/web/lock.d.ts.map +1 -1
- package/packages/gateway/dist/web/lock.js +4 -15
- package/packages/gateway/dist/web/lock.js.map +1 -1
- package/packages/gateway/dist/web/market.d.ts +1 -0
- package/packages/gateway/dist/web/market.d.ts.map +1 -1
- package/packages/gateway/dist/web/market.js +6 -0
- package/packages/gateway/dist/web/market.js.map +1 -1
- package/packages/gateway/dist/web/needs-you.d.ts +36 -0
- package/packages/gateway/dist/web/needs-you.d.ts.map +1 -0
- package/packages/gateway/dist/web/needs-you.js +65 -0
- package/packages/gateway/dist/web/needs-you.js.map +1 -0
- package/packages/gateway/dist/web/notifications.d.ts +9 -1
- package/packages/gateway/dist/web/notifications.d.ts.map +1 -1
- package/packages/gateway/dist/web/notifications.js +14 -3
- package/packages/gateway/dist/web/notifications.js.map +1 -1
- package/packages/gateway/dist/web/read.d.ts +27 -1
- package/packages/gateway/dist/web/read.d.ts.map +1 -1
- package/packages/gateway/dist/web/read.js +57 -8
- package/packages/gateway/dist/web/read.js.map +1 -1
- package/packages/gateway/dist/web/server.d.ts.map +1 -1
- package/packages/gateway/dist/web/server.js +165 -13
- package/packages/gateway/dist/web/server.js.map +1 -1
- package/packages/gateway/dist/web/skills.d.ts +120 -0
- package/packages/gateway/dist/web/skills.d.ts.map +1 -0
- package/packages/gateway/dist/web/skills.js +672 -0
- package/packages/gateway/dist/web/skills.js.map +1 -0
- package/packages/gateway/dist/web/take-on.d.ts +35 -1
- package/packages/gateway/dist/web/take-on.d.ts.map +1 -1
- package/packages/gateway/dist/web/take-on.js +76 -51
- package/packages/gateway/dist/web/take-on.js.map +1 -1
- package/packages/gateway/dist/web/write.d.ts +9 -1
- package/packages/gateway/dist/web/write.d.ts.map +1 -1
- package/packages/gateway/dist/web/write.js +39 -2
- package/packages/gateway/dist/web/write.js.map +1 -1
- package/packages/gateway/package.json +0 -1
- package/packages/install/dist/.tsbuildinfo +1 -1
- package/packages/install/dist/doctor-timezone.d.ts +17 -0
- package/packages/install/dist/doctor-timezone.d.ts.map +1 -0
- package/packages/install/dist/doctor-timezone.js +34 -0
- package/packages/install/dist/doctor-timezone.js.map +1 -0
- package/packages/install/dist/launcher.d.ts.map +1 -1
- package/packages/install/dist/launcher.js +3 -0
- package/packages/install/dist/launcher.js.map +1 -1
- package/packages/runtime/dist/.tsbuildinfo +1 -1
- package/packages/tools/artifacts/dist/.tsbuildinfo +1 -1
- package/packages/tools/browser/dist/.tsbuildinfo +1 -1
- package/packages/tools/email/dist/.tsbuildinfo +1 -1
- package/packages/tools/email/dist/needs-you.d.ts +4 -1
- package/packages/tools/email/dist/needs-you.d.ts.map +1 -1
- package/packages/tools/email/dist/needs-you.js +2 -0
- package/packages/tools/email/dist/needs-you.js.map +1 -1
- package/packages/tools/email/migrations/026_attention_filed.sql +89 -0
- package/packages/tools/host/dist/.tsbuildinfo +1 -1
- package/packages/tools/mcp/dist/.tsbuildinfo +1 -1
- package/packages/tools/memory/dist/.tsbuildinfo +1 -1
- package/packages/tools/web/dist/.tsbuildinfo +1 -1
- package/packages/web/dist/assets/index-BldmgplG.css +1 -0
- package/packages/web/dist/assets/index-C8GaSH__.js +132 -0
- package/packages/web/dist/assets/{lottie_light-Ls7i1ATS.js → lottie_light-DdwKPR04.js} +1 -1
- package/packages/web/dist/build.json +1 -1
- package/packages/web/dist/index.html +2 -2
- package/packages/web/dist/precache.json +4 -4
- package/node_modules/@buddi/gateway/dist/agents/starter-team.d.ts +0 -59
- package/node_modules/@buddi/gateway/dist/agents/starter-team.d.ts.map +0 -1
- package/node_modules/@buddi/gateway/dist/agents/starter-team.js +0 -156
- package/node_modules/@buddi/gateway/dist/agents/starter-team.js.map +0 -1
- package/node_modules/@buddi/gateway/src/agents/starter/keeper/agent.md +0 -31
- package/node_modules/@buddi/gateway/src/agents/starter/keeper/skills/keeping-a-history.md +0 -22
- package/node_modules/@buddi/gateway/src/agents/starter/planner/agent.md +0 -30
- package/node_modules/@buddi/gateway/src/agents/starter/planner/skills/holding-a-follow-up.md +0 -17
- package/node_modules/@buddi/gateway/src/agents/starter/planner/skills/writing-the-morning-brief.md +0 -32
- package/node_modules/@buddi/gateway/src/agents/starter/scout/agent.md +0 -33
- package/node_modules/@buddi/gateway/src/agents/starter/scout/skills/answering-with-sources.md +0 -23
- package/node_modules/@buddi/gateway/src/agents/starter/scout/skills/the-web-is-evidence.md +0 -25
- package/packages/gateway/dist/agents/starter-team.d.ts +0 -59
- package/packages/gateway/dist/agents/starter-team.d.ts.map +0 -1
- package/packages/gateway/dist/agents/starter-team.js +0 -156
- package/packages/gateway/dist/agents/starter-team.js.map +0 -1
- package/packages/gateway/src/agents/starter/keeper/agent.md +0 -31
- package/packages/gateway/src/agents/starter/keeper/skills/keeping-a-history.md +0 -22
- package/packages/gateway/src/agents/starter/planner/agent.md +0 -30
- package/packages/gateway/src/agents/starter/planner/skills/holding-a-follow-up.md +0 -17
- package/packages/gateway/src/agents/starter/planner/skills/writing-the-morning-brief.md +0 -32
- package/packages/gateway/src/agents/starter/scout/agent.md +0 -33
- package/packages/gateway/src/agents/starter/scout/skills/answering-with-sources.md +0 -23
- package/packages/gateway/src/agents/starter/scout/skills/the-web-is-evidence.md +0 -25
- package/packages/web/dist/assets/index-WS4UjGsy.js +0 -129
- 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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,MAAM,EACN,UAAU,EACV,cAAc,EACd,KAAK,EACL,SAAS,EACT,cAAc,EACd,YAAY,GACb,MAAM,aAAa,CAAC;AAErB,6FAA6F;AAC7F,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAU,CAAC;AAGrG,2CAA2C;AAC3C,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAU,CAAC;AAGpF,sDAAsD;AACtD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,eAAe,CAAU,CAAC;AACnE,sGAAsG;AACtG,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,SAAS,EAAE,UAAU,EAAE,eAAe,CAAU,CAAC;AAGpF,oFAAoF;AACpF,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,GAAG,IAAI,CAAC;AAC3C,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAG,IAAI,CAAC;AACxC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC;AAE5B;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAsB;IACjD,QAAQ;IACR,UAAU;IACV,WAAW;IACX,aAAa;IACb,OAAO;IACP,gBAAgB;IAChB,mBAAmB;IACnB,yBAAyB;IACzB,iBAAiB;IACjB,YAAY;IACZ,mBAAmB;IACnB,sBAAsB;IACtB,oBAAoB;CACrB,CAAC;AAEF,mFAAmF;AACnF,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,CAAU,CAAC;AAEpF,MAAM,UAAU,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,8DAA8D,EAAE,8BAA8B,CAAC,CAAC;AACpI,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;AACpD,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,wBAAwB,EAAE,wCAAwC,CAAC,CAAC;AACnG,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAE5D,MAAM,aAAa,GAAG,CAAC;KACpB,MAAM,CAAC;IACN,EAAE,EAAE,KAAK;IACT,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IAC/B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,uBAAuB,EAAE,kBAAkB,CAAC;IACnE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;IACnC,aAAa,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,qBAAqB,CAAC,CAAC,CAAC,QAAQ,EAAE;IAClG,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CACtC,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,UAAU,GAAG,CAAC;KACjB,MAAM,CAAC;IACN,EAAE,EAAE,KAAK;IACT,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;IACxB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IAChC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAChC,uDAAuD;IACvD,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE;CAC1B,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,4BAA4B;AAC5B,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC;KACjC,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;IACxB,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,UAAU;IACnB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,kDAAkD,CAAC;IAC5G,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IAChC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACjC,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACvC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACjC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC;IACtC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC;IAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;IAC/G,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IAClC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IAChC,QAAQ,EAAE,QAAQ;IAClB,QAAQ,EAAE,QAAQ;IAClB,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,4CAA4C,EAAE,4BAA4B,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;IAC3H,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACjC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC;IAC/D,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IACxC,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE;IAC/C,uHAAuH;IACvH,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC5E,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,oCAAoC,EAAE,qBAAqB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvG,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACnC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,6BAA6B,EAAE,iBAAiB,CAAC;IAC7E,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CACrD,CAAC;KACD,MAAM,EAAE,CAAC;AA6BZ,MAAM,OAAO,cAAe,SAAQ,KAAK;IACrB,IAAI,GAAG,gBAAgB,CAAC;CAC3C;AAED,MAAM,WAAW,GAAG,CAAC;KAClB,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,4BAA4B,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,QAAQ,EAAE;IACzI,MAAM,EAAE,CAAC;SACN,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,6BAA6B,CAAC,EAAE,CAAC;SAC1F,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,EAAE;IACb,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;CAC7C,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,gBAAgB,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAU,CAAC;AAE1E,SAAS,SAAS,CAAC,IAAqB;IACtC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzD,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,SAAS,CAAC,KAAsB;IAC9C,OAAO,UAAU,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;AACzE,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,aAAa,CAAC,KAAc;IAC1C,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IAC3E,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,KAAgC,CAAC;QAChD,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;aAC3B,IAAI,EAAE;aACN,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aAC9D,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;IAClB,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,iHAAiH;AACjH,MAAM,UAAU,gBAAgB,CAAC,KAMhC;IACC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,QAAQ,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC;IAC/E,MAAM,GAAG,GAAG;QACV,YAAY,EAAE,QAAQ;QACtB,YAAY,EAAE,KAAK,CAAC,OAAO;QAC3B,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACjF,YAAY,EAAE,KAAK,CAAC,YAAY;KACjC,CAAC;IACF,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,4DAA4D;AAC5D,SAAS,UAAU,CAAC,KAAiB;IACnC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC9B,IAAI,CAAC,KAAK;QAAE,OAAO,eAAe,CAAC;IACnC,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB;QAAE,OAAO,iBAAiB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;IAC7G,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IACzE,OAAO,GAAG,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC;AACpC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC5C,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,MAAM,IAAI,cAAc,CAAC,wBAAwB,CAAC,CAAC;IACtH,MAAM,MAAM,GAAG,GAA8B,CAAC;IAC9C,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;IACjE,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;QAC9B,IAAI,KAAK,IAAI,MAAM;YAAE,MAAM,IAAI,cAAc,CAAC,GAAG,IAAI,MAAM,KAAK,kCAAkC,CAAC,CAAC;IACtG,CAAC;IACD,MAAM,YAAY,GAA4B,EAAE,CAAC;IACjD,MAAM,SAAS,GAA4B,EAAE,CAAC;IAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAClD,IAAK,gBAAsC,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;;YAC7E,YAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACjC,CAAC;IACD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAC7D,IAAI,CAAC,QAAQ,CAAC,OAAO;QAAE,MAAM,IAAI,cAAc,CAAC,GAAG,IAAI,KAAK,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC1F,MAAM,MAAM,GAAG,WAAW,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAChD,IAAI,CAAC,MAAM,CAAC,OAAO;QAAE,MAAM,IAAI,cAAc,CAAC,GAAG,IAAI,KAAK,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACtF,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC;IACxB,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;IACpC,IAAI,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,iBAAiB;QAAE,MAAM,IAAI,cAAc,CAAC,GAAG,IAAI,mCAAmC,CAAC,CAAC;IAEjI,MAAM,MAAM,GAAmB,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACtE,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,eAAe,EAAE,CAAC;YAC5D,MAAM,IAAI,cAAc,CAAC,GAAG,IAAI,YAAY,KAAK,CAAC,IAAI,sBAAsB,CAAC,CAAC;QAChF,CAAC;QACD,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,MAAyC,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,cAAc,CAAC,GAAG,IAAI,YAAY,KAAK,CAAC,IAAI,mBAAmB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/H,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IACvH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,UAAU;QAAE,MAAM,IAAI,cAAc,CAAC,GAAG,IAAI,wCAAwC,CAAC,CAAC;IACpI,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;QAAE,MAAM,IAAI,cAAc,CAAC,GAAG,IAAI,yCAAyC,CAAC,CAAC;IAC5I,KAAK,MAAM,OAAO,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;QACjC,IAAI,OAAO,CAAC,aAAa,KAAK,qBAAqB,EAAE,CAAC;YACpD,MAAM,IAAI,cAAc,CAAC,GAAG,IAAI,cAAc,OAAO,CAAC,EAAE,6EAA6E,CAAC,CAAC;QACzI,CAAC;QACD,IAAI,CAAC;YACH,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,IAAI,cAAc,CAAC,GAAG,IAAI,cAAc,OAAO,CAAC,EAAE,yCAAyC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvJ,CAAC;IACH,CAAC;IACD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;IACpE,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM;QAAE,MAAM,IAAI,cAAc,CAAC,GAAG,IAAI,4BAA4B,CAAC,CAAC;IACzG,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACxD,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM;QAAE,MAAM,IAAI,cAAc,CAAC,GAAG,IAAI,yBAAyB,CAAC,CAAC;IAChG,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YACzB,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;gBAChE,MAAM,IAAI,cAAc,CAAC,GAAG,IAAI,oBAAoB,IAAI,CAAC,EAAE,2CAA2C,CAAC,CAAC;YAC1G,CAAC;QACH,CAAC;aAAM,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YACtC,MAAM,IAAI,cAAc,CAAC,GAAG,IAAI,wCAAwC,IAAI,CAAC,EAAE,QAAQ,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACvG,CAAC;IACH,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC;QAC3B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACxD,gFAAgF;YAChF,IAAI,MAAM,KAAK,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC;gBAAE,SAAS;YACjE,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5B,MAAM,IAAI,cAAc,CAAC,GAAG,IAAI,MAAM,OAAO,4CAA4C,MAAM,yBAAyB,CAAC,CAAC;YAC5H,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACxC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,cAAc,CAAC,GAAG,IAAI,+BAA+B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC3G,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC7C,IAAI,MAAM,IAAI,CAAC,CAAC,QAAQ;YAAE,MAAM,IAAI,cAAc,CAAC,GAAG,IAAI,MAAM,MAAM,iCAAiC,CAAC,CAAC;IAC3G,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC;IAC/C,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,IAAI,CAAC;IACxD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC,CAAC;IAC7F,IAAI,QAAQ,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,cAAc,CAAC,GAAG,IAAI,8DAA8D,CAAC,CAAC,SAAS,6BAA6B,CAAC,CAAC;IAC1I,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;AAChG,CAAC;AAED,SAAS,WAAW,CAAC,OAAe,EAAE,IAAY;IAChD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,OAAO,KAAK,IAAI,CAAC;IACpD,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,oBAAoB,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACtH,OAAO,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,QAA2B,EAAE,QAA2B;IAClF,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU,CAAC;IAC9B,KAAK,MAAM,IAAI,IAAI,QAAQ;QAAE,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YAAE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACzG,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAChD,KAAK,MAAM,IAAI,IAAI,gBAAgB,EAAE,CAAC;YACpC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAClE,MAAM,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACzE,IACE,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC;gBAC1B,CAAC,UAAU,KAAK,IAAI,IAAI,CAAC,OAAO,KAAK,UAAU,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,GAAG,CAAC,CAAC,CAAC;gBACzF,mEAAmE;gBACnE,CAAC,WAAW,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,WAAW,GAAG,CAAC,CAAC,EACnF,CAAC;gBACD,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,CAAC,GAAG,GAAG,CAAC,CAAC;AAClB,CAAC;AAED,4DAA4D;AAC5D,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,MAAM,KAAK,GAAG,8BAA8B,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IAChE,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7D,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAChD,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAClF,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;AAC/D,CAAC;AAED,uGAAuG;AACvG,MAAM,UAAU,MAAM,CAAC,IAAY,EAAE,KAAa;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACvC,MAAM,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,CAAC,EAAE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACvE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrE,CAAC;AAUD;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,OAAe,EAAE,KAA4B;IACjF,MAAM,KAAK,GAAG,KAAK;SAChB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;SAClE,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC1F,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;IAC9C,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,4BAA4B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AACzE,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -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
|
|
5
|
-
* (
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
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":"AAAA
|
|
1
|
+
{"version":3,"file":"learning-digest.d.ts","sourceRoot":"","sources":["../../src/agents/learning-digest.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
|
|
5
|
-
* (
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
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
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
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
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
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
|