@inkeep/agents-api 0.0.1 → 0.43.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/dist/.well-known/workflow/v1/flow.cjs +43 -106
  2. package/dist/.well-known/workflow/v1/flow.cjs.debug.json +2 -4
  3. package/dist/.well-known/workflow/v1/manifest.debug.json +17 -55
  4. package/dist/.well-known/workflow/v1/step.cjs +45938 -45976
  5. package/dist/.well-known/workflow/v1/step.cjs.debug.json +2 -4
  6. package/dist/_virtual/rolldown_runtime.js +7 -0
  7. package/dist/createApp.js +40 -12
  8. package/dist/domains/evals/api/.well-known/workflow/v1/flow.d.ts +4 -0
  9. package/dist/domains/evals/api/.well-known/workflow/v1/flow.js +12 -0
  10. package/dist/domains/evals/api/.well-known/workflow/v1/step.d.ts +4 -0
  11. package/dist/domains/evals/api/.well-known/workflow/v1/step.js +12 -0
  12. package/dist/domains/evals/routes/datasetTriggers.d.ts +2 -2
  13. package/dist/domains/evals/routes/index.d.ts +2 -2
  14. package/dist/domains/evals/scripts/build-workflow.js +2 -2
  15. package/dist/domains/evals/workflow/functions/evaluateConversation.d.ts +4 -1
  16. package/dist/domains/evals/workflow/functions/evaluateConversation.js +2 -1
  17. package/dist/domains/evals/workflow/functions/runDatasetItem.d.ts +4 -1
  18. package/dist/domains/evals/workflow/functions/runDatasetItem.js +2 -1
  19. package/dist/domains/evals/workflow/routes.d.ts +2 -2
  20. package/dist/domains/evals/workflow/world.js +3 -2
  21. package/dist/domains/github/config.d.ts +14 -0
  22. package/dist/domains/github/config.js +47 -0
  23. package/dist/domains/github/index.d.ts +12 -0
  24. package/dist/domains/github/index.js +18 -0
  25. package/dist/domains/github/installation.d.ts +34 -0
  26. package/dist/domains/github/installation.js +172 -0
  27. package/dist/domains/github/jwks.d.ts +20 -0
  28. package/dist/domains/github/jwks.js +85 -0
  29. package/dist/domains/github/oidcToken.d.ts +22 -0
  30. package/dist/domains/github/oidcToken.js +140 -0
  31. package/dist/domains/github/routes/tokenExchange.d.ts +7 -0
  32. package/dist/domains/github/routes/tokenExchange.js +130 -0
  33. package/dist/domains/manage/index.js +0 -2
  34. package/dist/domains/manage/routes/agent.js +9 -4
  35. package/dist/domains/manage/routes/agentFull.js +9 -6
  36. package/dist/domains/manage/routes/apiKeys.js +1 -2
  37. package/dist/domains/manage/routes/artifactComponents.js +5 -5
  38. package/dist/domains/manage/routes/cliAuth.js +3 -3
  39. package/dist/domains/manage/routes/contextConfigs.js +5 -5
  40. package/dist/domains/manage/routes/conversations.d.ts +2 -2
  41. package/dist/domains/manage/routes/credentialStores.js +2 -2
  42. package/dist/domains/manage/routes/credentials.js +6 -7
  43. package/dist/domains/manage/routes/dataComponents.js +6 -7
  44. package/dist/domains/manage/routes/externalAgents.js +1 -2
  45. package/dist/domains/manage/routes/index.d.ts +2 -2
  46. package/dist/domains/manage/routes/index.js +4 -0
  47. package/dist/domains/manage/routes/invitations.js +1 -1
  48. package/dist/domains/manage/routes/mcp.d.ts +2 -2
  49. package/dist/domains/manage/routes/playgroundToken.js +1 -2
  50. package/dist/domains/manage/routes/projectFull.js +33 -11
  51. package/dist/domains/manage/routes/projectMembers.js +16 -35
  52. package/dist/domains/manage/routes/projectPermissions.js +17 -10
  53. package/dist/domains/manage/routes/projects.js +4 -5
  54. package/dist/domains/manage/routes/signoz.d.ts +2 -2
  55. package/dist/domains/manage/routes/signoz.js +6 -3
  56. package/dist/domains/manage/routes/subAgentArtifactComponents.js +5 -5
  57. package/dist/domains/manage/routes/subAgentDataComponents.js +5 -5
  58. package/dist/domains/manage/routes/subAgentExternalAgentRelations.js +5 -5
  59. package/dist/domains/manage/routes/subAgentFunctionTools.js +5 -5
  60. package/dist/domains/manage/routes/subAgentRelations.js +6 -6
  61. package/dist/domains/manage/routes/subAgentTeamAgentRelations.js +6 -6
  62. package/dist/domains/manage/routes/subAgentToolRelations.js +6 -6
  63. package/dist/domains/manage/routes/subAgents.js +5 -5
  64. package/dist/domains/manage/routes/tools.js +24 -3
  65. package/dist/domains/manage/routes/triggers.js +82 -25
  66. package/dist/domains/manage/routes/userOrganizations.js +4 -4
  67. package/dist/domains/manage/routes/{agentToolRelations.d.ts → userProjectMemberships.d.ts} +1 -1
  68. package/dist/domains/manage/routes/userProjectMemberships.js +45 -0
  69. package/dist/domains/mcp/routes/mcp.d.ts +7 -0
  70. package/dist/domains/mcp/routes/mcp.js +45 -0
  71. package/dist/domains/run/a2a/handlers.js +2 -10
  72. package/dist/domains/run/a2a/types.d.ts +2 -6
  73. package/dist/domains/run/agents/Agent.d.ts +1 -0
  74. package/dist/domains/run/agents/Agent.js +207 -44
  75. package/dist/domains/run/agents/generateTaskHandler.js +14 -2
  76. package/dist/domains/run/context/ContextFetcher.js +8 -7
  77. package/dist/domains/run/context/ContextResolver.js +1 -1
  78. package/dist/domains/run/handlers/executionHandler.d.ts +3 -1
  79. package/dist/domains/run/handlers/executionHandler.js +149 -84
  80. package/dist/domains/run/routes/agents.js +1 -1
  81. package/dist/domains/run/routes/chat.js +47 -1
  82. package/dist/domains/run/routes/chatDataStream.js +107 -14
  83. package/dist/domains/run/routes/webhooks.js +40 -329
  84. package/dist/domains/run/services/AgentSession.d.ts +3 -0
  85. package/dist/domains/run/services/AgentSession.js +9 -0
  86. package/dist/domains/run/services/BaseCompressor.js +1 -1
  87. package/dist/domains/run/services/ToolApprovalUiBus.d.ts +28 -0
  88. package/dist/domains/run/services/ToolApprovalUiBus.js +44 -0
  89. package/dist/domains/run/services/TriggerService.d.ts +31 -0
  90. package/dist/domains/run/services/TriggerService.js +543 -0
  91. package/dist/domains/run/tools/NativeSandboxExecutor.d.ts +3 -2
  92. package/dist/domains/run/tools/NativeSandboxExecutor.js +76 -48
  93. package/dist/domains/run/tools/SandboxExecutorFactory.d.ts +11 -1
  94. package/dist/domains/run/tools/SandboxExecutorFactory.js +27 -3
  95. package/dist/domains/run/tools/VercelSandboxExecutor.d.ts +3 -11
  96. package/dist/domains/run/tools/VercelSandboxExecutor.js +137 -127
  97. package/dist/domains/run/types/xml.d.ts +1 -5
  98. package/dist/domains/run/utils/stream-helpers.d.ts +134 -0
  99. package/dist/domains/run/utils/stream-helpers.js +182 -0
  100. package/dist/factory.d.ts +278 -272
  101. package/dist/index.d.ts +275 -269
  102. package/dist/index.js +16 -1
  103. package/dist/initialization.js +9 -2
  104. package/dist/middleware/cors.js +1 -1
  105. package/dist/middleware/evalsAuth.d.ts +2 -2
  106. package/dist/middleware/manageAuth.d.ts +2 -2
  107. package/dist/middleware/projectAccess.d.ts +4 -11
  108. package/dist/middleware/projectAccess.js +1 -17
  109. package/dist/middleware/projectConfig.d.ts +3 -3
  110. package/dist/middleware/requirePermission.d.ts +2 -2
  111. package/dist/middleware/runAuth.d.ts +4 -4
  112. package/dist/middleware/sessionAuth.d.ts +3 -3
  113. package/dist/middleware/tenantAccess.d.ts +2 -2
  114. package/dist/middleware/tenantAccess.js +4 -4
  115. package/dist/middleware/tracing.d.ts +3 -3
  116. package/dist/openapi.d.ts +35 -1
  117. package/dist/openapi.js +39 -95
  118. package/dist/routes/healthChecks.d.ts +10 -0
  119. package/dist/routes/healthChecks.js +75 -0
  120. package/dist/templates/v1/phase1/system-prompt.js +1 -1
  121. package/dist/templates/v1/phase1/thinking-preparation.js +1 -1
  122. package/dist/templates/v1/phase1/tool.js +1 -1
  123. package/dist/templates/v1/phase2/data-component.js +1 -1
  124. package/dist/templates/v1/phase2/data-components.js +1 -1
  125. package/dist/templates/v1/phase2/system-prompt.js +1 -1
  126. package/dist/templates/v1/shared/artifact-retrieval-guidance.js +1 -1
  127. package/dist/templates/v1/shared/artifact.js +1 -1
  128. package/dist/types/app.d.ts +2 -0
  129. package/dist/utils/healthChecks.d.ts +8 -0
  130. package/dist/utils/healthChecks.js +38 -0
  131. package/dist/utils/signozHelpers.d.ts +2 -2
  132. package/dist/utils/signozHelpers.js +15 -3
  133. package/package.json +25 -28
  134. package/dist/domains/evals/services/startEvaluation.d.ts +0 -19
  135. package/dist/domains/evals/services/startEvaluation.js +0 -18
  136. package/dist/domains/index.d.ts +0 -4
  137. package/dist/domains/index.js +0 -5
  138. package/dist/domains/manage/routes/agentToolRelations.js +0 -289
  139. package/dist/domains/run/agents/ModelFactory.d.ts +0 -63
  140. package/dist/domains/run/agents/ModelFactory.js +0 -194
  141. package/dist/domains/run/data/agent.d.ts +0 -7
  142. package/dist/domains/run/data/agent.js +0 -67
  143. package/dist/domains/run/services/evaluationRunConfigMatcher.d.ts +0 -4
  144. package/dist/domains/run/services/evaluationRunConfigMatcher.js +0 -7
  145. package/dist/domains/run/utils/cleanup.d.ts +0 -21
  146. package/dist/domains/run/utils/cleanup.js +0 -59
  147. package/dist/utils/tempApiKeys.d.ts +0 -17
  148. package/dist/utils/tempApiKeys.js +0 -26
  149. package/dist/utils/workflowApiHelpers.d.ts +0 -1
  150. package/dist/utils/workflowApiHelpers.js +0 -1
@@ -11,11 +11,11 @@ const logger = getLogger("VercelSandboxExecutor");
11
11
  * Executes function tools in isolated Vercel Sandbox MicroVMs
12
12
  * Caches and reuses sandboxes based on dependencies to improve performance
13
13
  */
14
- var VercelSandboxExecutor = class VercelSandboxExecutor {
15
- static instance;
14
+ var VercelSandboxExecutor = class {
16
15
  config;
17
16
  sandboxPool = /* @__PURE__ */ new Map();
18
17
  cleanupInterval = null;
18
+ sandboxInitPromises = /* @__PURE__ */ new Map();
19
19
  constructor(config) {
20
20
  this.config = config;
21
21
  logger.info({
@@ -27,12 +27,74 @@ var VercelSandboxExecutor = class VercelSandboxExecutor {
27
27
  }, "VercelSandboxExecutor initialized with pooling");
28
28
  this.startPoolCleanup();
29
29
  }
30
- /**
31
- * Get singleton instance of VercelSandboxExecutor
32
- */
33
- static getInstance(config) {
34
- if (!VercelSandboxExecutor.instance) VercelSandboxExecutor.instance = new VercelSandboxExecutor(config);
35
- return VercelSandboxExecutor.instance;
30
+ async getOrCreateSandbox(params) {
31
+ const cached = this.getCachedSandbox(params.dependencyHash);
32
+ if (cached) return cached;
33
+ const existingInit = this.sandboxInitPromises.get(params.dependencyHash);
34
+ if (existingInit) {
35
+ await existingInit;
36
+ const afterInit = this.getCachedSandbox(params.dependencyHash);
37
+ if (!afterInit) throw new Error("Sandbox initialization finished but sandbox not found in pool");
38
+ return afterInit;
39
+ }
40
+ const initPromise = (async () => {
41
+ let sandbox = null;
42
+ try {
43
+ sandbox = await Sandbox.create({
44
+ token: this.config.token,
45
+ teamId: this.config.teamId,
46
+ projectId: this.config.projectId,
47
+ timeout: this.config.timeout,
48
+ resources: { vcpus: this.config.vcpus || 1 },
49
+ runtime: this.config.runtime
50
+ });
51
+ logger.info({
52
+ functionId: params.functionId,
53
+ functionName: params.toolName,
54
+ sandboxId: sandbox.sandboxId,
55
+ dependencyHash: params.dependencyHash
56
+ }, "New sandbox created");
57
+ this.addToPool(params.dependencyHash, sandbox, params.dependencies);
58
+ if (Object.keys(params.dependencies).length > 0) {
59
+ logger.debug({
60
+ functionId: params.functionId,
61
+ functionName: params.toolName,
62
+ dependencyHash: params.dependencyHash,
63
+ dependencies: params.dependencies
64
+ }, "Installing dependencies in new sandbox");
65
+ const packageJsonContent = JSON.stringify({ dependencies: params.dependencies }, null, 2);
66
+ await sandbox.writeFiles([{
67
+ path: "package.json",
68
+ content: Buffer.from(packageJsonContent, "utf-8")
69
+ }]);
70
+ const installCmd = await sandbox.runCommand({
71
+ cmd: "npm",
72
+ args: ["install", "--omit=dev"],
73
+ cwd: "/vercel/sandbox"
74
+ });
75
+ const installStdout = await installCmd.stdout();
76
+ const installStderr = await installCmd.stderr();
77
+ if (installStdout) logger.debug({ functionId: params.functionId }, installStdout);
78
+ if (installStderr) logger.debug({ functionId: params.functionId }, installStderr);
79
+ if (installCmd.exitCode !== 0) throw new Error(`Failed to install dependencies: ${installStderr}`);
80
+ logger.info({
81
+ functionId: params.functionId,
82
+ dependencyHash: params.dependencyHash
83
+ }, "Dependencies installed successfully");
84
+ }
85
+ return sandbox;
86
+ } catch (error) {
87
+ await this.removeSandbox(params.dependencyHash);
88
+ if (sandbox) try {
89
+ await sandbox.stop();
90
+ } catch {}
91
+ throw error;
92
+ } finally {
93
+ this.sandboxInitPromises.delete(params.dependencyHash);
94
+ }
95
+ })();
96
+ this.sandboxInitPromises.set(params.dependencyHash, initPromise);
97
+ return initPromise;
36
98
  }
37
99
  /**
38
100
  * Generate a hash for dependencies to use as cache key
@@ -48,13 +110,17 @@ var VercelSandboxExecutor = class VercelSandboxExecutor {
48
110
  const cached = this.sandboxPool.get(dependencyHash);
49
111
  if (!cached) return null;
50
112
  const age = Date.now() - cached.createdAt;
51
- if (age > FUNCTION_TOOL_SANDBOX_POOL_TTL_MS || cached.useCount >= FUNCTION_TOOL_SANDBOX_MAX_USE_COUNT) {
113
+ const timeoutSafetyMs = 2e3;
114
+ const timeRemaining = cached.timeoutMs - age;
115
+ if (age > FUNCTION_TOOL_SANDBOX_POOL_TTL_MS || cached.useCount >= FUNCTION_TOOL_SANDBOX_MAX_USE_COUNT || timeRemaining <= timeoutSafetyMs) {
52
116
  logger.debug({
53
117
  dependencyHash,
54
118
  age,
55
119
  useCount: cached.useCount,
56
120
  ttl: FUNCTION_TOOL_SANDBOX_POOL_TTL_MS,
57
- maxUseCount: FUNCTION_TOOL_SANDBOX_MAX_USE_COUNT
121
+ maxUseCount: FUNCTION_TOOL_SANDBOX_MAX_USE_COUNT,
122
+ timeoutMs: cached.timeoutMs,
123
+ timeRemaining
58
124
  }, "Sandbox expired, will create new one");
59
125
  this.removeSandbox(dependencyHash);
60
126
  return null;
@@ -62,7 +128,9 @@ var VercelSandboxExecutor = class VercelSandboxExecutor {
62
128
  logger.debug({
63
129
  dependencyHash,
64
130
  useCount: cached.useCount,
65
- age
131
+ age,
132
+ timeoutMs: cached.timeoutMs,
133
+ timeRemaining
66
134
  }, "Reusing cached sandbox");
67
135
  return cached.sandbox;
68
136
  }
@@ -73,6 +141,7 @@ var VercelSandboxExecutor = class VercelSandboxExecutor {
73
141
  this.sandboxPool.set(dependencyHash, {
74
142
  sandbox,
75
143
  createdAt: Date.now(),
144
+ timeoutMs: sandbox.timeout,
76
145
  useCount: 0,
77
146
  dependencies
78
147
  });
@@ -94,6 +163,7 @@ var VercelSandboxExecutor = class VercelSandboxExecutor {
94
163
  async removeSandbox(dependencyHash) {
95
164
  const cached = this.sandboxPool.get(dependencyHash);
96
165
  if (cached) {
166
+ this.sandboxPool.delete(dependencyHash);
97
167
  try {
98
168
  await cached.sandbox.stop();
99
169
  logger.debug({ dependencyHash }, "Sandbox stopped");
@@ -103,7 +173,6 @@ var VercelSandboxExecutor = class VercelSandboxExecutor {
103
173
  dependencyHash
104
174
  }, "Error stopping sandbox");
105
175
  }
106
- this.sandboxPool.delete(dependencyHash);
107
176
  }
108
177
  }
109
178
  /**
@@ -113,7 +182,12 @@ var VercelSandboxExecutor = class VercelSandboxExecutor {
113
182
  this.cleanupInterval = setInterval(() => {
114
183
  const now = Date.now();
115
184
  const toRemove = [];
116
- for (const [hash, cached] of this.sandboxPool.entries()) if (now - cached.createdAt > FUNCTION_TOOL_SANDBOX_POOL_TTL_MS || cached.useCount >= FUNCTION_TOOL_SANDBOX_MAX_USE_COUNT) toRemove.push(hash);
185
+ for (const [hash, cached] of this.sandboxPool.entries()) {
186
+ const age = now - cached.createdAt;
187
+ const timeoutSafetyMs = 2e3;
188
+ const timeRemaining = cached.timeoutMs - age;
189
+ if (age > FUNCTION_TOOL_SANDBOX_POOL_TTL_MS || cached.useCount >= FUNCTION_TOOL_SANDBOX_MAX_USE_COUNT || timeRemaining <= timeoutSafetyMs) toRemove.push(hash);
190
+ }
117
191
  if (toRemove.length > 0) {
118
192
  logger.info({
119
193
  count: toRemove.length,
@@ -132,6 +206,7 @@ var VercelSandboxExecutor = class VercelSandboxExecutor {
132
206
  this.cleanupInterval = null;
133
207
  }
134
208
  logger.info({ poolSize: this.sandboxPool.size }, "Cleaning up all sandboxes");
209
+ this.sandboxInitPromises.clear();
135
210
  const promises = Array.from(this.sandboxPool.keys()).map((hash) => this.removeSandbox(hash));
136
211
  await Promise.all(promises);
137
212
  }
@@ -156,18 +231,6 @@ var VercelSandboxExecutor = class VercelSandboxExecutor {
156
231
  return envVars;
157
232
  }
158
233
  /**
159
- * Create .env file content from environment variables
160
- * Note: Currently creates empty placeholders. Values will be populated in the future.
161
- */
162
- createEnvFileContent(envVarNames) {
163
- const envLines = [];
164
- for (const varName of envVarNames) {
165
- envLines.push(`${varName}=""`);
166
- logger.debug({ varName }, "Adding environment variable placeholder to sandbox");
167
- }
168
- return envLines.join("\n");
169
- }
170
- /**
171
234
  * Execute a function tool in Vercel Sandbox with pooling
172
235
  */
173
236
  async executeFunctionTool(functionId, args, toolConfig) {
@@ -175,6 +238,9 @@ var VercelSandboxExecutor = class VercelSandboxExecutor {
175
238
  const logs = [];
176
239
  const dependencies = toolConfig.dependencies || {};
177
240
  const dependencyHash = this.generateDependencyHash(dependencies);
241
+ const runRelDir = `runs/${`${Date.now()}-${crypto.randomBytes(6).toString("hex")}`}`;
242
+ const filename = this.config.runtime === "typescript" ? "execute.ts" : "execute.js";
243
+ const runFilePath = `${runRelDir}/${filename}`;
178
244
  try {
179
245
  logger.info({
180
246
  functionId,
@@ -182,109 +248,44 @@ var VercelSandboxExecutor = class VercelSandboxExecutor {
182
248
  dependencyHash,
183
249
  poolSize: this.sandboxPool.size
184
250
  }, "Executing function in Vercel Sandbox");
185
- let sandbox = this.getCachedSandbox(dependencyHash);
186
- let isNewSandbox = false;
187
- if (!sandbox) {
188
- isNewSandbox = true;
189
- sandbox = await Sandbox.create({
190
- token: this.config.token,
191
- teamId: this.config.teamId,
192
- projectId: this.config.projectId,
193
- timeout: this.config.timeout,
194
- resources: { vcpus: this.config.vcpus || 1 },
195
- runtime: this.config.runtime
196
- });
197
- logger.info({
198
- functionId,
199
- sandboxId: sandbox.sandboxId,
200
- dependencyHash
201
- }, `New sandbox created for function ${functionId}`);
202
- this.addToPool(dependencyHash, sandbox, dependencies);
203
- } else logger.info({
251
+ const sandbox = await this.getOrCreateSandbox({
204
252
  functionId,
205
- sandboxId: sandbox.sandboxId,
206
- dependencyHash
207
- }, `Reusing cached sandbox for function ${functionId}`);
253
+ toolName: toolConfig.name,
254
+ dependencyHash,
255
+ dependencies
256
+ });
208
257
  this.incrementUseCount(dependencyHash);
209
258
  try {
210
- if (isNewSandbox && toolConfig.dependencies && Object.keys(toolConfig.dependencies).length > 0) {
211
- logger.debug({
212
- functionId,
213
- functionName: toolConfig.name,
214
- dependencies: toolConfig.dependencies
215
- }, "Installing dependencies in new sandbox");
216
- const packageJson = { dependencies: toolConfig.dependencies };
217
- const packageJsonContent = JSON.stringify(packageJson, null, 2);
218
- await sandbox.writeFiles([{
219
- path: "package.json",
220
- content: Buffer.from(packageJsonContent, "utf-8")
221
- }]);
222
- const installCmd = await sandbox.runCommand({
223
- cmd: "npm",
224
- args: ["install", "--omit=dev"]
225
- });
226
- const installStdout = await installCmd.stdout();
227
- const installStderr = await installCmd.stderr();
228
- if (installStdout) logs.push(installStdout);
229
- if (installStderr) logs.push(installStderr);
230
- if (installCmd.exitCode !== 0) throw new Error(`Failed to install dependencies: ${installStderr}`);
231
- logger.info({
232
- functionId,
233
- dependencyHash
234
- }, "Dependencies installed successfully");
235
- }
236
259
  const executionCode = createExecutionWrapper(toolConfig.executeCode, args);
237
260
  const envVars = this.extractEnvVars(toolConfig.executeCode);
238
- const filesToWrite = [];
239
- const filename = this.config.runtime === "typescript" ? "execute.ts" : "execute.js";
240
- filesToWrite.push({
241
- path: filename,
261
+ const env = envVars.size > 0 ? Object.fromEntries(Array.from(envVars).map((k) => [k, ""])) : {};
262
+ const mkdirCmd = await sandbox.runCommand({
263
+ cmd: "mkdir",
264
+ args: ["-p", runRelDir],
265
+ cwd: "/vercel/sandbox"
266
+ });
267
+ const mkdirStderr = await mkdirCmd.stderr();
268
+ if (mkdirCmd.exitCode !== 0) throw new Error(mkdirStderr || "Failed to create run directory");
269
+ await sandbox.writeFiles([{
270
+ path: runFilePath,
242
271
  content: Buffer.from(executionCode, "utf-8")
272
+ }]);
273
+ const runtime = this.config.runtime === "typescript" ? "tsx" : "node";
274
+ const executeCmd = this.config.runtime === "typescript" ? await sandbox.runCommand({
275
+ cmd: "npx",
276
+ args: [
277
+ "--yes",
278
+ "tsx",
279
+ filename
280
+ ],
281
+ cwd: `/vercel/sandbox/${runRelDir}`,
282
+ env
283
+ }) : await sandbox.runCommand({
284
+ cmd: runtime,
285
+ args: [filename],
286
+ cwd: `/vercel/sandbox/${runRelDir}`,
287
+ env
243
288
  });
244
- if (envVars.size > 0) {
245
- const envFileContent = this.createEnvFileContent(envVars);
246
- if (envFileContent) {
247
- filesToWrite.push({
248
- path: ".env",
249
- content: Buffer.from(envFileContent, "utf-8")
250
- });
251
- logger.info({
252
- functionId,
253
- envVarCount: envVars.size,
254
- envVars: Array.from(envVars)
255
- }, "Creating environment variable placeholders in sandbox");
256
- }
257
- }
258
- await sandbox.writeFiles(filesToWrite);
259
- logger.info({
260
- functionId,
261
- runtime: this.config.runtime === "typescript" ? "tsx" : "node",
262
- hasEnvVars: envVars.size > 0
263
- }, `Execution code written to file for runtime ${this.config.runtime}`);
264
- const executeCmd = await (async () => {
265
- if (envVars.size > 0) return sandbox.runCommand({
266
- cmd: "npx",
267
- args: this.config.runtime === "typescript" ? [
268
- "--yes",
269
- "dotenv-cli",
270
- "--",
271
- "npx",
272
- "tsx",
273
- filename
274
- ] : [
275
- "--yes",
276
- "dotenv-cli",
277
- "--",
278
- "node",
279
- filename
280
- ]
281
- });
282
- const runtime = this.config.runtime === "typescript" ? "tsx" : "node";
283
- return sandbox.runCommand({
284
- cmd: runtime,
285
- args: [filename]
286
- });
287
- })();
288
289
  const executeStdout = await executeCmd.stdout();
289
290
  const executeStderr = await executeCmd.stderr();
290
291
  if (executeStdout) logs.push(executeStdout);
@@ -294,7 +295,8 @@ var VercelSandboxExecutor = class VercelSandboxExecutor {
294
295
  logger.error({
295
296
  functionId,
296
297
  exitCode: executeCmd.exitCode,
297
- stderr: executeStderr
298
+ stderr: executeStderr,
299
+ logs
298
300
  }, "Function execution failed");
299
301
  return {
300
302
  success: false,
@@ -306,7 +308,8 @@ var VercelSandboxExecutor = class VercelSandboxExecutor {
306
308
  const result = parseExecutionResult(executeStdout, functionId, logger);
307
309
  logger.info({
308
310
  functionId,
309
- executionTime
311
+ executionTime,
312
+ logs
310
313
  }, "Function executed successfully in Vercel Sandbox");
311
314
  return {
312
315
  success: true,
@@ -314,9 +317,14 @@ var VercelSandboxExecutor = class VercelSandboxExecutor {
314
317
  logs,
315
318
  executionTime
316
319
  };
317
- } catch (innerError) {
318
- await this.removeSandbox(dependencyHash);
319
- throw innerError;
320
+ } finally {
321
+ try {
322
+ await sandbox.runCommand({
323
+ cmd: "rm",
324
+ args: ["-rf", runRelDir],
325
+ cwd: "/vercel/sandbox"
326
+ });
327
+ } catch {}
320
328
  }
321
329
  } catch (error) {
322
330
  const executionTime = Date.now() - startTime;
@@ -324,7 +332,9 @@ var VercelSandboxExecutor = class VercelSandboxExecutor {
324
332
  logger.error({
325
333
  functionId,
326
334
  error: errorMessage,
327
- executionTime
335
+ stack: error,
336
+ executionTime,
337
+ logs
328
338
  }, "Vercel Sandbox execution error");
329
339
  return {
330
340
  success: false,
@@ -1,9 +1,5 @@
1
1
  //#region src/domains/run/types/xml.d.ts
2
- declare module '*.xml' {
3
- const content: string;
4
- export default content;
5
- }
6
- declare module '*.md' {
2
+ declare module '*?raw' {
7
3
  const content: string;
8
4
  export default content;
9
5
  }
@@ -12,6 +12,36 @@ interface StreamHelper {
12
12
  writeData(type: string, data: any): Promise<void>;
13
13
  writeOperation(operation: OperationEvent): Promise<void>;
14
14
  writeSummary(summary: SummaryEvent): Promise<void>;
15
+ writeToolInputStart(params: {
16
+ toolCallId: string;
17
+ toolName: string;
18
+ }): Promise<void>;
19
+ writeToolInputDelta(params: {
20
+ toolCallId: string;
21
+ inputTextDelta: string;
22
+ }): Promise<void>;
23
+ writeToolInputAvailable(params: {
24
+ toolCallId: string;
25
+ toolName: string;
26
+ input: any;
27
+ providerMetadata?: any;
28
+ }): Promise<void>;
29
+ writeToolOutputAvailable(params: {
30
+ toolCallId: string;
31
+ output: any;
32
+ }): Promise<void>;
33
+ writeToolOutputError(params: {
34
+ toolCallId: string;
35
+ errorText: string;
36
+ output?: any;
37
+ }): Promise<void>;
38
+ writeToolApprovalRequest(params: {
39
+ approvalId: string;
40
+ toolCallId: string;
41
+ }): Promise<void>;
42
+ writeToolOutputDenied(params: {
43
+ toolCallId: string;
44
+ }): Promise<void>;
15
45
  }
16
46
  interface HonoSSEStream {
17
47
  writeSSE(message: {
@@ -31,6 +61,15 @@ interface ChatCompletionChunk {
31
61
  delta: {
32
62
  role?: string;
33
63
  content?: string;
64
+ tool_calls?: Array<{
65
+ index: number;
66
+ id: string | null;
67
+ type: 'function' | null;
68
+ function: {
69
+ name: string | null;
70
+ arguments: string;
71
+ };
72
+ }>;
34
73
  };
35
74
  finish_reason: string | null;
36
75
  }>;
@@ -41,6 +80,7 @@ declare class SSEStreamHelper implements StreamHelper {
41
80
  private timestamp;
42
81
  private isTextStreaming;
43
82
  private queuedEvents;
83
+ private toolCallIndexById;
44
84
  constructor(stream: HonoSSEStream, requestId: string, timestamp: number);
45
85
  /**
46
86
  * Write the initial role message
@@ -50,6 +90,8 @@ declare class SSEStreamHelper implements StreamHelper {
50
90
  * Write content chunk
51
91
  */
52
92
  writeContent(content: string): Promise<void>;
93
+ private getToolIndex;
94
+ private writeToolCallsDelta;
53
95
  /**
54
96
  * Stream text word by word with optional delay
55
97
  */
@@ -64,6 +106,36 @@ declare class SSEStreamHelper implements StreamHelper {
64
106
  */
65
107
  writeCompletion(finishReason?: string): Promise<void>;
66
108
  writeData(type: string, data: any): Promise<void>;
109
+ writeToolInputStart(params: {
110
+ toolCallId: string;
111
+ toolName: string;
112
+ }): Promise<void>;
113
+ writeToolInputDelta(params: {
114
+ toolCallId: string;
115
+ inputTextDelta: string;
116
+ }): Promise<void>;
117
+ writeToolInputAvailable(params: {
118
+ toolCallId: string;
119
+ toolName: string;
120
+ input: any;
121
+ providerMetadata?: any;
122
+ }): Promise<void>;
123
+ writeToolOutputAvailable(params: {
124
+ toolCallId: string;
125
+ output: any;
126
+ }): Promise<void>;
127
+ writeToolOutputError(params: {
128
+ toolCallId: string;
129
+ errorText: string;
130
+ output?: any;
131
+ }): Promise<void>;
132
+ writeToolApprovalRequest(params: {
133
+ approvalId: string;
134
+ toolCallId: string;
135
+ }): Promise<void>;
136
+ writeToolOutputDenied(params: {
137
+ toolCallId: string;
138
+ }): Promise<void>;
67
139
  writeSummary(summary: SummaryEvent): Promise<void>;
68
140
  writeOperation(operation: OperationEvent): Promise<void>;
69
141
  /**
@@ -101,11 +173,42 @@ declare class VercelDataStreamHelper implements StreamHelper {
101
173
  private lastTextEndTimestamp;
102
174
  private connectionDropTimer?;
103
175
  constructor(writer: VercelUIWriter);
176
+ setSessionId(_sessionId: string): void;
104
177
  writeRole(_?: string): Promise<void>;
105
178
  writeContent(content: string): Promise<void>;
106
179
  streamText(text: string, delayMs?: number): Promise<void>;
107
180
  writeData(type: string, data: any): Promise<void>;
108
181
  writeError(error: string | ErrorEvent): Promise<void>;
182
+ writeToolInputStart(params: {
183
+ toolCallId: string;
184
+ toolName: string;
185
+ }): Promise<void>;
186
+ writeToolInputDelta(params: {
187
+ toolCallId: string;
188
+ inputTextDelta: string;
189
+ }): Promise<void>;
190
+ writeToolInputAvailable(params: {
191
+ toolCallId: string;
192
+ toolName: string;
193
+ input: any;
194
+ providerMetadata?: any;
195
+ }): Promise<void>;
196
+ writeToolOutputAvailable(params: {
197
+ toolCallId: string;
198
+ output: any;
199
+ }): Promise<void>;
200
+ writeToolOutputError(params: {
201
+ toolCallId: string;
202
+ errorText: string;
203
+ output?: any;
204
+ }): Promise<void>;
205
+ writeToolApprovalRequest(params: {
206
+ approvalId: string;
207
+ toolCallId: string;
208
+ }): Promise<void>;
209
+ writeToolOutputDenied(params: {
210
+ toolCallId: string;
211
+ }): Promise<void>;
109
212
  streamData(data: any): Promise<void>;
110
213
  mergeStream(stream: any): Promise<void>;
111
214
  /**
@@ -164,6 +267,7 @@ declare class BufferingStreamHelper implements StreamHelper {
164
267
  private capturedSummaries;
165
268
  private hasError;
166
269
  private errorMessage;
270
+ setSessionId(_sessionId: string): void;
167
271
  writeRole(_role?: string): Promise<void>;
168
272
  writeContent(content: string): Promise<void>;
169
273
  streamText(text: string, _delayMs?: number): Promise<void>;
@@ -174,6 +278,36 @@ declare class BufferingStreamHelper implements StreamHelper {
174
278
  writeSummary(summary: SummaryEvent): Promise<void>;
175
279
  writeOperation(operation: OperationEvent): Promise<void>;
176
280
  writeError(error: string | ErrorEvent): Promise<void>;
281
+ writeToolInputStart(params: {
282
+ toolCallId: string;
283
+ toolName: string;
284
+ }): Promise<void>;
285
+ writeToolInputDelta(params: {
286
+ toolCallId: string;
287
+ inputTextDelta: string;
288
+ }): Promise<void>;
289
+ writeToolInputAvailable(params: {
290
+ toolCallId: string;
291
+ toolName: string;
292
+ input: any;
293
+ providerMetadata?: any;
294
+ }): Promise<void>;
295
+ writeToolOutputAvailable(params: {
296
+ toolCallId: string;
297
+ output: any;
298
+ }): Promise<void>;
299
+ writeToolOutputError(params: {
300
+ toolCallId: string;
301
+ errorText: string;
302
+ output?: any;
303
+ }): Promise<void>;
304
+ writeToolApprovalRequest(params: {
305
+ approvalId: string;
306
+ toolCallId: string;
307
+ }): Promise<void>;
308
+ writeToolOutputDenied(params: {
309
+ toolCallId: string;
310
+ }): Promise<void>;
177
311
  complete(): Promise<void>;
178
312
  /**
179
313
  * Get the captured response for non-streaming output