@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
@@ -3,7 +3,7 @@ import { FUNCTION_TOOL_EXECUTION_TIMEOUT_MS_DEFAULT, FUNCTION_TOOL_SANDBOX_CLEAN
3
3
  import { createExecutionWrapper, parseExecutionResult } from "./sandbox-utils.js";
4
4
  import { existsSync, mkdirSync, rmSync, writeFileSync } from "node:fs";
5
5
  import { join } from "node:path";
6
- import { createHash } from "node:crypto";
6
+ import { createHash, randomUUID } from "node:crypto";
7
7
  import { spawn } from "node:child_process";
8
8
  import { tmpdir } from "node:os";
9
9
 
@@ -52,8 +52,7 @@ import { tmpdir } from "node:os";
52
52
  * - Works in Docker, Kubernetes, serverless (Vercel, Lambda)
53
53
  * - No files left in project directory (no git pollution)
54
54
  *
55
- * The singleton pattern here is important - we need one shared pool
56
- * across all tool executions, otherwise caching doesn't work.
55
+ * Note: In this repo, sandbox pooling is scoped to a single message/session via SandboxExecutorFactory.
57
56
  */
58
57
  const logger = getLogger("native-sandbox-executor");
59
58
  /**
@@ -105,19 +104,25 @@ var ExecutionSemaphore = class {
105
104
  return this.waitQueue.length;
106
105
  }
107
106
  };
108
- var NativeSandboxExecutor = class NativeSandboxExecutor {
107
+ var NativeSandboxExecutor = class {
109
108
  tempDir;
110
109
  sandboxPool = {};
111
- static instance = null;
112
110
  executionSemaphores = /* @__PURE__ */ new Map();
111
+ poolCleanupInterval = null;
112
+ sandboxInitPromises = /* @__PURE__ */ new Map();
113
113
  constructor() {
114
114
  this.tempDir = join(tmpdir(), "inkeep-sandboxes");
115
115
  this.ensureTempDir();
116
116
  this.startPoolCleanup();
117
117
  }
118
- static getInstance() {
119
- if (!NativeSandboxExecutor.instance) NativeSandboxExecutor.instance = new NativeSandboxExecutor();
120
- return NativeSandboxExecutor.instance;
118
+ async cleanup() {
119
+ if (this.poolCleanupInterval) {
120
+ clearInterval(this.poolCleanupInterval);
121
+ this.poolCleanupInterval = null;
122
+ }
123
+ this.sandboxInitPromises.clear();
124
+ for (const sandbox of Object.values(this.sandboxPool)) this.cleanupSandbox(sandbox.sandboxDir);
125
+ this.sandboxPool = {};
121
126
  }
122
127
  getSemaphore(vcpus) {
123
128
  const effectiveVcpus = Math.max(1, vcpus || 1);
@@ -154,16 +159,20 @@ var NativeSandboxExecutor = class NativeSandboxExecutor {
154
159
  if (now - sandbox.lastUsed < FUNCTION_TOOL_SANDBOX_POOL_TTL_MS && sandbox.useCount < FUNCTION_TOOL_SANDBOX_MAX_USE_COUNT) {
155
160
  sandbox.lastUsed = now;
156
161
  sandbox.useCount++;
162
+ sandbox.activeCount++;
157
163
  logger.debug({
158
164
  poolKey,
159
165
  useCount: sandbox.useCount,
160
166
  sandboxDir: sandbox.sandboxDir,
161
- lastUsed: new Date(sandbox.lastUsed)
167
+ lastUsed: new Date(sandbox.lastUsed),
168
+ activeCount: sandbox.activeCount
162
169
  }, "Reusing cached sandbox");
163
170
  return sandbox.sandboxDir;
164
171
  }
165
- this.cleanupSandbox(sandbox.sandboxDir);
166
- delete this.sandboxPool[poolKey];
172
+ if (sandbox.activeCount === 0) {
173
+ this.cleanupSandbox(sandbox.sandboxDir);
174
+ delete this.sandboxPool[poolKey];
175
+ }
167
176
  }
168
177
  return null;
169
178
  }
@@ -174,7 +183,8 @@ var NativeSandboxExecutor = class NativeSandboxExecutor {
174
183
  sandboxDir,
175
184
  lastUsed: Date.now(),
176
185
  useCount: 1,
177
- dependencies
186
+ dependencies,
187
+ activeCount: 0
178
188
  };
179
189
  logger.debug({
180
190
  poolKey,
@@ -196,10 +206,10 @@ var NativeSandboxExecutor = class NativeSandboxExecutor {
196
206
  }
197
207
  }
198
208
  startPoolCleanup() {
199
- setInterval(() => {
209
+ this.poolCleanupInterval = setInterval(() => {
200
210
  const now = Date.now();
201
211
  const keysToDelete = [];
202
- for (const [key, sandbox] of Object.entries(this.sandboxPool)) if (now - sandbox.lastUsed > FUNCTION_TOOL_SANDBOX_POOL_TTL_MS || sandbox.useCount >= FUNCTION_TOOL_SANDBOX_MAX_USE_COUNT) {
212
+ for (const [key, sandbox] of Object.entries(this.sandboxPool)) if (sandbox.activeCount === 0 && (now - sandbox.lastUsed > FUNCTION_TOOL_SANDBOX_POOL_TTL_MS || sandbox.useCount >= FUNCTION_TOOL_SANDBOX_MAX_USE_COUNT)) {
203
213
  this.cleanupSandbox(sandbox.sandboxDir);
204
214
  keysToDelete.push(key);
205
215
  }
@@ -257,42 +267,60 @@ var NativeSandboxExecutor = class NativeSandboxExecutor {
257
267
  sandboxConfig: config.sandboxConfig,
258
268
  poolSize: Object.keys(this.sandboxPool).length
259
269
  }, "Executing function tool");
260
- let sandboxDir = this.getCachedSandbox(dependencyHash);
261
- let isNewSandbox = false;
262
- if (!sandboxDir) {
263
- sandboxDir = join(this.tempDir, `sandbox-${dependencyHash}-${Date.now()}`);
264
- mkdirSync(sandboxDir, { recursive: true });
265
- isNewSandbox = true;
266
- logger.debug({
267
- toolId,
268
- dependencyHash,
269
- sandboxDir,
270
- dependencies
271
- }, "Creating new sandbox");
272
- const moduleType = this.detectModuleType(config.executeCode, config.sandboxConfig?.runtime);
273
- const packageJson = {
274
- name: `function-tool-${toolId}`,
275
- version: "1.0.0",
276
- ...moduleType === "esm" && { type: "module" },
277
- dependencies,
278
- scripts: { start: moduleType === "esm" ? "node index.mjs" : "node index.js" }
279
- };
280
- writeFileSync(join(sandboxDir, "package.json"), JSON.stringify(packageJson, null, 2), "utf8");
281
- if (Object.keys(dependencies).length > 0) await this.installDependencies(sandboxDir);
282
- this.addToPool(dependencyHash, sandboxDir, dependencies);
283
- }
270
+ const sandboxDir = await (async () => {
271
+ const cachedDir = this.getCachedSandbox(dependencyHash);
272
+ if (cachedDir) return cachedDir;
273
+ const existingInit = this.sandboxInitPromises.get(dependencyHash);
274
+ if (existingInit) {
275
+ const dir = await existingInit;
276
+ const poolEntry = this.sandboxPool[dependencyHash];
277
+ if (poolEntry) poolEntry.activeCount++;
278
+ return dir;
279
+ }
280
+ const initPromise = (async () => {
281
+ const dir = join(this.tempDir, `sandbox-${dependencyHash}-${Date.now()}`);
282
+ mkdirSync(dir, { recursive: true });
283
+ logger.debug({
284
+ toolId,
285
+ dependencyHash,
286
+ sandboxDir: dir,
287
+ dependencies
288
+ }, "Creating new sandbox");
289
+ const packageJson = {
290
+ name: `function-tool-${toolId}`,
291
+ version: "1.0.0",
292
+ dependencies
293
+ };
294
+ writeFileSync(join(dir, "package.json"), JSON.stringify(packageJson, null, 2), "utf8");
295
+ if (Object.keys(dependencies).length > 0) await this.installDependencies(dir);
296
+ this.addToPool(dependencyHash, dir, dependencies);
297
+ this.sandboxPool[dependencyHash].activeCount++;
298
+ return dir;
299
+ })();
300
+ this.sandboxInitPromises.set(dependencyHash, initPromise);
301
+ try {
302
+ return await initPromise;
303
+ } finally {
304
+ this.sandboxInitPromises.delete(dependencyHash);
305
+ }
306
+ })();
307
+ let runDir = null;
284
308
  try {
285
309
  const moduleType = this.detectModuleType(config.executeCode, config.sandboxConfig?.runtime);
286
310
  const executionCode = createExecutionWrapper(config.executeCode, args);
287
- writeFileSync(join(sandboxDir, `index.${moduleType === "esm" ? "mjs" : "js"}`), executionCode, "utf8");
288
- return await this.executeInSandbox(sandboxDir, config.sandboxConfig?.timeout || FUNCTION_TOOL_EXECUTION_TIMEOUT_MS_DEFAULT, moduleType, config.sandboxConfig);
289
- } catch (error) {
290
- if (isNewSandbox) {
291
- this.cleanupSandbox(sandboxDir);
292
- const poolKey = dependencyHash;
293
- delete this.sandboxPool[poolKey];
294
- }
295
- throw error;
311
+ runDir = join(sandboxDir, "runs", `${Date.now()}-${createHash("sha256").update(randomUUID()).digest("hex").substring(0, 8)}`);
312
+ mkdirSync(runDir, { recursive: true });
313
+ writeFileSync(join(runDir, `index.${moduleType === "esm" ? "mjs" : "cjs"}`), executionCode, "utf8");
314
+ return await this.executeInSandbox(runDir, config.sandboxConfig?.timeout || FUNCTION_TOOL_EXECUTION_TIMEOUT_MS_DEFAULT, moduleType, config.sandboxConfig);
315
+ } finally {
316
+ if (runDir) try {
317
+ rmSync(runDir, {
318
+ recursive: true,
319
+ force: true
320
+ });
321
+ } catch {}
322
+ const poolEntry = this.sandboxPool[dependencyHash];
323
+ if (poolEntry) poolEntry.activeCount = Math.max(0, poolEntry.activeCount - 1);
296
324
  }
297
325
  }
298
326
  async installDependencies(sandboxDir) {
@@ -344,7 +372,7 @@ var NativeSandboxExecutor = class NativeSandboxExecutor {
344
372
  }
345
373
  async executeInSandbox(sandboxDir, timeout, moduleType, _sandboxConfig) {
346
374
  return new Promise((resolve$1, reject) => {
347
- const fileExtension = moduleType === "esm" ? "mjs" : "js";
375
+ const fileExtension = moduleType === "esm" ? "mjs" : "cjs";
348
376
  const spawnOptions = {
349
377
  cwd: sandboxDir,
350
378
  stdio: "pipe",
@@ -8,13 +8,23 @@ import { FunctionToolConfig } from "./NativeSandboxExecutor.js";
8
8
  */
9
9
  declare class SandboxExecutorFactory {
10
10
  private static instance;
11
+ private static sessionFactories;
11
12
  private nativeExecutor;
12
13
  private vercelExecutors;
13
- private constructor();
14
+ constructor();
14
15
  /**
15
16
  * Get singleton instance of SandboxExecutorFactory
16
17
  */
17
18
  static getInstance(): SandboxExecutorFactory;
19
+ /**
20
+ * Get a session-scoped instance of SandboxExecutorFactory.
21
+ * Intended to scope Vercel sandbox pooling to a single message/session.
22
+ */
23
+ static getForSession(sessionId: string): SandboxExecutorFactory;
24
+ /**
25
+ * Cleanup and remove a session-scoped SandboxExecutorFactory.
26
+ */
27
+ static cleanupSession(sessionId: string): Promise<void>;
18
28
  /**
19
29
  * Execute a function tool using the appropriate sandbox provider
20
30
  */
@@ -10,6 +10,7 @@ const logger = getLogger("SandboxExecutorFactory");
10
10
  */
11
11
  var SandboxExecutorFactory = class SandboxExecutorFactory {
12
12
  static instance;
13
+ static sessionFactories = /* @__PURE__ */ new Map();
13
14
  nativeExecutor = null;
14
15
  vercelExecutors = /* @__PURE__ */ new Map();
15
16
  constructor() {
@@ -23,6 +24,26 @@ var SandboxExecutorFactory = class SandboxExecutorFactory {
23
24
  return SandboxExecutorFactory.instance;
24
25
  }
25
26
  /**
27
+ * Get a session-scoped instance of SandboxExecutorFactory.
28
+ * Intended to scope Vercel sandbox pooling to a single message/session.
29
+ */
30
+ static getForSession(sessionId) {
31
+ const existing = SandboxExecutorFactory.sessionFactories.get(sessionId);
32
+ if (existing) return existing;
33
+ const created = new SandboxExecutorFactory();
34
+ SandboxExecutorFactory.sessionFactories.set(sessionId, created);
35
+ return created;
36
+ }
37
+ /**
38
+ * Cleanup and remove a session-scoped SandboxExecutorFactory.
39
+ */
40
+ static async cleanupSession(sessionId) {
41
+ const factory = SandboxExecutorFactory.sessionFactories.get(sessionId);
42
+ if (!factory) return;
43
+ await factory.cleanup();
44
+ SandboxExecutorFactory.sessionFactories.delete(sessionId);
45
+ }
46
+ /**
26
47
  * Execute a function tool using the appropriate sandbox provider
27
48
  */
28
49
  async executeFunctionTool(functionId, args, config) {
@@ -37,7 +58,7 @@ var SandboxExecutorFactory = class SandboxExecutorFactory {
37
58
  */
38
59
  async executeInNativeSandbox(functionId, args, config) {
39
60
  if (!this.nativeExecutor) {
40
- this.nativeExecutor = NativeSandboxExecutor.getInstance();
61
+ this.nativeExecutor = new NativeSandboxExecutor();
41
62
  logger.info({}, "Native sandbox executor created");
42
63
  }
43
64
  return this.nativeExecutor.executeFunctionTool(functionId, args, config);
@@ -49,7 +70,7 @@ var SandboxExecutorFactory = class SandboxExecutorFactory {
49
70
  const vercelConfig = config.sandboxConfig;
50
71
  const configKey = `${vercelConfig.teamId}:${vercelConfig.projectId}`;
51
72
  if (!this.vercelExecutors.has(configKey)) {
52
- const executor$1 = VercelSandboxExecutor.getInstance(vercelConfig);
73
+ const executor$1 = new VercelSandboxExecutor(vercelConfig);
53
74
  this.vercelExecutors.set(configKey, executor$1);
54
75
  logger.info({
55
76
  teamId: vercelConfig.teamId,
@@ -67,7 +88,10 @@ var SandboxExecutorFactory = class SandboxExecutorFactory {
67
88
  */
68
89
  async cleanup() {
69
90
  logger.info({}, "Cleaning up sandbox executors");
70
- this.nativeExecutor = null;
91
+ if (this.nativeExecutor) {
92
+ await this.nativeExecutor.cleanup();
93
+ this.nativeExecutor = null;
94
+ }
71
95
  for (const [key, executor] of this.vercelExecutors.entries()) {
72
96
  await executor.cleanup();
73
97
  this.vercelExecutors.delete(key);
@@ -15,15 +15,12 @@ interface ExecutionResult {
15
15
  * Caches and reuses sandboxes based on dependencies to improve performance
16
16
  */
17
17
  declare class VercelSandboxExecutor {
18
- private static instance;
19
18
  private config;
20
19
  private sandboxPool;
21
20
  private cleanupInterval;
22
- private constructor();
23
- /**
24
- * Get singleton instance of VercelSandboxExecutor
25
- */
26
- static getInstance(config: VercelSandboxConfig): VercelSandboxExecutor;
21
+ private sandboxInitPromises;
22
+ constructor(config: VercelSandboxConfig);
23
+ private getOrCreateSandbox;
27
24
  /**
28
25
  * Generate a hash for dependencies to use as cache key
29
26
  */
@@ -57,11 +54,6 @@ declare class VercelSandboxExecutor {
57
54
  * Matches patterns like process.env.VAR_NAME or process.env['VAR_NAME']
58
55
  */
59
56
  private extractEnvVars;
60
- /**
61
- * Create .env file content from environment variables
62
- * Note: Currently creates empty placeholders. Values will be populated in the future.
63
- */
64
- private createEnvFileContent;
65
57
  /**
66
58
  * Execute a function tool in Vercel Sandbox with pooling
67
59
  */