@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
@@ -0,0 +1,147 @@
1
+ import { Tiktoken } from 'js-tiktoken/lite';
2
+ import cl100kBase from 'js-tiktoken/ranks/cl100k_base';
3
+ let tokenizer;
4
+ /** Counts ordinary text, including literal special-token spellings, with cl100k_base. */
5
+ function tokens(text) {
6
+ tokenizer ??= new Tiktoken(cl100kBase);
7
+ return tokenizer.encode(text, [], []).length;
8
+ }
9
+ /**
10
+ * Keeps fitting documents whole and splits oversized Markdown at natural boundaries.
11
+ * Each passage retains source offsets, bounded shared context, its heading hierarchy
12
+ * and a small overlap. Uses cl100k_base, as used by text-embedding-3-small/large.
13
+ * No provider requests or generated summaries are involved.
14
+ *
15
+ * @param text - Extracted text or Markdown; HTML extraction belongs to the caller.
16
+ * @param options - Context and token budgets for the complete embedding input.
17
+ * @returns Ordered passages whose source ranges cover all of the original text.
18
+ * @example
19
+ * const chunks = chunkEmbeddingText(page.text, { context: `Title: ${page.title}` });
20
+ */
21
+ export function chunkEmbeddingText(text, options = {}) {
22
+ const maximum = options.maxTokens ?? 8000;
23
+ const overlap = options.overlapTokens ?? Math.min(128, Math.floor(maximum / 8));
24
+ if (!Number.isInteger(maximum) || maximum < 64 || maximum > 8191)
25
+ throw new Error('Embedding chunks require maxTokens between 64 and 8191.');
26
+ if (!Number.isInteger(overlap) || overlap < 0 || overlap >= maximum / 2)
27
+ throw new Error('Embedding overlap must be non-negative and smaller than half the input budget.');
28
+ if (!text.trim())
29
+ return [];
30
+ const contextBudget = Math.min(512, Math.floor(maximum / 8));
31
+ const context = boundedPrefix(options.context?.trim() ?? '', contextBudget);
32
+ const headings = markdownHeadings(text);
33
+ const chunks = [];
34
+ const fullInput = embeddingInput(context, null, text);
35
+ if (tokens(fullInput) <= maximum)
36
+ return [{ index: 0, text, heading: null, input: fullInput, start: 0, end: text.length, tokens: tokens(fullInput) }];
37
+ let start = 0;
38
+ let contentStart = 0;
39
+ while (start < text.length) {
40
+ const activeHeading = headings.filter(heading => heading.start <= contentStart).at(-1)?.title ?? null;
41
+ const heading = activeHeading ? boundedPrefix(activeHeading, contextBudget) : null;
42
+ const prefix = embeddingInput(context, heading, '');
43
+ const available = maximum - tokens(prefix) - 8;
44
+ let end = start + fittingPrefixLength(text.slice(start), available);
45
+ if (end < text.length)
46
+ end = naturalBoundary(text, start, end, headings.map(item => item.start));
47
+ let input = embeddingInput(context, heading, text.slice(start, end));
48
+ // BPE merges across the prefix boundary are verified against the final input.
49
+ while (tokens(input) > maximum && end > start) {
50
+ end = previousCharacter(text, end);
51
+ input = embeddingInput(context, heading, text.slice(start, end));
52
+ }
53
+ if (end <= start)
54
+ throw new Error('Embedding context leaves no room for source text.');
55
+ chunks.push({ index: chunks.length, text: text.slice(start, end), heading, input, start, end, tokens: tokens(input) });
56
+ if (end === text.length)
57
+ break;
58
+ contentStart = end;
59
+ const previousText = text.slice(start, end);
60
+ const overlapStart = overlap ? fittingSuffixStart(previousText, overlap) + start : end;
61
+ // Prefer a whole final paragraph when it fits inside the overlap budget.
62
+ const paragraphStart = text.lastIndexOf('\n\n', end - 3) + 2;
63
+ start = paragraphStart >= overlapStart && paragraphStart < end && paragraphStart > start
64
+ ? paragraphStart : overlapStart > start ? overlapStart : end;
65
+ }
66
+ return chunks;
67
+ }
68
+ /** Builds a deterministic context prefix without rewriting source evidence. */
69
+ function embeddingInput(context, heading, text) {
70
+ return `${context ? `${context}\n` : ''}${heading ? `section: ${heading}\n` : ''}content:\n${text}`;
71
+ }
72
+ /** Finds a token-bounded prefix without cutting a Unicode code point. */
73
+ function fittingPrefixLength(text, maximum) {
74
+ if (tokens(text) <= maximum)
75
+ return text.length;
76
+ let low = 0;
77
+ let high = text.length;
78
+ while (low < high) {
79
+ const middle = Math.ceil((low + high) / 2);
80
+ if (tokens(text.slice(0, middle)) <= maximum)
81
+ low = middle;
82
+ else
83
+ high = middle - 1;
84
+ }
85
+ if (low > 0 && /[\uD800-\uDBFF]/.test(text[low - 1]))
86
+ low -= 1;
87
+ return low;
88
+ }
89
+ /** Bounds repeated context so even unusually long metadata leaves room for source text. */
90
+ function boundedPrefix(text, maximum) {
91
+ return text.slice(0, fittingPrefixLength(text, maximum)).trim();
92
+ }
93
+ /** Locates a bounded overlap suffix on Unicode code-point boundaries. */
94
+ function fittingSuffixStart(text, maximum) {
95
+ let low = 0;
96
+ let high = text.length;
97
+ while (low < high) {
98
+ const middle = Math.floor((low + high) / 2);
99
+ if (tokens(text.slice(middle)) <= maximum)
100
+ high = middle;
101
+ else
102
+ low = middle + 1;
103
+ }
104
+ if (/[\uDC00-\uDFFF]/.test(text[low] ?? ''))
105
+ low += 1;
106
+ return low;
107
+ }
108
+ /** Moves backwards by one Unicode code point. */
109
+ function previousCharacter(text, end) {
110
+ return end > 1 && /[\uDC00-\uDFFF]/.test(text[end - 1]) ? end - 2 : end - 1;
111
+ }
112
+ /** Prefers a heading or paragraph boundary, then sentences and whitespace, without emitting tiny fragments. */
113
+ function naturalBoundary(text, start, end, headings) {
114
+ const minimum = start + Math.floor((end - start) / 2);
115
+ const heading = headings.filter(position => position >= minimum && position <= end).at(-1);
116
+ if (heading !== undefined)
117
+ return heading;
118
+ const candidate = text.slice(minimum, end);
119
+ for (const pattern of [/\n\s*\n/g, /[.!?。!?][\s]+/g, /\s+/g]) {
120
+ const match = [...candidate.matchAll(pattern)].at(-1);
121
+ if (match)
122
+ return minimum + match.index + match[0].length;
123
+ }
124
+ return end;
125
+ }
126
+ /** Reads Markdown heading ancestry while ignoring headings inside fenced code blocks. */
127
+ function markdownHeadings(text) {
128
+ const headings = [];
129
+ const hierarchy = [];
130
+ let fence = null;
131
+ for (const line of text.matchAll(/^.*(?:\n|$)/gm)) {
132
+ const delimiter = line[0].match(/^\s*(`{3,}|~{3,})/)?.[1];
133
+ if (delimiter) {
134
+ fence = fence ? (delimiter[0] === fence[0] ? null : fence) : delimiter;
135
+ continue;
136
+ }
137
+ if (fence)
138
+ continue;
139
+ const heading = line[0].match(/^(#{1,6})\s+(.+?)(?:\s+#+)?\s*$/);
140
+ if (!heading)
141
+ continue;
142
+ hierarchy.length = heading[1].length;
143
+ hierarchy[heading[1].length - 1] = heading[2];
144
+ headings.push({ start: line.index, title: hierarchy.filter(Boolean).join(' > ') });
145
+ }
146
+ return headings;
147
+ }
@@ -1,3 +1,4 @@
1
+ import type { AIServiceTier } from './AIServiceTier.js';
1
2
  import type { TextResponsePayload } from '@db3.ai/pure';
2
3
  import type { ZodType } from 'zod';
3
4
  import type { AiConversation } from '../AiConversation.js';
@@ -125,6 +126,8 @@ export interface AIOptions {
125
126
  fetch?: typeof fetch;
126
127
  /** Rate limiter used before provider requests. Pass false only in isolated tests. */
127
128
  rateLimiter?: AIRateLimiter | false;
129
+ /** Durable account admission policy; capacity limiter disabling never bypasses it. */
130
+ providerAdmission?: import('../AIProviderAdmission.js').AIProviderAdmissionOptions;
128
131
  /** Optional customer allowance hook. Defaults to no-op until billing limits exist. */
129
132
  allowance?: AIAllowanceChecker | false;
130
133
  }
@@ -132,6 +135,10 @@ export interface AIOptions {
132
135
  * Plain text request sent to the Responses API.
133
136
  */
134
137
  export interface GenerateTextInput {
138
+ /** Keep transient failures local to optional work; account quota and existing admission stops still apply. */
139
+ transientFailureScope?: 'account' | 'request';
140
+ /** Explicit OpenAI processing tier; defaults to Standard. No automatic tier fallback. */
141
+ serviceTier?: AIServiceTier;
135
142
  /** Optional per-call model override for the OpenAI provider entry. */
136
143
  model?: string;
137
144
  /** Optional provider failover chain overriding the app default for this call. */
@@ -203,6 +210,10 @@ export interface AIResponseLogOptions extends Record<string, unknown> {
203
210
  }
204
211
  /** Untrusted provider text response, including optional token usage. */
205
212
  export interface TextResponsePayloadWithUsage extends TextResponsePayload {
213
+ /** Actual model reported by the provider for billing. */
214
+ model?: unknown;
215
+ /** Actual processing tier reported by OpenAI, not the requested tier. */
216
+ service_tier?: unknown;
206
217
  /** Provider completion status; omitted by some compatible endpoints. */
207
218
  status?: unknown;
208
219
  usage?: unknown;
@@ -345,3 +356,8 @@ export interface AIModels {
345
356
  request: typeof AiRequest;
346
357
  message: typeof import('../AiMessage.js').AiMessage;
347
358
  }
359
+ /** Embedding persistence policy for workflows that must resume partial provider work. */
360
+ export interface GenerateEmbeddingOptions extends RequestLogOptions {
361
+ /** Persist the completed vector in the existing request response for authorized resume. Defaults to false. */
362
+ retainResult?: boolean;
363
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Provider response identifiers retained on a direct AI request failure.
3
+ *
4
+ * These fields exclude response bodies, credentials and customer inputs. Missing
5
+ * fields stay unknown rather than inferring an HTTP status from an error message.
6
+ */
7
+ export interface AIRequestErrorDiagnostics {
8
+ /** HTTP response status, when a provider response was received. */
9
+ status?: number | null;
10
+ /** Provider request identifier from response headers, for support correlation. */
11
+ requestId?: string | null;
12
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ /** OpenAI processing tier. Default preserves Standard pricing; Flex is opt-in. */
2
+ export type AIServiceTier = 'default' | 'flex' | 'fast' | 'priority';
@@ -0,0 +1 @@
1
+ export {};
@@ -3,6 +3,7 @@ import type { QueueJobId } from '@db3.ai/app/queue';
3
3
  import type { SerializedValueEnvelope } from '@db3.ai/app/serialization';
4
4
  import type { AiConversation } from '../AiConversation.js';
5
5
  import type { AiRequest, AiRequestRunCostSummary } from '../AiRequest.js';
6
+ import type { AIServiceTier } from './AIServiceTier.js';
6
7
  import type { AgentCitation } from '@db3.ai/pure';
7
8
  export type { AgentCitation } from '@db3.ai/pure';
8
9
  /**
@@ -359,6 +360,8 @@ export interface BaseAgentContext {
359
360
  * Serializable payload stored on the queue for deferred agent execution.
360
361
  */
361
362
  export interface QueuedAgentRunPayload extends Record<string, unknown> {
363
+ /** Captured processing tier. Legacy payloads retain Standard processing. */
364
+ serviceTier?: AIServiceTier;
362
365
  /**
363
366
  * Registered agent name used for worker registration and queue observability.
364
367
  */
@@ -0,0 +1,25 @@
1
+ /** A source-backed passage prepared for the cl100k_base OpenAI embedding models. */
2
+ export interface EmbeddingTextChunk {
3
+ /** Zero-based position within this source revision. */
4
+ index: number;
5
+ /** Exact source slice, including any overlap with the preceding chunk. */
6
+ text: string;
7
+ /** Heading hierarchy active at the new source text, excluding preceding overlap. */
8
+ heading: string | null;
9
+ /** Complete provider input, with bounded source context and heading prefix. */
10
+ input: string;
11
+ /** UTF-16 offsets into the original text; end is exclusive. */
12
+ start: number;
13
+ end: number;
14
+ /** Token count of the complete input, including context and overlap. */
15
+ tokens: number;
16
+ }
17
+ /** Controls deterministic text preparation; callers retain extraction, storage and authorization. */
18
+ export interface EmbeddingTextChunkOptions {
19
+ /** Source title, description or other trusted context repeated on every passage. */
20
+ context?: string;
21
+ /** Complete input ceiling, including prefixes. Defaults to 8,000; cannot exceed 8,191. */
22
+ maxTokens?: number;
23
+ /** Maximum preceding text carried into the next passage. Defaults to 128 tokens. */
24
+ overlapTokens?: number;
25
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -5,13 +5,15 @@
5
5
  * the rates. `outputUSDPer1M` is null for input-only models such as embeddings.
6
6
  */
7
7
  export interface AIModelPricing {
8
+ /** Verified tier multipliers for this model only; absent tiers remain unpriced. */
9
+ serviceTierMultipliers?: Partial<Record<'flex' | 'fast' | 'priority', number>>;
8
10
  inputUSDPer1M: number;
9
11
  cachedInputUSDPer1M: number | null;
10
12
  outputUSDPer1M: number | null;
11
13
  /**
12
14
  * Multiplier applied to input tokens written into the provider prompt cache.
13
15
  *
14
- * GPT-5.6 and GPT-6 Astra report cache writes separately and bill them above
16
+ * GPT-5.6 and GPT-6 models report cache writes separately and bill them above
15
17
  * the ordinary uncached input rate. Models without that charge omit it.
16
18
  */
17
19
  cacheWriteInputMultiplier?: number;
@@ -45,6 +47,8 @@ export interface AIImageModelPricing {
45
47
  * Normalized token counts captured from a tracked AI provider response.
46
48
  */
47
49
  export interface AIRequestCostUsage {
50
+ /** Actual provider tier. Undefined retains legacy Standard; null means unknown. */
51
+ serviceTier?: string | null;
48
52
  inputTokens: number | null;
49
53
  outputTokens: number | null;
50
54
  cachedTokens?: number | null;
@@ -55,6 +59,8 @@ export interface AIRequestCostUsage {
55
59
  * Per-provider-request usage retained from an aggregate Agents SDK run.
56
60
  */
57
61
  export interface AIRequestCostUsageEntry extends AIRequestCostUsage {
62
+ /** Actual provider model, when supplied with this completed response. */
63
+ model?: string;
58
64
  /** Provider endpoint that reported this usage entry, when available. */
59
65
  endpoint?: string;
60
66
  }
@@ -21,6 +21,8 @@ export interface AIProviderConfig {
21
21
  * One resolved, fully configured provider attempt in a failover chain.
22
22
  */
23
23
  export interface AIProviderAttempt {
24
+ /** Optional work isolates transient transport failures; quota and existing account stops remain shared. */
25
+ transientFailureScope?: 'account' | 'request';
24
26
  /** Stable provider id persisted on tracking rows and bucket keys. */
25
27
  provider: AIProvider;
26
28
  /** Model sent to this provider. */
@@ -1,4 +1,5 @@
1
1
  export * from './AI.js';
2
+ export * from './EmbeddingTextChunk.js';
2
3
  export * from './Agent.js';
3
4
  export * from './AiRequestRunCostSummary.js';
4
5
  export * from './Pricing.js';
@@ -6,3 +7,4 @@ export * from './Providers.js';
6
7
  export * from './RateLimits.js';
7
8
  export * from './ResponsesProviderCall.js';
8
9
  export * from './QuotaRetry.js';
10
+ export type { AIRequestErrorDiagnostics } from './AIRequestErrorDiagnostics.js';
@@ -1,4 +1,5 @@
1
1
  export * from './AI.js';
2
+ export * from './EmbeddingTextChunk.js';
2
3
  export * from './Agent.js';
3
4
  export * from './AiRequestRunCostSummary.js';
4
5
  export * from './Pricing.js';
@@ -1,5 +1,9 @@
1
1
  export * from './Ai.js';
2
+ export type { AIServiceTier } from './contracts/AIServiceTier.js';
3
+ export { chunkEmbeddingText } from './chunkEmbeddingText.js';
4
+ export type { EmbeddingTextChunk, EmbeddingTextChunkOptions } from './contracts/EmbeddingTextChunk.js';
2
5
  export * from './AIErrors.js';
6
+ export * from './AIRequestTrackingError.js';
3
7
  export * from './contracts/AI.js';
4
8
  export * from './AiConversation.js';
5
9
  export * from './AiMessage.js';
@@ -11,7 +15,7 @@ export * from './AIProviders.js';
11
15
  export * from './AIQuotaDeferredError.js';
12
16
  export * from './AIRateLimiter.js';
13
17
  export * from './Estimates.js';
14
- export * from './Models.js';
18
+ export * from './modelPricing.js';
15
19
  export * from './OpenAIProviderError.js';
16
20
  export * from './ProviderCosts.js';
17
21
  export * from './Agent.js';
@@ -23,5 +27,7 @@ export * from './agentCitations.js';
23
27
  export * from './OpenAIQuotaRetry.js';
24
28
  export * from './ResponsesProviderCall.js';
25
29
  export { agentConversationTimeline } from './AgentHistory.js';
26
- export { tool, webSearchTool, fileSearchTool, imageGenerationTool } from '@openai/agents';
30
+ export { tool, computerTool, type Computer, webSearchTool, fileSearchTool, imageGenerationTool } from '@openai/agents';
27
31
  export { INTERRUPTED_TOOL_CALL_MESSAGE, unresolvedToolCallIds } from './toolCallRecovery.js';
32
+ export type { AIRequestErrorDiagnostics } from './contracts/AIRequestErrorDiagnostics.js';
33
+ export * from './AIProviderAdmission.js';
package/dist/ai/index.js CHANGED
@@ -1,5 +1,7 @@
1
1
  export * from './Ai.js';
2
+ export { chunkEmbeddingText } from './chunkEmbeddingText.js';
2
3
  export * from './AIErrors.js';
4
+ export * from './AIRequestTrackingError.js';
3
5
  export * from './contracts/AI.js';
4
6
  export * from './AiConversation.js';
5
7
  export * from './AiMessage.js';
@@ -11,7 +13,7 @@ export * from './AIProviders.js';
11
13
  export * from './AIQuotaDeferredError.js';
12
14
  export * from './AIRateLimiter.js';
13
15
  export * from './Estimates.js';
14
- export * from './Models.js';
16
+ export * from './modelPricing.js';
15
17
  export * from './OpenAIProviderError.js';
16
18
  export * from './ProviderCosts.js';
17
19
  export * from './Agent.js';
@@ -23,5 +25,6 @@ export * from './agentCitations.js';
23
25
  export * from './OpenAIQuotaRetry.js';
24
26
  export * from './ResponsesProviderCall.js';
25
27
  export { agentConversationTimeline } from './AgentHistory.js';
26
- export { tool, webSearchTool, fileSearchTool, imageGenerationTool } from '@openai/agents';
28
+ export { tool, computerTool, webSearchTool, fileSearchTool, imageGenerationTool } from '@openai/agents';
27
29
  export { INTERRUPTED_TOOL_CALL_MESSAGE, unresolvedToolCallIds } from './toolCallRecovery.js';
30
+ export * from './AIProviderAdmission.js';
@@ -1,10 +1,10 @@
1
1
  import type { AIModelPricing, AIImageModelPricing, AIRequestCostUsage, AIRequestCostUsageEntry, AIImageRequestCostUsage, AIHostedToolUsage, AIHostedToolCost } from './contracts/Pricing.js';
2
2
  export type { AIModelPricing, AIImageModelPricing, AIRequestCostUsage, AIRequestCostUsageEntry, AIImageRequestCostUsage, AIHostedToolUsage, AIHostedToolCost } from './contracts/Pricing.js';
3
3
  /**
4
- * OpenAI Standard processing prices in USD, verified on 2026-09-11.
4
+ * OpenAI Standard processing prices in USD, verified on 2026-09-25.
5
5
  *
6
6
  * Used to estimate request cost at write time; stored historical costs are not
7
- * recalculated. Excludes regional processing surcharges and other service tiers.
7
+ * recalculated. Excludes regional processing surcharges. Tier multipliers were verified on 2026-10-08.
8
8
  *
9
9
  * @see https://developers.openai.com/api/docs/pricing
10
10
  */
@@ -1,13 +1,20 @@
1
1
  /**
2
- * OpenAI Standard processing prices in USD, verified on 2026-09-11.
2
+ * OpenAI Standard processing prices in USD, verified on 2026-09-25.
3
3
  *
4
4
  * Used to estimate request cost at write time; stored historical costs are not
5
- * recalculated. Excludes regional processing surcharges and other service tiers.
5
+ * recalculated. Excludes regional processing surcharges. Tier multipliers were verified on 2026-10-08.
6
6
  *
7
7
  * @see https://developers.openai.com/api/docs/pricing
8
8
  */
9
9
  export const AI_MODEL_PRICING = {
10
+ // Default lightweight agent model; Standard rates verified on 2026-10-01.
11
+ 'gpt-4.1-mini': {
12
+ inputUSDPer1M: 0.40,
13
+ cachedInputUSDPer1M: 0.10,
14
+ outputUSDPer1M: 1.60,
15
+ },
10
16
  'gpt-6-astra': {
17
+ serviceTierMultipliers: { flex: 0.5, fast: 2, priority: 2 },
11
18
  inputUSDPer1M: 10.00,
12
19
  cachedInputUSDPer1M: 1.00,
13
20
  outputUSDPer1M: 50.00,
@@ -16,8 +23,29 @@ export const AI_MODEL_PRICING = {
16
23
  longContextInputMultiplier: 2,
17
24
  longContextOutputMultiplier: 1.5,
18
25
  },
26
+ 'gpt-6-sol': {
27
+ serviceTierMultipliers: { flex: 0.5, fast: 2, priority: 2 },
28
+ inputUSDPer1M: 2.00,
29
+ cachedInputUSDPer1M: 0.20,
30
+ outputUSDPer1M: 10.00,
31
+ cacheWriteInputMultiplier: 1.25,
32
+ longContextInputTokenThreshold: 272_000,
33
+ longContextInputMultiplier: 2,
34
+ longContextOutputMultiplier: 1.5,
35
+ },
36
+ 'gpt-6-luna': {
37
+ serviceTierMultipliers: { flex: 0.5, fast: 2, priority: 2 },
38
+ inputUSDPer1M: 0.10,
39
+ cachedInputUSDPer1M: 0.01,
40
+ outputUSDPer1M: 0.50,
41
+ cacheWriteInputMultiplier: 1.25,
42
+ longContextInputTokenThreshold: 272_000,
43
+ longContextInputMultiplier: 2,
44
+ longContextOutputMultiplier: 1.5,
45
+ },
19
46
  // Promotional rates available at least through 2026-11-21; recheck before changing.
20
47
  'gpt-5.6-sol': {
48
+ serviceTierMultipliers: { flex: 0.5, fast: 2, priority: 2 },
21
49
  inputUSDPer1M: 4.00,
22
50
  cachedInputUSDPer1M: 0.40,
23
51
  outputUSDPer1M: 20.00,
@@ -27,6 +55,7 @@ export const AI_MODEL_PRICING = {
27
55
  longContextOutputMultiplier: 1.5,
28
56
  },
29
57
  'gpt-5.6-terra': {
58
+ serviceTierMultipliers: { flex: 0.5, fast: 2, priority: 2 },
30
59
  inputUSDPer1M: 2.00,
31
60
  cachedInputUSDPer1M: 0.20,
32
61
  outputUSDPer1M: 12.00,
@@ -36,6 +65,7 @@ export const AI_MODEL_PRICING = {
36
65
  longContextOutputMultiplier: 1.5,
37
66
  },
38
67
  'gpt-5.6-luna': {
68
+ serviceTierMultipliers: { flex: 0.5, fast: 2, priority: 2 },
39
69
  inputUSDPer1M: 0.20,
40
70
  cachedInputUSDPer1M: 0.02,
41
71
  outputUSDPer1M: 1.20,
@@ -149,6 +179,10 @@ export function calculateAIRequestCostUSD(model, usage) {
149
179
  const pricing = AI_MODEL_PRICING[canonicalModelName(model)];
150
180
  if (!pricing)
151
181
  return null;
182
+ const tier = usage.serviceTier === undefined ? 'default' : usage.serviceTier;
183
+ const tierMultiplier = tier === 'default' ? 1 : tier === 'flex' || tier === 'fast' || tier === 'priority' ? pricing.serviceTierMultipliers?.[tier] : undefined;
184
+ if (tierMultiplier === undefined)
185
+ return null;
152
186
  if (!validTokenCount(usage.inputTokens))
153
187
  return null;
154
188
  if (pricing.outputUSDPer1M !== null && !validTokenCount(usage.outputTokens))
@@ -173,7 +207,7 @@ export function calculateAIRequestCostUSD(model, usage) {
173
207
  const cost = ((uncachedInputTokens * inputRate)
174
208
  + (cachedTokens * cachedInputRate)
175
209
  + (cacheWriteTokens * cacheWriteInputRate)
176
- + (outputTokens * outputRate)) / TOKENS_PER_PRICING_UNIT;
210
+ + (outputTokens * outputRate)) * tierMultiplier / TOKENS_PER_PRICING_UNIT;
177
211
  return Math.round(cost * COST_PRECISION) / COST_PRECISION;
178
212
  }
179
213
  /**
@@ -191,7 +225,7 @@ export function calculateAIRequestEntriesCostUSD(model, entries) {
191
225
  return null;
192
226
  let cost = 0;
193
227
  for (const entry of entries) {
194
- const entryCost = calculateAIRequestCostUSD(model, entry);
228
+ const entryCost = calculateAIRequestCostUSD(entry.model ?? model, entry);
195
229
  if (entryCost === null)
196
230
  return null;
197
231
  cost += entryCost;
@@ -0,0 +1,21 @@
1
+ import { ActiveRecord, type FieldBuilder } from '../db/index.js';
2
+ import type { AppDescription, AppInstallationState } from './contracts/index.js';
3
+ /** Framework-owned record retained after code removal; business tables and migration ledgers stay separate. */
4
+ export declare class AppInstallation extends ActiveRecord {
5
+ static table: string;
6
+ /** Defines durable installation identity, desired state and retained ownership evidence. */
7
+ static fields(field: FieldBuilder): {
8
+ id: import("../db/index.js").UlidField;
9
+ appId: import("../db/index.js").StringField;
10
+ version: import("../db/index.js").StringField;
11
+ state: import("../db/index.js").StringField;
12
+ description: import("../db/index.js").JsonField<AppDescription | null>;
13
+ migrationHashes: import("../db/index.js").JsonField<Record<string, string> | null>;
14
+ };
15
+ id: string | null;
16
+ appId: string;
17
+ version: string;
18
+ state: AppInstallationState;
19
+ description: AppDescription;
20
+ migrationHashes: Record<string, string>;
21
+ }
@@ -0,0 +1,16 @@
1
+ import { ActiveRecord } from '../db/index.js';
2
+ /** Framework-owned record retained after code removal; business tables and migration ledgers stay separate. */
3
+ export class AppInstallation extends ActiveRecord {
4
+ static table = 'db3_apps';
5
+ /** Defines durable installation identity, desired state and retained ownership evidence. */
6
+ static fields(field) {
7
+ return {
8
+ id: field.ulid(),
9
+ appId: field.string({ column: 'app_id', required: true, length: 48, unique: true }),
10
+ version: field.string({ required: true, length: 64 }),
11
+ state: field.string({ required: true, length: 24 }),
12
+ description: field.json({ required: true }),
13
+ migrationHashes: field.json({ column: 'migration_hashes', required: true }),
14
+ };
15
+ }
16
+ }
@@ -0,0 +1,6 @@
1
+ /** Deliberately public HTTP failure from an app route. Other errors remain private to server logs. */
2
+ export declare class AppRouteError extends Error {
3
+ readonly statusCode: 400 | 401 | 403 | 404 | 409 | 503;
4
+ /** Creates a safe client-facing error; use only for expected validation and access failures. */
5
+ constructor(statusCode: 400 | 401 | 403 | 404 | 409 | 503, message: string);
6
+ }
@@ -0,0 +1,10 @@
1
+ /** Deliberately public HTTP failure from an app route. Other errors remain private to server logs. */
2
+ export class AppRouteError extends Error {
3
+ statusCode;
4
+ /** Creates a safe client-facing error; use only for expected validation and access failures. */
5
+ constructor(statusCode, message) {
6
+ super(message);
7
+ this.statusCode = statusCode;
8
+ this.name = 'AppRouteError';
9
+ }
10
+ }
@@ -0,0 +1,24 @@
1
+ import type { ActiveRecordClass } from '../db/index.js';
2
+ import type { QueueableJobClass } from '../queue/index.js';
3
+ import type { Schedule } from '../scheduler/index.js';
4
+ import type { App as HostApp } from '../server/App.js';
5
+ import type { AppNavigation, AppNavigationContext, AppRoute, AppStartContext } from './contracts/index.js';
6
+ /** Base for a discovered app's root App.ts. The instance is exposed as app().social, for example. */
7
+ export declare class AppService {
8
+ protected readonly host: HostApp;
9
+ static models: readonly ActiveRecordClass[];
10
+ static routes: readonly AppRoute<any>[];
11
+ static jobs: readonly QueueableJobClass[];
12
+ /** Receives the existing host; an installed app never creates a second framework runtime. */
13
+ constructor(host: HostApp);
14
+ /** Computes navigation for this viewer. Undefined uses manifest links; null hides the app. Keep viewer data off this shared instance. */
15
+ navigation(_context: AppNavigationContext): Promise<AppNavigation | null | undefined>;
16
+ /** Declares recurring work during boot. Delegate to the app's schedule.ts; declarations must be synchronous. */
17
+ schedule(_schedule: Schedule): void;
18
+ /** Starts resources after dependencies are ready. Register cleanup immediately using context.defer. */
19
+ start(_context: AppStartContext<this>): Promise<void>;
20
+ /** Runs after migrations on every install or upgrade. Implementations must tolerate retries. */
21
+ install(): Promise<void>;
22
+ /** Checks and releases durable app-specific registrations. Database tables are retained by default. */
23
+ uninstall(): Promise<void>;
24
+ }
@@ -0,0 +1,21 @@
1
+ /** Base for a discovered app's root App.ts. The instance is exposed as app().social, for example. */
2
+ export class AppService {
3
+ host;
4
+ static models = [];
5
+ static routes = [];
6
+ static jobs = [];
7
+ /** Receives the existing host; an installed app never creates a second framework runtime. */
8
+ constructor(host) {
9
+ this.host = host;
10
+ }
11
+ /** Computes navigation for this viewer. Undefined uses manifest links; null hides the app. Keep viewer data off this shared instance. */
12
+ async navigation(_context) { return undefined; }
13
+ /** Declares recurring work during boot. Delegate to the app's schedule.ts; declarations must be synchronous. */
14
+ schedule(_schedule) { }
15
+ /** Starts resources after dependencies are ready. Register cleanup immediately using context.defer. */
16
+ async start(_context) { }
17
+ /** Runs after migrations on every install or upgrade. Implementations must tolerate retries. */
18
+ async install() { }
19
+ /** Checks and releases durable app-specific registrations. Database tables are retained by default. */
20
+ async uninstall() { }
21
+ }