zeitlich 0.2.37 → 0.2.38
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/dist/{activities-Bb-nAjwQ.d.ts → activities-BKhMtKDd.d.ts} +4 -2
- package/dist/{activities-vkI4_3CC.d.cts → activities-CDcwkRZs.d.cts} +4 -2
- package/dist/adapters/sandbox/bedrock/index.cjs +3 -3
- package/dist/adapters/sandbox/bedrock/index.cjs.map +1 -1
- package/dist/adapters/sandbox/bedrock/index.d.cts +6 -6
- package/dist/adapters/sandbox/bedrock/index.d.ts +6 -6
- package/dist/adapters/sandbox/bedrock/index.js +3 -3
- package/dist/adapters/sandbox/bedrock/index.js.map +1 -1
- package/dist/adapters/sandbox/bedrock/workflow.d.cts +2 -2
- package/dist/adapters/sandbox/bedrock/workflow.d.ts +2 -2
- package/dist/adapters/sandbox/daytona/index.cjs +3 -3
- package/dist/adapters/sandbox/daytona/index.cjs.map +1 -1
- package/dist/adapters/sandbox/daytona/index.d.cts +4 -4
- package/dist/adapters/sandbox/daytona/index.d.ts +4 -4
- package/dist/adapters/sandbox/daytona/index.js +3 -3
- package/dist/adapters/sandbox/daytona/index.js.map +1 -1
- package/dist/adapters/sandbox/daytona/workflow.d.cts +1 -1
- package/dist/adapters/sandbox/daytona/workflow.d.ts +1 -1
- package/dist/adapters/sandbox/e2b/index.cjs +26 -14
- package/dist/adapters/sandbox/e2b/index.cjs.map +1 -1
- package/dist/adapters/sandbox/e2b/index.d.cts +24 -4
- package/dist/adapters/sandbox/e2b/index.d.ts +24 -4
- package/dist/adapters/sandbox/e2b/index.js +26 -14
- package/dist/adapters/sandbox/e2b/index.js.map +1 -1
- package/dist/adapters/sandbox/e2b/workflow.d.cts +1 -1
- package/dist/adapters/sandbox/e2b/workflow.d.ts +1 -1
- package/dist/adapters/sandbox/inmemory/index.cjs +3 -3
- package/dist/adapters/sandbox/inmemory/index.cjs.map +1 -1
- package/dist/adapters/sandbox/inmemory/index.d.cts +4 -4
- package/dist/adapters/sandbox/inmemory/index.d.ts +4 -4
- package/dist/adapters/sandbox/inmemory/index.js +3 -3
- package/dist/adapters/sandbox/inmemory/index.js.map +1 -1
- package/dist/adapters/sandbox/inmemory/workflow.d.cts +1 -1
- package/dist/adapters/sandbox/inmemory/workflow.d.ts +1 -1
- package/dist/adapters/thread/anthropic/index.cjs +23 -3
- package/dist/adapters/thread/anthropic/index.cjs.map +1 -1
- package/dist/adapters/thread/anthropic/index.d.cts +5 -5
- package/dist/adapters/thread/anthropic/index.d.ts +5 -5
- package/dist/adapters/thread/anthropic/index.js +23 -3
- package/dist/adapters/thread/anthropic/index.js.map +1 -1
- package/dist/adapters/thread/anthropic/workflow.cjs +2 -1
- package/dist/adapters/thread/anthropic/workflow.cjs.map +1 -1
- package/dist/adapters/thread/anthropic/workflow.d.cts +5 -5
- package/dist/adapters/thread/anthropic/workflow.d.ts +5 -5
- package/dist/adapters/thread/anthropic/workflow.js +2 -1
- package/dist/adapters/thread/anthropic/workflow.js.map +1 -1
- package/dist/adapters/thread/google-genai/index.cjs +27 -3
- package/dist/adapters/thread/google-genai/index.cjs.map +1 -1
- package/dist/adapters/thread/google-genai/index.d.cts +5 -5
- package/dist/adapters/thread/google-genai/index.d.ts +5 -5
- package/dist/adapters/thread/google-genai/index.js +27 -3
- package/dist/adapters/thread/google-genai/index.js.map +1 -1
- package/dist/adapters/thread/google-genai/workflow.cjs +2 -1
- package/dist/adapters/thread/google-genai/workflow.cjs.map +1 -1
- package/dist/adapters/thread/google-genai/workflow.d.cts +5 -5
- package/dist/adapters/thread/google-genai/workflow.d.ts +5 -5
- package/dist/adapters/thread/google-genai/workflow.js +2 -1
- package/dist/adapters/thread/google-genai/workflow.js.map +1 -1
- package/dist/adapters/thread/langchain/index.cjs +23 -3
- package/dist/adapters/thread/langchain/index.cjs.map +1 -1
- package/dist/adapters/thread/langchain/index.d.cts +5 -5
- package/dist/adapters/thread/langchain/index.d.ts +5 -5
- package/dist/adapters/thread/langchain/index.js +23 -3
- package/dist/adapters/thread/langchain/index.js.map +1 -1
- package/dist/adapters/thread/langchain/workflow.cjs +2 -1
- package/dist/adapters/thread/langchain/workflow.cjs.map +1 -1
- package/dist/adapters/thread/langchain/workflow.d.cts +5 -5
- package/dist/adapters/thread/langchain/workflow.d.ts +5 -5
- package/dist/adapters/thread/langchain/workflow.js +2 -1
- package/dist/adapters/thread/langchain/workflow.js.map +1 -1
- package/dist/index.cjs +120 -30
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +11 -11
- package/dist/index.d.ts +11 -11
- package/dist/index.js +121 -31
- package/dist/index.js.map +1 -1
- package/dist/{proxy-0smGKvx8.d.ts → proxy-CUlKSvZS.d.ts} +1 -1
- package/dist/{proxy-DEtowJyd.d.cts → proxy-D_3x7RN4.d.cts} +1 -1
- package/dist/{thread-manager-C-C4pI2z.d.ts → thread-manager-CVu7o2cs.d.ts} +4 -2
- package/dist/{thread-manager-D4vgzYrh.d.cts → thread-manager-HSwyh28L.d.cts} +4 -2
- package/dist/{thread-manager-3fszQih4.d.ts → thread-manager-c1gPopAG.d.ts} +4 -2
- package/dist/{thread-manager-CzYln2OC.d.cts → thread-manager-wGi-LqIP.d.cts} +4 -2
- package/dist/{types-B37hKoWA.d.ts → types-BH_IRryz.d.ts} +10 -1
- package/dist/{types-D08CXPh8.d.cts → types-BaOw4hKI.d.cts} +10 -1
- package/dist/{types-CPKDl-y_.d.ts → types-C06FwR96.d.cts} +59 -4
- package/dist/{types-CNuWnvy9.d.ts → types-DAsQ21Rt.d.ts} +1 -1
- package/dist/{types-BO7Yju20.d.cts → types-DNr31FzL.d.ts} +59 -4
- package/dist/{types-DWEUmYAJ.d.cts → types-lm8tMNJQ.d.cts} +1 -1
- package/dist/{types-tQL9njTu.d.cts → types-yx0LzPGn.d.cts} +21 -7
- package/dist/{types-tQL9njTu.d.ts → types-yx0LzPGn.d.ts} +21 -7
- package/dist/{workflow-CjXHbZZc.d.ts → workflow-CSCkpwAL.d.ts} +2 -2
- package/dist/{workflow-Do_lzJpT.d.cts → workflow-DuvMZ8Vm.d.cts} +2 -2
- package/dist/workflow.cjs +94 -18
- package/dist/workflow.cjs.map +1 -1
- package/dist/workflow.d.cts +3 -3
- package/dist/workflow.d.ts +3 -3
- package/dist/workflow.js +95 -19
- package/dist/workflow.js.map +1 -1
- package/package.json +2 -2
- package/src/adapters/sandbox/bedrock/index.ts +12 -3
- package/src/adapters/sandbox/daytona/index.ts +12 -3
- package/src/adapters/sandbox/e2b/index.ts +36 -14
- package/src/adapters/sandbox/e2b/types.ts +16 -0
- package/src/adapters/sandbox/inmemory/index.ts +12 -3
- package/src/adapters/thread/anthropic/activities.ts +9 -0
- package/src/adapters/thread/anthropic/model-invoker.ts +3 -1
- package/src/adapters/thread/anthropic/thread-manager.ts +3 -0
- package/src/adapters/thread/google-genai/activities.ts +13 -0
- package/src/adapters/thread/google-genai/model-invoker.ts +3 -1
- package/src/adapters/thread/google-genai/thread-manager.ts +3 -0
- package/src/adapters/thread/langchain/activities.ts +9 -0
- package/src/adapters/thread/langchain/model-invoker.ts +2 -1
- package/src/adapters/thread/langchain/thread-manager.ts +3 -0
- package/src/lib/lifecycle.ts +11 -4
- package/src/lib/model/types.ts +10 -0
- package/src/lib/sandbox/manager.ts +26 -18
- package/src/lib/sandbox/types.ts +27 -7
- package/src/lib/session/session-edge-cases.integration.test.ts +265 -1
- package/src/lib/session/session.integration.test.ts +22 -1
- package/src/lib/session/session.ts +61 -7
- package/src/lib/session/types.ts +12 -0
- package/src/lib/subagent/subagent.integration.test.ts +100 -104
- package/src/lib/thread/manager.ts +18 -0
- package/src/lib/thread/proxy.ts +1 -0
- package/src/lib/thread/types.ts +9 -0
- package/src/lib/tool-router/index.ts +2 -0
- package/src/lib/tool-router/router-edge-cases.integration.test.ts +92 -0
- package/src/lib/tool-router/router.integration.test.ts +12 -0
- package/src/lib/tool-router/router.ts +89 -16
- package/src/lib/tool-router/types.ts +34 -1
- package/src/workflow.ts +2 -0
package/dist/workflow.cjs
CHANGED
|
@@ -113,7 +113,7 @@ function createToolRouter(options) {
|
|
|
113
113
|
});
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
|
-
async function processToolCall(toolCall, turn, sandboxId) {
|
|
116
|
+
async function processToolCall(toolCall, turn, sandboxId, onRewindRequested) {
|
|
117
117
|
const startTime = Date.now();
|
|
118
118
|
const tool = toolMap.get(toolCall.name);
|
|
119
119
|
const preResult = await runPreHooks(toolCall, tool, turn);
|
|
@@ -128,7 +128,7 @@ function createToolRouter(options) {
|
|
|
128
128
|
reason: "Skipped by PreToolUse hook"
|
|
129
129
|
})
|
|
130
130
|
});
|
|
131
|
-
return
|
|
131
|
+
return { kind: "skipped" };
|
|
132
132
|
}
|
|
133
133
|
const effectiveArgs = preResult.args;
|
|
134
134
|
workflow.log.debug("tool call dispatched", {
|
|
@@ -140,6 +140,7 @@ function createToolRouter(options) {
|
|
|
140
140
|
let content;
|
|
141
141
|
let resultAppended = false;
|
|
142
142
|
let metadata;
|
|
143
|
+
let rewindRequested = false;
|
|
143
144
|
try {
|
|
144
145
|
if (tool) {
|
|
145
146
|
const routerContext = {
|
|
@@ -157,11 +158,15 @@ function createToolRouter(options) {
|
|
|
157
158
|
content = response.toolResponse;
|
|
158
159
|
resultAppended = response.resultAppended === true;
|
|
159
160
|
metadata = response.metadata;
|
|
161
|
+
rewindRequested = response.rewind === true;
|
|
160
162
|
} else {
|
|
161
163
|
result = { error: `Unknown tool: ${toolCall.name}` };
|
|
162
164
|
content = JSON.stringify(result, null, 2);
|
|
163
165
|
}
|
|
164
166
|
} catch (error) {
|
|
167
|
+
if (workflow.isCancellation(error)) {
|
|
168
|
+
throw error;
|
|
169
|
+
}
|
|
165
170
|
workflow.log.warn("tool call failed", {
|
|
166
171
|
toolName: toolCall.name,
|
|
167
172
|
toolCallId: toolCall.id,
|
|
@@ -179,6 +184,15 @@ function createToolRouter(options) {
|
|
|
179
184
|
result = recovery.result;
|
|
180
185
|
content = recovery.content;
|
|
181
186
|
}
|
|
187
|
+
if (rewindRequested) {
|
|
188
|
+
const signal = {
|
|
189
|
+
toolCallId: toolCall.id,
|
|
190
|
+
toolName: toolCall.name
|
|
191
|
+
};
|
|
192
|
+
workflow.log.info("tool requested rewind", { ...signal });
|
|
193
|
+
onRewindRequested?.(signal);
|
|
194
|
+
return { kind: "rewind", signal };
|
|
195
|
+
}
|
|
182
196
|
if (!resultAppended) {
|
|
183
197
|
const config = {
|
|
184
198
|
threadId: options.threadId,
|
|
@@ -215,7 +229,7 @@ function createToolRouter(options) {
|
|
|
215
229
|
turn,
|
|
216
230
|
durationMs
|
|
217
231
|
);
|
|
218
|
-
return toolResult;
|
|
232
|
+
return { kind: "result", value: toolResult };
|
|
219
233
|
}
|
|
220
234
|
return {
|
|
221
235
|
hasTools() {
|
|
@@ -250,27 +264,59 @@ function createToolRouter(options) {
|
|
|
250
264
|
}));
|
|
251
265
|
},
|
|
252
266
|
async processToolCalls(toolCalls, context) {
|
|
267
|
+
const attachRewind = (arr, rewind) => {
|
|
268
|
+
if (rewind) {
|
|
269
|
+
arr.rewind = rewind;
|
|
270
|
+
}
|
|
271
|
+
return arr;
|
|
272
|
+
};
|
|
253
273
|
if (toolCalls.length === 0) {
|
|
254
|
-
return [];
|
|
274
|
+
return attachRewind([], void 0);
|
|
255
275
|
}
|
|
256
276
|
const turn = context?.turn ?? 0;
|
|
257
277
|
const sandboxId = context?.sandboxId;
|
|
278
|
+
let rewindSignal;
|
|
258
279
|
if (options.parallel) {
|
|
259
|
-
const
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
280
|
+
const scope = new workflow.CancellationScope({ cancellable: true });
|
|
281
|
+
const onRewindRequested = (signal) => {
|
|
282
|
+
if (!rewindSignal) {
|
|
283
|
+
rewindSignal = signal;
|
|
284
|
+
scope.cancel();
|
|
285
|
+
}
|
|
286
|
+
};
|
|
287
|
+
const outcomes = await scope.run(
|
|
288
|
+
async () => Promise.allSettled(
|
|
289
|
+
toolCalls.map(
|
|
290
|
+
(tc) => processToolCall(tc, turn, sandboxId, onRewindRequested)
|
|
291
|
+
)
|
|
292
|
+
)
|
|
264
293
|
);
|
|
294
|
+
const results2 = [];
|
|
295
|
+
for (const outcome of outcomes) {
|
|
296
|
+
if (outcome.status === "rejected") {
|
|
297
|
+
if (workflow.isCancellation(outcome.reason)) {
|
|
298
|
+
continue;
|
|
299
|
+
}
|
|
300
|
+
throw outcome.reason;
|
|
301
|
+
}
|
|
302
|
+
if (outcome.value.kind === "result") {
|
|
303
|
+
results2.push(outcome.value.value);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
return attachRewind(results2, rewindSignal);
|
|
265
307
|
}
|
|
266
308
|
const results = [];
|
|
267
309
|
for (const toolCall of toolCalls) {
|
|
268
|
-
const
|
|
269
|
-
if (
|
|
270
|
-
|
|
310
|
+
const outcome = await processToolCall(toolCall, turn, sandboxId);
|
|
311
|
+
if (outcome.kind === "rewind") {
|
|
312
|
+
rewindSignal = outcome.signal;
|
|
313
|
+
break;
|
|
314
|
+
}
|
|
315
|
+
if (outcome.kind === "result") {
|
|
316
|
+
results.push(outcome.value);
|
|
271
317
|
}
|
|
272
318
|
}
|
|
273
|
-
return results;
|
|
319
|
+
return attachRewind(results, rewindSignal);
|
|
274
320
|
},
|
|
275
321
|
async processToolCallsByName(toolCalls, toolName, handler, context) {
|
|
276
322
|
const matchingCalls = toolCalls.filter((tc) => tc.name === toolName);
|
|
@@ -867,7 +913,8 @@ async function createSession({
|
|
|
867
913
|
initializeThread,
|
|
868
914
|
appendSystemMessage,
|
|
869
915
|
appendAgentMessage,
|
|
870
|
-
forkThread
|
|
916
|
+
forkThread,
|
|
917
|
+
truncateThread
|
|
871
918
|
} = threadOps;
|
|
872
919
|
const plugins = [];
|
|
873
920
|
let destroySubagentSandboxes;
|
|
@@ -961,8 +1008,10 @@ async function createSession({
|
|
|
961
1008
|
nonRetryable: true
|
|
962
1009
|
});
|
|
963
1010
|
}
|
|
1011
|
+
const forkInit = sandboxInit;
|
|
964
1012
|
sandboxId = await sandboxOps.forkSandbox(
|
|
965
|
-
|
|
1013
|
+
forkInit.sandboxId,
|
|
1014
|
+
forkInit.options
|
|
966
1015
|
);
|
|
967
1016
|
sandboxOwned = true;
|
|
968
1017
|
} else if (sandboxMode === "from-snapshot") {
|
|
@@ -972,8 +1021,11 @@ async function createSession({
|
|
|
972
1021
|
nonRetryable: true
|
|
973
1022
|
});
|
|
974
1023
|
}
|
|
975
|
-
const
|
|
976
|
-
sandboxId = await sandboxOps.restoreSandbox(
|
|
1024
|
+
const restoreInit = sandboxInit;
|
|
1025
|
+
sandboxId = await sandboxOps.restoreSandbox(
|
|
1026
|
+
restoreInit.snapshot,
|
|
1027
|
+
restoreInit.options
|
|
1028
|
+
);
|
|
977
1029
|
sandboxOwned = true;
|
|
978
1030
|
} else if (sandboxOps) {
|
|
979
1031
|
const skillFiles = skills ? collectSkillFiles(skills) : void 0;
|
|
@@ -1062,12 +1114,18 @@ async function createSession({
|
|
|
1062
1114
|
const currentTurn = stateManager.getTurns();
|
|
1063
1115
|
workflow.log.debug("turn started", { agentName, threadId, turn: currentTurn });
|
|
1064
1116
|
stateManager.setTools(toolRouter.getToolDefinitions());
|
|
1065
|
-
const {
|
|
1117
|
+
const {
|
|
1118
|
+
message,
|
|
1119
|
+
rawToolCalls,
|
|
1120
|
+
usage,
|
|
1121
|
+
threadLengthAtCall
|
|
1122
|
+
} = await runAgent({
|
|
1066
1123
|
threadId,
|
|
1067
1124
|
threadKey,
|
|
1068
1125
|
agentName,
|
|
1069
1126
|
metadata
|
|
1070
1127
|
});
|
|
1128
|
+
const preAssistantLength = threadLengthAtCall;
|
|
1071
1129
|
await appendAgentMessage(threadId, workflow.uuid4(), message, threadKey);
|
|
1072
1130
|
if (usage) {
|
|
1073
1131
|
stateManager.updateUsage(usage);
|
|
@@ -1113,6 +1171,24 @@ async function createSession({
|
|
|
1113
1171
|
stateManager.updateUsage(result.usage);
|
|
1114
1172
|
}
|
|
1115
1173
|
}
|
|
1174
|
+
const rewind = toolCallResults.rewind;
|
|
1175
|
+
if (rewind) {
|
|
1176
|
+
workflow.log.info("rewinding turn", {
|
|
1177
|
+
agentName,
|
|
1178
|
+
threadId,
|
|
1179
|
+
turn: currentTurn,
|
|
1180
|
+
toolCallId: rewind.toolCallId,
|
|
1181
|
+
toolName: rewind.toolName
|
|
1182
|
+
});
|
|
1183
|
+
if (preAssistantLength === void 0) {
|
|
1184
|
+
throw workflow.ApplicationFailure.create({
|
|
1185
|
+
message: "Rewind requested but runAgent did not report `threadLengthAtCall`; the adapter must populate it to support rewinds.",
|
|
1186
|
+
nonRetryable: true
|
|
1187
|
+
});
|
|
1188
|
+
}
|
|
1189
|
+
await truncateThread(threadId, preAssistantLength, threadKey);
|
|
1190
|
+
continue;
|
|
1191
|
+
}
|
|
1116
1192
|
if (stateManager.getStatus() === "WAITING_FOR_INPUT") {
|
|
1117
1193
|
const conditionMet = await workflow.condition(
|
|
1118
1194
|
() => stateManager.getStatus() === "RUNNING",
|