zeitlich 0.2.7 → 0.2.8

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 readTool, aF as taskCreateTool, aG as taskGetTool, aH as taskListTool, aI as taskUpdateTool, aK as writeTool } from './workflow-BdAuMMjY.js';
2
2
  import '@temporalio/workflow';
3
3
  import 'ioredis';
4
4
  import '@langchain/core/messages';
package/dist/workflow.js CHANGED
@@ -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
88
  toolMap.set("Subagent", {
91
- ...createSubagentTool(enabledSubagents),
92
- handler: createSubagentHandler(enabledSubagents),
89
+ ...createSubagentTool(options.subagents),
90
+ handler: createSubagentHandler(options.subagents),
93
91
  ...subagentHooksMap.size > 0 && {
94
92
  hooks: {
95
93
  onPreToolUse: async (ctx) => {
@@ -380,6 +378,7 @@ function hasNoOtherToolCalls(toolCalls, excludeName) {
380
378
  var createSession = async ({
381
379
  threadId,
382
380
  agentName,
381
+ description,
383
382
  maxTurns = 50,
384
383
  metadata = {},
385
384
  runAgent,
@@ -419,7 +418,9 @@ var createSession = async ({
419
418
  }
420
419
  };
421
420
  return {
422
- runSession: async ({ stateManager }) => {
421
+ runSession: async ({
422
+ stateManager
423
+ }) => {
423
424
  setHandler(
424
425
  defineUpdate(`add${agentName}Message`),
425
426
  async (message) => {
@@ -446,7 +447,6 @@ var createSession = async ({
446
447
  metadata
447
448
  });
448
449
  }
449
- stateManager.setTools(toolRouter.getToolDefinitions());
450
450
  await initializeThread(threadId);
451
451
  if (appendSystemPrompt && systemPrompt && systemPrompt.trim() !== "") {
452
452
  await appendSystemMessage(threadId, systemPrompt);
@@ -457,15 +457,25 @@ var createSession = async ({
457
457
  while (stateManager.isRunning() && !stateManager.isTerminal() && stateManager.getTurns() < maxTurns) {
458
458
  stateManager.incrementTurns();
459
459
  const currentTurn = stateManager.getTurns();
460
- const { message, rawToolCalls } = await runAgent({
460
+ stateManager.setTools(toolRouter.getToolDefinitions());
461
+ const { message, rawToolCalls, usage } = await runAgent({
461
462
  threadId,
462
463
  agentName,
463
- metadata
464
+ metadata,
465
+ systemPrompt,
466
+ description
464
467
  });
468
+ if (usage) {
469
+ stateManager.updateUsage(usage);
470
+ }
465
471
  if (!toolRouter.hasTools() || rawToolCalls.length === 0) {
466
472
  stateManager.complete();
467
473
  exitReason = "completed";
468
- return message;
474
+ return {
475
+ finalMessage: message,
476
+ exitReason,
477
+ usage: stateManager.getTotalUsage()
478
+ };
469
479
  }
470
480
  const parsedToolCalls = [];
471
481
  for (const tc of rawToolCalls) {
@@ -482,9 +492,17 @@ var createSession = async ({
482
492
  });
483
493
  }
484
494
  }
485
- await toolRouter.processToolCalls(parsedToolCalls, {
486
- turn: currentTurn
487
- });
495
+ const toolCallResults = await toolRouter.processToolCalls(
496
+ parsedToolCalls,
497
+ {
498
+ turn: currentTurn
499
+ }
500
+ );
501
+ for (const result of toolCallResults) {
502
+ if (result.usage) {
503
+ stateManager.updateUsage(result.usage);
504
+ }
505
+ }
488
506
  if (stateManager.getStatus() === "WAITING_FOR_INPUT") {
489
507
  const conditionMet = await condition(
490
508
  () => stateManager.getStatus() === "RUNNING",
@@ -506,7 +524,11 @@ var createSession = async ({
506
524
  } finally {
507
525
  await callSessionEnd(exitReason, stateManager.getTurns());
508
526
  }
509
- return null;
527
+ return {
528
+ finalMessage: null,
529
+ exitReason,
530
+ usage: stateManager.getTotalUsage()
531
+ };
510
532
  }
511
533
  };
512
534
  };
@@ -543,6 +565,11 @@ function createAgentStateManager({
543
565
  let version = initialState?.version ?? 0;
544
566
  let turns = initialState?.turns ?? 0;
545
567
  let tools = initialState?.tools ?? [];
568
+ let totalInputTokens = 0;
569
+ let totalOutputTokens = 0;
570
+ let totalCachedWriteTokens = 0;
571
+ let totalCachedReadTokens = 0;
572
+ let totalReasonTokens = 0;
546
573
  const tasks = new Map(initialState?.tasks);
547
574
  const {
548
575
  status: _,
@@ -657,6 +684,23 @@ function createAgentStateManager({
657
684
  version++;
658
685
  }
659
686
  return deleted;
687
+ },
688
+ updateUsage(usage) {
689
+ totalInputTokens += usage.inputTokens ?? 0;
690
+ totalOutputTokens += usage.outputTokens ?? 0;
691
+ totalCachedWriteTokens += usage.cachedWriteTokens ?? 0;
692
+ totalCachedReadTokens += usage.cachedReadTokens ?? 0;
693
+ totalReasonTokens += usage.reasonTokens ?? 0;
694
+ },
695
+ getTotalUsage() {
696
+ return {
697
+ totalInputTokens,
698
+ totalOutputTokens,
699
+ totalCachedWriteTokens,
700
+ totalCachedReadTokens,
701
+ totalReasonTokens,
702
+ turns
703
+ };
660
704
  }
661
705
  };
662
706
  }