@withbuddi/buddi 0.1.0-pre.27 → 0.1.0-pre.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/extension/manifest.json +2 -2
- package/node_modules/@buddi/cli/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/cli/dist/args.d.ts +13 -2
- package/node_modules/@buddi/cli/dist/args.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/args.js +12 -3
- package/node_modules/@buddi/cli/dist/args.js.map +1 -1
- package/node_modules/@buddi/cli/dist/commands.d.ts +10 -0
- package/node_modules/@buddi/cli/dist/commands.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/commands.js +301 -20
- package/node_modules/@buddi/cli/dist/commands.js.map +1 -1
- package/node_modules/@buddi/cli/dist/dashboard-cmd.d.ts +3 -0
- package/node_modules/@buddi/cli/dist/dashboard-cmd.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/dashboard-cmd.js +63 -0
- package/node_modules/@buddi/cli/dist/dashboard-cmd.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 +12 -10
- package/node_modules/@buddi/cli/dist/doctor-probes.js.map +1 -1
- package/node_modules/@buddi/cli/dist/doctor.d.ts +14 -1
- package/node_modules/@buddi/cli/dist/doctor.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/doctor.js +18 -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 +22 -1
- package/node_modules/@buddi/cli/dist/main.js.map +1 -1
- package/node_modules/@buddi/cli/dist/mcp/gateway-client.d.ts +19 -17
- package/node_modules/@buddi/cli/dist/mcp/gateway-client.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/mcp/gateway-client.js +128 -29
- package/node_modules/@buddi/cli/dist/mcp/gateway-client.js.map +1 -1
- package/node_modules/@buddi/cli/dist/mcp/tools.d.ts +6 -0
- package/node_modules/@buddi/cli/dist/mcp/tools.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/mcp/tools.js +23 -3
- package/node_modules/@buddi/cli/dist/mcp/tools.js.map +1 -1
- package/node_modules/@buddi/cli/dist/telegram-cmd.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/telegram-cmd.js +5 -4
- package/node_modules/@buddi/cli/dist/telegram-cmd.js.map +1 -1
- package/node_modules/@buddi/core/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/core/dist/agents/catalog.d.ts +3 -0
- package/node_modules/@buddi/core/dist/agents/catalog.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/agents/catalog.js +8 -6
- package/node_modules/@buddi/core/dist/agents/catalog.js.map +1 -1
- package/node_modules/@buddi/core/dist/agents/edit.d.ts +3 -0
- package/node_modules/@buddi/core/dist/agents/edit.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/agents/edit.js +3 -1
- package/node_modules/@buddi/core/dist/agents/edit.js.map +1 -1
- package/node_modules/@buddi/core/dist/agents/frontmatter.d.ts +22 -12
- package/node_modules/@buddi/core/dist/agents/frontmatter.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/agents/frontmatter.js +7 -0
- package/node_modules/@buddi/core/dist/agents/frontmatter.js.map +1 -1
- package/node_modules/@buddi/core/dist/agents/idle-rollover.d.ts +20 -0
- package/node_modules/@buddi/core/dist/agents/idle-rollover.d.ts.map +1 -0
- package/node_modules/@buddi/core/dist/agents/idle-rollover.js +30 -0
- package/node_modules/@buddi/core/dist/agents/idle-rollover.js.map +1 -0
- package/node_modules/@buddi/core/dist/agents/index.d.ts +1 -0
- package/node_modules/@buddi/core/dist/agents/index.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/agents/index.js +1 -0
- package/node_modules/@buddi/core/dist/agents/index.js.map +1 -1
- package/node_modules/@buddi/core/dist/agents/skills.d.ts +2 -2
- package/node_modules/@buddi/core/dist/backup/dump.d.ts +9 -0
- package/node_modules/@buddi/core/dist/backup/dump.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/backup/dump.js +10 -1
- package/node_modules/@buddi/core/dist/backup/dump.js.map +1 -1
- package/node_modules/@buddi/core/dist/backup/pending.d.ts +13 -0
- package/node_modules/@buddi/core/dist/backup/pending.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/backup/pending.js +56 -4
- package/node_modules/@buddi/core/dist/backup/pending.js.map +1 -1
- package/node_modules/@buddi/core/dist/backup/restore.d.ts +3 -1
- package/node_modules/@buddi/core/dist/backup/restore.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/backup/restore.js +1 -1
- package/node_modules/@buddi/core/dist/backup/restore.js.map +1 -1
- package/node_modules/@buddi/core/dist/clock-widget.d.ts +38 -0
- package/node_modules/@buddi/core/dist/clock-widget.d.ts.map +1 -0
- package/node_modules/@buddi/core/dist/clock-widget.js +114 -0
- package/node_modules/@buddi/core/dist/clock-widget.js.map +1 -0
- package/node_modules/@buddi/core/dist/failures/owner-message.d.ts +25 -0
- package/node_modules/@buddi/core/dist/failures/owner-message.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/failures/owner-message.js +90 -0
- package/node_modules/@buddi/core/dist/failures/owner-message.js.map +1 -1
- package/node_modules/@buddi/core/dist/feedback/index.d.ts +129 -0
- package/node_modules/@buddi/core/dist/feedback/index.d.ts.map +1 -0
- package/node_modules/@buddi/core/dist/feedback/index.js +180 -0
- package/node_modules/@buddi/core/dist/feedback/index.js.map +1 -0
- package/node_modules/@buddi/core/dist/groups.d.ts +33 -0
- package/node_modules/@buddi/core/dist/groups.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/groups.js +76 -4
- package/node_modules/@buddi/core/dist/groups.js.map +1 -1
- package/node_modules/@buddi/core/dist/home.d.ts +5 -5
- package/node_modules/@buddi/core/dist/host/build.d.ts +19 -1
- package/node_modules/@buddi/core/dist/host/build.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/host/build.js +150 -3
- package/node_modules/@buddi/core/dist/host/build.js.map +1 -1
- package/node_modules/@buddi/core/dist/host/types.d.ts +62 -2
- package/node_modules/@buddi/core/dist/host/types.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/index.d.ts +9 -0
- package/node_modules/@buddi/core/dist/index.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/index.js +9 -0
- package/node_modules/@buddi/core/dist/index.js.map +1 -1
- package/node_modules/@buddi/core/dist/learning/policies.d.ts +7 -1
- package/node_modules/@buddi/core/dist/learning/policies.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/learning/policies.js +4 -1
- package/node_modules/@buddi/core/dist/learning/policies.js.map +1 -1
- package/node_modules/@buddi/core/dist/learning/store.d.ts +29 -1
- package/node_modules/@buddi/core/dist/learning/store.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/learning/store.js +33 -8
- package/node_modules/@buddi/core/dist/learning/store.js.map +1 -1
- package/node_modules/@buddi/core/dist/learning/types.d.ts +24 -1
- package/node_modules/@buddi/core/dist/learning/types.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/learning/types.js +6 -0
- package/node_modules/@buddi/core/dist/learning/types.js.map +1 -1
- package/node_modules/@buddi/core/dist/lock.d.ts +76 -0
- package/node_modules/@buddi/core/dist/lock.d.ts.map +1 -0
- package/node_modules/@buddi/core/dist/lock.js +167 -0
- package/node_modules/@buddi/core/dist/lock.js.map +1 -0
- package/node_modules/@buddi/core/dist/metrics.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/metrics.js +4 -2
- package/node_modules/@buddi/core/dist/metrics.js.map +1 -1
- package/node_modules/@buddi/core/dist/onboarding/store.d.ts +5 -0
- package/node_modules/@buddi/core/dist/onboarding/store.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/onboarding/store.js +35 -5
- package/node_modules/@buddi/core/dist/onboarding/store.js.map +1 -1
- package/node_modules/@buddi/core/dist/onboarding/types.d.ts +10 -0
- package/node_modules/@buddi/core/dist/onboarding/types.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/onboarding/types.js +2 -0
- package/node_modules/@buddi/core/dist/onboarding/types.js.map +1 -1
- package/node_modules/@buddi/core/dist/owner-format.d.ts +14 -0
- package/node_modules/@buddi/core/dist/owner-format.d.ts.map +1 -0
- package/node_modules/@buddi/core/dist/owner-format.js +47 -0
- package/node_modules/@buddi/core/dist/owner-format.js.map +1 -0
- package/node_modules/@buddi/core/dist/owner-timezone.d.ts +46 -0
- package/node_modules/@buddi/core/dist/owner-timezone.d.ts.map +1 -0
- package/node_modules/@buddi/core/dist/owner-timezone.js +43 -0
- package/node_modules/@buddi/core/dist/owner-timezone.js.map +1 -0
- package/node_modules/@buddi/core/dist/owner.d.ts +2 -1
- package/node_modules/@buddi/core/dist/owner.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/owner.js.map +1 -1
- package/node_modules/@buddi/core/dist/pages.d.ts +37 -38
- package/node_modules/@buddi/core/dist/pages.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/pages.js +30 -3
- package/node_modules/@buddi/core/dist/pages.js.map +1 -1
- package/node_modules/@buddi/core/dist/places.d.ts +110 -0
- package/node_modules/@buddi/core/dist/places.d.ts.map +1 -0
- package/node_modules/@buddi/core/dist/places.js +239 -0
- package/node_modules/@buddi/core/dist/places.js.map +1 -0
- package/node_modules/@buddi/core/dist/plugin/index.d.ts +13 -5
- package/node_modules/@buddi/core/dist/plugin/index.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/plugin/index.js +3 -0
- package/node_modules/@buddi/core/dist/plugin/index.js.map +1 -1
- package/node_modules/@buddi/core/dist/plugin/requires.d.ts +75 -0
- package/node_modules/@buddi/core/dist/plugin/requires.d.ts.map +1 -0
- package/node_modules/@buddi/core/dist/plugin/requires.js +77 -0
- package/node_modules/@buddi/core/dist/plugin/requires.js.map +1 -0
- package/node_modules/@buddi/core/dist/plugin/uses.d.ts +1 -1
- package/node_modules/@buddi/core/dist/plugin/uses.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/plugin/uses.js +2 -0
- package/node_modules/@buddi/core/dist/plugin/uses.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/queue/retry-policy.d.ts +5 -0
- package/node_modules/@buddi/core/dist/queue/retry-policy.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/queue/retry-policy.js +19 -2
- package/node_modules/@buddi/core/dist/queue/retry-policy.js.map +1 -1
- package/node_modules/@buddi/core/dist/registry.d.ts +47 -3
- package/node_modules/@buddi/core/dist/registry.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/registry.js +150 -3
- package/node_modules/@buddi/core/dist/registry.js.map +1 -1
- package/node_modules/@buddi/core/dist/scheduler/enqueue.d.ts +71 -0
- package/node_modules/@buddi/core/dist/scheduler/enqueue.d.ts.map +1 -0
- package/node_modules/@buddi/core/dist/scheduler/enqueue.js +116 -0
- package/node_modules/@buddi/core/dist/scheduler/enqueue.js.map +1 -0
- package/node_modules/@buddi/core/dist/scheduler/index.d.ts +1 -0
- package/node_modules/@buddi/core/dist/scheduler/index.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/scheduler/index.js +1 -0
- package/node_modules/@buddi/core/dist/scheduler/index.js.map +1 -1
- package/node_modules/@buddi/core/dist/scheduler/missions.d.ts +15 -0
- package/node_modules/@buddi/core/dist/scheduler/missions.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/scheduler/missions.js +43 -4
- package/node_modules/@buddi/core/dist/scheduler/missions.js.map +1 -1
- package/node_modules/@buddi/core/dist/scheduler/types.d.ts +10 -0
- package/node_modules/@buddi/core/dist/scheduler/types.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/scheduler/types.js +3 -0
- package/node_modules/@buddi/core/dist/scheduler/types.js.map +1 -1
- package/node_modules/@buddi/core/dist/secrets/settings.d.ts +6 -6
- package/node_modules/@buddi/core/dist/semver.d.ts +17 -0
- package/node_modules/@buddi/core/dist/semver.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/semver.js +130 -0
- package/node_modules/@buddi/core/dist/semver.js.map +1 -1
- package/node_modules/@buddi/core/dist/sentinels/run.d.ts +6 -1
- package/node_modules/@buddi/core/dist/sentinels/run.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/sentinels/run.js +43 -24
- package/node_modules/@buddi/core/dist/sentinels/run.js.map +1 -1
- package/node_modules/@buddi/core/dist/sentinels/types.d.ts +13 -0
- package/node_modules/@buddi/core/dist/sentinels/types.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/sentinels/types.js.map +1 -1
- package/node_modules/@buddi/core/dist/sources/index.d.ts +1 -0
- package/node_modules/@buddi/core/dist/sources/index.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/sources/index.js +1 -0
- package/node_modules/@buddi/core/dist/sources/index.js.map +1 -1
- package/node_modules/@buddi/core/dist/sources/run.d.ts +8 -0
- package/node_modules/@buddi/core/dist/sources/run.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/sources/run.js +1 -1
- package/node_modules/@buddi/core/dist/sources/run.js.map +1 -1
- package/node_modules/@buddi/core/dist/sources/watch.d.ts +40 -0
- package/node_modules/@buddi/core/dist/sources/watch.d.ts.map +1 -0
- package/node_modules/@buddi/core/dist/sources/watch.js +81 -0
- package/node_modules/@buddi/core/dist/sources/watch.js.map +1 -0
- package/node_modules/@buddi/core/dist/time.d.ts +17 -3
- package/node_modules/@buddi/core/dist/time.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/time.js +27 -3
- package/node_modules/@buddi/core/dist/time.js.map +1 -1
- package/node_modules/@buddi/core/dist/tools.d.ts +77 -1
- package/node_modules/@buddi/core/dist/tools.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/tools.js.map +1 -1
- package/node_modules/@buddi/core/dist/views.d.ts +68 -68
- package/node_modules/@buddi/core/dist/views.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/views.js +3 -0
- package/node_modules/@buddi/core/dist/views.js.map +1 -1
- package/node_modules/@buddi/core/dist/widget-settings.d.ts +161 -0
- package/node_modules/@buddi/core/dist/widget-settings.d.ts.map +1 -0
- package/node_modules/@buddi/core/dist/widget-settings.js +314 -0
- package/node_modules/@buddi/core/dist/widget-settings.js.map +1 -0
- package/node_modules/@buddi/core/dist/widgets.d.ts +206 -0
- package/node_modules/@buddi/core/dist/widgets.d.ts.map +1 -0
- package/node_modules/@buddi/core/dist/widgets.js +247 -0
- package/node_modules/@buddi/core/dist/widgets.js.map +1 -0
- package/node_modules/@buddi/core/migrations/056_dashboard_sessions.sql +37 -0
- package/node_modules/@buddi/core/migrations/057_proposal_decided_by.sql +34 -0
- package/node_modules/@buddi/core/migrations/058_message_feedback.sql +50 -0
- package/node_modules/@buddi/core/migrations/059_dashboard_lock.sql +33 -0
- package/node_modules/@buddi/core/migrations/060_owner_places.sql +30 -0
- package/node_modules/@buddi/core/migrations/061_owner_formats.sql +10 -0
- package/node_modules/@buddi/core/migrations/062_group_deleted.sql +7 -0
- package/node_modules/@buddi/core/migrations/063_provider_account_limits.sql +20 -0
- package/node_modules/@buddi/core/migrations/064_mission_coalesce.sql +12 -0
- package/node_modules/@buddi/core/migrations/065_api_tokens.sql +28 -0
- package/node_modules/@buddi/gateway/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/gateway/dist/account-limits.d.ts +45 -0
- package/node_modules/@buddi/gateway/dist/account-limits.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/account-limits.js +87 -0
- package/node_modules/@buddi/gateway/dist/account-limits.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/accounts-cli.d.ts +88 -0
- package/node_modules/@buddi/gateway/dist/accounts-cli.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/accounts-cli.js +216 -0
- package/node_modules/@buddi/gateway/dist/accounts-cli.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/agents/canvas.d.ts +20 -20
- package/node_modules/@buddi/gateway/dist/agents/learning-digest.d.ts +11 -1
- package/node_modules/@buddi/gateway/dist/agents/learning-digest.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/learning-digest.js +43 -4
- 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 +3 -2
- package/node_modules/@buddi/gateway/dist/agents/owner-tools.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/platform-files.d.ts +2 -0
- package/node_modules/@buddi/gateway/dist/agents/platform-files.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/platform-files.js +2 -0
- package/node_modules/@buddi/gateway/dist/agents/platform-files.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/platform.d.ts +40 -20
- package/node_modules/@buddi/gateway/dist/agents/platform.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/platform.js +46 -3
- 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 +12 -2
- package/node_modules/@buddi/gateway/dist/agents-cli.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/api-token-cli.d.ts +17 -0
- package/node_modules/@buddi/gateway/dist/api-token-cli.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/api-token-cli.js +108 -0
- package/node_modules/@buddi/gateway/dist/api-token-cli.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/bootstrap.d.ts +6 -2
- package/node_modules/@buddi/gateway/dist/bootstrap.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/bootstrap.js +25 -7
- package/node_modules/@buddi/gateway/dist/bootstrap.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/chat/session.d.ts +5 -0
- package/node_modules/@buddi/gateway/dist/chat/session.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/chat/session.js +13 -2
- package/node_modules/@buddi/gateway/dist/chat/session.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/cli.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/cli.js +14 -3
- package/node_modules/@buddi/gateway/dist/cli.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/index.d.ts +3 -0
- package/node_modules/@buddi/gateway/dist/index.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/index.js +3 -0
- package/node_modules/@buddi/gateway/dist/index.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/mcp/requests.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/mcp/requests.js +1 -0
- package/node_modules/@buddi/gateway/dist/mcp/requests.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/dead-letter.d.ts +2 -1
- package/node_modules/@buddi/gateway/dist/missions/dead-letter.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/dead-letter.js +19 -5
- package/node_modules/@buddi/gateway/dist/missions/dead-letter.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/defaults.d.ts +6 -0
- package/node_modules/@buddi/gateway/dist/missions/defaults.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/defaults.js +10 -2
- package/node_modules/@buddi/gateway/dist/missions/defaults.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/execute.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/execute.js +14 -8
- package/node_modules/@buddi/gateway/dist/missions/execute.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/inline.js +1 -1
- package/node_modules/@buddi/gateway/dist/missions/inline.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/sentinel-wake.d.ts +11 -0
- package/node_modules/@buddi/gateway/dist/missions/sentinel-wake.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/sentinel-wake.js +37 -1
- package/node_modules/@buddi/gateway/dist/missions/sentinel-wake.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions-cli.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions-cli.js +5 -5
- package/node_modules/@buddi/gateway/dist/missions-cli.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/nudges-cli.js +2 -2
- package/node_modules/@buddi/gateway/dist/nudges-cli.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/owner-seed.js +2 -2
- package/node_modules/@buddi/gateway/dist/owner-seed.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins/approve.js +4 -1
- package/node_modules/@buddi/gateway/dist/plugins/approve.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins/live.d.ts +8 -1
- package/node_modules/@buddi/gateway/dist/plugins/live.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins/live.js +25 -7
- package/node_modules/@buddi/gateway/dist/plugins/live.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins/load.d.ts +55 -0
- package/node_modules/@buddi/gateway/dist/plugins/load.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins/load.js +100 -4
- package/node_modules/@buddi/gateway/dist/plugins/load.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins/paths.d.ts +14 -0
- package/node_modules/@buddi/gateway/dist/plugins/paths.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins/paths.js +27 -1
- package/node_modules/@buddi/gateway/dist/plugins/paths.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins/requires.d.ts +79 -0
- package/node_modules/@buddi/gateway/dist/plugins/requires.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/plugins/requires.js +178 -0
- package/node_modules/@buddi/gateway/dist/plugins/requires.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/plugins/stage.d.ts +33 -3
- package/node_modules/@buddi/gateway/dist/plugins/stage.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins/stage.js +41 -6
- package/node_modules/@buddi/gateway/dist/plugins/stage.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins/update.d.ts +21 -0
- package/node_modules/@buddi/gateway/dist/plugins/update.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins/update.js +16 -0
- package/node_modules/@buddi/gateway/dist/plugins/update.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins-cli.d.ts +5 -1
- package/node_modules/@buddi/gateway/dist/plugins-cli.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins-cli.js +48 -11
- package/node_modules/@buddi/gateway/dist/plugins-cli.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/provider-accounts.d.ts +4 -0
- package/node_modules/@buddi/gateway/dist/provider-accounts.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/provider-accounts.js +68 -10
- package/node_modules/@buddi/gateway/dist/provider-accounts.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/provider-diagnostics.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/provider-diagnostics.js +9 -0
- package/node_modules/@buddi/gateway/dist/provider-diagnostics.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/reminders-cli.js +2 -2
- package/node_modules/@buddi/gateway/dist/reminders-cli.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/serve.d.ts +2 -0
- package/node_modules/@buddi/gateway/dist/serve.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/serve.js +78 -8
- package/node_modules/@buddi/gateway/dist/serve.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/surfaces/browser-continuation.d.ts +2 -1
- package/node_modules/@buddi/gateway/dist/surfaces/browser-continuation.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/surfaces/browser-continuation.js +8 -5
- package/node_modules/@buddi/gateway/dist/surfaces/browser-continuation.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/surfaces/browser-handoff.d.ts +27 -4
- package/node_modules/@buddi/gateway/dist/surfaces/browser-handoff.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/surfaces/browser-handoff.js +57 -7
- package/node_modules/@buddi/gateway/dist/surfaces/browser-handoff.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/surfaces/carry-over.d.ts +89 -0
- package/node_modules/@buddi/gateway/dist/surfaces/carry-over.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/surfaces/carry-over.js +172 -0
- package/node_modules/@buddi/gateway/dist/surfaces/carry-over.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/surfaces/conversation-lifetime.d.ts +5 -2
- package/node_modules/@buddi/gateway/dist/surfaces/conversation-lifetime.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/surfaces/conversation-lifetime.js +5 -2
- package/node_modules/@buddi/gateway/dist/surfaces/conversation-lifetime.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/surfaces/failure.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/surfaces/failure.js +9 -1
- package/node_modules/@buddi/gateway/dist/surfaces/failure.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/system-context.d.ts +18 -0
- package/node_modules/@buddi/gateway/dist/system-context.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/system-context.js +46 -4
- package/node_modules/@buddi/gateway/dist/system-context.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/api.d.ts +34 -2
- package/node_modules/@buddi/gateway/dist/telegram/api.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/api.js +15 -2
- package/node_modules/@buddi/gateway/dist/telegram/api.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/env-owner.d.ts +30 -0
- package/node_modules/@buddi/gateway/dist/telegram/env-owner.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/telegram/env-owner.js +45 -0
- package/node_modules/@buddi/gateway/dist/telegram/env-owner.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/telegram/main.d.ts +0 -2
- package/node_modules/@buddi/gateway/dist/telegram/main.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/main.js +21 -28
- package/node_modules/@buddi/gateway/dist/telegram/main.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/notify.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/notify.js +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/notify.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/outbound.d.ts +3 -3
- package/node_modules/@buddi/gateway/dist/telegram/outbound.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/outbound.js +19 -5
- package/node_modules/@buddi/gateway/dist/telegram/outbound.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/reactions.d.ts +45 -0
- package/node_modules/@buddi/gateway/dist/telegram/reactions.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/telegram/reactions.js +107 -0
- package/node_modules/@buddi/gateway/dist/telegram/reactions.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/telegram/surface.d.ts +5 -1
- package/node_modules/@buddi/gateway/dist/telegram/surface.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/surface.js +93 -12
- package/node_modules/@buddi/gateway/dist/telegram/surface.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/tips/engine.d.ts +2 -0
- package/node_modules/@buddi/gateway/dist/tips/engine.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/tips/engine.js +8 -5
- package/node_modules/@buddi/gateway/dist/tips/engine.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/tips/facts.d.ts +23 -0
- package/node_modules/@buddi/gateway/dist/tips/facts.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/tips/facts.js +19 -0
- package/node_modules/@buddi/gateway/dist/tips/facts.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/tips/route.js +2 -2
- package/node_modules/@buddi/gateway/dist/tips/route.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/tips/rules.d.ts +3 -2
- package/node_modules/@buddi/gateway/dist/tips/rules.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/tips/rules.js +26 -0
- package/node_modules/@buddi/gateway/dist/tips/rules.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/agents.d.ts +3 -1
- package/node_modules/@buddi/gateway/dist/web/agents.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/agents.js +20 -2
- package/node_modules/@buddi/gateway/dist/web/agents.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/api-routes.d.ts +103 -0
- package/node_modules/@buddi/gateway/dist/web/api-routes.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/api-routes.js +1200 -0
- package/node_modules/@buddi/gateway/dist/web/api-routes.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/api-scan.d.ts +17 -0
- package/node_modules/@buddi/gateway/dist/web/api-scan.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/api-scan.js +206 -0
- package/node_modules/@buddi/gateway/dist/web/api-scan.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/api-tokens.d.ts +58 -0
- package/node_modules/@buddi/gateway/dist/web/api-tokens.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/api-tokens.js +136 -0
- package/node_modules/@buddi/gateway/dist/web/api-tokens.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/backups.js +2 -2
- package/node_modules/@buddi/gateway/dist/web/backups.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/chat.d.ts +10 -3
- package/node_modules/@buddi/gateway/dist/web/chat.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/chat.js +18 -5
- package/node_modules/@buddi/gateway/dist/web/chat.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/group-lifecycle.d.ts +18 -0
- package/node_modules/@buddi/gateway/dist/web/group-lifecycle.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/group-lifecycle.js +46 -0
- package/node_modules/@buddi/gateway/dist/web/group-lifecycle.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/lock-image.d.ts +37 -0
- package/node_modules/@buddi/gateway/dist/web/lock-image.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/lock-image.js +253 -0
- package/node_modules/@buddi/gateway/dist/web/lock-image.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/lock.d.ts +162 -0
- package/node_modules/@buddi/gateway/dist/web/lock.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/lock.js +472 -0
- package/node_modules/@buddi/gateway/dist/web/lock.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/pages.d.ts +1 -0
- package/node_modules/@buddi/gateway/dist/web/pages.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/pages.js +12 -1
- package/node_modules/@buddi/gateway/dist/web/pages.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/places.d.ts +27 -0
- package/node_modules/@buddi/gateway/dist/web/places.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/places.js +90 -0
- package/node_modules/@buddi/gateway/dist/web/places.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/plugins.d.ts +34 -1
- package/node_modules/@buddi/gateway/dist/web/plugins.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/plugins.js +99 -10
- package/node_modules/@buddi/gateway/dist/web/plugins.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/proposals.d.ts +21 -0
- package/node_modules/@buddi/gateway/dist/web/proposals.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/proposals.js +50 -1
- package/node_modules/@buddi/gateway/dist/web/proposals.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/read.d.ts +6 -0
- package/node_modules/@buddi/gateway/dist/web/read.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/read.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/recovery.d.ts +19 -2
- package/node_modules/@buddi/gateway/dist/web/recovery.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/recovery.js +148 -7
- package/node_modules/@buddi/gateway/dist/web/recovery.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/server.d.ts +9 -0
- package/node_modules/@buddi/gateway/dist/web/server.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/server.js +479 -52
- package/node_modules/@buddi/gateway/dist/web/server.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/sessions.d.ts +124 -9
- package/node_modules/@buddi/gateway/dist/web/sessions.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/sessions.js +306 -24
- package/node_modules/@buddi/gateway/dist/web/sessions.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/signed-out.d.ts +45 -0
- package/node_modules/@buddi/gateway/dist/web/signed-out.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/signed-out.js +201 -0
- package/node_modules/@buddi/gateway/dist/web/signed-out.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/stream.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/stream.js +14 -0
- package/node_modules/@buddi/gateway/dist/web/stream.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/tailscale.d.ts +46 -4
- package/node_modules/@buddi/gateway/dist/web/tailscale.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/tailscale.js +88 -16
- package/node_modules/@buddi/gateway/dist/web/tailscale.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/widgets.d.ts +130 -0
- package/node_modules/@buddi/gateway/dist/web/widgets.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/widgets.js +473 -0
- package/node_modules/@buddi/gateway/dist/web/widgets.js.map +1 -0
- package/node_modules/@buddi/install/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/install/dist/backup.d.ts +18 -0
- package/node_modules/@buddi/install/dist/backup.d.ts.map +1 -1
- package/node_modules/@buddi/install/dist/backup.js +39 -2
- package/node_modules/@buddi/install/dist/backup.js.map +1 -1
- package/node_modules/@buddi/install/dist/kept-data.d.ts +20 -0
- package/node_modules/@buddi/install/dist/kept-data.d.ts.map +1 -0
- package/node_modules/@buddi/install/dist/kept-data.js +34 -0
- package/node_modules/@buddi/install/dist/kept-data.js.map +1 -0
- package/node_modules/@buddi/install/dist/launcher.d.ts.map +1 -1
- package/node_modules/@buddi/install/dist/launcher.js +17 -3
- package/node_modules/@buddi/install/dist/launcher.js.map +1 -1
- package/node_modules/@buddi/runtime/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/runtime/dist/anthropic.d.ts +9 -0
- package/node_modules/@buddi/runtime/dist/anthropic.d.ts.map +1 -1
- package/node_modules/@buddi/runtime/dist/anthropic.js +26 -9
- package/node_modules/@buddi/runtime/dist/anthropic.js.map +1 -1
- package/node_modules/@buddi/runtime/dist/codex-direct.d.ts +2 -1
- package/node_modules/@buddi/runtime/dist/codex-direct.d.ts.map +1 -1
- package/node_modules/@buddi/runtime/dist/codex-direct.js +13 -6
- package/node_modules/@buddi/runtime/dist/codex-direct.js.map +1 -1
- package/node_modules/@buddi/runtime/dist/index.d.ts +1 -0
- package/node_modules/@buddi/runtime/dist/index.d.ts.map +1 -1
- package/node_modules/@buddi/runtime/dist/index.js +1 -0
- package/node_modules/@buddi/runtime/dist/index.js.map +1 -1
- package/node_modules/@buddi/runtime/dist/loop.d.ts +2 -0
- package/node_modules/@buddi/runtime/dist/loop.d.ts.map +1 -1
- package/node_modules/@buddi/runtime/dist/loop.js +22 -0
- package/node_modules/@buddi/runtime/dist/loop.js.map +1 -1
- package/node_modules/@buddi/runtime/dist/openai.d.ts.map +1 -1
- package/node_modules/@buddi/runtime/dist/openai.js +19 -7
- package/node_modules/@buddi/runtime/dist/openai.js.map +1 -1
- package/node_modules/@buddi/runtime/dist/rate-limit.d.ts +91 -0
- package/node_modules/@buddi/runtime/dist/rate-limit.d.ts.map +1 -0
- package/node_modules/@buddi/runtime/dist/rate-limit.js +291 -0
- package/node_modules/@buddi/runtime/dist/rate-limit.js.map +1 -0
- package/node_modules/@buddi/runtime/dist/retry.d.ts +40 -0
- package/node_modules/@buddi/runtime/dist/retry.d.ts.map +1 -1
- package/node_modules/@buddi/runtime/dist/retry.js +42 -8
- package/node_modules/@buddi/runtime/dist/retry.js.map +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/agent.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/agent.js +11 -0
- package/node_modules/@buddi/tool-email/dist/agent.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/folders.d.ts +14 -0
- package/node_modules/@buddi/tool-email/dist/folders.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/folders.js +23 -0
- package/node_modules/@buddi/tool-email/dist/folders.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/imap/fake.d.ts +144 -3
- package/node_modules/@buddi/tool-email/dist/imap/fake.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/imap/fake.js +393 -4
- package/node_modules/@buddi/tool-email/dist/imap/fake.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/imap/imapflow-client.d.ts +14 -1
- package/node_modules/@buddi/tool-email/dist/imap/imapflow-client.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/imap/imapflow-client.js +222 -2
- package/node_modules/@buddi/tool-email/dist/imap/imapflow-client.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/index.d.ts +14 -2
- package/node_modules/@buddi/tool-email/dist/index.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/index.js +26 -4
- package/node_modules/@buddi/tool-email/dist/index.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/logins.d.ts +24 -0
- package/node_modules/@buddi/tool-email/dist/logins.d.ts.map +1 -0
- package/node_modules/@buddi/tool-email/dist/logins.js +35 -0
- package/node_modules/@buddi/tool-email/dist/logins.js.map +1 -0
- package/node_modules/@buddi/tool-email/dist/mail.d.ts +20 -0
- package/node_modules/@buddi/tool-email/dist/mail.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/mail.js +26 -0
- package/node_modules/@buddi/tool-email/dist/mail.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/mailbox/actions.d.ts +290 -0
- package/node_modules/@buddi/tool-email/dist/mailbox/actions.d.ts.map +1 -0
- package/node_modules/@buddi/tool-email/dist/mailbox/actions.js +1105 -0
- package/node_modules/@buddi/tool-email/dist/mailbox/actions.js.map +1 -0
- package/node_modules/@buddi/tool-email/dist/mailbox/arrival.d.ts +61 -0
- package/node_modules/@buddi/tool-email/dist/mailbox/arrival.d.ts.map +1 -0
- package/node_modules/@buddi/tool-email/dist/mailbox/arrival.js +153 -0
- package/node_modules/@buddi/tool-email/dist/mailbox/arrival.js.map +1 -0
- package/node_modules/@buddi/tool-email/dist/mailbox/select.d.ts +53 -0
- package/node_modules/@buddi/tool-email/dist/mailbox/select.d.ts.map +1 -0
- package/node_modules/@buddi/tool-email/dist/mailbox/select.js +124 -0
- package/node_modules/@buddi/tool-email/dist/mailbox/select.js.map +1 -0
- package/node_modules/@buddi/tool-email/dist/metrics.d.ts +3 -3
- package/node_modules/@buddi/tool-email/dist/metrics.js +4 -4
- package/node_modules/@buddi/tool-email/dist/pages/accounts.d.ts +37 -1
- package/node_modules/@buddi/tool-email/dist/pages/accounts.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/pages/accounts.js +104 -2
- package/node_modules/@buddi/tool-email/dist/pages/accounts.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/pages/descriptors.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/pages/descriptors.js +156 -0
- package/node_modules/@buddi/tool-email/dist/pages/descriptors.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/pages/drafts-tools.d.ts +2 -2
- package/node_modules/@buddi/tool-email/dist/pages/format.d.ts +1 -12
- package/node_modules/@buddi/tool-email/dist/pages/format.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/pages/format.js +17 -0
- package/node_modules/@buddi/tool-email/dist/pages/format.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/pages/index.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/pages/index.js +5 -1
- package/node_modules/@buddi/tool-email/dist/pages/index.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/pages/policies-tools.d.ts +7 -0
- package/node_modules/@buddi/tool-email/dist/pages/policies-tools.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/pages/policies-tools.js +11 -2
- package/node_modules/@buddi/tool-email/dist/pages/policies-tools.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/pages/queries.d.ts +23 -0
- package/node_modules/@buddi/tool-email/dist/pages/queries.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/pages/queries.js +185 -4
- package/node_modules/@buddi/tool-email/dist/pages/queries.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/policies/auto.d.ts +133 -0
- package/node_modules/@buddi/tool-email/dist/policies/auto.d.ts.map +1 -0
- package/node_modules/@buddi/tool-email/dist/policies/auto.js +296 -0
- package/node_modules/@buddi/tool-email/dist/policies/auto.js.map +1 -0
- package/node_modules/@buddi/tool-email/dist/policies/gate.d.ts +34 -10
- package/node_modules/@buddi/tool-email/dist/policies/gate.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/policies/gate.js +27 -12
- package/node_modules/@buddi/tool-email/dist/policies/gate.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/policies/learn.d.ts +26 -18
- package/node_modules/@buddi/tool-email/dist/policies/learn.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/policies/learn.js +36 -10
- package/node_modules/@buddi/tool-email/dist/policies/learn.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/policies/learned.d.ts +25 -2
- package/node_modules/@buddi/tool-email/dist/policies/learned.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/policies/learned.js +47 -5
- package/node_modules/@buddi/tool-email/dist/policies/learned.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/policies/store.d.ts +8 -2
- package/node_modules/@buddi/tool-email/dist/policies/store.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/policies/store.js +19 -5
- package/node_modules/@buddi/tool-email/dist/policies/store.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/ports.d.ts +126 -0
- package/node_modules/@buddi/tool-email/dist/ports.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/ports.js +6 -0
- package/node_modules/@buddi/tool-email/dist/ports.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/rows.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/rows.js +3 -1
- package/node_modules/@buddi/tool-email/dist/rows.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/sentinels/waiting-on-me.d.ts +2 -2
- package/node_modules/@buddi/tool-email/dist/sentinels/waiting-on-me.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/sentinels/waiting-on-me.js +8 -3
- package/node_modules/@buddi/tool-email/dist/sentinels/waiting-on-me.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/sources/idle.d.ts +98 -0
- package/node_modules/@buddi/tool-email/dist/sources/idle.d.ts.map +1 -0
- package/node_modules/@buddi/tool-email/dist/sources/idle.js +317 -0
- package/node_modules/@buddi/tool-email/dist/sources/idle.js.map +1 -0
- package/node_modules/@buddi/tool-email/dist/sources/inbox-poll.d.ts +79 -1
- package/node_modules/@buddi/tool-email/dist/sources/inbox-poll.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/sources/inbox-poll.js +420 -145
- package/node_modules/@buddi/tool-email/dist/sources/inbox-poll.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/sources/presence.d.ts +47 -0
- package/node_modules/@buddi/tool-email/dist/sources/presence.d.ts.map +1 -0
- package/node_modules/@buddi/tool-email/dist/sources/presence.js +128 -0
- package/node_modules/@buddi/tool-email/dist/sources/presence.js.map +1 -0
- package/node_modules/@buddi/tool-email/dist/threads.d.ts +2 -0
- package/node_modules/@buddi/tool-email/dist/threads.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/threads.js +12 -3
- package/node_modules/@buddi/tool-email/dist/threads.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/tools/mailbox.d.ts +108 -0
- package/node_modules/@buddi/tool-email/dist/tools/mailbox.d.ts.map +1 -0
- package/node_modules/@buddi/tool-email/dist/tools/mailbox.js +359 -0
- package/node_modules/@buddi/tool-email/dist/tools/mailbox.js.map +1 -0
- package/node_modules/@buddi/tool-email/dist/tools/policies.d.ts +8 -2
- package/node_modules/@buddi/tool-email/dist/tools/policies.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/tools/policies.js +43 -3
- package/node_modules/@buddi/tool-email/dist/tools/policies.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/tools/read.d.ts +2 -2
- package/node_modules/@buddi/tool-email/dist/tools/read.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/tools/read.js +29 -2
- package/node_modules/@buddi/tool-email/dist/tools/read.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/tools/threads.d.ts +2 -2
- package/node_modules/@buddi/tool-email/dist/tools/triage.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/tools/triage.js +10 -4
- package/node_modules/@buddi/tool-email/dist/tools/triage.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/widgets.d.ts +13 -0
- package/node_modules/@buddi/tool-email/dist/widgets.d.ts.map +1 -0
- package/node_modules/@buddi/tool-email/dist/widgets.js +51 -0
- package/node_modules/@buddi/tool-email/dist/widgets.js.map +1 -0
- package/node_modules/@buddi/tool-email/migrations/017_mailbox_actions.sql +60 -0
- package/node_modules/@buddi/tool-email/migrations/018_learned_auto.sql +30 -0
- package/node_modules/@buddi/tool-email/migrations/019_arrival_pending.sql +26 -0
- package/node_modules/@buddi/tool-email/migrations/020_mailbox_presence.sql +44 -0
- package/node_modules/@buddi/tool-email/migrations/021_learned_line.sql +9 -0
- package/node_modules/@buddi/tool-email/migrations/022_bulk_checked.sql +13 -0
- package/node_modules/@buddi/tool-email/package.json +3 -2
- 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-memory/dist/admin.d.ts +9 -0
- package/node_modules/@buddi/tool-memory/dist/admin.d.ts.map +1 -1
- package/node_modules/@buddi/tool-memory/dist/admin.js +11 -0
- package/node_modules/@buddi/tool-memory/dist/admin.js.map +1 -1
- package/node_modules/@buddi/tool-web/dist/.tsbuildinfo +1 -1
- package/node_modules/imapflow/CHANGELOG.md +14 -0
- package/node_modules/imapflow/dist/cjs/commands/fetch.js +1 -1
- package/node_modules/imapflow/dist/cjs/imap-flow.d.ts +2 -0
- package/node_modules/imapflow/dist/cjs/imap-flow.js +14 -1
- package/node_modules/imapflow/dist/cjs/package-info.d.ts +1 -1
- package/node_modules/imapflow/dist/cjs/package-info.js +1 -1
- package/node_modules/imapflow/dist/cjs/tools.d.ts +2 -1
- package/node_modules/imapflow/dist/cjs/tools.js +8 -6
- package/node_modules/imapflow/dist/cjs/types.d.ts +9 -1
- package/node_modules/imapflow/dist/esm/commands/fetch.js +1 -1
- package/node_modules/imapflow/dist/esm/imap-flow.d.ts +2 -0
- package/node_modules/imapflow/dist/esm/imap-flow.js +14 -1
- package/node_modules/imapflow/dist/esm/package-info.d.ts +1 -1
- package/node_modules/imapflow/dist/esm/package-info.js +1 -1
- package/node_modules/imapflow/dist/esm/tools.d.ts +2 -1
- package/node_modules/imapflow/dist/esm/tools.js +8 -6
- package/node_modules/imapflow/dist/esm/types.d.ts +9 -1
- package/node_modules/imapflow/package.json +4 -4
- package/package.json +2 -2
- package/packages/cli/dist/.tsbuildinfo +1 -1
- package/packages/cli/dist/args.d.ts +13 -2
- package/packages/cli/dist/args.d.ts.map +1 -1
- package/packages/cli/dist/args.js +12 -3
- package/packages/cli/dist/args.js.map +1 -1
- package/packages/cli/dist/commands.d.ts +10 -0
- package/packages/cli/dist/commands.d.ts.map +1 -1
- package/packages/cli/dist/commands.js +301 -20
- package/packages/cli/dist/commands.js.map +1 -1
- package/packages/cli/dist/dashboard-cmd.d.ts +3 -0
- package/packages/cli/dist/dashboard-cmd.d.ts.map +1 -1
- package/packages/cli/dist/dashboard-cmd.js +63 -0
- package/packages/cli/dist/dashboard-cmd.js.map +1 -1
- package/packages/cli/dist/doctor-probes.d.ts.map +1 -1
- package/packages/cli/dist/doctor-probes.js +12 -10
- package/packages/cli/dist/doctor-probes.js.map +1 -1
- package/packages/cli/dist/doctor.d.ts +14 -1
- package/packages/cli/dist/doctor.d.ts.map +1 -1
- package/packages/cli/dist/doctor.js +18 -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 +22 -1
- package/packages/cli/dist/main.js.map +1 -1
- package/packages/cli/dist/mcp/gateway-client.d.ts +19 -17
- package/packages/cli/dist/mcp/gateway-client.d.ts.map +1 -1
- package/packages/cli/dist/mcp/gateway-client.js +128 -29
- package/packages/cli/dist/mcp/gateway-client.js.map +1 -1
- package/packages/cli/dist/mcp/tools.d.ts +6 -0
- package/packages/cli/dist/mcp/tools.d.ts.map +1 -1
- package/packages/cli/dist/mcp/tools.js +23 -3
- package/packages/cli/dist/mcp/tools.js.map +1 -1
- package/packages/cli/dist/telegram-cmd.d.ts.map +1 -1
- package/packages/cli/dist/telegram-cmd.js +5 -4
- package/packages/cli/dist/telegram-cmd.js.map +1 -1
- package/packages/core/dist/.tsbuildinfo +1 -1
- package/packages/core/dist/agents/catalog.d.ts +3 -0
- package/packages/core/dist/agents/catalog.d.ts.map +1 -1
- package/packages/core/dist/agents/catalog.js +8 -6
- package/packages/core/dist/agents/catalog.js.map +1 -1
- package/packages/core/dist/agents/edit.d.ts +3 -0
- package/packages/core/dist/agents/edit.d.ts.map +1 -1
- package/packages/core/dist/agents/edit.js +3 -1
- package/packages/core/dist/agents/edit.js.map +1 -1
- package/packages/core/dist/agents/frontmatter.d.ts +22 -12
- package/packages/core/dist/agents/frontmatter.d.ts.map +1 -1
- package/packages/core/dist/agents/frontmatter.js +7 -0
- package/packages/core/dist/agents/frontmatter.js.map +1 -1
- package/packages/core/dist/agents/idle-rollover.d.ts +20 -0
- package/packages/core/dist/agents/idle-rollover.d.ts.map +1 -0
- package/packages/core/dist/agents/idle-rollover.js +30 -0
- package/packages/core/dist/agents/idle-rollover.js.map +1 -0
- package/packages/core/dist/agents/index.d.ts +1 -0
- package/packages/core/dist/agents/index.d.ts.map +1 -1
- package/packages/core/dist/agents/index.js +1 -0
- package/packages/core/dist/agents/index.js.map +1 -1
- package/packages/core/dist/agents/skills.d.ts +2 -2
- package/packages/core/dist/backup/dump.d.ts +9 -0
- package/packages/core/dist/backup/dump.d.ts.map +1 -1
- package/packages/core/dist/backup/dump.js +10 -1
- package/packages/core/dist/backup/dump.js.map +1 -1
- package/packages/core/dist/backup/pending.d.ts +13 -0
- package/packages/core/dist/backup/pending.d.ts.map +1 -1
- package/packages/core/dist/backup/pending.js +56 -4
- package/packages/core/dist/backup/pending.js.map +1 -1
- package/packages/core/dist/backup/restore.d.ts +3 -1
- package/packages/core/dist/backup/restore.d.ts.map +1 -1
- package/packages/core/dist/backup/restore.js +1 -1
- package/packages/core/dist/backup/restore.js.map +1 -1
- package/packages/core/dist/clock-widget.d.ts +38 -0
- package/packages/core/dist/clock-widget.d.ts.map +1 -0
- package/packages/core/dist/clock-widget.js +114 -0
- package/packages/core/dist/clock-widget.js.map +1 -0
- package/packages/core/dist/failures/owner-message.d.ts +25 -0
- package/packages/core/dist/failures/owner-message.d.ts.map +1 -1
- package/packages/core/dist/failures/owner-message.js +90 -0
- package/packages/core/dist/failures/owner-message.js.map +1 -1
- package/packages/core/dist/feedback/index.d.ts +129 -0
- package/packages/core/dist/feedback/index.d.ts.map +1 -0
- package/packages/core/dist/feedback/index.js +180 -0
- package/packages/core/dist/feedback/index.js.map +1 -0
- package/packages/core/dist/groups.d.ts +33 -0
- package/packages/core/dist/groups.d.ts.map +1 -1
- package/packages/core/dist/groups.js +76 -4
- package/packages/core/dist/groups.js.map +1 -1
- package/packages/core/dist/home.d.ts +5 -5
- package/packages/core/dist/host/build.d.ts +19 -1
- package/packages/core/dist/host/build.d.ts.map +1 -1
- package/packages/core/dist/host/build.js +150 -3
- package/packages/core/dist/host/build.js.map +1 -1
- package/packages/core/dist/host/types.d.ts +62 -2
- package/packages/core/dist/host/types.d.ts.map +1 -1
- package/packages/core/dist/index.d.ts +9 -0
- package/packages/core/dist/index.d.ts.map +1 -1
- package/packages/core/dist/index.js +9 -0
- package/packages/core/dist/index.js.map +1 -1
- package/packages/core/dist/learning/policies.d.ts +7 -1
- package/packages/core/dist/learning/policies.d.ts.map +1 -1
- package/packages/core/dist/learning/policies.js +4 -1
- package/packages/core/dist/learning/policies.js.map +1 -1
- package/packages/core/dist/learning/store.d.ts +29 -1
- package/packages/core/dist/learning/store.d.ts.map +1 -1
- package/packages/core/dist/learning/store.js +33 -8
- package/packages/core/dist/learning/store.js.map +1 -1
- package/packages/core/dist/learning/types.d.ts +24 -1
- package/packages/core/dist/learning/types.d.ts.map +1 -1
- package/packages/core/dist/learning/types.js +6 -0
- package/packages/core/dist/learning/types.js.map +1 -1
- package/packages/core/dist/lock.d.ts +76 -0
- package/packages/core/dist/lock.d.ts.map +1 -0
- package/packages/core/dist/lock.js +167 -0
- package/packages/core/dist/lock.js.map +1 -0
- package/packages/core/dist/metrics.d.ts.map +1 -1
- package/packages/core/dist/metrics.js +4 -2
- package/packages/core/dist/metrics.js.map +1 -1
- package/packages/core/dist/onboarding/store.d.ts +5 -0
- package/packages/core/dist/onboarding/store.d.ts.map +1 -1
- package/packages/core/dist/onboarding/store.js +35 -5
- package/packages/core/dist/onboarding/store.js.map +1 -1
- package/packages/core/dist/onboarding/types.d.ts +10 -0
- package/packages/core/dist/onboarding/types.d.ts.map +1 -1
- package/packages/core/dist/onboarding/types.js +2 -0
- package/packages/core/dist/onboarding/types.js.map +1 -1
- package/packages/core/dist/owner-format.d.ts +14 -0
- package/packages/core/dist/owner-format.d.ts.map +1 -0
- package/packages/core/dist/owner-format.js +47 -0
- package/packages/core/dist/owner-format.js.map +1 -0
- package/packages/core/dist/owner-timezone.d.ts +46 -0
- package/packages/core/dist/owner-timezone.d.ts.map +1 -0
- package/packages/core/dist/owner-timezone.js +43 -0
- package/packages/core/dist/owner-timezone.js.map +1 -0
- package/packages/core/dist/owner.d.ts +2 -1
- package/packages/core/dist/owner.d.ts.map +1 -1
- package/packages/core/dist/owner.js.map +1 -1
- package/packages/core/dist/pages.d.ts +37 -38
- package/packages/core/dist/pages.d.ts.map +1 -1
- package/packages/core/dist/pages.js +30 -3
- package/packages/core/dist/pages.js.map +1 -1
- package/packages/core/dist/places.d.ts +110 -0
- package/packages/core/dist/places.d.ts.map +1 -0
- package/packages/core/dist/places.js +239 -0
- package/packages/core/dist/places.js.map +1 -0
- package/packages/core/dist/plugin/index.d.ts +13 -5
- package/packages/core/dist/plugin/index.d.ts.map +1 -1
- package/packages/core/dist/plugin/index.js +3 -0
- package/packages/core/dist/plugin/index.js.map +1 -1
- package/packages/core/dist/plugin/requires.d.ts +75 -0
- package/packages/core/dist/plugin/requires.d.ts.map +1 -0
- package/packages/core/dist/plugin/requires.js +77 -0
- package/packages/core/dist/plugin/requires.js.map +1 -0
- package/packages/core/dist/plugin/uses.d.ts +1 -1
- package/packages/core/dist/plugin/uses.d.ts.map +1 -1
- package/packages/core/dist/plugin/uses.js +2 -0
- package/packages/core/dist/plugin/uses.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/queue/retry-policy.d.ts +5 -0
- package/packages/core/dist/queue/retry-policy.d.ts.map +1 -1
- package/packages/core/dist/queue/retry-policy.js +19 -2
- package/packages/core/dist/queue/retry-policy.js.map +1 -1
- package/packages/core/dist/registry.d.ts +47 -3
- package/packages/core/dist/registry.d.ts.map +1 -1
- package/packages/core/dist/registry.js +150 -3
- package/packages/core/dist/registry.js.map +1 -1
- package/packages/core/dist/scheduler/enqueue.d.ts +71 -0
- package/packages/core/dist/scheduler/enqueue.d.ts.map +1 -0
- package/packages/core/dist/scheduler/enqueue.js +116 -0
- package/packages/core/dist/scheduler/enqueue.js.map +1 -0
- package/packages/core/dist/scheduler/index.d.ts +1 -0
- package/packages/core/dist/scheduler/index.d.ts.map +1 -1
- package/packages/core/dist/scheduler/index.js +1 -0
- package/packages/core/dist/scheduler/index.js.map +1 -1
- package/packages/core/dist/scheduler/missions.d.ts +15 -0
- package/packages/core/dist/scheduler/missions.d.ts.map +1 -1
- package/packages/core/dist/scheduler/missions.js +43 -4
- package/packages/core/dist/scheduler/missions.js.map +1 -1
- package/packages/core/dist/scheduler/types.d.ts +10 -0
- package/packages/core/dist/scheduler/types.d.ts.map +1 -1
- package/packages/core/dist/scheduler/types.js +3 -0
- package/packages/core/dist/scheduler/types.js.map +1 -1
- package/packages/core/dist/secrets/settings.d.ts +6 -6
- package/packages/core/dist/semver.d.ts +17 -0
- package/packages/core/dist/semver.d.ts.map +1 -1
- package/packages/core/dist/semver.js +130 -0
- package/packages/core/dist/semver.js.map +1 -1
- package/packages/core/dist/sentinels/run.d.ts +6 -1
- package/packages/core/dist/sentinels/run.d.ts.map +1 -1
- package/packages/core/dist/sentinels/run.js +43 -24
- package/packages/core/dist/sentinels/run.js.map +1 -1
- package/packages/core/dist/sentinels/types.d.ts +13 -0
- package/packages/core/dist/sentinels/types.d.ts.map +1 -1
- package/packages/core/dist/sentinels/types.js.map +1 -1
- package/packages/core/dist/sources/index.d.ts +1 -0
- package/packages/core/dist/sources/index.d.ts.map +1 -1
- package/packages/core/dist/sources/index.js +1 -0
- package/packages/core/dist/sources/index.js.map +1 -1
- package/packages/core/dist/sources/run.d.ts +8 -0
- package/packages/core/dist/sources/run.d.ts.map +1 -1
- package/packages/core/dist/sources/run.js +1 -1
- package/packages/core/dist/sources/run.js.map +1 -1
- package/packages/core/dist/sources/watch.d.ts +40 -0
- package/packages/core/dist/sources/watch.d.ts.map +1 -0
- package/packages/core/dist/sources/watch.js +81 -0
- package/packages/core/dist/sources/watch.js.map +1 -0
- package/packages/core/dist/time.d.ts +17 -3
- package/packages/core/dist/time.d.ts.map +1 -1
- package/packages/core/dist/time.js +27 -3
- package/packages/core/dist/time.js.map +1 -1
- package/packages/core/dist/tools.d.ts +77 -1
- package/packages/core/dist/tools.d.ts.map +1 -1
- package/packages/core/dist/tools.js.map +1 -1
- package/packages/core/dist/views.d.ts +68 -68
- package/packages/core/dist/views.d.ts.map +1 -1
- package/packages/core/dist/views.js +3 -0
- package/packages/core/dist/views.js.map +1 -1
- package/packages/core/dist/widget-settings.d.ts +161 -0
- package/packages/core/dist/widget-settings.d.ts.map +1 -0
- package/packages/core/dist/widget-settings.js +314 -0
- package/packages/core/dist/widget-settings.js.map +1 -0
- package/packages/core/dist/widgets.d.ts +206 -0
- package/packages/core/dist/widgets.d.ts.map +1 -0
- package/packages/core/dist/widgets.js +247 -0
- package/packages/core/dist/widgets.js.map +1 -0
- package/packages/core/migrations/056_dashboard_sessions.sql +37 -0
- package/packages/core/migrations/057_proposal_decided_by.sql +34 -0
- package/packages/core/migrations/058_message_feedback.sql +50 -0
- package/packages/core/migrations/059_dashboard_lock.sql +33 -0
- package/packages/core/migrations/060_owner_places.sql +30 -0
- package/packages/core/migrations/061_owner_formats.sql +10 -0
- package/packages/core/migrations/062_group_deleted.sql +7 -0
- package/packages/core/migrations/063_provider_account_limits.sql +20 -0
- package/packages/core/migrations/064_mission_coalesce.sql +12 -0
- package/packages/core/migrations/065_api_tokens.sql +28 -0
- package/packages/gateway/dist/.tsbuildinfo +1 -1
- package/packages/gateway/dist/account-limits.d.ts +45 -0
- package/packages/gateway/dist/account-limits.d.ts.map +1 -0
- package/packages/gateway/dist/account-limits.js +87 -0
- package/packages/gateway/dist/account-limits.js.map +1 -0
- package/packages/gateway/dist/accounts-cli.d.ts +88 -0
- package/packages/gateway/dist/accounts-cli.d.ts.map +1 -0
- package/packages/gateway/dist/accounts-cli.js +216 -0
- package/packages/gateway/dist/accounts-cli.js.map +1 -0
- package/packages/gateway/dist/agents/canvas.d.ts +20 -20
- package/packages/gateway/dist/agents/learning-digest.d.ts +11 -1
- package/packages/gateway/dist/agents/learning-digest.d.ts.map +1 -1
- package/packages/gateway/dist/agents/learning-digest.js +43 -4
- 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 +3 -2
- package/packages/gateway/dist/agents/owner-tools.js.map +1 -1
- package/packages/gateway/dist/agents/platform-files.d.ts +2 -0
- package/packages/gateway/dist/agents/platform-files.d.ts.map +1 -1
- package/packages/gateway/dist/agents/platform-files.js +2 -0
- package/packages/gateway/dist/agents/platform-files.js.map +1 -1
- package/packages/gateway/dist/agents/platform.d.ts +40 -20
- package/packages/gateway/dist/agents/platform.d.ts.map +1 -1
- package/packages/gateway/dist/agents/platform.js +46 -3
- 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 +12 -2
- package/packages/gateway/dist/agents-cli.js.map +1 -1
- package/packages/gateway/dist/api-token-cli.d.ts +17 -0
- package/packages/gateway/dist/api-token-cli.d.ts.map +1 -0
- package/packages/gateway/dist/api-token-cli.js +108 -0
- package/packages/gateway/dist/api-token-cli.js.map +1 -0
- package/packages/gateway/dist/bootstrap.d.ts +6 -2
- package/packages/gateway/dist/bootstrap.d.ts.map +1 -1
- package/packages/gateway/dist/bootstrap.js +25 -7
- package/packages/gateway/dist/bootstrap.js.map +1 -1
- package/packages/gateway/dist/chat/session.d.ts +5 -0
- package/packages/gateway/dist/chat/session.d.ts.map +1 -1
- package/packages/gateway/dist/chat/session.js +13 -2
- package/packages/gateway/dist/chat/session.js.map +1 -1
- package/packages/gateway/dist/cli.d.ts.map +1 -1
- package/packages/gateway/dist/cli.js +14 -3
- package/packages/gateway/dist/cli.js.map +1 -1
- package/packages/gateway/dist/index.d.ts +3 -0
- package/packages/gateway/dist/index.d.ts.map +1 -1
- package/packages/gateway/dist/index.js +3 -0
- package/packages/gateway/dist/index.js.map +1 -1
- package/packages/gateway/dist/mcp/requests.d.ts.map +1 -1
- package/packages/gateway/dist/mcp/requests.js +1 -0
- package/packages/gateway/dist/mcp/requests.js.map +1 -1
- package/packages/gateway/dist/missions/dead-letter.d.ts +2 -1
- package/packages/gateway/dist/missions/dead-letter.d.ts.map +1 -1
- package/packages/gateway/dist/missions/dead-letter.js +19 -5
- package/packages/gateway/dist/missions/dead-letter.js.map +1 -1
- package/packages/gateway/dist/missions/defaults.d.ts +6 -0
- package/packages/gateway/dist/missions/defaults.d.ts.map +1 -1
- package/packages/gateway/dist/missions/defaults.js +10 -2
- package/packages/gateway/dist/missions/defaults.js.map +1 -1
- package/packages/gateway/dist/missions/execute.d.ts.map +1 -1
- package/packages/gateway/dist/missions/execute.js +14 -8
- package/packages/gateway/dist/missions/execute.js.map +1 -1
- package/packages/gateway/dist/missions/inline.js +1 -1
- package/packages/gateway/dist/missions/inline.js.map +1 -1
- package/packages/gateway/dist/missions/sentinel-wake.d.ts +11 -0
- package/packages/gateway/dist/missions/sentinel-wake.d.ts.map +1 -1
- package/packages/gateway/dist/missions/sentinel-wake.js +37 -1
- package/packages/gateway/dist/missions/sentinel-wake.js.map +1 -1
- package/packages/gateway/dist/missions-cli.d.ts.map +1 -1
- package/packages/gateway/dist/missions-cli.js +5 -5
- package/packages/gateway/dist/missions-cli.js.map +1 -1
- package/packages/gateway/dist/nudges-cli.js +2 -2
- package/packages/gateway/dist/nudges-cli.js.map +1 -1
- package/packages/gateway/dist/owner-seed.js +2 -2
- package/packages/gateway/dist/owner-seed.js.map +1 -1
- package/packages/gateway/dist/plugins/approve.js +4 -1
- package/packages/gateway/dist/plugins/approve.js.map +1 -1
- package/packages/gateway/dist/plugins/live.d.ts +8 -1
- package/packages/gateway/dist/plugins/live.d.ts.map +1 -1
- package/packages/gateway/dist/plugins/live.js +25 -7
- package/packages/gateway/dist/plugins/live.js.map +1 -1
- package/packages/gateway/dist/plugins/load.d.ts +55 -0
- package/packages/gateway/dist/plugins/load.d.ts.map +1 -1
- package/packages/gateway/dist/plugins/load.js +100 -4
- package/packages/gateway/dist/plugins/load.js.map +1 -1
- package/packages/gateway/dist/plugins/paths.d.ts +14 -0
- package/packages/gateway/dist/plugins/paths.d.ts.map +1 -1
- package/packages/gateway/dist/plugins/paths.js +27 -1
- package/packages/gateway/dist/plugins/paths.js.map +1 -1
- package/packages/gateway/dist/plugins/requires.d.ts +79 -0
- package/packages/gateway/dist/plugins/requires.d.ts.map +1 -0
- package/packages/gateway/dist/plugins/requires.js +178 -0
- package/packages/gateway/dist/plugins/requires.js.map +1 -0
- package/packages/gateway/dist/plugins/stage.d.ts +33 -3
- package/packages/gateway/dist/plugins/stage.d.ts.map +1 -1
- package/packages/gateway/dist/plugins/stage.js +41 -6
- package/packages/gateway/dist/plugins/stage.js.map +1 -1
- package/packages/gateway/dist/plugins/update.d.ts +21 -0
- package/packages/gateway/dist/plugins/update.d.ts.map +1 -1
- package/packages/gateway/dist/plugins/update.js +16 -0
- package/packages/gateway/dist/plugins/update.js.map +1 -1
- package/packages/gateway/dist/plugins-cli.d.ts +5 -1
- package/packages/gateway/dist/plugins-cli.d.ts.map +1 -1
- package/packages/gateway/dist/plugins-cli.js +48 -11
- package/packages/gateway/dist/plugins-cli.js.map +1 -1
- package/packages/gateway/dist/provider-accounts.d.ts +4 -0
- package/packages/gateway/dist/provider-accounts.d.ts.map +1 -1
- package/packages/gateway/dist/provider-accounts.js +68 -10
- package/packages/gateway/dist/provider-accounts.js.map +1 -1
- package/packages/gateway/dist/provider-diagnostics.d.ts.map +1 -1
- package/packages/gateway/dist/provider-diagnostics.js +9 -0
- package/packages/gateway/dist/provider-diagnostics.js.map +1 -1
- package/packages/gateway/dist/reminders-cli.js +2 -2
- package/packages/gateway/dist/reminders-cli.js.map +1 -1
- package/packages/gateway/dist/serve.d.ts +2 -0
- package/packages/gateway/dist/serve.d.ts.map +1 -1
- package/packages/gateway/dist/serve.js +78 -8
- package/packages/gateway/dist/serve.js.map +1 -1
- package/packages/gateway/dist/surfaces/browser-continuation.d.ts +2 -1
- package/packages/gateway/dist/surfaces/browser-continuation.d.ts.map +1 -1
- package/packages/gateway/dist/surfaces/browser-continuation.js +8 -5
- package/packages/gateway/dist/surfaces/browser-continuation.js.map +1 -1
- package/packages/gateway/dist/surfaces/browser-handoff.d.ts +27 -4
- package/packages/gateway/dist/surfaces/browser-handoff.d.ts.map +1 -1
- package/packages/gateway/dist/surfaces/browser-handoff.js +57 -7
- package/packages/gateway/dist/surfaces/browser-handoff.js.map +1 -1
- package/packages/gateway/dist/surfaces/carry-over.d.ts +89 -0
- package/packages/gateway/dist/surfaces/carry-over.d.ts.map +1 -0
- package/packages/gateway/dist/surfaces/carry-over.js +172 -0
- package/packages/gateway/dist/surfaces/carry-over.js.map +1 -0
- package/packages/gateway/dist/surfaces/conversation-lifetime.d.ts +5 -2
- package/packages/gateway/dist/surfaces/conversation-lifetime.d.ts.map +1 -1
- package/packages/gateway/dist/surfaces/conversation-lifetime.js +5 -2
- package/packages/gateway/dist/surfaces/conversation-lifetime.js.map +1 -1
- package/packages/gateway/dist/surfaces/failure.d.ts.map +1 -1
- package/packages/gateway/dist/surfaces/failure.js +9 -1
- package/packages/gateway/dist/surfaces/failure.js.map +1 -1
- package/packages/gateway/dist/system-context.d.ts +18 -0
- package/packages/gateway/dist/system-context.d.ts.map +1 -1
- package/packages/gateway/dist/system-context.js +46 -4
- package/packages/gateway/dist/system-context.js.map +1 -1
- package/packages/gateway/dist/telegram/api.d.ts +34 -2
- package/packages/gateway/dist/telegram/api.d.ts.map +1 -1
- package/packages/gateway/dist/telegram/api.js +15 -2
- package/packages/gateway/dist/telegram/api.js.map +1 -1
- package/packages/gateway/dist/telegram/env-owner.d.ts +30 -0
- package/packages/gateway/dist/telegram/env-owner.d.ts.map +1 -0
- package/packages/gateway/dist/telegram/env-owner.js +45 -0
- package/packages/gateway/dist/telegram/env-owner.js.map +1 -0
- package/packages/gateway/dist/telegram/main.d.ts +0 -2
- package/packages/gateway/dist/telegram/main.d.ts.map +1 -1
- package/packages/gateway/dist/telegram/main.js +21 -28
- package/packages/gateway/dist/telegram/main.js.map +1 -1
- package/packages/gateway/dist/telegram/notify.d.ts.map +1 -1
- package/packages/gateway/dist/telegram/notify.js +1 -1
- package/packages/gateway/dist/telegram/notify.js.map +1 -1
- package/packages/gateway/dist/telegram/outbound.d.ts +3 -3
- package/packages/gateway/dist/telegram/outbound.d.ts.map +1 -1
- package/packages/gateway/dist/telegram/outbound.js +19 -5
- package/packages/gateway/dist/telegram/outbound.js.map +1 -1
- package/packages/gateway/dist/telegram/reactions.d.ts +45 -0
- package/packages/gateway/dist/telegram/reactions.d.ts.map +1 -0
- package/packages/gateway/dist/telegram/reactions.js +107 -0
- package/packages/gateway/dist/telegram/reactions.js.map +1 -0
- package/packages/gateway/dist/telegram/surface.d.ts +5 -1
- package/packages/gateway/dist/telegram/surface.d.ts.map +1 -1
- package/packages/gateway/dist/telegram/surface.js +93 -12
- package/packages/gateway/dist/telegram/surface.js.map +1 -1
- package/packages/gateway/dist/tips/engine.d.ts +2 -0
- package/packages/gateway/dist/tips/engine.d.ts.map +1 -1
- package/packages/gateway/dist/tips/engine.js +8 -5
- package/packages/gateway/dist/tips/engine.js.map +1 -1
- package/packages/gateway/dist/tips/facts.d.ts +23 -0
- package/packages/gateway/dist/tips/facts.d.ts.map +1 -1
- package/packages/gateway/dist/tips/facts.js +19 -0
- package/packages/gateway/dist/tips/facts.js.map +1 -1
- package/packages/gateway/dist/tips/route.js +2 -2
- package/packages/gateway/dist/tips/route.js.map +1 -1
- package/packages/gateway/dist/tips/rules.d.ts +3 -2
- package/packages/gateway/dist/tips/rules.d.ts.map +1 -1
- package/packages/gateway/dist/tips/rules.js +26 -0
- package/packages/gateway/dist/tips/rules.js.map +1 -1
- package/packages/gateway/dist/web/agents.d.ts +3 -1
- package/packages/gateway/dist/web/agents.d.ts.map +1 -1
- package/packages/gateway/dist/web/agents.js +20 -2
- package/packages/gateway/dist/web/agents.js.map +1 -1
- package/packages/gateway/dist/web/api-routes.d.ts +103 -0
- package/packages/gateway/dist/web/api-routes.d.ts.map +1 -0
- package/packages/gateway/dist/web/api-routes.js +1200 -0
- package/packages/gateway/dist/web/api-routes.js.map +1 -0
- package/packages/gateway/dist/web/api-scan.d.ts +17 -0
- package/packages/gateway/dist/web/api-scan.d.ts.map +1 -0
- package/packages/gateway/dist/web/api-scan.js +206 -0
- package/packages/gateway/dist/web/api-scan.js.map +1 -0
- package/packages/gateway/dist/web/api-tokens.d.ts +58 -0
- package/packages/gateway/dist/web/api-tokens.d.ts.map +1 -0
- package/packages/gateway/dist/web/api-tokens.js +136 -0
- package/packages/gateway/dist/web/api-tokens.js.map +1 -0
- package/packages/gateway/dist/web/backups.js +2 -2
- package/packages/gateway/dist/web/backups.js.map +1 -1
- package/packages/gateway/dist/web/chat.d.ts +10 -3
- package/packages/gateway/dist/web/chat.d.ts.map +1 -1
- package/packages/gateway/dist/web/chat.js +18 -5
- package/packages/gateway/dist/web/chat.js.map +1 -1
- package/packages/gateway/dist/web/group-lifecycle.d.ts +18 -0
- package/packages/gateway/dist/web/group-lifecycle.d.ts.map +1 -0
- package/packages/gateway/dist/web/group-lifecycle.js +46 -0
- package/packages/gateway/dist/web/group-lifecycle.js.map +1 -0
- package/packages/gateway/dist/web/lock-image.d.ts +37 -0
- package/packages/gateway/dist/web/lock-image.d.ts.map +1 -0
- package/packages/gateway/dist/web/lock-image.js +253 -0
- package/packages/gateway/dist/web/lock-image.js.map +1 -0
- package/packages/gateway/dist/web/lock.d.ts +162 -0
- package/packages/gateway/dist/web/lock.d.ts.map +1 -0
- package/packages/gateway/dist/web/lock.js +472 -0
- package/packages/gateway/dist/web/lock.js.map +1 -0
- package/packages/gateway/dist/web/pages.d.ts +1 -0
- package/packages/gateway/dist/web/pages.d.ts.map +1 -1
- package/packages/gateway/dist/web/pages.js +12 -1
- package/packages/gateway/dist/web/pages.js.map +1 -1
- package/packages/gateway/dist/web/places.d.ts +27 -0
- package/packages/gateway/dist/web/places.d.ts.map +1 -0
- package/packages/gateway/dist/web/places.js +90 -0
- package/packages/gateway/dist/web/places.js.map +1 -0
- package/packages/gateway/dist/web/plugins.d.ts +34 -1
- package/packages/gateway/dist/web/plugins.d.ts.map +1 -1
- package/packages/gateway/dist/web/plugins.js +99 -10
- package/packages/gateway/dist/web/plugins.js.map +1 -1
- package/packages/gateway/dist/web/proposals.d.ts +21 -0
- package/packages/gateway/dist/web/proposals.d.ts.map +1 -1
- package/packages/gateway/dist/web/proposals.js +50 -1
- package/packages/gateway/dist/web/proposals.js.map +1 -1
- package/packages/gateway/dist/web/read.d.ts +6 -0
- package/packages/gateway/dist/web/read.d.ts.map +1 -1
- package/packages/gateway/dist/web/read.js.map +1 -1
- package/packages/gateway/dist/web/recovery.d.ts +19 -2
- package/packages/gateway/dist/web/recovery.d.ts.map +1 -1
- package/packages/gateway/dist/web/recovery.js +148 -7
- package/packages/gateway/dist/web/recovery.js.map +1 -1
- package/packages/gateway/dist/web/server.d.ts +9 -0
- package/packages/gateway/dist/web/server.d.ts.map +1 -1
- package/packages/gateway/dist/web/server.js +479 -52
- package/packages/gateway/dist/web/server.js.map +1 -1
- package/packages/gateway/dist/web/sessions.d.ts +124 -9
- package/packages/gateway/dist/web/sessions.d.ts.map +1 -1
- package/packages/gateway/dist/web/sessions.js +306 -24
- package/packages/gateway/dist/web/sessions.js.map +1 -1
- package/packages/gateway/dist/web/signed-out.d.ts +45 -0
- package/packages/gateway/dist/web/signed-out.d.ts.map +1 -0
- package/packages/gateway/dist/web/signed-out.js +201 -0
- package/packages/gateway/dist/web/signed-out.js.map +1 -0
- package/packages/gateway/dist/web/stream.d.ts.map +1 -1
- package/packages/gateway/dist/web/stream.js +14 -0
- package/packages/gateway/dist/web/stream.js.map +1 -1
- package/packages/gateway/dist/web/tailscale.d.ts +46 -4
- package/packages/gateway/dist/web/tailscale.d.ts.map +1 -1
- package/packages/gateway/dist/web/tailscale.js +88 -16
- package/packages/gateway/dist/web/tailscale.js.map +1 -1
- package/packages/gateway/dist/web/widgets.d.ts +130 -0
- package/packages/gateway/dist/web/widgets.d.ts.map +1 -0
- package/packages/gateway/dist/web/widgets.js +473 -0
- package/packages/gateway/dist/web/widgets.js.map +1 -0
- package/packages/install/dist/.tsbuildinfo +1 -1
- package/packages/install/dist/backup.d.ts +18 -0
- package/packages/install/dist/backup.d.ts.map +1 -1
- package/packages/install/dist/backup.js +39 -2
- package/packages/install/dist/backup.js.map +1 -1
- package/packages/install/dist/kept-data.d.ts +20 -0
- package/packages/install/dist/kept-data.d.ts.map +1 -0
- package/packages/install/dist/kept-data.js +34 -0
- package/packages/install/dist/kept-data.js.map +1 -0
- package/packages/install/dist/launcher.d.ts.map +1 -1
- package/packages/install/dist/launcher.js +17 -3
- package/packages/install/dist/launcher.js.map +1 -1
- package/packages/runtime/dist/.tsbuildinfo +1 -1
- package/packages/runtime/dist/anthropic.d.ts +9 -0
- package/packages/runtime/dist/anthropic.d.ts.map +1 -1
- package/packages/runtime/dist/anthropic.js +26 -9
- package/packages/runtime/dist/anthropic.js.map +1 -1
- package/packages/runtime/dist/codex-direct.d.ts +2 -1
- package/packages/runtime/dist/codex-direct.d.ts.map +1 -1
- package/packages/runtime/dist/codex-direct.js +13 -6
- package/packages/runtime/dist/codex-direct.js.map +1 -1
- package/packages/runtime/dist/index.d.ts +1 -0
- package/packages/runtime/dist/index.d.ts.map +1 -1
- package/packages/runtime/dist/index.js +1 -0
- package/packages/runtime/dist/index.js.map +1 -1
- package/packages/runtime/dist/loop.d.ts +2 -0
- package/packages/runtime/dist/loop.d.ts.map +1 -1
- package/packages/runtime/dist/loop.js +22 -0
- package/packages/runtime/dist/loop.js.map +1 -1
- package/packages/runtime/dist/openai.d.ts.map +1 -1
- package/packages/runtime/dist/openai.js +19 -7
- package/packages/runtime/dist/openai.js.map +1 -1
- package/packages/runtime/dist/rate-limit.d.ts +91 -0
- package/packages/runtime/dist/rate-limit.d.ts.map +1 -0
- package/packages/runtime/dist/rate-limit.js +291 -0
- package/packages/runtime/dist/rate-limit.js.map +1 -0
- package/packages/runtime/dist/retry.d.ts +40 -0
- package/packages/runtime/dist/retry.d.ts.map +1 -1
- package/packages/runtime/dist/retry.js +42 -8
- package/packages/runtime/dist/retry.js.map +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/agent.d.ts.map +1 -1
- package/packages/tools/email/dist/agent.js +11 -0
- package/packages/tools/email/dist/agent.js.map +1 -1
- package/packages/tools/email/dist/folders.d.ts +14 -0
- package/packages/tools/email/dist/folders.d.ts.map +1 -1
- package/packages/tools/email/dist/folders.js +23 -0
- package/packages/tools/email/dist/folders.js.map +1 -1
- package/packages/tools/email/dist/imap/fake.d.ts +144 -3
- package/packages/tools/email/dist/imap/fake.d.ts.map +1 -1
- package/packages/tools/email/dist/imap/fake.js +393 -4
- package/packages/tools/email/dist/imap/fake.js.map +1 -1
- package/packages/tools/email/dist/imap/imapflow-client.d.ts +14 -1
- package/packages/tools/email/dist/imap/imapflow-client.d.ts.map +1 -1
- package/packages/tools/email/dist/imap/imapflow-client.js +222 -2
- package/packages/tools/email/dist/imap/imapflow-client.js.map +1 -1
- package/packages/tools/email/dist/index.d.ts +14 -2
- package/packages/tools/email/dist/index.d.ts.map +1 -1
- package/packages/tools/email/dist/index.js +26 -4
- package/packages/tools/email/dist/index.js.map +1 -1
- package/packages/tools/email/dist/logins.d.ts +24 -0
- package/packages/tools/email/dist/logins.d.ts.map +1 -0
- package/packages/tools/email/dist/logins.js +35 -0
- package/packages/tools/email/dist/logins.js.map +1 -0
- package/packages/tools/email/dist/mail.d.ts +20 -0
- package/packages/tools/email/dist/mail.d.ts.map +1 -1
- package/packages/tools/email/dist/mail.js +26 -0
- package/packages/tools/email/dist/mail.js.map +1 -1
- package/packages/tools/email/dist/mailbox/actions.d.ts +290 -0
- package/packages/tools/email/dist/mailbox/actions.d.ts.map +1 -0
- package/packages/tools/email/dist/mailbox/actions.js +1105 -0
- package/packages/tools/email/dist/mailbox/actions.js.map +1 -0
- package/packages/tools/email/dist/mailbox/arrival.d.ts +61 -0
- package/packages/tools/email/dist/mailbox/arrival.d.ts.map +1 -0
- package/packages/tools/email/dist/mailbox/arrival.js +153 -0
- package/packages/tools/email/dist/mailbox/arrival.js.map +1 -0
- package/packages/tools/email/dist/mailbox/select.d.ts +53 -0
- package/packages/tools/email/dist/mailbox/select.d.ts.map +1 -0
- package/packages/tools/email/dist/mailbox/select.js +124 -0
- package/packages/tools/email/dist/mailbox/select.js.map +1 -0
- package/packages/tools/email/dist/metrics.d.ts +3 -3
- package/packages/tools/email/dist/metrics.js +4 -4
- package/packages/tools/email/dist/pages/accounts.d.ts +37 -1
- package/packages/tools/email/dist/pages/accounts.d.ts.map +1 -1
- package/packages/tools/email/dist/pages/accounts.js +104 -2
- package/packages/tools/email/dist/pages/accounts.js.map +1 -1
- package/packages/tools/email/dist/pages/descriptors.d.ts.map +1 -1
- package/packages/tools/email/dist/pages/descriptors.js +156 -0
- package/packages/tools/email/dist/pages/descriptors.js.map +1 -1
- package/packages/tools/email/dist/pages/drafts-tools.d.ts +2 -2
- package/packages/tools/email/dist/pages/format.d.ts +1 -12
- package/packages/tools/email/dist/pages/format.d.ts.map +1 -1
- package/packages/tools/email/dist/pages/format.js +17 -0
- package/packages/tools/email/dist/pages/format.js.map +1 -1
- package/packages/tools/email/dist/pages/index.d.ts.map +1 -1
- package/packages/tools/email/dist/pages/index.js +5 -1
- package/packages/tools/email/dist/pages/index.js.map +1 -1
- package/packages/tools/email/dist/pages/policies-tools.d.ts +7 -0
- package/packages/tools/email/dist/pages/policies-tools.d.ts.map +1 -1
- package/packages/tools/email/dist/pages/policies-tools.js +11 -2
- package/packages/tools/email/dist/pages/policies-tools.js.map +1 -1
- package/packages/tools/email/dist/pages/queries.d.ts +23 -0
- package/packages/tools/email/dist/pages/queries.d.ts.map +1 -1
- package/packages/tools/email/dist/pages/queries.js +185 -4
- package/packages/tools/email/dist/pages/queries.js.map +1 -1
- package/packages/tools/email/dist/policies/auto.d.ts +133 -0
- package/packages/tools/email/dist/policies/auto.d.ts.map +1 -0
- package/packages/tools/email/dist/policies/auto.js +296 -0
- package/packages/tools/email/dist/policies/auto.js.map +1 -0
- package/packages/tools/email/dist/policies/gate.d.ts +34 -10
- package/packages/tools/email/dist/policies/gate.d.ts.map +1 -1
- package/packages/tools/email/dist/policies/gate.js +27 -12
- package/packages/tools/email/dist/policies/gate.js.map +1 -1
- package/packages/tools/email/dist/policies/learn.d.ts +26 -18
- package/packages/tools/email/dist/policies/learn.d.ts.map +1 -1
- package/packages/tools/email/dist/policies/learn.js +36 -10
- package/packages/tools/email/dist/policies/learn.js.map +1 -1
- package/packages/tools/email/dist/policies/learned.d.ts +25 -2
- package/packages/tools/email/dist/policies/learned.d.ts.map +1 -1
- package/packages/tools/email/dist/policies/learned.js +47 -5
- package/packages/tools/email/dist/policies/learned.js.map +1 -1
- package/packages/tools/email/dist/policies/store.d.ts +8 -2
- package/packages/tools/email/dist/policies/store.d.ts.map +1 -1
- package/packages/tools/email/dist/policies/store.js +19 -5
- package/packages/tools/email/dist/policies/store.js.map +1 -1
- package/packages/tools/email/dist/ports.d.ts +126 -0
- package/packages/tools/email/dist/ports.d.ts.map +1 -1
- package/packages/tools/email/dist/ports.js +6 -0
- package/packages/tools/email/dist/ports.js.map +1 -1
- package/packages/tools/email/dist/rows.d.ts.map +1 -1
- package/packages/tools/email/dist/rows.js +3 -1
- package/packages/tools/email/dist/rows.js.map +1 -1
- package/packages/tools/email/dist/sentinels/waiting-on-me.d.ts +2 -2
- package/packages/tools/email/dist/sentinels/waiting-on-me.d.ts.map +1 -1
- package/packages/tools/email/dist/sentinels/waiting-on-me.js +8 -3
- package/packages/tools/email/dist/sentinels/waiting-on-me.js.map +1 -1
- package/packages/tools/email/dist/sources/idle.d.ts +98 -0
- package/packages/tools/email/dist/sources/idle.d.ts.map +1 -0
- package/packages/tools/email/dist/sources/idle.js +317 -0
- package/packages/tools/email/dist/sources/idle.js.map +1 -0
- package/packages/tools/email/dist/sources/inbox-poll.d.ts +79 -1
- package/packages/tools/email/dist/sources/inbox-poll.d.ts.map +1 -1
- package/packages/tools/email/dist/sources/inbox-poll.js +420 -145
- package/packages/tools/email/dist/sources/inbox-poll.js.map +1 -1
- package/packages/tools/email/dist/sources/presence.d.ts +47 -0
- package/packages/tools/email/dist/sources/presence.d.ts.map +1 -0
- package/packages/tools/email/dist/sources/presence.js +128 -0
- package/packages/tools/email/dist/sources/presence.js.map +1 -0
- package/packages/tools/email/dist/threads.d.ts +2 -0
- package/packages/tools/email/dist/threads.d.ts.map +1 -1
- package/packages/tools/email/dist/threads.js +12 -3
- package/packages/tools/email/dist/threads.js.map +1 -1
- package/packages/tools/email/dist/tools/mailbox.d.ts +108 -0
- package/packages/tools/email/dist/tools/mailbox.d.ts.map +1 -0
- package/packages/tools/email/dist/tools/mailbox.js +359 -0
- package/packages/tools/email/dist/tools/mailbox.js.map +1 -0
- package/packages/tools/email/dist/tools/policies.d.ts +8 -2
- package/packages/tools/email/dist/tools/policies.d.ts.map +1 -1
- package/packages/tools/email/dist/tools/policies.js +43 -3
- package/packages/tools/email/dist/tools/policies.js.map +1 -1
- package/packages/tools/email/dist/tools/read.d.ts +2 -2
- package/packages/tools/email/dist/tools/read.d.ts.map +1 -1
- package/packages/tools/email/dist/tools/read.js +29 -2
- package/packages/tools/email/dist/tools/read.js.map +1 -1
- package/packages/tools/email/dist/tools/threads.d.ts +2 -2
- package/packages/tools/email/dist/tools/triage.d.ts.map +1 -1
- package/packages/tools/email/dist/tools/triage.js +10 -4
- package/packages/tools/email/dist/tools/triage.js.map +1 -1
- package/packages/tools/email/dist/widgets.d.ts +13 -0
- package/packages/tools/email/dist/widgets.d.ts.map +1 -0
- package/packages/tools/email/dist/widgets.js +51 -0
- package/packages/tools/email/dist/widgets.js.map +1 -0
- package/packages/tools/email/migrations/017_mailbox_actions.sql +60 -0
- package/packages/tools/email/migrations/018_learned_auto.sql +30 -0
- package/packages/tools/email/migrations/019_arrival_pending.sql +26 -0
- package/packages/tools/email/migrations/020_mailbox_presence.sql +44 -0
- package/packages/tools/email/migrations/021_learned_line.sql +9 -0
- package/packages/tools/email/migrations/022_bulk_checked.sql +13 -0
- package/packages/tools/email/package.json +3 -2
- 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/memory/dist/admin.d.ts +9 -0
- package/packages/tools/memory/dist/admin.d.ts.map +1 -1
- package/packages/tools/memory/dist/admin.js +11 -0
- package/packages/tools/memory/dist/admin.js.map +1 -1
- package/packages/tools/web/dist/.tsbuildinfo +1 -1
- package/packages/web/dist/assets/index-D8_tmf2k.js +131 -0
- package/packages/web/dist/assets/index-DYQyioa6.css +1 -0
- package/packages/web/dist/assets/{lottie_light-DmJaDM4A.js → lottie_light-Cdn77Osu.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/packages/web/dist/assets/index-Cn-3X1OI.js +0 -130
- package/packages/web/dist/assets/index-bdj791NB.css +0 -1
|
@@ -1,11 +1,17 @@
|
|
|
1
|
-
import { INBOX, listAccounts, markAccountSynced } from '../config.js';
|
|
1
|
+
import { findAccount, INBOX, listAccounts, markAccountSynced } from '../config.js';
|
|
2
2
|
import { mailboxAuth } from '../credentials.js';
|
|
3
|
-
import {
|
|
3
|
+
import { clearLoginFailure, isAuthFailure, recordLoginFailure } from '../logins.js';
|
|
4
|
+
import { applyPendingArrivals, oweArrivalAction } from '../mailbox/arrival.js';
|
|
5
|
+
import { reconcilePendingChanges } from '../mailbox/actions.js';
|
|
6
|
+
import { placeWords, planFolders } from '../folders.js';
|
|
4
7
|
import { prepareForIngest, triagePrompt } from '../mail.js';
|
|
5
8
|
import { scanMessageDates, skipDates } from '../dates-store.js';
|
|
6
9
|
import { applyPolicies } from '../policies/gate.js';
|
|
7
10
|
import { loadPolicies, recordEvent, settleEvent } from '../policies/store.js';
|
|
8
11
|
import { ownerReplies, senderVerdicts } from '../policies/learn.js';
|
|
12
|
+
import { sweepOpenBulkCards, tellOwnerLearned } from '../policies/auto.js';
|
|
13
|
+
import { IDLE_SLOW_POLL_SECONDS, IdleWatchers } from './idle.js';
|
|
14
|
+
import { checkPresence } from './presence.js';
|
|
9
15
|
import { FOLDER_COLUMNS, toFolder } from '../rows.js';
|
|
10
16
|
import { findThread, joinThread, threadMessages } from '../threads.js';
|
|
11
17
|
import { PROCESSING_VERSION } from '../tools/shared.js';
|
|
@@ -27,6 +33,11 @@ export const MAX_PER_POLL = 50;
|
|
|
27
33
|
export const FLAG_SYNC_WINDOW = 2_000;
|
|
28
34
|
/** Uids per `UID FETCH … FLAGS`, so one command line stays a sane length. */
|
|
29
35
|
export const FLAG_SYNC_BATCH = 500;
|
|
36
|
+
/**
|
|
37
|
+
* Older mail whose `bulk` was never read from its headers, re-read per poll:
|
|
38
|
+
* at most this many messages, newest first, in one header-only fetch.
|
|
39
|
+
*/
|
|
40
|
+
export const BULK_BACKFILL_PER_POLL = 200;
|
|
30
41
|
/** Deadline for every single IMAP call. Env: `EMAIL_POLL_TIMEOUT_MS`. */
|
|
31
42
|
export const DEFAULT_POLL_TIMEOUT_MS = 45_000;
|
|
32
43
|
export const POLL_TIMEOUT_VAR = 'EMAIL_POLL_TIMEOUT_MS';
|
|
@@ -100,12 +111,13 @@ export function triageDedupKey(messageRowId) {
|
|
|
100
111
|
* LIST/STATUS fills an uninitialised cursor but never replaces one already in
|
|
101
112
|
* use.
|
|
102
113
|
*/
|
|
103
|
-
async function ensureFolder(db, account, name, kind = 'other', synced = false, boundary) {
|
|
104
|
-
const { rows } = await db.query(`insert into email.folders (account_id, name, kind, synced, uidvalidity, last_uid)
|
|
105
|
-
values ($1, $2, $3, $4, $5, $6)
|
|
114
|
+
async function ensureFolder(db, account, name, kind = 'other', synced = false, boundary, specialUse = null) {
|
|
115
|
+
const { rows } = await db.query(`insert into email.folders (account_id, name, kind, synced, uidvalidity, last_uid, special_use)
|
|
116
|
+
values ($1, $2, $3, $4, $5, $6, $7)
|
|
106
117
|
on conflict (account_id, name) do update
|
|
107
118
|
set kind = excluded.kind,
|
|
108
119
|
synced = excluded.synced,
|
|
120
|
+
special_use = coalesce(excluded.special_use, email.folders.special_use),
|
|
109
121
|
uidvalidity = case
|
|
110
122
|
when email.folders.uidvalidity is null and excluded.kind = 'sent'
|
|
111
123
|
then excluded.uidvalidity
|
|
@@ -116,7 +128,7 @@ async function ensureFolder(db, account, name, kind = 'other', synced = false, b
|
|
|
116
128
|
then excluded.last_uid
|
|
117
129
|
else email.folders.last_uid
|
|
118
130
|
end
|
|
119
|
-
returning ${FOLDER_COLUMNS}`, [account.id, name, kind, synced, boundary?.uidValidity ?? null, boundary?.lastUid ?? 0]);
|
|
131
|
+
returning ${FOLDER_COLUMNS}`, [account.id, name, kind, synced, boundary?.uidValidity ?? null, boundary?.lastUid ?? 0, specialUse]);
|
|
120
132
|
const row = rows[0];
|
|
121
133
|
if (!row)
|
|
122
134
|
throw new Error('email.inbox-poll: folder upsert returned no row');
|
|
@@ -174,7 +186,11 @@ async function discoverFolders(db, account, client, timeoutMs, log) {
|
|
|
174
186
|
}
|
|
175
187
|
: undefined;
|
|
176
188
|
try {
|
|
177
|
-
|
|
189
|
+
const use = listed
|
|
190
|
+
? [listed.specialUse ?? '', ...listed.flags].map((f) => f.trim().toLowerCase())
|
|
191
|
+
.find((f) => ['\\all', '\\archive', '\\trash', '\\junk', '\\sent', '\\drafts'].includes(f)) ?? null
|
|
192
|
+
: null;
|
|
193
|
+
await ensureFolder(db, account, folder.name, folder.kind, folder.synced, boundary, use);
|
|
178
194
|
if (folder.kind === 'sent')
|
|
179
195
|
sentPersisted = true;
|
|
180
196
|
}
|
|
@@ -234,12 +250,33 @@ async function commitBatch(db, account, folder, uidValidity, fetched, direction,
|
|
|
234
250
|
return db.transaction(async (client) => {
|
|
235
251
|
const pending = [];
|
|
236
252
|
for (const message of fetched) {
|
|
253
|
+
/*
|
|
254
|
+
* Back in the inbox: a message buddi holds as gone, placed outside
|
|
255
|
+
* the inbox (archived, labelled, trashed in another app), or put back
|
|
256
|
+
* here with its new uid unknown, arriving under a new uid is the same
|
|
257
|
+
* message — its row follows, and it is neither stored twice nor
|
|
258
|
+
* triaged again.
|
|
259
|
+
*/
|
|
260
|
+
if (direction === 'in' && message.messageId) {
|
|
261
|
+
const back = await client.query(`update email.messages m
|
|
262
|
+
set folder_id = $3, uidvalidity = $4, uid = $5, gone_at = null, flags = $6::jsonb
|
|
263
|
+
from email.folders f
|
|
264
|
+
where f.id = m.folder_id and m.account_id = $1 and m.message_id = $2 and m.direction = 'in'
|
|
265
|
+
and (m.gone_at is not null or f.kind <> 'inbox' or m.uidvalidity = 0)
|
|
266
|
+
and not exists (select 1 from email.messages o
|
|
267
|
+
where o.account_id = $1 and o.folder_id = $3 and o.uidvalidity = $4 and o.uid = $5)
|
|
268
|
+
returning m.id`, [account.id, message.messageId, folder.id, uidValidity, message.uid, JSON.stringify(message.flags)]);
|
|
269
|
+
if ((back.rowCount ?? 0) > 0) {
|
|
270
|
+
await client.query(`update email.threads set last_folder_id = $2, last_uidvalidity = $3, last_uid = $4 where last_message_id = $1`, [String(back.rows[0].id), folder.id, uidValidity, message.uid]);
|
|
271
|
+
continue;
|
|
272
|
+
}
|
|
273
|
+
}
|
|
237
274
|
const { rows } = await client.query(`insert into email.messages
|
|
238
275
|
(account_id, folder_id, uidvalidity, uid, message_id, thread_key, list_id, from_addr,
|
|
239
276
|
to_addrs, cc, subject, date, internal_date, snippet, body_text, has_attachments,
|
|
240
|
-
attachments, flags, direction, triage_enqueued_at)
|
|
277
|
+
attachments, flags, direction, triage_enqueued_at, bulk)
|
|
241
278
|
values ($1, $2, $3, $4, $5, $6, $7, $8, $9::jsonb, $10::jsonb, $11, $12, $13, $14, $15,
|
|
242
|
-
$16, $17::jsonb, $18::jsonb, $19, $20)
|
|
279
|
+
$16, $17::jsonb, $18::jsonb, $19, $20, $21)
|
|
243
280
|
on conflict (account_id, folder_id, uidvalidity, uid) do nothing
|
|
244
281
|
returning id`, [
|
|
245
282
|
account.id,
|
|
@@ -263,6 +300,7 @@ async function commitBatch(db, account, folder, uidValidity, fetched, direction,
|
|
|
263
300
|
direction,
|
|
264
301
|
// Sent mail is nobody's to triage; it is stamped as it lands.
|
|
265
302
|
direction === 'out' ? now : null,
|
|
303
|
+
message.bulk === true,
|
|
266
304
|
]);
|
|
267
305
|
const id = rows[0]?.id;
|
|
268
306
|
if (!id)
|
|
@@ -344,7 +382,276 @@ export function createInboxPollSource(opts) {
|
|
|
344
382
|
const onlyFolder = opts.mailbox;
|
|
345
383
|
const limit = Math.min(Math.max(1, opts.limit ?? MAX_PER_POLL), MAX_PER_POLL);
|
|
346
384
|
const agentId = opts.agentId ?? TRIAGE_AGENT_ID;
|
|
347
|
-
|
|
385
|
+
const slowPollMs = (opts.slowPollSeconds ?? IDLE_SLOW_POLL_SECONDS) * 1000;
|
|
386
|
+
/*
|
|
387
|
+
* One poll of one account at a time, whoever asked: the scheduled pass, or
|
|
388
|
+
* IDLE. `inFlight` is the lock; `again` is a change IDLE saw while a poll
|
|
389
|
+
* was already running, which earns exactly one more poll after it.
|
|
390
|
+
* `lastPolled` is this process's own clock of when each account last
|
|
391
|
+
* finished, for the slower safety-net period while IDLE is live.
|
|
392
|
+
*/
|
|
393
|
+
const inFlight = new Map();
|
|
394
|
+
const again = new Set();
|
|
395
|
+
const lastPolled = new Map();
|
|
396
|
+
let watchers = null;
|
|
397
|
+
let watchCtx = null;
|
|
398
|
+
/** Run `work` as this account's poll. Callers check `inFlight` first; this sets it synchronously. */
|
|
399
|
+
function runLocked(accountId, work) {
|
|
400
|
+
const running = (async () => {
|
|
401
|
+
try {
|
|
402
|
+
await work();
|
|
403
|
+
}
|
|
404
|
+
finally {
|
|
405
|
+
inFlight.delete(accountId);
|
|
406
|
+
lastPolled.set(accountId, Date.now());
|
|
407
|
+
if (again.delete(accountId)) {
|
|
408
|
+
const ctx = watcherCtx();
|
|
409
|
+
// Like IDLE's own debounced poll: a failure is logged (a refused
|
|
410
|
+
// login was already recorded by the poll), never left unhandled.
|
|
411
|
+
if (ctx !== null) {
|
|
412
|
+
pollNow(accountId).catch((err) => {
|
|
413
|
+
(ctx.buddi?.log ?? ((line) => console.error(line)))(`email.inbox-poll: follow-up poll failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
414
|
+
});
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
})();
|
|
419
|
+
inFlight.set(accountId, running);
|
|
420
|
+
return running;
|
|
421
|
+
}
|
|
422
|
+
function watcherCtx() {
|
|
423
|
+
return watchers ? watchCtx : null;
|
|
424
|
+
}
|
|
425
|
+
/** IDLE saw a change: this account's poll, now, or once more after the one running. */
|
|
426
|
+
function pollNow(accountId) {
|
|
427
|
+
const ctx = watcherCtx();
|
|
428
|
+
if (ctx === null)
|
|
429
|
+
return Promise.resolve();
|
|
430
|
+
if (inFlight.has(accountId)) {
|
|
431
|
+
again.add(accountId);
|
|
432
|
+
return Promise.resolve();
|
|
433
|
+
}
|
|
434
|
+
return runLocked(accountId, async () => {
|
|
435
|
+
const account = await findAccount(ctx.buddi.db, accountId);
|
|
436
|
+
if (account === null)
|
|
437
|
+
return;
|
|
438
|
+
const pass = { failures: [], triageReady: ctx.buddi.owner.hasAgent(agentId), saidWaiting: false };
|
|
439
|
+
await pollAccount(ctx, account, pass);
|
|
440
|
+
if (pass.failures.length > 0)
|
|
441
|
+
throw pass.failures[0];
|
|
442
|
+
});
|
|
443
|
+
}
|
|
444
|
+
/** One account's whole pass: connect, folders, flags, drain, on-arrival actions. */
|
|
445
|
+
async function pollAccount(ctx, account, pass) {
|
|
446
|
+
const log = ctx.buddi?.log ?? ((line) => console.error(line));
|
|
447
|
+
const env = opts.env ?? process.env;
|
|
448
|
+
const auth = await mailboxAuth(ctx, account, opts.env);
|
|
449
|
+
if (!auth.ok) {
|
|
450
|
+
// A typed configuration problem: say it once per poll and stop. An
|
|
451
|
+
// unattended run that needs a secret fails with a problem; it never
|
|
452
|
+
// hangs and never falls back to asking.
|
|
453
|
+
log(`email.inbox-poll: ${auth.problem.code}: ${auth.problem.message}`);
|
|
454
|
+
return;
|
|
455
|
+
}
|
|
456
|
+
const timeoutMs = Math.max(1, opts.timeoutMs ?? envInt(env, POLL_TIMEOUT_VAR, DEFAULT_POLL_TIMEOUT_MS));
|
|
457
|
+
const backfill = Math.max(0, opts.backfill ?? envInt(env, BACKFILL_VAR, DEFAULT_BACKFILL));
|
|
458
|
+
// The connection is opened for this poll and closed at the end of it,
|
|
459
|
+
// always. A long-lived IMAP session is a socket that silently dies while
|
|
460
|
+
// nobody is looking; one per poll is cheap (half a second) and honest.
|
|
461
|
+
// Both folders are walked over the same connection.
|
|
462
|
+
let client = null;
|
|
463
|
+
const pending = [];
|
|
464
|
+
/*
|
|
465
|
+
* Did this account's pass get all the way through? Only then is it a
|
|
466
|
+
* sync, and only then is `last_synced_at` moved: a Sent folder that
|
|
467
|
+
* timed out still let the inbox land, but it means what we hold for
|
|
468
|
+
* this mailbox is no longer everything the server has, and a metric
|
|
469
|
+
* that stamped it "as of now" would be saying otherwise.
|
|
470
|
+
*/
|
|
471
|
+
let complete = true;
|
|
472
|
+
try {
|
|
473
|
+
try {
|
|
474
|
+
client = await withDeadline('connect', timeoutMs, opts.connect(account, auth.value),
|
|
475
|
+
// We gave up waiting, but the connection may still arrive: close it
|
|
476
|
+
// rather than leave a socket nobody owns.
|
|
477
|
+
(late) => void late.close().catch(() => { }));
|
|
478
|
+
}
|
|
479
|
+
catch (err) {
|
|
480
|
+
// The provider refused the password it was given: written on the
|
|
481
|
+
// row so Settings → Email says "Password needed" (`logins.ts`).
|
|
482
|
+
if (isAuthFailure(err)) {
|
|
483
|
+
await recordLoginFailure(ctx.buddi.db, account.id, err, ctx.buddi.clock.now()).catch(() => { });
|
|
484
|
+
log(`email.inbox-poll: ${account.address} refused its stored password; Settings → Email → Set password`);
|
|
485
|
+
}
|
|
486
|
+
throw err;
|
|
487
|
+
}
|
|
488
|
+
await clearLoginFailure(ctx.buddi.db, account.id);
|
|
489
|
+
// Which folders this account has, discovered once and remembered.
|
|
490
|
+
// A caller that named one folder gets that folder and no listing:
|
|
491
|
+
// the CLI and the tests both drive a single mailbox on purpose.
|
|
492
|
+
const folders = onlyFolder
|
|
493
|
+
? [await ensureFolder(ctx.buddi.db, account, onlyFolder, 'inbox', true)]
|
|
494
|
+
: (await discoverFolders(ctx.buddi.db, account, client, timeoutMs, log)).filter((f) => f.synced);
|
|
495
|
+
// New discovery persists Sent's LIST/STATUS boundary above. This
|
|
496
|
+
// loop is for an older or partially initialised row that still has
|
|
497
|
+
// no generation: try to plant it before INBOX work, but isolate a
|
|
498
|
+
// failed SELECT or cursor write so incoming mail still lands.
|
|
499
|
+
const attemptedSent = new Set();
|
|
500
|
+
for (const folder of folders.filter((f) => f.kind === 'sent' && f.uidValidity === null)) {
|
|
501
|
+
attemptedSent.add(folder.id);
|
|
502
|
+
try {
|
|
503
|
+
await pollFolder(ctx, account, client, folder, { timeoutMs, backfill, limit, log });
|
|
504
|
+
}
|
|
505
|
+
catch (err) {
|
|
506
|
+
log(`email.inbox-poll: could not initialize Sent folder ${account.address}/${folder.name}: ` +
|
|
507
|
+
`${err instanceof Error ? err.message : String(err)}; continuing with INBOX`);
|
|
508
|
+
complete = false;
|
|
509
|
+
pass.failures.push(err);
|
|
510
|
+
}
|
|
511
|
+
}
|
|
512
|
+
// The inbox first: it is the one that wakes anybody, and a Sent
|
|
513
|
+
// folder that times out must not cost the new mail its run.
|
|
514
|
+
for (const folder of [...folders].filter((f) => !attemptedSent.has(f.id)).sort((a, b) => (a.kind === 'inbox' ? -1 : b.kind === 'inbox' ? 1 : 0))) {
|
|
515
|
+
try {
|
|
516
|
+
const polled = await pollFolder(ctx, account, client, folder, {
|
|
517
|
+
timeoutMs,
|
|
518
|
+
backfill,
|
|
519
|
+
limit,
|
|
520
|
+
log,
|
|
521
|
+
});
|
|
522
|
+
pending.push(...polled.pending);
|
|
523
|
+
if (folder.kind === 'inbox') {
|
|
524
|
+
// After ingest, so the new rows are in the window with the
|
|
525
|
+
// flags they arrived with. A re-sync that fails costs nobody
|
|
526
|
+
// their mail: the rows landed, the runs are queued below, and
|
|
527
|
+
// only this pass stops counting as a sync — the unread count
|
|
528
|
+
// it would have corrected is not stamped as current.
|
|
529
|
+
try {
|
|
530
|
+
await syncFlags(ctx.buddi.db, account, client, polled.folder, polled.status, timeoutMs, log);
|
|
531
|
+
}
|
|
532
|
+
catch (err) {
|
|
533
|
+
log(`email.inbox-poll: could not re-sync flags on ${account.address}/${folder.name}: ` +
|
|
534
|
+
`${err instanceof Error ? err.message : String(err)}; new mail still landed`);
|
|
535
|
+
complete = false;
|
|
536
|
+
pass.failures.push(err);
|
|
537
|
+
}
|
|
538
|
+
// What left the inbox in another app (`presence.ts`): after the
|
|
539
|
+
// flags, so a departed row keeps the flags it last had there.
|
|
540
|
+
try {
|
|
541
|
+
const reader = client;
|
|
542
|
+
await checkPresence(ctx.buddi.db, account, reader, polled.folder, polled.status, {
|
|
543
|
+
window: FLAG_SYNC_WINDOW,
|
|
544
|
+
now: ctx.buddi.clock.now(),
|
|
545
|
+
log,
|
|
546
|
+
deadline: (op, work) => withDeadline(op, timeoutMs, work),
|
|
547
|
+
});
|
|
548
|
+
}
|
|
549
|
+
catch (err) {
|
|
550
|
+
log(`email.inbox-poll: could not check what left ${account.address}/${folder.name}: ` +
|
|
551
|
+
`${err instanceof Error ? err.message : String(err)}; new mail still landed`);
|
|
552
|
+
complete = false;
|
|
553
|
+
pass.failures.push(err);
|
|
554
|
+
}
|
|
555
|
+
// Older mail never read for List-Unsubscribe / Precedence: a
|
|
556
|
+
// bounded few, header lines only; a newsletter found keeps the
|
|
557
|
+
// waiting cards for it the way a new one would.
|
|
558
|
+
try {
|
|
559
|
+
const found = await backfillBulk(ctx.buddi.db, client, polled.folder, polled.status, timeoutMs);
|
|
560
|
+
if (found > 0) {
|
|
561
|
+
log(`email.inbox-poll: ${found} older message(s) on ${account.address}/${folder.name} read as sent to many`);
|
|
562
|
+
const proposals = ctx.buddi.proposals;
|
|
563
|
+
if (proposals) {
|
|
564
|
+
const host = { db: ctx.buddi.db, owner: ctx.buddi.owner, proposals };
|
|
565
|
+
const now = ctx.buddi.clock.now();
|
|
566
|
+
if ((await sweepOpenBulkCards(host, now)) > 0)
|
|
567
|
+
await tellOwnerLearned(host, now);
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
catch (err) {
|
|
572
|
+
log(`email.inbox-poll: could not re-read older mail's list headers on ${account.address}/${folder.name}: ` +
|
|
573
|
+
`${err instanceof Error ? err.message : String(err)}; new mail still landed`);
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
catch (err) {
|
|
578
|
+
if (folder.kind !== 'sent')
|
|
579
|
+
throw err;
|
|
580
|
+
log(`email.inbox-poll: could not poll Sent folder ${account.address}/${folder.name}: ` +
|
|
581
|
+
`${err instanceof Error ? err.message : String(err)}; INBOX was still polled`);
|
|
582
|
+
complete = false;
|
|
583
|
+
pass.failures.push(err);
|
|
584
|
+
}
|
|
585
|
+
}
|
|
586
|
+
/*
|
|
587
|
+
* The pass finished. This is the one place `last_synced_at` moves,
|
|
588
|
+
* and it moves whether or not a single message was new: "we read
|
|
589
|
+
* this mailbox and there was nothing" is an answer, and without a
|
|
590
|
+
* mark of its own it is indistinguishable from never having looked.
|
|
591
|
+
*/
|
|
592
|
+
if (complete)
|
|
593
|
+
await markAccountSynced(ctx.buddi.db, account.id, ctx.buddi.clock.now());
|
|
594
|
+
}
|
|
595
|
+
catch (err) {
|
|
596
|
+
complete = false;
|
|
597
|
+
if (err instanceof ImapTimeoutError) {
|
|
598
|
+
// A recorded give-up. Rethrowing it at the end of the pass is
|
|
599
|
+
// deliberate: `runSources` writes it to
|
|
600
|
+
// core.source_runs.last_error and emits `source.polled` with it,
|
|
601
|
+
// so a mailbox that stopped answering is visible rather than silent.
|
|
602
|
+
log(`email.inbox-poll: ${err.message} on ${account.address}; ` +
|
|
603
|
+
`connection closed, retrying next poll`);
|
|
604
|
+
}
|
|
605
|
+
pass.failures.push(err);
|
|
606
|
+
// Whatever did land before the failure is still drained below: a
|
|
607
|
+
// Sent folder that timed out is no reason to sit on the inbox.
|
|
608
|
+
}
|
|
609
|
+
finally {
|
|
610
|
+
await client?.close().catch(() => { });
|
|
611
|
+
}
|
|
612
|
+
try {
|
|
613
|
+
const waiting = await drain(ctx, account, agentId, limit, pending, pass.triageReady);
|
|
614
|
+
if (waiting > 0 && !pass.saidWaiting) {
|
|
615
|
+
pass.saidWaiting = true;
|
|
616
|
+
log(`email.inbox-poll: no triage agent yet — accept the Mail offer on the dashboard`);
|
|
617
|
+
}
|
|
618
|
+
await recordTriageWaiting(ctx.buddi.db, account.id, pass.triageReady ? false : waiting > 0 ? true : null, ctx.buddi.clock.now());
|
|
619
|
+
}
|
|
620
|
+
catch (err) {
|
|
621
|
+
pass.failures.push(err);
|
|
622
|
+
}
|
|
623
|
+
/*
|
|
624
|
+
* Rules with an on-arrival mailbox action (archive, mark read, move):
|
|
625
|
+
* after the gate and the queue, over a connection of their own, and
|
|
626
|
+
* on the undo trail (`mailbox/arrival.ts`). Whatever is owed — this
|
|
627
|
+
* drain's, and an earlier poll's that failed — is tried; a failure is
|
|
628
|
+
* logged, counted, and costs nobody their triage.
|
|
629
|
+
*/
|
|
630
|
+
/*
|
|
631
|
+
* Intent first: a mailbox change this process did not finish (buddi
|
|
632
|
+
* stopped between the server change and its record) left a `pending`
|
|
633
|
+
* trail row. Settle it with the server before any new change acts.
|
|
634
|
+
*/
|
|
635
|
+
try {
|
|
636
|
+
const settled = await reconcilePendingChanges(ctx, account, { connect: opts.connect, ...(opts.env ? { env: opts.env } : {}) });
|
|
637
|
+
if (settled > 0)
|
|
638
|
+
log(`email.inbox-poll: settled ${settled} interrupted mailbox change(s) on ${account.address} with the server`);
|
|
639
|
+
}
|
|
640
|
+
catch (err) {
|
|
641
|
+
log(`email.inbox-poll: could not settle interrupted mailbox changes on ${account.address}: ` +
|
|
642
|
+
`${err instanceof Error ? err.message : String(err)}; the next poll tries again`);
|
|
643
|
+
}
|
|
644
|
+
{
|
|
645
|
+
try {
|
|
646
|
+
await applyPendingArrivals(ctx, account, { connect: opts.connect, ...(opts.env ? { env: opts.env } : {}) });
|
|
647
|
+
}
|
|
648
|
+
catch (err) {
|
|
649
|
+
log(`email.inbox-poll: on-arrival rule actions on ${account.address} failed: ` +
|
|
650
|
+
`${err instanceof Error ? err.message : String(err)}`);
|
|
651
|
+
}
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
const source = {
|
|
348
655
|
id: 'email.inbox-poll',
|
|
349
656
|
description: onlyFolder
|
|
350
657
|
? `Poll ${onlyFolder} for new mail and start a triage run for each new message.`
|
|
@@ -352,7 +659,6 @@ export function createInboxPollSource(opts) {
|
|
|
352
659
|
every: POLL_EVERY_SECONDS,
|
|
353
660
|
async poll(ctx) {
|
|
354
661
|
const log = ctx.buddi?.log ?? ((line) => console.error(line));
|
|
355
|
-
const env = opts.env ?? process.env;
|
|
356
662
|
// Accounts are plural (docs/email.md §2). Every enabled one is polled in
|
|
357
663
|
// this pass, each with its own folders and its own cursor per folder. No
|
|
358
664
|
// mailbox configured is still a valid, running state rather than a
|
|
@@ -362,7 +668,6 @@ export function createInboxPollSource(opts) {
|
|
|
362
668
|
// a mailbox that stopped answering is collected and rethrown after every
|
|
363
669
|
// other account has had its turn, so `runSources` still records it in
|
|
364
670
|
// `core.source_runs.last_error` and the rest of the mail still lands.
|
|
365
|
-
const failures = [];
|
|
366
671
|
/*
|
|
367
672
|
* Is there anybody to hand new mail to? The triage agent is proposed by
|
|
368
673
|
* this plugin, not shipped: until the owner accepts it, a run enqueued
|
|
@@ -371,140 +676,56 @@ export function createInboxPollSource(opts) {
|
|
|
371
676
|
* runs wait, the messages stay unstamped, and the next poll after the
|
|
372
677
|
* agent exists starts them. Said once per poll, not once per message.
|
|
373
678
|
*/
|
|
374
|
-
const
|
|
375
|
-
|
|
679
|
+
const pass = { failures: [], triageReady: ctx.buddi.owner.hasAgent(agentId), saidWaiting: false };
|
|
680
|
+
// The IDLE watchers follow the accounts: one added, removed or turned
|
|
681
|
+
// off since the last pass is picked up here at the latest.
|
|
682
|
+
if (watchers)
|
|
683
|
+
await watchers.reconcile();
|
|
376
684
|
for (const account of await listAccounts(ctx.buddi.db)) {
|
|
377
|
-
|
|
378
|
-
if (
|
|
379
|
-
|
|
380
|
-
// unattended run that needs a secret fails with a problem; it never
|
|
381
|
-
// hangs and never falls back to asking.
|
|
382
|
-
log(`email.inbox-poll: ${auth.problem.code}: ${auth.problem.message}`);
|
|
685
|
+
// Never two polls of one account at once: IDLE already has it.
|
|
686
|
+
if (inFlight.has(account.id)) {
|
|
687
|
+
log(`email.inbox-poll: ${account.address} is being polled already (IDLE); skipping it this pass`);
|
|
383
688
|
continue;
|
|
384
689
|
}
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
let client = null;
|
|
392
|
-
const pending = [];
|
|
393
|
-
/*
|
|
394
|
-
* Did this account's pass get all the way through? Only then is it a
|
|
395
|
-
* sync, and only then is `last_synced_at` moved: a Sent folder that
|
|
396
|
-
* timed out still let the inbox land, but it means what we hold for
|
|
397
|
-
* this mailbox is no longer everything the server has, and a metric
|
|
398
|
-
* that stamped it "as of now" would be saying otherwise.
|
|
399
|
-
*/
|
|
400
|
-
let complete = true;
|
|
401
|
-
try {
|
|
402
|
-
client = await withDeadline('connect', timeoutMs, opts.connect(account, auth.value),
|
|
403
|
-
// We gave up waiting, but the connection may still arrive: close it
|
|
404
|
-
// rather than leave a socket nobody owns.
|
|
405
|
-
(late) => void late.close().catch(() => { }));
|
|
406
|
-
// Which folders this account has, discovered once and remembered.
|
|
407
|
-
// A caller that named one folder gets that folder and no listing:
|
|
408
|
-
// the CLI and the tests both drive a single mailbox on purpose.
|
|
409
|
-
const folders = onlyFolder
|
|
410
|
-
? [await ensureFolder(ctx.buddi.db, account, onlyFolder, 'inbox', true)]
|
|
411
|
-
: (await discoverFolders(ctx.buddi.db, account, client, timeoutMs, log)).filter((f) => f.synced);
|
|
412
|
-
// New discovery persists Sent's LIST/STATUS boundary above. This
|
|
413
|
-
// loop is for an older or partially initialised row that still has
|
|
414
|
-
// no generation: try to plant it before INBOX work, but isolate a
|
|
415
|
-
// failed SELECT or cursor write so incoming mail still lands.
|
|
416
|
-
const attemptedSent = new Set();
|
|
417
|
-
for (const folder of folders.filter((f) => f.kind === 'sent' && f.uidValidity === null)) {
|
|
418
|
-
attemptedSent.add(folder.id);
|
|
419
|
-
try {
|
|
420
|
-
await pollFolder(ctx, account, client, folder, { timeoutMs, backfill, limit, log });
|
|
421
|
-
}
|
|
422
|
-
catch (err) {
|
|
423
|
-
log(`email.inbox-poll: could not initialize Sent folder ${account.address}/${folder.name}: ` +
|
|
424
|
-
`${err instanceof Error ? err.message : String(err)}; continuing with INBOX`);
|
|
425
|
-
complete = false;
|
|
426
|
-
failures.push(err);
|
|
427
|
-
}
|
|
428
|
-
}
|
|
429
|
-
// The inbox first: it is the one that wakes anybody, and a Sent
|
|
430
|
-
// folder that times out must not cost the new mail its run.
|
|
431
|
-
for (const folder of [...folders].filter((f) => !attemptedSent.has(f.id)).sort((a, b) => (a.kind === 'inbox' ? -1 : b.kind === 'inbox' ? 1 : 0))) {
|
|
432
|
-
try {
|
|
433
|
-
const polled = await pollFolder(ctx, account, client, folder, {
|
|
434
|
-
timeoutMs,
|
|
435
|
-
backfill,
|
|
436
|
-
limit,
|
|
437
|
-
log,
|
|
438
|
-
});
|
|
439
|
-
pending.push(...polled.pending);
|
|
440
|
-
if (folder.kind === 'inbox') {
|
|
441
|
-
// After ingest, so the new rows are in the window with the
|
|
442
|
-
// flags they arrived with. A re-sync that fails costs nobody
|
|
443
|
-
// their mail: the rows landed, the runs are queued below, and
|
|
444
|
-
// only this pass stops counting as a sync — the unread count
|
|
445
|
-
// it would have corrected is not stamped as current.
|
|
446
|
-
try {
|
|
447
|
-
await syncFlags(ctx.buddi.db, account, client, polled.folder, polled.status, timeoutMs, log);
|
|
448
|
-
}
|
|
449
|
-
catch (err) {
|
|
450
|
-
log(`email.inbox-poll: could not re-sync flags on ${account.address}/${folder.name}: ` +
|
|
451
|
-
`${err instanceof Error ? err.message : String(err)}; new mail still landed`);
|
|
452
|
-
complete = false;
|
|
453
|
-
failures.push(err);
|
|
454
|
-
}
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
catch (err) {
|
|
458
|
-
if (folder.kind !== 'sent')
|
|
459
|
-
throw err;
|
|
460
|
-
log(`email.inbox-poll: could not poll Sent folder ${account.address}/${folder.name}: ` +
|
|
461
|
-
`${err instanceof Error ? err.message : String(err)}; INBOX was still polled`);
|
|
462
|
-
complete = false;
|
|
463
|
-
failures.push(err);
|
|
464
|
-
}
|
|
465
|
-
}
|
|
466
|
-
/*
|
|
467
|
-
* The pass finished. This is the one place `last_synced_at` moves,
|
|
468
|
-
* and it moves whether or not a single message was new: "we read
|
|
469
|
-
* this mailbox and there was nothing" is an answer, and without a
|
|
470
|
-
* mark of its own it is indistinguishable from never having looked.
|
|
471
|
-
*/
|
|
472
|
-
if (complete)
|
|
473
|
-
await markAccountSynced(ctx.buddi.db, account.id, ctx.buddi.clock.now());
|
|
474
|
-
}
|
|
475
|
-
catch (err) {
|
|
476
|
-
complete = false;
|
|
477
|
-
if (err instanceof ImapTimeoutError) {
|
|
478
|
-
// A recorded give-up. Rethrowing it at the end of the pass is
|
|
479
|
-
// deliberate: `runSources` writes it to
|
|
480
|
-
// core.source_runs.last_error and emits `source.polled` with it,
|
|
481
|
-
// so a mailbox that stopped answering is visible rather than silent.
|
|
482
|
-
log(`email.inbox-poll: ${err.message} on ${account.address}; ` +
|
|
483
|
-
`connection closed, retrying next poll`);
|
|
484
|
-
}
|
|
485
|
-
failures.push(err);
|
|
486
|
-
// Whatever did land before the failure is still drained below: a
|
|
487
|
-
// Sent folder that timed out is no reason to sit on the inbox.
|
|
488
|
-
}
|
|
489
|
-
finally {
|
|
490
|
-
await client?.close().catch(() => { });
|
|
491
|
-
}
|
|
492
|
-
try {
|
|
493
|
-
const waiting = await drain(ctx, account, agentId, limit, pending, triageReady);
|
|
494
|
-
if (waiting > 0 && !saidWaiting) {
|
|
495
|
-
saidWaiting = true;
|
|
496
|
-
log(`email.inbox-poll: no triage agent yet — accept the Mail offer on the dashboard`);
|
|
497
|
-
}
|
|
498
|
-
await recordTriageWaiting(ctx.buddi.db, account.id, triageReady ? false : waiting > 0 ? true : null, ctx.buddi.clock.now());
|
|
499
|
-
}
|
|
500
|
-
catch (err) {
|
|
501
|
-
failures.push(err);
|
|
502
|
-
}
|
|
690
|
+
// IDLE is live: the server says when mail comes, and this pass is
|
|
691
|
+
// the safety net, at the slower period.
|
|
692
|
+
const last = lastPolled.get(account.id);
|
|
693
|
+
if (watchers?.state(account.id) === 'live' && last !== undefined && Date.now() - last < slowPollMs)
|
|
694
|
+
continue;
|
|
695
|
+
await runLocked(account.id, () => pollAccount(ctx, account, pass));
|
|
503
696
|
}
|
|
504
|
-
if (failures.length > 0)
|
|
505
|
-
throw failures[0];
|
|
697
|
+
if (pass.failures.length > 0)
|
|
698
|
+
throw pass.failures[0];
|
|
506
699
|
},
|
|
507
700
|
};
|
|
701
|
+
if (opts.idle) {
|
|
702
|
+
const idle = opts.idle;
|
|
703
|
+
source.watch = (ctx) => {
|
|
704
|
+
const manager = new IdleWatchers({
|
|
705
|
+
idle,
|
|
706
|
+
host: ctx.buddi,
|
|
707
|
+
poll: (accountId) => pollNow(accountId),
|
|
708
|
+
...(opts.env ? { env: opts.env } : {}),
|
|
709
|
+
...(opts.idleTuning ?? {}),
|
|
710
|
+
});
|
|
711
|
+
watchers = manager;
|
|
712
|
+
watchCtx = ctx;
|
|
713
|
+
void manager.reconcile();
|
|
714
|
+
return {
|
|
715
|
+
async stop() {
|
|
716
|
+
if (watchers === manager) {
|
|
717
|
+
watchers = null;
|
|
718
|
+
watchCtx = null;
|
|
719
|
+
}
|
|
720
|
+
await manager.stop();
|
|
721
|
+
// A poll IDLE started finishes (each IMAP call has its deadline);
|
|
722
|
+
// nothing of this watcher outlives `stop`.
|
|
723
|
+
await Promise.allSettled([...inFlight.values()]);
|
|
724
|
+
},
|
|
725
|
+
};
|
|
726
|
+
};
|
|
727
|
+
}
|
|
728
|
+
return source;
|
|
508
729
|
}
|
|
509
730
|
/**
|
|
510
731
|
* One folder of one account: open it, honour its generation, fetch what is new,
|
|
@@ -586,15 +807,14 @@ async function pollFolder(ctx, account, client, folder, opts) {
|
|
|
586
807
|
* than skipped.
|
|
587
808
|
*
|
|
588
809
|
* **A message gone from INBOX** (archived or deleted in another client) is
|
|
589
|
-
* simply not in the answer
|
|
590
|
-
*
|
|
591
|
-
* The full fetch could tell it apart; CONDSTORE without QRESYNC cannot.
|
|
810
|
+
* simply not in the answer here, and keeps the flags it last had; the
|
|
811
|
+
* presence check after this (`presence.ts`) is what records that it left.
|
|
592
812
|
*/
|
|
593
813
|
async function syncFlags(db, account, client, folder, status, timeoutMs, log) {
|
|
594
814
|
const started = Date.now();
|
|
595
815
|
const serverModseq = status.highestModseq ?? null;
|
|
596
816
|
const { rows } = await db.query(`select uid from email.messages
|
|
597
|
-
where folder_id = $1 and uidvalidity = $2
|
|
817
|
+
where folder_id = $1 and uidvalidity = $2 and gone_at is null
|
|
598
818
|
order by uid desc
|
|
599
819
|
limit $3`, [folder.id, status.uidValidity, FLAG_SYNC_WINDOW]);
|
|
600
820
|
const uids = rows.map((r) => Number(r.uid)).sort((a, b) => a - b);
|
|
@@ -632,11 +852,39 @@ async function syncFlags(db, account, client, folder, status, timeoutMs, log) {
|
|
|
632
852
|
log(`email.inbox-poll: flags on ${account.address}/${folder.name} re-synced via ${mode} in ` +
|
|
633
853
|
`${Date.now() - started}ms — ${uids.length} held, ${reported} reported, ${updated} changed`);
|
|
634
854
|
}
|
|
855
|
+
/**
|
|
856
|
+
* Read `List-Unsubscribe` and `Precedence` for held messages stored before
|
|
857
|
+
* `messages.bulk` was read at ingest (`bulk_checked = false`), at most
|
|
858
|
+
* `BULK_BACKFILL_PER_POLL` a poll, newest first, and mark them. A message the
|
|
859
|
+
* server no longer has is marked too: there is nothing more to read. Returns
|
|
860
|
+
* how many were found to be bulk. A client without `fetchBulk` reads nothing.
|
|
861
|
+
*/
|
|
862
|
+
export async function backfillBulk(db, client, folder, status, timeoutMs, limit = BULK_BACKFILL_PER_POLL) {
|
|
863
|
+
if (!client.fetchBulk)
|
|
864
|
+
return 0;
|
|
865
|
+
const { rows } = await db.query(`select uid from email.messages
|
|
866
|
+
where folder_id = $1 and uidvalidity = $2 and not bulk_checked and gone_at is null
|
|
867
|
+
order by uid desc
|
|
868
|
+
limit $3`, [folder.id, status.uidValidity, limit]);
|
|
869
|
+
const uids = rows.map((r) => Number(r.uid));
|
|
870
|
+
if (uids.length === 0)
|
|
871
|
+
return 0;
|
|
872
|
+
const read = await withDeadline('bulk headers', timeoutMs, client.fetchBulk(folder.name, uids));
|
|
873
|
+
const bulk = uids.filter((uid) => read.get(uid) === true);
|
|
874
|
+
await db.query(`update email.messages
|
|
875
|
+
set bulk_checked = true, bulk = bulk or uid = any($4::bigint[])
|
|
876
|
+
where folder_id = $1 and uidvalidity = $2 and uid = any($3::bigint[])`, [folder.id, status.uidValidity, uids, bulk]);
|
|
877
|
+
return bulk.length;
|
|
878
|
+
}
|
|
635
879
|
/** Persist the generation and the cursor together, and return the fresh row. */
|
|
636
880
|
async function plantCursor(db, folderId, uidValidity, lastUid) {
|
|
637
881
|
const { rows } = await db.query(`update email.folders set uidvalidity = $2, last_uid = $3,
|
|
638
882
|
-- A modseq belongs to its generation; the next re-sync starts over.
|
|
639
|
-
highest_modseq = case when uidvalidity is distinct from $2 then null else highest_modseq end
|
|
883
|
+
highest_modseq = case when uidvalidity is distinct from $2 then null else highest_modseq end,
|
|
884
|
+
-- So does what the presence check last saw (presence.ts).
|
|
885
|
+
presence_uidnext = case when uidvalidity is distinct from $2 then null else presence_uidnext end,
|
|
886
|
+
presence_exists = case when uidvalidity is distinct from $2 then null else presence_exists end,
|
|
887
|
+
presence_modseq = case when uidvalidity is distinct from $2 then null else presence_modseq end
|
|
640
888
|
where id = $1 returning ${FOLDER_COLUMNS}`, [folderId, uidValidity, lastUid]);
|
|
641
889
|
const row = rows[0];
|
|
642
890
|
if (!row)
|
|
@@ -751,6 +999,11 @@ async function drain(ctx, account, agentId, limit, pending, triageReady = true)
|
|
|
751
999
|
detail: decision.detail,
|
|
752
1000
|
status: 'done',
|
|
753
1001
|
}, ctx.buddi.clock.now());
|
|
1002
|
+
// The rule's mailbox action is owed before the stamp lands: a
|
|
1003
|
+
// failed writer connection later must not lose it.
|
|
1004
|
+
if (decision.policy?.params.onArrival) {
|
|
1005
|
+
await oweArrivalAction(tx, account.id, { messageId: message.id, policy: decision.policy });
|
|
1006
|
+
}
|
|
754
1007
|
await stampOn(tx, message.id, ctx.buddi.clock.now());
|
|
755
1008
|
});
|
|
756
1009
|
(ctx.buddi?.log ?? (() => { }))(`email.inbox-poll: ${message.from} handled by policy ${decision.policy.scope} ` +
|
|
@@ -780,6 +1033,11 @@ async function drain(ctx, account, agentId, limit, pending, triageReady = true)
|
|
|
780
1033
|
throw err;
|
|
781
1034
|
}
|
|
782
1035
|
await settleEvent(ctx.buddi.db, message.id, 'done');
|
|
1036
|
+
// Owed before the stamp: once stamped the message is never drained
|
|
1037
|
+
// again, so the action has to be on record by then (`arrival.ts`).
|
|
1038
|
+
if (!decision.refused && decision.policy?.params.onArrival) {
|
|
1039
|
+
await oweArrivalAction(ctx.buddi.db, account.id, { messageId: message.id, policy: decision.policy });
|
|
1040
|
+
}
|
|
783
1041
|
await stamp(ctx, message.id);
|
|
784
1042
|
}
|
|
785
1043
|
return waiting;
|
|
@@ -830,7 +1088,9 @@ async function promptFor(ctx, account, message, decision, policies) {
|
|
|
830
1088
|
const senderPolicy = decision.policy ??
|
|
831
1089
|
policies.find((p) => p.scope === 'sender' && p.matcher === message.from.trim().toLowerCase()) ??
|
|
832
1090
|
null;
|
|
1091
|
+
const place = await placeOf(ctx.buddi.db, message.id);
|
|
833
1092
|
return triagePrompt({
|
|
1093
|
+
...(place ? { place } : {}),
|
|
834
1094
|
messageId: message.id,
|
|
835
1095
|
from: message.from,
|
|
836
1096
|
to: message.to,
|
|
@@ -861,6 +1121,21 @@ async function promptFor(ctx, account, message, decision, policies) {
|
|
|
861
1121
|
...(instructionFor(decision) ? { instruction: instructionFor(decision) } : {}),
|
|
862
1122
|
});
|
|
863
1123
|
}
|
|
1124
|
+
/** Where a message is now, in words, when that is not the inbox (`placeWords`); '' otherwise. */
|
|
1125
|
+
async function placeOf(db, messageId) {
|
|
1126
|
+
const { rows } = await db.query(`select m.gone_at, m.direction, f.kind, f.name, f.special_use
|
|
1127
|
+
from email.messages m left join email.folders f on f.id = m.folder_id where m.id = $1`, [messageId]);
|
|
1128
|
+
const r = rows[0];
|
|
1129
|
+
if (!r)
|
|
1130
|
+
return '';
|
|
1131
|
+
return placeWords({
|
|
1132
|
+
kind: r.kind ?? null,
|
|
1133
|
+
name: r.name ?? null,
|
|
1134
|
+
specialUse: r.special_use ?? null,
|
|
1135
|
+
gone: r.gone_at !== null && r.gone_at !== undefined,
|
|
1136
|
+
direction: r.direction === 'out' ? 'out' : 'in',
|
|
1137
|
+
});
|
|
1138
|
+
}
|
|
864
1139
|
/** How many earlier turns of the thread are quoted, and how many are a line. */
|
|
865
1140
|
export const THREAD_TURNS_QUOTED = 3;
|
|
866
1141
|
export const THREAD_TURNS_LISTED = 10;
|