zeitlich 0.2.40 → 0.2.42
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.
- package/README.md +12 -1
- package/dist/{activities-CvUrG3YG.d.cts → activities-Coafq5zr.d.cts} +2 -2
- package/dist/{activities-CULxRzJ1.d.ts → activities-CrN-ghLo.d.ts} +2 -2
- package/dist/adapters/sandbox/daytona/index.cjs +4 -23
- package/dist/adapters/sandbox/daytona/index.cjs.map +1 -1
- package/dist/adapters/sandbox/daytona/index.d.cts +18 -86
- package/dist/adapters/sandbox/daytona/index.d.ts +18 -86
- package/dist/adapters/sandbox/daytona/index.js +4 -23
- package/dist/adapters/sandbox/daytona/index.js.map +1 -1
- package/dist/adapters/sandbox/daytona/workflow.cjs +1 -7
- package/dist/adapters/sandbox/daytona/workflow.cjs.map +1 -1
- package/dist/adapters/sandbox/daytona/workflow.d.cts +9 -2
- package/dist/adapters/sandbox/daytona/workflow.d.ts +9 -2
- package/dist/adapters/sandbox/daytona/workflow.js +1 -7
- package/dist/adapters/sandbox/daytona/workflow.js.map +1 -1
- package/dist/adapters/sandbox/e2b/index.cjs +21 -3
- package/dist/adapters/sandbox/e2b/index.cjs.map +1 -1
- package/dist/adapters/sandbox/e2b/index.d.cts +48 -7
- package/dist/adapters/sandbox/e2b/index.d.ts +48 -7
- package/dist/adapters/sandbox/e2b/index.js +22 -5
- package/dist/adapters/sandbox/e2b/index.js.map +1 -1
- package/dist/adapters/sandbox/e2b/workflow.cjs.map +1 -1
- package/dist/adapters/sandbox/e2b/workflow.d.cts +4 -2
- package/dist/adapters/sandbox/e2b/workflow.d.ts +4 -2
- package/dist/adapters/sandbox/e2b/workflow.js.map +1 -1
- package/dist/adapters/sandbox/inmemory/index.cjs +11 -0
- package/dist/adapters/sandbox/inmemory/index.cjs.map +1 -1
- package/dist/adapters/sandbox/inmemory/index.d.cts +11 -3
- package/dist/adapters/sandbox/inmemory/index.d.ts +11 -3
- package/dist/adapters/sandbox/inmemory/index.js +11 -1
- package/dist/adapters/sandbox/inmemory/index.js.map +1 -1
- package/dist/adapters/sandbox/inmemory/workflow.cjs.map +1 -1
- package/dist/adapters/sandbox/inmemory/workflow.d.cts +4 -2
- package/dist/adapters/sandbox/inmemory/workflow.d.ts +4 -2
- package/dist/adapters/sandbox/inmemory/workflow.js.map +1 -1
- package/dist/adapters/thread/anthropic/index.cjs.map +1 -1
- package/dist/adapters/thread/anthropic/index.d.cts +6 -6
- package/dist/adapters/thread/anthropic/index.d.ts +6 -6
- package/dist/adapters/thread/anthropic/index.js.map +1 -1
- package/dist/adapters/thread/anthropic/workflow.d.cts +6 -6
- package/dist/adapters/thread/anthropic/workflow.d.ts +6 -6
- package/dist/adapters/thread/google-genai/index.cjs.map +1 -1
- package/dist/adapters/thread/google-genai/index.d.cts +6 -6
- package/dist/adapters/thread/google-genai/index.d.ts +6 -6
- package/dist/adapters/thread/google-genai/index.js.map +1 -1
- package/dist/adapters/thread/google-genai/workflow.d.cts +6 -6
- package/dist/adapters/thread/google-genai/workflow.d.ts +6 -6
- package/dist/adapters/thread/langchain/index.cjs.map +1 -1
- package/dist/adapters/thread/langchain/index.d.cts +6 -6
- package/dist/adapters/thread/langchain/index.d.ts +6 -6
- package/dist/adapters/thread/langchain/index.js.map +1 -1
- package/dist/adapters/thread/langchain/workflow.d.cts +6 -6
- package/dist/adapters/thread/langchain/workflow.d.ts +6 -6
- package/dist/index.cjs +316 -119
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +93 -17
- package/dist/index.d.ts +93 -17
- package/dist/index.js +317 -120
- package/dist/index.js.map +1 -1
- package/dist/{proxy-5EbwzaY4.d.cts → proxy-Bf7uI-Hw.d.cts} +1 -1
- package/dist/{proxy-wZufFfBh.d.ts → proxy-COqA95FW.d.ts} +1 -1
- package/dist/{thread-manager-BqBAIsED.d.ts → thread-manager-BhkOyQ1I.d.ts} +2 -2
- package/dist/{thread-manager-BNiIt5r8.d.ts → thread-manager-Bi1XlbpJ.d.ts} +2 -2
- package/dist/{thread-manager-DF8WuCRs.d.cts → thread-manager-BsLO3Fgc.d.cts} +2 -2
- package/dist/{thread-manager-BoN5DOvG.d.cts → thread-manager-wRVVBFgj.d.cts} +2 -2
- package/dist/{types-C7OoY7h8.d.ts → types-BkX4HLzi.d.ts} +1 -1
- package/dist/{types-CuISs0Ub.d.cts → types-C66-BVBr.d.cts} +1 -1
- package/dist/types-CJ7tCdl6.d.cts +266 -0
- package/dist/types-CJ7tCdl6.d.ts +266 -0
- package/dist/{types-DeQH84C_.d.ts → types-CdALEF3z.d.cts} +342 -23
- package/dist/{types-Cn2r3ol3.d.cts → types-ChAy_jSP.d.ts} +342 -23
- package/dist/types-CjY93AWZ.d.cts +84 -0
- package/dist/types-gVa5XCWD.d.ts +84 -0
- package/dist/{workflow-DhplIN65.d.cts → workflow-BwT5EybR.d.ts} +7 -6
- package/dist/{workflow-C2MZZj5K.d.ts → workflow-DMmiaw6w.d.cts} +7 -6
- package/dist/workflow.cjs +138 -77
- package/dist/workflow.cjs.map +1 -1
- package/dist/workflow.d.cts +4 -4
- package/dist/workflow.d.ts +4 -4
- package/dist/workflow.js +139 -78
- package/dist/workflow.js.map +1 -1
- package/package.json +17 -33
- package/src/adapters/sandbox/daytona/index.ts +25 -48
- package/src/adapters/sandbox/daytona/proxy.ts +7 -8
- package/src/adapters/sandbox/e2b/README.md +81 -0
- package/src/adapters/sandbox/e2b/index.ts +53 -11
- package/src/adapters/sandbox/e2b/keep-alive.test.ts +115 -0
- package/src/adapters/sandbox/e2b/proxy.ts +3 -2
- package/src/adapters/sandbox/e2b/types.ts +34 -2
- package/src/adapters/sandbox/inmemory/index.ts +21 -1
- package/src/adapters/sandbox/inmemory/proxy.ts +7 -3
- package/src/index.ts +1 -1
- package/src/lib/activity.ts +5 -0
- package/src/lib/sandbox/capability-types.test.ts +859 -0
- package/src/lib/sandbox/index.ts +1 -0
- package/src/lib/sandbox/manager.ts +187 -31
- package/src/lib/sandbox/types.ts +189 -46
- package/src/lib/session/index.ts +1 -0
- package/src/lib/session/session.integration.test.ts +58 -0
- package/src/lib/session/session.ts +109 -50
- package/src/lib/session/types.ts +189 -8
- package/src/lib/subagent/handler.ts +66 -43
- package/src/lib/subagent/subagent.integration.test.ts +2 -0
- package/src/lib/subagent/types.ts +492 -16
- package/src/lib/subagent/workflow.ts +11 -1
- package/src/lib/tool-router/auto-append-sandbox.integration.test.ts +158 -0
- package/src/lib/tool-router/index.ts +1 -1
- package/src/lib/tool-router/with-sandbox.ts +45 -2
- package/src/lib/virtual-fs/filesystem.ts +41 -16
- package/src/lib/virtual-fs/types.ts +19 -0
- package/src/lib/virtual-fs/virtual-fs.test.ts +204 -1
- package/src/tools/read-file/handler.test.ts +83 -0
- package/src/workflow.ts +3 -0
- package/tsup.config.ts +0 -4
- package/dist/adapters/sandbox/bedrock/index.cjs +0 -457
- package/dist/adapters/sandbox/bedrock/index.cjs.map +0 -1
- package/dist/adapters/sandbox/bedrock/index.d.cts +0 -25
- package/dist/adapters/sandbox/bedrock/index.d.ts +0 -25
- package/dist/adapters/sandbox/bedrock/index.js +0 -454
- package/dist/adapters/sandbox/bedrock/index.js.map +0 -1
- package/dist/adapters/sandbox/bedrock/workflow.cjs +0 -36
- package/dist/adapters/sandbox/bedrock/workflow.cjs.map +0 -1
- package/dist/adapters/sandbox/bedrock/workflow.d.cts +0 -29
- package/dist/adapters/sandbox/bedrock/workflow.d.ts +0 -29
- package/dist/adapters/sandbox/bedrock/workflow.js +0 -34
- package/dist/adapters/sandbox/bedrock/workflow.js.map +0 -1
- package/dist/types-DAsQ21Rt.d.ts +0 -74
- package/dist/types-lm8tMNJQ.d.cts +0 -74
- package/dist/types-yx0LzPGn.d.cts +0 -173
- package/dist/types-yx0LzPGn.d.ts +0 -173
- package/src/adapters/sandbox/bedrock/filesystem.ts +0 -340
- package/src/adapters/sandbox/bedrock/index.ts +0 -274
- package/src/adapters/sandbox/bedrock/proxy.ts +0 -59
- package/src/adapters/sandbox/bedrock/types.ts +0 -24
|
@@ -6,16 +6,19 @@ import {
|
|
|
6
6
|
ApplicationFailure,
|
|
7
7
|
executeChild,
|
|
8
8
|
} from "@temporalio/workflow";
|
|
9
|
+
import type { Duration } from "@temporalio/common";
|
|
9
10
|
import { getShortId } from "../thread/id";
|
|
10
11
|
import type { ToolHandlerResponse, RouterContext } from "../tool-router";
|
|
11
12
|
import type { JsonValue } from "../state/types";
|
|
12
13
|
import type {
|
|
13
14
|
InferSubagentResult,
|
|
15
|
+
ResolvedSubagentSandboxConfig,
|
|
14
16
|
SubagentConfig,
|
|
15
17
|
SubagentFnResult,
|
|
16
18
|
SubagentSandboxConfig,
|
|
17
19
|
SubagentWorkflowInput,
|
|
18
20
|
} from "./types";
|
|
21
|
+
import { resolveSubagentLifecycle } from "./types";
|
|
19
22
|
import type { SubagentArgs } from "./tool";
|
|
20
23
|
import type { z } from "zod";
|
|
21
24
|
import type {
|
|
@@ -23,9 +26,33 @@ import type {
|
|
|
23
26
|
SandboxInit,
|
|
24
27
|
SubagentSandboxShutdown,
|
|
25
28
|
} from "../lifecycle";
|
|
26
|
-
import type {
|
|
29
|
+
import type {
|
|
30
|
+
SandboxCreateOptions,
|
|
31
|
+
SandboxOps,
|
|
32
|
+
SandboxSnapshot,
|
|
33
|
+
} from "../sandbox/types";
|
|
27
34
|
import { childSandboxReadySignal } from "./signals";
|
|
28
35
|
|
|
36
|
+
/**
|
|
37
|
+
* Methods the parent's subagent handler invokes on a subagent's `proxy`.
|
|
38
|
+
* Kept narrow so the handler's internal maps accept `SandboxOps<…, never>`
|
|
39
|
+
* (e.g. Daytona) and `SandboxOps<…, "snapshot">` (e.g. E2B for
|
|
40
|
+
* snapshot-driven continuations) alike.
|
|
41
|
+
*
|
|
42
|
+
* `destroySandbox` is base — always available.
|
|
43
|
+
* `deleteSandboxSnapshot` is only called for continuations that produce
|
|
44
|
+
* snapshots; it's stored separately and only populated when present on
|
|
45
|
+
* the cfg-specific proxy.
|
|
46
|
+
*/
|
|
47
|
+
type ParentDestroyOps = Pick<
|
|
48
|
+
SandboxOps<SandboxCreateOptions, unknown, never>,
|
|
49
|
+
"destroySandbox"
|
|
50
|
+
>;
|
|
51
|
+
type ParentDeleteSnapshotOps = Pick<
|
|
52
|
+
SandboxOps<SandboxCreateOptions, unknown, "snapshot">,
|
|
53
|
+
"deleteSandboxSnapshot"
|
|
54
|
+
>;
|
|
55
|
+
|
|
29
56
|
/**
|
|
30
57
|
* Default `workflowRunTimeout` applied to every subagent child workflow
|
|
31
58
|
* unless overridden via `SubagentConfig.workflowOptions.workflowRunTimeout`.
|
|
@@ -40,19 +67,11 @@ import { childSandboxReadySignal } from "./signals";
|
|
|
40
67
|
* still catching hangs; agents that legitimately need longer should set an
|
|
41
68
|
* explicit `workflowOptions.workflowRunTimeout`.
|
|
42
69
|
*/
|
|
43
|
-
export const DEFAULT_SUBAGENT_WORKFLOW_RUN_TIMEOUT = "1h";
|
|
44
|
-
|
|
45
|
-
/** Normalized sandbox config after resolving the union. */
|
|
46
|
-
interface ResolvedSandboxConfig {
|
|
47
|
-
source: "none" | "inherit" | "own";
|
|
48
|
-
init: "per-call" | "once";
|
|
49
|
-
continuation: "continue" | "fork" | "snapshot";
|
|
50
|
-
shutdown?: SubagentSandboxShutdown;
|
|
51
|
-
}
|
|
70
|
+
export const DEFAULT_SUBAGENT_WORKFLOW_RUN_TIMEOUT: Duration = "1h";
|
|
52
71
|
|
|
53
72
|
function resolveSandboxConfig(
|
|
54
73
|
config?: SubagentSandboxConfig
|
|
55
|
-
):
|
|
74
|
+
): ResolvedSubagentSandboxConfig {
|
|
56
75
|
if (!config || config === "none") {
|
|
57
76
|
return { source: "none", init: "per-call", continuation: "fork" };
|
|
58
77
|
}
|
|
@@ -96,11 +115,31 @@ export function createSubagentHandler<
|
|
|
96
115
|
} {
|
|
97
116
|
const { taskQueue: parentTaskQueue } = workflowInfo();
|
|
98
117
|
|
|
99
|
-
/**
|
|
100
|
-
|
|
118
|
+
/**
|
|
119
|
+
* Sandbox ops proxy per subagent, built eagerly from `sandbox.proxy`
|
|
120
|
+
* factories.
|
|
121
|
+
*
|
|
122
|
+
* Split into two maps so each accepts only the cap-narrowed slice the
|
|
123
|
+
* parent actually consumes. `destroyOps` accepts every adapter (base
|
|
124
|
+
* `destroySandbox` is always present); `deleteSnapshotOps` is only
|
|
125
|
+
* populated for `continuation: "snapshot"` configs, and the
|
|
126
|
+
* `SubagentSandboxConfig` type guarantees the proxy carries
|
|
127
|
+
* `deleteSandboxSnapshot` when that continuation is selected.
|
|
128
|
+
*/
|
|
129
|
+
const agentDestroyOps = new Map<string, ParentDestroyOps>();
|
|
130
|
+
const agentDeleteSnapshotOps = new Map<string, ParentDeleteSnapshotOps>();
|
|
101
131
|
for (const cfg of subagents) {
|
|
102
|
-
|
|
103
|
-
|
|
132
|
+
const cfgSandbox = cfg.sandbox;
|
|
133
|
+
if (!cfgSandbox || cfgSandbox === "none") continue;
|
|
134
|
+
if (cfgSandbox.continuation === "snapshot") {
|
|
135
|
+
// Pull the proxy here so the per-branch narrowing keeps
|
|
136
|
+
// `deleteSandboxSnapshot` in the inferred return type.
|
|
137
|
+
const proxy = cfgSandbox.proxy(cfg.agentName);
|
|
138
|
+
agentDestroyOps.set(cfg.agentName, proxy);
|
|
139
|
+
agentDeleteSnapshotOps.set(cfg.agentName, proxy);
|
|
140
|
+
} else {
|
|
141
|
+
const proxy = cfgSandbox.proxy(cfg.agentName);
|
|
142
|
+
agentDestroyOps.set(cfg.agentName, proxy);
|
|
104
143
|
}
|
|
105
144
|
}
|
|
106
145
|
|
|
@@ -182,7 +221,7 @@ export function createSubagentHandler<
|
|
|
182
221
|
|
|
183
222
|
if (
|
|
184
223
|
sandboxCfg.source !== "none" &&
|
|
185
|
-
!
|
|
224
|
+
!agentDestroyOps.has(config.agentName)
|
|
186
225
|
) {
|
|
187
226
|
throw ApplicationFailure.create({
|
|
188
227
|
message: `Subagent "${config.agentName}" uses a sandbox but no \`sandbox.proxy\` is configured on its SubagentConfig`,
|
|
@@ -272,7 +311,6 @@ export function createSubagentHandler<
|
|
|
272
311
|
if (baseSnap) {
|
|
273
312
|
sandbox = { mode: "from-snapshot", snapshot: baseSnap };
|
|
274
313
|
}
|
|
275
|
-
sandboxShutdownOverride = "snapshot";
|
|
276
314
|
} else if (sandboxCfg.source === "own") {
|
|
277
315
|
const isLazy = sandboxCfg.init === "once";
|
|
278
316
|
|
|
@@ -318,31 +356,16 @@ export function createSubagentHandler<
|
|
|
318
356
|
sandboxId: baseSandboxId,
|
|
319
357
|
};
|
|
320
358
|
}
|
|
359
|
+
}
|
|
321
360
|
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
const alreadySurvives =
|
|
331
|
-
userShutdown === "pause-until-parent-close" ||
|
|
332
|
-
userShutdown === "keep-until-parent-close" ||
|
|
333
|
-
userShutdown === "pause" ||
|
|
334
|
-
userShutdown === "keep";
|
|
335
|
-
|
|
336
|
-
const mustSurvive =
|
|
337
|
-
isLazyCreator ||
|
|
338
|
-
sandboxCfg.continuation === "continue" ||
|
|
339
|
-
(isLazy && sandboxCfg.continuation === "fork");
|
|
340
|
-
|
|
341
|
-
if (mustSurvive && !alreadySurvives) {
|
|
342
|
-
sandboxShutdownOverride = isLazyCreator
|
|
343
|
-
? "pause-until-parent-close"
|
|
344
|
-
: "pause";
|
|
345
|
-
}
|
|
361
|
+
// Resolve the lifecycle decision (auto-inject pause/snapshot, etc.)
|
|
362
|
+
// through the SSOT — same table the type-level `SubagentRequiredCaps`
|
|
363
|
+
// reads. Adding a new branch here means changing both. The matrix
|
|
364
|
+
// in `src/lib/sandbox/capability-types.test.ts` enforces the
|
|
365
|
+
// type-level / runtime agreement.
|
|
366
|
+
{
|
|
367
|
+
const lifecycle = resolveSubagentLifecycle(sandboxCfg, isLazyCreator);
|
|
368
|
+
sandboxShutdownOverride = lifecycle.shutdownOverride;
|
|
346
369
|
}
|
|
347
370
|
|
|
348
371
|
const workflowInput: SubagentWorkflowInput = {
|
|
@@ -555,7 +578,7 @@ export function createSubagentHandler<
|
|
|
555
578
|
pendingDestroys.clear();
|
|
556
579
|
await Promise.all(
|
|
557
580
|
entries.map(async ({ agentName, sandboxId }) => {
|
|
558
|
-
const ops =
|
|
581
|
+
const ops = agentDestroyOps.get(agentName);
|
|
559
582
|
if (!ops) {
|
|
560
583
|
log.warn(
|
|
561
584
|
"Skipping sandbox destroy — no sandbox.proxy registered for agent",
|
|
@@ -587,7 +610,7 @@ export function createSubagentHandler<
|
|
|
587
610
|
|
|
588
611
|
await Promise.all(
|
|
589
612
|
tagged.map(async ({ agentName, snapshot }) => {
|
|
590
|
-
const ops =
|
|
613
|
+
const ops = agentDeleteSnapshotOps.get(agentName);
|
|
591
614
|
if (!ops) {
|
|
592
615
|
log.warn(
|
|
593
616
|
"Skipping snapshot delete — no sandbox.proxy registered for agent",
|
|
@@ -2602,6 +2602,7 @@ describe("defineSubagentWorkflow", () => {
|
|
|
2602
2602
|
sandboxId: "sb-1",
|
|
2603
2603
|
snapshot,
|
|
2604
2604
|
threadId: "t",
|
|
2605
|
+
usage: { totalInputTokens: 0, totalOutputTokens: 0, totalCachedWriteTokens: 0, totalCachedReadTokens: 0, totalReasonTokens: 0, turns: 0 },
|
|
2605
2606
|
});
|
|
2606
2607
|
return { toolResponse: "ok", data: null, threadId: "t" };
|
|
2607
2608
|
}
|
|
@@ -2625,6 +2626,7 @@ describe("defineSubagentWorkflow", () => {
|
|
|
2625
2626
|
createdAt: new Date().toISOString(),
|
|
2626
2627
|
},
|
|
2627
2628
|
threadId: "t",
|
|
2629
|
+
usage: { totalInputTokens: 0, totalOutputTokens: 0, totalCachedWriteTokens: 0, totalCachedReadTokens: 0, totalReasonTokens: 0, turns: 0 },
|
|
2628
2630
|
});
|
|
2629
2631
|
return {
|
|
2630
2632
|
toolResponse: "ok",
|