@ai-sdk/harness-claude-code 1.0.142 → 1.0.144

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/CHANGELOG.md CHANGED
@@ -1,5 +1,31 @@
1
1
  # @ai-sdk/harness-claude-code
2
2
 
3
+ ## 1.0.144
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies [fc1e19e]
8
+ - Updated dependencies [5094ebd]
9
+ - Updated dependencies [268225c]
10
+ - Updated dependencies [0af2f7c]
11
+ - Updated dependencies [4c6979c]
12
+ - @ai-sdk/provider-utils@5.0.55
13
+ - @ai-sdk/provider@4.0.23
14
+ - @ai-sdk/harness@1.0.140
15
+
16
+ ## 1.0.143
17
+
18
+ ### Patch Changes
19
+
20
+ - a470e0d: Fix over-reported `finish` metadata cost when Claude Code returns multiple results. `harnessMetadata['claude-code'].costUsd` now uses the latest cumulative `total_cost_usd` instead of adding running totals together, including costs carried forward by resumed sessions.
21
+ - 12d249f: fix(harness-claude-code): fix resumed turns ending with empty text when background-task notification result gets emitted before the host prompt is processed
22
+ - Updated dependencies [2959d35]
23
+ - Updated dependencies [e7da240]
24
+ - Updated dependencies [59116e6]
25
+ - @ai-sdk/provider@4.0.22
26
+ - @ai-sdk/provider-utils@5.0.54
27
+ - @ai-sdk/harness@1.0.139
28
+
3
29
  ## 1.0.142
4
30
 
5
31
  ### Patch Changes
@@ -1560,7 +1560,7 @@ async function runTurn(start, turn) {
1560
1560
  }
1561
1561
  const harnessUsage = mapUsage(msg.usage ?? msg.message?.usage);
1562
1562
  if (harnessUsage) turnUsage = addUsage(turnUsage, harnessUsage);
1563
- if (typeof msg.total_cost_usd === "number") totalCostUsd = (totalCostUsd ?? 0) + msg.total_cost_usd;
1563
+ if (typeof msg.total_cost_usd === "number") totalCostUsd = msg.total_cost_usd;
1564
1564
  if (start.responseFormat?.type === "json" && msg.structured_output !== void 0) {
1565
1565
  const id = randomUUID();
1566
1566
  emit({
@@ -1583,6 +1583,7 @@ async function runTurn(start, turn) {
1583
1583
  emit,
1584
1584
  usage: streamEventState.pendingStepUsage ?? harnessUsage
1585
1585
  });
1586
+ if (!queryInput.answersSentMessage(msg)) continue;
1586
1587
  queryInput.observeResult();
1587
1588
  if (!queryInput.hasActiveUserMessages()) {
1588
1589
  queryInput.close();
@@ -1630,6 +1631,14 @@ function createQueryInput({ initialUserMessage, userMessages, abortSignal }) {
1630
1631
  let closed = false;
1631
1632
  let observedResult = false;
1632
1633
  const submittedMessages = /* @__PURE__ */ new Map();
1634
+ const initialMessageId = randomUUID();
1635
+ const sentMessageIds = /* @__PURE__ */ new Set([initialMessageId]);
1636
+ let cliEchoesMessageIds = false;
1637
+ const noteEcho = (ids) => {
1638
+ const echoed = ids.some((id) => typeof id === "string" && sentMessageIds.has(id));
1639
+ if (echoed) cliEchoesMessageIds = true;
1640
+ return echoed;
1641
+ };
1633
1642
  const close = (error) => {
1634
1643
  if (closed) return;
1635
1644
  closed = true;
@@ -1656,6 +1665,8 @@ function createQueryInput({ initialUserMessage, userMessages, abortSignal }) {
1656
1665
  handleLifecycle: (message) => {
1657
1666
  const lifecycle = message;
1658
1667
  if (lifecycle.command_uuid == null || lifecycle.state == null) return;
1668
+ noteEcho([lifecycle.command_uuid]);
1669
+ if (lifecycle.command_uuid === initialMessageId && (lifecycle.state === "cancelled" || lifecycle.state === "discarded")) observedResult = true;
1659
1670
  const submitted = submittedMessages.get(lifecycle.command_uuid);
1660
1671
  if (submitted == null) return;
1661
1672
  if (lifecycle.state === "queued" || lifecycle.state === "started") {
@@ -1666,6 +1677,10 @@ function createQueryInput({ initialUserMessage, userMessages, abortSignal }) {
1666
1677
  submittedMessages.delete(lifecycle.command_uuid);
1667
1678
  },
1668
1679
  hasActiveUserMessages: () => submittedMessages.size > 0 || userMessages.pendingCount > 0,
1680
+ answersSentMessage: (result) => {
1681
+ const { user_message_uuid, user_message_uuids, origin } = result;
1682
+ return noteEcho([user_message_uuid, ...Array.isArray(user_message_uuids) ? user_message_uuids : []]) || !cliEchoesMessageIds && origin?.kind !== "task-notification";
1683
+ },
1669
1684
  observeResult: () => {
1670
1685
  observedResult = true;
1671
1686
  },
@@ -1684,7 +1699,7 @@ function createQueryInput({ initialUserMessage, userMessages, abortSignal }) {
1684
1699
  return {
1685
1700
  value: toUserMessage({
1686
1701
  text: initialUserMessage,
1687
- messageId: randomUUID()
1702
+ messageId: initialMessageId
1688
1703
  }),
1689
1704
  done: false
1690
1705
  };
@@ -1695,6 +1710,7 @@ function createQueryInput({ initialUserMessage, userMessages, abortSignal }) {
1695
1710
  done: true
1696
1711
  };
1697
1712
  submittedMessages.set(nextMessage.value.messageId, nextMessage.value);
1713
+ sentMessageIds.add(nextMessage.value.messageId);
1698
1714
  return {
1699
1715
  value: toUserMessage({
1700
1716
  text: nextMessage.value.text,
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["procEnv"],"sources":["../../../harness/dist/bridge/index.js","../../src/bridge/compaction-latch.ts","../../src/bridge/claude-code-system-prompt.ts","../../src/bridge/claude-skills-option.ts","../../src/bridge/create-emit-stream-event.ts","../../src/bridge/json-schema-to-zod.ts","../../src/bridge/tool-filtering.ts","../../src/bridge/question-tool.ts","../../src/bridge/index.ts"],"sourcesContent":["import { appendFile, mkdir, writeFile } from \"node:fs/promises\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { randomUUID } from \"node:crypto\";\nimport { env, pid, stdout } from \"node:process\";\nimport { WebSocketServer } from \"ws\";\n//#region src/bridge/harness-bridge-capability-unsupported-error.ts\nconst name = \"AI_HarnessBridgeCapabilityUnsupportedError\";\n/**\n* Signals an unsupported capability discovered inside a sandbox bridge.\n* `isInstance` also recognizes the serialized error shape received by the\n* host, where it can be translated to `HarnessCapabilityUnsupportedError`.\n*/\nvar HarnessBridgeCapabilityUnsupportedError = class extends Error {\n\tconstructor({ message, harnessId, cause }) {\n\t\tsuper(message);\n\t\tObject.defineProperty(this, \"name\", { value: name });\n\t\tthis.harnessId = harnessId;\n\t\tthis.cause = cause;\n\t}\n\tstatic isInstance(error) {\n\t\treturn error != null && typeof error === \"object\" && \"name\" in error && error.name === name && \"message\" in error && typeof error.message === \"string\";\n\t}\n};\n//#endregion\n//#region src/bridge/index.ts\nconst DEBUG_LEVEL_WEIGHT = {\n\terror: 0,\n\twarn: 1,\n\tinfo: 2,\n\tdebug: 3,\n\ttrace: 4\n};\n/** Exact-or-dotted-prefix subsystem match (`'bridge'` matches `'bridge.turn'`). */\nfunction subsystemMatches(filters, subsystem) {\n\tif (!filters || filters.length === 0) return true;\n\treturn filters.some((filter) => subsystem === filter || subsystem.startsWith(`${filter}.`));\n}\nfunction formatBridgeError(err) {\n\tif (err instanceof Error) return {\n\t\tname: err.name,\n\t\tmessage: err.message,\n\t\tstack: err.stack\n\t};\n\tif (typeof err === \"string\") return { message: err };\n\tif (err !== null && typeof err === \"object\") try {\n\t\treturn { message: JSON.stringify(err) };\n\t} catch {}\n\treturn { message: String(err) };\n}\nfunction createBridgeUserMessageQueue(options) {\n\tconst messages = [];\n\tconst waiters = [];\n\tconst entries = /* @__PURE__ */ new Map();\n\tlet closed = false;\n\tlet pendingCount = 0;\n\tconst enqueue = (input) => {\n\t\tconst existing = entries.get(input.messageId);\n\t\tif (existing != null) {\n\t\t\tif (existing.response != null) options.respond(existing.response);\n\t\t\treturn;\n\t\t}\n\t\tlet settled = false;\n\t\tconst settle = (response) => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tpendingCount--;\n\t\t\tconst entry = entries.get(input.messageId);\n\t\t\tif (entry != null) entry.response = response;\n\t\t\toptions.respond(response);\n\t\t};\n\t\tconst message = {\n\t\t\tmessageId: input.messageId,\n\t\t\ttext: input.text,\n\t\t\taccept: () => {\n\t\t\t\tsettle({\n\t\t\t\t\ttype: \"user-message-response\",\n\t\t\t\t\tmessageId: input.messageId,\n\t\t\t\t\taccepted: true\n\t\t\t\t});\n\t\t\t},\n\t\t\treject: (error) => {\n\t\t\t\tsettle({\n\t\t\t\t\ttype: \"user-message-response\",\n\t\t\t\t\tmessageId: input.messageId,\n\t\t\t\t\taccepted: false,\n\t\t\t\t\terror: { message: formatBridgeError(error).message }\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t\tentries.set(input.messageId, { reject: message.reject });\n\t\tpendingCount++;\n\t\tif (closed) {\n\t\t\tmessage.reject(/* @__PURE__ */ new Error(\"The bridge turn is no longer accepting user messages.\"));\n\t\t\treturn;\n\t\t}\n\t\tconst waiter = waiters.shift();\n\t\tif (waiter != null) waiter({\n\t\t\tdone: false,\n\t\t\tvalue: message\n\t\t});\n\t\telse messages.push(message);\n\t};\n\tconst close = (error) => {\n\t\tif (closed) return;\n\t\tclosed = true;\n\t\tconst reason = error ?? /* @__PURE__ */ new Error(\"The bridge turn ended before accepting the user message.\");\n\t\tfor (const entry of entries.values()) if (entry.response == null) entry.reject(reason);\n\t\tmessages.length = 0;\n\t\twhile (waiters.length > 0) waiters.shift()({\n\t\t\tdone: true,\n\t\t\tvalue: void 0\n\t\t});\n\t};\n\treturn {\n\t\tget pendingCount() {\n\t\t\treturn pendingCount;\n\t\t},\n\t\tenqueue,\n\t\tclose,\n\t\t[Symbol.asyncIterator]() {\n\t\t\treturn { next: () => {\n\t\t\t\tconst message = messages.shift();\n\t\t\t\tif (message != null) return Promise.resolve({\n\t\t\t\t\tdone: false,\n\t\t\t\t\tvalue: message\n\t\t\t\t});\n\t\t\t\tif (closed) return Promise.resolve({\n\t\t\t\t\tdone: true,\n\t\t\t\t\tvalue: void 0\n\t\t\t\t});\n\t\t\t\treturn new Promise((resolve) => {\n\t\t\t\t\twaiters.push(resolve);\n\t\t\t\t});\n\t\t\t} };\n\t\t}\n\t};\n}\nfunction parseEnvList(value) {\n\tif (!value) return void 0;\n\tconst items = value.split(\",\").map((item) => item.trim()).filter(Boolean);\n\treturn items.length > 0 ? items : void 0;\n}\nconst ENV_TRUTHY = /* @__PURE__ */ new Set([\n\t\"1\",\n\t\"true\",\n\t\"yes\",\n\t\"on\"\n]);\nconst WS_OPEN = 1;\nasync function runBridge(options) {\n\tconst { bridgeType, bridgeStateDir, onStart, onStop, onDestroy } = options;\n\tconst teardownGraceMs = options.turnTeardownGraceMs ?? 1e4;\n\tconst expectedToken = options.token ?? env.BRIDGE_CHANNEL_TOKEN ?? \"\";\n\tconst bridgeWsPort = options.port ?? parseInt(env.BRIDGE_WS_PORT ?? \"0\", 10);\n\tconst bridgeMetaPath = `${bridgeStateDir}/bridge-meta.json`;\n\tconst startConfigPath = `${bridgeStateDir}/start-config.json`;\n\tconst rerunStartConfigPath = `${bridgeStateDir}/rerun-start-config.json`;\n\tconst eventLogPath = `${bridgeStateDir}/event-log.ndjson`;\n\ttry {\n\t\tawait mkdir(bridgeStateDir, { recursive: true });\n\t} catch {}\n\tlet currentBoundPort = 0;\n\tlet currentTurnState = \"init\";\n\tlet activeSocket;\n\tlet isFirstTurn = true;\n\tlet turnAbort;\n\tlet currentUserMessages;\n\t/**\n\t* Settles when the in-flight turn has fully wound down — `onStart`\n\t* returned or threw AND its completion state was recorded. `undefined`\n\t* between turns. A new `start` fences on this so turns never overlap.\n\t*/\n\tlet activeTurn;\n\tlet debugConfig;\n\tlet consoleCaptureInstalled = false;\n\tconst envDebugEnabled = ENV_TRUTHY.has((env.HARNESS_DEBUG ?? \"\").toLowerCase());\n\tlet seqCounter = 0;\n\tlet eventLog = [];\n\tlet diskBuffer = \"\";\n\tlet flushPromise = null;\n\tconst flushEventsToDisk = async () => {\n\t\twhile (diskBuffer.length > 0) {\n\t\t\tconst buf = diskBuffer;\n\t\t\tdiskBuffer = \"\";\n\t\t\tawait appendFile(eventLogPath, buf).catch(() => {});\n\t\t}\n\t};\n\tconst scheduleEventFlush = () => {\n\t\tif (flushPromise) return;\n\t\tflushPromise = new Promise((resolve) => {\n\t\t\tsetImmediate(() => {\n\t\t\t\tflushEventsToDisk().finally(resolve);\n\t\t\t});\n\t\t}).finally(() => {\n\t\t\tflushPromise = null;\n\t\t\tif (diskBuffer.length > 0) scheduleEventFlush();\n\t\t});\n\t};\n\tconst flushPendingEventsToDisk = async () => {\n\t\tif (diskBuffer.length > 0 && !flushPromise) scheduleEventFlush();\n\t\tlet inFlight = flushPromise;\n\t\twhile (inFlight) {\n\t\t\tawait inFlight;\n\t\t\tinFlight = flushPromise;\n\t\t}\n\t};\n\tif (env.BRIDGE_REPLAY_FROM_DISK === \"1\" && existsSync(eventLogPath)) try {\n\t\teventLog = readFileSync(eventLogPath, \"utf8\").split(\"\\n\").map((line) => line.trim()).filter(Boolean).map((line) => ({\n\t\t\tseq: JSON.parse(line).seq,\n\t\t\tline\n\t\t}));\n\t\tseqCounter = eventLog.at(-1)?.seq ?? 0;\n\t} catch {\n\t\teventLog = [];\n\t\tseqCounter = 0;\n\t}\n\tconst pendingToolResults = /* @__PURE__ */ new Map();\n\tconst bufferedToolResults = [];\n\tconst pendingToolApprovals = /* @__PURE__ */ new Map();\n\tconst writeBridgeMeta = async (state) => {\n\t\ttry {\n\t\t\tawait writeFile(bridgeMetaPath, JSON.stringify({\n\t\t\t\ttype: bridgeType,\n\t\t\t\tport: currentBoundPort,\n\t\t\t\tstate,\n\t\t\t\tpid\n\t\t\t}));\n\t\t} catch {}\n\t};\n\tconst writeStartConfig = async (start) => {\n\t\ttry {\n\t\t\tconst serialized = JSON.stringify(start);\n\t\t\tawait writeFile(startConfigPath, serialized);\n\t\t\tif (!existsSync(rerunStartConfigPath)) await writeFile(rerunStartConfigPath, serialized);\n\t\t} catch {}\n\t};\n\tconst emit = (event) => {\n\t\tconst seq = ++seqCounter;\n\t\tconst line = JSON.stringify({\n\t\t\t...event,\n\t\t\tseq\n\t\t});\n\t\teventLog.push({\n\t\t\tseq,\n\t\t\tline\n\t\t});\n\t\tdiskBuffer += `${line}\\n`;\n\t\tscheduleEventFlush();\n\t\tif (activeSocket?.readyState === WS_OPEN) try {\n\t\t\tactiveSocket.send(line);\n\t\t} catch {}\n\t};\n\tconst replay = (ws, afterSeq) => {\n\t\tfor (const entry of eventLog) if (entry.seq > afterSeq && ws.readyState === WS_OPEN) ws.send(entry.line);\n\t};\n\tconst shouldEmitDebugEvent = (level, subsystem) => {\n\t\tif (!debugConfig?.enabled) return false;\n\t\tconst threshold = debugConfig.level ?? \"debug\";\n\t\tif (DEBUG_LEVEL_WEIGHT[level] > DEBUG_LEVEL_WEIGHT[threshold]) return false;\n\t\treturn subsystemMatches(debugConfig.subsystems, subsystem);\n\t};\n\tconst rawStdoutWrite = process.stdout.write.bind(process.stdout);\n\tconst rawStderrWrite = process.stderr.write.bind(process.stderr);\n\tconst writeErrorToStderr = (input) => {\n\t\ttry {\n\t\t\tconst formatted = formatBridgeError(input.error);\n\t\t\trawStderrWrite(`[harness:${bridgeType}:error] ${input.message}: ${formatted.message}\\n`);\n\t\t\tif (formatted.stack) rawStderrWrite(`${formatted.stack}\\n`);\n\t\t} catch {}\n\t};\n\tconst emitWarning = (input) => {\n\t\ttry {\n\t\t\tfor (const line of input.message.split(\"\\n\")) if (line.trim().length > 0) rawStderrWrite(`[harness:${bridgeType}:warn] ${line}\\n`);\n\t\t} catch {}\n\t};\n\tconst emitError = (input) => {\n\t\twriteErrorToStderr({\n\t\t\tmessage: input.message ?? \"bridge error\",\n\t\t\terror: input.error\n\t\t});\n\t\temit({\n\t\t\ttype: \"error\",\n\t\t\terror: serialiseError(input.error)\n\t\t});\n\t};\n\tconst installConsoleCapture = () => {\n\t\tif (consoleCaptureInstalled) return;\n\t\tconsoleCaptureInstalled = true;\n\t\tconst buffers = {\n\t\t\tstdout: \"\",\n\t\t\tstderr: \"\"\n\t\t};\n\t\tconst patch = (stream, raw) => (chunk, encoding, cb) => {\n\t\t\tif (debugConfig?.enabled) try {\n\t\t\t\tconst enc = typeof encoding === \"string\" ? encoding : \"utf8\";\n\t\t\t\tconst text = typeof chunk === \"string\" ? chunk : Buffer.from(chunk).toString(enc);\n\t\t\t\tconst parts = (buffers[stream] + text.replace(/\\r\\n/g, \"\\n\")).split(\"\\n\");\n\t\t\t\tbuffers[stream] = parts.pop() ?? \"\";\n\t\t\t\tfor (const line of parts) {\n\t\t\t\t\tconst trimmed = line.replace(/\\s+$/, \"\");\n\t\t\t\t\tif (trimmed) emit({\n\t\t\t\t\t\ttype: \"sandbox-log\",\n\t\t\t\t\t\tsource: bridgeType,\n\t\t\t\t\t\tstream,\n\t\t\t\t\t\tline: trimmed\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} catch {}\n\t\t\treturn raw(chunk, encoding, cb);\n\t\t};\n\t\tprocess.stdout.write = patch(\"stdout\", rawStdoutWrite);\n\t\tprocess.stderr.write = patch(\"stderr\", rawStderrWrite);\n\t};\n\tconst handleInbound = async (msg, ws) => {\n\t\tswitch (msg.type) {\n\t\t\tcase \"start\": {\n\t\t\t\tfor (;;) {\n\t\t\t\t\tconst pendingTurn = activeTurn;\n\t\t\t\t\tif (pendingTurn == null) break;\n\t\t\t\t\tturnAbort?.abort();\n\t\t\t\t\tcurrentUserMessages?.close(/* @__PURE__ */ new Error(\"A new bridge turn replaced the active turn.\"));\n\t\t\t\t\tlet graceTimer;\n\t\t\t\t\tconst settled = await Promise.race([pendingTurn.then(() => true), new Promise((resolve) => {\n\t\t\t\t\t\tgraceTimer = setTimeout(() => resolve(false), teardownGraceMs);\n\t\t\t\t\t\tgraceTimer.unref?.();\n\t\t\t\t\t})]);\n\t\t\t\t\tclearTimeout(graceTimer);\n\t\t\t\t\tif (!settled) break;\n\t\t\t\t}\n\t\t\t\tlet turnFinished;\n\t\t\t\tconst thisTurn = new Promise((resolve) => turnFinished = resolve);\n\t\t\t\tactiveTurn = thisTurn;\n\t\t\t\tactiveSocket = ws;\n\t\t\t\tconst firstTurn = isFirstTurn;\n\t\t\t\tisFirstTurn = false;\n\t\t\t\teventLog = [];\n\t\t\t\tdiskBuffer = \"\";\n\t\t\t\twriteFile(eventLogPath, \"\").catch(() => {});\n\t\t\t\tturnAbort = new AbortController();\n\t\t\t\tcurrentTurnState = \"running\";\n\t\t\t\twriteStartConfig(msg);\n\t\t\t\twriteBridgeMeta(\"running\");\n\t\t\t\tconst startDebug = msg.debug;\n\t\t\t\tdebugConfig = {\n\t\t\t\t\tenabled: startDebug?.enabled ?? envDebugEnabled,\n\t\t\t\t\tlevel: startDebug?.level ?? env.HARNESS_DEBUG_LEVEL,\n\t\t\t\t\tsubsystems: startDebug?.subsystems ?? parseEnvList(env.HARNESS_DEBUG_SUBSYSTEMS)\n\t\t\t\t};\n\t\t\t\tif (debugConfig.enabled) installConsoleCapture();\n\t\t\t\tconst userMessages = createBridgeUserMessageQueue({ respond: emit });\n\t\t\t\tconst turn = {\n\t\t\t\t\temit,\n\t\t\t\t\trequestToolResult: (requestInput) => {\n\t\t\t\t\t\tconst request = typeof requestInput === \"string\" ? { toolCallId: requestInput } : requestInput;\n\t\t\t\t\t\tconst bufferedIndex = bufferedToolResults.findIndex((buffered) => buffered.toolCallId === request.toolCallId || request.matches?.(buffered.result) === true);\n\t\t\t\t\t\tif (bufferedIndex >= 0) return Promise.resolve(bufferedToolResults.splice(bufferedIndex, 1)[0].result);\n\t\t\t\t\t\treturn new Promise((resolve) => {\n\t\t\t\t\t\t\tpendingToolResults.set(request.toolCallId, {\n\t\t\t\t\t\t\t\tresolve,\n\t\t\t\t\t\t\t\tmatches: request.matches\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\trequestToolApproval: (approvalId) => new Promise((resolve) => {\n\t\t\t\t\t\tpendingToolApprovals.set(approvalId, resolve);\n\t\t\t\t\t}),\n\t\t\t\t\texperimental_userMessages: userMessages,\n\t\t\t\t\tabortSignal: turnAbort.signal,\n\t\t\t\t\tfirstTurn,\n\t\t\t\t\tbridgeLog: (input) => {\n\t\t\t\t\t\tconst level = input.level ?? \"debug\";\n\t\t\t\t\t\tif (!shouldEmitDebugEvent(level, input.subsystem)) return;\n\t\t\t\t\t\temit({\n\t\t\t\t\t\t\ttype: \"debug-event\",\n\t\t\t\t\t\t\tlevel,\n\t\t\t\t\t\t\tsubsystem: input.subsystem,\n\t\t\t\t\t\t\tmessage: input.message,\n\t\t\t\t\t\t\t...input.attrs ? { attrs: input.attrs } : {},\n\t\t\t\t\t\t\t...input.error !== void 0 ? { error: formatBridgeError(input.error) } : {}\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\temitWarning,\n\t\t\t\t\temitError\n\t\t\t\t};\n\t\t\t\tcurrentUserMessages = userMessages;\n\t\t\t\ttry {\n\t\t\t\t\tawait onStart(msg, turn);\n\t\t\t\t} catch (err) {\n\t\t\t\t\temitError({\n\t\t\t\t\t\terror: err,\n\t\t\t\t\t\tmessage: \"bridge turn failed\"\n\t\t\t\t\t});\n\t\t\t\t} finally {\n\t\t\t\t\tuserMessages.close();\n\t\t\t\t\tif (currentUserMessages === userMessages) currentUserMessages = void 0;\n\t\t\t\t\tif (activeTurn === thisTurn) {\n\t\t\t\t\t\tactiveTurn = void 0;\n\t\t\t\t\t\tcurrentTurnState = \"waiting\";\n\t\t\t\t\t\twriteBridgeMeta(\"waiting\");\n\t\t\t\t\t}\n\t\t\t\t\tturnFinished();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase \"tool-result\": {\n\t\t\t\tconst result = {\n\t\t\t\t\toutput: msg.output,\n\t\t\t\t\tisError: msg.isError,\n\t\t\t\t\ttoolResult: msg.toolResult\n\t\t\t\t};\n\t\t\t\tconst exactPending = pendingToolResults.get(msg.toolCallId);\n\t\t\t\tconst matchingPending = exactPending == null ? Array.from(pendingToolResults.entries()).find(([, pending]) => pending.matches?.(result) === true) : void 0;\n\t\t\t\tconst pending = exactPending ?? matchingPending?.[1];\n\t\t\t\tconst pendingId = exactPending != null ? msg.toolCallId : matchingPending?.[0];\n\t\t\t\tif (pending != null && pendingId != null) {\n\t\t\t\t\tpendingToolResults.delete(pendingId);\n\t\t\t\t\tpending.resolve(result);\n\t\t\t\t} else bufferedToolResults.push({\n\t\t\t\t\ttoolCallId: msg.toolCallId,\n\t\t\t\t\tresult\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase \"tool-approval-response\": {\n\t\t\t\tconst resolver = pendingToolApprovals.get(msg.approvalId);\n\t\t\t\tif (resolver) {\n\t\t\t\t\tpendingToolApprovals.delete(msg.approvalId);\n\t\t\t\t\tresolver({\n\t\t\t\t\t\tapproved: msg.approved,\n\t\t\t\t\t\treason: msg.reason\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase \"user-message\": {\n\t\t\t\tconst messageId = msg.messageId ?? randomUUID();\n\t\t\t\tif (currentUserMessages == null) {\n\t\t\t\t\tsendControl(ws, {\n\t\t\t\t\t\ttype: \"user-message-response\",\n\t\t\t\t\t\tmessageId,\n\t\t\t\t\t\taccepted: false,\n\t\t\t\t\t\terror: { message: \"The bridge has no active turn to steer.\" }\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (ws !== activeSocket) {\n\t\t\t\t\tsendControl(ws, {\n\t\t\t\t\t\ttype: \"user-message-response\",\n\t\t\t\t\t\tmessageId,\n\t\t\t\t\t\taccepted: false,\n\t\t\t\t\t\terror: { message: \"The connection does not own the active bridge turn.\" }\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcurrentUserMessages.enqueue({\n\t\t\t\t\tmessageId,\n\t\t\t\t\ttext: msg.text\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase \"abort\":\n\t\t\t\tturnAbort?.abort();\n\t\t\t\treturn;\n\t\t\tcase \"resume\":\n\t\t\t\tactiveSocket = ws;\n\t\t\t\treplay(ws, msg.lastSeenEventId);\n\t\t\t\treturn;\n\t\t\tcase \"destroy\":\n\t\t\t\tcurrentTurnState = \"done\";\n\t\t\t\twriteBridgeMeta(\"done\");\n\t\t\t\tawait onDestroy?.();\n\t\t\t\tdrainThenExit(ws, 1e3, \"destroy\");\n\t\t\t\treturn;\n\t\t\tcase \"stop\":\n\t\t\t\tcurrentTurnState = \"done\";\n\t\t\t\twriteBridgeMeta(\"done\");\n\t\t\t\tsendControl(ws, {\n\t\t\t\t\ttype: \"bridge-stop\",\n\t\t\t\t\tdata: await onStop?.() ?? {}\n\t\t\t\t});\n\t\t\t\tdrainThenExit(ws, 1e3, \"stop\");\n\t\t}\n\t};\n\twriteBridgeMeta(\"init\");\n\tconst wss = new WebSocketServer({\n\t\tport: bridgeWsPort,\n\t\thost: \"0.0.0.0\"\n\t});\n\tconst exit = () => {\n\t\tif (options.onExit) {\n\t\t\toptions.onExit();\n\t\t\treturn;\n\t\t}\n\t\twss.close(() => process.exit(0));\n\t\tsetTimeout(() => process.exit(0), 1e3).unref();\n\t};\n\tconst drainThenExit = (ws, code, reason) => {\n\t\tconst start = Date.now();\n\t\tconst tick = () => {\n\t\t\tif (ws.bufferedAmount === 0 || ws.readyState !== WS_OPEN || Date.now() - start >= 5e3) {\n\t\t\t\tflushPendingEventsToDisk().finally(() => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tws.close(code, reason);\n\t\t\t\t\t} finally {\n\t\t\t\t\t\texit();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetTimeout(tick, 10).unref();\n\t\t};\n\t\ttick();\n\t};\n\twss.on(\"listening\", () => {\n\t\tconst addr = wss.address();\n\t\tcurrentBoundPort = typeof addr === \"object\" && addr ? addr.port : 0;\n\t\tcurrentTurnState = \"waiting\";\n\t\twriteBridgeMeta(\"waiting\");\n\t\tstdout.write(JSON.stringify({\n\t\t\ttype: \"bridge-ready\",\n\t\t\tport: currentBoundPort\n\t\t}) + \"\\n\");\n\t\toptions.onListening?.(currentBoundPort);\n\t});\n\twss.on(\"connection\", (ws, req) => {\n\t\tif (new URL(req.url ?? \"/\", \"http://localhost\").searchParams.get(\"agent_bridge_token\") !== expectedToken) {\n\t\t\tws.close(1008, \"unauthorized\");\n\t\t\treturn;\n\t\t}\n\t\tsendControl(ws, {\n\t\t\ttype: \"bridge-hello\",\n\t\t\tstate: currentTurnState,\n\t\t\tlastSeq: seqCounter,\n\t\t\tcapabilities: { experimental_userMessageResponses: true }\n\t\t});\n\t\tws.on(\"message\", (raw) => {\n\t\t\tlet parsed;\n\t\t\ttry {\n\t\t\t\tconst text = typeof raw === \"string\" ? raw : Buffer.from(raw).toString(\"utf8\");\n\t\t\t\tparsed = JSON.parse(text);\n\t\t\t} catch (err) {\n\t\t\t\tsendControl(ws, {\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\terror: `protocol parse error: ${err.message}`\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\thandleInbound(parsed, ws);\n\t\t});\n\t\tws.on(\"close\", () => {\n\t\t\tif (activeSocket === ws) activeSocket = void 0;\n\t\t});\n\t\tws.on(\"error\", () => {});\n\t});\n\tprocess.on(\"uncaughtException\", (err) => {\n\t\temitError({\n\t\t\terror: err,\n\t\t\tmessage: \"uncaught exception\"\n\t\t});\n\t});\n\tprocess.on(\"unhandledRejection\", (err) => {\n\t\temitError({\n\t\t\terror: err,\n\t\t\tmessage: \"unhandled rejection\"\n\t\t});\n\t});\n\tawait new Promise((resolve, reject) => {\n\t\tif (wss.address() != null) {\n\t\t\tresolve();\n\t\t\treturn;\n\t\t}\n\t\twss.once(\"listening\", resolve);\n\t\twss.once(\"error\", reject);\n\t});\n\treturn {\n\t\tport: currentBoundPort,\n\t\tclose: () => new Promise((resolve) => {\n\t\t\twss.close(() => resolve());\n\t\t})\n\t};\n}\nfunction sendControl(socket, message) {\n\tif (socket?.readyState === WS_OPEN) try {\n\t\tsocket.send(JSON.stringify(message));\n\t} catch {}\n}\nfunction serialiseError(err) {\n\tif (err instanceof Error) return {\n\t\tname: err.name,\n\t\tmessage: err.message,\n\t\tstack: err.stack\n\t};\n\treturn err;\n}\n//#endregion\nexport { HarnessBridgeCapabilityUnsupportedError, runBridge };\n\n//# sourceMappingURL=index.js.map","/*\n * Claude reports a compaction in two pieces whose arrival order is not\n * guaranteed: the `compact_boundary` system message (trigger + token counts)\n * and the `PostCompact` hook (the summary text). The harness `compaction`\n * event needs fields from both, so this latch holds each half and emits a\n * single merged event once both have arrived, then resets for the next\n * compaction in the same turn.\n */\n\nexport type CompactionBoundary = {\n trigger: 'manual' | 'auto';\n tokensBefore?: number;\n tokensAfter?: number;\n};\n\nexport type CompactionEvent = {\n type: 'compaction';\n trigger: 'manual' | 'auto';\n summary: string;\n tokensBefore?: number;\n tokensAfter?: number;\n};\n\nexport type CompactionLatch = {\n onBoundary(boundary: CompactionBoundary): void;\n onSummary(summary: string): void;\n};\n\nexport function createCompactionLatch(\n emit: (event: CompactionEvent) => void,\n): CompactionLatch {\n let boundary: CompactionBoundary | undefined;\n let summary: string | undefined;\n\n const tryEmit = (): void => {\n if (!boundary || summary === undefined) return;\n emit({\n type: 'compaction',\n trigger: boundary.trigger,\n summary,\n ...(boundary.tokensBefore !== undefined\n ? { tokensBefore: boundary.tokensBefore }\n : {}),\n ...(boundary.tokensAfter !== undefined\n ? { tokensAfter: boundary.tokensAfter }\n : {}),\n });\n boundary = undefined;\n summary = undefined;\n };\n\n return {\n onBoundary(next) {\n boundary = next;\n tryEmit();\n },\n onSummary(next) {\n summary = next;\n tryEmit();\n },\n };\n}\n","export function createClaudeCodeSystemPrompt(instructions?: string): {\n type: 'preset';\n preset: 'claude_code';\n append?: string;\n} {\n return {\n type: 'preset',\n preset: 'claude_code',\n ...(instructions ? { append: instructions } : {}),\n };\n}\n","export function toClaudeSkillsOption(\n skills: ReadonlyArray<string> | undefined,\n): 'all' | undefined {\n /*\n * The Claude Agent SDK treats `skills: string[]` as an allowlist, which hides\n * built-in/default skills. When the harness writes project skills, ask Claude\n * to enable every discovered skill so bundled defaults and project skills are\n * both visible.\n */\n return skills && skills.length > 0 ? 'all' : undefined;\n}\n","import { randomUUID } from 'node:crypto';\n\ntype Emit = (message: Record<string, unknown>) => void;\n\nexport type ClaudeMessage = {\n type?: string;\n subtype?: string;\n parent_tool_use_id?: string | null;\n model?: string;\n error?: string;\n error_status?: number | null;\n attempt?: number;\n max_retries?: number;\n retry_delay_ms?: number;\n patch?: { status?: string; error?: string };\n compact_metadata?: {\n trigger: 'manual' | 'auto';\n pre_tokens?: number;\n post_tokens?: number;\n };\n event?: {\n type?: string;\n index?: number;\n usage?: Record<string, unknown>;\n message?: {\n usage?: Record<string, unknown>;\n };\n content_block?: {\n type?: string;\n id?: string;\n name?: string;\n };\n delta?: {\n type?: string;\n text?: string;\n thinking?: string;\n partial_json?: string;\n };\n };\n message?: {\n content?: string | ReadonlyArray<MessageBlock>;\n usage?: Record<string, unknown>;\n };\n result?: string;\n /** Result-message error flags; distinct from `error_status` (`api_retry`). */\n is_error?: boolean;\n api_error_status?: number | null;\n errors?: ReadonlyArray<string>;\n usage?: Record<string, unknown>;\n total_cost_usd?: number;\n structured_output?: unknown;\n tool_use_result?: unknown;\n};\n\ntype MessageBlock = {\n type: string;\n text?: string;\n thinking?: string;\n id?: string;\n name?: string;\n input?: unknown;\n tool_use_id?: string;\n content?: unknown;\n is_error?: boolean;\n};\n\nexport type ClaudeStreamEventState = {\n /*\n * Map of native tool-use id → tool name. Claude assistant messages emit\n * `tool_use` blocks with both `id` and `name`; the matching `tool_result`\n * block on a later user message carries only `tool_use_id`, so without this\n * map the tool-result event would have to emit `toolName: 'unknown'`.\n */\n nativeToolCallNames: Map<string, string>;\n approvalRequestedToolUseIds: Set<string>;\n partialBlocks: Map<number, PartialBlock>;\n stepUsage: Record<string, unknown> | undefined;\n pendingStepToolUseIds: Set<string>;\n pendingStepAssistantUsage: Record<string, unknown> | undefined;\n pendingStepDeltaUsage: Record<string, unknown> | undefined;\n pendingStepUsage: Record<string, unknown> | undefined;\n pendingResponseUsage: Record<string, unknown> | undefined;\n stepOpen: boolean;\n /*\n * Tool-use ids that originated from the MCP server hosting user-supplied\n * tools. The MCP handler emits its own `tool-call`/`tool-result` pair with\n * the user-facing tool name, so the duplicate `tool_result` block Claude\n * reports for the underlying native id must be suppressed.\n */\n mcpToolUseIds: Set<string>;\n externalMcpToolUseIds: Set<string>;\n structuredOutputToolUseIds: Set<string>;\n observedTerminalError: string | undefined;\n};\n\ntype PartialBlock =\n | { id: string; kind: 'text' | 'thinking' }\n | { id: string; kind: 'tool-input' };\n\nexport function createClaudeStreamEventState(): ClaudeStreamEventState {\n return {\n nativeToolCallNames: new Map(),\n approvalRequestedToolUseIds: new Set(),\n partialBlocks: new Map(),\n stepUsage: undefined,\n pendingStepToolUseIds: new Set(),\n pendingStepAssistantUsage: undefined,\n pendingStepDeltaUsage: undefined,\n pendingStepUsage: undefined,\n pendingResponseUsage: undefined,\n stepOpen: false,\n mcpToolUseIds: new Set(),\n externalMcpToolUseIds: new Set(),\n structuredOutputToolUseIds: new Set(),\n observedTerminalError: undefined,\n };\n}\n\nconst UNRECOVERABLE_API_RETRY_STATUSES = new Set([401, 403, 404]);\nconst HOST_TOOL_PREFIX = 'mcp__harness-tools__';\nconst RAW_TASK_MESSAGE_SUBTYPES = new Set([\n 'background_tasks_changed',\n 'task_started',\n 'task_progress',\n 'task_updated',\n 'task_notification',\n]);\n\nexport function isExternalMcpTool(nativeName: string): boolean {\n return (\n nativeName.startsWith('mcp__') && !nativeName.startsWith(HOST_TOOL_PREFIX)\n );\n}\n\nexport function createEmitStreamEvent({\n state,\n emit,\n emitWarning,\n emitTerminalError,\n onCompactionBoundary,\n toCommonName,\n}: {\n state: ClaudeStreamEventState;\n emit: Emit;\n emitWarning: (warning: { message: string }) => void;\n emitTerminalError: (message: string | undefined) => void;\n onCompactionBoundary: (boundary: {\n trigger: 'manual' | 'auto';\n tokensBefore?: number;\n tokensAfter?: number;\n }) => void;\n toCommonName: (nativeName: string) => string;\n}): (event: ClaudeMessage) => void {\n let streamStarted = false;\n\n return msg => {\n const type = msg.type;\n\n // Emit `stream-start` once, on the first message, carrying the model the\n // CLI resolved to (the `system`/`init` message reports it — this is the\n // default model when none was configured).\n if (!streamStarted) {\n const initModel =\n type === 'system' &&\n msg.subtype === 'init' &&\n typeof (msg as { model?: unknown }).model === 'string'\n ? (msg as { model: string }).model\n : undefined;\n emit({\n type: 'stream-start',\n ...(initModel ? { modelId: initModel } : {}),\n });\n streamStarted = true;\n }\n\n if (type === 'system' && msg.subtype === 'api_retry') {\n if (\n typeof msg.error_status === 'number' &&\n UNRECOVERABLE_API_RETRY_STATUSES.has(msg.error_status)\n ) {\n emitTerminalError(\n `HTTP ${msg.error_status}: ${msg.error ?? 'provider request failed'}`,\n );\n return;\n }\n\n emitWarning({ message: formatApiRetryWarning(msg) });\n return;\n }\n\n if (typeof msg.error === 'string' && msg.error.trim()) {\n state.observedTerminalError = msg.error.trim();\n }\n\n if (\n type === 'auth_status' &&\n typeof msg.error === 'string' &&\n msg.error.trim()\n ) {\n emitTerminalError(msg.error);\n return;\n }\n\n if (\n type === 'system' &&\n msg.subtype === 'task_updated' &&\n msg.patch?.status === 'failed' &&\n typeof msg.patch.error === 'string'\n ) {\n emitTerminalError(msg.patch.error);\n return;\n }\n\n if (type === 'system' && msg.subtype === 'compact_boundary') {\n const meta = msg.compact_metadata;\n if (meta) {\n onCompactionBoundary({\n trigger: meta.trigger,\n ...(typeof meta.pre_tokens === 'number'\n ? { tokensBefore: meta.pre_tokens }\n : {}),\n ...(typeof meta.post_tokens === 'number'\n ? { tokensAfter: meta.post_tokens }\n : {}),\n });\n }\n return;\n }\n\n if (\n type === 'tool_progress' ||\n (type === 'system' &&\n msg.subtype != null &&\n RAW_TASK_MESSAGE_SUBTYPES.has(msg.subtype))\n ) {\n emit({ type: 'raw', rawValue: msg });\n return;\n }\n\n // Messages emitted by a Task-tool subagent carry the parent tool-use id.\n // Forward them for correlation and nested rendering, but do not map them\n // into regular stream parts or let them affect the parent step.\n if (msg.parent_tool_use_id != null) {\n emit({ type: 'raw', rawValue: msg });\n return;\n }\n\n if (type === 'stream_event') {\n handleStreamEvent({\n event: msg.event,\n message: msg,\n state,\n send: emit,\n toCommonName,\n });\n return;\n }\n\n const messageContent = msg.message?.content;\n if (type === 'assistant' && Array.isArray(messageContent)) {\n const usage = toUsageRecord(msg.message?.usage);\n const toolUseIds: string[] = [];\n let opensStep = false;\n for (const block of messageContent) {\n if (\n block.type === 'tool_use' &&\n typeof block.id === 'string' &&\n typeof block.name === 'string'\n ) {\n toolUseIds.push(block.id);\n if (block.name === 'StructuredOutput') {\n state.structuredOutputToolUseIds.add(block.id);\n continue;\n }\n if (block.name.startsWith(HOST_TOOL_PREFIX)) {\n state.pendingStepToolUseIds.add(block.id);\n state.mcpToolUseIds.add(block.id);\n opensStep = true;\n continue;\n }\n state.nativeToolCallNames.set(block.id, block.name);\n if (block.name === 'AskUserQuestion') {\n state.pendingStepToolUseIds.add(block.id);\n opensStep = true;\n continue;\n }\n const dynamic = isExternalMcpTool(block.name);\n if (dynamic) state.externalMcpToolUseIds.add(block.id);\n if (state.approvalRequestedToolUseIds.has(block.id)) {\n continue;\n }\n state.pendingStepToolUseIds.add(block.id);\n opensStep = true;\n emit({\n type: 'tool-call',\n toolCallId: block.id,\n toolName: toCommonName(block.name),\n nativeName: block.name,\n input: JSON.stringify(block.input ?? {}),\n providerExecuted: true,\n ...(dynamic ? { dynamic: true } : {}),\n });\n }\n }\n if (opensStep || toolUseIds.length === 0) {\n state.stepOpen = true;\n if (usage) {\n state.pendingStepAssistantUsage = usage;\n updatePendingStepUsage(state);\n }\n }\n return;\n }\n\n if (type === 'user' && Array.isArray(messageContent)) {\n const toolResultBlocks = messageContent.filter(\n block => block.type === 'tool_result',\n );\n const toolUseResult =\n toolResultBlocks.length === 1 ? msg.tool_use_result : undefined;\n\n for (const block of messageContent) {\n if (\n block.type === 'tool_result' &&\n typeof block.tool_use_id === 'string'\n ) {\n if (state.structuredOutputToolUseIds.delete(block.tool_use_id)) {\n continue;\n }\n if (state.mcpToolUseIds.has(block.tool_use_id)) {\n state.mcpToolUseIds.delete(block.tool_use_id);\n state.pendingStepToolUseIds.delete(block.tool_use_id);\n continue;\n }\n state.approvalRequestedToolUseIds.delete(block.tool_use_id);\n const nativeName =\n state.nativeToolCallNames.get(block.tool_use_id) ?? 'unknown';\n state.nativeToolCallNames.delete(block.tool_use_id);\n const toolName = toCommonName(nativeName);\n const dynamic = state.externalMcpToolUseIds.delete(block.tool_use_id);\n const isError = !!block.is_error;\n const result =\n toolUseResult !== undefined\n ? toolUseResult\n : resolveToolResult({\n toolName,\n dynamic,\n isError,\n rawContent: block.content,\n });\n emit({\n type: 'tool-result',\n toolCallId: block.tool_use_id,\n toolName,\n result,\n isError,\n ...(dynamic ? { dynamic: true } : {}),\n });\n state.pendingStepToolUseIds.delete(block.tool_use_id);\n }\n }\n closeStepIfReady({ state, emit });\n }\n };\n}\n\nexport function finishApprovalStep({\n state,\n emit,\n approvalId,\n}: {\n state: ClaudeStreamEventState;\n emit: Emit;\n approvalId: string;\n}): void {\n state.stepOpen = true;\n state.pendingStepToolUseIds.delete(approvalId);\n closeStepIfReady({ state, emit });\n}\n\nexport function emitFinishStep({\n state,\n emit,\n usage,\n}: {\n state: ClaudeStreamEventState;\n emit: Emit;\n usage: Record<string, unknown> | undefined;\n}): void {\n emit({\n type: 'finish-step',\n finishReason: { unified: 'stop', raw: 'stop' },\n usage: usage ?? defaultUsage(),\n });\n state.stepUsage = usage ?? state.stepUsage;\n state.pendingStepAssistantUsage = undefined;\n state.pendingStepDeltaUsage = undefined;\n state.pendingStepUsage = undefined;\n state.pendingStepToolUseIds = new Set();\n state.stepOpen = false;\n}\n\nfunction closeStepIfReady({\n state,\n emit,\n}: {\n state: ClaudeStreamEventState;\n emit: Emit;\n}): void {\n if (\n !state.stepOpen ||\n state.pendingStepToolUseIds.size > 0 ||\n state.partialBlocks.size > 0\n ) {\n return;\n }\n emitFinishStep({ state, emit, usage: state.pendingStepUsage });\n}\n\nfunction formatApiRetryWarning(msg: ClaudeMessage): string {\n const details: string[] = [];\n if (typeof msg.attempt === 'number') {\n const maxRetries =\n typeof msg.max_retries === 'number' ? `/${msg.max_retries}` : '';\n details.push(`attempt ${msg.attempt}${maxRetries}`);\n }\n if (typeof msg.error_status === 'number') {\n details.push(`HTTP ${msg.error_status}`);\n }\n if (typeof msg.retry_delay_ms === 'number') {\n details.push(`retrying in ${msg.retry_delay_ms}ms`);\n }\n if (msg.error) details.push(msg.error);\n return details.length > 0\n ? `Claude Code API retry: ${details.join('; ')}`\n : 'Claude Code API retry';\n}\n\nfunction handleStreamEvent({\n event,\n message,\n state,\n send,\n toCommonName,\n}: {\n event: ClaudeMessage['event'] | undefined;\n message: ClaudeMessage;\n state: ClaudeStreamEventState;\n send: Emit;\n toCommonName: (nativeName: string) => string;\n}): void {\n if (!event) return;\n\n if (event.type === 'message_start') {\n state.pendingResponseUsage = toUsageRecord(event.message?.usage);\n return;\n }\n\n if (event.type === 'message_delta') {\n const usage = toUsageRecord(event.usage);\n if (usage) {\n state.pendingResponseUsage = mergeNonNullUsage(\n state.pendingResponseUsage,\n usage,\n );\n state.pendingStepDeltaUsage = mergeNonNullUsage(\n state.pendingStepDeltaUsage,\n usage,\n );\n updatePendingStepUsage(state);\n }\n return;\n }\n\n if (event.type === 'message_stop') {\n send({\n type: 'raw',\n rawValue: {\n ...message,\n usage: state.pendingResponseUsage ?? {},\n },\n });\n state.pendingResponseUsage = undefined;\n return;\n }\n\n if (typeof event.index !== 'number') return;\n const index = event.index;\n const partialBlocks = state.partialBlocks;\n\n if (event.type === 'content_block_start') {\n const blockType = event.content_block?.type;\n if (blockType === 'text') {\n const id = randomUUID();\n partialBlocks.set(index, { id, kind: 'text' });\n send({ type: 'text-start', id });\n } else if (blockType === 'thinking') {\n const id = randomUUID();\n partialBlocks.set(index, { id, kind: 'thinking' });\n send({ type: 'reasoning-start', id });\n } else if (\n blockType === 'tool_use' &&\n typeof event.content_block?.id === 'string' &&\n typeof event.content_block.name === 'string'\n ) {\n const id = event.content_block.id;\n const nativeName = event.content_block.name;\n if (nativeName === 'StructuredOutput') {\n return;\n }\n if (nativeName === 'AskUserQuestion') {\n return;\n }\n const hostToolName = nativeName.startsWith(HOST_TOOL_PREFIX)\n ? nativeName.slice(HOST_TOOL_PREFIX.length)\n : undefined;\n const dynamic = isExternalMcpTool(nativeName);\n partialBlocks.set(index, { id, kind: 'tool-input' });\n send({\n type: 'tool-input-start',\n id,\n toolName: hostToolName ?? toCommonName(nativeName),\n providerExecuted: hostToolName === undefined,\n ...(dynamic ? { dynamic: true } : {}),\n });\n }\n return;\n }\n\n if (event.type === 'content_block_delta') {\n const block = partialBlocks.get(index);\n if (!block) return;\n if (\n block.kind === 'text' &&\n event.delta?.type === 'text_delta' &&\n typeof event.delta.text === 'string'\n ) {\n send({ type: 'text-delta', id: block.id, delta: event.delta.text });\n } else if (\n block.kind === 'thinking' &&\n event.delta?.type === 'thinking_delta' &&\n typeof event.delta.thinking === 'string'\n ) {\n send({\n type: 'reasoning-delta',\n id: block.id,\n delta: event.delta.thinking,\n });\n } else if (\n block.kind === 'tool-input' &&\n event.delta?.type === 'input_json_delta' &&\n typeof event.delta.partial_json === 'string'\n ) {\n send({\n type: 'tool-input-delta',\n id: block.id,\n delta: event.delta.partial_json,\n });\n }\n return;\n }\n\n if (event.type === 'content_block_stop') {\n const block = partialBlocks.get(index);\n if (!block) return;\n partialBlocks.delete(index);\n if (block.kind === 'text') {\n send({ type: 'text-end', id: block.id });\n } else if (block.kind === 'thinking') {\n send({ type: 'reasoning-end', id: block.id });\n } else {\n send({ type: 'tool-input-end', id: block.id });\n }\n }\n}\n\nfunction toUsageRecord(usage: unknown): Record<string, unknown> | undefined {\n return usage != null && typeof usage === 'object'\n ? (usage as Record<string, unknown>)\n : undefined;\n}\n\nfunction mergeNonNullUsage(\n current: Record<string, unknown> | undefined,\n update: Record<string, unknown>,\n): Record<string, unknown> {\n const merged = { ...current };\n for (const [key, value] of Object.entries(update)) {\n if (value != null) {\n merged[key] = value;\n }\n }\n return merged;\n}\n\nfunction updatePendingStepUsage(state: ClaudeStreamEventState): void {\n const assistantUsage = state.pendingStepAssistantUsage;\n const deltaUsage = state.pendingStepDeltaUsage;\n state.pendingStepUsage = mapUsage(\n assistantUsage || deltaUsage\n ? { ...assistantUsage, ...deltaUsage }\n : undefined,\n );\n}\n\nfunction isTextEntry(entry: unknown): entry is { text?: unknown } {\n return entry != null && typeof entry === 'object' && 'text' in entry;\n}\n\nfunction stringifyContent(content: unknown): string {\n if (typeof content === 'string') return content;\n if (Array.isArray(content)) {\n return content\n .map(entry =>\n isTextEntry(entry) ? String(entry.text ?? '') : JSON.stringify(entry),\n )\n .join('');\n }\n return JSON.stringify(content);\n}\n\nfunction hasNonTextContent(content: unknown): boolean {\n return Array.isArray(content) && content.some(entry => !isTextEntry(entry));\n}\n\nfunction resolveToolResult({\n toolName,\n dynamic,\n isError,\n rawContent,\n}: {\n toolName: string;\n dynamic: boolean;\n isError: boolean;\n rawContent: unknown;\n}): unknown {\n /*\n * Claude Code's Bash tool does not report the command's real numeric exit\n * code — the SDK exposes only stdout/stderr text and an is_error flag.\n * Consumers (and the example UI) render bash failures from an `exitCode`\n * field on a structured result, the shape Codex's shell tool provides\n * natively. When Claude omits `tool_use_result`, derive a binary code from\n * is_error: 1 on failure, 0 on success. This fallback is a stand-in for\n * failed/succeeded, not the process's true exit status.\n */\n if (toolName === 'bash') {\n return { exitCode: isError ? 1 : 0, stdout: stringifyContent(rawContent) };\n }\n // Must precede the MCP branch: flattening a non-text block to base64 text\n // is not recoverable by parsing it back.\n if (hasNonTextContent(rawContent)) return rawContent;\n const content = stringifyContent(rawContent);\n return dynamic ? parseMcpToolResult(content) : content;\n}\n\nfunction parseMcpToolResult(content: string): unknown {\n try {\n const parsed = JSON.parse(content);\n // `JSON.parse` also succeeds on scalars; keep those as the string sent.\n return parsed !== null && typeof parsed === 'object' ? parsed : content;\n } catch {\n return content;\n }\n}\n\nexport function mapUsage(usage: unknown): Record<string, unknown> | undefined {\n if (!usage || typeof usage !== 'object') return undefined;\n const u = usage as {\n input_tokens?: number;\n cache_creation_input_tokens?: number;\n cache_read_input_tokens?: number;\n output_tokens?: number;\n };\n return {\n inputTokens: {\n total:\n (u.input_tokens ?? 0) +\n (u.cache_creation_input_tokens ?? 0) +\n (u.cache_read_input_tokens ?? 0),\n noCache: u.input_tokens ?? 0,\n cacheRead: u.cache_read_input_tokens ?? 0,\n cacheWrite: u.cache_creation_input_tokens ?? 0,\n },\n outputTokens: {\n total: u.output_tokens ?? 0,\n text: u.output_tokens ?? 0,\n },\n };\n}\n\nexport function defaultUsage(): Record<string, unknown> {\n return {\n inputTokens: { total: 0, noCache: 0, cacheRead: 0, cacheWrite: 0 },\n outputTokens: { total: 0, text: 0 },\n };\n}\n","import { z } from 'zod/v4';\n\ntype JsonLiteral = string | number | boolean | null;\n\nexport type JsonSchemaObject = {\n type?: string | string[];\n description?: string;\n properties?: Record<string, JsonSchemaObject>;\n additionalProperties?: boolean | JsonSchemaObject;\n required?: string[];\n items?: JsonSchemaObject | JsonSchemaObject[];\n enum?: unknown[];\n const?: unknown;\n oneOf?: JsonSchemaObject[];\n anyOf?: JsonSchemaObject[];\n nullable?: boolean;\n};\n\ntype ZodShape = Record<string, z.ZodTypeAny>;\n\nexport function jsonSchemaToZodObject(input: unknown) {\n const schema = isJsonSchemaObject(input) ? input : {};\n return toZodObject(schema);\n}\n\nfunction toZodObject(schema: JsonSchemaObject) {\n const object = z.object(toZodShape(schema));\n if (schema.additionalProperties === false) return object.strict();\n\n // JSON Schema allows additional properties by default; Zod strips them.\n return object.catchall(\n isJsonSchemaObject(schema.additionalProperties)\n ? toZodType(schema.additionalProperties)\n : z.unknown(),\n );\n}\n\nfunction toZodShape(schema: JsonSchemaObject | undefined): ZodShape {\n if (!schema?.properties) return {};\n const required = new Set(schema.required);\n const shape: ZodShape = {};\n for (const [key, propSchema] of Object.entries(schema.properties)) {\n const propType = toZodType(propSchema);\n let propertyType = required.has(key) ? propType : propType.optional();\n if (propSchema.description) {\n propertyType = propertyType.describe(propSchema.description);\n }\n shape[key] = propertyType;\n }\n return shape;\n}\n\nfunction toZodType(schema: JsonSchemaObject | undefined): z.ZodTypeAny {\n if (!schema) return z.any();\n\n let zType =\n zodForConst(schema) ??\n zodForEnum(schema) ??\n zodForUnion(schema) ??\n zodForType(schema);\n\n if (isNullable(schema)) zType = zType.nullable();\n if (schema.description) zType = zType.describe(schema.description);\n return zType;\n}\n\nfunction zodForType(schema: JsonSchemaObject): z.ZodTypeAny {\n const types = getNonNullTypes(schema);\n if (types.length > 1) return z.any();\n if (Array.isArray(schema.type) && types.length === 0) return z.null();\n const type = types[0] ?? (schema.properties ? 'object' : undefined);\n\n switch (type) {\n case 'string':\n return z.string();\n case 'number':\n return z.number();\n case 'integer':\n return z.number().int();\n case 'boolean':\n return z.boolean();\n case 'array':\n return z.array(\n Array.isArray(schema.items) ? z.any() : toZodType(schema.items),\n );\n case 'object':\n return toZodObject(schema);\n case 'null':\n return z.null();\n default:\n return z.any();\n }\n}\n\nfunction zodForConst(schema: JsonSchemaObject): z.ZodTypeAny | undefined {\n if (!('const' in schema)) return undefined;\n return isJsonLiteral(schema.const) ? z.literal(schema.const) : z.any();\n}\n\nfunction zodForEnum(schema: JsonSchemaObject): z.ZodTypeAny | undefined {\n if (!Array.isArray(schema.enum)) return undefined;\n if (!schema.enum.every(isJsonLiteral)) return z.any();\n return zodForLiterals(schema.enum);\n}\n\nfunction zodForUnion(schema: JsonSchemaObject): z.ZodTypeAny | undefined {\n const unionSchemas = schema.anyOf ?? schema.oneOf;\n if (!unionSchemas || unionSchemas.length < 2) return undefined;\n\n const options = unionSchemas.map(item => toZodType(item)) as unknown as [\n z.ZodTypeAny,\n z.ZodTypeAny,\n ...z.ZodTypeAny[],\n ];\n return z.union(options);\n}\n\nfunction zodForLiterals(values: JsonLiteral[]): z.ZodTypeAny {\n if (values.length === 0) return z.any();\n if (values.length === 1) return z.literal(values[0]);\n\n const literals = values.map(value => z.literal(value)) as unknown as [\n z.ZodTypeAny,\n z.ZodTypeAny,\n ...z.ZodTypeAny[],\n ];\n return z.union(literals);\n}\n\nfunction getNonNullTypes(schema: JsonSchemaObject): string[] {\n return Array.isArray(schema.type)\n ? schema.type.filter(type => type !== 'null')\n : ([schema.type].filter(Boolean) as string[]);\n}\n\nfunction isNullable(schema: JsonSchemaObject): boolean {\n return (\n schema.nullable === true ||\n (Array.isArray(schema.type) && schema.type.includes('null'))\n );\n}\n\nfunction isJsonSchemaObject(input: unknown): input is JsonSchemaObject {\n return input != null && typeof input === 'object' && !Array.isArray(input);\n}\n\nfunction isJsonLiteral(value: unknown): value is JsonLiteral {\n return (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'boolean' ||\n (typeof value === 'number' && Number.isFinite(value))\n );\n}\n","import type { StartMessage } from '../claude-code-bridge-protocol';\n\ntype BuiltinToolFiltering = StartMessage['builtinToolFiltering'];\n\nconst PUBLIC_TO_NATIVE: Readonly<Record<string, string>> = {\n read: 'Read',\n write: 'Write',\n edit: 'Edit',\n bash: 'Bash',\n glob: 'Glob',\n grep: 'Grep',\n webSearch: 'WebSearch',\n WebFetch: 'WebFetch',\n NotebookEdit: 'NotebookEdit',\n TodoWrite: 'TodoWrite',\n Agent: 'Agent',\n TaskCreate: 'TaskCreate',\n TaskGet: 'TaskGet',\n TaskUpdate: 'TaskUpdate',\n TaskList: 'TaskList',\n TaskStop: 'TaskStop',\n TaskOutput: 'TaskOutput',\n Monitor: 'Monitor',\n ListMcpResources: 'ListMcpResources',\n ReadMcpResource: 'ReadMcpResource',\n ExitPlanMode: 'ExitPlanMode',\n EnterWorktree: 'EnterWorktree',\n ExitWorktree: 'ExitWorktree',\n askUserQuestions: 'AskUserQuestion',\n Skill: 'Skill',\n ToolSearch: 'ToolSearch',\n};\n\nconst PUBLIC_TOOL_NAMES = Object.keys(PUBLIC_TO_NATIVE);\n\nfunction toNativeName(toolName: string): string {\n return PUBLIC_TO_NATIVE[toolName] ?? toolName;\n}\n\nexport function resolveNativeTools(\n toolFiltering: BuiltinToolFiltering,\n): string[] | undefined {\n if (toolFiltering == null || toolFiltering.mode === 'deny') return undefined;\n return toolFiltering.toolNames.map(name => toNativeName(name));\n}\n\nexport function resolveInactiveNativeTools(\n toolFiltering: BuiltinToolFiltering,\n): string[] {\n if (toolFiltering == null) return [];\n const inactiveToolNames =\n toolFiltering.mode === 'allow'\n ? PUBLIC_TOOL_NAMES.filter(\n name => !toolFiltering.toolNames.includes(name),\n )\n : toolFiltering.toolNames;\n return inactiveToolNames.map(name => toNativeName(name));\n}\n","import type {\n HarnessV1QuestionsToolInput,\n HarnessV1QuestionsToolOutput,\n} from '@ai-sdk/harness';\nimport type { AskUserQuestionInput } from '@anthropic-ai/claude-agent-sdk/sdk-tools.js';\n\ntype ClaudeCodeQuestion = AskUserQuestionInput['questions'][number];\n\nexport function claudeCodeQuestionKey(\n nativeInput: AskUserQuestionInput,\n): string {\n return JSON.stringify(nativeInput.questions);\n}\n\nexport function toHarnessQuestionsInput(\n nativeInput: AskUserQuestionInput,\n): HarnessV1QuestionsToolInput {\n return {\n allowPartialAnswers: true,\n questions: nativeInput.questions.map((question, questionIndex) => ({\n id: `question-${questionIndex + 1}`,\n question: question.question,\n header: question.header,\n options: question.options.map((option, optionIndex) => ({\n id: `option-${optionIndex + 1}`,\n label: option.label,\n description: option.description,\n ...(option.preview !== undefined ? { preview: option.preview } : {}),\n })),\n allowMultiple: question.multiSelect,\n allowFreeForm: true,\n })),\n };\n}\n\nexport function toClaudeCodeQuestionResult(input: {\n nativeInput: AskUserQuestionInput;\n output: HarnessV1QuestionsToolOutput;\n}):\n | {\n behavior: 'allow';\n updatedInput: AskUserQuestionInput & { answers: Record<string, string> };\n }\n | { behavior: 'deny'; message: string } {\n const output = input.output;\n if (output.action === 'declined' || output.action === 'cancelled') {\n return {\n behavior: 'deny',\n message: `The user ${output.action} the questions.`,\n };\n }\n\n const canonicalInput = toHarnessQuestionsInput(input.nativeInput);\n const answers = Object.fromEntries(\n canonicalInput.questions.flatMap((question, questionIndex) => {\n const answer = output.answers[question.id];\n if (answer == null) return [];\n const nativeQuestion = input.nativeInput.questions[questionIndex];\n return [\n [\n nativeQuestion.question,\n toClaudeCodeAnswer({\n nativeQuestion,\n optionIds: answer.optionIds,\n freeform: answer.freeform,\n }),\n ],\n ];\n }),\n );\n\n return {\n behavior: 'allow',\n updatedInput: { ...input.nativeInput, answers },\n };\n}\n\nfunction toClaudeCodeAnswer(input: {\n nativeQuestion: ClaudeCodeQuestion;\n optionIds: string[];\n freeform: string | undefined;\n}): string {\n if (input.freeform !== undefined) return input.freeform;\n const labels = input.optionIds.flatMap(optionId => {\n const index = positionalIdIndex({ id: optionId, prefix: 'option-' });\n const option =\n index == null ? undefined : input.nativeQuestion.options[index];\n return option == null ? [] : [option.label];\n });\n return input.nativeQuestion.multiSelect\n ? labels.join(', ')\n : (labels[0] ?? '');\n}\n\nfunction positionalIdIndex(input: {\n id: string;\n prefix: string;\n}): number | undefined {\n if (!input.id.startsWith(input.prefix)) return undefined;\n const oneBasedIndex = Number(input.id.slice(input.prefix.length));\n return Number.isInteger(oneBasedIndex) && oneBasedIndex > 0\n ? oneBasedIndex - 1\n : undefined;\n}\n","// Long-running bridge that runs inside a sandbox alongside the `claude` CLI.\n// The generic transport — WebSocket server, token auth, single-flight\n// reconnect, the in-memory event log + `seq`, resume replay, and the\n// lifecycle/meta files — lives in the shared `@ai-sdk/harness/bridge` runtime.\n// This file supplies only the Claude-specific turn driver.\n\nimport {\n runBridge,\n type BridgeEvent,\n type BridgeTurn,\n type Experimental_BridgeUserMessage,\n type Experimental_BridgeUserMessageQueue,\n} from '@ai-sdk/harness/bridge';\nimport { createCompactionLatch } from './compaction-latch';\nimport type { StartMessage } from '../claude-code-bridge-protocol';\nimport { randomUUID } from 'node:crypto';\nimport { argv, env as procEnv, stdout } from 'node:process';\n\n/*\n * CONSTRAINT — the third-party imports below are NEVER bundled into the\n * compiled `bridge/index.mjs`. They are declared `external` in\n * tsdown.config.ts and resolved at runtime from the node_modules that this\n * bridge installs *inside the sandbox* from `src/bridge/package.json` (and\n * its pinned `pnpm-lock.yaml`). That bridge package.json — NOT this host\n * package — is the single source of truth for these packages and their\n * versions; the published `@ai-sdk/harness-claude-code` package does not\n * provide them at runtime.\n *\n * When adding or changing a third-party import here you MUST keep all three\n * in sync, or the bridge will either get the dependency bundled in or fail\n * to resolve it in the sandbox:\n * 1. the import statement below,\n * 2. the `external` array in tsdown.config.ts, and\n * 3. the dependency entry in `src/bridge/package.json`.\n */\nimport * as claudeAgentSdk from '@anthropic-ai/claude-agent-sdk';\nimport type {\n HookCallback,\n HookJSONOutput,\n} from '@anthropic-ai/claude-agent-sdk';\nimport * as mcpServerModule from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { createClaudeCodeSystemPrompt } from './claude-code-system-prompt';\nimport { toClaudeSkillsOption } from './claude-skills-option';\nimport {\n createClaudeStreamEventState,\n createEmitStreamEvent,\n defaultUsage,\n emitFinishStep,\n finishApprovalStep,\n isExternalMcpTool,\n mapUsage,\n type ClaudeMessage,\n} from './create-emit-stream-event';\nimport { jsonSchemaToZodObject } from './json-schema-to-zod';\nimport {\n resolveInactiveNativeTools,\n resolveNativeTools,\n} from './tool-filtering';\nimport {\n claudeCodeQuestionKey,\n toClaudeCodeQuestionResult,\n toHarnessQuestionsInput,\n} from './question-tool';\n\n/*\n * Native Claude Code tool name → cross-harness common name. Tools outside this\n * map (e.g. `WebFetch`, `NotebookEdit`) have no common equivalent; their\n * native name is forwarded as-is on `tool-call` events.\n */\ntype CommonBuiltinToolName =\n | 'read'\n | 'write'\n | 'edit'\n | 'bash'\n | 'glob'\n | 'grep'\n | 'webSearch'\n | 'askUserQuestions';\n\nconst NATIVE_TO_COMMON: Readonly<Record<string, CommonBuiltinToolName>> = {\n Read: 'read',\n Write: 'write',\n Edit: 'edit',\n Bash: 'bash',\n Glob: 'glob',\n Grep: 'grep',\n WebSearch: 'webSearch',\n AskUserQuestion: 'askUserQuestions',\n};\n\nconst NATIVE_TOOL_KINDS: Readonly<\n Record<string, 'readonly' | 'edit' | 'bash'>\n> = {\n Read: 'readonly',\n Glob: 'readonly',\n Grep: 'readonly',\n WebSearch: 'readonly',\n WebFetch: 'readonly',\n TaskGet: 'readonly',\n TaskList: 'readonly',\n TaskOutput: 'readonly',\n ListMcpResources: 'readonly',\n ReadMcpResource: 'readonly',\n Write: 'edit',\n Edit: 'edit',\n NotebookEdit: 'edit',\n TodoWrite: 'edit',\n TaskCreate: 'edit',\n TaskUpdate: 'edit',\n TaskStop: 'edit',\n EnterWorktree: 'edit',\n ExitWorktree: 'edit',\n ExitPlanMode: 'edit',\n Skill: 'readonly',\n AskUserQuestion: 'readonly',\n ToolSearch: 'readonly',\n Bash: 'bash',\n Monitor: 'bash',\n};\n\nfunction toCommonName(nativeName: string): CommonBuiltinToolName | string {\n return NATIVE_TO_COMMON[nativeName] ?? nativeName;\n}\n\nconst args = parseArgs(argv.slice(2));\nconst workdir = args.workdir;\nconst bridgeStateDir = args.bridgeStateDir;\nif (!workdir) {\n emitFatal('Missing --workdir argument.');\n}\nif (!bridgeStateDir) {\n emitFatal('Missing --bridge-state-dir argument.');\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst claudeSdk = claudeAgentSdk as any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst mcpModule = mcpServerModule as any;\n\n/**\n * The Claude session id most recently reported by the SDK, captured from the\n * message stream. Every turn in this bridge process may fork a new id (the\n * SDK's `continue`/`resume` create a new session linked to the previous one),\n * so the latest observation is the one a later resume must name.\n */\nlet lastClaudeSessionId: string | undefined;\n\nawait runBridge<StartMessage>({\n bridgeType: 'claude-code',\n bridgeStateDir,\n onStart: runTurn,\n // Claude Code's conversation state lives in the runtime's own store, keyed\n // by working directory. The resume payload names the exact conversation so a\n // later resume does not have to fall back to \"most recent in this workdir\".\n onStop: () =>\n lastClaudeSessionId == null ? {} : { claudeSessionId: lastClaudeSessionId },\n});\n\ntype Emit = (msg: Record<string, unknown>) => void;\n\nfunction createPermissionOptions(input: {\n start: StartMessage;\n inactiveNativeTools: readonly string[];\n turn: BridgeTurn;\n emit: Emit;\n finishApprovalStep: (approvalId: string) => void;\n nativeToolCallNames: Map<string, string>;\n approvalRequestedToolUseIds: Set<string>;\n}): Record<string, unknown> {\n const permissionMode = input.start.permissionMode ?? 'allow-all';\n const inactiveNativeTools = new Set(input.inactiveNativeTools);\n const permissionSettings = createPermissionSettings({\n permissionMode,\n inactiveNativeTools,\n });\n\n const baseOptions = {\n permissionMode:\n permissionMode === 'allow-all'\n ? 'bypassPermissions'\n : permissionMode === 'allow-edits'\n ? 'acceptEdits'\n : 'default',\n allowDangerouslySkipPermissions: permissionMode === 'allow-all',\n ...(permissionSettings ? { settings: permissionSettings } : {}),\n };\n\n if (permissionMode === 'allow-all') {\n return {\n ...baseOptions,\n /*\n * Claude Code exposes AskUserQuestion in headless SDK sessions only\n * when a permission prompt tool is configured. The stdio prompt tool\n * preserves that tool surface without supplying the canUseTool callback\n * that bypassPermissions guarantees it will never invoke.\n */\n permissionPromptToolName: 'stdio',\n };\n }\n\n return {\n ...baseOptions,\n canUseTool: async (\n toolName: string,\n toolInput: Record<string, unknown>,\n options: { toolUseID: string },\n ) => {\n if (toolName.startsWith('mcp__harness-tools__')) {\n return { behavior: 'allow', updatedInput: toolInput };\n }\n if (\n !inactiveNativeTools.has(toolName) &&\n !nativeToolRequiresApproval({\n nativeName: toolName,\n permissionMode,\n })\n ) {\n return { behavior: 'allow', updatedInput: toolInput };\n }\n\n const approvalId = options.toolUseID;\n input.approvalRequestedToolUseIds.add(approvalId);\n input.nativeToolCallNames.set(approvalId, toolName);\n input.emit({\n type: 'tool-call',\n toolCallId: approvalId,\n toolName: toCommonName(toolName),\n nativeName: toolName,\n input: JSON.stringify(toolInput ?? {}),\n providerExecuted: true,\n ...(isExternalMcpTool(toolName) ? { dynamic: true } : {}),\n });\n input.emit({\n type: 'tool-approval-request',\n approvalId,\n toolCallId: approvalId,\n });\n input.finishApprovalStep(approvalId);\n\n const decision = await input.turn.requestToolApproval(approvalId);\n return decision.approved\n ? { behavior: 'allow', updatedInput: toolInput, toolUseID: approvalId }\n : {\n behavior: 'deny',\n message: decision.reason ?? 'Denied',\n toolUseID: approvalId,\n };\n },\n };\n}\n\nfunction createQuestionPreToolUseHook(input: {\n turn: BridgeTurn;\n emit: Emit;\n nativeToolCallNames: Map<string, string>;\n}): HookCallback {\n return async (hookInput, toolUseID): Promise<HookJSONOutput> => {\n if (\n hookInput.hook_event_name !== 'PreToolUse' ||\n hookInput.tool_name !== 'AskUserQuestion'\n ) {\n return {};\n }\n\n const nativeInput = hookInput.tool_input as Parameters<\n typeof toHarnessQuestionsInput\n >[0];\n const canonicalInput = toHarnessQuestionsInput(nativeInput);\n const toolCallId = toolUseID ?? hookInput.tool_use_id;\n input.nativeToolCallNames.set(toolCallId, hookInput.tool_name);\n input.emit({\n type: 'tool-call',\n toolCallId,\n toolName: 'askUserQuestions',\n nativeName: hookInput.tool_name,\n input: JSON.stringify(canonicalInput),\n providerExecuted: false,\n providerMetadata: {\n 'claude-code': {\n nativeRequest: nativeInput,\n },\n },\n });\n\n const questionKey = claudeCodeQuestionKey(nativeInput);\n const result = await input.turn.requestToolResult({\n toolCallId,\n matches: candidate => {\n const nativeRequest = candidate.toolResult?.providerOptions?.[\n 'claude-code'\n ]?.nativeRequest as\n | Parameters<typeof claudeCodeQuestionKey>[0]\n | undefined;\n return (\n nativeRequest != null &&\n claudeCodeQuestionKey(nativeRequest) === questionKey\n );\n },\n });\n const nativeResult = toClaudeCodeQuestionResult({\n nativeInput,\n output: result.output as Parameters<\n typeof toClaudeCodeQuestionResult\n >[0]['output'],\n });\n\n return {\n hookSpecificOutput: {\n hookEventName: 'PreToolUse',\n ...(nativeResult.behavior === 'allow'\n ? {\n permissionDecision: 'allow',\n updatedInput: {\n ...nativeResult.updatedInput,\n } as Record<string, unknown>,\n }\n : {\n permissionDecision: 'deny',\n permissionDecisionReason: nativeResult.message,\n }),\n },\n };\n };\n}\n\nfunction createPermissionSettings(input: {\n permissionMode: 'allow-reads' | 'allow-edits' | 'allow-all';\n inactiveNativeTools: ReadonlySet<string>;\n}): Record<string, unknown> | undefined {\n const askRules = new Set<string>();\n for (const [nativeName, kind] of Object.entries(NATIVE_TOOL_KINDS)) {\n if (\n input.inactiveNativeTools.has(nativeName) ||\n (input.permissionMode === 'allow-reads'\n ? kind === 'edit' || kind === 'bash'\n : input.permissionMode === 'allow-edits'\n ? kind === 'bash'\n : false)\n ) {\n askRules.add(`${nativeName}(*)`);\n }\n }\n\n if (askRules.size === 0) return undefined;\n\n return {\n permissions: { ask: [...askRules] },\n sandbox: { autoAllowBashIfSandboxed: false },\n };\n}\n\nfunction nativeToolRequiresApproval(input: {\n nativeName: string;\n permissionMode: 'allow-reads' | 'allow-edits' | 'allow-all';\n}): boolean {\n if (input.permissionMode === 'allow-all') return false;\n const kind = NATIVE_TOOL_KINDS[input.nativeName] ?? 'edit';\n if (input.permissionMode === 'allow-edits') return kind === 'bash';\n return kind === 'edit' || kind === 'bash';\n}\n\nasync function runTurn(start: StartMessage, turn: BridgeTurn): Promise<void> {\n const emit: Emit = msg => turn.emit(msg as BridgeEvent);\n\n // Local controller for the Claude query. Aborted either by the host (via the\n // shared runtime's `turn.abortSignal`) or by us on a terminal error.\n const abortCtl = new AbortController();\n // A host abort prefers the SDK's graceful `interrupt()` — Esc semantics: the\n // in-flight turn is persisted to the session transcript and settles with an\n // interrupted result, so a later resume (including the user's own\n // `claude --resume`) still sees the work done before the interrupt. The hard\n // abort kills the CLI process and loses that turn's records, so it is only\n // the fallback — armed unconditionally, because aborting an already-settled\n // query is a no-op — and the immediate path when the abort arrives before\n // the query exists.\n let gracefulAbort: (() => void) | undefined;\n let hardAbortTimer: ReturnType<typeof setTimeout> | undefined;\n const onHostAbort = (): void => {\n if (gracefulAbort) {\n gracefulAbort();\n } else {\n abortCtl.abort();\n }\n };\n if (turn.abortSignal.aborted) {\n abortCtl.abort();\n } else {\n turn.abortSignal.addEventListener('abort', onHostAbort, { once: true });\n }\n\n const streamEventState = createClaudeStreamEventState();\n\n const mcpServers: Record<string, unknown> = { ...start.mcpServers };\n if (start.tools && start.tools.length > 0) {\n const server = new mcpModule.McpServer({\n name: 'harness-tools',\n version: '1.0.0',\n });\n for (const tool of start.tools) {\n server.registerTool(\n tool.name,\n {\n description: tool.description ?? '',\n inputSchema: jsonSchemaToZodObject(tool.inputSchema),\n },\n async (\n ...handlerArgs: [\n Record<string, unknown>,\n { requestId: string | number; _meta?: Record<string, unknown> },\n ]\n ) => {\n const [input, extra] = handlerArgs;\n const metadataToolCallId = extra._meta?.['claudecode/toolUseId'];\n const toolCallId =\n typeof metadataToolCallId === 'string'\n ? metadataToolCallId\n : randomUUID();\n emit({\n type: 'tool-call',\n toolCallId,\n toolName: tool.name,\n input: JSON.stringify(input),\n providerExecuted: false,\n });\n const { output, isError } = await turn.requestToolResult(toolCallId);\n emit({\n type: 'tool-result',\n toolCallId,\n toolName: tool.name,\n result: output ?? null,\n isError: !!isError,\n });\n return {\n content: [{ type: 'text', text: JSON.stringify(output ?? null) }],\n isError,\n };\n },\n );\n }\n mcpServers['harness-tools'] = {\n type: 'sdk',\n name: 'harness-tools',\n instance: server,\n };\n }\n\n // Compaction observation: merge Claude's `compact_boundary` message and\n // `PostCompact` hook (which arrive in either order) into one `compaction`\n // event. See `createCompactionLatch`.\n const compaction = createCompactionLatch(event => emit(event));\n\n // `stream-start` is emitted lazily on the first SDK message (below) so it can\n // carry the model the CLI resolved to, reported on the `system`/`init` message.\n\n const queryInput = createQueryInput({\n initialUserMessage: start.prompt,\n userMessages: turn.experimental_userMessages,\n abortSignal: abortCtl.signal,\n });\n const skillsOption = toClaudeSkillsOption(start.skills);\n const nativeTools = resolveNativeTools(start.builtinToolFiltering);\n const inactiveNativeTools = resolveInactiveNativeTools(\n start.builtinToolFiltering,\n );\n const permissionOptions = createPermissionOptions({\n start,\n inactiveNativeTools,\n turn,\n emit,\n finishApprovalStep: approvalId => {\n finishApprovalStep({ state: streamEventState, emit, approvalId });\n },\n nativeToolCallNames: streamEventState.nativeToolCallNames,\n approvalRequestedToolUseIds: streamEventState.approvalRequestedToolUseIds,\n });\n const questionPreToolUseHook = createQuestionPreToolUseHook({\n turn,\n emit,\n nativeToolCallNames: streamEventState.nativeToolCallNames,\n });\n\n const q = claudeSdk.query({\n prompt: queryInput.input,\n options: {\n ...(start.model ? { model: start.model } : {}),\n ...(start.maxTurns !== undefined ? { maxTurns: start.maxTurns } : {}),\n ...(start.agentProgressSummaries !== undefined\n ? { agentProgressSummaries: start.agentProgressSummaries }\n : {}),\n ...(start.forwardSubagentText !== undefined\n ? { forwardSubagentText: start.forwardSubagentText }\n : {}),\n ...(start.env !== undefined ? { env: { ...procEnv, ...start.env } } : {}),\n ...(skillsOption ? { skills: skillsOption } : {}),\n ...(nativeTools !== undefined ? { tools: nativeTools } : {}),\n ...(inactiveNativeTools.length > 0\n ? { disallowedTools: inactiveNativeTools }\n : {}),\n systemPrompt: createClaudeCodeSystemPrompt(start.instructions),\n thinking: start.thinking,\n ...(start.effort !== undefined ? { effort: start.effort } : {}),\n ...(start.responseFormat?.type === 'json' &&\n start.responseFormat.schema != null\n ? {\n outputFormat: {\n type: 'json_schema' as const,\n schema: start.responseFormat.schema,\n },\n }\n : {}),\n includePartialMessages: true,\n // The `PostCompact` hook carries the compaction summary, which the\n // `compact_boundary` system message does not. Latch it for the unified\n // `compaction` event; return an empty output so compaction proceeds.\n hooks: {\n PreToolUse: [\n {\n matcher: 'AskUserQuestion',\n hooks: [questionPreToolUseHook],\n },\n ],\n PostCompact: [\n {\n hooks: [\n async (input: { compact_summary?: unknown }) => {\n if (typeof input?.compact_summary === 'string') {\n compaction.onSummary(input.compact_summary);\n }\n return {};\n },\n ],\n },\n ],\n },\n // Continuation rule, most specific first.\n //\n // `resumeSessionId` names the exact conversation and is what a\n // cross-process resume should use: `continue` means \"most recent thread\n // in this workdir\", which silently picks the wrong one once anything\n // else has run there. The bridge also retains the id observed during its\n // previous query, so every later query stays pinned to that conversation\n // even when the host detached and reattached between turns. `resume` and\n // `continue` are mutually exclusive in the SDK.\n //\n // Otherwise the host can force-continue by setting `start.continue`,\n // and turns after the first fall back to the legacy cwd-based behavior\n // when no exact id was observed.\n ...((start.resumeSessionId ?? lastClaudeSessionId)\n ? { resume: start.resumeSessionId ?? lastClaudeSessionId }\n : start.continue === true || !turn.firstTurn\n ? { continue: true }\n : {}),\n ...permissionOptions,\n mcpServers,\n cwd: workdir,\n abortSignal: abortCtl.signal,\n },\n });\n\n gracefulAbort = () => {\n // Backstop for the whole teardown, not just the interrupt call: if the\n // stream has not settled five seconds after a graceful interrupt was\n // requested, fall back to the hard abort. Aborting an already-settled\n // query is a no-op, and `unref` keeps the timer from pinning the bridge\n // process open on its own.\n hardAbortTimer = setTimeout(() => abortCtl.abort(), 5000);\n hardAbortTimer.unref?.();\n void Promise.resolve()\n .then(() => q.interrupt())\n .catch(() => abortCtl.abort());\n };\n let turnUsage: Record<string, unknown> | undefined;\n let totalCostUsd: number | undefined;\n let emittedTerminalError = false;\n let emittedTerminalFinish = false;\n\n const emitTerminalError = (message: string | undefined): void => {\n const normalized = message?.trim();\n if (!normalized || emittedTerminalError || emittedTerminalFinish) return;\n streamEventState.observedTerminalError = normalized;\n emittedTerminalError = true;\n // A turn the host itself stopped ends with an error-shaped result by\n // construction (an interrupted query reports a diagnostic, not success);\n // reporting the host's own stop as a terminal error makes every clean\n // interrupt look like a malfunction. The host has already settled the\n // turn on its side.\n if (!turn.abortSignal.aborted) {\n turn.emitError({\n error: normalized,\n message: 'claude-code terminal error',\n });\n }\n queryInput.close();\n abortCtl.abort();\n };\n\n const emitStreamEvent = createEmitStreamEvent({\n state: streamEventState,\n emit,\n emitWarning: turn.emitWarning,\n emitTerminalError,\n onCompactionBoundary: boundary => compaction.onBoundary(boundary),\n toCommonName,\n });\n\n try {\n for await (const msg of q as AsyncIterable<ClaudeMessage>) {\n if (abortCtl.signal.aborted) break;\n\n const type = msg.type;\n\n if (type === 'command_lifecycle') {\n queryInput.handleLifecycle(msg);\n }\n\n // Every SDK message carries the session id of the conversation it\n // belongs to. Track the latest so the stop payload and the terminal\n // finish metadata name the exact conversation.\n const sessionId = (msg as { session_id?: unknown }).session_id;\n if (typeof sessionId === 'string' && sessionId.length > 0) {\n lastClaudeSessionId = sessionId;\n }\n\n emitStreamEvent(msg);\n\n if (type === 'result') {\n if (msg.subtype === 'success') {\n // `success` does not mean the turn succeeded: the CLI flags a rejected\n // request with `is_error` and puts the message in `result`, which the\n // empty-result rescue below cannot catch.\n if (msg.is_error) {\n emitTerminalError(\n msg.result?.trim() ||\n streamEventState.observedTerminalError ||\n (typeof msg.api_error_status === 'number'\n ? `Claude Code reported an API error (HTTP ${msg.api_error_status})`\n : 'Claude Code reported a failed result'),\n );\n continue;\n }\n const emptyResult = !msg.result?.trim?.();\n if (emptyResult && streamEventState.observedTerminalError) {\n emitTerminalError(streamEventState.observedTerminalError);\n continue;\n }\n const usage = msg.usage ?? msg.message?.usage;\n const harnessUsage = mapUsage(usage);\n if (harnessUsage) turnUsage = addUsage(turnUsage, harnessUsage);\n if (typeof msg.total_cost_usd === 'number') {\n totalCostUsd = (totalCostUsd ?? 0) + msg.total_cost_usd;\n }\n if (\n start.responseFormat?.type === 'json' &&\n msg.structured_output !== undefined\n ) {\n const id = randomUUID();\n emit({ type: 'text-start', id });\n emit({\n type: 'text-delta',\n id,\n delta: JSON.stringify(msg.structured_output),\n });\n emit({ type: 'text-end', id });\n streamEventState.stepOpen = true;\n }\n if (streamEventState.stepOpen) {\n emitFinishStep({\n state: streamEventState,\n emit,\n usage: streamEventState.pendingStepUsage ?? harnessUsage,\n });\n }\n queryInput.observeResult();\n if (!queryInput.hasActiveUserMessages()) {\n queryInput.close();\n break;\n }\n } else {\n emitTerminalError(\n (Array.isArray(msg.errors) ? msg.errors.join('\\n') : undefined) ||\n streamEventState.observedTerminalError ||\n msg.result ||\n 'Unknown error',\n );\n }\n continue;\n }\n\n if (queryInput.hasObservedResult && !queryInput.hasActiveUserMessages()) {\n queryInput.close();\n break;\n }\n }\n } catch (err) {\n // Same reasoning as `emitTerminalError`: a throw after the host's own\n // abort (e.g. the hard-abort fallback killing the CLI mid-iteration, or\n // a rejected `interrupt()`) is the stop the host asked for, not a\n // malfunction. The host has already settled the turn on its side.\n if (\n !turn.abortSignal.aborted &&\n !(abortCtl.signal.aborted && emittedTerminalError)\n ) {\n turn.emitError({ error: err, message: 'claude-code turn failed' });\n }\n return;\n } finally {\n // The turn is over; disarm the host-abort path first. An abort of this\n // turn's signal arriving after this point (e.g. an `abort` message racing\n // the next `start`) must not interrupt the disposed query or arm the\n // hard-abort fallback timer for it.\n gracefulAbort = undefined;\n if (hardAbortTimer != null) clearTimeout(hardAbortTimer);\n turn.abortSignal.removeEventListener('abort', onHostAbort);\n queryInput.close();\n // Dispose the query explicitly: with streaming input the SDK keeps its\n // CLI subprocess alive for more user messages, and a turn that ended\n // through an interrupt or error path can otherwise leak that process —\n // observed as orphaned `claude` processes holding the very conversation\n // the next turn continues.\n try {\n await (q as { return?: (value?: unknown) => Promise<unknown> }).return?.(\n undefined,\n );\n } catch {\n // Best effort; the abort controller tears the process down otherwise.\n }\n }\n\n if (emittedTerminalError) return;\n emittedTerminalFinish = true;\n void emittedTerminalFinish;\n emit({\n type: 'finish',\n finishReason: { unified: 'stop', raw: 'stop' },\n totalUsage: turnUsage ?? streamEventState.stepUsage ?? defaultUsage(),\n ...(totalCostUsd !== undefined || lastClaudeSessionId !== undefined\n ? {\n harnessMetadata: {\n 'claude-code': {\n ...(totalCostUsd !== undefined ? { costUsd: totalCostUsd } : {}),\n // The conversation this turn belongs to, resumable outside the\n // SDK with `claude --resume <sessionId>` and captured by the\n // adapter for exact cross-process resume.\n ...(lastClaudeSessionId !== undefined\n ? { sessionId: lastClaudeSessionId }\n : {}),\n },\n },\n }\n : {}),\n });\n}\n\nfunction createQueryInput({\n initialUserMessage,\n userMessages,\n abortSignal,\n}: {\n initialUserMessage: string;\n userMessages: Experimental_BridgeUserMessageQueue;\n abortSignal: AbortSignal;\n}): {\n input: AsyncIterable<unknown>;\n close(error?: unknown): void;\n handleLifecycle(message: ClaudeMessage): void;\n hasActiveUserMessages(): boolean;\n observeResult(): void;\n readonly hasObservedResult: boolean;\n} {\n let closed = false;\n let observedResult = false;\n const submittedMessages = new Map<string, Experimental_BridgeUserMessage>();\n const close = (error?: unknown): void => {\n if (closed) return;\n closed = true;\n userMessages.close(error);\n };\n if (abortSignal.aborted) {\n close(abortSignal.reason);\n } else {\n abortSignal.addEventListener('abort', () => close(abortSignal.reason), {\n once: true,\n });\n }\n\n const toUserMessage = (options: {\n text: string;\n messageId: string;\n priority?: 'next';\n }): unknown => ({\n type: 'user',\n message: {\n role: 'user',\n content: [{ type: 'text', text: options.text }],\n },\n parent_tool_use_id: null,\n uuid: options.messageId,\n ...(options.priority == null ? {} : { priority: options.priority }),\n });\n\n const messageIterator = userMessages[Symbol.asyncIterator]();\n\n return {\n close,\n handleLifecycle: message => {\n const lifecycle = message as ClaudeMessage & {\n command_uuid?: string;\n state?: 'queued' | 'started' | 'completed' | 'cancelled' | 'discarded';\n };\n if (lifecycle.command_uuid == null || lifecycle.state == null) return;\n const submitted = submittedMessages.get(lifecycle.command_uuid);\n if (submitted == null) return;\n if (lifecycle.state === 'queued' || lifecycle.state === 'started') {\n submitted.accept();\n return;\n }\n if (lifecycle.state === 'cancelled' || lifecycle.state === 'discarded') {\n submitted.reject(\n new Error(`Claude Code ${lifecycle.state} the user message.`),\n );\n }\n submittedMessages.delete(lifecycle.command_uuid);\n },\n hasActiveUserMessages: () =>\n submittedMessages.size > 0 || userMessages.pendingCount > 0,\n observeResult: () => {\n observedResult = true;\n },\n get hasObservedResult() {\n return observedResult;\n },\n input: {\n [Symbol.asyncIterator]() {\n let sentInitial = false;\n return {\n async next() {\n if (closed || abortSignal.aborted) {\n return {\n value: undefined,\n done: true,\n } as IteratorResult<unknown>;\n }\n if (!sentInitial) {\n sentInitial = true;\n return {\n value: toUserMessage({\n text: initialUserMessage,\n messageId: randomUUID(),\n }),\n done: false,\n };\n }\n const nextMessage = await messageIterator.next();\n if (nextMessage.done) {\n return {\n value: undefined,\n done: true,\n } as IteratorResult<unknown>;\n }\n submittedMessages.set(\n nextMessage.value.messageId,\n nextMessage.value,\n );\n return {\n value: toUserMessage({\n text: nextMessage.value.text,\n messageId: nextMessage.value.messageId,\n priority: 'next',\n }),\n done: false,\n };\n },\n };\n },\n },\n };\n}\n\nfunction addUsage(\n total: Record<string, unknown> | undefined,\n usage: Record<string, unknown>,\n): Record<string, unknown> {\n if (total == null) return usage;\n const result: Record<string, unknown> = { ...total };\n for (const [key, value] of Object.entries(usage)) {\n const previous = result[key];\n if (typeof value === 'number' && typeof previous === 'number') {\n result[key] = previous + value;\n } else if (\n value != null &&\n previous != null &&\n typeof value === 'object' &&\n typeof previous === 'object' &&\n !Array.isArray(value) &&\n !Array.isArray(previous)\n ) {\n result[key] = addUsage(\n previous as Record<string, unknown>,\n value as Record<string, unknown>,\n );\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n\nfunction parseArgs(args: string[]): {\n workdir?: string;\n bridgeStateDir?: string;\n} {\n const out: { workdir?: string; bridgeStateDir?: string } = {};\n for (let i = 0; i < args.length; i++) {\n if (args[i] === '--workdir' && i + 1 < args.length) {\n out.workdir = args[++i];\n } else if (args[i] === '--bridge-state-dir' && i + 1 < args.length) {\n out.bridgeStateDir = args[++i];\n }\n }\n return out;\n}\n\nfunction emitFatal(message: string): never {\n stdout.write(JSON.stringify({ type: 'bridge-fatal', message }) + '\\n');\n process.exit(1);\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["procEnv"],"sources":["../../../harness/dist/bridge/index.js","../../src/bridge/compaction-latch.ts","../../src/bridge/claude-code-system-prompt.ts","../../src/bridge/claude-skills-option.ts","../../src/bridge/create-emit-stream-event.ts","../../src/bridge/json-schema-to-zod.ts","../../src/bridge/tool-filtering.ts","../../src/bridge/question-tool.ts","../../src/bridge/index.ts"],"sourcesContent":["import { appendFile, mkdir, writeFile } from \"node:fs/promises\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { randomUUID } from \"node:crypto\";\nimport { env, pid, stdout } from \"node:process\";\nimport { WebSocketServer } from \"ws\";\n//#region src/bridge/harness-bridge-capability-unsupported-error.ts\nconst name = \"AI_HarnessBridgeCapabilityUnsupportedError\";\n/**\n* Signals an unsupported capability discovered inside a sandbox bridge.\n* `isInstance` also recognizes the serialized error shape received by the\n* host, where it can be translated to `HarnessCapabilityUnsupportedError`.\n*/\nvar HarnessBridgeCapabilityUnsupportedError = class extends Error {\n\tconstructor({ message, harnessId, cause }) {\n\t\tsuper(message);\n\t\tObject.defineProperty(this, \"name\", { value: name });\n\t\tthis.harnessId = harnessId;\n\t\tthis.cause = cause;\n\t}\n\tstatic isInstance(error) {\n\t\treturn error != null && typeof error === \"object\" && \"name\" in error && error.name === name && \"message\" in error && typeof error.message === \"string\";\n\t}\n};\n//#endregion\n//#region src/bridge/index.ts\nconst DEBUG_LEVEL_WEIGHT = {\n\terror: 0,\n\twarn: 1,\n\tinfo: 2,\n\tdebug: 3,\n\ttrace: 4\n};\n/** Exact-or-dotted-prefix subsystem match (`'bridge'` matches `'bridge.turn'`). */\nfunction subsystemMatches(filters, subsystem) {\n\tif (!filters || filters.length === 0) return true;\n\treturn filters.some((filter) => subsystem === filter || subsystem.startsWith(`${filter}.`));\n}\nfunction formatBridgeError(err) {\n\tif (err instanceof Error) return {\n\t\tname: err.name,\n\t\tmessage: err.message,\n\t\tstack: err.stack\n\t};\n\tif (typeof err === \"string\") return { message: err };\n\tif (err !== null && typeof err === \"object\") try {\n\t\treturn { message: JSON.stringify(err) };\n\t} catch {}\n\treturn { message: String(err) };\n}\nfunction createBridgeUserMessageQueue(options) {\n\tconst messages = [];\n\tconst waiters = [];\n\tconst entries = /* @__PURE__ */ new Map();\n\tlet closed = false;\n\tlet pendingCount = 0;\n\tconst enqueue = (input) => {\n\t\tconst existing = entries.get(input.messageId);\n\t\tif (existing != null) {\n\t\t\tif (existing.response != null) options.respond(existing.response);\n\t\t\treturn;\n\t\t}\n\t\tlet settled = false;\n\t\tconst settle = (response) => {\n\t\t\tif (settled) return;\n\t\t\tsettled = true;\n\t\t\tpendingCount--;\n\t\t\tconst entry = entries.get(input.messageId);\n\t\t\tif (entry != null) entry.response = response;\n\t\t\toptions.respond(response);\n\t\t};\n\t\tconst message = {\n\t\t\tmessageId: input.messageId,\n\t\t\ttext: input.text,\n\t\t\taccept: () => {\n\t\t\t\tsettle({\n\t\t\t\t\ttype: \"user-message-response\",\n\t\t\t\t\tmessageId: input.messageId,\n\t\t\t\t\taccepted: true\n\t\t\t\t});\n\t\t\t},\n\t\t\treject: (error) => {\n\t\t\t\tsettle({\n\t\t\t\t\ttype: \"user-message-response\",\n\t\t\t\t\tmessageId: input.messageId,\n\t\t\t\t\taccepted: false,\n\t\t\t\t\terror: { message: formatBridgeError(error).message }\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t\tentries.set(input.messageId, { reject: message.reject });\n\t\tpendingCount++;\n\t\tif (closed) {\n\t\t\tmessage.reject(/* @__PURE__ */ new Error(\"The bridge turn is no longer accepting user messages.\"));\n\t\t\treturn;\n\t\t}\n\t\tconst waiter = waiters.shift();\n\t\tif (waiter != null) waiter({\n\t\t\tdone: false,\n\t\t\tvalue: message\n\t\t});\n\t\telse messages.push(message);\n\t};\n\tconst close = (error) => {\n\t\tif (closed) return;\n\t\tclosed = true;\n\t\tconst reason = error ?? /* @__PURE__ */ new Error(\"The bridge turn ended before accepting the user message.\");\n\t\tfor (const entry of entries.values()) if (entry.response == null) entry.reject(reason);\n\t\tmessages.length = 0;\n\t\twhile (waiters.length > 0) waiters.shift()({\n\t\t\tdone: true,\n\t\t\tvalue: void 0\n\t\t});\n\t};\n\treturn {\n\t\tget pendingCount() {\n\t\t\treturn pendingCount;\n\t\t},\n\t\tenqueue,\n\t\tclose,\n\t\t[Symbol.asyncIterator]() {\n\t\t\treturn { next: () => {\n\t\t\t\tconst message = messages.shift();\n\t\t\t\tif (message != null) return Promise.resolve({\n\t\t\t\t\tdone: false,\n\t\t\t\t\tvalue: message\n\t\t\t\t});\n\t\t\t\tif (closed) return Promise.resolve({\n\t\t\t\t\tdone: true,\n\t\t\t\t\tvalue: void 0\n\t\t\t\t});\n\t\t\t\treturn new Promise((resolve) => {\n\t\t\t\t\twaiters.push(resolve);\n\t\t\t\t});\n\t\t\t} };\n\t\t}\n\t};\n}\nfunction parseEnvList(value) {\n\tif (!value) return void 0;\n\tconst items = value.split(\",\").map((item) => item.trim()).filter(Boolean);\n\treturn items.length > 0 ? items : void 0;\n}\nconst ENV_TRUTHY = /* @__PURE__ */ new Set([\n\t\"1\",\n\t\"true\",\n\t\"yes\",\n\t\"on\"\n]);\nconst WS_OPEN = 1;\nasync function runBridge(options) {\n\tconst { bridgeType, bridgeStateDir, onStart, onStop, onDestroy } = options;\n\tconst teardownGraceMs = options.turnTeardownGraceMs ?? 1e4;\n\tconst expectedToken = options.token ?? env.BRIDGE_CHANNEL_TOKEN ?? \"\";\n\tconst bridgeWsPort = options.port ?? parseInt(env.BRIDGE_WS_PORT ?? \"0\", 10);\n\tconst bridgeMetaPath = `${bridgeStateDir}/bridge-meta.json`;\n\tconst startConfigPath = `${bridgeStateDir}/start-config.json`;\n\tconst rerunStartConfigPath = `${bridgeStateDir}/rerun-start-config.json`;\n\tconst eventLogPath = `${bridgeStateDir}/event-log.ndjson`;\n\ttry {\n\t\tawait mkdir(bridgeStateDir, { recursive: true });\n\t} catch {}\n\tlet currentBoundPort = 0;\n\tlet currentTurnState = \"init\";\n\tlet activeSocket;\n\tlet isFirstTurn = true;\n\tlet turnAbort;\n\tlet currentUserMessages;\n\t/**\n\t* Settles when the in-flight turn has fully wound down — `onStart`\n\t* returned or threw AND its completion state was recorded. `undefined`\n\t* between turns. A new `start` fences on this so turns never overlap.\n\t*/\n\tlet activeTurn;\n\tlet debugConfig;\n\tlet consoleCaptureInstalled = false;\n\tconst envDebugEnabled = ENV_TRUTHY.has((env.HARNESS_DEBUG ?? \"\").toLowerCase());\n\tlet seqCounter = 0;\n\tlet eventLog = [];\n\tlet diskBuffer = \"\";\n\tlet flushPromise = null;\n\tconst flushEventsToDisk = async () => {\n\t\twhile (diskBuffer.length > 0) {\n\t\t\tconst buf = diskBuffer;\n\t\t\tdiskBuffer = \"\";\n\t\t\tawait appendFile(eventLogPath, buf).catch(() => {});\n\t\t}\n\t};\n\tconst scheduleEventFlush = () => {\n\t\tif (flushPromise) return;\n\t\tflushPromise = new Promise((resolve) => {\n\t\t\tsetImmediate(() => {\n\t\t\t\tflushEventsToDisk().finally(resolve);\n\t\t\t});\n\t\t}).finally(() => {\n\t\t\tflushPromise = null;\n\t\t\tif (diskBuffer.length > 0) scheduleEventFlush();\n\t\t});\n\t};\n\tconst flushPendingEventsToDisk = async () => {\n\t\tif (diskBuffer.length > 0 && !flushPromise) scheduleEventFlush();\n\t\tlet inFlight = flushPromise;\n\t\twhile (inFlight) {\n\t\t\tawait inFlight;\n\t\t\tinFlight = flushPromise;\n\t\t}\n\t};\n\tif (env.BRIDGE_REPLAY_FROM_DISK === \"1\" && existsSync(eventLogPath)) try {\n\t\teventLog = readFileSync(eventLogPath, \"utf8\").split(\"\\n\").map((line) => line.trim()).filter(Boolean).map((line) => ({\n\t\t\tseq: JSON.parse(line).seq,\n\t\t\tline\n\t\t}));\n\t\tseqCounter = eventLog.at(-1)?.seq ?? 0;\n\t} catch {\n\t\teventLog = [];\n\t\tseqCounter = 0;\n\t}\n\tconst pendingToolResults = /* @__PURE__ */ new Map();\n\tconst bufferedToolResults = [];\n\tconst pendingToolApprovals = /* @__PURE__ */ new Map();\n\tconst writeBridgeMeta = async (state) => {\n\t\ttry {\n\t\t\tawait writeFile(bridgeMetaPath, JSON.stringify({\n\t\t\t\ttype: bridgeType,\n\t\t\t\tport: currentBoundPort,\n\t\t\t\tstate,\n\t\t\t\tpid\n\t\t\t}));\n\t\t} catch {}\n\t};\n\tconst writeStartConfig = async (start) => {\n\t\ttry {\n\t\t\tconst serialized = JSON.stringify(start);\n\t\t\tawait writeFile(startConfigPath, serialized);\n\t\t\tif (!existsSync(rerunStartConfigPath)) await writeFile(rerunStartConfigPath, serialized);\n\t\t} catch {}\n\t};\n\tconst emit = (event) => {\n\t\tconst seq = ++seqCounter;\n\t\tconst line = JSON.stringify({\n\t\t\t...event,\n\t\t\tseq\n\t\t});\n\t\teventLog.push({\n\t\t\tseq,\n\t\t\tline\n\t\t});\n\t\tdiskBuffer += `${line}\\n`;\n\t\tscheduleEventFlush();\n\t\tif (activeSocket?.readyState === WS_OPEN) try {\n\t\t\tactiveSocket.send(line);\n\t\t} catch {}\n\t};\n\tconst replay = (ws, afterSeq) => {\n\t\tfor (const entry of eventLog) if (entry.seq > afterSeq && ws.readyState === WS_OPEN) ws.send(entry.line);\n\t};\n\tconst shouldEmitDebugEvent = (level, subsystem) => {\n\t\tif (!debugConfig?.enabled) return false;\n\t\tconst threshold = debugConfig.level ?? \"debug\";\n\t\tif (DEBUG_LEVEL_WEIGHT[level] > DEBUG_LEVEL_WEIGHT[threshold]) return false;\n\t\treturn subsystemMatches(debugConfig.subsystems, subsystem);\n\t};\n\tconst rawStdoutWrite = process.stdout.write.bind(process.stdout);\n\tconst rawStderrWrite = process.stderr.write.bind(process.stderr);\n\tconst writeErrorToStderr = (input) => {\n\t\ttry {\n\t\t\tconst formatted = formatBridgeError(input.error);\n\t\t\trawStderrWrite(`[harness:${bridgeType}:error] ${input.message}: ${formatted.message}\\n`);\n\t\t\tif (formatted.stack) rawStderrWrite(`${formatted.stack}\\n`);\n\t\t} catch {}\n\t};\n\tconst emitWarning = (input) => {\n\t\ttry {\n\t\t\tfor (const line of input.message.split(\"\\n\")) if (line.trim().length > 0) rawStderrWrite(`[harness:${bridgeType}:warn] ${line}\\n`);\n\t\t} catch {}\n\t};\n\tconst emitError = (input) => {\n\t\twriteErrorToStderr({\n\t\t\tmessage: input.message ?? \"bridge error\",\n\t\t\terror: input.error\n\t\t});\n\t\temit({\n\t\t\ttype: \"error\",\n\t\t\terror: serialiseError(input.error)\n\t\t});\n\t};\n\tconst installConsoleCapture = () => {\n\t\tif (consoleCaptureInstalled) return;\n\t\tconsoleCaptureInstalled = true;\n\t\tconst buffers = {\n\t\t\tstdout: \"\",\n\t\t\tstderr: \"\"\n\t\t};\n\t\tconst patch = (stream, raw) => (chunk, encoding, cb) => {\n\t\t\tif (debugConfig?.enabled) try {\n\t\t\t\tconst enc = typeof encoding === \"string\" ? encoding : \"utf8\";\n\t\t\t\tconst text = typeof chunk === \"string\" ? chunk : Buffer.from(chunk).toString(enc);\n\t\t\t\tconst parts = (buffers[stream] + text.replace(/\\r\\n/g, \"\\n\")).split(\"\\n\");\n\t\t\t\tbuffers[stream] = parts.pop() ?? \"\";\n\t\t\t\tfor (const line of parts) {\n\t\t\t\t\tconst trimmed = line.replace(/\\s+$/, \"\");\n\t\t\t\t\tif (trimmed) emit({\n\t\t\t\t\t\ttype: \"sandbox-log\",\n\t\t\t\t\t\tsource: bridgeType,\n\t\t\t\t\t\tstream,\n\t\t\t\t\t\tline: trimmed\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} catch {}\n\t\t\treturn raw(chunk, encoding, cb);\n\t\t};\n\t\tprocess.stdout.write = patch(\"stdout\", rawStdoutWrite);\n\t\tprocess.stderr.write = patch(\"stderr\", rawStderrWrite);\n\t};\n\tconst handleInbound = async (msg, ws) => {\n\t\tswitch (msg.type) {\n\t\t\tcase \"start\": {\n\t\t\t\tfor (;;) {\n\t\t\t\t\tconst pendingTurn = activeTurn;\n\t\t\t\t\tif (pendingTurn == null) break;\n\t\t\t\t\tturnAbort?.abort();\n\t\t\t\t\tcurrentUserMessages?.close(/* @__PURE__ */ new Error(\"A new bridge turn replaced the active turn.\"));\n\t\t\t\t\tlet graceTimer;\n\t\t\t\t\tconst settled = await Promise.race([pendingTurn.then(() => true), new Promise((resolve) => {\n\t\t\t\t\t\tgraceTimer = setTimeout(() => resolve(false), teardownGraceMs);\n\t\t\t\t\t\tgraceTimer.unref?.();\n\t\t\t\t\t})]);\n\t\t\t\t\tclearTimeout(graceTimer);\n\t\t\t\t\tif (!settled) break;\n\t\t\t\t}\n\t\t\t\tlet turnFinished;\n\t\t\t\tconst thisTurn = new Promise((resolve) => turnFinished = resolve);\n\t\t\t\tactiveTurn = thisTurn;\n\t\t\t\tactiveSocket = ws;\n\t\t\t\tconst firstTurn = isFirstTurn;\n\t\t\t\tisFirstTurn = false;\n\t\t\t\teventLog = [];\n\t\t\t\tdiskBuffer = \"\";\n\t\t\t\twriteFile(eventLogPath, \"\").catch(() => {});\n\t\t\t\tturnAbort = new AbortController();\n\t\t\t\tcurrentTurnState = \"running\";\n\t\t\t\twriteStartConfig(msg);\n\t\t\t\twriteBridgeMeta(\"running\");\n\t\t\t\tconst startDebug = msg.debug;\n\t\t\t\tdebugConfig = {\n\t\t\t\t\tenabled: startDebug?.enabled ?? envDebugEnabled,\n\t\t\t\t\tlevel: startDebug?.level ?? env.HARNESS_DEBUG_LEVEL,\n\t\t\t\t\tsubsystems: startDebug?.subsystems ?? parseEnvList(env.HARNESS_DEBUG_SUBSYSTEMS)\n\t\t\t\t};\n\t\t\t\tif (debugConfig.enabled) installConsoleCapture();\n\t\t\t\tconst userMessages = createBridgeUserMessageQueue({ respond: emit });\n\t\t\t\tconst turn = {\n\t\t\t\t\temit,\n\t\t\t\t\trequestToolResult: (requestInput) => {\n\t\t\t\t\t\tconst request = typeof requestInput === \"string\" ? { toolCallId: requestInput } : requestInput;\n\t\t\t\t\t\tconst bufferedIndex = bufferedToolResults.findIndex((buffered) => buffered.toolCallId === request.toolCallId || request.matches?.(buffered.result) === true);\n\t\t\t\t\t\tif (bufferedIndex >= 0) return Promise.resolve(bufferedToolResults.splice(bufferedIndex, 1)[0].result);\n\t\t\t\t\t\treturn new Promise((resolve) => {\n\t\t\t\t\t\t\tpendingToolResults.set(request.toolCallId, {\n\t\t\t\t\t\t\t\tresolve,\n\t\t\t\t\t\t\t\tmatches: request.matches\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\trequestToolApproval: (approvalId) => new Promise((resolve) => {\n\t\t\t\t\t\tpendingToolApprovals.set(approvalId, resolve);\n\t\t\t\t\t}),\n\t\t\t\t\texperimental_userMessages: userMessages,\n\t\t\t\t\tabortSignal: turnAbort.signal,\n\t\t\t\t\tfirstTurn,\n\t\t\t\t\tbridgeLog: (input) => {\n\t\t\t\t\t\tconst level = input.level ?? \"debug\";\n\t\t\t\t\t\tif (!shouldEmitDebugEvent(level, input.subsystem)) return;\n\t\t\t\t\t\temit({\n\t\t\t\t\t\t\ttype: \"debug-event\",\n\t\t\t\t\t\t\tlevel,\n\t\t\t\t\t\t\tsubsystem: input.subsystem,\n\t\t\t\t\t\t\tmessage: input.message,\n\t\t\t\t\t\t\t...input.attrs ? { attrs: input.attrs } : {},\n\t\t\t\t\t\t\t...input.error !== void 0 ? { error: formatBridgeError(input.error) } : {}\n\t\t\t\t\t\t});\n\t\t\t\t\t},\n\t\t\t\t\temitWarning,\n\t\t\t\t\temitError\n\t\t\t\t};\n\t\t\t\tcurrentUserMessages = userMessages;\n\t\t\t\ttry {\n\t\t\t\t\tawait onStart(msg, turn);\n\t\t\t\t} catch (err) {\n\t\t\t\t\temitError({\n\t\t\t\t\t\terror: err,\n\t\t\t\t\t\tmessage: \"bridge turn failed\"\n\t\t\t\t\t});\n\t\t\t\t} finally {\n\t\t\t\t\tuserMessages.close();\n\t\t\t\t\tif (currentUserMessages === userMessages) currentUserMessages = void 0;\n\t\t\t\t\tif (activeTurn === thisTurn) {\n\t\t\t\t\t\tactiveTurn = void 0;\n\t\t\t\t\t\tcurrentTurnState = \"waiting\";\n\t\t\t\t\t\twriteBridgeMeta(\"waiting\");\n\t\t\t\t\t}\n\t\t\t\t\tturnFinished();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase \"tool-result\": {\n\t\t\t\tconst result = {\n\t\t\t\t\toutput: msg.output,\n\t\t\t\t\tisError: msg.isError,\n\t\t\t\t\ttoolResult: msg.toolResult\n\t\t\t\t};\n\t\t\t\tconst exactPending = pendingToolResults.get(msg.toolCallId);\n\t\t\t\tconst matchingPending = exactPending == null ? Array.from(pendingToolResults.entries()).find(([, pending]) => pending.matches?.(result) === true) : void 0;\n\t\t\t\tconst pending = exactPending ?? matchingPending?.[1];\n\t\t\t\tconst pendingId = exactPending != null ? msg.toolCallId : matchingPending?.[0];\n\t\t\t\tif (pending != null && pendingId != null) {\n\t\t\t\t\tpendingToolResults.delete(pendingId);\n\t\t\t\t\tpending.resolve(result);\n\t\t\t\t} else bufferedToolResults.push({\n\t\t\t\t\ttoolCallId: msg.toolCallId,\n\t\t\t\t\tresult\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase \"tool-approval-response\": {\n\t\t\t\tconst resolver = pendingToolApprovals.get(msg.approvalId);\n\t\t\t\tif (resolver) {\n\t\t\t\t\tpendingToolApprovals.delete(msg.approvalId);\n\t\t\t\t\tresolver({\n\t\t\t\t\t\tapproved: msg.approved,\n\t\t\t\t\t\treason: msg.reason\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase \"user-message\": {\n\t\t\t\tconst messageId = msg.messageId ?? randomUUID();\n\t\t\t\tif (currentUserMessages == null) {\n\t\t\t\t\tsendControl(ws, {\n\t\t\t\t\t\ttype: \"user-message-response\",\n\t\t\t\t\t\tmessageId,\n\t\t\t\t\t\taccepted: false,\n\t\t\t\t\t\terror: { message: \"The bridge has no active turn to steer.\" }\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (ws !== activeSocket) {\n\t\t\t\t\tsendControl(ws, {\n\t\t\t\t\t\ttype: \"user-message-response\",\n\t\t\t\t\t\tmessageId,\n\t\t\t\t\t\taccepted: false,\n\t\t\t\t\t\terror: { message: \"The connection does not own the active bridge turn.\" }\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tcurrentUserMessages.enqueue({\n\t\t\t\t\tmessageId,\n\t\t\t\t\ttext: msg.text\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcase \"abort\":\n\t\t\t\tturnAbort?.abort();\n\t\t\t\treturn;\n\t\t\tcase \"resume\":\n\t\t\t\tactiveSocket = ws;\n\t\t\t\treplay(ws, msg.lastSeenEventId);\n\t\t\t\treturn;\n\t\t\tcase \"destroy\":\n\t\t\t\tcurrentTurnState = \"done\";\n\t\t\t\twriteBridgeMeta(\"done\");\n\t\t\t\tawait onDestroy?.();\n\t\t\t\tdrainThenExit(ws, 1e3, \"destroy\");\n\t\t\t\treturn;\n\t\t\tcase \"stop\":\n\t\t\t\tcurrentTurnState = \"done\";\n\t\t\t\twriteBridgeMeta(\"done\");\n\t\t\t\tsendControl(ws, {\n\t\t\t\t\ttype: \"bridge-stop\",\n\t\t\t\t\tdata: await onStop?.() ?? {}\n\t\t\t\t});\n\t\t\t\tdrainThenExit(ws, 1e3, \"stop\");\n\t\t}\n\t};\n\twriteBridgeMeta(\"init\");\n\tconst wss = new WebSocketServer({\n\t\tport: bridgeWsPort,\n\t\thost: \"0.0.0.0\"\n\t});\n\tconst exit = () => {\n\t\tif (options.onExit) {\n\t\t\toptions.onExit();\n\t\t\treturn;\n\t\t}\n\t\twss.close(() => process.exit(0));\n\t\tsetTimeout(() => process.exit(0), 1e3).unref();\n\t};\n\tconst drainThenExit = (ws, code, reason) => {\n\t\tconst start = Date.now();\n\t\tconst tick = () => {\n\t\t\tif (ws.bufferedAmount === 0 || ws.readyState !== WS_OPEN || Date.now() - start >= 5e3) {\n\t\t\t\tflushPendingEventsToDisk().finally(() => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tws.close(code, reason);\n\t\t\t\t\t} finally {\n\t\t\t\t\t\texit();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetTimeout(tick, 10).unref();\n\t\t};\n\t\ttick();\n\t};\n\twss.on(\"listening\", () => {\n\t\tconst addr = wss.address();\n\t\tcurrentBoundPort = typeof addr === \"object\" && addr ? addr.port : 0;\n\t\tcurrentTurnState = \"waiting\";\n\t\twriteBridgeMeta(\"waiting\");\n\t\tstdout.write(JSON.stringify({\n\t\t\ttype: \"bridge-ready\",\n\t\t\tport: currentBoundPort\n\t\t}) + \"\\n\");\n\t\toptions.onListening?.(currentBoundPort);\n\t});\n\twss.on(\"connection\", (ws, req) => {\n\t\tif (new URL(req.url ?? \"/\", \"http://localhost\").searchParams.get(\"agent_bridge_token\") !== expectedToken) {\n\t\t\tws.close(1008, \"unauthorized\");\n\t\t\treturn;\n\t\t}\n\t\tsendControl(ws, {\n\t\t\ttype: \"bridge-hello\",\n\t\t\tstate: currentTurnState,\n\t\t\tlastSeq: seqCounter,\n\t\t\tcapabilities: { experimental_userMessageResponses: true }\n\t\t});\n\t\tws.on(\"message\", (raw) => {\n\t\t\tlet parsed;\n\t\t\ttry {\n\t\t\t\tconst text = typeof raw === \"string\" ? raw : Buffer.from(raw).toString(\"utf8\");\n\t\t\t\tparsed = JSON.parse(text);\n\t\t\t} catch (err) {\n\t\t\t\tsendControl(ws, {\n\t\t\t\t\ttype: \"error\",\n\t\t\t\t\terror: `protocol parse error: ${err.message}`\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\thandleInbound(parsed, ws);\n\t\t});\n\t\tws.on(\"close\", () => {\n\t\t\tif (activeSocket === ws) activeSocket = void 0;\n\t\t});\n\t\tws.on(\"error\", () => {});\n\t});\n\tprocess.on(\"uncaughtException\", (err) => {\n\t\temitError({\n\t\t\terror: err,\n\t\t\tmessage: \"uncaught exception\"\n\t\t});\n\t});\n\tprocess.on(\"unhandledRejection\", (err) => {\n\t\temitError({\n\t\t\terror: err,\n\t\t\tmessage: \"unhandled rejection\"\n\t\t});\n\t});\n\tawait new Promise((resolve, reject) => {\n\t\tif (wss.address() != null) {\n\t\t\tresolve();\n\t\t\treturn;\n\t\t}\n\t\twss.once(\"listening\", resolve);\n\t\twss.once(\"error\", reject);\n\t});\n\treturn {\n\t\tport: currentBoundPort,\n\t\tclose: () => new Promise((resolve) => {\n\t\t\twss.close(() => resolve());\n\t\t})\n\t};\n}\nfunction sendControl(socket, message) {\n\tif (socket?.readyState === WS_OPEN) try {\n\t\tsocket.send(JSON.stringify(message));\n\t} catch {}\n}\nfunction serialiseError(err) {\n\tif (err instanceof Error) return {\n\t\tname: err.name,\n\t\tmessage: err.message,\n\t\tstack: err.stack\n\t};\n\treturn err;\n}\n//#endregion\nexport { HarnessBridgeCapabilityUnsupportedError, runBridge };\n\n//# sourceMappingURL=index.js.map","/*\n * Claude reports a compaction in two pieces whose arrival order is not\n * guaranteed: the `compact_boundary` system message (trigger + token counts)\n * and the `PostCompact` hook (the summary text). The harness `compaction`\n * event needs fields from both, so this latch holds each half and emits a\n * single merged event once both have arrived, then resets for the next\n * compaction in the same turn.\n */\n\nexport type CompactionBoundary = {\n trigger: 'manual' | 'auto';\n tokensBefore?: number;\n tokensAfter?: number;\n};\n\nexport type CompactionEvent = {\n type: 'compaction';\n trigger: 'manual' | 'auto';\n summary: string;\n tokensBefore?: number;\n tokensAfter?: number;\n};\n\nexport type CompactionLatch = {\n onBoundary(boundary: CompactionBoundary): void;\n onSummary(summary: string): void;\n};\n\nexport function createCompactionLatch(\n emit: (event: CompactionEvent) => void,\n): CompactionLatch {\n let boundary: CompactionBoundary | undefined;\n let summary: string | undefined;\n\n const tryEmit = (): void => {\n if (!boundary || summary === undefined) return;\n emit({\n type: 'compaction',\n trigger: boundary.trigger,\n summary,\n ...(boundary.tokensBefore !== undefined\n ? { tokensBefore: boundary.tokensBefore }\n : {}),\n ...(boundary.tokensAfter !== undefined\n ? { tokensAfter: boundary.tokensAfter }\n : {}),\n });\n boundary = undefined;\n summary = undefined;\n };\n\n return {\n onBoundary(next) {\n boundary = next;\n tryEmit();\n },\n onSummary(next) {\n summary = next;\n tryEmit();\n },\n };\n}\n","export function createClaudeCodeSystemPrompt(instructions?: string): {\n type: 'preset';\n preset: 'claude_code';\n append?: string;\n} {\n return {\n type: 'preset',\n preset: 'claude_code',\n ...(instructions ? { append: instructions } : {}),\n };\n}\n","export function toClaudeSkillsOption(\n skills: ReadonlyArray<string> | undefined,\n): 'all' | undefined {\n /*\n * The Claude Agent SDK treats `skills: string[]` as an allowlist, which hides\n * built-in/default skills. When the harness writes project skills, ask Claude\n * to enable every discovered skill so bundled defaults and project skills are\n * both visible.\n */\n return skills && skills.length > 0 ? 'all' : undefined;\n}\n","import { randomUUID } from 'node:crypto';\n\ntype Emit = (message: Record<string, unknown>) => void;\n\nexport type ClaudeMessage = {\n type?: string;\n subtype?: string;\n parent_tool_use_id?: string | null;\n model?: string;\n error?: string;\n error_status?: number | null;\n attempt?: number;\n max_retries?: number;\n retry_delay_ms?: number;\n patch?: { status?: string; error?: string };\n compact_metadata?: {\n trigger: 'manual' | 'auto';\n pre_tokens?: number;\n post_tokens?: number;\n };\n event?: {\n type?: string;\n index?: number;\n usage?: Record<string, unknown>;\n message?: {\n usage?: Record<string, unknown>;\n };\n content_block?: {\n type?: string;\n id?: string;\n name?: string;\n };\n delta?: {\n type?: string;\n text?: string;\n thinking?: string;\n partial_json?: string;\n };\n };\n message?: {\n content?: string | ReadonlyArray<MessageBlock>;\n usage?: Record<string, unknown>;\n };\n result?: string;\n /** Result-message error flags; distinct from `error_status` (`api_retry`). */\n is_error?: boolean;\n api_error_status?: number | null;\n errors?: ReadonlyArray<string>;\n usage?: Record<string, unknown>;\n total_cost_usd?: number;\n structured_output?: unknown;\n tool_use_result?: unknown;\n};\n\ntype MessageBlock = {\n type: string;\n text?: string;\n thinking?: string;\n id?: string;\n name?: string;\n input?: unknown;\n tool_use_id?: string;\n content?: unknown;\n is_error?: boolean;\n};\n\nexport type ClaudeStreamEventState = {\n /*\n * Map of native tool-use id → tool name. Claude assistant messages emit\n * `tool_use` blocks with both `id` and `name`; the matching `tool_result`\n * block on a later user message carries only `tool_use_id`, so without this\n * map the tool-result event would have to emit `toolName: 'unknown'`.\n */\n nativeToolCallNames: Map<string, string>;\n approvalRequestedToolUseIds: Set<string>;\n partialBlocks: Map<number, PartialBlock>;\n stepUsage: Record<string, unknown> | undefined;\n pendingStepToolUseIds: Set<string>;\n pendingStepAssistantUsage: Record<string, unknown> | undefined;\n pendingStepDeltaUsage: Record<string, unknown> | undefined;\n pendingStepUsage: Record<string, unknown> | undefined;\n pendingResponseUsage: Record<string, unknown> | undefined;\n stepOpen: boolean;\n /*\n * Tool-use ids that originated from the MCP server hosting user-supplied\n * tools. The MCP handler emits its own `tool-call`/`tool-result` pair with\n * the user-facing tool name, so the duplicate `tool_result` block Claude\n * reports for the underlying native id must be suppressed.\n */\n mcpToolUseIds: Set<string>;\n externalMcpToolUseIds: Set<string>;\n structuredOutputToolUseIds: Set<string>;\n observedTerminalError: string | undefined;\n};\n\ntype PartialBlock =\n | { id: string; kind: 'text' | 'thinking' }\n | { id: string; kind: 'tool-input' };\n\nexport function createClaudeStreamEventState(): ClaudeStreamEventState {\n return {\n nativeToolCallNames: new Map(),\n approvalRequestedToolUseIds: new Set(),\n partialBlocks: new Map(),\n stepUsage: undefined,\n pendingStepToolUseIds: new Set(),\n pendingStepAssistantUsage: undefined,\n pendingStepDeltaUsage: undefined,\n pendingStepUsage: undefined,\n pendingResponseUsage: undefined,\n stepOpen: false,\n mcpToolUseIds: new Set(),\n externalMcpToolUseIds: new Set(),\n structuredOutputToolUseIds: new Set(),\n observedTerminalError: undefined,\n };\n}\n\nconst UNRECOVERABLE_API_RETRY_STATUSES = new Set([401, 403, 404]);\nconst HOST_TOOL_PREFIX = 'mcp__harness-tools__';\nconst RAW_TASK_MESSAGE_SUBTYPES = new Set([\n 'background_tasks_changed',\n 'task_started',\n 'task_progress',\n 'task_updated',\n 'task_notification',\n]);\n\nexport function isExternalMcpTool(nativeName: string): boolean {\n return (\n nativeName.startsWith('mcp__') && !nativeName.startsWith(HOST_TOOL_PREFIX)\n );\n}\n\nexport function createEmitStreamEvent({\n state,\n emit,\n emitWarning,\n emitTerminalError,\n onCompactionBoundary,\n toCommonName,\n}: {\n state: ClaudeStreamEventState;\n emit: Emit;\n emitWarning: (warning: { message: string }) => void;\n emitTerminalError: (message: string | undefined) => void;\n onCompactionBoundary: (boundary: {\n trigger: 'manual' | 'auto';\n tokensBefore?: number;\n tokensAfter?: number;\n }) => void;\n toCommonName: (nativeName: string) => string;\n}): (event: ClaudeMessage) => void {\n let streamStarted = false;\n\n return msg => {\n const type = msg.type;\n\n // Emit `stream-start` once, on the first message, carrying the model the\n // CLI resolved to (the `system`/`init` message reports it — this is the\n // default model when none was configured).\n if (!streamStarted) {\n const initModel =\n type === 'system' &&\n msg.subtype === 'init' &&\n typeof (msg as { model?: unknown }).model === 'string'\n ? (msg as { model: string }).model\n : undefined;\n emit({\n type: 'stream-start',\n ...(initModel ? { modelId: initModel } : {}),\n });\n streamStarted = true;\n }\n\n if (type === 'system' && msg.subtype === 'api_retry') {\n if (\n typeof msg.error_status === 'number' &&\n UNRECOVERABLE_API_RETRY_STATUSES.has(msg.error_status)\n ) {\n emitTerminalError(\n `HTTP ${msg.error_status}: ${msg.error ?? 'provider request failed'}`,\n );\n return;\n }\n\n emitWarning({ message: formatApiRetryWarning(msg) });\n return;\n }\n\n if (typeof msg.error === 'string' && msg.error.trim()) {\n state.observedTerminalError = msg.error.trim();\n }\n\n if (\n type === 'auth_status' &&\n typeof msg.error === 'string' &&\n msg.error.trim()\n ) {\n emitTerminalError(msg.error);\n return;\n }\n\n if (\n type === 'system' &&\n msg.subtype === 'task_updated' &&\n msg.patch?.status === 'failed' &&\n typeof msg.patch.error === 'string'\n ) {\n emitTerminalError(msg.patch.error);\n return;\n }\n\n if (type === 'system' && msg.subtype === 'compact_boundary') {\n const meta = msg.compact_metadata;\n if (meta) {\n onCompactionBoundary({\n trigger: meta.trigger,\n ...(typeof meta.pre_tokens === 'number'\n ? { tokensBefore: meta.pre_tokens }\n : {}),\n ...(typeof meta.post_tokens === 'number'\n ? { tokensAfter: meta.post_tokens }\n : {}),\n });\n }\n return;\n }\n\n if (\n type === 'tool_progress' ||\n (type === 'system' &&\n msg.subtype != null &&\n RAW_TASK_MESSAGE_SUBTYPES.has(msg.subtype))\n ) {\n emit({ type: 'raw', rawValue: msg });\n return;\n }\n\n // Messages emitted by a Task-tool subagent carry the parent tool-use id.\n // Forward them for correlation and nested rendering, but do not map them\n // into regular stream parts or let them affect the parent step.\n if (msg.parent_tool_use_id != null) {\n emit({ type: 'raw', rawValue: msg });\n return;\n }\n\n if (type === 'stream_event') {\n handleStreamEvent({\n event: msg.event,\n message: msg,\n state,\n send: emit,\n toCommonName,\n });\n return;\n }\n\n const messageContent = msg.message?.content;\n if (type === 'assistant' && Array.isArray(messageContent)) {\n const usage = toUsageRecord(msg.message?.usage);\n const toolUseIds: string[] = [];\n let opensStep = false;\n for (const block of messageContent) {\n if (\n block.type === 'tool_use' &&\n typeof block.id === 'string' &&\n typeof block.name === 'string'\n ) {\n toolUseIds.push(block.id);\n if (block.name === 'StructuredOutput') {\n state.structuredOutputToolUseIds.add(block.id);\n continue;\n }\n if (block.name.startsWith(HOST_TOOL_PREFIX)) {\n state.pendingStepToolUseIds.add(block.id);\n state.mcpToolUseIds.add(block.id);\n opensStep = true;\n continue;\n }\n state.nativeToolCallNames.set(block.id, block.name);\n if (block.name === 'AskUserQuestion') {\n state.pendingStepToolUseIds.add(block.id);\n opensStep = true;\n continue;\n }\n const dynamic = isExternalMcpTool(block.name);\n if (dynamic) state.externalMcpToolUseIds.add(block.id);\n if (state.approvalRequestedToolUseIds.has(block.id)) {\n continue;\n }\n state.pendingStepToolUseIds.add(block.id);\n opensStep = true;\n emit({\n type: 'tool-call',\n toolCallId: block.id,\n toolName: toCommonName(block.name),\n nativeName: block.name,\n input: JSON.stringify(block.input ?? {}),\n providerExecuted: true,\n ...(dynamic ? { dynamic: true } : {}),\n });\n }\n }\n if (opensStep || toolUseIds.length === 0) {\n state.stepOpen = true;\n if (usage) {\n state.pendingStepAssistantUsage = usage;\n updatePendingStepUsage(state);\n }\n }\n return;\n }\n\n if (type === 'user' && Array.isArray(messageContent)) {\n const toolResultBlocks = messageContent.filter(\n block => block.type === 'tool_result',\n );\n const toolUseResult =\n toolResultBlocks.length === 1 ? msg.tool_use_result : undefined;\n\n for (const block of messageContent) {\n if (\n block.type === 'tool_result' &&\n typeof block.tool_use_id === 'string'\n ) {\n if (state.structuredOutputToolUseIds.delete(block.tool_use_id)) {\n continue;\n }\n if (state.mcpToolUseIds.has(block.tool_use_id)) {\n state.mcpToolUseIds.delete(block.tool_use_id);\n state.pendingStepToolUseIds.delete(block.tool_use_id);\n continue;\n }\n state.approvalRequestedToolUseIds.delete(block.tool_use_id);\n const nativeName =\n state.nativeToolCallNames.get(block.tool_use_id) ?? 'unknown';\n state.nativeToolCallNames.delete(block.tool_use_id);\n const toolName = toCommonName(nativeName);\n const dynamic = state.externalMcpToolUseIds.delete(block.tool_use_id);\n const isError = !!block.is_error;\n const result =\n toolUseResult !== undefined\n ? toolUseResult\n : resolveToolResult({\n toolName,\n dynamic,\n isError,\n rawContent: block.content,\n });\n emit({\n type: 'tool-result',\n toolCallId: block.tool_use_id,\n toolName,\n result,\n isError,\n ...(dynamic ? { dynamic: true } : {}),\n });\n state.pendingStepToolUseIds.delete(block.tool_use_id);\n }\n }\n closeStepIfReady({ state, emit });\n }\n };\n}\n\nexport function finishApprovalStep({\n state,\n emit,\n approvalId,\n}: {\n state: ClaudeStreamEventState;\n emit: Emit;\n approvalId: string;\n}): void {\n state.stepOpen = true;\n state.pendingStepToolUseIds.delete(approvalId);\n closeStepIfReady({ state, emit });\n}\n\nexport function emitFinishStep({\n state,\n emit,\n usage,\n}: {\n state: ClaudeStreamEventState;\n emit: Emit;\n usage: Record<string, unknown> | undefined;\n}): void {\n emit({\n type: 'finish-step',\n finishReason: { unified: 'stop', raw: 'stop' },\n usage: usage ?? defaultUsage(),\n });\n state.stepUsage = usage ?? state.stepUsage;\n state.pendingStepAssistantUsage = undefined;\n state.pendingStepDeltaUsage = undefined;\n state.pendingStepUsage = undefined;\n state.pendingStepToolUseIds = new Set();\n state.stepOpen = false;\n}\n\nfunction closeStepIfReady({\n state,\n emit,\n}: {\n state: ClaudeStreamEventState;\n emit: Emit;\n}): void {\n if (\n !state.stepOpen ||\n state.pendingStepToolUseIds.size > 0 ||\n state.partialBlocks.size > 0\n ) {\n return;\n }\n emitFinishStep({ state, emit, usage: state.pendingStepUsage });\n}\n\nfunction formatApiRetryWarning(msg: ClaudeMessage): string {\n const details: string[] = [];\n if (typeof msg.attempt === 'number') {\n const maxRetries =\n typeof msg.max_retries === 'number' ? `/${msg.max_retries}` : '';\n details.push(`attempt ${msg.attempt}${maxRetries}`);\n }\n if (typeof msg.error_status === 'number') {\n details.push(`HTTP ${msg.error_status}`);\n }\n if (typeof msg.retry_delay_ms === 'number') {\n details.push(`retrying in ${msg.retry_delay_ms}ms`);\n }\n if (msg.error) details.push(msg.error);\n return details.length > 0\n ? `Claude Code API retry: ${details.join('; ')}`\n : 'Claude Code API retry';\n}\n\nfunction handleStreamEvent({\n event,\n message,\n state,\n send,\n toCommonName,\n}: {\n event: ClaudeMessage['event'] | undefined;\n message: ClaudeMessage;\n state: ClaudeStreamEventState;\n send: Emit;\n toCommonName: (nativeName: string) => string;\n}): void {\n if (!event) return;\n\n if (event.type === 'message_start') {\n state.pendingResponseUsage = toUsageRecord(event.message?.usage);\n return;\n }\n\n if (event.type === 'message_delta') {\n const usage = toUsageRecord(event.usage);\n if (usage) {\n state.pendingResponseUsage = mergeNonNullUsage(\n state.pendingResponseUsage,\n usage,\n );\n state.pendingStepDeltaUsage = mergeNonNullUsage(\n state.pendingStepDeltaUsage,\n usage,\n );\n updatePendingStepUsage(state);\n }\n return;\n }\n\n if (event.type === 'message_stop') {\n send({\n type: 'raw',\n rawValue: {\n ...message,\n usage: state.pendingResponseUsage ?? {},\n },\n });\n state.pendingResponseUsage = undefined;\n return;\n }\n\n if (typeof event.index !== 'number') return;\n const index = event.index;\n const partialBlocks = state.partialBlocks;\n\n if (event.type === 'content_block_start') {\n const blockType = event.content_block?.type;\n if (blockType === 'text') {\n const id = randomUUID();\n partialBlocks.set(index, { id, kind: 'text' });\n send({ type: 'text-start', id });\n } else if (blockType === 'thinking') {\n const id = randomUUID();\n partialBlocks.set(index, { id, kind: 'thinking' });\n send({ type: 'reasoning-start', id });\n } else if (\n blockType === 'tool_use' &&\n typeof event.content_block?.id === 'string' &&\n typeof event.content_block.name === 'string'\n ) {\n const id = event.content_block.id;\n const nativeName = event.content_block.name;\n if (nativeName === 'StructuredOutput') {\n return;\n }\n if (nativeName === 'AskUserQuestion') {\n return;\n }\n const hostToolName = nativeName.startsWith(HOST_TOOL_PREFIX)\n ? nativeName.slice(HOST_TOOL_PREFIX.length)\n : undefined;\n const dynamic = isExternalMcpTool(nativeName);\n partialBlocks.set(index, { id, kind: 'tool-input' });\n send({\n type: 'tool-input-start',\n id,\n toolName: hostToolName ?? toCommonName(nativeName),\n providerExecuted: hostToolName === undefined,\n ...(dynamic ? { dynamic: true } : {}),\n });\n }\n return;\n }\n\n if (event.type === 'content_block_delta') {\n const block = partialBlocks.get(index);\n if (!block) return;\n if (\n block.kind === 'text' &&\n event.delta?.type === 'text_delta' &&\n typeof event.delta.text === 'string'\n ) {\n send({ type: 'text-delta', id: block.id, delta: event.delta.text });\n } else if (\n block.kind === 'thinking' &&\n event.delta?.type === 'thinking_delta' &&\n typeof event.delta.thinking === 'string'\n ) {\n send({\n type: 'reasoning-delta',\n id: block.id,\n delta: event.delta.thinking,\n });\n } else if (\n block.kind === 'tool-input' &&\n event.delta?.type === 'input_json_delta' &&\n typeof event.delta.partial_json === 'string'\n ) {\n send({\n type: 'tool-input-delta',\n id: block.id,\n delta: event.delta.partial_json,\n });\n }\n return;\n }\n\n if (event.type === 'content_block_stop') {\n const block = partialBlocks.get(index);\n if (!block) return;\n partialBlocks.delete(index);\n if (block.kind === 'text') {\n send({ type: 'text-end', id: block.id });\n } else if (block.kind === 'thinking') {\n send({ type: 'reasoning-end', id: block.id });\n } else {\n send({ type: 'tool-input-end', id: block.id });\n }\n }\n}\n\nfunction toUsageRecord(usage: unknown): Record<string, unknown> | undefined {\n return usage != null && typeof usage === 'object'\n ? (usage as Record<string, unknown>)\n : undefined;\n}\n\nfunction mergeNonNullUsage(\n current: Record<string, unknown> | undefined,\n update: Record<string, unknown>,\n): Record<string, unknown> {\n const merged = { ...current };\n for (const [key, value] of Object.entries(update)) {\n if (value != null) {\n merged[key] = value;\n }\n }\n return merged;\n}\n\nfunction updatePendingStepUsage(state: ClaudeStreamEventState): void {\n const assistantUsage = state.pendingStepAssistantUsage;\n const deltaUsage = state.pendingStepDeltaUsage;\n state.pendingStepUsage = mapUsage(\n assistantUsage || deltaUsage\n ? { ...assistantUsage, ...deltaUsage }\n : undefined,\n );\n}\n\nfunction isTextEntry(entry: unknown): entry is { text?: unknown } {\n return entry != null && typeof entry === 'object' && 'text' in entry;\n}\n\nfunction stringifyContent(content: unknown): string {\n if (typeof content === 'string') return content;\n if (Array.isArray(content)) {\n return content\n .map(entry =>\n isTextEntry(entry) ? String(entry.text ?? '') : JSON.stringify(entry),\n )\n .join('');\n }\n return JSON.stringify(content);\n}\n\nfunction hasNonTextContent(content: unknown): boolean {\n return Array.isArray(content) && content.some(entry => !isTextEntry(entry));\n}\n\nfunction resolveToolResult({\n toolName,\n dynamic,\n isError,\n rawContent,\n}: {\n toolName: string;\n dynamic: boolean;\n isError: boolean;\n rawContent: unknown;\n}): unknown {\n /*\n * Claude Code's Bash tool does not report the command's real numeric exit\n * code — the SDK exposes only stdout/stderr text and an is_error flag.\n * Consumers (and the example UI) render bash failures from an `exitCode`\n * field on a structured result, the shape Codex's shell tool provides\n * natively. When Claude omits `tool_use_result`, derive a binary code from\n * is_error: 1 on failure, 0 on success. This fallback is a stand-in for\n * failed/succeeded, not the process's true exit status.\n */\n if (toolName === 'bash') {\n return { exitCode: isError ? 1 : 0, stdout: stringifyContent(rawContent) };\n }\n // Must precede the MCP branch: flattening a non-text block to base64 text\n // is not recoverable by parsing it back.\n if (hasNonTextContent(rawContent)) return rawContent;\n const content = stringifyContent(rawContent);\n return dynamic ? parseMcpToolResult(content) : content;\n}\n\nfunction parseMcpToolResult(content: string): unknown {\n try {\n const parsed = JSON.parse(content);\n // `JSON.parse` also succeeds on scalars; keep those as the string sent.\n return parsed !== null && typeof parsed === 'object' ? parsed : content;\n } catch {\n return content;\n }\n}\n\nexport function mapUsage(usage: unknown): Record<string, unknown> | undefined {\n if (!usage || typeof usage !== 'object') return undefined;\n const u = usage as {\n input_tokens?: number;\n cache_creation_input_tokens?: number;\n cache_read_input_tokens?: number;\n output_tokens?: number;\n };\n return {\n inputTokens: {\n total:\n (u.input_tokens ?? 0) +\n (u.cache_creation_input_tokens ?? 0) +\n (u.cache_read_input_tokens ?? 0),\n noCache: u.input_tokens ?? 0,\n cacheRead: u.cache_read_input_tokens ?? 0,\n cacheWrite: u.cache_creation_input_tokens ?? 0,\n },\n outputTokens: {\n total: u.output_tokens ?? 0,\n text: u.output_tokens ?? 0,\n },\n };\n}\n\nexport function defaultUsage(): Record<string, unknown> {\n return {\n inputTokens: { total: 0, noCache: 0, cacheRead: 0, cacheWrite: 0 },\n outputTokens: { total: 0, text: 0 },\n };\n}\n","import { z } from 'zod/v4';\n\ntype JsonLiteral = string | number | boolean | null;\n\nexport type JsonSchemaObject = {\n type?: string | string[];\n description?: string;\n properties?: Record<string, JsonSchemaObject>;\n additionalProperties?: boolean | JsonSchemaObject;\n required?: string[];\n items?: JsonSchemaObject | JsonSchemaObject[];\n enum?: unknown[];\n const?: unknown;\n oneOf?: JsonSchemaObject[];\n anyOf?: JsonSchemaObject[];\n nullable?: boolean;\n};\n\ntype ZodShape = Record<string, z.ZodTypeAny>;\n\nexport function jsonSchemaToZodObject(input: unknown) {\n const schema = isJsonSchemaObject(input) ? input : {};\n return toZodObject(schema);\n}\n\nfunction toZodObject(schema: JsonSchemaObject) {\n const object = z.object(toZodShape(schema));\n if (schema.additionalProperties === false) return object.strict();\n\n // JSON Schema allows additional properties by default; Zod strips them.\n return object.catchall(\n isJsonSchemaObject(schema.additionalProperties)\n ? toZodType(schema.additionalProperties)\n : z.unknown(),\n );\n}\n\nfunction toZodShape(schema: JsonSchemaObject | undefined): ZodShape {\n if (!schema?.properties) return {};\n const required = new Set(schema.required);\n const shape: ZodShape = {};\n for (const [key, propSchema] of Object.entries(schema.properties)) {\n const propType = toZodType(propSchema);\n let propertyType = required.has(key) ? propType : propType.optional();\n if (propSchema.description) {\n propertyType = propertyType.describe(propSchema.description);\n }\n shape[key] = propertyType;\n }\n return shape;\n}\n\nfunction toZodType(schema: JsonSchemaObject | undefined): z.ZodTypeAny {\n if (!schema) return z.any();\n\n let zType =\n zodForConst(schema) ??\n zodForEnum(schema) ??\n zodForUnion(schema) ??\n zodForType(schema);\n\n if (isNullable(schema)) zType = zType.nullable();\n if (schema.description) zType = zType.describe(schema.description);\n return zType;\n}\n\nfunction zodForType(schema: JsonSchemaObject): z.ZodTypeAny {\n const types = getNonNullTypes(schema);\n if (types.length > 1) return z.any();\n if (Array.isArray(schema.type) && types.length === 0) return z.null();\n const type = types[0] ?? (schema.properties ? 'object' : undefined);\n\n switch (type) {\n case 'string':\n return z.string();\n case 'number':\n return z.number();\n case 'integer':\n return z.number().int();\n case 'boolean':\n return z.boolean();\n case 'array':\n return z.array(\n Array.isArray(schema.items) ? z.any() : toZodType(schema.items),\n );\n case 'object':\n return toZodObject(schema);\n case 'null':\n return z.null();\n default:\n return z.any();\n }\n}\n\nfunction zodForConst(schema: JsonSchemaObject): z.ZodTypeAny | undefined {\n if (!('const' in schema)) return undefined;\n return isJsonLiteral(schema.const) ? z.literal(schema.const) : z.any();\n}\n\nfunction zodForEnum(schema: JsonSchemaObject): z.ZodTypeAny | undefined {\n if (!Array.isArray(schema.enum)) return undefined;\n if (!schema.enum.every(isJsonLiteral)) return z.any();\n return zodForLiterals(schema.enum);\n}\n\nfunction zodForUnion(schema: JsonSchemaObject): z.ZodTypeAny | undefined {\n const unionSchemas = schema.anyOf ?? schema.oneOf;\n if (!unionSchemas || unionSchemas.length < 2) return undefined;\n\n const options = unionSchemas.map(item => toZodType(item)) as unknown as [\n z.ZodTypeAny,\n z.ZodTypeAny,\n ...z.ZodTypeAny[],\n ];\n return z.union(options);\n}\n\nfunction zodForLiterals(values: JsonLiteral[]): z.ZodTypeAny {\n if (values.length === 0) return z.any();\n if (values.length === 1) return z.literal(values[0]);\n\n const literals = values.map(value => z.literal(value)) as unknown as [\n z.ZodTypeAny,\n z.ZodTypeAny,\n ...z.ZodTypeAny[],\n ];\n return z.union(literals);\n}\n\nfunction getNonNullTypes(schema: JsonSchemaObject): string[] {\n return Array.isArray(schema.type)\n ? schema.type.filter(type => type !== 'null')\n : ([schema.type].filter(Boolean) as string[]);\n}\n\nfunction isNullable(schema: JsonSchemaObject): boolean {\n return (\n schema.nullable === true ||\n (Array.isArray(schema.type) && schema.type.includes('null'))\n );\n}\n\nfunction isJsonSchemaObject(input: unknown): input is JsonSchemaObject {\n return input != null && typeof input === 'object' && !Array.isArray(input);\n}\n\nfunction isJsonLiteral(value: unknown): value is JsonLiteral {\n return (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'boolean' ||\n (typeof value === 'number' && Number.isFinite(value))\n );\n}\n","import type { StartMessage } from '../claude-code-bridge-protocol';\n\ntype BuiltinToolFiltering = StartMessage['builtinToolFiltering'];\n\nconst PUBLIC_TO_NATIVE: Readonly<Record<string, string>> = {\n read: 'Read',\n write: 'Write',\n edit: 'Edit',\n bash: 'Bash',\n glob: 'Glob',\n grep: 'Grep',\n webSearch: 'WebSearch',\n WebFetch: 'WebFetch',\n NotebookEdit: 'NotebookEdit',\n TodoWrite: 'TodoWrite',\n Agent: 'Agent',\n TaskCreate: 'TaskCreate',\n TaskGet: 'TaskGet',\n TaskUpdate: 'TaskUpdate',\n TaskList: 'TaskList',\n TaskStop: 'TaskStop',\n TaskOutput: 'TaskOutput',\n Monitor: 'Monitor',\n ListMcpResources: 'ListMcpResources',\n ReadMcpResource: 'ReadMcpResource',\n ExitPlanMode: 'ExitPlanMode',\n EnterWorktree: 'EnterWorktree',\n ExitWorktree: 'ExitWorktree',\n askUserQuestions: 'AskUserQuestion',\n Skill: 'Skill',\n ToolSearch: 'ToolSearch',\n};\n\nconst PUBLIC_TOOL_NAMES = Object.keys(PUBLIC_TO_NATIVE);\n\nfunction toNativeName(toolName: string): string {\n return PUBLIC_TO_NATIVE[toolName] ?? toolName;\n}\n\nexport function resolveNativeTools(\n toolFiltering: BuiltinToolFiltering,\n): string[] | undefined {\n if (toolFiltering == null || toolFiltering.mode === 'deny') return undefined;\n return toolFiltering.toolNames.map(name => toNativeName(name));\n}\n\nexport function resolveInactiveNativeTools(\n toolFiltering: BuiltinToolFiltering,\n): string[] {\n if (toolFiltering == null) return [];\n const inactiveToolNames =\n toolFiltering.mode === 'allow'\n ? PUBLIC_TOOL_NAMES.filter(\n name => !toolFiltering.toolNames.includes(name),\n )\n : toolFiltering.toolNames;\n return inactiveToolNames.map(name => toNativeName(name));\n}\n","import type {\n HarnessV1QuestionsToolInput,\n HarnessV1QuestionsToolOutput,\n} from '@ai-sdk/harness';\nimport type { AskUserQuestionInput } from '@anthropic-ai/claude-agent-sdk/sdk-tools.js';\n\ntype ClaudeCodeQuestion = AskUserQuestionInput['questions'][number];\n\nexport function claudeCodeQuestionKey(\n nativeInput: AskUserQuestionInput,\n): string {\n return JSON.stringify(nativeInput.questions);\n}\n\nexport function toHarnessQuestionsInput(\n nativeInput: AskUserQuestionInput,\n): HarnessV1QuestionsToolInput {\n return {\n allowPartialAnswers: true,\n questions: nativeInput.questions.map((question, questionIndex) => ({\n id: `question-${questionIndex + 1}`,\n question: question.question,\n header: question.header,\n options: question.options.map((option, optionIndex) => ({\n id: `option-${optionIndex + 1}`,\n label: option.label,\n description: option.description,\n ...(option.preview !== undefined ? { preview: option.preview } : {}),\n })),\n allowMultiple: question.multiSelect,\n allowFreeForm: true,\n })),\n };\n}\n\nexport function toClaudeCodeQuestionResult(input: {\n nativeInput: AskUserQuestionInput;\n output: HarnessV1QuestionsToolOutput;\n}):\n | {\n behavior: 'allow';\n updatedInput: AskUserQuestionInput & { answers: Record<string, string> };\n }\n | { behavior: 'deny'; message: string } {\n const output = input.output;\n if (output.action === 'declined' || output.action === 'cancelled') {\n return {\n behavior: 'deny',\n message: `The user ${output.action} the questions.`,\n };\n }\n\n const canonicalInput = toHarnessQuestionsInput(input.nativeInput);\n const answers = Object.fromEntries(\n canonicalInput.questions.flatMap((question, questionIndex) => {\n const answer = output.answers[question.id];\n if (answer == null) return [];\n const nativeQuestion = input.nativeInput.questions[questionIndex];\n return [\n [\n nativeQuestion.question,\n toClaudeCodeAnswer({\n nativeQuestion,\n optionIds: answer.optionIds,\n freeform: answer.freeform,\n }),\n ],\n ];\n }),\n );\n\n return {\n behavior: 'allow',\n updatedInput: { ...input.nativeInput, answers },\n };\n}\n\nfunction toClaudeCodeAnswer(input: {\n nativeQuestion: ClaudeCodeQuestion;\n optionIds: string[];\n freeform: string | undefined;\n}): string {\n if (input.freeform !== undefined) return input.freeform;\n const labels = input.optionIds.flatMap(optionId => {\n const index = positionalIdIndex({ id: optionId, prefix: 'option-' });\n const option =\n index == null ? undefined : input.nativeQuestion.options[index];\n return option == null ? [] : [option.label];\n });\n return input.nativeQuestion.multiSelect\n ? labels.join(', ')\n : (labels[0] ?? '');\n}\n\nfunction positionalIdIndex(input: {\n id: string;\n prefix: string;\n}): number | undefined {\n if (!input.id.startsWith(input.prefix)) return undefined;\n const oneBasedIndex = Number(input.id.slice(input.prefix.length));\n return Number.isInteger(oneBasedIndex) && oneBasedIndex > 0\n ? oneBasedIndex - 1\n : undefined;\n}\n","// Long-running bridge that runs inside a sandbox alongside the `claude` CLI.\n// The generic transport — WebSocket server, token auth, single-flight\n// reconnect, the in-memory event log + `seq`, resume replay, and the\n// lifecycle/meta files — lives in the shared `@ai-sdk/harness/bridge` runtime.\n// This file supplies only the Claude-specific turn driver.\n\nimport {\n runBridge,\n type BridgeEvent,\n type BridgeTurn,\n type Experimental_BridgeUserMessage,\n type Experimental_BridgeUserMessageQueue,\n} from '@ai-sdk/harness/bridge';\nimport { createCompactionLatch } from './compaction-latch';\nimport type { StartMessage } from '../claude-code-bridge-protocol';\nimport { randomUUID } from 'node:crypto';\nimport { argv, env as procEnv, stdout } from 'node:process';\n\n/*\n * CONSTRAINT — the third-party imports below are NEVER bundled into the\n * compiled `bridge/index.mjs`. They are declared `external` in\n * tsdown.config.ts and resolved at runtime from the node_modules that this\n * bridge installs *inside the sandbox* from `src/bridge/package.json` (and\n * its pinned `pnpm-lock.yaml`). That bridge package.json — NOT this host\n * package — is the single source of truth for these packages and their\n * versions; the published `@ai-sdk/harness-claude-code` package does not\n * provide them at runtime.\n *\n * When adding or changing a third-party import here you MUST keep all three\n * in sync, or the bridge will either get the dependency bundled in or fail\n * to resolve it in the sandbox:\n * 1. the import statement below,\n * 2. the `external` array in tsdown.config.ts, and\n * 3. the dependency entry in `src/bridge/package.json`.\n */\nimport * as claudeAgentSdk from '@anthropic-ai/claude-agent-sdk';\nimport type {\n HookCallback,\n HookJSONOutput,\n} from '@anthropic-ai/claude-agent-sdk';\nimport * as mcpServerModule from '@modelcontextprotocol/sdk/server/mcp.js';\nimport { createClaudeCodeSystemPrompt } from './claude-code-system-prompt';\nimport { toClaudeSkillsOption } from './claude-skills-option';\nimport {\n createClaudeStreamEventState,\n createEmitStreamEvent,\n defaultUsage,\n emitFinishStep,\n finishApprovalStep,\n isExternalMcpTool,\n mapUsage,\n type ClaudeMessage,\n} from './create-emit-stream-event';\nimport { jsonSchemaToZodObject } from './json-schema-to-zod';\nimport {\n resolveInactiveNativeTools,\n resolveNativeTools,\n} from './tool-filtering';\nimport {\n claudeCodeQuestionKey,\n toClaudeCodeQuestionResult,\n toHarnessQuestionsInput,\n} from './question-tool';\n\n/*\n * Native Claude Code tool name → cross-harness common name. Tools outside this\n * map (e.g. `WebFetch`, `NotebookEdit`) have no common equivalent; their\n * native name is forwarded as-is on `tool-call` events.\n */\ntype CommonBuiltinToolName =\n | 'read'\n | 'write'\n | 'edit'\n | 'bash'\n | 'glob'\n | 'grep'\n | 'webSearch'\n | 'askUserQuestions';\n\nconst NATIVE_TO_COMMON: Readonly<Record<string, CommonBuiltinToolName>> = {\n Read: 'read',\n Write: 'write',\n Edit: 'edit',\n Bash: 'bash',\n Glob: 'glob',\n Grep: 'grep',\n WebSearch: 'webSearch',\n AskUserQuestion: 'askUserQuestions',\n};\n\nconst NATIVE_TOOL_KINDS: Readonly<\n Record<string, 'readonly' | 'edit' | 'bash'>\n> = {\n Read: 'readonly',\n Glob: 'readonly',\n Grep: 'readonly',\n WebSearch: 'readonly',\n WebFetch: 'readonly',\n TaskGet: 'readonly',\n TaskList: 'readonly',\n TaskOutput: 'readonly',\n ListMcpResources: 'readonly',\n ReadMcpResource: 'readonly',\n Write: 'edit',\n Edit: 'edit',\n NotebookEdit: 'edit',\n TodoWrite: 'edit',\n TaskCreate: 'edit',\n TaskUpdate: 'edit',\n TaskStop: 'edit',\n EnterWorktree: 'edit',\n ExitWorktree: 'edit',\n ExitPlanMode: 'edit',\n Skill: 'readonly',\n AskUserQuestion: 'readonly',\n ToolSearch: 'readonly',\n Bash: 'bash',\n Monitor: 'bash',\n};\n\nfunction toCommonName(nativeName: string): CommonBuiltinToolName | string {\n return NATIVE_TO_COMMON[nativeName] ?? nativeName;\n}\n\nconst args = parseArgs(argv.slice(2));\nconst workdir = args.workdir;\nconst bridgeStateDir = args.bridgeStateDir;\nif (!workdir) {\n emitFatal('Missing --workdir argument.');\n}\nif (!bridgeStateDir) {\n emitFatal('Missing --bridge-state-dir argument.');\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst claudeSdk = claudeAgentSdk as any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst mcpModule = mcpServerModule as any;\n\n/**\n * The Claude session id most recently reported by the SDK, captured from the\n * message stream. Every turn in this bridge process may fork a new id (the\n * SDK's `continue`/`resume` create a new session linked to the previous one),\n * so the latest observation is the one a later resume must name.\n */\nlet lastClaudeSessionId: string | undefined;\n\nawait runBridge<StartMessage>({\n bridgeType: 'claude-code',\n bridgeStateDir,\n onStart: runTurn,\n // Claude Code's conversation state lives in the runtime's own store, keyed\n // by working directory. The resume payload names the exact conversation so a\n // later resume does not have to fall back to \"most recent in this workdir\".\n onStop: () =>\n lastClaudeSessionId == null ? {} : { claudeSessionId: lastClaudeSessionId },\n});\n\ntype Emit = (msg: Record<string, unknown>) => void;\n\nfunction createPermissionOptions(input: {\n start: StartMessage;\n inactiveNativeTools: readonly string[];\n turn: BridgeTurn;\n emit: Emit;\n finishApprovalStep: (approvalId: string) => void;\n nativeToolCallNames: Map<string, string>;\n approvalRequestedToolUseIds: Set<string>;\n}): Record<string, unknown> {\n const permissionMode = input.start.permissionMode ?? 'allow-all';\n const inactiveNativeTools = new Set(input.inactiveNativeTools);\n const permissionSettings = createPermissionSettings({\n permissionMode,\n inactiveNativeTools,\n });\n\n const baseOptions = {\n permissionMode:\n permissionMode === 'allow-all'\n ? 'bypassPermissions'\n : permissionMode === 'allow-edits'\n ? 'acceptEdits'\n : 'default',\n allowDangerouslySkipPermissions: permissionMode === 'allow-all',\n ...(permissionSettings ? { settings: permissionSettings } : {}),\n };\n\n if (permissionMode === 'allow-all') {\n return {\n ...baseOptions,\n /*\n * Claude Code exposes AskUserQuestion in headless SDK sessions only\n * when a permission prompt tool is configured. The stdio prompt tool\n * preserves that tool surface without supplying the canUseTool callback\n * that bypassPermissions guarantees it will never invoke.\n */\n permissionPromptToolName: 'stdio',\n };\n }\n\n return {\n ...baseOptions,\n canUseTool: async (\n toolName: string,\n toolInput: Record<string, unknown>,\n options: { toolUseID: string },\n ) => {\n if (toolName.startsWith('mcp__harness-tools__')) {\n return { behavior: 'allow', updatedInput: toolInput };\n }\n if (\n !inactiveNativeTools.has(toolName) &&\n !nativeToolRequiresApproval({\n nativeName: toolName,\n permissionMode,\n })\n ) {\n return { behavior: 'allow', updatedInput: toolInput };\n }\n\n const approvalId = options.toolUseID;\n input.approvalRequestedToolUseIds.add(approvalId);\n input.nativeToolCallNames.set(approvalId, toolName);\n input.emit({\n type: 'tool-call',\n toolCallId: approvalId,\n toolName: toCommonName(toolName),\n nativeName: toolName,\n input: JSON.stringify(toolInput ?? {}),\n providerExecuted: true,\n ...(isExternalMcpTool(toolName) ? { dynamic: true } : {}),\n });\n input.emit({\n type: 'tool-approval-request',\n approvalId,\n toolCallId: approvalId,\n });\n input.finishApprovalStep(approvalId);\n\n const decision = await input.turn.requestToolApproval(approvalId);\n return decision.approved\n ? { behavior: 'allow', updatedInput: toolInput, toolUseID: approvalId }\n : {\n behavior: 'deny',\n message: decision.reason ?? 'Denied',\n toolUseID: approvalId,\n };\n },\n };\n}\n\nfunction createQuestionPreToolUseHook(input: {\n turn: BridgeTurn;\n emit: Emit;\n nativeToolCallNames: Map<string, string>;\n}): HookCallback {\n return async (hookInput, toolUseID): Promise<HookJSONOutput> => {\n if (\n hookInput.hook_event_name !== 'PreToolUse' ||\n hookInput.tool_name !== 'AskUserQuestion'\n ) {\n return {};\n }\n\n const nativeInput = hookInput.tool_input as Parameters<\n typeof toHarnessQuestionsInput\n >[0];\n const canonicalInput = toHarnessQuestionsInput(nativeInput);\n const toolCallId = toolUseID ?? hookInput.tool_use_id;\n input.nativeToolCallNames.set(toolCallId, hookInput.tool_name);\n input.emit({\n type: 'tool-call',\n toolCallId,\n toolName: 'askUserQuestions',\n nativeName: hookInput.tool_name,\n input: JSON.stringify(canonicalInput),\n providerExecuted: false,\n providerMetadata: {\n 'claude-code': {\n nativeRequest: nativeInput,\n },\n },\n });\n\n const questionKey = claudeCodeQuestionKey(nativeInput);\n const result = await input.turn.requestToolResult({\n toolCallId,\n matches: candidate => {\n const nativeRequest = candidate.toolResult?.providerOptions?.[\n 'claude-code'\n ]?.nativeRequest as\n | Parameters<typeof claudeCodeQuestionKey>[0]\n | undefined;\n return (\n nativeRequest != null &&\n claudeCodeQuestionKey(nativeRequest) === questionKey\n );\n },\n });\n const nativeResult = toClaudeCodeQuestionResult({\n nativeInput,\n output: result.output as Parameters<\n typeof toClaudeCodeQuestionResult\n >[0]['output'],\n });\n\n return {\n hookSpecificOutput: {\n hookEventName: 'PreToolUse',\n ...(nativeResult.behavior === 'allow'\n ? {\n permissionDecision: 'allow',\n updatedInput: {\n ...nativeResult.updatedInput,\n } as Record<string, unknown>,\n }\n : {\n permissionDecision: 'deny',\n permissionDecisionReason: nativeResult.message,\n }),\n },\n };\n };\n}\n\nfunction createPermissionSettings(input: {\n permissionMode: 'allow-reads' | 'allow-edits' | 'allow-all';\n inactiveNativeTools: ReadonlySet<string>;\n}): Record<string, unknown> | undefined {\n const askRules = new Set<string>();\n for (const [nativeName, kind] of Object.entries(NATIVE_TOOL_KINDS)) {\n if (\n input.inactiveNativeTools.has(nativeName) ||\n (input.permissionMode === 'allow-reads'\n ? kind === 'edit' || kind === 'bash'\n : input.permissionMode === 'allow-edits'\n ? kind === 'bash'\n : false)\n ) {\n askRules.add(`${nativeName}(*)`);\n }\n }\n\n if (askRules.size === 0) return undefined;\n\n return {\n permissions: { ask: [...askRules] },\n sandbox: { autoAllowBashIfSandboxed: false },\n };\n}\n\nfunction nativeToolRequiresApproval(input: {\n nativeName: string;\n permissionMode: 'allow-reads' | 'allow-edits' | 'allow-all';\n}): boolean {\n if (input.permissionMode === 'allow-all') return false;\n const kind = NATIVE_TOOL_KINDS[input.nativeName] ?? 'edit';\n if (input.permissionMode === 'allow-edits') return kind === 'bash';\n return kind === 'edit' || kind === 'bash';\n}\n\nasync function runTurn(start: StartMessage, turn: BridgeTurn): Promise<void> {\n const emit: Emit = msg => turn.emit(msg as BridgeEvent);\n\n // Local controller for the Claude query. Aborted either by the host (via the\n // shared runtime's `turn.abortSignal`) or by us on a terminal error.\n const abortCtl = new AbortController();\n // A host abort prefers the SDK's graceful `interrupt()` — Esc semantics: the\n // in-flight turn is persisted to the session transcript and settles with an\n // interrupted result, so a later resume (including the user's own\n // `claude --resume`) still sees the work done before the interrupt. The hard\n // abort kills the CLI process and loses that turn's records, so it is only\n // the fallback — armed unconditionally, because aborting an already-settled\n // query is a no-op — and the immediate path when the abort arrives before\n // the query exists.\n let gracefulAbort: (() => void) | undefined;\n let hardAbortTimer: ReturnType<typeof setTimeout> | undefined;\n const onHostAbort = (): void => {\n if (gracefulAbort) {\n gracefulAbort();\n } else {\n abortCtl.abort();\n }\n };\n if (turn.abortSignal.aborted) {\n abortCtl.abort();\n } else {\n turn.abortSignal.addEventListener('abort', onHostAbort, { once: true });\n }\n\n const streamEventState = createClaudeStreamEventState();\n\n const mcpServers: Record<string, unknown> = { ...start.mcpServers };\n if (start.tools && start.tools.length > 0) {\n const server = new mcpModule.McpServer({\n name: 'harness-tools',\n version: '1.0.0',\n });\n for (const tool of start.tools) {\n server.registerTool(\n tool.name,\n {\n description: tool.description ?? '',\n inputSchema: jsonSchemaToZodObject(tool.inputSchema),\n },\n async (\n ...handlerArgs: [\n Record<string, unknown>,\n { requestId: string | number; _meta?: Record<string, unknown> },\n ]\n ) => {\n const [input, extra] = handlerArgs;\n const metadataToolCallId = extra._meta?.['claudecode/toolUseId'];\n const toolCallId =\n typeof metadataToolCallId === 'string'\n ? metadataToolCallId\n : randomUUID();\n emit({\n type: 'tool-call',\n toolCallId,\n toolName: tool.name,\n input: JSON.stringify(input),\n providerExecuted: false,\n });\n const { output, isError } = await turn.requestToolResult(toolCallId);\n emit({\n type: 'tool-result',\n toolCallId,\n toolName: tool.name,\n result: output ?? null,\n isError: !!isError,\n });\n return {\n content: [{ type: 'text', text: JSON.stringify(output ?? null) }],\n isError,\n };\n },\n );\n }\n mcpServers['harness-tools'] = {\n type: 'sdk',\n name: 'harness-tools',\n instance: server,\n };\n }\n\n // Compaction observation: merge Claude's `compact_boundary` message and\n // `PostCompact` hook (which arrive in either order) into one `compaction`\n // event. See `createCompactionLatch`.\n const compaction = createCompactionLatch(event => emit(event));\n\n // `stream-start` is emitted lazily on the first SDK message (below) so it can\n // carry the model the CLI resolved to, reported on the `system`/`init` message.\n\n const queryInput = createQueryInput({\n initialUserMessage: start.prompt,\n userMessages: turn.experimental_userMessages,\n abortSignal: abortCtl.signal,\n });\n const skillsOption = toClaudeSkillsOption(start.skills);\n const nativeTools = resolveNativeTools(start.builtinToolFiltering);\n const inactiveNativeTools = resolveInactiveNativeTools(\n start.builtinToolFiltering,\n );\n const permissionOptions = createPermissionOptions({\n start,\n inactiveNativeTools,\n turn,\n emit,\n finishApprovalStep: approvalId => {\n finishApprovalStep({ state: streamEventState, emit, approvalId });\n },\n nativeToolCallNames: streamEventState.nativeToolCallNames,\n approvalRequestedToolUseIds: streamEventState.approvalRequestedToolUseIds,\n });\n const questionPreToolUseHook = createQuestionPreToolUseHook({\n turn,\n emit,\n nativeToolCallNames: streamEventState.nativeToolCallNames,\n });\n\n const q = claudeSdk.query({\n prompt: queryInput.input,\n options: {\n ...(start.model ? { model: start.model } : {}),\n ...(start.maxTurns !== undefined ? { maxTurns: start.maxTurns } : {}),\n ...(start.agentProgressSummaries !== undefined\n ? { agentProgressSummaries: start.agentProgressSummaries }\n : {}),\n ...(start.forwardSubagentText !== undefined\n ? { forwardSubagentText: start.forwardSubagentText }\n : {}),\n ...(start.env !== undefined ? { env: { ...procEnv, ...start.env } } : {}),\n ...(skillsOption ? { skills: skillsOption } : {}),\n ...(nativeTools !== undefined ? { tools: nativeTools } : {}),\n ...(inactiveNativeTools.length > 0\n ? { disallowedTools: inactiveNativeTools }\n : {}),\n systemPrompt: createClaudeCodeSystemPrompt(start.instructions),\n thinking: start.thinking,\n ...(start.effort !== undefined ? { effort: start.effort } : {}),\n ...(start.responseFormat?.type === 'json' &&\n start.responseFormat.schema != null\n ? {\n outputFormat: {\n type: 'json_schema' as const,\n schema: start.responseFormat.schema,\n },\n }\n : {}),\n includePartialMessages: true,\n // The `PostCompact` hook carries the compaction summary, which the\n // `compact_boundary` system message does not. Latch it for the unified\n // `compaction` event; return an empty output so compaction proceeds.\n hooks: {\n PreToolUse: [\n {\n matcher: 'AskUserQuestion',\n hooks: [questionPreToolUseHook],\n },\n ],\n PostCompact: [\n {\n hooks: [\n async (input: { compact_summary?: unknown }) => {\n if (typeof input?.compact_summary === 'string') {\n compaction.onSummary(input.compact_summary);\n }\n return {};\n },\n ],\n },\n ],\n },\n // Continuation rule, most specific first.\n //\n // `resumeSessionId` names the exact conversation and is what a\n // cross-process resume should use: `continue` means \"most recent thread\n // in this workdir\", which silently picks the wrong one once anything\n // else has run there. The bridge also retains the id observed during its\n // previous query, so every later query stays pinned to that conversation\n // even when the host detached and reattached between turns. `resume` and\n // `continue` are mutually exclusive in the SDK.\n //\n // Otherwise the host can force-continue by setting `start.continue`,\n // and turns after the first fall back to the legacy cwd-based behavior\n // when no exact id was observed.\n ...((start.resumeSessionId ?? lastClaudeSessionId)\n ? { resume: start.resumeSessionId ?? lastClaudeSessionId }\n : start.continue === true || !turn.firstTurn\n ? { continue: true }\n : {}),\n ...permissionOptions,\n mcpServers,\n cwd: workdir,\n abortSignal: abortCtl.signal,\n },\n });\n\n gracefulAbort = () => {\n // Backstop for the whole teardown, not just the interrupt call: if the\n // stream has not settled five seconds after a graceful interrupt was\n // requested, fall back to the hard abort. Aborting an already-settled\n // query is a no-op, and `unref` keeps the timer from pinning the bridge\n // process open on its own.\n hardAbortTimer = setTimeout(() => abortCtl.abort(), 5000);\n hardAbortTimer.unref?.();\n void Promise.resolve()\n .then(() => q.interrupt())\n .catch(() => abortCtl.abort());\n };\n let turnUsage: Record<string, unknown> | undefined;\n let totalCostUsd: number | undefined;\n let emittedTerminalError = false;\n let emittedTerminalFinish = false;\n\n const emitTerminalError = (message: string | undefined): void => {\n const normalized = message?.trim();\n if (!normalized || emittedTerminalError || emittedTerminalFinish) return;\n streamEventState.observedTerminalError = normalized;\n emittedTerminalError = true;\n // A turn the host itself stopped ends with an error-shaped result by\n // construction (an interrupted query reports a diagnostic, not success);\n // reporting the host's own stop as a terminal error makes every clean\n // interrupt look like a malfunction. The host has already settled the\n // turn on its side.\n if (!turn.abortSignal.aborted) {\n turn.emitError({\n error: normalized,\n message: 'claude-code terminal error',\n });\n }\n queryInput.close();\n abortCtl.abort();\n };\n\n const emitStreamEvent = createEmitStreamEvent({\n state: streamEventState,\n emit,\n emitWarning: turn.emitWarning,\n emitTerminalError,\n onCompactionBoundary: boundary => compaction.onBoundary(boundary),\n toCommonName,\n });\n\n try {\n for await (const msg of q as AsyncIterable<ClaudeMessage>) {\n if (abortCtl.signal.aborted) break;\n\n const type = msg.type;\n\n if (type === 'command_lifecycle') {\n queryInput.handleLifecycle(msg);\n }\n\n // Every SDK message carries the session id of the conversation it\n // belongs to. Track the latest so the stop payload and the terminal\n // finish metadata name the exact conversation.\n const sessionId = (msg as { session_id?: unknown }).session_id;\n if (typeof sessionId === 'string' && sessionId.length > 0) {\n lastClaudeSessionId = sessionId;\n }\n\n emitStreamEvent(msg);\n\n if (type === 'result') {\n if (msg.subtype === 'success') {\n // `success` does not mean the turn succeeded: the CLI flags a rejected\n // request with `is_error` and puts the message in `result`, which the\n // empty-result rescue below cannot catch.\n if (msg.is_error) {\n emitTerminalError(\n msg.result?.trim() ||\n streamEventState.observedTerminalError ||\n (typeof msg.api_error_status === 'number'\n ? `Claude Code reported an API error (HTTP ${msg.api_error_status})`\n : 'Claude Code reported a failed result'),\n );\n continue;\n }\n const emptyResult = !msg.result?.trim?.();\n if (emptyResult && streamEventState.observedTerminalError) {\n emitTerminalError(streamEventState.observedTerminalError);\n continue;\n }\n const usage = msg.usage ?? msg.message?.usage;\n const harnessUsage = mapUsage(usage);\n if (harnessUsage) turnUsage = addUsage(turnUsage, harnessUsage);\n if (typeof msg.total_cost_usd === 'number') {\n totalCostUsd = msg.total_cost_usd;\n }\n if (\n start.responseFormat?.type === 'json' &&\n msg.structured_output !== undefined\n ) {\n const id = randomUUID();\n emit({ type: 'text-start', id });\n emit({\n type: 'text-delta',\n id,\n delta: JSON.stringify(msg.structured_output),\n });\n emit({ type: 'text-end', id });\n streamEventState.stepOpen = true;\n }\n if (streamEventState.stepOpen) {\n emitFinishStep({\n state: streamEventState,\n emit,\n usage: streamEventState.pendingStepUsage ?? harnessUsage,\n });\n }\n if (!queryInput.answersSentMessage(msg)) continue;\n queryInput.observeResult();\n if (!queryInput.hasActiveUserMessages()) {\n queryInput.close();\n break;\n }\n } else {\n emitTerminalError(\n (Array.isArray(msg.errors) ? msg.errors.join('\\n') : undefined) ||\n streamEventState.observedTerminalError ||\n msg.result ||\n 'Unknown error',\n );\n }\n continue;\n }\n\n if (queryInput.hasObservedResult && !queryInput.hasActiveUserMessages()) {\n queryInput.close();\n break;\n }\n }\n } catch (err) {\n // Same reasoning as `emitTerminalError`: a throw after the host's own\n // abort (e.g. the hard-abort fallback killing the CLI mid-iteration, or\n // a rejected `interrupt()`) is the stop the host asked for, not a\n // malfunction. The host has already settled the turn on its side.\n if (\n !turn.abortSignal.aborted &&\n !(abortCtl.signal.aborted && emittedTerminalError)\n ) {\n turn.emitError({ error: err, message: 'claude-code turn failed' });\n }\n return;\n } finally {\n // The turn is over; disarm the host-abort path first. An abort of this\n // turn's signal arriving after this point (e.g. an `abort` message racing\n // the next `start`) must not interrupt the disposed query or arm the\n // hard-abort fallback timer for it.\n gracefulAbort = undefined;\n if (hardAbortTimer != null) clearTimeout(hardAbortTimer);\n turn.abortSignal.removeEventListener('abort', onHostAbort);\n queryInput.close();\n // Dispose the query explicitly: with streaming input the SDK keeps its\n // CLI subprocess alive for more user messages, and a turn that ended\n // through an interrupt or error path can otherwise leak that process —\n // observed as orphaned `claude` processes holding the very conversation\n // the next turn continues.\n try {\n await (q as { return?: (value?: unknown) => Promise<unknown> }).return?.(\n undefined,\n );\n } catch {\n // Best effort; the abort controller tears the process down otherwise.\n }\n }\n\n if (emittedTerminalError) return;\n emittedTerminalFinish = true;\n void emittedTerminalFinish;\n emit({\n type: 'finish',\n finishReason: { unified: 'stop', raw: 'stop' },\n totalUsage: turnUsage ?? streamEventState.stepUsage ?? defaultUsage(),\n ...(totalCostUsd !== undefined || lastClaudeSessionId !== undefined\n ? {\n harnessMetadata: {\n 'claude-code': {\n ...(totalCostUsd !== undefined ? { costUsd: totalCostUsd } : {}),\n // The conversation this turn belongs to, resumable outside the\n // SDK with `claude --resume <sessionId>` and captured by the\n // adapter for exact cross-process resume.\n ...(lastClaudeSessionId !== undefined\n ? { sessionId: lastClaudeSessionId }\n : {}),\n },\n },\n }\n : {}),\n });\n}\n\nfunction createQueryInput({\n initialUserMessage,\n userMessages,\n abortSignal,\n}: {\n initialUserMessage: string;\n userMessages: Experimental_BridgeUserMessageQueue;\n abortSignal: AbortSignal;\n}): {\n input: AsyncIterable<unknown>;\n close(error?: unknown): void;\n handleLifecycle(message: ClaudeMessage): void;\n hasActiveUserMessages(): boolean;\n answersSentMessage(result: ClaudeMessage): boolean;\n observeResult(): void;\n readonly hasObservedResult: boolean;\n} {\n let closed = false;\n let observedResult = false;\n const submittedMessages = new Map<string, Experimental_BridgeUserMessage>();\n const initialMessageId = randomUUID();\n const sentMessageIds = new Set<string>([initialMessageId]);\n let cliEchoesMessageIds = false;\n const noteEcho = (ids: readonly unknown[]): boolean => {\n const echoed = ids.some(\n id => typeof id === 'string' && sentMessageIds.has(id),\n );\n if (echoed) cliEchoesMessageIds = true;\n return echoed;\n };\n const close = (error?: unknown): void => {\n if (closed) return;\n closed = true;\n userMessages.close(error);\n };\n if (abortSignal.aborted) {\n close(abortSignal.reason);\n } else {\n abortSignal.addEventListener('abort', () => close(abortSignal.reason), {\n once: true,\n });\n }\n\n const toUserMessage = (options: {\n text: string;\n messageId: string;\n priority?: 'next';\n }): unknown => ({\n type: 'user',\n message: {\n role: 'user',\n content: [{ type: 'text', text: options.text }],\n },\n parent_tool_use_id: null,\n uuid: options.messageId,\n ...(options.priority == null ? {} : { priority: options.priority }),\n });\n\n const messageIterator = userMessages[Symbol.asyncIterator]();\n\n return {\n close,\n handleLifecycle: message => {\n const lifecycle = message as ClaudeMessage & {\n command_uuid?: string;\n state?: 'queued' | 'started' | 'completed' | 'cancelled' | 'discarded';\n };\n if (lifecycle.command_uuid == null || lifecycle.state == null) return;\n noteEcho([lifecycle.command_uuid]);\n if (\n lifecycle.command_uuid === initialMessageId &&\n (lifecycle.state === 'cancelled' || lifecycle.state === 'discarded')\n ) {\n observedResult = true;\n }\n const submitted = submittedMessages.get(lifecycle.command_uuid);\n if (submitted == null) return;\n if (lifecycle.state === 'queued' || lifecycle.state === 'started') {\n submitted.accept();\n return;\n }\n if (lifecycle.state === 'cancelled' || lifecycle.state === 'discarded') {\n submitted.reject(\n new Error(`Claude Code ${lifecycle.state} the user message.`),\n );\n }\n submittedMessages.delete(lifecycle.command_uuid);\n },\n hasActiveUserMessages: () =>\n submittedMessages.size > 0 || userMessages.pendingCount > 0,\n answersSentMessage: result => {\n const { user_message_uuid, user_message_uuids, origin } = result as {\n user_message_uuid?: unknown;\n user_message_uuids?: unknown;\n origin?: { kind?: string };\n };\n const echoed = noteEcho([\n user_message_uuid,\n ...(Array.isArray(user_message_uuids) ? user_message_uuids : []),\n ]);\n return (\n echoed || (!cliEchoesMessageIds && origin?.kind !== 'task-notification')\n );\n },\n observeResult: () => {\n observedResult = true;\n },\n get hasObservedResult() {\n return observedResult;\n },\n input: {\n [Symbol.asyncIterator]() {\n let sentInitial = false;\n return {\n async next() {\n if (closed || abortSignal.aborted) {\n return {\n value: undefined,\n done: true,\n } as IteratorResult<unknown>;\n }\n if (!sentInitial) {\n sentInitial = true;\n return {\n value: toUserMessage({\n text: initialUserMessage,\n messageId: initialMessageId,\n }),\n done: false,\n };\n }\n const nextMessage = await messageIterator.next();\n if (nextMessage.done) {\n return {\n value: undefined,\n done: true,\n } as IteratorResult<unknown>;\n }\n submittedMessages.set(\n nextMessage.value.messageId,\n nextMessage.value,\n );\n sentMessageIds.add(nextMessage.value.messageId);\n return {\n value: toUserMessage({\n text: nextMessage.value.text,\n messageId: nextMessage.value.messageId,\n priority: 'next',\n }),\n done: false,\n };\n },\n };\n },\n },\n };\n}\n\nfunction addUsage(\n total: Record<string, unknown> | undefined,\n usage: Record<string, unknown>,\n): Record<string, unknown> {\n if (total == null) return usage;\n const result: Record<string, unknown> = { ...total };\n for (const [key, value] of Object.entries(usage)) {\n const previous = result[key];\n if (typeof value === 'number' && typeof previous === 'number') {\n result[key] = previous + value;\n } else if (\n value != null &&\n previous != null &&\n typeof value === 'object' &&\n typeof previous === 'object' &&\n !Array.isArray(value) &&\n !Array.isArray(previous)\n ) {\n result[key] = addUsage(\n previous as Record<string, unknown>,\n value as Record<string, unknown>,\n );\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n\nfunction parseArgs(args: string[]): {\n workdir?: string;\n bridgeStateDir?: string;\n} {\n const out: { workdir?: string; bridgeStateDir?: string } = {};\n for (let i = 0; i < args.length; i++) {\n if (args[i] === '--workdir' && i + 1 < args.length) {\n out.workdir = args[++i];\n } else if (args[i] === '--bridge-state-dir' && i + 1 < args.length) {\n out.bridgeStateDir = args[++i];\n }\n }\n return out;\n}\n\nfunction emitFatal(message: string): never {\n stdout.write(JSON.stringify({ type: 'bridge-fatal', message }) + '\\n');\n process.exit(1);\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":["SandboxSession"],"sources":["../src/claude-code-auth.ts","../src/claude-code-thinking.ts","../src/claude-code-harness.ts","../src/version.ts","../src/index.ts"],"mappings":";;;;;KAwEY,+BAA+B;;;KCxE/B;WAEG;WACA;;WAGA;;;;KCgFH;WACD,OAAO;;;;;;WAMP,uBAAuB;;;;;WAKvB,aAAa;;;;;WAKb;;;;;WAKA;;;;;WAKA;;;;;WAKA,MAAM,SAAS;;;;;WAKf,WAAW;;;;;WAKX;;;;;;;WAOA;;;;;WAKA,eAAe;;WAEf;;;;;;;WAOA,YAAY;;;;;WAKZ,kBAAkB;;cA2CvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAiSC,yBAAO,yBAAyB;aAC1B;aACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAsUG,iBACd,WAAU,4BACT,iBAAiB;;;qBC9yBP;;;;;;;;qBCKA,sCAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAQuq1D;MAAoC;;;QAAmE;QAAsC;;MAAiE;MAA2C;;;;;;;;MAA4K;;;;;;MAAgJ"}
1
+ {"version":3,"file":"index.d.ts","names":["SandboxSession"],"sources":["../src/claude-code-auth.ts","../src/claude-code-thinking.ts","../src/claude-code-harness.ts","../src/version.ts","../src/index.ts"],"mappings":";;;;;KAwEY,+BAA+B;;;KCxE/B;WAEG;WACA;;WAGA;;;;KCgFH;WACD,OAAO;;;;;;WAMP,uBAAuB;;;;;WAKvB,aAAa;;;;;WAKb;;;;;WAKA;;;;;WAKA;;;;;WAKA,MAAM,SAAS;;;;;WAKf,WAAW;;;;;WAKX;;;;;;;WAOA;;;;;WAKA,eAAe;;WAEf;;;;;;;WAOA,YAAY;;;;;WAKZ,kBAAkB;;cA2CvB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;WAiSC,yBAAO,yBAAyB;aAC1B;aACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;wBAsUG,iBACd,WAAU,4BACT,iBAAiB;;;qBC9yBP;;;;;;;;qBCKA,sCAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAQyx1D;MAAoC;;;QAAmE;QAAsC;;MAAiE;MAA2C;;;;;;;;MAA4K;;;;;;MAAgJ"}
package/dist/index.js CHANGED
@@ -307,7 +307,7 @@ const startMessageSchema = harnessV1BridgeStartBaseSchema.extend({
307
307
  z.discriminatedUnion("type", [startMessageSchema, ...harnessV1BridgeInboundCommandSchemas]);
308
308
  //#endregion
309
309
  //#region src/version.ts
310
- const VERSION = "1.0.142";
310
+ const VERSION = "1.0.144";
311
311
  //#endregion
312
312
  //#region src/claude-code-harness.ts
313
313
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-sdk/harness-claude-code",
3
- "version": "1.0.142",
3
+ "version": "1.0.144",
4
4
  "type": "module",
5
5
  "license": "Apache-2.0",
6
6
  "sideEffects": false,
@@ -26,9 +26,9 @@
26
26
  }
27
27
  },
28
28
  "dependencies": {
29
- "@ai-sdk/harness": "1.0.138",
30
- "@ai-sdk/provider": "4.0.21",
31
- "@ai-sdk/provider-utils": "5.0.53",
29
+ "@ai-sdk/harness": "1.0.140",
30
+ "@ai-sdk/provider": "4.0.23",
31
+ "@ai-sdk/provider-utils": "5.0.55",
32
32
  "ws": "^8.21.0"
33
33
  },
34
34
  "peerDependencies": {
@@ -41,7 +41,7 @@
41
41
  "@types/ws": "^8.5.13",
42
42
  "@vercel/ai-tsconfig": "0.0.0",
43
43
  "tsdown": "^0.23.0",
44
- "typescript": "5.8.3",
44
+ "typescript": "6.0.3",
45
45
  "zod": "3.25.76"
46
46
  },
47
47
  "engines": {
@@ -647,7 +647,7 @@ async function runTurn(start: StartMessage, turn: BridgeTurn): Promise<void> {
647
647
  const harnessUsage = mapUsage(usage);
648
648
  if (harnessUsage) turnUsage = addUsage(turnUsage, harnessUsage);
649
649
  if (typeof msg.total_cost_usd === 'number') {
650
- totalCostUsd = (totalCostUsd ?? 0) + msg.total_cost_usd;
650
+ totalCostUsd = msg.total_cost_usd;
651
651
  }
652
652
  if (
653
653
  start.responseFormat?.type === 'json' &&
@@ -670,6 +670,7 @@ async function runTurn(start: StartMessage, turn: BridgeTurn): Promise<void> {
670
670
  usage: streamEventState.pendingStepUsage ?? harnessUsage,
671
671
  });
672
672
  }
673
+ if (!queryInput.answersSentMessage(msg)) continue;
673
674
  queryInput.observeResult();
674
675
  if (!queryInput.hasActiveUserMessages()) {
675
676
  queryInput.close();
@@ -764,12 +765,23 @@ function createQueryInput({
764
765
  close(error?: unknown): void;
765
766
  handleLifecycle(message: ClaudeMessage): void;
766
767
  hasActiveUserMessages(): boolean;
768
+ answersSentMessage(result: ClaudeMessage): boolean;
767
769
  observeResult(): void;
768
770
  readonly hasObservedResult: boolean;
769
771
  } {
770
772
  let closed = false;
771
773
  let observedResult = false;
772
774
  const submittedMessages = new Map<string, Experimental_BridgeUserMessage>();
775
+ const initialMessageId = randomUUID();
776
+ const sentMessageIds = new Set<string>([initialMessageId]);
777
+ let cliEchoesMessageIds = false;
778
+ const noteEcho = (ids: readonly unknown[]): boolean => {
779
+ const echoed = ids.some(
780
+ id => typeof id === 'string' && sentMessageIds.has(id),
781
+ );
782
+ if (echoed) cliEchoesMessageIds = true;
783
+ return echoed;
784
+ };
773
785
  const close = (error?: unknown): void => {
774
786
  if (closed) return;
775
787
  closed = true;
@@ -808,6 +820,13 @@ function createQueryInput({
808
820
  state?: 'queued' | 'started' | 'completed' | 'cancelled' | 'discarded';
809
821
  };
810
822
  if (lifecycle.command_uuid == null || lifecycle.state == null) return;
823
+ noteEcho([lifecycle.command_uuid]);
824
+ if (
825
+ lifecycle.command_uuid === initialMessageId &&
826
+ (lifecycle.state === 'cancelled' || lifecycle.state === 'discarded')
827
+ ) {
828
+ observedResult = true;
829
+ }
811
830
  const submitted = submittedMessages.get(lifecycle.command_uuid);
812
831
  if (submitted == null) return;
813
832
  if (lifecycle.state === 'queued' || lifecycle.state === 'started') {
@@ -823,6 +842,20 @@ function createQueryInput({
823
842
  },
824
843
  hasActiveUserMessages: () =>
825
844
  submittedMessages.size > 0 || userMessages.pendingCount > 0,
845
+ answersSentMessage: result => {
846
+ const { user_message_uuid, user_message_uuids, origin } = result as {
847
+ user_message_uuid?: unknown;
848
+ user_message_uuids?: unknown;
849
+ origin?: { kind?: string };
850
+ };
851
+ const echoed = noteEcho([
852
+ user_message_uuid,
853
+ ...(Array.isArray(user_message_uuids) ? user_message_uuids : []),
854
+ ]);
855
+ return (
856
+ echoed || (!cliEchoesMessageIds && origin?.kind !== 'task-notification')
857
+ );
858
+ },
826
859
  observeResult: () => {
827
860
  observedResult = true;
828
861
  },
@@ -845,7 +878,7 @@ function createQueryInput({
845
878
  return {
846
879
  value: toUserMessage({
847
880
  text: initialUserMessage,
848
- messageId: randomUUID(),
881
+ messageId: initialMessageId,
849
882
  }),
850
883
  done: false,
851
884
  };
@@ -861,6 +894,7 @@ function createQueryInput({
861
894
  nextMessage.value.messageId,
862
895
  nextMessage.value,
863
896
  );
897
+ sentMessageIds.add(nextMessage.value.messageId);
864
898
  return {
865
899
  value: toUserMessage({
866
900
  text: nextMessage.value.text,