@withbuddi/buddi 0.1.0-pre.29 → 0.1.0-pre.30
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/extension/manifest.json +2 -2
- package/node_modules/@buddi/cli/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/cli/dist/args.d.ts +6 -1
- package/node_modules/@buddi/cli/dist/args.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/args.js +7 -2
- package/node_modules/@buddi/cli/dist/args.js.map +1 -1
- package/node_modules/@buddi/cli/dist/commands.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/commands.js +13 -3
- package/node_modules/@buddi/cli/dist/commands.js.map +1 -1
- package/node_modules/@buddi/cli/dist/doctor-probes.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/doctor-probes.js +2 -1
- package/node_modules/@buddi/cli/dist/doctor-probes.js.map +1 -1
- package/node_modules/@buddi/cli/dist/jobs-cmd.d.ts +4 -0
- package/node_modules/@buddi/cli/dist/jobs-cmd.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/jobs-cmd.js +53 -4
- package/node_modules/@buddi/cli/dist/jobs-cmd.js.map +1 -1
- package/node_modules/@buddi/cli/dist/main.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/main.js +5 -1
- package/node_modules/@buddi/cli/dist/main.js.map +1 -1
- package/node_modules/@buddi/core/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/core/dist/lock.d.ts +8 -2
- package/node_modules/@buddi/core/dist/lock.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/lock.js +20 -5
- package/node_modules/@buddi/core/dist/lock.js.map +1 -1
- package/node_modules/@buddi/core/dist/pages.d.ts +3 -1
- package/node_modules/@buddi/core/dist/pages.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/pages.js +6 -1
- package/node_modules/@buddi/core/dist/pages.js.map +1 -1
- package/node_modules/@buddi/core/dist/plugin/index.d.ts +1 -1
- package/node_modules/@buddi/core/dist/plugin/index.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/plugin/index.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/failures.d.ts +84 -0
- package/node_modules/@buddi/core/dist/queue/failures.d.ts.map +1 -0
- package/node_modules/@buddi/core/dist/queue/failures.js +195 -0
- package/node_modules/@buddi/core/dist/queue/failures.js.map +1 -0
- package/node_modules/@buddi/core/dist/queue/index.d.ts +1 -0
- package/node_modules/@buddi/core/dist/queue/index.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/queue/index.js +1 -0
- package/node_modules/@buddi/core/dist/queue/index.js.map +1 -1
- package/node_modules/@buddi/core/dist/queue/jobs.d.ts +39 -3
- package/node_modules/@buddi/core/dist/queue/jobs.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/queue/jobs.js +54 -4
- package/node_modules/@buddi/core/dist/queue/jobs.js.map +1 -1
- package/node_modules/@buddi/core/dist/queue/types.d.ts +20 -0
- package/node_modules/@buddi/core/dist/queue/types.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/queue/types.js +17 -0
- package/node_modules/@buddi/core/dist/queue/types.js.map +1 -1
- package/node_modules/@buddi/core/dist/secrets/settings.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/secrets/settings.js +23 -3
- package/node_modules/@buddi/core/dist/secrets/settings.js.map +1 -1
- package/node_modules/@buddi/core/dist/sentinels/digest.d.ts +8 -1
- package/node_modules/@buddi/core/dist/sentinels/digest.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/sentinels/digest.js +10 -3
- package/node_modules/@buddi/core/dist/sentinels/digest.js.map +1 -1
- package/node_modules/@buddi/core/dist/sentinels/index.d.ts +1 -0
- package/node_modules/@buddi/core/dist/sentinels/index.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/sentinels/index.js +1 -0
- package/node_modules/@buddi/core/dist/sentinels/index.js.map +1 -1
- package/node_modules/@buddi/core/dist/sentinels/mutes.d.ts +51 -0
- package/node_modules/@buddi/core/dist/sentinels/mutes.d.ts.map +1 -0
- package/node_modules/@buddi/core/dist/sentinels/mutes.js +86 -0
- package/node_modules/@buddi/core/dist/sentinels/mutes.js.map +1 -0
- package/node_modules/@buddi/core/dist/sentinels/run.d.ts +14 -4
- package/node_modules/@buddi/core/dist/sentinels/run.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/sentinels/run.js +64 -20
- package/node_modules/@buddi/core/dist/sentinels/run.js.map +1 -1
- package/node_modules/@buddi/core/dist/sentinels/types.d.ts +152 -2
- package/node_modules/@buddi/core/dist/sentinels/types.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/sentinels/types.js +126 -2
- package/node_modules/@buddi/core/dist/sentinels/types.js.map +1 -1
- package/node_modules/@buddi/core/dist/views.d.ts +112 -112
- package/node_modules/@buddi/core/dist/views.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/views.js +2 -0
- package/node_modules/@buddi/core/dist/views.js.map +1 -1
- package/node_modules/@buddi/core/migrations/066_alert_decisions.sql +45 -0
- package/node_modules/@buddi/core/migrations/067_job_acknowledged.sql +21 -0
- package/node_modules/@buddi/gateway/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/gateway/dist/chat/conversations.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/chat/conversations.js +8 -2
- package/node_modules/@buddi/gateway/dist/chat/conversations.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 +36 -2
- package/node_modules/@buddi/gateway/dist/missions/execute.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/goals.d.ts +12 -1
- package/node_modules/@buddi/gateway/dist/missions/goals.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/goals.js +21 -1
- package/node_modules/@buddi/gateway/dist/missions/goals.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/sentinel-wake.d.ts +3 -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 +4 -1
- package/node_modules/@buddi/gateway/dist/missions/sentinel-wake.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/surfaces/offered-actions.d.ts +17 -0
- package/node_modules/@buddi/gateway/dist/surfaces/offered-actions.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/surfaces/offered-actions.js +27 -0
- package/node_modules/@buddi/gateway/dist/surfaces/offered-actions.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/alerts.d.ts +179 -0
- package/node_modules/@buddi/gateway/dist/web/alerts.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/alerts.js +363 -0
- package/node_modules/@buddi/gateway/dist/web/alerts.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/web/api-routes.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/api-routes.js +45 -6
- package/node_modules/@buddi/gateway/dist/web/api-routes.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/chat.d.ts +1 -0
- package/node_modules/@buddi/gateway/dist/web/chat.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/chat.js +4 -3
- package/node_modules/@buddi/gateway/dist/web/chat.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/lock.d.ts +7 -4
- package/node_modules/@buddi/gateway/dist/web/lock.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/lock.js +20 -14
- package/node_modules/@buddi/gateway/dist/web/lock.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/plugins.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/plugins.js +17 -3
- package/node_modules/@buddi/gateway/dist/web/plugins.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/read.d.ts +52 -26
- package/node_modules/@buddi/gateway/dist/web/read.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/read.js +52 -36
- package/node_modules/@buddi/gateway/dist/web/read.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/secrets.d.ts +61 -1
- package/node_modules/@buddi/gateway/dist/web/secrets.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/secrets.js +111 -3
- package/node_modules/@buddi/gateway/dist/web/secrets.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/server.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/server.js +125 -9
- package/node_modules/@buddi/gateway/dist/web/server.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/widgets.d.ts +1 -0
- package/node_modules/@buddi/gateway/dist/web/widgets.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/widgets.js +6 -1
- package/node_modules/@buddi/gateway/dist/web/widgets.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/write.d.ts +23 -0
- package/node_modules/@buddi/gateway/dist/web/write.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/write.js +46 -1
- package/node_modules/@buddi/gateway/dist/web/write.js.map +1 -1
- package/node_modules/@buddi/install/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/runtime/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/runtime/dist/anthropic.d.ts +6 -0
- package/node_modules/@buddi/runtime/dist/anthropic.d.ts.map +1 -1
- package/node_modules/@buddi/runtime/dist/anthropic.js.map +1 -1
- package/node_modules/@buddi/runtime/dist/openai.d.ts +34 -1
- package/node_modules/@buddi/runtime/dist/openai.d.ts.map +1 -1
- package/node_modules/@buddi/runtime/dist/openai.js +66 -12
- package/node_modules/@buddi/runtime/dist/openai.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.js +1 -1
- package/node_modules/@buddi/tool-email/dist/imap/imapflow-client.d.ts +8 -0
- 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 +59 -4
- package/node_modules/@buddi/tool-email/dist/imap/imapflow-client.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/mail.d.ts +42 -0
- package/node_modules/@buddi/tool-email/dist/mail.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/mail.js +116 -0
- package/node_modules/@buddi/tool-email/dist/mail.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/mailbox/select.d.ts +6 -0
- package/node_modules/@buddi/tool-email/dist/mailbox/select.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/mailbox/select.js +11 -0
- package/node_modules/@buddi/tool-email/dist/mailbox/select.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/metrics.d.ts +5 -6
- package/node_modules/@buddi/tool-email/dist/metrics.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/metrics.js +4 -5
- package/node_modules/@buddi/tool-email/dist/metrics.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/needs-you.d.ts +58 -0
- package/node_modules/@buddi/tool-email/dist/needs-you.d.ts.map +1 -0
- package/node_modules/@buddi/tool-email/dist/needs-you.js +97 -0
- package/node_modules/@buddi/tool-email/dist/needs-you.js.map +1 -0
- package/node_modules/@buddi/tool-email/dist/pages/descriptors.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/pages/descriptors.js +110 -78
- 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/queries.d.ts +7 -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 +31 -3
- package/node_modules/@buddi/tool-email/dist/pages/queries.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/ports.d.ts +8 -0
- package/node_modules/@buddi/tool-email/dist/ports.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/ports.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/sentinels/suspicious-sender.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/sentinels/suspicious-sender.js +4 -1
- package/node_modules/@buddi/tool-email/dist/sentinels/suspicious-sender.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/sentinels/waiting-on-me.d.ts +18 -21
- 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 +39 -63
- package/node_modules/@buddi/tool-email/dist/sentinels/waiting-on-me.js.map +1 -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 +3 -2
- package/node_modules/@buddi/tool-email/dist/sources/inbox-poll.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/suspicions-store.d.ts +6 -0
- package/node_modules/@buddi/tool-email/dist/suspicions-store.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/suspicions-store.js +16 -1
- package/node_modules/@buddi/tool-email/dist/suspicions-store.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/threads.d.ts +17 -2
- package/node_modules/@buddi/tool-email/dist/threads.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/threads.js +35 -14
- package/node_modules/@buddi/tool-email/dist/threads.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/tools/mailbox.d.ts +3 -0
- package/node_modules/@buddi/tool-email/dist/tools/mailbox.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/tools/mailbox.js +5 -0
- package/node_modules/@buddi/tool-email/dist/tools/mailbox.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/tools/threads.d.ts +7 -3
- package/node_modules/@buddi/tool-email/dist/tools/threads.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/tools/threads.js +18 -5
- package/node_modules/@buddi/tool-email/dist/tools/threads.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/watchers.d.ts +91 -7
- package/node_modules/@buddi/tool-email/dist/watchers.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/watchers.js +164 -1
- package/node_modules/@buddi/tool-email/dist/watchers.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/widgets.d.ts +3 -2
- package/node_modules/@buddi/tool-email/dist/widgets.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/widgets.js +2 -2
- package/node_modules/@buddi/tool-email/dist/widgets.js.map +1 -1
- package/node_modules/@buddi/tool-email/migrations/023_attention.sql +100 -0
- package/node_modules/@buddi/tool-email/migrations/024_auth_domain.sql +9 -0
- package/node_modules/@buddi/tool-email/migrations/025_thread_ignore.sql +77 -0
- package/node_modules/@buddi/tool-email/package.json +1 -1
- package/node_modules/@buddi/tool-host/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-mcp/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-memory/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-web/dist/.tsbuildinfo +1 -1
- package/node_modules/ip-address/README.md +34 -34
- package/node_modules/ip-address/dist/ipv4.js +7 -0
- package/node_modules/ip-address/dist/ipv4.js.map +1 -1
- package/node_modules/ip-address/package.json +1 -1
- package/package.json +2 -2
- package/packages/cli/dist/.tsbuildinfo +1 -1
- package/packages/cli/dist/args.d.ts +6 -1
- package/packages/cli/dist/args.d.ts.map +1 -1
- package/packages/cli/dist/args.js +7 -2
- package/packages/cli/dist/args.js.map +1 -1
- package/packages/cli/dist/commands.d.ts.map +1 -1
- package/packages/cli/dist/commands.js +13 -3
- package/packages/cli/dist/commands.js.map +1 -1
- package/packages/cli/dist/doctor-probes.d.ts.map +1 -1
- package/packages/cli/dist/doctor-probes.js +2 -1
- package/packages/cli/dist/doctor-probes.js.map +1 -1
- package/packages/cli/dist/jobs-cmd.d.ts +4 -0
- package/packages/cli/dist/jobs-cmd.d.ts.map +1 -1
- package/packages/cli/dist/jobs-cmd.js +53 -4
- package/packages/cli/dist/jobs-cmd.js.map +1 -1
- package/packages/cli/dist/main.d.ts.map +1 -1
- package/packages/cli/dist/main.js +5 -1
- package/packages/cli/dist/main.js.map +1 -1
- package/packages/core/dist/.tsbuildinfo +1 -1
- package/packages/core/dist/lock.d.ts +8 -2
- package/packages/core/dist/lock.d.ts.map +1 -1
- package/packages/core/dist/lock.js +20 -5
- package/packages/core/dist/lock.js.map +1 -1
- package/packages/core/dist/pages.d.ts +3 -1
- package/packages/core/dist/pages.d.ts.map +1 -1
- package/packages/core/dist/pages.js +6 -1
- package/packages/core/dist/pages.js.map +1 -1
- package/packages/core/dist/plugin/index.d.ts +1 -1
- package/packages/core/dist/plugin/index.d.ts.map +1 -1
- package/packages/core/dist/plugin/index.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/failures.d.ts +84 -0
- package/packages/core/dist/queue/failures.d.ts.map +1 -0
- package/packages/core/dist/queue/failures.js +195 -0
- package/packages/core/dist/queue/failures.js.map +1 -0
- package/packages/core/dist/queue/index.d.ts +1 -0
- package/packages/core/dist/queue/index.d.ts.map +1 -1
- package/packages/core/dist/queue/index.js +1 -0
- package/packages/core/dist/queue/index.js.map +1 -1
- package/packages/core/dist/queue/jobs.d.ts +39 -3
- package/packages/core/dist/queue/jobs.d.ts.map +1 -1
- package/packages/core/dist/queue/jobs.js +54 -4
- package/packages/core/dist/queue/jobs.js.map +1 -1
- package/packages/core/dist/queue/types.d.ts +20 -0
- package/packages/core/dist/queue/types.d.ts.map +1 -1
- package/packages/core/dist/queue/types.js +17 -0
- package/packages/core/dist/queue/types.js.map +1 -1
- package/packages/core/dist/secrets/settings.d.ts.map +1 -1
- package/packages/core/dist/secrets/settings.js +23 -3
- package/packages/core/dist/secrets/settings.js.map +1 -1
- package/packages/core/dist/sentinels/digest.d.ts +8 -1
- package/packages/core/dist/sentinels/digest.d.ts.map +1 -1
- package/packages/core/dist/sentinels/digest.js +10 -3
- package/packages/core/dist/sentinels/digest.js.map +1 -1
- package/packages/core/dist/sentinels/index.d.ts +1 -0
- package/packages/core/dist/sentinels/index.d.ts.map +1 -1
- package/packages/core/dist/sentinels/index.js +1 -0
- package/packages/core/dist/sentinels/index.js.map +1 -1
- package/packages/core/dist/sentinels/mutes.d.ts +51 -0
- package/packages/core/dist/sentinels/mutes.d.ts.map +1 -0
- package/packages/core/dist/sentinels/mutes.js +86 -0
- package/packages/core/dist/sentinels/mutes.js.map +1 -0
- package/packages/core/dist/sentinels/run.d.ts +14 -4
- package/packages/core/dist/sentinels/run.d.ts.map +1 -1
- package/packages/core/dist/sentinels/run.js +64 -20
- package/packages/core/dist/sentinels/run.js.map +1 -1
- package/packages/core/dist/sentinels/types.d.ts +152 -2
- package/packages/core/dist/sentinels/types.d.ts.map +1 -1
- package/packages/core/dist/sentinels/types.js +126 -2
- package/packages/core/dist/sentinels/types.js.map +1 -1
- package/packages/core/dist/views.d.ts +112 -112
- package/packages/core/dist/views.d.ts.map +1 -1
- package/packages/core/dist/views.js +2 -0
- package/packages/core/dist/views.js.map +1 -1
- package/packages/core/migrations/066_alert_decisions.sql +45 -0
- package/packages/core/migrations/067_job_acknowledged.sql +21 -0
- package/packages/gateway/dist/.tsbuildinfo +1 -1
- package/packages/gateway/dist/chat/conversations.d.ts.map +1 -1
- package/packages/gateway/dist/chat/conversations.js +8 -2
- package/packages/gateway/dist/chat/conversations.js.map +1 -1
- package/packages/gateway/dist/missions/execute.d.ts.map +1 -1
- package/packages/gateway/dist/missions/execute.js +36 -2
- package/packages/gateway/dist/missions/execute.js.map +1 -1
- package/packages/gateway/dist/missions/goals.d.ts +12 -1
- package/packages/gateway/dist/missions/goals.d.ts.map +1 -1
- package/packages/gateway/dist/missions/goals.js +21 -1
- package/packages/gateway/dist/missions/goals.js.map +1 -1
- package/packages/gateway/dist/missions/sentinel-wake.d.ts +3 -0
- package/packages/gateway/dist/missions/sentinel-wake.d.ts.map +1 -1
- package/packages/gateway/dist/missions/sentinel-wake.js +4 -1
- package/packages/gateway/dist/missions/sentinel-wake.js.map +1 -1
- package/packages/gateway/dist/surfaces/offered-actions.d.ts +17 -0
- package/packages/gateway/dist/surfaces/offered-actions.d.ts.map +1 -1
- package/packages/gateway/dist/surfaces/offered-actions.js +27 -0
- package/packages/gateway/dist/surfaces/offered-actions.js.map +1 -1
- package/packages/gateway/dist/web/alerts.d.ts +179 -0
- package/packages/gateway/dist/web/alerts.d.ts.map +1 -0
- package/packages/gateway/dist/web/alerts.js +363 -0
- package/packages/gateway/dist/web/alerts.js.map +1 -0
- package/packages/gateway/dist/web/api-routes.d.ts.map +1 -1
- package/packages/gateway/dist/web/api-routes.js +45 -6
- package/packages/gateway/dist/web/api-routes.js.map +1 -1
- package/packages/gateway/dist/web/chat.d.ts +1 -0
- package/packages/gateway/dist/web/chat.d.ts.map +1 -1
- package/packages/gateway/dist/web/chat.js +4 -3
- package/packages/gateway/dist/web/chat.js.map +1 -1
- package/packages/gateway/dist/web/lock.d.ts +7 -4
- package/packages/gateway/dist/web/lock.d.ts.map +1 -1
- package/packages/gateway/dist/web/lock.js +20 -14
- package/packages/gateway/dist/web/lock.js.map +1 -1
- package/packages/gateway/dist/web/plugins.d.ts.map +1 -1
- package/packages/gateway/dist/web/plugins.js +17 -3
- package/packages/gateway/dist/web/plugins.js.map +1 -1
- package/packages/gateway/dist/web/read.d.ts +52 -26
- package/packages/gateway/dist/web/read.d.ts.map +1 -1
- package/packages/gateway/dist/web/read.js +52 -36
- package/packages/gateway/dist/web/read.js.map +1 -1
- package/packages/gateway/dist/web/secrets.d.ts +61 -1
- package/packages/gateway/dist/web/secrets.d.ts.map +1 -1
- package/packages/gateway/dist/web/secrets.js +111 -3
- package/packages/gateway/dist/web/secrets.js.map +1 -1
- package/packages/gateway/dist/web/server.d.ts.map +1 -1
- package/packages/gateway/dist/web/server.js +125 -9
- package/packages/gateway/dist/web/server.js.map +1 -1
- package/packages/gateway/dist/web/widgets.d.ts +1 -0
- package/packages/gateway/dist/web/widgets.d.ts.map +1 -1
- package/packages/gateway/dist/web/widgets.js +6 -1
- package/packages/gateway/dist/web/widgets.js.map +1 -1
- package/packages/gateway/dist/web/write.d.ts +23 -0
- package/packages/gateway/dist/web/write.d.ts.map +1 -1
- package/packages/gateway/dist/web/write.js +46 -1
- package/packages/gateway/dist/web/write.js.map +1 -1
- package/packages/install/dist/.tsbuildinfo +1 -1
- package/packages/runtime/dist/.tsbuildinfo +1 -1
- package/packages/runtime/dist/anthropic.d.ts +6 -0
- package/packages/runtime/dist/anthropic.d.ts.map +1 -1
- package/packages/runtime/dist/anthropic.js.map +1 -1
- package/packages/runtime/dist/openai.d.ts +34 -1
- package/packages/runtime/dist/openai.d.ts.map +1 -1
- package/packages/runtime/dist/openai.js +66 -12
- package/packages/runtime/dist/openai.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.js +1 -1
- package/packages/tools/email/dist/imap/imapflow-client.d.ts +8 -0
- package/packages/tools/email/dist/imap/imapflow-client.d.ts.map +1 -1
- package/packages/tools/email/dist/imap/imapflow-client.js +59 -4
- package/packages/tools/email/dist/imap/imapflow-client.js.map +1 -1
- package/packages/tools/email/dist/mail.d.ts +42 -0
- package/packages/tools/email/dist/mail.d.ts.map +1 -1
- package/packages/tools/email/dist/mail.js +116 -0
- package/packages/tools/email/dist/mail.js.map +1 -1
- package/packages/tools/email/dist/mailbox/select.d.ts +6 -0
- package/packages/tools/email/dist/mailbox/select.d.ts.map +1 -1
- package/packages/tools/email/dist/mailbox/select.js +11 -0
- package/packages/tools/email/dist/mailbox/select.js.map +1 -1
- package/packages/tools/email/dist/metrics.d.ts +5 -6
- package/packages/tools/email/dist/metrics.d.ts.map +1 -1
- package/packages/tools/email/dist/metrics.js +4 -5
- package/packages/tools/email/dist/metrics.js.map +1 -1
- package/packages/tools/email/dist/needs-you.d.ts +58 -0
- package/packages/tools/email/dist/needs-you.d.ts.map +1 -0
- package/packages/tools/email/dist/needs-you.js +97 -0
- package/packages/tools/email/dist/needs-you.js.map +1 -0
- package/packages/tools/email/dist/pages/descriptors.d.ts.map +1 -1
- package/packages/tools/email/dist/pages/descriptors.js +110 -78
- 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/queries.d.ts +7 -0
- package/packages/tools/email/dist/pages/queries.d.ts.map +1 -1
- package/packages/tools/email/dist/pages/queries.js +31 -3
- package/packages/tools/email/dist/pages/queries.js.map +1 -1
- package/packages/tools/email/dist/ports.d.ts +8 -0
- package/packages/tools/email/dist/ports.d.ts.map +1 -1
- package/packages/tools/email/dist/ports.js.map +1 -1
- package/packages/tools/email/dist/sentinels/suspicious-sender.d.ts.map +1 -1
- package/packages/tools/email/dist/sentinels/suspicious-sender.js +4 -1
- package/packages/tools/email/dist/sentinels/suspicious-sender.js.map +1 -1
- package/packages/tools/email/dist/sentinels/waiting-on-me.d.ts +18 -21
- package/packages/tools/email/dist/sentinels/waiting-on-me.d.ts.map +1 -1
- package/packages/tools/email/dist/sentinels/waiting-on-me.js +39 -63
- package/packages/tools/email/dist/sentinels/waiting-on-me.js.map +1 -1
- package/packages/tools/email/dist/sources/inbox-poll.d.ts.map +1 -1
- package/packages/tools/email/dist/sources/inbox-poll.js +3 -2
- package/packages/tools/email/dist/sources/inbox-poll.js.map +1 -1
- package/packages/tools/email/dist/suspicions-store.d.ts +6 -0
- package/packages/tools/email/dist/suspicions-store.d.ts.map +1 -1
- package/packages/tools/email/dist/suspicions-store.js +16 -1
- package/packages/tools/email/dist/suspicions-store.js.map +1 -1
- package/packages/tools/email/dist/threads.d.ts +17 -2
- package/packages/tools/email/dist/threads.d.ts.map +1 -1
- package/packages/tools/email/dist/threads.js +35 -14
- package/packages/tools/email/dist/threads.js.map +1 -1
- package/packages/tools/email/dist/tools/mailbox.d.ts +3 -0
- package/packages/tools/email/dist/tools/mailbox.d.ts.map +1 -1
- package/packages/tools/email/dist/tools/mailbox.js +5 -0
- package/packages/tools/email/dist/tools/mailbox.js.map +1 -1
- package/packages/tools/email/dist/tools/threads.d.ts +7 -3
- package/packages/tools/email/dist/tools/threads.d.ts.map +1 -1
- package/packages/tools/email/dist/tools/threads.js +18 -5
- package/packages/tools/email/dist/tools/threads.js.map +1 -1
- package/packages/tools/email/dist/watchers.d.ts +91 -7
- package/packages/tools/email/dist/watchers.d.ts.map +1 -1
- package/packages/tools/email/dist/watchers.js +164 -1
- package/packages/tools/email/dist/watchers.js.map +1 -1
- package/packages/tools/email/dist/widgets.d.ts +3 -2
- package/packages/tools/email/dist/widgets.d.ts.map +1 -1
- package/packages/tools/email/dist/widgets.js +2 -2
- package/packages/tools/email/dist/widgets.js.map +1 -1
- package/packages/tools/email/migrations/023_attention.sql +100 -0
- package/packages/tools/email/migrations/024_auth_domain.sql +9 -0
- package/packages/tools/email/migrations/025_thread_ignore.sql +77 -0
- package/packages/tools/email/package.json +1 -1
- package/packages/tools/host/dist/.tsbuildinfo +1 -1
- package/packages/tools/mcp/dist/.tsbuildinfo +1 -1
- package/packages/tools/memory/dist/.tsbuildinfo +1 -1
- package/packages/tools/web/dist/.tsbuildinfo +1 -1
- package/packages/web/dist/assets/earth-2560-Ce3xs8Cb.webp +0 -0
- package/packages/web/dist/assets/earth-phone-BqC7cDhk.webp +0 -0
- package/packages/web/dist/assets/index-WS4UjGsy.js +129 -0
- package/packages/web/dist/assets/index-Zrt_o2UG.css +1 -0
- package/packages/web/dist/assets/{lottie_light-Cdn77Osu.js → lottie_light-Ls7i1ATS.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/sw.js +3 -2
- package/packages/web/dist/assets/index-D8_tmf2k.js +0 -131
- package/packages/web/dist/assets/index-DYQyioa6.css +0 -1
|
@@ -61,11 +61,12 @@ import { mlxhBaseUrl, probeMlxh } from '../mlxh.js';
|
|
|
61
61
|
import { OnboardingRefusal, WEB_ONBOARDING_STEPS, WEB_ONBOARDING_SURFACE, claimOpeningTurn, createFirstAgent, probeOllama, readOnboarding, rebindBrain, updateFirstAgent, withFirstRunFacts, readFirstAgentPersona } from './onboarding.js';
|
|
62
62
|
import { TakeOnRefusal, readTakeOn, startTakeOn } from './take-on.js';
|
|
63
63
|
import { TelegramWebError, saveTelegramToken, telegramBot, telegramDevices, telegramPairing, telegramStatus, unpairTelegramDevice, } from './telegram.js';
|
|
64
|
-
import { PAGE_ROUTE, sendPageFile, actOnPage, listPageDescriptors, runPageQuery, } from './pages.js';
|
|
64
|
+
import { PAGE_ROUTE, sendPageFile, actOnPage, actRateLimited, listPageDescriptors, runPageQuery, } from './pages.js';
|
|
65
65
|
import { listSecrets, secretUses, secretsAct } from './secrets.js';
|
|
66
66
|
import { sayRoute, transcribeRoute } from './speech.js';
|
|
67
67
|
import { createServer } from 'node:http';
|
|
68
|
-
import { getAction, idleRolloverMs, inRecovery, listPendingActions, isJobState, parseAgentFile, setSentinelEnabled, snoozeFinding } from '@buddi/core';
|
|
68
|
+
import { getAction, idleRolloverMs, inRecovery, listMissions, listPendingActions, isJobState, parseAgentFile, setSentinelEnabled, snoozeFinding, snoozeFindings, unmuteFindings } from '@buddi/core';
|
|
69
|
+
import { actOnAlerts, askPrompt, findingsForAsk, muteAlert } from './alerts.js';
|
|
69
70
|
import { connectionsOf } from '@buddi/tool-mcp';
|
|
70
71
|
import { CONNECTIONS_CALLBACK_PATH, connectionsRoute } from './connections.js';
|
|
71
72
|
import { browserHost } from '../browser-host.js';
|
|
@@ -93,7 +94,7 @@ import { retryHref, sendSignedOut, wantsSignedOutPage } from './signed-out.js';
|
|
|
93
94
|
import { extensionEndpoint } from './extension.js';
|
|
94
95
|
import { REMOTE_HAND_SOCKET_PATH, RemoteHandEndpoint } from './remote-hand.js';
|
|
95
96
|
import { csrfCookieName, CSRF_HEADER, sessionCookieName, requestPort, BodyTooLargeError, first, cookieHeader, parseCookies, parseUrl, readJsonBody, remoteKey, requestOrigin, requestScope, sendEmpty, sendJson, sendText, } from './http.js';
|
|
96
|
-
import { boundedLimit, readAgents, readApprovals, readConversation, readConversations, readEventKinds, readEvents, readJobs, readMissions, readOverview, setGlanceHidden, readOffers, readReminders, readSentinels, toApprovalView, } from './read.js';
|
|
97
|
+
import { boundedLimit, readAgents, readApprovals, readConversation, readConversations, readEventKinds, readEvents, readJobs, readJobFailures, readMissions, readOverview, setGlanceHidden, readOffers, readReminders, readSentinels, toApprovalView, } from './read.js';
|
|
97
98
|
import { RateLimiter, SessionStore, } from './sessions.js';
|
|
98
99
|
import { supervisorCall } from './service.js';
|
|
99
100
|
import { backupJobRoute, createBackupRoute, discardUpload, listBackups, passphraseRoute, receiveUpload, restoreRoute, scheduleRoute, verifyBackupRoute, } from './backups.js';
|
|
@@ -111,14 +112,14 @@ import { currentVersion, upgradeJobRoute, upgradeRoute, versionCheckRoute, versi
|
|
|
111
112
|
import { leaveRecoveryMode, readRecoveryView } from './recovery.js';
|
|
112
113
|
import { readRail, setRailPageHidden } from './rail.js';
|
|
113
114
|
import { BUILD_MISSING, serveAsset, serveShellAtRoot } from './static.js';
|
|
114
|
-
import { StreamBudget, resumeCursor, streamConversation } from './stream.js';
|
|
115
|
+
import { StreamBudget, frame, resumeCursor, streamConversation } from './stream.js';
|
|
115
116
|
import { ensureWebToken, verifyTicket } from './token.js';
|
|
116
117
|
import { MAX_UPLOAD_BYTES, readUpload } from './upload.js';
|
|
117
118
|
import { LOCKED_BODY, LockUnavailable, allowedWhileLocked, clientOf, createLock } from './lock.js';
|
|
118
119
|
import { matchApiRoute, TOKEN_REFUSALS } from './api-routes.js';
|
|
119
120
|
import { apiTokensRoute, bearerOf, verifyApiToken } from './api-tokens.js';
|
|
120
121
|
import { LockImageRefusal, MAX_LOCK_IMAGE_BYTES, normaliseLockImage } from './lock-image.js';
|
|
121
|
-
import { cancelJobFromWeb, cancelReminderFromWeb, decideApprovalFromWeb, retryJobFromWeb, setMissionEnabledFromWeb, setPausedFromWeb, setScheduleFromWeb, dismissOfferFromWeb, dismissOffersFromWeb, takeOfferFromWeb, } from './write.js';
|
|
122
|
+
import { cancelJobFromWeb, cancelReminderFromWeb, decideApprovalFromWeb, retryJobFromWeb, retryJobsFromWeb, dismissJobsFromWeb, undismissJobsFromWeb, setMissionEnabledFromWeb, setPausedFromWeb, setScheduleFromWeb, dismissOfferFromWeb, dismissOffersFromWeb, takeOfferFromWeb, } from './write.js';
|
|
122
123
|
/** How often approvals past their expiry are swept, and waiting delegations told. */
|
|
123
124
|
export const EXPIRY_SWEEP_MS = 60_000;
|
|
124
125
|
/**
|
|
@@ -137,6 +138,16 @@ const WEB_CHATS = new WeakMap();
|
|
|
137
138
|
* it down, and a caller that built a bare `createWebApp` is unaffected.
|
|
138
139
|
*/
|
|
139
140
|
const PREVIEW_APPS = new WeakMap();
|
|
141
|
+
/**
|
|
142
|
+
* What a dashboard says to its open pages just before it closes: one
|
|
143
|
+
* `closing` frame on every live stream, naming the restart or stop the page
|
|
144
|
+
* itself asked for when it was one (`for`), so a page another device or the
|
|
145
|
+
* CLI restarted under draws "Restarting buddi" rather than errors, and
|
|
146
|
+
* reloads once the next process answers `/_buddi/ready` with a new `boot`.
|
|
147
|
+
*/
|
|
148
|
+
const CLOSING_SAYS = new WeakMap();
|
|
149
|
+
/** How long a closing frame may take to reach the pages before the sockets go. */
|
|
150
|
+
const CLOSING_FLUSH_MS = 250;
|
|
140
151
|
/** The chat surface this server is running, if any. */
|
|
141
152
|
/** The most of a text file a preview shows; the download has the whole. */
|
|
142
153
|
const PREVIEW_TEXT_BYTES = 100_000;
|
|
@@ -304,6 +315,14 @@ export function createWebApp(deps) {
|
|
|
304
315
|
*/
|
|
305
316
|
const lock = createLock({ pool: deps.pool, sessions, now: deps.now, get timezone() { return deps.timezone; }, widgets, log });
|
|
306
317
|
const openStreams = new Map();
|
|
318
|
+
/*
|
|
319
|
+
* This process's boot: answered by `/_buddi/ready`, so a page that watches a
|
|
320
|
+
* restart can tell the process that went from the one that came back.
|
|
321
|
+
* Random, and nothing else: it says which run this is, not when or where.
|
|
322
|
+
*/
|
|
323
|
+
const boot = randomUUID();
|
|
324
|
+
/** Set when a page asked the supervisor to restart or stop this process: what the closing frame says. */
|
|
325
|
+
let goingAway;
|
|
307
326
|
/*
|
|
308
327
|
* The session a live API token acts through: minted on its first request,
|
|
309
328
|
* kept in memory only, one per token (and scope), so a stream budget or a
|
|
@@ -572,6 +591,31 @@ export function createWebApp(deps) {
|
|
|
572
591
|
if (chat)
|
|
573
592
|
WEB_CHATS.set(server, chat);
|
|
574
593
|
PREVIEW_APPS.set(server, previews);
|
|
594
|
+
CLOSING_SAYS.set(server, async () => {
|
|
595
|
+
const said = frame('closing', goingAway === undefined ? {} : { for: goingAway });
|
|
596
|
+
const flushed = [];
|
|
597
|
+
for (const { responses } of openStreams.values()) {
|
|
598
|
+
for (const res of responses) {
|
|
599
|
+
if (res.writableEnded || res.destroyed)
|
|
600
|
+
continue;
|
|
601
|
+
// Ended, not just written: an ended response is flushed before its
|
|
602
|
+
// socket goes, where a frame still queued would be dropped with it.
|
|
603
|
+
flushed.push(new Promise((resolve) => {
|
|
604
|
+
try {
|
|
605
|
+
res.end(said, () => resolve());
|
|
606
|
+
}
|
|
607
|
+
catch {
|
|
608
|
+
resolve();
|
|
609
|
+
}
|
|
610
|
+
}));
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
if (flushed.length === 0)
|
|
614
|
+
return;
|
|
615
|
+
let timer;
|
|
616
|
+
await Promise.race([Promise.all(flushed), new Promise((resolve) => { timer = setTimeout(resolve, CLOSING_FLUSH_MS); })]);
|
|
617
|
+
clearTimeout(timer);
|
|
618
|
+
});
|
|
575
619
|
// "Your browser": the only path this server ever upgrades. Attached here
|
|
576
620
|
// rather than in `startWebServer` so every caller, tests included, has it.
|
|
577
621
|
extension.attach(server);
|
|
@@ -594,7 +638,7 @@ export function createWebApp(deps) {
|
|
|
594
638
|
const challenge = url.searchParams.get('challenge') ?? '';
|
|
595
639
|
if (!/^[a-f0-9]{64}$/.test(challenge))
|
|
596
640
|
return sendEmpty(res, 400);
|
|
597
|
-
return sendJson(res, 200, { proof: createHmac('sha256', deps.token).update(`buddi-ready-v1:${challenge}`).digest('hex') });
|
|
641
|
+
return sendJson(res, 200, { proof: createHmac('sha256', deps.token).update(`buddi-ready-v1:${challenge}`).digest('hex'), boot }, { 'Cache-Control': 'no-store' });
|
|
598
642
|
}
|
|
599
643
|
// A remote socket or proxy metadata can only earn remote access. It
|
|
600
644
|
// decides how long a session minted now lives, and it must keep matching
|
|
@@ -1335,8 +1379,16 @@ export function createWebApp(deps) {
|
|
|
1335
1379
|
kind: q.get('kind') ?? undefined,
|
|
1336
1380
|
limit: boundedLimit(q.get('limit')),
|
|
1337
1381
|
offset: Math.max(0, Math.min(Number(q.get('offset') ?? 0) || 0, 100_000)),
|
|
1382
|
+
failed: q.get('failed') === 'open' || q.get('failed') === 'dismissed' ? q.get('failed') : undefined,
|
|
1383
|
+
hideDismissed: q.get('dismissed') === '0',
|
|
1338
1384
|
}));
|
|
1339
1385
|
}
|
|
1386
|
+
// Failed jobs grouped by what broke them: the ones still asking, and
|
|
1387
|
+
// the dismissed ones (by the owner, or quiet after 14 days) apart.
|
|
1388
|
+
case '/api/jobs/failures': {
|
|
1389
|
+
const names = new Map(deps.catalog.list().map((a) => [a.id, a.name]));
|
|
1390
|
+
return sendJson(res, 200, await readJobFailures(deps.pool, now, (id) => names.get(id) ?? null));
|
|
1391
|
+
}
|
|
1340
1392
|
case '/api/approvals': {
|
|
1341
1393
|
const approvals = await readApprovals(deps.pool, now, boundedLimit(q.get('limit'), 50));
|
|
1342
1394
|
return sendJson(res, 200, { pending: approvals.pending.map(a => ({ ...a, ...permissionScopes(a.tool) })),
|
|
@@ -1368,7 +1420,7 @@ export function createWebApp(deps) {
|
|
|
1368
1420
|
reminders: await readReminders(deps.pool, boundedLimit(q.get('limit'))),
|
|
1369
1421
|
});
|
|
1370
1422
|
case '/api/sentinels':
|
|
1371
|
-
return sendJson(res, 200, await readSentinels(deps.pool, deps.registry,
|
|
1423
|
+
return sendJson(res, 200, await readSentinels(deps.pool, deps.registry, deps.now()));
|
|
1372
1424
|
case '/api/chat/agents':
|
|
1373
1425
|
return sendJson(res, 200, readChatAgents(deps.catalog, await avatarVersions(deps.pool)));
|
|
1374
1426
|
// Which agents are waiting on the owner. One small query, and the only
|
|
@@ -2267,14 +2319,64 @@ export function createWebApp(deps) {
|
|
|
2267
2319
|
return sendJson(res, 400, { error: 'Expected agentId and conversationId.' });
|
|
2268
2320
|
return sendJson(res, 200, { stopped: host.stop(deps.ctx.ownerId, body.agentId, body.conversationId) });
|
|
2269
2321
|
}
|
|
2322
|
+
/*
|
|
2323
|
+
* Alerts (alerts.ts): the owner's verbs on what the watchers found. Snooze
|
|
2324
|
+
* one ("Not now" for a week with `days`, "Not needed" without), several at
|
|
2325
|
+
* once (Clear all, and its Undo), silence a subject or a kind, run what a
|
|
2326
|
+
* finding declared, or ask the agent that answers for it.
|
|
2327
|
+
*/
|
|
2270
2328
|
const alert = /^\/api\/alerts\/([^/]+)\/snooze$/.exec(path);
|
|
2271
2329
|
if (alert) {
|
|
2272
2330
|
if (typeof body.snoozed !== 'boolean')
|
|
2273
2331
|
return sendJson(res, 400, { error: '`snoozed` must be true or false' });
|
|
2274
|
-
const
|
|
2332
|
+
const days = typeof body.days === 'number' && Number.isFinite(body.days) && body.days > 0 && body.days <= 90 ? body.days : null;
|
|
2333
|
+
const until = body.snoozed && days !== null ? new Date(deps.now().getTime() + days * 86_400_000) : null;
|
|
2334
|
+
const finding = await snoozeFinding(deps.pool, decodeURIComponent(alert[1]), body.snoozed, deps.now(), until);
|
|
2275
2335
|
if (!finding)
|
|
2276
2336
|
return sendJson(res, 404, { error: 'No open alert has that key.' });
|
|
2277
|
-
return sendJson(res, 200, {
|
|
2337
|
+
return sendJson(res, 200, {
|
|
2338
|
+
key: finding.key,
|
|
2339
|
+
snoozedAt: finding.snoozedAt ? finding.snoozedAt.toISOString() : null,
|
|
2340
|
+
snoozedUntil: finding.snoozedUntil ? finding.snoozedUntil.toISOString() : null,
|
|
2341
|
+
});
|
|
2342
|
+
}
|
|
2343
|
+
if (path === '/api/alerts/snooze') {
|
|
2344
|
+
const keys = Array.isArray(body.keys) ? body.keys.filter((k) => typeof k === 'string').slice(0, 500) : null;
|
|
2345
|
+
if (keys === null || typeof body.snoozed !== 'boolean')
|
|
2346
|
+
return sendJson(res, 400, { error: 'Send `{ keys: string[], snoozed: boolean, days? }`.' });
|
|
2347
|
+
const days = typeof body.days === 'number' && Number.isFinite(body.days) && body.days > 0 && body.days <= 90 ? body.days : null;
|
|
2348
|
+
const until = body.snoozed && days !== null ? new Date(deps.now().getTime() + days * 86_400_000) : null;
|
|
2349
|
+
return sendJson(res, 200, { keys: await snoozeFindings(deps.pool, keys, body.snoozed, deps.now(), until) });
|
|
2350
|
+
}
|
|
2351
|
+
if (path === '/api/alerts/mute')
|
|
2352
|
+
return reply(res, await muteAlert(deps.pool, body, deps.now()));
|
|
2353
|
+
const unmute = /^\/api\/alerts\/mutes\/([^/]+)\/remove$/.exec(path);
|
|
2354
|
+
if (unmute) {
|
|
2355
|
+
const removed = await unmuteFindings(deps.pool, decodeURIComponent(unmute[1]));
|
|
2356
|
+
return removed ? sendJson(res, 200, { removed: true }) : sendJson(res, 404, { error: 'Nothing is silenced under that id.' });
|
|
2357
|
+
}
|
|
2358
|
+
if (path === '/api/alerts/act') {
|
|
2359
|
+
if (actRateLimited(session.id, deps.now().getTime()))
|
|
2360
|
+
return sendJson(res, 429, { error: 'Too many writes from this page. Wait a moment and try again.' });
|
|
2361
|
+
return reply(res, await actOnAlerts({ pool: deps.pool, registry: deps.registry, ctx: deps.ctx, now: deps.now }, body, session));
|
|
2362
|
+
}
|
|
2363
|
+
if (path === '/api/alerts/ask') {
|
|
2364
|
+
const keys = Array.isArray(body.keys) ? body.keys.filter((k) => typeof k === 'string') : [];
|
|
2365
|
+
const findings = await findingsForAsk(deps.pool, keys);
|
|
2366
|
+
if (findings.length === 0)
|
|
2367
|
+
return sendJson(res, 404, { error: 'No alert has those keys.' });
|
|
2368
|
+
if (!chat)
|
|
2369
|
+
return sendJson(res, 503, { error: 'Chat is not running in this process.' });
|
|
2370
|
+
// The agent that answers for them, else whoever runs the wake mission.
|
|
2371
|
+
const wake = (await listMissions(deps.pool)).find((m) => m.id === 'sentinel-wake');
|
|
2372
|
+
const agentId = findings.find((f) => f.agentId !== null && deps.catalog.get(f.agentId) !== undefined)?.agentId ?? wake?.agentId ?? null;
|
|
2373
|
+
if (agentId === null)
|
|
2374
|
+
return sendJson(res, 409, { error: 'No agent answers for this alert yet.' });
|
|
2375
|
+
const { label, prompt } = askPrompt(findings);
|
|
2376
|
+
const sent = await chat.send({ agentId, text: prompt, offer: { id: `alert:${findings[0].key}`.slice(0, 200), label, brief: true } });
|
|
2377
|
+
if (!sent.ok)
|
|
2378
|
+
return sendJson(res, sent.status, { error: sent.error });
|
|
2379
|
+
return sendJson(res, 200, { agentId, conversationId: sent.conversationId, runId: sent.runId });
|
|
2278
2380
|
}
|
|
2279
2381
|
/*
|
|
2280
2382
|
* A watcher, switched off or back on. Off means it does not run: it raises
|
|
@@ -2530,8 +2632,10 @@ export function createWebApp(deps) {
|
|
|
2530
2632
|
}
|
|
2531
2633
|
const outcome = await leaveRecoveryMode({ pool: deps.pool, env: deps.env ?? process.env, log }, deps.ctx.ownerId, { dropPending: body.dropPending !== false, keepGrants: keep }, now);
|
|
2532
2634
|
if (socket) {
|
|
2635
|
+
goingAway = 'restart';
|
|
2533
2636
|
res.once('finish', () => {
|
|
2534
2637
|
void supervisorCall(socket, '/restart', 'POST').catch((err) => {
|
|
2638
|
+
goingAway = undefined;
|
|
2535
2639
|
log(`web: supervisor restart after leaving recovery failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
2536
2640
|
});
|
|
2537
2641
|
});
|
|
@@ -2571,8 +2675,10 @@ export function createWebApp(deps) {
|
|
|
2571
2675
|
return sendJson(res, 503, { error: 'The supervisor is not answering on its control socket. Run buddi in a terminal.' });
|
|
2572
2676
|
}
|
|
2573
2677
|
}
|
|
2678
|
+
goingAway = action === 'stop' ? 'stop' : 'restart';
|
|
2574
2679
|
res.once('finish', () => {
|
|
2575
2680
|
void supervisorCall(socket, `/${action}`, 'POST').catch((err) => {
|
|
2681
|
+
goingAway = undefined;
|
|
2576
2682
|
log(`web: supervisor ${action} failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
2577
2683
|
});
|
|
2578
2684
|
});
|
|
@@ -3013,6 +3119,14 @@ export function createWebApp(deps) {
|
|
|
3013
3119
|
return sendJson(res, 400, { error: change });
|
|
3014
3120
|
return finish(res, setAgentEngineFromWeb({ catalog: deps.catalog, env: deps.env ?? process.env }, decodeURIComponent(engine[1]), change));
|
|
3015
3121
|
}
|
|
3122
|
+
// Failed jobs in bulk — by ids, by cause group, or every one still asking.
|
|
3123
|
+
// Dismiss keeps them on record and out of the footer's count.
|
|
3124
|
+
if (path === '/api/jobs/dismiss')
|
|
3125
|
+
return finish(res, await dismissJobsFromWeb(writeDeps, body));
|
|
3126
|
+
if (path === '/api/jobs/undismiss')
|
|
3127
|
+
return finish(res, await undismissJobsFromWeb(writeDeps, body));
|
|
3128
|
+
if (path === '/api/jobs/retry')
|
|
3129
|
+
return finish(res, await retryJobsFromWeb(writeDeps, body));
|
|
3016
3130
|
const job = /^\/api\/jobs\/([^/]+)\/(retry|cancel)$/.exec(path);
|
|
3017
3131
|
if (job) {
|
|
3018
3132
|
const jobId = decodeURIComponent(job[1]);
|
|
@@ -3276,6 +3390,8 @@ export async function startWebServer(deps) {
|
|
|
3276
3390
|
close: async () => {
|
|
3277
3391
|
if (expirySweep)
|
|
3278
3392
|
clearInterval(expirySweep);
|
|
3393
|
+
// Said before anything closes, while the streams can still carry it.
|
|
3394
|
+
await CLOSING_SAYS.get(server)?.();
|
|
3279
3395
|
// Both listeners, both awaited. A preview socket still open is a port
|
|
3280
3396
|
// still held, and the next thing to want it — the next test, the
|
|
3281
3397
|
// gateway coming back up — finds it taken.
|