@ai-sdk/harness-deepagents 1.0.101 → 1.0.103

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.js CHANGED
@@ -22,7 +22,7 @@ import {
22
22
  warnCredentialBrokeringUnavailable,
23
23
  waitForBridgeReady,
24
24
  withBridgeToken,
25
- writeSkills as writeHarnessSkills
25
+ writeSkills
26
26
  } from "@ai-sdk/harness/utils";
27
27
  import {
28
28
  tool
@@ -219,7 +219,8 @@ var startMessageSchema = harnessV1BridgeStartBaseSchema.extend({
219
219
  skillsPaths: z.array(z.string()).optional(),
220
220
  skillsChanged: z.boolean().optional(),
221
221
  // Max LangGraph super-steps per turn (streamEvents recursionLimit).
222
- recursionLimit: z.number().optional()
222
+ recursionLimit: z.number().optional(),
223
+ headers: z.record(z.string(), z.string()).optional()
223
224
  });
224
225
  var inboundMessageSchema = z.discriminatedUnion("type", [
225
226
  startMessageSchema,
@@ -227,7 +228,7 @@ var inboundMessageSchema = z.discriminatedUnion("type", [
227
228
  ]);
228
229
 
229
230
  // src/version.ts
230
- var VERSION = true ? "1.0.101" : "0.0.0-test";
231
+ var VERSION = true ? "1.0.103" : "0.0.0-test";
231
232
 
232
233
  // src/deepagents-harness.ts
233
234
  var DEEPAGENTS_CLIENT_APP = `ai-sdk/harness-deepagents/${VERSION}`;
@@ -422,12 +423,13 @@ function createDeepAgents(settings = {}) {
422
423
  sandboxCredentialEnvironment,
423
424
  isResume: true,
424
425
  sandbox: toolSafeSandboxSession,
425
- homeSkillsRoot,
426
+ homeDir,
426
427
  skillsPaths,
427
428
  permissionMode,
428
429
  builtinToolFiltering: startOpts.builtinToolFiltering,
429
430
  recursionLimit: settings.recursionLimit,
430
- mcpServers: settings.mcpServers
431
+ mcpServers: settings.mcpServers,
432
+ headers: startOpts.headers
431
433
  });
432
434
  } catch {
433
435
  }
@@ -526,12 +528,13 @@ function createDeepAgents(settings = {}) {
526
528
  sandboxCredentialEnvironment,
527
529
  isResume,
528
530
  sandbox: toolSafeSandboxSession,
529
- homeSkillsRoot,
531
+ homeDir,
530
532
  skillsPaths,
531
533
  permissionMode,
532
534
  builtinToolFiltering: startOpts.builtinToolFiltering,
533
535
  recursionLimit: settings.recursionLimit,
534
- mcpServers: settings.mcpServers
536
+ mcpServers: settings.mcpServers,
537
+ headers: startOpts.headers
535
538
  });
536
539
  }
537
540
  };
@@ -582,23 +585,6 @@ async function resolveBridgeEndpoint({
582
585
  message: "The deepagents harness requires an explicit `portEndpoint` when using a basic sandbox session."
583
586
  });
584
587
  }
585
- async function writeSkills({
586
- sandbox,
587
- root,
588
- skills,
589
- abortSignal
590
- }) {
591
- return writeHarnessSkills({
592
- sandbox,
593
- rootDir: root,
594
- skills,
595
- abortSignal,
596
- skillNamePattern: /^[a-z0-9]([a-z0-9-]{0,62}[a-z0-9])?$/,
597
- invalidSkillNameMessage: ({ name }) => `Invalid deepagents skill name '${name}': must be lowercase alphanumeric with hyphens, 1-64 chars.`,
598
- filePathMode: "strip-leading-slashes",
599
- invalidSkillFilePathMessage: ({ skillName, filePath }) => `Invalid skill file path for '${skillName}': ${filePath}`
600
- });
601
- }
602
588
  function openWebSocket({
603
589
  url,
604
590
  headers
@@ -632,12 +618,13 @@ function createSession({
632
618
  sandboxCredentialEnvironment,
633
619
  isResume,
634
620
  sandbox,
635
- homeSkillsRoot,
621
+ homeDir,
636
622
  skillsPaths,
637
623
  permissionMode,
638
624
  builtinToolFiltering,
639
625
  recursionLimit,
640
- mcpServers
626
+ mcpServers,
627
+ headers
641
628
  }) {
642
629
  let stopped = false;
643
630
  const wireTurn = (turnOpts) => {
@@ -763,9 +750,14 @@ function createSession({
763
750
  }
764
751
  const skillWriteResult = await writeSkills({
765
752
  sandbox,
766
- root: homeSkillsRoot,
753
+ homePath: homeDir,
754
+ skillsDir: ".agents/skills",
767
755
  skills: promptOpts.skills,
768
- abortSignal: promptOpts.abortSignal
756
+ abortSignal: promptOpts.abortSignal,
757
+ skillNamePattern: /^[a-z0-9]([a-z0-9-]{0,62}[a-z0-9])?$/,
758
+ invalidSkillNameMessage: ({ name }) => `Invalid deepagents skill name '${name}': must be lowercase alphanumeric with hyphens, 1-64 chars.`,
759
+ filePathMode: "strip-leading-slashes",
760
+ invalidSkillFilePathMessage: ({ skillName, filePath }) => `Invalid skill file path for '${skillName}': ${filePath}`
769
761
  });
770
762
  const control = wireTurn({
771
763
  emit: promptOpts.emit,
@@ -789,7 +781,8 @@ function createSession({
789
781
  ...permissionMode ? { permissionMode } : {},
790
782
  ...builtinToolFiltering ? { builtinToolFiltering } : {},
791
783
  ...recursionLimit != null ? { recursionLimit } : {},
792
- ...mcpServers == null ? {} : { mcpServers }
784
+ ...mcpServers == null ? {} : { mcpServers },
785
+ ...headers == null ? {} : { headers }
793
786
  });
794
787
  return control;
795
788
  },
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/deepagents-harness.ts","../src/deepagents-bootstrap.ts","../src/deepagents-auth.ts","../src/deepagents-bridge-protocol.ts","../src/version.ts","../src/index.ts"],"sourcesContent":["import { posix } from 'node:path';\nimport {\n commonTool,\n HarnessCapabilityUnsupportedError,\n harnessV1DiagnosticFromBridgeFrame,\n type HarnessV1,\n type HarnessV1BuiltinTool,\n type HarnessV1BuiltinToolFiltering,\n type HarnessV1ContinueTurnState,\n type HarnessV1CredentialForwarding,\n type HarnessV1NetworkSandboxSession,\n type HarnessV1PermissionMode,\n type HarnessV1Prompt,\n type HarnessV1PromptControl,\n type HarnessV1PortEndpoint,\n type HarnessV1ResumeSessionState,\n type HarnessV1Session,\n type HarnessV1Skill,\n type HarnessV1StreamPart,\n} from '@ai-sdk/harness';\nimport {\n applyCredentialForwarding,\n createBridgeToken,\n createSandboxCredentialEnvironment,\n markBridgeStarting,\n createBridgeErrorHandler,\n createBridgeStartupError,\n drainBridgeProcessStream,\n forwardBridgeProcessStream,\n getRestrictedSandboxSession,\n resolveSandboxDefaultWorkingDirectory,\n resolveSandboxHomeDir,\n SandboxChannel,\n shellQuote,\n warnCredentialBrokeringUnavailable,\n waitForBridgeReady,\n withBridgeToken,\n writeSkills as writeHarnessSkills,\n type WriteSkillsResult,\n} from '@ai-sdk/harness/utils';\nimport {\n tool,\n type Experimental_SandboxProcess,\n type Experimental_SandboxSession as SandboxSession,\n} from '@ai-sdk/provider-utils';\nimport { WebSocket } from 'ws';\nimport { z } from 'zod/v4';\nimport {\n DEEPAGENTS_BOOTSTRAP_DIR as BOOTSTRAP_DIR,\n getDeepAgentsBootstrap,\n} from './deepagents-bootstrap';\nimport {\n createDeepAgentsRequestTransformations,\n DEEPAGENTS_CREDENTIAL_ENVIRONMENT_VARIABLES,\n resolveDeepAgentsAuthenticationMode,\n resolveDeepAgentsEnv,\n type DeepAgentsAuthenticationMode,\n} from './deepagents-auth';\nimport {\n outboundMessageSchema,\n type InboundMessage,\n type OutboundMessage,\n} from './deepagents-bridge-protocol';\nimport { VERSION } from './version';\n\ntype DeepAgentsChannel = SandboxChannel<OutboundMessage, InboundMessage>;\n\n/**\n * Value to use in User-Agent and `x-client-app` headers.\n */\nconst DEEPAGENTS_CLIENT_APP = `ai-sdk/harness-deepagents/${VERSION}`;\n\nexport type DeepAgentsThinkingConfig =\n | {\n readonly type: 'adaptive';\n readonly display?: 'summarized' | 'omitted';\n }\n | {\n readonly type: 'enabled';\n readonly budget_tokens: number;\n readonly display?: 'summarized' | 'omitted';\n }\n | {\n readonly type: 'disabled';\n };\n\n// Skills source subpath, written under $HOME (out of the work dir so it can't clash with code cloned into the work dir) and also discovered from <workDir> for repo-provided skills.\nconst SKILLS_SOURCE_PATH = '/.agents/skills';\n\nexport type DeepAgentsHarnessSettings = {\n readonly auth?: DeepAgentsAuthenticationMode;\n /**\n * Customizes each credential value before it is forwarded into a sandbox\n * process. This does not restrict which credentials the harness adapter can\n * discover, read, or otherwise access in the host process.\n */\n readonly credentialForwarding?: HarnessV1CredentialForwarding;\n /**\n * Model id for the DeepAgents runtime, e.g. `claude-sonnet-4` (converted to\n * `provider:model`).\n *\n * @deprecated Use `model` on `HarnessAgent` instead.\n */\n readonly model?: string;\n /**\n * Controls Anthropic extended thinking for the Deep Agents model. Unset\n * preserves the Deep Agents runtime default.\n */\n readonly thinking?: DeepAgentsThinkingConfig;\n /**\n * Controls how much effort Claude applies when adaptive thinking is enabled.\n * Unset uses the LangChain Anthropic client default.\n */\n readonly effort?: 'low' | 'medium' | 'high' | 'xhigh' | 'max';\n /** Bridge port override; defaults to the sandbox's first declared port. */\n readonly port?: number;\n /**\n * Override the host endpoint used to connect to the sandbox bridge. Required\n * together with `port` when using a basic sandbox session.\n */\n readonly portEndpoint?: HarnessV1PortEndpoint;\n /** Maximum milliseconds to wait for the bridge to advertise its port. Defaults to 120000. */\n readonly startupTimeoutMs?: number;\n /**\n * Creates the authentication token used by the sandbox bridge. Defaults to\n * a random 32-byte hexadecimal token.\n */\n readonly mintBridgeToken?: (sandboxId: string) => string;\n /**\n * Maximum LangGraph super-steps per turn before it errors.\n * When omitted, the Deep Agents default applies.\n */\n readonly recursionLimit?: number;\n /**\n * MCP server definitions keyed by server name. Each definition uses the\n * underlying runtime's native MCP server configuration format.\n */\n readonly mcpServers?: Record<string, unknown>;\n};\n\n// Every model-callable DeepAgents built-in, keyed by what the bridge emits (commonName ?? nativeName); all must be listed or AI SDK throws AI_NoSuchToolError.\nconst DEEPAGENTS_BUILTIN_TOOLS = {\n read: commonTool('read', {\n nativeName: 'read_file',\n toolUseKind: 'readonly',\n description: 'Read file contents',\n inputSchema: z.object({ file_path: z.string() }),\n }),\n write: commonTool('write', {\n nativeName: 'write_file',\n toolUseKind: 'edit',\n description: 'Create a file',\n inputSchema: z.object({ file_path: z.string(), content: z.string() }),\n }),\n edit: commonTool('edit', {\n nativeName: 'edit_file',\n toolUseKind: 'edit',\n description: 'Perform exact string replacements in a file',\n inputSchema: z.object({\n file_path: z.string(),\n old_string: z.string(),\n new_string: z.string(),\n }),\n }),\n bash: commonTool('bash', {\n nativeName: 'execute',\n toolUseKind: 'bash',\n description: 'Run a shell command',\n inputSchema: z.object({ command: z.string() }),\n }),\n grep: commonTool('grep', {\n nativeName: 'grep',\n toolUseKind: 'readonly',\n description: 'Search file contents',\n inputSchema: z.object({ pattern: z.string() }),\n }),\n glob: commonTool('glob', {\n nativeName: 'glob',\n toolUseKind: 'readonly',\n description: 'Find files matching a glob pattern',\n inputSchema: z.object({ pattern: z.string() }),\n }),\n // No common-name equivalent — keyed by native name.\n ls: tool({\n description: 'List files in a directory',\n inputSchema: z.object({ path: z.string().optional() }),\n }),\n task: tool({\n description: 'Spawn a subagent to handle a delegated task',\n inputSchema: z.object({\n description: z.string().optional(),\n subagent_type: z.string().optional(),\n }),\n }),\n write_todos: tool({\n description: 'Manage a structured todo list',\n inputSchema: z.object({ todos: z.array(z.unknown()).optional() }),\n }),\n} as const satisfies Record<string, HarnessV1BuiltinTool<any, any>>;\n\n// Live bridge coordinates returned by doDetach/doSuspendTurn so a later process can reattach.\nconst deepAgentsBridgeCoordsSchema = z.object({\n port: z.number(),\n token: z.string(),\n lastSeenEventId: z.number(),\n sandboxId: z.string().optional(),\n});\nconst deepAgentsResumeStateSchema = z.object({\n bridge: deepAgentsBridgeCoordsSchema.optional(),\n sandboxCredentialEnvironment: z.record(z.string(), z.string()).optional(),\n});\ntype DeepAgentsBridgeCoords = z.infer<typeof deepAgentsBridgeCoordsSchema>;\n\nexport function createDeepAgents(\n settings: DeepAgentsHarnessSettings = {},\n): HarnessV1<typeof DEEPAGENTS_BUILTIN_TOOLS> {\n return {\n specificationVersion: 'harness-v1',\n harnessId: 'deepagents',\n builtinTools: DEEPAGENTS_BUILTIN_TOOLS,\n // Built-in tool approvals are gated in-bridge via DeepAgents' interruptOn (HITL) middleware.\n supportsBuiltinToolApprovals: true,\n lifecycleStateSchema: deepAgentsResumeStateSchema,\n getBootstrap: getDeepAgentsBootstrap,\n doStart: async startOpts => {\n const permissionMode = startOpts.permissionMode;\n const sandboxSession = startOpts.sandboxSession;\n const toolSafeSandboxSession =\n getRestrictedSandboxSession(sandboxSession);\n const sandboxId = 'id' in sandboxSession ? sandboxSession.id : undefined;\n validateBasicSandboxSettings({\n sandboxSession,\n port: settings.port,\n portEndpoint: settings.portEndpoint,\n });\n if (settings.mintBridgeToken != null && sandboxId == null) {\n throw new HarnessCapabilityUnsupportedError({\n harnessId: 'deepagents',\n message:\n 'The deepagents harness cannot use `mintBridgeToken` with a sandbox session that does not expose an id.',\n });\n }\n const defaultWorkingDirectory =\n await resolveSandboxDefaultWorkingDirectory({\n sandboxSession,\n abortSignal: startOpts.abortSignal,\n });\n const lifecycleState = startOpts.continueFrom ?? startOpts.resumeFrom;\n const isResume = lifecycleState != null;\n const isContinue = startOpts.continueFrom != null;\n const resumeData =\n isResume && typeof lifecycleState?.data === 'object'\n ? (lifecycleState.data as {\n bridge?: DeepAgentsBridgeCoords;\n sandboxCredentialEnvironment?: Record<string, string>;\n })\n : undefined;\n const coords = resumeData?.bridge;\n const authenticationMode = resolveDeepAgentsAuthenticationMode({\n auth: settings.auth,\n });\n const resolvedAuthEnvironment = resolveDeepAgentsEnv({\n auth: settings.auth,\n });\n let sandboxAuthEnvironment = resolvedAuthEnvironment;\n let sandboxCredentialEnvironment: Record<string, string> | undefined;\n let credentialsBrokered = false;\n if (\n 'addRequestTransformations' in sandboxSession &&\n sandboxSession.addRequestTransformations != null\n ) {\n sandboxCredentialEnvironment =\n resumeData?.sandboxCredentialEnvironment ??\n (await createSandboxCredentialEnvironment({\n environment: resolvedAuthEnvironment,\n credentialEnvironmentVariables:\n DEEPAGENTS_CREDENTIAL_ENVIRONMENT_VARIABLES,\n credentialForwarding: settings.credentialForwarding,\n }));\n sandboxAuthEnvironment = {\n ...resolvedAuthEnvironment,\n ...sandboxCredentialEnvironment,\n };\n const requestTransformations = createDeepAgentsRequestTransformations({\n env: resolvedAuthEnvironment,\n sandboxEnv: sandboxAuthEnvironment,\n auth: authenticationMode,\n });\n if (requestTransformations.length > 0) {\n await sandboxSession.addRequestTransformations(\n requestTransformations,\n );\n }\n credentialsBrokered = true;\n }\n const bootstrapDir = posix.resolve(\n defaultWorkingDirectory,\n BOOTSTRAP_DIR,\n );\n\n const workDir = startOpts.sessionWorkDir;\n /*\n * Deep Agents discovers repository skills under the working directory.\n * Harness-provided skills use an absolute home-directory path listed\n * last, so they take precedence when names collide.\n */\n const homeDir = await resolveSandboxHomeDir({\n sandbox: toolSafeSandboxSession,\n abortSignal: startOpts.abortSignal,\n });\n const homeSkillsRoot = `${homeDir}${SKILLS_SOURCE_PATH}`;\n const skillsPaths = [`${workDir}${SKILLS_SOURCE_PATH}`, homeSkillsRoot];\n const sessionDataDir = `${defaultWorkingDirectory}/.agent-runs/${startOpts.sessionId}`;\n const bridgeStateDir = `${sessionDataDir}/bridge`;\n const timeoutMs = settings.startupTimeoutMs ?? 120_000;\n\n const report = startOpts.observability?.report;\n const onDiagnostic = report\n ? (frame: Parameters<typeof harnessV1DiagnosticFromBridgeFrame>[0]) =>\n report(\n harnessV1DiagnosticFromBridgeFrame(frame, {\n sessionId: startOpts.sessionId,\n timestamp: Date.now(),\n }),\n )\n : undefined;\n const onBridgeError = createBridgeErrorHandler({\n harnessId: 'deepagents',\n sessionId: startOpts.sessionId,\n });\n\n // Attach to the still-running bridge (continueFrom replays past the cursor); on failure fall through to a fresh spawn.\n if (coords) {\n try {\n const endpoint = await resolveBridgeEndpoint({\n sandboxSession,\n override: settings.portEndpoint,\n port: coords.port,\n });\n const attachEndpoint = withBridgeToken({\n endpoint,\n token: coords.token,\n });\n const attachChannel: DeepAgentsChannel = new SandboxChannel({\n connect: () => openWebSocket(attachEndpoint),\n outboundSchema: outboundMessageSchema,\n initialLastSeenEventId: coords.lastSeenEventId,\n onDiagnostic,\n onBridgeError,\n });\n await attachChannel.open(isContinue ? { resume: true } : undefined);\n return createSession({\n sessionId: startOpts.sessionId,\n channel: attachChannel,\n proc: undefined,\n model: settings.model,\n thinking: settings.thinking,\n effort: settings.effort,\n bridgePort: coords.port,\n bridgeToken: coords.token,\n sandboxId,\n sandboxCredentialEnvironment,\n isResume: true,\n sandbox: toolSafeSandboxSession,\n homeSkillsRoot,\n skillsPaths,\n permissionMode,\n builtinToolFiltering: startOpts.builtinToolFiltering,\n recursionLimit: settings.recursionLimit,\n mcpServers: settings.mcpServers,\n });\n } catch {\n // Bridge no longer reachable — recover by respawning below.\n }\n }\n\n const port = resolveBridgePort({\n sandboxSession,\n override: settings.port,\n });\n const token =\n settings.mintBridgeToken == null\n ? createBridgeToken()\n : settings.mintBridgeToken(sandboxId!);\n\n const forwardedAuthEnvironment = credentialsBrokered\n ? sandboxAuthEnvironment\n : await applyCredentialForwarding({\n environment: sandboxAuthEnvironment,\n credentialEnvironmentVariables:\n DEEPAGENTS_CREDENTIAL_ENVIRONMENT_VARIABLES,\n credentialForwarding: settings.credentialForwarding,\n });\n if (!credentialsBrokered) {\n warnCredentialBrokeringUnavailable({\n environment: resolvedAuthEnvironment,\n forwardedEnvironment: forwardedAuthEnvironment,\n credentialEnvironmentVariables:\n DEEPAGENTS_CREDENTIAL_ENVIRONMENT_VARIABLES,\n });\n }\n const env = {\n ...forwardedAuthEnvironment,\n AI_SDK_HARNESS_CLIENT_APP: DEEPAGENTS_CLIENT_APP,\n BRIDGE_CHANNEL_TOKEN: token,\n BRIDGE_WS_PORT: String(port),\n };\n\n await toolSafeSandboxSession.run({\n command: `mkdir -p ${shellQuote(workDir)} ${shellQuote(bridgeStateDir)}`,\n abortSignal: startOpts.abortSignal,\n });\n\n await markBridgeStarting({\n sandbox: toolSafeSandboxSession,\n bridgeStateDir,\n bridgeType: 'deepagents',\n abortSignal: startOpts.abortSignal,\n });\n\n const proc = await toolSafeSandboxSession.spawn({\n command: `node ${shellQuote(`${bootstrapDir}/bridge.mjs`)} --workdir ${shellQuote(workDir)} --bridge-state-dir ${shellQuote(bridgeStateDir)} --bootstrap-dir ${shellQuote(bootstrapDir)}${isResume ? ' --resume true' : ''}`,\n env,\n abortSignal: startOpts.abortSignal,\n });\n const stderrTail: string[] = [];\n const bridgeStderrDone = forwardBridgeProcessStream({\n stream: proc.stderr,\n streamName: 'stderr',\n source: 'deepagents',\n collectTail: stderrTail,\n });\n\n const { port: boundPort } = await waitForBridgeReady({\n proc,\n sandbox: toolSafeSandboxSession,\n bridgeStateDir,\n bridgeType: 'deepagents',\n timeoutMs,\n abortSignal: startOpts.abortSignal,\n createTimeoutError: ({ proc, stdoutTail }) =>\n createBridgeStartupError({\n message: 'deepagents bridge did not become ready in time.',\n proc,\n stdoutTail,\n stderrTail,\n stderrDone: bridgeStderrDone,\n }),\n createExitError: ({ proc, stdoutTail }) =>\n createBridgeStartupError({\n message: 'deepagents bridge exited before becoming ready.',\n proc,\n stdoutTail,\n stderrTail,\n stderrDone: bridgeStderrDone,\n }),\n });\n void drainBridgeProcessStream(proc.stdout);\n\n const endpoint = await resolveBridgeEndpoint({\n sandboxSession,\n override: settings.portEndpoint,\n port: boundPort,\n });\n const bridgeEndpoint = withBridgeToken({ endpoint, token });\n\n const channel: DeepAgentsChannel = new SandboxChannel({\n connect: () => openWebSocket(bridgeEndpoint),\n outboundSchema: outboundMessageSchema,\n onDiagnostic,\n onBridgeError,\n });\n await channel.open();\n\n return createSession({\n sessionId: startOpts.sessionId,\n channel,\n proc,\n model: settings.model,\n thinking: settings.thinking,\n effort: settings.effort,\n bridgePort: boundPort,\n bridgeToken: token,\n sandboxId,\n sandboxCredentialEnvironment,\n isResume,\n sandbox: toolSafeSandboxSession,\n homeSkillsRoot,\n skillsPaths,\n permissionMode,\n builtinToolFiltering: startOpts.builtinToolFiltering,\n recursionLimit: settings.recursionLimit,\n mcpServers: settings.mcpServers,\n });\n },\n };\n}\n\nfunction resolveBridgePort({\n sandboxSession,\n override,\n}: {\n sandboxSession: HarnessV1NetworkSandboxSession | SandboxSession;\n override: number | undefined;\n}): number {\n if (override !== undefined) return override;\n if ('ports' in sandboxSession && sandboxSession.ports.length > 0) {\n return sandboxSession.ports[0];\n }\n throw new HarnessCapabilityUnsupportedError({\n harnessId: 'deepagents',\n message:\n 'The deepagents harness needs a TCP port exposed by the sandbox. ' +\n 'Create the sandbox with `ports: [<port>]` or pass `createDeepAgents({ port })`.',\n });\n}\n\nfunction validateBasicSandboxSettings({\n sandboxSession,\n port,\n portEndpoint,\n}: {\n sandboxSession: HarnessV1NetworkSandboxSession | SandboxSession;\n port: number | undefined;\n portEndpoint: HarnessV1PortEndpoint | undefined;\n}): void {\n if ('getPortEndpoint' in sandboxSession) return;\n if (port == null) {\n throw new HarnessCapabilityUnsupportedError({\n harnessId: 'deepagents',\n message:\n 'The deepagents harness requires an explicit `port` when using a basic sandbox session.',\n });\n }\n if (portEndpoint == null) {\n throw new HarnessCapabilityUnsupportedError({\n harnessId: 'deepagents',\n message:\n 'The deepagents harness requires an explicit `portEndpoint` when using a basic sandbox session.',\n });\n }\n}\n\nasync function resolveBridgeEndpoint({\n sandboxSession,\n override,\n port,\n}: {\n sandboxSession: HarnessV1NetworkSandboxSession | SandboxSession;\n override: HarnessV1PortEndpoint | undefined;\n port: number;\n}): Promise<HarnessV1PortEndpoint> {\n if (override != null) return override;\n if ('getPortEndpoint' in sandboxSession) {\n return sandboxSession.getPortEndpoint({ port, protocol: 'ws' });\n }\n throw new HarnessCapabilityUnsupportedError({\n harnessId: 'deepagents',\n message:\n 'The deepagents harness requires an explicit `portEndpoint` when using a basic sandbox session.',\n });\n}\n\n// Materialize each skill as a native deepagents `<name>/SKILL.md` folder (+ attached files) under the given root, so skills load on demand and file references resolve.\nasync function writeSkills({\n sandbox,\n root,\n skills,\n abortSignal,\n}: {\n sandbox: SandboxSession;\n root: string;\n skills: ReadonlyArray<HarnessV1Skill>;\n abortSignal?: AbortSignal;\n}): Promise<WriteSkillsResult> {\n /*\n * DeepAgents requires each `SKILL.md` frontmatter name to match the parent\n * directory name, so keep the stricter lowercase skill-name policy here.\n */\n return writeHarnessSkills({\n sandbox,\n rootDir: root,\n skills,\n abortSignal,\n skillNamePattern: /^[a-z0-9]([a-z0-9-]{0,62}[a-z0-9])?$/,\n invalidSkillNameMessage: ({ name }) =>\n `Invalid deepagents skill name '${name}': must be lowercase alphanumeric with hyphens, 1-64 chars.`,\n filePathMode: 'strip-leading-slashes',\n invalidSkillFilePathMessage: ({ skillName, filePath }) =>\n `Invalid skill file path for '${skillName}': ${filePath}`,\n });\n}\n\nfunction openWebSocket({\n url,\n headers,\n}: HarnessV1PortEndpoint): Promise<WebSocket> {\n return new Promise((resolve, reject) => {\n const ws = new WebSocket(url, {\n headers: headers == null ? undefined : { ...headers },\n });\n const onOpen = () => {\n ws.off('error', onError);\n resolve(ws);\n };\n const onError = (err: Error) => {\n ws.off('open', onOpen);\n reject(err);\n };\n ws.once('open', onOpen);\n ws.once('error', onError);\n });\n}\n\nfunction createSession({\n sessionId,\n channel,\n proc,\n model,\n thinking,\n effort,\n bridgePort,\n bridgeToken,\n sandboxId,\n sandboxCredentialEnvironment,\n isResume,\n sandbox,\n homeSkillsRoot,\n skillsPaths,\n permissionMode,\n builtinToolFiltering,\n recursionLimit,\n mcpServers,\n}: {\n sessionId: string;\n channel: DeepAgentsChannel;\n // Undefined on attach — the live bridge was spawned by another process.\n proc: Experimental_SandboxProcess | undefined;\n model: string | undefined;\n thinking: DeepAgentsThinkingConfig | undefined;\n effort: 'low' | 'medium' | 'high' | 'xhigh' | 'max' | undefined;\n bridgePort: number;\n bridgeToken: string;\n sandboxId: string | undefined;\n sandboxCredentialEnvironment: Record<string, string> | undefined;\n isResume: boolean;\n sandbox: SandboxSession;\n homeSkillsRoot: string;\n skillsPaths?: string[];\n permissionMode?: HarnessV1PermissionMode;\n builtinToolFiltering?: HarnessV1BuiltinToolFiltering;\n recursionLimit?: number;\n mcpServers?: Record<string, unknown>;\n}): HarnessV1Session {\n let stopped = false;\n\n const wireTurn = (turnOpts: {\n emit: (event: HarnessV1StreamPart) => void;\n abortSignal?: AbortSignal;\n }): HarnessV1PromptControl => {\n let pendingResolve: (() => void) | undefined;\n let pendingReject: ((err: unknown) => void) | undefined;\n const done = new Promise<void>((resolve, reject) => {\n pendingResolve = resolve;\n pendingReject = reject;\n });\n\n const unsubs: Array<() => void> = [];\n const forward = (event: HarnessV1StreamPart) => {\n try {\n turnOpts.emit(event);\n } catch {}\n };\n\n const eventTypes = [\n 'stream-start',\n 'text-start',\n 'text-delta',\n 'text-end',\n 'reasoning-start',\n 'reasoning-delta',\n 'reasoning-end',\n 'tool-call',\n 'tool-approval-request',\n 'tool-result',\n 'file-change',\n 'finish-step',\n 'raw',\n ] as const;\n let isSettled = false;\n const settleSuccess = () => {\n if (isSettled) return;\n isSettled = true;\n for (const u of unsubs) u();\n pendingResolve!();\n };\n const settleError = (err: unknown) => {\n if (isSettled) return;\n isSettled = true;\n for (const u of unsubs) u();\n pendingReject!(err);\n };\n\n for (const type of eventTypes) {\n unsubs.push(channel.on(type, msg => forward(msg)));\n }\n unsubs.push(\n channel.on('finish', msg => {\n forward(msg);\n settleSuccess();\n }),\n );\n unsubs.push(\n channel.on('error', msg => {\n forward(msg);\n settleError(msg.error);\n }),\n );\n\n // A `'suspended'` close is a graceful slice-boundary freeze (suspend/detach keep the bridge alive for continuation); end the turn cleanly. Any other close is an unexpected bridge failure.\n const onClose = (_code: number, reason: string) => {\n if (isSettled) return;\n if (reason === 'suspended') {\n settleSuccess();\n return;\n }\n settleError(\n new Error('deepagents bridge closed before the turn finished.'),\n );\n };\n channel.onClose(onClose);\n\n const onAbort = () => {\n if (isSettled) return;\n try {\n channel.send({ type: 'abort' });\n } catch {}\n settleError(\n turnOpts.abortSignal?.reason ??\n new DOMException('Aborted', 'AbortError'),\n );\n };\n if (turnOpts.abortSignal) {\n if (turnOpts.abortSignal.aborted) {\n onAbort();\n } else {\n turnOpts.abortSignal.addEventListener('abort', onAbort, { once: true });\n }\n }\n\n return {\n submitToolResult: async input => {\n channel.send({\n type: 'tool-result',\n toolCallId: input.toolCallId,\n output: input.output,\n isError: input.isError,\n });\n },\n submitToolApproval: async input => {\n channel.send({\n type: 'tool-approval-response',\n approvalId: input.approvalId,\n approved: input.approved,\n ...(input.reason != null ? { reason: input.reason } : {}),\n });\n },\n done,\n };\n };\n\n const unsupported = (capability: string): never => {\n throw new HarnessCapabilityUnsupportedError({\n harnessId: 'deepagents',\n message: `Harness 'deepagents' does not support ${capability} yet.`,\n });\n };\n\n return {\n sessionId,\n isResume,\n doPromptTurn: async promptOpts => {\n if (\n promptOpts.responseFormat?.type === 'json' &&\n promptOpts.responseFormat.schema == null\n ) {\n throw new HarnessCapabilityUnsupportedError({\n message:\n \"Harness 'deepagents' requires a JSON schema for structured output.\",\n harnessId: 'deepagents',\n });\n }\n const skillWriteResult = await writeSkills({\n sandbox,\n root: homeSkillsRoot,\n skills: promptOpts.skills,\n abortSignal: promptOpts.abortSignal,\n });\n const control = wireTurn({\n emit: promptOpts.emit,\n abortSignal: promptOpts.abortSignal,\n });\n\n channel.send({\n type: 'start',\n prompt: extractUserText(promptOpts.prompt),\n ...(promptOpts.instructions\n ? { instructions: promptOpts.instructions }\n : {}),\n tools: (promptOpts.tools ?? []).map(t => ({\n name: t.name,\n description: t.description,\n inputSchema: t.inputSchema,\n })),\n ...(promptOpts.responseFormat == null\n ? {}\n : { responseFormat: promptOpts.responseFormat }),\n ...((promptOpts.model ?? model)\n ? { model: promptOpts.model ?? model }\n : {}),\n ...(thinking ? { thinking } : {}),\n ...(effort ? { effort } : {}),\n ...(skillsPaths?.length ? { skillsPaths } : {}),\n skillsChanged: skillWriteResult.changed,\n ...(permissionMode ? { permissionMode } : {}),\n ...(builtinToolFiltering ? { builtinToolFiltering } : {}),\n ...(recursionLimit != null ? { recursionLimit } : {}),\n ...(mcpServers == null ? {} : { mcpServers }),\n });\n\n return control;\n },\n doContinueTurn: async continueOpts => {\n if (\n continueOpts.responseFormat?.type === 'json' &&\n continueOpts.responseFormat.schema == null\n ) {\n throw new HarnessCapabilityUnsupportedError({\n message:\n \"Harness 'deepagents' requires a JSON schema for structured output.\",\n harnessId: 'deepagents',\n });\n }\n // Attach/replay: doStart opened with `{ resume: true }` so the bridge replays past the cursor; no `start` is sent (that would clear the replay log).\n return wireTurn({\n emit: continueOpts.emit,\n abortSignal: continueOpts.abortSignal,\n });\n },\n doSuspendTurn: async () => {\n if (stopped) {\n throw new Error(\n `deepagents session ${sessionId} is stopped; cannot suspend.`,\n );\n }\n stopped = true;\n // Freeze the active turn at the cursor, leaving the bridge running so the next slice replays the tail.\n const lastSeenEventId = await channel.suspend();\n const payload: HarnessV1ContinueTurnState = {\n type: 'continue-turn',\n harnessId: 'deepagents',\n specificationVersion: 'harness-v1',\n data: {\n ...(sandboxCredentialEnvironment == null\n ? {}\n : { sandboxCredentialEnvironment }),\n bridge: {\n port: bridgePort,\n token: bridgeToken,\n lastSeenEventId,\n ...(sandboxId == null ? {} : { sandboxId }),\n },\n },\n };\n return payload;\n },\n doDetach: async () => {\n if (stopped) {\n throw new Error(\n `deepagents session ${sessionId} is already stopped; cannot detach.`,\n );\n }\n stopped = true;\n // Park between turns: close the host socket but leave the bridge running for a later reattach via these coords.\n const lastSeenEventId = await channel.suspend();\n const payload: HarnessV1ResumeSessionState = {\n type: 'resume-session',\n harnessId: 'deepagents',\n specificationVersion: 'harness-v1',\n data: {\n ...(sandboxCredentialEnvironment == null\n ? {}\n : { sandboxCredentialEnvironment }),\n bridge: {\n port: bridgePort,\n token: bridgeToken,\n lastSeenEventId,\n ...(sandboxId == null ? {} : { sandboxId }),\n },\n },\n };\n return payload;\n },\n doCompact: async () => unsupported('manual compaction'),\n doStop: async () => {\n if (stopped) {\n throw new Error(\n `deepagents session ${sessionId} is already stopped; cannot stop.`,\n );\n }\n stopped = true;\n await teardown({ channel, proc, operation: 'stop' });\n const payload: HarnessV1ResumeSessionState = {\n type: 'resume-session',\n harnessId: 'deepagents',\n specificationVersion: 'harness-v1',\n data:\n sandboxCredentialEnvironment == null\n ? {}\n : { sandboxCredentialEnvironment },\n };\n return payload;\n },\n doDestroy: async () => {\n if (stopped) return;\n stopped = true;\n await teardown({ channel, proc, operation: 'destroy' });\n },\n };\n}\n\nasync function teardown({\n channel,\n proc,\n operation,\n}: {\n channel: DeepAgentsChannel;\n proc: Experimental_SandboxProcess | undefined;\n operation: 'stop' | 'destroy';\n}): Promise<void> {\n channel.beginClose();\n try {\n if (!channel.isClosed()) {\n channel.send({ type: operation });\n }\n } catch {}\n let stopTimer: ReturnType<typeof setTimeout> | undefined;\n try {\n if (proc) {\n await Promise.race([\n proc.wait(),\n new Promise<void>(resolve => {\n stopTimer = setTimeout(resolve, 5000);\n stopTimer.unref?.();\n }),\n ]);\n }\n } finally {\n if (stopTimer) clearTimeout(stopTimer);\n try {\n await proc?.kill();\n } catch {}\n channel.close();\n }\n}\n\n// Reduce the prompt to plain user text; non-text parts are unsupported.\nfunction extractUserText(prompt: HarnessV1Prompt): string {\n if (typeof prompt === 'string') return prompt;\n const { content } = prompt;\n if (typeof content === 'string') return content;\n const parts: string[] = [];\n for (const part of content) {\n if (part.type !== 'text') {\n throw new HarnessCapabilityUnsupportedError({\n harnessId: 'deepagents',\n message: `The deepagents harness does not yet support user message parts of type '${part.type}'. Pass a string or a user message whose content contains only text parts.`,\n });\n }\n parts.push(part.text);\n }\n return parts.join('\\n\\n');\n}\n","import type { HarnessV1Bootstrap } from '@ai-sdk/harness';\nimport { createReadBridgeAsset } from '@ai-sdk/harness/utils';\n\nconst readBridgeAsset = createReadBridgeAsset({\n resolveAssetUrl: name => new URL(`./bridge/${name}`, import.meta.url),\n});\n\n/*\n * Bootstrap is derived state stored under the sandbox's default working\n * directory so snapshot-capable providers preserve its installation and\n * recipe marker without requiring root filesystem access.\n */\nexport const DEEPAGENTS_BOOTSTRAP_DIR = '.harness-bootstrap/deepagents';\n\n/*\n * Pinned ripgrep release and per-architecture tarball checksums are verified\n * before installation.\n */\nconst RIPGREP_VERSION = '14.1.1';\nconst RIPGREP_SHA256_X64 =\n '4cf9f2741e6c465ffdb7c26f38056a59e2a2544b51f7cc128ef28337eeae4d8e';\nconst RIPGREP_SHA256_ARM =\n 'c827481c4ff4ea10c9dc7a4022c8de5db34a5737cb74484d62eb94a95841ab2f';\n\nlet cachedBootstrap: HarnessV1Bootstrap | undefined;\n\nexport async function getDeepAgentsBootstrap(): Promise<HarnessV1Bootstrap> {\n if (cachedBootstrap != null) return cachedBootstrap;\n const [bridge, pkg, lock] = await Promise.all([\n readBridgeAsset('index.mjs'),\n readBridgeAsset('package.json'),\n readBridgeAsset('pnpm-lock.yaml'),\n ]);\n cachedBootstrap = {\n harnessId: 'deepagents',\n bootstrapDir: DEEPAGENTS_BOOTSTRAP_DIR,\n files: [\n { path: `${DEEPAGENTS_BOOTSTRAP_DIR}/bridge.mjs`, content: bridge },\n { path: `${DEEPAGENTS_BOOTSTRAP_DIR}/package.json`, content: pkg },\n { path: `${DEEPAGENTS_BOOTSTRAP_DIR}/pnpm-lock.yaml`, content: lock },\n ],\n commands: [\n { command: installRipgrepCommand() },\n {\n command: 'pnpm install --frozen-lockfile --store-dir .pnpm-store',\n },\n ],\n };\n return cachedBootstrap;\n}\n\n/*\n * DeepAgents' grep shells out to `rg`. Without it, the fallback reads the\n * entire workdir, including node_modules, into memory and can run out of\n * memory. The checksum-verified installation is skipped when `rg` exists.\n */\nfunction installRipgrepCommand(): string {\n const v = RIPGREP_VERSION;\n return [\n 'command -v rg >/dev/null 2>&1 || {',\n 'case \"$(uname -m)\" in',\n `aarch64) a=aarch64-unknown-linux-gnu; sha=${RIPGREP_SHA256_ARM} ;;`,\n `*) a=x86_64-unknown-linux-musl; sha=${RIPGREP_SHA256_X64} ;;`,\n 'esac;',\n `f=/tmp/ripgrep-${v}.tar.gz;`,\n `curl -fsSL \"https://github.com/BurntSushi/ripgrep/releases/download/${v}/ripgrep-${v}-$a.tar.gz\" -o \"$f\"`,\n '&& echo \"$sha $f\" | sha256sum -c -',\n '&& tar xzf \"$f\" -C /tmp',\n `&& mv \"/tmp/ripgrep-${v}-$a/rg\" /usr/local/bin/rg && chmod +x /usr/local/bin/rg;`,\n '}',\n ].join(' ');\n}\n","import type {\n HarnessV1Authentication,\n HarnessV1RequestTransformation,\n HarnessV1RequestTransformationSources,\n} from '@ai-sdk/harness';\nimport {\n createCredentialRequestTransformation,\n getAiGatewayAuthFromEnv,\n isHarnessAuthenticationEnvironment,\n} from '@ai-sdk/harness/utils';\n\nexport const DEEPAGENTS_CREDENTIAL_ENVIRONMENT_VARIABLES = [\n 'AI_GATEWAY_API_KEY',\n 'ANTHROPIC_API_KEY',\n 'ANTHROPIC_AUTH_TOKEN',\n] as const;\n\nexport function createDeepAgentsRequestTransformations({\n env: environment,\n sandboxEnv: sandboxEnvironment,\n auth: authenticationMode,\n}: HarnessV1RequestTransformationSources<DeepAgentsResolvedAuthenticationMode>): HarnessV1RequestTransformation[] {\n const matchUrl =\n authenticationMode === 'ai-gateway'\n ? environment.ANTHROPIC_BASE_URL\n : (environment.ANTHROPIC_BASE_URL ?? 'https://api.anthropic.com');\n const transformations: HarnessV1RequestTransformation[] = [];\n\n if (\n environment.ANTHROPIC_API_KEY != null &&\n sandboxEnvironment.ANTHROPIC_API_KEY != null\n ) {\n transformations.push(\n createCredentialRequestTransformation({\n matchUrl,\n matchHeaders: {\n 'x-api-key': sandboxEnvironment.ANTHROPIC_API_KEY,\n },\n transformHeaders: {\n 'x-api-key': environment.ANTHROPIC_API_KEY,\n },\n }),\n );\n }\n\n if (\n environment.ANTHROPIC_AUTH_TOKEN != null &&\n sandboxEnvironment.ANTHROPIC_AUTH_TOKEN != null\n ) {\n transformations.push(\n createCredentialRequestTransformation({\n matchUrl,\n matchHeaders: {\n Authorization: `Bearer ${sandboxEnvironment.ANTHROPIC_AUTH_TOKEN}`,\n },\n transformHeaders: {\n Authorization: `Bearer ${environment.ANTHROPIC_AUTH_TOKEN}`,\n },\n }),\n );\n }\n\n return transformations;\n}\n\nexport type DeepAgentsResolvedAuthenticationMode = 'anthropic' | 'ai-gateway';\n\nexport type DeepAgentsAuthenticationMode = HarnessV1Authentication<'anthropic'>;\n\n// DeepAgents always drives the Anthropic client. Non-Anthropic models reach it\n// through AI Gateway's Anthropic-compatible endpoint, which translates to any\n// model (Gemini, OpenAI, etc.), tool calls included.\nexport function resolveDeepAgentsEnv({\n auth,\n processEnv = process.env,\n}: {\n auth?: DeepAgentsAuthenticationMode;\n processEnv?: Record<string, string | undefined>;\n}): Record<string, string> {\n const suppliedEnvironment = isHarnessAuthenticationEnvironment(auth);\n const authenticationEnvironment = suppliedEnvironment ? auth : processEnv;\n\n if (auth === 'anthropic') {\n return pickAnthropic({ processEnv: authenticationEnvironment });\n }\n\n const gatewayAuthFromEnv = getAiGatewayAuthFromEnv({\n env: authenticationEnvironment,\n });\n if (auth === 'ai-gateway' || gatewayAuthFromEnv.apiKey) {\n return pickGateway({ gatewayAuthFromEnv });\n }\n\n return pickAnthropic({ processEnv: authenticationEnvironment });\n}\n\nexport function resolveDeepAgentsAuthenticationMode({\n auth,\n processEnv = process.env,\n}: {\n auth?: DeepAgentsAuthenticationMode;\n processEnv?: Record<string, string | undefined>;\n}): DeepAgentsResolvedAuthenticationMode {\n if (isHarnessAuthenticationEnvironment(auth)) {\n return getAiGatewayAuthFromEnv({ env: auth }).apiKey\n ? 'ai-gateway'\n : 'anthropic';\n }\n if (auth === 'anthropic') {\n return 'anthropic';\n }\n if (auth === 'ai-gateway') {\n return 'ai-gateway';\n }\n return getAiGatewayAuthFromEnv({ env: processEnv }).apiKey\n ? 'ai-gateway'\n : 'anthropic';\n}\n\nfunction pickAnthropic({\n processEnv,\n}: {\n processEnv: Record<string, string | undefined>;\n}): Record<string, string> {\n const env: Record<string, string> = {};\n const apiKey = processEnv.ANTHROPIC_API_KEY;\n if (apiKey) env.ANTHROPIC_API_KEY = apiKey;\n const authToken = processEnv.ANTHROPIC_AUTH_TOKEN;\n if (authToken) env.ANTHROPIC_AUTH_TOKEN = authToken;\n const baseUrl = processEnv.ANTHROPIC_BASE_URL;\n if (baseUrl) env.ANTHROPIC_BASE_URL = baseUrl;\n return env;\n}\n\nfunction pickGateway({\n gatewayAuthFromEnv,\n}: {\n gatewayAuthFromEnv: ReturnType<typeof getAiGatewayAuthFromEnv>;\n}): Record<string, string> {\n const apiKey = gatewayAuthFromEnv.apiKey;\n // The Anthropic SDK appends `/v1/messages`, so the gateway base stays at its root.\n const baseUrl = gatewayAuthFromEnv.baseUrl.replace(/\\/+$/, '');\n const env: Record<string, string> = {};\n if (apiKey) {\n env.AI_GATEWAY_API_KEY = apiKey;\n env.ANTHROPIC_API_KEY = apiKey;\n }\n env.ANTHROPIC_BASE_URL = baseUrl;\n return env;\n}\n","import {\n harnessV1BridgeInboundCommandSchemas,\n harnessV1BridgeOutboundMessageSchema,\n harnessV1BridgeReadySchema,\n harnessV1BridgeStartBaseSchema,\n} from '@ai-sdk/harness';\nimport { z } from 'zod/v4';\n\n// Deep Agents bridge wire protocol; only the `start` payload is adapter-specific.\nexport const outboundMessageSchema = harnessV1BridgeOutboundMessageSchema;\nexport type OutboundMessage = z.infer<typeof outboundMessageSchema>;\n\nconst thinkingSchema = z.discriminatedUnion('type', [\n z.object({\n type: z.literal('adaptive'),\n display: z.enum(['summarized', 'omitted']).optional(),\n }),\n z.object({\n type: z.literal('enabled'),\n budget_tokens: z.number(),\n display: z.enum(['summarized', 'omitted']).optional(),\n }),\n z.object({ type: z.literal('disabled') }),\n]);\n\nexport const startMessageSchema = harnessV1BridgeStartBaseSchema.extend({\n mcpServers: z.record(z.string(), z.unknown()).optional(),\n /*\n * Appended to Deep Agents's native system prompt when the bridge constructs\n * the session's agent.\n */\n instructions: z.string().optional(),\n thinking: thinkingSchema.optional(),\n effort: z.enum(['low', 'medium', 'high', 'xhigh', 'max']).optional(),\n // In-backend skills source dirs ($HOME and <workDir>), passed to createDeepAgent({ skills }).\n skillsPaths: z.array(z.string()).optional(),\n skillsChanged: z.boolean().optional(),\n // Max LangGraph super-steps per turn (streamEvents recursionLimit).\n recursionLimit: z.number().optional(),\n});\n\nexport type StartMessage = z.infer<typeof startMessageSchema>;\n\nexport const inboundMessageSchema = z.discriminatedUnion('type', [\n startMessageSchema,\n ...harnessV1BridgeInboundCommandSchemas,\n]);\nexport type InboundMessage = z.infer<typeof inboundMessageSchema>;\n\nexport const bridgeReadySchema = harnessV1BridgeReadySchema;\nexport type BridgeReady = z.infer<typeof bridgeReadySchema>;\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n","import { createDeepAgents } from './deepagents-harness';\n\n/** Default `deepagents` harness instance; equivalent to `createDeepAgents()`. */\nexport const deepAgents = createDeepAgents();\n\nexport { createDeepAgents } from './deepagents-harness';\nexport { VERSION } from './version';\nexport type {\n DeepAgentsHarnessSettings,\n DeepAgentsThinkingConfig,\n} from './deepagents-harness';\nexport type { DeepAgentsAuthenticationMode } from './deepagents-auth';\n"],"mappings":";AAAA,SAAS,aAAa;AACtB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAeK;AACP;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,OAEV;AACP;AAAA,EACE;AAAA,OAGK;AACP,SAAS,iBAAiB;AAC1B,SAAS,KAAAA,UAAS;;;AC7ClB,SAAS,6BAA6B;AAEtC,IAAM,kBAAkB,sBAAsB;AAAA,EAC5C,iBAAiB,UAAQ,IAAI,IAAI,YAAY,IAAI,IAAI,YAAY,GAAG;AACtE,CAAC;AAOM,IAAM,2BAA2B;AAMxC,IAAM,kBAAkB;AACxB,IAAM,qBACJ;AACF,IAAM,qBACJ;AAEF,IAAI;AAEJ,eAAsB,yBAAsD;AAC1E,MAAI,mBAAmB,KAAM,QAAO;AACpC,QAAM,CAAC,QAAQ,KAAK,IAAI,IAAI,MAAM,QAAQ,IAAI;AAAA,IAC5C,gBAAgB,WAAW;AAAA,IAC3B,gBAAgB,cAAc;AAAA,IAC9B,gBAAgB,gBAAgB;AAAA,EAClC,CAAC;AACD,oBAAkB;AAAA,IAChB,WAAW;AAAA,IACX,cAAc;AAAA,IACd,OAAO;AAAA,MACL,EAAE,MAAM,GAAG,wBAAwB,eAAe,SAAS,OAAO;AAAA,MAClE,EAAE,MAAM,GAAG,wBAAwB,iBAAiB,SAAS,IAAI;AAAA,MACjE,EAAE,MAAM,GAAG,wBAAwB,mBAAmB,SAAS,KAAK;AAAA,IACtE;AAAA,IACA,UAAU;AAAA,MACR,EAAE,SAAS,sBAAsB,EAAE;AAAA,MACnC;AAAA,QACE,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAOA,SAAS,wBAAgC;AACvC,QAAM,IAAI;AACV,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,6CAA6C,kBAAkB;AAAA,IAC/D,uCAAuC,kBAAkB;AAAA,IACzD;AAAA,IACA,kBAAkB,CAAC;AAAA,IACnB,uEAAuE,CAAC,YAAY,CAAC;AAAA,IACrF;AAAA,IACA;AAAA,IACA,uBAAuB,CAAC;AAAA,IACxB;AAAA,EACF,EAAE,KAAK,GAAG;AACZ;;;AClEA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEA,IAAM,8CAA8C;AAAA,EACzD;AAAA,EACA;AAAA,EACA;AACF;AAEO,SAAS,uCAAuC;AAAA,EACrD,KAAK;AAAA,EACL,YAAY;AAAA,EACZ,MAAM;AACR,GAAkH;AAChH,QAAM,WACJ,uBAAuB,eACnB,YAAY,qBACX,YAAY,sBAAsB;AACzC,QAAM,kBAAoD,CAAC;AAE3D,MACE,YAAY,qBAAqB,QACjC,mBAAmB,qBAAqB,MACxC;AACA,oBAAgB;AAAA,MACd,sCAAsC;AAAA,QACpC;AAAA,QACA,cAAc;AAAA,UACZ,aAAa,mBAAmB;AAAA,QAClC;AAAA,QACA,kBAAkB;AAAA,UAChB,aAAa,YAAY;AAAA,QAC3B;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MACE,YAAY,wBAAwB,QACpC,mBAAmB,wBAAwB,MAC3C;AACA,oBAAgB;AAAA,MACd,sCAAsC;AAAA,QACpC;AAAA,QACA,cAAc;AAAA,UACZ,eAAe,UAAU,mBAAmB,oBAAoB;AAAA,QAClE;AAAA,QACA,kBAAkB;AAAA,UAChB,eAAe,UAAU,YAAY,oBAAoB;AAAA,QAC3D;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO;AACT;AASO,SAAS,qBAAqB;AAAA,EACnC;AAAA,EACA,aAAa,QAAQ;AACvB,GAG2B;AACzB,QAAM,sBAAsB,mCAAmC,IAAI;AACnE,QAAM,4BAA4B,sBAAsB,OAAO;AAE/D,MAAI,SAAS,aAAa;AACxB,WAAO,cAAc,EAAE,YAAY,0BAA0B,CAAC;AAAA,EAChE;AAEA,QAAM,qBAAqB,wBAAwB;AAAA,IACjD,KAAK;AAAA,EACP,CAAC;AACD,MAAI,SAAS,gBAAgB,mBAAmB,QAAQ;AACtD,WAAO,YAAY,EAAE,mBAAmB,CAAC;AAAA,EAC3C;AAEA,SAAO,cAAc,EAAE,YAAY,0BAA0B,CAAC;AAChE;AAEO,SAAS,oCAAoC;AAAA,EAClD;AAAA,EACA,aAAa,QAAQ;AACvB,GAGyC;AACvC,MAAI,mCAAmC,IAAI,GAAG;AAC5C,WAAO,wBAAwB,EAAE,KAAK,KAAK,CAAC,EAAE,SAC1C,eACA;AAAA,EACN;AACA,MAAI,SAAS,aAAa;AACxB,WAAO;AAAA,EACT;AACA,MAAI,SAAS,cAAc;AACzB,WAAO;AAAA,EACT;AACA,SAAO,wBAAwB,EAAE,KAAK,WAAW,CAAC,EAAE,SAChD,eACA;AACN;AAEA,SAAS,cAAc;AAAA,EACrB;AACF,GAE2B;AACzB,QAAM,MAA8B,CAAC;AACrC,QAAM,SAAS,WAAW;AAC1B,MAAI,OAAQ,KAAI,oBAAoB;AACpC,QAAM,YAAY,WAAW;AAC7B,MAAI,UAAW,KAAI,uBAAuB;AAC1C,QAAM,UAAU,WAAW;AAC3B,MAAI,QAAS,KAAI,qBAAqB;AACtC,SAAO;AACT;AAEA,SAAS,YAAY;AAAA,EACnB;AACF,GAE2B;AACzB,QAAM,SAAS,mBAAmB;AAElC,QAAM,UAAU,mBAAmB,QAAQ,QAAQ,QAAQ,EAAE;AAC7D,QAAM,MAA8B,CAAC;AACrC,MAAI,QAAQ;AACV,QAAI,qBAAqB;AACzB,QAAI,oBAAoB;AAAA,EAC1B;AACA,MAAI,qBAAqB;AACzB,SAAO;AACT;;;ACrJA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,SAAS;AAGX,IAAM,wBAAwB;AAGrC,IAAM,iBAAiB,EAAE,mBAAmB,QAAQ;AAAA,EAClD,EAAE,OAAO;AAAA,IACP,MAAM,EAAE,QAAQ,UAAU;AAAA,IAC1B,SAAS,EAAE,KAAK,CAAC,cAAc,SAAS,CAAC,EAAE,SAAS;AAAA,EACtD,CAAC;AAAA,EACD,EAAE,OAAO;AAAA,IACP,MAAM,EAAE,QAAQ,SAAS;AAAA,IACzB,eAAe,EAAE,OAAO;AAAA,IACxB,SAAS,EAAE,KAAK,CAAC,cAAc,SAAS,CAAC,EAAE,SAAS;AAAA,EACtD,CAAC;AAAA,EACD,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,UAAU,EAAE,CAAC;AAC1C,CAAC;AAEM,IAAM,qBAAqB,+BAA+B,OAAO;AAAA,EACtE,YAAY,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,EAAE,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA,EAKvD,cAAc,EAAE,OAAO,EAAE,SAAS;AAAA,EAClC,UAAU,eAAe,SAAS;AAAA,EAClC,QAAQ,EAAE,KAAK,CAAC,OAAO,UAAU,QAAQ,SAAS,KAAK,CAAC,EAAE,SAAS;AAAA;AAAA,EAEnE,aAAa,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS;AAAA,EAC1C,eAAe,EAAE,QAAQ,EAAE,SAAS;AAAA;AAAA,EAEpC,gBAAgB,EAAE,OAAO,EAAE,SAAS;AACtC,CAAC;AAIM,IAAM,uBAAuB,EAAE,mBAAmB,QAAQ;AAAA,EAC/D;AAAA,EACA,GAAG;AACL,CAAC;;;AC5CM,IAAM,UACX,OACI,YACA;;;AJiEN,IAAM,wBAAwB,6BAA6B,OAAO;AAiBlE,IAAM,qBAAqB;AAsD3B,IAAM,2BAA2B;AAAA,EAC/B,MAAM,WAAW,QAAQ;AAAA,IACvB,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAaC,GAAE,OAAO,EAAE,WAAWA,GAAE,OAAO,EAAE,CAAC;AAAA,EACjD,CAAC;AAAA,EACD,OAAO,WAAW,SAAS;AAAA,IACzB,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAaA,GAAE,OAAO,EAAE,WAAWA,GAAE,OAAO,GAAG,SAASA,GAAE,OAAO,EAAE,CAAC;AAAA,EACtE,CAAC;AAAA,EACD,MAAM,WAAW,QAAQ;AAAA,IACvB,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAaA,GAAE,OAAO;AAAA,MACpB,WAAWA,GAAE,OAAO;AAAA,MACpB,YAAYA,GAAE,OAAO;AAAA,MACrB,YAAYA,GAAE,OAAO;AAAA,IACvB,CAAC;AAAA,EACH,CAAC;AAAA,EACD,MAAM,WAAW,QAAQ;AAAA,IACvB,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAaA,GAAE,OAAO,EAAE,SAASA,GAAE,OAAO,EAAE,CAAC;AAAA,EAC/C,CAAC;AAAA,EACD,MAAM,WAAW,QAAQ;AAAA,IACvB,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAaA,GAAE,OAAO,EAAE,SAASA,GAAE,OAAO,EAAE,CAAC;AAAA,EAC/C,CAAC;AAAA,EACD,MAAM,WAAW,QAAQ;AAAA,IACvB,YAAY;AAAA,IACZ,aAAa;AAAA,IACb,aAAa;AAAA,IACb,aAAaA,GAAE,OAAO,EAAE,SAASA,GAAE,OAAO,EAAE,CAAC;AAAA,EAC/C,CAAC;AAAA;AAAA,EAED,IAAI,KAAK;AAAA,IACP,aAAa;AAAA,IACb,aAAaA,GAAE,OAAO,EAAE,MAAMA,GAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAAA,EACvD,CAAC;AAAA,EACD,MAAM,KAAK;AAAA,IACT,aAAa;AAAA,IACb,aAAaA,GAAE,OAAO;AAAA,MACpB,aAAaA,GAAE,OAAO,EAAE,SAAS;AAAA,MACjC,eAAeA,GAAE,OAAO,EAAE,SAAS;AAAA,IACrC,CAAC;AAAA,EACH,CAAC;AAAA,EACD,aAAa,KAAK;AAAA,IAChB,aAAa;AAAA,IACb,aAAaA,GAAE,OAAO,EAAE,OAAOA,GAAE,MAAMA,GAAE,QAAQ,CAAC,EAAE,SAAS,EAAE,CAAC;AAAA,EAClE,CAAC;AACH;AAGA,IAAM,+BAA+BA,GAAE,OAAO;AAAA,EAC5C,MAAMA,GAAE,OAAO;AAAA,EACf,OAAOA,GAAE,OAAO;AAAA,EAChB,iBAAiBA,GAAE,OAAO;AAAA,EAC1B,WAAWA,GAAE,OAAO,EAAE,SAAS;AACjC,CAAC;AACD,IAAM,8BAA8BA,GAAE,OAAO;AAAA,EAC3C,QAAQ,6BAA6B,SAAS;AAAA,EAC9C,8BAA8BA,GAAE,OAAOA,GAAE,OAAO,GAAGA,GAAE,OAAO,CAAC,EAAE,SAAS;AAC1E,CAAC;AAGM,SAAS,iBACd,WAAsC,CAAC,GACK;AAC5C,SAAO;AAAA,IACL,sBAAsB;AAAA,IACtB,WAAW;AAAA,IACX,cAAc;AAAA;AAAA,IAEd,8BAA8B;AAAA,IAC9B,sBAAsB;AAAA,IACtB,cAAc;AAAA,IACd,SAAS,OAAM,cAAa;AAC1B,YAAM,iBAAiB,UAAU;AACjC,YAAM,iBAAiB,UAAU;AACjC,YAAM,yBACJ,4BAA4B,cAAc;AAC5C,YAAM,YAAY,QAAQ,iBAAiB,eAAe,KAAK;AAC/D,mCAA6B;AAAA,QAC3B;AAAA,QACA,MAAM,SAAS;AAAA,QACf,cAAc,SAAS;AAAA,MACzB,CAAC;AACD,UAAI,SAAS,mBAAmB,QAAQ,aAAa,MAAM;AACzD,cAAM,IAAI,kCAAkC;AAAA,UAC1C,WAAW;AAAA,UACX,SACE;AAAA,QACJ,CAAC;AAAA,MACH;AACA,YAAM,0BACJ,MAAM,sCAAsC;AAAA,QAC1C;AAAA,QACA,aAAa,UAAU;AAAA,MACzB,CAAC;AACH,YAAM,iBAAiB,UAAU,gBAAgB,UAAU;AAC3D,YAAM,WAAW,kBAAkB;AACnC,YAAM,aAAa,UAAU,gBAAgB;AAC7C,YAAM,aACJ,YAAY,OAAO,gBAAgB,SAAS,WACvC,eAAe,OAIhB;AACN,YAAM,SAAS,YAAY;AAC3B,YAAM,qBAAqB,oCAAoC;AAAA,QAC7D,MAAM,SAAS;AAAA,MACjB,CAAC;AACD,YAAM,0BAA0B,qBAAqB;AAAA,QACnD,MAAM,SAAS;AAAA,MACjB,CAAC;AACD,UAAI,yBAAyB;AAC7B,UAAI;AACJ,UAAI,sBAAsB;AAC1B,UACE,+BAA+B,kBAC/B,eAAe,6BAA6B,MAC5C;AACA,uCACE,YAAY,gCACX,MAAM,mCAAmC;AAAA,UACxC,aAAa;AAAA,UACb,gCACE;AAAA,UACF,sBAAsB,SAAS;AAAA,QACjC,CAAC;AACH,iCAAyB;AAAA,UACvB,GAAG;AAAA,UACH,GAAG;AAAA,QACL;AACA,cAAM,yBAAyB,uCAAuC;AAAA,UACpE,KAAK;AAAA,UACL,YAAY;AAAA,UACZ,MAAM;AAAA,QACR,CAAC;AACD,YAAI,uBAAuB,SAAS,GAAG;AACrC,gBAAM,eAAe;AAAA,YACnB;AAAA,UACF;AAAA,QACF;AACA,8BAAsB;AAAA,MACxB;AACA,YAAM,eAAe,MAAM;AAAA,QACzB;AAAA,QACA;AAAA,MACF;AAEA,YAAM,UAAU,UAAU;AAM1B,YAAM,UAAU,MAAM,sBAAsB;AAAA,QAC1C,SAAS;AAAA,QACT,aAAa,UAAU;AAAA,MACzB,CAAC;AACD,YAAM,iBAAiB,GAAG,OAAO,GAAG,kBAAkB;AACtD,YAAM,cAAc,CAAC,GAAG,OAAO,GAAG,kBAAkB,IAAI,cAAc;AACtE,YAAM,iBAAiB,GAAG,uBAAuB,gBAAgB,UAAU,SAAS;AACpF,YAAM,iBAAiB,GAAG,cAAc;AACxC,YAAM,YAAY,SAAS,oBAAoB;AAE/C,YAAM,SAAS,UAAU,eAAe;AACxC,YAAM,eAAe,SACjB,CAAC,UACC;AAAA,QACE,mCAAmC,OAAO;AAAA,UACxC,WAAW,UAAU;AAAA,UACrB,WAAW,KAAK,IAAI;AAAA,QACtB,CAAC;AAAA,MACH,IACF;AACJ,YAAM,gBAAgB,yBAAyB;AAAA,QAC7C,WAAW;AAAA,QACX,WAAW,UAAU;AAAA,MACvB,CAAC;AAGD,UAAI,QAAQ;AACV,YAAI;AACF,gBAAMC,YAAW,MAAM,sBAAsB;AAAA,YAC3C;AAAA,YACA,UAAU,SAAS;AAAA,YACnB,MAAM,OAAO;AAAA,UACf,CAAC;AACD,gBAAM,iBAAiB,gBAAgB;AAAA,YACrC,UAAAA;AAAA,YACA,OAAO,OAAO;AAAA,UAChB,CAAC;AACD,gBAAM,gBAAmC,IAAI,eAAe;AAAA,YAC1D,SAAS,MAAM,cAAc,cAAc;AAAA,YAC3C,gBAAgB;AAAA,YAChB,wBAAwB,OAAO;AAAA,YAC/B;AAAA,YACA;AAAA,UACF,CAAC;AACD,gBAAM,cAAc,KAAK,aAAa,EAAE,QAAQ,KAAK,IAAI,MAAS;AAClE,iBAAO,cAAc;AAAA,YACnB,WAAW,UAAU;AAAA,YACrB,SAAS;AAAA,YACT,MAAM;AAAA,YACN,OAAO,SAAS;AAAA,YAChB,UAAU,SAAS;AAAA,YACnB,QAAQ,SAAS;AAAA,YACjB,YAAY,OAAO;AAAA,YACnB,aAAa,OAAO;AAAA,YACpB;AAAA,YACA;AAAA,YACA,UAAU;AAAA,YACV,SAAS;AAAA,YACT;AAAA,YACA;AAAA,YACA;AAAA,YACA,sBAAsB,UAAU;AAAA,YAChC,gBAAgB,SAAS;AAAA,YACzB,YAAY,SAAS;AAAA,UACvB,CAAC;AAAA,QACH,QAAQ;AAAA,QAER;AAAA,MACF;AAEA,YAAM,OAAO,kBAAkB;AAAA,QAC7B;AAAA,QACA,UAAU,SAAS;AAAA,MACrB,CAAC;AACD,YAAM,QACJ,SAAS,mBAAmB,OACxB,kBAAkB,IAClB,SAAS,gBAAgB,SAAU;AAEzC,YAAM,2BAA2B,sBAC7B,yBACA,MAAM,0BAA0B;AAAA,QAC9B,aAAa;AAAA,QACb,gCACE;AAAA,QACF,sBAAsB,SAAS;AAAA,MACjC,CAAC;AACL,UAAI,CAAC,qBAAqB;AACxB,2CAAmC;AAAA,UACjC,aAAa;AAAA,UACb,sBAAsB;AAAA,UACtB,gCACE;AAAA,QACJ,CAAC;AAAA,MACH;AACA,YAAM,MAAM;AAAA,QACV,GAAG;AAAA,QACH,2BAA2B;AAAA,QAC3B,sBAAsB;AAAA,QACtB,gBAAgB,OAAO,IAAI;AAAA,MAC7B;AAEA,YAAM,uBAAuB,IAAI;AAAA,QAC/B,SAAS,YAAY,WAAW,OAAO,CAAC,IAAI,WAAW,cAAc,CAAC;AAAA,QACtE,aAAa,UAAU;AAAA,MACzB,CAAC;AAED,YAAM,mBAAmB;AAAA,QACvB,SAAS;AAAA,QACT;AAAA,QACA,YAAY;AAAA,QACZ,aAAa,UAAU;AAAA,MACzB,CAAC;AAED,YAAM,OAAO,MAAM,uBAAuB,MAAM;AAAA,QAC9C,SAAS,QAAQ,WAAW,GAAG,YAAY,aAAa,CAAC,cAAc,WAAW,OAAO,CAAC,uBAAuB,WAAW,cAAc,CAAC,oBAAoB,WAAW,YAAY,CAAC,GAAG,WAAW,mBAAmB,EAAE;AAAA,QAC1N;AAAA,QACA,aAAa,UAAU;AAAA,MACzB,CAAC;AACD,YAAM,aAAuB,CAAC;AAC9B,YAAM,mBAAmB,2BAA2B;AAAA,QAClD,QAAQ,KAAK;AAAA,QACb,YAAY;AAAA,QACZ,QAAQ;AAAA,QACR,aAAa;AAAA,MACf,CAAC;AAED,YAAM,EAAE,MAAM,UAAU,IAAI,MAAM,mBAAmB;AAAA,QACnD;AAAA,QACA,SAAS;AAAA,QACT;AAAA,QACA,YAAY;AAAA,QACZ;AAAA,QACA,aAAa,UAAU;AAAA,QACvB,oBAAoB,CAAC,EAAE,MAAAC,OAAM,WAAW,MACtC,yBAAyB;AAAA,UACvB,SAAS;AAAA,UACT,MAAAA;AAAA,UACA;AAAA,UACA;AAAA,UACA,YAAY;AAAA,QACd,CAAC;AAAA,QACH,iBAAiB,CAAC,EAAE,MAAAA,OAAM,WAAW,MACnC,yBAAyB;AAAA,UACvB,SAAS;AAAA,UACT,MAAAA;AAAA,UACA;AAAA,UACA;AAAA,UACA,YAAY;AAAA,QACd,CAAC;AAAA,MACL,CAAC;AACD,WAAK,yBAAyB,KAAK,MAAM;AAEzC,YAAM,WAAW,MAAM,sBAAsB;AAAA,QAC3C;AAAA,QACA,UAAU,SAAS;AAAA,QACnB,MAAM;AAAA,MACR,CAAC;AACD,YAAM,iBAAiB,gBAAgB,EAAE,UAAU,MAAM,CAAC;AAE1D,YAAM,UAA6B,IAAI,eAAe;AAAA,QACpD,SAAS,MAAM,cAAc,cAAc;AAAA,QAC3C,gBAAgB;AAAA,QAChB;AAAA,QACA;AAAA,MACF,CAAC;AACD,YAAM,QAAQ,KAAK;AAEnB,aAAO,cAAc;AAAA,QACnB,WAAW,UAAU;AAAA,QACrB;AAAA,QACA;AAAA,QACA,OAAO,SAAS;AAAA,QAChB,UAAU,SAAS;AAAA,QACnB,QAAQ,SAAS;AAAA,QACjB,YAAY;AAAA,QACZ,aAAa;AAAA,QACb;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS;AAAA,QACT;AAAA,QACA;AAAA,QACA;AAAA,QACA,sBAAsB,UAAU;AAAA,QAChC,gBAAgB,SAAS;AAAA,QACzB,YAAY,SAAS;AAAA,MACvB,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,SAAS,kBAAkB;AAAA,EACzB;AAAA,EACA;AACF,GAGW;AACT,MAAI,aAAa,OAAW,QAAO;AACnC,MAAI,WAAW,kBAAkB,eAAe,MAAM,SAAS,GAAG;AAChE,WAAO,eAAe,MAAM,CAAC;AAAA,EAC/B;AACA,QAAM,IAAI,kCAAkC;AAAA,IAC1C,WAAW;AAAA,IACX,SACE;AAAA,EAEJ,CAAC;AACH;AAEA,SAAS,6BAA6B;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AACF,GAIS;AACP,MAAI,qBAAqB,eAAgB;AACzC,MAAI,QAAQ,MAAM;AAChB,UAAM,IAAI,kCAAkC;AAAA,MAC1C,WAAW;AAAA,MACX,SACE;AAAA,IACJ,CAAC;AAAA,EACH;AACA,MAAI,gBAAgB,MAAM;AACxB,UAAM,IAAI,kCAAkC;AAAA,MAC1C,WAAW;AAAA,MACX,SACE;AAAA,IACJ,CAAC;AAAA,EACH;AACF;AAEA,eAAe,sBAAsB;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AACF,GAImC;AACjC,MAAI,YAAY,KAAM,QAAO;AAC7B,MAAI,qBAAqB,gBAAgB;AACvC,WAAO,eAAe,gBAAgB,EAAE,MAAM,UAAU,KAAK,CAAC;AAAA,EAChE;AACA,QAAM,IAAI,kCAAkC;AAAA,IAC1C,WAAW;AAAA,IACX,SACE;AAAA,EACJ,CAAC;AACH;AAGA,eAAe,YAAY;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAK+B;AAK7B,SAAO,mBAAmB;AAAA,IACxB;AAAA,IACA,SAAS;AAAA,IACT;AAAA,IACA;AAAA,IACA,kBAAkB;AAAA,IAClB,yBAAyB,CAAC,EAAE,KAAK,MAC/B,kCAAkC,IAAI;AAAA,IACxC,cAAc;AAAA,IACd,6BAA6B,CAAC,EAAE,WAAW,SAAS,MAClD,gCAAgC,SAAS,MAAM,QAAQ;AAAA,EAC3D,CAAC;AACH;AAEA,SAAS,cAAc;AAAA,EACrB;AAAA,EACA;AACF,GAA8C;AAC5C,SAAO,IAAI,QAAQ,CAAC,SAAS,WAAW;AACtC,UAAM,KAAK,IAAI,UAAU,KAAK;AAAA,MAC5B,SAAS,WAAW,OAAO,SAAY,EAAE,GAAG,QAAQ;AAAA,IACtD,CAAC;AACD,UAAM,SAAS,MAAM;AACnB,SAAG,IAAI,SAAS,OAAO;AACvB,cAAQ,EAAE;AAAA,IACZ;AACA,UAAM,UAAU,CAAC,QAAe;AAC9B,SAAG,IAAI,QAAQ,MAAM;AACrB,aAAO,GAAG;AAAA,IACZ;AACA,OAAG,KAAK,QAAQ,MAAM;AACtB,OAAG,KAAK,SAAS,OAAO;AAAA,EAC1B,CAAC;AACH;AAEA,SAAS,cAAc;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAoBqB;AACnB,MAAI,UAAU;AAEd,QAAM,WAAW,CAAC,aAGY;AAC5B,QAAI;AACJ,QAAI;AACJ,UAAM,OAAO,IAAI,QAAc,CAAC,SAAS,WAAW;AAClD,uBAAiB;AACjB,sBAAgB;AAAA,IAClB,CAAC;AAED,UAAM,SAA4B,CAAC;AACnC,UAAM,UAAU,CAAC,UAA+B;AAC9C,UAAI;AACF,iBAAS,KAAK,KAAK;AAAA,MACrB,QAAQ;AAAA,MAAC;AAAA,IACX;AAEA,UAAM,aAAa;AAAA,MACjB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AACA,QAAI,YAAY;AAChB,UAAM,gBAAgB,MAAM;AAC1B,UAAI,UAAW;AACf,kBAAY;AACZ,iBAAW,KAAK,OAAQ,GAAE;AAC1B,qBAAgB;AAAA,IAClB;AACA,UAAM,cAAc,CAAC,QAAiB;AACpC,UAAI,UAAW;AACf,kBAAY;AACZ,iBAAW,KAAK,OAAQ,GAAE;AAC1B,oBAAe,GAAG;AAAA,IACpB;AAEA,eAAW,QAAQ,YAAY;AAC7B,aAAO,KAAK,QAAQ,GAAG,MAAM,SAAO,QAAQ,GAAG,CAAC,CAAC;AAAA,IACnD;AACA,WAAO;AAAA,MACL,QAAQ,GAAG,UAAU,SAAO;AAC1B,gBAAQ,GAAG;AACX,sBAAc;AAAA,MAChB,CAAC;AAAA,IACH;AACA,WAAO;AAAA,MACL,QAAQ,GAAG,SAAS,SAAO;AACzB,gBAAQ,GAAG;AACX,oBAAY,IAAI,KAAK;AAAA,MACvB,CAAC;AAAA,IACH;AAGA,UAAM,UAAU,CAAC,OAAe,WAAmB;AACjD,UAAI,UAAW;AACf,UAAI,WAAW,aAAa;AAC1B,sBAAc;AACd;AAAA,MACF;AACA;AAAA,QACE,IAAI,MAAM,oDAAoD;AAAA,MAChE;AAAA,IACF;AACA,YAAQ,QAAQ,OAAO;AAEvB,UAAM,UAAU,MAAM;AACpB,UAAI,UAAW;AACf,UAAI;AACF,gBAAQ,KAAK,EAAE,MAAM,QAAQ,CAAC;AAAA,MAChC,QAAQ;AAAA,MAAC;AACT;AAAA,QACE,SAAS,aAAa,UACpB,IAAI,aAAa,WAAW,YAAY;AAAA,MAC5C;AAAA,IACF;AACA,QAAI,SAAS,aAAa;AACxB,UAAI,SAAS,YAAY,SAAS;AAChC,gBAAQ;AAAA,MACV,OAAO;AACL,iBAAS,YAAY,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AAAA,MACxE;AAAA,IACF;AAEA,WAAO;AAAA,MACL,kBAAkB,OAAM,UAAS;AAC/B,gBAAQ,KAAK;AAAA,UACX,MAAM;AAAA,UACN,YAAY,MAAM;AAAA,UAClB,QAAQ,MAAM;AAAA,UACd,SAAS,MAAM;AAAA,QACjB,CAAC;AAAA,MACH;AAAA,MACA,oBAAoB,OAAM,UAAS;AACjC,gBAAQ,KAAK;AAAA,UACX,MAAM;AAAA,UACN,YAAY,MAAM;AAAA,UAClB,UAAU,MAAM;AAAA,UAChB,GAAI,MAAM,UAAU,OAAO,EAAE,QAAQ,MAAM,OAAO,IAAI,CAAC;AAAA,QACzD,CAAC;AAAA,MACH;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,QAAM,cAAc,CAAC,eAA8B;AACjD,UAAM,IAAI,kCAAkC;AAAA,MAC1C,WAAW;AAAA,MACX,SAAS,yCAAyC,UAAU;AAAA,IAC9D,CAAC;AAAA,EACH;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,cAAc,OAAM,eAAc;AAChC,UACE,WAAW,gBAAgB,SAAS,UACpC,WAAW,eAAe,UAAU,MACpC;AACA,cAAM,IAAI,kCAAkC;AAAA,UAC1C,SACE;AAAA,UACF,WAAW;AAAA,QACb,CAAC;AAAA,MACH;AACA,YAAM,mBAAmB,MAAM,YAAY;AAAA,QACzC;AAAA,QACA,MAAM;AAAA,QACN,QAAQ,WAAW;AAAA,QACnB,aAAa,WAAW;AAAA,MAC1B,CAAC;AACD,YAAM,UAAU,SAAS;AAAA,QACvB,MAAM,WAAW;AAAA,QACjB,aAAa,WAAW;AAAA,MAC1B,CAAC;AAED,cAAQ,KAAK;AAAA,QACX,MAAM;AAAA,QACN,QAAQ,gBAAgB,WAAW,MAAM;AAAA,QACzC,GAAI,WAAW,eACX,EAAE,cAAc,WAAW,aAAa,IACxC,CAAC;AAAA,QACL,QAAQ,WAAW,SAAS,CAAC,GAAG,IAAI,QAAM;AAAA,UACxC,MAAM,EAAE;AAAA,UACR,aAAa,EAAE;AAAA,UACf,aAAa,EAAE;AAAA,QACjB,EAAE;AAAA,QACF,GAAI,WAAW,kBAAkB,OAC7B,CAAC,IACD,EAAE,gBAAgB,WAAW,eAAe;AAAA,QAChD,GAAK,WAAW,SAAS,QACrB,EAAE,OAAO,WAAW,SAAS,MAAM,IACnC,CAAC;AAAA,QACL,GAAI,WAAW,EAAE,SAAS,IAAI,CAAC;AAAA,QAC/B,GAAI,SAAS,EAAE,OAAO,IAAI,CAAC;AAAA,QAC3B,GAAI,aAAa,SAAS,EAAE,YAAY,IAAI,CAAC;AAAA,QAC7C,eAAe,iBAAiB;AAAA,QAChC,GAAI,iBAAiB,EAAE,eAAe,IAAI,CAAC;AAAA,QAC3C,GAAI,uBAAuB,EAAE,qBAAqB,IAAI,CAAC;AAAA,QACvD,GAAI,kBAAkB,OAAO,EAAE,eAAe,IAAI,CAAC;AAAA,QACnD,GAAI,cAAc,OAAO,CAAC,IAAI,EAAE,WAAW;AAAA,MAC7C,CAAC;AAED,aAAO;AAAA,IACT;AAAA,IACA,gBAAgB,OAAM,iBAAgB;AACpC,UACE,aAAa,gBAAgB,SAAS,UACtC,aAAa,eAAe,UAAU,MACtC;AACA,cAAM,IAAI,kCAAkC;AAAA,UAC1C,SACE;AAAA,UACF,WAAW;AAAA,QACb,CAAC;AAAA,MACH;AAEA,aAAO,SAAS;AAAA,QACd,MAAM,aAAa;AAAA,QACnB,aAAa,aAAa;AAAA,MAC5B,CAAC;AAAA,IACH;AAAA,IACA,eAAe,YAAY;AACzB,UAAI,SAAS;AACX,cAAM,IAAI;AAAA,UACR,sBAAsB,SAAS;AAAA,QACjC;AAAA,MACF;AACA,gBAAU;AAEV,YAAM,kBAAkB,MAAM,QAAQ,QAAQ;AAC9C,YAAM,UAAsC;AAAA,QAC1C,MAAM;AAAA,QACN,WAAW;AAAA,QACX,sBAAsB;AAAA,QACtB,MAAM;AAAA,UACJ,GAAI,gCAAgC,OAChC,CAAC,IACD,EAAE,6BAA6B;AAAA,UACnC,QAAQ;AAAA,YACN,MAAM;AAAA,YACN,OAAO;AAAA,YACP;AAAA,YACA,GAAI,aAAa,OAAO,CAAC,IAAI,EAAE,UAAU;AAAA,UAC3C;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,IACA,UAAU,YAAY;AACpB,UAAI,SAAS;AACX,cAAM,IAAI;AAAA,UACR,sBAAsB,SAAS;AAAA,QACjC;AAAA,MACF;AACA,gBAAU;AAEV,YAAM,kBAAkB,MAAM,QAAQ,QAAQ;AAC9C,YAAM,UAAuC;AAAA,QAC3C,MAAM;AAAA,QACN,WAAW;AAAA,QACX,sBAAsB;AAAA,QACtB,MAAM;AAAA,UACJ,GAAI,gCAAgC,OAChC,CAAC,IACD,EAAE,6BAA6B;AAAA,UACnC,QAAQ;AAAA,YACN,MAAM;AAAA,YACN,OAAO;AAAA,YACP;AAAA,YACA,GAAI,aAAa,OAAO,CAAC,IAAI,EAAE,UAAU;AAAA,UAC3C;AAAA,QACF;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,IACA,WAAW,YAAY,YAAY,mBAAmB;AAAA,IACtD,QAAQ,YAAY;AAClB,UAAI,SAAS;AACX,cAAM,IAAI;AAAA,UACR,sBAAsB,SAAS;AAAA,QACjC;AAAA,MACF;AACA,gBAAU;AACV,YAAM,SAAS,EAAE,SAAS,MAAM,WAAW,OAAO,CAAC;AACnD,YAAM,UAAuC;AAAA,QAC3C,MAAM;AAAA,QACN,WAAW;AAAA,QACX,sBAAsB;AAAA,QACtB,MACE,gCAAgC,OAC5B,CAAC,IACD,EAAE,6BAA6B;AAAA,MACvC;AACA,aAAO;AAAA,IACT;AAAA,IACA,WAAW,YAAY;AACrB,UAAI,QAAS;AACb,gBAAU;AACV,YAAM,SAAS,EAAE,SAAS,MAAM,WAAW,UAAU,CAAC;AAAA,IACxD;AAAA,EACF;AACF;AAEA,eAAe,SAAS;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AACF,GAIkB;AAChB,UAAQ,WAAW;AACnB,MAAI;AACF,QAAI,CAAC,QAAQ,SAAS,GAAG;AACvB,cAAQ,KAAK,EAAE,MAAM,UAAU,CAAC;AAAA,IAClC;AAAA,EACF,QAAQ;AAAA,EAAC;AACT,MAAI;AACJ,MAAI;AACF,QAAI,MAAM;AACR,YAAM,QAAQ,KAAK;AAAA,QACjB,KAAK,KAAK;AAAA,QACV,IAAI,QAAc,aAAW;AAC3B,sBAAY,WAAW,SAAS,GAAI;AACpC,oBAAU,QAAQ;AAAA,QACpB,CAAC;AAAA,MACH,CAAC;AAAA,IACH;AAAA,EACF,UAAE;AACA,QAAI,UAAW,cAAa,SAAS;AACrC,QAAI;AACF,YAAM,MAAM,KAAK;AAAA,IACnB,QAAQ;AAAA,IAAC;AACT,YAAQ,MAAM;AAAA,EAChB;AACF;AAGA,SAAS,gBAAgB,QAAiC;AACxD,MAAI,OAAO,WAAW,SAAU,QAAO;AACvC,QAAM,EAAE,QAAQ,IAAI;AACpB,MAAI,OAAO,YAAY,SAAU,QAAO;AACxC,QAAM,QAAkB,CAAC;AACzB,aAAW,QAAQ,SAAS;AAC1B,QAAI,KAAK,SAAS,QAAQ;AACxB,YAAM,IAAI,kCAAkC;AAAA,QAC1C,WAAW;AAAA,QACX,SAAS,2EAA2E,KAAK,IAAI;AAAA,MAC/F,CAAC;AAAA,IACH;AACA,UAAM,KAAK,KAAK,IAAI;AAAA,EACtB;AACA,SAAO,MAAM,KAAK,MAAM;AAC1B;;;AKn9BO,IAAM,aAAa,iBAAiB;","names":["z","z","endpoint","proc"]}
1
+ {"version":3,"sources":["../src/deepagents-harness.ts","../src/deepagents-bootstrap.ts","../src/deepagents-auth.ts","../src/deepagents-bridge-protocol.ts","../src/version.ts","../src/index.ts"],"sourcesContent":["import { posix } from 'node:path';\nimport {\n commonTool,\n HarnessCapabilityUnsupportedError,\n harnessV1DiagnosticFromBridgeFrame,\n type HarnessV1,\n type HarnessV1BuiltinTool,\n type HarnessV1BuiltinToolFiltering,\n type HarnessV1ContinueTurnState,\n type HarnessV1CredentialForwarding,\n type HarnessV1NetworkSandboxSession,\n type HarnessV1PermissionMode,\n type HarnessV1Prompt,\n type HarnessV1PromptControl,\n type HarnessV1PortEndpoint,\n type HarnessV1ResumeSessionState,\n type HarnessV1Session,\n type HarnessV1StreamPart,\n} from '@ai-sdk/harness';\nimport {\n applyCredentialForwarding,\n createBridgeToken,\n createSandboxCredentialEnvironment,\n markBridgeStarting,\n createBridgeErrorHandler,\n createBridgeStartupError,\n drainBridgeProcessStream,\n forwardBridgeProcessStream,\n getRestrictedSandboxSession,\n resolveSandboxDefaultWorkingDirectory,\n resolveSandboxHomeDir,\n SandboxChannel,\n shellQuote,\n warnCredentialBrokeringUnavailable,\n waitForBridgeReady,\n withBridgeToken,\n writeSkills,\n} from '@ai-sdk/harness/utils';\nimport {\n tool,\n type Experimental_SandboxProcess,\n type Experimental_SandboxSession as SandboxSession,\n} from '@ai-sdk/provider-utils';\nimport { WebSocket } from 'ws';\nimport { z } from 'zod/v4';\nimport {\n DEEPAGENTS_BOOTSTRAP_DIR as BOOTSTRAP_DIR,\n getDeepAgentsBootstrap,\n} from './deepagents-bootstrap';\nimport {\n createDeepAgentsRequestTransformations,\n DEEPAGENTS_CREDENTIAL_ENVIRONMENT_VARIABLES,\n resolveDeepAgentsAuthenticationMode,\n resolveDeepAgentsEnv,\n type DeepAgentsAuthenticationMode,\n} from './deepagents-auth';\nimport {\n outboundMessageSchema,\n type InboundMessage,\n type OutboundMessage,\n} from './deepagents-bridge-protocol';\nimport { VERSION } from './version';\n\ntype DeepAgentsChannel = SandboxChannel<OutboundMessage, InboundMessage>;\n\n/**\n * Value to use in User-Agent and `x-client-app` headers.\n */\nconst DEEPAGENTS_CLIENT_APP = `ai-sdk/harness-deepagents/${VERSION}`;\n\nexport type DeepAgentsThinkingConfig =\n | {\n readonly type: 'adaptive';\n readonly display?: 'summarized' | 'omitted';\n }\n | {\n readonly type: 'enabled';\n readonly budget_tokens: number;\n readonly display?: 'summarized' | 'omitted';\n }\n | {\n readonly type: 'disabled';\n };\n\n// Skills source subpath, written under $HOME (out of the work dir so it can't clash with code cloned into the work dir) and also discovered from <workDir> for repo-provided skills.\nconst SKILLS_SOURCE_PATH = '/.agents/skills';\n\nexport type DeepAgentsHarnessSettings = {\n readonly auth?: DeepAgentsAuthenticationMode;\n /**\n * Customizes each credential value before it is forwarded into a sandbox\n * process. This does not restrict which credentials the harness adapter can\n * discover, read, or otherwise access in the host process.\n */\n readonly credentialForwarding?: HarnessV1CredentialForwarding;\n /**\n * Model id for the DeepAgents runtime, e.g. `claude-sonnet-4` (converted to\n * `provider:model`).\n *\n * @deprecated Use `model` on `HarnessAgent` instead.\n */\n readonly model?: string;\n /**\n * Controls Anthropic extended thinking for the Deep Agents model. Unset\n * preserves the Deep Agents runtime default.\n */\n readonly thinking?: DeepAgentsThinkingConfig;\n /**\n * Controls how much effort Claude applies when adaptive thinking is enabled.\n * Unset uses the LangChain Anthropic client default.\n */\n readonly effort?: 'low' | 'medium' | 'high' | 'xhigh' | 'max';\n /** Bridge port override; defaults to the sandbox's first declared port. */\n readonly port?: number;\n /**\n * Override the host endpoint used to connect to the sandbox bridge. Required\n * together with `port` when using a basic sandbox session.\n */\n readonly portEndpoint?: HarnessV1PortEndpoint;\n /** Maximum milliseconds to wait for the bridge to advertise its port. Defaults to 120000. */\n readonly startupTimeoutMs?: number;\n /**\n * Creates the authentication token used by the sandbox bridge. Defaults to\n * a random 32-byte hexadecimal token.\n */\n readonly mintBridgeToken?: (sandboxId: string) => string;\n /**\n * Maximum LangGraph super-steps per turn before it errors.\n * When omitted, the Deep Agents default applies.\n */\n readonly recursionLimit?: number;\n /**\n * MCP server definitions keyed by server name. Each definition uses the\n * underlying runtime's native MCP server configuration format.\n */\n readonly mcpServers?: Record<string, unknown>;\n};\n\n// Every model-callable DeepAgents built-in, keyed by what the bridge emits (commonName ?? nativeName); all must be listed or AI SDK throws AI_NoSuchToolError.\nconst DEEPAGENTS_BUILTIN_TOOLS = {\n read: commonTool('read', {\n nativeName: 'read_file',\n toolUseKind: 'readonly',\n description: 'Read file contents',\n inputSchema: z.object({ file_path: z.string() }),\n }),\n write: commonTool('write', {\n nativeName: 'write_file',\n toolUseKind: 'edit',\n description: 'Create a file',\n inputSchema: z.object({ file_path: z.string(), content: z.string() }),\n }),\n edit: commonTool('edit', {\n nativeName: 'edit_file',\n toolUseKind: 'edit',\n description: 'Perform exact string replacements in a file',\n inputSchema: z.object({\n file_path: z.string(),\n old_string: z.string(),\n new_string: z.string(),\n }),\n }),\n bash: commonTool('bash', {\n nativeName: 'execute',\n toolUseKind: 'bash',\n description: 'Run a shell command',\n inputSchema: z.object({ command: z.string() }),\n }),\n grep: commonTool('grep', {\n nativeName: 'grep',\n toolUseKind: 'readonly',\n description: 'Search file contents',\n inputSchema: z.object({ pattern: z.string() }),\n }),\n glob: commonTool('glob', {\n nativeName: 'glob',\n toolUseKind: 'readonly',\n description: 'Find files matching a glob pattern',\n inputSchema: z.object({ pattern: z.string() }),\n }),\n // No common-name equivalent — keyed by native name.\n ls: tool({\n description: 'List files in a directory',\n inputSchema: z.object({ path: z.string().optional() }),\n }),\n task: tool({\n description: 'Spawn a subagent to handle a delegated task',\n inputSchema: z.object({\n description: z.string().optional(),\n subagent_type: z.string().optional(),\n }),\n }),\n write_todos: tool({\n description: 'Manage a structured todo list',\n inputSchema: z.object({ todos: z.array(z.unknown()).optional() }),\n }),\n} as const satisfies Record<string, HarnessV1BuiltinTool<any, any>>;\n\n// Live bridge coordinates returned by doDetach/doSuspendTurn so a later process can reattach.\nconst deepAgentsBridgeCoordsSchema = z.object({\n port: z.number(),\n token: z.string(),\n lastSeenEventId: z.number(),\n sandboxId: z.string().optional(),\n});\nconst deepAgentsResumeStateSchema = z.object({\n bridge: deepAgentsBridgeCoordsSchema.optional(),\n sandboxCredentialEnvironment: z.record(z.string(), z.string()).optional(),\n});\ntype DeepAgentsBridgeCoords = z.infer<typeof deepAgentsBridgeCoordsSchema>;\n\nexport function createDeepAgents(\n settings: DeepAgentsHarnessSettings = {},\n): HarnessV1<typeof DEEPAGENTS_BUILTIN_TOOLS> {\n return {\n specificationVersion: 'harness-v1',\n harnessId: 'deepagents',\n builtinTools: DEEPAGENTS_BUILTIN_TOOLS,\n // Built-in tool approvals are gated in-bridge via DeepAgents' interruptOn (HITL) middleware.\n supportsBuiltinToolApprovals: true,\n lifecycleStateSchema: deepAgentsResumeStateSchema,\n getBootstrap: getDeepAgentsBootstrap,\n doStart: async startOpts => {\n const permissionMode = startOpts.permissionMode;\n const sandboxSession = startOpts.sandboxSession;\n const toolSafeSandboxSession =\n getRestrictedSandboxSession(sandboxSession);\n const sandboxId = 'id' in sandboxSession ? sandboxSession.id : undefined;\n validateBasicSandboxSettings({\n sandboxSession,\n port: settings.port,\n portEndpoint: settings.portEndpoint,\n });\n if (settings.mintBridgeToken != null && sandboxId == null) {\n throw new HarnessCapabilityUnsupportedError({\n harnessId: 'deepagents',\n message:\n 'The deepagents harness cannot use `mintBridgeToken` with a sandbox session that does not expose an id.',\n });\n }\n const defaultWorkingDirectory =\n await resolveSandboxDefaultWorkingDirectory({\n sandboxSession,\n abortSignal: startOpts.abortSignal,\n });\n const lifecycleState = startOpts.continueFrom ?? startOpts.resumeFrom;\n const isResume = lifecycleState != null;\n const isContinue = startOpts.continueFrom != null;\n const resumeData =\n isResume && typeof lifecycleState?.data === 'object'\n ? (lifecycleState.data as {\n bridge?: DeepAgentsBridgeCoords;\n sandboxCredentialEnvironment?: Record<string, string>;\n })\n : undefined;\n const coords = resumeData?.bridge;\n const authenticationMode = resolveDeepAgentsAuthenticationMode({\n auth: settings.auth,\n });\n const resolvedAuthEnvironment = resolveDeepAgentsEnv({\n auth: settings.auth,\n });\n let sandboxAuthEnvironment = resolvedAuthEnvironment;\n let sandboxCredentialEnvironment: Record<string, string> | undefined;\n let credentialsBrokered = false;\n if (\n 'addRequestTransformations' in sandboxSession &&\n sandboxSession.addRequestTransformations != null\n ) {\n sandboxCredentialEnvironment =\n resumeData?.sandboxCredentialEnvironment ??\n (await createSandboxCredentialEnvironment({\n environment: resolvedAuthEnvironment,\n credentialEnvironmentVariables:\n DEEPAGENTS_CREDENTIAL_ENVIRONMENT_VARIABLES,\n credentialForwarding: settings.credentialForwarding,\n }));\n sandboxAuthEnvironment = {\n ...resolvedAuthEnvironment,\n ...sandboxCredentialEnvironment,\n };\n const requestTransformations = createDeepAgentsRequestTransformations({\n env: resolvedAuthEnvironment,\n sandboxEnv: sandboxAuthEnvironment,\n auth: authenticationMode,\n });\n if (requestTransformations.length > 0) {\n await sandboxSession.addRequestTransformations(\n requestTransformations,\n );\n }\n credentialsBrokered = true;\n }\n const bootstrapDir = posix.resolve(\n defaultWorkingDirectory,\n BOOTSTRAP_DIR,\n );\n\n const workDir = startOpts.sessionWorkDir;\n /*\n * Deep Agents discovers repository skills under the working directory.\n * Harness-provided skills use an absolute home-directory path listed\n * last, so they take precedence when names collide.\n */\n const homeDir = await resolveSandboxHomeDir({\n sandbox: toolSafeSandboxSession,\n abortSignal: startOpts.abortSignal,\n });\n const homeSkillsRoot = `${homeDir}${SKILLS_SOURCE_PATH}`;\n const skillsPaths = [`${workDir}${SKILLS_SOURCE_PATH}`, homeSkillsRoot];\n const sessionDataDir = `${defaultWorkingDirectory}/.agent-runs/${startOpts.sessionId}`;\n const bridgeStateDir = `${sessionDataDir}/bridge`;\n const timeoutMs = settings.startupTimeoutMs ?? 120_000;\n\n const report = startOpts.observability?.report;\n const onDiagnostic = report\n ? (frame: Parameters<typeof harnessV1DiagnosticFromBridgeFrame>[0]) =>\n report(\n harnessV1DiagnosticFromBridgeFrame(frame, {\n sessionId: startOpts.sessionId,\n timestamp: Date.now(),\n }),\n )\n : undefined;\n const onBridgeError = createBridgeErrorHandler({\n harnessId: 'deepagents',\n sessionId: startOpts.sessionId,\n });\n\n // Attach to the still-running bridge (continueFrom replays past the cursor); on failure fall through to a fresh spawn.\n if (coords) {\n try {\n const endpoint = await resolveBridgeEndpoint({\n sandboxSession,\n override: settings.portEndpoint,\n port: coords.port,\n });\n const attachEndpoint = withBridgeToken({\n endpoint,\n token: coords.token,\n });\n const attachChannel: DeepAgentsChannel = new SandboxChannel({\n connect: () => openWebSocket(attachEndpoint),\n outboundSchema: outboundMessageSchema,\n initialLastSeenEventId: coords.lastSeenEventId,\n onDiagnostic,\n onBridgeError,\n });\n await attachChannel.open(isContinue ? { resume: true } : undefined);\n return createSession({\n sessionId: startOpts.sessionId,\n channel: attachChannel,\n proc: undefined,\n model: settings.model,\n thinking: settings.thinking,\n effort: settings.effort,\n bridgePort: coords.port,\n bridgeToken: coords.token,\n sandboxId,\n sandboxCredentialEnvironment,\n isResume: true,\n sandbox: toolSafeSandboxSession,\n homeDir,\n skillsPaths,\n permissionMode,\n builtinToolFiltering: startOpts.builtinToolFiltering,\n recursionLimit: settings.recursionLimit,\n mcpServers: settings.mcpServers,\n headers: startOpts.headers,\n });\n } catch {\n // Bridge no longer reachable — recover by respawning below.\n }\n }\n\n const port = resolveBridgePort({\n sandboxSession,\n override: settings.port,\n });\n const token =\n settings.mintBridgeToken == null\n ? createBridgeToken()\n : settings.mintBridgeToken(sandboxId!);\n\n const forwardedAuthEnvironment = credentialsBrokered\n ? sandboxAuthEnvironment\n : await applyCredentialForwarding({\n environment: sandboxAuthEnvironment,\n credentialEnvironmentVariables:\n DEEPAGENTS_CREDENTIAL_ENVIRONMENT_VARIABLES,\n credentialForwarding: settings.credentialForwarding,\n });\n if (!credentialsBrokered) {\n warnCredentialBrokeringUnavailable({\n environment: resolvedAuthEnvironment,\n forwardedEnvironment: forwardedAuthEnvironment,\n credentialEnvironmentVariables:\n DEEPAGENTS_CREDENTIAL_ENVIRONMENT_VARIABLES,\n });\n }\n const env = {\n ...forwardedAuthEnvironment,\n AI_SDK_HARNESS_CLIENT_APP: DEEPAGENTS_CLIENT_APP,\n BRIDGE_CHANNEL_TOKEN: token,\n BRIDGE_WS_PORT: String(port),\n };\n\n await toolSafeSandboxSession.run({\n command: `mkdir -p ${shellQuote(workDir)} ${shellQuote(bridgeStateDir)}`,\n abortSignal: startOpts.abortSignal,\n });\n\n await markBridgeStarting({\n sandbox: toolSafeSandboxSession,\n bridgeStateDir,\n bridgeType: 'deepagents',\n abortSignal: startOpts.abortSignal,\n });\n\n const proc = await toolSafeSandboxSession.spawn({\n command: `node ${shellQuote(`${bootstrapDir}/bridge.mjs`)} --workdir ${shellQuote(workDir)} --bridge-state-dir ${shellQuote(bridgeStateDir)} --bootstrap-dir ${shellQuote(bootstrapDir)}${isResume ? ' --resume true' : ''}`,\n env,\n abortSignal: startOpts.abortSignal,\n });\n const stderrTail: string[] = [];\n const bridgeStderrDone = forwardBridgeProcessStream({\n stream: proc.stderr,\n streamName: 'stderr',\n source: 'deepagents',\n collectTail: stderrTail,\n });\n\n const { port: boundPort } = await waitForBridgeReady({\n proc,\n sandbox: toolSafeSandboxSession,\n bridgeStateDir,\n bridgeType: 'deepagents',\n timeoutMs,\n abortSignal: startOpts.abortSignal,\n createTimeoutError: ({ proc, stdoutTail }) =>\n createBridgeStartupError({\n message: 'deepagents bridge did not become ready in time.',\n proc,\n stdoutTail,\n stderrTail,\n stderrDone: bridgeStderrDone,\n }),\n createExitError: ({ proc, stdoutTail }) =>\n createBridgeStartupError({\n message: 'deepagents bridge exited before becoming ready.',\n proc,\n stdoutTail,\n stderrTail,\n stderrDone: bridgeStderrDone,\n }),\n });\n void drainBridgeProcessStream(proc.stdout);\n\n const endpoint = await resolveBridgeEndpoint({\n sandboxSession,\n override: settings.portEndpoint,\n port: boundPort,\n });\n const bridgeEndpoint = withBridgeToken({ endpoint, token });\n\n const channel: DeepAgentsChannel = new SandboxChannel({\n connect: () => openWebSocket(bridgeEndpoint),\n outboundSchema: outboundMessageSchema,\n onDiagnostic,\n onBridgeError,\n });\n await channel.open();\n\n return createSession({\n sessionId: startOpts.sessionId,\n channel,\n proc,\n model: settings.model,\n thinking: settings.thinking,\n effort: settings.effort,\n bridgePort: boundPort,\n bridgeToken: token,\n sandboxId,\n sandboxCredentialEnvironment,\n isResume,\n sandbox: toolSafeSandboxSession,\n homeDir,\n skillsPaths,\n permissionMode,\n builtinToolFiltering: startOpts.builtinToolFiltering,\n recursionLimit: settings.recursionLimit,\n mcpServers: settings.mcpServers,\n headers: startOpts.headers,\n });\n },\n };\n}\n\nfunction resolveBridgePort({\n sandboxSession,\n override,\n}: {\n sandboxSession: HarnessV1NetworkSandboxSession | SandboxSession;\n override: number | undefined;\n}): number {\n if (override !== undefined) return override;\n if ('ports' in sandboxSession && sandboxSession.ports.length > 0) {\n return sandboxSession.ports[0];\n }\n throw new HarnessCapabilityUnsupportedError({\n harnessId: 'deepagents',\n message:\n 'The deepagents harness needs a TCP port exposed by the sandbox. ' +\n 'Create the sandbox with `ports: [<port>]` or pass `createDeepAgents({ port })`.',\n });\n}\n\nfunction validateBasicSandboxSettings({\n sandboxSession,\n port,\n portEndpoint,\n}: {\n sandboxSession: HarnessV1NetworkSandboxSession | SandboxSession;\n port: number | undefined;\n portEndpoint: HarnessV1PortEndpoint | undefined;\n}): void {\n if ('getPortEndpoint' in sandboxSession) return;\n if (port == null) {\n throw new HarnessCapabilityUnsupportedError({\n harnessId: 'deepagents',\n message:\n 'The deepagents harness requires an explicit `port` when using a basic sandbox session.',\n });\n }\n if (portEndpoint == null) {\n throw new HarnessCapabilityUnsupportedError({\n harnessId: 'deepagents',\n message:\n 'The deepagents harness requires an explicit `portEndpoint` when using a basic sandbox session.',\n });\n }\n}\n\nasync function resolveBridgeEndpoint({\n sandboxSession,\n override,\n port,\n}: {\n sandboxSession: HarnessV1NetworkSandboxSession | SandboxSession;\n override: HarnessV1PortEndpoint | undefined;\n port: number;\n}): Promise<HarnessV1PortEndpoint> {\n if (override != null) return override;\n if ('getPortEndpoint' in sandboxSession) {\n return sandboxSession.getPortEndpoint({ port, protocol: 'ws' });\n }\n throw new HarnessCapabilityUnsupportedError({\n harnessId: 'deepagents',\n message:\n 'The deepagents harness requires an explicit `portEndpoint` when using a basic sandbox session.',\n });\n}\n\nfunction openWebSocket({\n url,\n headers,\n}: HarnessV1PortEndpoint): Promise<WebSocket> {\n return new Promise((resolve, reject) => {\n const ws = new WebSocket(url, {\n headers: headers == null ? undefined : { ...headers },\n });\n const onOpen = () => {\n ws.off('error', onError);\n resolve(ws);\n };\n const onError = (err: Error) => {\n ws.off('open', onOpen);\n reject(err);\n };\n ws.once('open', onOpen);\n ws.once('error', onError);\n });\n}\n\nfunction createSession({\n sessionId,\n channel,\n proc,\n model,\n thinking,\n effort,\n bridgePort,\n bridgeToken,\n sandboxId,\n sandboxCredentialEnvironment,\n isResume,\n sandbox,\n homeDir,\n skillsPaths,\n permissionMode,\n builtinToolFiltering,\n recursionLimit,\n mcpServers,\n headers,\n}: {\n sessionId: string;\n channel: DeepAgentsChannel;\n // Undefined on attach — the live bridge was spawned by another process.\n proc: Experimental_SandboxProcess | undefined;\n model: string | undefined;\n thinking: DeepAgentsThinkingConfig | undefined;\n effort: 'low' | 'medium' | 'high' | 'xhigh' | 'max' | undefined;\n bridgePort: number;\n bridgeToken: string;\n sandboxId: string | undefined;\n sandboxCredentialEnvironment: Record<string, string> | undefined;\n isResume: boolean;\n sandbox: SandboxSession;\n homeDir: string;\n skillsPaths?: string[];\n permissionMode?: HarnessV1PermissionMode;\n builtinToolFiltering?: HarnessV1BuiltinToolFiltering;\n recursionLimit?: number;\n mcpServers?: Record<string, unknown>;\n headers?: Readonly<Record<string, string>>;\n}): HarnessV1Session {\n let stopped = false;\n\n const wireTurn = (turnOpts: {\n emit: (event: HarnessV1StreamPart) => void;\n abortSignal?: AbortSignal;\n }): HarnessV1PromptControl => {\n let pendingResolve: (() => void) | undefined;\n let pendingReject: ((err: unknown) => void) | undefined;\n const done = new Promise<void>((resolve, reject) => {\n pendingResolve = resolve;\n pendingReject = reject;\n });\n\n const unsubs: Array<() => void> = [];\n const forward = (event: HarnessV1StreamPart) => {\n try {\n turnOpts.emit(event);\n } catch {}\n };\n\n const eventTypes = [\n 'stream-start',\n 'text-start',\n 'text-delta',\n 'text-end',\n 'reasoning-start',\n 'reasoning-delta',\n 'reasoning-end',\n 'tool-call',\n 'tool-approval-request',\n 'tool-result',\n 'file-change',\n 'finish-step',\n 'raw',\n ] as const;\n let isSettled = false;\n const settleSuccess = () => {\n if (isSettled) return;\n isSettled = true;\n for (const u of unsubs) u();\n pendingResolve!();\n };\n const settleError = (err: unknown) => {\n if (isSettled) return;\n isSettled = true;\n for (const u of unsubs) u();\n pendingReject!(err);\n };\n\n for (const type of eventTypes) {\n unsubs.push(channel.on(type, msg => forward(msg)));\n }\n unsubs.push(\n channel.on('finish', msg => {\n forward(msg);\n settleSuccess();\n }),\n );\n unsubs.push(\n channel.on('error', msg => {\n forward(msg);\n settleError(msg.error);\n }),\n );\n\n // A `'suspended'` close is a graceful slice-boundary freeze (suspend/detach keep the bridge alive for continuation); end the turn cleanly. Any other close is an unexpected bridge failure.\n const onClose = (_code: number, reason: string) => {\n if (isSettled) return;\n if (reason === 'suspended') {\n settleSuccess();\n return;\n }\n settleError(\n new Error('deepagents bridge closed before the turn finished.'),\n );\n };\n channel.onClose(onClose);\n\n const onAbort = () => {\n if (isSettled) return;\n try {\n channel.send({ type: 'abort' });\n } catch {}\n settleError(\n turnOpts.abortSignal?.reason ??\n new DOMException('Aborted', 'AbortError'),\n );\n };\n if (turnOpts.abortSignal) {\n if (turnOpts.abortSignal.aborted) {\n onAbort();\n } else {\n turnOpts.abortSignal.addEventListener('abort', onAbort, { once: true });\n }\n }\n\n return {\n submitToolResult: async input => {\n channel.send({\n type: 'tool-result',\n toolCallId: input.toolCallId,\n output: input.output,\n isError: input.isError,\n });\n },\n submitToolApproval: async input => {\n channel.send({\n type: 'tool-approval-response',\n approvalId: input.approvalId,\n approved: input.approved,\n ...(input.reason != null ? { reason: input.reason } : {}),\n });\n },\n done,\n };\n };\n\n const unsupported = (capability: string): never => {\n throw new HarnessCapabilityUnsupportedError({\n harnessId: 'deepagents',\n message: `Harness 'deepagents' does not support ${capability} yet.`,\n });\n };\n\n return {\n sessionId,\n isResume,\n doPromptTurn: async promptOpts => {\n if (\n promptOpts.responseFormat?.type === 'json' &&\n promptOpts.responseFormat.schema == null\n ) {\n throw new HarnessCapabilityUnsupportedError({\n message:\n \"Harness 'deepagents' requires a JSON schema for structured output.\",\n harnessId: 'deepagents',\n });\n }\n const skillWriteResult = await writeSkills({\n sandbox,\n homePath: homeDir,\n skillsDir: '.agents/skills',\n skills: promptOpts.skills,\n abortSignal: promptOpts.abortSignal,\n skillNamePattern: /^[a-z0-9]([a-z0-9-]{0,62}[a-z0-9])?$/,\n invalidSkillNameMessage: ({ name }) =>\n `Invalid deepagents skill name '${name}': must be lowercase alphanumeric with hyphens, 1-64 chars.`,\n filePathMode: 'strip-leading-slashes',\n invalidSkillFilePathMessage: ({ skillName, filePath }) =>\n `Invalid skill file path for '${skillName}': ${filePath}`,\n });\n const control = wireTurn({\n emit: promptOpts.emit,\n abortSignal: promptOpts.abortSignal,\n });\n\n channel.send({\n type: 'start',\n prompt: extractUserText(promptOpts.prompt),\n ...(promptOpts.instructions\n ? { instructions: promptOpts.instructions }\n : {}),\n tools: (promptOpts.tools ?? []).map(t => ({\n name: t.name,\n description: t.description,\n inputSchema: t.inputSchema,\n })),\n ...(promptOpts.responseFormat == null\n ? {}\n : { responseFormat: promptOpts.responseFormat }),\n ...((promptOpts.model ?? model)\n ? { model: promptOpts.model ?? model }\n : {}),\n ...(thinking ? { thinking } : {}),\n ...(effort ? { effort } : {}),\n ...(skillsPaths?.length ? { skillsPaths } : {}),\n skillsChanged: skillWriteResult.changed,\n ...(permissionMode ? { permissionMode } : {}),\n ...(builtinToolFiltering ? { builtinToolFiltering } : {}),\n ...(recursionLimit != null ? { recursionLimit } : {}),\n ...(mcpServers == null ? {} : { mcpServers }),\n ...(headers == null ? {} : { headers }),\n });\n\n return control;\n },\n doContinueTurn: async continueOpts => {\n if (\n continueOpts.responseFormat?.type === 'json' &&\n continueOpts.responseFormat.schema == null\n ) {\n throw new HarnessCapabilityUnsupportedError({\n message:\n \"Harness 'deepagents' requires a JSON schema for structured output.\",\n harnessId: 'deepagents',\n });\n }\n // Attach/replay: doStart opened with `{ resume: true }` so the bridge replays past the cursor; no `start` is sent (that would clear the replay log).\n return wireTurn({\n emit: continueOpts.emit,\n abortSignal: continueOpts.abortSignal,\n });\n },\n doSuspendTurn: async () => {\n if (stopped) {\n throw new Error(\n `deepagents session ${sessionId} is stopped; cannot suspend.`,\n );\n }\n stopped = true;\n // Freeze the active turn at the cursor, leaving the bridge running so the next slice replays the tail.\n const lastSeenEventId = await channel.suspend();\n const payload: HarnessV1ContinueTurnState = {\n type: 'continue-turn',\n harnessId: 'deepagents',\n specificationVersion: 'harness-v1',\n data: {\n ...(sandboxCredentialEnvironment == null\n ? {}\n : { sandboxCredentialEnvironment }),\n bridge: {\n port: bridgePort,\n token: bridgeToken,\n lastSeenEventId,\n ...(sandboxId == null ? {} : { sandboxId }),\n },\n },\n };\n return payload;\n },\n doDetach: async () => {\n if (stopped) {\n throw new Error(\n `deepagents session ${sessionId} is already stopped; cannot detach.`,\n );\n }\n stopped = true;\n // Park between turns: close the host socket but leave the bridge running for a later reattach via these coords.\n const lastSeenEventId = await channel.suspend();\n const payload: HarnessV1ResumeSessionState = {\n type: 'resume-session',\n harnessId: 'deepagents',\n specificationVersion: 'harness-v1',\n data: {\n ...(sandboxCredentialEnvironment == null\n ? {}\n : { sandboxCredentialEnvironment }),\n bridge: {\n port: bridgePort,\n token: bridgeToken,\n lastSeenEventId,\n ...(sandboxId == null ? {} : { sandboxId }),\n },\n },\n };\n return payload;\n },\n doCompact: async () => unsupported('manual compaction'),\n doStop: async () => {\n if (stopped) {\n throw new Error(\n `deepagents session ${sessionId} is already stopped; cannot stop.`,\n );\n }\n stopped = true;\n await teardown({ channel, proc, operation: 'stop' });\n const payload: HarnessV1ResumeSessionState = {\n type: 'resume-session',\n harnessId: 'deepagents',\n specificationVersion: 'harness-v1',\n data:\n sandboxCredentialEnvironment == null\n ? {}\n : { sandboxCredentialEnvironment },\n };\n return payload;\n },\n doDestroy: async () => {\n if (stopped) return;\n stopped = true;\n await teardown({ channel, proc, operation: 'destroy' });\n },\n };\n}\n\nasync function teardown({\n channel,\n proc,\n operation,\n}: {\n channel: DeepAgentsChannel;\n proc: Experimental_SandboxProcess | undefined;\n operation: 'stop' | 'destroy';\n}): Promise<void> {\n channel.beginClose();\n try {\n if (!channel.isClosed()) {\n channel.send({ type: operation });\n }\n } catch {}\n let stopTimer: ReturnType<typeof setTimeout> | undefined;\n try {\n if (proc) {\n await Promise.race([\n proc.wait(),\n new Promise<void>(resolve => {\n stopTimer = setTimeout(resolve, 5000);\n stopTimer.unref?.();\n }),\n ]);\n }\n } finally {\n if (stopTimer) clearTimeout(stopTimer);\n try {\n await proc?.kill();\n } catch {}\n channel.close();\n }\n}\n\n// Reduce the prompt to plain user text; non-text parts are unsupported.\nfunction extractUserText(prompt: HarnessV1Prompt): string {\n if (typeof prompt === 'string') return prompt;\n const { content } = prompt;\n if (typeof content === 'string') return content;\n const parts: string[] = [];\n for (const part of content) {\n if (part.type !== 'text') {\n throw new HarnessCapabilityUnsupportedError({\n harnessId: 'deepagents',\n message: `The deepagents harness does not yet support user message parts of type '${part.type}'. Pass a string or a user message whose content contains only text parts.`,\n });\n }\n parts.push(part.text);\n }\n return parts.join('\\n\\n');\n}\n","import type { HarnessV1Bootstrap } from '@ai-sdk/harness';\nimport { createReadBridgeAsset } from '@ai-sdk/harness/utils';\n\nconst readBridgeAsset = createReadBridgeAsset({\n resolveAssetUrl: name => new URL(`./bridge/${name}`, import.meta.url),\n});\n\n/*\n * Bootstrap is derived state stored under the sandbox's default working\n * directory so snapshot-capable providers preserve its installation and\n * recipe marker without requiring root filesystem access.\n */\nexport const DEEPAGENTS_BOOTSTRAP_DIR = '.harness-bootstrap/deepagents';\n\n/*\n * Pinned ripgrep release and per-architecture tarball checksums are verified\n * before installation.\n */\nconst RIPGREP_VERSION = '14.1.1';\nconst RIPGREP_SHA256_X64 =\n '4cf9f2741e6c465ffdb7c26f38056a59e2a2544b51f7cc128ef28337eeae4d8e';\nconst RIPGREP_SHA256_ARM =\n 'c827481c4ff4ea10c9dc7a4022c8de5db34a5737cb74484d62eb94a95841ab2f';\n\nlet cachedBootstrap: HarnessV1Bootstrap | undefined;\n\nexport async function getDeepAgentsBootstrap(): Promise<HarnessV1Bootstrap> {\n if (cachedBootstrap != null) return cachedBootstrap;\n const [bridge, pkg, lock] = await Promise.all([\n readBridgeAsset('index.mjs'),\n readBridgeAsset('package.json'),\n readBridgeAsset('pnpm-lock.yaml'),\n ]);\n cachedBootstrap = {\n harnessId: 'deepagents',\n bootstrapDir: DEEPAGENTS_BOOTSTRAP_DIR,\n files: [\n { path: `${DEEPAGENTS_BOOTSTRAP_DIR}/bridge.mjs`, content: bridge },\n { path: `${DEEPAGENTS_BOOTSTRAP_DIR}/package.json`, content: pkg },\n { path: `${DEEPAGENTS_BOOTSTRAP_DIR}/pnpm-lock.yaml`, content: lock },\n ],\n commands: [\n { command: installRipgrepCommand() },\n {\n command: 'pnpm install --frozen-lockfile --store-dir .pnpm-store',\n },\n ],\n };\n return cachedBootstrap;\n}\n\n/*\n * DeepAgents' grep shells out to `rg`. Without it, the fallback reads the\n * entire workdir, including node_modules, into memory and can run out of\n * memory. The checksum-verified installation is skipped when `rg` exists.\n */\nfunction installRipgrepCommand(): string {\n const v = RIPGREP_VERSION;\n return [\n 'command -v rg >/dev/null 2>&1 || {',\n 'case \"$(uname -m)\" in',\n `aarch64) a=aarch64-unknown-linux-gnu; sha=${RIPGREP_SHA256_ARM} ;;`,\n `*) a=x86_64-unknown-linux-musl; sha=${RIPGREP_SHA256_X64} ;;`,\n 'esac;',\n `f=/tmp/ripgrep-${v}.tar.gz;`,\n `curl -fsSL \"https://github.com/BurntSushi/ripgrep/releases/download/${v}/ripgrep-${v}-$a.tar.gz\" -o \"$f\"`,\n '&& echo \"$sha $f\" | sha256sum -c -',\n '&& tar xzf \"$f\" -C /tmp',\n `&& mv \"/tmp/ripgrep-${v}-$a/rg\" /usr/local/bin/rg && chmod +x /usr/local/bin/rg;`,\n '}',\n ].join(' ');\n}\n","import type {\n HarnessV1Authentication,\n HarnessV1RequestTransformation,\n HarnessV1RequestTransformationSources,\n} from '@ai-sdk/harness';\nimport {\n createCredentialRequestTransformation,\n getAiGatewayAuthFromEnv,\n isHarnessAuthenticationEnvironment,\n} from '@ai-sdk/harness/utils';\n\nexport const DEEPAGENTS_CREDENTIAL_ENVIRONMENT_VARIABLES = [\n 'AI_GATEWAY_API_KEY',\n 'ANTHROPIC_API_KEY',\n 'ANTHROPIC_AUTH_TOKEN',\n] as const;\n\nexport function createDeepAgentsRequestTransformations({\n env: environment,\n sandboxEnv: sandboxEnvironment,\n auth: authenticationMode,\n}: HarnessV1RequestTransformationSources<DeepAgentsResolvedAuthenticationMode>): HarnessV1RequestTransformation[] {\n const matchUrl =\n authenticationMode === 'ai-gateway'\n ? environment.ANTHROPIC_BASE_URL\n : (environment.ANTHROPIC_BASE_URL ?? 'https://api.anthropic.com');\n const transformations: HarnessV1RequestTransformation[] = [];\n\n if (\n environment.ANTHROPIC_API_KEY != null &&\n sandboxEnvironment.ANTHROPIC_API_KEY != null\n ) {\n transformations.push(\n createCredentialRequestTransformation({\n matchUrl,\n matchHeaders: {\n 'x-api-key': sandboxEnvironment.ANTHROPIC_API_KEY,\n },\n transformHeaders: {\n 'x-api-key': environment.ANTHROPIC_API_KEY,\n },\n }),\n );\n }\n\n if (\n environment.ANTHROPIC_AUTH_TOKEN != null &&\n sandboxEnvironment.ANTHROPIC_AUTH_TOKEN != null\n ) {\n transformations.push(\n createCredentialRequestTransformation({\n matchUrl,\n matchHeaders: {\n Authorization: `Bearer ${sandboxEnvironment.ANTHROPIC_AUTH_TOKEN}`,\n },\n transformHeaders: {\n Authorization: `Bearer ${environment.ANTHROPIC_AUTH_TOKEN}`,\n },\n }),\n );\n }\n\n return transformations;\n}\n\nexport type DeepAgentsResolvedAuthenticationMode = 'anthropic' | 'ai-gateway';\n\nexport type DeepAgentsAuthenticationMode = HarnessV1Authentication<'anthropic'>;\n\n// DeepAgents always drives the Anthropic client. Non-Anthropic models reach it\n// through AI Gateway's Anthropic-compatible endpoint, which translates to any\n// model (Gemini, OpenAI, etc.), tool calls included.\nexport function resolveDeepAgentsEnv({\n auth,\n processEnv = process.env,\n}: {\n auth?: DeepAgentsAuthenticationMode;\n processEnv?: Record<string, string | undefined>;\n}): Record<string, string> {\n const suppliedEnvironment = isHarnessAuthenticationEnvironment(auth);\n const authenticationEnvironment = suppliedEnvironment ? auth : processEnv;\n\n if (auth === 'anthropic') {\n return pickAnthropic({ processEnv: authenticationEnvironment });\n }\n\n const gatewayAuthFromEnv = getAiGatewayAuthFromEnv({\n env: authenticationEnvironment,\n });\n if (auth === 'ai-gateway' || gatewayAuthFromEnv.apiKey) {\n return pickGateway({ gatewayAuthFromEnv });\n }\n\n return pickAnthropic({ processEnv: authenticationEnvironment });\n}\n\nexport function resolveDeepAgentsAuthenticationMode({\n auth,\n processEnv = process.env,\n}: {\n auth?: DeepAgentsAuthenticationMode;\n processEnv?: Record<string, string | undefined>;\n}): DeepAgentsResolvedAuthenticationMode {\n if (isHarnessAuthenticationEnvironment(auth)) {\n return getAiGatewayAuthFromEnv({ env: auth }).apiKey\n ? 'ai-gateway'\n : 'anthropic';\n }\n if (auth === 'anthropic') {\n return 'anthropic';\n }\n if (auth === 'ai-gateway') {\n return 'ai-gateway';\n }\n return getAiGatewayAuthFromEnv({ env: processEnv }).apiKey\n ? 'ai-gateway'\n : 'anthropic';\n}\n\nfunction pickAnthropic({\n processEnv,\n}: {\n processEnv: Record<string, string | undefined>;\n}): Record<string, string> {\n const env: Record<string, string> = {};\n const apiKey = processEnv.ANTHROPIC_API_KEY;\n if (apiKey) env.ANTHROPIC_API_KEY = apiKey;\n const authToken = processEnv.ANTHROPIC_AUTH_TOKEN;\n if (authToken) env.ANTHROPIC_AUTH_TOKEN = authToken;\n const baseUrl = processEnv.ANTHROPIC_BASE_URL;\n if (baseUrl) env.ANTHROPIC_BASE_URL = baseUrl;\n return env;\n}\n\nfunction pickGateway({\n gatewayAuthFromEnv,\n}: {\n gatewayAuthFromEnv: ReturnType<typeof getAiGatewayAuthFromEnv>;\n}): Record<string, string> {\n const apiKey = gatewayAuthFromEnv.apiKey;\n // The Anthropic SDK appends `/v1/messages`, so the gateway base stays at its root.\n const baseUrl = gatewayAuthFromEnv.baseUrl.replace(/\\/+$/, '');\n const env: Record<string, string> = {};\n if (apiKey) {\n env.AI_GATEWAY_API_KEY = apiKey;\n env.ANTHROPIC_API_KEY = apiKey;\n }\n env.ANTHROPIC_BASE_URL = baseUrl;\n return env;\n}\n","import {\n harnessV1BridgeInboundCommandSchemas,\n harnessV1BridgeOutboundMessageSchema,\n harnessV1BridgeReadySchema,\n harnessV1BridgeStartBaseSchema,\n} from '@ai-sdk/harness';\nimport { z } from 'zod/v4';\n\n// Deep Agents bridge wire protocol; only the `start` payload is adapter-specific.\nexport const outboundMessageSchema = harnessV1BridgeOutboundMessageSchema;\nexport type OutboundMessage = z.infer<typeof outboundMessageSchema>;\n\nconst thinkingSchema = z.discriminatedUnion('type', [\n z.object({\n type: z.literal('adaptive'),\n display: z.enum(['summarized', 'omitted']).optional(),\n }),\n z.object({\n type: z.literal('enabled'),\n budget_tokens: z.number(),\n display: z.enum(['summarized', 'omitted']).optional(),\n }),\n z.object({ type: z.literal('disabled') }),\n]);\n\nexport const startMessageSchema = harnessV1BridgeStartBaseSchema.extend({\n mcpServers: z.record(z.string(), z.unknown()).optional(),\n /*\n * Appended to Deep Agents's native system prompt when the bridge constructs\n * the session's agent.\n */\n instructions: z.string().optional(),\n thinking: thinkingSchema.optional(),\n effort: z.enum(['low', 'medium', 'high', 'xhigh', 'max']).optional(),\n // In-backend skills source dirs ($HOME and <workDir>), passed to createDeepAgent({ skills }).\n skillsPaths: z.array(z.string()).optional(),\n skillsChanged: z.boolean().optional(),\n // Max LangGraph super-steps per turn (streamEvents recursionLimit).\n recursionLimit: z.number().optional(),\n headers: z.record(z.string(), z.string()).optional(),\n});\n\nexport type StartMessage = z.infer<typeof startMessageSchema>;\n\nexport const inboundMessageSchema = z.discriminatedUnion('type', [\n startMessageSchema,\n ...harnessV1BridgeInboundCommandSchemas,\n]);\nexport type InboundMessage = z.infer<typeof inboundMessageSchema>;\n\nexport const bridgeReadySchema = harnessV1BridgeReadySchema;\nexport type BridgeReady = z.infer<typeof bridgeReadySchema>;\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n","import { createDeepAgents } from './deepagents-harness';\n\n/** Default `deepagents` harness instance; equivalent to `createDeepAgents()`. */\nexport const deepAgents = createDeepAgents();\n\nexport { createDeepAgents } from './deepagents-harness';\nexport { VERSION } from './version';\nexport type {\n DeepAgentsHarnessSettings,\n DeepAgentsThinkingConfig,\n} from './deepagents-harness';\nexport type { DeepAgentsAuthenticationMode } from './deepagents-auth';\n"],"mappings":"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","names":["z","z","endpoint","proc"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/harness-deepagents",
3
- "version": "1.0.101",
3
+ "version": "1.0.103",
4
4
  "type": "module",
5
5
  "license": "Apache-2.0",
6
6
  "sideEffects": false,
@@ -26,8 +26,8 @@
26
26
  }
27
27
  },
28
28
  "dependencies": {
29
- "@ai-sdk/harness": "1.0.101",
30
- "@ai-sdk/provider-utils": "5.0.36",
29
+ "@ai-sdk/harness": "1.0.103",
30
+ "@ai-sdk/provider-utils": "5.0.37",
31
31
  "ws": "8.21.0"
32
32
  },
33
33
  "peerDependencies": {
@@ -59,10 +59,12 @@ function buildModel({
59
59
  rawModel,
60
60
  thinking,
61
61
  effort,
62
+ headers,
62
63
  }: {
63
64
  rawModel: string | undefined;
64
65
  thinking: StartMessage['thinking'];
65
66
  effort: StartMessage['effort'];
67
+ headers: StartMessage['headers'];
66
68
  }) {
67
69
  if (!rawModel) return undefined;
68
70
  const baseUrl = procEnv.ANTHROPIC_BASE_URL;
@@ -73,12 +75,17 @@ function buildModel({
73
75
  ...(effort ? { outputConfig: { effort } } : {}),
74
76
  ...(procEnv.ANTHROPIC_API_KEY ? { apiKey: procEnv.ANTHROPIC_API_KEY } : {}),
75
77
  ...(baseUrl ? { anthropicApiUrl: baseUrl } : {}),
76
- ...(procEnv.AI_GATEWAY_API_KEY && HARNESS_CLIENT_APP
78
+ ...(headers != null || procEnv.AI_GATEWAY_API_KEY
77
79
  ? {
78
80
  clientOptions: {
79
81
  defaultHeaders: {
80
- 'User-Agent': HARNESS_CLIENT_APP,
81
- 'x-client-app': HARNESS_CLIENT_APP,
82
+ ...headers,
83
+ ...(procEnv.AI_GATEWAY_API_KEY && HARNESS_CLIENT_APP
84
+ ? {
85
+ 'User-Agent': HARNESS_CLIENT_APP,
86
+ 'x-client-app': HARNESS_CLIENT_APP,
87
+ }
88
+ : {}),
82
89
  },
83
90
  },
84
91
  }
@@ -90,7 +97,7 @@ function createModelMiddleware() {
90
97
  return createMiddleware({
91
98
  name: 'harnessModel',
92
99
  wrapModelCall: async (request, handler) => {
93
- if (!activeModel && !activeThinking && !activeEffort) {
100
+ if (!activeModel && !activeThinking && !activeEffort && !activeHeaders) {
94
101
  return handler(request);
95
102
  }
96
103
 
@@ -99,6 +106,7 @@ function createModelMiddleware() {
99
106
  rawModel: activeModel,
100
107
  thinking: activeThinking,
101
108
  effort: activeEffort,
109
+ headers: activeHeaders,
102
110
  });
103
111
  if (!configuredModel) throw new Error('Deep Agents model is missing');
104
112
  return handler({ ...request, model: configuredModel });
@@ -120,6 +128,7 @@ function createModelMiddleware() {
120
128
  rawModel: model.model,
121
129
  thinking: activeThinking,
122
130
  effort: activeEffort,
131
+ headers: activeHeaders,
123
132
  });
124
133
  if (!configuredModel) throw new Error('Deep Agents model is missing');
125
134
 
@@ -157,6 +166,7 @@ let agentConfigurationSignature: string | undefined;
157
166
  let activeModel: string | undefined;
158
167
  let activeThinking: StartMessage['thinking'];
159
168
  let activeEffort: StartMessage['effort'];
169
+ let activeHeaders: StartMessage['headers'];
160
170
  const modelMiddleware = createModelMiddleware();
161
171
 
162
172
  type DeepAgentsJsonSchema = Record<string, unknown> & {
@@ -214,6 +224,7 @@ async function runTurn(start: StartMessage, turn: BridgeTurn): Promise<void> {
214
224
  if (start.model) activeModel = start.model;
215
225
  activeThinking = start.thinking;
216
226
  activeEffort = start.effort;
227
+ activeHeaders = start.headers;
217
228
  currentResponseFormat =
218
229
  start.responseFormat?.type === 'json' && start.responseFormat.schema != null
219
230
  ? toolStrategy(start.responseFormat.schema as DeepAgentsJsonSchema)
@@ -37,6 +37,7 @@ export const startMessageSchema = harnessV1BridgeStartBaseSchema.extend({
37
37
  skillsChanged: z.boolean().optional(),
38
38
  // Max LangGraph super-steps per turn (streamEvents recursionLimit).
39
39
  recursionLimit: z.number().optional(),
40
+ headers: z.record(z.string(), z.string()).optional(),
40
41
  });
41
42
 
42
43
  export type StartMessage = z.infer<typeof startMessageSchema>;