zeitlich 0.2.7 → 0.2.9
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/index.cjs +93 -42
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +92 -41
- package/dist/index.js.map +1 -1
- package/dist/{workflow-CyYHDbrr.d.cts → workflow-C2ShwjC7.d.cts} +50 -18
- package/dist/{workflow-CyYHDbrr.d.ts → workflow-C2ShwjC7.d.ts} +50 -18
- package/dist/workflow.cjs +88 -39
- package/dist/workflow.cjs.map +1 -1
- package/dist/workflow.d.cts +1 -1
- package/dist/workflow.d.ts +1 -1
- package/dist/workflow.js +87 -38
- package/dist/workflow.js.map +1 -1
- package/package.json +1 -1
- package/src/lib/model-invoker.ts +7 -3
- package/src/lib/session.ts +44 -10
- package/src/lib/state-manager.ts +56 -0
- package/src/lib/tool-router.ts +33 -21
- package/src/lib/types.ts +18 -8
- package/src/tools/ask-user-question/handler.ts +3 -3
- package/src/tools/read-file/tool.ts +2 -2
- package/src/tools/subagent/handler.ts +2 -1
- package/src/tools/subagent/tool.ts +4 -4
- package/src/tools/write-file/tool.ts +4 -5
- package/src/workflow.ts +2 -2
package/dist/workflow.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { b as AGENT_HANDLER_NAMES, a as ActivityToolHandler, c as AgentConfig, d as AgentFile, A as AgentResponse, e as AgentState, f as AgentStateManager, g as AgentStatus, h as AppendToolResultFn, i as AskUserQuestionArgs, j as BaseAgentState, B as BashArgs, F as FileEditArgs, l as FileReadArgs, m as FileWriteArgs, G as GlobArgs, n as GrepArgs, I as InferToolResults, J as JsonPrimitive, o as JsonSerializable, p as JsonValue, P as ParsedToolCall, q as ParsedToolCallUnion, r as PostToolUseFailureHook, s as PostToolUseFailureHookContext, t as PostToolUseFailureHookResult, u as PostToolUseHook, v as PostToolUseHookContext, w as PreToolUseHook, x as PreToolUseHookContext, y as PreToolUseHookResult, z as ProcessToolCallsContext, R as RawToolCall, C as RunAgentActivity, D as RunAgentConfig, S as SessionEndHook, E as SessionEndHookContext, H as SessionExitReason, K as SessionLifecycleHooks, L as SessionStartHook, M as SessionStartHookContext, N as SubagentArgs, O as SubagentConfig, Q as SubagentHooks, T as SubagentInput, U as TaskCreateArgs, V as TaskGetArgs, W as TaskListArgs, X as TaskStatus, Y as TaskUpdateArgs, $ as ThreadOps, a0 as ToolArgs, a1 as ToolCallResult, a2 as ToolCallResultUnion, a3 as ToolDefinition, a4 as ToolHandler, a5 as ToolHandlerContext, a6 as ToolHandlerResponse, a7 as ToolHooks, a8 as ToolMap, a9 as ToolMessageContent, aa as ToolNames, ab as ToolResult, ac as ToolResultConfig, ad as ToolRouter, ae as ToolWithHandler, af as WorkflowTask, ag as ZeitlichSession, ah as ZeitlichSharedActivities, ai as askUserQuestionTool, aj as bashTool, ak as createAgentStateManager, al as createAskUserQuestionHandler, am as createBashToolDescription, an as createSession, ap as createSubagentTool, aq as createTaskCreateHandler, ar as createTaskGetHandler, as as createTaskListHandler, at as createTaskUpdateHandler, av as createToolRouter, aw as defineSubagent, ax as defineTool, ay as editTool, az as globTool, aA as grepTool, aB as hasNoOtherToolCalls, aC as isTerminalStatus, aD as proxyDefaultThreadOps, aE as
|
|
1
|
+
export { b as AGENT_HANDLER_NAMES, a as ActivityToolHandler, c as AgentConfig, d as AgentFile, A as AgentResponse, e as AgentState, f as AgentStateManager, g as AgentStatus, h as AppendToolResultFn, i as AskUserQuestionArgs, j as BaseAgentState, B as BashArgs, F as FileEditArgs, l as FileReadArgs, m as FileWriteArgs, G as GlobArgs, n as GrepArgs, I as InferToolResults, J as JsonPrimitive, o as JsonSerializable, p as JsonValue, P as ParsedToolCall, q as ParsedToolCallUnion, r as PostToolUseFailureHook, s as PostToolUseFailureHookContext, t as PostToolUseFailureHookResult, u as PostToolUseHook, v as PostToolUseHookContext, w as PreToolUseHook, x as PreToolUseHookContext, y as PreToolUseHookResult, z as ProcessToolCallsContext, R as RawToolCall, C as RunAgentActivity, D as RunAgentConfig, S as SessionEndHook, E as SessionEndHookContext, H as SessionExitReason, K as SessionLifecycleHooks, L as SessionStartHook, M as SessionStartHookContext, N as SubagentArgs, O as SubagentConfig, Q as SubagentHooks, T as SubagentInput, U as TaskCreateArgs, V as TaskGetArgs, W as TaskListArgs, X as TaskStatus, Y as TaskUpdateArgs, $ as ThreadOps, a0 as ToolArgs, a1 as ToolCallResult, a2 as ToolCallResultUnion, a3 as ToolDefinition, a4 as ToolHandler, a5 as ToolHandlerContext, a6 as ToolHandlerResponse, a7 as ToolHooks, a8 as ToolMap, a9 as ToolMessageContent, aa as ToolNames, ab as ToolResult, ac as ToolResultConfig, ad as ToolRouter, ae as ToolWithHandler, af as WorkflowTask, ag as ZeitlichSession, ah as ZeitlichSharedActivities, ai as askUserQuestionTool, aj as bashTool, ak as createAgentStateManager, al as createAskUserQuestionHandler, am as createBashToolDescription, an as createSession, ap as createSubagentTool, aq as createTaskCreateHandler, ar as createTaskGetHandler, as as createTaskListHandler, at as createTaskUpdateHandler, av as createToolRouter, aw as defineSubagent, ax as defineTool, ay as editTool, az as globTool, aA as grepTool, aB as hasNoOtherToolCalls, aC as isTerminalStatus, aD as proxyDefaultThreadOps, aE as readFileTool, aF as taskCreateTool, aG as taskGetTool, aH as taskListTool, aI as taskUpdateTool, aK as writeFileTool } from './workflow-C2ShwjC7.js';
|
|
2
2
|
import '@temporalio/workflow';
|
|
3
3
|
import 'ioredis';
|
|
4
4
|
import '@langchain/core/messages';
|
package/dist/workflow.js
CHANGED
|
@@ -2,18 +2,18 @@ import { setHandler, defineUpdate, condition, proxyActivities, defineQuery, uuid
|
|
|
2
2
|
import z13, { z } from 'zod';
|
|
3
3
|
|
|
4
4
|
// src/lib/session.ts
|
|
5
|
-
var
|
|
5
|
+
var SUBAGENT_TOOL_NAME = "Subagent";
|
|
6
6
|
function buildSubagentDescription(subagents) {
|
|
7
7
|
const subagentList = subagents.map((s) => `- **${s.agentName}**: ${s.description}`).join("\n");
|
|
8
8
|
return `Launch a new agent to handle complex tasks autonomously.
|
|
9
9
|
|
|
10
|
-
The ${
|
|
10
|
+
The ${SUBAGENT_TOOL_NAME} tool launches specialized agents (subprocesses) that autonomously handle complex tasks. Each agent type has specific capabilities and tools available to it.
|
|
11
11
|
|
|
12
12
|
Available agent types:
|
|
13
13
|
|
|
14
14
|
${subagentList}
|
|
15
15
|
|
|
16
|
-
When using the ${
|
|
16
|
+
When using the ${SUBAGENT_TOOL_NAME} tool, you must specify a subagent parameter to select which agent type to use.
|
|
17
17
|
|
|
18
18
|
Usage notes:
|
|
19
19
|
|
|
@@ -32,7 +32,7 @@ function createSubagentTool(subagents) {
|
|
|
32
32
|
}
|
|
33
33
|
const names = subagents.map((s) => s.agentName);
|
|
34
34
|
return {
|
|
35
|
-
name:
|
|
35
|
+
name: SUBAGENT_TOOL_NAME,
|
|
36
36
|
description: buildSubagentDescription(subagents),
|
|
37
37
|
schema: z13.object({
|
|
38
38
|
subagent: z13.enum(names).describe("The type of subagent to launch"),
|
|
@@ -60,11 +60,12 @@ function createSubagentHandler(subagents) {
|
|
|
60
60
|
args: [input],
|
|
61
61
|
taskQueue: config.taskQueue ?? parentTaskQueue
|
|
62
62
|
};
|
|
63
|
-
const { toolResponse, data } = typeof config.workflow === "string" ? await executeChild(config.workflow, childOpts) : await executeChild(config.workflow, childOpts);
|
|
63
|
+
const { toolResponse, data, usage } = typeof config.workflow === "string" ? await executeChild(config.workflow, childOpts) : await executeChild(config.workflow, childOpts);
|
|
64
64
|
const validated = config.resultSchema ? config.resultSchema.parse(data) : null;
|
|
65
65
|
return {
|
|
66
66
|
toolResponse,
|
|
67
|
-
data: validated
|
|
67
|
+
data: validated,
|
|
68
|
+
...usage && { usage }
|
|
68
69
|
};
|
|
69
70
|
};
|
|
70
71
|
}
|
|
@@ -76,20 +77,17 @@ function createToolRouter(options) {
|
|
|
76
77
|
for (const [_key, tool] of Object.entries(options.tools)) {
|
|
77
78
|
toolMap.set(tool.name, tool);
|
|
78
79
|
}
|
|
79
|
-
const isEnabled = (tool) => tool.enabled
|
|
80
|
+
const isEnabled = (tool) => tool.enabled?.() ?? true;
|
|
80
81
|
if (options.subagents) {
|
|
81
|
-
|
|
82
|
-
(s) => s.enabled !== false
|
|
83
|
-
);
|
|
84
|
-
if (enabledSubagents.length > 0) {
|
|
82
|
+
if (options.subagents.length > 0) {
|
|
85
83
|
const subagentHooksMap = /* @__PURE__ */ new Map();
|
|
86
|
-
for (const s of
|
|
84
|
+
for (const s of options.subagents) {
|
|
87
85
|
if (s.hooks) subagentHooksMap.set(s.agentName, s.hooks);
|
|
88
86
|
}
|
|
89
87
|
const resolveSubagentName = (args) => args.subagent;
|
|
90
|
-
toolMap.set(
|
|
91
|
-
...createSubagentTool(
|
|
92
|
-
handler: createSubagentHandler(
|
|
88
|
+
toolMap.set(SUBAGENT_TOOL_NAME, {
|
|
89
|
+
...createSubagentTool(options.subagents),
|
|
90
|
+
handler: createSubagentHandler(options.subagents),
|
|
93
91
|
...subagentHooksMap.size > 0 && {
|
|
94
92
|
hooks: {
|
|
95
93
|
onPreToolUse: async (ctx) => {
|
|
@@ -280,13 +278,19 @@ function createToolRouter(options) {
|
|
|
280
278
|
return Array.from(toolMap.entries()).filter(([, tool]) => isEnabled(tool)).map(([name]) => name);
|
|
281
279
|
},
|
|
282
280
|
getToolDefinitions() {
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
281
|
+
const activeSubagents = options.subagents?.filter((subagent) => isEnabled(subagent)) ?? [];
|
|
282
|
+
return [
|
|
283
|
+
...Array.from(toolMap).filter(
|
|
284
|
+
([, tool]) => isEnabled(tool) && tool.name !== SUBAGENT_TOOL_NAME
|
|
285
|
+
).map(([name, tool]) => ({
|
|
286
|
+
name,
|
|
287
|
+
description: tool.description,
|
|
288
|
+
schema: tool.schema,
|
|
289
|
+
strict: tool.strict,
|
|
290
|
+
max_uses: tool.max_uses
|
|
291
|
+
})),
|
|
292
|
+
...activeSubagents.length > 0 ? [createSubagentTool(activeSubagents)] : []
|
|
293
|
+
];
|
|
290
294
|
},
|
|
291
295
|
// --- Methods for processing tool calls ---
|
|
292
296
|
async processToolCalls(toolCalls, context) {
|
|
@@ -380,6 +384,7 @@ function hasNoOtherToolCalls(toolCalls, excludeName) {
|
|
|
380
384
|
var createSession = async ({
|
|
381
385
|
threadId,
|
|
382
386
|
agentName,
|
|
387
|
+
description,
|
|
383
388
|
maxTurns = 50,
|
|
384
389
|
metadata = {},
|
|
385
390
|
runAgent,
|
|
@@ -419,7 +424,9 @@ var createSession = async ({
|
|
|
419
424
|
}
|
|
420
425
|
};
|
|
421
426
|
return {
|
|
422
|
-
runSession: async ({
|
|
427
|
+
runSession: async ({
|
|
428
|
+
stateManager
|
|
429
|
+
}) => {
|
|
423
430
|
setHandler(
|
|
424
431
|
defineUpdate(`add${agentName}Message`),
|
|
425
432
|
async (message) => {
|
|
@@ -446,7 +453,6 @@ var createSession = async ({
|
|
|
446
453
|
metadata
|
|
447
454
|
});
|
|
448
455
|
}
|
|
449
|
-
stateManager.setTools(toolRouter.getToolDefinitions());
|
|
450
456
|
await initializeThread(threadId);
|
|
451
457
|
if (appendSystemPrompt && systemPrompt && systemPrompt.trim() !== "") {
|
|
452
458
|
await appendSystemMessage(threadId, systemPrompt);
|
|
@@ -457,15 +463,25 @@ var createSession = async ({
|
|
|
457
463
|
while (stateManager.isRunning() && !stateManager.isTerminal() && stateManager.getTurns() < maxTurns) {
|
|
458
464
|
stateManager.incrementTurns();
|
|
459
465
|
const currentTurn = stateManager.getTurns();
|
|
460
|
-
|
|
466
|
+
stateManager.setTools(toolRouter.getToolDefinitions());
|
|
467
|
+
const { message, rawToolCalls, usage } = await runAgent({
|
|
461
468
|
threadId,
|
|
462
469
|
agentName,
|
|
463
|
-
metadata
|
|
470
|
+
metadata,
|
|
471
|
+
systemPrompt,
|
|
472
|
+
description
|
|
464
473
|
});
|
|
474
|
+
if (usage) {
|
|
475
|
+
stateManager.updateUsage(usage);
|
|
476
|
+
}
|
|
465
477
|
if (!toolRouter.hasTools() || rawToolCalls.length === 0) {
|
|
466
478
|
stateManager.complete();
|
|
467
479
|
exitReason = "completed";
|
|
468
|
-
return
|
|
480
|
+
return {
|
|
481
|
+
finalMessage: message,
|
|
482
|
+
exitReason,
|
|
483
|
+
usage: stateManager.getTotalUsage()
|
|
484
|
+
};
|
|
469
485
|
}
|
|
470
486
|
const parsedToolCalls = [];
|
|
471
487
|
for (const tc of rawToolCalls) {
|
|
@@ -482,9 +498,17 @@ var createSession = async ({
|
|
|
482
498
|
});
|
|
483
499
|
}
|
|
484
500
|
}
|
|
485
|
-
await toolRouter.processToolCalls(
|
|
486
|
-
|
|
487
|
-
|
|
501
|
+
const toolCallResults = await toolRouter.processToolCalls(
|
|
502
|
+
parsedToolCalls,
|
|
503
|
+
{
|
|
504
|
+
turn: currentTurn
|
|
505
|
+
}
|
|
506
|
+
);
|
|
507
|
+
for (const result of toolCallResults) {
|
|
508
|
+
if (result.usage) {
|
|
509
|
+
stateManager.updateUsage(result.usage);
|
|
510
|
+
}
|
|
511
|
+
}
|
|
488
512
|
if (stateManager.getStatus() === "WAITING_FOR_INPUT") {
|
|
489
513
|
const conditionMet = await condition(
|
|
490
514
|
() => stateManager.getStatus() === "RUNNING",
|
|
@@ -506,7 +530,11 @@ var createSession = async ({
|
|
|
506
530
|
} finally {
|
|
507
531
|
await callSessionEnd(exitReason, stateManager.getTurns());
|
|
508
532
|
}
|
|
509
|
-
return
|
|
533
|
+
return {
|
|
534
|
+
finalMessage: null,
|
|
535
|
+
exitReason,
|
|
536
|
+
usage: stateManager.getTotalUsage()
|
|
537
|
+
};
|
|
510
538
|
}
|
|
511
539
|
};
|
|
512
540
|
};
|
|
@@ -543,6 +571,11 @@ function createAgentStateManager({
|
|
|
543
571
|
let version = initialState?.version ?? 0;
|
|
544
572
|
let turns = initialState?.turns ?? 0;
|
|
545
573
|
let tools = initialState?.tools ?? [];
|
|
574
|
+
let totalInputTokens = 0;
|
|
575
|
+
let totalOutputTokens = 0;
|
|
576
|
+
let totalCachedWriteTokens = 0;
|
|
577
|
+
let totalCachedReadTokens = 0;
|
|
578
|
+
let totalReasonTokens = 0;
|
|
546
579
|
const tasks = new Map(initialState?.tasks);
|
|
547
580
|
const {
|
|
548
581
|
status: _,
|
|
@@ -657,6 +690,23 @@ function createAgentStateManager({
|
|
|
657
690
|
version++;
|
|
658
691
|
}
|
|
659
692
|
return deleted;
|
|
693
|
+
},
|
|
694
|
+
updateUsage(usage) {
|
|
695
|
+
totalInputTokens += usage.inputTokens ?? 0;
|
|
696
|
+
totalOutputTokens += usage.outputTokens ?? 0;
|
|
697
|
+
totalCachedWriteTokens += usage.cachedWriteTokens ?? 0;
|
|
698
|
+
totalCachedReadTokens += usage.cachedReadTokens ?? 0;
|
|
699
|
+
totalReasonTokens += usage.reasonTokens ?? 0;
|
|
700
|
+
},
|
|
701
|
+
getTotalUsage() {
|
|
702
|
+
return {
|
|
703
|
+
totalInputTokens,
|
|
704
|
+
totalOutputTokens,
|
|
705
|
+
totalCachedWriteTokens,
|
|
706
|
+
totalCachedReadTokens,
|
|
707
|
+
totalReasonTokens,
|
|
708
|
+
turns
|
|
709
|
+
};
|
|
660
710
|
}
|
|
661
711
|
};
|
|
662
712
|
}
|
|
@@ -709,7 +759,7 @@ Examples:
|
|
|
709
759
|
}),
|
|
710
760
|
strict: true
|
|
711
761
|
};
|
|
712
|
-
var
|
|
762
|
+
var readFileTool = {
|
|
713
763
|
name: "FileRead",
|
|
714
764
|
description: `Read file contents with optional pagination.
|
|
715
765
|
|
|
@@ -732,22 +782,21 @@ The tool returns the file content in an appropriate format:
|
|
|
732
782
|
}),
|
|
733
783
|
strict: true
|
|
734
784
|
};
|
|
735
|
-
var
|
|
785
|
+
var writeFileTool = {
|
|
736
786
|
name: "FileWrite",
|
|
737
787
|
description: `Create or overwrite a file with new content.
|
|
738
788
|
|
|
739
789
|
Usage:
|
|
740
|
-
- Provide the absolute path to the file
|
|
741
790
|
- The file will be created if it doesn't exist
|
|
742
791
|
- If the file exists, it will be completely overwritten
|
|
743
792
|
|
|
744
793
|
IMPORTANT:
|
|
745
794
|
- You must read the file first (in this session) before writing to it
|
|
746
795
|
- This is an atomic write operation - the entire file is replaced
|
|
747
|
-
- Path must be
|
|
796
|
+
- Path must be relative to the root of the file system (e.g., "docs/readme.md", not "/docs/readme.md")
|
|
748
797
|
`,
|
|
749
798
|
schema: z.object({
|
|
750
|
-
file_path: z.string().describe("The
|
|
799
|
+
file_path: z.string().describe("The path to the file to write"),
|
|
751
800
|
content: z.string().describe("The content to write to the file")
|
|
752
801
|
}),
|
|
753
802
|
strict: true
|
|
@@ -1009,13 +1058,13 @@ Usage notes:
|
|
|
1009
1058
|
};
|
|
1010
1059
|
|
|
1011
1060
|
// src/tools/ask-user-question/handler.ts
|
|
1012
|
-
var createAskUserQuestionHandler = () => (args) => {
|
|
1061
|
+
var createAskUserQuestionHandler = () => async (args) => {
|
|
1013
1062
|
return {
|
|
1014
1063
|
toolResponse: "Question submitted",
|
|
1015
1064
|
data: { questions: args.questions }
|
|
1016
1065
|
};
|
|
1017
1066
|
};
|
|
1018
1067
|
|
|
1019
|
-
export { AGENT_HANDLER_NAMES, askUserQuestionTool, bashTool, createAgentStateManager, createAskUserQuestionHandler, createBashToolDescription, createSession, createSubagentTool, createTaskCreateHandler, createTaskGetHandler, createTaskListHandler, createTaskUpdateHandler, createToolRouter, defineSubagent, defineTool, editTool, globTool, grepTool, hasNoOtherToolCalls, isTerminalStatus, proxyDefaultThreadOps,
|
|
1068
|
+
export { AGENT_HANDLER_NAMES, askUserQuestionTool, bashTool, createAgentStateManager, createAskUserQuestionHandler, createBashToolDescription, createSession, createSubagentTool, createTaskCreateHandler, createTaskGetHandler, createTaskListHandler, createTaskUpdateHandler, createToolRouter, defineSubagent, defineTool, editTool, globTool, grepTool, hasNoOtherToolCalls, isTerminalStatus, proxyDefaultThreadOps, readFileTool, taskCreateTool, taskGetTool, taskListTool, taskUpdateTool, writeFileTool };
|
|
1020
1069
|
//# sourceMappingURL=workflow.js.map
|
|
1021
1070
|
//# sourceMappingURL=workflow.js.map
|