zeitlich 0.2.15 → 0.2.17

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 (78) hide show
  1. package/README.md +125 -64
  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 +83 -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 +80 -38
  19. package/dist/adapters/sandbox/virtual/index.js.map +1 -1
  20. package/dist/adapters/thread/google-genai/index.d.cts +2 -2
  21. package/dist/adapters/thread/google-genai/index.d.ts +2 -2
  22. package/dist/adapters/thread/langchain/index.cjs +2 -2
  23. package/dist/adapters/thread/langchain/index.cjs.map +1 -1
  24. package/dist/adapters/thread/langchain/index.d.cts +2 -2
  25. package/dist/adapters/thread/langchain/index.d.ts +2 -2
  26. package/dist/adapters/thread/langchain/index.js +2 -2
  27. package/dist/adapters/thread/langchain/index.js.map +1 -1
  28. package/dist/index.cjs +102 -10
  29. package/dist/index.cjs.map +1 -1
  30. package/dist/index.d.cts +6 -6
  31. package/dist/index.d.ts +6 -6
  32. package/dist/index.js +98 -11
  33. package/dist/index.js.map +1 -1
  34. package/dist/{types-CwwgQ_9H.d.ts → queries-BlC1I3DK.d.ts} +48 -3
  35. package/dist/{types-BVP87m_W.d.cts → queries-DlJ3jE48.d.cts} +48 -3
  36. package/dist/{types-CDubRtad.d.cts → types-BMRzfELQ.d.cts} +2 -0
  37. package/dist/{types-CDubRtad.d.ts → types-BMRzfELQ.d.ts} +2 -0
  38. package/dist/{types-Dje1TdH6.d.cts → types-Bh-BbfCp.d.cts} +31 -12
  39. package/dist/{types-BWvIYK28.d.ts → types-NkiAxU4t.d.ts} +31 -12
  40. package/dist/workflow.cjs +102 -10
  41. package/dist/workflow.cjs.map +1 -1
  42. package/dist/workflow.d.cts +114 -40
  43. package/dist/workflow.d.ts +114 -40
  44. package/dist/workflow.js +98 -11
  45. package/dist/workflow.js.map +1 -1
  46. package/package.json +1 -1
  47. package/src/adapters/sandbox/daytona/filesystem.ts +43 -19
  48. package/src/adapters/sandbox/daytona/index.ts +16 -3
  49. package/src/adapters/sandbox/daytona/types.ts +4 -0
  50. package/src/adapters/sandbox/inmemory/index.ts +22 -16
  51. package/src/adapters/sandbox/virtual/filesystem.ts +29 -31
  52. package/src/adapters/sandbox/virtual/index.ts +7 -3
  53. package/src/adapters/sandbox/virtual/provider.ts +5 -2
  54. package/src/adapters/sandbox/virtual/queries.ts +97 -0
  55. package/src/adapters/sandbox/virtual/types.ts +3 -0
  56. package/src/adapters/sandbox/virtual/with-virtual-sandbox.ts +4 -3
  57. package/src/adapters/thread/langchain/activities.ts +7 -5
  58. package/src/lib/sandbox/tree.integration.test.ts +153 -0
  59. package/src/lib/sandbox/types.ts +2 -0
  60. package/src/lib/session/session-edge-cases.integration.test.ts +962 -0
  61. package/src/lib/session/session.integration.test.ts +853 -0
  62. package/src/lib/session/session.ts +5 -4
  63. package/src/lib/skills/skills.integration.test.ts +308 -0
  64. package/src/lib/state/manager.integration.test.ts +342 -0
  65. package/src/lib/subagent/define.ts +34 -47
  66. package/src/lib/subagent/handler.ts +9 -6
  67. package/src/lib/subagent/index.ts +4 -1
  68. package/src/lib/subagent/subagent.integration.test.ts +573 -0
  69. package/src/lib/subagent/types.ts +40 -10
  70. package/src/lib/subagent/workflow.ts +114 -0
  71. package/src/lib/thread/id.test.ts +50 -0
  72. package/src/lib/tool-router/auto-append-sandbox.integration.test.ts +344 -0
  73. package/src/lib/tool-router/router-edge-cases.integration.test.ts +623 -0
  74. package/src/lib/tool-router/router.integration.test.ts +699 -0
  75. package/src/lib/types.test.ts +29 -0
  76. package/src/lib/workflow.test.ts +131 -0
  77. package/src/lib/workflow.ts +45 -0
  78. package/src/workflow.ts +12 -2
package/dist/index.d.cts CHANGED
@@ -1,14 +1,14 @@
1
1
  import { BashArgs, FileEditArgs, GlobArgs, FileReadArgs, FileWriteArgs } from './workflow.cjs';
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-Dje1TdH6.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-Dje1TdH6.cjs';
2
+ export { AskUserQuestionArgs, GrepArgs, ReadSkillArgs, SubagentArgs, TaskCreateArgs, TaskGetArgs, TaskListArgs, TaskUpdateArgs, WorkflowInput, WorkflowSessionInput, applyVirtualTreeMutations, askUserQuestionTool, bashTool, createAgentStateManager, createAskUserQuestionHandler, createBashToolDescription, createReadSkillHandler, createReadSkillTool, createSession, createTaskCreateHandler, createTaskGetHandler, createTaskListHandler, createTaskUpdateHandler, createToolRouter, defineSubagent, defineSubagentWorkflow, defineTool, defineWorkflow, 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-Bh-BbfCp.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 SubagentDefinition, r as SubagentHandlerResponse, s as SubagentHooks, t as SubagentSessionInput, u as SubagentWorkflow, v as SubagentWorkflowInput, T as ThreadOps, Z as ZeitlichSession } from './types-Bh-BbfCp.cjs';
5
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, f as VirtualFileTree, h as VirtualSandboxState, i as filesWithMimeType, j as hasDirectory, k as hasFileWithMimeType } from './queries-DlJ3jE48.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
- 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-BWvIYK28.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-BWvIYK28.js';
2
+ export { AskUserQuestionArgs, GrepArgs, ReadSkillArgs, SubagentArgs, TaskCreateArgs, TaskGetArgs, TaskListArgs, TaskUpdateArgs, WorkflowInput, WorkflowSessionInput, applyVirtualTreeMutations, askUserQuestionTool, bashTool, createAgentStateManager, createAskUserQuestionHandler, createBashToolDescription, createReadSkillHandler, createReadSkillTool, createSession, createTaskCreateHandler, createTaskGetHandler, createTaskListHandler, createTaskUpdateHandler, createToolRouter, defineSubagent, defineSubagentWorkflow, defineTool, defineWorkflow, 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-NkiAxU4t.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 SubagentDefinition, r as SubagentHandlerResponse, s as SubagentHooks, t as SubagentSessionInput, u as SubagentWorkflow, v as SubagentWorkflowInput, T as ThreadOps, Z as ZeitlichSession } from './types-NkiAxU4t.js';
5
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, f as VirtualFileTree, h as VirtualSandboxState, i as filesWithMimeType, j as hasDirectory, k as hasFileWithMimeType } from './queries-BlC1I3DK.js';
12
12
  import '@temporalio/workflow';
13
13
  import 'zod';
14
14
  import '@temporalio/common';
package/dist/index.js CHANGED
@@ -332,15 +332,15 @@ function createSubagentHandler(subagents) {
332
332
  const childWorkflowId = `${args.subagent}-${getShortId()}`;
333
333
  const { sandboxId: parentSandboxId } = context;
334
334
  const inheritSandbox = config.sandbox !== "own" && !!parentSandboxId;
335
- const input = {
336
- prompt: args.prompt,
337
- ...config.context && { context: config.context },
338
- ...args.threadId && args.threadId !== null && config.allowThreadContinuation && { previousThreadId: args.threadId },
335
+ const workflowInput = {
336
+ ...args.threadId && args.threadId !== null && config.allowThreadContinuation && {
337
+ previousThreadId: args.threadId
338
+ },
339
339
  ...inheritSandbox && { sandboxId: parentSandboxId }
340
340
  };
341
341
  const childOpts = {
342
342
  workflowId: childWorkflowId,
343
- args: [input],
343
+ args: config.context === void 0 ? [args.prompt, workflowInput] : [args.prompt, workflowInput, config.context],
344
344
  taskQueue: config.taskQueue ?? parentTaskQueue
345
345
  };
346
346
  const {
@@ -555,9 +555,7 @@ var createSession = async ({
555
555
  const result = await sandboxOps.createSandbox({ id: threadId });
556
556
  sandboxId = result.sandboxId;
557
557
  if (result.stateUpdate) {
558
- stateManager.mergeUpdate(
559
- result.stateUpdate
560
- );
558
+ stateManager.mergeUpdate(result.stateUpdate);
561
559
  }
562
560
  }
563
561
  if (hooks.onSessionStart) {
@@ -642,6 +640,7 @@ var createSession = async ({
642
640
  );
643
641
  if (!conditionMet) {
644
642
  stateManager.cancel();
643
+ exitReason = "cancelled";
645
644
  await condition(() => false, "2s");
646
645
  break;
647
646
  }
@@ -695,6 +694,20 @@ function proxySandboxOps(options) {
695
694
  );
696
695
  }
697
696
 
697
+ // src/lib/workflow.ts
698
+ function defineWorkflow(fn) {
699
+ return async (input, workflowInput = {}) => {
700
+ const sessionInput = {
701
+ ...workflowInput.previousThreadId && {
702
+ threadId: workflowInput.previousThreadId,
703
+ continueThread: true
704
+ },
705
+ ...workflowInput.sandboxId && { sandboxId: workflowInput.sandboxId }
706
+ };
707
+ return fn(input, sessionInput);
708
+ };
709
+ }
710
+
698
711
  // src/lib/thread/manager.ts
699
712
  var THREAD_TTL_SECONDS = 60 * 60 * 24 * 90;
700
713
  var APPEND_IDEMPOTENT_SCRIPT = `
@@ -972,8 +985,40 @@ function withSandbox(manager, handler) {
972
985
  }
973
986
 
974
987
  // src/lib/subagent/define.ts
975
- function defineSubagent(config) {
976
- return config;
988
+ function defineSubagent(definition, overrides) {
989
+ return {
990
+ agentName: definition.agentName,
991
+ description: definition.description,
992
+ workflow: definition,
993
+ ...definition.resultSchema !== void 0 && {
994
+ resultSchema: definition.resultSchema
995
+ },
996
+ ...overrides
997
+ };
998
+ }
999
+
1000
+ // src/lib/subagent/workflow.ts
1001
+ function defineSubagentWorkflow(config, fn) {
1002
+ const workflow = async (prompt, workflowInput, context) => {
1003
+ const sessionInput = {
1004
+ agentName: config.name,
1005
+ ...workflowInput.previousThreadId && {
1006
+ threadId: workflowInput.previousThreadId,
1007
+ continueThread: true
1008
+ },
1009
+ ...workflowInput.sandboxId && { sandboxId: workflowInput.sandboxId }
1010
+ };
1011
+ return fn(prompt, sessionInput, context ?? {});
1012
+ };
1013
+ Object.defineProperty(workflow, "name", { value: config.name });
1014
+ return Object.assign(workflow, {
1015
+ agentName: config.name,
1016
+ description: config.description,
1017
+ ...config.resultSchema !== void 0 && {
1018
+ resultSchema: config.resultSchema
1019
+ }
1020
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
1021
+ });
977
1022
  }
978
1023
  var SandboxNotSupportedError = class extends ApplicationFailure$1 {
979
1024
  constructor(operation) {
@@ -1060,6 +1105,48 @@ function formatVirtualFileTree(entries, opts = {}) {
1060
1105
  return "/" + printNode(root, "", sort);
1061
1106
  }
1062
1107
 
1108
+ // src/adapters/sandbox/virtual/queries.ts
1109
+ function hasFileWithMimeType(stateManager, pattern) {
1110
+ const tree = stateManager.get("fileTree");
1111
+ const matchers = (Array.isArray(pattern) ? pattern : [pattern]).map(buildMatcher);
1112
+ return tree.some((entry) => {
1113
+ const meta = entry.metadata;
1114
+ const mime = meta?.mimeType;
1115
+ return typeof mime === "string" && matchers.some((m) => m(mime));
1116
+ });
1117
+ }
1118
+ function filesWithMimeType(stateManager, pattern) {
1119
+ const tree = stateManager.get("fileTree");
1120
+ const match = buildMatcher(pattern);
1121
+ return tree.filter((entry) => {
1122
+ const meta = entry.metadata;
1123
+ const mime = meta?.mimeType;
1124
+ return typeof mime === "string" && match(mime);
1125
+ });
1126
+ }
1127
+ function hasDirectory(stateManager, pattern) {
1128
+ const tree = stateManager.get("fileTree");
1129
+ const match = buildGlobMatcher(pattern);
1130
+ return tree.some((entry) => {
1131
+ const segments = entry.path.split("/").filter(Boolean);
1132
+ return segments.slice(0, -1).some(match);
1133
+ });
1134
+ }
1135
+ function buildMatcher(pattern) {
1136
+ if (pattern.endsWith("/*")) {
1137
+ const prefix = pattern.slice(0, -1);
1138
+ return (v) => v.startsWith(prefix);
1139
+ }
1140
+ return (v) => v === pattern;
1141
+ }
1142
+ function buildGlobMatcher(pattern) {
1143
+ if (!pattern.includes("*")) return (v) => v === pattern;
1144
+ const re = new RegExp(
1145
+ "^" + pattern.replace(/[.+^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*") + "$"
1146
+ );
1147
+ return (v) => re.test(v);
1148
+ }
1149
+
1063
1150
  // src/lib/skills/parse.ts
1064
1151
  function parseSkillFile(raw) {
1065
1152
  const trimmed = raw.replace(/^\uFEFF/, "");
@@ -1851,6 +1938,6 @@ var toTree = async (fs, opts = {}) => {
1851
1938
  return base + subtree;
1852
1939
  };
1853
1940
 
1854
- export { FileSystemSkillProvider, SandboxManager, SandboxNotFoundError, SandboxNotSupportedError, applyVirtualTreeMutations, askUserQuestionTool, bashHandler, bashTool, createAgentStateManager, createAskUserQuestionHandler, createBashToolDescription, createReadSkillHandler, createReadSkillTool, createRunAgentActivity, createSession, createTaskCreateHandler, createTaskGetHandler, createTaskListHandler, createTaskUpdateHandler, createThreadManager, createToolRouter, defineSubagent, defineTool, editHandler, editTool, formatVirtualFileTree, getShortId, globHandler, globTool, grepTool, hasNoOtherToolCalls, isTerminalStatus, parseSkillFile, proxyDefaultThreadOps, proxySandboxOps, queryParentWorkflowState, readFileHandler, readFileTool, taskCreateTool, taskGetTool, taskListTool, taskUpdateTool, toTree, withAutoAppend, withParentWorkflowState, withSandbox, writeFileHandler, writeFileTool };
1941
+ export { FileSystemSkillProvider, SandboxManager, SandboxNotFoundError, SandboxNotSupportedError, applyVirtualTreeMutations, askUserQuestionTool, bashHandler, bashTool, createAgentStateManager, createAskUserQuestionHandler, createBashToolDescription, createReadSkillHandler, createReadSkillTool, createRunAgentActivity, createSession, createTaskCreateHandler, createTaskGetHandler, createTaskListHandler, createTaskUpdateHandler, createThreadManager, createToolRouter, defineSubagent, defineSubagentWorkflow, defineTool, defineWorkflow, editHandler, editTool, filesWithMimeType, formatVirtualFileTree, getShortId, globHandler, globTool, grepTool, hasDirectory, hasFileWithMimeType, hasNoOtherToolCalls, isTerminalStatus, parseSkillFile, proxyDefaultThreadOps, proxySandboxOps, queryParentWorkflowState, readFileHandler, readFileTool, taskCreateTool, taskGetTool, taskListTool, taskUpdateTool, toTree, withAutoAppend, withParentWorkflowState, withSandbox, writeFileHandler, writeFileTool };
1855
1942
  //# sourceMappingURL=index.js.map
1856
1943
  //# sourceMappingURL=index.js.map