zeitlich 0.2.32 → 0.2.34

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 (143) hide show
  1. package/README.md +28 -16
  2. package/dist/{activities-FIXVz7DT.d.ts → activities-JOqPfKP0.d.cts} +6 -5
  3. package/dist/{activities-DA-bQM12.d.cts → activities-WwMsjRwm.d.ts} +6 -5
  4. package/dist/adapters/sandbox/bedrock/index.cjs +2 -0
  5. package/dist/adapters/sandbox/bedrock/index.cjs.map +1 -1
  6. package/dist/adapters/sandbox/bedrock/index.d.cts +4 -3
  7. package/dist/adapters/sandbox/bedrock/index.d.ts +4 -3
  8. package/dist/adapters/sandbox/bedrock/index.js +2 -0
  9. package/dist/adapters/sandbox/bedrock/index.js.map +1 -1
  10. package/dist/adapters/sandbox/bedrock/workflow.cjs +1 -0
  11. package/dist/adapters/sandbox/bedrock/workflow.cjs.map +1 -1
  12. package/dist/adapters/sandbox/bedrock/workflow.d.cts +2 -2
  13. package/dist/adapters/sandbox/bedrock/workflow.d.ts +2 -2
  14. package/dist/adapters/sandbox/bedrock/workflow.js +1 -0
  15. package/dist/adapters/sandbox/bedrock/workflow.js.map +1 -1
  16. package/dist/adapters/sandbox/daytona/index.cjs +2 -0
  17. package/dist/adapters/sandbox/daytona/index.cjs.map +1 -1
  18. package/dist/adapters/sandbox/daytona/index.d.cts +2 -1
  19. package/dist/adapters/sandbox/daytona/index.d.ts +2 -1
  20. package/dist/adapters/sandbox/daytona/index.js +2 -0
  21. package/dist/adapters/sandbox/daytona/index.js.map +1 -1
  22. package/dist/adapters/sandbox/daytona/workflow.cjs +1 -0
  23. package/dist/adapters/sandbox/daytona/workflow.cjs.map +1 -1
  24. package/dist/adapters/sandbox/daytona/workflow.d.cts +1 -1
  25. package/dist/adapters/sandbox/daytona/workflow.d.ts +1 -1
  26. package/dist/adapters/sandbox/daytona/workflow.js +1 -0
  27. package/dist/adapters/sandbox/daytona/workflow.js.map +1 -1
  28. package/dist/adapters/sandbox/e2b/index.cjs +3 -0
  29. package/dist/adapters/sandbox/e2b/index.cjs.map +1 -1
  30. package/dist/adapters/sandbox/e2b/index.d.cts +2 -1
  31. package/dist/adapters/sandbox/e2b/index.d.ts +2 -1
  32. package/dist/adapters/sandbox/e2b/index.js +3 -0
  33. package/dist/adapters/sandbox/e2b/index.js.map +1 -1
  34. package/dist/adapters/sandbox/e2b/workflow.cjs +1 -0
  35. package/dist/adapters/sandbox/e2b/workflow.cjs.map +1 -1
  36. package/dist/adapters/sandbox/e2b/workflow.d.cts +1 -1
  37. package/dist/adapters/sandbox/e2b/workflow.d.ts +1 -1
  38. package/dist/adapters/sandbox/e2b/workflow.js +1 -0
  39. package/dist/adapters/sandbox/e2b/workflow.js.map +1 -1
  40. package/dist/adapters/sandbox/inmemory/index.cjs +2 -0
  41. package/dist/adapters/sandbox/inmemory/index.cjs.map +1 -1
  42. package/dist/adapters/sandbox/inmemory/index.d.cts +2 -1
  43. package/dist/adapters/sandbox/inmemory/index.d.ts +2 -1
  44. package/dist/adapters/sandbox/inmemory/index.js +2 -0
  45. package/dist/adapters/sandbox/inmemory/index.js.map +1 -1
  46. package/dist/adapters/sandbox/inmemory/workflow.cjs +1 -0
  47. package/dist/adapters/sandbox/inmemory/workflow.cjs.map +1 -1
  48. package/dist/adapters/sandbox/inmemory/workflow.d.cts +1 -1
  49. package/dist/adapters/sandbox/inmemory/workflow.d.ts +1 -1
  50. package/dist/adapters/sandbox/inmemory/workflow.js +1 -0
  51. package/dist/adapters/sandbox/inmemory/workflow.js.map +1 -1
  52. package/dist/adapters/thread/anthropic/index.cjs +18 -2
  53. package/dist/adapters/thread/anthropic/index.cjs.map +1 -1
  54. package/dist/adapters/thread/anthropic/index.d.cts +12 -11
  55. package/dist/adapters/thread/anthropic/index.d.ts +12 -11
  56. package/dist/adapters/thread/anthropic/index.js +18 -2
  57. package/dist/adapters/thread/anthropic/index.js.map +1 -1
  58. package/dist/adapters/thread/anthropic/workflow.d.cts +5 -5
  59. package/dist/adapters/thread/anthropic/workflow.d.ts +5 -5
  60. package/dist/adapters/thread/google-genai/index.cjs +29 -8
  61. package/dist/adapters/thread/google-genai/index.cjs.map +1 -1
  62. package/dist/adapters/thread/google-genai/index.d.cts +8 -8
  63. package/dist/adapters/thread/google-genai/index.d.ts +8 -8
  64. package/dist/adapters/thread/google-genai/index.js +29 -8
  65. package/dist/adapters/thread/google-genai/index.js.map +1 -1
  66. package/dist/adapters/thread/google-genai/workflow.d.cts +5 -5
  67. package/dist/adapters/thread/google-genai/workflow.d.ts +5 -5
  68. package/dist/adapters/thread/langchain/index.cjs +42 -23
  69. package/dist/adapters/thread/langchain/index.cjs.map +1 -1
  70. package/dist/adapters/thread/langchain/index.d.cts +13 -11
  71. package/dist/adapters/thread/langchain/index.d.ts +13 -11
  72. package/dist/adapters/thread/langchain/index.js +42 -23
  73. package/dist/adapters/thread/langchain/index.js.map +1 -1
  74. package/dist/adapters/thread/langchain/workflow.d.cts +5 -5
  75. package/dist/adapters/thread/langchain/workflow.d.ts +5 -5
  76. package/dist/index.cjs +148 -34
  77. package/dist/index.cjs.map +1 -1
  78. package/dist/index.d.cts +32 -16
  79. package/dist/index.d.ts +32 -16
  80. package/dist/index.js +147 -35
  81. package/dist/index.js.map +1 -1
  82. package/dist/{proxy-CTCYWjkr.d.cts → proxy-BesT2ioL.d.cts} +1 -1
  83. package/dist/{proxy-Br4unLTC.d.ts → proxy-Bz6wXYW-.d.ts} +1 -1
  84. package/dist/{thread-manager-Cv_BR28i.d.cts → thread-manager-CCVAOK8g.d.cts} +1 -1
  85. package/dist/{thread-manager-CUubPYPH.d.cts → thread-manager-Cf_34H8w.d.cts} +1 -1
  86. package/dist/{thread-manager-YJLoc1vH.d.ts → thread-manager-ClKAQx78.d.ts} +1 -1
  87. package/dist/{thread-manager-DKWxHUzD.d.ts → thread-manager-DarJIK_b.d.ts} +1 -1
  88. package/dist/{types-Bpq5fDI5.d.cts → types-BGLW5Zyj.d.ts} +35 -20
  89. package/dist/{types-BxiT8w9d.d.ts → types-BVUmLYpj.d.ts} +1 -1
  90. package/dist/{types-DUvEZSDe.d.cts → types-CBH54cwr.d.cts} +1 -1
  91. package/dist/{types-NJDyMyUx.d.cts → types-DPAZ3KCs.d.cts} +1 -1
  92. package/dist/{types-CheCTLeV.d.ts → types-DlLajQcu.d.cts} +35 -20
  93. package/dist/{types-AujBIMMn.d.cts → types-DxCpFNv_.d.cts} +4 -0
  94. package/dist/{types-AujBIMMn.d.ts → types-DxCpFNv_.d.ts} +4 -0
  95. package/dist/{types-DBk-C8zM.d.ts → types-wiGLvxWf.d.ts} +1 -1
  96. package/dist/{workflow-BWKQcz9d.d.cts → workflow-_ZGcacCK.d.ts} +32 -4
  97. package/dist/{workflow-D8wK7TJY.d.ts → workflow-hocXpLwg.d.cts} +32 -4
  98. package/dist/workflow.cjs +126 -30
  99. package/dist/workflow.cjs.map +1 -1
  100. package/dist/workflow.d.cts +3 -3
  101. package/dist/workflow.d.ts +3 -3
  102. package/dist/workflow.js +126 -31
  103. package/dist/workflow.js.map +1 -1
  104. package/package.json +1 -1
  105. package/src/adapters/sandbox/bedrock/index.ts +4 -0
  106. package/src/adapters/sandbox/bedrock/proxy.ts +1 -0
  107. package/src/adapters/sandbox/daytona/index.ts +4 -0
  108. package/src/adapters/sandbox/daytona/proxy.ts +1 -0
  109. package/src/adapters/sandbox/e2b/index.ts +4 -0
  110. package/src/adapters/sandbox/e2b/proxy.ts +1 -0
  111. package/src/adapters/sandbox/inmemory/index.ts +4 -0
  112. package/src/adapters/sandbox/inmemory/proxy.ts +1 -0
  113. package/src/adapters/thread/anthropic/activities.ts +4 -3
  114. package/src/adapters/thread/anthropic/model-invoker.ts +15 -5
  115. package/src/adapters/thread/google-genai/activities.ts +4 -3
  116. package/src/adapters/thread/google-genai/model-invoker.ts +24 -11
  117. package/src/adapters/thread/langchain/activities.ts +3 -3
  118. package/src/adapters/thread/langchain/model-invoker.ts +63 -34
  119. package/src/index.ts +1 -0
  120. package/src/lib/activity.ts +36 -9
  121. package/src/lib/lifecycle.ts +7 -3
  122. package/src/lib/model/helpers.ts +1 -0
  123. package/src/lib/model/index.ts +1 -0
  124. package/src/lib/model/proxy.ts +50 -0
  125. package/src/lib/sandbox/manager.ts +7 -0
  126. package/src/lib/sandbox/types.ts +4 -0
  127. package/src/lib/session/session-edge-cases.integration.test.ts +194 -0
  128. package/src/lib/session/session.integration.test.ts +5 -0
  129. package/src/lib/session/session.ts +9 -0
  130. package/src/lib/session/types.ts +5 -0
  131. package/src/lib/subagent/define.ts +1 -1
  132. package/src/lib/subagent/handler.ts +142 -32
  133. package/src/lib/subagent/index.ts +5 -1
  134. package/src/lib/subagent/signals.ts +8 -1
  135. package/src/lib/subagent/subagent.integration.test.ts +532 -25
  136. package/src/lib/subagent/types.ts +32 -15
  137. package/src/lib/subagent/workflow.ts +26 -13
  138. package/src/lib/virtual-fs/manager.ts +1 -1
  139. package/src/lib/virtual-fs/types.ts +2 -2
  140. package/src/lib/virtual-fs/virtual-fs.test.ts +2 -2
  141. package/src/workflow.ts +3 -0
  142. package/src/lib/.env +0 -1
  143. package/src/tools/bash/.env +0 -1
package/dist/index.cjs CHANGED
@@ -396,23 +396,50 @@ function createSubagentTool(subagents) {
396
396
  };
397
397
  }
398
398
  var childResultSignal = workflow.defineSignal("childResult");
399
+ var childSandboxReadySignal = workflow.defineSignal("childSandboxReady");
399
400
  var destroySandboxSignal = workflow.defineSignal("destroySandbox");
400
401
 
401
402
  // src/lib/subagent/handler.ts
402
403
  function resolveSandboxConfig(config) {
403
- if (!config || config === "none") return { source: "none" };
404
- if (config === "inherit") return { source: "inherit" };
405
- if (config === "own") return { source: "own" };
406
- return { source: "own", shutdown: config.shutdown };
404
+ if (!config || config === "none") {
405
+ return { source: "none", init: "per-call", continuation: "fork" };
406
+ }
407
+ if (config.source === "inherit") {
408
+ return {
409
+ source: "inherit",
410
+ init: "per-call",
411
+ continuation: config.continuation,
412
+ shutdown: config.shutdown
413
+ };
414
+ }
415
+ return {
416
+ source: "own",
417
+ init: config.init ?? "per-call",
418
+ continuation: config.continuation,
419
+ shutdown: config.shutdown
420
+ };
407
421
  }
408
422
  function createSubagentHandler(subagents) {
409
423
  const { taskQueue: parentTaskQueue } = workflow.workflowInfo();
410
424
  const childResults = /* @__PURE__ */ new Map();
411
425
  const pendingDestroys = /* @__PURE__ */ new Map();
412
426
  const threadSandboxes = /* @__PURE__ */ new Map();
427
+ const persistentSandboxes = /* @__PURE__ */ new Map();
428
+ const persistentSandboxCreating = /* @__PURE__ */ new Set();
429
+ const lazyCreatorAgent = /* @__PURE__ */ new Map();
413
430
  workflow.setHandler(childResultSignal, ({ childWorkflowId, result }) => {
414
431
  childResults.set(childWorkflowId, result);
415
432
  });
433
+ workflow.setHandler(
434
+ childSandboxReadySignal,
435
+ ({ childWorkflowId, sandboxId }) => {
436
+ const agentName = lazyCreatorAgent.get(childWorkflowId);
437
+ if (agentName && !persistentSandboxes.has(agentName)) {
438
+ persistentSandboxes.set(agentName, sandboxId);
439
+ lazyCreatorAgent.delete(childWorkflowId);
440
+ }
441
+ }
442
+ );
416
443
  const handler = async (args, context) => {
417
444
  const config = subagents.find((s) => s.agentName === args.subagent);
418
445
  if (!config) {
@@ -439,21 +466,48 @@ function createSubagentHandler(subagents) {
439
466
  };
440
467
  }
441
468
  let sandbox;
469
+ let sandboxShutdownOverride;
470
+ let isLazyCreator = false;
442
471
  if (sandboxCfg.source === "inherit" && parentSandboxId) {
443
- sandbox = {
444
- mode: "inherit",
445
- sandboxId: parentSandboxId
446
- };
472
+ if (sandboxCfg.continuation === "fork") {
473
+ sandbox = { mode: "fork", sandboxId: parentSandboxId };
474
+ } else {
475
+ sandbox = { mode: "inherit", sandboxId: parentSandboxId };
476
+ }
447
477
  } else if (sandboxCfg.source === "own") {
448
- const prevSbId = continuationThreadId ? threadSandboxes.get(continuationThreadId) : void 0;
449
- if (prevSbId) {
450
- sandbox = { mode: "fork", sandboxId: prevSbId };
478
+ const isLazy = sandboxCfg.init === "once";
479
+ let baseSandboxId;
480
+ if (isLazy) {
481
+ baseSandboxId = persistentSandboxes.get(config.agentName);
482
+ if (!baseSandboxId) {
483
+ if (persistentSandboxCreating.has(config.agentName)) {
484
+ await workflow.condition(() => persistentSandboxes.has(config.agentName));
485
+ baseSandboxId = persistentSandboxes.get(config.agentName);
486
+ } else {
487
+ persistentSandboxCreating.add(config.agentName);
488
+ isLazyCreator = true;
489
+ }
490
+ }
491
+ } else if (continuationThreadId) {
492
+ baseSandboxId = threadSandboxes.get(continuationThreadId);
493
+ }
494
+ if (baseSandboxId) {
495
+ sandbox = {
496
+ mode: sandboxCfg.continuation === "continue" ? "continue" : "fork",
497
+ sandboxId: baseSandboxId
498
+ };
499
+ }
500
+ const userShutdown = sandboxCfg.shutdown;
501
+ const alreadySurvives = userShutdown === "pause-until-parent-close" || userShutdown === "keep-until-parent-close" || userShutdown === "pause" || userShutdown === "keep";
502
+ const mustSurvive = isLazyCreator || sandboxCfg.continuation === "continue" || isLazy && sandboxCfg.continuation === "fork";
503
+ if (mustSurvive && !alreadySurvives) {
504
+ sandboxShutdownOverride = isLazyCreator ? "pause-until-parent-close" : "pause";
451
505
  }
452
506
  }
453
507
  const workflowInput = {
454
508
  ...thread && { thread },
455
509
  ...sandbox && { sandbox },
456
- ...sandboxCfg.shutdown && { sandboxShutdown: sandboxCfg.shutdown }
510
+ sandboxShutdown: sandboxShutdownOverride ?? sandboxCfg.shutdown ?? void 0
457
511
  };
458
512
  const resolvedContext = config.context === void 0 ? void 0 : typeof config.context === "function" ? config.context() : config.context;
459
513
  const childOpts = {
@@ -461,6 +515,9 @@ function createSubagentHandler(subagents) {
461
515
  args: resolvedContext === void 0 ? [args.prompt, workflowInput] : [args.prompt, workflowInput, resolvedContext],
462
516
  taskQueue: config.taskQueue ?? parentTaskQueue
463
517
  };
518
+ if (isLazyCreator) {
519
+ lazyCreatorAgent.set(childWorkflowId, config.agentName);
520
+ }
464
521
  workflow.log.info("subagent spawned", {
465
522
  subagent: config.agentName,
466
523
  childWorkflowId,
@@ -468,10 +525,10 @@ function createSubagentHandler(subagents) {
468
525
  sandboxSource: sandboxCfg.source
469
526
  });
470
527
  const childHandle = await workflow.startChild(config.workflow, childOpts);
471
- const effectiveShutdown = sandboxCfg.shutdown ?? "destroy";
472
- const shouldDeferDestroy = effectiveShutdown === "pause-until-parent-close" && (sandboxCfg.source === "own" || allowsContinuation && sandboxCfg.source !== "inherit");
473
- if (shouldDeferDestroy) {
474
- pendingDestroys.set(childWorkflowId, childHandle);
528
+ const effectiveShutdown = sandboxShutdownOverride ?? sandboxCfg.shutdown ?? "destroy";
529
+ if (effectiveShutdown === "pause-until-parent-close" || effectiveShutdown === "keep-until-parent-close") {
530
+ const key = isLazyCreator ? `persistent:${config.agentName}` : childWorkflowId;
531
+ pendingDestroys.set(key, childHandle);
475
532
  }
476
533
  await Promise.race([
477
534
  workflow.condition(() => childResults.has(childWorkflowId)),
@@ -505,8 +562,16 @@ function createSubagentHandler(subagents) {
505
562
  sandboxId: childSandboxId,
506
563
  metadata
507
564
  } = childResult;
508
- if (allowsContinuation && childSandboxId && childThreadId) {
509
- threadSandboxes.set(childThreadId, childSandboxId);
565
+ if (childSandboxId) {
566
+ if (sandboxCfg.source === "own" && sandboxCfg.init === "once" && !persistentSandboxes.has(config.agentName)) {
567
+ persistentSandboxes.set(config.agentName, childSandboxId);
568
+ } else if (allowsContinuation && childThreadId) {
569
+ threadSandboxes.set(childThreadId, childSandboxId);
570
+ }
571
+ }
572
+ if (isLazyCreator) {
573
+ persistentSandboxCreating.delete(config.agentName);
574
+ lazyCreatorAgent.delete(childWorkflowId);
510
575
  }
511
576
  if (!toolResponse) {
512
577
  return {
@@ -712,6 +777,7 @@ async function createSession({
712
777
  thread: threadInit,
713
778
  sandbox: sandboxInit,
714
779
  sandboxShutdown = "destroy",
780
+ onSandboxReady,
715
781
  virtualFs: virtualFsConfig,
716
782
  virtualFsOps
717
783
  }) {
@@ -814,6 +880,9 @@ async function createSession({
814
880
  });
815
881
  }
816
882
  sandboxId = sandboxInit.sandboxId;
883
+ if (sandboxShutdown === "pause-until-parent-close") {
884
+ await sandboxOps.resumeSandbox(sandboxId);
885
+ }
817
886
  sandboxOwned = true;
818
887
  } else if (sandboxMode === "fork") {
819
888
  if (!sandboxOps) {
@@ -836,6 +905,9 @@ async function createSession({
836
905
  sandboxOwned = true;
837
906
  }
838
907
  }
908
+ if (sandboxId && onSandboxReady) {
909
+ onSandboxReady(sandboxId);
910
+ }
839
911
  if (virtualFsConfig) {
840
912
  if (!virtualFsOps) {
841
913
  throw workflow.ApplicationFailure.create({
@@ -1305,39 +1377,45 @@ function defineSubagent(definition, overrides) {
1305
1377
  function defineSubagentWorkflow(config, fn) {
1306
1378
  const workflow$1 = async (prompt, workflowInput, context) => {
1307
1379
  const effectiveShutdown = workflowInput.sandboxShutdown ?? config.sandboxShutdown ?? "destroy";
1380
+ const { parent } = workflow.workflowInfo();
1381
+ if (!parent) {
1382
+ throw workflow.ApplicationFailure.create({
1383
+ message: "Subagent workflow called without a parent workflow",
1384
+ nonRetryable: true
1385
+ });
1386
+ }
1387
+ const parentHandle = workflow.getExternalWorkflowHandle(parent.workflowId);
1308
1388
  const sessionInput = {
1309
1389
  agentName: config.name,
1310
1390
  sandboxShutdown: effectiveShutdown,
1311
1391
  ...workflowInput.thread && { thread: workflowInput.thread },
1312
- ...workflowInput.sandbox && { sandbox: workflowInput.sandbox }
1392
+ ...workflowInput.sandbox && { sandbox: workflowInput.sandbox },
1393
+ onSandboxReady: (sandboxId) => {
1394
+ void parentHandle.signal(childSandboxReadySignal, {
1395
+ childWorkflowId: workflow.workflowInfo().workflowId,
1396
+ sandboxId
1397
+ });
1398
+ }
1313
1399
  };
1314
1400
  const { destroySandbox, ...result } = await fn(
1315
1401
  prompt,
1316
1402
  sessionInput,
1317
1403
  context ?? {}
1318
1404
  );
1319
- if (effectiveShutdown === "pause-until-parent-close") {
1405
+ if (effectiveShutdown === "pause-until-parent-close" || effectiveShutdown === "keep-until-parent-close") {
1320
1406
  if (!destroySandbox) {
1321
1407
  throw workflow.ApplicationFailure.create({
1322
- message: `Subagent "${config.name}" has sandboxShutdown="pause-until-parent-close" but fn did not return a destroySandbox callback`,
1408
+ message: `Subagent "${config.name}" has sandboxShutdown="${effectiveShutdown}" but fn did not return a destroySandbox callback`,
1323
1409
  nonRetryable: true
1324
1410
  });
1325
1411
  }
1326
1412
  if (!result.sandboxId) {
1327
1413
  throw workflow.ApplicationFailure.create({
1328
- message: `Subagent "${config.name}" has sandboxShutdown="pause-until-parent-close" but fn did not return a sandboxId`,
1414
+ message: `Subagent "${config.name}" has sandboxShutdown="${effectiveShutdown}" but fn did not return a sandboxId`,
1329
1415
  nonRetryable: true
1330
1416
  });
1331
1417
  }
1332
1418
  }
1333
- const { parent } = workflow.workflowInfo();
1334
- if (!parent) {
1335
- throw workflow.ApplicationFailure.create({
1336
- message: "Subagent workflow called without a parent workflow",
1337
- nonRetryable: true
1338
- });
1339
- }
1340
- const parentHandle = workflow.getExternalWorkflowHandle(parent.workflowId);
1341
1419
  await parentHandle.signal(childResultSignal, {
1342
1420
  childWorkflowId: workflow.workflowInfo().workflowId,
1343
1421
  result
@@ -1416,6 +1494,23 @@ function composeHooks(...fns) {
1416
1494
  return lastResult;
1417
1495
  };
1418
1496
  }
1497
+ function proxyRunAgent(scope, options) {
1498
+ const resolvedScope = scope ?? workflow.workflowInfo().workflowType;
1499
+ const name = `run${resolvedScope.charAt(0).toUpperCase()}${resolvedScope.slice(1)}`;
1500
+ const acts = workflow.proxyActivities(
1501
+ options ?? {
1502
+ startToCloseTimeout: "10m",
1503
+ heartbeatTimeout: "1m",
1504
+ retry: {
1505
+ maximumAttempts: 3,
1506
+ initialInterval: "10s",
1507
+ maximumInterval: "2m",
1508
+ backoffCoefficient: 3
1509
+ }
1510
+ }
1511
+ );
1512
+ return acts[name];
1513
+ }
1419
1514
  var SandboxNotSupportedError = class extends common.ApplicationFailure {
1420
1515
  constructor(operation) {
1421
1516
  super(
@@ -2172,6 +2267,14 @@ function createThreadManager(config) {
2172
2267
  }
2173
2268
  };
2174
2269
  }
2270
+ function getActivityContext() {
2271
+ try {
2272
+ const ctx = activity.Context.current();
2273
+ return { heartbeat: () => ctx.heartbeat(), signal: ctx.cancellationSignal };
2274
+ } catch {
2275
+ return {};
2276
+ }
2277
+ }
2175
2278
  async function queryParentWorkflowState(client) {
2176
2279
  const { workflowExecution } = activity.Context.current().info;
2177
2280
  const handle = client.getHandle(
@@ -2180,10 +2283,13 @@ async function queryParentWorkflowState(client) {
2180
2283
  );
2181
2284
  return handle.query("getAgentState");
2182
2285
  }
2183
- function createRunAgentActivity(client, handler) {
2184
- return async (config) => {
2185
- const state = await queryParentWorkflowState(client);
2186
- return handler({ ...config, state });
2286
+ function createRunAgentActivity(client, handler, scope) {
2287
+ const name = `run${scope.charAt(0).toUpperCase()}${scope.slice(1)}`;
2288
+ return {
2289
+ [name]: async (config) => {
2290
+ const state = await queryParentWorkflowState(client);
2291
+ return handler({ ...config, state });
2292
+ }
2187
2293
  };
2188
2294
  }
2189
2295
  function withParentWorkflowState(client, handler) {
@@ -2240,6 +2346,9 @@ var SandboxManager = class {
2240
2346
  async pause(id, ttlSeconds) {
2241
2347
  await this.provider.pause(id, ttlSeconds);
2242
2348
  }
2349
+ async resume(id) {
2350
+ await this.provider.resume(id);
2351
+ }
2243
2352
  async snapshot(id) {
2244
2353
  return this.provider.snapshot(id);
2245
2354
  }
@@ -2283,6 +2392,9 @@ var SandboxManager = class {
2283
2392
  pauseSandbox: async (sandboxId, ttlSeconds) => {
2284
2393
  await this.pause(sandboxId, ttlSeconds);
2285
2394
  },
2395
+ resumeSandbox: async (sandboxId) => {
2396
+ await this.resume(sandboxId);
2397
+ },
2286
2398
  snapshotSandbox: async (sandboxId) => {
2287
2399
  return this.snapshot(sandboxId);
2288
2400
  },
@@ -2988,6 +3100,7 @@ exports.editHandler = editHandler;
2988
3100
  exports.editTool = editTool;
2989
3101
  exports.filesWithMimeType = filesWithMimeType;
2990
3102
  exports.formatVirtualFileTree = formatVirtualFileTree;
3103
+ exports.getActivityContext = getActivityContext;
2991
3104
  exports.getShortId = getShortId;
2992
3105
  exports.globHandler = globHandler;
2993
3106
  exports.globTool = globTool;
@@ -2997,6 +3110,7 @@ exports.hasFileWithMimeType = hasFileWithMimeType;
2997
3110
  exports.hasNoOtherToolCalls = hasNoOtherToolCalls;
2998
3111
  exports.isTerminalStatus = isTerminalStatus;
2999
3112
  exports.parseSkillFile = parseSkillFile;
3113
+ exports.proxyRunAgent = proxyRunAgent;
3000
3114
  exports.proxyVirtualFsOps = proxyVirtualFsOps;
3001
3115
  exports.queryParentWorkflowState = queryParentWorkflowState;
3002
3116
  exports.readFileHandler = readFileHandler;