@db3.ai/app 0.1.0-beta.1 → 0.1.0
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 +75 -17
- package/agent-instructions.md +76 -0
- package/dist/ai/AIErrors.d.ts +7 -1
- package/dist/ai/AIErrors.js +8 -1
- package/dist/ai/AIFailover.d.ts +10 -0
- package/dist/ai/AIFailover.js +3 -2
- package/dist/ai/AIProviderAdmission.d.ts +101 -0
- package/dist/ai/AIProviderAdmission.js +336 -0
- package/dist/ai/AIRateLimiter.d.ts +11 -2
- package/dist/ai/AIRateLimiter.js +125 -10
- package/dist/ai/AIRequestTrackingError.d.ts +22 -0
- package/dist/ai/AIRequestTrackingError.js +33 -0
- package/dist/ai/Agent.d.ts +7 -7
- package/dist/ai/Agent.js +84 -56
- package/dist/ai/Ai.d.ts +11 -3
- package/dist/ai/Ai.js +94 -44
- package/dist/ai/OpenAIProviderError.js +1 -1
- package/dist/ai/ProviderSseObserver.d.ts +19 -0
- package/dist/ai/ProviderSseObserver.js +98 -0
- package/dist/ai/aiServiceTier.d.ts +5 -0
- package/dist/ai/aiServiceTier.js +14 -0
- package/dist/ai/chunkEmbeddingText.d.ts +14 -0
- package/dist/ai/chunkEmbeddingText.js +147 -0
- package/dist/ai/contracts/AI.d.ts +16 -0
- package/dist/ai/contracts/AIRequestErrorDiagnostics.d.ts +12 -0
- package/dist/ai/contracts/AIRequestErrorDiagnostics.js +1 -0
- package/dist/ai/contracts/AIServiceTier.d.ts +2 -0
- package/dist/ai/contracts/AIServiceTier.js +1 -0
- package/dist/ai/contracts/Agent.d.ts +3 -0
- package/dist/ai/contracts/EmbeddingTextChunk.d.ts +25 -0
- package/dist/ai/contracts/EmbeddingTextChunk.js +1 -0
- package/dist/ai/contracts/Pricing.d.ts +7 -1
- package/dist/ai/contracts/Providers.d.ts +2 -0
- package/dist/ai/contracts/index.d.ts +2 -0
- package/dist/ai/contracts/index.js +1 -0
- package/dist/ai/index.d.ts +8 -2
- package/dist/ai/index.js +5 -2
- package/dist/ai/{Models.d.ts → modelPricing.d.ts} +2 -2
- package/dist/ai/{Models.js → modelPricing.js} +38 -4
- package/dist/apps/AppInstallation.d.ts +21 -0
- package/dist/apps/AppInstallation.js +16 -0
- package/dist/apps/AppRouteError.d.ts +6 -0
- package/dist/apps/AppRouteError.js +10 -0
- package/dist/apps/AppService.d.ts +24 -0
- package/dist/apps/AppService.js +21 -0
- package/dist/apps/Apps.d.ts +59 -0
- package/dist/apps/Apps.js +566 -0
- package/dist/apps/appsPlugin.d.ts +3 -0
- package/dist/apps/appsPlugin.js +36 -0
- package/dist/apps/commands/disableApp.d.ts +2 -0
- package/dist/apps/commands/disableApp.js +5 -0
- package/dist/apps/commands/enableApp.d.ts +2 -0
- package/dist/apps/commands/enableApp.js +5 -0
- package/dist/apps/commands/index.d.ts +10 -0
- package/dist/apps/commands/index.js +27 -0
- package/dist/apps/commands/installApp.d.ts +2 -0
- package/dist/apps/commands/installApp.js +5 -0
- package/dist/apps/commands/listApps.d.ts +2 -0
- package/dist/apps/commands/listApps.js +5 -0
- package/dist/apps/commands/makeAppMigration.d.ts +2 -0
- package/dist/apps/commands/makeAppMigration.js +9 -0
- package/dist/apps/commands/rollbackApp.d.ts +2 -0
- package/dist/apps/commands/rollbackApp.js +5 -0
- package/dist/apps/commands/uninstallApp.d.ts +2 -0
- package/dist/apps/commands/uninstallApp.js +5 -0
- package/dist/apps/contracts/AppAction.d.ts +2 -0
- package/dist/apps/contracts/AppAction.js +1 -0
- package/dist/apps/contracts/AppDefinition.d.ts +45 -0
- package/dist/apps/contracts/AppDefinition.js +1 -0
- package/dist/apps/contracts/AppDescription.d.ts +32 -0
- package/dist/apps/contracts/AppDescription.js +1 -0
- package/dist/apps/contracts/AppManifest.d.ts +30 -0
- package/dist/apps/contracts/AppManifest.js +1 -0
- package/dist/apps/contracts/AppNavigation.d.ts +9 -0
- package/dist/apps/contracts/AppNavigation.js +1 -0
- package/dist/apps/contracts/AppNavigationBadge.d.ts +6 -0
- package/dist/apps/contracts/AppNavigationBadge.js +1 -0
- package/dist/apps/contracts/AppNavigationContext.d.ts +8 -0
- package/dist/apps/contracts/AppNavigationContext.js +1 -0
- package/dist/apps/contracts/AppNavigationResult.d.ts +12 -0
- package/dist/apps/contracts/AppNavigationResult.js +1 -0
- package/dist/apps/contracts/AppRoute.d.ts +19 -0
- package/dist/apps/contracts/AppRoute.js +1 -0
- package/dist/apps/contracts/DiscoveredApp.d.ts +10 -0
- package/dist/apps/contracts/DiscoveredApp.js +1 -0
- package/dist/apps/contracts/InstalledApps.d.ts +3 -0
- package/dist/apps/contracts/InstalledApps.js +1 -0
- package/dist/apps/contracts/index.d.ts +11 -0
- package/dist/apps/contracts/index.js +1 -0
- package/dist/apps/defineApp.d.ts +7 -0
- package/dist/apps/defineApp.js +8 -0
- package/dist/apps/discoverApps.d.ts +3 -0
- package/dist/apps/discoverApps.js +62 -0
- package/dist/apps/fastify.d.ts +1 -0
- package/dist/apps/fastify.js +1 -0
- package/dist/apps/index.d.ts +7 -0
- package/dist/apps/index.js +7 -0
- package/dist/apps/normalizeAppNavigation.d.ts +3 -0
- package/dist/apps/normalizeAppNavigation.js +30 -0
- package/dist/apps/registerAppRoutes.d.ts +6 -0
- package/dist/apps/registerAppRoutes.js +52 -0
- package/dist/apps/validateAppDefinitions.d.ts +3 -0
- package/dist/apps/validateAppDefinitions.js +65 -0
- package/dist/apps/vite.d.ts +1 -0
- package/dist/apps/vite.js +1 -0
- package/dist/apps/writeAppTypes.d.ts +2 -0
- package/dist/apps/writeAppTypes.js +13 -0
- package/dist/auth/Auth.d.ts +18 -0
- package/dist/auth/Auth.js +89 -13
- package/dist/auth/PasswordLoginAttempt.d.ts +50 -0
- package/dist/auth/PasswordLoginAttempt.js +60 -0
- package/dist/auth/PasswordSuspendedError.d.ts +10 -0
- package/dist/auth/PasswordSuspendedError.js +13 -0
- package/dist/auth/contracts/PasswordAuthProviderOptions.d.ts +26 -0
- package/dist/auth/contracts/PasswordAuthProviderOptions.js +1 -0
- package/dist/auth/contracts/PasswordSuspension.d.ts +7 -0
- package/dist/auth/contracts/PasswordSuspension.js +1 -0
- package/dist/auth/contracts/PasswordSuspensionOptions.d.ts +10 -0
- package/dist/auth/contracts/PasswordSuspensionOptions.js +1 -0
- package/dist/auth/contracts/index.d.ts +3 -0
- package/dist/auth/contracts/index.js +3 -0
- package/dist/auth/index.d.ts +2 -0
- package/dist/auth/index.js +2 -0
- package/dist/auth/providers/PasswordAuthProvider.d.ts +19 -23
- package/dist/auth/providers/PasswordAuthProvider.js +96 -8
- package/dist/auth/providers/resolveAuthProviders.js +1 -0
- package/dist/cli/Cli.d.ts +2 -0
- package/dist/cli/Cli.js +8 -0
- package/dist/cli/commands/repl.js +2 -1
- package/dist/cli/contracts/CliCommand.d.ts +2 -0
- package/dist/cli/contracts/CliCommandInfo.d.ts +12 -0
- package/dist/cli/contracts/CliCommandInfo.js +1 -0
- package/dist/cli/contracts/index.d.ts +1 -0
- package/dist/cli/index.d.ts +1 -0
- package/dist/cli/index.js +1 -0
- package/dist/cli/listDb3Commands.d.ts +8 -0
- package/dist/cli/listDb3Commands.js +10 -0
- package/dist/cli/runDb3.d.ts +3 -6
- package/dist/cli/runDb3.js +5 -59
- package/dist/cli/withDb3Cli.d.ts +4 -0
- package/dist/cli/withDb3Cli.js +60 -0
- package/dist/db/ActiveQueryBuilder.d.ts +8 -0
- package/dist/db/ActiveQueryBuilder.js +11 -0
- package/dist/db/ActiveRecord.d.ts +6 -0
- package/dist/db/ActiveRecord.js +8 -0
- package/dist/db/connection.js +14 -2
- package/dist/db/fields/TimestampField.d.ts +1 -1
- package/dist/db/fields/TimestampField.js +7 -12
- package/dist/db/migrations/DatabaseMigrationManager.d.ts +3 -1
- package/dist/db/migrations/DatabaseMigrationManager.js +9 -3
- package/dist/db/migrations/contracts/DatabaseMigration.d.ts +7 -0
- package/dist/db/migrations/index.d.ts +1 -1
- package/dist/db/migrations/index.js +1 -1
- package/dist/db/migrations/{KnexMigrationRenderer.d.ts → renderKnexMigration.d.ts} +4 -3
- package/dist/db/migrations/{KnexMigrationRenderer.js → renderKnexMigration.js} +7 -6
- package/dist/flows/FlowCompiler.js +1 -1
- package/dist/flows/Flows.js +1 -1
- package/dist/flows/index.d.ts +1 -1
- package/dist/flows/index.js +1 -1
- package/dist/health/Health.d.ts +41 -0
- package/dist/health/Health.js +153 -0
- package/dist/health/contracts/Health.d.ts +36 -0
- package/dist/health/contracts/Health.js +1 -0
- package/dist/health/contracts/HealthHttp.d.ts +15 -0
- package/dist/health/contracts/HealthHttp.js +1 -0
- package/dist/health/contracts/index.d.ts +2 -0
- package/dist/health/contracts/index.js +1 -0
- package/dist/health/databaseHealthCheck.d.ts +15 -0
- package/dist/health/databaseHealthCheck.js +18 -0
- package/dist/health/fastify.d.ts +13 -0
- package/dist/health/fastify.js +44 -0
- package/dist/health/index.d.ts +3 -0
- package/dist/health/index.js +2 -0
- package/dist/in-app/InApp.d.ts +33 -0
- package/dist/in-app/InApp.js +191 -0
- package/dist/in-app/InAppError.d.ts +6 -0
- package/dist/in-app/InAppError.js +10 -0
- package/dist/in-app/InAppRecord.d.ts +36 -0
- package/dist/in-app/InAppRecord.js +24 -0
- package/dist/in-app/contracts/InAppInbox.d.ts +45 -0
- package/dist/in-app/contracts/InAppInbox.js +1 -0
- package/dist/in-app/contracts/InAppMessage.d.ts +22 -0
- package/dist/in-app/contracts/InAppMessage.js +1 -0
- package/dist/in-app/contracts/InAppScope.d.ts +17 -0
- package/dist/in-app/contracts/InAppScope.js +1 -0
- package/dist/in-app/contracts/index.d.ts +3 -0
- package/dist/in-app/contracts/index.js +3 -0
- package/dist/in-app/index.d.ts +4 -0
- package/dist/in-app/index.js +4 -0
- package/dist/in-app/validation.d.ts +21 -0
- package/dist/in-app/validation.js +50 -0
- package/dist/index.d.ts +2 -14
- package/dist/index.js +2 -5
- package/dist/logging/DevelopmentConsole.d.ts +42 -0
- package/dist/logging/DevelopmentConsole.js +162 -0
- package/dist/logging/Log.d.ts +3 -1
- package/dist/logging/Log.js +5 -2
- package/dist/logging/PrettyLogFormatter.d.ts +16 -0
- package/dist/logging/PrettyLogFormatter.js +151 -0
- package/dist/logging/acquireDevelopmentConsole.d.ts +6 -0
- package/dist/logging/acquireDevelopmentConsole.js +21 -0
- package/dist/logging/contracts/DevelopmentConsoleOptions.d.ts +16 -0
- package/dist/logging/contracts/DevelopmentConsoleOptions.js +1 -0
- package/dist/logging/contracts/EmailLogOptions.d.ts +8 -0
- package/dist/logging/contracts/EmailLogOptions.js +1 -0
- package/dist/logging/contracts/HttpExchangeMonitorOptions.d.ts +12 -0
- package/dist/logging/contracts/HttpExchangeMonitorOptions.js +1 -0
- package/dist/logging/contracts/LogTransportOptions.d.ts +19 -0
- package/dist/logging/contracts/LogTransportOptions.js +1 -0
- package/dist/logging/contracts/LoggingOptions.d.ts +12 -1
- package/dist/logging/contracts/index.d.ts +4 -0
- package/dist/logging/contracts/index.js +4 -0
- package/dist/logging/drivers/PinoLoggerDriver.d.ts +3 -1
- package/dist/logging/drivers/PinoLoggerDriver.js +75 -16
- package/dist/logging/formatLogEmail.d.ts +4 -0
- package/dist/logging/formatLogEmail.js +21 -0
- package/dist/logging/highlightQueueMessage.d.ts +11 -0
- package/dist/logging/highlightQueueMessage.js +36 -0
- package/dist/logging/httpBodyCapture.d.ts +24 -0
- package/dist/logging/httpBodyCapture.js +321 -0
- package/dist/logging/index.d.ts +2 -0
- package/dist/logging/index.js +2 -0
- package/dist/logging/redactLogEmail.d.ts +2 -0
- package/dist/logging/redactLogEmail.js +12 -0
- package/dist/logging/registerHttpExchangeMonitor.d.ts +10 -0
- package/dist/logging/registerHttpExchangeMonitor.js +43 -0
- package/dist/logging/transports/EmailLogTransport.d.ts +18 -0
- package/dist/logging/transports/EmailLogTransport.js +47 -0
- package/dist/mail/Mail.d.ts +2 -0
- package/dist/mail/Mail.js +3 -0
- package/dist/mail/MailDeliveryError.d.ts +9 -0
- package/dist/mail/MailDeliveryError.js +16 -0
- package/dist/mail/index.d.ts +1 -0
- package/dist/mail/index.js +1 -0
- package/dist/mail/transports/MailgunTransport.js +2 -0
- package/dist/mail/transports/ResendTransport.d.ts +3 -2
- package/dist/mail/transports/ResendTransport.js +22 -14
- package/dist/media/MediaManager.d.ts +4 -2
- package/dist/media/MediaManager.js +40 -8
- package/dist/network/BlockedUrlError.d.ts +16 -0
- package/dist/network/BlockedUrlError.js +19 -0
- package/dist/network/assertPublicUrl.d.ts +22 -0
- package/dist/network/assertPublicUrl.js +67 -0
- package/dist/network/contracts/GuardedFetch.d.ts +35 -0
- package/dist/network/contracts/GuardedFetch.js +1 -0
- package/dist/network/contracts/PublicUrlOptions.d.ts +17 -0
- package/dist/network/contracts/PublicUrlOptions.js +1 -0
- package/dist/network/contracts/index.d.ts +2 -0
- package/dist/network/contracts/index.js +2 -0
- package/dist/network/guardedFetch.d.ts +29 -0
- package/dist/network/guardedFetch.js +133 -0
- package/dist/network/index.d.ts +6 -0
- package/dist/network/index.js +6 -0
- package/dist/network/playwright/GuardedBrowserProxy.d.ts +32 -0
- package/dist/network/playwright/GuardedBrowserProxy.js +172 -0
- package/dist/network/playwright/contracts/GuardedBrowserContextOptions.d.ts +37 -0
- package/dist/network/playwright/contracts/GuardedBrowserContextOptions.js +1 -0
- package/dist/network/playwright/contracts/index.d.ts +1 -0
- package/dist/network/playwright/contracts/index.js +1 -0
- package/dist/network/playwright/index.d.ts +2 -0
- package/dist/network/playwright/index.js +2 -0
- package/dist/network/playwright/newGuardedBrowserContext.d.ts +21 -0
- package/dist/network/playwright/newGuardedBrowserContext.js +86 -0
- package/dist/network/privateNetworkAddresses.d.ts +44 -0
- package/dist/network/privateNetworkAddresses.js +157 -0
- package/dist/network/publicAddressLookup.d.ts +26 -0
- package/dist/network/publicAddressLookup.js +42 -0
- package/dist/notifications/Notifications.d.ts +27 -0
- package/dist/notifications/Notifications.js +99 -0
- package/dist/notifications/contracts/Notification.d.ts +56 -0
- package/dist/notifications/contracts/Notification.js +1 -0
- package/dist/notifications/contracts/NotificationDelivery.d.ts +11 -0
- package/dist/notifications/contracts/NotificationDelivery.js +1 -0
- package/dist/notifications/contracts/index.d.ts +2 -0
- package/dist/notifications/contracts/index.js +2 -0
- package/dist/notifications/index.d.ts +2 -0
- package/dist/notifications/index.js +2 -0
- package/dist/queue/JobRunAttempt.d.ts +16 -0
- package/dist/queue/JobRunAttempt.js +17 -0
- package/dist/queue/JobRunEvent.d.ts +15 -0
- package/dist/queue/JobRunEvent.js +16 -0
- package/dist/queue/JobRunStoppedError.d.ts +6 -0
- package/dist/queue/JobRunStoppedError.js +10 -0
- package/dist/queue/Queue.d.ts +19 -4
- package/dist/queue/Queue.js +122 -9
- package/dist/queue/QueueTerminalError.d.ts +9 -0
- package/dist/queue/QueueTerminalError.js +12 -0
- package/dist/queue/QueueWorker.d.ts +12 -5
- package/dist/queue/QueueWorker.js +94 -9
- package/dist/queue/QueueWorkerReporter.d.ts +17 -0
- package/dist/queue/QueueWorkerReporter.js +71 -0
- package/dist/queue/QueueableJob.d.ts +2 -2
- package/dist/queue/RunnableJob.d.ts +78 -0
- package/dist/queue/RunnableJob.js +284 -0
- package/dist/queue/console.d.ts +8 -0
- package/dist/queue/console.js +53 -19
- package/dist/queue/contracts/QueueDriver.d.ts +8 -0
- package/dist/queue/contracts/QueueJobRunner.d.ts +4 -0
- package/dist/queue/contracts/QueueJobRunner.js +1 -0
- package/dist/queue/contracts/QueuePayload.d.ts +1 -1
- package/dist/queue/contracts/QueueSelection.d.ts +11 -0
- package/dist/queue/contracts/QueueSelection.js +1 -0
- package/dist/queue/contracts/QueueService.d.ts +18 -4
- package/dist/queue/contracts/QueueWorkerLifecycle.d.ts +2 -2
- package/dist/queue/contracts/QueueWorkerSnapshot.d.ts +14 -0
- package/dist/queue/contracts/QueueWorkerSnapshot.js +1 -0
- package/dist/queue/contracts/QueueableJob.d.ts +7 -3
- package/dist/queue/contracts/QueueableJobContract.d.ts +12 -0
- package/dist/queue/contracts/QueueableJobContract.js +1 -0
- package/dist/queue/contracts/index.d.ts +4 -0
- package/dist/queue/contracts/index.js +2 -0
- package/dist/queue/drivers/DatabaseQueueDriver.d.ts +4 -0
- package/dist/queue/drivers/DatabaseQueueDriver.js +27 -3
- package/dist/queue/drivers/RedisQueueDriver.d.ts +7 -0
- package/dist/queue/drivers/RedisQueueDriver.js +37 -0
- package/dist/queue/index.d.ts +5 -0
- package/dist/queue/index.js +5 -0
- package/dist/queue/jobEnvelopeHasPrefix.d.ts +3 -0
- package/dist/queue/jobEnvelopeHasPrefix.js +4 -0
- package/dist/scheduler/ScheduledEvent.d.ts +8 -4
- package/dist/scheduler/ScheduledEvent.js +17 -3
- package/dist/scheduler/ScheduledJob.d.ts +1 -1
- package/dist/scheduler/Scheduler.d.ts +5 -0
- package/dist/scheduler/Scheduler.js +92 -28
- package/dist/scheduler/SchedulerCheckpointRecord.d.ts +16 -0
- package/dist/scheduler/SchedulerCheckpointRecord.js +53 -0
- package/dist/scheduler/SchedulerWorker.d.ts +3 -5
- package/dist/scheduler/SchedulerWorker.js +58 -14
- package/dist/scheduler/console.js +3 -1
- package/dist/scheduler/contracts/Schedule.d.ts +19 -0
- package/dist/scheduler/contracts/Schedule.js +1 -0
- package/dist/scheduler/contracts/Scheduler.d.ts +18 -6
- package/dist/scheduler/contracts/SchedulerCheckpoint.d.ts +23 -0
- package/dist/scheduler/contracts/SchedulerCheckpoint.js +1 -0
- package/dist/scheduler/contracts/SchedulerConsole.d.ts +5 -0
- package/dist/scheduler/contracts/SchedulerWorker.d.ts +6 -1
- package/dist/scheduler/contracts/index.d.ts +2 -0
- package/dist/scheduler/contracts/index.js +2 -0
- package/dist/scheduler/index.d.ts +1 -0
- package/dist/scheduler/index.js +1 -0
- package/dist/server/App.d.ts +36 -4
- package/dist/server/App.js +57 -7
- package/dist/server/contracts/HttpErrorHandlerOptions.d.ts +29 -0
- package/dist/server/contracts/HttpErrorHandlerOptions.js +1 -0
- package/dist/server/contracts/index.d.ts +1 -0
- package/dist/server/contracts/index.js +1 -0
- package/dist/server/index.d.ts +4 -0
- package/dist/server/index.js +4 -0
- package/dist/server/publicServerErrorMessage.d.ts +11 -0
- package/dist/server/publicServerErrorMessage.js +16 -0
- package/dist/server/registerBrowserJsonFormatting.d.ts +16 -0
- package/dist/server/registerBrowserJsonFormatting.js +100 -0
- package/dist/server/registerHttpErrorHandler.d.ts +20 -0
- package/dist/server/registerHttpErrorHandler.js +93 -0
- package/dist/ssr/vite/contracts/ViteSsrOptions.d.ts +2 -0
- package/dist/ssr/vite/fastifyViteSsr.js +4 -3
- package/dist/storage/drivers/FlystorageDisk.js +2 -2
- package/dist/storage/index.d.ts +2 -2
- package/dist/storage/index.js +2 -2
- package/dist/websocket/WebSocketChannels.d.ts +18 -0
- package/dist/websocket/WebSocketChannels.js +129 -0
- package/dist/websocket/WebSocketConnection.d.ts +25 -0
- package/dist/websocket/WebSocketConnection.js +244 -0
- package/dist/websocket/WebSockets.d.ts +41 -0
- package/dist/websocket/WebSockets.js +194 -0
- package/dist/websocket/client/WebSocketClient.d.ts +21 -0
- package/dist/websocket/client/WebSocketClient.js +230 -0
- package/dist/websocket/client/index.d.ts +3 -0
- package/dist/websocket/client/index.js +1 -0
- package/dist/websocket/contracts/WebSocketChannel.d.ts +20 -0
- package/dist/websocket/contracts/WebSocketChannel.js +1 -0
- package/dist/websocket/contracts/WebSocketClient.d.ts +45 -0
- package/dist/websocket/contracts/WebSocketClient.js +1 -0
- package/dist/websocket/contracts/WebSocketEndpoint.d.ts +43 -0
- package/dist/websocket/contracts/WebSocketEndpoint.js +1 -0
- package/dist/websocket/contracts/WebSocketOptions.d.ts +48 -0
- package/dist/websocket/contracts/WebSocketOptions.js +1 -0
- package/dist/websocket/contracts/WebSocketPresence.d.ts +6 -0
- package/dist/websocket/contracts/WebSocketPresence.js +1 -0
- package/dist/websocket/contracts/WebSocketServiceOptions.d.ts +12 -0
- package/dist/websocket/contracts/WebSocketServiceOptions.js +1 -0
- package/dist/websocket/contracts/index.d.ts +6 -0
- package/dist/websocket/contracts/index.js +1 -0
- package/dist/websocket/defineChannel.d.ts +8 -0
- package/dist/websocket/defineChannel.js +13 -0
- package/dist/websocket/defineWebSocket.d.ts +14 -0
- package/dist/websocket/defineWebSocket.js +4 -0
- package/dist/websocket/fastify.d.ts +11 -0
- package/dist/websocket/fastify.js +38 -0
- package/dist/websocket/index.d.ts +5 -0
- package/dist/websocket/index.js +4 -0
- package/package.json +108 -7
- package/src/ai/AIErrors.ts +10 -0
- package/src/ai/AIFailover.ts +3 -2
- package/src/ai/AIProviderAdmission.ts +329 -0
- package/src/ai/AIRateLimiter.ts +134 -10
- package/src/ai/AIRequestTrackingError.ts +37 -0
- package/src/ai/Agent.ts +85 -71
- package/src/ai/Ai.ts +104 -48
- package/src/ai/OpenAIProviderError.ts +1 -1
- package/src/ai/ProviderSseObserver.ts +89 -0
- package/src/ai/README.md +216 -11
- package/src/ai/aiServiceTier.ts +14 -0
- package/src/ai/chunkEmbeddingText.ts +137 -0
- package/src/ai/contracts/AI.ts +17 -0
- package/src/ai/contracts/AIRequestErrorDiagnostics.ts +12 -0
- package/src/ai/contracts/AIServiceTier.ts +2 -0
- package/src/ai/contracts/Agent.ts +3 -0
- package/src/ai/contracts/EmbeddingTextChunk.ts +26 -0
- package/src/ai/contracts/Pricing.ts +7 -1
- package/src/ai/contracts/Providers.ts +2 -0
- package/src/ai/contracts/index.ts +2 -0
- package/src/ai/examples/prepareDocumentEmbeddings.ts +20 -0
- package/src/ai/index.ts +9 -2
- package/src/ai/{Models.ts → modelPricing.ts} +37 -4
- package/src/apps/AppInstallation.ts +25 -0
- package/src/apps/AppRouteError.ts +8 -0
- package/src/apps/AppService.ts +30 -0
- package/src/apps/Apps.ts +508 -0
- package/src/apps/README.md +354 -0
- package/src/apps/appsPlugin.ts +34 -0
- package/src/apps/commands/disableApp.ts +6 -0
- package/src/apps/commands/enableApp.ts +6 -0
- package/src/apps/commands/index.ts +29 -0
- package/src/apps/commands/installApp.ts +6 -0
- package/src/apps/commands/listApps.ts +6 -0
- package/src/apps/commands/makeAppMigration.ts +9 -0
- package/src/apps/commands/rollbackApp.ts +6 -0
- package/src/apps/commands/uninstallApp.ts +6 -0
- package/src/apps/contracts/AppAction.ts +2 -0
- package/src/apps/contracts/AppDefinition.ts +49 -0
- package/src/apps/contracts/AppDescription.ts +27 -0
- package/src/apps/contracts/AppManifest.ts +32 -0
- package/src/apps/contracts/AppNavigation.ts +10 -0
- package/src/apps/contracts/AppNavigationBadge.ts +6 -0
- package/src/apps/contracts/AppNavigationContext.ts +6 -0
- package/src/apps/contracts/AppNavigationResult.ts +9 -0
- package/src/apps/contracts/AppRoute.ts +18 -0
- package/src/apps/contracts/DiscoveredApp.ts +11 -0
- package/src/apps/contracts/InstalledApps.ts +2 -0
- package/src/apps/contracts/index.ts +11 -0
- package/src/apps/defineApp.ts +10 -0
- package/src/apps/discoverApps.ts +56 -0
- package/src/apps/fastify.ts +1 -0
- package/src/apps/index.ts +7 -0
- package/src/apps/normalizeAppNavigation.ts +29 -0
- package/src/apps/registerAppRoutes.ts +48 -0
- package/src/apps/validateAppDefinitions.ts +52 -0
- package/src/apps/vite.ts +1 -0
- package/src/apps/writeAppTypes.ts +14 -0
- package/src/auth/Auth.ts +89 -23
- package/src/auth/PasswordLoginAttempt.ts +72 -0
- package/src/auth/PasswordSuspendedError.ts +13 -0
- package/src/auth/README.md +94 -4
- package/src/auth/contracts/PasswordAuthProviderOptions.ts +30 -0
- package/src/auth/contracts/PasswordSuspension.ts +7 -0
- package/src/auth/contracts/PasswordSuspensionOptions.ts +10 -0
- package/src/auth/contracts/index.ts +3 -0
- package/src/auth/examples/runPasswordAuth.ts +6 -6
- package/src/auth/index.ts +2 -0
- package/src/auth/providers/PasswordAuthProvider.ts +96 -30
- package/src/auth/providers/resolveAuthProviders.ts +1 -0
- package/src/cli/Cli.ts +9 -0
- package/src/cli/README.md +19 -0
- package/src/cli/commands/repl.ts +2 -1
- package/src/cli/contracts/CliCommand.ts +2 -0
- package/src/cli/contracts/CliCommandInfo.ts +13 -0
- package/src/cli/contracts/index.ts +1 -0
- package/src/cli/index.ts +1 -0
- package/src/cli/listDb3Commands.ts +12 -0
- package/src/cli/runDb3.ts +5 -51
- package/src/cli/withDb3Cli.ts +55 -0
- package/src/db/ActiveQueryBuilder.ts +12 -0
- package/src/db/ActiveRecord.ts +9 -0
- package/src/db/README.md +45 -1
- package/src/db/connection.ts +12 -1
- package/src/db/examples/FieldNote.ts +7 -13
- package/src/db/examples/KnowledgeNote.ts +7 -13
- package/src/db/examples/runNoteMigrations.ts +11 -11
- package/src/db/fields/TimestampField.ts +8 -17
- package/src/db/migrations/DatabaseMigrationManager.ts +12 -4
- package/src/db/migrations/contracts/DatabaseMigration.ts +9 -0
- package/src/db/migrations/index.ts +1 -1
- package/src/db/migrations/{KnexMigrationRenderer.ts → renderKnexMigration.ts} +8 -14
- package/src/flows/FlowCompiler.ts +1 -1
- package/src/flows/Flows.ts +1 -1
- package/src/flows/index.ts +1 -1
- package/src/health/Health.ts +163 -0
- package/src/health/README.md +46 -0
- package/src/health/contracts/Health.ts +47 -0
- package/src/health/contracts/HealthHttp.ts +19 -0
- package/src/health/contracts/index.ts +2 -0
- package/src/health/databaseHealthCheck.ts +21 -0
- package/src/health/fastify.ts +49 -0
- package/src/health/index.ts +3 -0
- package/src/in-app/InApp.ts +173 -0
- package/src/in-app/InAppError.ts +8 -0
- package/src/in-app/InAppRecord.ts +41 -0
- package/src/in-app/README.md +193 -0
- package/src/in-app/contracts/InAppInbox.ts +51 -0
- package/src/in-app/contracts/InAppMessage.ts +19 -0
- package/src/in-app/contracts/InAppScope.ts +12 -0
- package/src/in-app/contracts/index.ts +3 -0
- package/src/in-app/examples/sendReportReady.ts +14 -0
- package/src/in-app/index.ts +4 -0
- package/src/in-app/validation.ts +49 -0
- package/src/index.ts +2 -22
- package/src/logging/DevelopmentConsole.ts +154 -0
- package/src/logging/Log.ts +5 -2
- package/src/logging/PrettyLogFormatter.ts +165 -0
- package/src/logging/README.md +52 -109
- package/src/logging/acquireDevelopmentConsole.ts +19 -0
- package/src/logging/contracts/DevelopmentConsoleOptions.ts +13 -0
- package/src/logging/contracts/EmailLogOptions.ts +9 -0
- package/src/logging/contracts/HttpExchangeMonitorOptions.ts +13 -0
- package/src/logging/contracts/LogTransportOptions.ts +10 -0
- package/src/logging/contracts/LoggingOptions.ts +12 -1
- package/src/logging/contracts/index.ts +4 -0
- package/src/logging/development/README.md +88 -0
- package/src/logging/drivers/PinoLoggerDriver.ts +72 -20
- package/src/logging/examples/runDevelopmentLogs.ts +36 -0
- package/src/logging/formatLogEmail.ts +24 -0
- package/src/logging/highlightQueueMessage.ts +38 -0
- package/src/logging/httpBodyCapture.ts +393 -0
- package/src/logging/index.ts +2 -0
- package/src/logging/redactLogEmail.ts +12 -0
- package/src/logging/registerHttpExchangeMonitor.ts +45 -0
- package/src/logging/transports/EmailLogTransport.ts +46 -0
- package/src/mail/Mail.ts +5 -0
- package/src/mail/MailDeliveryError.ts +8 -0
- package/src/mail/README.md +11 -1
- package/src/mail/index.ts +1 -0
- package/src/mail/transports/MailgunTransport.ts +2 -0
- package/src/mail/transports/ResendTransport.ts +24 -22
- package/src/media/MediaManager.ts +31 -10
- package/src/media/README.md +4 -0
- package/src/media/examples/runPrivateFiles.ts +2 -2
- package/src/network/BlockedUrlError.ts +19 -0
- package/src/network/README.md +133 -0
- package/src/network/assertPublicUrl.ts +77 -0
- package/src/network/contracts/GuardedFetch.ts +40 -0
- package/src/network/contracts/PublicUrlOptions.ts +17 -0
- package/src/network/contracts/index.ts +2 -0
- package/src/network/examples/runGuardedFetch.ts +35 -0
- package/src/network/guardedFetch.ts +150 -0
- package/src/network/index.ts +6 -0
- package/src/network/playwright/GuardedBrowserProxy.ts +172 -0
- package/src/network/playwright/contracts/GuardedBrowserContextOptions.ts +43 -0
- package/src/network/playwright/contracts/index.ts +1 -0
- package/src/network/playwright/index.ts +2 -0
- package/src/network/playwright/newGuardedBrowserContext.ts +74 -0
- package/src/network/privateNetworkAddresses.ts +166 -0
- package/src/network/publicAddressLookup.ts +49 -0
- package/src/notifications/Notifications.ts +105 -0
- package/src/notifications/README.md +59 -0
- package/src/notifications/contracts/Notification.ts +65 -0
- package/src/notifications/contracts/NotificationDelivery.ts +11 -0
- package/src/notifications/contracts/index.ts +2 -0
- package/src/notifications/examples/ReportReadyNotification.ts +31 -0
- package/src/notifications/index.ts +2 -0
- package/src/queue/JobRunAttempt.ts +17 -0
- package/src/queue/JobRunEvent.ts +16 -0
- package/src/queue/JobRunStoppedError.ts +8 -0
- package/src/queue/Queue.ts +112 -11
- package/src/queue/QueueTerminalError.ts +12 -0
- package/src/queue/QueueWorker.ts +86 -7
- package/src/queue/QueueWorkerReporter.ts +59 -0
- package/src/queue/QueueableJob.ts +2 -2
- package/src/queue/README.md +142 -1
- package/src/queue/RunnableJob.ts +272 -0
- package/src/queue/console.ts +54 -21
- package/src/queue/contracts/QueueDriver.ts +9 -0
- package/src/queue/contracts/QueueJobRunner.ts +4 -0
- package/src/queue/contracts/QueuePayload.ts +1 -1
- package/src/queue/contracts/QueueSelection.ts +11 -0
- package/src/queue/contracts/QueueService.ts +19 -4
- package/src/queue/contracts/QueueWorkerLifecycle.ts +2 -2
- package/src/queue/contracts/QueueWorkerSnapshot.ts +15 -0
- package/src/queue/contracts/QueueableJob.ts +7 -3
- package/src/queue/contracts/QueueableJobContract.ts +13 -0
- package/src/queue/contracts/index.ts +6 -0
- package/src/queue/drivers/DatabaseQueueDriver.ts +25 -3
- package/src/queue/drivers/RedisQueueDriver.ts +36 -0
- package/src/queue/examples/runQueueSelection.ts +34 -0
- package/src/queue/index.ts +7 -0
- package/src/queue/jobEnvelopeHasPrefix.ts +6 -0
- package/src/scheduler/README.md +50 -9
- package/src/scheduler/ScheduledEvent.ts +20 -5
- package/src/scheduler/ScheduledJob.ts +1 -1
- package/src/scheduler/Scheduler.ts +73 -27
- package/src/scheduler/SchedulerCheckpointRecord.ts +51 -0
- package/src/scheduler/SchedulerWorker.ts +54 -19
- package/src/scheduler/console.ts +3 -1
- package/src/scheduler/contracts/Schedule.ts +22 -0
- package/src/scheduler/contracts/Scheduler.ts +21 -6
- package/src/scheduler/contracts/SchedulerCheckpoint.ts +23 -0
- package/src/scheduler/contracts/SchedulerConsole.ts +5 -0
- package/src/scheduler/contracts/SchedulerWorker.ts +6 -1
- package/src/scheduler/contracts/index.ts +2 -0
- package/src/scheduler/examples/runSchedulerWindow.ts +54 -0
- package/src/scheduler/index.ts +1 -0
- package/src/server/App.ts +73 -10
- package/src/server/README.md +95 -2
- package/src/server/contracts/HttpErrorHandlerOptions.ts +29 -0
- package/src/server/contracts/index.ts +1 -0
- package/src/server/examples/createFirstServer.ts +5 -3
- package/src/server/index.ts +4 -0
- package/src/server/publicServerErrorMessage.ts +17 -0
- package/src/server/registerBrowserJsonFormatting.ts +94 -0
- package/src/server/registerHttpErrorHandler.ts +96 -0
- package/src/ssr/README.md +6 -0
- package/src/ssr/vite/contracts/ViteSsrOptions.ts +2 -0
- package/src/ssr/vite/fastifyViteSsr.ts +4 -3
- package/src/storage/drivers/FlystorageDisk.ts +2 -2
- package/src/storage/index.ts +2 -2
- package/src/websocket/README.md +458 -0
- package/src/websocket/WebSocketChannels.ts +99 -0
- package/src/websocket/WebSocketConnection.ts +162 -0
- package/src/websocket/WebSockets.ts +157 -0
- package/src/websocket/client/WebSocketClient.ts +188 -0
- package/src/websocket/client/index.ts +3 -0
- package/src/websocket/contracts/WebSocketChannel.ts +23 -0
- package/src/websocket/contracts/WebSocketClient.ts +48 -0
- package/src/websocket/contracts/WebSocketEndpoint.ts +46 -0
- package/src/websocket/contracts/WebSocketOptions.ts +50 -0
- package/src/websocket/contracts/WebSocketPresence.ts +6 -0
- package/src/websocket/contracts/WebSocketServiceOptions.ts +12 -0
- package/src/websocket/contracts/index.ts +6 -0
- package/src/websocket/defineChannel.ts +14 -0
- package/src/websocket/defineWebSocket.ts +15 -0
- package/src/websocket/examples/board/LiveBoard.ts +97 -0
- package/src/websocket/examples/board/SummarizeBoardJob.ts +52 -0
- package/src/websocket/examples/board/boardSnapshot.ts +16 -0
- package/src/websocket/examples/board/createBoardClient.ts +43 -0
- package/src/websocket/examples/board/createBoardStore.ts +58 -0
- package/src/websocket/examples/board/registerBoardRoutes.ts +31 -0
- package/src/websocket/examples/createChannelSync.ts +66 -0
- package/src/websocket/examples/deploymentEndpoint.ts +13 -0
- package/src/websocket/examples/deploymentSnapshot.ts +36 -0
- package/src/websocket/examples/resourceChannels.ts +18 -0
- package/src/websocket/examples/userEndpoint.ts +27 -0
- package/src/websocket/fastify.ts +39 -0
- package/src/websocket/index.ts +5 -0
- package/templates/AGENTS.md +33 -2
- /package/dist/flows/{FlowValueValidator.d.ts → flowValueValidator.d.ts} +0 -0
- /package/dist/flows/{FlowValueValidator.js → flowValueValidator.js} +0 -0
- /package/dist/storage/{mime.d.ts → mimeTypeFromPath.d.ts} +0 -0
- /package/dist/storage/{mime.js → mimeTypeFromPath.js} +0 -0
- /package/dist/storage/{contents.d.ts → storageContentsToBuffer.d.ts} +0 -0
- /package/dist/storage/{contents.js → storageContentsToBuffer.js} +0 -0
- /package/src/flows/{FlowValueValidator.ts → flowValueValidator.ts} +0 -0
- /package/src/storage/{mime.ts → mimeTypeFromPath.ts} +0 -0
- /package/src/storage/{contents.ts → storageContentsToBuffer.ts} +0 -0
package/src/ai/Agent.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { AIProviderDeferredError, AIProviderStoppedError } from './AIProviderAdmission';
|
|
1
2
|
import { aiExecutionContext } from './AiExecutionContext';
|
|
2
3
|
import { Agent as SdkAgent, Runner, generateTraceId, type AgentInputItem, type AgentOutputType, type FunctionCallItem, type FunctionCallResultItem, type ModelRequest, type ModelSettings, type RunStreamEvent, type Usage } from '@openai/agents';
|
|
3
4
|
import { isQueueRetryLaterError } from '@db3.ai/app/queue';
|
|
@@ -12,9 +13,11 @@ import { AI_PROVIDER, AIQuotaDeferredError, AIRateLimitDeferredError, isFailover
|
|
|
12
13
|
import { AIAllowanceExceededError } from './AIErrors.js';
|
|
13
14
|
import type { AIUsageCharge } from './contracts/AI';
|
|
14
15
|
import { estimateTokensFromText } from './Estimates.js';
|
|
15
|
-
import {
|
|
16
|
+
import type { AIServiceTier } from './contracts/AIServiceTier';
|
|
17
|
+
import { assertAIServiceTier, effectiveAIServiceTier } from './aiServiceTier';
|
|
18
|
+
import { calculateAIHostedToolCost, calculateAIRequestCostUSD, calculateAIRequestEntriesCostUSD, combineAIRequestCostUSD, type AIRequestCostUsageEntry } from './modelPricing.js';
|
|
16
19
|
import { AgentRunJob } from './AgentRunJob.js';
|
|
17
|
-
import {
|
|
20
|
+
import { withoutOpenAIQuotaRetryMetadata } from './OpenAIQuotaRetry.js';
|
|
18
21
|
import { agentCitationFromStreamRecord, agentCitationsFromFinalModelResponse, rememberAgentCitation } from './agentCitations.js';
|
|
19
22
|
import { serializeQueuedAgent } from './registry.js';
|
|
20
23
|
import { agentToolResultFromStructuredOutput } from './toolHelpers.js';
|
|
@@ -25,6 +28,8 @@ import type * as agent from './contracts/Agent';
|
|
|
25
28
|
* Fully prepared run inputs and persistence state ready for SDK execution.
|
|
26
29
|
*/
|
|
27
30
|
interface PreparedAgentRun {
|
|
31
|
+
/** Tier captured at admission and retained by queued runs. */
|
|
32
|
+
serviceTier: AIServiceTier;
|
|
28
33
|
/** User-visible task message supplied to the agent. */
|
|
29
34
|
message: string;
|
|
30
35
|
|
|
@@ -115,7 +120,8 @@ interface ResolvedQueueInput {
|
|
|
115
120
|
* Shared persisted Agents SDK runtime for interactive and queued application agents.
|
|
116
121
|
*/
|
|
117
122
|
export abstract class Agent<TContext extends agent.BaseAgentContext = agent.BaseAgentContext> implements Serializable<TContext> {
|
|
118
|
-
|
|
123
|
+
/** Maximum model turns per run; null lets the agent finish without a turn ceiling. */
|
|
124
|
+
protected readonly maxTurns: number | null = 8;
|
|
119
125
|
protected readonly maxPreviousMessages: number = 50;
|
|
120
126
|
/** Provider reasoning effort used for every run of this agent. */
|
|
121
127
|
protected readonly reasoningEffort: agent.AgentReasoningEffort | null = null;
|
|
@@ -124,6 +130,8 @@ export abstract class Agent<TContext extends agent.BaseAgentContext = agent.Base
|
|
|
124
130
|
protected readonly workflowName: string = this.constructor.name;
|
|
125
131
|
/** Optional agent-specific model. Omit to use the global `app().ai.model`. */
|
|
126
132
|
protected readonly model?: string;
|
|
133
|
+
/** OpenAI processing tier for this agent. Override to opt into local Flex experiments. */
|
|
134
|
+
protected readonly serviceTier: AIServiceTier = 'default';
|
|
127
135
|
private currentInput: AgentRunInputPayload | null = null;
|
|
128
136
|
|
|
129
137
|
/**
|
|
@@ -366,31 +374,13 @@ export abstract class Agent<TContext extends agent.BaseAgentContext = agent.Base
|
|
|
366
374
|
|
|
367
375
|
return await this.executePreparedRun(prepared, async () => {});
|
|
368
376
|
} catch (error) {
|
|
369
|
-
if (
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
if (quotaRetry && !quotaRetry.expired) {
|
|
374
|
-
await this.deferTrackedRun(prepared.state, quotaRetry);
|
|
375
|
-
|
|
376
|
-
throw new AIQuotaDeferredError(
|
|
377
|
-
quotaRetry.delaySeconds,
|
|
378
|
-
quotaRetry.retryAt,
|
|
379
|
-
quotaRetry.retryUntil,
|
|
380
|
-
quotaRetry.deferralCount,
|
|
381
|
-
quotaRetry.message,
|
|
382
|
-
);
|
|
377
|
+
if (error instanceof AIProviderDeferredError) {
|
|
378
|
+
await this.deferTrackedRun(prepared.state, error);
|
|
379
|
+
throw error;
|
|
383
380
|
}
|
|
384
|
-
|
|
381
|
+
if (isQueueRetryLaterError(error)) throw error;
|
|
385
382
|
const providerError = openAIProviderError(error);
|
|
386
383
|
|
|
387
|
-
if (quotaRetry) {
|
|
388
|
-
prepared.state.aiRequest.metadata = withOpenAIQuotaRetryMetadata(
|
|
389
|
-
prepared.state.aiRequest.metadata,
|
|
390
|
-
quotaRetry.metadata,
|
|
391
|
-
);
|
|
392
|
-
}
|
|
393
|
-
|
|
394
384
|
await this.failTrackedRun(
|
|
395
385
|
prepared.state,
|
|
396
386
|
error instanceof Error ? error.message : `Unable to run ${this.agentName}.`,
|
|
@@ -698,7 +688,7 @@ export abstract class Agent<TContext extends agent.BaseAgentContext = agent.Base
|
|
|
698
688
|
input: invocation.input,
|
|
699
689
|
maxTurns: this.maxTurns,
|
|
700
690
|
model,
|
|
701
|
-
modelSettings: invocation.modelSettings,
|
|
691
|
+
modelSettings: modelSettingsForProvider(invocation.modelSettings, AI_PROVIDER.openai, this.serviceTier),
|
|
702
692
|
});
|
|
703
693
|
}
|
|
704
694
|
|
|
@@ -894,6 +884,7 @@ export abstract class Agent<TContext extends agent.BaseAgentContext = agent.Base
|
|
|
894
884
|
return {
|
|
895
885
|
message,
|
|
896
886
|
model,
|
|
887
|
+
serviceTier: this.serviceTier,
|
|
897
888
|
traceId,
|
|
898
889
|
previousMessages,
|
|
899
890
|
invocation,
|
|
@@ -923,6 +914,7 @@ export abstract class Agent<TContext extends agent.BaseAgentContext = agent.Base
|
|
|
923
914
|
return {
|
|
924
915
|
message: payload.message,
|
|
925
916
|
model: payload.model,
|
|
917
|
+
serviceTier: payload.serviceTier ?? 'default',
|
|
926
918
|
traceId: payload.traceId,
|
|
927
919
|
previousMessages,
|
|
928
920
|
invocation,
|
|
@@ -957,6 +949,7 @@ export abstract class Agent<TContext extends agent.BaseAgentContext = agent.Base
|
|
|
957
949
|
const instructions = invocation.instructions;
|
|
958
950
|
const modelInput = invocation.input;
|
|
959
951
|
const attempts = app().ai.resolveProviders(this.provider(), prepared.model);
|
|
952
|
+
for (const attempt of attempts) assertAIServiceTier(attempt.provider, prepared.serviceTier);
|
|
960
953
|
const attemptFailures: AIProviderAttemptFailure[] = [];
|
|
961
954
|
|
|
962
955
|
await this.attachPromptRequestPayload(state, {
|
|
@@ -977,13 +970,15 @@ export abstract class Agent<TContext extends agent.BaseAgentContext = agent.Base
|
|
|
977
970
|
const attemptStartMs = Date.now();
|
|
978
971
|
let rateLimitLease: AIRateLimitLease | null = null;
|
|
979
972
|
let sawStreamEvent = false;
|
|
973
|
+
let completedModelTurn = false;
|
|
980
974
|
let activeUsage: Usage | null = null;
|
|
981
975
|
let attemptState: agent.AgentPersistenceState | null = null;
|
|
982
976
|
let attemptSettled = false;
|
|
983
977
|
let providerStarted = false;
|
|
978
|
+
const responsePricing: Array<{ model?: string; serviceTier: string | null }> = [];
|
|
984
979
|
|
|
985
980
|
try {
|
|
986
|
-
attemptState = await this.startTrackedAttempt(state, attempt, attemptStartMs);
|
|
981
|
+
attemptState = await this.startTrackedAttempt(state, attempt, attemptStartMs, prepared.serviceTier);
|
|
987
982
|
rateLimitLease = await this.acquireProviderCapacity(
|
|
988
983
|
prepared,
|
|
989
984
|
instructions,
|
|
@@ -1001,8 +996,19 @@ export abstract class Agent<TContext extends agent.BaseAgentContext = agent.Base
|
|
|
1001
996
|
providerStarted = true;
|
|
1002
997
|
const runner = new Runner({
|
|
1003
998
|
model: attempt.model,
|
|
1004
|
-
modelProvider: app().ai.createAgentProvider(attempt, rateLimitLease),
|
|
1005
|
-
modelSettings:
|
|
999
|
+
modelProvider: app().ai.createAgentProvider(attempt, rateLimitLease, prepared.serviceTier),
|
|
1000
|
+
modelSettings: {
|
|
1001
|
+
...modelSettingsForProvider(invocation.modelSettings, attempt.provider, prepared.serviceTier),
|
|
1002
|
+
retry: {
|
|
1003
|
+
maxRetries: 8,
|
|
1004
|
+
/** Retains completed tools in this SDK run; never restarts the whole agent. */
|
|
1005
|
+
policy: ({ error }) => {
|
|
1006
|
+
if (!completedModelTurn) return false;
|
|
1007
|
+
const delayMs = app().ai.providerAdmission.requestRetryDelay(attempt, agentRateLimitError(error));
|
|
1008
|
+
return delayMs === null ? false : { retry: true, delayMs };
|
|
1009
|
+
},
|
|
1010
|
+
},
|
|
1011
|
+
},
|
|
1006
1012
|
tracingDisabled: process.env.OPENAI_AGENTS_TRACING_DISABLED === 'true',
|
|
1007
1013
|
traceIncludeSensitiveData: false,
|
|
1008
1014
|
workflowName: this.workflowName,
|
|
@@ -1024,6 +1030,14 @@ export abstract class Agent<TContext extends agent.BaseAgentContext = agent.Base
|
|
|
1024
1030
|
|
|
1025
1031
|
for await (const event of stream) {
|
|
1026
1032
|
sawStreamEvent = true;
|
|
1033
|
+
if (event.type === 'raw_model_stream_event' && event.data.type === 'response_done') {
|
|
1034
|
+
completedModelTurn = true;
|
|
1035
|
+
const providerData = recordValue(event.data.response.providerData);
|
|
1036
|
+
responsePricing.push({
|
|
1037
|
+
...(typeof providerData?.model === 'string' ? { model: providerData.model } : {}),
|
|
1038
|
+
serviceTier: effectiveAIServiceTier(providerData?.service_tier, prepared.serviceTier),
|
|
1039
|
+
});
|
|
1040
|
+
}
|
|
1027
1041
|
|
|
1028
1042
|
const streamEvent = await this.streamEventFromSdkEvent(executionState, event);
|
|
1029
1043
|
|
|
@@ -1037,6 +1051,8 @@ export abstract class Agent<TContext extends agent.BaseAgentContext = agent.Base
|
|
|
1037
1051
|
}
|
|
1038
1052
|
|
|
1039
1053
|
await stream.completed;
|
|
1054
|
+
const streamFailure = app().ai.providerAdmission?.requestFailure(attempt, null);
|
|
1055
|
+
if (streamFailure) throw streamFailure;
|
|
1040
1056
|
const rawFinalOutput = this.finalOutputText(stream.finalOutput, assistantText);
|
|
1041
1057
|
const finalResponseCitations = agentCitationsFromFinalModelResponse(stream.rawResponses);
|
|
1042
1058
|
const citations = finalResponseCitations ?? normalizedAgentCitations(executionState.citations);
|
|
@@ -1054,6 +1070,7 @@ export abstract class Agent<TContext extends agent.BaseAgentContext = agent.Base
|
|
|
1054
1070
|
executionState,
|
|
1055
1071
|
activeUsage,
|
|
1056
1072
|
stream.lastResponseId ?? null,
|
|
1073
|
+
responsePricing,
|
|
1057
1074
|
);
|
|
1058
1075
|
attemptSettled = true;
|
|
1059
1076
|
|
|
@@ -1102,13 +1119,18 @@ export abstract class Agent<TContext extends agent.BaseAgentContext = agent.Base
|
|
|
1102
1119
|
};
|
|
1103
1120
|
});
|
|
1104
1121
|
} catch (caught) {
|
|
1105
|
-
const
|
|
1122
|
+
const restored = agentRateLimitError(caught);
|
|
1123
|
+
const failure = app().ai.providerAdmission?.requestFailure(attempt, restored) ?? restored;
|
|
1124
|
+
// Restarting a turn after streamed output/tools can repeat completed work.
|
|
1125
|
+
const error = failure instanceof AIProviderDeferredError && sawStreamEvent ? new AIProviderStoppedError('outage', failure.providerCode, { ...failure.diagnostics, stopStage: 'stream-output' }) : failure;
|
|
1126
|
+
if (failure instanceof AIProviderDeferredError && error instanceof AIProviderStoppedError) error.providerStarted = failure.providerStarted;
|
|
1106
1127
|
if (attemptState && !attemptSettled) {
|
|
1107
1128
|
await this.failTrackedAttempt(
|
|
1108
1129
|
attemptState,
|
|
1109
1130
|
activeUsage,
|
|
1110
1131
|
providerStarted,
|
|
1111
1132
|
error,
|
|
1133
|
+
responsePricing,
|
|
1112
1134
|
);
|
|
1113
1135
|
}
|
|
1114
1136
|
|
|
@@ -1151,12 +1173,14 @@ export abstract class Agent<TContext extends agent.BaseAgentContext = agent.Base
|
|
|
1151
1173
|
* @param rootState - Logical run root and shared conversation state.
|
|
1152
1174
|
* @param attempt - Provider and model selected for this execution.
|
|
1153
1175
|
* @param startedAtMs - Attempt start timestamp in milliseconds.
|
|
1176
|
+
* @param serviceTier - Requested tier retained alongside this attempt.
|
|
1154
1177
|
* @returns Persistence state scoped to the new provider attempt.
|
|
1155
1178
|
*/
|
|
1156
1179
|
private async startTrackedAttempt(
|
|
1157
1180
|
rootState: agent.AgentPersistenceState,
|
|
1158
1181
|
attempt: AIProviderAttempt,
|
|
1159
1182
|
startedAtMs: number,
|
|
1183
|
+
serviceTier: AIServiceTier,
|
|
1160
1184
|
): Promise<agent.AgentPersistenceState> {
|
|
1161
1185
|
const aiRequest = await new (app().ai.models.request)({
|
|
1162
1186
|
conversation: rootState.conversation,
|
|
@@ -1168,6 +1192,7 @@ export abstract class Agent<TContext extends agent.BaseAgentContext = agent.Base
|
|
|
1168
1192
|
operation: 'agents.run.attempt',
|
|
1169
1193
|
status: AI_REQUEST_STATUS.pending,
|
|
1170
1194
|
request: {
|
|
1195
|
+
serviceTier,
|
|
1171
1196
|
rootAiRequestId: rootState.rootAiRequest.id,
|
|
1172
1197
|
traceId: rootState.traceId,
|
|
1173
1198
|
},
|
|
@@ -1204,15 +1229,17 @@ export abstract class Agent<TContext extends agent.BaseAgentContext = agent.Base
|
|
|
1204
1229
|
state: agent.AgentPersistenceState,
|
|
1205
1230
|
sdkUsage: Usage,
|
|
1206
1231
|
lastResponseId: string | null,
|
|
1232
|
+
responsePricing: Array<{ model?: string; serviceTier: string | null }>,
|
|
1207
1233
|
): Promise<void> {
|
|
1208
1234
|
const usage = agentRunUsage(sdkUsage);
|
|
1209
|
-
const requestUsageEntries = agentRequestCostUsageEntries(sdkUsage);
|
|
1235
|
+
const requestUsageEntries = agentRequestCostUsageEntries(sdkUsage, responsePricing, recordValue(state.aiRequest.request)?.serviceTier);
|
|
1210
1236
|
const cost = agentAttemptCost(
|
|
1211
1237
|
state.aiRequest.provider,
|
|
1212
1238
|
state.model,
|
|
1213
1239
|
usage,
|
|
1214
1240
|
requestUsageEntries,
|
|
1215
1241
|
state.hostedToolUsage,
|
|
1242
|
+
recordValue(state.aiRequest.request)?.serviceTier,
|
|
1216
1243
|
);
|
|
1217
1244
|
|
|
1218
1245
|
state.aiRequest.assign({
|
|
@@ -1250,9 +1277,10 @@ export abstract class Agent<TContext extends agent.BaseAgentContext = agent.Base
|
|
|
1250
1277
|
sdkUsage: Usage | null,
|
|
1251
1278
|
providerStarted: boolean,
|
|
1252
1279
|
error: unknown,
|
|
1280
|
+
responsePricing: Array<{ model?: string; serviceTier: string | null }>,
|
|
1253
1281
|
): Promise<void> {
|
|
1254
1282
|
const usage = sdkUsage ? agentRunUsage(sdkUsage) : emptyAgentRunUsage();
|
|
1255
|
-
const requestUsageEntries = sdkUsage ? agentRequestCostUsageEntries(sdkUsage) : [];
|
|
1283
|
+
const requestUsageEntries = sdkUsage ? agentRequestCostUsageEntries(sdkUsage, responsePricing, recordValue(state.aiRequest.request)?.serviceTier) : [];
|
|
1256
1284
|
const hasBillableUsage = sdkUsage
|
|
1257
1285
|
? hasBillableAgentAttemptUsage(sdkUsage, state.hostedToolUsage)
|
|
1258
1286
|
: Object.values(state.hostedToolUsage).some(count => Number.isFinite(count) && count > 0);
|
|
@@ -1263,6 +1291,7 @@ export abstract class Agent<TContext extends agent.BaseAgentContext = agent.Base
|
|
|
1263
1291
|
usage,
|
|
1264
1292
|
requestUsageEntries,
|
|
1265
1293
|
state.hostedToolUsage,
|
|
1294
|
+
recordValue(state.aiRequest.request)?.serviceTier,
|
|
1266
1295
|
)
|
|
1267
1296
|
: emptyAgentAttemptCost(providerStarted);
|
|
1268
1297
|
const message = error instanceof Error ? error.message : `Unable to run ${this.agentName}.`;
|
|
@@ -1910,36 +1939,13 @@ export abstract class Agent<TContext extends agent.BaseAgentContext = agent.Base
|
|
|
1910
1939
|
};
|
|
1911
1940
|
}
|
|
1912
1941
|
|
|
1913
|
-
/**
|
|
1914
|
-
|
|
1915
|
-
|
|
1916
|
-
|
|
1917
|
-
* @param quotaRetry - Bounded exponential quota retry decision.
|
|
1918
|
-
*/
|
|
1919
|
-
private async deferTrackedRun(
|
|
1920
|
-
state: agent.AgentPersistenceState,
|
|
1921
|
-
quotaRetry: OpenAIQuotaRetryDecision,
|
|
1922
|
-
): Promise<void> {
|
|
1923
|
-
state.aiRequest.assign({
|
|
1924
|
-
status: AI_REQUEST_STATUS.pending,
|
|
1925
|
-
completedAt: null,
|
|
1926
|
-
durationMs: null,
|
|
1927
|
-
errorCode: quotaRetry.code,
|
|
1928
|
-
errorMessage: quotaRetry.message,
|
|
1929
|
-
metadata: withOpenAIQuotaRetryMetadata(
|
|
1930
|
-
state.aiRequest.metadata,
|
|
1931
|
-
quotaRetry.metadata,
|
|
1932
|
-
),
|
|
1933
|
-
});
|
|
1934
|
-
|
|
1935
|
-
await state.aiRequest.save();
|
|
1936
|
-
await this.touchConversation(state, {
|
|
1937
|
-
lastTraceId: state.traceId,
|
|
1938
|
-
lastStatus: AI_REQUEST_STATUS.pending,
|
|
1939
|
-
lastError: quotaRetry.message,
|
|
1940
|
-
nextRetryAt: quotaRetry.retryAt.toISOString(),
|
|
1941
|
-
retryUntil: quotaRetry.retryUntil.toISOString(),
|
|
1942
|
+
/** Keeps unstarted queued work visibly pending on the shared account deadline. */
|
|
1943
|
+
private async deferTrackedRun(state: agent.AgentPersistenceState, error: AIProviderDeferredError): Promise<void> {
|
|
1944
|
+
state.rootAiRequest.assign({ status: AI_REQUEST_STATUS.pending, completedAt: null, errorCode: 'ai_provider_deferred', errorMessage: error.message,
|
|
1945
|
+
metadata: { ...(state.rootAiRequest.metadata ?? {}), providerAdmission: { retryAt: error.retryAt.toISOString(), retryUntil: error.retryUntil.toISOString() } },
|
|
1942
1946
|
});
|
|
1947
|
+
await state.rootAiRequest.save();
|
|
1948
|
+
await this.touchConversation(state, { lastTraceId: state.traceId, lastStatus: AI_REQUEST_STATUS.pending, lastError: error.message, nextRetryAt: error.retryAt.toISOString(), retryUntil: error.retryUntil.toISOString() });
|
|
1943
1949
|
}
|
|
1944
1950
|
|
|
1945
1951
|
/**
|
|
@@ -2044,6 +2050,7 @@ export abstract class Agent<TContext extends agent.BaseAgentContext = agent.Base
|
|
|
2044
2050
|
aiRequestId: prepared.state.aiRequest.id ? String(prepared.state.aiRequest.id) : null,
|
|
2045
2051
|
traceId: prepared.traceId,
|
|
2046
2052
|
model: prepared.model,
|
|
2053
|
+
serviceTier: prepared.serviceTier,
|
|
2047
2054
|
};
|
|
2048
2055
|
}
|
|
2049
2056
|
|
|
@@ -2108,7 +2115,7 @@ function agentRateLimitError(error: unknown): unknown {
|
|
|
2108
2115
|
const seen = new Set<unknown>();
|
|
2109
2116
|
let current = error;
|
|
2110
2117
|
while (current instanceof Error && !seen.has(current)) {
|
|
2111
|
-
if (current instanceof
|
|
2118
|
+
if (isQueueRetryLaterError(current) || current instanceof AIProviderStoppedError) return current;
|
|
2112
2119
|
seen.add(current);
|
|
2113
2120
|
current = current.cause;
|
|
2114
2121
|
}
|
|
@@ -2143,8 +2150,8 @@ interface OpenAIResponseRequestPreview {
|
|
|
2143
2150
|
/** Complete first-turn provider input. */
|
|
2144
2151
|
input: agent.AgentModelInput;
|
|
2145
2152
|
|
|
2146
|
-
/** Maximum turns configured for the live
|
|
2147
|
-
maxTurns: number;
|
|
2153
|
+
/** Maximum turns configured for the live run, or null for no turn ceiling. */
|
|
2154
|
+
maxTurns: number | null;
|
|
2148
2155
|
|
|
2149
2156
|
/** OpenAI model name used for request defaults and the provider body. */
|
|
2150
2157
|
model: string;
|
|
@@ -3297,10 +3304,13 @@ function agentRunUsage(usage: Usage): agent.AgentRunUsage {
|
|
|
3297
3304
|
* Normalizes the SDK's individual provider-request usage for accurate pricing.
|
|
3298
3305
|
*
|
|
3299
3306
|
* @param usage - Agents SDK aggregate usage object.
|
|
3307
|
+
* @param responsePricing - Terminal response metadata in SDK request order.
|
|
3308
|
+
* @param requestedTier - Saved selection used only for legacy Standard fallback.
|
|
3300
3309
|
* @returns Individual request entries with cached-input details preserved.
|
|
3301
3310
|
*/
|
|
3302
|
-
function agentRequestCostUsageEntries(usage: Usage): AIRequestCostUsageEntry[] {
|
|
3303
|
-
return (usage.requestUsageEntries ?? []).map(entry => ({
|
|
3311
|
+
function agentRequestCostUsageEntries(usage: Usage, responsePricing: Array<{ model?: string; serviceTier: string | null }>, requestedTier: unknown): AIRequestCostUsageEntry[] {
|
|
3312
|
+
return (usage.requestUsageEntries ?? []).map((entry, index) => ({
|
|
3313
|
+
...(responsePricing.length === usage.requestUsageEntries?.length ? responsePricing[index] : { serviceTier: effectiveAIServiceTier(undefined, requestedTier) }),
|
|
3304
3314
|
inputTokens: numberOrNull(entry.inputTokens),
|
|
3305
3315
|
outputTokens: numberOrNull(entry.outputTokens),
|
|
3306
3316
|
cachedTokens: tokenDetailValue(entry.inputTokensDetails, 'cached_tokens'),
|
|
@@ -3337,6 +3347,7 @@ interface AgentAttemptCost {
|
|
|
3337
3347
|
* @param usage - Aggregate attempt usage.
|
|
3338
3348
|
* @param requestUsageEntries - Per-provider-request usage entries.
|
|
3339
3349
|
* @param hostedToolUsage - Completed hosted provider-tool calls.
|
|
3350
|
+
* @param requestedTier - Saved selection used for single-request Standard fallback.
|
|
3340
3351
|
* @returns Complete attempt cost and any unpriced dimensions.
|
|
3341
3352
|
*/
|
|
3342
3353
|
function agentAttemptCost(
|
|
@@ -3345,6 +3356,7 @@ function agentAttemptCost(
|
|
|
3345
3356
|
usage: agent.AgentRunUsage,
|
|
3346
3357
|
requestUsageEntries: AIRequestCostUsageEntry[],
|
|
3347
3358
|
hostedToolUsage: Record<string, number>,
|
|
3359
|
+
requestedTier: unknown,
|
|
3348
3360
|
): AgentAttemptCost {
|
|
3349
3361
|
const usesPerRequestUsage = usage.requests > 0
|
|
3350
3362
|
&& requestUsageEntries.length === usage.requests;
|
|
@@ -3354,7 +3366,7 @@ function agentAttemptCost(
|
|
|
3354
3366
|
? usesPerRequestUsage
|
|
3355
3367
|
? calculateAIRequestEntriesCostUSD(model, requestUsageEntries)
|
|
3356
3368
|
: usesSingleRequestAggregate
|
|
3357
|
-
? calculateAIRequestCostUSD(model, usage)
|
|
3369
|
+
? calculateAIRequestCostUSD(model, { ...usage, serviceTier: effectiveAIServiceTier(undefined, requestedTier) })
|
|
3358
3370
|
: null
|
|
3359
3371
|
: null;
|
|
3360
3372
|
const hostedToolCost = provider === AI_PROVIDER.openai
|
|
@@ -3470,20 +3482,22 @@ function emptyAgentRunUsage(): agent.AgentRunUsage {
|
|
|
3470
3482
|
}
|
|
3471
3483
|
|
|
3472
3484
|
/**
|
|
3473
|
-
* Applies
|
|
3485
|
+
* Applies the explicitly selected service tier only to direct OpenAI requests.
|
|
3474
3486
|
*
|
|
3475
3487
|
* @param settings - Agent-owned model settings.
|
|
3476
3488
|
* @param provider - Provider selected for the current attempt.
|
|
3477
|
-
* @
|
|
3489
|
+
* @param serviceTier - Explicit class selection, frozen in queued run payloads.
|
|
3490
|
+
* @returns Provider-safe settings with the selected OpenAI tier.
|
|
3478
3491
|
*/
|
|
3479
|
-
function modelSettingsForProvider(settings: ModelSettings, provider: string): ModelSettings {
|
|
3492
|
+
function modelSettingsForProvider(settings: ModelSettings, provider: string, serviceTier: AIServiceTier): ModelSettings {
|
|
3493
|
+
assertAIServiceTier(provider, serviceTier);
|
|
3480
3494
|
if (provider !== AI_PROVIDER.openai) return settings;
|
|
3481
3495
|
|
|
3482
3496
|
return {
|
|
3483
3497
|
...settings,
|
|
3484
3498
|
providerData: {
|
|
3485
3499
|
...(settings.providerData ?? {}),
|
|
3486
|
-
service_tier:
|
|
3500
|
+
service_tier: serviceTier,
|
|
3487
3501
|
},
|
|
3488
3502
|
};
|
|
3489
3503
|
}
|