@inkeep/agents-core 0.1.4 → 0.1.7

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 (278) hide show
  1. package/README.md +2 -2
  2. package/SUPPLEMENTAL_TERMS.md +40 -0
  3. package/dist/chunk-BMKWVKI2.js +126 -0
  4. package/dist/chunk-H2F72PDA.js +15 -0
  5. package/dist/chunk-MKBO26DX.js +9 -0
  6. package/dist/chunk-MXQKLGQK.js +925 -0
  7. package/dist/chunk-R3VVJXX7.js +575 -0
  8. package/dist/chunk-SVGQSPW4.js +24 -0
  9. package/dist/client-exports.cjs +1702 -0
  10. package/dist/client-exports.js +202 -246
  11. package/dist/db/schema.cjs +922 -0
  12. package/dist/db/schema.js +1 -696
  13. package/dist/index.cjs +10122 -0
  14. package/dist/index.js +7989 -13
  15. package/dist/types/index.cjs +45 -0
  16. package/dist/types/index.js +2 -6
  17. package/dist/validation/index.cjs +1772 -0
  18. package/dist/validation/index.js +2 -5
  19. package/package.json +11 -6
  20. package/dist/__tests__/integration/helpers.d.ts +0 -5
  21. package/dist/__tests__/integration/helpers.d.ts.map +0 -1
  22. package/dist/__tests__/integration/helpers.js +0 -37
  23. package/dist/__tests__/integration/helpers.js.map +0 -1
  24. package/dist/__tests__/setup.d.ts +0 -3
  25. package/dist/__tests__/setup.d.ts.map +0 -1
  26. package/dist/__tests__/setup.js +0 -29
  27. package/dist/__tests__/setup.js.map +0 -1
  28. package/dist/client-exports.d.ts +0 -300
  29. package/dist/client-exports.d.ts.map +0 -1
  30. package/dist/client-exports.js.map +0 -1
  31. package/dist/context/ContextConfig.d.ts +0 -54
  32. package/dist/context/ContextConfig.d.ts.map +0 -1
  33. package/dist/context/ContextConfig.js +0 -302
  34. package/dist/context/ContextConfig.js.map +0 -1
  35. package/dist/context/ContextFetcher.d.ts +0 -64
  36. package/dist/context/ContextFetcher.d.ts.map +0 -1
  37. package/dist/context/ContextFetcher.js +0 -325
  38. package/dist/context/ContextFetcher.js.map +0 -1
  39. package/dist/context/ContextResolver.d.ts +0 -52
  40. package/dist/context/ContextResolver.d.ts.map +0 -1
  41. package/dist/context/ContextResolver.js +0 -298
  42. package/dist/context/ContextResolver.js.map +0 -1
  43. package/dist/context/TemplateEngine.d.ts +0 -46
  44. package/dist/context/TemplateEngine.d.ts.map +0 -1
  45. package/dist/context/TemplateEngine.js +0 -175
  46. package/dist/context/TemplateEngine.js.map +0 -1
  47. package/dist/context/context.d.ts +0 -8
  48. package/dist/context/context.d.ts.map +0 -1
  49. package/dist/context/context.js +0 -157
  50. package/dist/context/context.js.map +0 -1
  51. package/dist/context/contextCache.d.ts +0 -50
  52. package/dist/context/contextCache.d.ts.map +0 -1
  53. package/dist/context/contextCache.js +0 -175
  54. package/dist/context/contextCache.js.map +0 -1
  55. package/dist/context/index.d.ts +0 -11
  56. package/dist/context/index.d.ts.map +0 -1
  57. package/dist/context/index.js +0 -8
  58. package/dist/context/index.js.map +0 -1
  59. package/dist/credential-stores/CredentialStoreRegistry.d.ts +0 -39
  60. package/dist/credential-stores/CredentialStoreRegistry.d.ts.map +0 -1
  61. package/dist/credential-stores/CredentialStoreRegistry.js +0 -65
  62. package/dist/credential-stores/CredentialStoreRegistry.js.map +0 -1
  63. package/dist/credential-stores/defaults.d.ts +0 -6
  64. package/dist/credential-stores/defaults.d.ts.map +0 -1
  65. package/dist/credential-stores/defaults.js +0 -22
  66. package/dist/credential-stores/defaults.js.map +0 -1
  67. package/dist/credential-stores/index.d.ts +0 -6
  68. package/dist/credential-stores/index.d.ts.map +0 -1
  69. package/dist/credential-stores/index.js +0 -6
  70. package/dist/credential-stores/index.js.map +0 -1
  71. package/dist/credential-stores/keychain-store.d.ts +0 -100
  72. package/dist/credential-stores/keychain-store.d.ts.map +0 -1
  73. package/dist/credential-stores/keychain-store.js +0 -225
  74. package/dist/credential-stores/keychain-store.js.map +0 -1
  75. package/dist/credential-stores/memory-store.d.ts +0 -39
  76. package/dist/credential-stores/memory-store.d.ts.map +0 -1
  77. package/dist/credential-stores/memory-store.js +0 -58
  78. package/dist/credential-stores/memory-store.js.map +0 -1
  79. package/dist/credential-stores/nango-store.d.ts +0 -59
  80. package/dist/credential-stores/nango-store.d.ts.map +0 -1
  81. package/dist/credential-stores/nango-store.js +0 -264
  82. package/dist/credential-stores/nango-store.js.map +0 -1
  83. package/dist/credential-stuffer/CredentialStuffer.d.ts +0 -80
  84. package/dist/credential-stuffer/CredentialStuffer.d.ts.map +0 -1
  85. package/dist/credential-stuffer/CredentialStuffer.js +0 -186
  86. package/dist/credential-stuffer/CredentialStuffer.js.map +0 -1
  87. package/dist/credential-stuffer/index.d.ts +0 -2
  88. package/dist/credential-stuffer/index.d.ts.map +0 -1
  89. package/dist/credential-stuffer/index.js +0 -2
  90. package/dist/credential-stuffer/index.js.map +0 -1
  91. package/dist/data-access/agentDataComponents.d.ts +0 -1
  92. package/dist/data-access/agentDataComponents.d.ts.map +0 -1
  93. package/dist/data-access/agentDataComponents.js +0 -2
  94. package/dist/data-access/agentDataComponents.js.map +0 -1
  95. package/dist/data-access/agentGraphs.d.ts +0 -406
  96. package/dist/data-access/agentGraphs.d.ts.map +0 -1
  97. package/dist/data-access/agentGraphs.js +0 -551
  98. package/dist/data-access/agentGraphs.js.map +0 -1
  99. package/dist/data-access/agentRelations.d.ts +0 -456
  100. package/dist/data-access/agentRelations.d.ts.map +0 -1
  101. package/dist/data-access/agentRelations.js +0 -471
  102. package/dist/data-access/agentRelations.js.map +0 -1
  103. package/dist/data-access/agents.d.ts +0 -218
  104. package/dist/data-access/agents.d.ts.map +0 -1
  105. package/dist/data-access/agents.js +0 -130
  106. package/dist/data-access/agents.js.map +0 -1
  107. package/dist/data-access/apiKeys.d.ts +0 -114
  108. package/dist/data-access/apiKeys.d.ts.map +0 -1
  109. package/dist/data-access/apiKeys.js +0 -185
  110. package/dist/data-access/apiKeys.js.map +0 -1
  111. package/dist/data-access/artifactComponents.d.ts +0 -152
  112. package/dist/data-access/artifactComponents.d.ts.map +0 -1
  113. package/dist/data-access/artifactComponents.js +0 -214
  114. package/dist/data-access/artifactComponents.js.map +0 -1
  115. package/dist/data-access/contextCache.d.ts +0 -68
  116. package/dist/data-access/contextCache.d.ts.map +0 -1
  117. package/dist/data-access/contextCache.js +0 -160
  118. package/dist/data-access/contextCache.js.map +0 -1
  119. package/dist/data-access/contextConfigs.d.ts +0 -110
  120. package/dist/data-access/contextConfigs.d.ts.map +0 -1
  121. package/dist/data-access/contextConfigs.js +0 -156
  122. package/dist/data-access/contextConfigs.js.map +0 -1
  123. package/dist/data-access/conversations.d.ts +0 -125
  124. package/dist/data-access/conversations.d.ts.map +0 -1
  125. package/dist/data-access/conversations.js +0 -244
  126. package/dist/data-access/conversations.js.map +0 -1
  127. package/dist/data-access/credentialReferences.d.ts +0 -86
  128. package/dist/data-access/credentialReferences.d.ts.map +0 -1
  129. package/dist/data-access/credentialReferences.js +0 -175
  130. package/dist/data-access/credentialReferences.js.map +0 -1
  131. package/dist/data-access/dataComponents.d.ts +0 -129
  132. package/dist/data-access/dataComponents.d.ts.map +0 -1
  133. package/dist/data-access/dataComponents.js +0 -213
  134. package/dist/data-access/dataComponents.js.map +0 -1
  135. package/dist/data-access/externalAgents.d.ts +0 -83
  136. package/dist/data-access/externalAgents.d.ts.map +0 -1
  137. package/dist/data-access/externalAgents.js +0 -163
  138. package/dist/data-access/externalAgents.js.map +0 -1
  139. package/dist/data-access/graphFull.d.ts +0 -32
  140. package/dist/data-access/graphFull.d.ts.map +0 -1
  141. package/dist/data-access/graphFull.js +0 -996
  142. package/dist/data-access/graphFull.js.map +0 -1
  143. package/dist/data-access/index.d.ts +0 -21
  144. package/dist/data-access/index.d.ts.map +0 -1
  145. package/dist/data-access/index.js +0 -22
  146. package/dist/data-access/index.js.map +0 -1
  147. package/dist/data-access/ledgerArtifacts.d.ts +0 -49
  148. package/dist/data-access/ledgerArtifacts.d.ts.map +0 -1
  149. package/dist/data-access/ledgerArtifacts.js +0 -112
  150. package/dist/data-access/ledgerArtifacts.js.map +0 -1
  151. package/dist/data-access/messages.d.ts +0 -209
  152. package/dist/data-access/messages.d.ts.map +0 -1
  153. package/dist/data-access/messages.js +0 -100
  154. package/dist/data-access/messages.js.map +0 -1
  155. package/dist/data-access/projects.d.ts +0 -67
  156. package/dist/data-access/projects.d.ts.map +0 -1
  157. package/dist/data-access/projects.js +0 -337
  158. package/dist/data-access/projects.js.map +0 -1
  159. package/dist/data-access/tasks.d.ts +0 -37
  160. package/dist/data-access/tasks.d.ts.map +0 -1
  161. package/dist/data-access/tasks.js +0 -40
  162. package/dist/data-access/tasks.js.map +0 -1
  163. package/dist/data-access/tools.d.ts +0 -277
  164. package/dist/data-access/tools.d.ts.map +0 -1
  165. package/dist/data-access/tools.js +0 -183
  166. package/dist/data-access/tools.js.map +0 -1
  167. package/dist/data-access/validation.d.ts +0 -17
  168. package/dist/data-access/validation.d.ts.map +0 -1
  169. package/dist/data-access/validation.js +0 -52
  170. package/dist/data-access/validation.js.map +0 -1
  171. package/dist/db/clean.d.ts +0 -6
  172. package/dist/db/clean.d.ts.map +0 -1
  173. package/dist/db/clean.js +0 -81
  174. package/dist/db/clean.js.map +0 -1
  175. package/dist/db/client.d.ts +0 -19
  176. package/dist/db/client.d.ts.map +0 -1
  177. package/dist/db/client.js +0 -24
  178. package/dist/db/client.js.map +0 -1
  179. package/dist/db/schema.d.ts +0 -4337
  180. package/dist/db/schema.d.ts.map +0 -1
  181. package/dist/db/schema.js.map +0 -1
  182. package/dist/db/test-client.d.ts +0 -25
  183. package/dist/db/test-client.d.ts.map +0 -1
  184. package/dist/db/test-client.js +0 -136
  185. package/dist/db/test-client.js.map +0 -1
  186. package/dist/env.d.ts +0 -19
  187. package/dist/env.d.ts.map +0 -1
  188. package/dist/env.js +0 -49
  189. package/dist/env.js.map +0 -1
  190. package/dist/index.d.ts +0 -12
  191. package/dist/index.d.ts.map +0 -1
  192. package/dist/index.js.map +0 -1
  193. package/dist/middleware/contextValidation.d.ts +0 -49
  194. package/dist/middleware/contextValidation.d.ts.map +0 -1
  195. package/dist/middleware/contextValidation.js +0 -473
  196. package/dist/middleware/contextValidation.js.map +0 -1
  197. package/dist/middleware/index.d.ts +0 -2
  198. package/dist/middleware/index.d.ts.map +0 -1
  199. package/dist/middleware/index.js +0 -2
  200. package/dist/middleware/index.js.map +0 -1
  201. package/dist/server/BaseServer.d.ts +0 -83
  202. package/dist/server/BaseServer.d.ts.map +0 -1
  203. package/dist/server/BaseServer.js +0 -218
  204. package/dist/server/BaseServer.js.map +0 -1
  205. package/dist/types/a2a.d.ts +0 -373
  206. package/dist/types/a2a.d.ts.map +0 -1
  207. package/dist/types/a2a.js +0 -14
  208. package/dist/types/a2a.js.map +0 -1
  209. package/dist/types/entities.d.ts +0 -147
  210. package/dist/types/entities.d.ts.map +0 -1
  211. package/dist/types/entities.js +0 -2
  212. package/dist/types/entities.js.map +0 -1
  213. package/dist/types/index.d.ts +0 -5
  214. package/dist/types/index.d.ts.map +0 -1
  215. package/dist/types/index.js.map +0 -1
  216. package/dist/types/server.d.ts +0 -116
  217. package/dist/types/server.d.ts.map +0 -1
  218. package/dist/types/server.js +0 -2
  219. package/dist/types/server.js.map +0 -1
  220. package/dist/types/utility.d.ts +0 -213
  221. package/dist/types/utility.d.ts.map +0 -1
  222. package/dist/types/utility.js +0 -9
  223. package/dist/types/utility.js.map +0 -1
  224. package/dist/utils/apiKeys.d.ts +0 -32
  225. package/dist/utils/apiKeys.d.ts.map +0 -1
  226. package/dist/utils/apiKeys.js +0 -117
  227. package/dist/utils/apiKeys.js.map +0 -1
  228. package/dist/utils/auth-detection.d.ts +0 -23
  229. package/dist/utils/auth-detection.d.ts.map +0 -1
  230. package/dist/utils/auth-detection.js +0 -148
  231. package/dist/utils/auth-detection.js.map +0 -1
  232. package/dist/utils/credential-store-utils.d.ts +0 -11
  233. package/dist/utils/credential-store-utils.d.ts.map +0 -1
  234. package/dist/utils/credential-store-utils.js +0 -19
  235. package/dist/utils/credential-store-utils.js.map +0 -1
  236. package/dist/utils/error.d.ts +0 -526
  237. package/dist/utils/error.d.ts.map +0 -1
  238. package/dist/utils/error.js +0 -282
  239. package/dist/utils/error.js.map +0 -1
  240. package/dist/utils/execution.d.ts +0 -18
  241. package/dist/utils/execution.d.ts.map +0 -1
  242. package/dist/utils/execution.js +0 -25
  243. package/dist/utils/execution.js.map +0 -1
  244. package/dist/utils/index.d.ts +0 -9
  245. package/dist/utils/index.d.ts.map +0 -1
  246. package/dist/utils/index.js +0 -9
  247. package/dist/utils/index.js.map +0 -1
  248. package/dist/utils/logger.d.ts +0 -79
  249. package/dist/utils/logger.d.ts.map +0 -1
  250. package/dist/utils/logger.js +0 -102
  251. package/dist/utils/logger.js.map +0 -1
  252. package/dist/utils/logging.d.ts +0 -11
  253. package/dist/utils/logging.d.ts.map +0 -1
  254. package/dist/utils/logging.js +0 -6
  255. package/dist/utils/logging.js.map +0 -1
  256. package/dist/utils/mcp-client.d.ts +0 -48
  257. package/dist/utils/mcp-client.d.ts.map +0 -1
  258. package/dist/utils/mcp-client.js +0 -174
  259. package/dist/utils/mcp-client.js.map +0 -1
  260. package/dist/utils/tracer.d.ts +0 -24
  261. package/dist/utils/tracer.d.ts.map +0 -1
  262. package/dist/utils/tracer.js +0 -110
  263. package/dist/utils/tracer.js.map +0 -1
  264. package/dist/validation/graphFull.d.ts +0 -36
  265. package/dist/validation/graphFull.d.ts.map +0 -1
  266. package/dist/validation/graphFull.js +0 -128
  267. package/dist/validation/graphFull.js.map +0 -1
  268. package/dist/validation/id-validation.d.ts +0 -38
  269. package/dist/validation/id-validation.d.ts.map +0 -1
  270. package/dist/validation/id-validation.js +0 -60
  271. package/dist/validation/id-validation.js.map +0 -1
  272. package/dist/validation/index.d.ts +0 -4
  273. package/dist/validation/index.d.ts.map +0 -1
  274. package/dist/validation/index.js.map +0 -1
  275. package/dist/validation/schemas.d.ts +0 -7238
  276. package/dist/validation/schemas.d.ts.map +0 -1
  277. package/dist/validation/schemas.js +0 -575
  278. package/dist/validation/schemas.js.map +0 -1
@@ -0,0 +1,922 @@
1
+ 'use strict';
2
+
3
+ var drizzleOrm = require('drizzle-orm');
4
+ var sqliteCore = require('drizzle-orm/sqlite-core');
5
+
6
+ // src/db/schema.ts
7
+ var projects = sqliteCore.sqliteTable(
8
+ "projects",
9
+ {
10
+ tenantId: sqliteCore.text("tenant_id").notNull(),
11
+ id: sqliteCore.text("id").notNull(),
12
+ // This IS the project ID
13
+ name: sqliteCore.text("name").notNull(),
14
+ description: sqliteCore.text("description").notNull(),
15
+ // Project-level default model settings that can be inherited by graphs and agents
16
+ models: sqliteCore.text("models", { mode: "json" }).$type(),
17
+ // Project-level stopWhen configuration that can be inherited by graphs and agents
18
+ stopWhen: sqliteCore.text("stop_when", { mode: "json" }).$type(),
19
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
20
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
21
+ },
22
+ (table) => [sqliteCore.primaryKey({ columns: [table.tenantId, table.id] })]
23
+ );
24
+ var contextConfigs = sqliteCore.sqliteTable(
25
+ "context_configs",
26
+ {
27
+ tenantId: sqliteCore.text("tenant_id").notNull(),
28
+ projectId: sqliteCore.text("project_id").notNull(),
29
+ id: sqliteCore.text("id").notNull(),
30
+ name: sqliteCore.text("name").notNull(),
31
+ description: sqliteCore.text("description").notNull(),
32
+ // Developer-defined Zod schema for validating incoming request context
33
+ requestContextSchema: sqliteCore.blob("request_context_schema", { mode: "json" }).$type(),
34
+ // Stores serialized Zod schema
35
+ // Object mapping template keys to fetch definitions that use request context data
36
+ contextVariables: sqliteCore.blob("context_variables", { mode: "json" }).$type(),
37
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
38
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
39
+ },
40
+ (table) => [
41
+ sqliteCore.primaryKey({ columns: [table.tenantId, table.projectId, table.id] }),
42
+ sqliteCore.foreignKey({
43
+ columns: [table.tenantId, table.projectId],
44
+ foreignColumns: [projects.tenantId, projects.id],
45
+ name: "context_configs_project_fk"
46
+ }).onDelete("cascade")
47
+ ]
48
+ );
49
+ var contextCache = sqliteCore.sqliteTable(
50
+ "context_cache",
51
+ {
52
+ tenantId: sqliteCore.text("tenant_id").notNull(),
53
+ projectId: sqliteCore.text("project_id").notNull(),
54
+ id: sqliteCore.text("id").notNull(),
55
+ // Always scoped to conversation for complete data isolation
56
+ conversationId: sqliteCore.text("conversation_id").notNull(),
57
+ // Reference to the context config and specific fetch definition
58
+ contextConfigId: sqliteCore.text("context_config_id").notNull(),
59
+ contextVariableKey: sqliteCore.text("context_variable_key").notNull(),
60
+ // Key from contextVariables object
61
+ // The actual cached context data
62
+ value: sqliteCore.blob("value", { mode: "json" }).$type().notNull(),
63
+ // Request hash for cache invalidation based on context changes
64
+ requestHash: sqliteCore.text("request_hash"),
65
+ // Hash of request context that triggered this cache
66
+ // Metadata for monitoring and debugging
67
+ fetchedAt: sqliteCore.text("fetched_at").notNull(),
68
+ fetchSource: sqliteCore.text("fetch_source"),
69
+ // URL or source identifier
70
+ fetchDurationMs: sqliteCore.integer("fetch_duration_ms"),
71
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
72
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
73
+ },
74
+ (table) => [
75
+ sqliteCore.primaryKey({ columns: [table.tenantId, table.projectId, table.id] }),
76
+ sqliteCore.foreignKey({
77
+ columns: [table.tenantId, table.projectId],
78
+ foreignColumns: [projects.tenantId, projects.id],
79
+ name: "context_cache_project_fk"
80
+ }).onDelete("cascade"),
81
+ sqliteCore.index("context_cache_lookup_idx").on(
82
+ table.conversationId,
83
+ table.contextConfigId,
84
+ table.contextVariableKey
85
+ )
86
+ ]
87
+ );
88
+ var agents = sqliteCore.sqliteTable(
89
+ "agents",
90
+ {
91
+ tenantId: sqliteCore.text("tenant_id").notNull(),
92
+ projectId: sqliteCore.text("project_id").notNull(),
93
+ id: sqliteCore.text("id").notNull(),
94
+ name: sqliteCore.text("name").notNull(),
95
+ description: sqliteCore.text("description").notNull(),
96
+ prompt: sqliteCore.text("prompt").notNull(),
97
+ conversationHistoryConfig: sqliteCore.text("conversation_history_config", {
98
+ mode: "json"
99
+ }).$type(),
100
+ models: sqliteCore.text("models", { mode: "json" }).$type(),
101
+ // Agent-level stopWhen configuration (inherited from project)
102
+ stopWhen: sqliteCore.text("stop_when", { mode: "json" }).$type(),
103
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
104
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
105
+ },
106
+ (table) => [
107
+ sqliteCore.primaryKey({ columns: [table.tenantId, table.projectId, table.id] }),
108
+ sqliteCore.foreignKey({
109
+ columns: [table.tenantId, table.projectId],
110
+ foreignColumns: [projects.tenantId, projects.id],
111
+ name: "agents_project_fk"
112
+ }).onDelete("cascade")
113
+ ]
114
+ );
115
+ var agentRelations = sqliteCore.sqliteTable(
116
+ "agent_relations",
117
+ {
118
+ tenantId: sqliteCore.text("tenant_id").notNull(),
119
+ projectId: sqliteCore.text("project_id").notNull(),
120
+ id: sqliteCore.text("id").notNull(),
121
+ graphId: sqliteCore.text("graph_id").notNull(),
122
+ sourceAgentId: sqliteCore.text("source_agent_id").notNull(),
123
+ // For internal relationships
124
+ targetAgentId: sqliteCore.text("target_agent_id"),
125
+ // For external relationships
126
+ externalAgentId: sqliteCore.text("external_agent_id"),
127
+ relationType: sqliteCore.text("relation_type"),
128
+ // 'transfer' | 'delegate'
129
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
130
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
131
+ },
132
+ (table) => [
133
+ sqliteCore.primaryKey({ columns: [table.tenantId, table.projectId, table.id] }),
134
+ sqliteCore.foreignKey({
135
+ columns: [table.tenantId, table.projectId],
136
+ foreignColumns: [projects.tenantId, projects.id],
137
+ name: "agent_relations_project_fk"
138
+ }).onDelete("cascade")
139
+ ]
140
+ );
141
+ var externalAgents = sqliteCore.sqliteTable(
142
+ "external_agents",
143
+ {
144
+ tenantId: sqliteCore.text("tenant_id").notNull(),
145
+ projectId: sqliteCore.text("project_id").notNull(),
146
+ id: sqliteCore.text("id").notNull(),
147
+ name: sqliteCore.text("name").notNull(),
148
+ description: sqliteCore.text("description").notNull(),
149
+ baseUrl: sqliteCore.text("base_url").notNull(),
150
+ // A2A endpoint URL
151
+ credentialReferenceId: sqliteCore.text("credential_reference_id"),
152
+ headers: sqliteCore.blob("headers", { mode: "json" }).$type(),
153
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
154
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
155
+ },
156
+ (table) => [
157
+ sqliteCore.primaryKey({ columns: [table.tenantId, table.projectId, table.id] }),
158
+ sqliteCore.foreignKey({
159
+ columns: [table.tenantId, table.projectId],
160
+ foreignColumns: [projects.tenantId, projects.id],
161
+ name: "external_agents_project_fk"
162
+ }).onDelete("cascade"),
163
+ sqliteCore.foreignKey({
164
+ columns: [table.tenantId, table.projectId, table.credentialReferenceId],
165
+ foreignColumns: [
166
+ credentialReferences.tenantId,
167
+ credentialReferences.projectId,
168
+ credentialReferences.id
169
+ ],
170
+ name: "external_agents_credential_reference_fk"
171
+ }).onDelete("set null")
172
+ ]
173
+ );
174
+ var agentGraph = sqliteCore.sqliteTable(
175
+ "agent_graph",
176
+ {
177
+ tenantId: sqliteCore.text("tenant_id").notNull(),
178
+ projectId: sqliteCore.text("project_id").notNull(),
179
+ id: sqliteCore.text("id").notNull(),
180
+ name: sqliteCore.text("name").notNull(),
181
+ description: sqliteCore.text("description"),
182
+ defaultAgentId: sqliteCore.text("default_agent_id").notNull(),
183
+ // Reference to shared context configuration for all agents in this graph
184
+ contextConfigId: sqliteCore.text("context_config_id"),
185
+ // Graph-level model settingsuration that can be inherited by agents
186
+ models: sqliteCore.text("models", { mode: "json" }).$type(),
187
+ // Status updates configuration for intelligent progress summaries
188
+ statusUpdates: sqliteCore.text("status_updates", { mode: "json" }).$type(),
189
+ // Graph-level prompt that can be used as additional context for agents
190
+ graphPrompt: sqliteCore.text("graph_prompt"),
191
+ // Graph-level stopWhen configuration that can be inherited by agents
192
+ stopWhen: sqliteCore.text("stop_when", { mode: "json" }).$type(),
193
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
194
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
195
+ },
196
+ (table) => [
197
+ sqliteCore.primaryKey({ columns: [table.tenantId, table.projectId, table.id] }),
198
+ sqliteCore.foreignKey({
199
+ columns: [table.tenantId, table.projectId],
200
+ foreignColumns: [projects.tenantId, projects.id],
201
+ name: "agent_graph_project_fk"
202
+ }).onDelete("cascade")
203
+ ]
204
+ );
205
+ var tasks = sqliteCore.sqliteTable(
206
+ "tasks",
207
+ {
208
+ tenantId: sqliteCore.text("tenant_id").notNull(),
209
+ projectId: sqliteCore.text("project_id").notNull(),
210
+ id: sqliteCore.text("id").notNull(),
211
+ contextId: sqliteCore.text("context_id").notNull(),
212
+ status: sqliteCore.text("status").notNull(),
213
+ metadata: sqliteCore.blob("metadata", { mode: "json" }).$type(),
214
+ agentId: sqliteCore.text("agent_id").notNull(),
215
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
216
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
217
+ },
218
+ (table) => [
219
+ sqliteCore.primaryKey({ columns: [table.tenantId, table.projectId, table.id] }),
220
+ sqliteCore.foreignKey({
221
+ columns: [table.tenantId, table.projectId],
222
+ foreignColumns: [projects.tenantId, projects.id],
223
+ name: "tasks_project_fk"
224
+ }).onDelete("cascade")
225
+ ]
226
+ );
227
+ var taskRelations = sqliteCore.sqliteTable(
228
+ "task_relations",
229
+ {
230
+ tenantId: sqliteCore.text("tenant_id").notNull(),
231
+ projectId: sqliteCore.text("project_id").notNull(),
232
+ id: sqliteCore.text("id").notNull(),
233
+ parentTaskId: sqliteCore.text("parent_task_id").notNull(),
234
+ childTaskId: sqliteCore.text("child_task_id").notNull(),
235
+ relationType: sqliteCore.text("relation_type").default("parent_child"),
236
+ // Could be extended for other relation types
237
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
238
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
239
+ },
240
+ (table) => [
241
+ sqliteCore.primaryKey({ columns: [table.tenantId, table.projectId, table.id] }),
242
+ sqliteCore.foreignKey({
243
+ columns: [table.tenantId, table.projectId],
244
+ foreignColumns: [projects.tenantId, projects.id],
245
+ name: "task_relations_project_fk"
246
+ }).onDelete("cascade")
247
+ ]
248
+ );
249
+ var dataComponents = sqliteCore.sqliteTable(
250
+ "data_components",
251
+ {
252
+ tenantId: sqliteCore.text("tenant_id").notNull(),
253
+ projectId: sqliteCore.text("project_id").notNull(),
254
+ id: sqliteCore.text("id").notNull(),
255
+ name: sqliteCore.text("name").notNull(),
256
+ description: sqliteCore.text("description").notNull(),
257
+ props: sqliteCore.blob("props", { mode: "json" }).$type(),
258
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
259
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
260
+ },
261
+ (table) => [
262
+ sqliteCore.primaryKey({ columns: [table.tenantId, table.projectId, table.id] }),
263
+ sqliteCore.foreignKey({
264
+ columns: [table.tenantId, table.projectId],
265
+ foreignColumns: [projects.tenantId, projects.id],
266
+ name: "data_components_project_fk"
267
+ }).onDelete("cascade")
268
+ ]
269
+ );
270
+ var agentDataComponents = sqliteCore.sqliteTable(
271
+ "agent_data_components",
272
+ {
273
+ tenantId: sqliteCore.text("tenant_id").notNull(),
274
+ projectId: sqliteCore.text("project_id").notNull(),
275
+ id: sqliteCore.text("id").notNull(),
276
+ agentId: sqliteCore.text("agent_id").notNull(),
277
+ dataComponentId: sqliteCore.text("data_component_id").notNull(),
278
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
279
+ },
280
+ (table) => [
281
+ sqliteCore.primaryKey({ columns: [table.tenantId, table.projectId, table.id] }),
282
+ // Foreign key constraint to projects table
283
+ sqliteCore.foreignKey({
284
+ columns: [table.tenantId, table.projectId],
285
+ foreignColumns: [projects.tenantId, projects.id],
286
+ name: "agent_data_components_project_fk"
287
+ }).onDelete("cascade"),
288
+ // Foreign key constraint to agents table
289
+ sqliteCore.foreignKey({
290
+ columns: [table.tenantId, table.projectId, table.agentId],
291
+ foreignColumns: [agents.tenantId, agents.projectId, agents.id],
292
+ name: "agent_data_components_agent_fk"
293
+ }).onDelete("cascade"),
294
+ // Foreign key constraint to data_components table
295
+ sqliteCore.foreignKey({
296
+ columns: [table.tenantId, table.projectId, table.dataComponentId],
297
+ foreignColumns: [dataComponents.tenantId, dataComponents.projectId, dataComponents.id],
298
+ name: "agent_data_components_data_component_fk"
299
+ }).onDelete("cascade")
300
+ ]
301
+ );
302
+ var artifactComponents = sqliteCore.sqliteTable(
303
+ "artifact_components",
304
+ {
305
+ tenantId: sqliteCore.text("tenant_id").notNull(),
306
+ projectId: sqliteCore.text("project_id").notNull(),
307
+ id: sqliteCore.text("id").notNull(),
308
+ name: sqliteCore.text("name").notNull(),
309
+ description: sqliteCore.text("description").notNull(),
310
+ summaryProps: sqliteCore.blob("summary_props", { mode: "json" }).$type(),
311
+ fullProps: sqliteCore.blob("full_props", { mode: "json" }).$type(),
312
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
313
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
314
+ },
315
+ (table) => [
316
+ sqliteCore.primaryKey({ columns: [table.tenantId, table.projectId, table.id] }),
317
+ sqliteCore.foreignKey({
318
+ columns: [table.tenantId, table.projectId],
319
+ foreignColumns: [projects.tenantId, projects.id],
320
+ name: "artifact_components_project_fk"
321
+ }).onDelete("cascade")
322
+ ]
323
+ );
324
+ var agentArtifactComponents = sqliteCore.sqliteTable(
325
+ "agent_artifact_components",
326
+ {
327
+ tenantId: sqliteCore.text("tenant_id").notNull(),
328
+ projectId: sqliteCore.text("project_id").notNull(),
329
+ id: sqliteCore.text("id").notNull(),
330
+ agentId: sqliteCore.text("agent_id").notNull(),
331
+ artifactComponentId: sqliteCore.text("artifact_component_id").notNull(),
332
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
333
+ },
334
+ (table) => [
335
+ sqliteCore.primaryKey({ columns: [table.tenantId, table.projectId, table.id] }),
336
+ // Foreign key constraint to projects table
337
+ sqliteCore.foreignKey({
338
+ columns: [table.tenantId, table.projectId],
339
+ foreignColumns: [projects.tenantId, projects.id],
340
+ name: "agent_artifact_components_project_fk"
341
+ }).onDelete("cascade"),
342
+ // Foreign key constraint to agents table
343
+ sqliteCore.foreignKey({
344
+ columns: [table.tenantId, table.projectId, table.agentId],
345
+ foreignColumns: [agents.tenantId, agents.projectId, agents.id],
346
+ name: "agent_artifact_components_agent_fk"
347
+ }).onDelete("cascade"),
348
+ // Foreign key constraint to artifact_components table
349
+ sqliteCore.foreignKey({
350
+ columns: [table.tenantId, table.projectId, table.artifactComponentId],
351
+ foreignColumns: [
352
+ artifactComponents.tenantId,
353
+ artifactComponents.projectId,
354
+ artifactComponents.id
355
+ ],
356
+ name: "agent_artifact_components_artifact_component_fk"
357
+ }).onDelete("cascade")
358
+ ]
359
+ );
360
+ var tools = sqliteCore.sqliteTable(
361
+ "tools",
362
+ {
363
+ tenantId: sqliteCore.text("tenant_id").notNull(),
364
+ projectId: sqliteCore.text("project_id").notNull(),
365
+ id: sqliteCore.text("id").notNull(),
366
+ name: sqliteCore.text("name").notNull(),
367
+ // Enhanced MCP configuration
368
+ config: sqliteCore.blob("config", { mode: "json" }).$type().notNull(),
369
+ credentialReferenceId: sqliteCore.text("credential_reference_id"),
370
+ headers: sqliteCore.blob("headers", { mode: "json" }).$type(),
371
+ // Image URL for custom tool icon (supports regular URLs and base64 encoded images)
372
+ imageUrl: sqliteCore.text("image_url"),
373
+ // Server capabilities and status
374
+ capabilities: sqliteCore.blob("capabilities", { mode: "json" }).$type(),
375
+ // Connection health and monitoring
376
+ status: sqliteCore.text("status").notNull().default("unknown"),
377
+ lastHealthCheck: sqliteCore.text("last_health_check"),
378
+ lastError: sqliteCore.text("last_error"),
379
+ // Tool discovery cache
380
+ availableTools: sqliteCore.blob("available_tools", { mode: "json" }).$type(),
381
+ lastToolsSync: sqliteCore.text("last_tools_sync"),
382
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
383
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
384
+ },
385
+ (table) => [
386
+ sqliteCore.primaryKey({ columns: [table.tenantId, table.projectId, table.id] }),
387
+ sqliteCore.foreignKey({
388
+ columns: [table.tenantId, table.projectId],
389
+ foreignColumns: [projects.tenantId, projects.id],
390
+ name: "tools_project_fk"
391
+ }).onDelete("cascade")
392
+ ]
393
+ );
394
+ var agentToolRelations = sqliteCore.sqliteTable(
395
+ "agent_tool_relations",
396
+ {
397
+ tenantId: sqliteCore.text("tenant_id").notNull(),
398
+ projectId: sqliteCore.text("project_id").notNull(),
399
+ id: sqliteCore.text("id").notNull(),
400
+ agentId: sqliteCore.text("agent_id").notNull(),
401
+ toolId: sqliteCore.text("tool_id").notNull(),
402
+ selectedTools: sqliteCore.blob("selected_tools", { mode: "json" }).$type(),
403
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
404
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
405
+ },
406
+ (table) => [
407
+ sqliteCore.primaryKey({ columns: [table.tenantId, table.projectId, table.id] }),
408
+ // Foreign key constraint to projects table
409
+ sqliteCore.foreignKey({
410
+ columns: [table.tenantId, table.projectId],
411
+ foreignColumns: [projects.tenantId, projects.id],
412
+ name: "agent_tool_relations_project_fk"
413
+ }).onDelete("cascade"),
414
+ // Foreign key constraint to agents table
415
+ sqliteCore.foreignKey({
416
+ columns: [table.tenantId, table.projectId, table.agentId],
417
+ foreignColumns: [agents.tenantId, agents.projectId, agents.id],
418
+ name: "agent_tool_relations_agent_fk"
419
+ }).onDelete("cascade"),
420
+ // Foreign key constraint to tools table
421
+ sqliteCore.foreignKey({
422
+ columns: [table.tenantId, table.projectId, table.toolId],
423
+ foreignColumns: [tools.tenantId, tools.projectId, tools.id],
424
+ name: "agent_tool_relations_tool_fk"
425
+ }).onDelete("cascade")
426
+ ]
427
+ );
428
+ var conversations = sqliteCore.sqliteTable(
429
+ "conversations",
430
+ {
431
+ tenantId: sqliteCore.text("tenant_id").notNull(),
432
+ projectId: sqliteCore.text("project_id").notNull(),
433
+ id: sqliteCore.text("id").notNull(),
434
+ userId: sqliteCore.text("user_id"),
435
+ activeAgentId: sqliteCore.text("active_agent_id").notNull(),
436
+ title: sqliteCore.text("title"),
437
+ lastContextResolution: sqliteCore.text("last_context_resolution"),
438
+ metadata: sqliteCore.blob("metadata", { mode: "json" }).$type(),
439
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
440
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
441
+ },
442
+ (table) => [
443
+ sqliteCore.primaryKey({ columns: [table.tenantId, table.projectId, table.id] }),
444
+ sqliteCore.foreignKey({
445
+ columns: [table.tenantId, table.projectId],
446
+ foreignColumns: [projects.tenantId, projects.id],
447
+ name: "conversations_project_fk"
448
+ }).onDelete("cascade")
449
+ ]
450
+ );
451
+ var messages = sqliteCore.sqliteTable(
452
+ "messages",
453
+ {
454
+ tenantId: sqliteCore.text("tenant_id").notNull(),
455
+ projectId: sqliteCore.text("project_id").notNull(),
456
+ id: sqliteCore.text("id").notNull(),
457
+ conversationId: sqliteCore.text("conversation_id").notNull(),
458
+ // Role mapping: user, agent, system (unified for both formats)
459
+ role: sqliteCore.text("role").notNull(),
460
+ // 'user' | 'agent' | 'system'
461
+ // Agent sender/recipient tracking (nullable - only populated when relevant)
462
+ fromAgentId: sqliteCore.text("from_agent_id"),
463
+ // Populated when message is from an agent
464
+ toAgentId: sqliteCore.text("to_agent_id"),
465
+ // Populated when message is directed to a specific agent (e.g., transfers/delegations)
466
+ // External agent sender tracking
467
+ fromExternalAgentId: sqliteCore.text("from_external_agent_id"),
468
+ // Populated when message is directed from an external agent
469
+ // External agent recipient tracking
470
+ toExternalAgentId: sqliteCore.text("to_external_agent_id"),
471
+ // Populated when message is directed to an external agent
472
+ // Message content stored as JSON to support both formats
473
+ content: sqliteCore.blob("content", { mode: "json" }).$type().notNull(),
474
+ // Message classification and filtering
475
+ visibility: sqliteCore.text("visibility").notNull().default("user-facing"),
476
+ // 'user-facing' | 'internal' | 'system' | 'external'
477
+ messageType: sqliteCore.text("message_type").notNull().default("chat"),
478
+ // 'chat' | 'a2a-request' | 'a2a-response' | 'task-update' | 'tool-call'
479
+ // Legacy agent association (consider deprecating in favor of fromAgentId/toAgentId)
480
+ agentId: sqliteCore.text("agent_id"),
481
+ taskId: sqliteCore.text("task_id"),
482
+ parentMessageId: sqliteCore.text("parent_message_id"),
483
+ // Remove self-reference constraint here
484
+ // A2A specific fields
485
+ a2aTaskId: sqliteCore.text("a2a_task_id"),
486
+ // Links to A2A task when relevant
487
+ a2aSessionId: sqliteCore.text("a2a_session_id"),
488
+ // A2A session identifier
489
+ // Metadata for extensions
490
+ metadata: sqliteCore.blob("metadata", { mode: "json" }).$type(),
491
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
492
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
493
+ },
494
+ (table) => [
495
+ sqliteCore.primaryKey({ columns: [table.tenantId, table.projectId, table.id] }),
496
+ sqliteCore.foreignKey({
497
+ columns: [table.tenantId, table.projectId],
498
+ foreignColumns: [projects.tenantId, projects.id],
499
+ name: "messages_project_fk"
500
+ }).onDelete("cascade")
501
+ ]
502
+ );
503
+ var ledgerArtifacts = sqliteCore.sqliteTable(
504
+ "ledger_artifacts",
505
+ {
506
+ // Primary identifier (maps to `artifactId`)
507
+ tenantId: sqliteCore.text("tenant_id").notNull(),
508
+ projectId: sqliteCore.text("project_id").notNull(),
509
+ id: sqliteCore.text("id").notNull(),
510
+ // Links
511
+ taskId: sqliteCore.text("task_id"),
512
+ contextId: sqliteCore.text("context_id").notNull(),
513
+ // Core Artifact fields
514
+ type: sqliteCore.text("type").notNull().default("source"),
515
+ name: sqliteCore.text("name"),
516
+ description: sqliteCore.text("description"),
517
+ parts: sqliteCore.blob("parts", { mode: "json" }).$type(),
518
+ metadata: sqliteCore.blob("metadata", { mode: "json" }).$type(),
519
+ // Extra ledger information (not part of the Artifact spec – kept optional)
520
+ summary: sqliteCore.text("summary"),
521
+ mime: sqliteCore.blob("mime", { mode: "json" }).$type(),
522
+ visibility: sqliteCore.text("visibility").default("context"),
523
+ allowedAgents: sqliteCore.blob("allowed_agents", { mode: "json" }).$type(),
524
+ derivedFrom: sqliteCore.text("derived_from"),
525
+ // Timestamps
526
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
527
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
528
+ },
529
+ (table) => [
530
+ sqliteCore.primaryKey({ columns: [table.tenantId, table.projectId, table.id] }),
531
+ sqliteCore.foreignKey({
532
+ columns: [table.tenantId, table.projectId],
533
+ foreignColumns: [projects.tenantId, projects.id],
534
+ name: "ledger_artifacts_project_fk"
535
+ }).onDelete("cascade")
536
+ ]
537
+ );
538
+ var apiKeys = sqliteCore.sqliteTable(
539
+ "api_keys",
540
+ {
541
+ id: sqliteCore.text("id").primaryKey(),
542
+ tenantId: sqliteCore.text("tenant_id").notNull(),
543
+ projectId: sqliteCore.text("project_id").notNull(),
544
+ graphId: sqliteCore.text("graph_id").notNull(),
545
+ publicId: sqliteCore.text("public_id").notNull().unique(),
546
+ // Public ID for O(1) lookup (e.g., "abc123def456")
547
+ keyHash: sqliteCore.text("key_hash").notNull(),
548
+ // Hashed API key (never store plaintext)
549
+ keyPrefix: sqliteCore.text("key_prefix").notNull(),
550
+ // First 8 chars for identification (e.g., "sk_live_abc...")
551
+ lastUsedAt: sqliteCore.text("last_used_at"),
552
+ expiresAt: sqliteCore.text("expires_at"),
553
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
554
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
555
+ },
556
+ (t) => [
557
+ sqliteCore.foreignKey({
558
+ columns: [t.tenantId, t.projectId],
559
+ foreignColumns: [projects.tenantId, projects.id],
560
+ name: "api_keys_project_fk"
561
+ }).onDelete("cascade"),
562
+ sqliteCore.foreignKey({
563
+ columns: [t.tenantId, t.projectId, t.graphId],
564
+ foreignColumns: [agentGraph.tenantId, agentGraph.projectId, agentGraph.id],
565
+ name: "api_keys_graph_fk"
566
+ }).onDelete("cascade"),
567
+ sqliteCore.index("api_keys_tenant_graph_idx").on(t.tenantId, t.graphId),
568
+ sqliteCore.index("api_keys_prefix_idx").on(t.keyPrefix),
569
+ sqliteCore.index("api_keys_public_id_idx").on(t.publicId)
570
+ ]
571
+ );
572
+ var credentialReferences = sqliteCore.sqliteTable(
573
+ "credential_references",
574
+ {
575
+ tenantId: sqliteCore.text("tenant_id").notNull(),
576
+ projectId: sqliteCore.text("project_id").notNull(),
577
+ id: sqliteCore.text("id").notNull(),
578
+ type: sqliteCore.text("type").notNull(),
579
+ // Implementation type: 'keychain', 'nango', 'memory', etc.
580
+ credentialStoreId: sqliteCore.text("credential_store_id").notNull(),
581
+ // Maps to framework.getCredentialStore(id)
582
+ retrievalParams: sqliteCore.blob("retrieval_params", { mode: "json" }).$type(),
583
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
584
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
585
+ },
586
+ (t) => [
587
+ sqliteCore.primaryKey({ columns: [t.tenantId, t.projectId, t.id] }),
588
+ sqliteCore.foreignKey({
589
+ columns: [t.tenantId, t.projectId],
590
+ foreignColumns: [projects.tenantId, projects.id],
591
+ name: "credential_references_project_fk"
592
+ }).onDelete("cascade")
593
+ ]
594
+ );
595
+ var ledgerArtifactsTaskIdIdx = sqliteCore.index("ledger_artifacts_task_id_idx").on(
596
+ ledgerArtifacts.taskId
597
+ );
598
+ var ledgerArtifactsContextIdIdx = sqliteCore.index("ledger_artifacts_context_id_idx").on(
599
+ ledgerArtifacts.contextId
600
+ );
601
+ var ledgerArtifactsTaskContextNameUnique = sqliteCore.unique(
602
+ "ledger_artifacts_task_context_name_unique"
603
+ ).on(ledgerArtifacts.taskId, ledgerArtifacts.contextId, ledgerArtifacts.name);
604
+ var tasksRelations = drizzleOrm.relations(tasks, ({ one, many }) => ({
605
+ // A task belongs to one project
606
+ project: one(projects, {
607
+ fields: [tasks.tenantId, tasks.projectId],
608
+ references: [projects.tenantId, projects.id]
609
+ }),
610
+ // A task can have many parent relationships (where it's the child)
611
+ parentRelations: many(taskRelations, {
612
+ relationName: "childTask"
613
+ }),
614
+ // A task can have many child relationships (where it's the parent)
615
+ childRelations: many(taskRelations, {
616
+ relationName: "parentTask"
617
+ }),
618
+ // A task belongs to one agent
619
+ agent: one(agents, {
620
+ fields: [tasks.agentId],
621
+ references: [agents.id]
622
+ }),
623
+ // A task can have many messages associated with it
624
+ messages: many(messages)
625
+ }));
626
+ var projectsRelations = drizzleOrm.relations(projects, ({ many }) => ({
627
+ // A project can have many agents
628
+ agents: many(agents),
629
+ // A project can have many agent graphs
630
+ agentGraphs: many(agentGraph),
631
+ // A project can have many tools
632
+ tools: many(tools),
633
+ // A project can have many context configs
634
+ contextConfigs: many(contextConfigs),
635
+ // A project can have many external agents
636
+ externalAgents: many(externalAgents),
637
+ // A project can have many conversations
638
+ conversations: many(conversations),
639
+ // A project can have many tasks
640
+ tasks: many(tasks)
641
+ }));
642
+ var taskRelationsRelations = drizzleOrm.relations(taskRelations, ({ one }) => ({
643
+ // Each relation has one parent task
644
+ parentTask: one(tasks, {
645
+ fields: [taskRelations.parentTaskId],
646
+ references: [tasks.id],
647
+ relationName: "parentTask"
648
+ }),
649
+ // Each relation has one child task
650
+ childTask: one(tasks, {
651
+ fields: [taskRelations.childTaskId],
652
+ references: [tasks.id],
653
+ relationName: "childTask"
654
+ })
655
+ }));
656
+ var contextConfigsRelations = drizzleOrm.relations(contextConfigs, ({ many, one }) => ({
657
+ // A context config belongs to one project
658
+ project: one(projects, {
659
+ fields: [contextConfigs.tenantId, contextConfigs.projectId],
660
+ references: [projects.tenantId, projects.id]
661
+ }),
662
+ // A context config can be used by many agent graphs
663
+ graphs: many(agentGraph),
664
+ // A context config can have many cached entries
665
+ cache: many(contextCache)
666
+ }));
667
+ var contextCacheRelations = drizzleOrm.relations(contextCache, ({ one }) => ({
668
+ // Each cache entry belongs to one context config
669
+ contextConfig: one(contextConfigs, {
670
+ fields: [contextCache.contextConfigId],
671
+ references: [contextConfigs.id]
672
+ })
673
+ }));
674
+ var agentsRelations = drizzleOrm.relations(agents, ({ many, one }) => ({
675
+ // A context config belongs to one project
676
+ project: one(projects, {
677
+ fields: [agents.tenantId, agents.projectId],
678
+ references: [projects.tenantId, projects.id]
679
+ }),
680
+ // An agent can have many tasks
681
+ tasks: many(tasks),
682
+ // An agent can be the default agent for many graphs
683
+ defaultForGraphs: many(agentGraph),
684
+ // Agent relation tracking
685
+ sourceRelations: many(agentRelations, {
686
+ relationName: "sourceRelations"
687
+ }),
688
+ targetRelations: many(agentRelations, {
689
+ relationName: "targetRelations"
690
+ }),
691
+ // Message tracking relations
692
+ sentMessages: many(messages, {
693
+ relationName: "sentMessages"
694
+ }),
695
+ receivedMessages: many(messages, {
696
+ relationName: "receivedMessages"
697
+ }),
698
+ // Legacy message association (consider deprecating)
699
+ associatedMessages: many(messages, {
700
+ relationName: "associatedAgent"
701
+ }),
702
+ toolRelations: many(agentToolRelations)
703
+ }));
704
+ var agentGraphRelations = drizzleOrm.relations(agentGraph, ({ one }) => ({
705
+ // An agent graph belongs to one project
706
+ project: one(projects, {
707
+ fields: [agentGraph.tenantId, agentGraph.projectId],
708
+ references: [projects.tenantId, projects.id]
709
+ }),
710
+ // An agent graph belongs to one default agent
711
+ defaultAgent: one(agents, {
712
+ fields: [agentGraph.defaultAgentId],
713
+ references: [agents.id]
714
+ }),
715
+ // An agent graph can reference one context config
716
+ contextConfig: one(contextConfigs, {
717
+ fields: [agentGraph.contextConfigId],
718
+ references: [contextConfigs.id]
719
+ })
720
+ }));
721
+ var externalAgentsRelations = drizzleOrm.relations(externalAgents, ({ one, many }) => ({
722
+ // An external agent belongs to one project
723
+ project: one(projects, {
724
+ fields: [externalAgents.tenantId, externalAgents.projectId],
725
+ references: [projects.tenantId, projects.id]
726
+ }),
727
+ // An external agent can be referenced by many agent relations
728
+ agentRelations: many(agentRelations),
729
+ // An external agent may have one credential reference
730
+ credentialReference: one(credentialReferences, {
731
+ fields: [externalAgents.credentialReferenceId],
732
+ references: [credentialReferences.id]
733
+ })
734
+ }));
735
+ var apiKeysRelations = drizzleOrm.relations(apiKeys, ({ one }) => ({
736
+ // An API key belongs to one project
737
+ project: one(projects, {
738
+ fields: [apiKeys.tenantId, apiKeys.projectId],
739
+ references: [projects.tenantId, projects.id]
740
+ }),
741
+ // An API key belongs to one tenant and graph
742
+ graph: one(agentGraph, {
743
+ fields: [apiKeys.graphId],
744
+ references: [agentGraph.id]
745
+ })
746
+ }));
747
+ var agentToolRelationsRelations = drizzleOrm.relations(agentToolRelations, ({ one }) => ({
748
+ // An agent-tool relation belongs to one agent
749
+ agent: one(agents, {
750
+ fields: [agentToolRelations.agentId],
751
+ references: [agents.id]
752
+ }),
753
+ // An agent-tool relation belongs to one tool
754
+ tool: one(tools, {
755
+ fields: [agentToolRelations.toolId],
756
+ references: [tools.id]
757
+ })
758
+ }));
759
+ var credentialReferencesRelations = drizzleOrm.relations(credentialReferences, ({ many }) => ({
760
+ tools: many(tools)
761
+ }));
762
+ var toolsRelations = drizzleOrm.relations(tools, ({ one, many }) => ({
763
+ // A tool belongs to one project
764
+ project: one(projects, {
765
+ fields: [tools.tenantId, tools.projectId],
766
+ references: [projects.tenantId, projects.id]
767
+ }),
768
+ // A tool can be used by many agents through agent-tool relations
769
+ agentRelations: many(agentToolRelations),
770
+ // A tool may have one credential reference
771
+ credentialReference: one(credentialReferences, {
772
+ fields: [tools.credentialReferenceId],
773
+ references: [credentialReferences.id]
774
+ })
775
+ }));
776
+ var conversationsRelations = drizzleOrm.relations(conversations, ({ one, many }) => ({
777
+ // A conversation belongs to one project
778
+ project: one(projects, {
779
+ fields: [conversations.tenantId, conversations.projectId],
780
+ references: [projects.tenantId, projects.id]
781
+ }),
782
+ // A conversation has many messages
783
+ messages: many(messages),
784
+ // A conversation has one active agent
785
+ activeAgent: one(agents, {
786
+ fields: [conversations.activeAgentId],
787
+ references: [agents.id]
788
+ })
789
+ }));
790
+ var messagesRelations = drizzleOrm.relations(messages, ({ one, many }) => ({
791
+ // A message belongs to one conversation
792
+ conversation: one(conversations, {
793
+ fields: [messages.conversationId],
794
+ references: [conversations.id]
795
+ }),
796
+ // Legacy agent association (consider deprecating)
797
+ agent: one(agents, {
798
+ fields: [messages.agentId],
799
+ references: [agents.id],
800
+ relationName: "associatedAgent"
801
+ }),
802
+ // Sender tracking relations
803
+ fromAgent: one(agents, {
804
+ fields: [messages.fromAgentId],
805
+ references: [agents.id],
806
+ relationName: "sentMessages"
807
+ }),
808
+ // Recipient tracking relations
809
+ toAgent: one(agents, {
810
+ fields: [messages.toAgentId],
811
+ references: [agents.id],
812
+ relationName: "receivedMessages"
813
+ }),
814
+ // External agent sender tracking relations
815
+ fromExternalAgent: one(externalAgents, {
816
+ fields: [messages.fromExternalAgentId],
817
+ references: [externalAgents.id],
818
+ relationName: "receivedExternalMessages"
819
+ }),
820
+ // External agent recipient tracking relations
821
+ toExternalAgent: one(externalAgents, {
822
+ fields: [messages.toExternalAgentId],
823
+ references: [externalAgents.id],
824
+ relationName: "sentExternalMessages"
825
+ }),
826
+ // A message may be associated with a task
827
+ task: one(tasks, {
828
+ fields: [messages.taskId],
829
+ references: [tasks.id]
830
+ }),
831
+ // A message may have a parent message (for threading)
832
+ parentMessage: one(messages, {
833
+ fields: [messages.parentMessageId],
834
+ references: [messages.id],
835
+ relationName: "parentChild"
836
+ }),
837
+ // A message may have child messages
838
+ childMessages: many(messages, {
839
+ relationName: "parentChild"
840
+ })
841
+ }));
842
+ var artifactComponentsRelations = drizzleOrm.relations(artifactComponents, ({ many }) => ({
843
+ // An artifact component can be associated with many agents
844
+ agentRelations: many(agentArtifactComponents)
845
+ }));
846
+ var agentArtifactComponentsRelations = drizzleOrm.relations(agentArtifactComponents, ({ one }) => ({
847
+ // An agent-artifact component relation belongs to one agent
848
+ agent: one(agents, {
849
+ fields: [agentArtifactComponents.agentId],
850
+ references: [agents.id]
851
+ }),
852
+ // An agent-artifact component relation belongs to one artifact component
853
+ artifactComponent: one(artifactComponents, {
854
+ fields: [agentArtifactComponents.artifactComponentId],
855
+ references: [artifactComponents.id]
856
+ })
857
+ }));
858
+ var agentRelationsRelations = drizzleOrm.relations(agentRelations, ({ one }) => ({
859
+ // An agent relation belongs to one graph
860
+ graph: one(agentGraph, {
861
+ fields: [agentRelations.graphId],
862
+ references: [agentGraph.id]
863
+ }),
864
+ // An agent relation has one source agent
865
+ sourceAgent: one(agents, {
866
+ fields: [agentRelations.sourceAgentId],
867
+ references: [agents.id],
868
+ relationName: "sourceRelations"
869
+ }),
870
+ // An agent relation may have one target agent (for internal relations)
871
+ targetAgent: one(agents, {
872
+ fields: [agentRelations.targetAgentId],
873
+ references: [agents.id],
874
+ relationName: "targetRelations"
875
+ }),
876
+ // An agent relation may have one external agent (for external relations)
877
+ externalAgent: one(externalAgents, {
878
+ fields: [agentRelations.externalAgentId],
879
+ references: [externalAgents.id]
880
+ })
881
+ }));
882
+
883
+ exports.agentArtifactComponents = agentArtifactComponents;
884
+ exports.agentArtifactComponentsRelations = agentArtifactComponentsRelations;
885
+ exports.agentDataComponents = agentDataComponents;
886
+ exports.agentGraph = agentGraph;
887
+ exports.agentGraphRelations = agentGraphRelations;
888
+ exports.agentRelations = agentRelations;
889
+ exports.agentRelationsRelations = agentRelationsRelations;
890
+ exports.agentToolRelations = agentToolRelations;
891
+ exports.agentToolRelationsRelations = agentToolRelationsRelations;
892
+ exports.agents = agents;
893
+ exports.agentsRelations = agentsRelations;
894
+ exports.apiKeys = apiKeys;
895
+ exports.apiKeysRelations = apiKeysRelations;
896
+ exports.artifactComponents = artifactComponents;
897
+ exports.artifactComponentsRelations = artifactComponentsRelations;
898
+ exports.contextCache = contextCache;
899
+ exports.contextCacheRelations = contextCacheRelations;
900
+ exports.contextConfigs = contextConfigs;
901
+ exports.contextConfigsRelations = contextConfigsRelations;
902
+ exports.conversations = conversations;
903
+ exports.conversationsRelations = conversationsRelations;
904
+ exports.credentialReferences = credentialReferences;
905
+ exports.credentialReferencesRelations = credentialReferencesRelations;
906
+ exports.dataComponents = dataComponents;
907
+ exports.externalAgents = externalAgents;
908
+ exports.externalAgentsRelations = externalAgentsRelations;
909
+ exports.ledgerArtifacts = ledgerArtifacts;
910
+ exports.ledgerArtifactsContextIdIdx = ledgerArtifactsContextIdIdx;
911
+ exports.ledgerArtifactsTaskContextNameUnique = ledgerArtifactsTaskContextNameUnique;
912
+ exports.ledgerArtifactsTaskIdIdx = ledgerArtifactsTaskIdIdx;
913
+ exports.messages = messages;
914
+ exports.messagesRelations = messagesRelations;
915
+ exports.projects = projects;
916
+ exports.projectsRelations = projectsRelations;
917
+ exports.taskRelations = taskRelations;
918
+ exports.taskRelationsRelations = taskRelationsRelations;
919
+ exports.tasks = tasks;
920
+ exports.tasksRelations = tasksRelations;
921
+ exports.tools = tools;
922
+ exports.toolsRelations = toolsRelations;