@inkeep/agents-core 0.41.2 → 0.43.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 (258) 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 +60 -2
  11. package/dist/auth/authz/client.d.ts +87 -0
  12. package/dist/auth/authz/client.js +196 -0
  13. package/dist/auth/authz/config.d.ts +103 -0
  14. package/dist/auth/authz/config.js +93 -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 +53 -0
  18. package/dist/auth/authz/permissions.js +83 -0
  19. package/dist/auth/authz/sync.d.ts +106 -0
  20. package/dist/auth/authz/sync.js +321 -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 +9 -3
  24. package/dist/client-exports.js +4 -2
  25. package/dist/constants/context-breakdown.d.ts +61 -0
  26. package/dist/constants/context-breakdown.js +124 -0
  27. package/dist/constants/execution-limits-shared/defaults.d.ts +1 -1
  28. package/dist/constants/execution-limits-shared/defaults.js +1 -1
  29. package/dist/constants/execution-limits-shared/index.d.ts +1 -1
  30. package/dist/constants/otel-attributes.d.ts +4 -0
  31. package/dist/constants/otel-attributes.js +4 -0
  32. package/dist/context/ContextConfig.d.ts +2 -2
  33. package/dist/context/ContextConfig.js +3 -3
  34. package/dist/context/TemplateEngine.d.ts +0 -6
  35. package/dist/context/TemplateEngine.js +4 -19
  36. package/dist/context/index.d.ts +1 -5
  37. package/dist/context/index.js +1 -5
  38. package/dist/credential-stores/keychain-store.d.ts +20 -8
  39. package/dist/credential-stores/keychain-store.js +107 -43
  40. package/dist/credential-stuffer/CredentialStuffer.d.ts +1 -1
  41. package/dist/data-access/index.d.ts +34 -26
  42. package/dist/data-access/index.js +34 -26
  43. package/dist/data-access/manage/agentFull.d.ts +36 -0
  44. package/dist/data-access/{agentFull.js → manage/agentFull.js} +209 -7
  45. package/dist/data-access/{agents.d.ts → manage/agents.d.ts} +64 -63
  46. package/dist/data-access/{agents.js → manage/agents.js} +80 -27
  47. package/dist/data-access/{artifactComponents.d.ts → manage/artifactComponents.d.ts} +33 -33
  48. package/dist/data-access/{artifactComponents.js → manage/artifactComponents.js} +5 -5
  49. package/dist/data-access/{contextConfigs.d.ts → manage/contextConfigs.d.ts} +26 -26
  50. package/dist/data-access/{contextConfigs.js → manage/contextConfigs.js} +3 -3
  51. package/dist/data-access/{credentialReferences.d.ts → manage/credentialReferences.d.ts} +17 -17
  52. package/dist/data-access/{credentialReferences.js → manage/credentialReferences.js} +2 -2
  53. package/dist/data-access/{dataComponents.d.ts → manage/dataComponents.d.ts} +26 -26
  54. package/dist/data-access/{dataComponents.js → manage/dataComponents.js} +7 -7
  55. package/dist/data-access/manage/evalConfig.d.ts +221 -0
  56. package/dist/data-access/manage/evalConfig.js +275 -0
  57. package/dist/data-access/{externalAgents.d.ts → manage/externalAgents.d.ts} +16 -16
  58. package/dist/data-access/{externalAgents.js → manage/externalAgents.js} +2 -2
  59. package/dist/data-access/manage/functionTools.d.ts +242 -0
  60. package/dist/data-access/{functionTools.js → manage/functionTools.js} +124 -30
  61. package/dist/data-access/{functions.d.ts → manage/functions.d.ts} +9 -9
  62. package/dist/data-access/{functions.js → manage/functions.js} +3 -3
  63. package/dist/data-access/manage/projectFull.d.ts +38 -0
  64. package/dist/data-access/{projectFull.js → manage/projectFull.js} +64 -65
  65. package/dist/data-access/manage/projectLifecycle.d.ts +119 -0
  66. package/dist/data-access/manage/projectLifecycle.js +234 -0
  67. package/dist/data-access/manage/projects.d.ts +75 -0
  68. package/dist/data-access/{projects.js → manage/projects.js} +15 -16
  69. package/dist/data-access/{subAgentExternalAgentRelations.d.ts → manage/subAgentExternalAgentRelations.d.ts} +43 -43
  70. package/dist/data-access/{subAgentExternalAgentRelations.js → manage/subAgentExternalAgentRelations.js} +2 -2
  71. package/dist/data-access/{subAgentRelations.d.ts → manage/subAgentRelations.d.ts} +65 -65
  72. package/dist/data-access/{subAgentRelations.js → manage/subAgentRelations.js} +3 -3
  73. package/dist/data-access/{subAgentTeamAgentRelations.d.ts → manage/subAgentTeamAgentRelations.d.ts} +43 -43
  74. package/dist/data-access/{subAgentTeamAgentRelations.js → manage/subAgentTeamAgentRelations.js} +2 -2
  75. package/dist/data-access/{subAgents.d.ts → manage/subAgents.d.ts} +28 -28
  76. package/dist/data-access/{subAgents.js → manage/subAgents.js} +4 -4
  77. package/dist/data-access/{tools.d.ts → manage/tools.d.ts} +65 -52
  78. package/dist/data-access/{tools.js → manage/tools.js} +109 -64
  79. package/dist/data-access/manage/triggers.d.ts +106 -0
  80. package/dist/data-access/manage/triggers.js +81 -0
  81. package/dist/data-access/{apiKeys.d.ts → runtime/apiKeys.d.ts} +37 -37
  82. package/dist/data-access/{apiKeys.js → runtime/apiKeys.js} +3 -3
  83. package/dist/data-access/runtime/cascade-delete.d.ts +77 -0
  84. package/dist/data-access/runtime/cascade-delete.js +111 -0
  85. package/dist/data-access/{contextCache.d.ts → runtime/contextCache.d.ts} +13 -13
  86. package/dist/data-access/{contextCache.js → runtime/contextCache.js} +5 -5
  87. package/dist/data-access/{conversations.d.ts → runtime/conversations.d.ts} +80 -31
  88. package/dist/data-access/{conversations.js → runtime/conversations.js} +13 -7
  89. package/dist/data-access/runtime/evalRuns.d.ts +120 -0
  90. package/dist/data-access/runtime/evalRuns.js +168 -0
  91. package/dist/data-access/{ledgerArtifacts.d.ts → runtime/ledgerArtifacts.d.ts} +13 -13
  92. package/dist/data-access/{ledgerArtifacts.js → runtime/ledgerArtifacts.js} +3 -3
  93. package/dist/data-access/{messages.d.ts → runtime/messages.d.ts} +24 -24
  94. package/dist/data-access/{messages.js → runtime/messages.js} +2 -2
  95. package/dist/data-access/{organizations.d.ts → runtime/organizations.d.ts} +16 -7
  96. package/dist/data-access/{organizations.js → runtime/organizations.js} +16 -4
  97. package/dist/data-access/runtime/projects.d.ts +62 -0
  98. package/dist/data-access/runtime/projects.js +90 -0
  99. package/dist/data-access/runtime/tasks.d.ts +55 -0
  100. package/dist/data-access/{tasks.js → runtime/tasks.js} +2 -2
  101. package/dist/data-access/runtime/triggerInvocations.d.ts +62 -0
  102. package/dist/data-access/runtime/triggerInvocations.js +54 -0
  103. package/dist/data-access/runtime/users.d.ts +19 -0
  104. package/dist/data-access/{users.js → runtime/users.js} +2 -2
  105. package/dist/data-access/validation.d.ts +4 -4
  106. package/dist/data-access/validation.js +1 -1
  107. package/dist/db/clean.d.ts +8 -4
  108. package/dist/db/clean.js +14 -105
  109. package/dist/db/delete.d.ts +1 -1
  110. package/dist/db/delete.js +7 -10
  111. package/dist/db/manage/dolt-cleanup.d.ts +51 -0
  112. package/dist/db/manage/dolt-cleanup.js +132 -0
  113. package/dist/db/manage/manage-client.d.ts +26 -0
  114. package/dist/db/manage/manage-client.js +68 -0
  115. package/dist/db/{schema.d.ts → manage/manage-schema.d.ts} +1257 -969
  116. package/dist/db/{schema.js → manage/manage-schema.js} +436 -334
  117. package/dist/db/manage/test-manage-client.d.ts +27 -0
  118. package/dist/db/manage/test-manage-client.js +68 -0
  119. package/dist/db/runtime/runtime-client.d.ts +20 -0
  120. package/dist/db/runtime/runtime-client.js +30 -0
  121. package/dist/db/runtime/runtime-schema.d.ts +2834 -0
  122. package/dist/db/runtime/runtime-schema.js +483 -0
  123. package/dist/db/runtime/test-runtime-client.d.ts +27 -0
  124. package/dist/db/{test-client.js → runtime/test-runtime-client.js} +11 -25
  125. package/dist/db/utils.d.ts +6 -0
  126. package/dist/db/utils.js +42 -0
  127. package/dist/dolt/branch.d.ts +62 -0
  128. package/dist/dolt/branch.js +82 -0
  129. package/dist/dolt/branches-api.d.ts +108 -0
  130. package/dist/dolt/branches-api.js +162 -0
  131. package/dist/dolt/commit.d.ts +94 -0
  132. package/dist/dolt/commit.js +103 -0
  133. package/dist/dolt/diff.d.ts +27 -0
  134. package/dist/dolt/diff.js +21 -0
  135. package/dist/dolt/index.d.ts +10 -0
  136. package/dist/dolt/index.js +11 -0
  137. package/dist/dolt/merge.d.ts +63 -0
  138. package/dist/dolt/merge.js +81 -0
  139. package/dist/dolt/migrate-all-branches.d.ts +4 -0
  140. package/dist/dolt/migrate-all-branches.js +83 -0
  141. package/dist/dolt/migrate-dolt.d.ts +1 -0
  142. package/dist/dolt/migrate-dolt.js +25 -0
  143. package/dist/dolt/ref-helpers.d.ts +19 -0
  144. package/dist/dolt/ref-helpers.js +65 -0
  145. package/dist/dolt/ref-middleware.d.ts +82 -0
  146. package/dist/dolt/ref-middleware.js +217 -0
  147. package/dist/dolt/ref-scope.d.ts +101 -0
  148. package/dist/dolt/ref-scope.js +231 -0
  149. package/dist/dolt/schema-sync.d.ts +135 -0
  150. package/dist/dolt/schema-sync.js +255 -0
  151. package/dist/env.d.ts +6 -4
  152. package/dist/env.js +3 -2
  153. package/dist/index.d.ts +73 -46
  154. package/dist/index.js +76 -49
  155. package/dist/types/@napi-rs__keyring/index.d.ts +14 -0
  156. package/dist/types/entities.d.ts +81 -2
  157. package/dist/types/index.d.ts +3 -3
  158. package/dist/types/utility.d.ts +46 -5
  159. package/dist/types/utility.js +2 -1
  160. package/dist/utils/JsonTransformer.d.ts +42 -0
  161. package/dist/utils/JsonTransformer.js +103 -0
  162. package/dist/utils/apiKeys.d.ts +5 -1
  163. package/dist/utils/apiKeys.js +11 -1
  164. package/dist/utils/colors.d.ts +34 -0
  165. package/dist/utils/colors.js +49 -0
  166. package/dist/utils/credential-store-utils.d.ts +1 -1
  167. package/dist/utils/format-messages.d.ts +1 -1
  168. package/dist/utils/index.d.ts +8 -4
  169. package/dist/utils/index.js +8 -4
  170. package/dist/utils/internal-service-auth.d.ts +79 -0
  171. package/dist/utils/internal-service-auth.js +140 -0
  172. package/dist/utils/jmespath-utils.d.ts +152 -0
  173. package/dist/utils/jmespath-utils.js +213 -0
  174. package/dist/utils/jwt-helpers.d.ts +56 -0
  175. package/dist/utils/jwt-helpers.js +90 -0
  176. package/dist/utils/mcp-client.d.ts +1 -1
  177. package/dist/utils/mcp-client.js +1 -1
  178. package/dist/utils/service-token-auth.d.ts +9 -27
  179. package/dist/utils/service-token-auth.js +48 -96
  180. package/dist/utils/signature-validation.d.ts +2 -0
  181. package/dist/utils/signature-validation.js +3 -0
  182. package/dist/utils/template-interpolation.d.ts +22 -0
  183. package/dist/utils/template-interpolation.js +62 -0
  184. package/dist/utils/third-party-mcp-servers/composio-client.d.ts +13 -1
  185. package/dist/utils/third-party-mcp-servers/composio-client.js +47 -29
  186. package/dist/utils/third-party-mcp-servers/index.d.ts +2 -2
  187. package/dist/utils/third-party-mcp-servers/index.js +2 -2
  188. package/dist/utils/trigger-auth.d.ts +85 -0
  189. package/dist/utils/trigger-auth.js +233 -0
  190. package/dist/validation/agentFull.js +2 -4
  191. package/dist/validation/dolt-schemas.d.ts +49 -0
  192. package/dist/validation/dolt-schemas.js +44 -0
  193. package/dist/validation/drizzle-schema-helpers.d.ts +4 -26
  194. package/dist/validation/drizzle-schema-helpers.js +5 -151
  195. package/dist/validation/index.d.ts +5 -4
  196. package/dist/validation/index.js +4 -3
  197. package/dist/validation/render-validation.js +19 -0
  198. package/dist/validation/schemas.d.ts +18223 -5148
  199. package/dist/validation/schemas.js +559 -12
  200. package/dist/validation/stream-event-schemas.d.ts +96 -1
  201. package/dist/validation/stream-event-schemas.js +67 -2
  202. package/drizzle/manage/0000_tearful_rhodey.sql +414 -0
  203. package/drizzle/manage/0001_broken_wendell_vaughn.sql +19 -0
  204. package/drizzle/manage/0002_bent_sunfire.sql +1 -0
  205. package/drizzle/manage/0003_tiny_captain_universe.sql +8 -0
  206. package/drizzle/manage/0004_curious_phil_sheldon.sql +2 -0
  207. package/drizzle/manage/0005_silent_shatterstar.sql +53 -0
  208. package/drizzle/manage/meta/0000_snapshot.json +2987 -0
  209. package/drizzle/manage/meta/0001_snapshot.json +3115 -0
  210. package/drizzle/manage/meta/0002_snapshot.json +3115 -0
  211. package/drizzle/manage/meta/0003_snapshot.json +3134 -0
  212. package/drizzle/manage/meta/0004_snapshot.json +3141 -0
  213. package/drizzle/manage/meta/0005_snapshot.json +3141 -0
  214. package/drizzle/manage/meta/_journal.json +48 -0
  215. package/drizzle/runtime/0008_silly_preak.sql +127 -0
  216. package/drizzle/runtime/0009_freezing_leo.sql +17 -0
  217. package/drizzle/runtime/meta/0008_snapshot.json +2263 -0
  218. package/drizzle/runtime/meta/0009_snapshot.json +2397 -0
  219. package/drizzle/{meta → runtime/meta}/_journal.json +14 -0
  220. package/package.json +56 -18
  221. package/spicedb/schema.zed +114 -0
  222. package/dist/context/ContextFetcher.d.ts +0 -73
  223. package/dist/context/ContextFetcher.js +0 -291
  224. package/dist/context/ContextResolver.d.ts +0 -60
  225. package/dist/context/ContextResolver.js +0 -278
  226. package/dist/context/context.d.ts +0 -27
  227. package/dist/context/context.js +0 -128
  228. package/dist/context/contextCache.d.ts +0 -58
  229. package/dist/context/contextCache.js +0 -177
  230. package/dist/data-access/agentFull.d.ts +0 -33
  231. package/dist/data-access/functionTools.d.ts +0 -169
  232. package/dist/data-access/projectFull.d.ts +0 -32
  233. package/dist/data-access/projects.d.ts +0 -71
  234. package/dist/data-access/tasks.d.ts +0 -45
  235. package/dist/data-access/users.d.ts +0 -19
  236. package/dist/db/client.d.ts +0 -20
  237. package/dist/db/client.js +0 -28
  238. package/dist/db/test-client.d.ts +0 -31
  239. package/dist/middleware/contextValidation.d.ts +0 -46
  240. package/dist/middleware/contextValidation.js +0 -280
  241. package/dist/middleware/index.d.ts +0 -2
  242. package/dist/middleware/index.js +0 -3
  243. package/dist/utils/execution.d.ts +0 -22
  244. package/dist/utils/execution.js +0 -25
  245. /package/drizzle/{0000_exotic_mysterio.sql → runtime/0000_exotic_mysterio.sql} +0 -0
  246. /package/drizzle/{0001_calm_sheva_callister.sql → runtime/0001_calm_sheva_callister.sql} +0 -0
  247. /package/drizzle/{0002_puzzling_goblin_queen.sql → runtime/0002_puzzling_goblin_queen.sql} +0 -0
  248. /package/drizzle/{0003_sweet_human_robot.sql → runtime/0003_sweet_human_robot.sql} +0 -0
  249. /package/drizzle/{0004_cuddly_shooting_star.sql → runtime/0004_cuddly_shooting_star.sql} +0 -0
  250. /package/drizzle/{0005_reflective_starfox.sql → runtime/0005_reflective_starfox.sql} +0 -0
  251. /package/drizzle/{0006_stale_thaddeus_ross.sql → runtime/0006_stale_thaddeus_ross.sql} +0 -0
  252. /package/drizzle/{0007_slim_karma.sql → runtime/0007_slim_karma.sql} +0 -0
  253. /package/drizzle/{meta → runtime/meta}/0000_snapshot.json +0 -0
  254. /package/drizzle/{meta → runtime/meta}/0001_snapshot.json +0 -0
  255. /package/drizzle/{meta → runtime/meta}/0003_snapshot.json +0 -0
  256. /package/drizzle/{meta → runtime/meta}/0005_snapshot.json +0 -0
  257. /package/drizzle/{meta → runtime/meta}/0006_snapshot.json +0 -0
  258. /package/drizzle/{meta → runtime/meta}/0007_snapshot.json +0 -0
@@ -57,6 +57,20 @@
57
57
  "when": 1767651466654,
58
58
  "tag": "0007_slim_karma",
59
59
  "breakpoints": true
60
+ },
61
+ {
62
+ "idx": 8,
63
+ "version": "7",
64
+ "when": 1768240742352,
65
+ "tag": "0008_silly_preak",
66
+ "breakpoints": true
67
+ },
68
+ {
69
+ "idx": 9,
70
+ "version": "7",
71
+ "when": 1768646273355,
72
+ "tag": "0009_freezing_leo",
73
+ "breakpoints": true
60
74
  }
61
75
  ]
62
76
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@inkeep/agents-core",
3
- "version": "0.41.2",
3
+ "version": "0.43.0",
4
4
  "description": "Agents Core contains the database schema, types, and validation schemas for Inkeep Agent Framework, along with core components.",
5
5
  "type": "module",
6
6
  "license": "SEE LICENSE IN LICENSE.md",
@@ -10,13 +10,29 @@
10
10
  "types": "./dist/index.d.ts",
11
11
  "default": "./dist/index.js"
12
12
  },
13
- "./schema": {
14
- "types": "./dist/db/schema.d.ts",
15
- "import": "./dist/db/schema.js"
13
+ "./db/manage-schema": {
14
+ "types": "./dist/db/manage/manage-schema.d.ts",
15
+ "import": "./dist/db/manage/manage-schema.js"
16
16
  },
17
- "./db/schema": {
18
- "types": "./dist/db/schema.d.ts",
19
- "import": "./dist/db/schema.js"
17
+ "./db/run-schema": {
18
+ "types": "./dist/db/runtime/runtime-schema.d.ts",
19
+ "import": "./dist/db/runtime/runtime-schema.js"
20
+ },
21
+ "./db/manage-client": {
22
+ "types": "./dist/db/manage/manage-client.d.ts",
23
+ "import": "./dist/db/manage/manage-client.js"
24
+ },
25
+ "./db/test-manage-client": {
26
+ "types": "./dist/db/manage/test-manage-client.d.ts",
27
+ "import": "./dist/db/manage/test-manage-client.js"
28
+ },
29
+ "./db/test-runtime-client": {
30
+ "types": "./dist/db/runtime/test-runtime-client.d.ts",
31
+ "import": "./dist/db/runtime/test-runtime-client.js"
32
+ },
33
+ "./db/run-client": {
34
+ "types": "./dist/db/runtime/runtime-client.d.ts",
35
+ "import": "./dist/db/runtime/runtime-client.js"
20
36
  },
21
37
  "./types": {
22
38
  "types": "./dist/types/index.d.ts",
@@ -50,6 +66,10 @@
50
66
  "types": "./dist/utils/schema-conversion.d.ts",
51
67
  "import": "./dist/utils/schema-conversion.js"
52
68
  },
69
+ "./utils/signature-validation": {
70
+ "types": "./dist/utils/signature-validation.d.ts",
71
+ "import": "./dist/utils/signature-validation.js"
72
+ },
53
73
  "./auth": {
54
74
  "types": "./dist/auth/auth.d.ts",
55
75
  "import": "./dist/auth/auth.js"
@@ -66,16 +86,21 @@
66
86
  "types": "./dist/auth/permissions.d.ts",
67
87
  "import": "./dist/auth/permissions.js"
68
88
  },
89
+ "./auth/authz": {
90
+ "types": "./dist/auth/authz/index.d.ts",
91
+ "import": "./dist/auth/authz/index.js"
92
+ },
69
93
  "./drizzle": "./drizzle/",
70
94
  "./package.json": "./package.json"
71
95
  },
72
96
  "dependencies": {
73
- "@ai-sdk/azure": "^3.0.4",
74
97
  "@ai-sdk/anthropic": "3.0.7",
98
+ "@ai-sdk/azure": "^3.0.4",
75
99
  "@ai-sdk/gateway": "3.0.9",
76
100
  "@ai-sdk/google": "3.0.4",
77
101
  "@ai-sdk/openai": "3.0.7",
78
102
  "@ai-sdk/openai-compatible": "2.0.4",
103
+ "@authzed/authzed-node": "^1.6.1",
79
104
  "@better-auth/sso": "~1.4.10",
80
105
  "@composio/core": "^0.2.4",
81
106
  "@electric-sql/pglite": "^0.3.13",
@@ -95,14 +120,17 @@
95
120
  "exit-hook": "^4.0.0",
96
121
  "find-up": "^7.0.0",
97
122
  "hono": "^4.10.4",
123
+ "iwanthue": "^2.0.0",
98
124
  "jmespath": "^0.16.0",
99
125
  "jose": "^6.1.0",
100
126
  "nanoid": "^5.0.9",
101
127
  "pg": "^8.16.3",
102
128
  "pino": "^9.11.0",
103
129
  "pino-pretty": "^13.1.1",
130
+ "postgres": "^3.4.8",
104
131
  "traverse": "^0.6.10",
105
- "ts-pattern": "^5.7.1"
132
+ "ts-pattern": "^5.7.1",
133
+ "@napi-rs/keyring": "^1.2.0"
106
134
  },
107
135
  "peerDependencies": {
108
136
  "@hono/zod-openapi": "^1.1.5",
@@ -116,8 +144,7 @@
116
144
  "@opentelemetry/sdk-metrics": "^2.0.1",
117
145
  "@opentelemetry/sdk-node": "^0.203.0",
118
146
  "@opentelemetry/sdk-trace-node": "^2.0.1",
119
- "@opentelemetry/semantic-conventions": "^1.34.0",
120
- "keytar": "^7.9.0"
147
+ "@opentelemetry/semantic-conventions": "^1.34.0"
121
148
  },
122
149
  "devDependencies": {
123
150
  "@types/jmespath": "^0.15.2",
@@ -140,6 +167,7 @@
140
167
  "files": [
141
168
  "dist",
142
169
  "drizzle",
170
+ "spicedb",
143
171
  "README.md",
144
172
  "LICENSE.md",
145
173
  "SUPPLEMENTAL_TERMS.md"
@@ -154,8 +182,7 @@
154
182
  "build": "tsdown",
155
183
  "dev": "pnpm build --watch",
156
184
  "test": "vitest --run",
157
- "test:unit": "vitest --run src/__tests__ --exclude src/__tests__/integration/**",
158
- "test:integration": "vitest --run src/__tests__/integration/",
185
+ "test:integration": "vitest --run --config vitest.integration.config.ts src/__tests__/integration/",
159
186
  "test:coverage": "vitest --run --coverage",
160
187
  "test:watch": "vitest --watch",
161
188
  "lint": "biome lint --error-on-warnings",
@@ -164,13 +191,24 @@
164
191
  "format:check": "biome format src",
165
192
  "typecheck": "tsc --noEmit",
166
193
  "typecheck:watch": "tsc --noEmit --watch",
167
- "db:generate": "drizzle-kit generate",
168
- "db:migrate": "drizzle-kit migrate",
169
- "db:drop": "drizzle-kit drop",
194
+ "db:generate": "pnpm db:manage:generate && pnpm db:run:generate",
195
+ "db:migrate": "pnpm db:manage:migrate && pnpm db:run:migrate",
196
+ "db:drop": "pnpm db:manage:drop && pnpm db:run:drop",
170
197
  "db:clean": "tsx src/db/clean.ts",
171
198
  "db:delete": "tsx src/db/delete.ts",
172
199
  "db:reset": "pnpm db:delete && pnpm db:migrate",
173
- "db:studio": "drizzle-kit studio",
174
- "db:check": "drizzle-kit check"
200
+ "db:studio": "echo 'Use db:manage:studio or db:run:studio'",
201
+ "db:check": "pnpm db:manage:check && pnpm db:run:check",
202
+ "db:manage:generate": "drizzle-kit generate --config=drizzle.manage.config.ts",
203
+ "db:manage:migrate": "tsx src/dolt/migrate-dolt.ts",
204
+ "db:manage:sync-all-branches": "tsx src/dolt/migrate-all-branches.ts",
205
+ "db:manage:drop": "drizzle-kit drop --config=drizzle.manage.config.ts",
206
+ "db:manage:studio": "drizzle-kit studio --config=drizzle.manage.config.ts",
207
+ "db:manage:check": "drizzle-kit check --config=drizzle.manage.config.ts",
208
+ "db:run:generate": "drizzle-kit generate --config=drizzle.run.config.ts",
209
+ "db:run:migrate": "drizzle-kit migrate --config=drizzle.run.config.ts",
210
+ "db:run:drop": "drizzle-kit drop --config=drizzle.run.config.ts",
211
+ "db:run:studio": "drizzle-kit studio --config=drizzle.run.config.ts",
212
+ "db:run:check": "drizzle-kit check --config=drizzle.run.config.ts"
175
213
  }
176
214
  }
@@ -0,0 +1,114 @@
1
+ /**
2
+ * SpiceDB Schema for Project-Level Access Control
3
+ *
4
+ * This schema defines the authorization model for the Inkeep Agent Framework.
5
+ * All projects are private by default and require explicit grants.
6
+ *
7
+ * Naming Conventions (per SpiceDB best practices):
8
+ * - Relations: nouns (roles) - e.g., owner, admin, member
9
+ * - Permissions: verbs (actions) - e.g., view, edit, delete, manage
10
+ *
11
+ * Future Extensibility:
12
+ * - Groups: Add `| group#member` to relation types
13
+ * - Service Accounts: Add `| service_account` to relation types
14
+ * - Custom Roles: Define a `role` definition and bind it via `relation custom_role: role`
15
+ */
16
+
17
+ /**
18
+ * user represents a human user in the system
19
+ */
20
+ definition user {}
21
+
22
+ /**
23
+ * organization represents a tenant/org boundary
24
+ * All authorization is scoped within an organization
25
+ */
26
+ definition organization {
27
+ /**
28
+ * owner has full control over the organization
29
+ */
30
+ relation owner: user
31
+
32
+ /**
33
+ * admin can manage org settings and all projects
34
+ */
35
+ relation admin: user
36
+
37
+ /**
38
+ * member is a basic org member with no implicit project access
39
+ */
40
+ relation member: user
41
+
42
+ /**
43
+ * Can view organization details
44
+ * "Can user VIEW organization?"
45
+ */
46
+ permission view = owner + admin + member
47
+
48
+ /**
49
+ * Can manage organization settings and all projects
50
+ * "Can user MANAGE organization?"
51
+ */
52
+ permission manage = owner + admin
53
+ }
54
+
55
+ /**
56
+ * project is a container for agents, workflows, and other resources
57
+ * All projects are private by default - require explicit grants
58
+ *
59
+ * Role Hierarchy:
60
+ * - project_admin: Full access (view + use + edit + manage members)
61
+ * - project_member: Operator access (view + use: invoke agents, create API keys)
62
+ * - project_viewer: Read-only access (view only)
63
+ */
64
+ definition project {
65
+ /**
66
+ * The organization this project belongs to
67
+ */
68
+ relation organization: organization
69
+
70
+ /**
71
+ * project_admin can manage project membership, settings, and configurations
72
+ * Includes all permissions: view, use, edit, delete
73
+ */
74
+ relation project_admin: user
75
+
76
+ /**
77
+ * project_member can use the project (invoke agents, create API keys)
78
+ * but cannot edit configurations or manage members
79
+ * Includes: view, use
80
+ */
81
+ relation project_member: user
82
+
83
+ /**
84
+ * project_viewer can only view the project and its resources (read-only)
85
+ * Cannot invoke agents, create API keys, or edit anything
86
+ * Includes: view only
87
+ */
88
+ relation project_viewer: user
89
+
90
+ /**
91
+ * Can view the project and its resources (read-only)
92
+ * "Can user VIEW project?"
93
+ * - Org managers can always view
94
+ * - All project roles can view
95
+ */
96
+ permission view = organization->manage + project_admin + project_member + project_viewer
97
+
98
+ /**
99
+ * Can use the project (invoke agents, create API keys, view traces)
100
+ * "Can user USE project?"
101
+ * - Org managers can always use
102
+ * - project_admin and project_member can use
103
+ * - project_viewer CANNOT use (read-only)
104
+ */
105
+ permission use = organization->manage + project_admin + project_member
106
+
107
+ /**
108
+ * Can edit project configurations and manage members
109
+ * "Can user EDIT project?"
110
+ * - Org managers can always edit
111
+ * - Only project_admin can edit
112
+ */
113
+ permission edit = organization->manage + project_admin
114
+ }
@@ -1,73 +0,0 @@
1
- import { CredentialStoreRegistry } from "../credential-stores/CredentialStoreRegistry.js";
2
- import { TemplateContext } from "./TemplateEngine.js";
3
- import { ContextFetchDefinition } from "../types/utility.js";
4
- import { DatabaseClient } from "../db/client.js";
5
-
6
- //#region src/context/ContextFetcher.d.ts
7
- declare class MissingRequiredVariableError extends Error {
8
- constructor(variable: string);
9
- }
10
- interface FetchResult {
11
- data: unknown;
12
- source: string;
13
- durationMs: number;
14
- }
15
- declare class ContextFetcher {
16
- private tenantId;
17
- private projectId;
18
- private defaultTimeout;
19
- private credentialStuffer?;
20
- private dbClient;
21
- constructor(tenantId: string, projectId: string, dbClient: DatabaseClient, credentialStoreRegistry?: CredentialStoreRegistry, defaultTimeout?: number);
22
- /**
23
- * Fetch data according to a fetch definition
24
- */
25
- fetch(definition: ContextFetchDefinition, context: TemplateContext): Promise<{
26
- data: unknown;
27
- resolvedUrl: string;
28
- }>;
29
- private getCredential;
30
- /**
31
- * Resolve template variables in fetch configuration and inject credential headers
32
- */
33
- private resolveTemplateVariables;
34
- /**
35
- * Interpolate template variables in a string using TemplateEngine
36
- */
37
- private interpolateTemplate;
38
- /**
39
- * Interpolate template variables in an object recursively using TemplateEngine
40
- */
41
- private interpolateObjectTemplates;
42
- /**
43
- * Perform HTTP request
44
- */
45
- private performRequest;
46
- /**
47
- * Transform response data using JMESPath
48
- */
49
- private transformResponse;
50
- /**
51
- * Validate response against JSON Schema
52
- */
53
- private validateResponseWithJsonSchema;
54
- /**
55
- * Test a fetch definition without caching
56
- */
57
- test(definition: ContextFetchDefinition, context: TemplateContext): Promise<{
58
- success: boolean;
59
- data?: unknown;
60
- resolvedUrl?: string;
61
- error?: string;
62
- durationMs: number;
63
- }>;
64
- /**
65
- * Get fetcher statistics
66
- */
67
- getStats(): {
68
- tenantId: string;
69
- defaultTimeout: number;
70
- };
71
- }
72
- //#endregion
73
- export { ContextFetcher, FetchResult, MissingRequiredVariableError };
@@ -1,291 +0,0 @@
1
- import { getLogger } from "../utils/logger.js";
2
- import { TemplateEngine } from "./TemplateEngine.js";
3
- import { CredentialStuffer } from "../credential-stuffer/CredentialStuffer.js";
4
- import { getCredentialReference } from "../data-access/credentialReferences.js";
5
- import "../data-access/index.js";
6
- import { validateAgainstJsonSchema } from "../middleware/contextValidation.js";
7
- import "../middleware/index.js";
8
- import jmespath from "jmespath";
9
-
10
- //#region src/context/ContextFetcher.ts
11
- const logger = getLogger("context-fetcher");
12
- var MissingRequiredVariableError = class extends Error {
13
- constructor(variable) {
14
- super(`Missing required variable: ${variable}`);
15
- this.name = "MissingRequiredVariableError";
16
- }
17
- };
18
- /**
19
- * GraphQL error checker - validates response for GraphQL errors and throws if found
20
- */
21
- const checkGraphQLErrors = (data) => {
22
- if (data && typeof data === "object" && "errors" in data) {
23
- const errorObj = data;
24
- if (Array.isArray(errorObj.errors) && errorObj.errors.length > 0) {
25
- const agentqlErrors = errorObj.errors;
26
- const errorMessage = `GraphQL request failed with ${agentqlErrors.length} errors: ${agentqlErrors.map((e) => e.message || "Unknown error").join(", ")}`;
27
- throw new Error(errorMessage);
28
- }
29
- }
30
- };
31
- const responseErrorCheckers = [checkGraphQLErrors];
32
- var ContextFetcher = class {
33
- tenantId;
34
- projectId;
35
- defaultTimeout;
36
- credentialStuffer;
37
- dbClient;
38
- constructor(tenantId, projectId, dbClient, credentialStoreRegistry, defaultTimeout = 1e4) {
39
- this.tenantId = tenantId;
40
- this.projectId = projectId;
41
- this.defaultTimeout = defaultTimeout;
42
- if (credentialStoreRegistry) this.credentialStuffer = new CredentialStuffer(credentialStoreRegistry);
43
- this.dbClient = dbClient;
44
- logger.info({
45
- tenantId: this.tenantId,
46
- defaultTimeout: this.defaultTimeout,
47
- hasCredentialSupport: !!this.credentialStuffer
48
- }, "ContextFetcher initialized");
49
- }
50
- /**
51
- * Fetch data according to a fetch definition
52
- */
53
- async fetch(definition, context) {
54
- const startTime = Date.now();
55
- logger.info({
56
- definitionId: definition.id,
57
- url: definition.fetchConfig.url
58
- }, "Starting context fetch");
59
- try {
60
- const resolvedConfig = await this.resolveTemplateVariables(definition.fetchConfig, context, definition.credentialReferenceId);
61
- const response = await this.performRequest(resolvedConfig);
62
- let transformedData = response.data;
63
- if (definition.fetchConfig.transform) transformedData = this.transformResponse(response.data, definition.fetchConfig.transform);
64
- if (definition.responseSchema) this.validateResponseWithJsonSchema(transformedData, definition.responseSchema, definition.id);
65
- const durationMs = Date.now() - startTime;
66
- logger.info({
67
- definitionId: definition.id,
68
- source: response.source,
69
- durationMs
70
- }, "Context fetch completed successfully");
71
- return {
72
- data: transformedData,
73
- resolvedUrl: resolvedConfig.url
74
- };
75
- } catch (error) {
76
- const durationMs = Date.now() - startTime;
77
- const errorMessage = error instanceof Error ? error.message : "Unknown error";
78
- if (error instanceof MissingRequiredVariableError) logger.error({
79
- definitionId: definition.id,
80
- error: errorMessage,
81
- durationMs
82
- }, "Context fetch skipped due to missing required variable");
83
- logger.error({
84
- definitionId: definition.id,
85
- error: errorMessage,
86
- durationMs
87
- }, "Context fetch failed");
88
- throw error;
89
- }
90
- }
91
- async getCredential(credentialReferenceId) {
92
- try {
93
- const credentialReference = await getCredentialReference(this.dbClient)({
94
- scopes: {
95
- tenantId: this.tenantId,
96
- projectId: this.projectId
97
- },
98
- id: credentialReferenceId
99
- });
100
- logger.info({ credentialReference }, "Credential reference");
101
- if (!credentialReference || !this.credentialStuffer) throw new Error(`Credential store not found for reference ID: ${credentialReferenceId}`);
102
- const credentialContext = {
103
- tenantId: this.tenantId,
104
- projectId: this.projectId
105
- };
106
- const storeReference = {
107
- credentialStoreId: credentialReference.credentialStoreId,
108
- retrievalParams: credentialReference.retrievalParams || {}
109
- };
110
- return await this.credentialStuffer.getCredentials(credentialContext, storeReference);
111
- } catch (error) {
112
- logger.error({
113
- credentialReferenceId,
114
- error: error instanceof Error ? error.message : "Unknown error"
115
- }, "Failed to resolve credentials for fetch request");
116
- throw error;
117
- }
118
- }
119
- /**
120
- * Resolve template variables in fetch configuration and inject credential headers
121
- */
122
- async resolveTemplateVariables(fetchConfig, context, credentialReferenceId) {
123
- const resolved = { ...fetchConfig };
124
- const filteredRequiredToFetch = fetchConfig.requiredToFetch?.filter((variable) => variable.startsWith("{{") && variable.endsWith("}}"));
125
- if (filteredRequiredToFetch) for (const variable of filteredRequiredToFetch) {
126
- let resolvedVariable;
127
- try {
128
- resolvedVariable = this.interpolateTemplate(variable, context);
129
- } catch {
130
- throw new MissingRequiredVariableError(variable);
131
- }
132
- if (resolvedVariable === "" || resolvedVariable === variable) throw new MissingRequiredVariableError(variable);
133
- }
134
- resolved.url = this.interpolateTemplate(fetchConfig.url, context);
135
- logger.info({ resolvedUrl: resolved.url }, "Resolved URL");
136
- if (fetchConfig.headers) {
137
- resolved.headers = {};
138
- for (const [key, value] of Object.entries(fetchConfig.headers)) resolved.headers[key] = this.interpolateTemplate(value, context);
139
- }
140
- if (fetchConfig.body) resolved.body = this.interpolateObjectTemplates(fetchConfig.body, context);
141
- if (credentialReferenceId && this.credentialStuffer) try {
142
- const credentialHeaders = (await this.getCredential(credentialReferenceId))?.headers;
143
- if (credentialHeaders) {
144
- resolved.headers = {
145
- ...resolved.headers,
146
- ...credentialHeaders
147
- };
148
- logger.info({ credentialReferenceId }, "Added credential headers to fetch request");
149
- }
150
- } catch (error) {
151
- logger.error({
152
- credentialReferenceId,
153
- error: error instanceof Error ? error.message : "Unknown error"
154
- }, "Failed to resolve credentials for fetch request");
155
- throw error;
156
- }
157
- return resolved;
158
- }
159
- /**
160
- * Interpolate template variables in a string using TemplateEngine
161
- */
162
- interpolateTemplate(template, context) {
163
- try {
164
- return TemplateEngine.render(template, context, {
165
- strict: false,
166
- preserveUnresolved: true
167
- });
168
- } catch (error) {
169
- logger.error({
170
- template,
171
- error: error instanceof Error ? error.message : "Unknown error"
172
- }, "Failed to interpolate template variable");
173
- return template;
174
- }
175
- }
176
- /**
177
- * Interpolate template variables in an object recursively using TemplateEngine
178
- */
179
- interpolateObjectTemplates(obj, context) {
180
- const result = {};
181
- for (const [key, value] of Object.entries(obj)) if (typeof value === "string") result[key] = this.interpolateTemplate(value, context);
182
- else if (value && typeof value === "object" && !Array.isArray(value)) result[key] = this.interpolateObjectTemplates(value, context);
183
- else result[key] = value;
184
- return result;
185
- }
186
- /**
187
- * Perform HTTP request
188
- */
189
- async performRequest(config) {
190
- const startTime = Date.now();
191
- try {
192
- logger.debug({
193
- url: config.url,
194
- method: config.method
195
- }, "Performing HTTP request");
196
- const response = await fetch(config.url, {
197
- method: config.method,
198
- headers: config.headers,
199
- body: config.body ? JSON.stringify(config.body) : void 0,
200
- signal: AbortSignal.timeout(config.timeout || this.defaultTimeout)
201
- });
202
- if (!response.ok) {
203
- const errorText = await response.text();
204
- throw /* @__PURE__ */ new Error(`HTTP ${response.status}: ${response.statusText} - ${errorText}`);
205
- }
206
- const contentType = response.headers.get("content-type") || "";
207
- let data;
208
- if (contentType.includes("application/json")) data = await response.json();
209
- else data = await response.text();
210
- const durationMs = Date.now() - startTime;
211
- for (const checker of responseErrorCheckers) checker(data);
212
- return {
213
- data,
214
- source: config.url,
215
- durationMs
216
- };
217
- } catch (error) {
218
- const durationMs = Date.now() - startTime;
219
- const requestError = error instanceof Error ? error : /* @__PURE__ */ new Error("Unknown error");
220
- logger.warn({
221
- url: config.url,
222
- error: requestError.message,
223
- durationMs
224
- }, "HTTP request failed");
225
- throw requestError;
226
- }
227
- }
228
- /**
229
- * Transform response data using JMESPath
230
- */
231
- transformResponse(data, transform) {
232
- try {
233
- return jmespath.search(data, transform);
234
- } catch (error) {
235
- logger.error({
236
- transform,
237
- error: error instanceof Error ? error.message : "Unknown error"
238
- }, "Failed to transform response data");
239
- return data;
240
- }
241
- }
242
- /**
243
- * Validate response against JSON Schema
244
- */
245
- validateResponseWithJsonSchema(data, jsonSchema, definitionId) {
246
- try {
247
- if (!validateAgainstJsonSchema(jsonSchema, data)) throw new Error("Data does not match JSON Schema");
248
- } catch (error) {
249
- const errorMessage = error instanceof Error ? error.message : "Unknown validation error";
250
- logger.error({
251
- definitionId,
252
- jsonSchema,
253
- error: errorMessage
254
- }, "JSON Schema response validation failed");
255
- throw new Error(`Response validation failed: ${errorMessage}`);
256
- }
257
- }
258
- /**
259
- * Test a fetch definition without caching
260
- */
261
- async test(definition, context) {
262
- const startTime = Date.now();
263
- try {
264
- const result = await this.fetch(definition, context);
265
- return {
266
- success: true,
267
- data: result.data,
268
- resolvedUrl: result.resolvedUrl,
269
- durationMs: Date.now() - startTime
270
- };
271
- } catch (error) {
272
- return {
273
- success: false,
274
- error: error instanceof Error ? error.message : "Unknown error",
275
- durationMs: Date.now() - startTime
276
- };
277
- }
278
- }
279
- /**
280
- * Get fetcher statistics
281
- */
282
- getStats() {
283
- return {
284
- tenantId: this.tenantId,
285
- defaultTimeout: this.defaultTimeout
286
- };
287
- }
288
- };
289
-
290
- //#endregion
291
- export { ContextFetcher, MissingRequiredVariableError };