@withbuddi/buddi 0.1.0-pre.28 → 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.map +1 -1
- package/node_modules/@buddi/cli/dist/commands.js +67 -5
- 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 +9 -3
- package/node_modules/@buddi/cli/dist/doctor-probes.js.map +1 -1
- package/node_modules/@buddi/cli/dist/doctor.d.ts +1 -1
- package/node_modules/@buddi/cli/dist/doctor.d.ts.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 +20 -1
- 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.map +1 -1
- package/node_modules/@buddi/core/dist/agents/catalog.js +7 -6
- package/node_modules/@buddi/core/dist/agents/catalog.js.map +1 -1
- package/node_modules/@buddi/core/dist/agents/frontmatter.d.ts +12 -12
- package/node_modules/@buddi/core/dist/agents/skills.d.ts +2 -2
- 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 +23 -2
- package/node_modules/@buddi/core/dist/feedback/index.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/feedback/index.js +23 -3
- package/node_modules/@buddi/core/dist/feedback/index.js.map +1 -1
- 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 +122 -2
- package/node_modules/@buddi/core/dist/host/build.js.map +1 -1
- package/node_modules/@buddi/core/dist/host/types.d.ts +33 -0
- package/node_modules/@buddi/core/dist/host/types.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/index.d.ts +8 -0
- package/node_modules/@buddi/core/dist/index.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/index.js +8 -0
- package/node_modules/@buddi/core/dist/index.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/pages.d.ts +10 -38
- package/node_modules/@buddi/core/dist/pages.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/pages.js +6 -0
- 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 +8 -1
- 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 +37 -2
- package/node_modules/@buddi/core/dist/registry.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/registry.js +137 -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/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 +3 -0
- package/node_modules/@buddi/core/dist/sources/watch.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/sources/watch.js +1 -1
- package/node_modules/@buddi/core/dist/sources/watch.js.map +1 -1
- 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 +30 -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/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 +4 -0
- package/node_modules/@buddi/gateway/dist/agents/learning-digest.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/agents/learning-digest.js +18 -5
- 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.d.ts +24 -24
- 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 +11 -1
- 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/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/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/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 +6 -0
- package/node_modules/@buddi/gateway/dist/plugins/stage.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins/stage.js +6 -1
- 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 +1 -1
- package/node_modules/@buddi/gateway/dist/plugins-cli.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/plugins-cli.js +6 -2
- 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 +66 -8
- package/node_modules/@buddi/gateway/dist/serve.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/main.js +3 -3
- package/node_modules/@buddi/gateway/dist/telegram/main.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/outbound.d.ts +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/outbound.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/outbound.js +7 -2
- package/node_modules/@buddi/gateway/dist/telegram/outbound.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/reactions.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/reactions.js +12 -2
- package/node_modules/@buddi/gateway/dist/telegram/reactions.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/surface.d.ts +4 -1
- package/node_modules/@buddi/gateway/dist/telegram/surface.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/surface.js +13 -3
- 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/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/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 +28 -0
- package/node_modules/@buddi/gateway/dist/web/plugins.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/plugins.js +69 -9
- package/node_modules/@buddi/gateway/dist/web/plugins.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 +406 -37
- package/node_modules/@buddi/gateway/dist/web/server.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/sessions.d.ts +43 -2
- package/node_modules/@buddi/gateway/dist/web/sessions.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/sessions.js +67 -3
- package/node_modules/@buddi/gateway/dist/web/sessions.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/signed-out.d.ts +17 -18
- package/node_modules/@buddi/gateway/dist/web/signed-out.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/signed-out.js +135 -33
- package/node_modules/@buddi/gateway/dist/web/signed-out.js.map +1 -1
- 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 +33 -4
- package/node_modules/@buddi/gateway/dist/web/tailscale.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/tailscale.js +76 -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/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/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 +55 -0
- package/node_modules/@buddi/tool-email/dist/imap/fake.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/imap/fake.js +163 -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.map +1 -1
- package/node_modules/@buddi/tool-email/dist/imap/imapflow-client.js +65 -0
- package/node_modules/@buddi/tool-email/dist/imap/imapflow-client.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/index.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/index.js +3 -0
- package/node_modules/@buddi/tool-email/dist/index.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/mail.d.ts +6 -0
- package/node_modules/@buddi/tool-email/dist/mail.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/mail.js +3 -0
- package/node_modules/@buddi/tool-email/dist/mail.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/mailbox/actions.d.ts +90 -5
- package/node_modules/@buddi/tool-email/dist/mailbox/actions.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/mailbox/actions.js +643 -200
- package/node_modules/@buddi/tool-email/dist/mailbox/actions.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/mailbox/select.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/mailbox/select.js +9 -2
- package/node_modules/@buddi/tool-email/dist/mailbox/select.js.map +1 -1
- 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/descriptors.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/pages/descriptors.js +16 -2
- package/node_modules/@buddi/tool-email/dist/pages/descriptors.js.map +1 -1
- 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 +34 -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 +9 -9
- package/node_modules/@buddi/tool-email/dist/policies/auto.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/policies/auto.js +79 -24
- package/node_modules/@buddi/tool-email/dist/policies/auto.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/ports.d.ts +47 -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/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 +10 -2
- package/node_modules/@buddi/tool-email/dist/sources/idle.d.ts.map +1 -1
- package/node_modules/@buddi/tool-email/dist/sources/idle.js +70 -3
- package/node_modules/@buddi/tool-email/dist/sources/idle.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/sources/inbox-poll.d.ts +69 -2
- 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 +140 -11
- 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.map +1 -1
- package/node_modules/@buddi/tool-email/dist/tools/mailbox.js +4 -4
- package/node_modules/@buddi/tool-email/dist/tools/mailbox.js.map +1 -1
- 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/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/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-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/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.map +1 -1
- package/packages/cli/dist/commands.js +67 -5
- 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 +9 -3
- package/packages/cli/dist/doctor-probes.js.map +1 -1
- package/packages/cli/dist/doctor.d.ts +1 -1
- package/packages/cli/dist/doctor.d.ts.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 +20 -1
- 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.map +1 -1
- package/packages/core/dist/agents/catalog.js +7 -6
- package/packages/core/dist/agents/catalog.js.map +1 -1
- package/packages/core/dist/agents/frontmatter.d.ts +12 -12
- package/packages/core/dist/agents/skills.d.ts +2 -2
- 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 +23 -2
- package/packages/core/dist/feedback/index.d.ts.map +1 -1
- package/packages/core/dist/feedback/index.js +23 -3
- package/packages/core/dist/feedback/index.js.map +1 -1
- 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 +122 -2
- package/packages/core/dist/host/build.js.map +1 -1
- package/packages/core/dist/host/types.d.ts +33 -0
- package/packages/core/dist/host/types.d.ts.map +1 -1
- package/packages/core/dist/index.d.ts +8 -0
- package/packages/core/dist/index.d.ts.map +1 -1
- package/packages/core/dist/index.js +8 -0
- package/packages/core/dist/index.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/pages.d.ts +10 -38
- package/packages/core/dist/pages.d.ts.map +1 -1
- package/packages/core/dist/pages.js +6 -0
- 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 +8 -1
- 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 +37 -2
- package/packages/core/dist/registry.d.ts.map +1 -1
- package/packages/core/dist/registry.js +137 -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/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 +3 -0
- package/packages/core/dist/sources/watch.d.ts.map +1 -1
- package/packages/core/dist/sources/watch.js +1 -1
- package/packages/core/dist/sources/watch.js.map +1 -1
- 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 +30 -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/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 +4 -0
- package/packages/gateway/dist/agents/learning-digest.d.ts.map +1 -1
- package/packages/gateway/dist/agents/learning-digest.js +18 -5
- 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.d.ts +24 -24
- 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 +11 -1
- 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/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/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/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 +6 -0
- package/packages/gateway/dist/plugins/stage.d.ts.map +1 -1
- package/packages/gateway/dist/plugins/stage.js +6 -1
- 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 +1 -1
- package/packages/gateway/dist/plugins-cli.d.ts.map +1 -1
- package/packages/gateway/dist/plugins-cli.js +6 -2
- 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 +66 -8
- package/packages/gateway/dist/serve.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/main.js +3 -3
- package/packages/gateway/dist/telegram/main.js.map +1 -1
- package/packages/gateway/dist/telegram/outbound.d.ts +1 -1
- package/packages/gateway/dist/telegram/outbound.d.ts.map +1 -1
- package/packages/gateway/dist/telegram/outbound.js +7 -2
- package/packages/gateway/dist/telegram/outbound.js.map +1 -1
- package/packages/gateway/dist/telegram/reactions.d.ts.map +1 -1
- package/packages/gateway/dist/telegram/reactions.js +12 -2
- package/packages/gateway/dist/telegram/reactions.js.map +1 -1
- package/packages/gateway/dist/telegram/surface.d.ts +4 -1
- package/packages/gateway/dist/telegram/surface.d.ts.map +1 -1
- package/packages/gateway/dist/telegram/surface.js +13 -3
- 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/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/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 +28 -0
- package/packages/gateway/dist/web/plugins.d.ts.map +1 -1
- package/packages/gateway/dist/web/plugins.js +69 -9
- package/packages/gateway/dist/web/plugins.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 +406 -37
- package/packages/gateway/dist/web/server.js.map +1 -1
- package/packages/gateway/dist/web/sessions.d.ts +43 -2
- package/packages/gateway/dist/web/sessions.d.ts.map +1 -1
- package/packages/gateway/dist/web/sessions.js +67 -3
- package/packages/gateway/dist/web/sessions.js.map +1 -1
- package/packages/gateway/dist/web/signed-out.d.ts +17 -18
- package/packages/gateway/dist/web/signed-out.d.ts.map +1 -1
- package/packages/gateway/dist/web/signed-out.js +135 -33
- package/packages/gateway/dist/web/signed-out.js.map +1 -1
- 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 +33 -4
- package/packages/gateway/dist/web/tailscale.d.ts.map +1 -1
- package/packages/gateway/dist/web/tailscale.js +76 -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/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/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 +55 -0
- package/packages/tools/email/dist/imap/fake.d.ts.map +1 -1
- package/packages/tools/email/dist/imap/fake.js +163 -4
- package/packages/tools/email/dist/imap/fake.js.map +1 -1
- package/packages/tools/email/dist/imap/imapflow-client.d.ts.map +1 -1
- package/packages/tools/email/dist/imap/imapflow-client.js +65 -0
- package/packages/tools/email/dist/imap/imapflow-client.js.map +1 -1
- package/packages/tools/email/dist/index.d.ts.map +1 -1
- package/packages/tools/email/dist/index.js +3 -0
- package/packages/tools/email/dist/index.js.map +1 -1
- package/packages/tools/email/dist/mail.d.ts +6 -0
- package/packages/tools/email/dist/mail.d.ts.map +1 -1
- package/packages/tools/email/dist/mail.js +3 -0
- package/packages/tools/email/dist/mail.js.map +1 -1
- package/packages/tools/email/dist/mailbox/actions.d.ts +90 -5
- package/packages/tools/email/dist/mailbox/actions.d.ts.map +1 -1
- package/packages/tools/email/dist/mailbox/actions.js +643 -200
- package/packages/tools/email/dist/mailbox/actions.js.map +1 -1
- package/packages/tools/email/dist/mailbox/select.d.ts.map +1 -1
- package/packages/tools/email/dist/mailbox/select.js +9 -2
- package/packages/tools/email/dist/mailbox/select.js.map +1 -1
- 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/descriptors.d.ts.map +1 -1
- package/packages/tools/email/dist/pages/descriptors.js +16 -2
- package/packages/tools/email/dist/pages/descriptors.js.map +1 -1
- 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 +34 -4
- package/packages/tools/email/dist/pages/queries.js.map +1 -1
- package/packages/tools/email/dist/policies/auto.d.ts +9 -9
- package/packages/tools/email/dist/policies/auto.d.ts.map +1 -1
- package/packages/tools/email/dist/policies/auto.js +79 -24
- package/packages/tools/email/dist/policies/auto.js.map +1 -1
- package/packages/tools/email/dist/ports.d.ts +47 -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/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 +10 -2
- package/packages/tools/email/dist/sources/idle.d.ts.map +1 -1
- package/packages/tools/email/dist/sources/idle.js +70 -3
- package/packages/tools/email/dist/sources/idle.js.map +1 -1
- package/packages/tools/email/dist/sources/inbox-poll.d.ts +69 -2
- package/packages/tools/email/dist/sources/inbox-poll.d.ts.map +1 -1
- package/packages/tools/email/dist/sources/inbox-poll.js +140 -11
- 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.map +1 -1
- package/packages/tools/email/dist/tools/mailbox.js +4 -4
- package/packages/tools/email/dist/tools/mailbox.js.map +1 -1
- 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/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/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/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-CSeMXM8D.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-CKuhKCWw.js +0 -131
- package/packages/web/dist/assets/index-DsK8UWCJ.css +0 -1
|
@@ -0,0 +1,1200 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The dashboard's HTTP API, described: one row per method and path.
|
|
3
|
+
*
|
|
4
|
+
* The router itself stays where it is — `path === …` comparisons and regular
|
|
5
|
+
* expressions in `server.ts` and the modules it hands a prefix to — and this
|
|
6
|
+
* table is what is *said* about each route: what it is for, what it takes,
|
|
7
|
+
* what it answers, how it fails, and whether an owner API token may call it.
|
|
8
|
+
*
|
|
9
|
+
* It is held to the source in both directions by `api-routes.test.ts` (every
|
|
10
|
+
* path the source dispatches has a row here, and every row here is a path the
|
|
11
|
+
* source dispatches), it renders `docs/api.md` (`pnpm docs:api`), and the
|
|
12
|
+
* server reads it at run time for one thing: a request carrying an API token
|
|
13
|
+
* is answered only on a row whose `token` is not refused (docs/api.md,
|
|
14
|
+
* "Authentication").
|
|
15
|
+
*
|
|
16
|
+
* Shapes are written TypeScript-style and name the fields a client relies on.
|
|
17
|
+
* Where a route answers a whole page's view, `answer` names its top-level
|
|
18
|
+
* fields; the dashboard's own types in packages/web/src/api.ts are the long
|
|
19
|
+
* form.
|
|
20
|
+
*/
|
|
21
|
+
/** Why a token is refused a route: the four kinds of change only a person at the dashboard makes. */
|
|
22
|
+
export const TOKEN_REFUSALS = {
|
|
23
|
+
decides: 'It decides an approval, or the click is the approval. A token never decides for the owner.',
|
|
24
|
+
grants: 'It changes what an agent may do without asking.',
|
|
25
|
+
code: 'It installs or runs code buddi has not run before.',
|
|
26
|
+
access: 'It changes how buddi is reached, unlocked or signed in to, or replaces the whole installation.',
|
|
27
|
+
secret: 'It reads or stores a secret.',
|
|
28
|
+
socket: 'A socket with its own gate: the browser extension pairs, the remote hand needs the dashboard session.',
|
|
29
|
+
};
|
|
30
|
+
/** The sections of docs/api.md, in order. */
|
|
31
|
+
export const API_AREAS = {
|
|
32
|
+
session: 'Session and lock screen',
|
|
33
|
+
tokens: 'API tokens',
|
|
34
|
+
home: 'Home',
|
|
35
|
+
chat: 'Chat',
|
|
36
|
+
groups: 'Groups',
|
|
37
|
+
agents: 'Agents',
|
|
38
|
+
approvals: 'Approvals, offers and proposals',
|
|
39
|
+
work: 'Missions, jobs, reminders and watchers',
|
|
40
|
+
notifications: 'Notifications',
|
|
41
|
+
memory: 'Memory',
|
|
42
|
+
files: 'Files',
|
|
43
|
+
owner: 'Your profile',
|
|
44
|
+
accounts: 'Model accounts',
|
|
45
|
+
connections: 'Connections',
|
|
46
|
+
plugins: 'Plugins and plugin pages',
|
|
47
|
+
secrets: 'Keys and secrets',
|
|
48
|
+
computer: 'Computer and browser',
|
|
49
|
+
telegram: 'Telegram',
|
|
50
|
+
system: 'Backups, version and service',
|
|
51
|
+
onboarding: 'First run',
|
|
52
|
+
speech: 'Speech',
|
|
53
|
+
mcp: 'MCP',
|
|
54
|
+
};
|
|
55
|
+
const UUID = 'uuid';
|
|
56
|
+
const ERR = '{ error: string }';
|
|
57
|
+
export const API_ROUTES = [
|
|
58
|
+
/* ---------------- session and lock screen ---------------- */
|
|
59
|
+
{
|
|
60
|
+
method: 'GET', path: '/api/session', area: 'session', whileLocked: true,
|
|
61
|
+
summary: 'Who is signed in, the CSRF value writes must echo, and facts every page formats with.',
|
|
62
|
+
answer: "{ csrf: string, timezone: string, timeFormat: '12h'|'24h'|null, dateFormat: 'short'|'long'|'iso'|null, host: string, port: number, platform: string, recovery: boolean, scope: 'local'|'remote', signedInThrough: 'local'|'ticket'|'tailscale'|'token', tailscaleName?: string, tailscaleLogin?: string, expiresAt: string, version: string }",
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
method: 'GET', path: '/api/lock', area: 'session', whileLocked: true,
|
|
66
|
+
summary: 'The lock screen state: whether a PIN is set and this session is locked.',
|
|
67
|
+
answer: '{ pin: boolean, locked: boolean, lockedAt: string|null, settings: { delayMinutes, background, clock }, image: string|null, … }',
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
method: 'POST', path: '/api/lock', area: 'session', whileLocked: true, token: 'access',
|
|
71
|
+
summary: 'Lock this session now.', body: "{ reason?: 'owner'|'idle' }",
|
|
72
|
+
answer: 'the lock state', errors: '409 no PIN is set, or the client is not covered by the lock screen',
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
method: 'GET', path: '/api/lock/screen', area: 'session', whileLocked: true,
|
|
76
|
+
summary: 'What the lock screen draws: the time, counts waiting, the focus line, its widgets.',
|
|
77
|
+
query: 'hour?: number',
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
method: 'POST', path: '/api/lock/unlock', area: 'session', whileLocked: true, token: 'access',
|
|
81
|
+
summary: 'Unlock with the PIN.', body: '{ pin: string } // four to eight digits',
|
|
82
|
+
answer: 'the lock state', errors: '400 not a PIN; 403 wrong PIN; 429 wait before trying again',
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
method: 'POST', path: '/api/lock/activity', area: 'session', token: 'access',
|
|
86
|
+
summary: 'The page saying the owner is using it, which pushes back the idle lock.', answer: '204',
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
method: 'PUT', path: '/api/lock/pin', area: 'session', token: 'access',
|
|
90
|
+
summary: 'Set or change the PIN.', body: '{ pin: string, current?: string } // current when one is set',
|
|
91
|
+
answer: 'the lock state', errors: '400 not a PIN, or the current PIN missing; 403 wrong current PIN',
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
method: 'POST', path: '/api/lock/pin/remove', area: 'session', token: 'access',
|
|
95
|
+
summary: 'Remove the PIN.', body: '{ current: string }', answer: 'the lock state', errors: '400; 403 wrong PIN',
|
|
96
|
+
},
|
|
97
|
+
{
|
|
98
|
+
method: 'PUT', path: '/api/lock/settings', area: 'session', token: 'access',
|
|
99
|
+
summary: 'Lock after, background and clock.',
|
|
100
|
+
body: "{ delayMinutes?: 1|5|15|60|null, background?: string, clock?: { time, date, zone } }",
|
|
101
|
+
answer: 'the lock state', errors: '400 a value out of range; 409 the picture background with no picture',
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
method: 'GET', path: '/api/lock/background', area: 'session', whileLocked: true, kind: 'bytes',
|
|
105
|
+
summary: "The lock screen's own picture, as JPEG.", answer: 'image/jpeg, with an ETag', errors: '404 there is no picture',
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
method: 'POST', path: '/api/lock/background', area: 'session', kind: 'upload', token: 'access',
|
|
109
|
+
summary: 'Upload the lock screen picture.', body: 'multipart/form-data with one image file, at most 10 MB',
|
|
110
|
+
answer: 'the lock state', errors: '413 too large; 415 not a picture',
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
method: 'DELETE', path: '/api/lock/background', area: 'session', token: 'access',
|
|
114
|
+
summary: 'Remove the lock screen picture (the background goes back to a built-in one).', answer: 'the lock state',
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
method: 'GET', path: '/api/tailscale', area: 'session',
|
|
118
|
+
summary: 'Tailscale sign-in: the stored setting, the daemon, and the command that serves this dashboard on the tailnet.',
|
|
119
|
+
answer: '{ enabled: boolean, login: string, available: boolean, self: { login, name }|null, proxied: boolean, serveCommand: string }',
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
method: 'PUT', path: '/api/tailscale', area: 'session', localOnly: true, token: 'access',
|
|
123
|
+
summary: 'Turn Tailscale sign-in on or off, for one login. Every Tailscale session ends.',
|
|
124
|
+
body: '{ enabled: boolean, login?: string }', answer: 'as GET',
|
|
125
|
+
errors: '400 not a Tailscale login; 403 not from the computer buddi runs on',
|
|
126
|
+
},
|
|
127
|
+
/* ---------------- API tokens ---------------- */
|
|
128
|
+
{
|
|
129
|
+
method: 'GET', path: '/api/api-tokens', area: 'tokens', token: 'access',
|
|
130
|
+
summary: 'The owner API tokens: name, last four characters, when made and last used. Never the token.',
|
|
131
|
+
answer: "{ tokens: Array<{ id, name, hint: string, scope: 'owner', createdVia: 'dashboard'|'cli', createdAt, lastUsedAt: string|null }> }",
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
method: 'POST', path: '/api/api-tokens', area: 'tokens', token: 'access',
|
|
135
|
+
summary: 'Make a token. The answer is the only time the token itself is shown.',
|
|
136
|
+
body: '{ name: string } // 1 to 60 characters', answer: '201 { token: string, apiToken: { id, name, hint, … } }',
|
|
137
|
+
errors: '400 no name, or too long; 409 the limit of 20 live tokens',
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
method: 'DELETE', path: '/api/api-tokens/:id', area: 'tokens', token: 'access',
|
|
141
|
+
summary: 'Revoke a token. A request carrying it is refused from the next one on.', answer: '204',
|
|
142
|
+
errors: '404 no live token with that id',
|
|
143
|
+
},
|
|
144
|
+
/* ---------------- home ---------------- */
|
|
145
|
+
{
|
|
146
|
+
method: 'GET', path: '/api/overview', area: 'home',
|
|
147
|
+
summary: "Home's whole first read: plugin blocks and glances, and counts of approvals, jobs, missions, reminders, watchers.",
|
|
148
|
+
answer: '{ now, timezone, paused, home: HomeBlock[], glances, approvals: { pending, oldestPendingAt }, jobs: Record<state, number>, missions, reminders, sentinels, mail, running }',
|
|
149
|
+
},
|
|
150
|
+
{ method: 'GET', path: '/api/tips', area: 'home', summary: 'Every tip and its state.', answer: '{ tips: Tip[], enabled: boolean }' },
|
|
151
|
+
{
|
|
152
|
+
method: 'GET', path: '/api/tips/current', area: 'home', summary: "Today's tip on Home, if any (picking one is remembered).",
|
|
153
|
+
query: 'preview?: tip id // show one as it would look, touching nothing', answer: '{ tip: Tip|null, enabled: boolean }',
|
|
154
|
+
errors: '404 no tip by the preview id',
|
|
155
|
+
},
|
|
156
|
+
{ method: 'GET', path: '/api/tips/settings', area: 'home', summary: 'Whether tips are on.', answer: '{ enabled: boolean }' },
|
|
157
|
+
{ method: 'PUT', path: '/api/tips/settings', area: 'home', summary: 'Turn tips on or off.', body: '{ enabled: boolean }', answer: '{ enabled: boolean }' },
|
|
158
|
+
{ method: 'POST', path: '/api/tips/seen-page', area: 'home', summary: 'Record that a page was opened (tips about it stop).', body: '{ page: string }', answer: '{ ok: true }' },
|
|
159
|
+
{ method: 'POST', path: '/api/tips/:id/dismiss', area: 'home', summary: 'Never show this tip again.', answer: '{ ok: true }', errors: '404 no such tip' },
|
|
160
|
+
{ method: 'POST', path: '/api/tips/:id/later', area: 'home', summary: 'Show this tip another day.', answer: '{ ok: true }', errors: '404 no such tip' },
|
|
161
|
+
{ method: 'POST', path: '/api/tips/:id/restore', area: 'home', summary: 'Bring a dismissed tip back.', answer: '{ ok: true }', errors: '404 no such tip' },
|
|
162
|
+
{
|
|
163
|
+
method: 'GET', path: '/api/widgets', area: 'home', summary: 'The widget gallery, the layout and each placed widget’s body.',
|
|
164
|
+
query: "surface?: 'home'|'lock', hour?: number", answer: '{ gallery, placed: Array<{ id, widget, size, body, updatedAt, … }>, … }',
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
method: 'PUT', path: '/api/widgets/home', area: 'home', summary: "Save Home's widget layout.",
|
|
168
|
+
body: "{ placed: Array<{ id, widget, size: 'small'|'medium', settings? }> }", answer: 'the widgets view', errors: '400 an unknown widget or a bad setting',
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
method: 'PUT', path: '/api/widgets/lock', area: 'home', summary: "Save the lock screen's widgets (up to four).",
|
|
172
|
+
body: 'as /api/widgets/home', answer: 'the widgets view', errors: '400',
|
|
173
|
+
},
|
|
174
|
+
{ method: 'GET', path: '/api/widgets/settings/:widget', area: 'home', summary: "A widget's settings schema.", errors: '404 no such widget' },
|
|
175
|
+
{ method: 'POST', path: '/api/widgets/preview', area: 'home', summary: 'One widget’s body with settings not yet saved.', body: '{ widget: string, settings?: object, size? }', errors: '400' },
|
|
176
|
+
{
|
|
177
|
+
method: 'POST', path: '/api/widgets/:placement/refresh', area: 'home', summary: 'Produce one placed widget again, now.',
|
|
178
|
+
query: "surface?: 'home'|'lock', hour?: number", answer: 'the widgets view',
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
method: 'POST', path: '/api/home/glances/:id/hidden', area: 'home', summary: 'Hide a Home glance or show it again.',
|
|
182
|
+
body: '{ hidden: boolean }', errors: '404 no such glance',
|
|
183
|
+
},
|
|
184
|
+
{ method: 'GET', path: '/api/rail', area: 'home', summary: 'Which plugin pages the owner hid from the rail.', answer: '{ hidden: Array<{ plugin, page }> }' },
|
|
185
|
+
{
|
|
186
|
+
method: 'POST', path: '/api/rail/pages/:plugin/:page/hidden', area: 'home', summary: 'Hide a plugin page from the rail or show it again.',
|
|
187
|
+
body: '{ hidden: boolean }', errors: '404 no such page',
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
method: 'GET', path: '/api/events', area: 'home', summary: 'The event log, newest first, paged.',
|
|
191
|
+
query: 'kind?, q?: text in the payload, since?: event id, before?: event id, limit?: 1–500 (100)',
|
|
192
|
+
answer: '{ events: Array<{ id, kind, conversationId, payload, createdAt }>, nextCursor: string|null, latest: string|null }',
|
|
193
|
+
},
|
|
194
|
+
{ method: 'GET', path: '/api/events/kinds', area: 'home', summary: 'Every event kind in the log, with its count.', answer: '{ kinds: Array<{ kind, count }> }' },
|
|
195
|
+
{ method: 'POST', path: '/api/pause', area: 'home', summary: 'Pause or resume the installation: nothing new is claimed while paused.', body: '{ paused: boolean }' },
|
|
196
|
+
/* ---------------- chat ---------------- */
|
|
197
|
+
{ method: 'GET', path: '/api/chat/agents', area: 'chat', summary: 'The agents a chat can be with, with their pictures.', answer: '{ agents: Array<{ id, name, handle, avatar, … }>, default: string }' },
|
|
198
|
+
{ method: 'GET', path: '/api/chat/attention', area: 'chat', summary: 'Which agents are waiting on the owner, and why.' },
|
|
199
|
+
{
|
|
200
|
+
method: 'GET', path: '/api/chat/attention/stream', area: 'chat', kind: 'stream',
|
|
201
|
+
summary: 'Server-sent events: one empty frame whenever /api/chat/attention would answer differently.',
|
|
202
|
+
query: 'since?: event id (or Last-Event-ID)', errors: '429 too many open streams for this session',
|
|
203
|
+
},
|
|
204
|
+
{ method: 'GET', path: '/api/chat/views', area: 'chat', summary: 'How installed plugins want their tool output drawn.', answer: '{ views: ViewMapping[] }' },
|
|
205
|
+
{
|
|
206
|
+
method: 'GET', path: '/api/chat/:agent/conversations', area: 'chat', summary: "An agent's conversations, newest first.",
|
|
207
|
+
query: 'limit?: number', answer: '{ conversations: Array<{ id, startedAt, lastMessageAt, messageCount, opening }> }', errors: '404 no such agent',
|
|
208
|
+
},
|
|
209
|
+
{
|
|
210
|
+
method: 'POST', path: '/api/chat/:agent/conversations', area: 'chat', summary: 'Start a new conversation with an agent.',
|
|
211
|
+
answer: '{ conversationId: string }', errors: '404 no such agent; 503 chat is not running in this process',
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
method: 'POST', path: '/api/chat/:agent/messages', area: 'chat',
|
|
215
|
+
summary: 'Send a message. The turn is accepted, not answered: follow the conversation stream for the reply.',
|
|
216
|
+
body: '{ text: string, conversationId?: string, attachmentIds?: string[], client?: string }',
|
|
217
|
+
answer: '202 { conversationId, runId, queued?: true, pendingId? } // queued: the agent was working and took it as an interjection',
|
|
218
|
+
errors: '400 a field of the wrong type; 404 no such agent; 503 chat is not running',
|
|
219
|
+
},
|
|
220
|
+
{
|
|
221
|
+
method: 'GET', path: '/api/chat/conversations/:id', area: 'chat', summary: 'A conversation’s transcript: messages, tool calls, runs.',
|
|
222
|
+
answer: '{ id, agentId, messages, runs, usage, carryOver?, … }', errors: '404 no such conversation',
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
method: 'GET', path: '/api/chat/conversations/:id/stream', area: 'chat', kind: 'stream',
|
|
226
|
+
summary: 'Server-sent events for one conversation: messages, tool calls, approvals, the run ending.',
|
|
227
|
+
query: 'since?: event id (or Last-Event-ID)', errors: '404 no such conversation; 429 too many open streams',
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
method: 'POST', path: '/api/chat/conversations/:id/cancel', area: 'chat', summary: 'Stop the run in progress (a group’s current request, in a group).',
|
|
231
|
+
answer: '{ cancelled: boolean } or { stopped: true }', errors: '503 chat is not running',
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
method: 'DELETE', path: '/api/chat/conversations/:id/carry-over', area: 'chat',
|
|
235
|
+
summary: 'Drop the note a rollover carried into this conversation; it leaves every later turn’s context.', answer: '204',
|
|
236
|
+
},
|
|
237
|
+
{
|
|
238
|
+
method: 'POST', path: '/api/chat/questions/:id/answer', area: 'chat', summary: 'Answer a question an agent asked in the chat.',
|
|
239
|
+
body: '{ answer: string, optionId?: string } or { skipped: true }', answer: '202', errors: '400; 404 no open question; 409 already answered',
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
method: 'POST', path: '/api/chat/attachments', area: 'chat', kind: 'upload', summary: 'Upload a file for the next message.',
|
|
243
|
+
query: 'conversationId?: string', body: 'multipart/form-data with one file, at most 20 MB',
|
|
244
|
+
answer: '{ artifactId, filename, mime, kind, sizeBytes }', errors: '413 too large; 503 attachments unavailable',
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
method: 'GET', path: '/api/conversations', area: 'chat', summary: 'Every conversation, newest first (Activity).',
|
|
248
|
+
query: 'limit?: number (50)', answer: '{ conversations: Array<{ id, agentId, createdAt, messageCount, lastMessageAt, opening, runs, usage }> }',
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
method: 'GET', path: '/api/conversations/:id', area: 'chat', summary: 'One conversation as Activity shows it.',
|
|
252
|
+
answer: '{ id, agentId, createdAt, messages, runs, usage }', errors: '404 no such conversation',
|
|
253
|
+
},
|
|
254
|
+
/* ---------------- groups ---------------- */
|
|
255
|
+
{ method: 'GET', path: '/api/groups', area: 'groups', summary: 'The groups.', answer: '{ groups: Array<{ id, name, coordinator, members, … }> }' },
|
|
256
|
+
{
|
|
257
|
+
method: 'POST', path: '/api/groups', area: 'groups', summary: 'Make a group.',
|
|
258
|
+
body: '{ name: string, coordinator: agent id, members: agent id[] }', answer: 'the group',
|
|
259
|
+
errors: '400 a missing name, an unknown agent, or fewer than two agents',
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
method: 'GET', path: '/api/groups/:id', area: 'groups', summary: 'One group: who is in it, its latest conversation and request.',
|
|
263
|
+
answer: '{ …group, latestConversationId, openRequest, history: { conversations, messages } }', errors: '404 no such group',
|
|
264
|
+
},
|
|
265
|
+
{
|
|
266
|
+
method: 'PATCH', path: '/api/groups/:id', area: 'groups', summary: 'Rename, change the coordinator, or change who is in it; what is left out stays.',
|
|
267
|
+
body: '{ name?: string, coordinator?: agent id, members?: agent id[] }', answer: 'the group', errors: '400; 404 no such group',
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
method: 'DELETE', path: '/api/groups/:id', area: 'groups', summary: 'Delete a group. Undo works for a minute.',
|
|
271
|
+
answer: '{ undoUntil: string }', errors: '404 no such group',
|
|
272
|
+
},
|
|
273
|
+
{ method: 'POST', path: '/api/groups/:id/restore', area: 'groups', summary: 'Undo a delete, within the minute.', answer: 'the group', errors: '410 too late' },
|
|
274
|
+
{ method: 'POST', path: '/api/groups/:id/archive', area: 'groups', summary: 'Archive a group.', answer: '204', errors: '404' },
|
|
275
|
+
{
|
|
276
|
+
method: 'POST', path: '/api/groups/:id/clear', area: 'groups', summary: "Clear the group's history; members and memory stay.",
|
|
277
|
+
answer: '{ conversations: number }', errors: '404',
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
method: 'GET', path: '/api/groups/:id/conversations', area: 'groups', summary: "A group's conversations.",
|
|
281
|
+
answer: '{ conversations: Array<{ id, startedAt, lastMessageAt, messageCount, opening }> }', errors: '404',
|
|
282
|
+
},
|
|
283
|
+
{ method: 'POST', path: '/api/groups/:id/conversations', area: 'groups', summary: 'Start a new conversation in a group.', answer: '{ conversationId }', errors: '404' },
|
|
284
|
+
{
|
|
285
|
+
method: 'POST', path: '/api/groups/:id/messages', area: 'groups', summary: 'Send a message to a group (its coordinator answers).',
|
|
286
|
+
body: '{ text: string, conversationId?: string, attachmentIds?: string[] }', answer: '202 { conversationId, runId, requestId, rolledOver? }',
|
|
287
|
+
errors: '400; 404; 503 chat is not running',
|
|
288
|
+
},
|
|
289
|
+
/* ---------------- agents ---------------- */
|
|
290
|
+
{
|
|
291
|
+
method: 'GET', path: '/api/agents', area: 'agents', summary: 'Every agent, their engines, the model accounts and which agent is the default.',
|
|
292
|
+
answer: '{ agents: AgentView[], engines, providers, providerAccounts, default }',
|
|
293
|
+
},
|
|
294
|
+
{ method: 'POST', path: '/api/agents/default', area: 'agents', summary: 'Make an agent the default (where a chat that names nobody lands).', body: '{ agentId: string }', errors: '400; 404' },
|
|
295
|
+
{ method: 'GET', path: '/api/agents/:id/profile', area: 'agents', summary: "One agent whole: its grant with every tool's tier, engine, skills, delegates.", errors: '404 no such agent' },
|
|
296
|
+
{ method: 'GET', path: '/api/agents/:id/skills', area: 'agents', summary: 'Every skill the agent loads; learned ones with their versions.', errors: '404' },
|
|
297
|
+
{
|
|
298
|
+
method: 'POST', path: '/api/agents/:id/skills/:skill/remove', area: 'agents', summary: 'Remove a learned skill (its versions are kept).',
|
|
299
|
+
errors: '404; 409 not a learned skill',
|
|
300
|
+
},
|
|
301
|
+
{ method: 'GET', path: '/api/agents/:id/tools', area: 'agents', summary: 'Every installed tool, for the agent’s tool picker.', errors: '404' },
|
|
302
|
+
{
|
|
303
|
+
method: 'GET', path: '/api/agents/:id/file', area: 'agents', summary: "The agent's file as written: front matter and persona.",
|
|
304
|
+
answer: '{ id, file, frontmatter, persona }', errors: '404',
|
|
305
|
+
},
|
|
306
|
+
{
|
|
307
|
+
method: 'POST', path: '/api/agents/:id/file', area: 'agents', token: 'grants',
|
|
308
|
+
summary: "Edit the agent's front matter: name, handle, tools, persona…; checked as the loader checks it.",
|
|
309
|
+
body: 'the editable front matter fields (packages/core ownerEditableInput)', errors: '400 with the loader’s sentence',
|
|
310
|
+
},
|
|
311
|
+
{
|
|
312
|
+
method: 'POST', path: '/api/agents/:id/delegates', area: 'agents', token: 'grants',
|
|
313
|
+
summary: 'Which agents this one may hand work to.', body: '{ delegates: agent id[] }', errors: '400; 404',
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
method: 'POST', path: '/api/agents/:id/engine', area: 'agents', summary: 'Change engine settings (effort, context, idle rollover…).',
|
|
317
|
+
body: 'engine fields; the account and model go through /account', errors: '400',
|
|
318
|
+
},
|
|
319
|
+
{
|
|
320
|
+
method: 'POST', path: '/api/agents/:id/account', area: 'agents', summary: 'Put the agent on a model account and model.',
|
|
321
|
+
body: '{ accountId: string, model?: string }', errors: '400; 404; 503 accounts unavailable',
|
|
322
|
+
},
|
|
323
|
+
{
|
|
324
|
+
method: 'GET', path: '/api/agents/:id/avatar', area: 'agents', kind: 'bytes', summary: "The agent's picture (PNG, or the file its front matter names).",
|
|
325
|
+
answer: 'an image, with an ETag', errors: '404 no picture',
|
|
326
|
+
},
|
|
327
|
+
{
|
|
328
|
+
method: 'POST', path: '/api/agents/:id/avatar', area: 'agents', kind: 'upload', summary: 'Upload a picture: PNG, GIF or SVG, at most 1 MB, made square.',
|
|
329
|
+
body: 'multipart/form-data with one image', answer: '{ picture: string, side: number, source, note? }', errors: '404; 413; 415',
|
|
330
|
+
},
|
|
331
|
+
{ method: 'DELETE', path: '/api/agents/:id/avatar', area: 'agents', summary: "Remove the uploaded picture; the agent's icon is drawn again.", answer: '204', errors: '404' },
|
|
332
|
+
{ method: 'GET', path: '/api/teammates', area: 'agents', summary: '"Add a teammate": the starter team and plugin teammates, each added, addable, or why not.' },
|
|
333
|
+
{ method: 'GET', path: '/api/agent-offers', area: 'agents', summary: 'Agents a plugin offers while nobody has them.' },
|
|
334
|
+
{ method: 'POST', path: '/api/agent-offers/:plugin/:agent/dismiss', area: 'agents', summary: 'Stop offering this agent.', errors: '404' },
|
|
335
|
+
/* ---------------- approvals, offers, proposals ---------------- */
|
|
336
|
+
{
|
|
337
|
+
method: 'GET', path: '/api/approvals', area: 'approvals', summary: 'Approvals waiting on the owner, and recent decisions.',
|
|
338
|
+
query: 'limit?: number (50)', answer: '{ pending: ApprovalView[], recent: ApprovalView[] }',
|
|
339
|
+
},
|
|
340
|
+
{
|
|
341
|
+
method: 'GET', path: '/api/approvals/:id', area: 'approvals', summary: 'One action whole: the envelope the approval is bound to and the preview the tool rendered.',
|
|
342
|
+
answer: '{ action: ApprovalView }', errors: '404 no such action',
|
|
343
|
+
},
|
|
344
|
+
{
|
|
345
|
+
method: 'POST', path: '/api/approvals/:id/approve', area: 'approvals', token: 'decides',
|
|
346
|
+
summary: 'Approve an action.', body: "{ permissionScope?: 'once'|'conversation'|'always', ownerChoices?: Record<string, string> }",
|
|
347
|
+
errors: '400 a bad scope or choice; 404; 409 already decided or expired',
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
method: 'POST', path: '/api/approvals/:id/reject', area: 'approvals', summary: 'Reject an action. Saying no is never refused to a token.',
|
|
351
|
+
errors: '404; 409 already decided or expired',
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
method: 'GET', path: '/api/offers', area: 'approvals', summary: 'What agents offered to do next.',
|
|
355
|
+
query: 'limit?: number', answer: '{ offers: Offer[], … }',
|
|
356
|
+
},
|
|
357
|
+
{
|
|
358
|
+
method: 'POST', path: '/api/offers/:id/take', area: 'approvals', summary: 'Take an offer: its run starts (here if the page has its conversation open).',
|
|
359
|
+
body: '{ conversationId?: string }', errors: '404; 409 no longer open',
|
|
360
|
+
},
|
|
361
|
+
{ method: 'POST', path: '/api/offers/:id/dismiss', area: 'approvals', summary: 'Dismiss an offer.', errors: '404' },
|
|
362
|
+
{ method: 'POST', path: '/api/offers/dismiss-all', area: 'approvals', summary: 'Dismiss several offers.', body: '{ ids: string[] }' },
|
|
363
|
+
{
|
|
364
|
+
method: 'GET', path: '/api/proposals', area: 'approvals', summary: 'What agents proposed to change (skills, rules), and the weekly digest.',
|
|
365
|
+
answer: '{ open, recent, digest: { latest, schedule } }',
|
|
366
|
+
},
|
|
367
|
+
{
|
|
368
|
+
method: 'POST', path: '/api/proposals/:id/keep', area: 'approvals', token: 'decides',
|
|
369
|
+
summary: 'Keep a proposal: its change is applied.', body: '{ text?: string } // the edited text, when the owner edited it', errors: '404; 409',
|
|
370
|
+
},
|
|
371
|
+
{ method: 'POST', path: '/api/proposals/:id/discard', area: 'approvals', summary: 'Discard a proposal.', body: '{ reason?: string }', errors: '404; 409' },
|
|
372
|
+
{ method: 'POST', path: '/api/proposals/keep-all', area: 'approvals', token: 'decides', summary: 'Keep a group of open rule proposals.', body: '{ ids: string[] }' },
|
|
373
|
+
{
|
|
374
|
+
method: 'POST', path: '/api/proposals/digest-schedule', area: 'approvals', summary: "The weekly digest's day and hour.",
|
|
375
|
+
body: '{ day: 0–6, hour: 0–23 }', answer: '{ schedule }', errors: '400',
|
|
376
|
+
},
|
|
377
|
+
/* ---------------- missions, jobs, reminders, watchers ---------------- */
|
|
378
|
+
{ method: 'GET', path: '/api/missions', area: 'work', summary: 'Every mission, its schedule, next run and recent occurrences.', answer: '{ missions: MissionView[] }' },
|
|
379
|
+
{ method: 'POST', path: '/api/missions/:id/enabled', area: 'work', summary: 'Switch a mission on or off.', body: '{ enabled: boolean }', errors: '404' },
|
|
380
|
+
{
|
|
381
|
+
method: 'POST', path: '/api/missions/:id/schedule', area: 'work', summary: 'Change a mission’s schedule (a new revision).',
|
|
382
|
+
body: "{ cron?: string, timezone?: string, misfirePolicy?: 'skip'|'run-once', deadlineMinutes?: number|null }", errors: '400; 404',
|
|
383
|
+
},
|
|
384
|
+
{
|
|
385
|
+
method: 'GET', path: '/api/jobs', area: 'work', summary: 'The job queue, paged.',
|
|
386
|
+
query: 'state?, kind?, limit?, offset?', answer: '{ jobs: JobView[], total, counts }',
|
|
387
|
+
},
|
|
388
|
+
{ method: 'POST', path: '/api/jobs/:id/retry', area: 'work', summary: 'Retry a failed job.', errors: '404; 409 not failed' },
|
|
389
|
+
{ method: 'POST', path: '/api/jobs/:id/cancel', area: 'work', summary: 'Cancel a queued or failed job.', errors: '404; 409' },
|
|
390
|
+
{ method: 'GET', path: '/api/reminders', area: 'work', summary: 'Reminders agents set, pending and past.', query: 'limit?: number', answer: '{ reminders }' },
|
|
391
|
+
{ method: 'POST', path: '/api/reminders/:id/cancel', area: 'work', summary: 'Cancel a pending reminder.', body: '{ reason?: string }', errors: '404; 409' },
|
|
392
|
+
{
|
|
393
|
+
method: 'GET', path: '/api/sentinels', area: 'work', summary: 'Watchers: each one, whether it is on, its last run and open findings.',
|
|
394
|
+
query: 'limit?: number (50)',
|
|
395
|
+
},
|
|
396
|
+
{ method: 'POST', path: '/api/sentinels/:id/enabled', area: 'work', summary: 'Switch a watcher off or on.', body: '{ enabled: boolean }', answer: '{ sentinelId, enabled }', errors: '400 no watcher with that id' },
|
|
397
|
+
{
|
|
398
|
+
method: 'POST', path: '/api/alerts/:key/snooze', area: 'work', summary: 'Snooze an open alert, or wake it.',
|
|
399
|
+
body: '{ snoozed: boolean }', answer: '{ key, snoozedAt: string|null }', errors: '404 no open alert with that key',
|
|
400
|
+
},
|
|
401
|
+
/* ---------------- notifications ---------------- */
|
|
402
|
+
{ method: 'GET', path: '/api/notifications', area: 'notifications', summary: 'The notifications buddi sent, newest first.', query: 'limit?: number' },
|
|
403
|
+
{ method: 'POST', path: '/api/notifications/:id/seen', area: 'notifications', summary: 'Mark a notification seen.', errors: '404' },
|
|
404
|
+
{ method: 'GET', path: '/api/notifications/settings', area: 'notifications', summary: 'Where and when buddi reaches the owner.', answer: '{ settings, channels }' },
|
|
405
|
+
{ method: 'PUT', path: '/api/notifications/settings', area: 'notifications', summary: 'Change the notification settings.', body: 'the settings object', answer: '{ settings, channels }', errors: '400' },
|
|
406
|
+
{ method: 'GET', path: '/api/notifications/focus', area: 'notifications', summary: 'The focus mode now.', answer: '{ focus }' },
|
|
407
|
+
{
|
|
408
|
+
method: 'PUT', path: '/api/notifications/focus', area: 'notifications', summary: 'Set the focus mode, for a while or until changed.',
|
|
409
|
+
body: "{ mode: 'normal'|'urgent-only'|'do-not-disturb', duration?: string }", answer: '{ focus }', errors: '400',
|
|
410
|
+
},
|
|
411
|
+
{ method: 'POST', path: '/api/notifications/test', area: 'notifications', summary: 'Send a test notification on a channel.', body: '{ channel: string }', errors: '400; 404; 502 the channel failed' },
|
|
412
|
+
{ method: 'POST', path: '/api/notifications/agent-mute', area: 'notifications', summary: "Mute or unmute an agent's notifications.", body: '{ agentId: string, muted: boolean }', errors: '400' },
|
|
413
|
+
{
|
|
414
|
+
method: 'POST', path: '/api/presence', area: 'notifications', summary: 'Whether the owner is at the dashboard, which decides where a notification goes.',
|
|
415
|
+
body: "{ state: 'active'|'away' }", answer: '{ ok: true }', errors: '400',
|
|
416
|
+
},
|
|
417
|
+
/* ---------------- memory ---------------- */
|
|
418
|
+
{
|
|
419
|
+
method: 'GET', path: '/api/memory', area: 'memory', summary: 'What buddi remembers: preferences and notes.',
|
|
420
|
+
query: 'agent?: agent id // what that agent sees', errors: '503 memory unavailable',
|
|
421
|
+
},
|
|
422
|
+
{
|
|
423
|
+
method: 'POST', path: '/api/memory/preferences', area: 'memory', summary: 'Set or correct a preference.',
|
|
424
|
+
body: "{ key: lower_snake_case, value: string, scope?: 'shared'|agent id }", errors: '400',
|
|
425
|
+
},
|
|
426
|
+
{ method: 'POST', path: '/api/memory/preferences/forget', area: 'memory', summary: 'Retire a preference.', body: '{ key: string, scope?: string }', answer: '204', errors: '404' },
|
|
427
|
+
{
|
|
428
|
+
method: 'POST', path: '/api/memory/notes/:id', area: 'memory', summary: 'Edit a note.',
|
|
429
|
+
body: "{ content?: string, scope?: string, kind?: 'fact'|'observation'|'todo' }", errors: '400; 404',
|
|
430
|
+
},
|
|
431
|
+
{ method: 'POST', path: '/api/memory/notes/:id/forget', area: 'memory', summary: 'Forget a note.', answer: '204', errors: '404' },
|
|
432
|
+
/* ---------------- files ---------------- */
|
|
433
|
+
{
|
|
434
|
+
method: 'GET', path: '/api/artifacts', area: 'files', summary: 'The library: every file buddi holds, paged.',
|
|
435
|
+
query: "q?, origin?: 'uploaded'|'produced'|'unknown', family?, limit?, cursor?", answer: '{ entries, nextCursor }', errors: '400 a bad filter or cursor',
|
|
436
|
+
},
|
|
437
|
+
{
|
|
438
|
+
method: 'GET', path: '/api/artifacts/:id', area: 'files', summary: 'One file: its metadata, where it was used, whether its bytes are still there.',
|
|
439
|
+
query: 'contexts?: offset', answer: '{ entry, contexts, available: boolean }', errors: '404',
|
|
440
|
+
},
|
|
441
|
+
{ method: 'GET', path: '/api/artifacts/:id/download', area: 'files', kind: 'bytes', summary: 'The file, as a download.', errors: '404' },
|
|
442
|
+
{
|
|
443
|
+
method: 'GET', path: '/api/artifacts/:id/preview', area: 'files', kind: 'bytes',
|
|
444
|
+
summary: 'The file inline, where it is safe to show: images, PDFs, text (as text/plain, its start only).', errors: '404; 415 not previewable',
|
|
445
|
+
},
|
|
446
|
+
{
|
|
447
|
+
method: 'DELETE', path: '/api/artifacts/:id', area: 'files', summary: 'Take back a file uploaded from the dashboard that no message carries.',
|
|
448
|
+
answer: '204', errors: '404; 409 already sent, or not from the dashboard',
|
|
449
|
+
},
|
|
450
|
+
/* ---------------- owner ---------------- */
|
|
451
|
+
{ method: 'GET', path: '/api/owner', area: 'owner', summary: 'The owner’s profile, places, and the timezones this host knows.', answer: '{ preferredName, timezone, language, about, timeFormat, dateFormat, places, detectedTimezone, zones }' },
|
|
452
|
+
{
|
|
453
|
+
method: 'POST', path: '/api/owner', area: 'owner', summary: 'Change the profile; what is left out stays.',
|
|
454
|
+
body: "{ preferredName?, timezone?, language?, about?: string|null, timeFormat?: '12h'|'24h'|null, dateFormat?: 'short'|'long'|'iso'|null }", answer: 'as GET', errors: '400',
|
|
455
|
+
},
|
|
456
|
+
{
|
|
457
|
+
method: 'POST', path: '/api/owner/places', area: 'owner', summary: 'Save a place (new, or by id).',
|
|
458
|
+
body: '{ id?, label: string, name: string, address?: string, latitude: number, longitude: number, timezone?: string }', answer: '{ place, places }', errors: '400',
|
|
459
|
+
},
|
|
460
|
+
{ method: 'POST', path: '/api/owner/places/find', area: 'owner', summary: 'Find a place by address or town (Open-Meteo).', body: '{ address: string }', answer: '{ found: Array<{ name, latitude, longitude, timezone? }> }', errors: '400; 502' },
|
|
461
|
+
{ method: 'POST', path: '/api/owner/places/remove', area: 'owner', summary: 'Remove a place.', body: '{ id: string }', answer: '{ removed, places }', errors: '404' },
|
|
462
|
+
/* ---------------- model accounts ---------------- */
|
|
463
|
+
{
|
|
464
|
+
method: 'GET', path: '/api/provider-accounts', area: 'accounts', summary: 'Every model account, its state, models and agents; never a key.',
|
|
465
|
+
errors: '503 accounts unavailable in this process',
|
|
466
|
+
},
|
|
467
|
+
{ method: 'POST', path: '/api/provider-accounts/save', area: 'accounts', token: 'secret', summary: 'Add or change an account (a key, an address, a default model).', body: '{ id?, label, kind, apiKey?, baseUrl?, defaultModel, revision? }', errors: '400; 409 changed elsewhere' },
|
|
468
|
+
{ method: 'POST', path: '/api/provider-accounts/probe-models', area: 'accounts', summary: 'Ask a provider which models a key or address offers, before saving.', body: '{ kind, apiKey?, baseUrl?, accountId? }' },
|
|
469
|
+
{ method: 'POST', path: '/api/provider-accounts/:id/test', area: 'accounts', summary: 'Test an account with one small call.' },
|
|
470
|
+
{ method: 'POST', path: '/api/provider-accounts/:id/models', area: 'accounts', summary: 'The account’s models.', body: '{ refresh?: boolean }' },
|
|
471
|
+
{ method: 'POST', path: '/api/provider-accounts/:id/remove', area: 'accounts', summary: 'Remove an account.', body: '{ revision: number }', errors: '404; 409 agents still use it, or changed elsewhere' },
|
|
472
|
+
{ method: 'POST', path: '/api/provider-accounts/:id/login', area: 'accounts', token: 'secret', summary: 'Start a ChatGPT (Codex) device sign-in.', body: '{ revision? }' },
|
|
473
|
+
{ method: 'POST', path: '/api/provider-accounts/:id/cancel-login', area: 'accounts', summary: 'Cancel a sign-in in progress.' },
|
|
474
|
+
{ method: 'POST', path: '/api/provider-accounts/:id/logout', area: 'accounts', summary: 'Sign the account out (its stored sign-in is deleted).' },
|
|
475
|
+
{ method: 'POST', path: '/api/provider-accounts/:id/anthropic/login', area: 'accounts', token: 'secret', summary: 'Start a Claude subscription sign-in.' },
|
|
476
|
+
{ method: 'POST', path: '/api/provider-accounts/:id/anthropic/complete-login', area: 'accounts', token: 'secret', summary: 'Finish it with the code Claude showed.', body: '{ code: string }' },
|
|
477
|
+
{ method: 'POST', path: '/api/provider-accounts/:id/anthropic/cancel-login', area: 'accounts', summary: 'Cancel a Claude sign-in in progress.' },
|
|
478
|
+
{ method: 'POST', path: '/api/provider-accounts/:id/anthropic/logout', area: 'accounts', summary: 'Sign the Claude subscription out.' },
|
|
479
|
+
{ method: 'POST', path: '/api/provider-accounts/:id/ollama/connect', area: 'accounts', token: 'secret', summary: 'Start connecting an Ollama account.' },
|
|
480
|
+
{ method: 'POST', path: '/api/provider-accounts/:id/ollama/poll', area: 'accounts', summary: 'Ask whether the Ollama connection finished.' },
|
|
481
|
+
{ method: 'POST', path: '/api/provider-accounts/:id/ollama/disconnect', area: 'accounts', summary: 'Disconnect the Ollama account.' },
|
|
482
|
+
{ method: 'GET', path: '/api/providers', area: 'accounts', summary: 'Legacy global provider settings (installations without named accounts).', errors: '503' },
|
|
483
|
+
{ method: 'POST', path: '/api/providers/anthropic/settings', area: 'accounts', token: 'secret', summary: 'Legacy: Anthropic settings.', errors: '410 replaced by model accounts' },
|
|
484
|
+
{ method: 'POST', path: '/api/providers/anthropic/test', area: 'accounts', summary: 'Legacy: test Anthropic.', errors: '410' },
|
|
485
|
+
{ method: 'POST', path: '/api/providers/openai/settings', area: 'accounts', token: 'secret', summary: 'Legacy: OpenAI settings.', errors: '410' },
|
|
486
|
+
{ method: 'POST', path: '/api/providers/openai/test', area: 'accounts', summary: 'Legacy: test OpenAI.', errors: '410' },
|
|
487
|
+
{ method: 'POST', path: '/api/providers/credentials/:name/save', area: 'accounts', token: 'secret', summary: 'Legacy: save a credential.', errors: '410' },
|
|
488
|
+
{ method: 'POST', path: '/api/providers/credentials/:name/remove', area: 'accounts', summary: 'Legacy: remove a credential.', errors: '410' },
|
|
489
|
+
/* ---------------- connections ---------------- */
|
|
490
|
+
{
|
|
491
|
+
method: 'GET', path: '/api/connections', area: 'connections', summary: 'Connected MCP services, the catalog, and the agents a connection can be given to.',
|
|
492
|
+
answer: '{ connections, catalog, agents, vault: boolean, tokens: boolean, callbackPath }',
|
|
493
|
+
},
|
|
494
|
+
{
|
|
495
|
+
method: 'POST', path: '/api/connections', area: 'connections', token: 'code', summary: 'Add a service by address, or a program to run (stdio).',
|
|
496
|
+
body: "{ url: string, name?: string } or { transport: 'stdio', command, args?, env?, name? }", answer: '201 { connection, signIn }', errors: '400',
|
|
497
|
+
},
|
|
498
|
+
{ method: 'GET', path: '/api/connections/signals', area: 'connections', summary: 'What needs the owner across connections (sign-ins lapsed, reviews pending).', answer: '{ signals }' },
|
|
499
|
+
{
|
|
500
|
+
method: 'POST', path: '/api/connections/callback', area: 'connections', summary: 'Finish a sign-in: the code and state the service sent back to /connections/callback.',
|
|
501
|
+
body: '{ state: string, code?: string, error?: string }', errors: '400 no state; 409 not this session’s sign-in',
|
|
502
|
+
},
|
|
503
|
+
{ method: 'GET', path: '/api/connections/remembered/:agent', area: 'connections', summary: "An agent's connection tools that ask first, and which are remembered.", answer: '{ agent, tools }', errors: '404' },
|
|
504
|
+
{
|
|
505
|
+
method: 'POST', path: '/api/connections/remembered', area: 'connections', token: 'grants', summary: 'Remember (or forget) the owner’s yes for one agent and tool.',
|
|
506
|
+
body: '{ agent: string, tool: string, remember: boolean }', errors: '400; 404; 409 this tool is never remembered',
|
|
507
|
+
},
|
|
508
|
+
{ method: 'GET', path: '/api/connections/:id', area: 'connections', summary: 'One connection.', errors: '404' },
|
|
509
|
+
{ method: 'DELETE', path: '/api/connections/:id', area: 'connections', summary: 'Disconnect: taken from every agent, its sign-in deleted.', errors: '404; 409 an agent file could not be changed' },
|
|
510
|
+
{ method: 'POST', path: '/api/connections/:id/consent', area: 'connections', summary: 'Start the service’s sign-in; answers the page to send the owner to.', body: '{ cli?: boolean, clientId?: string }', answer: '{ url, redirectUri, … }' },
|
|
511
|
+
{ method: 'POST', path: '/api/connections/:id/reconnect', area: 'connections', summary: 'Sign in again.', body: 'as consent' },
|
|
512
|
+
{ method: 'POST', path: '/api/connections/:id/token', area: 'connections', token: 'secret', summary: 'Sign in with a pasted token.', body: '{ token: string, header?: string, prefix?: string }', errors: '400' },
|
|
513
|
+
{ method: 'POST', path: '/api/connections/:id/device', area: 'connections', summary: 'Start a device sign-in (a code to type on the service’s page).' },
|
|
514
|
+
{ method: 'GET', path: '/api/connections/:id/review', area: 'connections', summary: 'The tools the service offers, for the owner to read before giving them out.' },
|
|
515
|
+
{ method: 'POST', path: '/api/connections/:id/review', area: 'connections', summary: 'Mark the review read.', body: '{ hash: string, slug?: string }', errors: '400' },
|
|
516
|
+
{
|
|
517
|
+
method: 'POST', path: '/api/connections/:id/grant', area: 'connections', token: 'grants', summary: 'Give the connection’s tools to agents.',
|
|
518
|
+
body: '{ agents: agent id[], exact?: boolean }', answer: '{ granted, failed, connection }', errors: '400; 409 not reviewed, or nothing could be given',
|
|
519
|
+
},
|
|
520
|
+
{
|
|
521
|
+
method: 'POST', path: '/api/connections/:id/holders/:agent', area: 'connections', token: 'grants', summary: 'Give or take the connection for one agent.',
|
|
522
|
+
body: '{ held: boolean }', answer: '{ agent, held, connection }', errors: '400; 404; 409',
|
|
523
|
+
},
|
|
524
|
+
{ method: 'GET', path: '/api/connections/:id/tools', area: 'connections', summary: "The connection's tools and their tiers.", answer: '{ connection, tools }' },
|
|
525
|
+
{ method: 'PUT', path: '/api/connections/:id/program', area: 'connections', token: 'code', summary: 'Change a program connection’s command (POST works too).', body: '{ command, args?, env? }' },
|
|
526
|
+
/* ---------------- plugins and pages ---------------- */
|
|
527
|
+
{ method: 'GET', path: '/api/plugins', area: 'plugins', summary: 'Installed plugins, staged ones waiting to be read, and the trust sentence.' },
|
|
528
|
+
{ method: 'POST', path: '/api/plugins/stage', area: 'plugins', token: 'code', summary: 'Fetch a plugin to read before installing (npm name, tarball path or folder).', body: '{ spec: string }', answer: '202 { job }', errors: '400' },
|
|
529
|
+
{
|
|
530
|
+
method: 'POST', path: '/api/plugins/upload', area: 'plugins', token: 'code', kind: 'upload', summary: 'Stage a plugin tarball sent as the body.',
|
|
531
|
+
body: 'the .tgz bytes; X-Filename header', answer: '202 { job }', errors: '400',
|
|
532
|
+
},
|
|
533
|
+
{ method: 'GET', path: '/api/plugins/jobs/:id', area: 'plugins', summary: 'A staging, install or update job.', errors: '404' },
|
|
534
|
+
{
|
|
535
|
+
method: 'POST', path: '/api/plugins/staged/:id/approve', area: 'plugins', token: 'code',
|
|
536
|
+
summary: 'Install what was staged; carries back the integrity the owner was shown.', body: '{ integrity: string, acknowledgeDrift?: boolean }', errors: '400; 404; 409 it changed',
|
|
537
|
+
},
|
|
538
|
+
{ method: 'POST', path: '/api/plugins/staged/:id/reject', area: 'plugins', summary: 'Throw a stage away.' },
|
|
539
|
+
{ method: 'POST', path: '/api/plugins/staged/:id/opened', area: 'plugins', summary: 'Record that the owner opened the install card.' },
|
|
540
|
+
{ method: 'POST', path: '/api/plugins/:name/update', area: 'plugins', token: 'code', summary: 'Update a plugin.', body: '{ version?: string, from?: string }', answer: '202 { job }' },
|
|
541
|
+
{ method: 'POST', path: '/api/plugins/:name/uninstall', area: 'plugins', token: 'code', summary: 'Uninstall a plugin; its data too with purge.', body: '{ purge?: boolean, confirm?: string }', errors: '409 confirmation needed' },
|
|
542
|
+
{ method: 'POST', path: '/api/plugins/:name/disable', area: 'plugins', summary: 'Disable a plugin (its tools and pages go; data stays).' },
|
|
543
|
+
{ method: 'POST', path: '/api/plugins/:name/enable', area: 'plugins', summary: 'Enable it again.' },
|
|
544
|
+
{
|
|
545
|
+
method: 'POST', path: '/api/plugins/:plugin/agents/:agent/accept', area: 'plugins', token: 'decides',
|
|
546
|
+
summary: 'Accept an agent a plugin proposes: the owner’s click is the approval.', errors: '404; 409',
|
|
547
|
+
},
|
|
548
|
+
{ method: 'GET', path: '/api/plugins/folders', area: 'plugins', summary: 'Folders under the owner’s home, for "a directory I built".', query: 'path?: string', errors: '400; 403 outside home; 404' },
|
|
549
|
+
{ method: 'GET', path: '/api/market', area: 'plugins', summary: 'The plugin list from withbuddi.com (fetched when asked, kept a day).', query: 'refresh?: 1' },
|
|
550
|
+
{ method: 'GET', path: '/api/market/asset', area: 'plugins', kind: 'bytes', summary: 'A listing’s screenshot, fetched through the gateway.', query: 'url: string', errors: '400; 415; 502' },
|
|
551
|
+
{ method: 'GET', path: '/api/pages', area: 'plugins', summary: 'The screens installed plugins contribute, as descriptors.' },
|
|
552
|
+
{
|
|
553
|
+
method: 'GET', path: '/api/pages/:plugin/:query', area: 'plugins', summary: "One plugin page query, its parameters checked by the query's schema.",
|
|
554
|
+
query: 'the query’s own parameters', answer: '{ data }', errors: '400 the plugin’s sentence; 404 no such query',
|
|
555
|
+
},
|
|
556
|
+
{
|
|
557
|
+
method: 'POST', path: '/api/pages/:plugin/act', area: 'plugins', summary: "A write from a plugin's page, as the owner: an auto tool runs; a gated one answers an approval to decide. An API token may only ask: it gets the approval of a gated tool, and 403 for one that would run at once.",
|
|
558
|
+
body: '{ tool: string, args?: object }', answer: '{ result } or { approvalId }', errors: '400; 403 a token, and a tool that runs without an approval; 404 not a tool of this page; 429',
|
|
559
|
+
},
|
|
560
|
+
{
|
|
561
|
+
method: 'GET', path: '/api/preview/:plugin/:name/link', area: 'plugins', summary: 'A one-use link into a plugin preview, on the preview origin.',
|
|
562
|
+
answer: '{ url: string }', errors: '404; 429; 503 previews not served',
|
|
563
|
+
},
|
|
564
|
+
{ method: 'GET', path: '/api/preview/:plugin/:name/check', area: 'plugins', summary: 'Is the preview served, and does it assume it owns a host.' },
|
|
565
|
+
/* ---------------- secrets ---------------- */
|
|
566
|
+
{ method: 'GET', path: '/api/secrets', area: 'secrets', summary: 'Owner secrets by name, with where each may be used. Never a value.' },
|
|
567
|
+
{ method: 'GET', path: '/api/secrets/uses', area: 'secrets', summary: 'Where a secret was used.', query: 'name: string, limit?: number' },
|
|
568
|
+
{ method: 'POST', path: '/api/secrets/act', area: 'secrets', token: 'secret', summary: 'Add, change or remove a secret or its rules.', body: '{ tool: string, args: object }', errors: '400; 429' },
|
|
569
|
+
/* ---------------- computer and browser ---------------- */
|
|
570
|
+
{
|
|
571
|
+
method: 'GET', path: '/api/host', area: 'computer', summary: 'Host execution: standing permissions and recent runs.',
|
|
572
|
+
query: 'agentId?, conversationId?', answer: '{ permissions, runs }',
|
|
573
|
+
},
|
|
574
|
+
{ method: 'POST', path: '/api/host/stop', area: 'computer', summary: 'Stop an agent’s running commands in a conversation.', body: '{ agentId: string, conversationId: string }', answer: '{ stopped }' },
|
|
575
|
+
{ method: 'POST', path: '/api/host/revoke', area: 'computer', summary: 'Revoke a standing host-execution permission.', body: '{ id: uuid }', answer: '{ revoked: true }', errors: '400; 404' },
|
|
576
|
+
{ method: 'GET', path: '/api/host/apps', area: 'computer', summary: 'Apps installed on this computer.', answer: '{ apps }' },
|
|
577
|
+
{ method: 'GET', path: '/api/host/browser-profiles', area: 'computer', summary: "A browser app's profiles.", query: 'app: string', answer: '{ profiles }' },
|
|
578
|
+
{ method: 'GET', path: '/api/browser', area: 'computer', summary: "The agents' browser: installed, running, its session and page.", query: 'agentId?, conversationId?' },
|
|
579
|
+
{
|
|
580
|
+
method: 'GET', path: '/api/browser/screenshot', area: 'computer', kind: 'bytes', summary: 'The browser’s current screen, as JPEG.',
|
|
581
|
+
query: 'sessionId?, v?: page id', errors: '404 no screen, or not the session or page asked for',
|
|
582
|
+
},
|
|
583
|
+
{ method: 'POST', path: '/api/browser/install', area: 'computer', token: 'code', summary: 'Download the browser agents use (about 150 MB); follow on GET /api/browser.', answer: '202', errors: '409' },
|
|
584
|
+
{ method: 'POST', path: '/api/browser/check', area: 'computer', summary: 'Launch the browser once to see it starts.', answer: '{ ok: boolean, message? }' },
|
|
585
|
+
{ method: 'POST', path: '/api/browser/settings', area: 'computer', token: 'grants', summary: 'Change the browser control modes.', errors: '409' },
|
|
586
|
+
{ method: 'POST', path: '/api/browser/permissions', area: 'computer', summary: 'Check (and optionally ask for) the operating system’s permissions.', body: '{ prompt?: boolean }', errors: '400; 409' },
|
|
587
|
+
{ method: 'POST', path: '/api/browser/stop', area: 'computer', summary: 'Stop the browser session.', body: '{ sessionId?: string }' },
|
|
588
|
+
{ method: 'POST', path: '/api/browser/takeover', area: 'computer', summary: 'Take over the screen from the agent.', body: '{ sessionId?: string }', answer: 'the status, with hand: boolean' },
|
|
589
|
+
{ method: 'POST', path: '/api/browser/resume', area: 'computer', summary: 'Give the screen back to the agent.', body: '{ sessionId?: string }' },
|
|
590
|
+
{ method: 'POST', path: '/api/browser/release', area: 'computer', summary: 'Release the session.', body: '{ sessionId?: string }' },
|
|
591
|
+
{ method: 'GET', path: '/api/browser/hand', area: 'computer', kind: 'socket', token: 'socket', summary: 'WebSocket: drive the taken-over screen (the CSRF value is the first frame).' },
|
|
592
|
+
{ method: 'GET', path: '/api/extension', area: 'computer', summary: 'The browser extension: paired or not, connected or not.' },
|
|
593
|
+
{ method: 'POST', path: '/api/extension/pair', area: 'computer', token: 'access', summary: 'Pair the extension with the code it shows.', body: '{ code: string }', errors: '400; 429 five tries in five minutes' },
|
|
594
|
+
{ method: 'DELETE', path: '/api/extension/pair', area: 'computer', summary: 'Forget the paired extension.' },
|
|
595
|
+
{ method: 'GET', path: '/api/extension/socket', area: 'computer', kind: 'socket', token: 'socket', summary: "WebSocket: the paired extension's own connection." },
|
|
596
|
+
/* ---------------- telegram ---------------- */
|
|
597
|
+
{ method: 'GET', path: '/api/telegram', area: 'telegram', summary: 'Telegram: configured, running, paired.' },
|
|
598
|
+
{ method: 'GET', path: '/api/telegram/bot', area: 'telegram', summary: 'Which bot.' },
|
|
599
|
+
{ method: 'GET', path: '/api/telegram/devices', area: 'telegram', summary: 'The phones paired with it.' },
|
|
600
|
+
{ method: 'POST', path: '/api/telegram/token', area: 'telegram', token: 'access', summary: 'Save the bot token BotFather gave.', body: '{ token: string }', errors: '400 not a token Telegram accepts' },
|
|
601
|
+
{ method: 'POST', path: '/api/telegram/pairing', area: 'telegram', token: 'access', summary: 'A pairing code for a phone.', answer: '{ code, expiresAt, … }' },
|
|
602
|
+
{ method: 'DELETE', path: '/api/telegram/devices/:id', area: 'telegram', summary: 'Unpair a phone, now.', answer: '204', errors: '404' },
|
|
603
|
+
/* ---------------- system ---------------- */
|
|
604
|
+
{ method: 'GET', path: '/api/service', area: 'system', summary: 'Is buddi run by a supervisor, and its status.', answer: '{ supervised: boolean, supervisor?, status? }', errors: '502; 503 the supervisor does not answer' },
|
|
605
|
+
{ method: 'POST', path: '/api/service/start', area: 'system', summary: 'Start through the supervisor.', errors: '404 no supervisor; 502; 503' },
|
|
606
|
+
{ method: 'POST', path: '/api/service/stop', area: 'system', summary: 'Stop buddi. Accepted, then done once the answer is sent; nothing answers after.', answer: "202 { supervised: true, pending: 'stop' }", errors: '404 no supervisor' },
|
|
607
|
+
{ method: 'POST', path: '/api/service/restart', area: 'system', summary: 'Restart buddi; it is back in seconds.', answer: "202 { supervised: true, pending: 'restart' }", errors: '404 no supervisor' },
|
|
608
|
+
{ method: 'GET', path: '/api/version', area: 'system', summary: 'What is running, and what upgrading did before.' },
|
|
609
|
+
{ method: 'POST', path: '/api/version/check', area: 'system', summary: 'Check for a newer version now.', errors: '409; 503' },
|
|
610
|
+
{ method: 'PUT', path: '/api/version/check', area: 'system', summary: 'Turn the daily check on or off.', body: '{ enabled: boolean }', errors: '400' },
|
|
611
|
+
{ method: 'POST', path: '/api/upgrade', area: 'system', token: 'code', summary: 'Upgrade (then the gateway restarts).', body: '{ version?: string }', answer: '202 { job }', errors: '400; 409; 503' },
|
|
612
|
+
{ method: 'GET', path: '/api/upgrade/jobs/:id', area: 'system', summary: 'An upgrade job.', errors: '404' },
|
|
613
|
+
{ method: 'GET', path: '/api/backups', area: 'system', summary: 'The backups on disk.' },
|
|
614
|
+
{ method: 'POST', path: '/api/backups', area: 'system', summary: 'Take a backup now.', body: '{ encrypt?: boolean }', answer: '202 { job }', errors: '400; 503' },
|
|
615
|
+
{ method: 'GET', path: '/api/backups/jobs/:id', area: 'system', summary: 'A backup, verify or restore job.', errors: '404' },
|
|
616
|
+
{ method: 'POST', path: '/api/backups/verify', area: 'system', summary: 'Verify a backup.', body: '{ name: string }', answer: '202 { job }', errors: '400; 404' },
|
|
617
|
+
{
|
|
618
|
+
method: 'POST', path: '/api/backups/restore', area: 'system', token: 'access', summary: 'Restore a backup over this installation (typed-back confirmation required).',
|
|
619
|
+
body: '{ name, passphrase?, confirm } as JSON, or the archive bytes with X-Filename, X-Backup-Passphrase, X-Backup-Confirm', answer: '202 { job }', errors: '400; 409',
|
|
620
|
+
},
|
|
621
|
+
{ method: 'GET', path: '/api/backups/schedule', area: 'system', summary: 'The backup schedule.' },
|
|
622
|
+
{ method: 'PUT', path: '/api/backups/schedule', area: 'system', summary: 'Change the backup schedule.', errors: '400; 409 a checkout schedules its own' },
|
|
623
|
+
{ method: 'GET', path: '/api/backups/passphrase', area: 'system', token: 'secret', summary: 'The backup passphrase.', answer: '{ passphrase }' },
|
|
624
|
+
{ method: 'PUT', path: '/api/backups/passphrase', area: 'system', token: 'secret', summary: 'Set the backup passphrase.', body: '{ passphrase: string }', errors: '400' },
|
|
625
|
+
{ method: 'GET', path: '/api/recovery', area: 'system', summary: 'After a restore: the checklist to get through (active: false otherwise).' },
|
|
626
|
+
{
|
|
627
|
+
method: 'POST', path: '/api/recovery/leave', area: 'system', token: 'grants', summary: 'Leave recovery: drop pending work, keep the grants listed, restart.',
|
|
628
|
+
body: '{ dropPending?: boolean, keepGrants?: string[] }', answer: '202 (restarting) or 200', errors: '400; 502 the restart could not be asked for',
|
|
629
|
+
},
|
|
630
|
+
/* ---------------- first run ---------------- */
|
|
631
|
+
{ method: 'GET', path: '/api/onboarding', area: 'onboarding', summary: 'Where first run stands and what it still needs.' },
|
|
632
|
+
{ method: 'POST', path: '/api/onboarding/step', area: 'onboarding', summary: 'Record a step done.', body: '{ step: string, conversationId?, accountId?, reach?: { phone?, mailbox?, app?, browser?: boolean } }', errors: '400' },
|
|
633
|
+
{ method: 'POST', path: '/api/onboarding/complete', area: 'onboarding', summary: 'Finish first run.', errors: '409 still needs a model account or an agent' },
|
|
634
|
+
{ method: 'POST', path: '/api/onboarding/skip', area: 'onboarding', summary: 'Skip first run.' },
|
|
635
|
+
{ method: 'GET', path: '/api/onboarding/agent', area: 'onboarding', summary: 'The assistant’s persona, for “change”.', errors: '404 no assistant yet' },
|
|
636
|
+
{
|
|
637
|
+
method: 'POST', path: '/api/onboarding/agent', area: 'onboarding', summary: 'Write the first agent.',
|
|
638
|
+
body: '{ name, handle, description, instructions?, avatar?, accountId? }', answer: '{ agent, id, handle, file, live, accountId }', errors: '400; 409 there is one',
|
|
639
|
+
},
|
|
640
|
+
{ method: 'POST', path: '/api/onboarding/agent/update', area: 'onboarding', summary: 'Change the assistant’s name, face or purpose.', body: '{ name?, description?, instructions?, avatar? }', errors: '400; 404' },
|
|
641
|
+
{ method: 'POST', path: '/api/onboarding/brain', area: 'onboarding', summary: 'Move the assistant (and the maker following it) to an account and model.', body: '{ accountId: string, model: string }', errors: '400; 404' },
|
|
642
|
+
{ method: 'GET', path: '/api/onboarding/ollama', area: 'onboarding', summary: 'Is Ollama running on this computer.' },
|
|
643
|
+
{ method: 'GET', path: '/api/onboarding/mlxh', area: 'onboarding', summary: 'Is mlxh running on this computer.' },
|
|
644
|
+
{ method: 'GET', path: '/api/onboarding/take-on', area: 'onboarding', summary: "Chapter 3's progress, per plugin." },
|
|
645
|
+
{ method: 'POST', path: '/api/onboarding/take-on', area: 'onboarding', token: 'code', summary: 'Record what buddi takes on and start those installs.', body: '{ tiles: string[] }', answer: '202', errors: '400' },
|
|
646
|
+
{
|
|
647
|
+
method: 'POST', path: '/api/onboarding/restore', area: 'onboarding', token: 'access', summary: 'Restore instead of starting, while nothing is set up yet.',
|
|
648
|
+
body: 'as /api/backups/restore, without confirm', errors: '409 already set up',
|
|
649
|
+
},
|
|
650
|
+
/* ---------------- speech ---------------- */
|
|
651
|
+
{ method: 'POST', path: '/api/speech/transcribe', area: 'speech', summary: 'Transcribe an uploaded recording (the speech plugin).', body: '{ artifactId: string, conversationId? }' },
|
|
652
|
+
{ method: 'POST', path: '/api/speech/say', area: 'speech', summary: 'Speak a text (the speech plugin).', body: '{ text: string, conversationId? }' },
|
|
653
|
+
/* ---------------- mcp ---------------- */
|
|
654
|
+
{
|
|
655
|
+
method: 'POST', path: '/api/mcp/request', area: 'mcp', summary: 'A write asked for through buddi mcp. Never applied here: it becomes an approval; poll GET /api/approvals/:id.',
|
|
656
|
+
body: '{ kind: string, input: object, client?: string }', answer: '202 { approvalId, … }', errors: '400; 500',
|
|
657
|
+
},
|
|
658
|
+
];
|
|
659
|
+
/* ------------------------------------------------------------------ *
|
|
660
|
+
* Matching
|
|
661
|
+
* ------------------------------------------------------------------ */
|
|
662
|
+
const compiled = API_ROUTES.map((route) => ({
|
|
663
|
+
route,
|
|
664
|
+
re: new RegExp(`^${route.path.split('/').map((seg) => (seg.startsWith(':') ? '[^/]+' : seg.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'))).join('/')}$`),
|
|
665
|
+
literal: route.path.split('/').filter((seg) => !seg.startsWith(':')).length,
|
|
666
|
+
}));
|
|
667
|
+
/**
|
|
668
|
+
* The row for a request, or undefined. HEAD is GET. Where a literal path and
|
|
669
|
+
* a template both match (`/api/agents/default` and `/api/agents/:id/…`), the
|
|
670
|
+
* one with more literal segments wins, as the router's order does.
|
|
671
|
+
*/
|
|
672
|
+
export function matchApiRoute(method, pathname) {
|
|
673
|
+
const m = method.toUpperCase() === 'HEAD' ? 'GET' : method.toUpperCase();
|
|
674
|
+
const path = pathname.replace(/\/+$/, '') || '/api';
|
|
675
|
+
let best;
|
|
676
|
+
for (const c of compiled) {
|
|
677
|
+
if (c.route.method !== m || !c.re.test(path))
|
|
678
|
+
continue;
|
|
679
|
+
if (!best || c.literal > best.literal)
|
|
680
|
+
best = { route: c.route, literal: c.literal };
|
|
681
|
+
}
|
|
682
|
+
return best?.route;
|
|
683
|
+
}
|
|
684
|
+
/* ------------------------------------------------------------------ *
|
|
685
|
+
* The reference page
|
|
686
|
+
* ------------------------------------------------------------------ */
|
|
687
|
+
export function authOf(route) {
|
|
688
|
+
const who = route.token ? 'Dashboard session only' : 'Session or API token';
|
|
689
|
+
const csrf = route.method === 'GET' ? '' : ' (a session adds CSRF + Origin)';
|
|
690
|
+
return `${who}${csrf}${route.localOnly ? '; from the computer buddi runs on' : ''}${route.whileLocked ? '; answered while locked' : ''}`;
|
|
691
|
+
}
|
|
692
|
+
function curlFor(route) {
|
|
693
|
+
const url = `"$BUDDI_URL${route.path.replace(/:([a-z]+)/gi, (_, name) => `<${name}>`)}"`;
|
|
694
|
+
// A route a token may not call is shown the way a session calls it (docs/api.md, "A session from a script").
|
|
695
|
+
const auth = !route.token
|
|
696
|
+
? '-H "Authorization: Bearer $BUDDI_TOKEN"'
|
|
697
|
+
: route.method === 'GET' ? '-b cookies.txt' : '-b cookies.txt -H "X-Buddi-CSRF: $CSRF" -H "Origin: $BUDDI_URL"';
|
|
698
|
+
if (route.kind === 'socket')
|
|
699
|
+
return '';
|
|
700
|
+
if (route.kind === 'upload')
|
|
701
|
+
return `curl ${auth} -F "file=@./file" ${url}`;
|
|
702
|
+
if (route.kind === 'stream')
|
|
703
|
+
return `curl -N ${auth} ${url}`;
|
|
704
|
+
if (route.method === 'GET')
|
|
705
|
+
return `curl ${auth} ${url}${route.kind === 'bytes' ? ' -o out' : ''}`;
|
|
706
|
+
const body = route.body && route.body.startsWith('{') && !route.body.includes(' or ')
|
|
707
|
+
? ` -H "Content-Type: application/json" -d '${exampleBody(route.body)}'`
|
|
708
|
+
: '';
|
|
709
|
+
return `curl -X ${route.method} ${auth}${body} ${url}`;
|
|
710
|
+
}
|
|
711
|
+
/** A plausible JSON body from a shape: required fields only, a placeholder each. */
|
|
712
|
+
function exampleBody(shape) {
|
|
713
|
+
const inner = shape.replace(/\/\/.*$/, '').trim().replace(/^\{\s*/, '').replace(/\s*\}$/, '');
|
|
714
|
+
const fields = [];
|
|
715
|
+
let depth = 0;
|
|
716
|
+
let current = '';
|
|
717
|
+
for (const ch of inner) {
|
|
718
|
+
if ('{[<('.includes(ch))
|
|
719
|
+
depth += 1;
|
|
720
|
+
if ('}]>)'.includes(ch))
|
|
721
|
+
depth -= 1;
|
|
722
|
+
if (ch === ',' && depth === 0) {
|
|
723
|
+
fields.push(current);
|
|
724
|
+
current = '';
|
|
725
|
+
continue;
|
|
726
|
+
}
|
|
727
|
+
current += ch;
|
|
728
|
+
}
|
|
729
|
+
if (current.trim() !== '')
|
|
730
|
+
fields.push(current);
|
|
731
|
+
const out = {};
|
|
732
|
+
for (const field of fields) {
|
|
733
|
+
const m = /^\s*([A-Za-z_]+)(\?)?\s*:\s*(.*)$/.exec(field);
|
|
734
|
+
if (!m || m[2] === '?')
|
|
735
|
+
continue;
|
|
736
|
+
const type = m[3].trim();
|
|
737
|
+
out[m[1]] = /^boolean/.test(type) ? true
|
|
738
|
+
: /^number|^\d/.test(type) ? 0
|
|
739
|
+
: /\[\]$|^Array/.test(type) ? []
|
|
740
|
+
: /^object|^\{|^Record/.test(type) ? {}
|
|
741
|
+
: /^'([^']+)'/.test(type) ? /^'([^']+)'/.exec(type)[1]
|
|
742
|
+
: '…';
|
|
743
|
+
}
|
|
744
|
+
return JSON.stringify(out);
|
|
745
|
+
}
|
|
746
|
+
function cell(text) {
|
|
747
|
+
return text.replace(/\|/g, '\\|');
|
|
748
|
+
}
|
|
749
|
+
/** docs/api.md's body, from the table. `intro` is the hand-written opening. */
|
|
750
|
+
export function renderApiReference(routes = API_ROUTES, intro = API_INTRO) {
|
|
751
|
+
const out = [intro.trimEnd(), ''];
|
|
752
|
+
out.push('## Routes', '');
|
|
753
|
+
out.push(`${routes.length} routes in ${Object.keys(API_AREAS).length} areas. Paths are under the dashboard's address; \`:name\` is a path parameter.`, '**Token** says whether an API token may call the route; where it may not, the example uses a dashboard session.', '**Since** is the first release with the route; 0.1.0-pre.15 is the earliest release in the public history, so it also stands for earlier.', '');
|
|
754
|
+
for (const [area, title] of Object.entries(API_AREAS)) {
|
|
755
|
+
const rows = routes.filter((r) => r.area === area);
|
|
756
|
+
if (rows.length === 0)
|
|
757
|
+
continue;
|
|
758
|
+
out.push(`- [${title}](#${title.toLowerCase().replace(/[^a-z0-9 -]/g, '').replace(/ /g, '-')})`);
|
|
759
|
+
}
|
|
760
|
+
out.push('');
|
|
761
|
+
for (const [area, title] of Object.entries(API_AREAS)) {
|
|
762
|
+
const rows = routes.filter((r) => r.area === area);
|
|
763
|
+
if (rows.length === 0)
|
|
764
|
+
continue;
|
|
765
|
+
out.push(`### ${title}`, '');
|
|
766
|
+
out.push('| Method | Path | What it does | Token |', '| --- | --- | --- | --- |');
|
|
767
|
+
for (const r of rows)
|
|
768
|
+
out.push(`| ${r.method} | \`${r.path}\` | ${cell(r.summary)} | ${r.token ? 'no' : 'yes'} |`);
|
|
769
|
+
out.push('');
|
|
770
|
+
for (const r of rows) {
|
|
771
|
+
out.push(`#### \`${r.method} ${r.path}\``, '');
|
|
772
|
+
out.push(r.summary, '');
|
|
773
|
+
const facts = [];
|
|
774
|
+
facts.push(`- **Auth:** ${authOf(r)}.${r.token ? ` ${TOKEN_REFUSALS[r.token]}` : ''}`);
|
|
775
|
+
if (r.kind && r.kind !== 'json')
|
|
776
|
+
facts.push(`- **Kind:** ${{ stream: 'server-sent events (text/event-stream)', bytes: 'bytes, not JSON', upload: 'an upload', socket: 'a WebSocket upgrade' }[r.kind]}`);
|
|
777
|
+
if (r.query)
|
|
778
|
+
facts.push(`- **Query:** \`${r.query}\``);
|
|
779
|
+
if (r.body)
|
|
780
|
+
facts.push(`- **Body:** \`${r.body}\``);
|
|
781
|
+
facts.push(`- **Answer:** ${r.answer ? `\`${r.answer}\`` : 'JSON'}`);
|
|
782
|
+
if (r.errors)
|
|
783
|
+
facts.push(`- **Errors:** ${r.errors}`);
|
|
784
|
+
facts.push(`- **Since:** ${API_SINCE[`${r.method} ${r.path}`] ?? 'unreleased'}`);
|
|
785
|
+
out.push(...facts, '');
|
|
786
|
+
const curl = curlFor(r);
|
|
787
|
+
if (curl)
|
|
788
|
+
out.push('```sh', curl, '```', '');
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
return `${out.join('\n').trimEnd()}\n`;
|
|
792
|
+
}
|
|
793
|
+
/** The opening of docs/api.md: everything a client needs before the first route. */
|
|
794
|
+
export const API_INTRO = `# The HTTP API
|
|
795
|
+
|
|
796
|
+
Everything the dashboard does, it does through this API, so buddi works
|
|
797
|
+
without the dashboard: a script, another program or \`curl\` can do what the
|
|
798
|
+
page does. This page is generated from the gateway's route table
|
|
799
|
+
(\`packages/gateway/src/web/api-routes.ts\`) by \`pnpm docs:api\`, and a test
|
|
800
|
+
fails when a route is missing from it.
|
|
801
|
+
|
|
802
|
+
## Where it is
|
|
803
|
+
|
|
804
|
+
The API is served by the gateway, on the dashboard's own address, under
|
|
805
|
+
\`/api\`:
|
|
806
|
+
|
|
807
|
+
- **This computer:** \`http://127.0.0.1:4317\` by default (\`BUDDI_WEB_PORT\`
|
|
808
|
+
changes the port; \`buddi status\` prints the address).
|
|
809
|
+
- **Your tailnet:** the HTTPS address \`tailscale serve\` gives the dashboard
|
|
810
|
+
(Settings → System → Tailscale prints the command).
|
|
811
|
+
|
|
812
|
+
Requests and answers are JSON (\`Content-Type: application/json\`), except
|
|
813
|
+
where a route says *bytes*, *upload*, *server-sent events* or *WebSocket*. A
|
|
814
|
+
JSON body is at most 64 KB. Paths ignore a trailing slash.
|
|
815
|
+
|
|
816
|
+
## Authentication
|
|
817
|
+
|
|
818
|
+
Every \`/api\` route answers only the owner. There are two ways to be the
|
|
819
|
+
owner:
|
|
820
|
+
|
|
821
|
+
**An API token** — for scripts and programs. Make one in Settings → API
|
|
822
|
+
tokens, or in a terminal:
|
|
823
|
+
|
|
824
|
+
\`\`\`sh
|
|
825
|
+
buddi api-token create "home automation"
|
|
826
|
+
\`\`\`
|
|
827
|
+
|
|
828
|
+
It is shown once. Send it on every request:
|
|
829
|
+
|
|
830
|
+
\`\`\`sh
|
|
831
|
+
export BUDDI_URL=http://127.0.0.1:4317 BUDDI_TOKEN=buddi_…
|
|
832
|
+
curl -H "Authorization: Bearer $BUDDI_TOKEN" "$BUDDI_URL/api/overview"
|
|
833
|
+
\`\`\`
|
|
834
|
+
|
|
835
|
+
A token acts as the owner, with no cookie, no CSRF header and no Origin
|
|
836
|
+
check, and the lock screen does not cover it. What it cannot do is decided by
|
|
837
|
+
the route, and the table below says so per route (**Token: no**). A token
|
|
838
|
+
never:
|
|
839
|
+
|
|
840
|
+
- decides an approval, or makes a change where the click is the approval
|
|
841
|
+
(approve, keep a proposal, accept a plugin's agent) — it may reject;
|
|
842
|
+
- changes what an agent may do without asking (its tools, delegates, a
|
|
843
|
+
connection given out, a remembered "always");
|
|
844
|
+
- installs or runs code buddi has not run before (plugins, upgrades, program
|
|
845
|
+
connections, the browser download);
|
|
846
|
+
- changes how buddi is reached or unlocked (PIN, Tailscale, Telegram pairing,
|
|
847
|
+
the extension, other tokens) or restores a backup over everything;
|
|
848
|
+
- reads or stores a secret (owner secrets, model account keys and sign-ins,
|
|
849
|
+
the backup passphrase).
|
|
850
|
+
|
|
851
|
+
Those answer \`403 { "error": "An API token cannot …" }\`. Everything a gated
|
|
852
|
+
tool does still waits on its approval card, which the owner decides on the
|
|
853
|
+
dashboard or Telegram. Tokens are kept hashed (SHA-256); the gateway never
|
|
854
|
+
stores or logs the token itself. \`buddi api-token list\` and Settings show
|
|
855
|
+
each one's name, last four characters and when it was last used;
|
|
856
|
+
\`buddi api-token revoke <id>\` (or Revoke in Settings) ends it at the next
|
|
857
|
+
request.
|
|
858
|
+
|
|
859
|
+
**A dashboard session** — what the browser holds. It comes from a sign-in
|
|
860
|
+
link (\`buddi dashboard\`: a five-minute ticket, \`?t=…\`, exchanged at a
|
|
861
|
+
page URL and never under \`/api\`) or a Tailscale identity the owner allowed;
|
|
862
|
+
a source checkout bound to loopback also mints one for any request from this
|
|
863
|
+
computer. The session is a cookie
|
|
864
|
+
(\`buddi_session_<port>\`, HttpOnly, SameSite=Strict). Every request that is
|
|
865
|
+
not a GET or HEAD must also carry:
|
|
866
|
+
|
|
867
|
+
- \`X-Buddi-CSRF\`: the \`csrf\` value from \`GET /api/session\` (also in the
|
|
868
|
+
\`buddi_csrf_<port>\` cookie, which must match), and
|
|
869
|
+
- \`Origin\`: the dashboard's own origin.
|
|
870
|
+
|
|
871
|
+
### A session from a script
|
|
872
|
+
|
|
873
|
+
A program on the computer buddi runs on can hold a session the way
|
|
874
|
+
\`buddi mcp\` does, which also reaches the routes a token may not: exchange
|
|
875
|
+
a five-minute ticket once, keep the cookies, and read the CSRF value.
|
|
876
|
+
|
|
877
|
+
\`\`\`sh
|
|
878
|
+
curl -s -c cookies.txt -o /dev/null "$BUDDI_URL/?t=$(buddi dashboard --token)"
|
|
879
|
+
CSRF=$(curl -s -b cookies.txt "$BUDDI_URL/api/session" | sed -E 's/.*"csrf":"([^"]+)".*/\\1/')
|
|
880
|
+
curl -b cookies.txt -H "X-Buddi-CSRF: $CSRF" -H "Origin: $BUDDI_URL" \\
|
|
881
|
+
-H "Content-Type: application/json" -d '{"paused":true}' "$BUDDI_URL/api/pause"
|
|
882
|
+
\`\`\`
|
|
883
|
+
|
|
884
|
+
\`buddi dashboard --token\` reads the installation's own secret, so it works
|
|
885
|
+
only on that computer. A wrong or expired ticket counts as a failed sign-in.
|
|
886
|
+
|
|
887
|
+
## Answers and errors
|
|
888
|
+
|
|
889
|
+
A success is \`200\` with JSON unless the route says otherwise (\`201\`
|
|
890
|
+
created, \`202\` accepted and still running — follow the job or stream it
|
|
891
|
+
names, \`204\` no body). A refusal is a status with \`{ "error": "<a sentence
|
|
892
|
+
for a person>" }\`, sometimes with more fields. The gate answers before any
|
|
893
|
+
route, with an empty body:
|
|
894
|
+
|
|
895
|
+
| Status | Meaning |
|
|
896
|
+
| --- | --- |
|
|
897
|
+
| 401 | Not signed in: no session, or the token is unknown or revoked. |
|
|
898
|
+
| 403 | A write without its CSRF header or Origin; or, with JSON, a route a token may not call. |
|
|
899
|
+
| 404 | \`{ "error": "no such endpoint" }\` for a path that is not a route. |
|
|
900
|
+
| 405 | A method the path does not take. |
|
|
901
|
+
| 423 | \`{ "locked": true, … }\`: the dashboard session is locked (Settings → Lock screen). Tokens are not covered. |
|
|
902
|
+
| 429 | Too many failed sign-ins from this address; \`Retry-After\` says when to try again. |
|
|
903
|
+
| 503 | Tailscale could not be asked, or a part of buddi is not running in this process. |
|
|
904
|
+
|
|
905
|
+
## Rate limits and lockout
|
|
906
|
+
|
|
907
|
+
A request that presents a credential that is wrong — a stale session cookie,
|
|
908
|
+
an expired sign-in link, an unknown or revoked API token — counts as a failed
|
|
909
|
+
sign-in for its address: ten in a minute and that address is answered
|
|
910
|
+
\`429\` until the minute is over. Each distinct wrong value counts once a
|
|
911
|
+
window, so one forgotten client cannot lock the owner out on its own. All
|
|
912
|
+
tailnet and SSH-tunnel traffic arrives from 127.0.0.1 and shares one budget.
|
|
913
|
+
A request with no credential at all counts as nothing.
|
|
914
|
+
|
|
915
|
+
Beyond that: at most a few open event streams per session (\`429\`), five
|
|
916
|
+
extension pairing tries in five minutes, and plugin page writes have their
|
|
917
|
+
own limit.
|
|
918
|
+
|
|
919
|
+
## Streams
|
|
920
|
+
|
|
921
|
+
\`GET /api/chat/conversations/:id/stream\` and \`GET /api/chat/attention/stream\`
|
|
922
|
+
are server-sent events. Reconnect with \`Last-Event-ID\` (or \`?since=\`) to
|
|
923
|
+
resume where you left off. A turn sent with \`POST /api/chat/:agent/messages\`
|
|
924
|
+
is answered \`202\` at once; its reply arrives on the stream.
|
|
925
|
+
|
|
926
|
+
## Example: talk to an agent headless
|
|
927
|
+
|
|
928
|
+
\`\`\`sh
|
|
929
|
+
# who is there
|
|
930
|
+
curl -s -H "Authorization: Bearer $BUDDI_TOKEN" "$BUDDI_URL/api/chat/agents"
|
|
931
|
+
# say something to the default assistant (its id from the list above)
|
|
932
|
+
curl -s -X POST -H "Authorization: Bearer $BUDDI_TOKEN" -H "Content-Type: application/json" \\
|
|
933
|
+
-d '{"text":"What is on my calendar today?"}' "$BUDDI_URL/api/chat/<agent>/messages"
|
|
934
|
+
# follow the reply
|
|
935
|
+
curl -N -H "Authorization: Bearer $BUDDI_TOKEN" "$BUDDI_URL/api/chat/conversations/<conversationId>/stream"
|
|
936
|
+
\`\`\`
|
|
937
|
+
`;
|
|
938
|
+
/**
|
|
939
|
+
* The release each route first shipped in, from the history (the earliest
|
|
940
|
+
* tag whose gateway source dispatched it). A route added since the last
|
|
941
|
+
* release has no entry and reads "unreleased" until the release adds it.
|
|
942
|
+
*/
|
|
943
|
+
export const API_SINCE = {
|
|
944
|
+
'GET /api/lock': '0.1.0-pre.29',
|
|
945
|
+
'POST /api/lock': '0.1.0-pre.29',
|
|
946
|
+
'GET /api/lock/screen': '0.1.0-pre.29',
|
|
947
|
+
'POST /api/lock/unlock': '0.1.0-pre.29',
|
|
948
|
+
'POST /api/lock/activity': '0.1.0-pre.29',
|
|
949
|
+
'PUT /api/lock/pin': '0.1.0-pre.29',
|
|
950
|
+
'POST /api/lock/pin/remove': '0.1.0-pre.29',
|
|
951
|
+
'PUT /api/lock/settings': '0.1.0-pre.29',
|
|
952
|
+
'GET /api/lock/background': '0.1.0-pre.29',
|
|
953
|
+
'POST /api/lock/background': '0.1.0-pre.29',
|
|
954
|
+
'DELETE /api/lock/background': '0.1.0-pre.29',
|
|
955
|
+
'GET /api/api-tokens': '0.1.0-pre.29',
|
|
956
|
+
'POST /api/api-tokens': '0.1.0-pre.29',
|
|
957
|
+
'DELETE /api/api-tokens/:id': '0.1.0-pre.29',
|
|
958
|
+
'GET /api/widgets': '0.1.0-pre.29',
|
|
959
|
+
'PUT /api/widgets/home': '0.1.0-pre.29',
|
|
960
|
+
'PUT /api/widgets/lock': '0.1.0-pre.29',
|
|
961
|
+
'GET /api/widgets/settings/:widget': '0.1.0-pre.29',
|
|
962
|
+
'POST /api/widgets/preview': '0.1.0-pre.29',
|
|
963
|
+
'POST /api/widgets/:placement/refresh': '0.1.0-pre.29',
|
|
964
|
+
'POST /api/groups/:id/restore': '0.1.0-pre.29',
|
|
965
|
+
'POST /api/groups/:id/clear': '0.1.0-pre.29',
|
|
966
|
+
'POST /api/owner/places': '0.1.0-pre.29',
|
|
967
|
+
'POST /api/owner/places/find': '0.1.0-pre.29',
|
|
968
|
+
'POST /api/owner/places/remove': '0.1.0-pre.29',
|
|
969
|
+
'GET /api/session': '0.1.0-pre.15',
|
|
970
|
+
'GET /api/tailscale': '0.1.0-pre.15',
|
|
971
|
+
'PUT /api/tailscale': '0.1.0-pre.15',
|
|
972
|
+
'GET /api/overview': '0.1.0-pre.15',
|
|
973
|
+
'GET /api/tips': '0.1.0-pre.22',
|
|
974
|
+
'GET /api/tips/current': '0.1.0-pre.22',
|
|
975
|
+
'GET /api/tips/settings': '0.1.0-pre.22',
|
|
976
|
+
'PUT /api/tips/settings': '0.1.0-pre.22',
|
|
977
|
+
'POST /api/tips/seen-page': '0.1.0-pre.22',
|
|
978
|
+
'POST /api/tips/:id/dismiss': '0.1.0-pre.22',
|
|
979
|
+
'POST /api/tips/:id/later': '0.1.0-pre.22',
|
|
980
|
+
'POST /api/tips/:id/restore': '0.1.0-pre.22',
|
|
981
|
+
'POST /api/home/glances/:id/hidden': '0.1.0-pre.23',
|
|
982
|
+
'GET /api/rail': '0.1.0-pre.23',
|
|
983
|
+
'POST /api/rail/pages/:plugin/:page/hidden': '0.1.0-pre.23',
|
|
984
|
+
'GET /api/events': '0.1.0-pre.15',
|
|
985
|
+
'GET /api/events/kinds': '0.1.0-pre.15',
|
|
986
|
+
'POST /api/pause': '0.1.0-pre.15',
|
|
987
|
+
'GET /api/chat/agents': '0.1.0-pre.15',
|
|
988
|
+
'GET /api/chat/attention': '0.1.0-pre.15',
|
|
989
|
+
'GET /api/chat/attention/stream': '0.1.0-pre.15',
|
|
990
|
+
'GET /api/chat/views': '0.1.0-pre.15',
|
|
991
|
+
'GET /api/chat/:agent/conversations': '0.1.0-pre.15',
|
|
992
|
+
'POST /api/chat/:agent/conversations': '0.1.0-pre.15',
|
|
993
|
+
'POST /api/chat/:agent/messages': '0.1.0-pre.15',
|
|
994
|
+
'GET /api/chat/conversations/:id': '0.1.0-pre.15',
|
|
995
|
+
'GET /api/chat/conversations/:id/stream': '0.1.0-pre.15',
|
|
996
|
+
'POST /api/chat/conversations/:id/cancel': '0.1.0-pre.15',
|
|
997
|
+
'DELETE /api/chat/conversations/:id/carry-over': '0.1.0-pre.28',
|
|
998
|
+
'POST /api/chat/questions/:id/answer': '0.1.0-pre.15',
|
|
999
|
+
'POST /api/chat/attachments': '0.1.0-pre.15',
|
|
1000
|
+
'GET /api/conversations': '0.1.0-pre.15',
|
|
1001
|
+
'GET /api/conversations/:id': '0.1.0-pre.15',
|
|
1002
|
+
'GET /api/groups': '0.1.0-pre.15',
|
|
1003
|
+
'POST /api/groups': '0.1.0-pre.15',
|
|
1004
|
+
'GET /api/groups/:id': '0.1.0-pre.15',
|
|
1005
|
+
'PATCH /api/groups/:id': '0.1.0-pre.15',
|
|
1006
|
+
'DELETE /api/groups/:id': '0.1.0-pre.15',
|
|
1007
|
+
'POST /api/groups/:id/archive': '0.1.0-pre.15',
|
|
1008
|
+
'GET /api/groups/:id/conversations': '0.1.0-pre.15',
|
|
1009
|
+
'POST /api/groups/:id/conversations': '0.1.0-pre.15',
|
|
1010
|
+
'POST /api/groups/:id/messages': '0.1.0-pre.15',
|
|
1011
|
+
'GET /api/agents': '0.1.0-pre.15',
|
|
1012
|
+
'POST /api/agents/default': '0.1.0-pre.15',
|
|
1013
|
+
'GET /api/agents/:id/profile': '0.1.0-pre.15',
|
|
1014
|
+
'GET /api/agents/:id/skills': '0.1.0-pre.15',
|
|
1015
|
+
'POST /api/agents/:id/skills/:skill/remove': '0.1.0-pre.15',
|
|
1016
|
+
'GET /api/agents/:id/tools': '0.1.0-pre.15',
|
|
1017
|
+
'GET /api/agents/:id/file': '0.1.0-pre.15',
|
|
1018
|
+
'POST /api/agents/:id/file': '0.1.0-pre.15',
|
|
1019
|
+
'POST /api/agents/:id/delegates': '0.1.0-pre.15',
|
|
1020
|
+
'POST /api/agents/:id/engine': '0.1.0-pre.15',
|
|
1021
|
+
'POST /api/agents/:id/account': '0.1.0-pre.15',
|
|
1022
|
+
'GET /api/agents/:id/avatar': '0.1.0-pre.15',
|
|
1023
|
+
'POST /api/agents/:id/avatar': '0.1.0-pre.15',
|
|
1024
|
+
'DELETE /api/agents/:id/avatar': '0.1.0-pre.15',
|
|
1025
|
+
'GET /api/teammates': '0.1.0-pre.22',
|
|
1026
|
+
'GET /api/agent-offers': '0.1.0-pre.15',
|
|
1027
|
+
'POST /api/agent-offers/:plugin/:agent/dismiss': '0.1.0-pre.15',
|
|
1028
|
+
'GET /api/approvals': '0.1.0-pre.15',
|
|
1029
|
+
'GET /api/approvals/:id': '0.1.0-pre.15',
|
|
1030
|
+
'POST /api/approvals/:id/approve': '0.1.0-pre.15',
|
|
1031
|
+
'POST /api/approvals/:id/reject': '0.1.0-pre.15',
|
|
1032
|
+
'GET /api/offers': '0.1.0-pre.15',
|
|
1033
|
+
'POST /api/offers/:id/take': '0.1.0-pre.15',
|
|
1034
|
+
'POST /api/offers/:id/dismiss': '0.1.0-pre.15',
|
|
1035
|
+
'POST /api/offers/dismiss-all': '0.1.0-pre.15',
|
|
1036
|
+
'GET /api/proposals': '0.1.0-pre.15',
|
|
1037
|
+
'POST /api/proposals/:id/keep': '0.1.0-pre.15',
|
|
1038
|
+
'POST /api/proposals/:id/discard': '0.1.0-pre.15',
|
|
1039
|
+
'POST /api/proposals/keep-all': '0.1.0-pre.28',
|
|
1040
|
+
'POST /api/proposals/digest-schedule': '0.1.0-pre.15',
|
|
1041
|
+
'GET /api/missions': '0.1.0-pre.15',
|
|
1042
|
+
'POST /api/missions/:id/enabled': '0.1.0-pre.15',
|
|
1043
|
+
'POST /api/missions/:id/schedule': '0.1.0-pre.15',
|
|
1044
|
+
'GET /api/jobs': '0.1.0-pre.15',
|
|
1045
|
+
'POST /api/jobs/:id/retry': '0.1.0-pre.15',
|
|
1046
|
+
'POST /api/jobs/:id/cancel': '0.1.0-pre.15',
|
|
1047
|
+
'GET /api/reminders': '0.1.0-pre.15',
|
|
1048
|
+
'POST /api/reminders/:id/cancel': '0.1.0-pre.15',
|
|
1049
|
+
'GET /api/sentinels': '0.1.0-pre.15',
|
|
1050
|
+
'POST /api/sentinels/:id/enabled': '0.1.0-pre.15',
|
|
1051
|
+
'POST /api/alerts/:key/snooze': '0.1.0-pre.15',
|
|
1052
|
+
'GET /api/notifications': '0.1.0-pre.18',
|
|
1053
|
+
'POST /api/notifications/:id/seen': '0.1.0-pre.18',
|
|
1054
|
+
'GET /api/notifications/settings': '0.1.0-pre.18',
|
|
1055
|
+
'PUT /api/notifications/settings': '0.1.0-pre.18',
|
|
1056
|
+
'GET /api/notifications/focus': '0.1.0-pre.23',
|
|
1057
|
+
'PUT /api/notifications/focus': '0.1.0-pre.23',
|
|
1058
|
+
'POST /api/notifications/test': '0.1.0-pre.18',
|
|
1059
|
+
'POST /api/notifications/agent-mute': '0.1.0-pre.26',
|
|
1060
|
+
'POST /api/presence': '0.1.0-pre.18',
|
|
1061
|
+
'GET /api/memory': '0.1.0-pre.15',
|
|
1062
|
+
'POST /api/memory/preferences': '0.1.0-pre.15',
|
|
1063
|
+
'POST /api/memory/preferences/forget': '0.1.0-pre.15',
|
|
1064
|
+
'POST /api/memory/notes/:id': '0.1.0-pre.15',
|
|
1065
|
+
'POST /api/memory/notes/:id/forget': '0.1.0-pre.15',
|
|
1066
|
+
'GET /api/artifacts': '0.1.0-pre.15',
|
|
1067
|
+
'GET /api/artifacts/:id': '0.1.0-pre.15',
|
|
1068
|
+
'GET /api/artifacts/:id/download': '0.1.0-pre.15',
|
|
1069
|
+
'GET /api/artifacts/:id/preview': '0.1.0-pre.15',
|
|
1070
|
+
'DELETE /api/artifacts/:id': '0.1.0-pre.15',
|
|
1071
|
+
'GET /api/owner': '0.1.0-pre.15',
|
|
1072
|
+
'POST /api/owner': '0.1.0-pre.15',
|
|
1073
|
+
'GET /api/provider-accounts': '0.1.0-pre.15',
|
|
1074
|
+
'POST /api/provider-accounts/save': '0.1.0-pre.15',
|
|
1075
|
+
'POST /api/provider-accounts/probe-models': '0.1.0-pre.15',
|
|
1076
|
+
'POST /api/provider-accounts/:id/test': '0.1.0-pre.15',
|
|
1077
|
+
'POST /api/provider-accounts/:id/models': '0.1.0-pre.15',
|
|
1078
|
+
'POST /api/provider-accounts/:id/remove': '0.1.0-pre.15',
|
|
1079
|
+
'POST /api/provider-accounts/:id/login': '0.1.0-pre.15',
|
|
1080
|
+
'POST /api/provider-accounts/:id/cancel-login': '0.1.0-pre.15',
|
|
1081
|
+
'POST /api/provider-accounts/:id/logout': '0.1.0-pre.15',
|
|
1082
|
+
'POST /api/provider-accounts/:id/anthropic/login': '0.1.0-pre.15',
|
|
1083
|
+
'POST /api/provider-accounts/:id/anthropic/complete-login': '0.1.0-pre.15',
|
|
1084
|
+
'POST /api/provider-accounts/:id/anthropic/cancel-login': '0.1.0-pre.15',
|
|
1085
|
+
'POST /api/provider-accounts/:id/anthropic/logout': '0.1.0-pre.15',
|
|
1086
|
+
'POST /api/provider-accounts/:id/ollama/connect': '0.1.0-pre.20',
|
|
1087
|
+
'POST /api/provider-accounts/:id/ollama/poll': '0.1.0-pre.20',
|
|
1088
|
+
'POST /api/provider-accounts/:id/ollama/disconnect': '0.1.0-pre.20',
|
|
1089
|
+
'GET /api/providers': '0.1.0-pre.15',
|
|
1090
|
+
'POST /api/providers/anthropic/settings': '0.1.0-pre.15',
|
|
1091
|
+
'POST /api/providers/anthropic/test': '0.1.0-pre.15',
|
|
1092
|
+
'POST /api/providers/openai/settings': '0.1.0-pre.15',
|
|
1093
|
+
'POST /api/providers/openai/test': '0.1.0-pre.15',
|
|
1094
|
+
'POST /api/providers/credentials/:name/save': '0.1.0-pre.15',
|
|
1095
|
+
'POST /api/providers/credentials/:name/remove': '0.1.0-pre.15',
|
|
1096
|
+
'GET /api/connections': '0.1.0-pre.22',
|
|
1097
|
+
'POST /api/connections': '0.1.0-pre.22',
|
|
1098
|
+
'GET /api/connections/signals': '0.1.0-pre.22',
|
|
1099
|
+
'POST /api/connections/callback': '0.1.0-pre.22',
|
|
1100
|
+
'GET /api/connections/remembered/:agent': '0.1.0-pre.22',
|
|
1101
|
+
'POST /api/connections/remembered': '0.1.0-pre.22',
|
|
1102
|
+
'GET /api/connections/:id': '0.1.0-pre.22',
|
|
1103
|
+
'DELETE /api/connections/:id': '0.1.0-pre.22',
|
|
1104
|
+
'POST /api/connections/:id/consent': '0.1.0-pre.22',
|
|
1105
|
+
'POST /api/connections/:id/reconnect': '0.1.0-pre.22',
|
|
1106
|
+
'POST /api/connections/:id/token': '0.1.0-pre.25',
|
|
1107
|
+
'POST /api/connections/:id/device': '0.1.0-pre.25',
|
|
1108
|
+
'GET /api/connections/:id/review': '0.1.0-pre.22',
|
|
1109
|
+
'POST /api/connections/:id/review': '0.1.0-pre.22',
|
|
1110
|
+
'POST /api/connections/:id/grant': '0.1.0-pre.22',
|
|
1111
|
+
'POST /api/connections/:id/holders/:agent': '0.1.0-pre.26',
|
|
1112
|
+
'GET /api/connections/:id/tools': '0.1.0-pre.22',
|
|
1113
|
+
'PUT /api/connections/:id/program': '0.1.0-pre.25',
|
|
1114
|
+
'GET /api/plugins': '0.1.0-pre.15',
|
|
1115
|
+
'POST /api/plugins/stage': '0.1.0-pre.15',
|
|
1116
|
+
'POST /api/plugins/upload': '0.1.0-pre.15',
|
|
1117
|
+
'GET /api/plugins/jobs/:id': '0.1.0-pre.15',
|
|
1118
|
+
'POST /api/plugins/staged/:id/approve': '0.1.0-pre.15',
|
|
1119
|
+
'POST /api/plugins/staged/:id/reject': '0.1.0-pre.15',
|
|
1120
|
+
'POST /api/plugins/staged/:id/opened': '0.1.0-pre.28',
|
|
1121
|
+
'POST /api/plugins/:name/update': '0.1.0-pre.15',
|
|
1122
|
+
'POST /api/plugins/:name/uninstall': '0.1.0-pre.15',
|
|
1123
|
+
'POST /api/plugins/:name/disable': '0.1.0-pre.23',
|
|
1124
|
+
'POST /api/plugins/:name/enable': '0.1.0-pre.23',
|
|
1125
|
+
'POST /api/plugins/:plugin/agents/:agent/accept': '0.1.0-pre.15',
|
|
1126
|
+
'GET /api/plugins/folders': '0.1.0-pre.24',
|
|
1127
|
+
'GET /api/market': '0.1.0-pre.24',
|
|
1128
|
+
'GET /api/market/asset': '0.1.0-pre.24',
|
|
1129
|
+
'GET /api/pages': '0.1.0-pre.15',
|
|
1130
|
+
'GET /api/pages/:plugin/:query': '0.1.0-pre.15',
|
|
1131
|
+
'POST /api/pages/:plugin/act': '0.1.0-pre.15',
|
|
1132
|
+
'GET /api/preview/:plugin/:name/link': '0.1.0-pre.15',
|
|
1133
|
+
'GET /api/preview/:plugin/:name/check': '0.1.0-pre.15',
|
|
1134
|
+
'GET /api/secrets': '0.1.0-pre.15',
|
|
1135
|
+
'GET /api/secrets/uses': '0.1.0-pre.15',
|
|
1136
|
+
'POST /api/secrets/act': '0.1.0-pre.15',
|
|
1137
|
+
'GET /api/host': '0.1.0-pre.15',
|
|
1138
|
+
'POST /api/host/stop': '0.1.0-pre.15',
|
|
1139
|
+
'POST /api/host/revoke': '0.1.0-pre.15',
|
|
1140
|
+
'GET /api/host/apps': '0.1.0-pre.15',
|
|
1141
|
+
'GET /api/host/browser-profiles': '0.1.0-pre.15',
|
|
1142
|
+
'GET /api/browser': '0.1.0-pre.15',
|
|
1143
|
+
'GET /api/browser/screenshot': '0.1.0-pre.15',
|
|
1144
|
+
'POST /api/browser/install': '0.1.0-pre.15',
|
|
1145
|
+
'POST /api/browser/check': '0.1.0-pre.15',
|
|
1146
|
+
'POST /api/browser/settings': '0.1.0-pre.15',
|
|
1147
|
+
'POST /api/browser/permissions': '0.1.0-pre.15',
|
|
1148
|
+
'POST /api/browser/stop': '0.1.0-pre.15',
|
|
1149
|
+
'POST /api/browser/takeover': '0.1.0-pre.15',
|
|
1150
|
+
'POST /api/browser/resume': '0.1.0-pre.15',
|
|
1151
|
+
'POST /api/browser/release': '0.1.0-pre.15',
|
|
1152
|
+
'GET /api/browser/hand': '0.1.0-pre.15',
|
|
1153
|
+
'GET /api/extension': '0.1.0-pre.15',
|
|
1154
|
+
'POST /api/extension/pair': '0.1.0-pre.15',
|
|
1155
|
+
'DELETE /api/extension/pair': '0.1.0-pre.15',
|
|
1156
|
+
'GET /api/extension/socket': '0.1.0-pre.15',
|
|
1157
|
+
'GET /api/telegram': '0.1.0-pre.15',
|
|
1158
|
+
'GET /api/telegram/bot': '0.1.0-pre.19',
|
|
1159
|
+
'GET /api/telegram/devices': '0.1.0-pre.19',
|
|
1160
|
+
'POST /api/telegram/token': '0.1.0-pre.15',
|
|
1161
|
+
'POST /api/telegram/pairing': '0.1.0-pre.15',
|
|
1162
|
+
'DELETE /api/telegram/devices/:id': '0.1.0-pre.19',
|
|
1163
|
+
'GET /api/service': '0.1.0-pre.15',
|
|
1164
|
+
'POST /api/service/start': '0.1.0-pre.15',
|
|
1165
|
+
'POST /api/service/stop': '0.1.0-pre.15',
|
|
1166
|
+
'POST /api/service/restart': '0.1.0-pre.15',
|
|
1167
|
+
'GET /api/version': '0.1.0-pre.15',
|
|
1168
|
+
'POST /api/version/check': '0.1.0-pre.15',
|
|
1169
|
+
'PUT /api/version/check': '0.1.0-pre.15',
|
|
1170
|
+
'POST /api/upgrade': '0.1.0-pre.15',
|
|
1171
|
+
'GET /api/upgrade/jobs/:id': '0.1.0-pre.15',
|
|
1172
|
+
'GET /api/backups': '0.1.0-pre.15',
|
|
1173
|
+
'POST /api/backups': '0.1.0-pre.15',
|
|
1174
|
+
'GET /api/backups/jobs/:id': '0.1.0-pre.15',
|
|
1175
|
+
'POST /api/backups/verify': '0.1.0-pre.15',
|
|
1176
|
+
'POST /api/backups/restore': '0.1.0-pre.15',
|
|
1177
|
+
'GET /api/backups/schedule': '0.1.0-pre.15',
|
|
1178
|
+
'PUT /api/backups/schedule': '0.1.0-pre.15',
|
|
1179
|
+
'GET /api/backups/passphrase': '0.1.0-pre.15',
|
|
1180
|
+
'PUT /api/backups/passphrase': '0.1.0-pre.15',
|
|
1181
|
+
'GET /api/recovery': '0.1.0-pre.15',
|
|
1182
|
+
'POST /api/recovery/leave': '0.1.0-pre.15',
|
|
1183
|
+
'GET /api/onboarding': '0.1.0-pre.15',
|
|
1184
|
+
'POST /api/onboarding/step': '0.1.0-pre.15',
|
|
1185
|
+
'POST /api/onboarding/complete': '0.1.0-pre.15',
|
|
1186
|
+
'POST /api/onboarding/skip': '0.1.0-pre.15',
|
|
1187
|
+
'GET /api/onboarding/agent': '0.1.0-pre.15',
|
|
1188
|
+
'POST /api/onboarding/agent': '0.1.0-pre.15',
|
|
1189
|
+
'POST /api/onboarding/agent/update': '0.1.0-pre.15',
|
|
1190
|
+
'POST /api/onboarding/brain': '0.1.0-pre.15',
|
|
1191
|
+
'GET /api/onboarding/ollama': '0.1.0-pre.15',
|
|
1192
|
+
'GET /api/onboarding/mlxh': '0.1.0-pre.25',
|
|
1193
|
+
'GET /api/onboarding/take-on': '0.1.0-pre.25',
|
|
1194
|
+
'POST /api/onboarding/take-on': '0.1.0-pre.25',
|
|
1195
|
+
'POST /api/onboarding/restore': '0.1.0-pre.15',
|
|
1196
|
+
'POST /api/speech/transcribe': '0.1.0-pre.21',
|
|
1197
|
+
'POST /api/speech/say': '0.1.0-pre.21',
|
|
1198
|
+
'POST /api/mcp/request': '0.1.0-pre.15',
|
|
1199
|
+
};
|
|
1200
|
+
//# sourceMappingURL=api-routes.js.map
|