@data-club/ai-hub-server 0.0.1

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 (248) hide show
  1. package/dist/auth/argon2.d.ts +72 -0
  2. package/dist/auth/argon2.d.ts.map +1 -0
  3. package/dist/auth/argon2.js +145 -0
  4. package/dist/auth/argon2.js.map +1 -0
  5. package/dist/auth/encryption.d.ts +52 -0
  6. package/dist/auth/encryption.d.ts.map +1 -0
  7. package/dist/auth/encryption.js +98 -0
  8. package/dist/auth/encryption.js.map +1 -0
  9. package/dist/auth/jwt.d.ts +133 -0
  10. package/dist/auth/jwt.d.ts.map +1 -0
  11. package/dist/auth/jwt.js +147 -0
  12. package/dist/auth/jwt.js.map +1 -0
  13. package/dist/auth/middleware.d.ts +101 -0
  14. package/dist/auth/middleware.d.ts.map +1 -0
  15. package/dist/auth/middleware.js +161 -0
  16. package/dist/auth/middleware.js.map +1 -0
  17. package/dist/auth/passwordPolicy.d.ts +72 -0
  18. package/dist/auth/passwordPolicy.d.ts.map +1 -0
  19. package/dist/auth/passwordPolicy.js +88 -0
  20. package/dist/auth/passwordPolicy.js.map +1 -0
  21. package/dist/auth/roleRules.d.ts +200 -0
  22. package/dist/auth/roleRules.d.ts.map +1 -0
  23. package/dist/auth/roleRules.js +365 -0
  24. package/dist/auth/roleRules.js.map +1 -0
  25. package/dist/auth/userView.d.ts +55 -0
  26. package/dist/auth/userView.d.ts.map +1 -0
  27. package/dist/auth/userView.js +77 -0
  28. package/dist/auth/userView.js.map +1 -0
  29. package/dist/bootstrap.d.ts +104 -0
  30. package/dist/bootstrap.d.ts.map +1 -0
  31. package/dist/bootstrap.js +160 -0
  32. package/dist/bootstrap.js.map +1 -0
  33. package/dist/db/connection.d.ts +39 -0
  34. package/dist/db/connection.d.ts.map +1 -0
  35. package/dist/db/connection.js +62 -0
  36. package/dist/db/connection.js.map +1 -0
  37. package/dist/db/migrate.d.ts +31 -0
  38. package/dist/db/migrate.d.ts.map +1 -0
  39. package/dist/db/migrate.js +197 -0
  40. package/dist/db/migrate.js.map +1 -0
  41. package/dist/db/schema.d.ts +1902 -0
  42. package/dist/db/schema.d.ts.map +1 -0
  43. package/dist/db/schema.js +662 -0
  44. package/dist/db/schema.js.map +1 -0
  45. package/dist/db/seed.d.ts +92 -0
  46. package/dist/db/seed.d.ts.map +1 -0
  47. package/dist/db/seed.js +160 -0
  48. package/dist/db/seed.js.map +1 -0
  49. package/dist/handlers/fetch.d.ts +89 -0
  50. package/dist/handlers/fetch.d.ts.map +1 -0
  51. package/dist/handlers/fetch.js +173 -0
  52. package/dist/handlers/fetch.js.map +1 -0
  53. package/dist/handlers/nextjs.d.ts +40 -0
  54. package/dist/handlers/nextjs.d.ts.map +1 -0
  55. package/dist/handlers/nextjs.js +42 -0
  56. package/dist/handlers/nextjs.js.map +1 -0
  57. package/dist/handlers/responses.d.ts +46 -0
  58. package/dist/handlers/responses.d.ts.map +1 -0
  59. package/dist/handlers/responses.js +74 -0
  60. package/dist/handlers/responses.js.map +1 -0
  61. package/dist/handlers/routeTable.d.ts +21 -0
  62. package/dist/handlers/routeTable.d.ts.map +1 -0
  63. package/dist/handlers/routeTable.js +133 -0
  64. package/dist/handlers/routeTable.js.map +1 -0
  65. package/dist/handlers/router.d.ts +37 -0
  66. package/dist/handlers/router.d.ts.map +1 -0
  67. package/dist/handlers/router.js +82 -0
  68. package/dist/handlers/router.js.map +1 -0
  69. package/dist/handlers/sse.d.ts +38 -0
  70. package/dist/handlers/sse.d.ts.map +1 -0
  71. package/dist/handlers/sse.js +52 -0
  72. package/dist/handlers/sse.js.map +1 -0
  73. package/dist/handlers/types.d.ts +96 -0
  74. package/dist/handlers/types.d.ts.map +1 -0
  75. package/dist/handlers/types.js +14 -0
  76. package/dist/handlers/types.js.map +1 -0
  77. package/dist/index.d.ts +25 -0
  78. package/dist/index.d.ts.map +1 -0
  79. package/dist/index.js +24 -0
  80. package/dist/index.js.map +1 -0
  81. package/dist/letta/client.d.ts +355 -0
  82. package/dist/letta/client.d.ts.map +1 -0
  83. package/dist/letta/client.js +529 -0
  84. package/dist/letta/client.js.map +1 -0
  85. package/dist/letta/eventTranslator.d.ts +166 -0
  86. package/dist/letta/eventTranslator.d.ts.map +1 -0
  87. package/dist/letta/eventTranslator.js +532 -0
  88. package/dist/letta/eventTranslator.js.map +1 -0
  89. package/dist/letta/index.d.ts +13 -0
  90. package/dist/letta/index.d.ts.map +1 -0
  91. package/dist/letta/index.js +12 -0
  92. package/dist/letta/index.js.map +1 -0
  93. package/dist/letta/modelSettings.d.ts +176 -0
  94. package/dist/letta/modelSettings.d.ts.map +1 -0
  95. package/dist/letta/modelSettings.js +314 -0
  96. package/dist/letta/modelSettings.js.map +1 -0
  97. package/dist/letta/promptWrapping.d.ts +141 -0
  98. package/dist/letta/promptWrapping.d.ts.map +1 -0
  99. package/dist/letta/promptWrapping.js +213 -0
  100. package/dist/letta/promptWrapping.js.map +1 -0
  101. package/dist/letta/sandbox.d.ts +100 -0
  102. package/dist/letta/sandbox.d.ts.map +1 -0
  103. package/dist/letta/sandbox.js +151 -0
  104. package/dist/letta/sandbox.js.map +1 -0
  105. package/dist/letta/settingsFileSeed.d.ts +146 -0
  106. package/dist/letta/settingsFileSeed.d.ts.map +1 -0
  107. package/dist/letta/settingsFileSeed.js +177 -0
  108. package/dist/letta/settingsFileSeed.js.map +1 -0
  109. package/dist/letta/subprocessThrottle.d.ts +151 -0
  110. package/dist/letta/subprocessThrottle.d.ts.map +1 -0
  111. package/dist/letta/subprocessThrottle.js +195 -0
  112. package/dist/letta/subprocessThrottle.js.map +1 -0
  113. package/dist/letta/tpmRecovery.d.ts +202 -0
  114. package/dist/letta/tpmRecovery.d.ts.map +1 -0
  115. package/dist/letta/tpmRecovery.js +314 -0
  116. package/dist/letta/tpmRecovery.js.map +1 -0
  117. package/dist/letta/types.d.ts +54 -0
  118. package/dist/letta/types.d.ts.map +1 -0
  119. package/dist/letta/types.js +16 -0
  120. package/dist/letta/types.js.map +1 -0
  121. package/dist/observability/logger.d.ts +48 -0
  122. package/dist/observability/logger.d.ts.map +1 -0
  123. package/dist/observability/logger.js +81 -0
  124. package/dist/observability/logger.js.map +1 -0
  125. package/dist/observability/metrics.d.ts +53 -0
  126. package/dist/observability/metrics.d.ts.map +1 -0
  127. package/dist/observability/metrics.js +92 -0
  128. package/dist/observability/metrics.js.map +1 -0
  129. package/dist/routes/admin/agents.d.ts +63 -0
  130. package/dist/routes/admin/agents.d.ts.map +1 -0
  131. package/dist/routes/admin/agents.js +461 -0
  132. package/dist/routes/admin/agents.js.map +1 -0
  133. package/dist/routes/admin/rotatingMessages.d.ts +51 -0
  134. package/dist/routes/admin/rotatingMessages.d.ts.map +1 -0
  135. package/dist/routes/admin/rotatingMessages.js +292 -0
  136. package/dist/routes/admin/rotatingMessages.js.map +1 -0
  137. package/dist/routes/admin/sessions.d.ts +61 -0
  138. package/dist/routes/admin/sessions.d.ts.map +1 -0
  139. package/dist/routes/admin/sessions.js +232 -0
  140. package/dist/routes/admin/sessions.js.map +1 -0
  141. package/dist/routes/admin/settings.d.ts +110 -0
  142. package/dist/routes/admin/settings.d.ts.map +1 -0
  143. package/dist/routes/admin/settings.js +401 -0
  144. package/dist/routes/admin/settings.js.map +1 -0
  145. package/dist/routes/admin/users.d.ts +115 -0
  146. package/dist/routes/admin/users.d.ts.map +1 -0
  147. package/dist/routes/admin/users.js +374 -0
  148. package/dist/routes/admin/users.js.map +1 -0
  149. package/dist/routes/agents.d.ts +30 -0
  150. package/dist/routes/agents.d.ts.map +1 -0
  151. package/dist/routes/agents.js +55 -0
  152. package/dist/routes/agents.js.map +1 -0
  153. package/dist/routes/auth.d.ts +121 -0
  154. package/dist/routes/auth.d.ts.map +1 -0
  155. package/dist/routes/auth.js +422 -0
  156. package/dist/routes/auth.js.map +1 -0
  157. package/dist/routes/chat.d.ts +97 -0
  158. package/dist/routes/chat.d.ts.map +1 -0
  159. package/dist/routes/chat.js +484 -0
  160. package/dist/routes/chat.js.map +1 -0
  161. package/dist/routes/featureToggles.d.ts +34 -0
  162. package/dist/routes/featureToggles.d.ts.map +1 -0
  163. package/dist/routes/featureToggles.js +47 -0
  164. package/dist/routes/featureToggles.js.map +1 -0
  165. package/dist/routes/health.d.ts +24 -0
  166. package/dist/routes/health.d.ts.map +1 -0
  167. package/dist/routes/health.js +37 -0
  168. package/dist/routes/health.js.map +1 -0
  169. package/dist/routes/metrics.d.ts +35 -0
  170. package/dist/routes/metrics.d.ts.map +1 -0
  171. package/dist/routes/metrics.js +106 -0
  172. package/dist/routes/metrics.js.map +1 -0
  173. package/dist/routes/sessions.d.ts +161 -0
  174. package/dist/routes/sessions.d.ts.map +1 -0
  175. package/dist/routes/sessions.js +1501 -0
  176. package/dist/routes/sessions.js.map +1 -0
  177. package/dist/routes/stubs.d.ts +25 -0
  178. package/dist/routes/stubs.d.ts.map +1 -0
  179. package/dist/routes/stubs.js +25 -0
  180. package/dist/routes/stubs.js.map +1 -0
  181. package/dist/state/cron.d.ts +58 -0
  182. package/dist/state/cron.d.ts.map +1 -0
  183. package/dist/state/cron.js +160 -0
  184. package/dist/state/cron.js.map +1 -0
  185. package/dist/state/rotationRunner.d.ts +96 -0
  186. package/dist/state/rotationRunner.d.ts.map +1 -0
  187. package/dist/state/rotationRunner.js +246 -0
  188. package/dist/state/rotationRunner.js.map +1 -0
  189. package/dist/state/rotationScheduler.d.ts +76 -0
  190. package/dist/state/rotationScheduler.d.ts.map +1 -0
  191. package/dist/state/rotationScheduler.js +124 -0
  192. package/dist/state/rotationScheduler.js.map +1 -0
  193. package/dist/state/turnRegistry.d.ts +95 -0
  194. package/dist/state/turnRegistry.d.ts.map +1 -0
  195. package/dist/state/turnRegistry.js +149 -0
  196. package/dist/state/turnRegistry.js.map +1 -0
  197. package/dist/state/turnRunner.d.ts +134 -0
  198. package/dist/state/turnRunner.d.ts.map +1 -0
  199. package/dist/state/turnRunner.js +476 -0
  200. package/dist/state/turnRunner.js.map +1 -0
  201. package/package.json +47 -0
  202. package/src/auth/argon2.ts +152 -0
  203. package/src/auth/encryption.ts +110 -0
  204. package/src/auth/jwt.ts +217 -0
  205. package/src/auth/middleware.ts +250 -0
  206. package/src/auth/passwordPolicy.ts +99 -0
  207. package/src/auth/roleRules.ts +497 -0
  208. package/src/auth/userView.ts +88 -0
  209. package/src/bootstrap.ts +254 -0
  210. package/src/db/connection.ts +75 -0
  211. package/src/db/migrate.ts +212 -0
  212. package/src/db/schema.ts +750 -0
  213. package/src/db/seed.ts +236 -0
  214. package/src/handlers/fetch.ts +251 -0
  215. package/src/handlers/nextjs.ts +49 -0
  216. package/src/handlers/responses.ts +95 -0
  217. package/src/handlers/routeTable.ts +188 -0
  218. package/src/handlers/router.ts +96 -0
  219. package/src/handlers/sse.ts +55 -0
  220. package/src/handlers/types.ts +104 -0
  221. package/src/index.ts +60 -0
  222. package/src/letta/client.ts +860 -0
  223. package/src/letta/eventTranslator.ts +667 -0
  224. package/src/letta/index.ts +46 -0
  225. package/src/letta/lettaCliShim.mjs +40 -0
  226. package/src/letta/sandbox.ts +167 -0
  227. package/src/letta/settingsFileSeed.ts +254 -0
  228. package/src/letta/subprocessThrottle.ts +251 -0
  229. package/src/letta/types.ts +65 -0
  230. package/src/observability/logger.ts +103 -0
  231. package/src/observability/metrics.ts +114 -0
  232. package/src/routes/admin/agents.ts +574 -0
  233. package/src/routes/admin/rotatingMessages.ts +351 -0
  234. package/src/routes/admin/sessions.ts +283 -0
  235. package/src/routes/admin/settings.ts +463 -0
  236. package/src/routes/admin/users.ts +455 -0
  237. package/src/routes/agents.ts +66 -0
  238. package/src/routes/auth.ts +513 -0
  239. package/src/routes/chat.ts +534 -0
  240. package/src/routes/featureToggles.ts +52 -0
  241. package/src/routes/health.ts +44 -0
  242. package/src/routes/metrics.ts +111 -0
  243. package/src/routes/sessions.ts +1878 -0
  244. package/src/state/cron.ts +179 -0
  245. package/src/state/rotationRunner.ts +326 -0
  246. package/src/state/rotationScheduler.ts +164 -0
  247. package/src/state/turnRegistry.ts +210 -0
  248. package/src/state/turnRunner.ts +588 -0
@@ -0,0 +1,1902 @@
1
+ /**
2
+ * Drizzle schema for the ai-hub server's SQLite database.
3
+ *
4
+ * One row per real-world entity. v1 has no tenant scoping — a deployment is
5
+ * one customer organization, every row belongs to that customer.
6
+ *
7
+ * The shapes here are the canonical source of truth: the migration runner
8
+ * (`migrate.ts`) builds tables off these definitions, and every handler reads
9
+ * and writes through Drizzle's typed query builder.
10
+ *
11
+ * Forward-compat seams (intentionally non-obvious — see §6.7 "Future
12
+ * direction"):
13
+ *
14
+ * - `user.password_hash` is **nullable**. v1 always populates it (local login is
15
+ * the only flow that creates users). Future external IdPs leave it NULL.
16
+ * - `user.identity_source` defaults to `"local"`. v1 only ever writes
17
+ * `"local"`; future external IdPs add values like `"oidc:bankxyz"`.
18
+ * - `agent.is_archived` and `session.is_archived` are soft-hide flags.
19
+ * **Agents and sessions cannot be hard-deleted in v1** (§6.3.4 / §11) — the
20
+ * FK on `session.agent_id` is therefore always satisfiable and orphan
21
+ * sessions never happen.
22
+ *
23
+ * @see SPECIFICATIONS.md §11 — data model
24
+ * @see SPECIFICATIONS.md §6.7 — auth model + future IdPs
25
+ * @see SPECIFICATIONS.md §6.8 — persistence
26
+ */
27
+ /**
28
+ * Every human in this deployment, including super admins. ai-hub owns auth.
29
+ *
30
+ * The PRD uses singular table names; we follow that exactly so SQL tooling
31
+ * matches what implementing agents see in the spec.
32
+ *
33
+ * @see SPECIFICATIONS.md §11
34
+ */
35
+ export declare const user: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
36
+ name: "user";
37
+ schema: undefined;
38
+ columns: {
39
+ id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
40
+ name: "id";
41
+ tableName: "user";
42
+ dataType: "string";
43
+ columnType: "SQLiteText";
44
+ data: string;
45
+ driverParam: string;
46
+ notNull: true;
47
+ hasDefault: false;
48
+ isPrimaryKey: true;
49
+ isAutoincrement: false;
50
+ hasRuntimeDefault: false;
51
+ enumValues: [string, ...string[]];
52
+ baseColumn: never;
53
+ identity: undefined;
54
+ generated: undefined;
55
+ }, object>;
56
+ username: import("drizzle-orm/sqlite-core").SQLiteColumn<{
57
+ name: "username";
58
+ tableName: "user";
59
+ dataType: "string";
60
+ columnType: "SQLiteText";
61
+ data: string;
62
+ driverParam: string;
63
+ notNull: true;
64
+ hasDefault: false;
65
+ isPrimaryKey: false;
66
+ isAutoincrement: false;
67
+ hasRuntimeDefault: false;
68
+ enumValues: [string, ...string[]];
69
+ baseColumn: never;
70
+ identity: undefined;
71
+ generated: undefined;
72
+ }, object>;
73
+ displayName: import("drizzle-orm/sqlite-core").SQLiteColumn<{
74
+ name: "display_name";
75
+ tableName: "user";
76
+ dataType: "string";
77
+ columnType: "SQLiteText";
78
+ data: string;
79
+ driverParam: string;
80
+ notNull: false;
81
+ hasDefault: false;
82
+ isPrimaryKey: false;
83
+ isAutoincrement: false;
84
+ hasRuntimeDefault: false;
85
+ enumValues: [string, ...string[]];
86
+ baseColumn: never;
87
+ identity: undefined;
88
+ generated: undefined;
89
+ }, object>;
90
+ passwordHash: import("drizzle-orm/sqlite-core").SQLiteColumn<{
91
+ name: "password_hash";
92
+ tableName: "user";
93
+ dataType: "string";
94
+ columnType: "SQLiteText";
95
+ data: string;
96
+ driverParam: string;
97
+ notNull: false;
98
+ hasDefault: false;
99
+ isPrimaryKey: false;
100
+ isAutoincrement: false;
101
+ hasRuntimeDefault: false;
102
+ enumValues: [string, ...string[]];
103
+ baseColumn: never;
104
+ identity: undefined;
105
+ generated: undefined;
106
+ }, object>;
107
+ identitySource: import("drizzle-orm/sqlite-core").SQLiteColumn<{
108
+ name: "identity_source";
109
+ tableName: "user";
110
+ dataType: "string";
111
+ columnType: "SQLiteText";
112
+ data: string;
113
+ driverParam: string;
114
+ notNull: true;
115
+ hasDefault: true;
116
+ isPrimaryKey: false;
117
+ isAutoincrement: false;
118
+ hasRuntimeDefault: false;
119
+ enumValues: [string, ...string[]];
120
+ baseColumn: never;
121
+ identity: undefined;
122
+ generated: undefined;
123
+ }, object>;
124
+ isInitialPassword: import("drizzle-orm/sqlite-core").SQLiteColumn<{
125
+ name: "is_initial_password";
126
+ tableName: "user";
127
+ dataType: "boolean";
128
+ columnType: "SQLiteBoolean";
129
+ data: boolean;
130
+ driverParam: number;
131
+ notNull: true;
132
+ hasDefault: true;
133
+ isPrimaryKey: false;
134
+ isAutoincrement: false;
135
+ hasRuntimeDefault: false;
136
+ enumValues: undefined;
137
+ baseColumn: never;
138
+ identity: undefined;
139
+ generated: undefined;
140
+ }, object>;
141
+ role: import("drizzle-orm/sqlite-core").SQLiteColumn<{
142
+ name: "role";
143
+ tableName: "user";
144
+ dataType: "string";
145
+ columnType: "SQLiteText";
146
+ data: "user" | "power_user" | "admin" | "super_admin";
147
+ driverParam: string;
148
+ notNull: true;
149
+ hasDefault: true;
150
+ isPrimaryKey: false;
151
+ isAutoincrement: false;
152
+ hasRuntimeDefault: false;
153
+ enumValues: ["user", "power_user", "admin", "super_admin"];
154
+ baseColumn: never;
155
+ identity: undefined;
156
+ generated: undefined;
157
+ }, object>;
158
+ themePreference: import("drizzle-orm/sqlite-core").SQLiteColumn<{
159
+ name: "theme_preference";
160
+ tableName: "user";
161
+ dataType: "string";
162
+ columnType: "SQLiteText";
163
+ data: "light" | "dark";
164
+ driverParam: string;
165
+ notNull: false;
166
+ hasDefault: false;
167
+ isPrimaryKey: false;
168
+ isAutoincrement: false;
169
+ hasRuntimeDefault: false;
170
+ enumValues: ["light", "dark"];
171
+ baseColumn: never;
172
+ identity: undefined;
173
+ generated: undefined;
174
+ }, object>;
175
+ passwordChangedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
176
+ name: "password_changed_at";
177
+ tableName: "user";
178
+ dataType: "string";
179
+ columnType: "SQLiteText";
180
+ data: string;
181
+ driverParam: string;
182
+ notNull: true;
183
+ hasDefault: true;
184
+ isPrimaryKey: false;
185
+ isAutoincrement: false;
186
+ hasRuntimeDefault: false;
187
+ enumValues: [string, ...string[]];
188
+ baseColumn: never;
189
+ identity: undefined;
190
+ generated: undefined;
191
+ }, object>;
192
+ createdAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
193
+ name: "created_at";
194
+ tableName: "user";
195
+ dataType: "string";
196
+ columnType: "SQLiteText";
197
+ data: string;
198
+ driverParam: string;
199
+ notNull: true;
200
+ hasDefault: true;
201
+ isPrimaryKey: false;
202
+ isAutoincrement: false;
203
+ hasRuntimeDefault: false;
204
+ enumValues: [string, ...string[]];
205
+ baseColumn: never;
206
+ identity: undefined;
207
+ generated: undefined;
208
+ }, object>;
209
+ updatedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
210
+ name: "updated_at";
211
+ tableName: "user";
212
+ dataType: "string";
213
+ columnType: "SQLiteText";
214
+ data: string;
215
+ driverParam: string;
216
+ notNull: true;
217
+ hasDefault: true;
218
+ isPrimaryKey: false;
219
+ isAutoincrement: false;
220
+ hasRuntimeDefault: false;
221
+ enumValues: [string, ...string[]];
222
+ baseColumn: never;
223
+ identity: undefined;
224
+ generated: undefined;
225
+ }, object>;
226
+ };
227
+ dialect: "sqlite";
228
+ }>;
229
+ /**
230
+ * `power_user`/`admin`/`super_admin`-curated catalog of ai-hub agents.
231
+ *
232
+ * Each row is a use-case (e.g. *Customer Support*) backed by exactly one Letta
233
+ * agent. Shared across every user in the deployment (§13.2).
234
+ *
235
+ * Cannot be hard-deleted in v1 — only archived. `is_archived = true` filters
236
+ * the row out of the user-facing `GET /agents` response so no new sessions can
237
+ * start against it; existing sessions remain readable + writable.
238
+ *
239
+ * @see SPECIFICATIONS.md §11 — `agent` table
240
+ * @see SPECIFICATIONS.md §6.5 — TPM recovery defaults
241
+ */
242
+ export declare const agent: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
243
+ name: "agent";
244
+ schema: undefined;
245
+ columns: {
246
+ id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
247
+ name: "id";
248
+ tableName: "agent";
249
+ dataType: "string";
250
+ columnType: "SQLiteText";
251
+ data: string;
252
+ driverParam: string;
253
+ notNull: true;
254
+ hasDefault: false;
255
+ isPrimaryKey: true;
256
+ isAutoincrement: false;
257
+ hasRuntimeDefault: false;
258
+ enumValues: [string, ...string[]];
259
+ baseColumn: never;
260
+ identity: undefined;
261
+ generated: undefined;
262
+ }, object>;
263
+ displayName: import("drizzle-orm/sqlite-core").SQLiteColumn<{
264
+ name: "display_name";
265
+ tableName: "agent";
266
+ dataType: "string";
267
+ columnType: "SQLiteText";
268
+ data: string;
269
+ driverParam: string;
270
+ notNull: true;
271
+ hasDefault: false;
272
+ isPrimaryKey: false;
273
+ isAutoincrement: false;
274
+ hasRuntimeDefault: false;
275
+ enumValues: [string, ...string[]];
276
+ baseColumn: never;
277
+ identity: undefined;
278
+ generated: undefined;
279
+ }, object>;
280
+ lettaAgentId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
281
+ name: "letta_agent_id";
282
+ tableName: "agent";
283
+ dataType: "string";
284
+ columnType: "SQLiteText";
285
+ data: string;
286
+ driverParam: string;
287
+ notNull: true;
288
+ hasDefault: false;
289
+ isPrimaryKey: false;
290
+ isAutoincrement: false;
291
+ hasRuntimeDefault: false;
292
+ enumValues: [string, ...string[]];
293
+ baseColumn: never;
294
+ identity: undefined;
295
+ generated: undefined;
296
+ }, object>;
297
+ tpmRecoveryEnabled: import("drizzle-orm/sqlite-core").SQLiteColumn<{
298
+ name: "tpm_recovery_enabled";
299
+ tableName: "agent";
300
+ dataType: "boolean";
301
+ columnType: "SQLiteBoolean";
302
+ data: boolean;
303
+ driverParam: number;
304
+ notNull: true;
305
+ hasDefault: true;
306
+ isPrimaryKey: false;
307
+ isAutoincrement: false;
308
+ hasRuntimeDefault: false;
309
+ enumValues: undefined;
310
+ baseColumn: never;
311
+ identity: undefined;
312
+ generated: undefined;
313
+ }, object>;
314
+ maxRecoveryAttempts: import("drizzle-orm/sqlite-core").SQLiteColumn<{
315
+ name: "max_recovery_attempts";
316
+ tableName: "agent";
317
+ dataType: "number";
318
+ columnType: "SQLiteInteger";
319
+ data: number;
320
+ driverParam: number;
321
+ notNull: true;
322
+ hasDefault: true;
323
+ isPrimaryKey: false;
324
+ isAutoincrement: false;
325
+ hasRuntimeDefault: false;
326
+ enumValues: undefined;
327
+ baseColumn: never;
328
+ identity: undefined;
329
+ generated: undefined;
330
+ }, object>;
331
+ defaultRetryAfterSeconds: import("drizzle-orm/sqlite-core").SQLiteColumn<{
332
+ name: "default_retry_after_seconds";
333
+ tableName: "agent";
334
+ dataType: "number";
335
+ columnType: "SQLiteInteger";
336
+ data: number;
337
+ driverParam: number;
338
+ notNull: true;
339
+ hasDefault: true;
340
+ isPrimaryKey: false;
341
+ isAutoincrement: false;
342
+ hasRuntimeDefault: false;
343
+ enumValues: undefined;
344
+ baseColumn: never;
345
+ identity: undefined;
346
+ generated: undefined;
347
+ }, object>;
348
+ streamIdleTimeoutSeconds: import("drizzle-orm/sqlite-core").SQLiteColumn<{
349
+ name: "stream_idle_timeout_seconds";
350
+ tableName: "agent";
351
+ dataType: "number";
352
+ columnType: "SQLiteInteger";
353
+ data: number;
354
+ driverParam: number;
355
+ notNull: true;
356
+ hasDefault: true;
357
+ isPrimaryKey: false;
358
+ isAutoincrement: false;
359
+ hasRuntimeDefault: false;
360
+ enumValues: undefined;
361
+ baseColumn: never;
362
+ identity: undefined;
363
+ generated: undefined;
364
+ }, object>;
365
+ sandboxSeedName: import("drizzle-orm/sqlite-core").SQLiteColumn<{
366
+ name: "sandbox_seed_name";
367
+ tableName: "agent";
368
+ dataType: "string";
369
+ columnType: "SQLiteText";
370
+ data: string;
371
+ driverParam: string;
372
+ notNull: false;
373
+ hasDefault: false;
374
+ isPrimaryKey: false;
375
+ isAutoincrement: false;
376
+ hasRuntimeDefault: false;
377
+ enumValues: [string, ...string[]];
378
+ baseColumn: never;
379
+ identity: undefined;
380
+ generated: undefined;
381
+ }, object>;
382
+ forkSourceConversationId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
383
+ name: "fork_source_conversation_id";
384
+ tableName: "agent";
385
+ dataType: "string";
386
+ columnType: "SQLiteText";
387
+ data: string;
388
+ driverParam: string;
389
+ notNull: false;
390
+ hasDefault: false;
391
+ isPrimaryKey: false;
392
+ isAutoincrement: false;
393
+ hasRuntimeDefault: false;
394
+ enumValues: [string, ...string[]];
395
+ baseColumn: never;
396
+ identity: undefined;
397
+ generated: undefined;
398
+ }, object>;
399
+ isArchived: import("drizzle-orm/sqlite-core").SQLiteColumn<{
400
+ name: "is_archived";
401
+ tableName: "agent";
402
+ dataType: "boolean";
403
+ columnType: "SQLiteBoolean";
404
+ data: boolean;
405
+ driverParam: number;
406
+ notNull: true;
407
+ hasDefault: true;
408
+ isPrimaryKey: false;
409
+ isAutoincrement: false;
410
+ hasRuntimeDefault: false;
411
+ enumValues: undefined;
412
+ baseColumn: never;
413
+ identity: undefined;
414
+ generated: undefined;
415
+ }, object>;
416
+ createdAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
417
+ name: "created_at";
418
+ tableName: "agent";
419
+ dataType: "string";
420
+ columnType: "SQLiteText";
421
+ data: string;
422
+ driverParam: string;
423
+ notNull: true;
424
+ hasDefault: true;
425
+ isPrimaryKey: false;
426
+ isAutoincrement: false;
427
+ hasRuntimeDefault: false;
428
+ enumValues: [string, ...string[]];
429
+ baseColumn: never;
430
+ identity: undefined;
431
+ generated: undefined;
432
+ }, object>;
433
+ updatedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
434
+ name: "updated_at";
435
+ tableName: "agent";
436
+ dataType: "string";
437
+ columnType: "SQLiteText";
438
+ data: string;
439
+ driverParam: string;
440
+ notNull: true;
441
+ hasDefault: true;
442
+ isPrimaryKey: false;
443
+ isAutoincrement: false;
444
+ hasRuntimeDefault: false;
445
+ enumValues: [string, ...string[]];
446
+ baseColumn: never;
447
+ identity: undefined;
448
+ generated: undefined;
449
+ }, object>;
450
+ };
451
+ dialect: "sqlite";
452
+ }>;
453
+ /**
454
+ * One row per ai-hub session — a user's chat against a given ai-hub agent.
455
+ *
456
+ * `letta_conversation_id` is server-internal: the React client sees only
457
+ * `id`. `letta_agent_id` is a snapshot of `agent.letta_agent_id` at session
458
+ * creation time (re-pointing the catalog row does not migrate existing
459
+ * conversations).
460
+ *
461
+ * @see SPECIFICATIONS.md §11 — `session` table
462
+ * @see SPECIFICATIONS.md §6.3.1 — sessions API
463
+ */
464
+ export declare const session: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
465
+ name: "session";
466
+ schema: undefined;
467
+ columns: {
468
+ id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
469
+ name: "id";
470
+ tableName: "session";
471
+ dataType: "string";
472
+ columnType: "SQLiteText";
473
+ data: string;
474
+ driverParam: string;
475
+ notNull: true;
476
+ hasDefault: false;
477
+ isPrimaryKey: true;
478
+ isAutoincrement: false;
479
+ hasRuntimeDefault: false;
480
+ enumValues: [string, ...string[]];
481
+ baseColumn: never;
482
+ identity: undefined;
483
+ generated: undefined;
484
+ }, object>;
485
+ userId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
486
+ name: "user_id";
487
+ tableName: "session";
488
+ dataType: "string";
489
+ columnType: "SQLiteText";
490
+ data: string;
491
+ driverParam: string;
492
+ notNull: true;
493
+ hasDefault: false;
494
+ isPrimaryKey: false;
495
+ isAutoincrement: false;
496
+ hasRuntimeDefault: false;
497
+ enumValues: [string, ...string[]];
498
+ baseColumn: never;
499
+ identity: undefined;
500
+ generated: undefined;
501
+ }, object>;
502
+ agentId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
503
+ name: "agent_id";
504
+ tableName: "session";
505
+ dataType: "string";
506
+ columnType: "SQLiteText";
507
+ data: string;
508
+ driverParam: string;
509
+ notNull: true;
510
+ hasDefault: false;
511
+ isPrimaryKey: false;
512
+ isAutoincrement: false;
513
+ hasRuntimeDefault: false;
514
+ enumValues: [string, ...string[]];
515
+ baseColumn: never;
516
+ identity: undefined;
517
+ generated: undefined;
518
+ }, object>;
519
+ lettaConversationId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
520
+ name: "letta_conversation_id";
521
+ tableName: "session";
522
+ dataType: "string";
523
+ columnType: "SQLiteText";
524
+ data: string;
525
+ driverParam: string;
526
+ notNull: true;
527
+ hasDefault: false;
528
+ isPrimaryKey: false;
529
+ isAutoincrement: false;
530
+ hasRuntimeDefault: false;
531
+ enumValues: [string, ...string[]];
532
+ baseColumn: never;
533
+ identity: undefined;
534
+ generated: undefined;
535
+ }, object>;
536
+ lettaAgentId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
537
+ name: "letta_agent_id";
538
+ tableName: "session";
539
+ dataType: "string";
540
+ columnType: "SQLiteText";
541
+ data: string;
542
+ driverParam: string;
543
+ notNull: true;
544
+ hasDefault: false;
545
+ isPrimaryKey: false;
546
+ isAutoincrement: false;
547
+ hasRuntimeDefault: false;
548
+ enumValues: [string, ...string[]];
549
+ baseColumn: never;
550
+ identity: undefined;
551
+ generated: undefined;
552
+ }, object>;
553
+ title: import("drizzle-orm/sqlite-core").SQLiteColumn<{
554
+ name: "title";
555
+ tableName: "session";
556
+ dataType: "string";
557
+ columnType: "SQLiteText";
558
+ data: string;
559
+ driverParam: string;
560
+ notNull: true;
561
+ hasDefault: false;
562
+ isPrimaryKey: false;
563
+ isAutoincrement: false;
564
+ hasRuntimeDefault: false;
565
+ enumValues: [string, ...string[]];
566
+ baseColumn: never;
567
+ identity: undefined;
568
+ generated: undefined;
569
+ }, object>;
570
+ isArchived: import("drizzle-orm/sqlite-core").SQLiteColumn<{
571
+ name: "is_archived";
572
+ tableName: "session";
573
+ dataType: "boolean";
574
+ columnType: "SQLiteBoolean";
575
+ data: boolean;
576
+ driverParam: number;
577
+ notNull: true;
578
+ hasDefault: true;
579
+ isPrimaryKey: false;
580
+ isAutoincrement: false;
581
+ hasRuntimeDefault: false;
582
+ enumValues: undefined;
583
+ baseColumn: never;
584
+ identity: undefined;
585
+ generated: undefined;
586
+ }, object>;
587
+ reasoningEffort: import("drizzle-orm/sqlite-core").SQLiteColumn<{
588
+ name: "reasoning_effort";
589
+ tableName: "session";
590
+ dataType: "string";
591
+ columnType: "SQLiteText";
592
+ data: string;
593
+ driverParam: string;
594
+ notNull: false;
595
+ hasDefault: false;
596
+ isPrimaryKey: false;
597
+ isAutoincrement: false;
598
+ hasRuntimeDefault: false;
599
+ enumValues: [string, ...string[]];
600
+ baseColumn: never;
601
+ identity: undefined;
602
+ generated: undefined;
603
+ }, object>;
604
+ verbosity: import("drizzle-orm/sqlite-core").SQLiteColumn<{
605
+ name: "verbosity";
606
+ tableName: "session";
607
+ dataType: "string";
608
+ columnType: "SQLiteText";
609
+ data: string;
610
+ driverParam: string;
611
+ notNull: false;
612
+ hasDefault: false;
613
+ isPrimaryKey: false;
614
+ isAutoincrement: false;
615
+ hasRuntimeDefault: false;
616
+ enumValues: [string, ...string[]];
617
+ baseColumn: never;
618
+ identity: undefined;
619
+ generated: undefined;
620
+ }, object>;
621
+ thinkingBudget: import("drizzle-orm/sqlite-core").SQLiteColumn<{
622
+ name: "thinking_budget";
623
+ tableName: "session";
624
+ dataType: "number";
625
+ columnType: "SQLiteInteger";
626
+ data: number;
627
+ driverParam: number;
628
+ notNull: false;
629
+ hasDefault: false;
630
+ isPrimaryKey: false;
631
+ isAutoincrement: false;
632
+ hasRuntimeDefault: false;
633
+ enumValues: undefined;
634
+ baseColumn: never;
635
+ identity: undefined;
636
+ generated: undefined;
637
+ }, object>;
638
+ sandboxDir: import("drizzle-orm/sqlite-core").SQLiteColumn<{
639
+ name: "sandbox_dir";
640
+ tableName: "session";
641
+ dataType: "string";
642
+ columnType: "SQLiteText";
643
+ data: string;
644
+ driverParam: string;
645
+ notNull: false;
646
+ hasDefault: false;
647
+ isPrimaryKey: false;
648
+ isAutoincrement: false;
649
+ hasRuntimeDefault: false;
650
+ enumValues: [string, ...string[]];
651
+ baseColumn: never;
652
+ identity: undefined;
653
+ generated: undefined;
654
+ }, object>;
655
+ createdAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
656
+ name: "created_at";
657
+ tableName: "session";
658
+ dataType: "string";
659
+ columnType: "SQLiteText";
660
+ data: string;
661
+ driverParam: string;
662
+ notNull: true;
663
+ hasDefault: true;
664
+ isPrimaryKey: false;
665
+ isAutoincrement: false;
666
+ hasRuntimeDefault: false;
667
+ enumValues: [string, ...string[]];
668
+ baseColumn: never;
669
+ identity: undefined;
670
+ generated: undefined;
671
+ }, object>;
672
+ updatedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
673
+ name: "updated_at";
674
+ tableName: "session";
675
+ dataType: "string";
676
+ columnType: "SQLiteText";
677
+ data: string;
678
+ driverParam: string;
679
+ notNull: true;
680
+ hasDefault: true;
681
+ isPrimaryKey: false;
682
+ isAutoincrement: false;
683
+ hasRuntimeDefault: false;
684
+ enumValues: [string, ...string[]];
685
+ baseColumn: never;
686
+ identity: undefined;
687
+ generated: undefined;
688
+ }, object>;
689
+ };
690
+ dialect: "sqlite";
691
+ }>;
692
+ /**
693
+ * One row per AI turn (user message + assistant response cycle).
694
+ *
695
+ * Lives in the ai-hub DB for the *streaming session* (resumption + state
696
+ * transitions); message history itself is Letta-owned.
697
+ *
698
+ * @see SPECIFICATIONS.md §11
699
+ * @see SPECIFICATIONS.md §10 — state machine
700
+ */
701
+ export declare const turn: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
702
+ name: "turn";
703
+ schema: undefined;
704
+ columns: {
705
+ id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
706
+ name: "id";
707
+ tableName: "turn";
708
+ dataType: "string";
709
+ columnType: "SQLiteText";
710
+ data: string;
711
+ driverParam: string;
712
+ notNull: true;
713
+ hasDefault: false;
714
+ isPrimaryKey: true;
715
+ isAutoincrement: false;
716
+ hasRuntimeDefault: false;
717
+ enumValues: [string, ...string[]];
718
+ baseColumn: never;
719
+ identity: undefined;
720
+ generated: undefined;
721
+ }, object>;
722
+ sessionId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
723
+ name: "session_id";
724
+ tableName: "turn";
725
+ dataType: "string";
726
+ columnType: "SQLiteText";
727
+ data: string;
728
+ driverParam: string;
729
+ notNull: true;
730
+ hasDefault: false;
731
+ isPrimaryKey: false;
732
+ isAutoincrement: false;
733
+ hasRuntimeDefault: false;
734
+ enumValues: [string, ...string[]];
735
+ baseColumn: never;
736
+ identity: undefined;
737
+ generated: undefined;
738
+ }, object>;
739
+ status: import("drizzle-orm/sqlite-core").SQLiteColumn<{
740
+ name: "status";
741
+ tableName: "turn";
742
+ dataType: "string";
743
+ columnType: "SQLiteText";
744
+ data: "running" | "done" | "cancelled" | "failed";
745
+ driverParam: string;
746
+ notNull: true;
747
+ hasDefault: false;
748
+ isPrimaryKey: false;
749
+ isAutoincrement: false;
750
+ hasRuntimeDefault: false;
751
+ enumValues: ["running", "done", "cancelled", "failed"];
752
+ baseColumn: never;
753
+ identity: undefined;
754
+ generated: undefined;
755
+ }, object>;
756
+ phase: import("drizzle-orm/sqlite-core").SQLiteColumn<{
757
+ name: "phase";
758
+ tableName: "turn";
759
+ dataType: "string";
760
+ columnType: "SQLiteText";
761
+ data: "model_text" | "model_reasoning" | "model_tool_input" | "tool_executing" | "waiting_provider" | "awaiting_user";
762
+ driverParam: string;
763
+ notNull: false;
764
+ hasDefault: false;
765
+ isPrimaryKey: false;
766
+ isAutoincrement: false;
767
+ hasRuntimeDefault: false;
768
+ enumValues: ["model_text", "model_reasoning", "model_tool_input", "tool_executing", "waiting_provider", "awaiting_user"];
769
+ baseColumn: never;
770
+ identity: undefined;
771
+ generated: undefined;
772
+ }, object>;
773
+ lastSeq: import("drizzle-orm/sqlite-core").SQLiteColumn<{
774
+ name: "last_seq";
775
+ tableName: "turn";
776
+ dataType: "number";
777
+ columnType: "SQLiteInteger";
778
+ data: number;
779
+ driverParam: number;
780
+ notNull: true;
781
+ hasDefault: true;
782
+ isPrimaryKey: false;
783
+ isAutoincrement: false;
784
+ hasRuntimeDefault: false;
785
+ enumValues: undefined;
786
+ baseColumn: never;
787
+ identity: undefined;
788
+ generated: undefined;
789
+ }, object>;
790
+ idempotencyKey: import("drizzle-orm/sqlite-core").SQLiteColumn<{
791
+ name: "idempotency_key";
792
+ tableName: "turn";
793
+ dataType: "string";
794
+ columnType: "SQLiteText";
795
+ data: string;
796
+ driverParam: string;
797
+ notNull: false;
798
+ hasDefault: false;
799
+ isPrimaryKey: false;
800
+ isAutoincrement: false;
801
+ hasRuntimeDefault: false;
802
+ enumValues: [string, ...string[]];
803
+ baseColumn: never;
804
+ identity: undefined;
805
+ generated: undefined;
806
+ }, object>;
807
+ startedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
808
+ name: "started_at";
809
+ tableName: "turn";
810
+ dataType: "string";
811
+ columnType: "SQLiteText";
812
+ data: string;
813
+ driverParam: string;
814
+ notNull: true;
815
+ hasDefault: true;
816
+ isPrimaryKey: false;
817
+ isAutoincrement: false;
818
+ hasRuntimeDefault: false;
819
+ enumValues: [string, ...string[]];
820
+ baseColumn: never;
821
+ identity: undefined;
822
+ generated: undefined;
823
+ }, object>;
824
+ finishedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
825
+ name: "finished_at";
826
+ tableName: "turn";
827
+ dataType: "string";
828
+ columnType: "SQLiteText";
829
+ data: string;
830
+ driverParam: string;
831
+ notNull: false;
832
+ hasDefault: false;
833
+ isPrimaryKey: false;
834
+ isAutoincrement: false;
835
+ hasRuntimeDefault: false;
836
+ enumValues: [string, ...string[]];
837
+ baseColumn: never;
838
+ identity: undefined;
839
+ generated: undefined;
840
+ }, object>;
841
+ };
842
+ dialect: "sqlite";
843
+ }>;
844
+ /**
845
+ * Append-only log of SSE events per turn for `/chat/{turn_id}/events`
846
+ * resumption. Composite PK = `(turn_id, seq)`.
847
+ *
848
+ * @see SPECIFICATIONS.md §11
849
+ * @see SPECIFICATIONS.md §6.6 — state machine and SSE
850
+ */
851
+ export declare const turnEvent: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
852
+ name: "turn_event";
853
+ schema: undefined;
854
+ columns: {
855
+ turnId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
856
+ name: "turn_id";
857
+ tableName: "turn_event";
858
+ dataType: "string";
859
+ columnType: "SQLiteText";
860
+ data: string;
861
+ driverParam: string;
862
+ notNull: true;
863
+ hasDefault: false;
864
+ isPrimaryKey: false;
865
+ isAutoincrement: false;
866
+ hasRuntimeDefault: false;
867
+ enumValues: [string, ...string[]];
868
+ baseColumn: never;
869
+ identity: undefined;
870
+ generated: undefined;
871
+ }, object>;
872
+ seq: import("drizzle-orm/sqlite-core").SQLiteColumn<{
873
+ name: "seq";
874
+ tableName: "turn_event";
875
+ dataType: "number";
876
+ columnType: "SQLiteInteger";
877
+ data: number;
878
+ driverParam: number;
879
+ notNull: true;
880
+ hasDefault: false;
881
+ isPrimaryKey: false;
882
+ isAutoincrement: false;
883
+ hasRuntimeDefault: false;
884
+ enumValues: undefined;
885
+ baseColumn: never;
886
+ identity: undefined;
887
+ generated: undefined;
888
+ }, object>;
889
+ eventName: import("drizzle-orm/sqlite-core").SQLiteColumn<{
890
+ name: "event_name";
891
+ tableName: "turn_event";
892
+ dataType: "string";
893
+ columnType: "SQLiteText";
894
+ data: string;
895
+ driverParam: string;
896
+ notNull: true;
897
+ hasDefault: false;
898
+ isPrimaryKey: false;
899
+ isAutoincrement: false;
900
+ hasRuntimeDefault: false;
901
+ enumValues: [string, ...string[]];
902
+ baseColumn: never;
903
+ identity: undefined;
904
+ generated: undefined;
905
+ }, object>;
906
+ data: import("drizzle-orm/sqlite-core").SQLiteColumn<{
907
+ name: "data";
908
+ tableName: "turn_event";
909
+ dataType: "json";
910
+ columnType: "SQLiteTextJson";
911
+ data: unknown;
912
+ driverParam: string;
913
+ notNull: true;
914
+ hasDefault: false;
915
+ isPrimaryKey: false;
916
+ isAutoincrement: false;
917
+ hasRuntimeDefault: false;
918
+ enumValues: undefined;
919
+ baseColumn: never;
920
+ identity: undefined;
921
+ generated: undefined;
922
+ }, object>;
923
+ state: import("drizzle-orm/sqlite-core").SQLiteColumn<{
924
+ name: "state";
925
+ tableName: "turn_event";
926
+ dataType: "json";
927
+ columnType: "SQLiteTextJson";
928
+ data: unknown;
929
+ driverParam: string;
930
+ notNull: true;
931
+ hasDefault: false;
932
+ isPrimaryKey: false;
933
+ isAutoincrement: false;
934
+ hasRuntimeDefault: false;
935
+ enumValues: undefined;
936
+ baseColumn: never;
937
+ identity: undefined;
938
+ generated: undefined;
939
+ }, object>;
940
+ createdAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
941
+ name: "created_at";
942
+ tableName: "turn_event";
943
+ dataType: "string";
944
+ columnType: "SQLiteText";
945
+ data: string;
946
+ driverParam: string;
947
+ notNull: true;
948
+ hasDefault: true;
949
+ isPrimaryKey: false;
950
+ isAutoincrement: false;
951
+ hasRuntimeDefault: false;
952
+ enumValues: [string, ...string[]];
953
+ baseColumn: never;
954
+ identity: undefined;
955
+ generated: undefined;
956
+ }, object>;
957
+ };
958
+ dialect: "sqlite";
959
+ }>;
960
+ /**
961
+ * Singleton row holding deployment-wide settings.
962
+ *
963
+ * `id` is a fixed integer (= 1) so the singleton constraint is enforceable
964
+ * via PK. The encryption key (`AI_HUB_ENCRYPTION_KEY`) is **not** a column —
965
+ * it lives in env only (§6.8 / §12.1).
966
+ *
967
+ * Bootstrap-only env semantics for `service_token_signing_key` and
968
+ * `metrics_scrape_token` are documented in §6.7 / §6.10 / §12.1: on first
969
+ * boot, env values seed these columns; after that, env is no longer
970
+ * consulted. Rotation lives at `/admin/settings/rotate-{signing-key,
971
+ * metrics-token}`.
972
+ *
973
+ * @see SPECIFICATIONS.md §11
974
+ * @see SPECIFICATIONS.md §6.10 — `/metrics` bearer auth
975
+ * @see SPECIFICATIONS.md §6.7 — single signing key
976
+ * @see SPECIFICATIONS.md §12.1 — env vars
977
+ */
978
+ export declare const adminSetting: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
979
+ name: "admin_setting";
980
+ schema: undefined;
981
+ columns: {
982
+ id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
983
+ name: "id";
984
+ tableName: "admin_setting";
985
+ dataType: "number";
986
+ columnType: "SQLiteInteger";
987
+ data: number;
988
+ driverParam: number;
989
+ notNull: true;
990
+ hasDefault: true;
991
+ isPrimaryKey: true;
992
+ isAutoincrement: false;
993
+ hasRuntimeDefault: false;
994
+ enumValues: undefined;
995
+ baseColumn: never;
996
+ identity: undefined;
997
+ generated: undefined;
998
+ }, object>;
999
+ lettaApiKeyEncrypted: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1000
+ name: "letta_api_key_encrypted";
1001
+ tableName: "admin_setting";
1002
+ dataType: "buffer";
1003
+ columnType: "SQLiteBlobBuffer";
1004
+ data: Buffer<ArrayBufferLike>;
1005
+ driverParam: Buffer<ArrayBufferLike>;
1006
+ notNull: false;
1007
+ hasDefault: false;
1008
+ isPrimaryKey: false;
1009
+ isAutoincrement: false;
1010
+ hasRuntimeDefault: false;
1011
+ enumValues: undefined;
1012
+ baseColumn: never;
1013
+ identity: undefined;
1014
+ generated: undefined;
1015
+ }, object>;
1016
+ lettaBaseUrl: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1017
+ name: "letta_base_url";
1018
+ tableName: "admin_setting";
1019
+ dataType: "string";
1020
+ columnType: "SQLiteText";
1021
+ data: string;
1022
+ driverParam: string;
1023
+ notNull: false;
1024
+ hasDefault: false;
1025
+ isPrimaryKey: false;
1026
+ isAutoincrement: false;
1027
+ hasRuntimeDefault: false;
1028
+ enumValues: [string, ...string[]];
1029
+ baseColumn: never;
1030
+ identity: undefined;
1031
+ generated: undefined;
1032
+ }, object>;
1033
+ lettaAdeUrl: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1034
+ name: "letta_ade_url";
1035
+ tableName: "admin_setting";
1036
+ dataType: "string";
1037
+ columnType: "SQLiteText";
1038
+ data: string;
1039
+ driverParam: string;
1040
+ notNull: false;
1041
+ hasDefault: false;
1042
+ isPrimaryKey: false;
1043
+ isAutoincrement: false;
1044
+ hasRuntimeDefault: false;
1045
+ enumValues: [string, ...string[]];
1046
+ baseColumn: never;
1047
+ identity: undefined;
1048
+ generated: undefined;
1049
+ }, object>;
1050
+ featureToggles: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1051
+ name: "feature_toggles";
1052
+ tableName: "admin_setting";
1053
+ dataType: "json";
1054
+ columnType: "SQLiteTextJson";
1055
+ data: unknown;
1056
+ driverParam: string;
1057
+ notNull: true;
1058
+ hasDefault: true;
1059
+ isPrimaryKey: false;
1060
+ isAutoincrement: false;
1061
+ hasRuntimeDefault: false;
1062
+ enumValues: undefined;
1063
+ baseColumn: never;
1064
+ identity: undefined;
1065
+ generated: undefined;
1066
+ }, object>;
1067
+ themeSwitcherEnabled: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1068
+ name: "theme_switcher_enabled";
1069
+ tableName: "admin_setting";
1070
+ dataType: "boolean";
1071
+ columnType: "SQLiteBoolean";
1072
+ data: boolean;
1073
+ driverParam: number;
1074
+ notNull: true;
1075
+ hasDefault: true;
1076
+ isPrimaryKey: false;
1077
+ isAutoincrement: false;
1078
+ hasRuntimeDefault: false;
1079
+ enumValues: undefined;
1080
+ baseColumn: never;
1081
+ identity: undefined;
1082
+ generated: undefined;
1083
+ }, object>;
1084
+ themeDefault: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1085
+ name: "theme_default";
1086
+ tableName: "admin_setting";
1087
+ dataType: "string";
1088
+ columnType: "SQLiteText";
1089
+ data: "light" | "dark";
1090
+ driverParam: string;
1091
+ notNull: true;
1092
+ hasDefault: true;
1093
+ isPrimaryKey: false;
1094
+ isAutoincrement: false;
1095
+ hasRuntimeDefault: false;
1096
+ enumValues: ["light", "dark"];
1097
+ baseColumn: never;
1098
+ identity: undefined;
1099
+ generated: undefined;
1100
+ }, object>;
1101
+ serviceTokenSigningKey: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1102
+ name: "service_token_signing_key";
1103
+ tableName: "admin_setting";
1104
+ dataType: "buffer";
1105
+ columnType: "SQLiteBlobBuffer";
1106
+ data: Buffer<ArrayBufferLike>;
1107
+ driverParam: Buffer<ArrayBufferLike>;
1108
+ notNull: false;
1109
+ hasDefault: false;
1110
+ isPrimaryKey: false;
1111
+ isAutoincrement: false;
1112
+ hasRuntimeDefault: false;
1113
+ enumValues: undefined;
1114
+ baseColumn: never;
1115
+ identity: undefined;
1116
+ generated: undefined;
1117
+ }, object>;
1118
+ metricsScrapeToken: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1119
+ name: "metrics_scrape_token";
1120
+ tableName: "admin_setting";
1121
+ dataType: "string";
1122
+ columnType: "SQLiteText";
1123
+ data: string;
1124
+ driverParam: string;
1125
+ notNull: false;
1126
+ hasDefault: false;
1127
+ isPrimaryKey: false;
1128
+ isAutoincrement: false;
1129
+ hasRuntimeDefault: false;
1130
+ enumValues: [string, ...string[]];
1131
+ baseColumn: never;
1132
+ identity: undefined;
1133
+ generated: undefined;
1134
+ }, object>;
1135
+ metricsScrapeTokenRotatedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1136
+ name: "metrics_scrape_token_rotated_at";
1137
+ tableName: "admin_setting";
1138
+ dataType: "string";
1139
+ columnType: "SQLiteText";
1140
+ data: string;
1141
+ driverParam: string;
1142
+ notNull: false;
1143
+ hasDefault: false;
1144
+ isPrimaryKey: false;
1145
+ isAutoincrement: false;
1146
+ hasRuntimeDefault: false;
1147
+ enumValues: [string, ...string[]];
1148
+ baseColumn: never;
1149
+ identity: undefined;
1150
+ generated: undefined;
1151
+ }, object>;
1152
+ signingKeyRotatedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1153
+ name: "signing_key_rotated_at";
1154
+ tableName: "admin_setting";
1155
+ dataType: "string";
1156
+ columnType: "SQLiteText";
1157
+ data: string;
1158
+ driverParam: string;
1159
+ notNull: false;
1160
+ hasDefault: false;
1161
+ isPrimaryKey: false;
1162
+ isAutoincrement: false;
1163
+ hasRuntimeDefault: false;
1164
+ enumValues: [string, ...string[]];
1165
+ baseColumn: never;
1166
+ identity: undefined;
1167
+ generated: undefined;
1168
+ }, object>;
1169
+ updatedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1170
+ name: "updated_at";
1171
+ tableName: "admin_setting";
1172
+ dataType: "string";
1173
+ columnType: "SQLiteText";
1174
+ data: string;
1175
+ driverParam: string;
1176
+ notNull: true;
1177
+ hasDefault: true;
1178
+ isPrimaryKey: false;
1179
+ isAutoincrement: false;
1180
+ hasRuntimeDefault: false;
1181
+ enumValues: [string, ...string[]];
1182
+ baseColumn: never;
1183
+ identity: undefined;
1184
+ generated: undefined;
1185
+ }, object>;
1186
+ };
1187
+ dialect: "sqlite";
1188
+ }>;
1189
+ /**
1190
+ * Per-conversation, per-position **two-layer** content overrides for the
1191
+ * messages rendered by `GET /sessions/:id/messages` and (forward-looking)
1192
+ * the LLM-visible content at that position.
1193
+ *
1194
+ * **Why two layers.** Every message has two viewpoints that can legitimately
1195
+ * diverge in tier-3 customizations:
1196
+ *
1197
+ * - **system view** (`system_override`) — what the LLM saw / should see at
1198
+ * this position. Today this column is *stored but inert at read time* —
1199
+ * we keep it because Letta owns its own conversation history and we
1200
+ * can't actually rewrite past rows it persisted. It exists for two
1201
+ * forward-looking purposes: audit/debug tooling that wants to know
1202
+ * what the operator intends the LLM context to look like, and a future
1203
+ * context-replay feature.
1204
+ *
1205
+ * - **user view** (`user_override`) — what the human sees in the chat
1206
+ * transcript at this position. This is what the messages-list route
1207
+ * substitutes for display.
1208
+ *
1209
+ * Both columns are nullable; at least one must be non-null per a CHECK
1210
+ * constraint (enforced in the migration SQL). The "set just one column"
1211
+ * shape lets one writer set the user-facing view without clobbering an
1212
+ * earlier-set system-facing one and vice-versa.
1213
+ *
1214
+ * **Why position-keyed instead of id-keyed.** Letta rotates the
1215
+ * `system_message.id` on every prompt recompile, so id-based keys would
1216
+ * go stale. The chronologically-sorted index into
1217
+ * `listMessages(conversation_id)` is stable across recompiles.
1218
+ *
1219
+ * **Lifecycle / writers.**
1220
+ *
1221
+ * - The `POST /chat` post-turn writer creates a row with `user_override`
1222
+ * populated (and `system_override` left null) when the request body
1223
+ * carried a `user_override` parameter AND the turn terminated `done`.
1224
+ * It runs immediately after the turn-end event, at which point we know
1225
+ * the user message persisted and no turn is active.
1226
+ *
1227
+ * - `PUT /sessions/:id/message-overrides/:position` is the manual writer
1228
+ * for past messages — operator / SDK callers. Gated by two checks: the
1229
+ * position must already exist in Letta's message list, and no turn for
1230
+ * the session may be live. Merge semantics: only the columns the body
1231
+ * provided are written; an existing column on the other layer is
1232
+ * preserved.
1233
+ *
1234
+ * @see SPECIFICATIONS.md §6.3.1 — sessions API
1235
+ * @see SPECIFICATIONS.md §6.4 — Letta integration boundary
1236
+ */
1237
+ export declare const messageOverride: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
1238
+ name: "message_override";
1239
+ schema: undefined;
1240
+ columns: {
1241
+ conversationId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1242
+ name: "conversation_id";
1243
+ tableName: "message_override";
1244
+ dataType: "string";
1245
+ columnType: "SQLiteText";
1246
+ data: string;
1247
+ driverParam: string;
1248
+ notNull: true;
1249
+ hasDefault: false;
1250
+ isPrimaryKey: false;
1251
+ isAutoincrement: false;
1252
+ hasRuntimeDefault: false;
1253
+ enumValues: [string, ...string[]];
1254
+ baseColumn: never;
1255
+ identity: undefined;
1256
+ generated: undefined;
1257
+ }, object>;
1258
+ ordinalPosition: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1259
+ name: "ordinal_position";
1260
+ tableName: "message_override";
1261
+ dataType: "number";
1262
+ columnType: "SQLiteInteger";
1263
+ data: number;
1264
+ driverParam: number;
1265
+ notNull: true;
1266
+ hasDefault: false;
1267
+ isPrimaryKey: false;
1268
+ isAutoincrement: false;
1269
+ hasRuntimeDefault: false;
1270
+ enumValues: undefined;
1271
+ baseColumn: never;
1272
+ identity: undefined;
1273
+ generated: undefined;
1274
+ }, object>;
1275
+ systemOverride: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1276
+ name: "system_override";
1277
+ tableName: "message_override";
1278
+ dataType: "string";
1279
+ columnType: "SQLiteText";
1280
+ data: string;
1281
+ driverParam: string;
1282
+ notNull: false;
1283
+ hasDefault: false;
1284
+ isPrimaryKey: false;
1285
+ isAutoincrement: false;
1286
+ hasRuntimeDefault: false;
1287
+ enumValues: [string, ...string[]];
1288
+ baseColumn: never;
1289
+ identity: undefined;
1290
+ generated: undefined;
1291
+ }, object>;
1292
+ userOverride: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1293
+ name: "user_override";
1294
+ tableName: "message_override";
1295
+ dataType: "string";
1296
+ columnType: "SQLiteText";
1297
+ data: string;
1298
+ driverParam: string;
1299
+ notNull: false;
1300
+ hasDefault: false;
1301
+ isPrimaryKey: false;
1302
+ isAutoincrement: false;
1303
+ hasRuntimeDefault: false;
1304
+ enumValues: [string, ...string[]];
1305
+ baseColumn: never;
1306
+ identity: undefined;
1307
+ generated: undefined;
1308
+ }, object>;
1309
+ createdAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1310
+ name: "created_at";
1311
+ tableName: "message_override";
1312
+ dataType: "string";
1313
+ columnType: "SQLiteText";
1314
+ data: string;
1315
+ driverParam: string;
1316
+ notNull: true;
1317
+ hasDefault: true;
1318
+ isPrimaryKey: false;
1319
+ isAutoincrement: false;
1320
+ hasRuntimeDefault: false;
1321
+ enumValues: [string, ...string[]];
1322
+ baseColumn: never;
1323
+ identity: undefined;
1324
+ generated: undefined;
1325
+ }, object>;
1326
+ updatedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1327
+ name: "updated_at";
1328
+ tableName: "message_override";
1329
+ dataType: "string";
1330
+ columnType: "SQLiteText";
1331
+ data: string;
1332
+ driverParam: string;
1333
+ notNull: true;
1334
+ hasDefault: true;
1335
+ isPrimaryKey: false;
1336
+ isAutoincrement: false;
1337
+ hasRuntimeDefault: false;
1338
+ enumValues: [string, ...string[]];
1339
+ baseColumn: never;
1340
+ identity: undefined;
1341
+ generated: undefined;
1342
+ }, object>;
1343
+ };
1344
+ dialect: "sqlite";
1345
+ }>;
1346
+ /** Row shape for the `user` table (Drizzle-inferred). */
1347
+ export type UserRow = typeof user.$inferSelect;
1348
+ /** Insert shape for the `user` table. */
1349
+ export type UserInsert = typeof user.$inferInsert;
1350
+ /** Row shape for the `agent` table. */
1351
+ export type AgentRow = typeof agent.$inferSelect;
1352
+ /** Insert shape for the `agent` table. */
1353
+ export type AgentInsert = typeof agent.$inferInsert;
1354
+ /** Row shape for the `session` table. */
1355
+ export type SessionRow = typeof session.$inferSelect;
1356
+ /** Insert shape for the `session` table. */
1357
+ export type SessionInsert = typeof session.$inferInsert;
1358
+ /** Row shape for the `turn` table. */
1359
+ export type TurnRow = typeof turn.$inferSelect;
1360
+ /** Insert shape for the `turn` table. */
1361
+ export type TurnInsert = typeof turn.$inferInsert;
1362
+ /** Row shape for the `turn_event` table. */
1363
+ export type TurnEventRow = typeof turnEvent.$inferSelect;
1364
+ /** Insert shape for the `turn_event` table. */
1365
+ export type TurnEventInsert = typeof turnEvent.$inferInsert;
1366
+ /** Row shape for the `admin_setting` table. */
1367
+ export type AdminSettingRow = typeof adminSetting.$inferSelect;
1368
+ /** Insert shape for the `admin_setting` table. */
1369
+ export type AdminSettingInsert = typeof adminSetting.$inferInsert;
1370
+ /** Row shape for the `message_override` table. */
1371
+ export type MessageOverrideRow = typeof messageOverride.$inferSelect;
1372
+ /** Insert shape for the `message_override` table. */
1373
+ export type MessageOverrideInsert = typeof messageOverride.$inferInsert;
1374
+ /**
1375
+ * Provider-reported per-turn token usage, stamped on the LAST assistant
1376
+ * message of each turn. Surfaced to the chat UI via a hover badge so
1377
+ * users can see (a) total tokens consumed and (b) prompt-cache
1378
+ * hit/miss split (Anthropic + OpenAI + Gemini all report
1379
+ * `cached_input_tokens`; Anthropic also reports `cache_write_tokens`).
1380
+ *
1381
+ * The runner fetches Letta's `GET /v1/runs/{run_id}/messages` after
1382
+ * the turn ends, finds the `usage_statistics`-typed message, and
1383
+ * inserts one row here keyed by the last assistant message's Letta id.
1384
+ *
1385
+ * @see SPECIFICATIONS.md §9 — `usage` SSE event
1386
+ * @see docs/server/chat-sse.md — wire protocol
1387
+ */
1388
+ export declare const messageUsage: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
1389
+ name: "message_usage";
1390
+ schema: undefined;
1391
+ columns: {
1392
+ lettaMessageId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1393
+ name: "letta_message_id";
1394
+ tableName: "message_usage";
1395
+ dataType: "string";
1396
+ columnType: "SQLiteText";
1397
+ data: string;
1398
+ driverParam: string;
1399
+ notNull: true;
1400
+ hasDefault: false;
1401
+ isPrimaryKey: true;
1402
+ isAutoincrement: false;
1403
+ hasRuntimeDefault: false;
1404
+ enumValues: [string, ...string[]];
1405
+ baseColumn: never;
1406
+ identity: undefined;
1407
+ generated: undefined;
1408
+ }, object>;
1409
+ sessionId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1410
+ name: "session_id";
1411
+ tableName: "message_usage";
1412
+ dataType: "string";
1413
+ columnType: "SQLiteText";
1414
+ data: string;
1415
+ driverParam: string;
1416
+ notNull: true;
1417
+ hasDefault: false;
1418
+ isPrimaryKey: false;
1419
+ isAutoincrement: false;
1420
+ hasRuntimeDefault: false;
1421
+ enumValues: [string, ...string[]];
1422
+ baseColumn: never;
1423
+ identity: undefined;
1424
+ generated: undefined;
1425
+ }, object>;
1426
+ promptTokens: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1427
+ name: "prompt_tokens";
1428
+ tableName: "message_usage";
1429
+ dataType: "number";
1430
+ columnType: "SQLiteInteger";
1431
+ data: number;
1432
+ driverParam: number;
1433
+ notNull: false;
1434
+ hasDefault: false;
1435
+ isPrimaryKey: false;
1436
+ isAutoincrement: false;
1437
+ hasRuntimeDefault: false;
1438
+ enumValues: undefined;
1439
+ baseColumn: never;
1440
+ identity: undefined;
1441
+ generated: undefined;
1442
+ }, object>;
1443
+ completionTokens: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1444
+ name: "completion_tokens";
1445
+ tableName: "message_usage";
1446
+ dataType: "number";
1447
+ columnType: "SQLiteInteger";
1448
+ data: number;
1449
+ driverParam: number;
1450
+ notNull: false;
1451
+ hasDefault: false;
1452
+ isPrimaryKey: false;
1453
+ isAutoincrement: false;
1454
+ hasRuntimeDefault: false;
1455
+ enumValues: undefined;
1456
+ baseColumn: never;
1457
+ identity: undefined;
1458
+ generated: undefined;
1459
+ }, object>;
1460
+ totalTokens: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1461
+ name: "total_tokens";
1462
+ tableName: "message_usage";
1463
+ dataType: "number";
1464
+ columnType: "SQLiteInteger";
1465
+ data: number;
1466
+ driverParam: number;
1467
+ notNull: false;
1468
+ hasDefault: false;
1469
+ isPrimaryKey: false;
1470
+ isAutoincrement: false;
1471
+ hasRuntimeDefault: false;
1472
+ enumValues: undefined;
1473
+ baseColumn: never;
1474
+ identity: undefined;
1475
+ generated: undefined;
1476
+ }, object>;
1477
+ cachedInputTokens: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1478
+ name: "cached_input_tokens";
1479
+ tableName: "message_usage";
1480
+ dataType: "number";
1481
+ columnType: "SQLiteInteger";
1482
+ data: number;
1483
+ driverParam: number;
1484
+ notNull: false;
1485
+ hasDefault: false;
1486
+ isPrimaryKey: false;
1487
+ isAutoincrement: false;
1488
+ hasRuntimeDefault: false;
1489
+ enumValues: undefined;
1490
+ baseColumn: never;
1491
+ identity: undefined;
1492
+ generated: undefined;
1493
+ }, object>;
1494
+ cacheWriteTokens: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1495
+ name: "cache_write_tokens";
1496
+ tableName: "message_usage";
1497
+ dataType: "number";
1498
+ columnType: "SQLiteInteger";
1499
+ data: number;
1500
+ driverParam: number;
1501
+ notNull: false;
1502
+ hasDefault: false;
1503
+ isPrimaryKey: false;
1504
+ isAutoincrement: false;
1505
+ hasRuntimeDefault: false;
1506
+ enumValues: undefined;
1507
+ baseColumn: never;
1508
+ identity: undefined;
1509
+ generated: undefined;
1510
+ }, object>;
1511
+ reasoningTokens: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1512
+ name: "reasoning_tokens";
1513
+ tableName: "message_usage";
1514
+ dataType: "number";
1515
+ columnType: "SQLiteInteger";
1516
+ data: number;
1517
+ driverParam: number;
1518
+ notNull: false;
1519
+ hasDefault: false;
1520
+ isPrimaryKey: false;
1521
+ isAutoincrement: false;
1522
+ hasRuntimeDefault: false;
1523
+ enumValues: undefined;
1524
+ baseColumn: never;
1525
+ identity: undefined;
1526
+ generated: undefined;
1527
+ }, object>;
1528
+ contextTokens: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1529
+ name: "context_tokens";
1530
+ tableName: "message_usage";
1531
+ dataType: "number";
1532
+ columnType: "SQLiteInteger";
1533
+ data: number;
1534
+ driverParam: number;
1535
+ notNull: false;
1536
+ hasDefault: false;
1537
+ isPrimaryKey: false;
1538
+ isAutoincrement: false;
1539
+ hasRuntimeDefault: false;
1540
+ enumValues: undefined;
1541
+ baseColumn: never;
1542
+ identity: undefined;
1543
+ generated: undefined;
1544
+ }, object>;
1545
+ runId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1546
+ name: "run_id";
1547
+ tableName: "message_usage";
1548
+ dataType: "string";
1549
+ columnType: "SQLiteText";
1550
+ data: string;
1551
+ driverParam: string;
1552
+ notNull: false;
1553
+ hasDefault: false;
1554
+ isPrimaryKey: false;
1555
+ isAutoincrement: false;
1556
+ hasRuntimeDefault: false;
1557
+ enumValues: [string, ...string[]];
1558
+ baseColumn: never;
1559
+ identity: undefined;
1560
+ generated: undefined;
1561
+ }, object>;
1562
+ createdAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1563
+ name: "created_at";
1564
+ tableName: "message_usage";
1565
+ dataType: "string";
1566
+ columnType: "SQLiteText";
1567
+ data: string;
1568
+ driverParam: string;
1569
+ notNull: true;
1570
+ hasDefault: true;
1571
+ isPrimaryKey: false;
1572
+ isAutoincrement: false;
1573
+ hasRuntimeDefault: false;
1574
+ enumValues: [string, ...string[]];
1575
+ baseColumn: never;
1576
+ identity: undefined;
1577
+ generated: undefined;
1578
+ }, object>;
1579
+ };
1580
+ dialect: "sqlite";
1581
+ }>;
1582
+ /** Row shape for the `message_usage` table. */
1583
+ export type MessageUsageRow = typeof messageUsage.$inferSelect;
1584
+ /** Insert shape for the `message_usage` table. */
1585
+ export type MessageUsageInsert = typeof messageUsage.$inferInsert;
1586
+ /**
1587
+ * Admin-curated **rotating starting message** — a prompt that ai-hub runs
1588
+ * against a Letta agent on a schedule, capturing the agent's reply as a
1589
+ * *pre-prepared conversation* that refreshes automatically.
1590
+ *
1591
+ * This is an automated, self-refreshing evolution of `agent.fork_source_conversation_id`
1592
+ * (static base-conversation forking). Instead of an operator hand-authoring a
1593
+ * base conversation in the ADE and pasting its id, a rotation runner:
1594
+ *
1595
+ * 1. `createConversation(letta_agent_id)`,
1596
+ * 2. sends `prompt` (drained to completion via the normal streaming path),
1597
+ * 3. deletes the prompt's `user_message` so the conversation opens with the
1598
+ * agent's reply,
1599
+ * 4. stores the resulting conversation id in `current_conversation_id`.
1600
+ *
1601
+ * The row's `id` (a `rmsg-…` token) is the identifier callers reference
1602
+ * anywhere a conversation is referenced. Today that's the agent's **Base
1603
+ * conversation ID** field: an `agent.fork_source_conversation_id` of
1604
+ * `rmsg-<id>` resolves (at `POST /sessions`) to this row's
1605
+ * `current_conversation_id`, which is then forked like any static base.
1606
+ *
1607
+ * **Same-agent fork constraint.** Letta's fork API requires the new
1608
+ * conversation to share the source's agent, so a rotating message can only
1609
+ * back ai-hub agents whose `letta_agent_id` equals this row's
1610
+ * `letta_agent_id`. The admin agents validator enforces this at write time
1611
+ * (mirrors the static `fork_source_agent_mismatch` check).
1612
+ *
1613
+ * **Resilience.** A failed rotation never blanks a working
1614
+ * `current_conversation_id` — the runner keeps the last-good value, records
1615
+ * `last_status = 'error'` + `last_error`, and retries on the next interval.
1616
+ *
1617
+ * @see docs/server/rotating-messages.md
1618
+ */
1619
+ export declare const rotatingMessage: import("drizzle-orm/sqlite-core").SQLiteTableWithColumns<{
1620
+ name: "rotating_message";
1621
+ schema: undefined;
1622
+ columns: {
1623
+ id: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1624
+ name: "id";
1625
+ tableName: "rotating_message";
1626
+ dataType: "string";
1627
+ columnType: "SQLiteText";
1628
+ data: string;
1629
+ driverParam: string;
1630
+ notNull: true;
1631
+ hasDefault: false;
1632
+ isPrimaryKey: true;
1633
+ isAutoincrement: false;
1634
+ hasRuntimeDefault: false;
1635
+ enumValues: [string, ...string[]];
1636
+ baseColumn: never;
1637
+ identity: undefined;
1638
+ generated: undefined;
1639
+ }, object>;
1640
+ displayName: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1641
+ name: "display_name";
1642
+ tableName: "rotating_message";
1643
+ dataType: "string";
1644
+ columnType: "SQLiteText";
1645
+ data: string;
1646
+ driverParam: string;
1647
+ notNull: true;
1648
+ hasDefault: false;
1649
+ isPrimaryKey: false;
1650
+ isAutoincrement: false;
1651
+ hasRuntimeDefault: false;
1652
+ enumValues: [string, ...string[]];
1653
+ baseColumn: never;
1654
+ identity: undefined;
1655
+ generated: undefined;
1656
+ }, object>;
1657
+ prompt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1658
+ name: "prompt";
1659
+ tableName: "rotating_message";
1660
+ dataType: "string";
1661
+ columnType: "SQLiteText";
1662
+ data: string;
1663
+ driverParam: string;
1664
+ notNull: true;
1665
+ hasDefault: false;
1666
+ isPrimaryKey: false;
1667
+ isAutoincrement: false;
1668
+ hasRuntimeDefault: false;
1669
+ enumValues: [string, ...string[]];
1670
+ baseColumn: never;
1671
+ identity: undefined;
1672
+ generated: undefined;
1673
+ }, object>;
1674
+ lettaAgentId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1675
+ name: "letta_agent_id";
1676
+ tableName: "rotating_message";
1677
+ dataType: "string";
1678
+ columnType: "SQLiteText";
1679
+ data: string;
1680
+ driverParam: string;
1681
+ notNull: true;
1682
+ hasDefault: false;
1683
+ isPrimaryKey: false;
1684
+ isAutoincrement: false;
1685
+ hasRuntimeDefault: false;
1686
+ enumValues: [string, ...string[]];
1687
+ baseColumn: never;
1688
+ identity: undefined;
1689
+ generated: undefined;
1690
+ }, object>;
1691
+ scheduleKind: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1692
+ name: "schedule_kind";
1693
+ tableName: "rotating_message";
1694
+ dataType: "string";
1695
+ columnType: "SQLiteText";
1696
+ data: "every" | "daily" | "cron";
1697
+ driverParam: string;
1698
+ notNull: true;
1699
+ hasDefault: false;
1700
+ isPrimaryKey: false;
1701
+ isAutoincrement: false;
1702
+ hasRuntimeDefault: false;
1703
+ enumValues: ["every", "daily", "cron"];
1704
+ baseColumn: never;
1705
+ identity: undefined;
1706
+ generated: undefined;
1707
+ }, object>;
1708
+ intervalSeconds: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1709
+ name: "interval_seconds";
1710
+ tableName: "rotating_message";
1711
+ dataType: "number";
1712
+ columnType: "SQLiteInteger";
1713
+ data: number;
1714
+ driverParam: number;
1715
+ notNull: false;
1716
+ hasDefault: false;
1717
+ isPrimaryKey: false;
1718
+ isAutoincrement: false;
1719
+ hasRuntimeDefault: false;
1720
+ enumValues: undefined;
1721
+ baseColumn: never;
1722
+ identity: undefined;
1723
+ generated: undefined;
1724
+ }, object>;
1725
+ dailyTime: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1726
+ name: "daily_time";
1727
+ tableName: "rotating_message";
1728
+ dataType: "string";
1729
+ columnType: "SQLiteText";
1730
+ data: string;
1731
+ driverParam: string;
1732
+ notNull: false;
1733
+ hasDefault: false;
1734
+ isPrimaryKey: false;
1735
+ isAutoincrement: false;
1736
+ hasRuntimeDefault: false;
1737
+ enumValues: [string, ...string[]];
1738
+ baseColumn: never;
1739
+ identity: undefined;
1740
+ generated: undefined;
1741
+ }, object>;
1742
+ cronExpression: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1743
+ name: "cron_expression";
1744
+ tableName: "rotating_message";
1745
+ dataType: "string";
1746
+ columnType: "SQLiteText";
1747
+ data: string;
1748
+ driverParam: string;
1749
+ notNull: false;
1750
+ hasDefault: false;
1751
+ isPrimaryKey: false;
1752
+ isAutoincrement: false;
1753
+ hasRuntimeDefault: false;
1754
+ enumValues: [string, ...string[]];
1755
+ baseColumn: never;
1756
+ identity: undefined;
1757
+ generated: undefined;
1758
+ }, object>;
1759
+ currentConversationId: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1760
+ name: "current_conversation_id";
1761
+ tableName: "rotating_message";
1762
+ dataType: "string";
1763
+ columnType: "SQLiteText";
1764
+ data: string;
1765
+ driverParam: string;
1766
+ notNull: false;
1767
+ hasDefault: false;
1768
+ isPrimaryKey: false;
1769
+ isAutoincrement: false;
1770
+ hasRuntimeDefault: false;
1771
+ enumValues: [string, ...string[]];
1772
+ baseColumn: never;
1773
+ identity: undefined;
1774
+ generated: undefined;
1775
+ }, object>;
1776
+ lastStatus: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1777
+ name: "last_status";
1778
+ tableName: "rotating_message";
1779
+ dataType: "string";
1780
+ columnType: "SQLiteText";
1781
+ data: "pending" | "ok" | "error";
1782
+ driverParam: string;
1783
+ notNull: true;
1784
+ hasDefault: true;
1785
+ isPrimaryKey: false;
1786
+ isAutoincrement: false;
1787
+ hasRuntimeDefault: false;
1788
+ enumValues: ["pending", "ok", "error"];
1789
+ baseColumn: never;
1790
+ identity: undefined;
1791
+ generated: undefined;
1792
+ }, object>;
1793
+ lastError: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1794
+ name: "last_error";
1795
+ tableName: "rotating_message";
1796
+ dataType: "string";
1797
+ columnType: "SQLiteText";
1798
+ data: string;
1799
+ driverParam: string;
1800
+ notNull: false;
1801
+ hasDefault: false;
1802
+ isPrimaryKey: false;
1803
+ isAutoincrement: false;
1804
+ hasRuntimeDefault: false;
1805
+ enumValues: [string, ...string[]];
1806
+ baseColumn: never;
1807
+ identity: undefined;
1808
+ generated: undefined;
1809
+ }, object>;
1810
+ lastRotatedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1811
+ name: "last_rotated_at";
1812
+ tableName: "rotating_message";
1813
+ dataType: "string";
1814
+ columnType: "SQLiteText";
1815
+ data: string;
1816
+ driverParam: string;
1817
+ notNull: false;
1818
+ hasDefault: false;
1819
+ isPrimaryKey: false;
1820
+ isAutoincrement: false;
1821
+ hasRuntimeDefault: false;
1822
+ enumValues: [string, ...string[]];
1823
+ baseColumn: never;
1824
+ identity: undefined;
1825
+ generated: undefined;
1826
+ }, object>;
1827
+ nextRotationAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1828
+ name: "next_rotation_at";
1829
+ tableName: "rotating_message";
1830
+ dataType: "string";
1831
+ columnType: "SQLiteText";
1832
+ data: string;
1833
+ driverParam: string;
1834
+ notNull: true;
1835
+ hasDefault: true;
1836
+ isPrimaryKey: false;
1837
+ isAutoincrement: false;
1838
+ hasRuntimeDefault: false;
1839
+ enumValues: [string, ...string[]];
1840
+ baseColumn: never;
1841
+ identity: undefined;
1842
+ generated: undefined;
1843
+ }, object>;
1844
+ isArchived: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1845
+ name: "is_archived";
1846
+ tableName: "rotating_message";
1847
+ dataType: "boolean";
1848
+ columnType: "SQLiteBoolean";
1849
+ data: boolean;
1850
+ driverParam: number;
1851
+ notNull: true;
1852
+ hasDefault: true;
1853
+ isPrimaryKey: false;
1854
+ isAutoincrement: false;
1855
+ hasRuntimeDefault: false;
1856
+ enumValues: undefined;
1857
+ baseColumn: never;
1858
+ identity: undefined;
1859
+ generated: undefined;
1860
+ }, object>;
1861
+ createdAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1862
+ name: "created_at";
1863
+ tableName: "rotating_message";
1864
+ dataType: "string";
1865
+ columnType: "SQLiteText";
1866
+ data: string;
1867
+ driverParam: string;
1868
+ notNull: true;
1869
+ hasDefault: true;
1870
+ isPrimaryKey: false;
1871
+ isAutoincrement: false;
1872
+ hasRuntimeDefault: false;
1873
+ enumValues: [string, ...string[]];
1874
+ baseColumn: never;
1875
+ identity: undefined;
1876
+ generated: undefined;
1877
+ }, object>;
1878
+ updatedAt: import("drizzle-orm/sqlite-core").SQLiteColumn<{
1879
+ name: "updated_at";
1880
+ tableName: "rotating_message";
1881
+ dataType: "string";
1882
+ columnType: "SQLiteText";
1883
+ data: string;
1884
+ driverParam: string;
1885
+ notNull: true;
1886
+ hasDefault: true;
1887
+ isPrimaryKey: false;
1888
+ isAutoincrement: false;
1889
+ hasRuntimeDefault: false;
1890
+ enumValues: [string, ...string[]];
1891
+ baseColumn: never;
1892
+ identity: undefined;
1893
+ generated: undefined;
1894
+ }, object>;
1895
+ };
1896
+ dialect: "sqlite";
1897
+ }>;
1898
+ /** Row shape for the `rotating_message` table. */
1899
+ export type RotatingMessageRow = typeof rotatingMessage.$inferSelect;
1900
+ /** Insert shape for the `rotating_message` table. */
1901
+ export type RotatingMessageInsert = typeof rotatingMessage.$inferInsert;
1902
+ //# sourceMappingURL=schema.d.ts.map