@db3.ai/app 0.1.0-beta.1 → 0.1.0-beta.4

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 +68 -9
  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
@@ -5,6 +5,7 @@ import { AiConversation } from './AiConversation.js';
5
5
  import { AiRequest } from './AiRequest.js';
6
6
  import { type AIProviderSelection } from './index.js';
7
7
  import type { AIUsageCharge } from './contracts/AI.js';
8
+ import type { AIServiceTier } from './contracts/AIServiceTier.js';
8
9
  import type * as agent from './contracts/Agent.js';
9
10
  /**
10
11
  * Context passed into the complete provider-input builder.
@@ -20,7 +21,8 @@ export interface AgentInputContext {
20
21
  */
21
22
  export declare abstract class Agent<TContext extends agent.BaseAgentContext = agent.BaseAgentContext> implements Serializable<TContext> {
22
23
  protected readonly context: TContext;
23
- protected readonly maxTurns: number;
24
+ /** Maximum model turns per run; null lets the agent finish without a turn ceiling. */
25
+ protected readonly maxTurns: number | null;
24
26
  protected readonly maxPreviousMessages: number;
25
27
  /** Provider reasoning effort used for every run of this agent. */
26
28
  protected readonly reasoningEffort: agent.AgentReasoningEffort | null;
@@ -29,6 +31,8 @@ export declare abstract class Agent<TContext extends agent.BaseAgentContext = ag
29
31
  protected readonly workflowName: string;
30
32
  /** Optional agent-specific model. Omit to use the global `app().ai.model`. */
31
33
  protected readonly model?: string;
34
+ /** OpenAI processing tier for this agent. Override to opt into local Flex experiments. */
35
+ protected readonly serviceTier: AIServiceTier;
32
36
  private currentInput;
33
37
  /**
34
38
  * Creates a persisted agent runtime for the supplied app context.
@@ -401,6 +405,7 @@ export declare abstract class Agent<TContext extends agent.BaseAgentContext = ag
401
405
  * @param rootState - Logical run root and shared conversation state.
402
406
  * @param attempt - Provider and model selected for this execution.
403
407
  * @param startedAtMs - Attempt start timestamp in milliseconds.
408
+ * @param serviceTier - Requested tier retained alongside this attempt.
404
409
  * @returns Persistence state scoped to the new provider attempt.
405
410
  */
406
411
  private startTrackedAttempt;
@@ -550,12 +555,7 @@ export declare abstract class Agent<TContext extends agent.BaseAgentContext = ag
550
555
  * @returns Recursive usage, settled credits, and complete provider cost.
551
556
  */
552
557
  private settleFinalizedTrackedRun;
553
- /**
554
- * Keeps a quota-blocked queued run pending and records its next retry.
555
- *
556
- * @param state - Active run persistence state.
557
- * @param quotaRetry - Bounded exponential quota retry decision.
558
- */
558
+ /** Keeps unstarted queued work visibly pending on the shared account deadline. */
559
559
  private deferTrackedRun;
560
560
  /**
561
561
  * Marks the tracked AI request as failed.
package/dist/ai/Agent.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { AIProviderDeferredError, AIProviderStoppedError } from './AIProviderAdmission.js';
1
2
  import { aiExecutionContext } from './AiExecutionContext.js';
2
3
  import { Agent as SdkAgent, Runner, generateTraceId } from '@openai/agents';
3
4
  import { isQueueRetryLaterError } from '@db3.ai/app/queue';
@@ -5,12 +6,13 @@ import { agentMarkdownWithCitations, normalizedAgentCitations } from '@db3.ai/pu
5
6
  import { app } from '../server/appContext.js';
6
7
  import { AI_MESSAGE_ROLE, AI_MESSAGE_TOOL_STATE } from './AiMessage.js';
7
8
  import { AI_REQUEST_STATUS } from './AiRequest.js';
8
- import { AI_PROVIDER, AIQuotaDeferredError, AIRateLimitDeferredError, isFailoverableFailure, openAIProviderError, responsesRateLimitEndpoint, simulatedProviderOutage } from './index.js';
9
+ import { AI_PROVIDER, isFailoverableFailure, openAIProviderError, responsesRateLimitEndpoint, simulatedProviderOutage } from './index.js';
9
10
  import { AIAllowanceExceededError } from './AIErrors.js';
10
11
  import { estimateTokensFromText } from './Estimates.js';
11
- import { calculateAIHostedToolCost, calculateAIRequestCostUSD, calculateAIRequestEntriesCostUSD, combineAIRequestCostUSD } from './Models.js';
12
+ import { assertAIServiceTier, effectiveAIServiceTier } from './aiServiceTier.js';
13
+ import { calculateAIHostedToolCost, calculateAIRequestCostUSD, calculateAIRequestEntriesCostUSD, combineAIRequestCostUSD } from './modelPricing.js';
12
14
  import { AgentRunJob } from './AgentRunJob.js';
13
- import { openAIQuotaRetryDecision, withOpenAIQuotaRetryMetadata, withoutOpenAIQuotaRetryMetadata } from './OpenAIQuotaRetry.js';
15
+ import { withoutOpenAIQuotaRetryMetadata } from './OpenAIQuotaRetry.js';
14
16
  import { agentCitationFromStreamRecord, agentCitationsFromFinalModelResponse, rememberAgentCitation } from './agentCitations.js';
15
17
  import { serializeQueuedAgent } from './registry.js';
16
18
  import { agentToolResultFromStructuredOutput } from './toolHelpers.js';
@@ -20,6 +22,7 @@ import { INTERRUPTED_TOOL_CALL_MESSAGE, unresolvedToolCallIds } from './toolCall
20
22
  */
21
23
  export class Agent {
22
24
  context;
25
+ /** Maximum model turns per run; null lets the agent finish without a turn ceiling. */
23
26
  maxTurns = 8;
24
27
  maxPreviousMessages = 50;
25
28
  /** Provider reasoning effort used for every run of this agent. */
@@ -29,6 +32,8 @@ export class Agent {
29
32
  workflowName = this.constructor.name;
30
33
  /** Optional agent-specific model. Omit to use the global `app().ai.model`. */
31
34
  model;
35
+ /** OpenAI processing tier for this agent. Override to opt into local Flex experiments. */
36
+ serviceTier = 'default';
32
37
  currentInput = null;
33
38
  /**
34
39
  * Creates a persisted agent runtime for the supplied app context.
@@ -224,17 +229,13 @@ export class Agent {
224
229
  return await this.executePreparedRun(prepared, async () => { });
225
230
  }
226
231
  catch (error) {
227
- if (isQueueRetryLaterError(error))
232
+ if (error instanceof AIProviderDeferredError) {
233
+ await this.deferTrackedRun(prepared.state, error);
228
234
  throw error;
229
- const quotaRetry = openAIQuotaRetryDecision(error, prepared.state.aiRequest);
230
- if (quotaRetry && !quotaRetry.expired) {
231
- await this.deferTrackedRun(prepared.state, quotaRetry);
232
- throw new AIQuotaDeferredError(quotaRetry.delaySeconds, quotaRetry.retryAt, quotaRetry.retryUntil, quotaRetry.deferralCount, quotaRetry.message);
233
235
  }
236
+ if (isQueueRetryLaterError(error))
237
+ throw error;
234
238
  const providerError = openAIProviderError(error);
235
- if (quotaRetry) {
236
- prepared.state.aiRequest.metadata = withOpenAIQuotaRetryMetadata(prepared.state.aiRequest.metadata, quotaRetry.metadata);
237
- }
238
239
  await this.failTrackedRun(prepared.state, error instanceof Error ? error.message : `Unable to run ${this.agentName}.`, providerError.code);
239
240
  throw error;
240
241
  }
@@ -493,7 +494,7 @@ export class Agent {
493
494
  input: invocation.input,
494
495
  maxTurns: this.maxTurns,
495
496
  model,
496
- modelSettings: invocation.modelSettings,
497
+ modelSettings: modelSettingsForProvider(invocation.modelSettings, AI_PROVIDER.openai, this.serviceTier),
497
498
  });
498
499
  }
499
500
  /**
@@ -664,6 +665,7 @@ export class Agent {
664
665
  return {
665
666
  message,
666
667
  model,
668
+ serviceTier: this.serviceTier,
667
669
  traceId,
668
670
  previousMessages,
669
671
  invocation,
@@ -688,6 +690,7 @@ export class Agent {
688
690
  return {
689
691
  message: payload.message,
690
692
  model: payload.model,
693
+ serviceTier: payload.serviceTier ?? 'default',
691
694
  traceId: payload.traceId,
692
695
  previousMessages,
693
696
  invocation,
@@ -721,6 +724,8 @@ export class Agent {
721
724
  const instructions = invocation.instructions;
722
725
  const modelInput = invocation.input;
723
726
  const attempts = app().ai.resolveProviders(this.provider(), prepared.model);
727
+ for (const attempt of attempts)
728
+ assertAIServiceTier(attempt.provider, prepared.serviceTier);
724
729
  const attemptFailures = [];
725
730
  await this.attachPromptRequestPayload(state, {
726
731
  instructions,
@@ -739,12 +744,14 @@ export class Agent {
739
744
  const attemptStartMs = Date.now();
740
745
  let rateLimitLease = null;
741
746
  let sawStreamEvent = false;
747
+ let completedModelTurn = false;
742
748
  let activeUsage = null;
743
749
  let attemptState = null;
744
750
  let attemptSettled = false;
745
751
  let providerStarted = false;
752
+ const responsePricing = [];
746
753
  try {
747
- attemptState = await this.startTrackedAttempt(state, attempt, attemptStartMs);
754
+ attemptState = await this.startTrackedAttempt(state, attempt, attemptStartMs, prepared.serviceTier);
748
755
  rateLimitLease = await this.acquireProviderCapacity(prepared, instructions, modelInput, attempt, attemptState);
749
756
  const simulatedOutage = simulatedProviderOutage(attempt.provider);
750
757
  if (simulatedOutage)
@@ -754,8 +761,20 @@ export class Agent {
754
761
  providerStarted = true;
755
762
  const runner = new Runner({
756
763
  model: attempt.model,
757
- modelProvider: app().ai.createAgentProvider(attempt, rateLimitLease),
758
- modelSettings: modelSettingsForProvider(invocation.modelSettings, attempt.provider),
764
+ modelProvider: app().ai.createAgentProvider(attempt, rateLimitLease, prepared.serviceTier),
765
+ modelSettings: {
766
+ ...modelSettingsForProvider(invocation.modelSettings, attempt.provider, prepared.serviceTier),
767
+ retry: {
768
+ maxRetries: 8,
769
+ /** Retains completed tools in this SDK run; never restarts the whole agent. */
770
+ policy: ({ error }) => {
771
+ if (!completedModelTurn)
772
+ return false;
773
+ const delayMs = app().ai.providerAdmission.requestRetryDelay(attempt, agentRateLimitError(error));
774
+ return delayMs === null ? false : { retry: true, delayMs };
775
+ },
776
+ },
777
+ },
759
778
  tracingDisabled: process.env.OPENAI_AGENTS_TRACING_DISABLED === 'true',
760
779
  traceIncludeSensitiveData: false,
761
780
  workflowName: this.workflowName,
@@ -775,6 +794,14 @@ export class Agent {
775
794
  let assistantText = '';
776
795
  for await (const event of stream) {
777
796
  sawStreamEvent = true;
797
+ if (event.type === 'raw_model_stream_event' && event.data.type === 'response_done') {
798
+ completedModelTurn = true;
799
+ const providerData = recordValue(event.data.response.providerData);
800
+ responsePricing.push({
801
+ ...(typeof providerData?.model === 'string' ? { model: providerData.model } : {}),
802
+ serviceTier: effectiveAIServiceTier(providerData?.service_tier, prepared.serviceTier),
803
+ });
804
+ }
778
805
  const streamEvent = await this.streamEventFromSdkEvent(executionState, event);
779
806
  if (!streamEvent)
780
807
  continue;
@@ -784,6 +811,9 @@ export class Agent {
784
811
  await emit(streamEvent);
785
812
  }
786
813
  await stream.completed;
814
+ const streamFailure = app().ai.providerAdmission?.requestFailure(attempt, null);
815
+ if (streamFailure)
816
+ throw streamFailure;
787
817
  const rawFinalOutput = this.finalOutputText(stream.finalOutput, assistantText);
788
818
  const finalResponseCitations = agentCitationsFromFinalModelResponse(stream.rawResponses);
789
819
  const citations = finalResponseCitations ?? normalizedAgentCitations(executionState.citations);
@@ -795,7 +825,7 @@ export class Agent {
795
825
  citation,
796
826
  });
797
827
  }
798
- await this.completeTrackedAttempt(executionState, activeUsage, stream.lastResponseId ?? null);
828
+ await this.completeTrackedAttempt(executionState, activeUsage, stream.lastResponseId ?? null, responsePricing);
799
829
  attemptSettled = true;
800
830
  const structuredOutput = this.structuredFinalOutput(stream.finalOutput);
801
831
  const finalOutput = agentMarkdownWithCitations(rawFinalOutput, citations);
@@ -841,9 +871,14 @@ export class Agent {
841
871
  });
842
872
  }
843
873
  catch (caught) {
844
- const error = agentRateLimitError(caught);
874
+ const restored = agentRateLimitError(caught);
875
+ const failure = app().ai.providerAdmission?.requestFailure(attempt, restored) ?? restored;
876
+ // Restarting a turn after streamed output/tools can repeat completed work.
877
+ const error = failure instanceof AIProviderDeferredError && sawStreamEvent ? new AIProviderStoppedError('outage', failure.providerCode, { ...failure.diagnostics, stopStage: 'stream-output' }) : failure;
878
+ if (failure instanceof AIProviderDeferredError && error instanceof AIProviderStoppedError)
879
+ error.providerStarted = failure.providerStarted;
845
880
  if (attemptState && !attemptSettled) {
846
- await this.failTrackedAttempt(attemptState, activeUsage, providerStarted, error);
881
+ await this.failTrackedAttempt(attemptState, activeUsage, providerStarted, error, responsePricing);
847
882
  }
848
883
  // Failover is only safe before the SDK has streamed anything: once
849
884
  // events arrive, tool calls and partial output may already be
@@ -880,9 +915,10 @@ export class Agent {
880
915
  * @param rootState - Logical run root and shared conversation state.
881
916
  * @param attempt - Provider and model selected for this execution.
882
917
  * @param startedAtMs - Attempt start timestamp in milliseconds.
918
+ * @param serviceTier - Requested tier retained alongside this attempt.
883
919
  * @returns Persistence state scoped to the new provider attempt.
884
920
  */
885
- async startTrackedAttempt(rootState, attempt, startedAtMs) {
921
+ async startTrackedAttempt(rootState, attempt, startedAtMs, serviceTier) {
886
922
  const aiRequest = await new (app().ai.models.request)({
887
923
  conversation: rootState.conversation,
888
924
  parentAiRequest: rootState.rootAiRequest,
@@ -893,6 +929,7 @@ export class Agent {
893
929
  operation: 'agents.run.attempt',
894
930
  status: AI_REQUEST_STATUS.pending,
895
931
  request: {
932
+ serviceTier,
896
933
  rootAiRequestId: rootState.rootAiRequest.id,
897
934
  traceId: rootState.traceId,
898
935
  },
@@ -923,10 +960,10 @@ export class Agent {
923
960
  * @param sdkUsage - Complete Agents SDK usage for this attempt.
924
961
  * @param lastResponseId - Last provider response id in the attempt.
925
962
  */
926
- async completeTrackedAttempt(state, sdkUsage, lastResponseId) {
963
+ async completeTrackedAttempt(state, sdkUsage, lastResponseId, responsePricing) {
927
964
  const usage = agentRunUsage(sdkUsage);
928
- const requestUsageEntries = agentRequestCostUsageEntries(sdkUsage);
929
- const cost = agentAttemptCost(state.aiRequest.provider, state.model, usage, requestUsageEntries, state.hostedToolUsage);
965
+ const requestUsageEntries = agentRequestCostUsageEntries(sdkUsage, responsePricing, recordValue(state.aiRequest.request)?.serviceTier);
966
+ const cost = agentAttemptCost(state.aiRequest.provider, state.model, usage, requestUsageEntries, state.hostedToolUsage, recordValue(state.aiRequest.request)?.serviceTier);
930
967
  state.aiRequest.assign({
931
968
  response: agentAttemptResponse(usage, requestUsageEntries, cost, state.hostedToolUsage, {
932
969
  lastResponseId,
@@ -955,14 +992,14 @@ export class Agent {
955
992
  * @param providerStarted - Whether execution crossed the provider boundary.
956
993
  * @param error - Error that ended the attempt.
957
994
  */
958
- async failTrackedAttempt(state, sdkUsage, providerStarted, error) {
995
+ async failTrackedAttempt(state, sdkUsage, providerStarted, error, responsePricing) {
959
996
  const usage = sdkUsage ? agentRunUsage(sdkUsage) : emptyAgentRunUsage();
960
- const requestUsageEntries = sdkUsage ? agentRequestCostUsageEntries(sdkUsage) : [];
997
+ const requestUsageEntries = sdkUsage ? agentRequestCostUsageEntries(sdkUsage, responsePricing, recordValue(state.aiRequest.request)?.serviceTier) : [];
961
998
  const hasBillableUsage = sdkUsage
962
999
  ? hasBillableAgentAttemptUsage(sdkUsage, state.hostedToolUsage)
963
1000
  : Object.values(state.hostedToolUsage).some(count => Number.isFinite(count) && count > 0);
964
1001
  const cost = hasBillableUsage
965
- ? agentAttemptCost(state.aiRequest.provider, state.model, usage, requestUsageEntries, state.hostedToolUsage)
1002
+ ? agentAttemptCost(state.aiRequest.provider, state.model, usage, requestUsageEntries, state.hostedToolUsage, recordValue(state.aiRequest.request)?.serviceTier)
966
1003
  : emptyAgentAttemptCost(providerStarted);
967
1004
  const message = error instanceof Error ? error.message : `Unable to run ${this.agentName}.`;
968
1005
  state.aiRequest.assign({
@@ -1504,29 +1541,13 @@ export class Agent {
1504
1541
  costUSD: run.unpricedRequestCount > 0 ? null : run.totalCostUSD,
1505
1542
  };
1506
1543
  }
1507
- /**
1508
- * Keeps a quota-blocked queued run pending and records its next retry.
1509
- *
1510
- * @param state - Active run persistence state.
1511
- * @param quotaRetry - Bounded exponential quota retry decision.
1512
- */
1513
- async deferTrackedRun(state, quotaRetry) {
1514
- state.aiRequest.assign({
1515
- status: AI_REQUEST_STATUS.pending,
1516
- completedAt: null,
1517
- durationMs: null,
1518
- errorCode: quotaRetry.code,
1519
- errorMessage: quotaRetry.message,
1520
- metadata: withOpenAIQuotaRetryMetadata(state.aiRequest.metadata, quotaRetry.metadata),
1521
- });
1522
- await state.aiRequest.save();
1523
- await this.touchConversation(state, {
1524
- lastTraceId: state.traceId,
1525
- lastStatus: AI_REQUEST_STATUS.pending,
1526
- lastError: quotaRetry.message,
1527
- nextRetryAt: quotaRetry.retryAt.toISOString(),
1528
- retryUntil: quotaRetry.retryUntil.toISOString(),
1544
+ /** Keeps unstarted queued work visibly pending on the shared account deadline. */
1545
+ async deferTrackedRun(state, error) {
1546
+ state.rootAiRequest.assign({ status: AI_REQUEST_STATUS.pending, completedAt: null, errorCode: 'ai_provider_deferred', errorMessage: error.message,
1547
+ metadata: { ...(state.rootAiRequest.metadata ?? {}), providerAdmission: { retryAt: error.retryAt.toISOString(), retryUntil: error.retryUntil.toISOString() } },
1529
1548
  });
1549
+ await state.rootAiRequest.save();
1550
+ await this.touchConversation(state, { lastTraceId: state.traceId, lastStatus: AI_REQUEST_STATUS.pending, lastError: error.message, nextRetryAt: error.retryAt.toISOString(), retryUntil: error.retryUntil.toISOString() });
1530
1551
  }
1531
1552
  /**
1532
1553
  * Marks the tracked AI request as failed.
@@ -1617,6 +1638,7 @@ export class Agent {
1617
1638
  aiRequestId: prepared.state.aiRequest.id ? String(prepared.state.aiRequest.id) : null,
1618
1639
  traceId: prepared.traceId,
1619
1640
  model: prepared.model,
1641
+ serviceTier: prepared.serviceTier,
1620
1642
  };
1621
1643
  }
1622
1644
  /**
@@ -1675,7 +1697,7 @@ function agentRateLimitError(error) {
1675
1697
  const seen = new Set();
1676
1698
  let current = error;
1677
1699
  while (current instanceof Error && !seen.has(current)) {
1678
- if (current instanceof AIRateLimitDeferredError)
1700
+ if (isQueueRetryLaterError(current) || current instanceof AIProviderStoppedError)
1679
1701
  return current;
1680
1702
  seen.add(current);
1681
1703
  current = current.cause;
@@ -2698,10 +2720,13 @@ function agentRunUsage(usage) {
2698
2720
  * Normalizes the SDK's individual provider-request usage for accurate pricing.
2699
2721
  *
2700
2722
  * @param usage - Agents SDK aggregate usage object.
2723
+ * @param responsePricing - Terminal response metadata in SDK request order.
2724
+ * @param requestedTier - Saved selection used only for legacy Standard fallback.
2701
2725
  * @returns Individual request entries with cached-input details preserved.
2702
2726
  */
2703
- function agentRequestCostUsageEntries(usage) {
2704
- return (usage.requestUsageEntries ?? []).map(entry => ({
2727
+ function agentRequestCostUsageEntries(usage, responsePricing, requestedTier) {
2728
+ return (usage.requestUsageEntries ?? []).map((entry, index) => ({
2729
+ ...(responsePricing.length === usage.requestUsageEntries?.length ? responsePricing[index] : { serviceTier: effectiveAIServiceTier(undefined, requestedTier) }),
2705
2730
  inputTokens: numberOrNull(entry.inputTokens),
2706
2731
  outputTokens: numberOrNull(entry.outputTokens),
2707
2732
  cachedTokens: tokenDetailValue(entry.inputTokensDetails, 'cached_tokens'),
@@ -2721,9 +2746,10 @@ function agentRequestCostUsageEntries(usage) {
2721
2746
  * @param usage - Aggregate attempt usage.
2722
2747
  * @param requestUsageEntries - Per-provider-request usage entries.
2723
2748
  * @param hostedToolUsage - Completed hosted provider-tool calls.
2749
+ * @param requestedTier - Saved selection used for single-request Standard fallback.
2724
2750
  * @returns Complete attempt cost and any unpriced dimensions.
2725
2751
  */
2726
- function agentAttemptCost(provider, model, usage, requestUsageEntries, hostedToolUsage) {
2752
+ function agentAttemptCost(provider, model, usage, requestUsageEntries, hostedToolUsage, requestedTier) {
2727
2753
  const usesPerRequestUsage = usage.requests > 0
2728
2754
  && requestUsageEntries.length === usage.requests;
2729
2755
  const usesSingleRequestAggregate = usage.requests === 1
@@ -2732,7 +2758,7 @@ function agentAttemptCost(provider, model, usage, requestUsageEntries, hostedToo
2732
2758
  ? usesPerRequestUsage
2733
2759
  ? calculateAIRequestEntriesCostUSD(model, requestUsageEntries)
2734
2760
  : usesSingleRequestAggregate
2735
- ? calculateAIRequestCostUSD(model, usage)
2761
+ ? calculateAIRequestCostUSD(model, { ...usage, serviceTier: effectiveAIServiceTier(undefined, requestedTier) })
2736
2762
  : null
2737
2763
  : null;
2738
2764
  const hostedToolCost = provider === AI_PROVIDER.openai
@@ -2834,20 +2860,22 @@ function emptyAgentRunUsage() {
2834
2860
  };
2835
2861
  }
2836
2862
  /**
2837
- * Applies Standard service tier only to direct OpenAI provider requests.
2863
+ * Applies the explicitly selected service tier only to direct OpenAI requests.
2838
2864
  *
2839
2865
  * @param settings - Agent-owned model settings.
2840
2866
  * @param provider - Provider selected for the current attempt.
2841
- * @returns Provider-safe settings with deterministic OpenAI billing tier.
2867
+ * @param serviceTier - Explicit class selection, frozen in queued run payloads.
2868
+ * @returns Provider-safe settings with the selected OpenAI tier.
2842
2869
  */
2843
- function modelSettingsForProvider(settings, provider) {
2870
+ function modelSettingsForProvider(settings, provider, serviceTier) {
2871
+ assertAIServiceTier(provider, serviceTier);
2844
2872
  if (provider !== AI_PROVIDER.openai)
2845
2873
  return settings;
2846
2874
  return {
2847
2875
  ...settings,
2848
2876
  providerData: {
2849
2877
  ...(settings.providerData ?? {}),
2850
- service_tier: 'default',
2878
+ service_tier: serviceTier,
2851
2879
  },
2852
2880
  };
2853
2881
  }
package/dist/ai/Ai.d.ts CHANGED
@@ -1,9 +1,12 @@
1
1
  /// <reference path="./sdkNodeCompatibility.d.ts" preserve="true" />
2
+ import type { GenerateEmbeddingOptions } from './contracts/AI.js';
3
+ import { AIProviderAdmission } from './AIProviderAdmission.js';
2
4
  import { type ModelProvider } from '@openai/agents';
3
5
  import { AI_PROVIDER } from './contracts/AI.js';
4
6
  import { type AIProviderAttempt } from './AIProviders.js';
5
7
  import { AIRateLimiter, type AIProviderResponseMetadata, type AIRateLimitLease } from './AIRateLimiter.js';
6
- import type { AIAllowanceCheckInput, AIRecordIdentity, AIModels, AIConfig, AIOptions, AIProviderSelection, AIResponseLogOptions, GenerateEmbeddingResult, GenerateImageInput, GenerateImageOptions, GenerateImageResult, GenerateStructuredInput, GenerateTextInput, GenerateTextResult, RequestLogOptions } from './contracts/AI.js';
8
+ import type { AIServiceTier } from './contracts/AIServiceTier.js';
9
+ import type { AIAllowanceCheckInput, AIRecordIdentity, AIModels, AIConfig, AIOptions, AIProviderSelection, AIResponseLogOptions, GenerateEmbeddingResult, GenerateImageInput, GenerateImageOptions, GenerateImageResult, GenerateStructuredInput, GenerateTextInput, GenerateTextResult } from './contracts/AI.js';
7
10
  /**
8
11
  * Raised when exact provider usage could not be made durable after bounded retries.
9
12
  *
@@ -38,6 +41,7 @@ export declare class Ai {
38
41
  /** Logical ownership field used by this application. */
39
42
  readonly scopeField: string;
40
43
  private readonly rateLimiter;
44
+ readonly providerAdmission: AIProviderAdmission;
41
45
  /**
42
46
  * Create an AI service instance.
43
47
  *
@@ -290,7 +294,7 @@ export declare class Ai {
290
294
  * @param initialLease - Optional preflight reservation consumed by the first request.
291
295
  * @returns SDK provider using the service's transport and rate-limit lifecycle.
292
296
  */
293
- createAgentProvider(attempt: AIProviderAttempt, initialLease?: AIRateLimitLease | null): ModelProvider;
297
+ createAgentProvider(attempt: AIProviderAttempt, initialLease?: AIRateLimitLease | null, serviceTier?: AIServiceTier): ModelProvider;
294
298
  /**
295
299
  * Reserves each SDK model turn and observes headers before streaming or tool execution.
296
300
  *
@@ -304,6 +308,10 @@ export declare class Ai {
304
308
  * @returns Transport that maintains provider capacity and request diagnostics.
305
309
  */
306
310
  private agentFetcher;
311
+ /** Resolves the account connection for OpenAI-only images and embeddings. */
312
+ private openAIAdmissionAttempt;
313
+ /** Resolves a tier-aware request timeout while respecting an explicit service override. */
314
+ private requestTimeoutMs;
307
315
  /**
308
316
  * Fetch implementation used by provider calls.
309
317
  */
@@ -368,7 +376,7 @@ export declare class Ai {
368
376
  * @param options - Optional AI request logging context.
369
377
  * @returns Embedding vector, model, and saved request id when tracking is enabled.
370
378
  */
371
- generateEmbedding(input: string, model?: string, options?: RequestLogOptions): Promise<GenerateEmbeddingResult>;
379
+ generateEmbedding(input: string, model?: string, options?: GenerateEmbeddingOptions): Promise<GenerateEmbeddingResult>;
372
380
  }
373
381
  export { AIAllowanceExceededError, AIConfigurationError, AIRequestError } from './AIErrors.js';
374
382
  export { AI_PROVIDER };