@inkeep/agents-run-api 0.0.0-dev-20250910232631

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 (152) hide show
  1. package/LICENSE.md +49 -0
  2. package/README.md +117 -0
  3. package/dist/__tests__/setup.d.ts +4 -0
  4. package/dist/__tests__/setup.d.ts.map +1 -0
  5. package/dist/__tests__/setup.js +80 -0
  6. package/dist/__tests__/utils/testProject.d.ts +18 -0
  7. package/dist/__tests__/utils/testProject.d.ts.map +1 -0
  8. package/dist/__tests__/utils/testProject.js +26 -0
  9. package/dist/__tests__/utils/testRequest.d.ts +8 -0
  10. package/dist/__tests__/utils/testRequest.d.ts.map +1 -0
  11. package/dist/__tests__/utils/testRequest.js +32 -0
  12. package/dist/__tests__/utils/testTenant.d.ts +64 -0
  13. package/dist/__tests__/utils/testTenant.d.ts.map +1 -0
  14. package/dist/__tests__/utils/testTenant.js +71 -0
  15. package/dist/a2a/client.d.ts +182 -0
  16. package/dist/a2a/client.d.ts.map +1 -0
  17. package/dist/a2a/client.js +645 -0
  18. package/dist/a2a/handlers.d.ts +4 -0
  19. package/dist/a2a/handlers.d.ts.map +1 -0
  20. package/dist/a2a/handlers.js +656 -0
  21. package/dist/a2a/transfer.d.ts +18 -0
  22. package/dist/a2a/transfer.d.ts.map +1 -0
  23. package/dist/a2a/transfer.js +22 -0
  24. package/dist/a2a/types.d.ts +63 -0
  25. package/dist/a2a/types.d.ts.map +1 -0
  26. package/dist/a2a/types.js +1 -0
  27. package/dist/agents/Agent.d.ts +151 -0
  28. package/dist/agents/Agent.d.ts.map +1 -0
  29. package/dist/agents/Agent.js +1164 -0
  30. package/dist/agents/ModelFactory.d.ts +62 -0
  31. package/dist/agents/ModelFactory.d.ts.map +1 -0
  32. package/dist/agents/ModelFactory.js +208 -0
  33. package/dist/agents/SystemPromptBuilder.d.ts +14 -0
  34. package/dist/agents/SystemPromptBuilder.d.ts.map +1 -0
  35. package/dist/agents/SystemPromptBuilder.js +62 -0
  36. package/dist/agents/ToolSessionManager.d.ts +53 -0
  37. package/dist/agents/ToolSessionManager.d.ts.map +1 -0
  38. package/dist/agents/ToolSessionManager.js +106 -0
  39. package/dist/agents/artifactTools.d.ts +30 -0
  40. package/dist/agents/artifactTools.d.ts.map +1 -0
  41. package/dist/agents/artifactTools.js +463 -0
  42. package/dist/agents/generateTaskHandler.d.ts +41 -0
  43. package/dist/agents/generateTaskHandler.d.ts.map +1 -0
  44. package/dist/agents/generateTaskHandler.js +350 -0
  45. package/dist/agents/relationTools.d.ts +35 -0
  46. package/dist/agents/relationTools.d.ts.map +1 -0
  47. package/dist/agents/relationTools.js +246 -0
  48. package/dist/agents/types.d.ts +23 -0
  49. package/dist/agents/types.d.ts.map +1 -0
  50. package/dist/agents/types.js +1 -0
  51. package/dist/agents/versions/V1Config.d.ts +21 -0
  52. package/dist/agents/versions/V1Config.d.ts.map +1 -0
  53. package/dist/agents/versions/V1Config.js +285 -0
  54. package/dist/app.d.ts +5 -0
  55. package/dist/app.d.ts.map +1 -0
  56. package/dist/app.js +219 -0
  57. package/dist/data/agentGraph.d.ts +4 -0
  58. package/dist/data/agentGraph.d.ts.map +1 -0
  59. package/dist/data/agentGraph.js +73 -0
  60. package/dist/data/agents.d.ts +4 -0
  61. package/dist/data/agents.d.ts.map +1 -0
  62. package/dist/data/agents.js +78 -0
  63. package/dist/data/conversations.d.ts +59 -0
  64. package/dist/data/conversations.d.ts.map +1 -0
  65. package/dist/data/conversations.js +216 -0
  66. package/dist/data/db/clean.d.ts +6 -0
  67. package/dist/data/db/clean.d.ts.map +1 -0
  68. package/dist/data/db/clean.js +77 -0
  69. package/dist/data/db/dbClient.d.ts +3 -0
  70. package/dist/data/db/dbClient.d.ts.map +1 -0
  71. package/dist/data/db/dbClient.js +13 -0
  72. package/dist/env.d.ts +45 -0
  73. package/dist/env.d.ts.map +1 -0
  74. package/dist/env.js +64 -0
  75. package/dist/handlers/executionHandler.d.ts +36 -0
  76. package/dist/handlers/executionHandler.d.ts.map +1 -0
  77. package/dist/handlers/executionHandler.js +415 -0
  78. package/dist/index.d.ts +11 -0
  79. package/dist/index.d.ts.map +1 -0
  80. package/dist/index.js +28 -0
  81. package/dist/instrumentation.d.ts +13 -0
  82. package/dist/instrumentation.d.ts.map +1 -0
  83. package/dist/instrumentation.js +66 -0
  84. package/dist/logger.d.ts +4 -0
  85. package/dist/logger.d.ts.map +1 -0
  86. package/dist/logger.js +32 -0
  87. package/dist/middleware/api-key-auth.d.ts +22 -0
  88. package/dist/middleware/api-key-auth.d.ts.map +1 -0
  89. package/dist/middleware/api-key-auth.js +139 -0
  90. package/dist/middleware/index.d.ts +2 -0
  91. package/dist/middleware/index.d.ts.map +1 -0
  92. package/dist/middleware/index.js +1 -0
  93. package/dist/openapi.d.ts +2 -0
  94. package/dist/openapi.d.ts.map +1 -0
  95. package/dist/openapi.js +36 -0
  96. package/dist/routes/agents.d.ts +10 -0
  97. package/dist/routes/agents.d.ts.map +1 -0
  98. package/dist/routes/agents.js +158 -0
  99. package/dist/routes/chat.d.ts +10 -0
  100. package/dist/routes/chat.d.ts.map +1 -0
  101. package/dist/routes/chat.js +307 -0
  102. package/dist/routes/chatDataStream.d.ts +10 -0
  103. package/dist/routes/chatDataStream.d.ts.map +1 -0
  104. package/dist/routes/chatDataStream.js +185 -0
  105. package/dist/routes/mcp.d.ts +10 -0
  106. package/dist/routes/mcp.d.ts.map +1 -0
  107. package/dist/routes/mcp.js +500 -0
  108. package/dist/tracer.d.ts +24 -0
  109. package/dist/tracer.d.ts.map +1 -0
  110. package/dist/tracer.js +107 -0
  111. package/dist/types/chat.d.ts +25 -0
  112. package/dist/types/chat.d.ts.map +1 -0
  113. package/dist/types/chat.js +1 -0
  114. package/dist/types/execution-context.d.ts +14 -0
  115. package/dist/types/execution-context.d.ts.map +1 -0
  116. package/dist/types/execution-context.js +14 -0
  117. package/dist/utils/agent-operations.d.ts +93 -0
  118. package/dist/utils/agent-operations.d.ts.map +1 -0
  119. package/dist/utils/agent-operations.js +78 -0
  120. package/dist/utils/artifact-component-schema.d.ts +29 -0
  121. package/dist/utils/artifact-component-schema.d.ts.map +1 -0
  122. package/dist/utils/artifact-component-schema.js +119 -0
  123. package/dist/utils/artifact-parser.d.ts +71 -0
  124. package/dist/utils/artifact-parser.d.ts.map +1 -0
  125. package/dist/utils/artifact-parser.js +253 -0
  126. package/dist/utils/cleanup.d.ts +19 -0
  127. package/dist/utils/cleanup.d.ts.map +1 -0
  128. package/dist/utils/cleanup.js +66 -0
  129. package/dist/utils/data-component-schema.d.ts +6 -0
  130. package/dist/utils/data-component-schema.d.ts.map +1 -0
  131. package/dist/utils/data-component-schema.js +43 -0
  132. package/dist/utils/graph-session.d.ts +230 -0
  133. package/dist/utils/graph-session.d.ts.map +1 -0
  134. package/dist/utils/graph-session.js +1199 -0
  135. package/dist/utils/incremental-stream-parser.d.ts +62 -0
  136. package/dist/utils/incremental-stream-parser.d.ts.map +1 -0
  137. package/dist/utils/incremental-stream-parser.js +330 -0
  138. package/dist/utils/response-formatter.d.ts +26 -0
  139. package/dist/utils/response-formatter.d.ts.map +1 -0
  140. package/dist/utils/response-formatter.js +158 -0
  141. package/dist/utils/stream-helpers.d.ts +186 -0
  142. package/dist/utils/stream-helpers.d.ts.map +1 -0
  143. package/dist/utils/stream-helpers.js +603 -0
  144. package/dist/utils/stream-registry.d.ts +18 -0
  145. package/dist/utils/stream-registry.d.ts.map +1 -0
  146. package/dist/utils/stream-registry.js +33 -0
  147. package/package.json +95 -0
  148. package/templates/v1/artifact.xml +7 -0
  149. package/templates/v1/data-component.xml +9 -0
  150. package/templates/v1/system-prompt.xml +52 -0
  151. package/templates/v1/thinking-preparation.xml +34 -0
  152. package/templates/v1/tool.xml +12 -0
@@ -0,0 +1,62 @@
1
+ import type { LanguageModel } from 'ai';
2
+ export interface ModelSettings {
3
+ model?: string;
4
+ providerOptions?: Record<string, unknown>;
5
+ }
6
+ /**
7
+ * Factory for creating AI SDK language models from configuration
8
+ * Supports multiple providers and AI Gateway integration
9
+ */
10
+ export declare class ModelFactory {
11
+ /**
12
+ * Default model settingsuration to use when no model settings is provided
13
+ * Uses provider defaults for all parameters
14
+ */
15
+ private static readonly DEFAULT_MODEL_CONFIG;
16
+ /**
17
+ * Create a language model instance from configuration
18
+ * Falls back to default Anthropic model if no config provided
19
+ */
20
+ static createModel(config?: ModelSettings | null): LanguageModel;
21
+ /**
22
+ * Supported providers for security validation
23
+ */
24
+ private static readonly SUPPORTED_PROVIDERS;
25
+ /**
26
+ * Parse model string to extract provider and model name
27
+ * Examples: "anthropic/claude-4-sonnet" -> { provider: "anthropic", modelName: "claude-4-sonnet" }
28
+ * "claude-4-sonnet" -> { provider: "anthropic", modelName: "claude-4-sonnet" } (default to anthropic)
29
+ */
30
+ static parseModelString(modelString: string): {
31
+ provider: string;
32
+ modelName: string;
33
+ };
34
+ /**
35
+ * Create an Anthropic model instance
36
+ */
37
+ private static createAnthropicModel;
38
+ /**
39
+ * Create an OpenAI model instance
40
+ */
41
+ private static createOpenAIModel;
42
+ /**
43
+ * Get generation parameters from provider options
44
+ * These are parameters that get passed to generateText/streamText calls
45
+ */
46
+ static getGenerationParams(providerOptions?: Record<string, unknown>): Record<string, unknown>;
47
+ /**
48
+ * Prepare complete generation configuration from model settings
49
+ * Returns model instance and generation parameters ready to spread into generateText/streamText
50
+ * Includes maxDuration if specified in provider options (in seconds, following Vercel standard)
51
+ */
52
+ static prepareGenerationConfig(modelSettings?: ModelSettings): {
53
+ model: LanguageModel;
54
+ maxDuration?: number;
55
+ } & Record<string, unknown>;
56
+ /**
57
+ * Validate model settingsuration
58
+ * Basic validation only - let AI SDK handle parameter-specific validation
59
+ */
60
+ static validateConfig(config: ModelSettings): string[];
61
+ }
62
+ //# sourceMappingURL=ModelFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ModelFactory.d.ts","sourceRoot":"","sources":["../../src/agents/ModelFactory.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAKxC,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC3C;AAED;;;GAGG;AACH,qBAAa,YAAY;IACvB;;;OAGG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,oBAAoB,CAE1C;IAEF;;;OAGG;IACH,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,IAAI,GAAG,aAAa;IAiDhE;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAoC;IAE/E;;;;OAIG;IACH,MAAM,CAAC,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IA+BrF;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAqCnC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAgChC;;;OAGG;IACH,MAAM,CAAC,mBAAmB,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAoB9F;;;;OAIG;IACH,MAAM,CAAC,uBAAuB,CAC5B,aAAa,CAAC,EAAE,aAAa,GAC5B;QAAE,KAAK,EAAE,aAAa,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAsB3E;;;OAGG;IACH,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,EAAE;CA4BvD"}
@@ -0,0 +1,208 @@
1
+ import { anthropic, createAnthropic } from '@ai-sdk/anthropic';
2
+ import { createOpenAI, openai } from '@ai-sdk/openai';
3
+ import { getLogger } from '../logger';
4
+ const logger = getLogger('ModelFactory');
5
+ /**
6
+ * Factory for creating AI SDK language models from configuration
7
+ * Supports multiple providers and AI Gateway integration
8
+ */
9
+ export class ModelFactory {
10
+ /**
11
+ * Default model settingsuration to use when no model settings is provided
12
+ * Uses provider defaults for all parameters
13
+ */
14
+ static DEFAULT_MODEL_CONFIG = {
15
+ model: 'anthropic/claude-4-sonnet-20250514',
16
+ };
17
+ /**
18
+ * Create a language model instance from configuration
19
+ * Falls back to default Anthropic model if no config provided
20
+ */
21
+ static createModel(config) {
22
+ // Use default config if none provided
23
+ const modelSettings = config || ModelFactory.DEFAULT_MODEL_CONFIG;
24
+ // Extract provider from model string (e.g., "anthropic/claude-4-sonnet" -> "anthropic")
25
+ // Handle empty strings by falling back to default
26
+ const modelString = modelSettings.model?.trim() || ModelFactory.DEFAULT_MODEL_CONFIG.model;
27
+ const { provider, modelName } = ModelFactory.parseModelString(modelString);
28
+ logger.debug({
29
+ provider,
30
+ model: modelName,
31
+ fullModelString: modelSettings.model,
32
+ hasProviderOptions: !!modelSettings.providerOptions,
33
+ }, 'Creating language model from config');
34
+ try {
35
+ switch (provider) {
36
+ case 'anthropic':
37
+ return ModelFactory.createAnthropicModel(modelName, modelSettings.providerOptions);
38
+ case 'openai':
39
+ return ModelFactory.createOpenAIModel(modelName, modelSettings.providerOptions);
40
+ default:
41
+ logger.warn({ provider, modelName }, 'Unknown or unsupported provider, falling back to default Anthropic model');
42
+ return ModelFactory.createAnthropicModel('claude-4-sonnet-20250514');
43
+ }
44
+ }
45
+ catch (error) {
46
+ logger.error({
47
+ provider,
48
+ model: modelName,
49
+ error: error instanceof Error ? error.message : 'Unknown error',
50
+ }, 'Failed to create model, falling back to default');
51
+ // Fall back to default model if creation fails
52
+ return ModelFactory.createAnthropicModel('claude-4-sonnet-20250514');
53
+ }
54
+ }
55
+ /**
56
+ * Supported providers for security validation
57
+ */
58
+ static SUPPORTED_PROVIDERS = ['anthropic', 'openai'];
59
+ /**
60
+ * Parse model string to extract provider and model name
61
+ * Examples: "anthropic/claude-4-sonnet" -> { provider: "anthropic", modelName: "claude-4-sonnet" }
62
+ * "claude-4-sonnet" -> { provider: "anthropic", modelName: "claude-4-sonnet" } (default to anthropic)
63
+ */
64
+ static parseModelString(modelString) {
65
+ // Handle format like "provider/model-name"
66
+ if (modelString.includes('/')) {
67
+ const [provider, ...modelParts] = modelString.split('/');
68
+ const normalizedProvider = provider.toLowerCase();
69
+ // Validate provider is supported
70
+ if (!ModelFactory.SUPPORTED_PROVIDERS.includes(normalizedProvider)) {
71
+ logger.warn({ provider: normalizedProvider, modelName: modelParts.join('/') }, 'Unsupported provider detected, falling back to anthropic');
72
+ return {
73
+ provider: 'anthropic',
74
+ modelName: modelParts.join('/'),
75
+ };
76
+ }
77
+ return {
78
+ provider: normalizedProvider,
79
+ modelName: modelParts.join('/'), // In case model name has slashes
80
+ };
81
+ }
82
+ // Default to anthropic if no provider specified
83
+ return {
84
+ provider: 'anthropic',
85
+ modelName: modelString,
86
+ };
87
+ }
88
+ /**
89
+ * Create an Anthropic model instance
90
+ */
91
+ static createAnthropicModel(modelName, providerOptions) {
92
+ const anthropicConfig = {};
93
+ // Extract provider configuration (baseURL, etc.)
94
+ // Note: API keys should be provided via environment variables, not in configuration
95
+ if (providerOptions?.baseUrl || providerOptions?.baseURL) {
96
+ anthropicConfig.baseURL = providerOptions.baseUrl || providerOptions.baseURL;
97
+ }
98
+ // Handle AI Gateway configuration if present
99
+ if (providerOptions?.gateway) {
100
+ logger.info({ gateway: providerOptions.gateway }, 'Setting up AI Gateway for Anthropic model');
101
+ // AI Gateway configuration would go here
102
+ // This depends on the specific gateway implementation
103
+ Object.assign(anthropicConfig, providerOptions.gateway);
104
+ }
105
+ // For AI SDK v5, model parameters like temperature are passed to generateText/streamText,
106
+ // not to the model constructor. Only provider config (apiKey, baseURL) goes to the provider.
107
+ if (Object.keys(anthropicConfig).length > 0) {
108
+ logger.info({ config: anthropicConfig }, 'Applying custom Anthropic provider configuration');
109
+ // In AI SDK v5, use createAnthropic for custom config
110
+ const provider = createAnthropic(anthropicConfig);
111
+ return provider(modelName);
112
+ }
113
+ return anthropic(modelName);
114
+ }
115
+ /**
116
+ * Create an OpenAI model instance
117
+ */
118
+ static createOpenAIModel(modelName, providerOptions) {
119
+ const openaiConfig = {};
120
+ // Extract provider configuration (baseURL, etc.)
121
+ // Note: API keys should be provided via environment variables, not in configuration
122
+ if (providerOptions?.baseUrl || providerOptions?.baseURL) {
123
+ openaiConfig.baseURL = providerOptions.baseUrl || providerOptions.baseURL;
124
+ }
125
+ // Handle AI Gateway configuration if present
126
+ if (providerOptions?.gateway) {
127
+ logger.info({ gateway: providerOptions.gateway }, 'Setting up AI Gateway for OpenAI model');
128
+ Object.assign(openaiConfig, providerOptions.gateway);
129
+ }
130
+ // For AI SDK v5, model parameters like temperature are passed to generateText/streamText,
131
+ // not to the model constructor. Only provider config (apiKey, baseURL) goes to the provider.
132
+ if (Object.keys(openaiConfig).length > 0) {
133
+ logger.info({ config: openaiConfig }, 'Applying custom OpenAI provider configuration');
134
+ // In AI SDK v5, use createOpenAI for custom config
135
+ const provider = createOpenAI(openaiConfig);
136
+ return provider(modelName);
137
+ }
138
+ return openai(modelName);
139
+ }
140
+ /**
141
+ * Get generation parameters from provider options
142
+ * These are parameters that get passed to generateText/streamText calls
143
+ */
144
+ static getGenerationParams(providerOptions) {
145
+ if (!providerOptions) {
146
+ return {};
147
+ }
148
+ // Exclude provider config items (these go to createProvider, not generateText/streamText)
149
+ // Also exclude maxDuration as it's handled separately for timeouts
150
+ const excludedKeys = ['apiKey', 'baseURL', 'baseUrl', 'maxDuration'];
151
+ // Return all config except excluded items
152
+ const params = {};
153
+ for (const [key, value] of Object.entries(providerOptions)) {
154
+ if (!excludedKeys.includes(key) && value !== undefined) {
155
+ params[key] = value;
156
+ }
157
+ }
158
+ return params;
159
+ }
160
+ /**
161
+ * Prepare complete generation configuration from model settings
162
+ * Returns model instance and generation parameters ready to spread into generateText/streamText
163
+ * Includes maxDuration if specified in provider options (in seconds, following Vercel standard)
164
+ */
165
+ static prepareGenerationConfig(modelSettings) {
166
+ const modelString = modelSettings?.model?.trim() || 'anthropic/claude-4-sonnet-20250514';
167
+ // Create the model instance
168
+ const model = ModelFactory.createModel({
169
+ model: modelString,
170
+ providerOptions: modelSettings?.providerOptions,
171
+ });
172
+ // Get generation parameters (excludes maxDuration)
173
+ const generationParams = ModelFactory.getGenerationParams(modelSettings?.providerOptions);
174
+ // Extract maxDuration if present (Vercel standard, in seconds)
175
+ const maxDuration = modelSettings?.providerOptions?.maxDuration;
176
+ return {
177
+ model,
178
+ ...generationParams,
179
+ ...(maxDuration !== undefined && { maxDuration }),
180
+ };
181
+ }
182
+ /**
183
+ * Validate model settingsuration
184
+ * Basic validation only - let AI SDK handle parameter-specific validation
185
+ */
186
+ static validateConfig(config) {
187
+ const errors = [];
188
+ if (!config.model) {
189
+ errors.push('Model name is required');
190
+ }
191
+ // Validate provider options structure if present
192
+ if (config.providerOptions) {
193
+ // Security validation: Check for API keys in configuration
194
+ if (config.providerOptions.apiKey) {
195
+ errors.push('API keys should not be stored in provider options. ' +
196
+ 'Use environment variables (ANTHROPIC_API_KEY, OPENAI_API_KEY) or credential store instead.');
197
+ }
198
+ // Validate maxDuration if present
199
+ if (config.providerOptions.maxDuration !== undefined) {
200
+ const maxDuration = config.providerOptions.maxDuration;
201
+ if (typeof maxDuration !== 'number' || maxDuration <= 0) {
202
+ errors.push('maxDuration must be a positive number (in seconds)');
203
+ }
204
+ }
205
+ }
206
+ return errors;
207
+ }
208
+ }
@@ -0,0 +1,14 @@
1
+ import type { VersionConfig } from './types';
2
+ export declare class SystemPromptBuilder<TConfig> {
3
+ private version;
4
+ private versionConfig;
5
+ private templates;
6
+ private loaded;
7
+ constructor(version: string, versionConfig: VersionConfig<TConfig>);
8
+ private loadTemplates;
9
+ buildSystemPrompt(config: TConfig): Promise<string>;
10
+ private validateTemplateVariables;
11
+ getLoadedTemplates(): string[];
12
+ isLoaded(): boolean;
13
+ }
14
+ //# sourceMappingURL=SystemPromptBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SystemPromptBuilder.d.ts","sourceRoot":"","sources":["../../src/agents/SystemPromptBuilder.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAI7C,qBAAa,mBAAmB,CAAC,OAAO;IAKpC,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,aAAa;IALvB,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,MAAM,CAAS;gBAGb,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,aAAa,CAAC,OAAO,CAAC;YAGjC,aAAa;IA6Bd,iBAAiB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAUhE,OAAO,CAAC,yBAAyB;IAW1B,kBAAkB,IAAI,MAAM,EAAE;IAI9B,QAAQ,IAAI,OAAO;CAG3B"}
@@ -0,0 +1,62 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { dirname, join } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { getLogger } from '../logger';
5
+ const logger = getLogger('SystemPromptBuilder');
6
+ export class SystemPromptBuilder {
7
+ version;
8
+ versionConfig;
9
+ templates = new Map();
10
+ loaded = false;
11
+ constructor(version, versionConfig) {
12
+ this.version = version;
13
+ this.versionConfig = versionConfig;
14
+ }
15
+ async loadTemplates() {
16
+ if (this.loaded)
17
+ return;
18
+ try {
19
+ const currentDir = dirname(fileURLToPath(import.meta.url));
20
+ const templatesDir = join(currentDir, '..', '..', 'templates', this.version);
21
+ // Load all required template files for this version
22
+ const templatePromises = this.versionConfig.templateFiles.map(async (filename) => {
23
+ const filePath = join(templatesDir, filename);
24
+ const content = await readFile(filePath, 'utf-8');
25
+ const templateName = filename.replace('.xml', ''); // Remove extension for key
26
+ return [templateName, content];
27
+ });
28
+ const templateEntries = await Promise.all(templatePromises);
29
+ for (const [name, content] of templateEntries) {
30
+ this.templates.set(name, content);
31
+ }
32
+ this.loaded = true;
33
+ logger.debug(`Loaded ${this.templates.size} templates for version ${this.version}`);
34
+ }
35
+ catch (error) {
36
+ logger.error({ error }, `Failed to load templates for version ${this.version}`);
37
+ throw new Error(`Template loading failed: ${error}`);
38
+ }
39
+ }
40
+ async buildSystemPrompt(config) {
41
+ await this.loadTemplates();
42
+ // Validate that all required template variables are present
43
+ this.validateTemplateVariables(config);
44
+ // Let the version config handle assembly
45
+ return this.versionConfig.assemble(this.templates, config);
46
+ }
47
+ validateTemplateVariables(config) {
48
+ if (!config) {
49
+ throw new Error('Configuration object is required');
50
+ }
51
+ // Basic validation - version configs can add their own validation
52
+ if (typeof config !== 'object') {
53
+ throw new Error('Configuration must be an object');
54
+ }
55
+ }
56
+ getLoadedTemplates() {
57
+ return Array.from(this.templates.keys());
58
+ }
59
+ isLoaded() {
60
+ return this.loaded;
61
+ }
62
+ }
@@ -0,0 +1,53 @@
1
+ export interface ToolResultRecord {
2
+ toolCallId: string;
3
+ toolName: string;
4
+ args?: any;
5
+ result: any;
6
+ timestamp: number;
7
+ }
8
+ export interface ToolSession {
9
+ sessionId: string;
10
+ tenantId: string;
11
+ projectId: string;
12
+ contextId: string;
13
+ taskId: string;
14
+ toolResults: Map<string, ToolResultRecord>;
15
+ createdAt: number;
16
+ }
17
+ /**
18
+ * Manages tool execution state during agent generation sessions.
19
+ * Allows tools to access previous tool call results within the same execution.
20
+ */
21
+ export declare class ToolSessionManager {
22
+ private static instance;
23
+ private sessions;
24
+ private readonly SESSION_TIMEOUT;
25
+ private constructor();
26
+ static getInstance(): ToolSessionManager;
27
+ /**
28
+ * Create a new tool session for an agent execution
29
+ */
30
+ createSession(tenantId: string, projectId: string, contextId: string, taskId: string): string;
31
+ /**
32
+ * Record a tool result in the session
33
+ */
34
+ recordToolResult(sessionId: string, toolResult: ToolResultRecord): void;
35
+ /**
36
+ * Get a tool result by toolCallId within a session
37
+ */
38
+ getToolResult(sessionId: string, toolCallId: string): ToolResultRecord | undefined;
39
+ /**
40
+ * Get session info
41
+ */
42
+ getSession(sessionId: string): ToolSession | undefined;
43
+ /**
44
+ * Clean up a session after agent execution completes
45
+ */
46
+ endSession(sessionId: string): void;
47
+ /**
48
+ * Remove expired sessions to prevent memory leaks
49
+ */
50
+ private cleanupExpiredSessions;
51
+ }
52
+ export declare const toolSessionManager: ToolSessionManager;
53
+ //# sourceMappingURL=ToolSessionManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ToolSessionManager.d.ts","sourceRoot":"","sources":["../../src/agents/ToolSessionManager.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,MAAM,EAAE,GAAG,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC3C,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAuC;IACvD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;IAEjD,OAAO;IAKP,MAAM,CAAC,WAAW,IAAI,kBAAkB;IAOxC;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;IAiB7F;;OAEG;IACH,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,gBAAgB,GAAG,IAAI;IAavE;;OAEG;IACH,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS;IAsBlF;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS;IAItD;;OAEG;IACH,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAOnC;;OAEG;IACH,OAAO,CAAC,sBAAsB;CAmB/B;AAGD,eAAO,MAAM,kBAAkB,oBAAmC,CAAC"}
@@ -0,0 +1,106 @@
1
+ import { nanoid } from 'nanoid';
2
+ import { getLogger } from '../logger';
3
+ const logger = getLogger('ToolSessionManager');
4
+ /**
5
+ * Manages tool execution state during agent generation sessions.
6
+ * Allows tools to access previous tool call results within the same execution.
7
+ */
8
+ export class ToolSessionManager {
9
+ static instance;
10
+ sessions = new Map();
11
+ SESSION_TIMEOUT = 5 * 60 * 1000; // 5 minutes
12
+ constructor() {
13
+ // Cleanup expired sessions every minute
14
+ setInterval(() => this.cleanupExpiredSessions(), 60_000);
15
+ }
16
+ static getInstance() {
17
+ if (!ToolSessionManager.instance) {
18
+ ToolSessionManager.instance = new ToolSessionManager();
19
+ }
20
+ return ToolSessionManager.instance;
21
+ }
22
+ /**
23
+ * Create a new tool session for an agent execution
24
+ */
25
+ createSession(tenantId, projectId, contextId, taskId) {
26
+ const sessionId = nanoid();
27
+ const session = {
28
+ sessionId,
29
+ tenantId,
30
+ projectId,
31
+ contextId,
32
+ taskId,
33
+ toolResults: new Map(),
34
+ createdAt: Date.now(),
35
+ };
36
+ this.sessions.set(sessionId, session);
37
+ logger.debug({ sessionId, tenantId, contextId, taskId }, 'Created tool session');
38
+ return sessionId;
39
+ }
40
+ /**
41
+ * Record a tool result in the session
42
+ */
43
+ recordToolResult(sessionId, toolResult) {
44
+ const session = this.sessions.get(sessionId);
45
+ if (!session) {
46
+ logger.warn({ sessionId, toolCallId: toolResult.toolCallId }, 'Tool result recorded for unknown session');
47
+ return;
48
+ }
49
+ session.toolResults.set(toolResult.toolCallId, toolResult);
50
+ }
51
+ /**
52
+ * Get a tool result by toolCallId within a session
53
+ */
54
+ getToolResult(sessionId, toolCallId) {
55
+ const session = this.sessions.get(sessionId);
56
+ if (!session) {
57
+ logger.warn({ sessionId, toolCallId }, 'Requested tool result for unknown session');
58
+ return undefined;
59
+ }
60
+ const result = session.toolResults.get(toolCallId);
61
+ if (!result) {
62
+ logger.warn({
63
+ sessionId,
64
+ toolCallId,
65
+ availableToolResultIds: Array.from(session.toolResults.keys()),
66
+ }, 'Tool result not found');
67
+ }
68
+ return result;
69
+ }
70
+ /**
71
+ * Get session info
72
+ */
73
+ getSession(sessionId) {
74
+ return this.sessions.get(sessionId);
75
+ }
76
+ /**
77
+ * Clean up a session after agent execution completes
78
+ */
79
+ endSession(sessionId) {
80
+ const session = this.sessions.get(sessionId);
81
+ if (session) {
82
+ this.sessions.delete(sessionId);
83
+ }
84
+ }
85
+ /**
86
+ * Remove expired sessions to prevent memory leaks
87
+ */
88
+ cleanupExpiredSessions() {
89
+ const now = Date.now();
90
+ const expiredSessions = [];
91
+ for (const [sessionId, session] of this.sessions.entries()) {
92
+ if (now - session.createdAt > this.SESSION_TIMEOUT) {
93
+ expiredSessions.push(sessionId);
94
+ }
95
+ }
96
+ for (const sessionId of expiredSessions) {
97
+ this.sessions.delete(sessionId);
98
+ logger.debug({ sessionId }, 'Cleaned up expired tool session');
99
+ }
100
+ if (expiredSessions.length > 0) {
101
+ logger.info({ expiredCount: expiredSessions.length }, 'Cleaned up expired tool sessions');
102
+ }
103
+ }
104
+ }
105
+ // Export singleton instance
106
+ export const toolSessionManager = ToolSessionManager.getInstance();
@@ -0,0 +1,30 @@
1
+ import type { ArtifactComponentApiInsert } from '@inkeep/agents-core';
2
+ export declare function createSaveToolResultTool(sessionId?: string, streamRequestId?: string, // For GraphSession recording
3
+ agentId?: string, artifactComponents?: ArtifactComponentApiInsert[]): import("ai").Tool<{
4
+ toolCallId: string;
5
+ baseSelector: string;
6
+ propSelectors: any;
7
+ }, {
8
+ saved: boolean;
9
+ error: string;
10
+ artifactIds: never[];
11
+ warnings: never[];
12
+ artifacts?: undefined;
13
+ } | {
14
+ saved: boolean;
15
+ artifacts: {
16
+ artifactId: any;
17
+ taskId: any;
18
+ summaryData: any;
19
+ }[];
20
+ warnings: string[];
21
+ error?: undefined;
22
+ artifactIds?: undefined;
23
+ } | {
24
+ saved: boolean;
25
+ error: string;
26
+ warnings: never[];
27
+ artifactIds?: undefined;
28
+ artifacts?: undefined;
29
+ }>;
30
+ //# sourceMappingURL=artifactTools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifactTools.d.ts","sourceRoot":"","sources":["../../src/agents/artifactTools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAmOtE,wBAAgB,wBAAwB,CACtC,SAAS,CAAC,EAAE,MAAM,EAClB,eAAe,CAAC,EAAE,MAAM,EAAE,6BAA6B;AACvD,OAAO,CAAC,EAAE,MAAM,EAChB,kBAAkB,CAAC,EAAE,0BAA0B,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;GAkUlD"}