@inkeep/agents-run-api 0.0.0-dev-20260113172432 → 0.0.0-dev-20260115183047

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 (85) hide show
  1. package/README.md +2 -1
  2. package/dist/a2a/client.d.ts +3 -1
  3. package/dist/a2a/client.js +23 -9
  4. package/dist/a2a/handlers.js +11 -5
  5. package/dist/a2a/transfer.d.ts +6 -1
  6. package/dist/a2a/transfer.js +10 -6
  7. package/dist/agents/Agent.d.ts +8 -4
  8. package/dist/agents/Agent.js +226 -92
  9. package/dist/agents/ToolSessionManager.js +2 -2
  10. package/dist/agents/generateTaskHandler.d.ts +4 -9
  11. package/dist/agents/generateTaskHandler.js +107 -246
  12. package/dist/agents/relationTools.d.ts +19 -8
  13. package/dist/agents/relationTools.js +105 -14
  14. package/dist/agents/types.d.ts +4 -2
  15. package/dist/agents/versions/v1/Phase1Config.d.ts +4 -3
  16. package/dist/agents/versions/v1/Phase1Config.js +33 -20
  17. package/dist/constants/execution-limits/index.js +1 -1
  18. package/dist/context/ContextFetcher.d.ts +68 -0
  19. package/dist/context/ContextFetcher.js +276 -0
  20. package/dist/context/ContextResolver.d.ts +56 -0
  21. package/dist/context/ContextResolver.js +273 -0
  22. package/dist/context/context.d.ts +19 -0
  23. package/dist/context/context.js +108 -0
  24. package/dist/context/contextCache.d.ts +56 -0
  25. package/dist/context/contextCache.js +175 -0
  26. package/dist/context/index.d.ts +6 -0
  27. package/dist/context/index.js +7 -0
  28. package/dist/context/validation.d.ts +39 -0
  29. package/dist/context/validation.js +255 -0
  30. package/dist/create-app.d.ts +2 -2
  31. package/dist/create-app.js +7 -2
  32. package/dist/data/agent.d.ts +2 -2
  33. package/dist/data/agent.js +17 -22
  34. package/dist/data/agents.d.ts +2 -2
  35. package/dist/data/agents.js +34 -42
  36. package/dist/data/conversations.d.ts +2 -1
  37. package/dist/data/conversations.js +7 -8
  38. package/dist/data/db/dbClient.d.ts +2 -2
  39. package/dist/data/db/dbClient.js +2 -10
  40. package/dist/env.d.ts +6 -2
  41. package/dist/env.js +3 -1
  42. package/dist/handlers/executionHandler.d.ts +3 -2
  43. package/dist/handlers/executionHandler.js +46 -22
  44. package/dist/index.d.ts +3 -3
  45. package/dist/middleware/api-key-auth.d.ts +4 -10
  46. package/dist/middleware/api-key-auth.js +164 -163
  47. package/dist/middleware/index.d.ts +3 -2
  48. package/dist/middleware/index.js +3 -2
  49. package/dist/middleware/projectConfig.d.ts +19 -0
  50. package/dist/middleware/projectConfig.js +80 -0
  51. package/dist/routes/agents.d.ts +2 -1
  52. package/dist/routes/agents.js +7 -13
  53. package/dist/routes/chat.d.ts +2 -1
  54. package/dist/routes/chat.js +29 -52
  55. package/dist/routes/chatDataStream.d.ts +2 -1
  56. package/dist/routes/chatDataStream.js +28 -30
  57. package/dist/routes/mcp.d.ts +2 -1
  58. package/dist/routes/mcp.js +25 -37
  59. package/dist/services/AgentSession.d.ts +5 -7
  60. package/dist/services/AgentSession.js +25 -34
  61. package/dist/services/ArtifactParser.d.ts +2 -2
  62. package/dist/services/ArtifactParser.js +2 -2
  63. package/dist/services/ArtifactService.d.ts +2 -3
  64. package/dist/services/ArtifactService.js +23 -20
  65. package/dist/services/BaseCompressor.js +2 -2
  66. package/dist/services/IncrementalStreamParser.d.ts +2 -2
  67. package/dist/services/IncrementalStreamParser.js +2 -2
  68. package/dist/services/ResponseFormatter.d.ts +2 -2
  69. package/dist/services/ResponseFormatter.js +2 -2
  70. package/dist/services/evaluationHttpClient.d.ts +21 -0
  71. package/dist/services/evaluationHttpClient.js +48 -0
  72. package/dist/services/evaluationRunConfigMatcher.d.ts +6 -0
  73. package/dist/services/evaluationRunConfigMatcher.js +7 -0
  74. package/dist/tools/NativeSandboxExecutor.js +1 -1
  75. package/dist/tools/distill-conversation-history-tool.js +2 -2
  76. package/dist/tools/distill-conversation-tool.js +2 -2
  77. package/dist/types/execution-context.d.ts +8 -14
  78. package/dist/types/execution-context.js +3 -2
  79. package/dist/utils/model-resolver.d.ts +2 -2
  80. package/dist/utils/model-resolver.js +3 -13
  81. package/dist/utils/project.d.ts +207 -0
  82. package/dist/utils/project.js +315 -0
  83. package/dist/utils/token-estimator.d.ts +6 -52
  84. package/dist/utils/token-estimator.js +2 -38
  85. package/package.json +2 -2
package/README.md CHANGED
@@ -44,7 +44,8 @@ pnpm db:migrate
44
44
  ```env
45
45
  ENVIRONMENT=development|production|test
46
46
  PORT=3003
47
- DATABASE_URL=postgresql://dbuser:secretpassword@database.server.com:3211/mydb
47
+ INKEEP_AGENTS_MANAGE_DATABASE_URL=postgresql://dbuser:secretpassword@database.server.com:3211/mydb
48
+ INKEEP_AGENTS_RUN_DATABASE_URL=postgresql://dbuser:secretpassword@database.server.com:3212/mydb
48
49
  ANTHROPIC_API_KEY=required
49
50
  OPENAI_API_KEY=optional
50
51
  LOG_LEVEL=debug|info|warn|error
@@ -1,4 +1,4 @@
1
- import { AgentCard, CancelTaskResponse, GetTaskPushNotificationConfigResponse, GetTaskResponse, Message, MessageSendParams, SendMessageResponse, SetTaskPushNotificationConfigResponse, Task, TaskArtifactUpdateEvent, TaskIdParams, TaskPushNotificationConfig, TaskQueryParams, TaskStatusUpdateEvent } from "@inkeep/agents-core";
1
+ import { AgentCard, CancelTaskResponse, GetTaskPushNotificationConfigResponse, GetTaskResponse, Message, MessageSendParams, ResolvedRef, SendMessageResponse, SetTaskPushNotificationConfigResponse, Task, TaskArtifactUpdateEvent, TaskIdParams, TaskPushNotificationConfig, TaskQueryParams, TaskStatusUpdateEvent } from "@inkeep/agents-core";
2
2
 
3
3
  //#region src/a2a/client.d.ts
4
4
  type A2AStreamEventData = Message | Task | TaskStatusUpdateEvent | TaskArtifactUpdateEvent;
@@ -18,6 +18,7 @@ type RetryConfig = {
18
18
  };
19
19
  interface A2AClientOptions {
20
20
  retryConfig?: RetryConfig;
21
+ ref?: ResolvedRef;
21
22
  headers?: Record<string, string>;
22
23
  }
23
24
  /**
@@ -89,6 +90,7 @@ declare class A2AClient {
89
90
  getAgentCard(agentBaseUrl?: string): Promise<AgentCard>;
90
91
  /**
91
92
  * Gets the RPC service endpoint URL. Ensures the agent card has been fetched first.
93
+ * Adds ref as query parameter if it exists.
92
94
  * @returns A Promise that resolves to the service endpoint URL string.
93
95
  */
94
96
  private _getServiceEndpoint;
@@ -110,16 +110,18 @@ var A2AClient = class {
110
110
  */
111
111
  async _fetchAndCacheAgentCard() {
112
112
  const agentCardUrl = `${this.agentBaseUrl}/.well-known/agent.json`;
113
+ const url = new URL(agentCardUrl);
114
+ if (this.options.ref) url.searchParams.set("ref", this.options.ref.name);
113
115
  getLogger("a2a").info({
114
- agentCardUrl,
116
+ agentCardUrl: url.toString(),
115
117
  agentBaseUrl: this.agentBaseUrl
116
118
  }, "agentCardUrl");
117
119
  try {
118
- const response = await fetch(agentCardUrl, { headers: {
120
+ const response = await fetch(url.toString(), { headers: {
119
121
  Accept: "application/json",
120
122
  ...this.options.headers || {}
121
123
  } });
122
- if (!response.ok) throw new Error(`Failed to fetch Agent Card from ${agentCardUrl}: ${response.status} ${response.statusText}`);
124
+ if (!response.ok) throw new Error(`Failed to fetch Agent Card from ${url.toString()}: ${response.status} ${response.statusText}`);
123
125
  const agentCard = await response.json();
124
126
  if (!agentCard.url) throw new Error("Fetched Agent Card does not contain a valid 'url' for the service endpoint.");
125
127
  this.serviceEndpointUrl = agentCard.url;
@@ -140,24 +142,36 @@ var A2AClient = class {
140
142
  async getAgentCard(agentBaseUrl) {
141
143
  if (agentBaseUrl) {
142
144
  const agentCardUrl = `${agentBaseUrl.replace(/\/$/, "")}/.well-known/agent.json`;
143
- const response = await fetch(agentCardUrl, { headers: {
145
+ const url = new URL(agentCardUrl);
146
+ if (this.options.ref) url.searchParams.set("ref", this.options.ref.name);
147
+ const response = await fetch(url.toString(), { headers: {
144
148
  Accept: "application/json",
145
149
  ...this.options.headers || {}
146
150
  } });
147
- if (!response.ok) throw new Error(`Failed to fetch Agent Card from ${agentCardUrl}: ${response.status} ${response.statusText}`);
151
+ if (!response.ok) throw new Error(`Failed to fetch Agent Card from ${url.toString()}: ${response.status} ${response.statusText}`);
148
152
  return await response.json();
149
153
  }
150
154
  return this.agentCardPromise;
151
155
  }
152
156
  /**
153
157
  * Gets the RPC service endpoint URL. Ensures the agent card has been fetched first.
158
+ * Adds ref as query parameter if it exists.
154
159
  * @returns A Promise that resolves to the service endpoint URL string.
155
160
  */
156
161
  async _getServiceEndpoint() {
157
- if (this.serviceEndpointUrl) return this.serviceEndpointUrl;
158
- await this.agentCardPromise;
159
- if (!this.serviceEndpointUrl) throw new Error("Agent Card URL for RPC endpoint is not available. Fetching might have failed.");
160
- return this.serviceEndpointUrl;
162
+ let endpoint;
163
+ if (this.serviceEndpointUrl) endpoint = this.serviceEndpointUrl;
164
+ else {
165
+ await this.agentCardPromise;
166
+ if (!this.serviceEndpointUrl) throw new Error("Agent Card URL for RPC endpoint is not available. Fetching might have failed.");
167
+ endpoint = this.serviceEndpointUrl;
168
+ }
169
+ if (this.options.ref) {
170
+ const url = new URL(endpoint);
171
+ url.searchParams.set("ref", this.options.ref.name);
172
+ return url.toString();
173
+ }
174
+ return endpoint;
161
175
  }
162
176
  /**
163
177
  * Retry utility functions
@@ -1,10 +1,10 @@
1
- import { getLogger } from "../logger.js";
1
+ import { getLogger as getLogger$1 } from "../logger.js";
2
2
  import dbClient_default from "../data/db/dbClient.js";
3
- import { TaskState, createMessage, createTask, generateId, getRequestExecutionContext, updateTask } from "@inkeep/agents-core";
3
+ import { TaskState, createMessage, createTask, generateId, updateTask } from "@inkeep/agents-core";
4
4
  import { streamSSE } from "hono/streaming";
5
5
 
6
6
  //#region src/a2a/handlers.ts
7
- const logger = getLogger("a2aHandler");
7
+ const logger = getLogger$1("a2aHandler");
8
8
  async function a2aHandler(c, agent) {
9
9
  try {
10
10
  const rpcRequest = c.get("requestBody");
@@ -49,7 +49,7 @@ async function a2aHandler(c, agent) {
49
49
  async function handleMessageSend(c, agent, request) {
50
50
  try {
51
51
  const params = request.params;
52
- const { agentId } = getRequestExecutionContext(c);
52
+ const { agentId, resolvedRef } = c.get("executionContext");
53
53
  const forwardedHeaders = {};
54
54
  const xForwardedCookie = c.req.header("x-forwarded-cookie");
55
55
  const cookie = c.req.header("cookie");
@@ -135,6 +135,7 @@ async function handleMessageSend(c, agent, request) {
135
135
  agent_id: agentId || "",
136
136
  stream_request_id: params.message.metadata?.stream_request_id
137
137
  },
138
+ ref: resolvedRef,
138
139
  subAgentId: agent.subAgentId,
139
140
  createdAt: (/* @__PURE__ */ new Date()).toISOString(),
140
141
  updatedAt: (/* @__PURE__ */ new Date()).toISOString()
@@ -280,6 +281,11 @@ async function handleMessageSend(c, agent, request) {
280
281
  id: request.id
281
282
  });
282
283
  } catch (error) {
284
+ logger.error({
285
+ error: error instanceof Error ? error.message : "Unknown error",
286
+ stack: error instanceof Error ? error.stack : void 0,
287
+ subAgentId: agent.subAgentId
288
+ }, "Error in handleMessageSend");
283
289
  return c.json({
284
290
  jsonrpc: "2.0",
285
291
  error: {
@@ -294,7 +300,7 @@ async function handleMessageSend(c, agent, request) {
294
300
  async function handleMessageStream(c, agent, request) {
295
301
  try {
296
302
  const params = request.params;
297
- const { agentId } = getRequestExecutionContext(c);
303
+ const { agentId } = c.get("executionContext");
298
304
  if (!agent.agentCard.capabilities.streaming) return c.json({
299
305
  jsonrpc: "2.0",
300
306
  error: {
@@ -1,4 +1,5 @@
1
1
  import { extractTransferData, isTransferTask } from "./types.js";
2
+ import { ResolvedRef } from "@inkeep/agents-core";
2
3
 
3
4
  //#region src/a2a/transfer.d.ts
4
5
  /**
@@ -8,12 +9,16 @@ declare function executeTransfer({
8
9
  tenantId,
9
10
  threadId,
10
11
  projectId,
11
- targetSubAgentId
12
+ agentId,
13
+ targetSubAgentId,
14
+ ref
12
15
  }: {
13
16
  tenantId: string;
14
17
  threadId: string;
15
18
  projectId: string;
19
+ agentId: string;
16
20
  targetSubAgentId: string;
21
+ ref: ResolvedRef;
17
22
  }): Promise<{
18
23
  success: boolean;
19
24
  targetSubAgentId: string;
@@ -1,14 +1,14 @@
1
- import { getLogger } from "../logger.js";
1
+ import { getLogger as getLogger$1 } from "../logger.js";
2
2
  import dbClient_default from "../data/db/dbClient.js";
3
3
  import { extractTransferData, isTransferTask } from "./types.js";
4
4
  import { setActiveAgentForThread } from "@inkeep/agents-core";
5
5
 
6
6
  //#region src/a2a/transfer.ts
7
- const logger = getLogger("Transfer");
7
+ const logger = getLogger$1("Transfer");
8
8
  /**
9
9
  * Executes a transfer by sending the original message to the target agent
10
10
  */
11
- async function executeTransfer({ tenantId, threadId, projectId, targetSubAgentId }) {
11
+ async function executeTransfer({ tenantId, threadId, projectId, agentId, targetSubAgentId, ref }) {
12
12
  logger.info({
13
13
  targetAgent: targetSubAgentId,
14
14
  threadId,
@@ -22,17 +22,21 @@ async function executeTransfer({ tenantId, threadId, projectId, targetSubAgentId
22
22
  projectId
23
23
  },
24
24
  threadId,
25
- subAgentId: targetSubAgentId
25
+ subAgentId: targetSubAgentId,
26
+ agentId,
27
+ ref
26
28
  });
27
29
  logger.info({
28
30
  targetAgent: targetSubAgentId,
29
- threadId
31
+ threadId,
32
+ agentId
30
33
  }, "Successfully updated active_sub_agent_id in database");
31
34
  } catch (error) {
32
35
  logger.error({
33
36
  error,
34
37
  targetAgent: targetSubAgentId,
35
- threadId
38
+ threadId,
39
+ agentId
36
40
  }, "Failed to update active_sub_agent_id");
37
41
  throw error;
38
42
  }
@@ -1,6 +1,6 @@
1
1
  import { SandboxConfig } from "../types/execution-context.js";
2
2
  import { StreamHelper } from "../utils/stream-helpers.js";
3
- import { AgentConversationHistoryConfig, Artifact, ArtifactComponentApiInsert, CredentialStoreRegistry, DataComponentApiInsert, McpTool, Models, SubAgentStopWhen } from "@inkeep/agents-core";
3
+ import { AgentConversationHistoryConfig, Artifact, ArtifactComponentApiInsert, CredentialStoreRegistry, DataComponentApiInsert, FullExecutionContext, McpTool, Models, ResolvedRef, SubAgentStopWhen } from "@inkeep/agents-core";
4
4
  import { ToolSet } from "ai";
5
5
 
6
6
  //#region src/agents/Agent.d.ts
@@ -56,6 +56,7 @@ type ExternalAgentRelationConfig = {
56
56
  id: string;
57
57
  name: string;
58
58
  description: string;
59
+ ref: ResolvedRef;
59
60
  baseUrl: string;
60
61
  credentialReferenceId?: string | null;
61
62
  headers?: Record<string, string> | null;
@@ -64,6 +65,7 @@ type ExternalAgentRelationConfig = {
64
65
  type TeamAgentRelationConfig = {
65
66
  relationId: string;
66
67
  id: string;
68
+ ref: ResolvedRef;
67
69
  name: string;
68
70
  description: string;
69
71
  baseUrl: string;
@@ -96,7 +98,8 @@ declare class Agent {
96
98
  private mcpClientCache;
97
99
  private mcpConnectionLocks;
98
100
  private currentCompressor;
99
- constructor(config: AgentConfig, credentialStoreRegistry?: CredentialStoreRegistry);
101
+ private executionContext;
102
+ constructor(config: AgentConfig, executionContext: FullExecutionContext, credentialStoreRegistry?: CredentialStoreRegistry);
100
103
  /**
101
104
  * Get the maximum number of generation steps for this agent
102
105
  * Uses agent's stopWhen.stepCountIs config or defaults to AGENT_EXECUTION_MAX_GENERATION_STEPS
@@ -160,9 +163,9 @@ declare class Agent {
160
163
  */
161
164
  private convertToMCPToolConfig;
162
165
  getMcpTool(tool: McpTool): Promise<{
163
- tools: Record<string, any>;
166
+ tools: any;
164
167
  toolPolicies: Record<string, {
165
- needsApproval?: boolean;
168
+ needsApproval?: boolean | undefined;
166
169
  }>;
167
170
  mcpServerId: string;
168
171
  mcpServerName: string;
@@ -191,6 +194,7 @@ declare class Agent {
191
194
  private createThinkingCompleteTool;
192
195
  private getDefaultTools;
193
196
  private getStreamRequestId;
197
+ private applyToolOverrides;
194
198
  /**
195
199
  * Format tool result for storage in conversation history
196
200
  */