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.
@@ -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 readTool, aF as taskCreateTool, aG as taskGetTool, aH as taskListTool, aI as taskUpdateTool, aK as writeTool } from './workflow-CyYHDbrr.js';
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 SUBAGENT_TOOL = "Subagent";
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 ${SUBAGENT_TOOL} tool launches specialized agents (subprocesses) that autonomously handle complex tasks. Each agent type has specific capabilities and tools available to it.
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 ${SUBAGENT_TOOL} tool, you must specify a subagent parameter to select which agent type to use.
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: SUBAGENT_TOOL,
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 !== false;
80
+ const isEnabled = (tool) => tool.enabled?.() ?? true;
80
81
  if (options.subagents) {
81
- const enabledSubagents = options.subagents.filter(
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 enabledSubagents) {
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("Subagent", {
91
- ...createSubagentTool(enabledSubagents),
92
- handler: createSubagentHandler(enabledSubagents),
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
- return Array.from(toolMap).filter(([, tool]) => isEnabled(tool)).map(([name, tool]) => ({
284
- name,
285
- description: tool.description,
286
- schema: tool.schema,
287
- strict: tool.strict,
288
- max_uses: tool.max_uses
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 ({ stateManager }) => {
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
- const { message, rawToolCalls } = await runAgent({
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 message;
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(parsedToolCalls, {
486
- turn: currentTurn
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 null;
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 readTool = {
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 writeTool = {
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 absolute (e.g., "/docs/readme.md", not "docs/readme.md")
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 absolute path to the file to write"),
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, readTool, taskCreateTool, taskGetTool, taskListTool, taskUpdateTool, writeTool };
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