@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,1772 @@
1
+ 'use strict';
2
+
3
+ var zodOpenapi = require('@hono/zod-openapi');
4
+ var drizzleZod = require('drizzle-zod');
5
+ var drizzleOrm = require('drizzle-orm');
6
+ var sqliteCore = require('drizzle-orm/sqlite-core');
7
+
8
+ // src/validation/schemas.ts
9
+ var projects = sqliteCore.sqliteTable(
10
+ "projects",
11
+ {
12
+ tenantId: sqliteCore.text("tenant_id").notNull(),
13
+ id: sqliteCore.text("id").notNull(),
14
+ // This IS the project ID
15
+ name: sqliteCore.text("name").notNull(),
16
+ description: sqliteCore.text("description").notNull(),
17
+ // Project-level default model settings that can be inherited by graphs and agents
18
+ models: sqliteCore.text("models", { mode: "json" }).$type(),
19
+ // Project-level stopWhen configuration that can be inherited by graphs and agents
20
+ stopWhen: sqliteCore.text("stop_when", { mode: "json" }).$type(),
21
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
22
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
23
+ },
24
+ (table) => [sqliteCore.primaryKey({ columns: [table.tenantId, table.id] })]
25
+ );
26
+ var contextConfigs = sqliteCore.sqliteTable(
27
+ "context_configs",
28
+ {
29
+ tenantId: sqliteCore.text("tenant_id").notNull(),
30
+ projectId: sqliteCore.text("project_id").notNull(),
31
+ id: sqliteCore.text("id").notNull(),
32
+ name: sqliteCore.text("name").notNull(),
33
+ description: sqliteCore.text("description").notNull(),
34
+ // Developer-defined Zod schema for validating incoming request context
35
+ requestContextSchema: sqliteCore.blob("request_context_schema", { mode: "json" }).$type(),
36
+ // Stores serialized Zod schema
37
+ // Object mapping template keys to fetch definitions that use request context data
38
+ contextVariables: sqliteCore.blob("context_variables", { mode: "json" }).$type(),
39
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
40
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
41
+ },
42
+ (table) => [
43
+ sqliteCore.primaryKey({ columns: [table.tenantId, table.projectId, table.id] }),
44
+ sqliteCore.foreignKey({
45
+ columns: [table.tenantId, table.projectId],
46
+ foreignColumns: [projects.tenantId, projects.id],
47
+ name: "context_configs_project_fk"
48
+ }).onDelete("cascade")
49
+ ]
50
+ );
51
+ var contextCache = sqliteCore.sqliteTable(
52
+ "context_cache",
53
+ {
54
+ tenantId: sqliteCore.text("tenant_id").notNull(),
55
+ projectId: sqliteCore.text("project_id").notNull(),
56
+ id: sqliteCore.text("id").notNull(),
57
+ // Always scoped to conversation for complete data isolation
58
+ conversationId: sqliteCore.text("conversation_id").notNull(),
59
+ // Reference to the context config and specific fetch definition
60
+ contextConfigId: sqliteCore.text("context_config_id").notNull(),
61
+ contextVariableKey: sqliteCore.text("context_variable_key").notNull(),
62
+ // Key from contextVariables object
63
+ // The actual cached context data
64
+ value: sqliteCore.blob("value", { mode: "json" }).$type().notNull(),
65
+ // Request hash for cache invalidation based on context changes
66
+ requestHash: sqliteCore.text("request_hash"),
67
+ // Hash of request context that triggered this cache
68
+ // Metadata for monitoring and debugging
69
+ fetchedAt: sqliteCore.text("fetched_at").notNull(),
70
+ fetchSource: sqliteCore.text("fetch_source"),
71
+ // URL or source identifier
72
+ fetchDurationMs: sqliteCore.integer("fetch_duration_ms"),
73
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
74
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
75
+ },
76
+ (table) => [
77
+ sqliteCore.primaryKey({ columns: [table.tenantId, table.projectId, table.id] }),
78
+ sqliteCore.foreignKey({
79
+ columns: [table.tenantId, table.projectId],
80
+ foreignColumns: [projects.tenantId, projects.id],
81
+ name: "context_cache_project_fk"
82
+ }).onDelete("cascade"),
83
+ sqliteCore.index("context_cache_lookup_idx").on(
84
+ table.conversationId,
85
+ table.contextConfigId,
86
+ table.contextVariableKey
87
+ )
88
+ ]
89
+ );
90
+ var agents = sqliteCore.sqliteTable(
91
+ "agents",
92
+ {
93
+ tenantId: sqliteCore.text("tenant_id").notNull(),
94
+ projectId: sqliteCore.text("project_id").notNull(),
95
+ id: sqliteCore.text("id").notNull(),
96
+ name: sqliteCore.text("name").notNull(),
97
+ description: sqliteCore.text("description").notNull(),
98
+ prompt: sqliteCore.text("prompt").notNull(),
99
+ conversationHistoryConfig: sqliteCore.text("conversation_history_config", {
100
+ mode: "json"
101
+ }).$type(),
102
+ models: sqliteCore.text("models", { mode: "json" }).$type(),
103
+ // Agent-level stopWhen configuration (inherited from project)
104
+ stopWhen: sqliteCore.text("stop_when", { mode: "json" }).$type(),
105
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
106
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
107
+ },
108
+ (table) => [
109
+ sqliteCore.primaryKey({ columns: [table.tenantId, table.projectId, table.id] }),
110
+ sqliteCore.foreignKey({
111
+ columns: [table.tenantId, table.projectId],
112
+ foreignColumns: [projects.tenantId, projects.id],
113
+ name: "agents_project_fk"
114
+ }).onDelete("cascade")
115
+ ]
116
+ );
117
+ var agentRelations = sqliteCore.sqliteTable(
118
+ "agent_relations",
119
+ {
120
+ tenantId: sqliteCore.text("tenant_id").notNull(),
121
+ projectId: sqliteCore.text("project_id").notNull(),
122
+ id: sqliteCore.text("id").notNull(),
123
+ graphId: sqliteCore.text("graph_id").notNull(),
124
+ sourceAgentId: sqliteCore.text("source_agent_id").notNull(),
125
+ // For internal relationships
126
+ targetAgentId: sqliteCore.text("target_agent_id"),
127
+ // For external relationships
128
+ externalAgentId: sqliteCore.text("external_agent_id"),
129
+ relationType: sqliteCore.text("relation_type"),
130
+ // 'transfer' | 'delegate'
131
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
132
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
133
+ },
134
+ (table) => [
135
+ sqliteCore.primaryKey({ columns: [table.tenantId, table.projectId, table.id] }),
136
+ sqliteCore.foreignKey({
137
+ columns: [table.tenantId, table.projectId],
138
+ foreignColumns: [projects.tenantId, projects.id],
139
+ name: "agent_relations_project_fk"
140
+ }).onDelete("cascade")
141
+ ]
142
+ );
143
+ var externalAgents = sqliteCore.sqliteTable(
144
+ "external_agents",
145
+ {
146
+ tenantId: sqliteCore.text("tenant_id").notNull(),
147
+ projectId: sqliteCore.text("project_id").notNull(),
148
+ id: sqliteCore.text("id").notNull(),
149
+ name: sqliteCore.text("name").notNull(),
150
+ description: sqliteCore.text("description").notNull(),
151
+ baseUrl: sqliteCore.text("base_url").notNull(),
152
+ // A2A endpoint URL
153
+ credentialReferenceId: sqliteCore.text("credential_reference_id"),
154
+ headers: sqliteCore.blob("headers", { mode: "json" }).$type(),
155
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
156
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
157
+ },
158
+ (table) => [
159
+ sqliteCore.primaryKey({ columns: [table.tenantId, table.projectId, table.id] }),
160
+ sqliteCore.foreignKey({
161
+ columns: [table.tenantId, table.projectId],
162
+ foreignColumns: [projects.tenantId, projects.id],
163
+ name: "external_agents_project_fk"
164
+ }).onDelete("cascade"),
165
+ sqliteCore.foreignKey({
166
+ columns: [table.tenantId, table.projectId, table.credentialReferenceId],
167
+ foreignColumns: [
168
+ credentialReferences.tenantId,
169
+ credentialReferences.projectId,
170
+ credentialReferences.id
171
+ ],
172
+ name: "external_agents_credential_reference_fk"
173
+ }).onDelete("set null")
174
+ ]
175
+ );
176
+ var agentGraph = sqliteCore.sqliteTable(
177
+ "agent_graph",
178
+ {
179
+ tenantId: sqliteCore.text("tenant_id").notNull(),
180
+ projectId: sqliteCore.text("project_id").notNull(),
181
+ id: sqliteCore.text("id").notNull(),
182
+ name: sqliteCore.text("name").notNull(),
183
+ description: sqliteCore.text("description"),
184
+ defaultAgentId: sqliteCore.text("default_agent_id").notNull(),
185
+ // Reference to shared context configuration for all agents in this graph
186
+ contextConfigId: sqliteCore.text("context_config_id"),
187
+ // Graph-level model settingsuration that can be inherited by agents
188
+ models: sqliteCore.text("models", { mode: "json" }).$type(),
189
+ // Status updates configuration for intelligent progress summaries
190
+ statusUpdates: sqliteCore.text("status_updates", { mode: "json" }).$type(),
191
+ // Graph-level prompt that can be used as additional context for agents
192
+ graphPrompt: sqliteCore.text("graph_prompt"),
193
+ // Graph-level stopWhen configuration that can be inherited by agents
194
+ stopWhen: sqliteCore.text("stop_when", { mode: "json" }).$type(),
195
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
196
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
197
+ },
198
+ (table) => [
199
+ sqliteCore.primaryKey({ columns: [table.tenantId, table.projectId, table.id] }),
200
+ sqliteCore.foreignKey({
201
+ columns: [table.tenantId, table.projectId],
202
+ foreignColumns: [projects.tenantId, projects.id],
203
+ name: "agent_graph_project_fk"
204
+ }).onDelete("cascade")
205
+ ]
206
+ );
207
+ var tasks = sqliteCore.sqliteTable(
208
+ "tasks",
209
+ {
210
+ tenantId: sqliteCore.text("tenant_id").notNull(),
211
+ projectId: sqliteCore.text("project_id").notNull(),
212
+ id: sqliteCore.text("id").notNull(),
213
+ contextId: sqliteCore.text("context_id").notNull(),
214
+ status: sqliteCore.text("status").notNull(),
215
+ metadata: sqliteCore.blob("metadata", { mode: "json" }).$type(),
216
+ agentId: sqliteCore.text("agent_id").notNull(),
217
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
218
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
219
+ },
220
+ (table) => [
221
+ sqliteCore.primaryKey({ columns: [table.tenantId, table.projectId, table.id] }),
222
+ sqliteCore.foreignKey({
223
+ columns: [table.tenantId, table.projectId],
224
+ foreignColumns: [projects.tenantId, projects.id],
225
+ name: "tasks_project_fk"
226
+ }).onDelete("cascade")
227
+ ]
228
+ );
229
+ var taskRelations = sqliteCore.sqliteTable(
230
+ "task_relations",
231
+ {
232
+ tenantId: sqliteCore.text("tenant_id").notNull(),
233
+ projectId: sqliteCore.text("project_id").notNull(),
234
+ id: sqliteCore.text("id").notNull(),
235
+ parentTaskId: sqliteCore.text("parent_task_id").notNull(),
236
+ childTaskId: sqliteCore.text("child_task_id").notNull(),
237
+ relationType: sqliteCore.text("relation_type").default("parent_child"),
238
+ // Could be extended for other relation types
239
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
240
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
241
+ },
242
+ (table) => [
243
+ sqliteCore.primaryKey({ columns: [table.tenantId, table.projectId, table.id] }),
244
+ sqliteCore.foreignKey({
245
+ columns: [table.tenantId, table.projectId],
246
+ foreignColumns: [projects.tenantId, projects.id],
247
+ name: "task_relations_project_fk"
248
+ }).onDelete("cascade")
249
+ ]
250
+ );
251
+ var dataComponents = sqliteCore.sqliteTable(
252
+ "data_components",
253
+ {
254
+ tenantId: sqliteCore.text("tenant_id").notNull(),
255
+ projectId: sqliteCore.text("project_id").notNull(),
256
+ id: sqliteCore.text("id").notNull(),
257
+ name: sqliteCore.text("name").notNull(),
258
+ description: sqliteCore.text("description").notNull(),
259
+ props: sqliteCore.blob("props", { mode: "json" }).$type(),
260
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
261
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
262
+ },
263
+ (table) => [
264
+ sqliteCore.primaryKey({ columns: [table.tenantId, table.projectId, table.id] }),
265
+ sqliteCore.foreignKey({
266
+ columns: [table.tenantId, table.projectId],
267
+ foreignColumns: [projects.tenantId, projects.id],
268
+ name: "data_components_project_fk"
269
+ }).onDelete("cascade")
270
+ ]
271
+ );
272
+ var agentDataComponents = sqliteCore.sqliteTable(
273
+ "agent_data_components",
274
+ {
275
+ tenantId: sqliteCore.text("tenant_id").notNull(),
276
+ projectId: sqliteCore.text("project_id").notNull(),
277
+ id: sqliteCore.text("id").notNull(),
278
+ agentId: sqliteCore.text("agent_id").notNull(),
279
+ dataComponentId: sqliteCore.text("data_component_id").notNull(),
280
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
281
+ },
282
+ (table) => [
283
+ sqliteCore.primaryKey({ columns: [table.tenantId, table.projectId, table.id] }),
284
+ // Foreign key constraint to projects table
285
+ sqliteCore.foreignKey({
286
+ columns: [table.tenantId, table.projectId],
287
+ foreignColumns: [projects.tenantId, projects.id],
288
+ name: "agent_data_components_project_fk"
289
+ }).onDelete("cascade"),
290
+ // Foreign key constraint to agents table
291
+ sqliteCore.foreignKey({
292
+ columns: [table.tenantId, table.projectId, table.agentId],
293
+ foreignColumns: [agents.tenantId, agents.projectId, agents.id],
294
+ name: "agent_data_components_agent_fk"
295
+ }).onDelete("cascade"),
296
+ // Foreign key constraint to data_components table
297
+ sqliteCore.foreignKey({
298
+ columns: [table.tenantId, table.projectId, table.dataComponentId],
299
+ foreignColumns: [dataComponents.tenantId, dataComponents.projectId, dataComponents.id],
300
+ name: "agent_data_components_data_component_fk"
301
+ }).onDelete("cascade")
302
+ ]
303
+ );
304
+ var artifactComponents = sqliteCore.sqliteTable(
305
+ "artifact_components",
306
+ {
307
+ tenantId: sqliteCore.text("tenant_id").notNull(),
308
+ projectId: sqliteCore.text("project_id").notNull(),
309
+ id: sqliteCore.text("id").notNull(),
310
+ name: sqliteCore.text("name").notNull(),
311
+ description: sqliteCore.text("description").notNull(),
312
+ summaryProps: sqliteCore.blob("summary_props", { mode: "json" }).$type(),
313
+ fullProps: sqliteCore.blob("full_props", { mode: "json" }).$type(),
314
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
315
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
316
+ },
317
+ (table) => [
318
+ sqliteCore.primaryKey({ columns: [table.tenantId, table.projectId, table.id] }),
319
+ sqliteCore.foreignKey({
320
+ columns: [table.tenantId, table.projectId],
321
+ foreignColumns: [projects.tenantId, projects.id],
322
+ name: "artifact_components_project_fk"
323
+ }).onDelete("cascade")
324
+ ]
325
+ );
326
+ var agentArtifactComponents = sqliteCore.sqliteTable(
327
+ "agent_artifact_components",
328
+ {
329
+ tenantId: sqliteCore.text("tenant_id").notNull(),
330
+ projectId: sqliteCore.text("project_id").notNull(),
331
+ id: sqliteCore.text("id").notNull(),
332
+ agentId: sqliteCore.text("agent_id").notNull(),
333
+ artifactComponentId: sqliteCore.text("artifact_component_id").notNull(),
334
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
335
+ },
336
+ (table) => [
337
+ sqliteCore.primaryKey({ columns: [table.tenantId, table.projectId, table.id] }),
338
+ // Foreign key constraint to projects table
339
+ sqliteCore.foreignKey({
340
+ columns: [table.tenantId, table.projectId],
341
+ foreignColumns: [projects.tenantId, projects.id],
342
+ name: "agent_artifact_components_project_fk"
343
+ }).onDelete("cascade"),
344
+ // Foreign key constraint to agents table
345
+ sqliteCore.foreignKey({
346
+ columns: [table.tenantId, table.projectId, table.agentId],
347
+ foreignColumns: [agents.tenantId, agents.projectId, agents.id],
348
+ name: "agent_artifact_components_agent_fk"
349
+ }).onDelete("cascade"),
350
+ // Foreign key constraint to artifact_components table
351
+ sqliteCore.foreignKey({
352
+ columns: [table.tenantId, table.projectId, table.artifactComponentId],
353
+ foreignColumns: [
354
+ artifactComponents.tenantId,
355
+ artifactComponents.projectId,
356
+ artifactComponents.id
357
+ ],
358
+ name: "agent_artifact_components_artifact_component_fk"
359
+ }).onDelete("cascade")
360
+ ]
361
+ );
362
+ var tools = sqliteCore.sqliteTable(
363
+ "tools",
364
+ {
365
+ tenantId: sqliteCore.text("tenant_id").notNull(),
366
+ projectId: sqliteCore.text("project_id").notNull(),
367
+ id: sqliteCore.text("id").notNull(),
368
+ name: sqliteCore.text("name").notNull(),
369
+ // Enhanced MCP configuration
370
+ config: sqliteCore.blob("config", { mode: "json" }).$type().notNull(),
371
+ credentialReferenceId: sqliteCore.text("credential_reference_id"),
372
+ headers: sqliteCore.blob("headers", { mode: "json" }).$type(),
373
+ // Image URL for custom tool icon (supports regular URLs and base64 encoded images)
374
+ imageUrl: sqliteCore.text("image_url"),
375
+ // Server capabilities and status
376
+ capabilities: sqliteCore.blob("capabilities", { mode: "json" }).$type(),
377
+ // Connection health and monitoring
378
+ status: sqliteCore.text("status").notNull().default("unknown"),
379
+ lastHealthCheck: sqliteCore.text("last_health_check"),
380
+ lastError: sqliteCore.text("last_error"),
381
+ // Tool discovery cache
382
+ availableTools: sqliteCore.blob("available_tools", { mode: "json" }).$type(),
383
+ lastToolsSync: sqliteCore.text("last_tools_sync"),
384
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
385
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
386
+ },
387
+ (table) => [
388
+ sqliteCore.primaryKey({ columns: [table.tenantId, table.projectId, table.id] }),
389
+ sqliteCore.foreignKey({
390
+ columns: [table.tenantId, table.projectId],
391
+ foreignColumns: [projects.tenantId, projects.id],
392
+ name: "tools_project_fk"
393
+ }).onDelete("cascade")
394
+ ]
395
+ );
396
+ var agentToolRelations = sqliteCore.sqliteTable(
397
+ "agent_tool_relations",
398
+ {
399
+ tenantId: sqliteCore.text("tenant_id").notNull(),
400
+ projectId: sqliteCore.text("project_id").notNull(),
401
+ id: sqliteCore.text("id").notNull(),
402
+ agentId: sqliteCore.text("agent_id").notNull(),
403
+ toolId: sqliteCore.text("tool_id").notNull(),
404
+ selectedTools: sqliteCore.blob("selected_tools", { mode: "json" }).$type(),
405
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
406
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
407
+ },
408
+ (table) => [
409
+ sqliteCore.primaryKey({ columns: [table.tenantId, table.projectId, table.id] }),
410
+ // Foreign key constraint to projects table
411
+ sqliteCore.foreignKey({
412
+ columns: [table.tenantId, table.projectId],
413
+ foreignColumns: [projects.tenantId, projects.id],
414
+ name: "agent_tool_relations_project_fk"
415
+ }).onDelete("cascade"),
416
+ // Foreign key constraint to agents table
417
+ sqliteCore.foreignKey({
418
+ columns: [table.tenantId, table.projectId, table.agentId],
419
+ foreignColumns: [agents.tenantId, agents.projectId, agents.id],
420
+ name: "agent_tool_relations_agent_fk"
421
+ }).onDelete("cascade"),
422
+ // Foreign key constraint to tools table
423
+ sqliteCore.foreignKey({
424
+ columns: [table.tenantId, table.projectId, table.toolId],
425
+ foreignColumns: [tools.tenantId, tools.projectId, tools.id],
426
+ name: "agent_tool_relations_tool_fk"
427
+ }).onDelete("cascade")
428
+ ]
429
+ );
430
+ var conversations = sqliteCore.sqliteTable(
431
+ "conversations",
432
+ {
433
+ tenantId: sqliteCore.text("tenant_id").notNull(),
434
+ projectId: sqliteCore.text("project_id").notNull(),
435
+ id: sqliteCore.text("id").notNull(),
436
+ userId: sqliteCore.text("user_id"),
437
+ activeAgentId: sqliteCore.text("active_agent_id").notNull(),
438
+ title: sqliteCore.text("title"),
439
+ lastContextResolution: sqliteCore.text("last_context_resolution"),
440
+ metadata: sqliteCore.blob("metadata", { mode: "json" }).$type(),
441
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
442
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
443
+ },
444
+ (table) => [
445
+ sqliteCore.primaryKey({ columns: [table.tenantId, table.projectId, table.id] }),
446
+ sqliteCore.foreignKey({
447
+ columns: [table.tenantId, table.projectId],
448
+ foreignColumns: [projects.tenantId, projects.id],
449
+ name: "conversations_project_fk"
450
+ }).onDelete("cascade")
451
+ ]
452
+ );
453
+ var messages = sqliteCore.sqliteTable(
454
+ "messages",
455
+ {
456
+ tenantId: sqliteCore.text("tenant_id").notNull(),
457
+ projectId: sqliteCore.text("project_id").notNull(),
458
+ id: sqliteCore.text("id").notNull(),
459
+ conversationId: sqliteCore.text("conversation_id").notNull(),
460
+ // Role mapping: user, agent, system (unified for both formats)
461
+ role: sqliteCore.text("role").notNull(),
462
+ // 'user' | 'agent' | 'system'
463
+ // Agent sender/recipient tracking (nullable - only populated when relevant)
464
+ fromAgentId: sqliteCore.text("from_agent_id"),
465
+ // Populated when message is from an agent
466
+ toAgentId: sqliteCore.text("to_agent_id"),
467
+ // Populated when message is directed to a specific agent (e.g., transfers/delegations)
468
+ // External agent sender tracking
469
+ fromExternalAgentId: sqliteCore.text("from_external_agent_id"),
470
+ // Populated when message is directed from an external agent
471
+ // External agent recipient tracking
472
+ toExternalAgentId: sqliteCore.text("to_external_agent_id"),
473
+ // Populated when message is directed to an external agent
474
+ // Message content stored as JSON to support both formats
475
+ content: sqliteCore.blob("content", { mode: "json" }).$type().notNull(),
476
+ // Message classification and filtering
477
+ visibility: sqliteCore.text("visibility").notNull().default("user-facing"),
478
+ // 'user-facing' | 'internal' | 'system' | 'external'
479
+ messageType: sqliteCore.text("message_type").notNull().default("chat"),
480
+ // 'chat' | 'a2a-request' | 'a2a-response' | 'task-update' | 'tool-call'
481
+ // Legacy agent association (consider deprecating in favor of fromAgentId/toAgentId)
482
+ agentId: sqliteCore.text("agent_id"),
483
+ taskId: sqliteCore.text("task_id"),
484
+ parentMessageId: sqliteCore.text("parent_message_id"),
485
+ // Remove self-reference constraint here
486
+ // A2A specific fields
487
+ a2aTaskId: sqliteCore.text("a2a_task_id"),
488
+ // Links to A2A task when relevant
489
+ a2aSessionId: sqliteCore.text("a2a_session_id"),
490
+ // A2A session identifier
491
+ // Metadata for extensions
492
+ metadata: sqliteCore.blob("metadata", { mode: "json" }).$type(),
493
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
494
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
495
+ },
496
+ (table) => [
497
+ sqliteCore.primaryKey({ columns: [table.tenantId, table.projectId, table.id] }),
498
+ sqliteCore.foreignKey({
499
+ columns: [table.tenantId, table.projectId],
500
+ foreignColumns: [projects.tenantId, projects.id],
501
+ name: "messages_project_fk"
502
+ }).onDelete("cascade")
503
+ ]
504
+ );
505
+ var ledgerArtifacts = sqliteCore.sqliteTable(
506
+ "ledger_artifacts",
507
+ {
508
+ // Primary identifier (maps to `artifactId`)
509
+ tenantId: sqliteCore.text("tenant_id").notNull(),
510
+ projectId: sqliteCore.text("project_id").notNull(),
511
+ id: sqliteCore.text("id").notNull(),
512
+ // Links
513
+ taskId: sqliteCore.text("task_id"),
514
+ contextId: sqliteCore.text("context_id").notNull(),
515
+ // Core Artifact fields
516
+ type: sqliteCore.text("type").notNull().default("source"),
517
+ name: sqliteCore.text("name"),
518
+ description: sqliteCore.text("description"),
519
+ parts: sqliteCore.blob("parts", { mode: "json" }).$type(),
520
+ metadata: sqliteCore.blob("metadata", { mode: "json" }).$type(),
521
+ // Extra ledger information (not part of the Artifact spec – kept optional)
522
+ summary: sqliteCore.text("summary"),
523
+ mime: sqliteCore.blob("mime", { mode: "json" }).$type(),
524
+ visibility: sqliteCore.text("visibility").default("context"),
525
+ allowedAgents: sqliteCore.blob("allowed_agents", { mode: "json" }).$type(),
526
+ derivedFrom: sqliteCore.text("derived_from"),
527
+ // Timestamps
528
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
529
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
530
+ },
531
+ (table) => [
532
+ sqliteCore.primaryKey({ columns: [table.tenantId, table.projectId, table.id] }),
533
+ sqliteCore.foreignKey({
534
+ columns: [table.tenantId, table.projectId],
535
+ foreignColumns: [projects.tenantId, projects.id],
536
+ name: "ledger_artifacts_project_fk"
537
+ }).onDelete("cascade")
538
+ ]
539
+ );
540
+ var apiKeys = sqliteCore.sqliteTable(
541
+ "api_keys",
542
+ {
543
+ id: sqliteCore.text("id").primaryKey(),
544
+ tenantId: sqliteCore.text("tenant_id").notNull(),
545
+ projectId: sqliteCore.text("project_id").notNull(),
546
+ graphId: sqliteCore.text("graph_id").notNull(),
547
+ publicId: sqliteCore.text("public_id").notNull().unique(),
548
+ // Public ID for O(1) lookup (e.g., "abc123def456")
549
+ keyHash: sqliteCore.text("key_hash").notNull(),
550
+ // Hashed API key (never store plaintext)
551
+ keyPrefix: sqliteCore.text("key_prefix").notNull(),
552
+ // First 8 chars for identification (e.g., "sk_live_abc...")
553
+ lastUsedAt: sqliteCore.text("last_used_at"),
554
+ expiresAt: sqliteCore.text("expires_at"),
555
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
556
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
557
+ },
558
+ (t) => [
559
+ sqliteCore.foreignKey({
560
+ columns: [t.tenantId, t.projectId],
561
+ foreignColumns: [projects.tenantId, projects.id],
562
+ name: "api_keys_project_fk"
563
+ }).onDelete("cascade"),
564
+ sqliteCore.foreignKey({
565
+ columns: [t.tenantId, t.projectId, t.graphId],
566
+ foreignColumns: [agentGraph.tenantId, agentGraph.projectId, agentGraph.id],
567
+ name: "api_keys_graph_fk"
568
+ }).onDelete("cascade"),
569
+ sqliteCore.index("api_keys_tenant_graph_idx").on(t.tenantId, t.graphId),
570
+ sqliteCore.index("api_keys_prefix_idx").on(t.keyPrefix),
571
+ sqliteCore.index("api_keys_public_id_idx").on(t.publicId)
572
+ ]
573
+ );
574
+ var credentialReferences = sqliteCore.sqliteTable(
575
+ "credential_references",
576
+ {
577
+ tenantId: sqliteCore.text("tenant_id").notNull(),
578
+ projectId: sqliteCore.text("project_id").notNull(),
579
+ id: sqliteCore.text("id").notNull(),
580
+ type: sqliteCore.text("type").notNull(),
581
+ // Implementation type: 'keychain', 'nango', 'memory', etc.
582
+ credentialStoreId: sqliteCore.text("credential_store_id").notNull(),
583
+ // Maps to framework.getCredentialStore(id)
584
+ retrievalParams: sqliteCore.blob("retrieval_params", { mode: "json" }).$type(),
585
+ createdAt: sqliteCore.text("created_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`),
586
+ updatedAt: sqliteCore.text("updated_at").notNull().default(drizzleOrm.sql`CURRENT_TIMESTAMP`)
587
+ },
588
+ (t) => [
589
+ sqliteCore.primaryKey({ columns: [t.tenantId, t.projectId, t.id] }),
590
+ sqliteCore.foreignKey({
591
+ columns: [t.tenantId, t.projectId],
592
+ foreignColumns: [projects.tenantId, projects.id],
593
+ name: "credential_references_project_fk"
594
+ }).onDelete("cascade")
595
+ ]
596
+ );
597
+ sqliteCore.index("ledger_artifacts_task_id_idx").on(
598
+ ledgerArtifacts.taskId
599
+ );
600
+ sqliteCore.index("ledger_artifacts_context_id_idx").on(
601
+ ledgerArtifacts.contextId
602
+ );
603
+ sqliteCore.unique(
604
+ "ledger_artifacts_task_context_name_unique"
605
+ ).on(ledgerArtifacts.taskId, ledgerArtifacts.contextId, ledgerArtifacts.name);
606
+ drizzleOrm.relations(tasks, ({ one, many }) => ({
607
+ // A task belongs to one project
608
+ project: one(projects, {
609
+ fields: [tasks.tenantId, tasks.projectId],
610
+ references: [projects.tenantId, projects.id]
611
+ }),
612
+ // A task can have many parent relationships (where it's the child)
613
+ parentRelations: many(taskRelations, {
614
+ relationName: "childTask"
615
+ }),
616
+ // A task can have many child relationships (where it's the parent)
617
+ childRelations: many(taskRelations, {
618
+ relationName: "parentTask"
619
+ }),
620
+ // A task belongs to one agent
621
+ agent: one(agents, {
622
+ fields: [tasks.agentId],
623
+ references: [agents.id]
624
+ }),
625
+ // A task can have many messages associated with it
626
+ messages: many(messages)
627
+ }));
628
+ drizzleOrm.relations(projects, ({ many }) => ({
629
+ // A project can have many agents
630
+ agents: many(agents),
631
+ // A project can have many agent graphs
632
+ agentGraphs: many(agentGraph),
633
+ // A project can have many tools
634
+ tools: many(tools),
635
+ // A project can have many context configs
636
+ contextConfigs: many(contextConfigs),
637
+ // A project can have many external agents
638
+ externalAgents: many(externalAgents),
639
+ // A project can have many conversations
640
+ conversations: many(conversations),
641
+ // A project can have many tasks
642
+ tasks: many(tasks)
643
+ }));
644
+ drizzleOrm.relations(taskRelations, ({ one }) => ({
645
+ // Each relation has one parent task
646
+ parentTask: one(tasks, {
647
+ fields: [taskRelations.parentTaskId],
648
+ references: [tasks.id],
649
+ relationName: "parentTask"
650
+ }),
651
+ // Each relation has one child task
652
+ childTask: one(tasks, {
653
+ fields: [taskRelations.childTaskId],
654
+ references: [tasks.id],
655
+ relationName: "childTask"
656
+ })
657
+ }));
658
+ drizzleOrm.relations(contextConfigs, ({ many, one }) => ({
659
+ // A context config belongs to one project
660
+ project: one(projects, {
661
+ fields: [contextConfigs.tenantId, contextConfigs.projectId],
662
+ references: [projects.tenantId, projects.id]
663
+ }),
664
+ // A context config can be used by many agent graphs
665
+ graphs: many(agentGraph),
666
+ // A context config can have many cached entries
667
+ cache: many(contextCache)
668
+ }));
669
+ drizzleOrm.relations(contextCache, ({ one }) => ({
670
+ // Each cache entry belongs to one context config
671
+ contextConfig: one(contextConfigs, {
672
+ fields: [contextCache.contextConfigId],
673
+ references: [contextConfigs.id]
674
+ })
675
+ }));
676
+ drizzleOrm.relations(agents, ({ many, one }) => ({
677
+ // A context config belongs to one project
678
+ project: one(projects, {
679
+ fields: [agents.tenantId, agents.projectId],
680
+ references: [projects.tenantId, projects.id]
681
+ }),
682
+ // An agent can have many tasks
683
+ tasks: many(tasks),
684
+ // An agent can be the default agent for many graphs
685
+ defaultForGraphs: many(agentGraph),
686
+ // Agent relation tracking
687
+ sourceRelations: many(agentRelations, {
688
+ relationName: "sourceRelations"
689
+ }),
690
+ targetRelations: many(agentRelations, {
691
+ relationName: "targetRelations"
692
+ }),
693
+ // Message tracking relations
694
+ sentMessages: many(messages, {
695
+ relationName: "sentMessages"
696
+ }),
697
+ receivedMessages: many(messages, {
698
+ relationName: "receivedMessages"
699
+ }),
700
+ // Legacy message association (consider deprecating)
701
+ associatedMessages: many(messages, {
702
+ relationName: "associatedAgent"
703
+ }),
704
+ toolRelations: many(agentToolRelations)
705
+ }));
706
+ drizzleOrm.relations(agentGraph, ({ one }) => ({
707
+ // An agent graph belongs to one project
708
+ project: one(projects, {
709
+ fields: [agentGraph.tenantId, agentGraph.projectId],
710
+ references: [projects.tenantId, projects.id]
711
+ }),
712
+ // An agent graph belongs to one default agent
713
+ defaultAgent: one(agents, {
714
+ fields: [agentGraph.defaultAgentId],
715
+ references: [agents.id]
716
+ }),
717
+ // An agent graph can reference one context config
718
+ contextConfig: one(contextConfigs, {
719
+ fields: [agentGraph.contextConfigId],
720
+ references: [contextConfigs.id]
721
+ })
722
+ }));
723
+ drizzleOrm.relations(externalAgents, ({ one, many }) => ({
724
+ // An external agent belongs to one project
725
+ project: one(projects, {
726
+ fields: [externalAgents.tenantId, externalAgents.projectId],
727
+ references: [projects.tenantId, projects.id]
728
+ }),
729
+ // An external agent can be referenced by many agent relations
730
+ agentRelations: many(agentRelations),
731
+ // An external agent may have one credential reference
732
+ credentialReference: one(credentialReferences, {
733
+ fields: [externalAgents.credentialReferenceId],
734
+ references: [credentialReferences.id]
735
+ })
736
+ }));
737
+ drizzleOrm.relations(apiKeys, ({ one }) => ({
738
+ // An API key belongs to one project
739
+ project: one(projects, {
740
+ fields: [apiKeys.tenantId, apiKeys.projectId],
741
+ references: [projects.tenantId, projects.id]
742
+ }),
743
+ // An API key belongs to one tenant and graph
744
+ graph: one(agentGraph, {
745
+ fields: [apiKeys.graphId],
746
+ references: [agentGraph.id]
747
+ })
748
+ }));
749
+ drizzleOrm.relations(agentToolRelations, ({ one }) => ({
750
+ // An agent-tool relation belongs to one agent
751
+ agent: one(agents, {
752
+ fields: [agentToolRelations.agentId],
753
+ references: [agents.id]
754
+ }),
755
+ // An agent-tool relation belongs to one tool
756
+ tool: one(tools, {
757
+ fields: [agentToolRelations.toolId],
758
+ references: [tools.id]
759
+ })
760
+ }));
761
+ drizzleOrm.relations(credentialReferences, ({ many }) => ({
762
+ tools: many(tools)
763
+ }));
764
+ drizzleOrm.relations(tools, ({ one, many }) => ({
765
+ // A tool belongs to one project
766
+ project: one(projects, {
767
+ fields: [tools.tenantId, tools.projectId],
768
+ references: [projects.tenantId, projects.id]
769
+ }),
770
+ // A tool can be used by many agents through agent-tool relations
771
+ agentRelations: many(agentToolRelations),
772
+ // A tool may have one credential reference
773
+ credentialReference: one(credentialReferences, {
774
+ fields: [tools.credentialReferenceId],
775
+ references: [credentialReferences.id]
776
+ })
777
+ }));
778
+ drizzleOrm.relations(conversations, ({ one, many }) => ({
779
+ // A conversation belongs to one project
780
+ project: one(projects, {
781
+ fields: [conversations.tenantId, conversations.projectId],
782
+ references: [projects.tenantId, projects.id]
783
+ }),
784
+ // A conversation has many messages
785
+ messages: many(messages),
786
+ // A conversation has one active agent
787
+ activeAgent: one(agents, {
788
+ fields: [conversations.activeAgentId],
789
+ references: [agents.id]
790
+ })
791
+ }));
792
+ drizzleOrm.relations(messages, ({ one, many }) => ({
793
+ // A message belongs to one conversation
794
+ conversation: one(conversations, {
795
+ fields: [messages.conversationId],
796
+ references: [conversations.id]
797
+ }),
798
+ // Legacy agent association (consider deprecating)
799
+ agent: one(agents, {
800
+ fields: [messages.agentId],
801
+ references: [agents.id],
802
+ relationName: "associatedAgent"
803
+ }),
804
+ // Sender tracking relations
805
+ fromAgent: one(agents, {
806
+ fields: [messages.fromAgentId],
807
+ references: [agents.id],
808
+ relationName: "sentMessages"
809
+ }),
810
+ // Recipient tracking relations
811
+ toAgent: one(agents, {
812
+ fields: [messages.toAgentId],
813
+ references: [agents.id],
814
+ relationName: "receivedMessages"
815
+ }),
816
+ // External agent sender tracking relations
817
+ fromExternalAgent: one(externalAgents, {
818
+ fields: [messages.fromExternalAgentId],
819
+ references: [externalAgents.id],
820
+ relationName: "receivedExternalMessages"
821
+ }),
822
+ // External agent recipient tracking relations
823
+ toExternalAgent: one(externalAgents, {
824
+ fields: [messages.toExternalAgentId],
825
+ references: [externalAgents.id],
826
+ relationName: "sentExternalMessages"
827
+ }),
828
+ // A message may be associated with a task
829
+ task: one(tasks, {
830
+ fields: [messages.taskId],
831
+ references: [tasks.id]
832
+ }),
833
+ // A message may have a parent message (for threading)
834
+ parentMessage: one(messages, {
835
+ fields: [messages.parentMessageId],
836
+ references: [messages.id],
837
+ relationName: "parentChild"
838
+ }),
839
+ // A message may have child messages
840
+ childMessages: many(messages, {
841
+ relationName: "parentChild"
842
+ })
843
+ }));
844
+ drizzleOrm.relations(artifactComponents, ({ many }) => ({
845
+ // An artifact component can be associated with many agents
846
+ agentRelations: many(agentArtifactComponents)
847
+ }));
848
+ drizzleOrm.relations(agentArtifactComponents, ({ one }) => ({
849
+ // An agent-artifact component relation belongs to one agent
850
+ agent: one(agents, {
851
+ fields: [agentArtifactComponents.agentId],
852
+ references: [agents.id]
853
+ }),
854
+ // An agent-artifact component relation belongs to one artifact component
855
+ artifactComponent: one(artifactComponents, {
856
+ fields: [agentArtifactComponents.artifactComponentId],
857
+ references: [artifactComponents.id]
858
+ })
859
+ }));
860
+ drizzleOrm.relations(agentRelations, ({ one }) => ({
861
+ // An agent relation belongs to one graph
862
+ graph: one(agentGraph, {
863
+ fields: [agentRelations.graphId],
864
+ references: [agentGraph.id]
865
+ }),
866
+ // An agent relation has one source agent
867
+ sourceAgent: one(agents, {
868
+ fields: [agentRelations.sourceAgentId],
869
+ references: [agents.id],
870
+ relationName: "sourceRelations"
871
+ }),
872
+ // An agent relation may have one target agent (for internal relations)
873
+ targetAgent: one(agents, {
874
+ fields: [agentRelations.targetAgentId],
875
+ references: [agents.id],
876
+ relationName: "targetRelations"
877
+ }),
878
+ // An agent relation may have one external agent (for external relations)
879
+ externalAgent: one(externalAgents, {
880
+ fields: [agentRelations.externalAgentId],
881
+ references: [externalAgents.id]
882
+ })
883
+ }));
884
+
885
+ // src/types/utility.ts
886
+ var TOOL_STATUS_VALUES = [
887
+ "healthy",
888
+ "unhealthy",
889
+ "unknown",
890
+ "disabled",
891
+ "needs_auth"
892
+ ];
893
+ var VALID_RELATION_TYPES = ["transfer", "delegate"];
894
+ var MCPTransportType = {
895
+ streamableHttp: "streamable_http",
896
+ sse: "sse"
897
+ };
898
+ var MCPServerType = {
899
+ nango: "nango",
900
+ generic: "generic"
901
+ };
902
+ var CredentialStoreType = {
903
+ memory: "memory",
904
+ keychain: "keychain",
905
+ nango: "nango"
906
+ };
907
+
908
+ // src/validation/schemas.ts
909
+ var StopWhenSchema = zodOpenapi.z.object({
910
+ transferCountIs: zodOpenapi.z.number().min(1).max(100).optional(),
911
+ stepCountIs: zodOpenapi.z.number().min(1).max(1e3).optional()
912
+ });
913
+ var GraphStopWhenSchema = StopWhenSchema.pick({ transferCountIs: true });
914
+ var AgentStopWhenSchema = StopWhenSchema.pick({ stepCountIs: true });
915
+ var MIN_ID_LENGTH = 1;
916
+ var MAX_ID_LENGTH = 255;
917
+ var URL_SAFE_ID_PATTERN = /^[a-zA-Z0-9\-_.]+$/;
918
+ var resourceIdSchema = zodOpenapi.z.string().min(MIN_ID_LENGTH).max(MAX_ID_LENGTH).regex(URL_SAFE_ID_PATTERN, {
919
+ message: "ID must contain only letters, numbers, hyphens, underscores, and dots"
920
+ }).openapi({
921
+ description: "Resource identifier",
922
+ example: "resource_789"
923
+ });
924
+ var ModelSettingsSchema = zodOpenapi.z.object({
925
+ model: zodOpenapi.z.string().optional(),
926
+ providerOptions: zodOpenapi.z.record(zodOpenapi.z.string(), zodOpenapi.z.unknown()).optional()
927
+ });
928
+ var ModelSchema = zodOpenapi.z.object({
929
+ base: ModelSettingsSchema.optional(),
930
+ structuredOutput: ModelSettingsSchema.optional(),
931
+ summarizer: ModelSettingsSchema.optional()
932
+ });
933
+ var ProjectModelSchema = zodOpenapi.z.object({
934
+ base: ModelSettingsSchema,
935
+ structuredOutput: ModelSettingsSchema.optional(),
936
+ summarizer: ModelSettingsSchema.optional()
937
+ });
938
+ var createApiSchema = (schema) => schema.omit({ tenantId: true, projectId: true });
939
+ var createApiInsertSchema = (schema) => schema.omit({ tenantId: true, projectId: true });
940
+ var createApiUpdateSchema = (schema) => schema.omit({ tenantId: true, projectId: true }).partial();
941
+ var AgentSelectSchema = drizzleZod.createSelectSchema(agents);
942
+ var AgentInsertSchema = drizzleZod.createInsertSchema(agents).extend({
943
+ id: resourceIdSchema,
944
+ models: ModelSchema.optional()
945
+ });
946
+ var AgentUpdateSchema = AgentInsertSchema.partial();
947
+ var AgentApiSelectSchema = createApiSchema(AgentSelectSchema);
948
+ var AgentApiInsertSchema = createApiInsertSchema(AgentInsertSchema);
949
+ var AgentApiUpdateSchema = createApiUpdateSchema(AgentUpdateSchema);
950
+ var AgentRelationSelectSchema = drizzleZod.createSelectSchema(agentRelations);
951
+ var AgentRelationInsertSchema = drizzleZod.createInsertSchema(agentRelations).extend({
952
+ id: resourceIdSchema,
953
+ graphId: resourceIdSchema,
954
+ sourceAgentId: resourceIdSchema,
955
+ targetAgentId: resourceIdSchema.optional(),
956
+ externalAgentId: resourceIdSchema.optional()
957
+ });
958
+ var AgentRelationUpdateSchema = AgentRelationInsertSchema.partial();
959
+ var AgentRelationApiSelectSchema = createApiSchema(AgentRelationSelectSchema);
960
+ var AgentRelationApiInsertSchema = createApiInsertSchema(AgentRelationInsertSchema).extend({
961
+ relationType: zodOpenapi.z.enum(VALID_RELATION_TYPES)
962
+ }).refine(
963
+ (data) => {
964
+ const hasTarget = data.targetAgentId != null;
965
+ const hasExternal = data.externalAgentId != null;
966
+ return hasTarget !== hasExternal;
967
+ },
968
+ {
969
+ message: "Must specify exactly one of targetAgentId or externalAgentId",
970
+ path: ["targetAgentId", "externalAgentId"]
971
+ }
972
+ );
973
+ var AgentRelationApiUpdateSchema = createApiUpdateSchema(AgentRelationUpdateSchema).extend({
974
+ relationType: zodOpenapi.z.enum(VALID_RELATION_TYPES).optional()
975
+ }).refine(
976
+ (data) => {
977
+ const hasTarget = data.targetAgentId != null;
978
+ const hasExternal = data.externalAgentId != null;
979
+ if (!hasTarget && !hasExternal) {
980
+ return true;
981
+ }
982
+ return hasTarget !== hasExternal;
983
+ },
984
+ {
985
+ message: "Must specify exactly one of targetAgentId or externalAgentId when updating agent relationships",
986
+ path: ["targetAgentId", "externalAgentId"]
987
+ }
988
+ );
989
+ var AgentRelationQuerySchema = zodOpenapi.z.object({
990
+ sourceAgentId: zodOpenapi.z.string().optional(),
991
+ targetAgentId: zodOpenapi.z.string().optional(),
992
+ externalAgentId: zodOpenapi.z.string().optional()
993
+ });
994
+ var ExternalAgentRelationInsertSchema = drizzleZod.createInsertSchema(agentRelations).extend({
995
+ id: resourceIdSchema,
996
+ graphId: resourceIdSchema,
997
+ sourceAgentId: resourceIdSchema,
998
+ externalAgentId: resourceIdSchema
999
+ });
1000
+ var ExternalAgentRelationApiInsertSchema = createApiInsertSchema(
1001
+ ExternalAgentRelationInsertSchema
1002
+ );
1003
+ var AgentGraphSelectSchema = drizzleZod.createSelectSchema(agentGraph);
1004
+ var AgentGraphInsertSchema = drizzleZod.createInsertSchema(agentGraph).extend({
1005
+ id: resourceIdSchema
1006
+ });
1007
+ var AgentGraphUpdateSchema = AgentGraphInsertSchema.partial();
1008
+ var AgentGraphApiSelectSchema = createApiSchema(AgentGraphSelectSchema);
1009
+ var AgentGraphApiInsertSchema = createApiInsertSchema(AgentGraphInsertSchema).extend({
1010
+ id: resourceIdSchema.optional()
1011
+ });
1012
+ var AgentGraphApiUpdateSchema = createApiUpdateSchema(AgentGraphUpdateSchema);
1013
+ var TaskSelectSchema = drizzleZod.createSelectSchema(tasks);
1014
+ var TaskInsertSchema = drizzleZod.createInsertSchema(tasks).extend({
1015
+ id: resourceIdSchema,
1016
+ conversationId: resourceIdSchema.optional()
1017
+ });
1018
+ var TaskUpdateSchema = TaskInsertSchema.partial();
1019
+ var TaskApiSelectSchema = createApiSchema(TaskSelectSchema);
1020
+ var TaskApiInsertSchema = createApiInsertSchema(TaskInsertSchema);
1021
+ var TaskApiUpdateSchema = createApiUpdateSchema(TaskUpdateSchema);
1022
+ var TaskRelationSelectSchema = drizzleZod.createSelectSchema(taskRelations);
1023
+ var TaskRelationInsertSchema = drizzleZod.createInsertSchema(taskRelations).extend({
1024
+ id: resourceIdSchema,
1025
+ parentTaskId: resourceIdSchema,
1026
+ childTaskId: resourceIdSchema
1027
+ });
1028
+ var TaskRelationUpdateSchema = TaskRelationInsertSchema.partial();
1029
+ var TaskRelationApiSelectSchema = createApiSchema(TaskRelationSelectSchema);
1030
+ var TaskRelationApiInsertSchema = createApiInsertSchema(TaskRelationInsertSchema);
1031
+ var TaskRelationApiUpdateSchema = createApiUpdateSchema(TaskRelationUpdateSchema);
1032
+ var imageUrlSchema = zodOpenapi.z.string().optional().refine(
1033
+ (url) => {
1034
+ if (!url) return true;
1035
+ if (url.startsWith("data:image/")) {
1036
+ const base64Part = url.split(",")[1];
1037
+ if (!base64Part) return false;
1038
+ return base64Part.length < 14e5;
1039
+ }
1040
+ try {
1041
+ const parsed = new URL(url);
1042
+ return parsed.protocol === "http:" || parsed.protocol === "https:";
1043
+ } catch {
1044
+ return false;
1045
+ }
1046
+ },
1047
+ {
1048
+ message: "Image URL must be a valid HTTP(S) URL or a base64 data URL (max 1MB)"
1049
+ }
1050
+ );
1051
+ var McpTransportConfigSchema = zodOpenapi.z.object({
1052
+ type: zodOpenapi.z.enum(MCPTransportType),
1053
+ requestInit: zodOpenapi.z.record(zodOpenapi.z.string(), zodOpenapi.z.unknown()).optional(),
1054
+ eventSourceInit: zodOpenapi.z.record(zodOpenapi.z.string(), zodOpenapi.z.unknown()).optional(),
1055
+ reconnectionOptions: zodOpenapi.z.custom().optional(),
1056
+ sessionId: zodOpenapi.z.string().optional()
1057
+ });
1058
+ var ToolStatusSchema = zodOpenapi.z.enum(TOOL_STATUS_VALUES);
1059
+ var McpToolDefinitionSchema = zodOpenapi.z.object({
1060
+ name: zodOpenapi.z.string(),
1061
+ description: zodOpenapi.z.string().optional(),
1062
+ inputSchema: zodOpenapi.z.record(zodOpenapi.z.string(), zodOpenapi.z.unknown()).optional()
1063
+ });
1064
+ var ToolSelectSchema = drizzleZod.createSelectSchema(tools);
1065
+ var ToolInsertSchema = drizzleZod.createInsertSchema(tools).extend({
1066
+ id: resourceIdSchema,
1067
+ imageUrl: imageUrlSchema
1068
+ });
1069
+ var ConversationSelectSchema = drizzleZod.createSelectSchema(conversations);
1070
+ var ConversationInsertSchema = drizzleZod.createInsertSchema(conversations).extend({
1071
+ id: resourceIdSchema,
1072
+ contextConfigId: resourceIdSchema.optional()
1073
+ });
1074
+ var ConversationUpdateSchema = ConversationInsertSchema.partial();
1075
+ var ConversationApiSelectSchema = createApiSchema(ConversationSelectSchema);
1076
+ var ConversationApiInsertSchema = createApiInsertSchema(ConversationInsertSchema);
1077
+ var ConversationApiUpdateSchema = createApiUpdateSchema(ConversationUpdateSchema);
1078
+ var MessageSelectSchema = drizzleZod.createSelectSchema(messages);
1079
+ var MessageInsertSchema = drizzleZod.createInsertSchema(messages).extend({
1080
+ id: resourceIdSchema,
1081
+ conversationId: resourceIdSchema,
1082
+ taskId: resourceIdSchema.optional()
1083
+ });
1084
+ var MessageUpdateSchema = MessageInsertSchema.partial();
1085
+ var MessageApiSelectSchema = createApiSchema(MessageSelectSchema);
1086
+ var MessageApiInsertSchema = createApiInsertSchema(MessageInsertSchema);
1087
+ var MessageApiUpdateSchema = createApiUpdateSchema(MessageUpdateSchema);
1088
+ var ContextCacheSelectSchema = drizzleZod.createSelectSchema(contextCache);
1089
+ var ContextCacheInsertSchema = drizzleZod.createInsertSchema(contextCache);
1090
+ var ContextCacheUpdateSchema = ContextCacheInsertSchema.partial();
1091
+ var ContextCacheApiSelectSchema = createApiSchema(ContextCacheSelectSchema);
1092
+ var ContextCacheApiInsertSchema = createApiInsertSchema(ContextCacheInsertSchema);
1093
+ var ContextCacheApiUpdateSchema = createApiUpdateSchema(ContextCacheUpdateSchema);
1094
+ var DataComponentSelectSchema = drizzleZod.createSelectSchema(dataComponents);
1095
+ var DataComponentInsertSchema = drizzleZod.createInsertSchema(dataComponents).extend({
1096
+ id: resourceIdSchema
1097
+ });
1098
+ var DataComponentBaseSchema = DataComponentInsertSchema.omit({
1099
+ createdAt: true,
1100
+ updatedAt: true
1101
+ });
1102
+ var DataComponentUpdateSchema = DataComponentInsertSchema.partial();
1103
+ var DataComponentApiSelectSchema = createApiSchema(DataComponentSelectSchema);
1104
+ var DataComponentApiInsertSchema = createApiInsertSchema(DataComponentInsertSchema);
1105
+ var DataComponentApiUpdateSchema = createApiUpdateSchema(DataComponentUpdateSchema);
1106
+ var AgentDataComponentSelectSchema = drizzleZod.createSelectSchema(agentDataComponents);
1107
+ var AgentDataComponentInsertSchema = drizzleZod.createInsertSchema(agentDataComponents);
1108
+ var AgentDataComponentUpdateSchema = AgentDataComponentInsertSchema.partial();
1109
+ var AgentDataComponentApiSelectSchema = createApiSchema(AgentDataComponentSelectSchema);
1110
+ var AgentDataComponentApiInsertSchema = createApiInsertSchema(
1111
+ AgentDataComponentInsertSchema
1112
+ );
1113
+ var AgentDataComponentApiUpdateSchema = createApiUpdateSchema(
1114
+ AgentDataComponentUpdateSchema
1115
+ );
1116
+ var ArtifactComponentSelectSchema = drizzleZod.createSelectSchema(artifactComponents);
1117
+ var ArtifactComponentInsertSchema = drizzleZod.createInsertSchema(artifactComponents).extend({
1118
+ id: resourceIdSchema
1119
+ });
1120
+ var ArtifactComponentUpdateSchema = ArtifactComponentInsertSchema.partial();
1121
+ var ArtifactComponentApiSelectSchema = createApiSchema(ArtifactComponentSelectSchema);
1122
+ var ArtifactComponentApiInsertSchema = ArtifactComponentInsertSchema.omit({
1123
+ tenantId: true,
1124
+ projectId: true,
1125
+ createdAt: true,
1126
+ updatedAt: true
1127
+ }).extend({
1128
+ id: resourceIdSchema.optional()
1129
+ });
1130
+ var ArtifactComponentApiUpdateSchema = createApiUpdateSchema(
1131
+ ArtifactComponentUpdateSchema
1132
+ );
1133
+ var AgentArtifactComponentSelectSchema = drizzleZod.createSelectSchema(agentArtifactComponents);
1134
+ var AgentArtifactComponentInsertSchema = drizzleZod.createInsertSchema(
1135
+ agentArtifactComponents
1136
+ ).extend({
1137
+ id: resourceIdSchema,
1138
+ agentId: resourceIdSchema,
1139
+ artifactComponentId: resourceIdSchema
1140
+ });
1141
+ var AgentArtifactComponentUpdateSchema = AgentArtifactComponentInsertSchema.partial();
1142
+ var AgentArtifactComponentApiSelectSchema = createApiSchema(
1143
+ AgentArtifactComponentSelectSchema
1144
+ );
1145
+ var AgentArtifactComponentApiInsertSchema = AgentArtifactComponentInsertSchema.omit({
1146
+ tenantId: true,
1147
+ projectId: true,
1148
+ id: true,
1149
+ createdAt: true
1150
+ });
1151
+ var AgentArtifactComponentApiUpdateSchema = createApiUpdateSchema(
1152
+ AgentArtifactComponentUpdateSchema
1153
+ );
1154
+ var ExternalAgentSelectSchema = drizzleZod.createSelectSchema(externalAgents).extend({
1155
+ credentialReferenceId: zodOpenapi.z.string().nullable().optional(),
1156
+ headers: zodOpenapi.z.record(zodOpenapi.z.string(), zodOpenapi.z.string()).nullable().optional()
1157
+ });
1158
+ var ExternalAgentInsertSchema = drizzleZod.createInsertSchema(externalAgents).extend({
1159
+ id: resourceIdSchema
1160
+ });
1161
+ var ExternalAgentUpdateSchema = ExternalAgentInsertSchema.partial();
1162
+ var ExternalAgentApiSelectSchema = createApiSchema(ExternalAgentSelectSchema);
1163
+ var ExternalAgentApiInsertSchema = createApiInsertSchema(ExternalAgentInsertSchema);
1164
+ var ExternalAgentApiUpdateSchema = createApiUpdateSchema(ExternalAgentUpdateSchema);
1165
+ var AllAgentSchema = zodOpenapi.z.discriminatedUnion("type", [
1166
+ AgentApiSelectSchema.extend({ type: zodOpenapi.z.literal("internal") }),
1167
+ ExternalAgentApiSelectSchema.extend({ type: zodOpenapi.z.literal("external") })
1168
+ ]);
1169
+ var ApiKeySelectSchema = drizzleZod.createSelectSchema(apiKeys);
1170
+ var ApiKeyInsertSchema = drizzleZod.createInsertSchema(apiKeys).extend({
1171
+ id: resourceIdSchema,
1172
+ graphId: resourceIdSchema
1173
+ });
1174
+ var ApiKeyUpdateSchema = ApiKeyInsertSchema.partial().omit({
1175
+ tenantId: true,
1176
+ projectId: true,
1177
+ id: true,
1178
+ publicId: true,
1179
+ keyHash: true,
1180
+ keyPrefix: true,
1181
+ createdAt: true
1182
+ });
1183
+ var ApiKeyApiSelectSchema = ApiKeySelectSchema.omit({
1184
+ tenantId: true,
1185
+ projectId: true,
1186
+ keyHash: true
1187
+ // Never expose the hash
1188
+ });
1189
+ var ApiKeyApiCreationResponseSchema = zodOpenapi.z.object({
1190
+ data: zodOpenapi.z.object({
1191
+ apiKey: ApiKeyApiSelectSchema,
1192
+ key: zodOpenapi.z.string().describe("The full API key (shown only once)")
1193
+ })
1194
+ });
1195
+ var ApiKeyApiInsertSchema = ApiKeyInsertSchema.omit({
1196
+ tenantId: true,
1197
+ projectId: true,
1198
+ id: true,
1199
+ // Auto-generated
1200
+ publicId: true,
1201
+ // Auto-generated
1202
+ keyHash: true,
1203
+ // Auto-generated
1204
+ keyPrefix: true,
1205
+ // Auto-generated
1206
+ lastUsedAt: true
1207
+ // Not set on creation
1208
+ });
1209
+ var ApiKeyApiUpdateSchema = ApiKeyUpdateSchema;
1210
+ var CredentialReferenceSelectSchema = zodOpenapi.z.object({
1211
+ id: zodOpenapi.z.string(),
1212
+ tenantId: zodOpenapi.z.string(),
1213
+ projectId: zodOpenapi.z.string(),
1214
+ type: zodOpenapi.z.string(),
1215
+ credentialStoreId: zodOpenapi.z.string(),
1216
+ retrievalParams: zodOpenapi.z.record(zodOpenapi.z.string(), zodOpenapi.z.unknown()).nullish(),
1217
+ createdAt: zodOpenapi.z.string(),
1218
+ updatedAt: zodOpenapi.z.string()
1219
+ });
1220
+ var CredentialReferenceInsertSchema = zodOpenapi.z.object({
1221
+ id: resourceIdSchema,
1222
+ tenantId: zodOpenapi.z.string(),
1223
+ projectId: zodOpenapi.z.string(),
1224
+ type: zodOpenapi.z.string(),
1225
+ credentialStoreId: resourceIdSchema,
1226
+ retrievalParams: zodOpenapi.z.record(zodOpenapi.z.string(), zodOpenapi.z.unknown()).nullish()
1227
+ });
1228
+ var CredentialReferenceUpdateSchema = CredentialReferenceInsertSchema.partial();
1229
+ var CredentialReferenceApiSelectSchema = createApiSchema(
1230
+ CredentialReferenceSelectSchema
1231
+ ).extend({
1232
+ type: zodOpenapi.z.enum(CredentialStoreType)
1233
+ });
1234
+ var CredentialReferenceApiInsertSchema = createApiInsertSchema(
1235
+ CredentialReferenceInsertSchema
1236
+ ).extend({
1237
+ type: zodOpenapi.z.enum(CredentialStoreType)
1238
+ });
1239
+ var CredentialReferenceApiUpdateSchema = createApiUpdateSchema(
1240
+ CredentialReferenceUpdateSchema
1241
+ ).extend({
1242
+ type: zodOpenapi.z.enum(CredentialStoreType).optional()
1243
+ });
1244
+ var McpToolSchema = ToolInsertSchema.extend({
1245
+ imageUrl: imageUrlSchema,
1246
+ status: ToolStatusSchema.default("unknown"),
1247
+ lastHealthCheck: zodOpenapi.z.date().optional(),
1248
+ lastToolsSync: zodOpenapi.z.date().optional(),
1249
+ version: zodOpenapi.z.string().optional(),
1250
+ createdAt: zodOpenapi.z.date(),
1251
+ updatedAt: zodOpenapi.z.date()
1252
+ });
1253
+ var MCPToolConfigSchema = McpToolSchema.omit({
1254
+ config: true,
1255
+ tenantId: true,
1256
+ projectId: true,
1257
+ status: true,
1258
+ lastHealthCheck: true,
1259
+ lastToolsSync: true,
1260
+ version: true,
1261
+ createdAt: true,
1262
+ updatedAt: true,
1263
+ credentialReferenceId: true
1264
+ }).extend({
1265
+ tenantId: zodOpenapi.z.string().optional(),
1266
+ projectId: zodOpenapi.z.string().optional(),
1267
+ description: zodOpenapi.z.string().optional(),
1268
+ serverUrl: zodOpenapi.z.url(),
1269
+ activeTools: zodOpenapi.z.array(zodOpenapi.z.string()).optional(),
1270
+ mcpType: zodOpenapi.z.enum(MCPServerType).optional(),
1271
+ transport: McpTransportConfigSchema.optional(),
1272
+ credential: CredentialReferenceApiInsertSchema.optional()
1273
+ });
1274
+ var ToolUpdateSchema = ToolInsertSchema.partial();
1275
+ var ToolApiSelectSchema = createApiSchema(ToolSelectSchema);
1276
+ var ToolApiInsertSchema = createApiInsertSchema(ToolInsertSchema);
1277
+ var ToolApiUpdateSchema = createApiUpdateSchema(ToolUpdateSchema);
1278
+ var FetchConfigSchema = zodOpenapi.z.object({
1279
+ url: zodOpenapi.z.string().min(1, "URL is required"),
1280
+ method: zodOpenapi.z.enum(["GET", "POST", "PUT", "DELETE", "PATCH"]).optional().default("GET"),
1281
+ headers: zodOpenapi.z.record(zodOpenapi.z.string(), zodOpenapi.z.string()).optional(),
1282
+ body: zodOpenapi.z.record(zodOpenapi.z.string(), zodOpenapi.z.unknown()).optional(),
1283
+ transform: zodOpenapi.z.string().optional(),
1284
+ // JSONPath or JS transform function
1285
+ timeout: zodOpenapi.z.number().min(0).optional().default(1e4).optional()
1286
+ });
1287
+ var FetchDefinitionSchema = zodOpenapi.z.object({
1288
+ id: zodOpenapi.z.string().min(1, "Fetch definition ID is required"),
1289
+ name: zodOpenapi.z.string().optional(),
1290
+ trigger: zodOpenapi.z.enum(["initialization", "invocation"]),
1291
+ fetchConfig: FetchConfigSchema,
1292
+ responseSchema: zodOpenapi.z.any().optional(),
1293
+ // JSON Schema for validating HTTP response
1294
+ defaultValue: zodOpenapi.z.unknown().optional(),
1295
+ credential: CredentialReferenceApiInsertSchema.optional()
1296
+ });
1297
+ var ContextConfigSelectSchema = drizzleZod.createSelectSchema(contextConfigs).extend({
1298
+ requestContextSchema: zodOpenapi.z.unknown().optional()
1299
+ });
1300
+ var ContextConfigInsertSchema = drizzleZod.createInsertSchema(contextConfigs).extend({
1301
+ id: resourceIdSchema,
1302
+ requestContextSchema: zodOpenapi.z.unknown().optional()
1303
+ }).omit({
1304
+ createdAt: true,
1305
+ updatedAt: true
1306
+ });
1307
+ var ContextConfigUpdateSchema = ContextConfigInsertSchema.partial();
1308
+ var ContextConfigApiSelectSchema = createApiSchema(ContextConfigSelectSchema);
1309
+ var ContextConfigApiInsertSchema = createApiInsertSchema(ContextConfigInsertSchema);
1310
+ var ContextConfigApiUpdateSchema = createApiUpdateSchema(ContextConfigUpdateSchema);
1311
+ var AgentToolRelationSelectSchema = drizzleZod.createSelectSchema(agentToolRelations);
1312
+ var AgentToolRelationInsertSchema = drizzleZod.createInsertSchema(agentToolRelations).extend({
1313
+ id: resourceIdSchema,
1314
+ agentId: resourceIdSchema,
1315
+ toolId: resourceIdSchema,
1316
+ selectedTools: zodOpenapi.z.array(zodOpenapi.z.string()).nullish()
1317
+ });
1318
+ var AgentToolRelationUpdateSchema = AgentToolRelationInsertSchema.partial();
1319
+ var AgentToolRelationApiSelectSchema = createApiSchema(AgentToolRelationSelectSchema);
1320
+ var AgentToolRelationApiInsertSchema = createApiInsertSchema(
1321
+ AgentToolRelationInsertSchema
1322
+ );
1323
+ var AgentToolRelationApiUpdateSchema = createApiUpdateSchema(
1324
+ AgentToolRelationUpdateSchema
1325
+ );
1326
+ var LedgerArtifactSelectSchema = drizzleZod.createSelectSchema(ledgerArtifacts);
1327
+ var LedgerArtifactInsertSchema = drizzleZod.createInsertSchema(ledgerArtifacts);
1328
+ var LedgerArtifactUpdateSchema = LedgerArtifactInsertSchema.partial();
1329
+ var LedgerArtifactApiSelectSchema = createApiSchema(LedgerArtifactSelectSchema);
1330
+ var LedgerArtifactApiInsertSchema = createApiInsertSchema(LedgerArtifactInsertSchema);
1331
+ var LedgerArtifactApiUpdateSchema = createApiUpdateSchema(LedgerArtifactUpdateSchema);
1332
+ var StatusComponentSchema = zodOpenapi.z.object({
1333
+ type: zodOpenapi.z.string(),
1334
+ description: zodOpenapi.z.string().optional(),
1335
+ detailsSchema: zodOpenapi.z.object({
1336
+ type: zodOpenapi.z.literal("object"),
1337
+ properties: zodOpenapi.z.record(zodOpenapi.z.string(), zodOpenapi.z.any()),
1338
+ required: zodOpenapi.z.array(zodOpenapi.z.string()).optional()
1339
+ }).optional()
1340
+ });
1341
+ var StatusUpdateSchema = zodOpenapi.z.object({
1342
+ enabled: zodOpenapi.z.boolean().optional(),
1343
+ numEvents: zodOpenapi.z.number().min(1).max(100).optional(),
1344
+ timeInSeconds: zodOpenapi.z.number().min(1).max(600).optional(),
1345
+ prompt: zodOpenapi.z.string().max(2e3, "Custom prompt cannot exceed 2000 characters").optional(),
1346
+ statusComponents: zodOpenapi.z.array(StatusComponentSchema).optional()
1347
+ });
1348
+ var FullGraphAgentInsertSchema = AgentApiInsertSchema.extend({
1349
+ tools: zodOpenapi.z.array(zodOpenapi.z.string()),
1350
+ selectedTools: zodOpenapi.z.record(zodOpenapi.z.string(), zodOpenapi.z.array(zodOpenapi.z.string())).optional(),
1351
+ dataComponents: zodOpenapi.z.array(zodOpenapi.z.string()).optional(),
1352
+ artifactComponents: zodOpenapi.z.array(zodOpenapi.z.string()).optional(),
1353
+ canTransferTo: zodOpenapi.z.array(zodOpenapi.z.string()).optional(),
1354
+ canDelegateTo: zodOpenapi.z.array(zodOpenapi.z.string()).optional()
1355
+ });
1356
+ var FullGraphDefinitionSchema = AgentGraphApiInsertSchema.extend({
1357
+ agents: zodOpenapi.z.record(zodOpenapi.z.string(), zodOpenapi.z.union([FullGraphAgentInsertSchema, ExternalAgentApiInsertSchema])),
1358
+ tools: zodOpenapi.z.record(zodOpenapi.z.string(), ToolApiInsertSchema).optional(),
1359
+ credentialReferences: zodOpenapi.z.array(CredentialReferenceApiInsertSchema).optional(),
1360
+ dataComponents: zodOpenapi.z.record(zodOpenapi.z.string(), DataComponentApiInsertSchema).optional(),
1361
+ artifactComponents: zodOpenapi.z.record(zodOpenapi.z.string(), ArtifactComponentApiInsertSchema).optional(),
1362
+ contextConfig: zodOpenapi.z.optional(ContextConfigApiInsertSchema),
1363
+ statusUpdates: zodOpenapi.z.optional(StatusUpdateSchema),
1364
+ models: ModelSchema.optional(),
1365
+ stopWhen: GraphStopWhenSchema.optional(),
1366
+ graphPrompt: zodOpenapi.z.string().max(5e3, "Graph prompt cannot exceed 5000 characters").optional()
1367
+ });
1368
+ var GraphWithinContextOfProjectSchema = AgentGraphApiInsertSchema.extend({
1369
+ agents: zodOpenapi.z.record(zodOpenapi.z.string(), zodOpenapi.z.union([FullGraphAgentInsertSchema, ExternalAgentApiInsertSchema])),
1370
+ models: ModelSchema.optional(),
1371
+ stopWhen: GraphStopWhenSchema.optional(),
1372
+ graphPrompt: zodOpenapi.z.string().max(5e3, "Graph prompt cannot exceed 5000 characters").optional()
1373
+ });
1374
+ var PaginationSchema = zodOpenapi.z.object({
1375
+ page: zodOpenapi.z.coerce.number().min(1).default(1),
1376
+ limit: zodOpenapi.z.coerce.number().min(1).max(100).default(10),
1377
+ total: zodOpenapi.z.number(),
1378
+ pages: zodOpenapi.z.number()
1379
+ });
1380
+ var ListResponseSchema = (itemSchema) => zodOpenapi.z.object({
1381
+ data: zodOpenapi.z.array(itemSchema),
1382
+ pagination: PaginationSchema
1383
+ });
1384
+ var SingleResponseSchema = (itemSchema) => zodOpenapi.z.object({
1385
+ data: itemSchema
1386
+ });
1387
+ var ErrorResponseSchema = zodOpenapi.z.object({
1388
+ error: zodOpenapi.z.string(),
1389
+ message: zodOpenapi.z.string().optional(),
1390
+ details: zodOpenapi.z.unknown().optional()
1391
+ });
1392
+ var ExistsResponseSchema = zodOpenapi.z.object({
1393
+ exists: zodOpenapi.z.boolean()
1394
+ });
1395
+ var RemovedResponseSchema = zodOpenapi.z.object({
1396
+ message: zodOpenapi.z.string(),
1397
+ removed: zodOpenapi.z.boolean()
1398
+ });
1399
+ var ProjectSelectSchema = drizzleZod.createSelectSchema(projects);
1400
+ var ProjectInsertSchema = drizzleZod.createInsertSchema(projects).extend({
1401
+ models: ProjectModelSchema.optional(),
1402
+ stopWhen: StopWhenSchema.optional()
1403
+ }).omit({
1404
+ createdAt: true,
1405
+ updatedAt: true
1406
+ });
1407
+ var ProjectUpdateSchema = ProjectInsertSchema.partial();
1408
+ var ProjectApiSelectSchema = ProjectSelectSchema.omit({ tenantId: true });
1409
+ var ProjectApiInsertSchema = ProjectInsertSchema.omit({ tenantId: true });
1410
+ var ProjectApiUpdateSchema = ProjectUpdateSchema.omit({ tenantId: true });
1411
+ var FullProjectDefinitionSchema = ProjectApiInsertSchema.extend({
1412
+ graphs: zodOpenapi.z.record(zodOpenapi.z.string(), GraphWithinContextOfProjectSchema),
1413
+ tools: zodOpenapi.z.record(zodOpenapi.z.string(), ToolApiInsertSchema),
1414
+ dataComponents: zodOpenapi.z.record(zodOpenapi.z.string(), DataComponentApiInsertSchema).optional(),
1415
+ artifactComponents: zodOpenapi.z.record(zodOpenapi.z.string(), ArtifactComponentApiInsertSchema).optional(),
1416
+ contextConfig: zodOpenapi.z.record(zodOpenapi.z.string(), ContextConfigApiInsertSchema).optional(),
1417
+ statusUpdates: zodOpenapi.z.optional(StatusUpdateSchema),
1418
+ credentialReferences: zodOpenapi.z.array(CredentialReferenceApiInsertSchema).optional(),
1419
+ createdAt: zodOpenapi.z.string().optional(),
1420
+ updatedAt: zodOpenapi.z.string().optional()
1421
+ });
1422
+ var HeadersScopeSchema = zodOpenapi.z.object({
1423
+ "x-inkeep-tenant-id": zodOpenapi.z.string().optional().openapi({
1424
+ description: "Tenant identifier",
1425
+ example: "tenant_123"
1426
+ }),
1427
+ "x-inkeep-project-id": zodOpenapi.z.string().optional().openapi({
1428
+ description: "Project identifier",
1429
+ example: "project_456"
1430
+ }),
1431
+ "x-inkeep-graph-id": zodOpenapi.z.string().optional().openapi({
1432
+ description: "Graph identifier",
1433
+ example: "graph_789"
1434
+ })
1435
+ });
1436
+ var TenantParamsSchema = zodOpenapi.z.object({
1437
+ tenantId: zodOpenapi.z.string().openapi({
1438
+ description: "Tenant identifier",
1439
+ example: "tenant_123"
1440
+ })
1441
+ }).openapi("TenantParams");
1442
+ var TenantProjectParamsSchema = zodOpenapi.z.object({
1443
+ tenantId: zodOpenapi.z.string().openapi({
1444
+ description: "Tenant identifier",
1445
+ example: "tenant_123"
1446
+ }),
1447
+ projectId: zodOpenapi.z.string().openapi({
1448
+ description: "Project identifier",
1449
+ example: "project_456"
1450
+ })
1451
+ }).openapi("TenantProjectParams");
1452
+ var TenantProjectIdParamsSchema = zodOpenapi.z.object({
1453
+ tenantId: zodOpenapi.z.string().openapi({
1454
+ description: "Tenant identifier",
1455
+ example: "tenant_123"
1456
+ }),
1457
+ projectId: zodOpenapi.z.string().openapi({
1458
+ description: "Project identifier",
1459
+ example: "project_456"
1460
+ }),
1461
+ id: resourceIdSchema
1462
+ }).openapi("TenantProjectIdParams");
1463
+ var TenantIdParamsSchema = zodOpenapi.z.object({
1464
+ tenantId: zodOpenapi.z.string().openapi({
1465
+ description: "Tenant identifier",
1466
+ example: "tenant_123"
1467
+ }),
1468
+ id: resourceIdSchema
1469
+ }).openapi("TenantIdParams");
1470
+ var IdParamsSchema = zodOpenapi.z.object({
1471
+ id: resourceIdSchema
1472
+ }).openapi("IdParams");
1473
+ var PaginationQueryParamsSchema = zodOpenapi.z.object({
1474
+ page: zodOpenapi.z.coerce.number().min(1).default(1),
1475
+ limit: zodOpenapi.z.coerce.number().min(1).max(100).default(10)
1476
+ });
1477
+
1478
+ // src/validation/graphFull.ts
1479
+ function isInternalAgent(agent) {
1480
+ return "prompt" in agent;
1481
+ }
1482
+ function isExternalAgent(agent) {
1483
+ return "baseUrl" in agent;
1484
+ }
1485
+ function validateAndTypeGraphData(data) {
1486
+ return FullGraphDefinitionSchema.parse(data);
1487
+ }
1488
+ function validateToolReferences(graphData) {
1489
+ const errors = [];
1490
+ const availableToolIds = new Set(Object.keys(graphData.tools || {}));
1491
+ for (const [agentId, agentData] of Object.entries(graphData.agents)) {
1492
+ if (isInternalAgent(agentData) && agentData.tools && Array.isArray(agentData.tools)) {
1493
+ for (const toolId of agentData.tools) {
1494
+ if (!availableToolIds.has(toolId)) {
1495
+ errors.push(`Agent '${agentId}' references non-existent tool '${toolId}'`);
1496
+ }
1497
+ }
1498
+ }
1499
+ }
1500
+ if (errors.length > 0) {
1501
+ throw new Error(`Tool reference validation failed:
1502
+ ${errors.join("\n")}`);
1503
+ }
1504
+ }
1505
+ function validateDataComponentReferences(graphData) {
1506
+ const errors = [];
1507
+ const availableDataComponentIds = new Set(Object.keys(graphData.dataComponents || {}));
1508
+ for (const [agentId, agentData] of Object.entries(graphData.agents)) {
1509
+ if (isInternalAgent(agentData) && agentData.dataComponents) {
1510
+ for (const dataComponentId of agentData.dataComponents) {
1511
+ if (!availableDataComponentIds.has(dataComponentId)) {
1512
+ errors.push(
1513
+ `Agent '${agentId}' references non-existent dataComponent '${dataComponentId}'`
1514
+ );
1515
+ }
1516
+ }
1517
+ }
1518
+ }
1519
+ if (errors.length > 0) {
1520
+ throw new Error(`DataComponent reference validation failed:
1521
+ ${errors.join("\n")}`);
1522
+ }
1523
+ }
1524
+ function validateArtifactComponentReferences(graphData) {
1525
+ const errors = [];
1526
+ const availableArtifactComponentIds = new Set(Object.keys(graphData.artifactComponents || {}));
1527
+ for (const [agentId, agentData] of Object.entries(graphData.agents)) {
1528
+ if (isInternalAgent(agentData) && agentData.artifactComponents) {
1529
+ for (const artifactComponentId of agentData.artifactComponents) {
1530
+ if (!availableArtifactComponentIds.has(artifactComponentId)) {
1531
+ errors.push(
1532
+ `Agent '${agentId}' references non-existent artifactComponent '${artifactComponentId}'`
1533
+ );
1534
+ }
1535
+ }
1536
+ }
1537
+ }
1538
+ if (errors.length > 0) {
1539
+ throw new Error(`ArtifactComponent reference validation failed:
1540
+ ${errors.join("\n")}`);
1541
+ }
1542
+ }
1543
+ function validateAgentRelationships(graphData) {
1544
+ const errors = [];
1545
+ const availableAgentIds = new Set(Object.keys(graphData.agents));
1546
+ for (const [agentId, agentData] of Object.entries(graphData.agents)) {
1547
+ if (isInternalAgent(agentData)) {
1548
+ if (agentData.canTransferTo && Array.isArray(agentData.canTransferTo)) {
1549
+ for (const targetId of agentData.canTransferTo) {
1550
+ if (!availableAgentIds.has(targetId)) {
1551
+ errors.push(
1552
+ `Agent '${agentId}' has transfer target '${targetId}' that doesn't exist in graph`
1553
+ );
1554
+ }
1555
+ }
1556
+ }
1557
+ if (agentData.canDelegateTo && Array.isArray(agentData.canDelegateTo)) {
1558
+ for (const targetId of agentData.canDelegateTo) {
1559
+ if (!availableAgentIds.has(targetId)) {
1560
+ errors.push(
1561
+ `Agent '${agentId}' has delegation target '${targetId}' that doesn't exist in graph`
1562
+ );
1563
+ }
1564
+ }
1565
+ }
1566
+ }
1567
+ }
1568
+ if (errors.length > 0) {
1569
+ throw new Error(`Agent relationship validation failed:
1570
+ ${errors.join("\n")}`);
1571
+ }
1572
+ }
1573
+ function validateGraphStructure(graphData) {
1574
+ if (!graphData.agents[graphData.defaultAgentId]) {
1575
+ throw new Error(`Default agent '${graphData.defaultAgentId}' does not exist in agents`);
1576
+ }
1577
+ validateToolReferences(graphData);
1578
+ validateDataComponentReferences(graphData);
1579
+ validateArtifactComponentReferences(graphData);
1580
+ validateAgentRelationships(graphData);
1581
+ }
1582
+
1583
+ // src/validation/id-validation.ts
1584
+ function isValidResourceId(id) {
1585
+ const result = resourceIdSchema.safeParse(id);
1586
+ return result.success;
1587
+ }
1588
+ function generateIdFromName(name) {
1589
+ const id = name.toLowerCase().replace(/[^a-z0-9_-]+/g, "-").replace(/^-+|-+$/g, "").replace(/-{2,}/g, "-");
1590
+ if (!id) {
1591
+ throw new Error("Cannot generate valid ID from provided name");
1592
+ }
1593
+ const truncatedId = id.substring(0, MAX_ID_LENGTH);
1594
+ const result = resourceIdSchema.safeParse(truncatedId);
1595
+ if (!result.success) {
1596
+ throw new Error(`Generated ID "${truncatedId}" is not valid: ${result.error.message}`);
1597
+ }
1598
+ return truncatedId;
1599
+ }
1600
+
1601
+ exports.AgentApiInsertSchema = AgentApiInsertSchema;
1602
+ exports.AgentApiSelectSchema = AgentApiSelectSchema;
1603
+ exports.AgentApiUpdateSchema = AgentApiUpdateSchema;
1604
+ exports.AgentArtifactComponentApiInsertSchema = AgentArtifactComponentApiInsertSchema;
1605
+ exports.AgentArtifactComponentApiSelectSchema = AgentArtifactComponentApiSelectSchema;
1606
+ exports.AgentArtifactComponentApiUpdateSchema = AgentArtifactComponentApiUpdateSchema;
1607
+ exports.AgentArtifactComponentInsertSchema = AgentArtifactComponentInsertSchema;
1608
+ exports.AgentArtifactComponentSelectSchema = AgentArtifactComponentSelectSchema;
1609
+ exports.AgentArtifactComponentUpdateSchema = AgentArtifactComponentUpdateSchema;
1610
+ exports.AgentDataComponentApiInsertSchema = AgentDataComponentApiInsertSchema;
1611
+ exports.AgentDataComponentApiSelectSchema = AgentDataComponentApiSelectSchema;
1612
+ exports.AgentDataComponentApiUpdateSchema = AgentDataComponentApiUpdateSchema;
1613
+ exports.AgentDataComponentInsertSchema = AgentDataComponentInsertSchema;
1614
+ exports.AgentDataComponentSelectSchema = AgentDataComponentSelectSchema;
1615
+ exports.AgentDataComponentUpdateSchema = AgentDataComponentUpdateSchema;
1616
+ exports.AgentGraphApiInsertSchema = AgentGraphApiInsertSchema;
1617
+ exports.AgentGraphApiSelectSchema = AgentGraphApiSelectSchema;
1618
+ exports.AgentGraphApiUpdateSchema = AgentGraphApiUpdateSchema;
1619
+ exports.AgentGraphInsertSchema = AgentGraphInsertSchema;
1620
+ exports.AgentGraphSelectSchema = AgentGraphSelectSchema;
1621
+ exports.AgentGraphUpdateSchema = AgentGraphUpdateSchema;
1622
+ exports.AgentInsertSchema = AgentInsertSchema;
1623
+ exports.AgentRelationApiInsertSchema = AgentRelationApiInsertSchema;
1624
+ exports.AgentRelationApiSelectSchema = AgentRelationApiSelectSchema;
1625
+ exports.AgentRelationApiUpdateSchema = AgentRelationApiUpdateSchema;
1626
+ exports.AgentRelationInsertSchema = AgentRelationInsertSchema;
1627
+ exports.AgentRelationQuerySchema = AgentRelationQuerySchema;
1628
+ exports.AgentRelationSelectSchema = AgentRelationSelectSchema;
1629
+ exports.AgentRelationUpdateSchema = AgentRelationUpdateSchema;
1630
+ exports.AgentSelectSchema = AgentSelectSchema;
1631
+ exports.AgentStopWhenSchema = AgentStopWhenSchema;
1632
+ exports.AgentToolRelationApiInsertSchema = AgentToolRelationApiInsertSchema;
1633
+ exports.AgentToolRelationApiSelectSchema = AgentToolRelationApiSelectSchema;
1634
+ exports.AgentToolRelationApiUpdateSchema = AgentToolRelationApiUpdateSchema;
1635
+ exports.AgentToolRelationInsertSchema = AgentToolRelationInsertSchema;
1636
+ exports.AgentToolRelationSelectSchema = AgentToolRelationSelectSchema;
1637
+ exports.AgentToolRelationUpdateSchema = AgentToolRelationUpdateSchema;
1638
+ exports.AgentUpdateSchema = AgentUpdateSchema;
1639
+ exports.AllAgentSchema = AllAgentSchema;
1640
+ exports.ApiKeyApiCreationResponseSchema = ApiKeyApiCreationResponseSchema;
1641
+ exports.ApiKeyApiInsertSchema = ApiKeyApiInsertSchema;
1642
+ exports.ApiKeyApiSelectSchema = ApiKeyApiSelectSchema;
1643
+ exports.ApiKeyApiUpdateSchema = ApiKeyApiUpdateSchema;
1644
+ exports.ApiKeyInsertSchema = ApiKeyInsertSchema;
1645
+ exports.ApiKeySelectSchema = ApiKeySelectSchema;
1646
+ exports.ApiKeyUpdateSchema = ApiKeyUpdateSchema;
1647
+ exports.ArtifactComponentApiInsertSchema = ArtifactComponentApiInsertSchema;
1648
+ exports.ArtifactComponentApiSelectSchema = ArtifactComponentApiSelectSchema;
1649
+ exports.ArtifactComponentApiUpdateSchema = ArtifactComponentApiUpdateSchema;
1650
+ exports.ArtifactComponentInsertSchema = ArtifactComponentInsertSchema;
1651
+ exports.ArtifactComponentSelectSchema = ArtifactComponentSelectSchema;
1652
+ exports.ArtifactComponentUpdateSchema = ArtifactComponentUpdateSchema;
1653
+ exports.ContextCacheApiInsertSchema = ContextCacheApiInsertSchema;
1654
+ exports.ContextCacheApiSelectSchema = ContextCacheApiSelectSchema;
1655
+ exports.ContextCacheApiUpdateSchema = ContextCacheApiUpdateSchema;
1656
+ exports.ContextCacheInsertSchema = ContextCacheInsertSchema;
1657
+ exports.ContextCacheSelectSchema = ContextCacheSelectSchema;
1658
+ exports.ContextCacheUpdateSchema = ContextCacheUpdateSchema;
1659
+ exports.ContextConfigApiInsertSchema = ContextConfigApiInsertSchema;
1660
+ exports.ContextConfigApiSelectSchema = ContextConfigApiSelectSchema;
1661
+ exports.ContextConfigApiUpdateSchema = ContextConfigApiUpdateSchema;
1662
+ exports.ContextConfigInsertSchema = ContextConfigInsertSchema;
1663
+ exports.ContextConfigSelectSchema = ContextConfigSelectSchema;
1664
+ exports.ContextConfigUpdateSchema = ContextConfigUpdateSchema;
1665
+ exports.ConversationApiInsertSchema = ConversationApiInsertSchema;
1666
+ exports.ConversationApiSelectSchema = ConversationApiSelectSchema;
1667
+ exports.ConversationApiUpdateSchema = ConversationApiUpdateSchema;
1668
+ exports.ConversationInsertSchema = ConversationInsertSchema;
1669
+ exports.ConversationSelectSchema = ConversationSelectSchema;
1670
+ exports.ConversationUpdateSchema = ConversationUpdateSchema;
1671
+ exports.CredentialReferenceApiInsertSchema = CredentialReferenceApiInsertSchema;
1672
+ exports.CredentialReferenceApiSelectSchema = CredentialReferenceApiSelectSchema;
1673
+ exports.CredentialReferenceApiUpdateSchema = CredentialReferenceApiUpdateSchema;
1674
+ exports.CredentialReferenceInsertSchema = CredentialReferenceInsertSchema;
1675
+ exports.CredentialReferenceSelectSchema = CredentialReferenceSelectSchema;
1676
+ exports.CredentialReferenceUpdateSchema = CredentialReferenceUpdateSchema;
1677
+ exports.DataComponentApiInsertSchema = DataComponentApiInsertSchema;
1678
+ exports.DataComponentApiSelectSchema = DataComponentApiSelectSchema;
1679
+ exports.DataComponentApiUpdateSchema = DataComponentApiUpdateSchema;
1680
+ exports.DataComponentBaseSchema = DataComponentBaseSchema;
1681
+ exports.DataComponentInsertSchema = DataComponentInsertSchema;
1682
+ exports.DataComponentSelectSchema = DataComponentSelectSchema;
1683
+ exports.DataComponentUpdateSchema = DataComponentUpdateSchema;
1684
+ exports.ErrorResponseSchema = ErrorResponseSchema;
1685
+ exports.ExistsResponseSchema = ExistsResponseSchema;
1686
+ exports.ExternalAgentApiInsertSchema = ExternalAgentApiInsertSchema;
1687
+ exports.ExternalAgentApiSelectSchema = ExternalAgentApiSelectSchema;
1688
+ exports.ExternalAgentApiUpdateSchema = ExternalAgentApiUpdateSchema;
1689
+ exports.ExternalAgentInsertSchema = ExternalAgentInsertSchema;
1690
+ exports.ExternalAgentRelationApiInsertSchema = ExternalAgentRelationApiInsertSchema;
1691
+ exports.ExternalAgentRelationInsertSchema = ExternalAgentRelationInsertSchema;
1692
+ exports.ExternalAgentSelectSchema = ExternalAgentSelectSchema;
1693
+ exports.ExternalAgentUpdateSchema = ExternalAgentUpdateSchema;
1694
+ exports.FetchConfigSchema = FetchConfigSchema;
1695
+ exports.FetchDefinitionSchema = FetchDefinitionSchema;
1696
+ exports.FullGraphAgentInsertSchema = FullGraphAgentInsertSchema;
1697
+ exports.FullGraphDefinitionSchema = FullGraphDefinitionSchema;
1698
+ exports.FullProjectDefinitionSchema = FullProjectDefinitionSchema;
1699
+ exports.GraphStopWhenSchema = GraphStopWhenSchema;
1700
+ exports.GraphWithinContextOfProjectSchema = GraphWithinContextOfProjectSchema;
1701
+ exports.HeadersScopeSchema = HeadersScopeSchema;
1702
+ exports.IdParamsSchema = IdParamsSchema;
1703
+ exports.LedgerArtifactApiInsertSchema = LedgerArtifactApiInsertSchema;
1704
+ exports.LedgerArtifactApiSelectSchema = LedgerArtifactApiSelectSchema;
1705
+ exports.LedgerArtifactApiUpdateSchema = LedgerArtifactApiUpdateSchema;
1706
+ exports.LedgerArtifactInsertSchema = LedgerArtifactInsertSchema;
1707
+ exports.LedgerArtifactSelectSchema = LedgerArtifactSelectSchema;
1708
+ exports.LedgerArtifactUpdateSchema = LedgerArtifactUpdateSchema;
1709
+ exports.ListResponseSchema = ListResponseSchema;
1710
+ exports.MAX_ID_LENGTH = MAX_ID_LENGTH;
1711
+ exports.MCPToolConfigSchema = MCPToolConfigSchema;
1712
+ exports.MIN_ID_LENGTH = MIN_ID_LENGTH;
1713
+ exports.McpToolDefinitionSchema = McpToolDefinitionSchema;
1714
+ exports.McpToolSchema = McpToolSchema;
1715
+ exports.McpTransportConfigSchema = McpTransportConfigSchema;
1716
+ exports.MessageApiInsertSchema = MessageApiInsertSchema;
1717
+ exports.MessageApiSelectSchema = MessageApiSelectSchema;
1718
+ exports.MessageApiUpdateSchema = MessageApiUpdateSchema;
1719
+ exports.MessageInsertSchema = MessageInsertSchema;
1720
+ exports.MessageSelectSchema = MessageSelectSchema;
1721
+ exports.MessageUpdateSchema = MessageUpdateSchema;
1722
+ exports.ModelSchema = ModelSchema;
1723
+ exports.ModelSettingsSchema = ModelSettingsSchema;
1724
+ exports.PaginationQueryParamsSchema = PaginationQueryParamsSchema;
1725
+ exports.PaginationSchema = PaginationSchema;
1726
+ exports.ProjectApiInsertSchema = ProjectApiInsertSchema;
1727
+ exports.ProjectApiSelectSchema = ProjectApiSelectSchema;
1728
+ exports.ProjectApiUpdateSchema = ProjectApiUpdateSchema;
1729
+ exports.ProjectInsertSchema = ProjectInsertSchema;
1730
+ exports.ProjectModelSchema = ProjectModelSchema;
1731
+ exports.ProjectSelectSchema = ProjectSelectSchema;
1732
+ exports.ProjectUpdateSchema = ProjectUpdateSchema;
1733
+ exports.RemovedResponseSchema = RemovedResponseSchema;
1734
+ exports.SingleResponseSchema = SingleResponseSchema;
1735
+ exports.StatusComponentSchema = StatusComponentSchema;
1736
+ exports.StatusUpdateSchema = StatusUpdateSchema;
1737
+ exports.StopWhenSchema = StopWhenSchema;
1738
+ exports.TaskApiInsertSchema = TaskApiInsertSchema;
1739
+ exports.TaskApiSelectSchema = TaskApiSelectSchema;
1740
+ exports.TaskApiUpdateSchema = TaskApiUpdateSchema;
1741
+ exports.TaskInsertSchema = TaskInsertSchema;
1742
+ exports.TaskRelationApiInsertSchema = TaskRelationApiInsertSchema;
1743
+ exports.TaskRelationApiSelectSchema = TaskRelationApiSelectSchema;
1744
+ exports.TaskRelationApiUpdateSchema = TaskRelationApiUpdateSchema;
1745
+ exports.TaskRelationInsertSchema = TaskRelationInsertSchema;
1746
+ exports.TaskRelationSelectSchema = TaskRelationSelectSchema;
1747
+ exports.TaskRelationUpdateSchema = TaskRelationUpdateSchema;
1748
+ exports.TaskSelectSchema = TaskSelectSchema;
1749
+ exports.TaskUpdateSchema = TaskUpdateSchema;
1750
+ exports.TenantIdParamsSchema = TenantIdParamsSchema;
1751
+ exports.TenantParamsSchema = TenantParamsSchema;
1752
+ exports.TenantProjectIdParamsSchema = TenantProjectIdParamsSchema;
1753
+ exports.TenantProjectParamsSchema = TenantProjectParamsSchema;
1754
+ exports.ToolApiInsertSchema = ToolApiInsertSchema;
1755
+ exports.ToolApiSelectSchema = ToolApiSelectSchema;
1756
+ exports.ToolApiUpdateSchema = ToolApiUpdateSchema;
1757
+ exports.ToolInsertSchema = ToolInsertSchema;
1758
+ exports.ToolSelectSchema = ToolSelectSchema;
1759
+ exports.ToolStatusSchema = ToolStatusSchema;
1760
+ exports.ToolUpdateSchema = ToolUpdateSchema;
1761
+ exports.URL_SAFE_ID_PATTERN = URL_SAFE_ID_PATTERN;
1762
+ exports.generateIdFromName = generateIdFromName;
1763
+ exports.isExternalAgent = isExternalAgent;
1764
+ exports.isInternalAgent = isInternalAgent;
1765
+ exports.isValidResourceId = isValidResourceId;
1766
+ exports.resourceIdSchema = resourceIdSchema;
1767
+ exports.validateAgentRelationships = validateAgentRelationships;
1768
+ exports.validateAndTypeGraphData = validateAndTypeGraphData;
1769
+ exports.validateArtifactComponentReferences = validateArtifactComponentReferences;
1770
+ exports.validateDataComponentReferences = validateDataComponentReferences;
1771
+ exports.validateGraphStructure = validateGraphStructure;
1772
+ exports.validateToolReferences = validateToolReferences;