zeitlich 0.2.21 → 0.2.23

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 (129) hide show
  1. package/README.md +303 -105
  2. package/dist/adapters/sandbox/daytona/index.cjs +7 -1
  3. package/dist/adapters/sandbox/daytona/index.cjs.map +1 -1
  4. package/dist/adapters/sandbox/daytona/index.d.cts +3 -1
  5. package/dist/adapters/sandbox/daytona/index.d.ts +3 -1
  6. package/dist/adapters/sandbox/daytona/index.js +7 -1
  7. package/dist/adapters/sandbox/daytona/index.js.map +1 -1
  8. package/dist/adapters/sandbox/daytona/workflow.cjs +33 -0
  9. package/dist/adapters/sandbox/daytona/workflow.cjs.map +1 -0
  10. package/dist/adapters/sandbox/daytona/workflow.d.cts +27 -0
  11. package/dist/adapters/sandbox/daytona/workflow.d.ts +27 -0
  12. package/dist/adapters/sandbox/daytona/workflow.js +31 -0
  13. package/dist/adapters/sandbox/daytona/workflow.js.map +1 -0
  14. package/dist/adapters/sandbox/inmemory/index.cjs +18 -1
  15. package/dist/adapters/sandbox/inmemory/index.cjs.map +1 -1
  16. package/dist/adapters/sandbox/inmemory/index.d.cts +4 -2
  17. package/dist/adapters/sandbox/inmemory/index.d.ts +4 -2
  18. package/dist/adapters/sandbox/inmemory/index.js +18 -1
  19. package/dist/adapters/sandbox/inmemory/index.js.map +1 -1
  20. package/dist/adapters/sandbox/inmemory/workflow.cjs +33 -0
  21. package/dist/adapters/sandbox/inmemory/workflow.cjs.map +1 -0
  22. package/dist/adapters/sandbox/inmemory/workflow.d.cts +25 -0
  23. package/dist/adapters/sandbox/inmemory/workflow.d.ts +25 -0
  24. package/dist/adapters/sandbox/inmemory/workflow.js +31 -0
  25. package/dist/adapters/sandbox/inmemory/workflow.js.map +1 -0
  26. package/dist/adapters/sandbox/virtual/index.cjs +36 -9
  27. package/dist/adapters/sandbox/virtual/index.cjs.map +1 -1
  28. package/dist/adapters/sandbox/virtual/index.d.cts +8 -5
  29. package/dist/adapters/sandbox/virtual/index.d.ts +8 -5
  30. package/dist/adapters/sandbox/virtual/index.js +36 -9
  31. package/dist/adapters/sandbox/virtual/index.js.map +1 -1
  32. package/dist/adapters/sandbox/virtual/workflow.cjs +33 -0
  33. package/dist/adapters/sandbox/virtual/workflow.cjs.map +1 -0
  34. package/dist/adapters/sandbox/virtual/workflow.d.cts +27 -0
  35. package/dist/adapters/sandbox/virtual/workflow.d.ts +27 -0
  36. package/dist/adapters/sandbox/virtual/workflow.js +31 -0
  37. package/dist/adapters/sandbox/virtual/workflow.js.map +1 -0
  38. package/dist/adapters/thread/google-genai/index.cjs +9 -1
  39. package/dist/adapters/thread/google-genai/index.cjs.map +1 -1
  40. package/dist/adapters/thread/google-genai/index.d.cts +31 -19
  41. package/dist/adapters/thread/google-genai/index.d.ts +31 -19
  42. package/dist/adapters/thread/google-genai/index.js +9 -1
  43. package/dist/adapters/thread/google-genai/index.js.map +1 -1
  44. package/dist/adapters/thread/google-genai/workflow.cjs +33 -0
  45. package/dist/adapters/thread/google-genai/workflow.cjs.map +1 -0
  46. package/dist/adapters/thread/google-genai/workflow.d.cts +32 -0
  47. package/dist/adapters/thread/google-genai/workflow.d.ts +32 -0
  48. package/dist/adapters/thread/google-genai/workflow.js +31 -0
  49. package/dist/adapters/thread/google-genai/workflow.js.map +1 -0
  50. package/dist/adapters/thread/langchain/index.cjs +9 -1
  51. package/dist/adapters/thread/langchain/index.cjs.map +1 -1
  52. package/dist/adapters/thread/langchain/index.d.cts +27 -16
  53. package/dist/adapters/thread/langchain/index.d.ts +27 -16
  54. package/dist/adapters/thread/langchain/index.js +9 -1
  55. package/dist/adapters/thread/langchain/index.js.map +1 -1
  56. package/dist/adapters/thread/langchain/workflow.cjs +33 -0
  57. package/dist/adapters/thread/langchain/workflow.cjs.map +1 -0
  58. package/dist/adapters/thread/langchain/workflow.d.cts +32 -0
  59. package/dist/adapters/thread/langchain/workflow.d.ts +32 -0
  60. package/dist/adapters/thread/langchain/workflow.js +31 -0
  61. package/dist/adapters/thread/langchain/workflow.js.map +1 -0
  62. package/dist/index.cjs +282 -90
  63. package/dist/index.cjs.map +1 -1
  64. package/dist/index.d.cts +38 -16
  65. package/dist/index.d.ts +38 -16
  66. package/dist/index.js +281 -87
  67. package/dist/index.js.map +1 -1
  68. package/dist/queries-DModcWRy.d.cts +44 -0
  69. package/dist/queries-byD0jr1Y.d.ts +44 -0
  70. package/dist/{types-BkAYmc96.d.ts → types-B50pBPEV.d.ts} +190 -38
  71. package/dist/{types-YbL7JpEA.d.cts → types-Bll19FZJ.d.cts} +7 -0
  72. package/dist/{types-YbL7JpEA.d.ts → types-Bll19FZJ.d.ts} +7 -0
  73. package/dist/{queries-6Avfh74U.d.ts → types-BuXdFhaZ.d.cts} +7 -48
  74. package/dist/{types-BMRzfELQ.d.cts → types-ChAMwU3q.d.cts} +17 -1
  75. package/dist/{types-BMRzfELQ.d.ts → types-ChAMwU3q.d.ts} +17 -1
  76. package/dist/{types-CES_30qx.d.cts → types-DQW8l7pY.d.cts} +190 -38
  77. package/dist/{queries-CHa2iv_I.d.cts → types-GZ76HZSj.d.ts} +7 -48
  78. package/dist/workflow.cjs +244 -86
  79. package/dist/workflow.cjs.map +1 -1
  80. package/dist/workflow.d.cts +54 -65
  81. package/dist/workflow.d.ts +54 -65
  82. package/dist/workflow.js +243 -83
  83. package/dist/workflow.js.map +1 -1
  84. package/package.json +54 -2
  85. package/src/adapters/sandbox/daytona/filesystem.ts +1 -1
  86. package/src/adapters/sandbox/daytona/index.ts +8 -0
  87. package/src/adapters/sandbox/daytona/proxy.ts +56 -0
  88. package/src/adapters/sandbox/e2b/filesystem.ts +147 -0
  89. package/src/adapters/sandbox/e2b/index.ts +164 -0
  90. package/src/adapters/sandbox/e2b/types.ts +23 -0
  91. package/src/adapters/sandbox/inmemory/index.ts +27 -3
  92. package/src/adapters/sandbox/inmemory/proxy.ts +53 -0
  93. package/src/adapters/sandbox/virtual/filesystem.ts +41 -17
  94. package/src/adapters/sandbox/virtual/provider.ts +9 -1
  95. package/src/adapters/sandbox/virtual/proxy.ts +53 -0
  96. package/src/adapters/sandbox/virtual/types.ts +9 -4
  97. package/src/adapters/thread/google-genai/activities.ts +51 -17
  98. package/src/adapters/thread/google-genai/index.ts +1 -0
  99. package/src/adapters/thread/google-genai/proxy.ts +61 -0
  100. package/src/adapters/thread/langchain/activities.ts +47 -14
  101. package/src/adapters/thread/langchain/index.ts +1 -0
  102. package/src/adapters/thread/langchain/proxy.ts +61 -0
  103. package/src/lib/lifecycle.ts +57 -0
  104. package/src/lib/sandbox/manager.ts +52 -6
  105. package/src/lib/sandbox/sandbox.test.ts +12 -11
  106. package/src/lib/sandbox/types.ts +31 -4
  107. package/src/lib/session/index.ts +4 -5
  108. package/src/lib/session/session-edge-cases.integration.test.ts +491 -66
  109. package/src/lib/session/session.integration.test.ts +92 -80
  110. package/src/lib/session/session.ts +108 -96
  111. package/src/lib/session/types.ts +87 -17
  112. package/src/lib/subagent/define.ts +6 -5
  113. package/src/lib/subagent/handler.ts +148 -16
  114. package/src/lib/subagent/index.ts +4 -0
  115. package/src/lib/subagent/register.ts +10 -3
  116. package/src/lib/subagent/signals.ts +8 -0
  117. package/src/lib/subagent/subagent.integration.test.ts +893 -128
  118. package/src/lib/subagent/tool.ts +2 -2
  119. package/src/lib/subagent/types.ts +84 -21
  120. package/src/lib/subagent/workflow.ts +83 -12
  121. package/src/lib/tool-router/router-edge-cases.integration.test.ts +4 -1
  122. package/src/lib/tool-router/router.integration.test.ts +141 -5
  123. package/src/lib/tool-router/router.ts +13 -3
  124. package/src/lib/tool-router/types.ts +7 -0
  125. package/src/lib/workflow.test.ts +104 -27
  126. package/src/lib/workflow.ts +37 -19
  127. package/src/tools/bash/bash.test.ts +16 -7
  128. package/src/workflow.ts +11 -14
  129. package/tsup.config.ts +6 -0
@@ -8,7 +8,7 @@ import {
8
8
  const cfg = { name: "test-workflow" };
9
9
 
10
10
  describe("defineWorkflow", () => {
11
- it("maps previousThreadId to threadId + continueThread", async () => {
11
+ it("maps thread fork into sessionInput", async () => {
12
12
  let capturedSession: WorkflowSessionInput | undefined;
13
13
 
14
14
  const workflow = defineWorkflow(cfg, async (_input, sessionInput) => {
@@ -16,15 +16,16 @@ describe("defineWorkflow", () => {
16
16
  return { ok: true };
17
17
  });
18
18
 
19
- await workflow({}, { previousThreadId: "prev-42" });
19
+ await workflow({}, { thread: { mode: "fork", threadId: "prev-42" } });
20
20
 
21
21
  expect(capturedSession).toEqual({
22
- threadId: "prev-42",
23
- continueThread: true,
22
+ agentName: "test-workflow",
23
+ sandboxShutdown: "destroy",
24
+ thread: { mode: "fork", threadId: "prev-42" },
24
25
  });
25
26
  });
26
27
 
27
- it("maps sandboxId", async () => {
28
+ it("maps sandbox inherit", async () => {
28
29
  let capturedSession: WorkflowSessionInput | undefined;
29
30
 
30
31
  const workflow = defineWorkflow(cfg, async (_input, sessionInput) => {
@@ -32,12 +33,16 @@ describe("defineWorkflow", () => {
32
33
  return { ok: true };
33
34
  });
34
35
 
35
- await workflow({}, { sandboxId: "sb-123" });
36
+ await workflow({}, { sandbox: { mode: "inherit", sandboxId: "sb-123" } });
36
37
 
37
- expect(capturedSession).toEqual({ sandboxId: "sb-123" });
38
+ expect(capturedSession).toEqual({
39
+ agentName: "test-workflow",
40
+ sandboxShutdown: "destroy",
41
+ sandbox: { mode: "inherit", sandboxId: "sb-123" },
42
+ });
38
43
  });
39
44
 
40
- it("maps both previousThreadId and sandboxId together", async () => {
45
+ it("maps thread fork and sandbox together", async () => {
41
46
  let capturedSession: WorkflowSessionInput | undefined;
42
47
 
43
48
  const workflow = defineWorkflow(cfg, async (_input, sessionInput) => {
@@ -45,16 +50,20 @@ describe("defineWorkflow", () => {
45
50
  return { ok: true };
46
51
  });
47
52
 
48
- await workflow({}, { previousThreadId: "prev-1", sandboxId: "sb-1" });
53
+ await workflow({}, {
54
+ thread: { mode: "fork", threadId: "prev-1" },
55
+ sandbox: { mode: "continue", sandboxId: "sb-1" },
56
+ });
49
57
 
50
58
  expect(capturedSession).toEqual({
51
- threadId: "prev-1",
52
- continueThread: true,
53
- sandboxId: "sb-1",
59
+ agentName: "test-workflow",
60
+ sandboxShutdown: "destroy",
61
+ thread: { mode: "fork", threadId: "prev-1" },
62
+ sandbox: { mode: "continue", sandboxId: "sb-1" },
54
63
  });
55
64
  });
56
65
 
57
- it("returns empty sessionInput when no previousThreadId or sandboxId", async () => {
66
+ it("defaults sandboxShutdown to destroy when no workflowInput", async () => {
58
67
  let capturedSession: WorkflowSessionInput | undefined;
59
68
 
60
69
  const workflow = defineWorkflow(cfg, async (_input, sessionInput) => {
@@ -64,18 +73,85 @@ describe("defineWorkflow", () => {
64
73
 
65
74
  await workflow({});
66
75
 
67
- expect(capturedSession).toEqual({});
76
+ expect(capturedSession).toEqual({
77
+ agentName: "test-workflow",
78
+ sandboxShutdown: "destroy",
79
+ });
80
+ });
81
+
82
+ it("maps sandbox fork from workflowInput", async () => {
83
+ let capturedSession: WorkflowSessionInput | undefined;
84
+
85
+ const workflow = defineWorkflow(cfg, async (_input, sessionInput) => {
86
+ capturedSession = sessionInput;
87
+ return { ok: true };
88
+ });
89
+
90
+ await workflow({}, { sandbox: { mode: "fork", sandboxId: "prev-sb-1" } });
91
+
92
+ expect(capturedSession).toEqual({
93
+ agentName: "test-workflow",
94
+ sandboxShutdown: "destroy",
95
+ sandbox: { mode: "fork", sandboxId: "prev-sb-1" },
96
+ });
97
+ });
98
+
99
+ it("uses sandboxShutdown from config", async () => {
100
+ let capturedSession: WorkflowSessionInput | undefined;
101
+
102
+ const workflow = defineWorkflow(
103
+ { name: "test-workflow", sandboxShutdown: "pause" },
104
+ async (_input, sessionInput) => {
105
+ capturedSession = sessionInput;
106
+ return { ok: true };
107
+ }
108
+ );
109
+
110
+ await workflow({});
111
+
112
+ expect(capturedSession).toEqual({
113
+ agentName: "test-workflow",
114
+ sandboxShutdown: "pause",
115
+ });
116
+ });
117
+
118
+ it("maps all lifecycle fields together", async () => {
119
+ let capturedSession: WorkflowSessionInput | undefined;
120
+
121
+ const workflow = defineWorkflow(
122
+ { name: "test-workflow", sandboxShutdown: "pause" },
123
+ async (_input, sessionInput) => {
124
+ capturedSession = sessionInput;
125
+ return { ok: true };
126
+ }
127
+ );
128
+
129
+ await workflow(
130
+ {},
131
+ {
132
+ thread: { mode: "fork", threadId: "prev-t" },
133
+ sandbox: { mode: "fork", sandboxId: "prev-sb-1" },
134
+ }
135
+ );
136
+
137
+ expect(capturedSession).toEqual({
138
+ agentName: "test-workflow",
139
+ sandboxShutdown: "pause",
140
+ thread: { mode: "fork", threadId: "prev-t" },
141
+ sandbox: { mode: "fork", sandboxId: "prev-sb-1" },
142
+ });
68
143
  });
69
144
 
70
145
  it("passes full input as first argument", async () => {
71
146
  let capturedInput: unknown;
72
147
 
73
- const workflow = defineWorkflow<{
74
- prompt: string;
75
- metadata: { key: string };
76
- previousThreadId?: string;
77
- sandboxId?: string;
78
- }, { ok: boolean }>(cfg, async (input, _sessionInput) => {
148
+ const workflow = defineWorkflow<
149
+ {
150
+ prompt: string;
151
+ metadata: { key: string };
152
+ },
153
+ { ok: boolean }
154
+ >(cfg, async (input, _sessionInput) => {
79
155
  capturedInput = input;
80
156
  return { ok: true };
81
157
  });
@@ -101,20 +177,21 @@ describe("defineWorkflow", () => {
101
177
  capturedInput = input;
102
178
  capturedSession = sessionInput;
103
179
  return { ok: true };
104
- },
180
+ }
105
181
  );
106
182
 
107
183
  const workflowInput: WorkflowInput = {
108
- previousThreadId: "prev",
109
- sandboxId: "sb",
184
+ thread: { mode: "fork", threadId: "prev" },
185
+ sandbox: { mode: "continue", sandboxId: "sb" },
110
186
  };
111
187
  await workflow({ prompt: "go" }, workflowInput);
112
188
 
113
189
  expect(capturedInput).toEqual({ prompt: "go" });
114
190
  expect(capturedSession).toEqual({
115
- threadId: "prev",
116
- continueThread: true,
117
- sandboxId: "sb",
191
+ agentName: "test-workflow",
192
+ sandboxShutdown: "destroy",
193
+ thread: { mode: "fork", threadId: "prev" },
194
+ sandbox: { mode: "continue", sandboxId: "sb" },
118
195
  });
119
196
  });
120
197
 
@@ -135,7 +212,7 @@ describe("defineWorkflow", () => {
135
212
  it("sets the function name from config", () => {
136
213
  const workflow = defineWorkflow(
137
214
  { name: "my-main-workflow" },
138
- async () => ({}),
215
+ async () => ({})
139
216
  );
140
217
 
141
218
  expect(workflow.name).toBe("my-main-workflow");
@@ -1,27 +1,43 @@
1
+ import type {
2
+ ThreadInit,
3
+ SandboxInit,
4
+ SandboxShutdown,
5
+ } from "./lifecycle";
6
+
1
7
  /**
2
8
  * Session config fields derived from a main workflow input, ready to spread
3
9
  * into `createSession`.
4
10
  */
5
11
  export interface WorkflowSessionInput {
6
- /** Thread ID to continue (set from `input.previousThreadId`) */
7
- threadId?: string;
8
- /** Whether to continue an existing thread (true when `previousThreadId` is present) */
9
- continueThread?: boolean;
10
- /** Optional sandbox ID forwarded to the session */
11
- sandboxId?: string;
12
+ /** Agent name spread directly into `createSession` */
13
+ agentName: string;
14
+ /** Thread initialization strategy */
15
+ thread?: ThreadInit;
16
+ /** Sandbox initialization strategy */
17
+ sandbox?: SandboxInit;
18
+ /** Sandbox shutdown policy (default: "destroy") */
19
+ sandboxShutdown?: SandboxShutdown;
12
20
  }
13
21
 
14
22
  /** Raw workflow input fields that map into `WorkflowSessionInput`. */
15
23
  export interface WorkflowInput {
16
- /** When set, continue this thread instead of starting fresh */
17
- previousThreadId?: string;
18
- /** Optional sandbox ID to reuse */
19
- sandboxId?: string;
24
+ /** Thread initialization strategy (default: `{ mode: "new" }`) */
25
+ thread?: ThreadInit;
26
+ /** Sandbox initialization strategy */
27
+ sandbox?: SandboxInit;
20
28
  }
21
29
 
22
30
  export interface WorkflowConfig {
23
31
  /** Workflow name — used as the Temporal workflow function name */
24
32
  name: string;
33
+ /**
34
+ * Sandbox shutdown policy applied when the main agent session exits.
35
+ *
36
+ * - `"destroy"` (default) — destroy the sandbox on exit.
37
+ * - `"pause"` — pause the sandbox so it can be resumed later.
38
+ * - `"keep"` — leave the sandbox running (no-op on exit).
39
+ */
40
+ sandboxShutdown?: SandboxShutdown;
25
41
  }
26
42
 
27
43
  /**
@@ -31,20 +47,22 @@ export interface WorkflowConfig {
31
47
  * The wrapper:
32
48
  * - Accepts a `config` with at least a `name` (used for Temporal workflow naming)
33
49
  * - Accepts a handler `fn` receiving `(input, sessionInput)`
34
- * - Derives `threadId` + `continueThread` from `workflowInput.previousThreadId`
35
- * - Derives `sandboxId` from `workflowInput.sandboxId`
50
+ * - Derives thread / sandbox init from `workflowInput`
51
+ * - Applies the configured `sandboxShutdown` policy
36
52
  */
37
53
  export function defineWorkflow<TInput, TResult>(
38
54
  config: WorkflowConfig,
39
- fn: (input: TInput, sessionInput: WorkflowSessionInput) => Promise<TResult>,
55
+ fn: (input: TInput, sessionInput: WorkflowSessionInput) => Promise<TResult>
40
56
  ): (input: TInput, workflowInput?: WorkflowInput) => Promise<TResult> {
41
- const workflow = async (input: TInput, workflowInput: WorkflowInput = {}) => {
57
+ const workflow = async (
58
+ input: TInput,
59
+ workflowInput: WorkflowInput = {}
60
+ ): Promise<TResult> => {
42
61
  const sessionInput: WorkflowSessionInput = {
43
- ...(workflowInput.previousThreadId && {
44
- threadId: workflowInput.previousThreadId,
45
- continueThread: true,
46
- }),
47
- ...(workflowInput.sandboxId && { sandboxId: workflowInput.sandboxId }),
62
+ agentName: config.name,
63
+ sandboxShutdown: config.sandboxShutdown ?? "destroy",
64
+ ...(workflowInput.thread && { thread: workflowInput.thread }),
65
+ ...(workflowInput.sandbox && { sandbox: workflowInput.sandbox }),
48
66
  };
49
67
  return fn(input, sessionInput);
50
68
  };
@@ -4,11 +4,17 @@ import { withSandbox } from "../../lib/tool-router/with-sandbox";
4
4
  import { SandboxManager } from "../../lib/sandbox/manager";
5
5
  import { InMemorySandboxProvider } from "../../adapters/sandbox/inmemory/index";
6
6
  import type { RouterContext } from "../../lib/tool-router/types";
7
+ import type { Sandbox, SandboxCreateOptions } from "../../lib/sandbox";
7
8
 
8
9
  describe("bash handler with sandbox", () => {
9
- let manager: SandboxManager;
10
+ let manager: SandboxManager<SandboxCreateOptions, Sandbox, "inMemory">;
10
11
  let sandboxId: string;
11
- let handler: ReturnType<typeof withSandbox<Parameters<typeof bashHandler>[0], Awaited<ReturnType<typeof bashHandler>>["data"]>>;
12
+ let handler: ReturnType<
13
+ typeof withSandbox<
14
+ Parameters<typeof bashHandler>[0],
15
+ Awaited<ReturnType<typeof bashHandler>>["data"]
16
+ >
17
+ >;
12
18
 
13
19
  beforeEach(async () => {
14
20
  manager = new SandboxManager(new InMemorySandboxProvider());
@@ -83,11 +89,14 @@ describe("bash handler with sandbox", () => {
83
89
  });
84
90
 
85
91
  it("returns error when no sandboxId in context", async () => {
86
- const { toolResponse, data } = await handler({ command: "echo hi" }, {
87
- threadId: "test-thread",
88
- toolCallId: "test-call",
89
- toolName: "Bash",
90
- });
92
+ const { toolResponse, data } = await handler(
93
+ { command: "echo hi" },
94
+ {
95
+ threadId: "test-thread",
96
+ toolCallId: "test-call",
97
+ toolName: "Bash",
98
+ }
99
+ );
91
100
  expect(toolResponse).toContain("No sandbox configured");
92
101
  expect(data).toBeNull();
93
102
  });
package/src/workflow.ts CHANGED
@@ -7,27 +7,21 @@
7
7
  * @example
8
8
  * ```typescript
9
9
  * // In your workflow file
10
- * import {
11
- * createSession,
12
- * createAgentStateManager,
13
- * askUserQuestionTool,
14
- * bashTool,
15
- * defineTool,
16
- * type SubagentWorkflow,
17
- * } from 'zeitlich/workflow';
10
+ * import { createSession, defineWorkflow, defineTool, bashTool } from 'zeitlich/workflow';
11
+ * import { proxyLangChainThreadOps } from 'zeitlich/adapters/thread/langchain/workflow';
12
+ * import { proxyVirtualSandboxOps } from 'zeitlich/adapters/sandbox/virtual/workflow';
18
13
  * ```
19
14
  */
20
15
 
21
16
  // Session
22
- export {
23
- createSession,
24
- proxyDefaultThreadOps,
25
- proxySandboxOps,
26
- } from "./lib/session";
27
- export type { ZeitlichSession, ThreadOps, SessionConfig } from "./lib/session";
17
+ export { createSession } from "./lib/session";
18
+ export type { ZeitlichSession, SessionResult, ThreadOps, PrefixedThreadOps, ScopedPrefix, SessionConfig } from "./lib/session";
28
19
  export { defineWorkflow } from "./lib/workflow";
29
20
  export type { WorkflowConfig, WorkflowInput, WorkflowSessionInput } from "./lib/workflow";
30
21
 
22
+ // Lifecycle types
23
+ export type { ThreadInit, SandboxInit, SandboxShutdown, SubagentSandboxShutdown } from "./lib/lifecycle";
24
+
31
25
  // Thread utilities
32
26
  export { getShortId } from "./lib/thread/id";
33
27
 
@@ -133,8 +127,10 @@ export type {
133
127
  export type {
134
128
  SubagentConfig,
135
129
  SubagentDefinition,
130
+ SubagentFnResult,
136
131
  SubagentHooks,
137
132
  SubagentHandlerResponse,
133
+ SubagentSandboxConfig,
138
134
  SubagentWorkflow,
139
135
  SubagentWorkflowInput,
140
136
  SubagentSessionInput,
@@ -147,6 +143,7 @@ export type {
147
143
  SandboxCreateResult,
148
144
  SandboxFileSystem,
149
145
  SandboxOps,
146
+ PrefixedSandboxOps,
150
147
  SandboxProvider,
151
148
  SandboxSnapshot,
152
149
  ExecOptions,
package/tsup.config.ts CHANGED
@@ -5,11 +5,17 @@ export default defineConfig({
5
5
  index: "src/index.ts",
6
6
  workflow: "src/workflow.ts",
7
7
  "adapters/thread/langchain/index": "src/adapters/thread/langchain/index.ts",
8
+ "adapters/thread/langchain/workflow": "src/adapters/thread/langchain/proxy.ts",
8
9
  "adapters/thread/google-genai/index":
9
10
  "src/adapters/thread/google-genai/index.ts",
11
+ "adapters/thread/google-genai/workflow":
12
+ "src/adapters/thread/google-genai/proxy.ts",
10
13
  "adapters/sandbox/inmemory/index": "src/adapters/sandbox/inmemory/index.ts",
14
+ "adapters/sandbox/inmemory/workflow": "src/adapters/sandbox/inmemory/proxy.ts",
11
15
  "adapters/sandbox/daytona/index": "src/adapters/sandbox/daytona/index.ts",
16
+ "adapters/sandbox/daytona/workflow": "src/adapters/sandbox/daytona/proxy.ts",
12
17
  "adapters/sandbox/virtual/index": "src/adapters/sandbox/virtual/index.ts",
18
+ "adapters/sandbox/virtual/workflow": "src/adapters/sandbox/virtual/proxy.ts",
13
19
  },
14
20
  format: ["esm", "cjs"],
15
21
  dts: true,