@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
|
@@ -38,14 +38,27 @@ export type SessionScope = 'local' | 'remote';
|
|
|
38
38
|
* `local` is a request that arrived on loopback with no proxy metadata on it —
|
|
39
39
|
* the open mint, or a ticket exchanged from this machine. `ticket` is a ticket
|
|
40
40
|
* exchanged from anywhere else. `tailscale` is an identity the local daemon
|
|
41
|
-
* confirmed.
|
|
41
|
+
* confirmed. `token` is an owner API token (`api-tokens.ts`); such a session is
|
|
42
|
+
* never stored. This lives on the session rather than in a second map beside it,
|
|
42
43
|
* so provenance cannot drift out of step with the session it describes, and so
|
|
43
44
|
* a route that must refuse everything but "this machine" can simply say so.
|
|
44
45
|
*/
|
|
45
|
-
export type SessionVia = 'local' | 'ticket' | 'tailscale';
|
|
46
|
+
export type SessionVia = 'local' | 'ticket' | 'tailscale' | 'token';
|
|
47
|
+
/**
|
|
48
|
+
* Who holds the session: a person's browser, or one of buddi's own
|
|
49
|
+
* command-line clients (`buddi mcp`, `buddi connections`), which say so with
|
|
50
|
+
* the `x-buddi-client: mcp` header on the ticket exchange that mints the
|
|
51
|
+
* session (the header alone, on the open binding, earns nothing), or a program
|
|
52
|
+
* holding an API token (`api`). The lock screen covers browsers only (docs/dashboard.md, "Lock screen").
|
|
53
|
+
*/
|
|
54
|
+
export type SessionClient = 'browser' | 'mcp' | 'api';
|
|
55
|
+
/** Why a session is locked: Lock now, nobody used it for the delay, or it began while a PIN was set. */
|
|
56
|
+
export type LockReason = 'owner' | 'idle' | 'start';
|
|
46
57
|
/** What established a session, as `create` is told it. */
|
|
47
58
|
export interface SessionProvenance {
|
|
48
59
|
via: SessionVia;
|
|
60
|
+
/** Who holds it; a browser unless buddi's own client said otherwise. */
|
|
61
|
+
client?: SessionClient;
|
|
49
62
|
/** The daemon-confirmed login, when `via` is `tailscale`. */
|
|
50
63
|
tailscaleLogin?: string;
|
|
51
64
|
/** The tailnet address it was confirmed at. */
|
|
@@ -89,24 +102,91 @@ export interface Session {
|
|
|
89
102
|
absoluteExpiresAt?: Date;
|
|
90
103
|
/** When the browser was last handed this cookie. Drives the refresh rule. */
|
|
91
104
|
cookieIssuedAt: Date;
|
|
105
|
+
/** A browser, or buddi's own command-line client. */
|
|
106
|
+
client: SessionClient;
|
|
107
|
+
/** When the owner last used it, as the page reports. Polls and streams do not count. */
|
|
108
|
+
activeAt: Date;
|
|
109
|
+
/** When it locked; absent while it is open. */
|
|
110
|
+
lockedAt?: Date;
|
|
111
|
+
lockReason?: LockReason;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* What the table stores in place of a session id: sha256, hex.
|
|
115
|
+
*
|
|
116
|
+
* A plain hash is enough because the id is 256 random bits — there is nothing
|
|
117
|
+
* to guess, so nothing a slow hash would slow down.
|
|
118
|
+
*/
|
|
119
|
+
export declare function sessionIdHash(sessionId: string): string;
|
|
120
|
+
/**
|
|
121
|
+
* The CSRF value for a session, derived from its id.
|
|
122
|
+
*
|
|
123
|
+
* Derived rather than random so it never has to be stored: after a restart the
|
|
124
|
+
* request presents the session id, and the CSRF value it must also echo is
|
|
125
|
+
* recomputed from it. HMAC keyed by the id is one-way — the page can read the
|
|
126
|
+
* CSRF cookie, and that reveals nothing about the HttpOnly id — and another
|
|
127
|
+
* site still cannot read either cookie, which is all double-submit asks of it.
|
|
128
|
+
*/
|
|
129
|
+
export declare function csrfFor(sessionId: string): string;
|
|
130
|
+
/** Just enough of `pg.Pool` for the session table. */
|
|
131
|
+
export interface SessionDb {
|
|
132
|
+
query: (sql: string, params?: unknown[]) => Promise<{
|
|
133
|
+
rows: unknown[];
|
|
134
|
+
}>;
|
|
92
135
|
}
|
|
136
|
+
/**
|
|
137
|
+
* A session as `forget` offers it: the stored fields, and the id only when this
|
|
138
|
+
* process has seen the cookie (a row read back from the table has no id to give).
|
|
139
|
+
*/
|
|
140
|
+
export type SessionRecord = Omit<Session, 'id' | 'csrf'> & {
|
|
141
|
+
id?: string;
|
|
142
|
+
};
|
|
143
|
+
export interface SessionStoreOptions {
|
|
144
|
+
/** The database the sessions are kept in. Without one they live in memory only. */
|
|
145
|
+
db?: SessionDb | undefined;
|
|
146
|
+
log?: ((line: string) => void) | undefined;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* The longest the stored idle edge may lag the live one.
|
|
150
|
+
*
|
|
151
|
+
* Sliding the in-memory expiry is free and happens on every request; writing
|
|
152
|
+
* it back is a database round trip, so it is done at most this often per
|
|
153
|
+
* session (or a tenth of the idle lifetime, when that is shorter). A restart
|
|
154
|
+
* can therefore cost a session at most this much of its idle lifetime, never
|
|
155
|
+
* extend it.
|
|
156
|
+
*/
|
|
157
|
+
export declare const SESSION_WRITE_EVERY_MS: number;
|
|
158
|
+
/** How often expired rows are swept from the table. */
|
|
159
|
+
export declare const SESSION_SWEEP_EVERY_MS: number;
|
|
160
|
+
/** How often a session's `active_at` is written back, at most. */
|
|
161
|
+
export declare const ACTIVE_WRITE_EVERY_MS = 60000;
|
|
93
162
|
export declare class SessionStore {
|
|
94
163
|
#private;
|
|
95
|
-
constructor(ttlMs?: Partial<Record<SessionScope, number>>, tailscaleMaxMs?: number);
|
|
164
|
+
constructor(ttlMs?: Partial<Record<SessionScope, number>>, tailscaleMaxMs?: number, options?: SessionStoreOptions);
|
|
96
165
|
/** The idle lifetime a session established from `scope` gets. */
|
|
97
166
|
ttlFor(scope: SessionScope): number;
|
|
98
|
-
create(scope: SessionScope, now?: Date, provenance?: SessionProvenance): Session;
|
|
99
167
|
/**
|
|
100
|
-
*
|
|
168
|
+
* A new session. Stored unless `persist` is false — which is how the open
|
|
169
|
+
* loopback gate mints its silent sessions: one is minted again for free on
|
|
170
|
+
* the next request, so there is nothing to keep across a restart, and a
|
|
171
|
+
* cookie-less local poller must not add a row per request.
|
|
172
|
+
*/
|
|
173
|
+
create(scope: SessionScope, now?: Date, provenance?: SessionProvenance, options?: {
|
|
174
|
+
persist?: boolean;
|
|
175
|
+
locked?: LockReason;
|
|
176
|
+
}): Session;
|
|
177
|
+
/**
|
|
178
|
+
* Forget every session matching this — in memory and in the table — and say
|
|
179
|
+
* how many went.
|
|
101
180
|
*
|
|
102
181
|
* What the setting page uses to revoke the sessions an identity earned the
|
|
103
182
|
* moment that identity stops being allowed one: turning the switch off, or
|
|
104
183
|
* naming a different login, empties the tailnet's access immediately rather
|
|
105
|
-
* than at the next request that happens to be made.
|
|
184
|
+
* than at the next request that happens to be made. Rows this process never
|
|
185
|
+
* saw a cookie for are offered without an `id`.
|
|
106
186
|
*/
|
|
107
|
-
forget(matches: (session:
|
|
187
|
+
forget(matches: (session: SessionRecord) => boolean): Promise<number>;
|
|
108
188
|
/**
|
|
109
|
-
* The live session for this cookie, sliding its expiry.
|
|
189
|
+
* The live session for this cookie, from memory only, sliding its expiry.
|
|
110
190
|
*
|
|
111
191
|
* `scope` is where *this request* came from, and it must match where the
|
|
112
192
|
* session was established. A cookie minted on loopback is not honoured when
|
|
@@ -114,8 +194,19 @@ export declare class SessionStore {
|
|
|
114
194
|
* this machine rather than a credential that got a longer life by accident.
|
|
115
195
|
* (A browser will not send it across hosts in the first place; this is the
|
|
116
196
|
* belt to that suspenders.)
|
|
197
|
+
*
|
|
198
|
+
* The server asks `resolve`, which reads through to the table on a miss.
|
|
117
199
|
*/
|
|
118
200
|
get(sessionId: string | undefined, scope: SessionScope, now?: Date): Session | undefined;
|
|
201
|
+
/**
|
|
202
|
+
* `get`, reading through to the table when this process has not seen the
|
|
203
|
+
* cookie yet — after a restart, every session starts here.
|
|
204
|
+
*
|
|
205
|
+
* A row is honoured on exactly the terms a cached session is: past its idle
|
|
206
|
+
* edge or its absolute one it is deleted and refused, and its scope must
|
|
207
|
+
* match. A database that cannot be read is a miss, never an error page.
|
|
208
|
+
*/
|
|
209
|
+
resolve(sessionId: string | undefined, scope: SessionScope, now?: Date): Promise<Session | undefined>;
|
|
119
210
|
/**
|
|
120
211
|
* Should this response carry a fresh cookie? Mutating: a `true` answer marks
|
|
121
212
|
* the cookie as issued now, so the caller must actually send it.
|
|
@@ -125,7 +216,29 @@ export declare class SessionStore {
|
|
|
125
216
|
static maxAgeSeconds(session: Session): number;
|
|
126
217
|
/** Constant-time double-submit check. */
|
|
127
218
|
static csrfMatches(session: Session, presented: string | undefined): boolean;
|
|
128
|
-
|
|
219
|
+
/**
|
|
220
|
+
* End this session, in memory at once and in the table before the returned
|
|
221
|
+
* promise settles. Callers that revoke for a reason await it.
|
|
222
|
+
*/
|
|
223
|
+
destroy(sessionId: string | undefined): Promise<void>;
|
|
224
|
+
/**
|
|
225
|
+
* Lock this session (or open it, with `null`): in memory at once, and on
|
|
226
|
+
* its row when it has one. The lock screen's own state, nothing more — the
|
|
227
|
+
* gate in `lock.ts` is what answers a locked session 423.
|
|
228
|
+
*/
|
|
229
|
+
setLock(session: Session, lock: {
|
|
230
|
+
at: Date;
|
|
231
|
+
reason: LockReason;
|
|
232
|
+
} | null): void;
|
|
233
|
+
/**
|
|
234
|
+
* The owner used this session now. Written back at most once a minute: a
|
|
235
|
+
* restart can cost the lock at most that much of its delay, never add to it.
|
|
236
|
+
*/
|
|
237
|
+
touch(session: Session, now: Date): void;
|
|
238
|
+
/** Open every cached session: the PIN is gone. The table is cleared by whoever removed it. */
|
|
239
|
+
unlockCached(): void;
|
|
240
|
+
/** Every table operation queued so far has settled. A test seam. */
|
|
241
|
+
flush(): Promise<void>;
|
|
129
242
|
get size(): number;
|
|
130
243
|
}
|
|
131
244
|
/**
|
|
@@ -138,6 +251,8 @@ export declare class RateLimiter {
|
|
|
138
251
|
constructor(max?: number, windowMs?: number);
|
|
139
252
|
/** True when this address is over its budget and should be answered 429. */
|
|
140
253
|
blocked(key: string, now?: Date): boolean;
|
|
254
|
+
/** How long until this address may try again, in ms; 0 when it is not blocked. */
|
|
255
|
+
retryAfterMs(key: string, now?: Date): number;
|
|
141
256
|
/** Record one failed attempt. Successes never count against the budget. */
|
|
142
257
|
fail(key: string, now?: Date): void;
|
|
143
258
|
reset(key: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../src/web/sessions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../../src/web/sessions.ts"],"names":[],"mappings":"AAYA;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,oBAAoB,QAAwB,CAAC;AAC1D,eAAO,MAAM,qBAAqB,QAAmB,CAAC;AAEtD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,wBAAwB,QAAuB,CAAC;AAE7D,qFAAqF;AACrF,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE9C;;;;;;;;;;;GAWG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,CAAC;AAEpE;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,CAAC;AAEtD,wGAAwG;AACxG,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;AAEpD,0DAA0D;AAC1D,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,UAAU,CAAC;IAChB,wEAAwE;IACxE,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,6DAA6D;IAC7D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,+CAA+C;IAC/C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,0EAA0E;IAC1E,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAGjE,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,oBAAoB,MAAM,CAAC;AAExC,6EAA6E;AAC7E,eAAO,MAAM,iBAAiB,KAAK,CAAC;AACpC,eAAO,MAAM,cAAc,QAAS,CAAC;AAErC,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,8EAA8E;IAC9E,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,KAAK,EAAE,YAAY,CAAC;IACpB,yEAAyE;IACzE,GAAG,EAAE,UAAU,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,8EAA8E;IAC9E,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE,IAAI,CAAC;IACzB,6EAA6E;IAC7E,cAAc,EAAE,IAAI,CAAC;IACrB,qDAAqD;IACrD,MAAM,EAAE,aAAa,CAAC;IACtB,wFAAwF;IACxF,QAAQ,EAAE,IAAI,CAAC;IACf,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAYD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,sDAAsD;AACtD,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;QAAE,IAAI,EAAE,OAAO,EAAE,CAAA;KAAE,CAAC,CAAC;CAC1E;AAED;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,CAAC,GAAG;IAAE,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3E,MAAM,WAAW,mBAAmB;IAClC,mFAAmF;IACnF,EAAE,CAAC,EAAE,SAAS,GAAG,SAAS,CAAC;IAC3B,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CAC5C;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,QAAa,CAAC;AAEjD,uDAAuD;AACvD,eAAO,MAAM,sBAAsB,QAAc,CAAC;AAsBlD,kEAAkE;AAClE,eAAO,MAAM,qBAAqB,QAAS,CAAC;AAW5C,qBAAa,YAAY;;gBAkBrB,KAAK,GAAE,OAAO,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAM,EACjD,cAAc,GAAE,MAAiC,EACjD,OAAO,GAAE,mBAAwB;IAQnC,iEAAiE;IACjE,MAAM,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM;IAInC;;;;;OAKG;IACH,MAAM,CACJ,KAAK,EAAE,YAAY,EACnB,GAAG,GAAE,IAAiB,EACtB,UAAU,GAAE,iBAAmE,EAC/E,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,UAAU,CAAA;KAAO,GACvD,OAAO;IAuCV;;;;;;;;;OASG;IACG,MAAM,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,aAAa,KAAK,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IA0B3E;;;;;;;;;;;OAWG;IACH,GAAG,CACD,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,KAAK,EAAE,YAAY,EACnB,GAAG,GAAE,IAAiB,GACrB,OAAO,GAAG,SAAS;IAgBtB;;;;;;;OAOG;IACG,OAAO,CACX,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,KAAK,EAAE,YAAY,EACnB,GAAG,GAAE,IAAiB,GACrB,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAmB/B;;;OAGG;IACH,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,GAAE,IAAiB,GAAG,OAAO;IAO9D,8DAA8D;IAC9D,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM;IAI9C,yCAAyC;IACzC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO;IAI5E;;;OAGG;IACG,OAAO,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAc3D;;;;OAIG;IACH,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE;QAAE,EAAE,EAAE,IAAI,CAAC;QAAC,MAAM,EAAE,UAAU,CAAA;KAAE,GAAG,IAAI,GAAG,IAAI;IAiB9E;;;OAGG;IACH,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,GAAG,IAAI;IAexC,8FAA8F;IAC9F,YAAY,IAAI,IAAI;IAOpB,oEAAoE;IAC9D,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,IAAI,IAAI,IAAI,MAAM,CAEjB;CA8FF;AAED;;;;GAIG;AACH,qBAAa,WAAW;;gBAKV,GAAG,GAAE,MAA0B,EAAE,QAAQ,GAAE,MAAuB;IAK9E,4EAA4E;IAC5E,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,IAAiB,GAAG,OAAO;IAMrD,kFAAkF;IAClF,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,IAAiB,GAAG,MAAM;IAKzD,2EAA2E;IAC3E,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,GAAE,IAAiB,GAAG,IAAI;IAS/C,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAQxB;;;;;;OAMG;IACH,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,GAAE,IAAiB,GAAG,IAAI;CAW9E"}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Sessions, CSRF tokens, spent tickets and the auth rate limit.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* Sessions are kept in `core.dashboard_sessions` with a small cache in front,
|
|
5
|
+
* so a restart or an upgrade no longer signs the owner out (docs/web.md,
|
|
6
|
+
* "Sessions"). What is stored is a hash of the session id, never the id: a
|
|
7
|
+
* copy of the table cannot be replayed as a cookie. The CSRF value is derived
|
|
8
|
+
* from the id rather than stored at all. The rate limit stays in memory.
|
|
9
|
+
* Nothing here is ever written to a log.
|
|
8
10
|
*/
|
|
9
|
-
import { createHash, randomBytes, timingSafeEqual } from 'node:crypto';
|
|
11
|
+
import { createHash, createHmac, randomBytes, timingSafeEqual } from 'node:crypto';
|
|
10
12
|
/**
|
|
11
13
|
* How long a session is honoured **without any activity**, by where it was
|
|
12
14
|
* established. Both are idle lifetimes, not absolute ones: a session in use
|
|
@@ -66,24 +68,90 @@ function equal(a, b) {
|
|
|
66
68
|
const bb = Buffer.from(b ?? '', 'utf8');
|
|
67
69
|
return ab.length > 0 && ab.length === bb.length && timingSafeEqual(ab, bb);
|
|
68
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* What the table stores in place of a session id: sha256, hex.
|
|
73
|
+
*
|
|
74
|
+
* A plain hash is enough because the id is 256 random bits — there is nothing
|
|
75
|
+
* to guess, so nothing a slow hash would slow down.
|
|
76
|
+
*/
|
|
77
|
+
export function sessionIdHash(sessionId) {
|
|
78
|
+
return createHash('sha256').update(sessionId, 'utf8').digest('hex');
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* The CSRF value for a session, derived from its id.
|
|
82
|
+
*
|
|
83
|
+
* Derived rather than random so it never has to be stored: after a restart the
|
|
84
|
+
* request presents the session id, and the CSRF value it must also echo is
|
|
85
|
+
* recomputed from it. HMAC keyed by the id is one-way — the page can read the
|
|
86
|
+
* CSRF cookie, and that reveals nothing about the HttpOnly id — and another
|
|
87
|
+
* site still cannot read either cookie, which is all double-submit asks of it.
|
|
88
|
+
*/
|
|
89
|
+
export function csrfFor(sessionId) {
|
|
90
|
+
return createHmac('sha256', sessionId).update('buddi-csrf-v1').digest('base64url').slice(0, 32);
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* The longest the stored idle edge may lag the live one.
|
|
94
|
+
*
|
|
95
|
+
* Sliding the in-memory expiry is free and happens on every request; writing
|
|
96
|
+
* it back is a database round trip, so it is done at most this often per
|
|
97
|
+
* session (or a tenth of the idle lifetime, when that is shorter). A restart
|
|
98
|
+
* can therefore cost a session at most this much of its idle lifetime, never
|
|
99
|
+
* extend it.
|
|
100
|
+
*/
|
|
101
|
+
export const SESSION_WRITE_EVERY_MS = 5 * 60_000;
|
|
102
|
+
/** How often expired rows are swept from the table. */
|
|
103
|
+
export const SESSION_SWEEP_EVERY_MS = 10 * 60_000;
|
|
104
|
+
const COLUMNS = `id_hash, scope, via, tailscale_login, tailscale_address, tailscale_name, ttl_ms,
|
|
105
|
+
created_at, expires_at, absolute_expires_at, locked_at, lock_reason, active_at, client`;
|
|
106
|
+
/** How often a session's `active_at` is written back, at most. */
|
|
107
|
+
export const ACTIVE_WRITE_EVERY_MS = 60_000;
|
|
108
|
+
/** Is this a row the table could have produced? Anything else is a miss. */
|
|
109
|
+
function isRow(value) {
|
|
110
|
+
const row = value;
|
|
111
|
+
return !!row && typeof row.id_hash === 'string'
|
|
112
|
+
&& (row.scope === 'local' || row.scope === 'remote')
|
|
113
|
+
&& (row.via === 'local' || row.via === 'ticket' || row.via === 'tailscale')
|
|
114
|
+
&& row.created_at !== undefined && row.expires_at !== undefined && row.ttl_ms !== undefined;
|
|
115
|
+
}
|
|
69
116
|
export class SessionStore {
|
|
117
|
+
/** Keyed by the id's hash, so the cache and the table speak the same key. */
|
|
70
118
|
#sessions = new Map();
|
|
119
|
+
/** When each cached session's idle edge was last written back. */
|
|
120
|
+
#persistedAt = new Map();
|
|
121
|
+
/** When each cached session's `active_at` was last written back. */
|
|
122
|
+
#activeWrittenAt = new Map();
|
|
123
|
+
/** Destroyed while a read of the table may still be in flight. */
|
|
124
|
+
#revoked = new Set();
|
|
71
125
|
#ttl;
|
|
72
126
|
#tailscaleMaxMs;
|
|
73
|
-
|
|
127
|
+
#db;
|
|
128
|
+
#log;
|
|
129
|
+
/** Every table operation, in order: a revoke can never be overtaken by a read. */
|
|
130
|
+
#chain = Promise.resolve();
|
|
131
|
+
#sweptAt = Number.NEGATIVE_INFINITY;
|
|
132
|
+
constructor(ttlMs = {}, tailscaleMaxMs = TAILSCALE_SESSION_MAX_MS, options = {}) {
|
|
74
133
|
this.#ttl = { ...SESSION_TTL_MS, ...ttlMs };
|
|
75
134
|
this.#tailscaleMaxMs = tailscaleMaxMs;
|
|
135
|
+
this.#db = options.db;
|
|
136
|
+
this.#log = options.log ?? ((line) => console.error(line));
|
|
76
137
|
}
|
|
77
138
|
/** The idle lifetime a session established from `scope` gets. */
|
|
78
139
|
ttlFor(scope) {
|
|
79
140
|
return this.#ttl[scope];
|
|
80
141
|
}
|
|
81
|
-
|
|
142
|
+
/**
|
|
143
|
+
* A new session. Stored unless `persist` is false — which is how the open
|
|
144
|
+
* loopback gate mints its silent sessions: one is minted again for free on
|
|
145
|
+
* the next request, so there is nothing to keep across a restart, and a
|
|
146
|
+
* cookie-less local poller must not add a row per request.
|
|
147
|
+
*/
|
|
148
|
+
create(scope, now = new Date(), provenance = { via: scope === 'local' ? 'local' : 'ticket' }, options = {}) {
|
|
82
149
|
this.#prune(now);
|
|
83
150
|
const ttlMs = this.#ttl[scope];
|
|
151
|
+
const sessionId = id();
|
|
84
152
|
const session = {
|
|
85
|
-
id:
|
|
86
|
-
csrf:
|
|
153
|
+
id: sessionId,
|
|
154
|
+
csrf: csrfFor(sessionId),
|
|
87
155
|
scope,
|
|
88
156
|
via: provenance.via,
|
|
89
157
|
...(provenance.tailscaleLogin !== undefined ? { tailscaleLogin: provenance.tailscaleLogin } : {}),
|
|
@@ -94,30 +162,67 @@ export class SessionStore {
|
|
|
94
162
|
expiresAt: new Date(now.getTime() + ttlMs),
|
|
95
163
|
...(provenance.via === 'tailscale' ? { absoluteExpiresAt: new Date(now.getTime() + this.#tailscaleMaxMs) } : {}),
|
|
96
164
|
cookieIssuedAt: now,
|
|
165
|
+
client: provenance.client ?? 'browser',
|
|
166
|
+
activeAt: now,
|
|
167
|
+
...(options.locked ? { lockedAt: now, lockReason: options.locked } : {}),
|
|
97
168
|
};
|
|
98
|
-
|
|
169
|
+
const key = sessionIdHash(sessionId);
|
|
170
|
+
this.#sessions.set(key, session);
|
|
171
|
+
if (options.persist !== false && this.#db) {
|
|
172
|
+
this.#persistedAt.set(key, now.getTime());
|
|
173
|
+
const db = this.#db;
|
|
174
|
+
void this.#enqueue('storing a session', () => db.query(`insert into core.dashboard_sessions (${COLUMNS}, last_seen_at)
|
|
175
|
+
values ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $8)
|
|
176
|
+
on conflict (id_hash) do nothing`, [key, session.scope, session.via, session.tailscaleLogin ?? null, session.tailscaleAddress ?? null,
|
|
177
|
+
session.tailscaleName ?? null, ttlMs, session.createdAt, session.expiresAt, session.absoluteExpiresAt ?? null,
|
|
178
|
+
session.lockedAt ?? null, session.lockReason ?? null, session.activeAt, session.client]));
|
|
179
|
+
this.#maybeSweep(now);
|
|
180
|
+
}
|
|
99
181
|
return session;
|
|
100
182
|
}
|
|
101
183
|
/**
|
|
102
|
-
* Forget every session matching this
|
|
184
|
+
* Forget every session matching this — in memory and in the table — and say
|
|
185
|
+
* how many went.
|
|
103
186
|
*
|
|
104
187
|
* What the setting page uses to revoke the sessions an identity earned the
|
|
105
188
|
* moment that identity stops being allowed one: turning the switch off, or
|
|
106
189
|
* naming a different login, empties the tailnet's access immediately rather
|
|
107
|
-
* than at the next request that happens to be made.
|
|
190
|
+
* than at the next request that happens to be made. Rows this process never
|
|
191
|
+
* saw a cookie for are offered without an `id`.
|
|
108
192
|
*/
|
|
109
|
-
forget(matches) {
|
|
110
|
-
|
|
193
|
+
async forget(matches) {
|
|
194
|
+
const gone = new Set();
|
|
111
195
|
for (const [key, session] of this.#sessions) {
|
|
112
196
|
if (matches(session)) {
|
|
113
|
-
this.#
|
|
114
|
-
gone
|
|
197
|
+
this.#drop(key);
|
|
198
|
+
gone.add(key);
|
|
115
199
|
}
|
|
116
200
|
}
|
|
117
|
-
|
|
201
|
+
const db = this.#db;
|
|
202
|
+
if (db) {
|
|
203
|
+
await this.#enqueue('revoking sessions', async () => {
|
|
204
|
+
const { rows } = await db.query(`select ${COLUMNS} from core.dashboard_sessions`);
|
|
205
|
+
const drop = [...gone];
|
|
206
|
+
for (const row of rows) {
|
|
207
|
+
if (!isRow(row) || gone.has(row.id_hash))
|
|
208
|
+
continue;
|
|
209
|
+
const { id: _id, csrf: _csrf, ...record } = this.#fromRow(row, undefined);
|
|
210
|
+
if (matches(record)) {
|
|
211
|
+
drop.push(row.id_hash);
|
|
212
|
+
gone.add(row.id_hash);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
// A read queued before this one may have cached a row it is dropping.
|
|
216
|
+
for (const key of drop)
|
|
217
|
+
this.#drop(key);
|
|
218
|
+
if (drop.length > 0)
|
|
219
|
+
await db.query(`delete from core.dashboard_sessions where id_hash = any($1)`, [drop]);
|
|
220
|
+
}, true);
|
|
221
|
+
}
|
|
222
|
+
return gone.size;
|
|
118
223
|
}
|
|
119
224
|
/**
|
|
120
|
-
* The live session for this cookie, sliding its expiry.
|
|
225
|
+
* The live session for this cookie, from memory only, sliding its expiry.
|
|
121
226
|
*
|
|
122
227
|
* `scope` is where *this request* came from, and it must match where the
|
|
123
228
|
* session was established. A cookie minted on loopback is not honoured when
|
|
@@ -125,22 +230,57 @@ export class SessionStore {
|
|
|
125
230
|
* this machine rather than a credential that got a longer life by accident.
|
|
126
231
|
* (A browser will not send it across hosts in the first place; this is the
|
|
127
232
|
* belt to that suspenders.)
|
|
233
|
+
*
|
|
234
|
+
* The server asks `resolve`, which reads through to the table on a miss.
|
|
128
235
|
*/
|
|
129
236
|
get(sessionId, scope, now = new Date()) {
|
|
130
237
|
if (!sessionId)
|
|
131
238
|
return undefined;
|
|
132
|
-
const
|
|
239
|
+
const key = sessionIdHash(sessionId);
|
|
240
|
+
const session = this.#sessions.get(key);
|
|
133
241
|
if (!session)
|
|
134
242
|
return undefined;
|
|
135
243
|
if (this.#dead(session, now)) {
|
|
136
|
-
this.#
|
|
244
|
+
this.#drop(key);
|
|
245
|
+
if (this.#db)
|
|
246
|
+
void this.#deleteRows([key]);
|
|
137
247
|
return undefined;
|
|
138
248
|
}
|
|
139
249
|
if (session.scope !== scope)
|
|
140
250
|
return undefined;
|
|
141
251
|
session.expiresAt = new Date(now.getTime() + session.ttlMs);
|
|
252
|
+
this.#writeBack(key, session, now);
|
|
142
253
|
return session;
|
|
143
254
|
}
|
|
255
|
+
/**
|
|
256
|
+
* `get`, reading through to the table when this process has not seen the
|
|
257
|
+
* cookie yet — after a restart, every session starts here.
|
|
258
|
+
*
|
|
259
|
+
* A row is honoured on exactly the terms a cached session is: past its idle
|
|
260
|
+
* edge or its absolute one it is deleted and refused, and its scope must
|
|
261
|
+
* match. A database that cannot be read is a miss, never an error page.
|
|
262
|
+
*/
|
|
263
|
+
async resolve(sessionId, scope, now = new Date()) {
|
|
264
|
+
if (!sessionId)
|
|
265
|
+
return undefined;
|
|
266
|
+
const key = sessionIdHash(sessionId);
|
|
267
|
+
if (!this.#sessions.has(key) && this.#db && !this.#revoked.has(key)) {
|
|
268
|
+
const db = this.#db;
|
|
269
|
+
await this.#enqueue('reading a session', async () => {
|
|
270
|
+
// Another request with the same cookie may have loaded it meanwhile.
|
|
271
|
+
if (this.#sessions.has(key) || this.#revoked.has(key))
|
|
272
|
+
return;
|
|
273
|
+
const { rows } = await db.query(`select ${COLUMNS} from core.dashboard_sessions where id_hash = $1`, [key]);
|
|
274
|
+
const row = rows[0];
|
|
275
|
+
if (!isRow(row) || row.id_hash !== key || this.#revoked.has(key))
|
|
276
|
+
return;
|
|
277
|
+
this.#sessions.set(key, this.#fromRow(row, sessionId));
|
|
278
|
+
this.#persistedAt.set(key, now.getTime());
|
|
279
|
+
});
|
|
280
|
+
this.#maybeSweep(now);
|
|
281
|
+
}
|
|
282
|
+
return this.get(sessionId, scope, now);
|
|
283
|
+
}
|
|
144
284
|
/**
|
|
145
285
|
* Should this response carry a fresh cookie? Mutating: a `true` answer marks
|
|
146
286
|
* the cookie as issued now, so the caller must actually send it.
|
|
@@ -160,17 +300,153 @@ export class SessionStore {
|
|
|
160
300
|
static csrfMatches(session, presented) {
|
|
161
301
|
return presented !== undefined && equal(session.csrf, presented);
|
|
162
302
|
}
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
303
|
+
/**
|
|
304
|
+
* End this session, in memory at once and in the table before the returned
|
|
305
|
+
* promise settles. Callers that revoke for a reason await it.
|
|
306
|
+
*/
|
|
307
|
+
async destroy(sessionId) {
|
|
308
|
+
if (!sessionId)
|
|
309
|
+
return;
|
|
310
|
+
const key = sessionIdHash(sessionId);
|
|
311
|
+
this.#drop(key);
|
|
312
|
+
if (this.#db) {
|
|
313
|
+
this.#revoked.add(key);
|
|
314
|
+
try {
|
|
315
|
+
await this.#deleteRows([key], true);
|
|
316
|
+
}
|
|
317
|
+
finally {
|
|
318
|
+
this.#revoked.delete(key);
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Lock this session (or open it, with `null`): in memory at once, and on
|
|
324
|
+
* its row when it has one. The lock screen's own state, nothing more — the
|
|
325
|
+
* gate in `lock.ts` is what answers a locked session 423.
|
|
326
|
+
*/
|
|
327
|
+
setLock(session, lock) {
|
|
328
|
+
if (lock) {
|
|
329
|
+
session.lockedAt = lock.at;
|
|
330
|
+
session.lockReason = lock.reason;
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
delete session.lockedAt;
|
|
334
|
+
delete session.lockReason;
|
|
335
|
+
}
|
|
336
|
+
const key = session.id ? sessionIdHash(session.id) : undefined;
|
|
337
|
+
const db = this.#db;
|
|
338
|
+
if (!db || !key || !this.#persistedAt.has(key))
|
|
339
|
+
return;
|
|
340
|
+
void this.#enqueue(lock ? 'locking a session' : 'unlocking a session', () => db.query(`update core.dashboard_sessions set locked_at = $2, lock_reason = $3 where id_hash = $1`, [key, lock?.at ?? null, lock?.reason ?? null]));
|
|
341
|
+
}
|
|
342
|
+
/**
|
|
343
|
+
* The owner used this session now. Written back at most once a minute: a
|
|
344
|
+
* restart can cost the lock at most that much of its delay, never add to it.
|
|
345
|
+
*/
|
|
346
|
+
touch(session, now) {
|
|
347
|
+
const before = session.activeAt.getTime();
|
|
348
|
+
session.activeAt = now;
|
|
349
|
+
const key = session.id ? sessionIdHash(session.id) : undefined;
|
|
350
|
+
const db = this.#db;
|
|
351
|
+
if (!db || !key || !this.#persistedAt.has(key))
|
|
352
|
+
return;
|
|
353
|
+
const written = this.#activeWrittenAt.get(key) ?? before;
|
|
354
|
+
if (now.getTime() - written < ACTIVE_WRITE_EVERY_MS)
|
|
355
|
+
return;
|
|
356
|
+
this.#activeWrittenAt.set(key, now.getTime());
|
|
357
|
+
void this.#enqueue('noting a session in use', () => db.query(`update core.dashboard_sessions set active_at = greatest(coalesce(active_at, $2), $2) where id_hash = $1`, [key, now]));
|
|
358
|
+
}
|
|
359
|
+
/** Open every cached session: the PIN is gone. The table is cleared by whoever removed it. */
|
|
360
|
+
unlockCached() {
|
|
361
|
+
for (const session of this.#sessions.values()) {
|
|
362
|
+
delete session.lockedAt;
|
|
363
|
+
delete session.lockReason;
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
/** Every table operation queued so far has settled. A test seam. */
|
|
367
|
+
async flush() {
|
|
368
|
+
await this.#chain;
|
|
166
369
|
}
|
|
167
370
|
get size() {
|
|
168
371
|
return this.#sessions.size;
|
|
169
372
|
}
|
|
373
|
+
#drop(key) {
|
|
374
|
+
this.#sessions.delete(key);
|
|
375
|
+
this.#persistedAt.delete(key);
|
|
376
|
+
this.#activeWrittenAt.delete(key);
|
|
377
|
+
}
|
|
378
|
+
#deleteRows(keys, rethrow = false) {
|
|
379
|
+
const db = this.#db;
|
|
380
|
+
if (!db)
|
|
381
|
+
return Promise.resolve();
|
|
382
|
+
return this.#enqueue('revoking a session', () => db.query(`delete from core.dashboard_sessions where id_hash = any($1)`, [keys]), rethrow);
|
|
383
|
+
}
|
|
384
|
+
/**
|
|
385
|
+
* Write the sliding edge back, sparingly: at most once per
|
|
386
|
+
* `SESSION_WRITE_EVERY_MS` (or a tenth of the idle lifetime) per session.
|
|
387
|
+
*/
|
|
388
|
+
#writeBack(key, session, now) {
|
|
389
|
+
const db = this.#db;
|
|
390
|
+
const last = this.#persistedAt.get(key);
|
|
391
|
+
if (!db || last === undefined)
|
|
392
|
+
return;
|
|
393
|
+
const every = Math.min(SESSION_WRITE_EVERY_MS, session.ttlMs / 10);
|
|
394
|
+
if (now.getTime() - last < every)
|
|
395
|
+
return;
|
|
396
|
+
this.#persistedAt.set(key, now.getTime());
|
|
397
|
+
const expiresAt = session.expiresAt;
|
|
398
|
+
void this.#enqueue('renewing a session', () => db.query(`update core.dashboard_sessions set expires_at = greatest(expires_at, $2), last_seen_at = $3 where id_hash = $1`, [key, expiresAt, now]));
|
|
399
|
+
}
|
|
400
|
+
#maybeSweep(now) {
|
|
401
|
+
const db = this.#db;
|
|
402
|
+
if (!db || now.getTime() - this.#sweptAt < SESSION_SWEEP_EVERY_MS)
|
|
403
|
+
return;
|
|
404
|
+
this.#sweptAt = now.getTime();
|
|
405
|
+
void this.#enqueue('sweeping expired sessions', () => db.query(`delete from core.dashboard_sessions where expires_at <= $1 or absolute_expires_at <= $1`, [now]));
|
|
406
|
+
}
|
|
407
|
+
/** A stored row as a session. Its cookie is re-issued on the first response. */
|
|
408
|
+
#fromRow(row, sessionId) {
|
|
409
|
+
const createdAt = new Date(row.created_at);
|
|
410
|
+
return {
|
|
411
|
+
id: sessionId ?? '',
|
|
412
|
+
csrf: sessionId ? csrfFor(sessionId) : '',
|
|
413
|
+
scope: row.scope,
|
|
414
|
+
via: row.via,
|
|
415
|
+
...(row.tailscale_login !== null ? { tailscaleLogin: row.tailscale_login } : {}),
|
|
416
|
+
...(row.tailscale_address !== null ? { tailscaleAddress: row.tailscale_address } : {}),
|
|
417
|
+
...(row.tailscale_name !== null ? { tailscaleName: row.tailscale_name } : {}),
|
|
418
|
+
ttlMs: Number(row.ttl_ms),
|
|
419
|
+
createdAt,
|
|
420
|
+
expiresAt: new Date(row.expires_at),
|
|
421
|
+
...(row.absolute_expires_at !== null ? { absoluteExpiresAt: new Date(row.absolute_expires_at) } : {}),
|
|
422
|
+
// Unknown after a restart, so treated as old: the browser's copy is
|
|
423
|
+
// refreshed on the first response rather than trusted to outlive it.
|
|
424
|
+
cookieIssuedAt: createdAt,
|
|
425
|
+
client: row.client === 'mcp' ? 'mcp' : 'browser',
|
|
426
|
+
// A row from before the lock screen has no use on record: its last
|
|
427
|
+
// renewal (the idle edge less the lifetime) is the best there is.
|
|
428
|
+
activeAt: row.active_at ? new Date(row.active_at) : new Date(new Date(row.expires_at).getTime() - Number(row.ttl_ms)),
|
|
429
|
+
...(row.locked_at ? { lockedAt: new Date(row.locked_at), lockReason: row.lock_reason ?? 'owner' } : {}),
|
|
430
|
+
};
|
|
431
|
+
}
|
|
432
|
+
/**
|
|
433
|
+
* Run one table operation after every earlier one. A failure is logged by a
|
|
434
|
+
* fixed sentence (never a value) and, unless `rethrow`, swallowed: the
|
|
435
|
+
* dashboard keeps working from memory when the database hiccups.
|
|
436
|
+
*/
|
|
437
|
+
#enqueue(what, op, rethrow = false) {
|
|
438
|
+
const run = this.#chain.then(async () => { await op(); });
|
|
439
|
+
this.#chain = run.catch(() => { });
|
|
440
|
+
return run.catch((err) => {
|
|
441
|
+
this.#log(`web: ${what} failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
442
|
+
if (rethrow)
|
|
443
|
+
throw err;
|
|
444
|
+
});
|
|
445
|
+
}
|
|
170
446
|
#prune(now) {
|
|
171
447
|
for (const [key, session] of this.#sessions) {
|
|
172
448
|
if (this.#dead(session, now))
|
|
173
|
-
this.#
|
|
449
|
+
this.#drop(key);
|
|
174
450
|
}
|
|
175
451
|
}
|
|
176
452
|
/** Idle too long, or past the absolute edge no use extends. */
|
|
@@ -200,6 +476,12 @@ export class RateLimiter {
|
|
|
200
476
|
return false;
|
|
201
477
|
return entry.count >= this.#max;
|
|
202
478
|
}
|
|
479
|
+
/** How long until this address may try again, in ms; 0 when it is not blocked. */
|
|
480
|
+
retryAfterMs(key, now = new Date()) {
|
|
481
|
+
if (!this.blocked(key, now))
|
|
482
|
+
return 0;
|
|
483
|
+
return Math.max(0, (this.#hits.get(key)?.resetAt ?? now.getTime()) - now.getTime());
|
|
484
|
+
}
|
|
203
485
|
/** Record one failed attempt. Successes never count against the budget. */
|
|
204
486
|
fail(key, now = new Date()) {
|
|
205
487
|
const entry = this.#hits.get(key);
|