zeitlich 0.2.14 → 0.2.16

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 (80) hide show
  1. package/README.md +62 -12
  2. package/dist/adapters/sandbox/daytona/index.cjs +52 -23
  3. package/dist/adapters/sandbox/daytona/index.cjs.map +1 -1
  4. package/dist/adapters/sandbox/daytona/index.d.cts +10 -2
  5. package/dist/adapters/sandbox/daytona/index.d.ts +10 -2
  6. package/dist/adapters/sandbox/daytona/index.js +52 -23
  7. package/dist/adapters/sandbox/daytona/index.js.map +1 -1
  8. package/dist/adapters/sandbox/inmemory/index.cjs +21 -16
  9. package/dist/adapters/sandbox/inmemory/index.cjs.map +1 -1
  10. package/dist/adapters/sandbox/inmemory/index.d.cts +1 -1
  11. package/dist/adapters/sandbox/inmemory/index.d.ts +1 -1
  12. package/dist/adapters/sandbox/inmemory/index.js +21 -16
  13. package/dist/adapters/sandbox/inmemory/index.js.map +1 -1
  14. package/dist/adapters/sandbox/virtual/index.cjs +38 -38
  15. package/dist/adapters/sandbox/virtual/index.cjs.map +1 -1
  16. package/dist/adapters/sandbox/virtual/index.d.cts +6 -6
  17. package/dist/adapters/sandbox/virtual/index.d.ts +6 -6
  18. package/dist/adapters/sandbox/virtual/index.js +37 -37
  19. package/dist/adapters/sandbox/virtual/index.js.map +1 -1
  20. package/dist/adapters/thread/google-genai/index.cjs +22 -0
  21. package/dist/adapters/thread/google-genai/index.cjs.map +1 -1
  22. package/dist/adapters/thread/google-genai/index.d.cts +3 -3
  23. package/dist/adapters/thread/google-genai/index.d.ts +3 -3
  24. package/dist/adapters/thread/google-genai/index.js +22 -0
  25. package/dist/adapters/thread/google-genai/index.js.map +1 -1
  26. package/dist/adapters/thread/langchain/index.cjs +22 -0
  27. package/dist/adapters/thread/langchain/index.cjs.map +1 -1
  28. package/dist/adapters/thread/langchain/index.d.cts +3 -3
  29. package/dist/adapters/thread/langchain/index.d.ts +3 -3
  30. package/dist/adapters/thread/langchain/index.js +22 -0
  31. package/dist/adapters/thread/langchain/index.js.map +1 -1
  32. package/dist/index.cjs +38 -11
  33. package/dist/index.cjs.map +1 -1
  34. package/dist/index.d.cts +6 -6
  35. package/dist/index.d.ts +6 -6
  36. package/dist/index.js +38 -11
  37. package/dist/index.js.map +1 -1
  38. package/dist/{types-B9ljZewB.d.cts → types-35POpVfa.d.cts} +6 -0
  39. package/dist/{types-B9ljZewB.d.ts → types-35POpVfa.d.ts} +6 -0
  40. package/dist/{types-CDubRtad.d.cts → types-BMRzfELQ.d.cts} +2 -0
  41. package/dist/{types-CDubRtad.d.ts → types-BMRzfELQ.d.ts} +2 -0
  42. package/dist/{types-CwwgQ_9H.d.ts → types-BSOte_8s.d.ts} +6 -2
  43. package/dist/{types-BVP87m_W.d.cts → types-DCi2qXjN.d.cts} +6 -2
  44. package/dist/{types-GpMU4b0w.d.cts → types-Drli9aCK.d.cts} +3 -1
  45. package/dist/{types-B4C9txdq.d.ts → types-XPtivmSJ.d.ts} +3 -1
  46. package/dist/workflow.cjs +23 -11
  47. package/dist/workflow.cjs.map +1 -1
  48. package/dist/workflow.d.cts +6 -6
  49. package/dist/workflow.d.ts +6 -6
  50. package/dist/workflow.js +23 -11
  51. package/dist/workflow.js.map +1 -1
  52. package/package.json +7 -3
  53. package/src/adapters/sandbox/daytona/filesystem.ts +43 -19
  54. package/src/adapters/sandbox/daytona/index.ts +16 -3
  55. package/src/adapters/sandbox/daytona/types.ts +4 -0
  56. package/src/adapters/sandbox/inmemory/index.ts +22 -16
  57. package/src/adapters/sandbox/virtual/filesystem.ts +29 -31
  58. package/src/adapters/sandbox/virtual/index.ts +5 -3
  59. package/src/adapters/sandbox/virtual/provider.ts +5 -2
  60. package/src/adapters/sandbox/virtual/types.ts +3 -0
  61. package/src/adapters/sandbox/virtual/with-virtual-sandbox.ts +4 -3
  62. package/src/adapters/thread/google-genai/activities.ts +11 -0
  63. package/src/adapters/thread/langchain/activities.ts +11 -0
  64. package/src/lib/sandbox/tree.integration.test.ts +153 -0
  65. package/src/lib/sandbox/types.ts +2 -0
  66. package/src/lib/session/session-edge-cases.integration.test.ts +962 -0
  67. package/src/lib/session/session.integration.test.ts +852 -0
  68. package/src/lib/session/session.ts +11 -5
  69. package/src/lib/session/types.ts +2 -0
  70. package/src/lib/skills/skills.integration.test.ts +308 -0
  71. package/src/lib/state/manager.integration.test.ts +342 -0
  72. package/src/lib/subagent/register.ts +22 -7
  73. package/src/lib/subagent/subagent.integration.test.ts +467 -0
  74. package/src/lib/thread/id.test.ts +50 -0
  75. package/src/lib/thread/manager.ts +20 -1
  76. package/src/lib/thread/types.ts +6 -0
  77. package/src/lib/tool-router/auto-append-sandbox.integration.test.ts +344 -0
  78. package/src/lib/tool-router/router-edge-cases.integration.test.ts +623 -0
  79. package/src/lib/tool-router/router.integration.test.ts +699 -0
  80. package/src/lib/types.test.ts +29 -0
package/dist/index.d.cts CHANGED
@@ -1,14 +1,14 @@
1
1
  import { BashArgs, FileEditArgs, GlobArgs, FileReadArgs, FileWriteArgs } from './workflow.cjs';
2
2
  export { AskUserQuestionArgs, GrepArgs, ReadSkillArgs, SubagentArgs, TaskCreateArgs, TaskGetArgs, TaskListArgs, TaskUpdateArgs, applyVirtualTreeMutations, askUserQuestionTool, bashTool, createAgentStateManager, createAskUserQuestionHandler, createBashToolDescription, createReadSkillHandler, createReadSkillTool, createSession, createTaskCreateHandler, createTaskGetHandler, createTaskListHandler, createTaskUpdateHandler, createToolRouter, defineSubagent, defineTool, editTool, formatVirtualFileTree, getShortId, globTool, grepTool, hasNoOtherToolCalls, parseSkillFile, proxyDefaultThreadOps, proxySandboxOps, readFileTool, taskCreateTool, taskGetTool, taskListTool, taskUpdateTool, writeFileTool } from './workflow.cjs';
3
- import { S as SkillProvider, b as SkillMetadata, c as Skill } from './types-GpMU4b0w.cjs';
4
- export { A as AgentResponse, d as AgentState, e as AgentStateManager, H as Hooks, J as JsonPrimitive, f as JsonSerializable, g as JsonValue, M as ModelInvoker, a as ModelInvokerConfig, P as PostHumanMessageAppendHook, h as PostHumanMessageAppendHookContext, i as PreHumanMessageAppendHook, j as PreHumanMessageAppendHookContext, R as RunAgentActivity, k as SessionConfig, l as SessionEndHook, m as SessionEndHookContext, n as SessionStartHook, o as SessionStartHookContext, p as SubagentConfig, q as SubagentHandlerResponse, r as SubagentHooks, s as SubagentInput, t as SubagentWorkflow, T as ThreadOps, Z as ZeitlichSession } from './types-GpMU4b0w.cjs';
5
- import { T as ThreadManagerConfig, B as BaseThreadManager } from './types-B9ljZewB.cjs';
3
+ import { S as SkillProvider, b as SkillMetadata, c as Skill } from './types-Drli9aCK.cjs';
4
+ export { A as AgentResponse, d as AgentState, e as AgentStateManager, H as Hooks, J as JsonPrimitive, f as JsonSerializable, g as JsonValue, M as ModelInvoker, a as ModelInvokerConfig, P as PostHumanMessageAppendHook, h as PostHumanMessageAppendHookContext, i as PreHumanMessageAppendHook, j as PreHumanMessageAppendHookContext, R as RunAgentActivity, k as SessionConfig, l as SessionEndHook, m as SessionEndHookContext, n as SessionStartHook, o as SessionStartHookContext, p as SubagentConfig, q as SubagentHandlerResponse, r as SubagentHooks, s as SubagentInput, t as SubagentWorkflow, T as ThreadOps, Z as ZeitlichSession } from './types-Drli9aCK.cjs';
5
+ import { T as ThreadManagerConfig, B as BaseThreadManager } from './types-35POpVfa.cjs';
6
6
  import { R as RouterContext, j as ToolResultConfig, A as ActivityToolHandler, c as ToolHandlerResponse, B as BaseAgentState, g as RunAgentConfig } from './types-BMXzv7TN.cjs';
7
7
  export { l as AgentConfig, m as AgentFile, h as AgentStatus, n as AppendToolResultFn, C as ContentPart, I as InferToolResults, M as MessageContent, o as ParsedToolCall, p as ParsedToolCallUnion, q as PostToolUseFailureHook, r as PostToolUseFailureHookContext, d as PostToolUseFailureHookResult, s as PostToolUseHook, t as PostToolUseHookContext, u as PreToolUseHook, v as PreToolUseHookContext, P as PreToolUseHookResult, w as ProcessToolCallsContext, e as RawToolCall, x as SerializableToolDefinition, S as SessionExitReason, y as TaskStatus, f as TokenUsage, z as ToolArgs, D as ToolCallResult, k as ToolCallResultUnion, i as ToolDefinition, E as ToolHandler, F as ToolHooks, a as ToolMap, T as ToolMessageContent, G as ToolNames, H as ToolResult, J as ToolRouter, b as ToolRouterHooks, K as ToolWithHandler, W as WorkflowTask, L as isTerminalStatus } from './types-BMXzv7TN.cjs';
8
- import { S as Sandbox, a as SandboxFileSystem, d as SandboxCreateOptions, b as SandboxProvider, f as SandboxSnapshot, g as SandboxOps, E as ExecResult } from './types-CDubRtad.cjs';
9
- export { h as ExecOptions, c as SandboxCapabilities, e as SandboxCreateResult, D as SandboxDirentEntry, F as SandboxFileStat, i as SandboxNotFoundError, j as SandboxNotSupportedError } from './types-CDubRtad.cjs';
8
+ import { S as Sandbox, a as SandboxFileSystem, d as SandboxCreateOptions, b as SandboxProvider, f as SandboxSnapshot, g as SandboxOps, E as ExecResult } from './types-BMRzfELQ.cjs';
9
+ export { h as ExecOptions, c as SandboxCapabilities, e as SandboxCreateResult, D as SandboxDirentEntry, F as SandboxFileStat, i as SandboxNotFoundError, j as SandboxNotSupportedError } from './types-BMRzfELQ.cjs';
10
10
  import { WorkflowClient } from '@temporalio/client';
11
- export { c as FileEntry, F as FileEntryMetadata, a as FileResolver, T as TreeMutation, e as VirtualFileTree, g as VirtualSandboxState } from './types-BVP87m_W.cjs';
11
+ export { c as FileEntry, F as FileEntryMetadata, a as FileResolver, T as TreeMutation, e as VirtualFileTree, g as VirtualSandboxState } from './types-DCi2qXjN.cjs';
12
12
  import '@temporalio/workflow';
13
13
  import 'zod';
14
14
  import '@temporalio/common';
package/dist/index.d.ts CHANGED
@@ -1,14 +1,14 @@
1
1
  import { BashArgs, FileEditArgs, GlobArgs, FileReadArgs, FileWriteArgs } from './workflow.js';
2
2
  export { AskUserQuestionArgs, GrepArgs, ReadSkillArgs, SubagentArgs, TaskCreateArgs, TaskGetArgs, TaskListArgs, TaskUpdateArgs, applyVirtualTreeMutations, askUserQuestionTool, bashTool, createAgentStateManager, createAskUserQuestionHandler, createBashToolDescription, createReadSkillHandler, createReadSkillTool, createSession, createTaskCreateHandler, createTaskGetHandler, createTaskListHandler, createTaskUpdateHandler, createToolRouter, defineSubagent, defineTool, editTool, formatVirtualFileTree, getShortId, globTool, grepTool, hasNoOtherToolCalls, parseSkillFile, proxyDefaultThreadOps, proxySandboxOps, readFileTool, taskCreateTool, taskGetTool, taskListTool, taskUpdateTool, writeFileTool } from './workflow.js';
3
- import { S as SkillProvider, b as SkillMetadata, c as Skill } from './types-B4C9txdq.js';
4
- export { A as AgentResponse, d as AgentState, e as AgentStateManager, H as Hooks, J as JsonPrimitive, f as JsonSerializable, g as JsonValue, M as ModelInvoker, a as ModelInvokerConfig, P as PostHumanMessageAppendHook, h as PostHumanMessageAppendHookContext, i as PreHumanMessageAppendHook, j as PreHumanMessageAppendHookContext, R as RunAgentActivity, k as SessionConfig, l as SessionEndHook, m as SessionEndHookContext, n as SessionStartHook, o as SessionStartHookContext, p as SubagentConfig, q as SubagentHandlerResponse, r as SubagentHooks, s as SubagentInput, t as SubagentWorkflow, T as ThreadOps, Z as ZeitlichSession } from './types-B4C9txdq.js';
5
- import { T as ThreadManagerConfig, B as BaseThreadManager } from './types-B9ljZewB.js';
3
+ import { S as SkillProvider, b as SkillMetadata, c as Skill } from './types-XPtivmSJ.js';
4
+ export { A as AgentResponse, d as AgentState, e as AgentStateManager, H as Hooks, J as JsonPrimitive, f as JsonSerializable, g as JsonValue, M as ModelInvoker, a as ModelInvokerConfig, P as PostHumanMessageAppendHook, h as PostHumanMessageAppendHookContext, i as PreHumanMessageAppendHook, j as PreHumanMessageAppendHookContext, R as RunAgentActivity, k as SessionConfig, l as SessionEndHook, m as SessionEndHookContext, n as SessionStartHook, o as SessionStartHookContext, p as SubagentConfig, q as SubagentHandlerResponse, r as SubagentHooks, s as SubagentInput, t as SubagentWorkflow, T as ThreadOps, Z as ZeitlichSession } from './types-XPtivmSJ.js';
5
+ import { T as ThreadManagerConfig, B as BaseThreadManager } from './types-35POpVfa.js';
6
6
  import { R as RouterContext, j as ToolResultConfig, A as ActivityToolHandler, c as ToolHandlerResponse, B as BaseAgentState, g as RunAgentConfig } from './types-BMXzv7TN.js';
7
7
  export { l as AgentConfig, m as AgentFile, h as AgentStatus, n as AppendToolResultFn, C as ContentPart, I as InferToolResults, M as MessageContent, o as ParsedToolCall, p as ParsedToolCallUnion, q as PostToolUseFailureHook, r as PostToolUseFailureHookContext, d as PostToolUseFailureHookResult, s as PostToolUseHook, t as PostToolUseHookContext, u as PreToolUseHook, v as PreToolUseHookContext, P as PreToolUseHookResult, w as ProcessToolCallsContext, e as RawToolCall, x as SerializableToolDefinition, S as SessionExitReason, y as TaskStatus, f as TokenUsage, z as ToolArgs, D as ToolCallResult, k as ToolCallResultUnion, i as ToolDefinition, E as ToolHandler, F as ToolHooks, a as ToolMap, T as ToolMessageContent, G as ToolNames, H as ToolResult, J as ToolRouter, b as ToolRouterHooks, K as ToolWithHandler, W as WorkflowTask, L as isTerminalStatus } from './types-BMXzv7TN.js';
8
- import { S as Sandbox, a as SandboxFileSystem, d as SandboxCreateOptions, b as SandboxProvider, f as SandboxSnapshot, g as SandboxOps, E as ExecResult } from './types-CDubRtad.js';
9
- export { h as ExecOptions, c as SandboxCapabilities, e as SandboxCreateResult, D as SandboxDirentEntry, F as SandboxFileStat, i as SandboxNotFoundError, j as SandboxNotSupportedError } from './types-CDubRtad.js';
8
+ import { S as Sandbox, a as SandboxFileSystem, d as SandboxCreateOptions, b as SandboxProvider, f as SandboxSnapshot, g as SandboxOps, E as ExecResult } from './types-BMRzfELQ.js';
9
+ export { h as ExecOptions, c as SandboxCapabilities, e as SandboxCreateResult, D as SandboxDirentEntry, F as SandboxFileStat, i as SandboxNotFoundError, j as SandboxNotSupportedError } from './types-BMRzfELQ.js';
10
10
  import { WorkflowClient } from '@temporalio/client';
11
- export { c as FileEntry, F as FileEntryMetadata, a as FileResolver, T as TreeMutation, e as VirtualFileTree, g as VirtualSandboxState } from './types-CwwgQ_9H.js';
11
+ export { c as FileEntry, F as FileEntryMetadata, a as FileResolver, T as TreeMutation, e as VirtualFileTree, g as VirtualSandboxState } from './types-BSOte_8s.js';
12
12
  import '@temporalio/workflow';
13
13
  import 'zod';
14
14
  import '@temporalio/common';
package/dist/index.js CHANGED
@@ -380,16 +380,25 @@ function createSubagentHandler(subagents) {
380
380
 
381
381
  // src/lib/subagent/register.ts
382
382
  function buildSubagentRegistration(subagents) {
383
- const enabled = subagents.filter((s) => s.enabled ?? true);
384
- if (enabled.length === 0) return null;
383
+ if (subagents.length === 0) return null;
384
+ const getEnabled = () => subagents.filter((s) => s.enabled ?? true);
385
385
  const subagentHooksMap = /* @__PURE__ */ new Map();
386
- for (const s of enabled) {
386
+ for (const s of subagents) {
387
387
  if (s.hooks) subagentHooksMap.set(s.agentName, s.hooks);
388
388
  }
389
389
  const resolveSubagentName = (args) => args.subagent;
390
390
  return {
391
- ...createSubagentTool(enabled),
392
- handler: createSubagentHandler(enabled),
391
+ name: SUBAGENT_TOOL_NAME,
392
+ get enabled() {
393
+ return getEnabled().length > 0;
394
+ },
395
+ get description() {
396
+ return createSubagentTool(getEnabled()).description;
397
+ },
398
+ get schema() {
399
+ return createSubagentTool(getEnabled()).schema;
400
+ },
401
+ handler: createSubagentHandler(subagents),
393
402
  ...subagentHooksMap.size > 0 && {
394
403
  hooks: {
395
404
  onPreToolUse: async (ctx) => {
@@ -480,12 +489,14 @@ var createSession = async ({
480
489
  sandbox: sandboxOps,
481
490
  sandboxId: inheritedSandboxId
482
491
  }) => {
483
- const threadId = providedThreadId ?? getShortId();
492
+ const sourceThreadId = continueThread ? providedThreadId : void 0;
493
+ const threadId = continueThread && providedThreadId ? getShortId() : providedThreadId ?? getShortId();
484
494
  const {
485
495
  appendToolResult,
486
496
  appendHumanMessage,
487
497
  initializeThread,
488
- appendSystemMessage
498
+ appendSystemMessage,
499
+ forkThread
489
500
  } = threadOps ?? proxyDefaultThreadOps();
490
501
  const plugins = [];
491
502
  if (subagents) {
@@ -544,9 +555,7 @@ var createSession = async ({
544
555
  const result = await sandboxOps.createSandbox({ id: threadId });
545
556
  sandboxId = result.sandboxId;
546
557
  if (result.stateUpdate) {
547
- stateManager.mergeUpdate(
548
- result.stateUpdate
549
- );
558
+ stateManager.mergeUpdate(result.stateUpdate);
550
559
  }
551
560
  }
552
561
  if (hooks.onSessionStart) {
@@ -557,7 +566,9 @@ var createSession = async ({
557
566
  });
558
567
  }
559
568
  const systemPrompt = stateManager.getSystemPrompt();
560
- if (!continueThread) {
569
+ if (continueThread && sourceThreadId) {
570
+ await forkThread(sourceThreadId, threadId);
571
+ } else {
561
572
  if (appendSystemPrompt) {
562
573
  if (!systemPrompt || systemPrompt.trim() === "") {
563
574
  throw ApplicationFailure.create({
@@ -629,6 +640,7 @@ var createSession = async ({
629
640
  );
630
641
  if (!conditionMet) {
631
642
  stateManager.cancel();
643
+ exitReason = "cancelled";
632
644
  await condition(() => false, "2s");
633
645
  break;
634
646
  }
@@ -744,6 +756,21 @@ function createThreadManager(config) {
744
756
  await redis.expire(redisKey, THREAD_TTL_SECONDS);
745
757
  }
746
758
  },
759
+ async fork(newThreadId) {
760
+ await assertThreadExists();
761
+ const data = await redis.lrange(redisKey, 0, -1);
762
+ const forked = createThreadManager({
763
+ ...config,
764
+ threadId: newThreadId
765
+ });
766
+ await forked.initialize();
767
+ if (data.length > 0) {
768
+ const newKey = getThreadKey(newThreadId, key);
769
+ await redis.rpush(newKey, ...data);
770
+ await redis.expire(newKey, THREAD_TTL_SECONDS);
771
+ }
772
+ return forked;
773
+ },
747
774
  async delete() {
748
775
  await redis.del(redisKey, metaKey);
749
776
  }