@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,298 @@
1
+ import crypto from 'node:crypto';
2
+ import { SpanStatusCode } from '@opentelemetry/api';
3
+ import { ContextCache } from './contextCache.js';
4
+ import { createSpanName, getGlobalTracer, handleSpanError, getLogger } from '../utils/index.js';
5
+ import { ContextFetcher } from './ContextFetcher.js';
6
+ const logger = getLogger('context-resolver');
7
+ // Get tracer using centralized utility
8
+ const tracer = getGlobalTracer();
9
+ export class ContextResolver {
10
+ fetcher;
11
+ cache;
12
+ tenantId;
13
+ projectId;
14
+ constructor(tenantId, projectId, dbClient, agentFramework) {
15
+ this.tenantId = tenantId;
16
+ this.projectId = projectId;
17
+ this.fetcher = new ContextFetcher(tenantId, projectId, dbClient, agentFramework);
18
+ this.cache = new ContextCache(tenantId, projectId, dbClient);
19
+ logger.info({
20
+ tenantId: this.tenantId,
21
+ hasCredentialSupport: !!agentFramework,
22
+ }, 'ContextResolver initialized');
23
+ }
24
+ /**
25
+ * Resolve all contexts for a given configuration and trigger event
26
+ */
27
+ async resolve(contextConfig, options) {
28
+ const startTime = Date.now();
29
+ logger.info({
30
+ contextConfigId: contextConfig.id,
31
+ triggerEvent: options.triggerEvent,
32
+ conversationId: options.conversationId,
33
+ }, 'Starting context resolution');
34
+ // Create parent span for the entire context resolution process
35
+ return tracer.startActiveSpan(createSpanName('context.resolve'), {
36
+ attributes: {
37
+ 'context.config_id': contextConfig.id,
38
+ 'context.trigger_event': options.triggerEvent,
39
+ },
40
+ }, async (parentSpan) => {
41
+ try {
42
+ const result = {
43
+ resolvedContext: {},
44
+ requestContext: options.requestContext || {},
45
+ fetchedDefinitions: [],
46
+ cacheHits: [],
47
+ cacheMisses: [],
48
+ errors: [],
49
+ totalDurationMs: 0,
50
+ };
51
+ // Include request context in resolved context under the key 'requestContext'
52
+ result.resolvedContext.requestContext = result.requestContext;
53
+ const currentRequestContext = await this.cache.get({
54
+ conversationId: options.conversationId,
55
+ contextConfigId: contextConfig.id,
56
+ contextVariableKey: 'requestContext',
57
+ });
58
+ if (options.requestContext && Object.keys(options.requestContext).length > 0) {
59
+ // Invalidate the current request context
60
+ await this.cache.invalidateRequestContext(this.tenantId, this.projectId, options.conversationId, contextConfig.id);
61
+ logger.info({
62
+ conversationId: options.conversationId,
63
+ contextConfigId: contextConfig.id,
64
+ }, 'Invalidated request context in cache');
65
+ // Push the new request context to the cache
66
+ await this.cache.set({
67
+ contextConfigId: contextConfig.id,
68
+ contextVariableKey: 'requestContext',
69
+ conversationId: options.conversationId,
70
+ value: options.requestContext,
71
+ tenantId: this.tenantId,
72
+ });
73
+ logger.info({
74
+ conversationId: options.conversationId,
75
+ contextConfigId: contextConfig.id,
76
+ }, 'Request context set in cache');
77
+ }
78
+ else if (currentRequestContext) {
79
+ result.requestContext = currentRequestContext.value;
80
+ }
81
+ else {
82
+ result.requestContext = {};
83
+ }
84
+ result.resolvedContext.requestContext = result.requestContext;
85
+ // Get all context variables - we'll handle trigger events through cache invalidation
86
+ const contextVariables = contextConfig.contextVariables || {};
87
+ const contextVariableEntries = Object.entries(contextVariables);
88
+ if (contextVariableEntries.length === 0) {
89
+ logger.info({
90
+ contextConfigId: contextConfig.id,
91
+ }, 'No context variables in context config');
92
+ result.totalDurationMs = Date.now() - startTime;
93
+ parentSpan.setStatus({ code: SpanStatusCode.OK });
94
+ return result;
95
+ }
96
+ // Separate definitions by trigger type for cache invalidation logic
97
+ const initializationDefs = contextVariableEntries.filter(([, def]) => def.trigger === 'initialization');
98
+ const invocationDefs = contextVariableEntries.filter(([, def]) => def.trigger === 'invocation');
99
+ // For invocation trigger, invalidate invocation definition cache entries first
100
+ if (options.triggerEvent === 'invocation' && invocationDefs.length > 0) {
101
+ await this.cache.invalidateInvocationDefinitions(this.tenantId, this.projectId, options.conversationId, contextConfig.id, invocationDefs.map(([, def]) => def.id));
102
+ }
103
+ // Create request hash for cache invalidation
104
+ const requestHash = this.createRequestHash(result.requestContext);
105
+ // Execute all context variables in parallel (no dependencies)
106
+ const fetchPromises = contextVariableEntries.map(([templateKey, definition]) => this.resolveSingleFetchDefinition(contextConfig, definition, templateKey, options, requestHash, result).catch((error) => {
107
+ // Handle individual fetch failures without stopping others
108
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
109
+ logger.error({
110
+ contextConfigId: contextConfig.id,
111
+ definitionId: definition.id,
112
+ templateKey,
113
+ error: errorMessage,
114
+ }, 'Failed to resolve context variable');
115
+ result.errors.push({
116
+ definitionId: definition.id,
117
+ error: errorMessage,
118
+ });
119
+ // Use default value if available
120
+ if (definition.defaultValue !== undefined) {
121
+ result.resolvedContext[templateKey] = definition.defaultValue;
122
+ logger.info({
123
+ contextConfigId: contextConfig.id,
124
+ definitionId: definition.id,
125
+ templateKey,
126
+ }, 'Using default value for failed context variable');
127
+ }
128
+ }));
129
+ // Wait for all fetches to complete
130
+ await Promise.all(fetchPromises);
131
+ result.totalDurationMs = Date.now() - startTime;
132
+ parentSpan.addEvent('context.resolution.completed', {
133
+ resolved_keys: Object.keys(result.resolvedContext),
134
+ fetched_definitions: result.fetchedDefinitions,
135
+ });
136
+ // Check if there were any errors during context resolution
137
+ if (result.errors.length > 0) {
138
+ parentSpan.setStatus({
139
+ code: SpanStatusCode.ERROR,
140
+ message: `Context resolution completed with errors`,
141
+ });
142
+ }
143
+ else {
144
+ // Mark span as successful if no errors
145
+ parentSpan.setStatus({ code: SpanStatusCode.OK });
146
+ }
147
+ logger.info({
148
+ contextConfigId: contextConfig.id,
149
+ resolvedKeys: Object.keys(result.resolvedContext),
150
+ fetchedDefinitions: result.fetchedDefinitions.length,
151
+ cacheHits: result.cacheHits.length,
152
+ cacheMisses: result.cacheMisses.length,
153
+ errors: result.errors.length,
154
+ totalDurationMs: result.totalDurationMs,
155
+ }, 'Context resolution completed');
156
+ return result;
157
+ }
158
+ catch (error) {
159
+ const durationMs = Date.now() - startTime;
160
+ // Use helper function for consistent error handling
161
+ handleSpanError(parentSpan, error);
162
+ logger.error({
163
+ contextConfigId: contextConfig.id,
164
+ error: error instanceof Error ? error.message : String(error),
165
+ durationMs,
166
+ }, 'Context resolution failed');
167
+ throw error;
168
+ }
169
+ finally {
170
+ parentSpan.end();
171
+ }
172
+ });
173
+ }
174
+ /**
175
+ * Resolve a single context variable
176
+ */
177
+ async resolveSingleFetchDefinition(contextConfig, definition, templateKey, options, requestHash, result) {
178
+ // Create parent span for individual context variable resolution
179
+ return tracer.startActiveSpan(createSpanName('context-resolver.resolve_single_fetch_definition'), {
180
+ attributes: {
181
+ 'context.definition_id': definition.id,
182
+ 'context.template_key': templateKey,
183
+ 'context.url': definition.fetchConfig.url,
184
+ 'context.method': definition.fetchConfig.method,
185
+ 'context.trigger': definition.trigger,
186
+ },
187
+ }, async (parentSpan) => {
188
+ try {
189
+ // Check cache first
190
+ const cachedEntry = await this.cache.get({
191
+ conversationId: options.conversationId,
192
+ contextConfigId: contextConfig.id,
193
+ contextVariableKey: templateKey,
194
+ requestHash,
195
+ });
196
+ if (cachedEntry) {
197
+ result.resolvedContext[templateKey] = cachedEntry.value;
198
+ result.cacheHits.push(definition.id);
199
+ // Mark span as successful (cache hit)
200
+ parentSpan.setStatus({ code: SpanStatusCode.OK });
201
+ parentSpan.addEvent('context.cache_hit', {
202
+ definition_id: definition.id,
203
+ template_key: templateKey,
204
+ });
205
+ logger.debug({
206
+ definitionId: definition.id,
207
+ templateKey,
208
+ conversationId: options.conversationId,
209
+ }, 'Cache hit for context variable');
210
+ return;
211
+ }
212
+ // Cache miss - fetch the data
213
+ result.cacheMisses.push(definition.id);
214
+ parentSpan.addEvent('context.cache_miss', {
215
+ definition_id: definition.id,
216
+ template_key: templateKey,
217
+ });
218
+ logger.debug({
219
+ definitionId: definition.id,
220
+ templateKey,
221
+ conversationId: options.conversationId,
222
+ }, 'Cache miss for context variable, fetching data');
223
+ // Fetch the data with conversationId in the fetch config
224
+ const definitionWithConversationId = {
225
+ ...definition,
226
+ fetchConfig: {
227
+ ...definition.fetchConfig,
228
+ conversationId: options.conversationId,
229
+ },
230
+ };
231
+ const fetchedData = await this.fetcher.fetch(definitionWithConversationId, result.resolvedContext);
232
+ // Store in resolved context
233
+ result.resolvedContext[templateKey] = fetchedData;
234
+ result.fetchedDefinitions.push(definition.id);
235
+ // Cache the result (unified cache)
236
+ await this.cache.set({
237
+ contextConfigId: contextConfig.id,
238
+ contextVariableKey: templateKey,
239
+ conversationId: options.conversationId,
240
+ value: fetchedData,
241
+ requestHash,
242
+ tenantId: this.tenantId,
243
+ });
244
+ // Mark span as successful
245
+ parentSpan.setStatus({ code: SpanStatusCode.OK });
246
+ parentSpan.addEvent('context.fetch_success', {
247
+ definition_id: definition.id,
248
+ template_key: templateKey,
249
+ source: definition.fetchConfig.url,
250
+ });
251
+ logger.debug({
252
+ definitionId: definition.id,
253
+ templateKey,
254
+ conversationId: options.conversationId,
255
+ }, 'Context variable resolved and cached');
256
+ }
257
+ catch (error) {
258
+ // Use helper function for consistent error handling
259
+ handleSpanError(parentSpan, error);
260
+ throw error;
261
+ }
262
+ finally {
263
+ parentSpan.end();
264
+ }
265
+ });
266
+ }
267
+ /**
268
+ * Resolve the request context for a given conversation
269
+ */
270
+ async resolveRequestContext(conversationId, contextConfigId) {
271
+ const cachedEntry = await this.cache.get({
272
+ conversationId: conversationId,
273
+ contextConfigId: contextConfigId,
274
+ contextVariableKey: 'requestContext',
275
+ });
276
+ if (cachedEntry) {
277
+ return cachedEntry.value;
278
+ }
279
+ return {};
280
+ }
281
+ /**
282
+ * Create a hash of the request context for cache invalidation
283
+ */
284
+ createRequestHash(requestContext) {
285
+ const contextString = JSON.stringify(requestContext, Object.keys(requestContext).sort());
286
+ return crypto.createHash('sha256').update(contextString).digest('hex').substring(0, 16);
287
+ }
288
+ /**
289
+ * Clear cache
290
+ */
291
+ async clearCache(tenantId, projectId, conversationId) {
292
+ await this.cache.clearConversation(tenantId, projectId, conversationId);
293
+ logger.info({
294
+ conversationId,
295
+ }, 'Context cache cleared for conversation');
296
+ }
297
+ }
298
+ //# sourceMappingURL=ContextResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ContextResolver.js","sourceRoot":"","sources":["../../src/context/ContextResolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ export interface TemplateContext {
2
+ [key: string]: unknown;
3
+ }
4
+ export interface TemplateRenderOptions {
5
+ strict?: boolean;
6
+ preserveUnresolved?: boolean;
7
+ }
8
+ export declare class TemplateEngine {
9
+ private static readonly DEFAULT_OPTIONS;
10
+ /**
11
+ * Render a template string with context data using JMESPath
12
+ */
13
+ static render(template: string, context: TemplateContext, options?: TemplateRenderOptions): string;
14
+ /**
15
+ * Process variable substitutions {{variable.path}} using JMESPath
16
+ */
17
+ private static processVariables;
18
+ /**
19
+ * Process built-in variables like $now, $env, etc.
20
+ */
21
+ private static processBuiltinVariable;
22
+ /**
23
+ * Check if template contains template variables
24
+ */
25
+ private static hasTemplateVariables;
26
+ /**
27
+ * Extract all template variables from a template
28
+ */
29
+ private static extractTemplateVariables;
30
+ /**
31
+ * Validate template syntax
32
+ */
33
+ static validateTemplate(template: string): {
34
+ valid: boolean;
35
+ errors: string[];
36
+ };
37
+ /**
38
+ * Preview template rendering with sample context
39
+ */
40
+ static preview(template: string, sampleContext: TemplateContext, options?: TemplateRenderOptions): {
41
+ rendered: string;
42
+ variables: string[];
43
+ errors: string[];
44
+ };
45
+ }
46
+ //# sourceMappingURL=TemplateEngine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplateEngine.d.ts","sourceRoot":"","sources":["../../src/context/TemplateEngine.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,eAAe;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAGrC;IAEF;;OAEG;IACH,MAAM,CAAC,MAAM,CACX,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,eAAe,EACxB,OAAO,GAAE,qBAA0B,GAClC,MAAM;IA2BT;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,gBAAgB;IA8D/B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,sBAAsB;IA2BrC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAInC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,wBAAwB;IAavC;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,EAAE,CAAA;KAAE;IA+B/E;;OAEG;IACH,MAAM,CAAC,OAAO,CACZ,QAAQ,EAAE,MAAM,EAChB,aAAa,EAAE,eAAe,EAC9B,OAAO,GAAE,qBAA0B,GAClC;QACD,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB;CAkBF"}
@@ -0,0 +1,175 @@
1
+ import jmespath from 'jmespath';
2
+ import { getLogger } from '../utils/logger.js';
3
+ const logger = getLogger('template-engine');
4
+ export class TemplateEngine {
5
+ static DEFAULT_OPTIONS = {
6
+ strict: false,
7
+ preserveUnresolved: false,
8
+ };
9
+ /**
10
+ * Render a template string with context data using JMESPath
11
+ */
12
+ static render(template, context, options = {}) {
13
+ const opts = { ...TemplateEngine.DEFAULT_OPTIONS, ...options };
14
+ try {
15
+ // Process template variables using JMESPath
16
+ const rendered = TemplateEngine.processVariables(template, context, opts);
17
+ // Check for unresolved variables if strict mode
18
+ if (opts.strict && TemplateEngine.hasTemplateVariables(rendered)) {
19
+ const unresolvedVars = TemplateEngine.extractTemplateVariables(rendered);
20
+ throw new Error(`Unresolved template variables: ${unresolvedVars.join(', ')}`);
21
+ }
22
+ return rendered;
23
+ }
24
+ catch (error) {
25
+ logger.error({
26
+ template: template.substring(0, 100) + (template.length > 100 ? '...' : ''),
27
+ contextKeys: Object.keys(context),
28
+ error: error instanceof Error ? error.message : 'Unknown error',
29
+ }, 'Template rendering failed');
30
+ throw error;
31
+ }
32
+ }
33
+ /**
34
+ * Process variable substitutions {{variable.path}} using JMESPath
35
+ */
36
+ static processVariables(template, context, options) {
37
+ return template.replace(/\{\{([^}]+)\}\}/g, (match, path) => {
38
+ const trimmedPath = path.trim();
39
+ try {
40
+ // Handle special built-in variables
41
+ if (trimmedPath.startsWith('$')) {
42
+ return TemplateEngine.processBuiltinVariable(trimmedPath);
43
+ }
44
+ // Use JMESPath to extract value from context
45
+ const result = jmespath.search(context, trimmedPath);
46
+ if (result === undefined || result === null) {
47
+ if (options.strict) {
48
+ throw new Error(`Template variable '${trimmedPath}' not found in context`);
49
+ }
50
+ if (options.preserveUnresolved) {
51
+ return match; // Keep original template
52
+ }
53
+ logger.warn({
54
+ variable: trimmedPath,
55
+ availableKeys: Object.keys(context),
56
+ }, 'Template variable not found in context');
57
+ return ''; // Replace with empty string
58
+ }
59
+ // Handle different types of values
60
+ if (typeof result === 'object') {
61
+ return JSON.stringify(result);
62
+ }
63
+ return String(result);
64
+ }
65
+ catch (error) {
66
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
67
+ if (options.strict) {
68
+ throw new Error(`Failed to resolve template variable '${trimmedPath}': ${errorMessage}`);
69
+ }
70
+ logger.error({
71
+ variable: trimmedPath,
72
+ error: errorMessage,
73
+ }, 'Failed to resolve template variable');
74
+ return options.preserveUnresolved ? match : '';
75
+ }
76
+ });
77
+ }
78
+ /**
79
+ * Process built-in variables like $now, $env, etc.
80
+ */
81
+ static processBuiltinVariable(variable) {
82
+ switch (variable) {
83
+ case '$now':
84
+ return new Date().toISOString();
85
+ case '$timestamp':
86
+ return Date.now().toString();
87
+ case '$date':
88
+ return new Date().toDateString();
89
+ case '$time':
90
+ return new Date().toTimeString();
91
+ default:
92
+ // Check for environment variables like $env.NODE_ENV
93
+ if (variable.startsWith('$env.')) {
94
+ const envVar = variable.substring(5);
95
+ return process.env[envVar] || '';
96
+ }
97
+ logger.warn({
98
+ variable,
99
+ }, 'Unknown built-in variable');
100
+ return '';
101
+ }
102
+ }
103
+ /**
104
+ * Check if template contains template variables
105
+ */
106
+ static hasTemplateVariables(template) {
107
+ return /\{\{[^}]+\}\}/.test(template);
108
+ }
109
+ /**
110
+ * Extract all template variables from a template
111
+ */
112
+ static extractTemplateVariables(template) {
113
+ const variables = [];
114
+ const regex = /\{\{([^}]+)\}\}/g;
115
+ const matches = template.matchAll(regex);
116
+ for (const match of matches) {
117
+ if (!match[1]) {
118
+ continue;
119
+ }
120
+ variables.push(match[1].trim());
121
+ }
122
+ return [...new Set(variables)]; // Remove duplicates
123
+ }
124
+ /**
125
+ * Validate template syntax
126
+ */
127
+ static validateTemplate(template) {
128
+ const errors = [];
129
+ try {
130
+ // Check for balanced braces
131
+ const openBraces = (template.match(/\{\{/g) || []).length;
132
+ const closeBraces = (template.match(/\}\}/g) || []).length;
133
+ if (openBraces !== closeBraces) {
134
+ errors.push(`Unbalanced template braces: ${openBraces} opening, ${closeBraces} closing`);
135
+ }
136
+ // Extract and validate variable paths
137
+ const variables = TemplateEngine.extractTemplateVariables(template);
138
+ for (const variable of variables) {
139
+ if (variable.includes('{{') || variable.includes('}}')) {
140
+ errors.push(`Nested template syntax in variable: ${variable}`);
141
+ }
142
+ }
143
+ return { valid: errors.length === 0, errors };
144
+ }
145
+ catch (error) {
146
+ return {
147
+ valid: false,
148
+ errors: [
149
+ `Template validation error: ${error instanceof Error ? error.message : 'Unknown error'}`,
150
+ ],
151
+ };
152
+ }
153
+ }
154
+ /**
155
+ * Preview template rendering with sample context
156
+ */
157
+ static preview(template, sampleContext, options = {}) {
158
+ const variables = TemplateEngine.extractTemplateVariables(template);
159
+ const errors = [];
160
+ let rendered = '';
161
+ try {
162
+ rendered = TemplateEngine.render(template, sampleContext, options);
163
+ }
164
+ catch (error) {
165
+ errors.push(error instanceof Error ? error.message : 'Unknown rendering error');
166
+ rendered = template; // Return original template on error
167
+ }
168
+ return {
169
+ rendered,
170
+ variables,
171
+ errors,
172
+ };
173
+ }
174
+ }
175
+ //# sourceMappingURL=TemplateEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TemplateEngine.js","sourceRoot":"","sources":["../../src/context/TemplateEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { type ResolvedContext } from './ContextResolver.js';
2
+ import { type DatabaseClient } from '@inkeep/agents-core';
3
+ declare function determineContextTrigger(tenantId: string, projectId: string, conversationId: string, dbClient: DatabaseClient): Promise<'initialization' | 'invocation'>;
4
+ declare function handleContextConfigChange(tenantId: string, projectId: string, conversationId: string, graphId: string, newContextConfigId: string, dbClient: DatabaseClient): Promise<void>;
5
+ declare function handleContextResolution(tenantId: string, projectId: string, conversationId: string, graphId: string, requestContext: Record<string, unknown>, dbClient: DatabaseClient): Promise<ResolvedContext | null>;
6
+ export { handleContextResolution, determineContextTrigger, handleContextConfigChange };
7
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/context/context.ts"],"names":[],"mappings":"AACA,OAAO,EAAmB,KAAK,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG7E,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,qBAAqB,CAAC;AAQ7B,iBAAe,uBAAuB,CACpC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,gBAAgB,GAAG,YAAY,CAAC,CAa1C;AAGD,iBAAe,yBAAyB,CACtC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EACf,kBAAkB,EAAE,MAAM,EAC1B,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,IAAI,CAAC,CAuBf;AAGD,iBAAe,uBAAuB,CACpC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,QAAQ,EAAE,cAAc,GACvB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAsJjC;AAED,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,CAAC"}