@withbuddi/buddi 0.1.0-pre.18 → 0.1.0-pre.20
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 +10 -4
- package/extension/background.js +38 -7
- package/node_modules/@buddi/cli/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/cli/dist/args.d.ts +7 -0
- package/node_modules/@buddi/cli/dist/args.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/args.js +14 -0
- package/node_modules/@buddi/cli/dist/args.js.map +1 -1
- package/node_modules/@buddi/cli/dist/commands.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/commands.js +37 -2
- package/node_modules/@buddi/cli/dist/commands.js.map +1 -1
- package/node_modules/@buddi/cli/dist/dashboard-app.d.ts +6 -0
- package/node_modules/@buddi/cli/dist/dashboard-app.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/dashboard-app.js +16 -1
- package/node_modules/@buddi/cli/dist/dashboard-app.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 +5 -2
- package/node_modules/@buddi/cli/dist/doctor-probes.js.map +1 -1
- package/node_modules/@buddi/cli/dist/doctor.d.ts +16 -0
- package/node_modules/@buddi/cli/dist/doctor.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/doctor.js +18 -0
- package/node_modules/@buddi/cli/dist/doctor.js.map +1 -1
- package/node_modules/@buddi/cli/dist/index.d.ts +1 -0
- package/node_modules/@buddi/cli/dist/index.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/index.js +1 -0
- package/node_modules/@buddi/cli/dist/index.js.map +1 -1
- package/node_modules/@buddi/cli/dist/main.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/main.js +22 -2
- package/node_modules/@buddi/cli/dist/main.js.map +1 -1
- package/node_modules/@buddi/cli/dist/status.d.ts +10 -0
- package/node_modules/@buddi/cli/dist/status.d.ts.map +1 -1
- package/node_modules/@buddi/cli/dist/status.js +4 -0
- package/node_modules/@buddi/cli/dist/status.js.map +1 -1
- package/node_modules/@buddi/cli/dist/uninstall-cmd.d.ts +42 -0
- package/node_modules/@buddi/cli/dist/uninstall-cmd.d.ts.map +1 -0
- package/node_modules/@buddi/cli/dist/uninstall-cmd.js +208 -0
- package/node_modules/@buddi/cli/dist/uninstall-cmd.js.map +1 -0
- 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 -1
- package/node_modules/@buddi/core/dist/agents/catalog.js.map +1 -1
- package/node_modules/@buddi/core/dist/agents/models.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/agents/models.js +4 -3
- package/node_modules/@buddi/core/dist/agents/models.js.map +1 -1
- package/node_modules/@buddi/core/dist/agents/skills.d.ts +2 -2
- package/node_modules/@buddi/core/dist/goals/frequency.d.ts +51 -0
- package/node_modules/@buddi/core/dist/goals/frequency.d.ts.map +1 -0
- package/node_modules/@buddi/core/dist/goals/frequency.js +113 -0
- package/node_modules/@buddi/core/dist/goals/frequency.js.map +1 -0
- package/node_modules/@buddi/core/dist/goals/index.d.ts +2 -0
- package/node_modules/@buddi/core/dist/goals/index.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/goals/index.js +2 -0
- package/node_modules/@buddi/core/dist/goals/index.js.map +1 -1
- package/node_modules/@buddi/core/dist/goals/math.d.ts +8 -2
- package/node_modules/@buddi/core/dist/goals/math.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/goals/math.js +17 -4
- package/node_modules/@buddi/core/dist/goals/math.js.map +1 -1
- package/node_modules/@buddi/core/dist/goals/owner.d.ts +129 -0
- package/node_modules/@buddi/core/dist/goals/owner.d.ts.map +1 -0
- package/node_modules/@buddi/core/dist/goals/owner.js +239 -0
- package/node_modules/@buddi/core/dist/goals/owner.js.map +1 -0
- package/node_modules/@buddi/core/dist/goals/store.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/goals/store.js +11 -4
- package/node_modules/@buddi/core/dist/goals/store.js.map +1 -1
- package/node_modules/@buddi/core/dist/goals/types.d.ts +17 -3
- package/node_modules/@buddi/core/dist/goals/types.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/goals/types.js +8 -2
- package/node_modules/@buddi/core/dist/goals/types.js.map +1 -1
- package/node_modules/@buddi/core/dist/learning/announce.d.ts +29 -0
- package/node_modules/@buddi/core/dist/learning/announce.d.ts.map +1 -0
- package/node_modules/@buddi/core/dist/learning/announce.js +49 -0
- package/node_modules/@buddi/core/dist/learning/announce.js.map +1 -0
- package/node_modules/@buddi/core/dist/learning/index.d.ts +1 -0
- package/node_modules/@buddi/core/dist/learning/index.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/learning/index.js +1 -0
- package/node_modules/@buddi/core/dist/learning/index.js.map +1 -1
- package/node_modules/@buddi/core/dist/learning/store.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/learning/store.js +15 -4
- package/node_modules/@buddi/core/dist/learning/store.js.map +1 -1
- package/node_modules/@buddi/core/dist/notifications/notify.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/notifications/notify.js +1 -0
- package/node_modules/@buddi/core/dist/notifications/notify.js.map +1 -1
- package/node_modules/@buddi/core/dist/notifications/store.d.ts +2 -0
- package/node_modules/@buddi/core/dist/notifications/store.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/notifications/store.js +9 -0
- package/node_modules/@buddi/core/dist/notifications/store.js.map +1 -1
- package/node_modules/@buddi/core/dist/notifications/types.d.ts +6 -0
- package/node_modules/@buddi/core/dist/notifications/types.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/pages.d.ts +2 -2
- package/node_modules/@buddi/core/dist/provider-accounts.d.ts +7 -1
- package/node_modules/@buddi/core/dist/provider-accounts.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/provider-accounts.js +14 -1
- package/node_modules/@buddi/core/dist/provider-accounts.js.map +1 -1
- package/node_modules/@buddi/core/dist/provider.d.ts +6 -0
- package/node_modules/@buddi/core/dist/provider.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/provider.js.map +1 -1
- package/node_modules/@buddi/core/dist/sentinels/run.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/sentinels/run.js +4 -1
- package/node_modules/@buddi/core/dist/sentinels/run.js.map +1 -1
- package/node_modules/@buddi/core/dist/sentinels/types.d.ts +20 -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/surfaces.d.ts +2 -0
- package/node_modules/@buddi/core/dist/surfaces.d.ts.map +1 -1
- package/node_modules/@buddi/core/dist/surfaces.js +7 -0
- package/node_modules/@buddi/core/dist/surfaces.js.map +1 -1
- package/node_modules/@buddi/core/dist/uninstall.d.ts +79 -0
- package/node_modules/@buddi/core/dist/uninstall.d.ts.map +1 -0
- package/node_modules/@buddi/core/dist/uninstall.js +109 -0
- package/node_modules/@buddi/core/dist/uninstall.js.map +1 -0
- package/node_modules/@buddi/core/dist/views.d.ts +66 -66
- package/node_modules/@buddi/core/migrations/044_owner_metrics.sql +45 -0
- package/node_modules/@buddi/core/migrations/045_frequency_goals.sql +19 -0
- package/node_modules/@buddi/core/migrations/046_ollama_device_key.sql +7 -0
- package/node_modules/@buddi/core/migrations/047_reported_context_windows.sql +5 -0
- package/node_modules/@buddi/core/package.json +4 -0
- package/node_modules/@buddi/gateway/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/gateway/dist/chat/usage.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/chat/usage.js +1 -0
- package/node_modules/@buddi/gateway/dist/chat/usage.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/codex-accounts.d.ts +24 -11
- package/node_modules/@buddi/gateway/dist/codex-accounts.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/codex-accounts.js +151 -215
- package/node_modules/@buddi/gateway/dist/codex-accounts.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/index.d.ts +2 -0
- package/node_modules/@buddi/gateway/dist/index.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/index.js +2 -0
- package/node_modules/@buddi/gateway/dist/index.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/agent-run.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/agent-run.js +1 -0
- package/node_modules/@buddi/gateway/dist/missions/agent-run.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/execute.d.ts +7 -0
- package/node_modules/@buddi/gateway/dist/missions/execute.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/execute.js +3 -1
- package/node_modules/@buddi/gateway/dist/missions/execute.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/goals-format.d.ts +32 -5
- package/node_modules/@buddi/gateway/dist/missions/goals-format.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/goals-format.js +59 -2
- package/node_modules/@buddi/gateway/dist/missions/goals-format.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/goals-page.d.ts +60 -5
- package/node_modules/@buddi/gateway/dist/missions/goals-page.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/goals-page.js +355 -8
- package/node_modules/@buddi/gateway/dist/missions/goals-page.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/goals.d.ts +64 -5
- package/node_modules/@buddi/gateway/dist/missions/goals.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/goals.js +834 -116
- package/node_modules/@buddi/gateway/dist/missions/goals.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/missions/sentinel-wake.d.ts +5 -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 +12 -0
- package/node_modules/@buddi/gateway/dist/missions/sentinel-wake.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/ollama-accounts.d.ts +87 -0
- package/node_modules/@buddi/gateway/dist/ollama-accounts.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/ollama-accounts.js +179 -0
- package/node_modules/@buddi/gateway/dist/ollama-accounts.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/owner-notify.d.ts +2 -1
- package/node_modules/@buddi/gateway/dist/owner-notify.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/owner-notify.js +6 -2
- package/node_modules/@buddi/gateway/dist/owner-notify.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/provider-accounts.d.ts +47 -1
- package/node_modules/@buddi/gateway/dist/provider-accounts.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/provider-accounts.js +204 -38
- package/node_modules/@buddi/gateway/dist/provider-accounts.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/serve.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/serve.js +1 -0
- package/node_modules/@buddi/gateway/dist/serve.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/subscription-signins.d.ts +28 -0
- package/node_modules/@buddi/gateway/dist/subscription-signins.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/subscription-signins.js +30 -0
- package/node_modules/@buddi/gateway/dist/subscription-signins.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/surfaces/context-budget.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/surfaces/context-budget.js +10 -3
- package/node_modules/@buddi/gateway/dist/surfaces/context-budget.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/api.d.ts +43 -9
- package/node_modules/@buddi/gateway/dist/telegram/api.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/api.js +80 -21
- package/node_modules/@buddi/gateway/dist/telegram/api.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/attachments.d.ts +6 -0
- package/node_modules/@buddi/gateway/dist/telegram/attachments.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/attachments.js +1 -0
- package/node_modules/@buddi/gateway/dist/telegram/attachments.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/browser-view.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/browser-view.js +2 -1
- package/node_modules/@buddi/gateway/dist/telegram/browser-view.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/channel.d.ts +7 -1
- package/node_modules/@buddi/gateway/dist/telegram/channel.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/channel.js +24 -2
- package/node_modules/@buddi/gateway/dist/telegram/channel.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/commands.d.ts +28 -0
- package/node_modules/@buddi/gateway/dist/telegram/commands.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/telegram/commands.js +74 -0
- package/node_modules/@buddi/gateway/dist/telegram/commands.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/telegram/main.d.ts +3 -0
- package/node_modules/@buddi/gateway/dist/telegram/main.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/main.js +71 -2
- package/node_modules/@buddi/gateway/dist/telegram/main.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/outbound.d.ts +191 -0
- package/node_modules/@buddi/gateway/dist/telegram/outbound.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/telegram/outbound.js +671 -0
- package/node_modules/@buddi/gateway/dist/telegram/outbound.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/telegram/proposals.d.ts +65 -0
- package/node_modules/@buddi/gateway/dist/telegram/proposals.d.ts.map +1 -0
- package/node_modules/@buddi/gateway/dist/telegram/proposals.js +183 -0
- package/node_modules/@buddi/gateway/dist/telegram/proposals.js.map +1 -0
- package/node_modules/@buddi/gateway/dist/telegram/surface.d.ts +47 -47
- package/node_modules/@buddi/gateway/dist/telegram/surface.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/telegram/surface.js +99 -290
- package/node_modules/@buddi/gateway/dist/telegram/surface.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/onboarding.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/onboarding.js +4 -0
- package/node_modules/@buddi/gateway/dist/web/onboarding.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/secrets.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/secrets.js +3 -2
- package/node_modules/@buddi/gateway/dist/web/secrets.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/server.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/server.js +36 -14
- package/node_modules/@buddi/gateway/dist/web/server.js.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/telegram.d.ts +39 -0
- package/node_modules/@buddi/gateway/dist/web/telegram.d.ts.map +1 -1
- package/node_modules/@buddi/gateway/dist/web/telegram.js +53 -1
- package/node_modules/@buddi/gateway/dist/web/telegram.js.map +1 -1
- package/node_modules/@buddi/install/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/install/dist/launcher.d.ts.map +1 -1
- package/node_modules/@buddi/install/dist/launcher.js +135 -10
- package/node_modules/@buddi/install/dist/launcher.js.map +1 -1
- package/node_modules/@buddi/install/dist/uninstall.d.ts +59 -0
- package/node_modules/@buddi/install/dist/uninstall.d.ts.map +1 -0
- package/node_modules/@buddi/install/dist/uninstall.js +260 -0
- package/node_modules/@buddi/install/dist/uninstall.js.map +1 -0
- package/node_modules/@buddi/runtime/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/runtime/dist/codex-direct.d.ts +55 -0
- package/node_modules/@buddi/runtime/dist/codex-direct.d.ts.map +1 -0
- package/node_modules/@buddi/runtime/dist/codex-direct.js +334 -0
- package/node_modules/@buddi/runtime/dist/codex-direct.js.map +1 -0
- package/node_modules/@buddi/runtime/dist/codex-oauth.d.ts +66 -0
- package/node_modules/@buddi/runtime/dist/codex-oauth.d.ts.map +1 -0
- package/node_modules/@buddi/runtime/dist/codex-oauth.js +210 -0
- package/node_modules/@buddi/runtime/dist/codex-oauth.js.map +1 -0
- package/node_modules/@buddi/runtime/dist/codex-profile.d.ts +19 -0
- package/node_modules/@buddi/runtime/dist/codex-profile.d.ts.map +1 -0
- package/node_modules/@buddi/runtime/dist/codex-profile.js +99 -0
- package/node_modules/@buddi/runtime/dist/codex-profile.js.map +1 -0
- package/node_modules/@buddi/runtime/dist/context-window.d.ts.map +1 -1
- package/node_modules/@buddi/runtime/dist/context-window.js +9 -2
- package/node_modules/@buddi/runtime/dist/context-window.js.map +1 -1
- package/node_modules/@buddi/runtime/dist/delegate.d.ts +24 -0
- package/node_modules/@buddi/runtime/dist/delegate.d.ts.map +1 -1
- package/node_modules/@buddi/runtime/dist/delegate.js +87 -11
- package/node_modules/@buddi/runtime/dist/delegate.js.map +1 -1
- package/node_modules/@buddi/runtime/dist/index.d.ts +4 -4
- package/node_modules/@buddi/runtime/dist/index.d.ts.map +1 -1
- package/node_modules/@buddi/runtime/dist/index.js +5 -5
- package/node_modules/@buddi/runtime/dist/index.js.map +1 -1
- package/node_modules/@buddi/runtime/dist/loop.d.ts +7 -0
- package/node_modules/@buddi/runtime/dist/loop.d.ts.map +1 -1
- package/node_modules/@buddi/runtime/dist/loop.js +48 -8
- package/node_modules/@buddi/runtime/dist/loop.js.map +1 -1
- package/node_modules/@buddi/runtime/dist/ollama-signing.d.ts +52 -0
- package/node_modules/@buddi/runtime/dist/ollama-signing.d.ts.map +1 -0
- package/node_modules/@buddi/runtime/dist/ollama-signing.js +154 -0
- package/node_modules/@buddi/runtime/dist/ollama-signing.js.map +1 -0
- package/node_modules/@buddi/runtime/dist/openai.d.ts.map +1 -1
- package/node_modules/@buddi/runtime/dist/openai.js +38 -9
- package/node_modules/@buddi/runtime/dist/openai.js.map +1 -1
- package/node_modules/@buddi/runtime/dist/provider-models.d.ts +2 -0
- package/node_modules/@buddi/runtime/dist/provider-models.d.ts.map +1 -1
- package/node_modules/@buddi/runtime/dist/provider-models.js +8 -3
- package/node_modules/@buddi/runtime/dist/provider-models.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-browser/dist/index.d.ts +1 -1
- package/node_modules/@buddi/tool-browser/dist/index.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/index.js +12 -4
- package/node_modules/@buddi/tool-browser/dist/index.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/origin-pattern.d.ts +31 -0
- package/node_modules/@buddi/tool-browser/dist/origin-pattern.d.ts.map +1 -0
- package/node_modules/@buddi/tool-browser/dist/origin-pattern.js +61 -0
- package/node_modules/@buddi/tool-browser/dist/origin-pattern.js.map +1 -0
- package/node_modules/@buddi/tool-browser/dist/public-suffixes.d.ts +24 -0
- package/node_modules/@buddi/tool-browser/dist/public-suffixes.d.ts.map +1 -0
- package/node_modules/@buddi/tool-browser/dist/public-suffixes.js +153 -0
- package/node_modules/@buddi/tool-browser/dist/public-suffixes.js.map +1 -0
- package/node_modules/@buddi/tool-browser/dist/secrets.d.ts +45 -9
- package/node_modules/@buddi/tool-browser/dist/secrets.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/secrets.js +77 -20
- package/node_modules/@buddi/tool-browser/dist/secrets.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/service.d.ts +10 -0
- package/node_modules/@buddi/tool-browser/dist/service.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/service.js +84 -20
- package/node_modules/@buddi/tool-browser/dist/service.js.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/types.d.ts +7 -1
- package/node_modules/@buddi/tool-browser/dist/types.d.ts.map +1 -1
- package/node_modules/@buddi/tool-browser/dist/types.js +7 -1
- package/node_modules/@buddi/tool-browser/dist/types.js.map +1 -1
- package/node_modules/@buddi/tool-email/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-email/dist/tools/read.js +1 -1
- package/node_modules/@buddi/tool-email/dist/tools/read.js.map +1 -1
- package/node_modules/@buddi/tool-host/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-memory/dist/.tsbuildinfo +1 -1
- package/node_modules/@buddi/tool-web/dist/.tsbuildinfo +1 -1
- package/node_modules/ws/lib/websocket.js +17 -3
- package/node_modules/ws/package.json +1 -1
- package/package.json +2 -2
- package/packages/cli/dist/.tsbuildinfo +1 -1
- package/packages/cli/dist/args.d.ts +7 -0
- package/packages/cli/dist/args.d.ts.map +1 -1
- package/packages/cli/dist/args.js +14 -0
- package/packages/cli/dist/args.js.map +1 -1
- package/packages/cli/dist/commands.d.ts.map +1 -1
- package/packages/cli/dist/commands.js +37 -2
- package/packages/cli/dist/commands.js.map +1 -1
- package/packages/cli/dist/dashboard-app.d.ts +6 -0
- package/packages/cli/dist/dashboard-app.d.ts.map +1 -1
- package/packages/cli/dist/dashboard-app.js +16 -1
- package/packages/cli/dist/dashboard-app.js.map +1 -1
- package/packages/cli/dist/doctor-probes.d.ts.map +1 -1
- package/packages/cli/dist/doctor-probes.js +5 -2
- package/packages/cli/dist/doctor-probes.js.map +1 -1
- package/packages/cli/dist/doctor.d.ts +16 -0
- package/packages/cli/dist/doctor.d.ts.map +1 -1
- package/packages/cli/dist/doctor.js +18 -0
- package/packages/cli/dist/doctor.js.map +1 -1
- package/packages/cli/dist/index.d.ts +1 -0
- package/packages/cli/dist/index.d.ts.map +1 -1
- package/packages/cli/dist/index.js +1 -0
- package/packages/cli/dist/index.js.map +1 -1
- package/packages/cli/dist/main.d.ts.map +1 -1
- package/packages/cli/dist/main.js +22 -2
- package/packages/cli/dist/main.js.map +1 -1
- package/packages/cli/dist/status.d.ts +10 -0
- package/packages/cli/dist/status.d.ts.map +1 -1
- package/packages/cli/dist/status.js +4 -0
- package/packages/cli/dist/status.js.map +1 -1
- package/packages/cli/dist/uninstall-cmd.d.ts +42 -0
- package/packages/cli/dist/uninstall-cmd.d.ts.map +1 -0
- package/packages/cli/dist/uninstall-cmd.js +208 -0
- package/packages/cli/dist/uninstall-cmd.js.map +1 -0
- 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 -1
- package/packages/core/dist/agents/catalog.js.map +1 -1
- package/packages/core/dist/agents/models.d.ts.map +1 -1
- package/packages/core/dist/agents/models.js +4 -3
- package/packages/core/dist/agents/models.js.map +1 -1
- package/packages/core/dist/agents/skills.d.ts +2 -2
- package/packages/core/dist/goals/frequency.d.ts +51 -0
- package/packages/core/dist/goals/frequency.d.ts.map +1 -0
- package/packages/core/dist/goals/frequency.js +113 -0
- package/packages/core/dist/goals/frequency.js.map +1 -0
- package/packages/core/dist/goals/index.d.ts +2 -0
- package/packages/core/dist/goals/index.d.ts.map +1 -1
- package/packages/core/dist/goals/index.js +2 -0
- package/packages/core/dist/goals/index.js.map +1 -1
- package/packages/core/dist/goals/math.d.ts +8 -2
- package/packages/core/dist/goals/math.d.ts.map +1 -1
- package/packages/core/dist/goals/math.js +17 -4
- package/packages/core/dist/goals/math.js.map +1 -1
- package/packages/core/dist/goals/owner.d.ts +129 -0
- package/packages/core/dist/goals/owner.d.ts.map +1 -0
- package/packages/core/dist/goals/owner.js +239 -0
- package/packages/core/dist/goals/owner.js.map +1 -0
- package/packages/core/dist/goals/store.d.ts.map +1 -1
- package/packages/core/dist/goals/store.js +11 -4
- package/packages/core/dist/goals/store.js.map +1 -1
- package/packages/core/dist/goals/types.d.ts +17 -3
- package/packages/core/dist/goals/types.d.ts.map +1 -1
- package/packages/core/dist/goals/types.js +8 -2
- package/packages/core/dist/goals/types.js.map +1 -1
- package/packages/core/dist/learning/announce.d.ts +29 -0
- package/packages/core/dist/learning/announce.d.ts.map +1 -0
- package/packages/core/dist/learning/announce.js +49 -0
- package/packages/core/dist/learning/announce.js.map +1 -0
- package/packages/core/dist/learning/index.d.ts +1 -0
- package/packages/core/dist/learning/index.d.ts.map +1 -1
- package/packages/core/dist/learning/index.js +1 -0
- package/packages/core/dist/learning/index.js.map +1 -1
- package/packages/core/dist/learning/store.d.ts.map +1 -1
- package/packages/core/dist/learning/store.js +15 -4
- package/packages/core/dist/learning/store.js.map +1 -1
- package/packages/core/dist/notifications/notify.d.ts.map +1 -1
- package/packages/core/dist/notifications/notify.js +1 -0
- package/packages/core/dist/notifications/notify.js.map +1 -1
- package/packages/core/dist/notifications/store.d.ts +2 -0
- package/packages/core/dist/notifications/store.d.ts.map +1 -1
- package/packages/core/dist/notifications/store.js +9 -0
- package/packages/core/dist/notifications/store.js.map +1 -1
- package/packages/core/dist/notifications/types.d.ts +6 -0
- package/packages/core/dist/notifications/types.d.ts.map +1 -1
- package/packages/core/dist/pages.d.ts +2 -2
- package/packages/core/dist/provider-accounts.d.ts +7 -1
- package/packages/core/dist/provider-accounts.d.ts.map +1 -1
- package/packages/core/dist/provider-accounts.js +14 -1
- package/packages/core/dist/provider-accounts.js.map +1 -1
- package/packages/core/dist/provider.d.ts +6 -0
- package/packages/core/dist/provider.d.ts.map +1 -1
- package/packages/core/dist/provider.js.map +1 -1
- package/packages/core/dist/sentinels/run.d.ts.map +1 -1
- package/packages/core/dist/sentinels/run.js +4 -1
- package/packages/core/dist/sentinels/run.js.map +1 -1
- package/packages/core/dist/sentinels/types.d.ts +20 -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/surfaces.d.ts +2 -0
- package/packages/core/dist/surfaces.d.ts.map +1 -1
- package/packages/core/dist/surfaces.js +7 -0
- package/packages/core/dist/surfaces.js.map +1 -1
- package/packages/core/dist/uninstall.d.ts +79 -0
- package/packages/core/dist/uninstall.d.ts.map +1 -0
- package/packages/core/dist/uninstall.js +109 -0
- package/packages/core/dist/uninstall.js.map +1 -0
- package/packages/core/dist/views.d.ts +66 -66
- package/packages/core/migrations/044_owner_metrics.sql +45 -0
- package/packages/core/migrations/045_frequency_goals.sql +19 -0
- package/packages/core/migrations/046_ollama_device_key.sql +7 -0
- package/packages/core/migrations/047_reported_context_windows.sql +5 -0
- package/packages/core/package.json +4 -0
- package/packages/gateway/dist/.tsbuildinfo +1 -1
- package/packages/gateway/dist/chat/usage.d.ts.map +1 -1
- package/packages/gateway/dist/chat/usage.js +1 -0
- package/packages/gateway/dist/chat/usage.js.map +1 -1
- package/packages/gateway/dist/codex-accounts.d.ts +24 -11
- package/packages/gateway/dist/codex-accounts.d.ts.map +1 -1
- package/packages/gateway/dist/codex-accounts.js +151 -215
- package/packages/gateway/dist/codex-accounts.js.map +1 -1
- package/packages/gateway/dist/index.d.ts +2 -0
- package/packages/gateway/dist/index.d.ts.map +1 -1
- package/packages/gateway/dist/index.js +2 -0
- package/packages/gateway/dist/index.js.map +1 -1
- package/packages/gateway/dist/missions/agent-run.d.ts.map +1 -1
- package/packages/gateway/dist/missions/agent-run.js +1 -0
- package/packages/gateway/dist/missions/agent-run.js.map +1 -1
- package/packages/gateway/dist/missions/execute.d.ts +7 -0
- package/packages/gateway/dist/missions/execute.d.ts.map +1 -1
- package/packages/gateway/dist/missions/execute.js +3 -1
- package/packages/gateway/dist/missions/execute.js.map +1 -1
- package/packages/gateway/dist/missions/goals-format.d.ts +32 -5
- package/packages/gateway/dist/missions/goals-format.d.ts.map +1 -1
- package/packages/gateway/dist/missions/goals-format.js +59 -2
- package/packages/gateway/dist/missions/goals-format.js.map +1 -1
- package/packages/gateway/dist/missions/goals-page.d.ts +60 -5
- package/packages/gateway/dist/missions/goals-page.d.ts.map +1 -1
- package/packages/gateway/dist/missions/goals-page.js +355 -8
- package/packages/gateway/dist/missions/goals-page.js.map +1 -1
- package/packages/gateway/dist/missions/goals.d.ts +64 -5
- package/packages/gateway/dist/missions/goals.d.ts.map +1 -1
- package/packages/gateway/dist/missions/goals.js +834 -116
- package/packages/gateway/dist/missions/goals.js.map +1 -1
- package/packages/gateway/dist/missions/sentinel-wake.d.ts +5 -0
- package/packages/gateway/dist/missions/sentinel-wake.d.ts.map +1 -1
- package/packages/gateway/dist/missions/sentinel-wake.js +12 -0
- package/packages/gateway/dist/missions/sentinel-wake.js.map +1 -1
- package/packages/gateway/dist/ollama-accounts.d.ts +87 -0
- package/packages/gateway/dist/ollama-accounts.d.ts.map +1 -0
- package/packages/gateway/dist/ollama-accounts.js +179 -0
- package/packages/gateway/dist/ollama-accounts.js.map +1 -0
- package/packages/gateway/dist/owner-notify.d.ts +2 -1
- package/packages/gateway/dist/owner-notify.d.ts.map +1 -1
- package/packages/gateway/dist/owner-notify.js +6 -2
- package/packages/gateway/dist/owner-notify.js.map +1 -1
- package/packages/gateway/dist/provider-accounts.d.ts +47 -1
- package/packages/gateway/dist/provider-accounts.d.ts.map +1 -1
- package/packages/gateway/dist/provider-accounts.js +204 -38
- package/packages/gateway/dist/provider-accounts.js.map +1 -1
- package/packages/gateway/dist/serve.d.ts.map +1 -1
- package/packages/gateway/dist/serve.js +1 -0
- package/packages/gateway/dist/serve.js.map +1 -1
- package/packages/gateway/dist/subscription-signins.d.ts +28 -0
- package/packages/gateway/dist/subscription-signins.d.ts.map +1 -0
- package/packages/gateway/dist/subscription-signins.js +30 -0
- package/packages/gateway/dist/subscription-signins.js.map +1 -0
- package/packages/gateway/dist/surfaces/context-budget.d.ts.map +1 -1
- package/packages/gateway/dist/surfaces/context-budget.js +10 -3
- package/packages/gateway/dist/surfaces/context-budget.js.map +1 -1
- package/packages/gateway/dist/telegram/api.d.ts +43 -9
- package/packages/gateway/dist/telegram/api.d.ts.map +1 -1
- package/packages/gateway/dist/telegram/api.js +80 -21
- package/packages/gateway/dist/telegram/api.js.map +1 -1
- package/packages/gateway/dist/telegram/attachments.d.ts +6 -0
- package/packages/gateway/dist/telegram/attachments.d.ts.map +1 -1
- package/packages/gateway/dist/telegram/attachments.js +1 -0
- package/packages/gateway/dist/telegram/attachments.js.map +1 -1
- package/packages/gateway/dist/telegram/browser-view.d.ts.map +1 -1
- package/packages/gateway/dist/telegram/browser-view.js +2 -1
- package/packages/gateway/dist/telegram/browser-view.js.map +1 -1
- package/packages/gateway/dist/telegram/channel.d.ts +7 -1
- package/packages/gateway/dist/telegram/channel.d.ts.map +1 -1
- package/packages/gateway/dist/telegram/channel.js +24 -2
- package/packages/gateway/dist/telegram/channel.js.map +1 -1
- package/packages/gateway/dist/telegram/commands.d.ts +28 -0
- package/packages/gateway/dist/telegram/commands.d.ts.map +1 -0
- package/packages/gateway/dist/telegram/commands.js +74 -0
- package/packages/gateway/dist/telegram/commands.js.map +1 -0
- package/packages/gateway/dist/telegram/main.d.ts +3 -0
- package/packages/gateway/dist/telegram/main.d.ts.map +1 -1
- package/packages/gateway/dist/telegram/main.js +71 -2
- package/packages/gateway/dist/telegram/main.js.map +1 -1
- package/packages/gateway/dist/telegram/outbound.d.ts +191 -0
- package/packages/gateway/dist/telegram/outbound.d.ts.map +1 -0
- package/packages/gateway/dist/telegram/outbound.js +671 -0
- package/packages/gateway/dist/telegram/outbound.js.map +1 -0
- package/packages/gateway/dist/telegram/proposals.d.ts +65 -0
- package/packages/gateway/dist/telegram/proposals.d.ts.map +1 -0
- package/packages/gateway/dist/telegram/proposals.js +183 -0
- package/packages/gateway/dist/telegram/proposals.js.map +1 -0
- package/packages/gateway/dist/telegram/surface.d.ts +47 -47
- package/packages/gateway/dist/telegram/surface.d.ts.map +1 -1
- package/packages/gateway/dist/telegram/surface.js +99 -290
- package/packages/gateway/dist/telegram/surface.js.map +1 -1
- package/packages/gateway/dist/web/onboarding.d.ts.map +1 -1
- package/packages/gateway/dist/web/onboarding.js +4 -0
- package/packages/gateway/dist/web/onboarding.js.map +1 -1
- package/packages/gateway/dist/web/secrets.d.ts.map +1 -1
- package/packages/gateway/dist/web/secrets.js +3 -2
- package/packages/gateway/dist/web/secrets.js.map +1 -1
- package/packages/gateway/dist/web/server.d.ts.map +1 -1
- package/packages/gateway/dist/web/server.js +36 -14
- package/packages/gateway/dist/web/server.js.map +1 -1
- package/packages/gateway/dist/web/telegram.d.ts +39 -0
- package/packages/gateway/dist/web/telegram.d.ts.map +1 -1
- package/packages/gateway/dist/web/telegram.js +53 -1
- package/packages/gateway/dist/web/telegram.js.map +1 -1
- package/packages/install/dist/.tsbuildinfo +1 -1
- package/packages/install/dist/launcher.d.ts.map +1 -1
- package/packages/install/dist/launcher.js +135 -10
- package/packages/install/dist/launcher.js.map +1 -1
- package/packages/install/dist/uninstall.d.ts +59 -0
- package/packages/install/dist/uninstall.d.ts.map +1 -0
- package/packages/install/dist/uninstall.js +260 -0
- package/packages/install/dist/uninstall.js.map +1 -0
- package/packages/runtime/dist/.tsbuildinfo +1 -1
- package/packages/runtime/dist/codex-direct.d.ts +55 -0
- package/packages/runtime/dist/codex-direct.d.ts.map +1 -0
- package/packages/runtime/dist/codex-direct.js +334 -0
- package/packages/runtime/dist/codex-direct.js.map +1 -0
- package/packages/runtime/dist/codex-oauth.d.ts +66 -0
- package/packages/runtime/dist/codex-oauth.d.ts.map +1 -0
- package/packages/runtime/dist/codex-oauth.js +210 -0
- package/packages/runtime/dist/codex-oauth.js.map +1 -0
- package/packages/runtime/dist/codex-profile.d.ts +19 -0
- package/packages/runtime/dist/codex-profile.d.ts.map +1 -0
- package/packages/runtime/dist/codex-profile.js +99 -0
- package/packages/runtime/dist/codex-profile.js.map +1 -0
- package/packages/runtime/dist/context-window.d.ts.map +1 -1
- package/packages/runtime/dist/context-window.js +9 -2
- package/packages/runtime/dist/context-window.js.map +1 -1
- package/packages/runtime/dist/delegate.d.ts +24 -0
- package/packages/runtime/dist/delegate.d.ts.map +1 -1
- package/packages/runtime/dist/delegate.js +87 -11
- package/packages/runtime/dist/delegate.js.map +1 -1
- package/packages/runtime/dist/index.d.ts +4 -4
- package/packages/runtime/dist/index.d.ts.map +1 -1
- package/packages/runtime/dist/index.js +5 -5
- package/packages/runtime/dist/index.js.map +1 -1
- package/packages/runtime/dist/loop.d.ts +7 -0
- package/packages/runtime/dist/loop.d.ts.map +1 -1
- package/packages/runtime/dist/loop.js +48 -8
- package/packages/runtime/dist/loop.js.map +1 -1
- package/packages/runtime/dist/ollama-signing.d.ts +52 -0
- package/packages/runtime/dist/ollama-signing.d.ts.map +1 -0
- package/packages/runtime/dist/ollama-signing.js +154 -0
- package/packages/runtime/dist/ollama-signing.js.map +1 -0
- package/packages/runtime/dist/openai.d.ts.map +1 -1
- package/packages/runtime/dist/openai.js +38 -9
- package/packages/runtime/dist/openai.js.map +1 -1
- package/packages/runtime/dist/provider-models.d.ts +2 -0
- package/packages/runtime/dist/provider-models.d.ts.map +1 -1
- package/packages/runtime/dist/provider-models.js +8 -3
- package/packages/runtime/dist/provider-models.js.map +1 -1
- package/packages/tools/artifacts/dist/.tsbuildinfo +1 -1
- package/packages/tools/browser/dist/.tsbuildinfo +1 -1
- package/packages/tools/browser/dist/index.d.ts +1 -1
- package/packages/tools/browser/dist/index.d.ts.map +1 -1
- package/packages/tools/browser/dist/index.js +12 -4
- package/packages/tools/browser/dist/index.js.map +1 -1
- package/packages/tools/browser/dist/origin-pattern.d.ts +31 -0
- package/packages/tools/browser/dist/origin-pattern.d.ts.map +1 -0
- package/packages/tools/browser/dist/origin-pattern.js +61 -0
- package/packages/tools/browser/dist/origin-pattern.js.map +1 -0
- package/packages/tools/browser/dist/public-suffixes.d.ts +24 -0
- package/packages/tools/browser/dist/public-suffixes.d.ts.map +1 -0
- package/packages/tools/browser/dist/public-suffixes.js +153 -0
- package/packages/tools/browser/dist/public-suffixes.js.map +1 -0
- package/packages/tools/browser/dist/secrets.d.ts +45 -9
- package/packages/tools/browser/dist/secrets.d.ts.map +1 -1
- package/packages/tools/browser/dist/secrets.js +77 -20
- package/packages/tools/browser/dist/secrets.js.map +1 -1
- package/packages/tools/browser/dist/service.d.ts +10 -0
- package/packages/tools/browser/dist/service.d.ts.map +1 -1
- package/packages/tools/browser/dist/service.js +84 -20
- package/packages/tools/browser/dist/service.js.map +1 -1
- package/packages/tools/browser/dist/types.d.ts +7 -1
- package/packages/tools/browser/dist/types.d.ts.map +1 -1
- package/packages/tools/browser/dist/types.js +7 -1
- package/packages/tools/browser/dist/types.js.map +1 -1
- package/packages/tools/email/dist/.tsbuildinfo +1 -1
- package/packages/tools/email/dist/tools/read.js +1 -1
- package/packages/tools/email/dist/tools/read.js.map +1 -1
- package/packages/tools/host/dist/.tsbuildinfo +1 -1
- package/packages/tools/memory/dist/.tsbuildinfo +1 -1
- package/packages/tools/web/dist/.tsbuildinfo +1 -1
- package/packages/web/dist/assets/index-BRc5auXm.js +123 -0
- package/packages/web/dist/assets/{index-DCn0vN58.css → index-DwUpotTR.css} +1 -1
- package/packages/web/dist/index.html +2 -2
- package/node_modules/@buddi/runtime/dist/codex-app-server.d.ts +0 -20
- package/node_modules/@buddi/runtime/dist/codex-app-server.d.ts.map +0 -1
- package/node_modules/@buddi/runtime/dist/codex-app-server.js +0 -172
- package/node_modules/@buddi/runtime/dist/codex-app-server.js.map +0 -1
- package/node_modules/@buddi/runtime/dist/codex-policy.d.ts +0 -6
- package/node_modules/@buddi/runtime/dist/codex-policy.d.ts.map +0 -1
- package/node_modules/@buddi/runtime/dist/codex-policy.js +0 -79
- package/node_modules/@buddi/runtime/dist/codex-policy.js.map +0 -1
- package/node_modules/@buddi/runtime/dist/codex-rpc.d.ts +0 -34
- package/node_modules/@buddi/runtime/dist/codex-rpc.d.ts.map +0 -1
- package/node_modules/@buddi/runtime/dist/codex-rpc.js +0 -152
- package/node_modules/@buddi/runtime/dist/codex-rpc.js.map +0 -1
- package/node_modules/@buddi/runtime/dist/codex-session.d.ts +0 -30
- package/node_modules/@buddi/runtime/dist/codex-session.d.ts.map +0 -1
- package/node_modules/@buddi/runtime/dist/codex-session.js +0 -169
- package/node_modules/@buddi/runtime/dist/codex-session.js.map +0 -1
- package/packages/runtime/dist/codex-app-server.d.ts +0 -20
- package/packages/runtime/dist/codex-app-server.d.ts.map +0 -1
- package/packages/runtime/dist/codex-app-server.js +0 -172
- package/packages/runtime/dist/codex-app-server.js.map +0 -1
- package/packages/runtime/dist/codex-policy.d.ts +0 -6
- package/packages/runtime/dist/codex-policy.d.ts.map +0 -1
- package/packages/runtime/dist/codex-policy.js +0 -79
- package/packages/runtime/dist/codex-policy.js.map +0 -1
- package/packages/runtime/dist/codex-rpc.d.ts +0 -34
- package/packages/runtime/dist/codex-rpc.d.ts.map +0 -1
- package/packages/runtime/dist/codex-rpc.js +0 -152
- package/packages/runtime/dist/codex-rpc.js.map +0 -1
- package/packages/runtime/dist/codex-session.d.ts +0 -30
- package/packages/runtime/dist/codex-session.d.ts.map +0 -1
- package/packages/runtime/dist/codex-session.js +0 -169
- package/packages/runtime/dist/codex-session.js.map +0 -1
- package/packages/web/dist/assets/index-BRkIoT-q.js +0 -123
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"owner-notify.js","sourceRoot":"","sources":["../src/owner-notify.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EACL,WAAW,GAQZ,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAE3D,6EAA6E;AAC7E,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,EAAE,KAAK,CAAC,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IACzC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAChE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;AACjF,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,YAAY,CAAC,MAA4C;IACvE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,MAAM,CAAC;QACZ,KAAK,QAAQ;YACX,OAAO,SAAS,CAAC;QACnB,KAAK,UAAU;YACb,OAAO,UAAU,CAAC;QACpB;YACE,OAAO,OAAO,CAAC;IACnB,CAAC;AACH,CAAC;AAOD,SAAS,MAAM,CAAC,MAAoB,EAAE,MAA2B;IAC/D,IAAI,MAAM,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ;QAAE,MAAM,IAAI,mBAAmB,CAAC,MAAM,CAAC,KAAK,IAAI,YAAY,CAAC,CAAC;IACrG,OAAO,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC;AACxC,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"owner-notify.js","sourceRoot":"","sources":["../src/owner-notify.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { type AgentCatalog, type LoadAgentCatalogOptions, type ProviderAccountsAccess, type ProviderRef, type ResolvedProvider, type Vault } from '@buddi/core';
|
|
2
|
-
import { listProviderModels, type AccountModels, type RuntimeProvider } from '@buddi/runtime';
|
|
2
|
+
import { listProviderModels, type AccountModels, type OllamaConnectProtocol, type RuntimeProvider } from '@buddi/runtime';
|
|
3
3
|
import type { Pool } from 'pg';
|
|
4
4
|
import { type ProviderDiagnostic } from './provider-diagnostics.js';
|
|
5
5
|
import { CodexAccounts } from './codex-accounts.js';
|
|
6
6
|
import { AnthropicAccounts } from './anthropic-accounts.js';
|
|
7
|
+
import { OllamaAccounts, type OllamaDeviceView } from './ollama-accounts.js';
|
|
7
8
|
type Binding = {
|
|
8
9
|
agentId: string;
|
|
9
10
|
accountId: string;
|
|
@@ -59,10 +60,17 @@ export declare class ProviderAccounts {
|
|
|
59
60
|
vault?: Vault;
|
|
60
61
|
test?: (resolved: ResolvedProvider) => Promise<void>;
|
|
61
62
|
listModels?: typeof listProviderModels;
|
|
63
|
+
/** The one signed `/api/me` call and the device name, replaceable in tests. */
|
|
64
|
+
ollama?: {
|
|
65
|
+
protocol?: OllamaConnectProtocol;
|
|
66
|
+
deviceName?: () => string;
|
|
67
|
+
now?: () => number;
|
|
68
|
+
};
|
|
62
69
|
};
|
|
63
70
|
readonly vault: Vault | undefined;
|
|
64
71
|
readonly codex: CodexAccounts | undefined;
|
|
65
72
|
readonly anthropic: AnthropicAccounts | undefined;
|
|
73
|
+
readonly ollama: OllamaAccounts | undefined;
|
|
66
74
|
/** The vault the OAuth adapters see, with account names translated onto owner secrets. */
|
|
67
75
|
readonly accountVault: Vault | undefined;
|
|
68
76
|
constructor(deps: {
|
|
@@ -73,6 +81,12 @@ export declare class ProviderAccounts {
|
|
|
73
81
|
vault?: Vault;
|
|
74
82
|
test?: (resolved: ResolvedProvider) => Promise<void>;
|
|
75
83
|
listModels?: typeof listProviderModels;
|
|
84
|
+
/** The one signed `/api/me` call and the device name, replaceable in tests. */
|
|
85
|
+
ollama?: {
|
|
86
|
+
protocol?: OllamaConnectProtocol;
|
|
87
|
+
deviceName?: () => string;
|
|
88
|
+
now?: () => number;
|
|
89
|
+
};
|
|
76
90
|
});
|
|
77
91
|
get anthropicOAuthEnabled(): boolean;
|
|
78
92
|
initialize(): Promise<void>;
|
|
@@ -92,6 +106,7 @@ export declare class ProviderAccounts {
|
|
|
92
106
|
accounts: {
|
|
93
107
|
assignedAgents: string[];
|
|
94
108
|
test: TestResult | null;
|
|
109
|
+
device?: OllamaDeviceView | null | undefined;
|
|
95
110
|
login?: import("./codex-accounts.js").CodexLoginView | {
|
|
96
111
|
state: "pending";
|
|
97
112
|
attemptId: string;
|
|
@@ -102,6 +117,7 @@ export declare class ProviderAccounts {
|
|
|
102
117
|
reconnectRequired?: boolean | undefined;
|
|
103
118
|
configured: boolean;
|
|
104
119
|
detectedContextWindowTokens: number;
|
|
120
|
+
detectedContextWindowSource: "provider" | "table";
|
|
105
121
|
removalPending: boolean;
|
|
106
122
|
refreshable: boolean;
|
|
107
123
|
subscriptionRenewsAt: null;
|
|
@@ -159,6 +175,36 @@ export declare class ProviderAccounts {
|
|
|
159
175
|
} | {
|
|
160
176
|
completed: boolean;
|
|
161
177
|
} | null>;
|
|
178
|
+
/**
|
|
179
|
+
* Ollama Cloud with a device key: `connect` makes a key pair in the vault and
|
|
180
|
+
* answers with the page to press Connect on; `poll` asks ollama.com once
|
|
181
|
+
* whether that happened; `disconnect` removes the key from the vault. The
|
|
182
|
+
* device stays listed on ollama.com until the owner removes it there.
|
|
183
|
+
*/
|
|
184
|
+
ollamaAction(id: string, action: 'connect' | 'poll' | 'disconnect', body: {
|
|
185
|
+
revision?: unknown;
|
|
186
|
+
attemptId?: unknown;
|
|
187
|
+
}, owner: string): Promise<{
|
|
188
|
+
state: "connected";
|
|
189
|
+
username: string;
|
|
190
|
+
deviceName: string;
|
|
191
|
+
} | {
|
|
192
|
+
state: "waiting";
|
|
193
|
+
expiresAt: string;
|
|
194
|
+
} | {
|
|
195
|
+
state: "failed";
|
|
196
|
+
message: string;
|
|
197
|
+
} | {
|
|
198
|
+
state: "pending";
|
|
199
|
+
attemptId: string;
|
|
200
|
+
verificationUrl: string;
|
|
201
|
+
deviceName: string;
|
|
202
|
+
expiresAt: string;
|
|
203
|
+
} | {
|
|
204
|
+
removed: boolean;
|
|
205
|
+
unpaired: boolean;
|
|
206
|
+
note: string;
|
|
207
|
+
}>;
|
|
162
208
|
codexAction(id: string, action: 'login' | 'cancel-login' | 'logout', revision: unknown): Promise<import("./codex-accounts.js").CodexLoginView | {
|
|
163
209
|
cancelled: boolean;
|
|
164
210
|
removed?: undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-accounts.d.ts","sourceRoot":"","sources":["../src/provider-accounts.ts"],"names":[],"mappings":"AAEA,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAAwB,KAAK,sBAAsB,EAAE,KAAK,WAAW,EAAE,KAAK,gBAAgB,EAAE,KAAK,KAAK,EACrI,MAAM,aAAa,CAAC;AACrB,OAAO,EAA6D,kBAAkB,
|
|
1
|
+
{"version":3,"file":"provider-accounts.d.ts","sourceRoot":"","sources":["../src/provider-accounts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,19 +1,28 @@
|
|
|
1
1
|
import { randomUUID } from 'node:crypto';
|
|
2
2
|
import { setTimeout as delay } from 'node:timers/promises';
|
|
3
|
-
import { accountBaseUrl, accountModelProblem, accountProtocol, createVault, providerFromEnv, putOwnerSecret, registerSecretDestination, resolveProviderAccount, useOwnerSecret, vaultState, } from '@buddi/core';
|
|
4
|
-
import { contextWindowTokens, createProvider, providerCapabilities, listProviderModels, readAnthropicTokens } from '@buddi/runtime';
|
|
3
|
+
import { OLLAMA_CLOUD_ACCOUNT_URL, accountBaseUrl, accountModelProblem, accountProtocol, createVault, providerFromEnv, putOwnerSecret, registerSecretDestination, resolveProviderAccount, useOwnerSecret, vaultState, } from '@buddi/core';
|
|
4
|
+
import { contextWindowTokens, createProvider, providerCapabilities, listProviderModels, readAnthropicTokens, readCodexTokens } from '@buddi/runtime';
|
|
5
5
|
import { z } from 'zod';
|
|
6
6
|
import { providerDiagnostic } from './provider-diagnostics.js';
|
|
7
7
|
import { CodexAccounts } from './codex-accounts.js';
|
|
8
8
|
import { AnthropicAccounts } from './anthropic-accounts.js';
|
|
9
|
+
import { OllamaAccounts, deviceView, readOllamaDevice } from './ollama-accounts.js';
|
|
10
|
+
import { SIGNIN_HIDDEN, subscriptionSignIns } from './subscription-signins.js';
|
|
9
11
|
import { ACCOUNTS_PROVIDER_KIND, accountsProviderDestination, deleteAccountSecret, ownerSecretVault } from './owner-secrets.js';
|
|
12
|
+
/** At most this many models' windows are kept per account. */
|
|
13
|
+
const REPORTED_WINDOWS_MAX = 1000;
|
|
14
|
+
/** The provider's reported window for a model, when it said a usable one. */
|
|
15
|
+
function reportedWindow(map, model) {
|
|
16
|
+
const tokens = map && Object.hasOwn(map, model) ? map[model] : undefined;
|
|
17
|
+
return typeof tokens === 'number' && Number.isInteger(tokens) && tokens >= 8_000 && tokens <= 2_000_000 ? tokens : undefined;
|
|
18
|
+
}
|
|
10
19
|
const columns = `id, label, kind, auth, base_url as "baseUrl", default_model as "defaultModel",
|
|
11
|
-
context_window_tokens as "contextWindowTokens",
|
|
20
|
+
context_window_tokens as "contextWindowTokens", reported_context_windows as "reportedContextWindows",
|
|
12
21
|
enabled, deleting, revision, secret_ref as "secretRef", legacy_env as "legacyEnv"`;
|
|
13
22
|
const saveSchema = z.object({
|
|
14
23
|
id: z.string().min(1).max(100).optional(), revision: z.number().int().positive().optional(),
|
|
15
24
|
label: z.string().trim().min(1).max(100), kind: z.enum(['anthropic', 'openai', 'openai-compatible', 'codex']),
|
|
16
|
-
auth: z.enum(['api-key', 'none', 'legacy-subscription-token', 'chatgpt', 'anthropic-oauth']),
|
|
25
|
+
auth: z.enum(['api-key', 'none', 'legacy-subscription-token', 'chatgpt', 'anthropic-oauth', 'device-key']),
|
|
17
26
|
baseUrl: z.string().trim().max(2048).optional(), defaultModel: z.string().trim().min(1).max(150),
|
|
18
27
|
enabled: z.boolean(), secret: z.string().trim().min(1).max(16384).optional(),
|
|
19
28
|
/**
|
|
@@ -62,6 +71,8 @@ export class ProviderAccounts {
|
|
|
62
71
|
vault;
|
|
63
72
|
codex;
|
|
64
73
|
anthropic;
|
|
74
|
+
ollama;
|
|
75
|
+
#devices = new Map();
|
|
65
76
|
#tokenInfo = new Map();
|
|
66
77
|
#rows = new Map();
|
|
67
78
|
#bindings = new Map();
|
|
@@ -92,12 +103,14 @@ export class ProviderAccounts {
|
|
|
92
103
|
return row === undefined ? 'a provider account' : `the model account “${row.label}”`;
|
|
93
104
|
}));
|
|
94
105
|
}
|
|
95
|
-
if (deps.env.
|
|
106
|
+
if (subscriptionSignIns(deps.env).codex && this.accountVault)
|
|
96
107
|
this.codex = new CodexAccounts({ vault: this.accountVault });
|
|
97
108
|
if (this.accountVault)
|
|
98
109
|
this.anthropic = new AnthropicAccounts(this.accountVault);
|
|
110
|
+
if (this.accountVault)
|
|
111
|
+
this.ollama = new OllamaAccounts(this.accountVault, deps.ollama?.protocol, deps.ollama?.now, deps.ollama?.deviceName);
|
|
99
112
|
}
|
|
100
|
-
get anthropicOAuthEnabled() { return this.deps.env.
|
|
113
|
+
get anthropicOAuthEnabled() { return subscriptionSignIns(this.deps.env).claude && !!this.anthropic; }
|
|
101
114
|
async initialize() {
|
|
102
115
|
// One atomic, restart-safe migration. Never rewrites private agent files or
|
|
103
116
|
// copies a secret into SQL. Missing credentials still get a stable account.
|
|
@@ -160,14 +173,26 @@ export class ProviderAccounts {
|
|
|
160
173
|
const bindings = await this.deps.pool.query('select agent_id as "agentId", account_id as "accountId", model from core.agent_provider_accounts');
|
|
161
174
|
const configured = new Map();
|
|
162
175
|
this.#tokenInfo.clear();
|
|
176
|
+
this.#devices.clear();
|
|
163
177
|
for (const row of result.rows) {
|
|
164
178
|
try {
|
|
165
179
|
const raw = await this.#secret(row);
|
|
166
180
|
configured.set(row.id, row.auth === 'none' || !!raw);
|
|
181
|
+
if (row.auth === 'device-key') {
|
|
182
|
+
// Configured means connected: a key nobody pressed Connect for signs nothing useful.
|
|
183
|
+
const device = raw ? readOllamaDevice(raw) : null;
|
|
184
|
+
configured.set(row.id, !!device?.connectedAt);
|
|
185
|
+
if (device)
|
|
186
|
+
this.#devices.set(row.id, deviceView(device));
|
|
187
|
+
}
|
|
167
188
|
if (row.auth === 'anthropic-oauth' && raw) {
|
|
168
189
|
const tokens = readAnthropicTokens(raw);
|
|
169
190
|
this.#tokenInfo.set(row.id, { tokenExpiresAt: new Date(tokens.expiresAt).toISOString(), reconnectRequired: tokens.state !== 'ready' });
|
|
170
191
|
}
|
|
192
|
+
if (row.kind === 'codex' && raw) {
|
|
193
|
+
const tokens = readCodexTokens(raw);
|
|
194
|
+
this.#tokenInfo.set(row.id, { tokenExpiresAt: new Date(tokens.expiresAt).toISOString(), reconnectRequired: tokens.state !== 'ready' });
|
|
195
|
+
}
|
|
171
196
|
}
|
|
172
197
|
catch {
|
|
173
198
|
configured.set(row.id, false);
|
|
@@ -187,11 +212,12 @@ export class ProviderAccounts {
|
|
|
187
212
|
credential: { kind: row.auth === 'legacy-subscription-token' || row.auth === 'anthropic-oauth' ? 'subscription-token' : 'api-key', env: row.secretRef ?? 'NO_CREDENTIAL' },
|
|
188
213
|
} : { ...providerFromEnv(this.deps.env, agent.model, agent.provider), accountId: binding?.accountId ?? '' };
|
|
189
214
|
const issue = !row ? 'Choose a provider account for this agent in Settings → Agents.'
|
|
190
|
-
: row.kind === 'codex' && !this.codex ?
|
|
191
|
-
: row.auth === 'anthropic-oauth' && !this.anthropicOAuthEnabled ?
|
|
215
|
+
: row.kind === 'codex' && !this.codex ? SIGNIN_HIDDEN.codex
|
|
216
|
+
: row.auth === 'anthropic-oauth' && !this.anthropicOAuthEnabled ? SIGNIN_HIDDEN.claude
|
|
192
217
|
: !row.enabled ? `Provider account “${row.label}” is disabled.`
|
|
193
|
-
: !this.#configured.get(row.id) ? `
|
|
194
|
-
:
|
|
218
|
+
: row.auth === 'device-key' && !this.#configured.get(row.id) ? `Connect Ollama for “${row.label}” in Settings → Model accounts.`
|
|
219
|
+
: !this.#configured.get(row.id) ? `Provider account “${row.label}” needs a credential or vault access.`
|
|
220
|
+
: accountModelProblem(row.kind, binding.model);
|
|
195
221
|
return { provider, availability: issue ? { ok: false, problem: { code: 'missing-credential', message: issue } } : { ok: true } };
|
|
196
222
|
};
|
|
197
223
|
view(ownerSession) {
|
|
@@ -199,19 +225,24 @@ export class ProviderAccounts {
|
|
|
199
225
|
vault: { kind: this.vault?.kind ?? 'none', ...vaultState({ env: this.deps.env }) },
|
|
200
226
|
codexEnabled: !!this.codex,
|
|
201
227
|
anthropicOAuthEnabled: this.anthropicOAuthEnabled,
|
|
202
|
-
accounts: [...this.#rows.values()].map(({ secretRef: _secret, legacyEnv: _env, deleting, ...row }) =>
|
|
203
|
-
|
|
204
|
-
//
|
|
205
|
-
//
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
228
|
+
accounts: [...this.#rows.values()].map(({ secretRef: _secret, legacyEnv: _env, deleting, reportedContextWindows, ...row }) => {
|
|
229
|
+
// The provider's own number for the default model when its model list
|
|
230
|
+
// said one, else what the runtime would assume from the name, so the
|
|
231
|
+
// field can show it as a placeholder instead of a blank.
|
|
232
|
+
const reported = reportedWindow(reportedContextWindows, row.defaultModel);
|
|
233
|
+
return {
|
|
234
|
+
...row, configured: this.#configured.get(row.id) ?? false,
|
|
235
|
+
detectedContextWindowTokens: reported ?? contextWindowTokens(row.defaultModel, row.kind === 'codex' ? 'openai' : row.kind),
|
|
236
|
+
detectedContextWindowSource: (reported ? 'provider' : 'table'),
|
|
237
|
+
removalPending: deleting,
|
|
238
|
+
refreshable: row.kind === 'codex' || row.auth === 'anthropic-oauth', tokenExpiresAt: null, subscriptionRenewsAt: null,
|
|
239
|
+
...(row.auth === 'anthropic-oauth' ? { ...this.#tokenInfo.get(row.id), login: this.anthropic?.view(row.id, row.revision, ownerSession) ?? null } : {}),
|
|
240
|
+
...(row.kind === 'codex' ? { ...this.#tokenInfo.get(row.id), login: this.codex?.view(row.id) ?? null } : {}),
|
|
241
|
+
...(row.auth === 'device-key' ? { device: this.#devices.get(row.id) ?? null, login: this.ollama?.view(row.id, row.revision, ownerSession) ?? null } : {}),
|
|
242
|
+
assignedAgents: [...this.#bindings.values()].filter(b => b.accountId === row.id).map(b => b.agentId),
|
|
243
|
+
test: this.#tests.get(row.id) ?? null,
|
|
244
|
+
};
|
|
245
|
+
}),
|
|
215
246
|
bindings: [...this.#bindings.values()],
|
|
216
247
|
};
|
|
217
248
|
}
|
|
@@ -242,7 +273,7 @@ export class ProviderAccounts {
|
|
|
242
273
|
let value;
|
|
243
274
|
if (row.kind === 'codex') {
|
|
244
275
|
if (!this.codex)
|
|
245
|
-
throw new ProviderAccountError(409,
|
|
276
|
+
throw new ProviderAccountError(409, SIGNIN_HIDDEN.codex);
|
|
246
277
|
const lease = await this.#codexAccess(row);
|
|
247
278
|
try {
|
|
248
279
|
value = await this.codex.models(lease.access);
|
|
@@ -261,6 +292,7 @@ export class ProviderAccounts {
|
|
|
261
292
|
if (current.revision !== row.revision || !current.enabled || current.deleting)
|
|
262
293
|
throw new ProviderAccountError(409, 'Account changed. Refresh models again.');
|
|
263
294
|
this.#modelLists.set(id, { revision: row.revision, until: Date.now() + 60_000, value });
|
|
295
|
+
await this.#rememberWindows(current, value).catch(() => { });
|
|
264
296
|
return value;
|
|
265
297
|
}
|
|
266
298
|
catch (error) {
|
|
@@ -276,6 +308,32 @@ export class ProviderAccounts {
|
|
|
276
308
|
this.#modelRequests.set(key, pending);
|
|
277
309
|
return pending;
|
|
278
310
|
}
|
|
311
|
+
/**
|
|
312
|
+
* Keep the windows the provider's own model list reported, merged over what
|
|
313
|
+
* earlier fetches said, so the account page and the transcript budget can
|
|
314
|
+
* use the provider's number instead of a guess from the model name.
|
|
315
|
+
*/
|
|
316
|
+
async #rememberWindows(row, list) {
|
|
317
|
+
const found = list.models.filter(m => typeof m.contextWindow === 'number');
|
|
318
|
+
if (!found.length)
|
|
319
|
+
return;
|
|
320
|
+
const merged = new Map();
|
|
321
|
+
for (const [model, tokens] of Object.entries(row.reportedContextWindows ?? {})) {
|
|
322
|
+
if (typeof tokens === 'number' && Number.isFinite(tokens))
|
|
323
|
+
merged.set(model, tokens);
|
|
324
|
+
}
|
|
325
|
+
// Fresh entries go last, so the cap drops the oldest.
|
|
326
|
+
for (const m of found) {
|
|
327
|
+
merged.delete(m.id);
|
|
328
|
+
merged.set(m.id, m.contextWindow);
|
|
329
|
+
}
|
|
330
|
+
const entries = [...merged.entries()];
|
|
331
|
+
const capped = Object.fromEntries(entries.slice(Math.max(0, entries.length - REPORTED_WINDOWS_MAX)));
|
|
332
|
+
const { rows } = await this.deps.pool.query(`update core.provider_accounts set reported_context_windows=$2::jsonb where id=$1 returning reported_context_windows as "reportedContextWindows"`, [row.id, JSON.stringify(capped)]);
|
|
333
|
+
const live = this.#rows.get(row.id);
|
|
334
|
+
if (rows[0] && live)
|
|
335
|
+
this.#rows.set(row.id, { ...live, reportedContextWindows: rows[0].reportedContextWindows });
|
|
336
|
+
}
|
|
279
337
|
/**
|
|
280
338
|
* List the models a credential can reach, before anything is saved.
|
|
281
339
|
*
|
|
@@ -311,13 +369,23 @@ export class ProviderAccounts {
|
|
|
311
369
|
const input = parsed.data;
|
|
312
370
|
if ((input.kind === 'codex') !== (input.auth === 'chatgpt'))
|
|
313
371
|
throw new ProviderAccountError(400, 'Codex accounts require ChatGPT subscription sign-in.');
|
|
314
|
-
if (input.kind === 'codex' &&
|
|
315
|
-
throw new ProviderAccountError(400,
|
|
372
|
+
if (input.kind === 'codex' && !this.codex)
|
|
373
|
+
throw new ProviderAccountError(400, SIGNIN_HIDDEN.codex);
|
|
374
|
+
if (input.kind === 'codex' && input.secret)
|
|
375
|
+
throw new ProviderAccountError(400, 'ChatGPT accounts use device sign-in, not a pasted token.');
|
|
316
376
|
if (input.auth === 'anthropic-oauth' && (input.kind !== 'anthropic' || input.secret))
|
|
317
377
|
throw new ProviderAccountError(400, 'Claude OAuth requires an Anthropic account and browser sign-in, not a pasted token.');
|
|
378
|
+
if (input.auth === 'device-key') {
|
|
379
|
+
if (input.kind !== 'openai-compatible' || input.secret)
|
|
380
|
+
throw new ProviderAccountError(400, 'An Ollama device key is made by buddi and connected on ollama.com, not pasted.');
|
|
381
|
+
if (input.baseUrl && input.baseUrl.replace(/\/+$/, '') !== OLLAMA_CLOUD_ACCOUNT_URL)
|
|
382
|
+
throw new ProviderAccountError(400, 'A device key only connects to Ollama Cloud. Use a key for another address.');
|
|
383
|
+
if (!this.ollama)
|
|
384
|
+
throw new ProviderAccountError(409, 'Configure a credential vault on the host first.');
|
|
385
|
+
}
|
|
318
386
|
const old = input.id ? await this.#row(input.id) : undefined;
|
|
319
387
|
if (input.auth === 'anthropic-oauth' && !old && !this.anthropicOAuthEnabled)
|
|
320
|
-
throw new ProviderAccountError(400,
|
|
388
|
+
throw new ProviderAccountError(400, SIGNIN_HIDDEN.claude);
|
|
321
389
|
if (old?.deleting)
|
|
322
390
|
throw new ProviderAccountError(409, 'Removal is pending. Unlock the vault and finish removing this account.');
|
|
323
391
|
if (old && input.revision !== old.revision)
|
|
@@ -332,7 +400,7 @@ export class ProviderAccounts {
|
|
|
332
400
|
throw new ProviderAccountError(400, 'Credential cannot contain control characters.');
|
|
333
401
|
let baseUrl;
|
|
334
402
|
try {
|
|
335
|
-
baseUrl = accountBaseUrl(input.kind, input.baseUrl);
|
|
403
|
+
baseUrl = accountBaseUrl(input.kind, input.auth === 'device-key' ? OLLAMA_CLOUD_ACCOUNT_URL : input.baseUrl);
|
|
336
404
|
}
|
|
337
405
|
catch (e) {
|
|
338
406
|
throw new ProviderAccountError(400, e.message);
|
|
@@ -352,7 +420,8 @@ export class ProviderAccounts {
|
|
|
352
420
|
try {
|
|
353
421
|
if (old?.auth === 'anthropic-oauth')
|
|
354
422
|
this.anthropic?.forget(id);
|
|
355
|
-
let secretRef = old?.secretRef ?? (input.auth === 'anthropic-oauth' ? `ANTHROPIC_ACCOUNT_${randomUUID().replaceAll('-', '_')}` : input.kind === 'codex' ? `CODEX_ACCOUNT_${randomUUID().replaceAll('-', '_')}`
|
|
423
|
+
let secretRef = old?.secretRef ?? (input.auth === 'anthropic-oauth' ? `ANTHROPIC_ACCOUNT_${randomUUID().replaceAll('-', '_')}` : input.kind === 'codex' ? `CODEX_ACCOUNT_${randomUUID().replaceAll('-', '_')}`
|
|
424
|
+
: input.auth === 'device-key' ? `OLLAMA_DEVICE_${randomUUID().replaceAll('-', '_')}` : null);
|
|
356
425
|
if (input.secret) {
|
|
357
426
|
if (!this.vault)
|
|
358
427
|
throw new ProviderAccountError(409, 'Configure a credential vault on the host first.');
|
|
@@ -446,6 +515,7 @@ export class ProviderAccounts {
|
|
|
446
515
|
const oauthLease = row.auth === 'anthropic-oauth' ? await this.#anthropicAccess(row, false) : undefined;
|
|
447
516
|
try {
|
|
448
517
|
this.anthropic?.forget(id);
|
|
518
|
+
this.ollama?.forget(id);
|
|
449
519
|
// A tombstone prevents reactivation even if vault deletion is denied.
|
|
450
520
|
const disabled = await this.deps.pool.query(`update core.provider_accounts set enabled=false,deleting=true,revision=revision+1
|
|
451
521
|
where id=$1 and revision=$2 returning id`, [id, revision]);
|
|
@@ -479,14 +549,16 @@ export class ProviderAccounts {
|
|
|
479
549
|
if (!snapshot)
|
|
480
550
|
throw new ProviderAccountError(409, 'Provider account is no longer available.');
|
|
481
551
|
return {
|
|
482
|
-
|
|
552
|
+
// A ChatGPT account speaks the Responses API, whose row matches OpenAI's:
|
|
553
|
+
// parallel tool calls, usage reported, no native search, no documents.
|
|
554
|
+
capabilities: providerCapabilities(accountProtocol(snapshot.kind)),
|
|
483
555
|
complete: async (request) => {
|
|
484
556
|
const row = await this.#row(id);
|
|
485
557
|
if (row.revision !== snapshot.revision)
|
|
486
558
|
throw new ProviderAccountError(409, 'Provider account settings changed during this run. Send a new message to continue with the updated account.');
|
|
487
559
|
if (row.kind === 'codex') {
|
|
488
560
|
if (!this.codex)
|
|
489
|
-
throw new ProviderAccountError(409,
|
|
561
|
+
throw new ProviderAccountError(409, SIGNIN_HIDDEN.codex);
|
|
490
562
|
const lease = await this.#codexCompletionAccess(row, request.signal);
|
|
491
563
|
try {
|
|
492
564
|
return await this.codex.complete(lease.access, ref.model, request);
|
|
@@ -507,7 +579,7 @@ export class ProviderAccounts {
|
|
|
507
579
|
try {
|
|
508
580
|
const row = await this.#row(id);
|
|
509
581
|
if (row.kind === 'codex')
|
|
510
|
-
throw new ProviderAccountError(400, '
|
|
582
|
+
throw new ProviderAccountError(400, 'A ChatGPT subscription has no output-token cap for a connection test. Connect and send a test chat instead.');
|
|
511
583
|
let diagnostic = { state: 'connected', message: 'Connection succeeded.', httpStatus: null, retryAt: null };
|
|
512
584
|
try {
|
|
513
585
|
const resolved = resolveProviderAccount(row, row.defaultModel, await this.#usableSecret(row));
|
|
@@ -553,7 +625,7 @@ export class ProviderAccounts {
|
|
|
553
625
|
if (row.kind !== 'codex')
|
|
554
626
|
throw new ProviderAccountError(400, 'This is not a Codex account.');
|
|
555
627
|
if (!this.codex)
|
|
556
|
-
throw new ProviderAccountError(409,
|
|
628
|
+
throw new ProviderAccountError(409, SIGNIN_HIDDEN.codex);
|
|
557
629
|
if (!row.enabled || row.deleting)
|
|
558
630
|
throw new ProviderAccountError(409, `Provider account “${row.label}” is disabled.`);
|
|
559
631
|
const lease = await this.#codexCompletionAccess(row, signal);
|
|
@@ -571,9 +643,27 @@ export class ProviderAccounts {
|
|
|
571
643
|
await this.#codexReleased.get(id);
|
|
572
644
|
}
|
|
573
645
|
async #usableSecret(row, signal) {
|
|
646
|
+
if (row.auth === 'device-key') {
|
|
647
|
+
if (!this.ollama || !row.secretRef)
|
|
648
|
+
throw new ProviderAccountError(409, 'Configure a credential vault on the host first.');
|
|
649
|
+
try {
|
|
650
|
+
return await this.ollama.credential(row.secretRef);
|
|
651
|
+
}
|
|
652
|
+
catch (error) {
|
|
653
|
+
// Never propagate vault errors, which may carry key material.
|
|
654
|
+
throw new ProviderAccountError(409, error instanceof Error && /^(Connect this Ollama|Invalid Ollama device key|The credential vault)/.test(error.message)
|
|
655
|
+
? error.message : 'Could not read the Ollama device key. Check the vault and connect again.');
|
|
656
|
+
}
|
|
657
|
+
}
|
|
574
658
|
if (row.auth !== 'anthropic-oauth') {
|
|
575
659
|
if (row.auth === 'none' || row.secretRef === null)
|
|
576
660
|
return this.#secret(row);
|
|
661
|
+
// A legacy account names buddi's own key (`CLAUDE_CODE_OAUTH_TOKEN`,
|
|
662
|
+
// `OPENAI_API_KEY`), which is not an owner secret and never will be until
|
|
663
|
+
// the owner replaces it. Asking owner secrets for it would only write a
|
|
664
|
+
// refusal to the use log on every reload; the raw vault answers directly.
|
|
665
|
+
if (row.legacyEnv !== null)
|
|
666
|
+
return this.#secret(row);
|
|
577
667
|
/*
|
|
578
668
|
* The run path reads the credential through the owner secrets area
|
|
579
669
|
* (owner-secrets §7): the binding found and the rule applied, the use
|
|
@@ -604,7 +694,7 @@ export class ProviderAccounts {
|
|
|
604
694
|
throw new ProviderAccountError(409, result.refused);
|
|
605
695
|
}
|
|
606
696
|
if (!this.anthropicOAuthEnabled)
|
|
607
|
-
throw new ProviderAccountError(409,
|
|
697
|
+
throw new ProviderAccountError(409, SIGNIN_HIDDEN.claude);
|
|
608
698
|
const lease = await this.#anthropicAccess(row, true, signal);
|
|
609
699
|
try {
|
|
610
700
|
return await this.anthropic.credential(row.secretRef);
|
|
@@ -660,7 +750,7 @@ export class ProviderAccounts {
|
|
|
660
750
|
if (!owner || row.auth !== 'anthropic-oauth' || row.revision !== body.revision)
|
|
661
751
|
throw new ProviderAccountError(409, 'Account changed. Refresh before continuing.');
|
|
662
752
|
if ((action === 'login' || action === 'complete-login') && !this.anthropicOAuthEnabled)
|
|
663
|
-
throw new ProviderAccountError(409,
|
|
753
|
+
throw new ProviderAccountError(409, SIGNIN_HIDDEN.claude);
|
|
664
754
|
const lease = await this.#anthropicAccess(row, action === 'login' || action === 'complete-login');
|
|
665
755
|
try {
|
|
666
756
|
if (action === 'complete-login') {
|
|
@@ -696,6 +786,75 @@ export class ProviderAccounts {
|
|
|
696
786
|
}
|
|
697
787
|
});
|
|
698
788
|
}
|
|
789
|
+
/**
|
|
790
|
+
* Ollama Cloud with a device key: `connect` makes a key pair in the vault and
|
|
791
|
+
* answers with the page to press Connect on; `poll` asks ollama.com once
|
|
792
|
+
* whether that happened; `disconnect` removes the key from the vault. The
|
|
793
|
+
* device stays listed on ollama.com until the owner removes it there.
|
|
794
|
+
*/
|
|
795
|
+
ollamaAction(id, action, body, owner) {
|
|
796
|
+
return this.#serial(async () => {
|
|
797
|
+
const row = await this.#row(id);
|
|
798
|
+
if (!owner || row.auth !== 'device-key' || !row.secretRef)
|
|
799
|
+
throw new ProviderAccountError(409, 'This is not an Ollama Cloud account connected with a device key.');
|
|
800
|
+
if (!this.ollama)
|
|
801
|
+
throw new ProviderAccountError(409, 'Configure a credential vault on the host first.');
|
|
802
|
+
if (row.deleting)
|
|
803
|
+
throw new ProviderAccountError(409, 'Removal is pending. Unlock the vault and finish removing this account.');
|
|
804
|
+
if (action === 'poll') {
|
|
805
|
+
if (typeof body.attemptId !== 'string')
|
|
806
|
+
throw new ProviderAccountError(400, 'Connect first.');
|
|
807
|
+
let answer;
|
|
808
|
+
try {
|
|
809
|
+
answer = await this.ollama.poll(id, row.revision, owner, body.attemptId, row.secretRef);
|
|
810
|
+
}
|
|
811
|
+
catch (error) {
|
|
812
|
+
throw new ProviderAccountError(409, error.message);
|
|
813
|
+
}
|
|
814
|
+
if (answer.state === 'connected') {
|
|
815
|
+
this.#modelLists.delete(id);
|
|
816
|
+
this.#tests.delete(id);
|
|
817
|
+
await this.load();
|
|
818
|
+
}
|
|
819
|
+
return answer;
|
|
820
|
+
}
|
|
821
|
+
if (row.revision !== body.revision)
|
|
822
|
+
throw new ProviderAccountError(409, 'Account changed. Refresh before continuing.');
|
|
823
|
+
if (action === 'connect' && !row.enabled)
|
|
824
|
+
throw new ProviderAccountError(409, 'Enable this account before connecting it.');
|
|
825
|
+
this.ollama.forget(id);
|
|
826
|
+
let unpaired = false;
|
|
827
|
+
if (action === 'disconnect') {
|
|
828
|
+
unpaired = await this.ollama.unpair(row.secretRef);
|
|
829
|
+
try {
|
|
830
|
+
await deleteAccountSecret(this.deps.pool, this.vault, row.secretRef);
|
|
831
|
+
}
|
|
832
|
+
catch {
|
|
833
|
+
throw new ProviderAccountError(409, 'Could not remove the Ollama device key. Unlock the vault and retry.');
|
|
834
|
+
}
|
|
835
|
+
}
|
|
836
|
+
// A new key, or none: runs that started on the old one stop at their next call.
|
|
837
|
+
await this.deps.pool.query('update core.provider_accounts set revision=revision+1,updated_at=now() where id=$1', [id]);
|
|
838
|
+
this.#modelLists.delete(id);
|
|
839
|
+
this.#tests.delete(id);
|
|
840
|
+
if (action === 'disconnect') {
|
|
841
|
+
await this.load();
|
|
842
|
+
return { removed: true, unpaired, note: unpaired
|
|
843
|
+
? 'Disconnected. The key is gone from buddi, and ollama.com no longer lists this device.'
|
|
844
|
+
: 'Disconnected. The key is gone from buddi. ollama.com did not confirm it forgot this device; if it is still listed in your ollama.com settings, remove it there.' };
|
|
845
|
+
}
|
|
846
|
+
let started;
|
|
847
|
+
try {
|
|
848
|
+
started = await this.ollama.start(id, row.revision + 1, owner, row.secretRef);
|
|
849
|
+
}
|
|
850
|
+
catch (error) {
|
|
851
|
+
await this.load();
|
|
852
|
+
throw new ProviderAccountError(409, error.message);
|
|
853
|
+
}
|
|
854
|
+
await this.load();
|
|
855
|
+
return started;
|
|
856
|
+
});
|
|
857
|
+
}
|
|
699
858
|
async #codexCompletionAccess(row, signal) {
|
|
700
859
|
const deadline = Date.now() + 120_000;
|
|
701
860
|
while (true) {
|
|
@@ -758,7 +917,7 @@ export class ProviderAccounts {
|
|
|
758
917
|
return this.#serial(async () => {
|
|
759
918
|
const row = await this.#row(id);
|
|
760
919
|
if (!this.codex || row.kind !== 'codex' || !row.secretRef)
|
|
761
|
-
throw new ProviderAccountError(409, 'Codex
|
|
920
|
+
throw new ProviderAccountError(409, 'Codex account is unavailable.');
|
|
762
921
|
if (revision !== row.revision)
|
|
763
922
|
throw new ProviderAccountError(409, 'Account changed. Refresh before continuing.');
|
|
764
923
|
if (action === 'cancel-login') {
|
|
@@ -782,12 +941,19 @@ export class ProviderAccounts {
|
|
|
782
941
|
const lease = await this.#codexAccess(row);
|
|
783
942
|
try {
|
|
784
943
|
const started = await this.codex.login(lease.access);
|
|
785
|
-
void started.finished.then(() => lease.release()).
|
|
944
|
+
void started.finished.then(() => lease.release()).then(() => {
|
|
945
|
+
if (this.codex?.view(id)?.state !== 'connected')
|
|
946
|
+
return;
|
|
947
|
+
// Fill the provider's windows now, not when the owner next opens the picker.
|
|
948
|
+
this.#modelLists.delete(id);
|
|
949
|
+
void this.models(id, true).catch(() => { });
|
|
950
|
+
}).catch(() => { });
|
|
786
951
|
return started.view;
|
|
787
952
|
}
|
|
788
953
|
catch {
|
|
789
954
|
await lease.release();
|
|
790
|
-
|
|
955
|
+
const view = this.codex.view(id);
|
|
956
|
+
throw new ProviderAccountError(409, view?.state === 'failed' && view.message ? view.message : 'Could not start ChatGPT sign-in. Check the host vault and try again.');
|
|
791
957
|
}
|
|
792
958
|
});
|
|
793
959
|
}
|