@inkeep/agents-core 0.41.2 → 0.42.0

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 (228) hide show
  1. package/dist/api-client/base-client.d.ts +87 -8
  2. package/dist/api-client/base-client.js +174 -1
  3. package/dist/api-client/eval-api-client.d.ts +47 -0
  4. package/dist/api-client/eval-api-client.js +65 -0
  5. package/dist/api-client/index.d.ts +4 -0
  6. package/dist/api-client/index.js +5 -0
  7. package/dist/api-client/manage-api-client.d.ts +34 -0
  8. package/dist/api-client/manage-api-client.js +104 -0
  9. package/dist/auth/auth.d.ts +86 -20
  10. package/dist/auth/auth.js +55 -1
  11. package/dist/auth/authz/client.d.ts +81 -0
  12. package/dist/auth/authz/client.js +189 -0
  13. package/dist/auth/authz/config.d.ts +76 -0
  14. package/dist/auth/authz/config.js +76 -0
  15. package/dist/auth/authz/index.d.ts +5 -0
  16. package/dist/auth/authz/index.js +6 -0
  17. package/dist/auth/authz/permissions.d.ts +57 -0
  18. package/dist/auth/authz/permissions.js +83 -0
  19. package/dist/auth/authz/sync.d.ts +85 -0
  20. package/dist/auth/authz/sync.js +237 -0
  21. package/dist/auth/permissions.d.ts +13 -13
  22. package/dist/auth/permissions.js +2 -181
  23. package/dist/client-exports.d.ts +8 -3
  24. package/dist/client-exports.js +3 -2
  25. package/dist/constants/context-breakdown.d.ts +61 -0
  26. package/dist/constants/context-breakdown.js +124 -0
  27. package/dist/constants/otel-attributes.d.ts +4 -0
  28. package/dist/constants/otel-attributes.js +4 -0
  29. package/dist/context/ContextConfig.d.ts +2 -2
  30. package/dist/context/ContextConfig.js +3 -3
  31. package/dist/context/TemplateEngine.js +0 -1
  32. package/dist/context/index.d.ts +1 -5
  33. package/dist/context/index.js +1 -5
  34. package/dist/credential-stuffer/CredentialStuffer.d.ts +1 -1
  35. package/dist/data-access/index.d.ts +34 -26
  36. package/dist/data-access/index.js +34 -26
  37. package/dist/data-access/manage/agentFull.d.ts +36 -0
  38. package/dist/data-access/{agentFull.js → manage/agentFull.js} +205 -7
  39. package/dist/data-access/{agents.d.ts → manage/agents.d.ts} +23 -22
  40. package/dist/data-access/{agents.js → manage/agents.js} +52 -7
  41. package/dist/data-access/{artifactComponents.d.ts → manage/artifactComponents.d.ts} +21 -21
  42. package/dist/data-access/{artifactComponents.js → manage/artifactComponents.js} +5 -5
  43. package/dist/data-access/{contextConfigs.d.ts → manage/contextConfigs.d.ts} +14 -14
  44. package/dist/data-access/{contextConfigs.js → manage/contextConfigs.js} +3 -3
  45. package/dist/data-access/{credentialReferences.d.ts → manage/credentialReferences.d.ts} +17 -17
  46. package/dist/data-access/{credentialReferences.js → manage/credentialReferences.js} +2 -2
  47. package/dist/data-access/{dataComponents.d.ts → manage/dataComponents.d.ts} +20 -20
  48. package/dist/data-access/{dataComponents.js → manage/dataComponents.js} +7 -7
  49. package/dist/data-access/manage/evalConfig.d.ts +221 -0
  50. package/dist/data-access/manage/evalConfig.js +275 -0
  51. package/dist/data-access/{externalAgents.d.ts → manage/externalAgents.d.ts} +16 -16
  52. package/dist/data-access/{externalAgents.js → manage/externalAgents.js} +2 -2
  53. package/dist/data-access/{functionTools.d.ts → manage/functionTools.d.ts} +65 -15
  54. package/dist/data-access/{functionTools.js → manage/functionTools.js} +90 -8
  55. package/dist/data-access/{functions.d.ts → manage/functions.d.ts} +9 -9
  56. package/dist/data-access/{functions.js → manage/functions.js} +3 -3
  57. package/dist/data-access/manage/projectFull.d.ts +38 -0
  58. package/dist/data-access/{projectFull.js → manage/projectFull.js} +64 -65
  59. package/dist/data-access/manage/projectLifecycle.d.ts +119 -0
  60. package/dist/data-access/manage/projectLifecycle.js +234 -0
  61. package/dist/data-access/manage/projects.d.ts +75 -0
  62. package/dist/data-access/{projects.js → manage/projects.js} +15 -16
  63. package/dist/data-access/{subAgentExternalAgentRelations.d.ts → manage/subAgentExternalAgentRelations.d.ts} +19 -19
  64. package/dist/data-access/{subAgentExternalAgentRelations.js → manage/subAgentExternalAgentRelations.js} +2 -2
  65. package/dist/data-access/{subAgentRelations.d.ts → manage/subAgentRelations.d.ts} +29 -29
  66. package/dist/data-access/{subAgentRelations.js → manage/subAgentRelations.js} +3 -3
  67. package/dist/data-access/{subAgentTeamAgentRelations.d.ts → manage/subAgentTeamAgentRelations.d.ts} +19 -19
  68. package/dist/data-access/{subAgentTeamAgentRelations.js → manage/subAgentTeamAgentRelations.js} +2 -2
  69. package/dist/data-access/{subAgents.d.ts → manage/subAgents.d.ts} +13 -13
  70. package/dist/data-access/{subAgents.js → manage/subAgents.js} +4 -4
  71. package/dist/data-access/{tools.d.ts → manage/tools.d.ts} +26 -19
  72. package/dist/data-access/{tools.js → manage/tools.js} +57 -35
  73. package/dist/data-access/manage/triggers.d.ts +80 -0
  74. package/dist/data-access/manage/triggers.js +81 -0
  75. package/dist/data-access/{apiKeys.d.ts → runtime/apiKeys.d.ts} +17 -17
  76. package/dist/data-access/{apiKeys.js → runtime/apiKeys.js} +3 -3
  77. package/dist/data-access/runtime/cascade-delete.d.ts +77 -0
  78. package/dist/data-access/runtime/cascade-delete.js +111 -0
  79. package/dist/data-access/{contextCache.d.ts → runtime/contextCache.d.ts} +13 -13
  80. package/dist/data-access/{contextCache.js → runtime/contextCache.js} +5 -5
  81. package/dist/data-access/{conversations.d.ts → runtime/conversations.d.ts} +68 -19
  82. package/dist/data-access/{conversations.js → runtime/conversations.js} +13 -7
  83. package/dist/data-access/runtime/evalRuns.d.ts +120 -0
  84. package/dist/data-access/runtime/evalRuns.js +168 -0
  85. package/dist/data-access/{ledgerArtifacts.d.ts → runtime/ledgerArtifacts.d.ts} +13 -13
  86. package/dist/data-access/{ledgerArtifacts.js → runtime/ledgerArtifacts.js} +3 -3
  87. package/dist/data-access/{messages.d.ts → runtime/messages.d.ts} +15 -15
  88. package/dist/data-access/{messages.js → runtime/messages.js} +2 -2
  89. package/dist/data-access/{organizations.d.ts → runtime/organizations.d.ts} +16 -7
  90. package/dist/data-access/{organizations.js → runtime/organizations.js} +15 -3
  91. package/dist/data-access/runtime/projects.d.ts +62 -0
  92. package/dist/data-access/runtime/projects.js +90 -0
  93. package/dist/data-access/runtime/tasks.d.ts +55 -0
  94. package/dist/data-access/{tasks.js → runtime/tasks.js} +2 -2
  95. package/dist/data-access/runtime/triggerInvocations.d.ts +62 -0
  96. package/dist/data-access/runtime/triggerInvocations.js +54 -0
  97. package/dist/data-access/runtime/users.d.ts +19 -0
  98. package/dist/data-access/{users.js → runtime/users.js} +2 -2
  99. package/dist/data-access/validation.d.ts +4 -4
  100. package/dist/data-access/validation.js +1 -1
  101. package/dist/db/clean.d.ts +8 -4
  102. package/dist/db/clean.js +14 -105
  103. package/dist/db/delete.d.ts +1 -1
  104. package/dist/db/delete.js +7 -10
  105. package/dist/db/manage/dolt-cleanup.d.ts +51 -0
  106. package/dist/db/manage/dolt-cleanup.js +132 -0
  107. package/dist/db/manage/manage-client.d.ts +26 -0
  108. package/dist/db/manage/manage-client.js +68 -0
  109. package/dist/db/{schema.d.ts → manage/manage-schema.d.ts} +1459 -1285
  110. package/dist/db/{schema.js → manage/manage-schema.js} +433 -341
  111. package/dist/db/manage/test-manage-client.d.ts +27 -0
  112. package/dist/db/manage/test-manage-client.js +68 -0
  113. package/dist/db/runtime/runtime-client.d.ts +20 -0
  114. package/dist/db/runtime/runtime-client.js +30 -0
  115. package/dist/db/runtime/runtime-schema.d.ts +2834 -0
  116. package/dist/db/runtime/runtime-schema.js +483 -0
  117. package/dist/db/runtime/test-runtime-client.d.ts +27 -0
  118. package/dist/db/{test-client.js → runtime/test-runtime-client.js} +11 -25
  119. package/dist/dolt/branch.d.ts +62 -0
  120. package/dist/dolt/branch.js +82 -0
  121. package/dist/dolt/branches-api.d.ts +108 -0
  122. package/dist/dolt/branches-api.js +162 -0
  123. package/dist/dolt/commit.d.ts +94 -0
  124. package/dist/dolt/commit.js +103 -0
  125. package/dist/dolt/diff.d.ts +27 -0
  126. package/dist/dolt/diff.js +21 -0
  127. package/dist/dolt/index.d.ts +10 -0
  128. package/dist/dolt/index.js +11 -0
  129. package/dist/dolt/merge.d.ts +63 -0
  130. package/dist/dolt/merge.js +81 -0
  131. package/dist/dolt/migrate-all-branches.d.ts +4 -0
  132. package/dist/dolt/migrate-all-branches.js +78 -0
  133. package/dist/dolt/migrate-dolt.d.ts +1 -0
  134. package/dist/dolt/migrate-dolt.js +22 -0
  135. package/dist/dolt/ref-helpers.d.ts +19 -0
  136. package/dist/dolt/ref-helpers.js +65 -0
  137. package/dist/dolt/ref-middleware.d.ts +82 -0
  138. package/dist/dolt/ref-middleware.js +217 -0
  139. package/dist/dolt/ref-scope.d.ts +101 -0
  140. package/dist/dolt/ref-scope.js +231 -0
  141. package/dist/dolt/schema-sync.d.ts +134 -0
  142. package/dist/dolt/schema-sync.js +246 -0
  143. package/dist/env.d.ts +6 -4
  144. package/dist/env.js +3 -2
  145. package/dist/index.d.ts +71 -44
  146. package/dist/index.js +74 -47
  147. package/dist/types/entities.d.ts +81 -2
  148. package/dist/types/index.d.ts +3 -3
  149. package/dist/types/utility.d.ts +45 -4
  150. package/dist/utils/JsonTransformer.d.ts +44 -0
  151. package/dist/utils/JsonTransformer.js +112 -0
  152. package/dist/utils/apiKeys.d.ts +5 -1
  153. package/dist/utils/apiKeys.js +11 -1
  154. package/dist/utils/colors.d.ts +34 -0
  155. package/dist/utils/colors.js +49 -0
  156. package/dist/utils/credential-store-utils.d.ts +1 -1
  157. package/dist/utils/format-messages.d.ts +1 -1
  158. package/dist/utils/index.d.ts +7 -3
  159. package/dist/utils/index.js +7 -3
  160. package/dist/utils/internal-service-auth.d.ts +79 -0
  161. package/dist/utils/internal-service-auth.js +140 -0
  162. package/dist/utils/jwt-helpers.d.ts +56 -0
  163. package/dist/utils/jwt-helpers.js +90 -0
  164. package/dist/utils/service-token-auth.d.ts +9 -27
  165. package/dist/utils/service-token-auth.js +48 -96
  166. package/dist/utils/template-interpolation.d.ts +22 -0
  167. package/dist/utils/template-interpolation.js +62 -0
  168. package/dist/utils/third-party-mcp-servers/composio-client.js +23 -23
  169. package/dist/utils/trigger-auth.d.ts +62 -0
  170. package/dist/utils/trigger-auth.js +125 -0
  171. package/dist/validation/agentFull.js +2 -4
  172. package/dist/validation/dolt-schemas.d.ts +49 -0
  173. package/dist/validation/dolt-schemas.js +44 -0
  174. package/dist/validation/drizzle-schema-helpers.d.ts +4 -26
  175. package/dist/validation/drizzle-schema-helpers.js +5 -151
  176. package/dist/validation/index.d.ts +4 -3
  177. package/dist/validation/index.js +3 -2
  178. package/dist/validation/schemas.d.ts +17647 -4789
  179. package/dist/validation/schemas.js +328 -11
  180. package/drizzle/manage/0000_tearful_rhodey.sql +414 -0
  181. package/drizzle/manage/0001_broken_wendell_vaughn.sql +19 -0
  182. package/drizzle/manage/0002_bent_sunfire.sql +1 -0
  183. package/drizzle/manage/meta/0000_snapshot.json +2987 -0
  184. package/drizzle/manage/meta/0001_snapshot.json +3115 -0
  185. package/drizzle/manage/meta/0002_snapshot.json +3115 -0
  186. package/drizzle/manage/meta/_journal.json +27 -0
  187. package/drizzle/runtime/0008_silly_preak.sql +127 -0
  188. package/drizzle/runtime/0009_freezing_leo.sql +17 -0
  189. package/drizzle/runtime/meta/0008_snapshot.json +2263 -0
  190. package/drizzle/runtime/meta/0009_snapshot.json +2397 -0
  191. package/drizzle/{meta → runtime/meta}/_journal.json +14 -0
  192. package/package.json +48 -15
  193. package/dist/context/ContextFetcher.d.ts +0 -73
  194. package/dist/context/ContextFetcher.js +0 -291
  195. package/dist/context/ContextResolver.d.ts +0 -60
  196. package/dist/context/ContextResolver.js +0 -278
  197. package/dist/context/context.d.ts +0 -27
  198. package/dist/context/context.js +0 -128
  199. package/dist/context/contextCache.d.ts +0 -58
  200. package/dist/context/contextCache.js +0 -177
  201. package/dist/data-access/agentFull.d.ts +0 -33
  202. package/dist/data-access/projectFull.d.ts +0 -32
  203. package/dist/data-access/projects.d.ts +0 -71
  204. package/dist/data-access/tasks.d.ts +0 -45
  205. package/dist/data-access/users.d.ts +0 -19
  206. package/dist/db/client.d.ts +0 -20
  207. package/dist/db/client.js +0 -28
  208. package/dist/db/test-client.d.ts +0 -31
  209. package/dist/middleware/contextValidation.d.ts +0 -46
  210. package/dist/middleware/contextValidation.js +0 -280
  211. package/dist/middleware/index.d.ts +0 -2
  212. package/dist/middleware/index.js +0 -3
  213. package/dist/utils/execution.d.ts +0 -22
  214. package/dist/utils/execution.js +0 -25
  215. /package/drizzle/{0000_exotic_mysterio.sql → runtime/0000_exotic_mysterio.sql} +0 -0
  216. /package/drizzle/{0001_calm_sheva_callister.sql → runtime/0001_calm_sheva_callister.sql} +0 -0
  217. /package/drizzle/{0002_puzzling_goblin_queen.sql → runtime/0002_puzzling_goblin_queen.sql} +0 -0
  218. /package/drizzle/{0003_sweet_human_robot.sql → runtime/0003_sweet_human_robot.sql} +0 -0
  219. /package/drizzle/{0004_cuddly_shooting_star.sql → runtime/0004_cuddly_shooting_star.sql} +0 -0
  220. /package/drizzle/{0005_reflective_starfox.sql → runtime/0005_reflective_starfox.sql} +0 -0
  221. /package/drizzle/{0006_stale_thaddeus_ross.sql → runtime/0006_stale_thaddeus_ross.sql} +0 -0
  222. /package/drizzle/{0007_slim_karma.sql → runtime/0007_slim_karma.sql} +0 -0
  223. /package/drizzle/{meta → runtime/meta}/0000_snapshot.json +0 -0
  224. /package/drizzle/{meta → runtime/meta}/0001_snapshot.json +0 -0
  225. /package/drizzle/{meta → runtime/meta}/0003_snapshot.json +0 -0
  226. /package/drizzle/{meta → runtime/meta}/0005_snapshot.json +0 -0
  227. /package/drizzle/{meta → runtime/meta}/0006_snapshot.json +0 -0
  228. /package/drizzle/{meta → runtime/meta}/0007_snapshot.json +0 -0
@@ -0,0 +1,483 @@
1
+ import { __exportAll } from "../../_virtual/rolldown_runtime.js";
2
+ import { account, deviceCode, invitation, member, organization, session, ssoProvider, user, verification } from "../../auth/auth-schema.js";
3
+ import { relations } from "drizzle-orm";
4
+ import { foreignKey, index, jsonb, pgTable, primaryKey, text, timestamp, unique, varchar } from "drizzle-orm/pg-core";
5
+
6
+ //#region src/db/runtime/runtime-schema.ts
7
+ var runtime_schema_exports = /* @__PURE__ */ __exportAll({
8
+ account: () => account,
9
+ apiKeys: () => apiKeys,
10
+ contextCache: () => contextCache,
11
+ conversations: () => conversations,
12
+ conversationsRelations: () => conversationsRelations,
13
+ datasetRun: () => datasetRun,
14
+ datasetRunConversationRelations: () => datasetRunConversationRelations,
15
+ deviceCode: () => deviceCode,
16
+ evaluationResult: () => evaluationResult,
17
+ evaluationRun: () => evaluationRun,
18
+ invitation: () => invitation,
19
+ ledgerArtifacts: () => ledgerArtifacts,
20
+ ledgerArtifactsRelations: () => ledgerArtifactsRelations,
21
+ member: () => member,
22
+ messages: () => messages,
23
+ messagesRelations: () => messagesRelations,
24
+ organization: () => organization,
25
+ projectMetadata: () => projectMetadata,
26
+ session: () => session,
27
+ ssoProvider: () => ssoProvider,
28
+ taskRelations: () => taskRelations,
29
+ taskRelationsRelations: () => taskRelationsRelations,
30
+ tasks: () => tasks,
31
+ tasksRelations: () => tasksRelations,
32
+ triggerInvocations: () => triggerInvocations,
33
+ user: () => user,
34
+ verification: () => verification
35
+ });
36
+ const projectScoped = {
37
+ tenantId: varchar("tenant_id", { length: 256 }).notNull(),
38
+ id: varchar("id", { length: 256 }).notNull(),
39
+ projectId: varchar("project_id", { length: 256 }).notNull()
40
+ };
41
+ const agentScoped = {
42
+ ...projectScoped,
43
+ agentId: varchar("agent_id", { length: 256 }).notNull()
44
+ };
45
+ const subAgentScoped = {
46
+ ...agentScoped,
47
+ subAgentId: varchar("sub_agent_id", { length: 256 }).notNull()
48
+ };
49
+ const timestamps = {
50
+ createdAt: timestamp("created_at", { mode: "string" }).notNull().defaultNow(),
51
+ updatedAt: timestamp("updated_at", { mode: "string" }).notNull().defaultNow()
52
+ };
53
+ /**
54
+ * Runtime projects table - source of truth for which projects exist in a tenant.
55
+ * This is NOT versioned - project existence is tracked here while
56
+ * project configuration/content lives in the versioned config DB.
57
+ *
58
+ * Named 'project_metadata' to avoid conflict with the manage-schema 'projects' table.
59
+ */
60
+ const projectMetadata = pgTable("project_metadata", {
61
+ id: varchar("id", { length: 256 }).notNull(),
62
+ tenantId: varchar("tenant_id", { length: 256 }).notNull(),
63
+ createdAt: timestamp("created_at", { mode: "string" }).notNull().defaultNow(),
64
+ createdBy: varchar("created_by", { length: 256 }),
65
+ mainBranchName: varchar("main_branch_name", { length: 512 }).notNull()
66
+ }, (table) => [
67
+ primaryKey({ columns: [table.tenantId, table.id] }),
68
+ index("project_metadata_tenant_idx").on(table.tenantId),
69
+ index("project_metadata_main_branch_idx").on(table.mainBranchName),
70
+ foreignKey({
71
+ columns: [table.tenantId],
72
+ foreignColumns: [organization.id],
73
+ name: "project_metadata_organization_fk"
74
+ }).onDelete("cascade")
75
+ ]);
76
+ const conversations = pgTable("conversations", {
77
+ ...projectScoped,
78
+ userId: varchar("user_id", { length: 256 }),
79
+ agentId: varchar("agent_id", { length: 256 }),
80
+ activeSubAgentId: varchar("active_sub_agent_id", { length: 256 }).notNull(),
81
+ ref: jsonb("ref").$type(),
82
+ title: text("title"),
83
+ lastContextResolution: timestamp("last_context_resolution", { mode: "string" }),
84
+ metadata: jsonb("metadata").$type(),
85
+ ...timestamps
86
+ }, (table) => [primaryKey({ columns: [
87
+ table.tenantId,
88
+ table.projectId,
89
+ table.id
90
+ ] })]);
91
+ const tasks = pgTable("tasks", {
92
+ ...subAgentScoped,
93
+ contextId: varchar("context_id", { length: 256 }).notNull(),
94
+ ref: jsonb("ref").$type(),
95
+ status: varchar("status", { length: 256 }).notNull(),
96
+ metadata: jsonb("metadata").$type(),
97
+ ...timestamps
98
+ }, (table) => [primaryKey({ columns: [
99
+ table.tenantId,
100
+ table.projectId,
101
+ table.id
102
+ ] })]);
103
+ const apiKeys = pgTable("api_keys", {
104
+ ...projectScoped,
105
+ agentId: varchar("agent_id", { length: 256 }).notNull(),
106
+ publicId: varchar("public_id", { length: 256 }).notNull().unique(),
107
+ keyHash: varchar("key_hash", { length: 256 }).notNull(),
108
+ keyPrefix: varchar("key_prefix", { length: 256 }).notNull(),
109
+ name: varchar("name", { length: 256 }),
110
+ lastUsedAt: timestamp("last_used_at", { mode: "string" }),
111
+ expiresAt: timestamp("expires_at", { mode: "string" }),
112
+ ...timestamps
113
+ }, (t) => [
114
+ foreignKey({
115
+ columns: [t.tenantId],
116
+ foreignColumns: [organization.id],
117
+ name: "api_keys_organization_fk"
118
+ }).onDelete("cascade"),
119
+ index("api_keys_tenant_agent_idx").on(t.tenantId, t.agentId),
120
+ index("api_keys_prefix_idx").on(t.keyPrefix),
121
+ index("api_keys_public_id_idx").on(t.publicId)
122
+ ]);
123
+ /**
124
+ * Trigger invocations - records each time a webhook trigger is invoked.
125
+ * This is runtime data (transactional) so it lives in PostgreSQL, not DoltGres.
126
+ * NOTE: No FK to triggers table since triggers is in a different database (DoltGres).
127
+ * Application code must enforce referential integrity for triggerId.
128
+ * Can optionally link to conversations when the trigger creates one.
129
+ */
130
+ const triggerInvocations = pgTable("trigger_invocations", {
131
+ ...agentScoped,
132
+ triggerId: varchar("trigger_id", { length: 256 }).notNull(),
133
+ conversationId: varchar("conversation_id", { length: 256 }),
134
+ status: varchar("status", { length: 20 }).notNull().default("pending"),
135
+ requestPayload: jsonb("request_payload").notNull(),
136
+ transformedPayload: jsonb("transformed_payload"),
137
+ errorMessage: text("error_message"),
138
+ createdAt: timestamp("created_at", { mode: "string" }).notNull().defaultNow()
139
+ }, (table) => [
140
+ primaryKey({ columns: [
141
+ table.tenantId,
142
+ table.projectId,
143
+ table.agentId,
144
+ table.id
145
+ ] }),
146
+ index("trigger_invocations_trigger_idx").on(table.triggerId, table.createdAt),
147
+ index("trigger_invocations_status_idx").on(table.triggerId, table.status)
148
+ ]);
149
+ const messages = pgTable("messages", {
150
+ ...projectScoped,
151
+ conversationId: varchar("conversation_id", { length: 256 }).notNull(),
152
+ role: varchar("role", { length: 256 }).notNull(),
153
+ fromSubAgentId: varchar("from_sub_agent_id", { length: 256 }),
154
+ toSubAgentId: varchar("to_sub_agent_id", { length: 256 }),
155
+ fromExternalAgentId: varchar("from_external_sub_agent_id", { length: 256 }),
156
+ toExternalAgentId: varchar("to_external_sub_agent_id", { length: 256 }),
157
+ fromTeamAgentId: varchar("from_team_agent_id", { length: 256 }),
158
+ toTeamAgentId: varchar("to_team_agent_id", { length: 256 }),
159
+ content: jsonb("content").$type().notNull(),
160
+ visibility: varchar("visibility", { length: 256 }).notNull().default("user-facing"),
161
+ messageType: varchar("message_type", { length: 256 }).notNull().default("chat"),
162
+ taskId: varchar("task_id", { length: 256 }),
163
+ parentMessageId: varchar("parent_message_id", { length: 256 }),
164
+ a2aTaskId: varchar("a2a_task_id", { length: 256 }),
165
+ a2aSessionId: varchar("a2a_session_id", { length: 256 }),
166
+ metadata: jsonb("metadata").$type(),
167
+ ...timestamps
168
+ }, (table) => [primaryKey({ columns: [
169
+ table.tenantId,
170
+ table.projectId,
171
+ table.id
172
+ ] }), foreignKey({
173
+ columns: [
174
+ table.tenantId,
175
+ table.projectId,
176
+ table.conversationId
177
+ ],
178
+ foreignColumns: [
179
+ conversations.tenantId,
180
+ conversations.projectId,
181
+ conversations.id
182
+ ],
183
+ name: "messages_conversation_fk"
184
+ }).onDelete("cascade")]);
185
+ const taskRelations = pgTable("task_relations", {
186
+ ...projectScoped,
187
+ parentTaskId: varchar("parent_task_id", { length: 256 }).notNull(),
188
+ childTaskId: varchar("child_task_id", { length: 256 }).notNull(),
189
+ relationType: varchar("relation_type", { length: 256 }).default("parent_child"),
190
+ ...timestamps
191
+ }, (table) => [
192
+ primaryKey({ columns: [
193
+ table.tenantId,
194
+ table.projectId,
195
+ table.id
196
+ ] }),
197
+ foreignKey({
198
+ columns: [
199
+ table.tenantId,
200
+ table.projectId,
201
+ table.parentTaskId
202
+ ],
203
+ foreignColumns: [
204
+ tasks.tenantId,
205
+ tasks.projectId,
206
+ tasks.id
207
+ ],
208
+ name: "task_relations_parent_fk"
209
+ }).onDelete("cascade"),
210
+ foreignKey({
211
+ columns: [
212
+ table.tenantId,
213
+ table.projectId,
214
+ table.childTaskId
215
+ ],
216
+ foreignColumns: [
217
+ tasks.tenantId,
218
+ tasks.projectId,
219
+ tasks.id
220
+ ],
221
+ name: "task_relations_child_fk"
222
+ }).onDelete("cascade")
223
+ ]);
224
+ const ledgerArtifacts = pgTable("ledger_artifacts", {
225
+ ...projectScoped,
226
+ taskId: varchar("task_id", { length: 256 }).notNull(),
227
+ toolCallId: varchar("tool_call_id", { length: 256 }),
228
+ contextId: varchar("context_id", { length: 256 }).notNull(),
229
+ type: varchar("type", { length: 256 }).notNull().default("source"),
230
+ name: varchar("name", { length: 256 }),
231
+ description: text("description"),
232
+ parts: jsonb("parts").$type(),
233
+ metadata: jsonb("metadata").$type(),
234
+ summary: text("summary"),
235
+ mime: jsonb("mime").$type(),
236
+ visibility: varchar("visibility", { length: 256 }).default("context"),
237
+ allowedAgents: jsonb("allowed_agents").$type(),
238
+ derivedFrom: varchar("derived_from", { length: 256 }),
239
+ ...timestamps
240
+ }, (table) => [
241
+ primaryKey({ columns: [
242
+ table.tenantId,
243
+ table.projectId,
244
+ table.id,
245
+ table.taskId
246
+ ] }),
247
+ index("ledger_artifacts_task_id_idx").on(table.taskId),
248
+ index("ledger_artifacts_tool_call_id_idx").on(table.toolCallId),
249
+ index("ledger_artifacts_context_id_idx").on(table.contextId),
250
+ unique("ledger_artifacts_task_context_name_unique").on(table.taskId, table.contextId, table.name),
251
+ foreignKey({
252
+ columns: [
253
+ table.tenantId,
254
+ table.projectId,
255
+ table.contextId
256
+ ],
257
+ foreignColumns: [
258
+ conversations.tenantId,
259
+ conversations.projectId,
260
+ conversations.id
261
+ ],
262
+ name: "ledger_artifacts_conversation_fk"
263
+ }).onDelete("cascade")
264
+ ]);
265
+ const contextCache = pgTable("context_cache", {
266
+ ...projectScoped,
267
+ conversationId: varchar("conversation_id", { length: 256 }).notNull(),
268
+ contextConfigId: varchar("context_config_id", { length: 256 }).notNull(),
269
+ contextVariableKey: varchar("context_variable_key", { length: 256 }).notNull(),
270
+ ref: jsonb("ref").$type(),
271
+ value: jsonb("value").$type().notNull(),
272
+ requestHash: varchar("request_hash", { length: 256 }),
273
+ fetchedAt: timestamp("fetched_at", { mode: "string" }).notNull().defaultNow(),
274
+ fetchSource: varchar("fetch_source", { length: 256 }),
275
+ ...timestamps
276
+ }, (table) => [
277
+ primaryKey({ columns: [
278
+ table.tenantId,
279
+ table.projectId,
280
+ table.id
281
+ ] }),
282
+ index("context_cache_lookup_idx").on(table.conversationId, table.contextConfigId, table.contextVariableKey),
283
+ foreignKey({
284
+ columns: [
285
+ table.tenantId,
286
+ table.projectId,
287
+ table.conversationId
288
+ ],
289
+ foreignColumns: [
290
+ conversations.tenantId,
291
+ conversations.projectId,
292
+ conversations.id
293
+ ],
294
+ name: "context_cache_conversation_fk"
295
+ }).onDelete("cascade")
296
+ ]);
297
+ /**
298
+ * Execution of a suite of items from a dataset. Represents a batch run that
299
+ * processes dataset items and creates conversations (basically a batch run of conversations). Tracks the execution
300
+ * status and links to conversations created during the run via
301
+ * datasetRunConversationRelations join table.
302
+ *
303
+ * When evaluators are specified, an evaluation job is automatically created after the run completes,
304
+ * and the evaluationJobConfigId links to that job.
305
+ *
306
+ * Includes: datasetId (which dataset to run),
307
+ * datasetRunConfigId (optional: if created from a config),
308
+ * evaluationJobConfigId (optional: links to evaluation job created for this run), and timestamps
309
+ */
310
+ const datasetRun = pgTable("dataset_run", {
311
+ ...projectScoped,
312
+ datasetId: text("dataset_id").notNull(),
313
+ datasetRunConfigId: text("dataset_run_config_id"),
314
+ evaluationJobConfigId: text("evaluation_job_config_id"),
315
+ ...timestamps
316
+ }, (table) => [primaryKey({ columns: [
317
+ table.tenantId,
318
+ table.projectId,
319
+ table.id
320
+ ] })]);
321
+ /**
322
+ * Links conversations created during a dataset run execution. One-to-many
323
+ * relationship where one datasetRun can create many conversations, but each
324
+ * conversation belongs to exactly one datasetRun. Used to track which
325
+ * conversations were generated from which dataset run.
326
+ *
327
+ * Includes: datasetRunId (composite FK to datasetRun), conversationId (composite FK to conversations),
328
+ * datasetItemId (composite FK to datasetItem) to directly link conversations to their source dataset items,
329
+ * unique constraint on (datasetRunId, conversationId) ensures one conversation per datasetRun,
330
+ * and timestamps
331
+ */
332
+ const datasetRunConversationRelations = pgTable("dataset_run_conversation_relations", {
333
+ ...projectScoped,
334
+ datasetRunId: text("dataset_run_id").notNull(),
335
+ conversationId: text("conversation_id").notNull(),
336
+ datasetItemId: text("dataset_item_id").notNull(),
337
+ ...timestamps
338
+ }, (table) => [
339
+ primaryKey({ columns: [
340
+ table.tenantId,
341
+ table.projectId,
342
+ table.id
343
+ ] }),
344
+ foreignKey({
345
+ columns: [
346
+ table.tenantId,
347
+ table.projectId,
348
+ table.datasetRunId
349
+ ],
350
+ foreignColumns: [
351
+ datasetRun.tenantId,
352
+ datasetRun.projectId,
353
+ datasetRun.id
354
+ ],
355
+ name: "dataset_run_conversation_relations_run_fk"
356
+ }).onDelete("cascade"),
357
+ foreignKey({
358
+ columns: [
359
+ table.tenantId,
360
+ table.projectId,
361
+ table.conversationId
362
+ ],
363
+ foreignColumns: [
364
+ conversations.tenantId,
365
+ conversations.projectId,
366
+ conversations.id
367
+ ],
368
+ name: "dataset_run_conversation_relations_conversation_fk"
369
+ }).onDelete("cascade"),
370
+ unique("dataset_run_conversation_relations_unique").on(table.datasetRunId, table.conversationId)
371
+ ]);
372
+ /**
373
+ * Record created when an evaluation job config or evaluation run config is triggered.
374
+ * Represents a completed evaluation run. Links to the evaluationJobConfig (if created from a job)
375
+ * or evaluationRunConfig (if created from a run config).
376
+ * Results are stored in evaluationResult table.
377
+ * one to many relationship with evaluationResult
378
+ *
379
+ * Includes: evaluationJobConfigId (optional: if created from a job),
380
+ * evaluationRunConfigId (optional: if created from a run config),
381
+ * and timestamps
382
+ */
383
+ const evaluationRun = pgTable("evaluation_run", {
384
+ ...projectScoped,
385
+ evaluationJobConfigId: text("evaluation_job_config_id"),
386
+ evaluationRunConfigId: text("evaluation_run_config_id"),
387
+ ...timestamps
388
+ }, (table) => [primaryKey({ columns: [
389
+ table.tenantId,
390
+ table.projectId,
391
+ table.id
392
+ ] })]);
393
+ /**
394
+ * Stores the result of evaluating a conversation with a specific evaluator.
395
+ * Contains the evaluation output. Linked to an evaluation run.
396
+ * Each result represents one evaluator's assessment of one conversation.
397
+ *
398
+ * Includes: conversationId (required), evaluatorId (required),
399
+ * evaluationRunId (optional, links to evaluationRun),
400
+ * output (evaluation result as MessageContent), and timestamps
401
+ */
402
+ const evaluationResult = pgTable("evaluation_result", {
403
+ ...projectScoped,
404
+ conversationId: text("conversation_id").notNull(),
405
+ evaluatorId: text("evaluator_id").notNull(),
406
+ evaluationRunId: text("evaluation_run_id"),
407
+ output: jsonb("output").$type(),
408
+ ...timestamps
409
+ }, (table) => [
410
+ primaryKey({ columns: [
411
+ table.tenantId,
412
+ table.projectId,
413
+ table.id
414
+ ] }),
415
+ foreignKey({
416
+ columns: [
417
+ table.tenantId,
418
+ table.projectId,
419
+ table.conversationId
420
+ ],
421
+ foreignColumns: [
422
+ conversations.tenantId,
423
+ conversations.projectId,
424
+ conversations.id
425
+ ],
426
+ name: "evaluation_result_conversation_fk"
427
+ }).onDelete("cascade"),
428
+ foreignKey({
429
+ columns: [
430
+ table.tenantId,
431
+ table.projectId,
432
+ table.evaluationRunId
433
+ ],
434
+ foreignColumns: [
435
+ evaluationRun.tenantId,
436
+ evaluationRun.projectId,
437
+ evaluationRun.id
438
+ ],
439
+ name: "evaluation_result_evaluation_run_fk"
440
+ }).onDelete("cascade")
441
+ ]);
442
+ const conversationsRelations = relations(conversations, ({ many }) => ({ messages: many(messages) }));
443
+ const messagesRelations = relations(messages, ({ one, many }) => ({
444
+ conversation: one(conversations, {
445
+ fields: [messages.conversationId],
446
+ references: [conversations.id]
447
+ }),
448
+ task: one(tasks, {
449
+ fields: [messages.taskId],
450
+ references: [tasks.id]
451
+ }),
452
+ parentMessage: one(messages, {
453
+ fields: [messages.parentMessageId],
454
+ references: [messages.id],
455
+ relationName: "parentChild"
456
+ }),
457
+ childMessages: many(messages, { relationName: "parentChild" })
458
+ }));
459
+ const tasksRelations = relations(tasks, ({ many }) => ({
460
+ messages: many(messages),
461
+ ledgerArtifacts: many(ledgerArtifacts),
462
+ parentRelations: many(taskRelations, { relationName: "childTask" }),
463
+ childRelations: many(taskRelations, { relationName: "parentTask" })
464
+ }));
465
+ const taskRelationsRelations = relations(taskRelations, ({ one }) => ({
466
+ parentTask: one(tasks, {
467
+ fields: [taskRelations.parentTaskId],
468
+ references: [tasks.id],
469
+ relationName: "parentTask"
470
+ }),
471
+ childTask: one(tasks, {
472
+ fields: [taskRelations.childTaskId],
473
+ references: [tasks.id],
474
+ relationName: "childTask"
475
+ })
476
+ }));
477
+ const ledgerArtifactsRelations = relations(ledgerArtifacts, ({ one }) => ({ task: one(tasks, {
478
+ fields: [ledgerArtifacts.taskId],
479
+ references: [tasks.id]
480
+ }) }));
481
+
482
+ //#endregion
483
+ export { account, apiKeys, contextCache, conversations, conversationsRelations, datasetRun, datasetRunConversationRelations, deviceCode, evaluationResult, evaluationRun, invitation, ledgerArtifacts, ledgerArtifactsRelations, member, messages, messagesRelations, organization, projectMetadata, runtime_schema_exports, session, ssoProvider, taskRelations, taskRelationsRelations, tasks, tasksRelations, triggerInvocations, user, verification };
@@ -0,0 +1,27 @@
1
+ import { AgentsRunDatabaseClient } from "./runtime-client.js";
2
+
3
+ //#region src/db/runtime/test-runtime-client.d.ts
4
+
5
+ /**
6
+ * Creates a test database client using an in-memory PostgreSQL database (PGlite)
7
+ * This provides real database operations for integration testing with perfect isolation
8
+ * Each call creates a fresh database with all migrations applied
9
+ */
10
+ declare function createTestRuntimeDatabaseClient(drizzleDir: string): Promise<AgentsRunDatabaseClient>;
11
+ declare function createTestRuntimeDatabaseClientNoMigrations(): AgentsRunDatabaseClient;
12
+ /**
13
+ * Cleans up test database by removing all data but keeping schema
14
+ * Dynamically gets all tables from the public schema and truncates them
15
+ */
16
+ declare function cleanupTestRuntimeDatabase(db: AgentsRunDatabaseClient): Promise<void>;
17
+ /**
18
+ * Closes the test database and removes the file
19
+ */
20
+ declare function closeTestRuntimeDatabase(db: AgentsRunDatabaseClient): Promise<void>;
21
+ /**
22
+ * Creates a test organization in the database
23
+ * This is a helper for tests that need organization records before creating projects/agents
24
+ */
25
+ declare function createTestOrganization(db: AgentsRunDatabaseClient, tenantId: string): Promise<void>;
26
+ //#endregion
27
+ export { cleanupTestRuntimeDatabase, closeTestRuntimeDatabase, createTestOrganization, createTestRuntimeDatabaseClient, createTestRuntimeDatabaseClientNoMigrations };
@@ -1,23 +1,19 @@
1
- import { organization } from "../auth/auth-schema.js";
2
- import { projects, schema_exports } from "./schema.js";
1
+ import { organization } from "../../auth/auth-schema.js";
2
+ import { runtime_schema_exports } from "./runtime-schema.js";
3
3
  import { sql } from "drizzle-orm";
4
- import { dirname, join } from "node:path";
5
- import { fileURLToPath } from "node:url";
6
4
  import { PGlite } from "@electric-sql/pglite";
7
5
  import { drizzle } from "drizzle-orm/pglite";
8
6
  import { migrate } from "drizzle-orm/pglite/migrator";
9
7
 
10
- //#region src/db/test-client.ts
11
- const DIRNAME = dirname(fileURLToPath(import.meta.url));
8
+ //#region src/db/runtime/test-runtime-client.ts
12
9
  /**
13
10
  * Creates a test database client using an in-memory PostgreSQL database (PGlite)
14
11
  * This provides real database operations for integration testing with perfect isolation
15
12
  * Each call creates a fresh database with all migrations applied
16
13
  */
17
- async function createTestDatabaseClient(drizzleDir) {
18
- const db = drizzle(new PGlite(), { schema: schema_exports });
14
+ async function createTestRuntimeDatabaseClient(drizzleDir) {
15
+ const db = drizzle(new PGlite(), { schema: runtime_schema_exports });
19
16
  try {
20
- if (!drizzleDir) drizzleDir = join(DIRNAME, "../../drizzle");
21
17
  await migrate(db, { migrationsFolder: drizzleDir });
22
18
  } catch (error) {
23
19
  console.error("Failed to initialize test database schema:", error);
@@ -25,11 +21,14 @@ async function createTestDatabaseClient(drizzleDir) {
25
21
  }
26
22
  return db;
27
23
  }
24
+ function createTestRuntimeDatabaseClientNoMigrations() {
25
+ return drizzle(new PGlite(), { schema: runtime_schema_exports });
26
+ }
28
27
  /**
29
28
  * Cleans up test database by removing all data but keeping schema
30
29
  * Dynamically gets all tables from the public schema and truncates them
31
30
  */
32
- async function cleanupTestDatabase(db) {
31
+ async function cleanupTestRuntimeDatabase(db) {
33
32
  try {
34
33
  const tables = (await db.execute(sql.raw(`
35
34
  SELECT tablename
@@ -46,7 +45,7 @@ async function cleanupTestDatabase(db) {
46
45
  /**
47
46
  * Closes the test database and removes the file
48
47
  */
49
- async function closeTestDatabase(db) {
48
+ async function closeTestRuntimeDatabase(db) {
50
49
  try {
51
50
  if ("close" in db && typeof db.close === "function") db.close();
52
51
  } catch (error) {
@@ -67,19 +66,6 @@ async function createTestOrganization(db, tenantId) {
67
66
  metadata: null
68
67
  }).onConflictDoNothing();
69
68
  }
70
- /**
71
- * Creates a test project in the database
72
- * Ensures the organization exists first
73
- */
74
- async function createTestProject(db, tenantId, projectId = "default") {
75
- await createTestOrganization(db, tenantId);
76
- await db.insert(projects).values({
77
- tenantId,
78
- id: projectId,
79
- name: `Test Project ${projectId}`,
80
- description: `Test project for ${projectId}`
81
- }).onConflictDoNothing();
82
- }
83
69
 
84
70
  //#endregion
85
- export { cleanupTestDatabase, closeTestDatabase, createTestDatabaseClient, createTestOrganization, createTestProject };
71
+ export { cleanupTestRuntimeDatabase, closeTestRuntimeDatabase, createTestOrganization, createTestRuntimeDatabaseClient, createTestRuntimeDatabaseClientNoMigrations };
@@ -0,0 +1,62 @@
1
+ import { AgentsManageDatabaseClient } from "../db/manage/manage-client.js";
2
+
3
+ //#region src/dolt/branch.d.ts
4
+ type branchScopes = {
5
+ tenantId: string;
6
+ projectId: string;
7
+ branchName: string;
8
+ };
9
+ /**
10
+ * Create a new branch
11
+ */
12
+ declare const doltBranch: (db: AgentsManageDatabaseClient) => (params: {
13
+ name: string;
14
+ startPoint?: string;
15
+ }) => Promise<void>;
16
+ /**
17
+ * Delete a branch
18
+ */
19
+ declare const doltDeleteBranch: (db: AgentsManageDatabaseClient) => (params: {
20
+ name: string;
21
+ force?: boolean;
22
+ }) => Promise<void>;
23
+ /**
24
+ * Rename a branch
25
+ */
26
+ declare const doltRenameBranch: (db: AgentsManageDatabaseClient) => (params: {
27
+ oldName: string;
28
+ newName: string;
29
+ }) => Promise<void>;
30
+ /**
31
+ * List all branches
32
+ */
33
+ declare const doltListBranches: (db: AgentsManageDatabaseClient) => () => Promise<{
34
+ name: string;
35
+ hash: string;
36
+ latest_commit_date: Date;
37
+ }[]>;
38
+ /**
39
+ * Check if a branch exists
40
+ */
41
+ declare const doltBranchExists: (db: AgentsManageDatabaseClient) => (params: {
42
+ name: string;
43
+ }) => Promise<boolean>;
44
+ /**
45
+ * Checkout a branch or create and checkout a new branch
46
+ */
47
+ declare const doltCheckout: (db: AgentsManageDatabaseClient) => (params: {
48
+ branch: string;
49
+ create?: boolean;
50
+ }) => Promise<void>;
51
+ /**
52
+ * Get the currently active branch
53
+ */
54
+ declare const doltActiveBranch: (db: AgentsManageDatabaseClient) => () => Promise<string>;
55
+ declare const doltGetBranchNamespace: (scopes: branchScopes) => () => string;
56
+ /**
57
+ * Create a branch if it doesn't exist, handling race conditions gracefully.
58
+ * If multiple concurrent requests try to create the same branch, only one will succeed.
59
+ */
60
+ declare const ensureBranchExists: (db: AgentsManageDatabaseClient, branchName: string) => Promise<void>;
61
+ //#endregion
62
+ export { branchScopes, doltActiveBranch, doltBranch, doltBranchExists, doltCheckout, doltDeleteBranch, doltGetBranchNamespace, doltListBranches, doltRenameBranch, ensureBranchExists };