@inkeep/agents-core 0.1.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 (259) hide show
  1. package/LICENSE.md +51 -0
  2. package/README.md +464 -0
  3. package/dist/__tests__/integration/helpers.d.ts +5 -0
  4. package/dist/__tests__/integration/helpers.d.ts.map +1 -0
  5. package/dist/__tests__/integration/helpers.js +37 -0
  6. package/dist/__tests__/integration/helpers.js.map +1 -0
  7. package/dist/__tests__/setup.d.ts +3 -0
  8. package/dist/__tests__/setup.d.ts.map +1 -0
  9. package/dist/__tests__/setup.js +29 -0
  10. package/dist/__tests__/setup.js.map +1 -0
  11. package/dist/client-exports.d.ts +301 -0
  12. package/dist/client-exports.d.ts.map +1 -0
  13. package/dist/client-exports.js +251 -0
  14. package/dist/client-exports.js.map +1 -0
  15. package/dist/context/ContextConfig.d.ts +55 -0
  16. package/dist/context/ContextConfig.d.ts.map +1 -0
  17. package/dist/context/ContextConfig.js +302 -0
  18. package/dist/context/ContextConfig.js.map +1 -0
  19. package/dist/context/ContextFetcher.d.ts +64 -0
  20. package/dist/context/ContextFetcher.d.ts.map +1 -0
  21. package/dist/context/ContextFetcher.js +325 -0
  22. package/dist/context/ContextFetcher.js.map +1 -0
  23. package/dist/context/ContextResolver.d.ts +52 -0
  24. package/dist/context/ContextResolver.d.ts.map +1 -0
  25. package/dist/context/ContextResolver.js +298 -0
  26. package/dist/context/ContextResolver.js.map +1 -0
  27. package/dist/context/TemplateEngine.d.ts +46 -0
  28. package/dist/context/TemplateEngine.d.ts.map +1 -0
  29. package/dist/context/TemplateEngine.js +175 -0
  30. package/dist/context/TemplateEngine.js.map +1 -0
  31. package/dist/context/context.d.ts +7 -0
  32. package/dist/context/context.d.ts.map +1 -0
  33. package/dist/context/context.js +157 -0
  34. package/dist/context/context.js.map +1 -0
  35. package/dist/context/contextCache.d.ts +50 -0
  36. package/dist/context/contextCache.d.ts.map +1 -0
  37. package/dist/context/contextCache.js +175 -0
  38. package/dist/context/contextCache.js.map +1 -0
  39. package/dist/context/index.d.ts +11 -0
  40. package/dist/context/index.d.ts.map +1 -0
  41. package/dist/context/index.js +8 -0
  42. package/dist/context/index.js.map +1 -0
  43. package/dist/credential-stores/index.d.ts +4 -0
  44. package/dist/credential-stores/index.d.ts.map +1 -0
  45. package/dist/credential-stores/index.js +4 -0
  46. package/dist/credential-stores/index.js.map +1 -0
  47. package/dist/credential-stores/keychain-store.d.ts +100 -0
  48. package/dist/credential-stores/keychain-store.d.ts.map +1 -0
  49. package/dist/credential-stores/keychain-store.js +225 -0
  50. package/dist/credential-stores/keychain-store.js.map +1 -0
  51. package/dist/credential-stores/memory-store.d.ts +39 -0
  52. package/dist/credential-stores/memory-store.d.ts.map +1 -0
  53. package/dist/credential-stores/memory-store.js +58 -0
  54. package/dist/credential-stores/memory-store.js.map +1 -0
  55. package/dist/credential-stores/nango-store.d.ts +59 -0
  56. package/dist/credential-stores/nango-store.d.ts.map +1 -0
  57. package/dist/credential-stores/nango-store.js +264 -0
  58. package/dist/credential-stores/nango-store.js.map +1 -0
  59. package/dist/credential-stuffer/CredentialStuffer.d.ts +80 -0
  60. package/dist/credential-stuffer/CredentialStuffer.d.ts.map +1 -0
  61. package/dist/credential-stuffer/CredentialStuffer.js +186 -0
  62. package/dist/credential-stuffer/CredentialStuffer.js.map +1 -0
  63. package/dist/credential-stuffer/index.d.ts +2 -0
  64. package/dist/credential-stuffer/index.d.ts.map +1 -0
  65. package/dist/credential-stuffer/index.js +2 -0
  66. package/dist/credential-stuffer/index.js.map +1 -0
  67. package/dist/data-access/agentDataComponents.d.ts +1 -0
  68. package/dist/data-access/agentDataComponents.d.ts.map +1 -0
  69. package/dist/data-access/agentDataComponents.js +2 -0
  70. package/dist/data-access/agentDataComponents.js.map +1 -0
  71. package/dist/data-access/agentGraphs.d.ts +406 -0
  72. package/dist/data-access/agentGraphs.d.ts.map +1 -0
  73. package/dist/data-access/agentGraphs.js +551 -0
  74. package/dist/data-access/agentGraphs.js.map +1 -0
  75. package/dist/data-access/agentRelations.d.ts +456 -0
  76. package/dist/data-access/agentRelations.d.ts.map +1 -0
  77. package/dist/data-access/agentRelations.js +471 -0
  78. package/dist/data-access/agentRelations.js.map +1 -0
  79. package/dist/data-access/agents.d.ts +218 -0
  80. package/dist/data-access/agents.d.ts.map +1 -0
  81. package/dist/data-access/agents.js +130 -0
  82. package/dist/data-access/agents.js.map +1 -0
  83. package/dist/data-access/apiKeys.d.ts +114 -0
  84. package/dist/data-access/apiKeys.d.ts.map +1 -0
  85. package/dist/data-access/apiKeys.js +185 -0
  86. package/dist/data-access/apiKeys.js.map +1 -0
  87. package/dist/data-access/artifactComponents.d.ts +152 -0
  88. package/dist/data-access/artifactComponents.d.ts.map +1 -0
  89. package/dist/data-access/artifactComponents.js +214 -0
  90. package/dist/data-access/artifactComponents.js.map +1 -0
  91. package/dist/data-access/contextCache.d.ts +68 -0
  92. package/dist/data-access/contextCache.d.ts.map +1 -0
  93. package/dist/data-access/contextCache.js +160 -0
  94. package/dist/data-access/contextCache.js.map +1 -0
  95. package/dist/data-access/contextConfigs.d.ts +110 -0
  96. package/dist/data-access/contextConfigs.d.ts.map +1 -0
  97. package/dist/data-access/contextConfigs.js +156 -0
  98. package/dist/data-access/contextConfigs.js.map +1 -0
  99. package/dist/data-access/conversations.d.ts +125 -0
  100. package/dist/data-access/conversations.d.ts.map +1 -0
  101. package/dist/data-access/conversations.js +244 -0
  102. package/dist/data-access/conversations.js.map +1 -0
  103. package/dist/data-access/credentialReferences.d.ts +86 -0
  104. package/dist/data-access/credentialReferences.d.ts.map +1 -0
  105. package/dist/data-access/credentialReferences.js +175 -0
  106. package/dist/data-access/credentialReferences.js.map +1 -0
  107. package/dist/data-access/dataComponents.d.ts +129 -0
  108. package/dist/data-access/dataComponents.d.ts.map +1 -0
  109. package/dist/data-access/dataComponents.js +213 -0
  110. package/dist/data-access/dataComponents.js.map +1 -0
  111. package/dist/data-access/externalAgents.d.ts +83 -0
  112. package/dist/data-access/externalAgents.d.ts.map +1 -0
  113. package/dist/data-access/externalAgents.js +163 -0
  114. package/dist/data-access/externalAgents.js.map +1 -0
  115. package/dist/data-access/graphFull.d.ts +32 -0
  116. package/dist/data-access/graphFull.d.ts.map +1 -0
  117. package/dist/data-access/graphFull.js +995 -0
  118. package/dist/data-access/graphFull.js.map +1 -0
  119. package/dist/data-access/index.d.ts +21 -0
  120. package/dist/data-access/index.d.ts.map +1 -0
  121. package/dist/data-access/index.js +22 -0
  122. package/dist/data-access/index.js.map +1 -0
  123. package/dist/data-access/ledgerArtifacts.d.ts +50 -0
  124. package/dist/data-access/ledgerArtifacts.d.ts.map +1 -0
  125. package/dist/data-access/ledgerArtifacts.js +112 -0
  126. package/dist/data-access/ledgerArtifacts.js.map +1 -0
  127. package/dist/data-access/messages.d.ts +209 -0
  128. package/dist/data-access/messages.d.ts.map +1 -0
  129. package/dist/data-access/messages.js +100 -0
  130. package/dist/data-access/messages.js.map +1 -0
  131. package/dist/data-access/projects.d.ts +67 -0
  132. package/dist/data-access/projects.d.ts.map +1 -0
  133. package/dist/data-access/projects.js +336 -0
  134. package/dist/data-access/projects.js.map +1 -0
  135. package/dist/data-access/tasks.d.ts +37 -0
  136. package/dist/data-access/tasks.d.ts.map +1 -0
  137. package/dist/data-access/tasks.js +40 -0
  138. package/dist/data-access/tasks.js.map +1 -0
  139. package/dist/data-access/tools.d.ts +277 -0
  140. package/dist/data-access/tools.d.ts.map +1 -0
  141. package/dist/data-access/tools.js +183 -0
  142. package/dist/data-access/tools.js.map +1 -0
  143. package/dist/data-access/validation.d.ts +17 -0
  144. package/dist/data-access/validation.d.ts.map +1 -0
  145. package/dist/data-access/validation.js +52 -0
  146. package/dist/data-access/validation.js.map +1 -0
  147. package/dist/db/clean.d.ts +6 -0
  148. package/dist/db/clean.d.ts.map +1 -0
  149. package/dist/db/clean.js +81 -0
  150. package/dist/db/clean.js.map +1 -0
  151. package/dist/db/client.d.ts +19 -0
  152. package/dist/db/client.d.ts.map +1 -0
  153. package/dist/db/client.js +24 -0
  154. package/dist/db/client.js.map +1 -0
  155. package/dist/db/schema.d.ts +4337 -0
  156. package/dist/db/schema.d.ts.map +1 -0
  157. package/dist/db/schema.js +696 -0
  158. package/dist/db/schema.js.map +1 -0
  159. package/dist/db/test-client.d.ts +25 -0
  160. package/dist/db/test-client.d.ts.map +1 -0
  161. package/dist/db/test-client.js +136 -0
  162. package/dist/db/test-client.js.map +1 -0
  163. package/dist/env.d.ts +17 -0
  164. package/dist/env.d.ts.map +1 -0
  165. package/dist/env.js +48 -0
  166. package/dist/env.js.map +1 -0
  167. package/dist/index.d.ts +13 -0
  168. package/dist/index.d.ts.map +1 -0
  169. package/dist/index.js +14 -0
  170. package/dist/index.js.map +1 -0
  171. package/dist/middleware/contextValidation.d.ts +48 -0
  172. package/dist/middleware/contextValidation.d.ts.map +1 -0
  173. package/dist/middleware/contextValidation.js +469 -0
  174. package/dist/middleware/contextValidation.js.map +1 -0
  175. package/dist/middleware/index.d.ts +2 -0
  176. package/dist/middleware/index.d.ts.map +1 -0
  177. package/dist/middleware/index.js +2 -0
  178. package/dist/middleware/index.js.map +1 -0
  179. package/dist/server/BaseServer.d.ts +83 -0
  180. package/dist/server/BaseServer.d.ts.map +1 -0
  181. package/dist/server/BaseServer.js +218 -0
  182. package/dist/server/BaseServer.js.map +1 -0
  183. package/dist/types/a2a.d.ts +373 -0
  184. package/dist/types/a2a.d.ts.map +1 -0
  185. package/dist/types/a2a.js +14 -0
  186. package/dist/types/a2a.js.map +1 -0
  187. package/dist/types/entities.d.ts +147 -0
  188. package/dist/types/entities.d.ts.map +1 -0
  189. package/dist/types/entities.js +2 -0
  190. package/dist/types/entities.js.map +1 -0
  191. package/dist/types/index.d.ts +5 -0
  192. package/dist/types/index.d.ts.map +1 -0
  193. package/dist/types/index.js +6 -0
  194. package/dist/types/index.js.map +1 -0
  195. package/dist/types/server.d.ts +116 -0
  196. package/dist/types/server.d.ts.map +1 -0
  197. package/dist/types/server.js +2 -0
  198. package/dist/types/server.js.map +1 -0
  199. package/dist/types/utility.d.ts +214 -0
  200. package/dist/types/utility.d.ts.map +1 -0
  201. package/dist/types/utility.js +9 -0
  202. package/dist/types/utility.js.map +1 -0
  203. package/dist/utils/apiKeys.d.ts +32 -0
  204. package/dist/utils/apiKeys.d.ts.map +1 -0
  205. package/dist/utils/apiKeys.js +117 -0
  206. package/dist/utils/apiKeys.js.map +1 -0
  207. package/dist/utils/auth-detection.d.ts +23 -0
  208. package/dist/utils/auth-detection.d.ts.map +1 -0
  209. package/dist/utils/auth-detection.js +148 -0
  210. package/dist/utils/auth-detection.js.map +1 -0
  211. package/dist/utils/credential-store-utils.d.ts +11 -0
  212. package/dist/utils/credential-store-utils.d.ts.map +1 -0
  213. package/dist/utils/credential-store-utils.js +19 -0
  214. package/dist/utils/credential-store-utils.js.map +1 -0
  215. package/dist/utils/error.d.ts +526 -0
  216. package/dist/utils/error.d.ts.map +1 -0
  217. package/dist/utils/error.js +282 -0
  218. package/dist/utils/error.js.map +1 -0
  219. package/dist/utils/execution.d.ts +18 -0
  220. package/dist/utils/execution.d.ts.map +1 -0
  221. package/dist/utils/execution.js +25 -0
  222. package/dist/utils/execution.js.map +1 -0
  223. package/dist/utils/index.d.ts +9 -0
  224. package/dist/utils/index.d.ts.map +1 -0
  225. package/dist/utils/index.js +9 -0
  226. package/dist/utils/index.js.map +1 -0
  227. package/dist/utils/logger.d.ts +79 -0
  228. package/dist/utils/logger.d.ts.map +1 -0
  229. package/dist/utils/logger.js +102 -0
  230. package/dist/utils/logger.js.map +1 -0
  231. package/dist/utils/logging.d.ts +11 -0
  232. package/dist/utils/logging.d.ts.map +1 -0
  233. package/dist/utils/logging.js +6 -0
  234. package/dist/utils/logging.js.map +1 -0
  235. package/dist/utils/mcp-client.d.ts +48 -0
  236. package/dist/utils/mcp-client.d.ts.map +1 -0
  237. package/dist/utils/mcp-client.js +171 -0
  238. package/dist/utils/mcp-client.js.map +1 -0
  239. package/dist/utils/tracer.d.ts +24 -0
  240. package/dist/utils/tracer.d.ts.map +1 -0
  241. package/dist/utils/tracer.js +98 -0
  242. package/dist/utils/tracer.js.map +1 -0
  243. package/dist/validation/graphFull.d.ts +36 -0
  244. package/dist/validation/graphFull.d.ts.map +1 -0
  245. package/dist/validation/graphFull.js +128 -0
  246. package/dist/validation/graphFull.js.map +1 -0
  247. package/dist/validation/id-validation.d.ts +38 -0
  248. package/dist/validation/id-validation.d.ts.map +1 -0
  249. package/dist/validation/id-validation.js +60 -0
  250. package/dist/validation/id-validation.js.map +1 -0
  251. package/dist/validation/index.d.ts +4 -0
  252. package/dist/validation/index.d.ts.map +1 -0
  253. package/dist/validation/index.js +5 -0
  254. package/dist/validation/index.js.map +1 -0
  255. package/dist/validation/schemas.d.ts +7233 -0
  256. package/dist/validation/schemas.d.ts.map +1 -0
  257. package/dist/validation/schemas.js +525 -0
  258. package/dist/validation/schemas.js.map +1 -0
  259. package/package.json +89 -0
@@ -0,0 +1,469 @@
1
+ import Ajv from 'ajv';
2
+ import { ContextResolver } from '../context/ContextResolver.js';
3
+ import { getAgentGraphWithDefaultAgent } from '../data-access/agentGraphs.js';
4
+ import { getContextConfigById } from '../data-access/contextConfigs.js';
5
+ import { getLogger } from '../utils/logger.js';
6
+ import { getRequestExecutionContext } from '../utils/execution.js';
7
+ const logger = getLogger('context-validation');
8
+ const ajv = new Ajv({ allErrors: true, strict: false });
9
+ // Constants for HTTP request parts
10
+ export const HTTP_REQUEST_PARTS = ['body', 'headers', 'query', 'params'];
11
+ // Schema compilation cache for performance
12
+ const schemaCache = new Map();
13
+ // Type guard for validating HTTP request objects
14
+ export function isValidHttpRequest(obj) {
15
+ return (obj != null &&
16
+ typeof obj === 'object' &&
17
+ !Array.isArray(obj) &&
18
+ HTTP_REQUEST_PARTS.some((key) => key in obj));
19
+ }
20
+ // Cached schema compilation for performance
21
+ export function getCachedValidator(schema) {
22
+ const key = JSON.stringify(schema);
23
+ if (!schemaCache.has(key)) {
24
+ schemaCache.set(key, ajv.compile(schema));
25
+ }
26
+ const validator = schemaCache.get(key);
27
+ if (!validator) {
28
+ throw new Error('Failed to compile JSON schema');
29
+ }
30
+ return validator;
31
+ }
32
+ // Validation wrapper for testing purposes (now uses cache)
33
+ export function validationHelper(jsonSchema) {
34
+ return getCachedValidator(jsonSchema);
35
+ }
36
+ export function validateAgainstJsonSchema(jsonSchema, context) {
37
+ logger.debug({ jsonSchema, context }, 'Validating context against JSON Schema');
38
+ const validate = validationHelper(jsonSchema);
39
+ return validate(context);
40
+ }
41
+ /**
42
+ * Recursively filters data based on JSON schema properties
43
+ */
44
+ function filterByJsonSchema(data, schema) {
45
+ if (!schema || data === null || data === undefined) {
46
+ return data;
47
+ }
48
+ // Handle object schemas
49
+ if (schema.type === 'object' &&
50
+ schema.properties &&
51
+ typeof data === 'object' &&
52
+ !Array.isArray(data)) {
53
+ const filtered = {};
54
+ for (const [key, propSchema] of Object.entries(schema.properties)) {
55
+ if (key in data) {
56
+ // Recursively filter nested objects
57
+ filtered[key] = filterByJsonSchema(data[key], propSchema);
58
+ }
59
+ }
60
+ return filtered;
61
+ }
62
+ // Handle array schemas
63
+ if (schema.type === 'array' && schema.items && Array.isArray(data)) {
64
+ return data.map((item) => filterByJsonSchema(item, schema.items));
65
+ }
66
+ // Handle anyOf/oneOf schemas (take the first that might match)
67
+ if (schema.anyOf && Array.isArray(schema.anyOf)) {
68
+ // For anyOf, try to find the best matching schema
69
+ for (const subSchema of schema.anyOf) {
70
+ if (subSchema.type && typeof data === subSchema.type) {
71
+ return filterByJsonSchema(data, subSchema);
72
+ }
73
+ }
74
+ // If no specific type match, use the first schema
75
+ return filterByJsonSchema(data, schema.anyOf[0]);
76
+ }
77
+ // For primitive types or schemas without properties, return as-is
78
+ return data;
79
+ }
80
+ /**
81
+ * Filters validated context to only include keys defined in the schema
82
+ * This prevents storing extra keys from .passthrough() schemas in the cache
83
+ * Now supports recursive filtering of nested objects
84
+ */
85
+ function filterContextToSchemaKeys(validatedContext, schemas) {
86
+ const filteredContext = {};
87
+ for (const part of HTTP_REQUEST_PARTS) {
88
+ if (validatedContext[part] && schemas[part]) {
89
+ const schema = schemas[part];
90
+ const partData = validatedContext[part];
91
+ // Use recursive filtering
92
+ const filteredPart = filterByJsonSchema(partData, schema);
93
+ if (filteredPart !== null && filteredPart !== undefined) {
94
+ // Only include if the filtered result has content
95
+ if (typeof filteredPart === 'object' && Object.keys(filteredPart).length > 0) {
96
+ filteredContext[part] = filteredPart;
97
+ }
98
+ else if (typeof filteredPart !== 'object') {
99
+ filteredContext[part] = filteredPart;
100
+ }
101
+ }
102
+ }
103
+ else if (validatedContext[part]) {
104
+ // Part exists but no schema - still include for compatibility
105
+ filteredContext[part] = validatedContext[part];
106
+ }
107
+ }
108
+ return filteredContext;
109
+ }
110
+ /**
111
+ * Filters legacy context to only include keys defined in the JSON schema
112
+ * Now supports recursive filtering of nested objects
113
+ */
114
+ function filterLegacyContextToSchemaKeys(validatedContext, jsonSchema) {
115
+ return filterByJsonSchema(validatedContext, jsonSchema);
116
+ }
117
+ /**
118
+ * Checks if the schema is in the new comprehensive request format
119
+ */
120
+ export function isComprehensiveRequestSchema(schema) {
121
+ return (schema &&
122
+ typeof schema === 'object' &&
123
+ 'schemas' in schema &&
124
+ typeof schema.schemas === 'object');
125
+ }
126
+ /**
127
+ * Validates HTTP request parts against comprehensive schema
128
+ */
129
+ export async function validateHttpRequestParts(comprehensiveSchema, httpRequest) {
130
+ const errors = [];
131
+ const validatedParts = {};
132
+ // Type guard validation
133
+ if (!isValidHttpRequest(httpRequest)) {
134
+ return {
135
+ valid: false,
136
+ errors: [
137
+ {
138
+ field: 'httpRequest',
139
+ message: 'Invalid HTTP request format - must contain at least one of: body, headers, query, params',
140
+ },
141
+ ],
142
+ };
143
+ }
144
+ try {
145
+ const { schemas, optional = [] } = comprehensiveSchema;
146
+ // Validate each part if schema is defined
147
+ for (const part of HTTP_REQUEST_PARTS) {
148
+ if (schemas[part] && httpRequest[part] !== undefined) {
149
+ try {
150
+ const partSchema = schemas[part];
151
+ const validate = validationHelper(partSchema);
152
+ const isValid = validate(httpRequest[part]);
153
+ if (isValid) {
154
+ validatedParts[part] = httpRequest[part];
155
+ }
156
+ else {
157
+ // Convert AJV errors for this part
158
+ if (validate.errors) {
159
+ for (const error of validate.errors) {
160
+ errors.push({
161
+ field: `${part}.${error.instancePath || 'root'}`,
162
+ message: `${part} ${error.message}`,
163
+ value: error.data,
164
+ });
165
+ }
166
+ }
167
+ }
168
+ }
169
+ catch (validationError) {
170
+ errors.push({
171
+ field: part,
172
+ message: `Failed to validate ${part}: ${validationError instanceof Error ? validationError.message : 'Unknown error'}`,
173
+ });
174
+ }
175
+ }
176
+ else if (schemas[part] && httpRequest[part] === undefined) {
177
+ // Check if this schema part is marked as optional
178
+ const isPartOptional = optional.includes(part);
179
+ if (!isPartOptional) {
180
+ // Part is required but missing
181
+ errors.push({
182
+ field: part,
183
+ message: `Required ${part} is missing`,
184
+ });
185
+ }
186
+ // If optional, we simply skip it (no error, no validation)
187
+ }
188
+ }
189
+ const filteredContext = errors.length === 0 ? filterContextToSchemaKeys(validatedParts, schemas) : undefined;
190
+ return {
191
+ valid: errors.length === 0,
192
+ errors,
193
+ validatedContext: filteredContext,
194
+ };
195
+ }
196
+ catch (error) {
197
+ logger.error({ error: error instanceof Error ? error.message : 'Unknown error' }, 'Failed to validate comprehensive request schema');
198
+ return {
199
+ valid: false,
200
+ errors: [
201
+ {
202
+ field: 'schema',
203
+ message: 'Failed to validate comprehensive request schema',
204
+ },
205
+ ],
206
+ };
207
+ }
208
+ }
209
+ /**
210
+ * Fetches the request context from the context cache if it exists
211
+ */
212
+ async function fetchExistingRequestContext({ tenantId, projectId, contextConfig, conversationId, dbClient, }) {
213
+ //If no request context is provided, but this is a continued conversation first try to get the request context from the context cache
214
+ const contextResolver = new ContextResolver(tenantId, projectId, dbClient);
215
+ const requestContext = await contextResolver.resolveRequestContext(conversationId, contextConfig.id);
216
+ if (Object.keys(requestContext).length > 0) {
217
+ return {
218
+ valid: true,
219
+ errors: [],
220
+ validatedContext: requestContext,
221
+ };
222
+ }
223
+ throw new Error('No request context found in cache. Please provide requestContext in request body.');
224
+ }
225
+ /**
226
+ * Validates request context against the JSON Schema stored in context configuration
227
+ * Supports both legacy simple schemas and new comprehensive HTTP request schemas
228
+ */
229
+ export async function validateRequestContext(tenantId, projectId, graphId, conversationId, parsedRequest, dbClient, legacyRequestContext // legacy request context if it was included in the request body
230
+ ) {
231
+ try {
232
+ // Get the graph's context config
233
+ const agentGraph = await getAgentGraphWithDefaultAgent(dbClient)({
234
+ scopes: { tenantId, projectId },
235
+ graphId,
236
+ });
237
+ if (!agentGraph?.contextConfigId) {
238
+ // No context config means no validation needed
239
+ logger.debug({ graphId }, 'No context config found for graph, skipping validation');
240
+ return {
241
+ valid: true,
242
+ errors: [],
243
+ validatedContext: parsedRequest,
244
+ };
245
+ }
246
+ // Get context configuration
247
+ const contextConfig = await getContextConfigById(dbClient)({
248
+ scopes: { tenantId, projectId },
249
+ id: agentGraph.contextConfigId,
250
+ });
251
+ if (!contextConfig) {
252
+ logger.warn({ contextConfigId: agentGraph.contextConfigId }, 'Context config not found');
253
+ return {
254
+ valid: false,
255
+ errors: [
256
+ {
257
+ field: 'contextConfig',
258
+ message: 'Context configuration not found',
259
+ },
260
+ ],
261
+ };
262
+ }
263
+ // If no request context schema is defined, any context is valid
264
+ if (!contextConfig.requestContextSchema) {
265
+ logger.debug({ contextConfigId: contextConfig.id }, 'No request context schema defined, accepting any context');
266
+ return {
267
+ valid: true,
268
+ errors: [],
269
+ validatedContext: parsedRequest,
270
+ };
271
+ }
272
+ // Validate against the schema - handle both legacy and new formats
273
+ try {
274
+ const schema = contextConfig.requestContextSchema;
275
+ // Check if it's the new comprehensive request schema format
276
+ if (isComprehensiveRequestSchema(schema)) {
277
+ logger.debug({ contextConfigId: contextConfig.id }, 'Using comprehensive HTTP request schema validation');
278
+ // For comprehensive schema, expect the requestContext to have HTTP parts
279
+ const httpRequest = parsedRequest;
280
+ const validationResult = await validateHttpRequestParts(schema, httpRequest);
281
+ if (validationResult.valid) {
282
+ return validationResult;
283
+ }
284
+ //If the request context is not valid, try to fetch it from the context cache
285
+ try {
286
+ return await fetchExistingRequestContext({
287
+ tenantId,
288
+ projectId,
289
+ contextConfig,
290
+ conversationId,
291
+ dbClient,
292
+ });
293
+ }
294
+ catch (_error) {
295
+ validationResult.errors.push({
296
+ field: 'requestContext',
297
+ message: 'Failed to fetch request context from cache',
298
+ });
299
+ return validationResult;
300
+ }
301
+ }
302
+ else {
303
+ // Legacy validation - treat as simple JSON Schema
304
+ logger.debug({ contextConfigId: contextConfig.id }, 'Using legacy JSON schema validation');
305
+ const jsonSchema = schema;
306
+ const validate = validationHelper(jsonSchema);
307
+ // Validate the request context
308
+ const isValid = validate(legacyRequestContext);
309
+ if (isValid) {
310
+ logger.debug({
311
+ contextConfigId: contextConfig.id,
312
+ requestContextKeys: Object.keys(legacyRequestContext),
313
+ }, 'Request context validation successful');
314
+ const filteredContext = filterLegacyContextToSchemaKeys(legacyRequestContext, jsonSchema);
315
+ return {
316
+ valid: true,
317
+ errors: [],
318
+ validatedContext: filteredContext,
319
+ };
320
+ }
321
+ // Convert AJV errors to our format
322
+ const errors = [];
323
+ if (validate.errors) {
324
+ for (const error of validate.errors) {
325
+ errors.push({
326
+ field: error.instancePath || error.schemaPath || 'root',
327
+ message: `${error.instancePath || 'root'} ${error.message}`,
328
+ value: error.data,
329
+ });
330
+ }
331
+ }
332
+ logger.warn({
333
+ contextConfigId: contextConfig.id,
334
+ legacyRequestContext,
335
+ errors,
336
+ }, 'Legacy request context validation failed, trying cache fallback');
337
+ // Try to fetch from cache as fallback, same as comprehensive schemas
338
+ try {
339
+ return await fetchExistingRequestContext({
340
+ tenantId,
341
+ projectId,
342
+ contextConfig,
343
+ conversationId,
344
+ dbClient,
345
+ });
346
+ }
347
+ catch (error) {
348
+ // Cache fallback failed, return original validation errors
349
+ errors.push({
350
+ field: 'requestContext',
351
+ message: 'Failed to fetch request context from cache',
352
+ });
353
+ return {
354
+ valid: false,
355
+ errors,
356
+ };
357
+ }
358
+ }
359
+ }
360
+ catch (error) {
361
+ logger.error({
362
+ contextConfigId: contextConfig.id,
363
+ error: error instanceof Error ? error.message : 'Unknown error',
364
+ }, 'Failed to compile or validate schema');
365
+ return {
366
+ valid: false,
367
+ errors: [
368
+ {
369
+ field: 'schema',
370
+ message: 'Invalid schema definition or validation error',
371
+ },
372
+ ],
373
+ };
374
+ }
375
+ }
376
+ catch (error) {
377
+ logger.error({
378
+ tenantId,
379
+ graphId,
380
+ error: error instanceof Error ? error.message : 'Unknown error',
381
+ }, 'Failed to validate request context');
382
+ return {
383
+ valid: false,
384
+ errors: [
385
+ {
386
+ field: 'validation',
387
+ message: 'Context validation failed due to internal error',
388
+ },
389
+ ],
390
+ };
391
+ }
392
+ }
393
+ /**
394
+ * Hono middleware for context validation
395
+ */
396
+ export function contextValidationMiddleware(dbClient) {
397
+ return async (c, next) => {
398
+ try {
399
+ const executionContext = getRequestExecutionContext(c);
400
+ let { tenantId, projectId, graphId } = executionContext;
401
+ if (!tenantId || !projectId || !graphId) {
402
+ // Fallback to path parameters for to handle management api routes
403
+ tenantId = c.req.param('tenantId');
404
+ projectId = c.req.param('projectId');
405
+ graphId = c.req.param('graphId');
406
+ }
407
+ if (!tenantId || !projectId || !graphId) {
408
+ return next(); // Let the main handler deal with missing params
409
+ }
410
+ const body = await c.req.json();
411
+ const conversationId = body.conversationId || '';
412
+ // Extract HTTP parts from the request for comprehensive validation
413
+ let url;
414
+ try {
415
+ url = new URL(c.req.url);
416
+ }
417
+ catch (error) {
418
+ logger.warn({ error: error instanceof Error ? error.message : 'Unknown error' }, `Invalid URL: ${c.req.url}`);
419
+ return c.json({ error: 'Invalid request URL' }, 400);
420
+ }
421
+ const query = {};
422
+ for (const [key, value] of url.searchParams) {
423
+ query[key] = value;
424
+ }
425
+ // Get headers
426
+ const headers = {};
427
+ c.req.raw.headers.forEach((value, key) => {
428
+ headers[key.toLowerCase()] = value;
429
+ });
430
+ const parsedRequest = {
431
+ body: body || {},
432
+ headers,
433
+ query,
434
+ params: c.req.param() || {},
435
+ };
436
+ // Validate the context
437
+ const validationResult = await validateRequestContext(tenantId, projectId, graphId, conversationId, parsedRequest, dbClient, body.requestContext);
438
+ if (!validationResult.valid) {
439
+ logger.warn({
440
+ tenantId,
441
+ graphId,
442
+ errors: validationResult.errors,
443
+ }, 'Request context validation failed');
444
+ return c.json({
445
+ error: 'Invalid request context',
446
+ details: validationResult.errors,
447
+ }, 400);
448
+ }
449
+ // Store validated context for use in the main handler
450
+ c.set('validatedContext', validationResult.validatedContext);
451
+ logger.debug({
452
+ tenantId,
453
+ graphId,
454
+ contextKeys: Object.keys(validationResult.validatedContext || {}),
455
+ }, 'Request context validation successful');
456
+ return next();
457
+ }
458
+ catch (error) {
459
+ logger.error({
460
+ error: error instanceof Error ? error.message : 'Unknown error',
461
+ }, 'Context validation middleware error');
462
+ return c.json({
463
+ error: 'Context validation failed',
464
+ message: 'Internal validation error',
465
+ }, 500);
466
+ }
467
+ };
468
+ }
469
+ //# sourceMappingURL=contextValidation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contextValidation.js","sourceRoot":"","sources":["../../src/middleware/contextValidation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './contextValidation.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './contextValidation.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/middleware/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,83 @@
1
+ import type { Server as HttpServer } from 'node:http';
2
+ import type { Http2Server } from 'node:http2';
3
+ import { OpenAPIHono } from '@hono/zod-openapi';
4
+ import type { CredentialStore, AgentFrameworkServerConfig, ServerOptions } from '../types/server.js';
5
+ import type { ExecutionContext } from '../types/utility.js';
6
+ /**
7
+ * OpenAPIHono instance pre-configured with ExecutionContext variables
8
+ * Usage: const app = new OpenApiHonoScoped()
9
+ */
10
+ export declare class OpenApiHonoWithExecutionContext extends OpenAPIHono<{
11
+ Variables: {
12
+ executionContext: ExecutionContext;
13
+ };
14
+ }> {
15
+ constructor();
16
+ }
17
+ /**
18
+ * Base server class providing common functionality for all Inkeep services
19
+ * Handles credential stores, server lifecycle, graceful shutdown, and error handling
20
+ */
21
+ export declare abstract class BaseServer {
22
+ protected config: AgentFrameworkServerConfig;
23
+ protected app: OpenApiHonoWithExecutionContext | null;
24
+ protected credentialStores: Map<string, CredentialStore>;
25
+ protected server: HttpServer | Http2Server | null;
26
+ protected isShuttingDown: boolean;
27
+ protected logger: any;
28
+ constructor(config: AgentFrameworkServerConfig | undefined, logger: any);
29
+ /**
30
+ * Get a credential store by ID
31
+ */
32
+ getCredentialStore(id: string): CredentialStore | undefined;
33
+ /**
34
+ * Add a credential store
35
+ */
36
+ addCredentialStore(store: CredentialStore): void;
37
+ /**
38
+ * Get all credential stores
39
+ */
40
+ getCredentialStores(): CredentialStore[];
41
+ /**
42
+ * Abstract method to initialize the application
43
+ * Each service implements this to load their specific app
44
+ */
45
+ protected abstract initialize(): Promise<void>;
46
+ /**
47
+ * Get default server options - can be overridden by subclasses
48
+ */
49
+ protected getServerOptions(): ServerOptions;
50
+ /**
51
+ * Start the server
52
+ */
53
+ serve(): Promise<void>;
54
+ /**
55
+ * Setup graceful shutdown handlers for various signals
56
+ */
57
+ protected setupGracefulShutdown(): void;
58
+ /**
59
+ * Perform graceful shutdown - can be overridden by subclasses for custom cleanup
60
+ */
61
+ protected gracefulShutdown(): Promise<void>;
62
+ /**
63
+ * Hook for subclasses to perform cleanup before shutdown
64
+ */
65
+ protected beforeShutdown(): Promise<void>;
66
+ /**
67
+ * Stop the server gracefully
68
+ */
69
+ stop(): Promise<void>;
70
+ /**
71
+ * Get the Hono app instance (for testing or advanced usage)
72
+ */
73
+ getApp(): OpenApiHonoWithExecutionContext | null;
74
+ /**
75
+ * Get the current configuration
76
+ */
77
+ getConfig(): AgentFrameworkServerConfig;
78
+ /**
79
+ * Check if the server is currently shutting down
80
+ */
81
+ isShuttingDownStatus(): boolean;
82
+ }
83
+ //# sourceMappingURL=BaseServer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BaseServer.d.ts","sourceRoot":"","sources":["../../src/server/BaseServer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EACV,eAAe,EACf,0BAA0B,EAC1B,aAAa,EACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D;;;GAGG;AACH,qBAAa,+BAAgC,SAAQ,WAAW,CAAC;IAC/D,SAAS,EAAE;QACT,gBAAgB,EAAE,gBAAgB,CAAC;KACpC,CAAC;CACH,CAAC;;CAID;AAID;;;GAGG;AACH,8BAAsB,UAAU;IAC9B,SAAS,CAAC,MAAM,EAAE,0BAA0B,CAAC;IAC7C,SAAS,CAAC,GAAG,EAAE,+BAA+B,GAAG,IAAI,CAAQ;IAC7D,SAAS,CAAC,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAAa;IACrE,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,WAAW,GAAG,IAAI,CAAQ;IACzD,SAAS,CAAC,cAAc,UAAS;IACjC,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC;gBAEV,MAAM,EAAE,0BAA0B,YAAK,EAAE,MAAM,EAAE,GAAG;IAYhE;;OAEG;IACH,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAI3D;;OAEG;IACH,kBAAkB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAIhD;;OAEG;IACH,mBAAmB,IAAI,eAAe,EAAE;IAIxC;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAE9C;;OAEG;IACH,SAAS,CAAC,gBAAgB,IAAI,aAAa;IAU3C;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA2B5B;;OAEG;IACH,SAAS,CAAC,qBAAqB,IAAI,IAAI;IA2BvC;;OAEG;cACa,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC;IA0BjD;;OAEG;cACa,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAK/C;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IA0D3B;;OAEG;IACH,MAAM,IAAI,+BAA+B,GAAG,IAAI;IAIhD;;OAEG;IACH,SAAS,IAAI,0BAA0B;IAIvC;;OAEG;IACH,oBAAoB,IAAI,OAAO;CAGhC"}