@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.
Files changed (653) hide show
  1. package/README.md +75 -17
  2. package/agent-instructions.md +76 -0
  3. package/dist/ai/AIErrors.d.ts +7 -1
  4. package/dist/ai/AIErrors.js +8 -1
  5. package/dist/ai/AIFailover.d.ts +10 -0
  6. package/dist/ai/AIFailover.js +3 -2
  7. package/dist/ai/AIProviderAdmission.d.ts +101 -0
  8. package/dist/ai/AIProviderAdmission.js +336 -0
  9. package/dist/ai/AIRateLimiter.d.ts +11 -2
  10. package/dist/ai/AIRateLimiter.js +125 -10
  11. package/dist/ai/AIRequestTrackingError.d.ts +22 -0
  12. package/dist/ai/AIRequestTrackingError.js +33 -0
  13. package/dist/ai/Agent.d.ts +7 -7
  14. package/dist/ai/Agent.js +84 -56
  15. package/dist/ai/Ai.d.ts +11 -3
  16. package/dist/ai/Ai.js +94 -44
  17. package/dist/ai/OpenAIProviderError.js +1 -1
  18. package/dist/ai/ProviderSseObserver.d.ts +19 -0
  19. package/dist/ai/ProviderSseObserver.js +98 -0
  20. package/dist/ai/aiServiceTier.d.ts +5 -0
  21. package/dist/ai/aiServiceTier.js +14 -0
  22. package/dist/ai/chunkEmbeddingText.d.ts +14 -0
  23. package/dist/ai/chunkEmbeddingText.js +147 -0
  24. package/dist/ai/contracts/AI.d.ts +16 -0
  25. package/dist/ai/contracts/AIRequestErrorDiagnostics.d.ts +12 -0
  26. package/dist/ai/contracts/AIRequestErrorDiagnostics.js +1 -0
  27. package/dist/ai/contracts/AIServiceTier.d.ts +2 -0
  28. package/dist/ai/contracts/AIServiceTier.js +1 -0
  29. package/dist/ai/contracts/Agent.d.ts +3 -0
  30. package/dist/ai/contracts/EmbeddingTextChunk.d.ts +25 -0
  31. package/dist/ai/contracts/EmbeddingTextChunk.js +1 -0
  32. package/dist/ai/contracts/Pricing.d.ts +7 -1
  33. package/dist/ai/contracts/Providers.d.ts +2 -0
  34. package/dist/ai/contracts/index.d.ts +2 -0
  35. package/dist/ai/contracts/index.js +1 -0
  36. package/dist/ai/index.d.ts +8 -2
  37. package/dist/ai/index.js +5 -2
  38. package/dist/ai/{Models.d.ts → modelPricing.d.ts} +2 -2
  39. package/dist/ai/{Models.js → modelPricing.js} +38 -4
  40. package/dist/apps/AppInstallation.d.ts +21 -0
  41. package/dist/apps/AppInstallation.js +16 -0
  42. package/dist/apps/AppRouteError.d.ts +6 -0
  43. package/dist/apps/AppRouteError.js +10 -0
  44. package/dist/apps/AppService.d.ts +24 -0
  45. package/dist/apps/AppService.js +21 -0
  46. package/dist/apps/Apps.d.ts +59 -0
  47. package/dist/apps/Apps.js +566 -0
  48. package/dist/apps/appsPlugin.d.ts +3 -0
  49. package/dist/apps/appsPlugin.js +36 -0
  50. package/dist/apps/commands/disableApp.d.ts +2 -0
  51. package/dist/apps/commands/disableApp.js +5 -0
  52. package/dist/apps/commands/enableApp.d.ts +2 -0
  53. package/dist/apps/commands/enableApp.js +5 -0
  54. package/dist/apps/commands/index.d.ts +10 -0
  55. package/dist/apps/commands/index.js +27 -0
  56. package/dist/apps/commands/installApp.d.ts +2 -0
  57. package/dist/apps/commands/installApp.js +5 -0
  58. package/dist/apps/commands/listApps.d.ts +2 -0
  59. package/dist/apps/commands/listApps.js +5 -0
  60. package/dist/apps/commands/makeAppMigration.d.ts +2 -0
  61. package/dist/apps/commands/makeAppMigration.js +9 -0
  62. package/dist/apps/commands/rollbackApp.d.ts +2 -0
  63. package/dist/apps/commands/rollbackApp.js +5 -0
  64. package/dist/apps/commands/uninstallApp.d.ts +2 -0
  65. package/dist/apps/commands/uninstallApp.js +5 -0
  66. package/dist/apps/contracts/AppAction.d.ts +2 -0
  67. package/dist/apps/contracts/AppAction.js +1 -0
  68. package/dist/apps/contracts/AppDefinition.d.ts +45 -0
  69. package/dist/apps/contracts/AppDefinition.js +1 -0
  70. package/dist/apps/contracts/AppDescription.d.ts +32 -0
  71. package/dist/apps/contracts/AppDescription.js +1 -0
  72. package/dist/apps/contracts/AppManifest.d.ts +30 -0
  73. package/dist/apps/contracts/AppManifest.js +1 -0
  74. package/dist/apps/contracts/AppNavigation.d.ts +9 -0
  75. package/dist/apps/contracts/AppNavigation.js +1 -0
  76. package/dist/apps/contracts/AppNavigationBadge.d.ts +6 -0
  77. package/dist/apps/contracts/AppNavigationBadge.js +1 -0
  78. package/dist/apps/contracts/AppNavigationContext.d.ts +8 -0
  79. package/dist/apps/contracts/AppNavigationContext.js +1 -0
  80. package/dist/apps/contracts/AppNavigationResult.d.ts +12 -0
  81. package/dist/apps/contracts/AppNavigationResult.js +1 -0
  82. package/dist/apps/contracts/AppRoute.d.ts +19 -0
  83. package/dist/apps/contracts/AppRoute.js +1 -0
  84. package/dist/apps/contracts/DiscoveredApp.d.ts +10 -0
  85. package/dist/apps/contracts/DiscoveredApp.js +1 -0
  86. package/dist/apps/contracts/InstalledApps.d.ts +3 -0
  87. package/dist/apps/contracts/InstalledApps.js +1 -0
  88. package/dist/apps/contracts/index.d.ts +11 -0
  89. package/dist/apps/contracts/index.js +1 -0
  90. package/dist/apps/defineApp.d.ts +7 -0
  91. package/dist/apps/defineApp.js +8 -0
  92. package/dist/apps/discoverApps.d.ts +3 -0
  93. package/dist/apps/discoverApps.js +62 -0
  94. package/dist/apps/fastify.d.ts +1 -0
  95. package/dist/apps/fastify.js +1 -0
  96. package/dist/apps/index.d.ts +7 -0
  97. package/dist/apps/index.js +7 -0
  98. package/dist/apps/normalizeAppNavigation.d.ts +3 -0
  99. package/dist/apps/normalizeAppNavigation.js +30 -0
  100. package/dist/apps/registerAppRoutes.d.ts +6 -0
  101. package/dist/apps/registerAppRoutes.js +52 -0
  102. package/dist/apps/validateAppDefinitions.d.ts +3 -0
  103. package/dist/apps/validateAppDefinitions.js +65 -0
  104. package/dist/apps/vite.d.ts +1 -0
  105. package/dist/apps/vite.js +1 -0
  106. package/dist/apps/writeAppTypes.d.ts +2 -0
  107. package/dist/apps/writeAppTypes.js +13 -0
  108. package/dist/auth/Auth.d.ts +18 -0
  109. package/dist/auth/Auth.js +89 -13
  110. package/dist/auth/PasswordLoginAttempt.d.ts +50 -0
  111. package/dist/auth/PasswordLoginAttempt.js +60 -0
  112. package/dist/auth/PasswordSuspendedError.d.ts +10 -0
  113. package/dist/auth/PasswordSuspendedError.js +13 -0
  114. package/dist/auth/contracts/PasswordAuthProviderOptions.d.ts +26 -0
  115. package/dist/auth/contracts/PasswordAuthProviderOptions.js +1 -0
  116. package/dist/auth/contracts/PasswordSuspension.d.ts +7 -0
  117. package/dist/auth/contracts/PasswordSuspension.js +1 -0
  118. package/dist/auth/contracts/PasswordSuspensionOptions.d.ts +10 -0
  119. package/dist/auth/contracts/PasswordSuspensionOptions.js +1 -0
  120. package/dist/auth/contracts/index.d.ts +3 -0
  121. package/dist/auth/contracts/index.js +3 -0
  122. package/dist/auth/index.d.ts +2 -0
  123. package/dist/auth/index.js +2 -0
  124. package/dist/auth/providers/PasswordAuthProvider.d.ts +19 -23
  125. package/dist/auth/providers/PasswordAuthProvider.js +96 -8
  126. package/dist/auth/providers/resolveAuthProviders.js +1 -0
  127. package/dist/cli/Cli.d.ts +2 -0
  128. package/dist/cli/Cli.js +8 -0
  129. package/dist/cli/commands/repl.js +2 -1
  130. package/dist/cli/contracts/CliCommand.d.ts +2 -0
  131. package/dist/cli/contracts/CliCommandInfo.d.ts +12 -0
  132. package/dist/cli/contracts/CliCommandInfo.js +1 -0
  133. package/dist/cli/contracts/index.d.ts +1 -0
  134. package/dist/cli/index.d.ts +1 -0
  135. package/dist/cli/index.js +1 -0
  136. package/dist/cli/listDb3Commands.d.ts +8 -0
  137. package/dist/cli/listDb3Commands.js +10 -0
  138. package/dist/cli/runDb3.d.ts +3 -6
  139. package/dist/cli/runDb3.js +5 -59
  140. package/dist/cli/withDb3Cli.d.ts +4 -0
  141. package/dist/cli/withDb3Cli.js +60 -0
  142. package/dist/db/ActiveQueryBuilder.d.ts +8 -0
  143. package/dist/db/ActiveQueryBuilder.js +11 -0
  144. package/dist/db/ActiveRecord.d.ts +6 -0
  145. package/dist/db/ActiveRecord.js +8 -0
  146. package/dist/db/connection.js +14 -2
  147. package/dist/db/fields/TimestampField.d.ts +1 -1
  148. package/dist/db/fields/TimestampField.js +7 -12
  149. package/dist/db/migrations/DatabaseMigrationManager.d.ts +3 -1
  150. package/dist/db/migrations/DatabaseMigrationManager.js +9 -3
  151. package/dist/db/migrations/contracts/DatabaseMigration.d.ts +7 -0
  152. package/dist/db/migrations/index.d.ts +1 -1
  153. package/dist/db/migrations/index.js +1 -1
  154. package/dist/db/migrations/{KnexMigrationRenderer.d.ts → renderKnexMigration.d.ts} +4 -3
  155. package/dist/db/migrations/{KnexMigrationRenderer.js → renderKnexMigration.js} +7 -6
  156. package/dist/flows/FlowCompiler.js +1 -1
  157. package/dist/flows/Flows.js +1 -1
  158. package/dist/flows/index.d.ts +1 -1
  159. package/dist/flows/index.js +1 -1
  160. package/dist/health/Health.d.ts +41 -0
  161. package/dist/health/Health.js +153 -0
  162. package/dist/health/contracts/Health.d.ts +36 -0
  163. package/dist/health/contracts/Health.js +1 -0
  164. package/dist/health/contracts/HealthHttp.d.ts +15 -0
  165. package/dist/health/contracts/HealthHttp.js +1 -0
  166. package/dist/health/contracts/index.d.ts +2 -0
  167. package/dist/health/contracts/index.js +1 -0
  168. package/dist/health/databaseHealthCheck.d.ts +15 -0
  169. package/dist/health/databaseHealthCheck.js +18 -0
  170. package/dist/health/fastify.d.ts +13 -0
  171. package/dist/health/fastify.js +44 -0
  172. package/dist/health/index.d.ts +3 -0
  173. package/dist/health/index.js +2 -0
  174. package/dist/in-app/InApp.d.ts +33 -0
  175. package/dist/in-app/InApp.js +191 -0
  176. package/dist/in-app/InAppError.d.ts +6 -0
  177. package/dist/in-app/InAppError.js +10 -0
  178. package/dist/in-app/InAppRecord.d.ts +36 -0
  179. package/dist/in-app/InAppRecord.js +24 -0
  180. package/dist/in-app/contracts/InAppInbox.d.ts +45 -0
  181. package/dist/in-app/contracts/InAppInbox.js +1 -0
  182. package/dist/in-app/contracts/InAppMessage.d.ts +22 -0
  183. package/dist/in-app/contracts/InAppMessage.js +1 -0
  184. package/dist/in-app/contracts/InAppScope.d.ts +17 -0
  185. package/dist/in-app/contracts/InAppScope.js +1 -0
  186. package/dist/in-app/contracts/index.d.ts +3 -0
  187. package/dist/in-app/contracts/index.js +3 -0
  188. package/dist/in-app/index.d.ts +4 -0
  189. package/dist/in-app/index.js +4 -0
  190. package/dist/in-app/validation.d.ts +21 -0
  191. package/dist/in-app/validation.js +50 -0
  192. package/dist/index.d.ts +2 -14
  193. package/dist/index.js +2 -5
  194. package/dist/logging/DevelopmentConsole.d.ts +42 -0
  195. package/dist/logging/DevelopmentConsole.js +162 -0
  196. package/dist/logging/Log.d.ts +3 -1
  197. package/dist/logging/Log.js +5 -2
  198. package/dist/logging/PrettyLogFormatter.d.ts +16 -0
  199. package/dist/logging/PrettyLogFormatter.js +151 -0
  200. package/dist/logging/acquireDevelopmentConsole.d.ts +6 -0
  201. package/dist/logging/acquireDevelopmentConsole.js +21 -0
  202. package/dist/logging/contracts/DevelopmentConsoleOptions.d.ts +16 -0
  203. package/dist/logging/contracts/DevelopmentConsoleOptions.js +1 -0
  204. package/dist/logging/contracts/EmailLogOptions.d.ts +8 -0
  205. package/dist/logging/contracts/EmailLogOptions.js +1 -0
  206. package/dist/logging/contracts/HttpExchangeMonitorOptions.d.ts +12 -0
  207. package/dist/logging/contracts/HttpExchangeMonitorOptions.js +1 -0
  208. package/dist/logging/contracts/LogTransportOptions.d.ts +19 -0
  209. package/dist/logging/contracts/LogTransportOptions.js +1 -0
  210. package/dist/logging/contracts/LoggingOptions.d.ts +12 -1
  211. package/dist/logging/contracts/index.d.ts +4 -0
  212. package/dist/logging/contracts/index.js +4 -0
  213. package/dist/logging/drivers/PinoLoggerDriver.d.ts +3 -1
  214. package/dist/logging/drivers/PinoLoggerDriver.js +75 -16
  215. package/dist/logging/formatLogEmail.d.ts +4 -0
  216. package/dist/logging/formatLogEmail.js +21 -0
  217. package/dist/logging/highlightQueueMessage.d.ts +11 -0
  218. package/dist/logging/highlightQueueMessage.js +36 -0
  219. package/dist/logging/httpBodyCapture.d.ts +24 -0
  220. package/dist/logging/httpBodyCapture.js +321 -0
  221. package/dist/logging/index.d.ts +2 -0
  222. package/dist/logging/index.js +2 -0
  223. package/dist/logging/redactLogEmail.d.ts +2 -0
  224. package/dist/logging/redactLogEmail.js +12 -0
  225. package/dist/logging/registerHttpExchangeMonitor.d.ts +10 -0
  226. package/dist/logging/registerHttpExchangeMonitor.js +43 -0
  227. package/dist/logging/transports/EmailLogTransport.d.ts +18 -0
  228. package/dist/logging/transports/EmailLogTransport.js +47 -0
  229. package/dist/mail/Mail.d.ts +2 -0
  230. package/dist/mail/Mail.js +3 -0
  231. package/dist/mail/MailDeliveryError.d.ts +9 -0
  232. package/dist/mail/MailDeliveryError.js +16 -0
  233. package/dist/mail/index.d.ts +1 -0
  234. package/dist/mail/index.js +1 -0
  235. package/dist/mail/transports/MailgunTransport.js +2 -0
  236. package/dist/mail/transports/ResendTransport.d.ts +3 -2
  237. package/dist/mail/transports/ResendTransport.js +22 -14
  238. package/dist/media/MediaManager.d.ts +4 -2
  239. package/dist/media/MediaManager.js +40 -8
  240. package/dist/network/BlockedUrlError.d.ts +16 -0
  241. package/dist/network/BlockedUrlError.js +19 -0
  242. package/dist/network/assertPublicUrl.d.ts +22 -0
  243. package/dist/network/assertPublicUrl.js +67 -0
  244. package/dist/network/contracts/GuardedFetch.d.ts +35 -0
  245. package/dist/network/contracts/GuardedFetch.js +1 -0
  246. package/dist/network/contracts/PublicUrlOptions.d.ts +17 -0
  247. package/dist/network/contracts/PublicUrlOptions.js +1 -0
  248. package/dist/network/contracts/index.d.ts +2 -0
  249. package/dist/network/contracts/index.js +2 -0
  250. package/dist/network/guardedFetch.d.ts +29 -0
  251. package/dist/network/guardedFetch.js +133 -0
  252. package/dist/network/index.d.ts +6 -0
  253. package/dist/network/index.js +6 -0
  254. package/dist/network/playwright/GuardedBrowserProxy.d.ts +32 -0
  255. package/dist/network/playwright/GuardedBrowserProxy.js +172 -0
  256. package/dist/network/playwright/contracts/GuardedBrowserContextOptions.d.ts +37 -0
  257. package/dist/network/playwright/contracts/GuardedBrowserContextOptions.js +1 -0
  258. package/dist/network/playwright/contracts/index.d.ts +1 -0
  259. package/dist/network/playwright/contracts/index.js +1 -0
  260. package/dist/network/playwright/index.d.ts +2 -0
  261. package/dist/network/playwright/index.js +2 -0
  262. package/dist/network/playwright/newGuardedBrowserContext.d.ts +21 -0
  263. package/dist/network/playwright/newGuardedBrowserContext.js +86 -0
  264. package/dist/network/privateNetworkAddresses.d.ts +44 -0
  265. package/dist/network/privateNetworkAddresses.js +157 -0
  266. package/dist/network/publicAddressLookup.d.ts +26 -0
  267. package/dist/network/publicAddressLookup.js +42 -0
  268. package/dist/notifications/Notifications.d.ts +27 -0
  269. package/dist/notifications/Notifications.js +99 -0
  270. package/dist/notifications/contracts/Notification.d.ts +56 -0
  271. package/dist/notifications/contracts/Notification.js +1 -0
  272. package/dist/notifications/contracts/NotificationDelivery.d.ts +11 -0
  273. package/dist/notifications/contracts/NotificationDelivery.js +1 -0
  274. package/dist/notifications/contracts/index.d.ts +2 -0
  275. package/dist/notifications/contracts/index.js +2 -0
  276. package/dist/notifications/index.d.ts +2 -0
  277. package/dist/notifications/index.js +2 -0
  278. package/dist/queue/JobRunAttempt.d.ts +16 -0
  279. package/dist/queue/JobRunAttempt.js +17 -0
  280. package/dist/queue/JobRunEvent.d.ts +15 -0
  281. package/dist/queue/JobRunEvent.js +16 -0
  282. package/dist/queue/JobRunStoppedError.d.ts +6 -0
  283. package/dist/queue/JobRunStoppedError.js +10 -0
  284. package/dist/queue/Queue.d.ts +19 -4
  285. package/dist/queue/Queue.js +122 -9
  286. package/dist/queue/QueueTerminalError.d.ts +9 -0
  287. package/dist/queue/QueueTerminalError.js +12 -0
  288. package/dist/queue/QueueWorker.d.ts +12 -5
  289. package/dist/queue/QueueWorker.js +94 -9
  290. package/dist/queue/QueueWorkerReporter.d.ts +17 -0
  291. package/dist/queue/QueueWorkerReporter.js +71 -0
  292. package/dist/queue/QueueableJob.d.ts +2 -2
  293. package/dist/queue/RunnableJob.d.ts +78 -0
  294. package/dist/queue/RunnableJob.js +284 -0
  295. package/dist/queue/console.d.ts +8 -0
  296. package/dist/queue/console.js +53 -19
  297. package/dist/queue/contracts/QueueDriver.d.ts +8 -0
  298. package/dist/queue/contracts/QueueJobRunner.d.ts +4 -0
  299. package/dist/queue/contracts/QueueJobRunner.js +1 -0
  300. package/dist/queue/contracts/QueuePayload.d.ts +1 -1
  301. package/dist/queue/contracts/QueueSelection.d.ts +11 -0
  302. package/dist/queue/contracts/QueueSelection.js +1 -0
  303. package/dist/queue/contracts/QueueService.d.ts +18 -4
  304. package/dist/queue/contracts/QueueWorkerLifecycle.d.ts +2 -2
  305. package/dist/queue/contracts/QueueWorkerSnapshot.d.ts +14 -0
  306. package/dist/queue/contracts/QueueWorkerSnapshot.js +1 -0
  307. package/dist/queue/contracts/QueueableJob.d.ts +7 -3
  308. package/dist/queue/contracts/QueueableJobContract.d.ts +12 -0
  309. package/dist/queue/contracts/QueueableJobContract.js +1 -0
  310. package/dist/queue/contracts/index.d.ts +4 -0
  311. package/dist/queue/contracts/index.js +2 -0
  312. package/dist/queue/drivers/DatabaseQueueDriver.d.ts +4 -0
  313. package/dist/queue/drivers/DatabaseQueueDriver.js +27 -3
  314. package/dist/queue/drivers/RedisQueueDriver.d.ts +7 -0
  315. package/dist/queue/drivers/RedisQueueDriver.js +37 -0
  316. package/dist/queue/index.d.ts +5 -0
  317. package/dist/queue/index.js +5 -0
  318. package/dist/queue/jobEnvelopeHasPrefix.d.ts +3 -0
  319. package/dist/queue/jobEnvelopeHasPrefix.js +4 -0
  320. package/dist/scheduler/ScheduledEvent.d.ts +8 -4
  321. package/dist/scheduler/ScheduledEvent.js +17 -3
  322. package/dist/scheduler/ScheduledJob.d.ts +1 -1
  323. package/dist/scheduler/Scheduler.d.ts +5 -0
  324. package/dist/scheduler/Scheduler.js +92 -28
  325. package/dist/scheduler/SchedulerCheckpointRecord.d.ts +16 -0
  326. package/dist/scheduler/SchedulerCheckpointRecord.js +53 -0
  327. package/dist/scheduler/SchedulerWorker.d.ts +3 -5
  328. package/dist/scheduler/SchedulerWorker.js +58 -14
  329. package/dist/scheduler/console.js +3 -1
  330. package/dist/scheduler/contracts/Schedule.d.ts +19 -0
  331. package/dist/scheduler/contracts/Schedule.js +1 -0
  332. package/dist/scheduler/contracts/Scheduler.d.ts +18 -6
  333. package/dist/scheduler/contracts/SchedulerCheckpoint.d.ts +23 -0
  334. package/dist/scheduler/contracts/SchedulerCheckpoint.js +1 -0
  335. package/dist/scheduler/contracts/SchedulerConsole.d.ts +5 -0
  336. package/dist/scheduler/contracts/SchedulerWorker.d.ts +6 -1
  337. package/dist/scheduler/contracts/index.d.ts +2 -0
  338. package/dist/scheduler/contracts/index.js +2 -0
  339. package/dist/scheduler/index.d.ts +1 -0
  340. package/dist/scheduler/index.js +1 -0
  341. package/dist/server/App.d.ts +36 -4
  342. package/dist/server/App.js +57 -7
  343. package/dist/server/contracts/HttpErrorHandlerOptions.d.ts +29 -0
  344. package/dist/server/contracts/HttpErrorHandlerOptions.js +1 -0
  345. package/dist/server/contracts/index.d.ts +1 -0
  346. package/dist/server/contracts/index.js +1 -0
  347. package/dist/server/index.d.ts +4 -0
  348. package/dist/server/index.js +4 -0
  349. package/dist/server/publicServerErrorMessage.d.ts +11 -0
  350. package/dist/server/publicServerErrorMessage.js +16 -0
  351. package/dist/server/registerBrowserJsonFormatting.d.ts +16 -0
  352. package/dist/server/registerBrowserJsonFormatting.js +100 -0
  353. package/dist/server/registerHttpErrorHandler.d.ts +20 -0
  354. package/dist/server/registerHttpErrorHandler.js +93 -0
  355. package/dist/ssr/vite/contracts/ViteSsrOptions.d.ts +2 -0
  356. package/dist/ssr/vite/fastifyViteSsr.js +4 -3
  357. package/dist/storage/drivers/FlystorageDisk.js +2 -2
  358. package/dist/storage/index.d.ts +2 -2
  359. package/dist/storage/index.js +2 -2
  360. package/dist/websocket/WebSocketChannels.d.ts +18 -0
  361. package/dist/websocket/WebSocketChannels.js +129 -0
  362. package/dist/websocket/WebSocketConnection.d.ts +25 -0
  363. package/dist/websocket/WebSocketConnection.js +244 -0
  364. package/dist/websocket/WebSockets.d.ts +41 -0
  365. package/dist/websocket/WebSockets.js +194 -0
  366. package/dist/websocket/client/WebSocketClient.d.ts +21 -0
  367. package/dist/websocket/client/WebSocketClient.js +230 -0
  368. package/dist/websocket/client/index.d.ts +3 -0
  369. package/dist/websocket/client/index.js +1 -0
  370. package/dist/websocket/contracts/WebSocketChannel.d.ts +20 -0
  371. package/dist/websocket/contracts/WebSocketChannel.js +1 -0
  372. package/dist/websocket/contracts/WebSocketClient.d.ts +45 -0
  373. package/dist/websocket/contracts/WebSocketClient.js +1 -0
  374. package/dist/websocket/contracts/WebSocketEndpoint.d.ts +43 -0
  375. package/dist/websocket/contracts/WebSocketEndpoint.js +1 -0
  376. package/dist/websocket/contracts/WebSocketOptions.d.ts +48 -0
  377. package/dist/websocket/contracts/WebSocketOptions.js +1 -0
  378. package/dist/websocket/contracts/WebSocketPresence.d.ts +6 -0
  379. package/dist/websocket/contracts/WebSocketPresence.js +1 -0
  380. package/dist/websocket/contracts/WebSocketServiceOptions.d.ts +12 -0
  381. package/dist/websocket/contracts/WebSocketServiceOptions.js +1 -0
  382. package/dist/websocket/contracts/index.d.ts +6 -0
  383. package/dist/websocket/contracts/index.js +1 -0
  384. package/dist/websocket/defineChannel.d.ts +8 -0
  385. package/dist/websocket/defineChannel.js +13 -0
  386. package/dist/websocket/defineWebSocket.d.ts +14 -0
  387. package/dist/websocket/defineWebSocket.js +4 -0
  388. package/dist/websocket/fastify.d.ts +11 -0
  389. package/dist/websocket/fastify.js +38 -0
  390. package/dist/websocket/index.d.ts +5 -0
  391. package/dist/websocket/index.js +4 -0
  392. package/package.json +108 -7
  393. package/src/ai/AIErrors.ts +10 -0
  394. package/src/ai/AIFailover.ts +3 -2
  395. package/src/ai/AIProviderAdmission.ts +329 -0
  396. package/src/ai/AIRateLimiter.ts +134 -10
  397. package/src/ai/AIRequestTrackingError.ts +37 -0
  398. package/src/ai/Agent.ts +85 -71
  399. package/src/ai/Ai.ts +104 -48
  400. package/src/ai/OpenAIProviderError.ts +1 -1
  401. package/src/ai/ProviderSseObserver.ts +89 -0
  402. package/src/ai/README.md +216 -11
  403. package/src/ai/aiServiceTier.ts +14 -0
  404. package/src/ai/chunkEmbeddingText.ts +137 -0
  405. package/src/ai/contracts/AI.ts +17 -0
  406. package/src/ai/contracts/AIRequestErrorDiagnostics.ts +12 -0
  407. package/src/ai/contracts/AIServiceTier.ts +2 -0
  408. package/src/ai/contracts/Agent.ts +3 -0
  409. package/src/ai/contracts/EmbeddingTextChunk.ts +26 -0
  410. package/src/ai/contracts/Pricing.ts +7 -1
  411. package/src/ai/contracts/Providers.ts +2 -0
  412. package/src/ai/contracts/index.ts +2 -0
  413. package/src/ai/examples/prepareDocumentEmbeddings.ts +20 -0
  414. package/src/ai/index.ts +9 -2
  415. package/src/ai/{Models.ts → modelPricing.ts} +37 -4
  416. package/src/apps/AppInstallation.ts +25 -0
  417. package/src/apps/AppRouteError.ts +8 -0
  418. package/src/apps/AppService.ts +30 -0
  419. package/src/apps/Apps.ts +508 -0
  420. package/src/apps/README.md +354 -0
  421. package/src/apps/appsPlugin.ts +34 -0
  422. package/src/apps/commands/disableApp.ts +6 -0
  423. package/src/apps/commands/enableApp.ts +6 -0
  424. package/src/apps/commands/index.ts +29 -0
  425. package/src/apps/commands/installApp.ts +6 -0
  426. package/src/apps/commands/listApps.ts +6 -0
  427. package/src/apps/commands/makeAppMigration.ts +9 -0
  428. package/src/apps/commands/rollbackApp.ts +6 -0
  429. package/src/apps/commands/uninstallApp.ts +6 -0
  430. package/src/apps/contracts/AppAction.ts +2 -0
  431. package/src/apps/contracts/AppDefinition.ts +49 -0
  432. package/src/apps/contracts/AppDescription.ts +27 -0
  433. package/src/apps/contracts/AppManifest.ts +32 -0
  434. package/src/apps/contracts/AppNavigation.ts +10 -0
  435. package/src/apps/contracts/AppNavigationBadge.ts +6 -0
  436. package/src/apps/contracts/AppNavigationContext.ts +6 -0
  437. package/src/apps/contracts/AppNavigationResult.ts +9 -0
  438. package/src/apps/contracts/AppRoute.ts +18 -0
  439. package/src/apps/contracts/DiscoveredApp.ts +11 -0
  440. package/src/apps/contracts/InstalledApps.ts +2 -0
  441. package/src/apps/contracts/index.ts +11 -0
  442. package/src/apps/defineApp.ts +10 -0
  443. package/src/apps/discoverApps.ts +56 -0
  444. package/src/apps/fastify.ts +1 -0
  445. package/src/apps/index.ts +7 -0
  446. package/src/apps/normalizeAppNavigation.ts +29 -0
  447. package/src/apps/registerAppRoutes.ts +48 -0
  448. package/src/apps/validateAppDefinitions.ts +52 -0
  449. package/src/apps/vite.ts +1 -0
  450. package/src/apps/writeAppTypes.ts +14 -0
  451. package/src/auth/Auth.ts +89 -23
  452. package/src/auth/PasswordLoginAttempt.ts +72 -0
  453. package/src/auth/PasswordSuspendedError.ts +13 -0
  454. package/src/auth/README.md +94 -4
  455. package/src/auth/contracts/PasswordAuthProviderOptions.ts +30 -0
  456. package/src/auth/contracts/PasswordSuspension.ts +7 -0
  457. package/src/auth/contracts/PasswordSuspensionOptions.ts +10 -0
  458. package/src/auth/contracts/index.ts +3 -0
  459. package/src/auth/examples/runPasswordAuth.ts +6 -6
  460. package/src/auth/index.ts +2 -0
  461. package/src/auth/providers/PasswordAuthProvider.ts +96 -30
  462. package/src/auth/providers/resolveAuthProviders.ts +1 -0
  463. package/src/cli/Cli.ts +9 -0
  464. package/src/cli/README.md +19 -0
  465. package/src/cli/commands/repl.ts +2 -1
  466. package/src/cli/contracts/CliCommand.ts +2 -0
  467. package/src/cli/contracts/CliCommandInfo.ts +13 -0
  468. package/src/cli/contracts/index.ts +1 -0
  469. package/src/cli/index.ts +1 -0
  470. package/src/cli/listDb3Commands.ts +12 -0
  471. package/src/cli/runDb3.ts +5 -51
  472. package/src/cli/withDb3Cli.ts +55 -0
  473. package/src/db/ActiveQueryBuilder.ts +12 -0
  474. package/src/db/ActiveRecord.ts +9 -0
  475. package/src/db/README.md +45 -1
  476. package/src/db/connection.ts +12 -1
  477. package/src/db/examples/FieldNote.ts +7 -13
  478. package/src/db/examples/KnowledgeNote.ts +7 -13
  479. package/src/db/examples/runNoteMigrations.ts +11 -11
  480. package/src/db/fields/TimestampField.ts +8 -17
  481. package/src/db/migrations/DatabaseMigrationManager.ts +12 -4
  482. package/src/db/migrations/contracts/DatabaseMigration.ts +9 -0
  483. package/src/db/migrations/index.ts +1 -1
  484. package/src/db/migrations/{KnexMigrationRenderer.ts → renderKnexMigration.ts} +8 -14
  485. package/src/flows/FlowCompiler.ts +1 -1
  486. package/src/flows/Flows.ts +1 -1
  487. package/src/flows/index.ts +1 -1
  488. package/src/health/Health.ts +163 -0
  489. package/src/health/README.md +46 -0
  490. package/src/health/contracts/Health.ts +47 -0
  491. package/src/health/contracts/HealthHttp.ts +19 -0
  492. package/src/health/contracts/index.ts +2 -0
  493. package/src/health/databaseHealthCheck.ts +21 -0
  494. package/src/health/fastify.ts +49 -0
  495. package/src/health/index.ts +3 -0
  496. package/src/in-app/InApp.ts +173 -0
  497. package/src/in-app/InAppError.ts +8 -0
  498. package/src/in-app/InAppRecord.ts +41 -0
  499. package/src/in-app/README.md +193 -0
  500. package/src/in-app/contracts/InAppInbox.ts +51 -0
  501. package/src/in-app/contracts/InAppMessage.ts +19 -0
  502. package/src/in-app/contracts/InAppScope.ts +12 -0
  503. package/src/in-app/contracts/index.ts +3 -0
  504. package/src/in-app/examples/sendReportReady.ts +14 -0
  505. package/src/in-app/index.ts +4 -0
  506. package/src/in-app/validation.ts +49 -0
  507. package/src/index.ts +2 -22
  508. package/src/logging/DevelopmentConsole.ts +154 -0
  509. package/src/logging/Log.ts +5 -2
  510. package/src/logging/PrettyLogFormatter.ts +165 -0
  511. package/src/logging/README.md +52 -109
  512. package/src/logging/acquireDevelopmentConsole.ts +19 -0
  513. package/src/logging/contracts/DevelopmentConsoleOptions.ts +13 -0
  514. package/src/logging/contracts/EmailLogOptions.ts +9 -0
  515. package/src/logging/contracts/HttpExchangeMonitorOptions.ts +13 -0
  516. package/src/logging/contracts/LogTransportOptions.ts +10 -0
  517. package/src/logging/contracts/LoggingOptions.ts +12 -1
  518. package/src/logging/contracts/index.ts +4 -0
  519. package/src/logging/development/README.md +88 -0
  520. package/src/logging/drivers/PinoLoggerDriver.ts +72 -20
  521. package/src/logging/examples/runDevelopmentLogs.ts +36 -0
  522. package/src/logging/formatLogEmail.ts +24 -0
  523. package/src/logging/highlightQueueMessage.ts +38 -0
  524. package/src/logging/httpBodyCapture.ts +393 -0
  525. package/src/logging/index.ts +2 -0
  526. package/src/logging/redactLogEmail.ts +12 -0
  527. package/src/logging/registerHttpExchangeMonitor.ts +45 -0
  528. package/src/logging/transports/EmailLogTransport.ts +46 -0
  529. package/src/mail/Mail.ts +5 -0
  530. package/src/mail/MailDeliveryError.ts +8 -0
  531. package/src/mail/README.md +11 -1
  532. package/src/mail/index.ts +1 -0
  533. package/src/mail/transports/MailgunTransport.ts +2 -0
  534. package/src/mail/transports/ResendTransport.ts +24 -22
  535. package/src/media/MediaManager.ts +31 -10
  536. package/src/media/README.md +4 -0
  537. package/src/media/examples/runPrivateFiles.ts +2 -2
  538. package/src/network/BlockedUrlError.ts +19 -0
  539. package/src/network/README.md +133 -0
  540. package/src/network/assertPublicUrl.ts +77 -0
  541. package/src/network/contracts/GuardedFetch.ts +40 -0
  542. package/src/network/contracts/PublicUrlOptions.ts +17 -0
  543. package/src/network/contracts/index.ts +2 -0
  544. package/src/network/examples/runGuardedFetch.ts +35 -0
  545. package/src/network/guardedFetch.ts +150 -0
  546. package/src/network/index.ts +6 -0
  547. package/src/network/playwright/GuardedBrowserProxy.ts +172 -0
  548. package/src/network/playwright/contracts/GuardedBrowserContextOptions.ts +43 -0
  549. package/src/network/playwright/contracts/index.ts +1 -0
  550. package/src/network/playwright/index.ts +2 -0
  551. package/src/network/playwright/newGuardedBrowserContext.ts +74 -0
  552. package/src/network/privateNetworkAddresses.ts +166 -0
  553. package/src/network/publicAddressLookup.ts +49 -0
  554. package/src/notifications/Notifications.ts +105 -0
  555. package/src/notifications/README.md +59 -0
  556. package/src/notifications/contracts/Notification.ts +65 -0
  557. package/src/notifications/contracts/NotificationDelivery.ts +11 -0
  558. package/src/notifications/contracts/index.ts +2 -0
  559. package/src/notifications/examples/ReportReadyNotification.ts +31 -0
  560. package/src/notifications/index.ts +2 -0
  561. package/src/queue/JobRunAttempt.ts +17 -0
  562. package/src/queue/JobRunEvent.ts +16 -0
  563. package/src/queue/JobRunStoppedError.ts +8 -0
  564. package/src/queue/Queue.ts +112 -11
  565. package/src/queue/QueueTerminalError.ts +12 -0
  566. package/src/queue/QueueWorker.ts +86 -7
  567. package/src/queue/QueueWorkerReporter.ts +59 -0
  568. package/src/queue/QueueableJob.ts +2 -2
  569. package/src/queue/README.md +142 -1
  570. package/src/queue/RunnableJob.ts +272 -0
  571. package/src/queue/console.ts +54 -21
  572. package/src/queue/contracts/QueueDriver.ts +9 -0
  573. package/src/queue/contracts/QueueJobRunner.ts +4 -0
  574. package/src/queue/contracts/QueuePayload.ts +1 -1
  575. package/src/queue/contracts/QueueSelection.ts +11 -0
  576. package/src/queue/contracts/QueueService.ts +19 -4
  577. package/src/queue/contracts/QueueWorkerLifecycle.ts +2 -2
  578. package/src/queue/contracts/QueueWorkerSnapshot.ts +15 -0
  579. package/src/queue/contracts/QueueableJob.ts +7 -3
  580. package/src/queue/contracts/QueueableJobContract.ts +13 -0
  581. package/src/queue/contracts/index.ts +6 -0
  582. package/src/queue/drivers/DatabaseQueueDriver.ts +25 -3
  583. package/src/queue/drivers/RedisQueueDriver.ts +36 -0
  584. package/src/queue/examples/runQueueSelection.ts +34 -0
  585. package/src/queue/index.ts +7 -0
  586. package/src/queue/jobEnvelopeHasPrefix.ts +6 -0
  587. package/src/scheduler/README.md +50 -9
  588. package/src/scheduler/ScheduledEvent.ts +20 -5
  589. package/src/scheduler/ScheduledJob.ts +1 -1
  590. package/src/scheduler/Scheduler.ts +73 -27
  591. package/src/scheduler/SchedulerCheckpointRecord.ts +51 -0
  592. package/src/scheduler/SchedulerWorker.ts +54 -19
  593. package/src/scheduler/console.ts +3 -1
  594. package/src/scheduler/contracts/Schedule.ts +22 -0
  595. package/src/scheduler/contracts/Scheduler.ts +21 -6
  596. package/src/scheduler/contracts/SchedulerCheckpoint.ts +23 -0
  597. package/src/scheduler/contracts/SchedulerConsole.ts +5 -0
  598. package/src/scheduler/contracts/SchedulerWorker.ts +6 -1
  599. package/src/scheduler/contracts/index.ts +2 -0
  600. package/src/scheduler/examples/runSchedulerWindow.ts +54 -0
  601. package/src/scheduler/index.ts +1 -0
  602. package/src/server/App.ts +73 -10
  603. package/src/server/README.md +95 -2
  604. package/src/server/contracts/HttpErrorHandlerOptions.ts +29 -0
  605. package/src/server/contracts/index.ts +1 -0
  606. package/src/server/examples/createFirstServer.ts +5 -3
  607. package/src/server/index.ts +4 -0
  608. package/src/server/publicServerErrorMessage.ts +17 -0
  609. package/src/server/registerBrowserJsonFormatting.ts +94 -0
  610. package/src/server/registerHttpErrorHandler.ts +96 -0
  611. package/src/ssr/README.md +6 -0
  612. package/src/ssr/vite/contracts/ViteSsrOptions.ts +2 -0
  613. package/src/ssr/vite/fastifyViteSsr.ts +4 -3
  614. package/src/storage/drivers/FlystorageDisk.ts +2 -2
  615. package/src/storage/index.ts +2 -2
  616. package/src/websocket/README.md +458 -0
  617. package/src/websocket/WebSocketChannels.ts +99 -0
  618. package/src/websocket/WebSocketConnection.ts +162 -0
  619. package/src/websocket/WebSockets.ts +157 -0
  620. package/src/websocket/client/WebSocketClient.ts +188 -0
  621. package/src/websocket/client/index.ts +3 -0
  622. package/src/websocket/contracts/WebSocketChannel.ts +23 -0
  623. package/src/websocket/contracts/WebSocketClient.ts +48 -0
  624. package/src/websocket/contracts/WebSocketEndpoint.ts +46 -0
  625. package/src/websocket/contracts/WebSocketOptions.ts +50 -0
  626. package/src/websocket/contracts/WebSocketPresence.ts +6 -0
  627. package/src/websocket/contracts/WebSocketServiceOptions.ts +12 -0
  628. package/src/websocket/contracts/index.ts +6 -0
  629. package/src/websocket/defineChannel.ts +14 -0
  630. package/src/websocket/defineWebSocket.ts +15 -0
  631. package/src/websocket/examples/board/LiveBoard.ts +97 -0
  632. package/src/websocket/examples/board/SummarizeBoardJob.ts +52 -0
  633. package/src/websocket/examples/board/boardSnapshot.ts +16 -0
  634. package/src/websocket/examples/board/createBoardClient.ts +43 -0
  635. package/src/websocket/examples/board/createBoardStore.ts +58 -0
  636. package/src/websocket/examples/board/registerBoardRoutes.ts +31 -0
  637. package/src/websocket/examples/createChannelSync.ts +66 -0
  638. package/src/websocket/examples/deploymentEndpoint.ts +13 -0
  639. package/src/websocket/examples/deploymentSnapshot.ts +36 -0
  640. package/src/websocket/examples/resourceChannels.ts +18 -0
  641. package/src/websocket/examples/userEndpoint.ts +27 -0
  642. package/src/websocket/fastify.ts +39 -0
  643. package/src/websocket/index.ts +5 -0
  644. package/templates/AGENTS.md +33 -2
  645. /package/dist/flows/{FlowValueValidator.d.ts → flowValueValidator.d.ts} +0 -0
  646. /package/dist/flows/{FlowValueValidator.js → flowValueValidator.js} +0 -0
  647. /package/dist/storage/{mime.d.ts → mimeTypeFromPath.d.ts} +0 -0
  648. /package/dist/storage/{mime.js → mimeTypeFromPath.js} +0 -0
  649. /package/dist/storage/{contents.d.ts → storageContentsToBuffer.d.ts} +0 -0
  650. /package/dist/storage/{contents.js → storageContentsToBuffer.js} +0 -0
  651. /package/src/flows/{FlowValueValidator.ts → flowValueValidator.ts} +0 -0
  652. /package/src/storage/{mime.ts → mimeTypeFromPath.ts} +0 -0
  653. /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 { calculateAIHostedToolCost, calculateAIRequestCostUSD, calculateAIRequestEntriesCostUSD, combineAIRequestCostUSD, type AIRequestCostUsageEntry } from './Models.js';
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 { openAIQuotaRetryDecision, withOpenAIQuotaRetryMetadata, withoutOpenAIQuotaRetryMetadata, type OpenAIQuotaRetryDecision } from './OpenAIQuotaRetry.js';
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
- protected readonly maxTurns: number = 8;
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 (isQueueRetryLaterError(error)) throw error;
370
-
371
- const quotaRetry = openAIQuotaRetryDecision(error, prepared.state.aiRequest);
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: modelSettingsForProvider(invocation.modelSettings, attempt.provider),
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 error = agentRateLimitError(caught);
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
- * Keeps a quota-blocked queued run pending and records its next retry.
1915
- *
1916
- * @param state - Active run persistence state.
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 AIRateLimitDeferredError) return current;
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 agent run. */
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 Standard service tier only to direct OpenAI provider requests.
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
- * @returns Provider-safe settings with deterministic OpenAI billing tier.
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: 'default',
3500
+ service_tier: serviceTier,
3487
3501
  },
3488
3502
  };
3489
3503
  }