poe-code 8.0.1 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/cli/commands/harness.js +12 -3
  2. package/dist/cli/commands/harness.js.map +1 -1
  3. package/dist/index.js +1501 -711
  4. package/dist/index.js.map +4 -4
  5. package/dist/metafile.json +1 -1
  6. package/package.json +1 -1
  7. package/packages/safejs/dist/chunks/chunk-4YIDX44G.js +40 -0
  8. package/packages/safejs/dist/chunks/chunk-4YIDX44G.js.map +7 -0
  9. package/packages/safejs/dist/chunks/chunk-55ZK3CR7.js +7802 -0
  10. package/packages/safejs/dist/chunks/chunk-55ZK3CR7.js.map +7 -0
  11. package/packages/safejs/dist/chunks/{chunk-ME5BTAZT.js → chunk-GQBEEFVQ.js} +150 -19
  12. package/packages/safejs/dist/chunks/{chunk-ME5BTAZT.js.map → chunk-GQBEEFVQ.js.map} +4 -4
  13. package/packages/safejs/dist/chunks/chunk-NI4WFFTL.js +5701 -0
  14. package/packages/safejs/dist/chunks/chunk-NI4WFFTL.js.map +7 -0
  15. package/packages/safejs/dist/chunks/inMemory-RLZ4QGDZ.js +48 -0
  16. package/packages/safejs/dist/chunks/inMemory-RLZ4QGDZ.js.map +7 -0
  17. package/packages/safejs/dist/chunks/server-3SNT3RE2.js +12518 -0
  18. package/packages/safejs/dist/chunks/server-3SNT3RE2.js.map +7 -0
  19. package/packages/safejs/dist/chunks/types-BTF37PZ6.js +348 -0
  20. package/packages/safejs/dist/chunks/types-BTF37PZ6.js.map +7 -0
  21. package/packages/safejs/dist/cli.d.ts +2 -0
  22. package/packages/safejs/dist/cli.js +26 -2
  23. package/packages/safejs/dist/cli.js.map +2 -2
  24. package/packages/safejs/dist/core.js +2 -1
  25. package/packages/safejs/dist/index.d.ts +3 -0
  26. package/packages/safejs/dist/index.js +6 -287
  27. package/packages/safejs/dist/index.js.map +4 -4
  28. package/packages/safejs/dist/interp/host-bridge.d.ts +2 -0
  29. package/packages/safejs/dist/interp/host-bridge.js +20 -9
  30. package/packages/safejs/dist/interp/host-call.d.ts +5 -0
  31. package/packages/safejs/dist/interp/host-call.js +48 -3
  32. package/packages/safejs/dist/interp/resources.d.ts +7 -0
  33. package/packages/safejs/dist/interp/resources.js +36 -0
  34. package/packages/safejs/dist/modules/mcp-transport.d.ts +26 -0
  35. package/packages/safejs/dist/modules/mcp-transport.js +259 -0
  36. package/packages/safejs/dist/modules/mcp.d.ts +15 -1
  37. package/packages/safejs/dist/modules/mcp.js +107 -0
  38. package/packages/safejs/dist/run.js +6 -3
  39. package/packages/safejs/dist/snapshot/dump-format.d.ts +1 -1
  40. package/packages/safejs/dist/snapshot/dump-format.js +1 -1
  41. package/packages/safejs/dist/snapshot/replay-data.d.ts +1 -0
  42. package/packages/safejs/dist/snapshot/replay-data.js +3 -1
  43. package/packages/safejs/dist/snapshot/replay-inputs.d.ts +2 -2
  44. package/packages/safejs/dist/snapshot/replay-inputs.js +2 -1
  45. package/packages/safejs/dist/chunks/chunk-AVDRLE3Y.js +0 -3461
  46. package/packages/safejs/dist/chunks/chunk-AVDRLE3Y.js.map +0 -7
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/error/format.ts", "../../src/loader/extract-block.ts", "../../../frontmatter/src/fences.ts", "../../../frontmatter/src/parse.ts", "../../../frontmatter/src/stringify.ts", "../../src/loader/frontmatter.ts", "../../src/lint/runtime-modules.ts", "../../src/modules/agent.ts", "../../../agent-defs/src/agents/claude-code.ts", "../../../agent-defs/src/agents/claude-desktop.ts", "../../../agent-defs/src/agents/codex.ts", "../../../agent-defs/src/agents/cursor.ts", "../../../agent-defs/src/agents/gemini-cli.ts", "../../../agent-defs/src/agents/opencode.ts", "../../../agent-defs/src/agents/kimi.ts", "../../../agent-defs/src/agents/goose.ts", "../../../agent-defs/src/agents/pi.ts", "../../../agent-defs/src/agents/poe-agent.ts", "../../../agent-defs/src/registry.ts", "../../../agent-spawn/src/configs/mcp.ts", "../../../agent-spawn/src/configs/claude-code.ts", "../../../agent-spawn/src/configs/codex.ts", "../../../agent-spawn/src/configs/opencode.ts", "../../../agent-spawn/src/configs/kimi.ts", "../../../agent-spawn/src/configs/goose.ts", "../../../agent-spawn/src/types.ts", "../../../agent-spawn/src/configs/gemini-cli.ts", "../../../agent-spawn/src/configs/cursor.ts", "../../../agent-spawn/src/configs/pi.ts", "../../../agent-spawn/src/configs/index.ts", "../../../agent-spawn/src/parallel.ts", "../../src/modules/fail.ts", "../../src/modules/fs.ts", "../../src/modules/canonical-path.ts", "../../src/modules/harness.ts", "../../src/output-stream.ts", "../../src/modules/log.ts", "../../src/modules/metric.ts"],
4
- "sourcesContent": ["import { SandboxError } from \"../interp/budget.js\";\n\nexport type InterpreterDiagnostic = {\n kind: string;\n filename: string;\n line: number;\n column: number;\n message: string;\n};\n\nexport type FormatErrorOptions = {\n filename?: string;\n hostCallName?: string;\n maxMessageLength?: number;\n source?: string;\n};\n\ntype ParseDiagnostic = InterpreterDiagnostic & {\n kind: \"ParseError\";\n excerpt: string;\n caret: string;\n};\n\ntype SpanDiagnostic = {\n message: string;\n span: {\n start: {\n line: number;\n column: number;\n };\n };\n};\n\nconst DEFAULT_MAX_MESSAGE_LENGTH = 10_000;\nconst MAX_CAUSE_DEPTH = 20;\n\nexport function formatInterpreterError(source: string, error: InterpreterDiagnostic): string;\nexport function formatInterpreterError(error: unknown, options?: FormatErrorOptions): string;\nexport function formatInterpreterError(\n first: string | unknown,\n second?: InterpreterDiagnostic | FormatErrorOptions\n): string {\n if (typeof first === \"string\" && isInterpreterDiagnostic(second)) {\n return formatSourceDiagnostic(first, second, {\n maxMessageLength: DEFAULT_MAX_MESSAGE_LENGTH\n });\n }\n\n const options = second as FormatErrorOptions | undefined;\n const formatted = formatTopLevelError(first, normalizeOptions(options));\n\n if (options?.hostCallName === undefined) {\n return formatted;\n }\n\n return wrapHostCall(formatted, options.hostCallName);\n}\n\nfunction normalizeOptions(options: FormatErrorOptions | undefined): Required<FormatErrorOptions> {\n return {\n filename: options?.filename ?? \"<input>\",\n hostCallName: options?.hostCallName ?? \"\",\n maxMessageLength: options?.maxMessageLength ?? DEFAULT_MAX_MESSAGE_LENGTH,\n source: options?.source ?? \"\"\n };\n}\n\nfunction formatTopLevelError(error: unknown, options: Required<FormatErrorOptions>): string {\n if (isParseDiagnostic(error)) {\n return formatParseDiagnostic(error, options.maxMessageLength);\n }\n\n if (error instanceof SandboxError) {\n return formatSandboxError(error, options.maxMessageLength);\n }\n\n if (isSpanDiagnostic(error)) {\n if (options.source === \"\") {\n return truncate(error.message, options.maxMessageLength);\n }\n\n return formatSourceDiagnostic(options.source, {\n kind: \"InterpreterError\",\n filename: options.filename,\n line: error.span.start.line,\n column: error.span.start.column,\n message: error.message\n });\n }\n\n if (isErrorLike(error)) {\n return formatErrorLike(error, options.maxMessageLength);\n }\n\n return `Thrown value: ${truncate(describeThrownValue(error), options.maxMessageLength)}`;\n}\n\nfunction formatParseDiagnostic(error: ParseDiagnostic, maxMessageLength: number): string {\n return [\n `${error.kind}: ${error.filename}:${error.line}:${error.column}`,\n \"\",\n error.excerpt,\n error.caret,\n \"\",\n truncate(error.message, maxMessageLength)\n ].join(\"\\n\");\n}\n\nfunction formatSandboxError(error: SandboxError, maxMessageLength: number): string {\n const lines = [formatErrorSummary(error, maxMessageLength)];\n\n if (error.code === \"budgetExceeded\" && error.budget !== undefined) {\n lines.push(\"\", `Budget exceeded: ${error.budget} (${error.current} > ${error.limit})`);\n }\n\n return lines.join(\"\\n\");\n}\n\nfunction formatErrorLike(error: ErrorLike, maxMessageLength: number): string {\n const stack = formatSandboxStack(error, maxMessageLength);\n const causes = formatCauses(error, maxMessageLength);\n\n if (causes.length === 0) {\n return stack;\n }\n\n return [stack, \"\", ...causes].join(\"\\n\");\n}\n\nfunction formatSandboxStack(error: ErrorLike, maxMessageLength: number): string {\n if (typeof error.stack !== \"string\") {\n return formatErrorSummary(error, maxMessageLength);\n }\n\n const stackLines = splitLines(error.stack);\n const header = stackLines[0] === undefined || stackLines[0] === \"\" ? undefined : stackLines[0];\n const sandboxFrames = stackLines.slice(1).filter(isSandboxStackFrame);\n\n if (sandboxFrames.length === 0) {\n return formatErrorSummary(error, maxMessageLength);\n }\n\n return [\n truncate(header ?? formatErrorSummary(error, maxMessageLength), maxMessageLength),\n ...sandboxFrames\n ].join(\"\\n\");\n}\n\nfunction isSandboxStackFrame(line: string): boolean {\n const trimmed = line.trimStart();\n\n return (\n trimmed.startsWith(\"at \") &&\n trimmed.includes(\"(line \") &&\n trimmed.includes(\", column \") &&\n trimmed.endsWith(\")\")\n );\n}\n\nfunction formatCauses(error: ErrorLike, maxMessageLength: number): string[] {\n const causes: string[] = [];\n const seen = new Set<unknown>();\n let current: unknown = readCause(error);\n\n for (let depth = 0; depth < MAX_CAUSE_DEPTH && current !== undefined; depth += 1) {\n if (seen.has(current)) {\n causes.push(\"Caused by: [Circular cause]\");\n break;\n }\n\n seen.add(current);\n causes.push(`Caused by: ${formatCause(current, maxMessageLength)}`);\n current = isObject(current) ? readCause(current) : undefined;\n }\n\n return causes;\n}\n\nfunction formatCause(cause: unknown, maxMessageLength: number): string {\n if (cause instanceof SandboxError) {\n return formatErrorSummary(cause, maxMessageLength);\n }\n\n if (isErrorLike(cause)) {\n return formatErrorSummary(cause, maxMessageLength);\n }\n\n return truncate(describeThrownValue(cause), maxMessageLength);\n}\n\nfunction readCause(value: object): unknown {\n return Object.prototype.hasOwnProperty.call(value, \"cause\")\n ? (value as { cause?: unknown }).cause\n : undefined;\n}\n\nfunction wrapHostCall(formatted: string, hostCallName: string): string {\n const lines = splitLines(formatted);\n const [firstLine = \"\", ...rest] = lines;\n\n return [`Host call ${hostCallName} failed: ${firstLine}`, ...rest].join(\"\\n\");\n}\n\nfunction formatSourceDiagnostic(\n source: string,\n error: InterpreterDiagnostic,\n options: { maxMessageLength?: number } = {}\n): string {\n const lines = splitLines(source);\n const excerpt = createExcerpt(lines, error.line);\n const lineNumberWidth = String(\n excerpt[excerpt.length - 1]?.number ?? Math.max(error.line, 1)\n ).length;\n const reportedLine =\n excerpt.find((line) => line.number === Math.max(error.line, 1)) ?? excerpt[excerpt.length - 1];\n const caretPadding = createCaretPadding(\n reportedLine?.content ?? \"\",\n error.column,\n reportedLine?.hasSource === true\n );\n\n return [\n `${error.kind}: ${error.filename}:${error.line}:${error.column}`,\n \"\",\n ...excerpt.map((line) => `${String(line.number).padStart(lineNumberWidth)} | ${line.content}`),\n `${\" \".repeat(lineNumberWidth)} | ${caretPadding}^`,\n \"\",\n truncate(error.message, options.maxMessageLength ?? DEFAULT_MAX_MESSAGE_LENGTH)\n ].join(\"\\n\");\n}\n\nfunction formatErrorSummary(error: ErrorLike, maxMessageLength: number): string {\n const name = typeof error.name === \"string\" && error.name !== \"\" ? error.name : \"Error\";\n const message = typeof error.message === \"string\" ? error.message : \"\";\n\n if (message === \"\") {\n return name;\n }\n\n return `${name}: ${truncate(message, maxMessageLength)}`;\n}\n\nfunction truncate(message: string, maxLength: number): string {\n if (message.length <= maxLength) {\n return message;\n }\n\n return `${message.slice(0, maxLength)}... [truncated ${message.length - maxLength} chars]`;\n}\n\nfunction describeThrownValue(value: unknown): string {\n if (typeof value === \"string\") {\n return JSON.stringify(value);\n }\n\n if (\n value === undefined ||\n value === null ||\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n typeof value === \"bigint\"\n ) {\n return String(value);\n }\n\n if (typeof value === \"symbol\" || typeof value === \"function\") {\n return safeString(value, \"[Unserializable thrown value]\");\n }\n\n return stringifyJsonish(value);\n}\n\nfunction stringifyJsonish(value: object): string {\n const seen = new WeakSet<object>();\n\n try {\n return JSON.stringify(value, (_key, nested) => {\n if (typeof nested === \"bigint\") {\n return String(nested);\n }\n\n if (!isObject(nested)) {\n return nested;\n }\n\n if (seen.has(nested)) {\n return \"[Circular]\";\n }\n\n seen.add(nested);\n return nested;\n });\n } catch {\n return safeString(value, \"[Unserializable thrown value]\");\n }\n}\n\nfunction safeString(value: unknown, fallback: string): string {\n try {\n return String(value);\n } catch {\n return fallback;\n }\n}\n\nfunction isInterpreterDiagnostic(value: unknown): value is InterpreterDiagnostic {\n return (\n isObject(value) &&\n typeof value.kind === \"string\" &&\n typeof value.filename === \"string\" &&\n typeof value.line === \"number\" &&\n typeof value.column === \"number\" &&\n typeof value.message === \"string\"\n );\n}\n\nfunction isParseDiagnostic(value: unknown): value is ParseDiagnostic {\n return (\n isInterpreterDiagnostic(value) &&\n value.kind === \"ParseError\" &&\n typeof (value as { excerpt?: unknown }).excerpt === \"string\" &&\n typeof (value as { caret?: unknown }).caret === \"string\"\n );\n}\n\nfunction isSpanDiagnostic(value: unknown): value is SpanDiagnostic {\n return (\n isObject(value) &&\n typeof value.message === \"string\" &&\n isObject(value.span) &&\n isObject(value.span.start) &&\n typeof value.span.start.line === \"number\" &&\n typeof value.span.start.column === \"number\"\n );\n}\n\ntype ErrorLike = {\n cause?: unknown;\n message?: unknown;\n name?: unknown;\n stack?: unknown;\n};\n\nfunction isErrorLike(value: unknown): value is ErrorLike {\n if (!isObject(value)) {\n return false;\n }\n\n return (\n value instanceof Error ||\n typeof value.name === \"string\" ||\n typeof value.message === \"string\" ||\n typeof value.stack === \"string\"\n );\n}\n\nfunction isObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null;\n}\n\nfunction createExcerpt(\n sourceLines: readonly string[],\n reportedLine: number\n): Array<{ number: number; content: string; hasSource: boolean }> {\n const safeLineNumber = Math.max(reportedLine, 1);\n\n if (safeLineNumber > sourceLines.length) {\n return [\n {\n number: safeLineNumber,\n content: \"\",\n hasSource: false\n }\n ];\n }\n\n const excerpt: Array<{ number: number; content: string; hasSource: boolean }> = [];\n const startLine = Math.max(1, safeLineNumber - 2);\n const endLine = Math.min(sourceLines.length, safeLineNumber + 1);\n\n for (let line = startLine; line <= endLine; line += 1) {\n excerpt.push({\n number: line,\n content: sourceLines[line - 1] ?? \"\",\n hasSource: true\n });\n }\n\n return excerpt;\n}\n\nfunction splitLines(source: string): string[] {\n return source.split(/\\r\\n|\\n|\\r/);\n}\n\nfunction createCaretPadding(line: string, column: number, hasSource: boolean): string {\n let padding = \"\";\n const maxColumn = hasSource\n ? Math.max(Math.min(column - 1, line.length), 0)\n : Math.max(column - 1, 0);\n\n for (const character of line.slice(0, maxColumn)) {\n padding += character === \"\\t\" ? \"\\t\" : \" \";\n }\n\n if (maxColumn > line.length) {\n padding += \" \".repeat(maxColumn - line.length);\n }\n\n return padding;\n}\n", "export interface ExtractBlockResult {\n endOffset: number;\n source: string;\n lineOffset: number;\n startOffset: number;\n ranges: readonly (readonly [number, number])[];\n}\n\nexport function extractBlock(markdown: string, startLine = 1): ExtractBlockResult {\n let index = 0;\n let line = startLine;\n const blocks: { start: number; end: number; line: number }[] = [];\n\n while (index < markdown.length) {\n const lineStart = index;\n const lineEnd = findLineEnd(markdown, index);\n const lineContent = markdown.slice(lineStart, lineEnd.index);\n const fence = readOpeningFence(lineContent);\n\n if (fence !== undefined) {\n const blockStart = lineEnd.index + lineEnd.lineBreakLength;\n const closingFence = findClosingFence(markdown, blockStart, fence);\n\n if (matchesScriptInfo(fence.info)) {\n if (!closingFence.found) {\n throw new Error(\n `Unclosed ${readInfoWord(fence.info)} fenced block opened at line ${line}.`\n );\n }\n\n blocks.push({ start: blockStart, end: closingFence.start, line });\n }\n\n const resumeIndex = findBlockResumeIndex(markdown, closingFence);\n line += countLineBreaks(markdown, index, resumeIndex);\n index = resumeIndex;\n continue;\n }\n\n if (lineEnd.lineBreakLength === 0) {\n break;\n }\n\n index = lineEnd.index + lineEnd.lineBreakLength;\n line += 1;\n }\n\n if (blocks.length === 0)\n return {\n endOffset: markdown.length,\n lineOffset: 1,\n source: markdown,\n startOffset: 0,\n ranges: [[0, markdown.length]]\n };\n\n const first = blocks[0];\n const parts: string[] = [];\n let cursor = first.start;\n for (const block of blocks) {\n let gap = \"\";\n for (let offset = cursor; offset < block.start; offset++) {\n const character = markdown[offset];\n gap += character === \"\\n\" || character === \"\\r\" ? character : \" \";\n }\n parts.push(gap, markdown.slice(block.start, block.end));\n cursor = block.end;\n }\n return {\n endOffset: cursor,\n lineOffset: first.line,\n source: parts.join(\"\"),\n startOffset: first.start,\n ranges: blocks.map((block) => [block.start, block.end])\n };\n}\n\ninterface Fence {\n indent: string;\n marker: string;\n markerCharacter: \"`\" | \"~\";\n info: string;\n}\n\nfunction readOpeningFence(line: string): Fence | undefined {\n const fenceStart = readFenceStart(line);\n if (fenceStart === undefined) {\n return undefined;\n }\n\n let markerEnd = fenceStart.indentLength;\n while (line[markerEnd] === fenceStart.markerCharacter) {\n markerEnd += 1;\n }\n\n const marker = line.slice(fenceStart.indentLength, markerEnd);\n if (marker.length < 3) {\n return undefined;\n }\n\n const info = line.slice(markerEnd).trimStart();\n\n return {\n indent: line.slice(0, fenceStart.indentLength),\n marker,\n markerCharacter: fenceStart.markerCharacter,\n info\n };\n}\n\nfunction readFenceStart(\n line: string\n): { indentLength: number; markerCharacter: \"`\" | \"~\" } | undefined {\n let index = 0;\n\n while (index < line.length && line[index] === \" \") {\n index += 1;\n }\n\n const markerCharacter = line[index];\n return markerCharacter === \"`\" || markerCharacter === \"~\"\n ? {\n indentLength: index,\n markerCharacter\n }\n : undefined;\n}\n\nfunction matchesScriptInfo(info: string): boolean {\n const infoWord = readInfoWord(info);\n return infoWord === \"js\" || infoWord === \"javascript\" || infoWord === \"ajs\";\n}\n\nfunction readInfoWord(info: string): string {\n let index = 0;\n\n while (index < info.length && !isWhitespace(info[index])) {\n index += 1;\n }\n\n return info.slice(0, index);\n}\n\nfunction isWhitespace(character: string): boolean {\n return character === \" \" || character === \"\\t\";\n}\n\ninterface ClosingFence {\n found: boolean;\n start: number;\n}\n\nfunction findBlockResumeIndex(markdown: string, closingFence: ClosingFence): number {\n if (!closingFence.found || closingFence.start >= markdown.length) {\n return markdown.length;\n }\n\n const closingLineEnd = findLineEnd(markdown, closingFence.start);\n return closingLineEnd.index + closingLineEnd.lineBreakLength;\n}\n\nexport function countLineBreaks(markdown: string, start = 0, end = markdown.length): number {\n let count = 0;\n let index = start;\n\n while (index < end) {\n const character = markdown[index];\n if (character === \"\\n\") {\n count += 1;\n index += 1;\n continue;\n }\n\n if (character === \"\\r\") {\n count += 1;\n index += markdown[index + 1] === \"\\n\" ? 2 : 1;\n continue;\n }\n\n index += 1;\n }\n\n return count;\n}\n\nfunction findClosingFence(markdown: string, searchStart: number, fence: Fence): ClosingFence {\n let lineStart = searchStart;\n\n while (lineStart <= markdown.length) {\n const lineEnd = findLineEnd(markdown, lineStart);\n const lineContent = markdown.slice(lineStart, lineEnd.index);\n if (isClosingFence(lineContent, fence)) {\n return {\n found: true,\n start: lineStart\n };\n }\n\n if (lineEnd.lineBreakLength === 0) {\n return {\n found: false,\n start: markdown.length\n };\n }\n\n lineStart = lineEnd.index + lineEnd.lineBreakLength;\n }\n\n return {\n found: false,\n start: markdown.length\n };\n}\n\nfunction isClosingFence(line: string, fence: Fence): boolean {\n const fenceStart = readFenceStart(line);\n if (fenceStart === undefined || fenceStart.markerCharacter !== fence.markerCharacter) {\n return false;\n }\n\n const { indentLength } = fenceStart;\n if (line.slice(0, indentLength) !== fence.indent) {\n return false;\n }\n\n let markerEnd = indentLength;\n while (line[markerEnd] === fence.markerCharacter) {\n markerEnd += 1;\n }\n\n const closingMarker = line.slice(indentLength, markerEnd);\n if (closingMarker.length < fence.marker.length) {\n return false;\n }\n\n for (let index = markerEnd; index < line.length; index += 1) {\n if (line[index] !== \" \") {\n return false;\n }\n }\n\n return true;\n}\n\ninterface LineEnd {\n index: number;\n lineBreakLength: 0 | 1 | 2;\n}\n\nfunction findLineEnd(markdown: string, start: number): LineEnd {\n let index = start;\n\n while (index < markdown.length) {\n const character = markdown[index];\n if (character === \"\\n\") {\n return {\n index,\n lineBreakLength: 1\n };\n }\n\n if (character === \"\\r\") {\n if (markdown[index + 1] === \"\\n\") {\n return {\n index,\n lineBreakLength: 2\n };\n }\n\n return {\n index,\n lineBreakLength: 1\n };\n }\n\n index += 1;\n }\n\n return {\n index: markdown.length,\n lineBreakLength: 0\n };\n}\n", "export type FrontmatterBlock = {\n raw: string;\n body: string;\n rawStart: number;\n rawEnd: number;\n};\n\nexport type SplitFrontmatterResult = FrontmatterBlock | { body: string };\n\nexport type InspectFrontmatterResult =\n | (FrontmatterBlock & { kind: \"frontmatter\" })\n | {\n kind: \"missing-closing-fence\";\n raw: string;\n rawStart: number;\n rawEnd: number;\n body: \"\";\n message: string;\n position: number;\n }\n | { kind: \"body\"; body: string };\n\nconst MISSING_END_DELIMITER_MESSAGE = \"Missing YAML frontmatter end delimiter (---).\";\n\ntype LineEnd = {\n index: number;\n lineBreakLength: 0 | 1 | 2;\n};\n\nexport function splitFrontmatterBlock(source: string): SplitFrontmatterResult {\n const inspected = inspectFrontmatterBlock(source);\n\n if (inspected.kind === \"body\") {\n return { body: inspected.body };\n }\n\n if (inspected.kind === \"missing-closing-fence\") {\n throw new Error(inspected.message);\n }\n\n return {\n raw: inspected.raw,\n rawStart: inspected.rawStart,\n rawEnd: inspected.rawEnd,\n body: inspected.body\n };\n}\n\nexport function inspectFrontmatterBlock(source: string): InspectFrontmatterResult {\n const content = source.startsWith(\"\\uFEFF\") ? source.slice(1) : source;\n const sourceOffset = source.length - content.length;\n const opening = readOpeningFence(content);\n\n if (opening === undefined) {\n return { kind: \"body\", body: source };\n }\n\n const closing = findClosingFence(content, opening.next);\n\n if (closing === undefined) {\n return {\n kind: \"missing-closing-fence\",\n raw: content.slice(opening.next),\n rawStart: sourceOffset + opening.next,\n rawEnd: source.length,\n body: \"\",\n message: MISSING_END_DELIMITER_MESSAGE,\n position: source.length\n };\n }\n\n return {\n kind: \"frontmatter\",\n raw: content.slice(opening.next, closing.index),\n rawStart: sourceOffset + opening.next,\n rawEnd: sourceOffset + closing.index,\n body: content.slice(closing.end + closing.lineBreakLength)\n };\n}\n\nfunction readOpeningFence(source: string): { next: number } | undefined {\n if (!source.startsWith(\"---\")) {\n return undefined;\n }\n\n const lineEnd = findLineEnd(source, 0);\n\n if (lineEnd.lineBreakLength === 0 || !isFenceLine(source.slice(0, lineEnd.index))) {\n return undefined;\n }\n\n return { next: lineEnd.index + lineEnd.lineBreakLength };\n}\n\nfunction findClosingFence(\n source: string,\n start: number\n): { index: number; end: number; lineBreakLength: 0 | 1 | 2 } | undefined {\n let lineStart = start;\n\n while (lineStart <= source.length) {\n const lineEnd = findLineEnd(source, lineStart);\n\n if (isFenceLine(source.slice(lineStart, lineEnd.index))) {\n return {\n index: lineStart,\n end: lineEnd.index,\n lineBreakLength: lineEnd.lineBreakLength\n };\n }\n\n if (lineEnd.lineBreakLength === 0) {\n break;\n }\n\n lineStart = lineEnd.index + lineEnd.lineBreakLength;\n }\n\n return undefined;\n}\n\nfunction isFenceLine(line: string): boolean {\n if (!line.startsWith(\"---\")) {\n return false;\n }\n\n for (let index = 3; index < line.length; index += 1) {\n const character = line[index];\n\n if (character !== \" \" && character !== \"\\t\") {\n return false;\n }\n }\n\n return true;\n}\n\nfunction findLineEnd(source: string, start: number): LineEnd {\n let index = start;\n\n while (index < source.length) {\n const character = source[index];\n\n if (character === \"\\n\") {\n return { index, lineBreakLength: 1 };\n }\n\n if (character === \"\\r\") {\n return {\n index,\n lineBreakLength: source[index + 1] === \"\\n\" ? 2 : 1\n };\n }\n\n index += 1;\n }\n\n return { index: source.length, lineBreakLength: 0 };\n}\n", "import { LineCounter, parse, parseDocument } from \"yaml\";\nimport { inspectFrontmatterBlock, splitFrontmatterBlock } from \"./fences.js\";\n\nexport interface ParsedFrontmatter {\n frontmatter: Record<string, unknown>;\n body: string;\n}\n\nexport interface ParsedFrontmatterDocument extends ParsedFrontmatter {\n errors: readonly { message: string; pos?: [number, number] }[];\n lineCounter: LineCounter;\n}\n\nexport interface ParseFrontmatterOptions {\n uniqueKeys?: boolean;\n}\n\nexport class FrontmatterParseError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"FrontmatterParseError\";\n }\n}\n\nexport class FrontmatterKindError extends FrontmatterParseError {\n readonly expectedKind: string;\n readonly foundKind: string;\n\n constructor(message: string, kinds: { expected: string; found: string }) {\n super(message);\n this.name = \"FrontmatterKindError\";\n this.expectedKind = kinds.expected;\n this.foundKind = kinds.found;\n }\n}\n\nexport function isFrontmatterKindError(error: unknown): error is FrontmatterKindError {\n return (\n error instanceof Error &&\n error.name === \"FrontmatterKindError\" &&\n typeof (error as { expectedKind?: unknown }).expectedKind === \"string\" &&\n typeof (error as { foundKind?: unknown }).foundKind === \"string\"\n );\n}\n\nexport function parseFrontmatter(\n source: string,\n options: ParseFrontmatterOptions = {}\n): ParsedFrontmatter {\n const split = splitFrontmatter(source);\n\n if (split.raw === undefined) {\n return {\n frontmatter: {},\n body: split.body\n };\n }\n\n return {\n frontmatter: parseYamlFrontmatter(split.raw, options),\n body: split.body\n };\n}\n\nexport function parseFrontmatterDocument(\n source: string,\n options: ParseFrontmatterOptions = {}\n): ParsedFrontmatterDocument {\n const split = inspectFrontmatterBlock(source);\n const lineCounter = createSourceLineCounter(source);\n\n if (split.kind === \"body\") {\n return {\n frontmatter: {},\n body: split.body,\n errors: [],\n lineCounter\n };\n }\n\n if (split.kind === \"missing-closing-fence\") {\n return {\n frontmatter: {},\n body: split.body,\n errors: [{ message: split.message, pos: [split.position, split.position] }],\n lineCounter\n };\n }\n\n const yamlLineCounter = new LineCounter();\n const normalizedYaml = normalizeYamlLineEndings(split.raw);\n const document = parseDocument(normalizedYaml, {\n lineCounter: yamlLineCounter,\n prettyErrors: false,\n uniqueKeys: options.uniqueKeys ?? false\n });\n const errors = document.errors.map((error) => ({\n message: error.message,\n ...(error.pos === undefined\n ? {}\n : { pos: translateYamlErrorPosition(error.pos as [number, number], split) })\n }));\n\n if (errors.length > 0) {\n return {\n frontmatter: {},\n body: split.body,\n errors,\n lineCounter\n };\n }\n\n try {\n return {\n frontmatter: normalizeYamlFrontmatter(document.toJSON()),\n body: split.body,\n errors,\n lineCounter\n };\n } catch (error) {\n if (error instanceof FrontmatterParseError) {\n return {\n frontmatter: {},\n body: split.body,\n errors: [{ message: error.message }],\n lineCounter\n };\n }\n\n throw error;\n }\n}\n\nfunction createSourceLineCounter(source: string): LineCounter {\n const lineCounter = new LineCounter();\n lineCounter.addNewLine(0);\n\n for (let index = 0; index < source.length; index += 1) {\n const character = source[index];\n\n if (character === \"\\n\") {\n lineCounter.addNewLine(index + 1);\n continue;\n }\n\n if (character === \"\\r\") {\n lineCounter.addNewLine(index + (source[index + 1] === \"\\n\" ? 2 : 1));\n if (source[index + 1] === \"\\n\") {\n index += 1;\n }\n }\n }\n\n return lineCounter;\n}\n\nfunction translateYamlErrorPosition(\n pos: [number, number],\n split: { raw: string; rawStart: number }\n): [number, number] {\n return pos.map((offset) => split.rawStart + normalizeYamlErrorOffset(split.raw, offset)) as [\n number,\n number\n ];\n}\n\nfunction normalizeYamlErrorOffset(raw: string, offset: number): number {\n if (offset >= raw.length && endsWithLineBreak(raw)) {\n return findPreviousLineStart(raw, raw.length);\n }\n\n return offset;\n}\n\nfunction endsWithLineBreak(value: string): boolean {\n return value.endsWith(\"\\n\") || value.endsWith(\"\\r\");\n}\n\nfunction findPreviousLineStart(value: string, end: number): number {\n let index = end - 1;\n\n if (value[index] === \"\\n\") {\n index -= 1;\n }\n\n if (value[index] === \"\\r\") {\n index -= 1;\n }\n\n while (index >= 0) {\n const character = value[index];\n\n if (character === \"\\n\" || character === \"\\r\") {\n return index + 1;\n }\n\n index -= 1;\n }\n\n return 0;\n}\n\nfunction splitFrontmatter(source: string): { raw?: string; body: string } {\n try {\n return splitFrontmatterBlock(source);\n } catch (error) {\n if (error instanceof Error) {\n throw new FrontmatterParseError(error.message);\n }\n\n throw error;\n }\n}\n\nfunction parseYamlFrontmatter(\n yamlBlock: string,\n options: ParseFrontmatterOptions\n): Record<string, unknown> {\n let parsed: unknown;\n\n try {\n parsed = parse(normalizeYamlLineEndings(yamlBlock), {\n uniqueKeys: options.uniqueKeys ?? false\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unknown YAML parse error\";\n throw new FrontmatterParseError(`Invalid YAML frontmatter: ${message}`);\n }\n\n return normalizeYamlFrontmatter(parsed);\n}\n\nfunction normalizeYamlLineEndings(value: string): string {\n if (!value.includes(\"\\r\")) {\n return value;\n }\n\n let normalized = \"\";\n\n for (let index = 0; index < value.length; index += 1) {\n const character = value[index];\n\n if (character !== \"\\r\") {\n normalized += character;\n continue;\n }\n\n if (value[index + 1] === \"\\n\") {\n normalized += \"\\r\\n\";\n index += 1;\n continue;\n }\n\n normalized += \"\\n\";\n }\n\n return normalized;\n}\n\nfunction normalizeYamlFrontmatter(value: unknown): Record<string, unknown> {\n if (value === null || value === undefined) {\n return {};\n }\n\n if (!isPlainRecord(value)) {\n throw new FrontmatterParseError(\"YAML frontmatter must parse to an object.\");\n }\n\n return normalizeYamlValue(value) as Record<string, unknown>;\n}\n\nfunction normalizeYamlValue(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map((item) => normalizeYamlValue(item));\n }\n\n if (!isPlainRecord(value)) {\n return value;\n }\n\n const normalized: Record<string, unknown> = {};\n\n for (const [key, entryValue] of Object.entries(value)) {\n Object.defineProperty(normalized, key, {\n configurable: true,\n enumerable: true,\n value: normalizeYamlValue(entryValue),\n writable: true\n });\n }\n\n return normalized;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n if (!isRecord(value)) {\n return false;\n }\n\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n", "import { stringify } from \"yaml\";\nimport { FrontmatterParseError } from \"./parse.js\";\n\nexport function stringifyFrontmatter(frontmatter: Record<string, unknown>, body: string): string {\n try {\n assertFrontmatterRoot(frontmatter);\n assertAcyclic(frontmatter);\n return `---\\n${stringify(frontmatter, { aliasDuplicateObjects: false }).trimEnd()}\\n---\\n${body}`;\n } catch (error) {\n if (error instanceof FrontmatterParseError) {\n throw error;\n }\n\n const message = error instanceof Error ? error.message : \"Unknown YAML stringify error\";\n throw new FrontmatterParseError(`Invalid YAML frontmatter: ${message}`);\n }\n}\n\nfunction assertFrontmatterRoot(value: unknown): asserts value is Record<string, unknown> {\n if (!isPlainRecord(value)) {\n throw new FrontmatterParseError(\"YAML frontmatter must parse to an object.\");\n }\n}\n\nfunction assertAcyclic(value: unknown, seen: WeakSet<object> = new WeakSet()): void {\n if (typeof value !== \"object\" || value === null) {\n return;\n }\n\n if (seen.has(value)) {\n throw new FrontmatterParseError(\"Cannot stringify cyclic frontmatter.\");\n }\n\n seen.add(value);\n\n if (Array.isArray(value)) {\n for (const item of value) {\n assertAcyclic(item, seen);\n }\n } else {\n for (const item of Object.values(value)) {\n assertAcyclic(item, seen);\n }\n }\n\n seen.delete(value);\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return false;\n }\n\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n", "import { FrontmatterParseError, parseFrontmatterDocument } from \"@poe-code/frontmatter\";\n\nexport interface SplitFrontmatterResult {\n frontmatter: Record<string, unknown>;\n body: string;\n}\n\nexport function splitFrontmatter(markdown: string): SplitFrontmatterResult {\n try {\n const parsed = parseFrontmatterDocument(markdown);\n\n if (parsed.errors.length > 0) {\n const firstError = parsed.errors[0];\n const line =\n firstError?.pos === undefined ? 2 : parsed.lineCounter.linePos(firstError.pos[0]).line;\n const message = firstError?.message ?? \"unknown YAML parse error\";\n throw toSafeJSDiagnosticError(line, message);\n }\n\n return {\n frontmatter: parsed.frontmatter,\n body: parsed.body\n };\n } catch (error) {\n if (error instanceof FrontmatterParseError) {\n throw toSafeJSFrontmatterError(markdown, error);\n }\n\n throw error;\n }\n}\n\nfunction toSafeJSDiagnosticError(line: number, message: string): Error {\n if (message === \"Missing YAML frontmatter end delimiter (---).\") {\n return new Error(`Invalid frontmatter at line ${line}: missing closing delimiter (---).`);\n }\n\n if (message === \"YAML frontmatter must parse to an object.\") {\n return new Error(`Invalid frontmatter at line ${line}: expected a YAML mapping.`);\n }\n\n return new Error(`Invalid YAML frontmatter at line ${line}: ${message}`);\n}\n\nfunction toSafeJSFrontmatterError(markdown: string, error: FrontmatterParseError): Error {\n if (error.message === \"Missing YAML frontmatter end delimiter (---).\") {\n return new Error(\n `Invalid frontmatter at line ${countLines(stripByteOrderMark(markdown))}: missing closing delimiter (---).`\n );\n }\n\n if (error.message === \"YAML frontmatter must parse to an object.\") {\n return new Error(\"Invalid frontmatter at line 2: expected a YAML mapping.\");\n }\n\n if (error.message.startsWith(\"Invalid YAML frontmatter: \")) {\n return new Error(`Invalid YAML frontmatter at line 2: ${error.message.slice(26)}`);\n }\n\n return error;\n}\n\nfunction stripByteOrderMark(value: string): string {\n return value.startsWith(\"\\uFEFF\") ? value.slice(1) : value;\n}\n\nfunction countLines(value: string): number {\n let count = 1;\n\n for (const character of value) {\n if (character === \"\\n\") {\n count += 1;\n }\n }\n\n return count;\n}\n", "import type { CallerInjectedBinding } from \"../interp/host-bridge.js\";\nimport { isSandboxClosure } from \"../interp/values.js\";\nimport type { ModuleExports, ModuleRegistry } from \"../modules/registry.js\";\nimport type { LintModuleExport, LintModuleExports, Modules } from \"./rules/module-registry.js\";\n\nconst AsyncFunction = (async () => undefined).constructor;\n\nexport function createLintModulesFromRuntimeRegistry(modules: ModuleRegistry): Modules {\n const entries = modules instanceof Map ? [...modules.entries()] : Object.entries(modules);\n\n return new Map(\n entries.map(([moduleName, moduleExports]) => [\n moduleName,\n {\n exports: createLintModuleExports(moduleExports)\n }\n ])\n );\n}\n\nfunction createLintModuleExports(moduleExports: ModuleExports): LintModuleExports {\n const entries =\n moduleExports instanceof Map ? [...moduleExports.entries()] : Object.entries(moduleExports);\n\n return new Map(\n entries\n .filter(([exportName]) => exportName.length > 0)\n .map(([exportName, value]) => [exportName, createLintModuleExport(value)] as const)\n .sort(([left], [right]) => left.localeCompare(right))\n );\n}\n\nfunction createLintModuleExport(value: CallerInjectedBinding): LintModuleExport {\n return isAsyncRuntimeExport(value) ? { async: true } : {};\n}\n\nfunction isAsyncRuntimeExport(value: CallerInjectedBinding): boolean {\n if (isSandboxClosure(value)) {\n return value.async === true;\n }\n\n return typeof value === \"function\" && value.constructor === AsyncFunction;\n}\n", "import { AsyncLocalStorage } from \"node:async_hooks\";\n\nimport { supportsSpawnMode } from \"@poe-code/agent-spawn/configs\";\nimport {\n createSpawnParallel,\n SpawnParallelError,\n type SpawnParallelOptions\n} from \"@poe-code/agent-spawn/parallel\";\nimport { DEFAULT_SPAWN_MODE, type SpawnUsage } from \"@poe-code/agent-spawn/types\";\nimport { hostErrorData } from \"../error/shape.js\";\nimport {\n bindOtelSpan,\n activateOtelSpan,\n getActiveOtelSink,\n safeAddEvent,\n safeEndSpan,\n safeRecordException,\n safeStartSpan,\n type OtelSink\n} from \"../observability/otel.js\";\n\nexport type AgentSpawnMode = \"read\" | \"edit\" | \"auto\" | \"yolo\";\n\nexport type AgentModuleMcpServer = {\n command: string;\n args?: string[];\n env?: Record<string, string>;\n timeout?: number;\n};\n\nexport type AgentModuleMcpConfig = Record<string, AgentModuleMcpServer>;\n\nexport type AgentModuleDefinition =\n | string\n | {\n agent: string;\n prompt?: string;\n model?: string;\n mode?: AgentSpawnMode;\n cwd?: string;\n mcp?: AgentModuleMcpConfig;\n };\n\nexport type AgentModuleSpawnOptions = {\n prompt: string;\n check?: boolean;\n label?: string;\n mcp?: AgentModuleMcpConfig;\n model?: string;\n mode?: AgentSpawnMode;\n cwd?: string;\n otelSink?: OtelSink;\n timeoutMs?: number;\n signal?: AbortSignal;\n};\n\nexport type SpawnAgentInput = Omit<AgentModuleSpawnOptions, \"label\" | \"check\"> & {\n agent: string;\n};\n\ntype ResolvedSpawnAgentInput = SpawnAgentInput & { label?: string; check: boolean };\n\nexport type SpawnAgentResult = {\n exitCode: number;\n stdout: string;\n stderr: string;\n summary: string;\n durationMs: number;\n usage?: SpawnUsage;\n};\n\nexport type SpawnAgent = (input: SpawnAgentInput) => Promise<SpawnAgentResult>;\n\nexport class AgentSpawnError extends Error {\n readonly result: SpawnAgentResult;\n\n constructor(result: SpawnAgentResult) {\n super(createSpawnFailureMessage(result));\n this.name = \"AgentSpawnError\";\n this.result = result;\n hostErrorData.set(this, { result });\n }\n}\n\nexport type AgentModuleOptions = {\n defaultRetry?: AgentModuleRetryOptions;\n onEvent?: (event: AgentSpawnEvent) => void | Promise<void>;\n otelSink?: OtelSink;\n};\n\nexport type AgentSpawnEvent =\n | {\n type: \"spawn.started\";\n spawnId: number;\n agent: string;\n task: string;\n attempt: number;\n maxAttempts: number;\n }\n | {\n type: \"spawn.retry\";\n spawnId: number;\n agent: string;\n task: string;\n attempt: number;\n maxAttempts: number;\n delayMs: number;\n error: string;\n }\n | {\n type: \"spawn.succeeded\";\n spawnId: number;\n agent: string;\n task: string;\n attempt: number;\n maxAttempts: number;\n durationMs: number;\n }\n | {\n type: \"spawn.failed\";\n checked: boolean;\n spawnId: number;\n agent: string;\n task: string;\n attempt: number;\n maxAttempts: number;\n durationMs: number;\n error: string;\n }\n | {\n type: \"spawn.cancelled\";\n spawnId: number;\n agent: string;\n task: string;\n attempt: number;\n maxAttempts: number;\n durationMs: number;\n reason: string;\n };\n\nexport type SpawnUsageTotal = {\n inputTokens: number;\n outputTokens: number;\n cachedTokens: number;\n costUsd?: number;\n spawnCount: number;\n attemptCount?: number;\n};\n\nexport type SpawnUsageAccumulator = {\n beginAttempt?(): void;\n beginSpawn?(): void;\n record(usage: SpawnUsage | undefined): void;\n reset(): void;\n snapshot(): SpawnUsageTotal;\n};\n\nconst activeUsageAccumulator = new AsyncLocalStorage<SpawnUsageAccumulator>();\n\nexport function createSpawnUsageAccumulator(): SpawnUsageAccumulator {\n let inputTokens = 0;\n let outputTokens = 0;\n let cachedTokens = 0;\n let costUsd: number | undefined;\n let spawnCount = 0;\n let attemptCount = 0;\n\n return {\n beginAttempt() {\n attemptCount += 1;\n },\n beginSpawn() {\n spawnCount += 1;\n },\n record(usage) {\n if (usage === undefined) {\n return;\n }\n\n inputTokens += usage.inputTokens;\n outputTokens += usage.outputTokens;\n cachedTokens += usage.cachedTokens ?? 0;\n\n if (usage.costUsd !== undefined) {\n costUsd = (costUsd ?? 0) + usage.costUsd;\n }\n },\n reset() {\n inputTokens = 0;\n outputTokens = 0;\n cachedTokens = 0;\n costUsd = undefined;\n spawnCount = 0;\n attemptCount = 0;\n },\n snapshot() {\n return {\n inputTokens,\n outputTokens,\n cachedTokens,\n ...(costUsd === undefined ? {} : { costUsd }),\n spawnCount,\n ...(attemptCount === spawnCount ? {} : { attemptCount })\n };\n }\n };\n}\n\nexport async function runWithSpawnUsageAccumulator<TResult>(\n accumulator: SpawnUsageAccumulator,\n operation: () => Promise<TResult>\n): Promise<TResult> {\n accumulator.reset();\n return await activeUsageAccumulator.run(accumulator, operation);\n}\n\nexport type AgentModuleRetryOptions = {\n maxAttempts: number;\n backoffMs: number;\n isErrorRetryable?: (error: unknown) => boolean;\n isRetryable?: (result: SpawnAgentResult) => boolean;\n};\n\nexport type AgentModuleParallelCall =\n | readonly [agentDef: AgentModuleDefinition, options: AgentModuleSpawnOptions]\n | ((signal?: AbortSignal) => {\n events: AsyncIterable<never>;\n result: Promise<SpawnAgentResult>;\n });\n\ntype AgentModuleSpawn = {\n (agentDef: AgentModuleDefinition, options: AgentModuleSpawnOptions): Promise<SpawnAgentResult>;\n retry(\n agentDef: AgentModuleDefinition,\n options: AgentModuleSpawnOptions,\n retryOptions: AgentModuleRetryOptions\n ): Promise<SpawnAgentResult>;\n parallel(\n calls: AgentModuleParallelCall[],\n options?: SpawnParallelOptions\n ): Promise<SpawnAgentResult[]>;\n};\n\nexport function makeAgentModule(\n spawnAgent: SpawnAgent,\n moduleOptions: AgentModuleOptions = {}\n): {\n spawn: AgentModuleSpawn;\n} {\n const defaultRetry =\n moduleOptions.defaultRetry === undefined\n ? undefined\n : normalizeRetryOptions(moduleOptions.defaultRetry);\n let nextSpawnId = 1;\n\n const spawnOnce = async (\n agentDef: AgentModuleDefinition,\n options: AgentModuleSpawnOptions\n ): Promise<SpawnAgentResult> => {\n const input = resolveSpawnInput(agentDef, options);\n const spawnId = nextSpawnId;\n nextSpawnId += 1;\n recordActiveSpawnStart();\n return runObservedSpawn(moduleOptions.otelSink, input, async () => {\n return defaultRetry === undefined\n ? runSpawnAttempt(spawnAgent, input, moduleOptions.onEvent, spawnId)\n : runSpawnRetry(spawnAgent, input, defaultRetry, moduleOptions.onEvent, spawnId);\n });\n };\n\n return {\n spawn: Object.assign(spawnOnce, {\n async retry(\n agentDef: AgentModuleDefinition,\n options: AgentModuleSpawnOptions,\n retryOptions: AgentModuleRetryOptions\n ) {\n const input = resolveSpawnInput(agentDef, options);\n const normalizedRetry = normalizeRetryOptions(retryOptions);\n const spawnId = nextSpawnId;\n nextSpawnId += 1;\n recordActiveSpawnStart();\n return await runObservedSpawn(moduleOptions.otelSink, input, () =>\n runSpawnRetry(\n spawnAgent,\n input,\n normalizedRetry,\n moduleOptions.onEvent,\n spawnId\n )\n );\n },\n async parallel(calls: AgentModuleParallelCall[], options: SpawnParallelOptions = {}) {\n const check =\n readOptionalBoolean(getOwnProperty(options, \"check\"), \"Agent parallel options check\") ??\n false;\n const parallel = createSpawnParallel<\n AgentModuleDefinition,\n AgentModuleSpawnOptions,\n SpawnAgentResult\n >((agentDef, spawnOptions) => ({\n events: (async function* () {})(),\n result: (() => {\n const input = resolveSpawnInput(agentDef, spawnOptions);\n const spawnId = nextSpawnId;\n nextSpawnId += 1;\n recordActiveSpawnStart();\n return runObservedSpawn(moduleOptions.otelSink, input, () =>\n runSpawnRetry(\n spawnAgent,\n input,\n defaultRetry ?? oneAttemptRetryOptions,\n (event) =>\n moduleOptions.onEvent?.(\n event.type === \"spawn.failed\"\n ? { ...event, checked: event.checked || check }\n : event\n ),\n spawnId\n )\n );\n })()\n }));\n try {\n return await parallel(calls, { ...options, check });\n } catch (error) {\n if (error instanceof SpawnParallelError) {\n hostErrorData.set(error, {\n index: error.index,\n result: error.result,\n results: error.results\n });\n }\n throw error;\n }\n }\n })\n };\n}\n\nasync function runSpawnAttempt(\n spawnAgent: SpawnAgent,\n input: ResolvedSpawnAgentInput,\n onEvent: ((event: AgentSpawnEvent) => void | Promise<void>) | undefined,\n spawnId: number\n): Promise<SpawnAgentResult> {\n const task = resolveTaskLabel(input);\n const startedAt = Date.now();\n try {\n throwIfAborted(input.signal);\n } catch (error) {\n emitSpawnCancelled(onEvent, spawnId, input.agent, task, 1, 1, Date.now() - startedAt, error);\n throw error;\n }\n emitSpawnEvent(onEvent, {\n type: \"spawn.started\",\n spawnId,\n agent: input.agent,\n task,\n attempt: 1,\n maxAttempts: 1\n });\n\n try {\n recordActiveSpawnAttempt();\n const result = validateSpawnResult(await spawnAgent(toProviderSpawnInput(input)));\n throwIfAborted(input.signal);\n recordActiveSpawnUsage(result.usage);\n\n if (result.exitCode !== 0) {\n const error = new AgentSpawnError(result);\n if (input.check) {\n throw error;\n }\n emitFinalSpawnFailure(\n onEvent,\n spawnId,\n input.agent,\n task,\n 1,\n 1,\n result.durationMs,\n error,\n false\n );\n return result;\n }\n\n emitSpawnEvent(onEvent, {\n type: \"spawn.succeeded\",\n spawnId,\n agent: input.agent,\n task,\n attempt: 1,\n maxAttempts: 1,\n durationMs: result.durationMs\n });\n return result;\n } catch (error) {\n if (isAbortError(error, input.signal)) {\n const reason = input.signal?.aborted ? readAbortReason(input.signal) : error;\n emitSpawnCancelled(onEvent, spawnId, input.agent, task, 1, 1, Date.now() - startedAt, reason);\n throw reason;\n }\n emitSpawnEvent(onEvent, {\n type: \"spawn.failed\",\n checked: true,\n spawnId,\n agent: input.agent,\n task,\n attempt: 1,\n maxAttempts: 1,\n durationMs: Date.now() - startedAt,\n error: formatSpawnError(error)\n });\n throw error;\n }\n}\n\nfunction runObservedSpawn(\n moduleSink: OtelSink | undefined,\n input: ResolvedSpawnAgentInput,\n operation: () => Promise<SpawnAgentResult>\n): Promise<SpawnAgentResult> {\n const otelSink = input.otelSink ?? moduleSink ?? getActiveOtelSink();\n const cwd = input.cwd ?? readCurrentWorkingDirectory();\n const span = safeStartSpan(otelSink, \"agent.spawn\", {\n agent: input.agent,\n mode: input.mode ?? DEFAULT_SPAWN_MODE,\n cwd\n });\n const deactivateSpan = activateOtelSpan(span);\n safeAddEvent(span, \"prompt\", { prompt: input.prompt });\n\n const promise = (async () => {\n try {\n const result = await operation();\n safeAddEvent(span, \"summary\", { summary: result.summary });\n safeAddEvent(span, \"exit\", {\n exitCode: result.exitCode,\n durationMs: result.durationMs\n });\n return result;\n } catch (error) {\n safeRecordException(otelSink, span, error);\n throw error;\n } finally {\n deactivateSpan();\n safeEndSpan(span);\n }\n })();\n\n bindOtelSpan(promise, span);\n return promise;\n}\n\nfunction readCurrentWorkingDirectory(): string {\n try {\n return process.cwd();\n } catch (error) {\n throw new Error(`Unable to resolve current working directory: ${formatSpawnError(error)}`);\n }\n}\n\nasync function runSpawnRetry(\n spawnAgent: SpawnAgent,\n input: ResolvedSpawnAgentInput,\n retryOptions: Required<AgentModuleRetryOptions>,\n onEvent: ((event: AgentSpawnEvent) => void | Promise<void>) | undefined,\n spawnId: number\n): Promise<SpawnAgentResult> {\n const task = resolveTaskLabel(input);\n const startedAt = Date.now();\n for (let attempt = 1; attempt <= retryOptions.maxAttempts; attempt += 1) {\n try {\n throwIfAborted(input.signal);\n } catch (error) {\n emitSpawnCancelled(\n onEvent,\n spawnId,\n input.agent,\n task,\n attempt,\n retryOptions.maxAttempts,\n Date.now() - startedAt,\n error\n );\n throw error;\n }\n emitSpawnEvent(onEvent, {\n type: \"spawn.started\",\n spawnId,\n agent: input.agent,\n task,\n attempt,\n maxAttempts: retryOptions.maxAttempts\n });\n\n let result: SpawnAgentResult;\n try {\n recordActiveSpawnAttempt();\n result = validateSpawnResult(await spawnAgent(toProviderSpawnInput(input)));\n throwIfAborted(input.signal);\n } catch (error) {\n if (isAbortError(error, input.signal)) {\n const reason = input.signal?.aborted ? readAbortReason(input.signal) : error;\n emitSpawnCancelled(\n onEvent,\n spawnId,\n input.agent,\n task,\n attempt,\n retryOptions.maxAttempts,\n Date.now() - startedAt,\n reason\n );\n throw reason;\n }\n\n if (attempt >= retryOptions.maxAttempts) {\n emitFinalSpawnFailure(\n onEvent,\n spawnId,\n input.agent,\n task,\n attempt,\n retryOptions.maxAttempts,\n Date.now() - startedAt,\n error\n );\n throw error;\n }\n\n let retryable: boolean;\n try {\n retryable = retryOptions.isErrorRetryable(error);\n } catch (classifierError) {\n emitFinalSpawnFailure(\n onEvent,\n spawnId,\n input.agent,\n task,\n attempt,\n retryOptions.maxAttempts,\n Date.now() - startedAt,\n classifierError\n );\n throw classifierError;\n }\n\n if (!retryable) {\n emitFinalSpawnFailure(\n onEvent,\n spawnId,\n input.agent,\n task,\n attempt,\n retryOptions.maxAttempts,\n Date.now() - startedAt,\n error\n );\n throw error;\n }\n\n try {\n await retryOrThrow(\n error,\n input,\n retryOptions,\n onEvent,\n spawnId,\n task,\n attempt,\n Date.now() - startedAt\n );\n } catch (retryError) {\n if (isAbortError(retryError, input.signal)) {\n emitSpawnCancelled(\n onEvent,\n spawnId,\n input.agent,\n task,\n attempt,\n retryOptions.maxAttempts,\n Date.now() - startedAt,\n retryError\n );\n }\n throw retryError;\n }\n continue;\n }\n\n recordActiveSpawnUsage(result.usage);\n if (result.exitCode === 0) {\n emitSpawnEvent(onEvent, {\n type: \"spawn.succeeded\",\n spawnId,\n agent: input.agent,\n task,\n attempt,\n maxAttempts: retryOptions.maxAttempts,\n durationMs: Date.now() - startedAt\n });\n return result;\n }\n\n const error = new AgentSpawnError(result);\n if (attempt >= retryOptions.maxAttempts) {\n emitFinalSpawnFailure(\n onEvent,\n spawnId,\n input.agent,\n task,\n attempt,\n retryOptions.maxAttempts,\n Date.now() - startedAt,\n error,\n input.check\n );\n if (input.check) {\n throw error;\n }\n return result;\n }\n\n let retryable: boolean;\n try {\n retryable = retryOptions.isRetryable(result);\n } catch (classifierError) {\n emitFinalSpawnFailure(\n onEvent,\n spawnId,\n input.agent,\n task,\n attempt,\n retryOptions.maxAttempts,\n Date.now() - startedAt,\n classifierError\n );\n throw classifierError;\n }\n\n if (!retryable) {\n emitFinalSpawnFailure(\n onEvent,\n spawnId,\n input.agent,\n task,\n attempt,\n retryOptions.maxAttempts,\n Date.now() - startedAt,\n error,\n input.check\n );\n if (input.check) {\n throw error;\n }\n return result;\n }\n\n try {\n await scheduleRetry(error, input, retryOptions, onEvent, spawnId, task, attempt);\n } catch (retryError) {\n if (isAbortError(retryError, input.signal)) {\n emitSpawnCancelled(\n onEvent,\n spawnId,\n input.agent,\n task,\n attempt,\n retryOptions.maxAttempts,\n Date.now() - startedAt,\n retryError\n );\n }\n throw retryError;\n }\n }\n\n throw new Error(\"agent.spawn.retry reached an unreachable retry state.\");\n}\n\nfunction emitSpawnCancelled(\n onEvent: ((event: AgentSpawnEvent) => void | Promise<void>) | undefined,\n spawnId: number,\n agent: string,\n task: string,\n attempt: number,\n maxAttempts: number,\n durationMs: number,\n error: unknown\n): void {\n emitSpawnEvent(onEvent, {\n type: \"spawn.cancelled\",\n spawnId,\n agent,\n task,\n attempt,\n maxAttempts,\n durationMs,\n reason: formatSpawnError(error)\n });\n}\n\nasync function retryOrThrow(\n error: unknown,\n input: ResolvedSpawnAgentInput,\n retryOptions: Required<AgentModuleRetryOptions>,\n onEvent: ((event: AgentSpawnEvent) => void | Promise<void>) | undefined,\n spawnId: number,\n task: string,\n attempt: number,\n durationMs: number\n): Promise<void> {\n if (attempt >= retryOptions.maxAttempts) {\n emitFinalSpawnFailure(\n onEvent,\n spawnId,\n input.agent,\n task,\n attempt,\n retryOptions.maxAttempts,\n durationMs,\n error\n );\n throw error;\n }\n\n await scheduleRetry(error, input, retryOptions, onEvent, spawnId, task, attempt);\n}\n\nasync function scheduleRetry(\n error: unknown,\n input: ResolvedSpawnAgentInput,\n retryOptions: Required<AgentModuleRetryOptions>,\n onEvent: ((event: AgentSpawnEvent) => void | Promise<void>) | undefined,\n spawnId: number,\n task: string,\n attempt: number\n): Promise<void> {\n const delayMs = calculateBackoffMs(retryOptions.backoffMs, attempt);\n emitSpawnEvent(onEvent, {\n type: \"spawn.retry\",\n spawnId,\n agent: input.agent,\n task,\n attempt,\n maxAttempts: retryOptions.maxAttempts,\n delayMs,\n error: formatSpawnError(error)\n });\n await sleep(delayMs, input.signal);\n}\n\nfunction emitFinalSpawnFailure(\n onEvent: ((event: AgentSpawnEvent) => void | Promise<void>) | undefined,\n spawnId: number,\n agent: string,\n task: string,\n attempt: number,\n maxAttempts: number,\n durationMs: number,\n error: unknown,\n checked = true\n): void {\n emitSpawnEvent(onEvent, {\n type: \"spawn.failed\",\n checked,\n spawnId,\n agent,\n task,\n attempt,\n maxAttempts,\n durationMs,\n error: formatSpawnError(error)\n });\n}\n\nfunction emitSpawnEvent(\n onEvent: ((event: AgentSpawnEvent) => void | Promise<void>) | undefined,\n event: AgentSpawnEvent\n): void {\n try {\n const agent = sanitizeLifecycleText(event.agent, 48) || \"agent\";\n const result = onEvent?.({ ...event, agent });\n if (isPromiseLike(result)) {\n void result.catch((error) => warnSpawnEventObserverFailure(error));\n }\n } catch (error) {\n warnSpawnEventObserverFailure(error);\n }\n}\n\nfunction isPromiseLike(value: unknown): value is Promise<void> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"catch\" in value &&\n typeof value.catch === \"function\"\n );\n}\n\nfunction warnSpawnEventObserverFailure(error: unknown): void {\n console.warn(`Agent spawn event observer failed: ${formatSpawnError(error)}`);\n}\n\nfunction createTaskLabel(prompt: string): string {\n const lines = prompt.split(\"\\n\").map((line) => line.trim());\n const taskHeadingIndex = lines.indexOf(\"# Task\");\n const relevantLines = taskHeadingIndex < 0 ? lines : lines.slice(taskHeadingIndex + 1);\n const firstLine = sanitizeLifecycleText(\n relevantLines.find((line) => line.length > 0) ?? \"agent task\",\n 72\n );\n if (firstLine.length === 0) {\n return \"agent task\";\n }\n return firstLine.length > 72 ? `${firstLine.slice(0, 71)}\u2026` : firstLine;\n}\n\nfunction resolveTaskLabel(input: ResolvedSpawnAgentInput): string {\n return input.label ?? createTaskLabel(input.prompt);\n}\n\nfunction isAbortError(error: unknown, signal?: AbortSignal): boolean {\n return signal?.aborted === true || readErrorField(error, \"name\") === \"AbortError\";\n}\n\nfunction formatSpawnError(error: unknown): string {\n return sanitizeLifecycleText(readErrorField(error, \"message\") ?? String(error), 400);\n}\n\nfunction sanitizeLifecycleText(value: string, maxLength: number): string {\n let sanitized = \"\";\n for (const character of value) {\n const code = character.charCodeAt(0);\n if (\n character === \"\\n\" ||\n character === \"\\r\" ||\n character === \"\\t\" ||\n code < 32 ||\n code === 127\n ) {\n sanitized += \" \";\n } else {\n sanitized += character;\n }\n }\n const compact = sanitized\n .split(\" \")\n .filter((part) => part.length > 0)\n .join(\" \");\n return compact.length > maxLength ? `${compact.slice(0, maxLength - 1)}\u2026` : compact;\n}\n\nfunction readErrorField(error: unknown, field: \"message\" | \"name\"): string | undefined {\n if (typeof error !== \"object\" || error === null || !(field in error)) {\n return undefined;\n }\n const value = (error as Record<string, unknown>)[field];\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction normalizeRetryOptions(\n retryOptions: AgentModuleRetryOptions | unknown\n): Required<AgentModuleRetryOptions> {\n if (!isRecord(retryOptions)) {\n throw new Error(\"Agent spawn retry options must be an object.\");\n }\n\n const maxAttempts = readFiniteNumber(\n getOwnProperty(retryOptions, \"maxAttempts\"),\n \"Agent spawn retry maxAttempts\"\n );\n if (!Number.isInteger(maxAttempts) || maxAttempts < 1) {\n throw new Error(\"Agent spawn retry maxAttempts must be an integer greater than or equal to 1.\");\n }\n if (maxAttempts > 5) {\n throw new Error(\"Agent spawn retry maxAttempts must not exceed 5.\");\n }\n\n const backoffMs = readNonNegativeFiniteNumber(\n getOwnProperty(retryOptions, \"backoffMs\"),\n \"Agent spawn retry backoffMs\"\n );\n\n const isRetryableValue = getOwnProperty(retryOptions, \"isRetryable\");\n if (isRetryableValue !== undefined && typeof isRetryableValue !== \"function\") {\n throw new Error(\"Agent spawn retry isRetryable must be a function.\");\n }\n const isRetryable =\n isRetryableValue === undefined\n ? defaultIsRetryable\n : (isRetryableValue as (result: SpawnAgentResult) => boolean);\n\n const isErrorRetryableValue = getOwnProperty(retryOptions, \"isErrorRetryable\");\n if (isErrorRetryableValue !== undefined && typeof isErrorRetryableValue !== \"function\") {\n throw new Error(\"Agent spawn retry isErrorRetryable must be a function.\");\n }\n\n return createNullRecord({\n maxAttempts,\n backoffMs,\n isErrorRetryable:\n isErrorRetryableValue === undefined\n ? () => true\n : (isErrorRetryableValue as (error: unknown) => boolean),\n isRetryable\n });\n}\n\nfunction defaultIsRetryable(result: SpawnAgentResult): boolean {\n return (\n result.exitCode === 1 ||\n result.exitCode === 124 ||\n result.exitCode === 125 ||\n result.exitCode === 137\n );\n}\n\nconst oneAttemptRetryOptions: Required<AgentModuleRetryOptions> = {\n maxAttempts: 1,\n backoffMs: 0,\n isErrorRetryable: () => false,\n isRetryable: () => false\n};\n\nfunction calculateBackoffMs(baseBackoffMs: number, completedAttempt: number): number {\n return Math.min(baseBackoffMs * 2 ** (completedAttempt - 1), 30_000);\n}\n\nfunction sleep(delayMs: number, signal: AbortSignal | undefined): Promise<void> {\n throwIfAborted(signal);\n\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n signal?.removeEventListener(\"abort\", onAbort);\n resolve();\n }, delayMs);\n const onAbort = () => {\n clearTimeout(timeout);\n reject(readAbortReason(signal));\n };\n\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n\nfunction throwIfAborted(signal: AbortSignal | undefined): void {\n if (signal?.aborted) {\n throw readAbortReason(signal);\n }\n}\n\nfunction readAbortReason(signal: AbortSignal | undefined): unknown {\n if (signal?.reason !== undefined) return signal.reason;\n const error = new Error(\"Agent spawn retry aborted\");\n error.name = \"AbortError\";\n return error;\n}\n\nfunction resolveSpawnInput(\n agentDef: AgentModuleDefinition,\n options: AgentModuleSpawnOptions\n): ResolvedSpawnAgentInput {\n const definition = normalizeAgentDefinition(agentDef);\n const normalizedOptions = normalizeSpawnOptions(options);\n const mode = normalizedOptions.mode ?? definition.mode;\n\n if (mode !== undefined && !supportsSpawnMode(definition.agent, mode)) {\n throw new Error(`Agent \"${definition.agent}\" does not support mode \"${mode}\".`);\n }\n\n return createNullRecord({\n agent: definition.agent,\n prompt: prependSystemPrompt(definition.prompt, normalizedOptions.prompt),\n check: normalizedOptions.check ?? false,\n ...(normalizedOptions.label !== undefined ? { label: normalizedOptions.label } : {}),\n ...((normalizedOptions.model ?? definition.model)\n ? { model: normalizedOptions.model ?? definition.model }\n : {}),\n ...((normalizedOptions.mode ?? definition.mode)\n ? { mode: normalizedOptions.mode ?? definition.mode }\n : {}),\n ...((normalizedOptions.cwd ?? definition.cwd)\n ? { cwd: normalizedOptions.cwd ?? definition.cwd }\n : {}),\n ...(normalizedOptions.otelSink !== undefined ? { otelSink: normalizedOptions.otelSink } : {}),\n ...((normalizedOptions.mcp ?? definition.mcp)\n ? { mcp: normalizedOptions.mcp ?? definition.mcp }\n : {}),\n ...(normalizedOptions.timeoutMs !== undefined\n ? { timeoutMs: normalizedOptions.timeoutMs }\n : {}),\n ...(normalizedOptions.signal !== undefined ? { signal: normalizedOptions.signal } : {})\n });\n}\n\nfunction normalizeAgentDefinition(\n agentDef: AgentModuleDefinition | unknown\n): Exclude<AgentModuleDefinition, string> {\n if (typeof agentDef === \"string\") {\n return createNullRecord({\n agent: readRequiredAgent(agentDef)\n });\n }\n\n if (!isRecord(agentDef)) {\n throw new Error(\"Agent definition must be a string or object.\");\n }\n\n const prompt = getOwnProperty(agentDef, \"prompt\");\n const model = getOwnProperty(agentDef, \"model\");\n const mode = getOwnProperty(agentDef, \"mode\");\n const cwd = getOwnProperty(agentDef, \"cwd\");\n const mcp = getOwnProperty(agentDef, \"mcp\");\n\n return createNullRecord({\n agent: readRequiredAgent(getOwnProperty(agentDef, \"agent\")),\n ...(prompt === undefined\n ? {}\n : { prompt: readOptionalString(prompt, \"Agent definition prompt\") }),\n ...(model === undefined ? {} : { model: readOptionalString(model, \"Agent definition model\") }),\n ...(mode === undefined ? {} : { mode: readSpawnMode(mode, \"Agent definition mode\") }),\n ...(cwd === undefined ? {} : { cwd: readOptionalString(cwd, \"Agent definition cwd\") }),\n ...(mcp === undefined ? {} : { mcp: readMcpConfig(mcp, \"Agent definition mcp\") })\n });\n}\n\nfunction normalizeSpawnOptions(\n options: AgentModuleSpawnOptions | unknown\n): AgentModuleSpawnOptions {\n if (!isRecord(options)) {\n throw new Error(\"Agent spawn options must be an object.\");\n }\n\n const label = getOwnProperty(options, \"label\");\n const model = getOwnProperty(options, \"model\");\n const mode = getOwnProperty(options, \"mode\");\n const cwd = getOwnProperty(options, \"cwd\");\n const otelSink = getOwnProperty(options, \"otelSink\");\n const mcp = getOwnProperty(options, \"mcp\");\n const timeoutMs = getOwnProperty(options, \"timeoutMs\");\n const signal = getOwnProperty(options, \"signal\");\n\n return createNullRecord({\n prompt: readRequiredPrompt(getOwnProperty(options, \"prompt\")),\n check: readOptionalBoolean(getOwnProperty(options, \"check\"), \"Agent spawn options check\"),\n ...(label === undefined\n ? {}\n : { label: readRequiredString(label, \"Agent spawn options label\") }),\n ...(model === undefined\n ? {}\n : { model: readOptionalString(model, \"Agent spawn options model\") }),\n ...(mode === undefined ? {} : { mode: readSpawnMode(mode, \"Agent spawn options mode\") }),\n ...(cwd === undefined ? {} : { cwd: readOptionalString(cwd, \"Agent spawn options cwd\") }),\n ...(otelSink === undefined ? {} : { otelSink: readOtelSink(otelSink) }),\n ...(mcp === undefined ? {} : { mcp: readMcpConfig(mcp, \"Agent spawn options mcp\") }),\n ...(timeoutMs === undefined\n ? {}\n : {\n timeoutMs: readNonNegativeFiniteNumber(timeoutMs, \"Agent spawn options timeoutMs\")\n }),\n ...(signal === undefined\n ? {}\n : { signal: readAbortSignal(signal, \"Agent spawn options signal\") })\n });\n}\n\nfunction toProviderSpawnInput(input: ResolvedSpawnAgentInput): SpawnAgentInput {\n const { label: ignoredLabel, check: ignoredCheck, ...providerInput } = input;\n void ignoredLabel;\n void ignoredCheck;\n return providerInput;\n}\n\nfunction readOptionalBoolean(value: unknown, label: string): boolean | undefined {\n if (value === undefined) return undefined;\n if (typeof value !== \"boolean\") throw new Error(`${label} must be a boolean.`);\n return value;\n}\n\nfunction validateSpawnResult(result: unknown): SpawnAgentResult {\n if (!isRecord(result)) {\n throw new Error(\"spawnAgent must resolve to an object result.\");\n }\n\n const usage = getOwnProperty(result, \"usage\");\n\n return createNullRecord({\n exitCode: readFiniteNumber(getOwnProperty(result, \"exitCode\"), \"spawnAgent result exitCode\"),\n stdout: readOptionalString(getOwnProperty(result, \"stdout\"), \"spawnAgent result stdout\") ?? \"\",\n stderr: readOptionalString(getOwnProperty(result, \"stderr\"), \"spawnAgent result stderr\") ?? \"\",\n summary:\n readOptionalString(getOwnProperty(result, \"summary\"), \"spawnAgent result summary\") ?? \"\",\n durationMs: readNonNegativeFiniteNumber(\n getOwnProperty(result, \"durationMs\"),\n \"spawnAgent result durationMs\"\n ),\n ...(usage === undefined ? {} : { usage: readSpawnUsage(usage) })\n });\n}\n\nfunction recordActiveSpawnUsage(usage: SpawnUsage | undefined): void {\n activeUsageAccumulator.getStore()?.record(usage);\n}\n\nfunction recordActiveSpawnAttempt(): void {\n activeUsageAccumulator.getStore()?.beginAttempt?.();\n}\n\nfunction recordActiveSpawnStart(): void {\n activeUsageAccumulator.getStore()?.beginSpawn?.();\n}\n\nfunction readSpawnUsage(value: unknown): SpawnUsage {\n if (!isRecord(value)) {\n throw new Error(\"spawnAgent result usage must be an object.\");\n }\n\n const cachedTokens = getOwnProperty(value, \"cachedTokens\");\n const costUsd = getOwnProperty(value, \"costUsd\");\n\n return createNullRecord({\n inputTokens: readNonNegativeFiniteNumber(\n getOwnProperty(value, \"inputTokens\"),\n \"spawnAgent result usage inputTokens\"\n ),\n outputTokens: readNonNegativeFiniteNumber(\n getOwnProperty(value, \"outputTokens\"),\n \"spawnAgent result usage outputTokens\"\n ),\n ...(cachedTokens === undefined\n ? {}\n : {\n cachedTokens: readNonNegativeFiniteNumber(\n cachedTokens,\n \"spawnAgent result usage cachedTokens\"\n )\n }),\n ...(costUsd === undefined\n ? {}\n : {\n costUsd: readNonNegativeFiniteNumber(costUsd, \"spawnAgent result usage costUsd\")\n })\n });\n}\n\nfunction prependSystemPrompt(systemPrompt: string | undefined, userPrompt: string): string {\n if (systemPrompt === undefined || systemPrompt.trim().length === 0) {\n return userPrompt;\n }\n\n return `${systemPrompt}\\n\\n# Task\\n\\n${userPrompt}`;\n}\n\nfunction createSpawnFailureMessage(result: SpawnAgentResult): string {\n const stderr = result.stderr.trim();\n const summary = result.summary.trim();\n return stderr.length > 0\n ? `Agent spawn failed with exit code ${result.exitCode}: ${stderr}`\n : summary.length > 0\n ? `Agent spawn failed with exit code ${result.exitCode}: ${summary}`\n : `Agent spawn failed with exit code ${result.exitCode}.`;\n}\n\nfunction readRequiredAgent(value: unknown): string {\n const agent = readOptionalString(value, \"Agent definition agent\")?.trim();\n\n if (agent === undefined || agent.length === 0) {\n throw new Error(\"Agent definition must define a non-empty agent.\");\n }\n\n return agent;\n}\n\nfunction readRequiredString(value: unknown, label: string): string {\n const text = readOptionalString(value, label)?.trim();\n if (text === undefined || text.length === 0) {\n throw new Error(`${label} must be a non-empty string.`);\n }\n return text;\n}\n\nfunction readRequiredPrompt(value: unknown): string {\n const prompt = readOptionalString(value, \"Agent spawn options prompt\");\n\n if (prompt === undefined || prompt.trim().length === 0) {\n throw new Error(\"Agent spawn options must define a non-empty prompt.\");\n }\n\n return prompt;\n}\n\nfunction readSpawnMode(value: unknown, label: string): AgentSpawnMode {\n if (value === \"read\" || value === \"edit\" || value === \"auto\" || value === \"yolo\") {\n return value;\n }\n\n throw new Error(`${label} must be one of: read, edit, auto, yolo.`);\n}\n\nfunction readMcpConfig(value: unknown, label: string): AgentModuleMcpConfig {\n if (!isRecord(value)) {\n throw new Error(`${label} must be an object.`);\n }\n\n const entries = Object.entries(value).map(\n ([name, server]) => [name, readMcpServer(server, `${label}.${name}`)] as const\n );\n return createNullRecord(Object.fromEntries(entries) as AgentModuleMcpConfig);\n}\n\nfunction readMcpServer(value: unknown, label: string): AgentModuleMcpServer {\n if (!isRecord(value)) {\n throw new Error(`${label} must be an object.`);\n }\n\n const args = getOwnProperty(value, \"args\");\n const env = getOwnProperty(value, \"env\");\n const timeout = getOwnProperty(value, \"timeout\");\n\n return createNullRecord({\n command: readNonEmptyString(getOwnProperty(value, \"command\"), `${label}.command`),\n ...(args === undefined ? {} : { args: readStringArray(args, `${label}.args`) }),\n ...(env === undefined ? {} : { env: readStringRecord(env, `${label}.env`) }),\n ...(timeout === undefined\n ? {}\n : { timeout: readPositiveFiniteNumber(timeout, `${label}.timeout`) })\n });\n}\n\nfunction readStringArray(value: unknown, label: string): string[] {\n if (!Array.isArray(value) || value.some((entry) => typeof entry !== \"string\")) {\n throw new Error(`${label} must be an array of strings.`);\n }\n\n return [...value];\n}\n\nfunction readStringRecord(value: unknown, label: string): Record<string, string> {\n if (!isRecord(value)) {\n throw new Error(`${label} must be an object.`);\n }\n\n const entries = Object.entries(value);\n\n if (entries.some(([, entry]) => typeof entry !== \"string\")) {\n throw new Error(`${label} must be a string record.`);\n }\n\n return Object.fromEntries(entries) as Record<string, string>;\n}\n\nfunction readOptionalString(value: unknown, label: string): string | undefined {\n if (value === undefined) {\n return undefined;\n }\n\n if (typeof value !== \"string\") {\n throw new Error(`${label} must be a string.`);\n }\n\n return value;\n}\n\nfunction readNonEmptyString(value: unknown, label: string): string {\n const text = readOptionalString(value, label);\n\n if (text === undefined || text.trim().length === 0) {\n throw new Error(`${label} must be a non-empty string.`);\n }\n\n return text;\n}\n\nfunction readFiniteNumber(value: unknown, label: string): number {\n if (typeof value !== \"number\" || !Number.isFinite(value)) {\n throw new Error(`${label} must be a finite number.`);\n }\n\n return value;\n}\n\nfunction readNonNegativeFiniteNumber(value: unknown, label: string): number {\n const number = readFiniteNumber(value, label);\n\n if (number < 0) {\n throw new Error(`${label} must be a non-negative finite number.`);\n }\n\n return number;\n}\n\nfunction readPositiveFiniteNumber(value: unknown, label: string): number {\n const number = readFiniteNumber(value, label);\n\n if (number <= 0) {\n throw new Error(`${label} must be a positive finite number.`);\n }\n\n return number;\n}\n\nfunction readAbortSignal(value: unknown, label: string): AbortSignal {\n if (\n typeof value !== \"object\" ||\n value === null ||\n typeof (value as { aborted?: unknown }).aborted !== \"boolean\" ||\n typeof (value as { addEventListener?: unknown }).addEventListener !== \"function\" ||\n typeof (value as { removeEventListener?: unknown }).removeEventListener !== \"function\"\n ) {\n throw new Error(`${label} must be an AbortSignal.`);\n }\n\n return value as AbortSignal;\n}\n\nfunction readOtelSink(value: unknown): OtelSink {\n if (\n !isRecord(value) ||\n typeof value.startSpan !== \"function\" ||\n typeof value.recordException !== \"function\"\n ) {\n throw new Error(\"Agent spawn options otelSink must be an OtelSink.\");\n }\n\n return value as unknown as OtelSink;\n}\n\nfunction getOwnProperty<Name extends PropertyKey>(value: object, name: Name): unknown {\n return hasOwnProperty(value, name) ? value[name] : undefined;\n}\n\nfunction hasOwnProperty<Name extends PropertyKey>(\n value: object,\n name: Name\n): value is Record<Name, unknown> {\n return Object.prototype.hasOwnProperty.call(value, name);\n}\n\nfunction createNullRecord<T extends object>(value: T): T {\n return Object.assign(Object.create(null) as T, value);\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n", "import type { AgentDefinition } from \"../types.js\";\n\nexport const claudeCodeAgent: AgentDefinition = {\n id: \"claude-code\",\n name: \"claude-code\",\n label: \"Claude Code\",\n summary: \"Anthropic's agentic coding tool for the terminal.\",\n aliases: [\"claude\"],\n binaryName: \"claude\",\n apiShapes: [\"anthropic-messages\"],\n otelCapture: {\n env: {\n CLAUDE_CODE_ENABLE_TELEMETRY: \"1\"\n }\n },\n configPath: \"~/.claude.json\",\n capabilities: [\"spawn\", \"configure\", \"install\", \"test\", \"skill\", \"mcp\"],\n branding: {\n colors: {\n dark: \"#C15F3C\",\n light: \"#C15F3C\"\n }\n }\n};\n", "import type { AgentDefinition } from \"../types.js\";\n\nexport const claudeDesktopAgent: AgentDefinition = {\n id: \"claude-desktop\",\n name: \"claude-desktop\",\n label: \"Claude Desktop\",\n summary: \"Anthropic's official desktop application for Claude\",\n configPath: \"~/.config/Claude/claude_desktop_config.json\",\n configPaths: {\n darwin: \"~/Library/Application Support/Claude/claude_desktop_config.json\",\n linux: \"~/.config/Claude/claude_desktop_config.json\",\n win32: \"~/AppData/Roaming/Claude/claude_desktop_config.json\"\n },\n capabilities: [\"mcp\"],\n branding: {\n colors: {\n dark: \"#D97757\",\n light: \"#D97757\"\n }\n }\n};\n", "import type { AgentDefinition } from \"../types.js\";\n\nexport const codexAgent: AgentDefinition = {\n id: \"codex\",\n name: \"codex\",\n label: \"Codex\",\n summary: \"OpenAI's coding agent for the terminal.\",\n binaryName: \"codex\",\n apiShapes: [\"openai-responses\"],\n otelCapture: {\n args: (endpoint, content) => [\n \"-c\",\n `otel.trace_exporter={\"otlp-http\"={endpoint=${JSON.stringify(`${endpoint}/v1/traces`)},protocol=\"json\"}}`,\n \"-c\",\n `otel.exporter={\"otlp-http\"={endpoint=${JSON.stringify(`${endpoint}/v1/logs`)},protocol=\"json\"}}`,\n \"-c\",\n `otel.log_user_prompt=${content}`\n ]\n },\n configPath: \"~/.codex/config.toml\",\n capabilities: [\"spawn\", \"configure\", \"install\", \"test\", \"skill\", \"mcp\"],\n branding: {\n colors: {\n dark: \"#D5D9DF\",\n light: \"#7A7F86\"\n }\n }\n};\n", "import type { AgentDefinition } from \"../types.js\";\n\nexport const cursorAgent: AgentDefinition = {\n id: \"cursor\",\n name: \"cursor\",\n aliases: [\"cursor-agent\"],\n label: \"Cursor\",\n summary: \"Cursor's CLI coding agent.\",\n binaryName: \"cursor-agent\",\n configPath: \"~/.cursor/mcp.json\",\n capabilities: [\"spawn\", \"configure\", \"install\", \"test\", \"skill\", \"mcp\"],\n branding: {\n colors: {\n dark: \"#FFFFFF\",\n light: \"#000000\"\n }\n }\n};\n", "import type { AgentDefinition } from \"../types.js\";\n\nexport const geminiCliAgent: AgentDefinition = {\n id: \"gemini-cli\",\n name: \"gemini-cli\",\n aliases: [\"gemini\"],\n label: \"Gemini CLI\",\n summary: \"Google's open-source AI agent for the terminal.\",\n binaryName: \"gemini\",\n configPath: \"~/.gemini/settings.json\",\n apiShapes: [\"google-generations\"],\n capabilities: [\"spawn\", \"configure\", \"install\", \"test\", \"skill\"],\n branding: {\n colors: {\n dark: \"#8AB4F8\",\n light: \"#1A73E8\"\n }\n }\n};\n", "import type { AgentDefinition } from \"../types.js\";\n\nexport const openCodeAgent: AgentDefinition = {\n id: \"opencode\",\n name: \"opencode\",\n label: \"OpenCode CLI\",\n summary: \"Open-source AI coding agent for the terminal.\",\n binaryName: \"opencode\",\n apiShapes: [\"openai-chat-completions\"],\n otelCapture: {\n env: {\n OPENCODE_CONFIG_CONTENT: '{\"experimental\":{\"openTelemetry\":true}}'\n }\n },\n configPath: \"~/.config/opencode/opencode.json\",\n capabilities: [\"spawn\", \"configure\", \"install\", \"test\", \"skill\", \"mcp\"],\n branding: {\n colors: {\n dark: \"#4A4F55\",\n light: \"#2F3338\"\n }\n }\n};\n", "import type { AgentDefinition } from \"../types.js\";\n\nexport const kimiAgent: AgentDefinition = {\n id: \"kimi\",\n name: \"kimi\",\n label: \"Kimi\",\n summary: \"Moonshot AI's coding agent for the terminal.\",\n aliases: [\"kimi-cli\"],\n binaryName: \"kimi\",\n apiShapes: [\"openai-chat-completions\"],\n configPath: \"~/.kimi/mcp.json\",\n capabilities: [\"spawn\", \"configure\", \"install\", \"test\", \"mcp\"],\n branding: {\n colors: {\n dark: \"#7B68EE\",\n light: \"#6A5ACD\"\n }\n }\n};\n", "import type { AgentDefinition } from \"../types.js\";\n\nexport const gooseAgent: AgentDefinition = {\n id: \"goose\",\n name: \"goose\",\n label: \"Goose\",\n summary: \"Block's open-source AI agent with ACP support.\",\n binaryName: \"goose\",\n apiShapes: [\"openai-chat-completions\"],\n otelCapture: {},\n configPath: \"~/.config/goose/config.yaml\",\n capabilities: [\"spawn\", \"configure\", \"install\", \"test\", \"skill\", \"mcp\"],\n branding: {\n colors: {\n dark: \"#FF6B35\",\n light: \"#E85D26\"\n }\n }\n};\n", "import type { AgentDefinition } from \"../types.js\";\n\nexport const piAgent: AgentDefinition = {\n id: \"pi\",\n name: \"pi\",\n aliases: [\"pi-agent\"],\n label: \"Pi\",\n summary: \"Minimal AI coding agent for the terminal.\",\n binaryName: \"pi\",\n capabilities: [\"spawn\"],\n branding: {\n colors: {\n dark: \"#F2F2F2\",\n light: \"#242424\"\n }\n }\n};\n", "import type { AgentDefinition } from \"../types.js\";\n\nexport const poeAgentAgent: AgentDefinition = {\n id: \"poe-agent\",\n name: \"poe-agent\",\n label: \"Poe Agent\",\n summary: \"Run one-shot prompts with the built-in Poe agent runtime.\",\n apiShapes: [\"openai-responses\", \"openai-chat-completions\"],\n configPath: \"~/.poe-code/config.json\",\n capabilities: [\"configure\"],\n branding: {\n colors: {\n dark: \"#A465F7\",\n light: \"#7A3FD3\"\n }\n }\n};\n", "import type { AgentDefinition } from \"./types.js\";\nimport {\n claudeCodeAgent,\n claudeDesktopAgent,\n codexAgent,\n cursorAgent,\n geminiCliAgent,\n openCodeAgent,\n kimiAgent,\n gooseAgent,\n piAgent,\n poeAgentAgent\n} from \"./agents/index.js\";\n\nfunction freezeAgent(agent: AgentDefinition): AgentDefinition {\n if (agent.aliases !== undefined) {\n Object.freeze(agent.aliases);\n }\n if (agent.apiShapes !== undefined) {\n Object.freeze(agent.apiShapes);\n }\n if (agent.capabilities !== undefined) {\n Object.freeze(agent.capabilities);\n }\n if (agent.otelCapture?.env !== undefined) {\n Object.freeze(agent.otelCapture.env);\n }\n if (agent.otelCapture !== undefined) {\n Object.freeze(agent.otelCapture);\n }\n Object.freeze(agent.branding.colors);\n Object.freeze(agent.branding);\n return Object.freeze(agent);\n}\n\nexport const allAgents: readonly AgentDefinition[] = Object.freeze([\n freezeAgent(claudeCodeAgent),\n freezeAgent(claudeDesktopAgent),\n freezeAgent(codexAgent),\n freezeAgent(cursorAgent),\n freezeAgent(geminiCliAgent),\n freezeAgent(openCodeAgent),\n freezeAgent(kimiAgent),\n freezeAgent(gooseAgent),\n freezeAgent(piAgent),\n freezeAgent(poeAgentAgent)\n]);\n\nconst lookup = new Map<string, string>();\n\nfor (const agent of allAgents) {\n const values = [agent.id, agent.name, ...(agent.aliases ?? [])];\n for (const value of values) {\n const normalized = value.toLowerCase();\n if (!lookup.has(normalized)) {\n lookup.set(normalized, agent.id);\n }\n }\n}\n\nexport function resolveAgentId(input: string): string | undefined {\n if (!input) {\n return undefined;\n }\n return lookup.get(input.trim().toLowerCase());\n}\n", "import type { McpSpawnConfig } from \"../types.js\";\n\ninterface JsonMcpServer {\n command: string;\n args?: string[];\n env?: Record<string, string>;\n timeout?: number;\n}\n\nexport function toJsonMcpServers(servers: McpSpawnConfig): Record<string, JsonMcpServer> {\n validateMcpSpawnConfig(servers);\n const out: Record<string, JsonMcpServer> = Object.create(null);\n\n for (const [name, server] of Object.entries(servers)) {\n const mapped: JsonMcpServer = { command: server.command };\n if (server.args && server.args.length > 0) {\n mapped.args = server.args;\n }\n if (server.env && Object.keys(server.env).length > 0) {\n mapped.env = server.env;\n }\n if (server.timeout !== undefined) {\n mapped.timeout = server.timeout;\n }\n out[name] = mapped;\n }\n\n return out;\n}\n\nfunction toTomlString(value: string): string {\n return JSON.stringify(value);\n}\n\nfunction toTomlArray(values: string[]): string {\n const serialized = values.map((value) => toTomlString(value));\n return `[${serialized.join(\", \")}]`;\n}\n\nfunction toTomlInlineTable(values: Record<string, string>): string {\n const parts: string[] = [];\n for (const [key, value] of Object.entries(values)) {\n parts.push(`${JSON.stringify(key)}=${toTomlString(value)}`);\n }\n return `{${parts.join(\", \")}}`;\n}\n\nfunction isTomlBareKeySegment(value: string): boolean {\n if (value.length === 0) {\n return false;\n }\n for (const char of value) {\n const code = char.charCodeAt(0);\n const isDigit = code >= 48 && code <= 57;\n const isUpperAlpha = code >= 65 && code <= 90;\n const isLowerAlpha = code >= 97 && code <= 122;\n if (!isDigit && !isUpperAlpha && !isLowerAlpha && char !== \"_\" && char !== \"-\") {\n return false;\n }\n }\n return true;\n}\n\nfunction toTomlKeySegment(value: string): string {\n return isTomlBareKeySegment(value) ? value : JSON.stringify(value);\n}\n\nexport function validateMcpSpawnConfig(servers: McpSpawnConfig): void {\n for (const [name, server] of Object.entries(servers)) {\n if (name.trim().length === 0) {\n throw new Error(\"MCP server name must be a non-empty string.\");\n }\n if (typeof server.command !== \"string\" || server.command.trim().length === 0) {\n throw new Error(`MCP server \"${name}\" command must be a non-empty string.`);\n }\n }\n}\n\nexport function serializeJsonMcpArgs(servers: McpSpawnConfig): string[] {\n return [\"--mcp-config\", JSON.stringify({ mcpServers: toJsonMcpServers(servers) })];\n}\n\nexport function serializeOpenCodeMcpEnv(servers: McpSpawnConfig): Record<string, string> {\n validateMcpSpawnConfig(servers);\n const mcp: Record<\n string,\n { type: \"local\"; command: string[]; environment?: Record<string, string> }\n > = Object.create(null);\n for (const [name, server] of Object.entries(servers)) {\n if (server.timeout !== undefined) {\n throw new Error(`OpenCode MCP server \"${name}\" does not support timeout.`);\n }\n const entry: {\n type: \"local\";\n command: string[];\n environment?: Record<string, string>;\n } = { type: \"local\", command: [server.command, ...(server.args ?? [])] };\n if (server.env && Object.keys(server.env).length > 0) {\n entry.environment = server.env;\n }\n mcp[name] = entry;\n }\n return { OPENCODE_CONFIG_CONTENT: JSON.stringify({ mcp }) };\n}\n\nexport function serializeCodexMcpArgs(servers: McpSpawnConfig): string[] {\n validateMcpSpawnConfig(servers);\n const args: string[] = [];\n\n for (const [name, server] of Object.entries(servers)) {\n const prefix = `mcp_servers.${toTomlKeySegment(name)}`;\n args.push(\"-c\", `${prefix}.command=${toTomlString(server.command)}`);\n if (server.autoApprove !== false) {\n args.push(\"-c\", `${prefix}.default_tools_approval_mode=${toTomlString(\"approve\")}`);\n }\n\n if (server.args && server.args.length > 0) {\n args.push(\"-c\", `${prefix}.args=${toTomlArray(server.args)}`);\n }\n\n if (server.env && Object.keys(server.env).length > 0) {\n args.push(\"-c\", `${prefix}.env=${toTomlInlineTable(server.env)}`);\n }\n\n if (server.timeout !== undefined) {\n args.push(\"-c\", `${prefix}.timeout=${server.timeout}`);\n }\n }\n\n return args;\n}\n\nexport function serializeGooseMcpArgs(servers: McpSpawnConfig): string[] {\n validateMcpSpawnConfig(servers);\n return Object.entries(servers).flatMap(([name, server]) => {\n if (server.env && Object.keys(server.env).length > 0) {\n throw new Error(`Goose MCP server \"${name}\" does not support env through --with-extension.`);\n }\n if (server.timeout !== undefined) {\n throw new Error(\n `Goose MCP server \"${name}\" does not support timeout through --with-extension.`\n );\n }\n return [\"--with-extension\", [server.command, ...(server.args ?? [])].join(\" \")];\n });\n}\n", "import type { CliSpawnConfig } from \"../types.js\";\nimport { serializeJsonMcpArgs } from \"./mcp.js\";\n\nexport const claudeCodeSpawnConfig: CliSpawnConfig = {\n kind: \"cli\",\n agentId: \"claude-code\",\n // ACP adapter support: yes (adapter: \"claude\")\n adapter: \"claude\",\n promptFlag: \"-p\",\n modelFlag: \"--model\",\n modelStripProviderPrefix: true,\n modelTransform: (model) => model.replaceAll(\".\", \"-\"),\n defaultArgs: [\n \"--output-format\",\n \"stream-json\",\n \"--verbose\"\n ],\n mcpArgs: serializeJsonMcpArgs,\n modes: {\n yolo: [\"--dangerously-skip-permissions\"],\n auto: [\"--permission-mode\", \"auto\"],\n edit: [\"--permission-mode\", \"acceptEdits\", \"--allowedTools\", \"Bash,Read,Write,Edit,Glob,Grep,NotebookEdit\"],\n // Plan mode alone still permits writes, so read mode pins a read-only\n // allowlist and hard-denies every mutating tool.\n read: [\n \"--permission-mode\",\n \"plan\",\n \"--allowedTools\",\n \"Read,Glob,Grep\",\n \"--disallowedTools\",\n \"Bash,Write,Edit,MultiEdit,NotebookEdit\"\n ]\n },\n stdinMode: {\n omitPrompt: true,\n extraArgs: [\"--input-format\", \"text\"]\n },\n interactive: {\n defaultArgs: []\n },\n resume: {\n args: (threadId) => [\"--resume\", threadId]\n }\n};\n", "import type { CliSpawnConfig } from \"../types.js\";\nimport { serializeCodexMcpArgs } from \"./mcp.js\";\n\nexport const codexSpawnConfig: CliSpawnConfig = {\n kind: \"cli\",\n agentId: \"codex\",\n // ACP adapter support: yes (adapter: \"codex\")\n adapter: \"codex\",\n promptFlag: \"exec\",\n modelFlag: \"--model\",\n modelStripProviderPrefix: true,\n defaultArgs: [\"--skip-git-repo-check\", \"--json\"],\n mcpArgs: serializeCodexMcpArgs,\n mcpArgsBeforeCommand: true,\n modes: {\n yolo: [\"--dangerously-bypass-approvals-and-sandbox\"],\n auto: [\n \"-s\",\n \"danger-full-access\",\n \"-c\",\n 'approval_policy=\"on-request\"',\n \"-c\",\n 'approvals_reviewer=\"auto_review\"'\n ],\n edit: [\"-s\", \"workspace-write\"],\n read: [\"-s\", \"read-only\"]\n },\n stdinMode: {\n omitPrompt: true,\n extraArgs: [\"-\"]\n },\n interactive: {\n defaultArgs: [\"-a\", \"never\"]\n },\n resume: {\n args: (threadId) => [\"resume\", threadId],\n position: \"beforePrompt\",\n commandOptionsPosition: \"beforeResume\",\n hintArgs: (threadId, cwd) => [\"resume\", \"-C\", cwd, threadId]\n }\n};\n", "import type { AcpSpawnConfig, CliSpawnConfig } from \"../types.js\";\nimport { serializeOpenCodeMcpEnv } from \"./mcp.js\";\n\n/**\n * OpenCode JSON output format (empirically observed)\n *\n * OpenCode can emit \"raw JSON events\" when running a prompt via:\n * - `opencode run \"<prompt>\" --format json ...`\n *\n * Key observations (OpenCode CLI v1.1.47):\n * - Output is **NDJSON / line-delimited JSON**: one JSON object per stdout line.\n * - Each line is an event object with a top-level `type` string (NOT ACP's `{ event: ... }`).\n * - Common top-level fields:\n * - `type`: `\"step_start\" | \"text\" | \"tool_use\" | \"step_finish\" | ...`\n * - `timestamp`: number (ms since epoch)\n * - `sessionID`: string (e.g. `\"ses_...\"`)\n * - `part`: object with event-specific payload\n *\n * `text` events:\n * ```ts\n * {\n * type: \"text\",\n * sessionID: \"ses_...\",\n * part: {\n * type: \"text\",\n * messageID: \"msg_...\",\n * text: \"Hello ...\",\n * time: { start: 1770000000000, end: 1770000000000 }\n * }\n * }\n * ```\n *\n * Tool calls (`tool_use`):\n * - Represented as a single event with `part.type: \"tool\"` and `state.status`.\n * - `state.input` includes tool arguments; `state.output` is the tool result string.\n * ```ts\n * {\n * type: \"tool_use\",\n * sessionID: \"ses_...\",\n * part: {\n * type: \"tool\",\n * callID: \"call_...\",\n * tool: \"bash\",\n * state: {\n * status: \"completed\",\n * input: { command: \"echo hello\", description: \"...\" },\n * output: \"hello\\n\"\n * }\n * }\n * }\n * ```\n *\n * Step boundaries:\n * - `step_start` and `step_finish` wrap a single model/tool turn.\n * - `step_finish.part.tokens` contains token accounting:\n * `{ input, output, reasoning, cache: { read, write } }`\n *\n * Negative cases / gotchas:\n * - Some failures (e.g. invalid `--model` / unknown provider) can print a non-JSON stack trace\n * before any JSON events are emitted, even with `--format json`.\n * - If `--format json` is ever removed upstream, OpenCode will need a text-mode fallback\n * (no streaming event adapter).\n */\nexport const openCodeSpawnConfig: CliSpawnConfig = {\n kind: \"cli\",\n agentId: \"opencode\",\n // ACP adapter support: yes (adapter: \"opencode\").\n // OpenCode's `--format json` emits NDJSON events with `{ type, sessionID, part }`\n // (no `{ event, ... }` field), so it needs the OpenCode adapter (not \"native\").\n adapter: \"opencode\",\n promptFlag: \"run\",\n modelFlag: \"--model\",\n modelStripProviderPrefix: false,\n modelTransform: (model) => {\n return model.startsWith(\"poe/\") ? model : `poe/${model}`;\n },\n defaultArgs: [\"--format\", \"json\"],\n modes: {\n // No auto: `opencode run` never asks; permissions come from opencode.json.\n yolo: [],\n edit: [],\n read: [\"--agent\", \"plan\"]\n },\n interactive: {\n defaultArgs: [],\n promptFlag: \"--prompt\"\n },\n resume: {\n args: (threadId) => [\"--session\", threadId],\n hintArgs: (threadId, cwd) => [cwd, \"--session\", threadId]\n },\n mcpEnv: serializeOpenCodeMcpEnv\n};\n\nexport const openCodeAcpSpawnConfig: AcpSpawnConfig = {\n kind: \"acp\",\n agentId: \"opencode\",\n acpArgs: [\"acp\"],\n skipAuth: true,\n mcpEnv: serializeOpenCodeMcpEnv,\n};\n", "import type { AcpSpawnConfig, CliSpawnConfig } from \"../types.js\";\nimport { serializeJsonMcpArgs } from \"./mcp.js\";\n\nexport const kimiSpawnConfig: CliSpawnConfig = {\n kind: \"cli\",\n agentId: \"kimi\",\n // ACP adapter support: yes (adapter: \"kimi\").\n // Kimi's `--output-format stream-json` emits OpenAI-style `{ role, content }` JSON\n // (no `{ event, ... }` field), so it needs the Kimi adapter (not \"native\").\n adapter: \"kimi\",\n promptFlag: \"-p\",\n modelStripProviderPrefix: true,\n defaultArgs: [\"--print\", \"--output-format\", \"stream-json\"],\n mcpArgs: serializeJsonMcpArgs,\n modes: {\n // No auto: kimi --print mode has no approval channel.\n yolo: [\"--yolo\"],\n edit: [],\n read: []\n },\n stdinMode: {\n omitPrompt: true,\n extraArgs: [\"--input-format\", \"stream-json\"],\n automaticFallback: false\n },\n interactive: {\n defaultArgs: [],\n promptFlag: \"-p\"\n },\n resume: {\n args: (threadId, cwd) => [\"--session\", threadId, \"--work-dir\", cwd]\n }\n};\n\nexport const kimiAcpSpawnConfig: AcpSpawnConfig = {\n kind: \"acp\",\n agentId: \"kimi\",\n acpArgs: [\"acp\"],\n supportsMcpServers: false,\n};\n", "import type { AcpSpawnConfig, CliSpawnConfig } from \"../types.js\";\nimport { serializeGooseMcpArgs } from \"./mcp.js\";\n\nconst gooseFileSecretsEnv = { GOOSE_DISABLE_KEYRING: \"1\" };\n\nexport const gooseSpawnConfig: CliSpawnConfig = {\n kind: \"cli\",\n agentId: \"goose\",\n adapter: \"native\",\n promptFlag: \"--text\",\n modelFlag: \"--model\",\n modelStripProviderPrefix: false,\n defaultArgs: [\"run\", \"--output-format\", \"stream-json\"],\n defaultArgsPosition: \"beforePrompt\",\n mcpArgs: serializeGooseMcpArgs,\n mcpArgsPosition: \"beforePrompt\",\n modes: {\n // No auto: GOOSE_MODE=approve prompts on the TTY and would hang a headless run.\n yolo: { env: { ...gooseFileSecretsEnv, GOOSE_MODE: \"auto\" } },\n edit: { env: { ...gooseFileSecretsEnv, GOOSE_MODE: \"smart_approve\" } },\n read: { env: { ...gooseFileSecretsEnv, GOOSE_MODE: \"chat\" } }\n },\n stdinMode: {\n omitPrompt: true,\n extraArgs: [\"--instructions\", \"-\"],\n automaticFallback: false\n },\n interactive: {\n defaultArgs: [\"session\"],\n defaultArgsPosition: \"beforePrompt\"\n },\n resume: {\n args: (threadId) => [\"--resume\", \"--session-id\", threadId],\n hintArgs: (threadId) => [\"run\", \"--resume\", \"--session-id\", threadId, \"--text\", \"continue\"]\n }\n};\n\nexport const gooseAcpSpawnConfig: AcpSpawnConfig = {\n kind: \"acp\",\n agentId: \"goose\",\n acpArgs: [\"acp\"],\n env: gooseFileSecretsEnv,\n skipAuth: true\n};\n", "import type { AdapterType } from \"./adapters/index.js\";\nimport type { RuntimeOverrideOptions } from \"@poe-code/agent-harness-tools\";\nimport type { StateManager } from \"@poe-code/poe-code-config\";\nimport type { AcpMiddleware } from \"./acp/middleware.js\";\nimport type { SpawnEnvironment } from \"./environment.js\";\n\nexport const SPAWN_MODES = [\"yolo\", \"auto\", \"edit\", \"read\"] as const;\n\nexport type SpawnMode = (typeof SPAWN_MODES)[number];\n\n/**\n * The single source of truth for the permission mode used when a caller does not\n * ask for one. `auto` uses the provider's unattended safe-action policy.\n * Providers without an auto mode reject the spawn instead of silently selecting\n * a more permissive mode. `yolo` must always be requested explicitly.\n */\nexport const DEFAULT_SPAWN_MODE: SpawnMode = \"auto\";\n\nexport type SpawnModeConfig = string[] | { args?: string[]; env?: Record<string, string> };\n\n/**\n * `auto` is optional: it maps to the agent's native ask-style approval mode and\n * must be omitted when the agent has no approval channel in headless runs.\n */\nexport type SpawnModesConfig = Record<Exclude<SpawnMode, \"auto\">, SpawnModeConfig> & {\n auto?: SpawnModeConfig;\n};\n\nexport function resolveModeConfig(modeConfig: SpawnModeConfig): {\n args: string[];\n env?: Record<string, string>;\n} {\n if (Array.isArray(modeConfig)) {\n return { args: modeConfig };\n }\n return {\n args: modeConfig.args ?? [],\n env: modeConfig.env && Object.keys(modeConfig.env).length > 0 ? modeConfig.env : undefined\n };\n}\n\nexport function resolveAgentModeConfig(\n config: Pick<CliSpawnConfig, \"agentId\" | \"modes\">,\n mode: SpawnMode | undefined\n): {\n args: string[];\n env?: Record<string, string>;\n} {\n const selected = mode ?? DEFAULT_SPAWN_MODE;\n const modeConfig = config.modes[selected];\n if (modeConfig === undefined) {\n const supported = SPAWN_MODES.filter((name) => config.modes[name] !== undefined);\n throw new Error(\n `Agent \"${config.agentId}\" does not support mode \"${selected}\". Supported modes: ${supported.join(\", \")}.`\n );\n }\n return resolveModeConfig(modeConfig);\n}\n\nexport interface McpSpawnServer {\n command: string;\n args?: string[];\n env?: Record<string, string>;\n /**\n * Whether Codex should automatically approve tools exposed by this explicitly configured server.\n * Defaults to true so headless read/edit spawns can use caller-trusted MCP tools.\n */\n autoApprove?: boolean;\n /**\n * Maximum time in seconds the agent should wait for a single tool call\n * to this MCP server before timing out. Omit to use the agent's default.\n */\n timeout?: number;\n}\n\nexport type McpSpawnConfig = Record<string, McpSpawnServer>;\n\nexport interface McpFileSpec {\n relativePath: string;\n content: (servers: McpSpawnConfig) => Record<string, unknown>;\n}\n\nexport type OtelSpan = {\n setAttribute(key: string, value: unknown): void;\n addEvent(name: string, attrs: Record<string, unknown>): void;\n end(): void;\n};\n\nexport interface OtelSink {\n startSpan(name: string, attrs: Record<string, unknown>): OtelSpan;\n recordException(span: ReturnType<OtelSink[\"startSpan\"]>, error: unknown): void;\n}\n\nexport interface HookBridgeOptions {\n from: string;\n strategy?: \"auto\" | \"symlink\" | \"transform\";\n scope?: \"project\" | \"user\" | \"merged\";\n}\n\nexport interface SpawnOptions {\n prompt: string;\n cwd?: string;\n model?: string;\n mode?: SpawnMode;\n args?: string[];\n mcpServers?: McpSpawnConfig;\n /** Skill references to bridge into the spawned agent for this run. */\n skills?: string[];\n /** Hooks to bridge from another agent configuration for this run. */\n hooks?: HookBridgeOptions;\n /** Resume a prior provider thread/session before sending the prompt. */\n resumeThreadId?: string;\n useStdin?: boolean;\n interactive?: boolean;\n signal?: AbortSignal;\n otelSink?: OtelSink;\n /** Capture native OTLP telemetry emitted by the spawned agent. */\n captureOtel?: boolean;\n /** Include prompt and tool content in native OTLP telemetry. */\n captureOtelContent?: boolean;\n /** Additional environment passed to the spawned agent. */\n env?: SpawnEnvironment;\n middlewares?: AcpMiddleware[];\n tee?: {\n stdout?: { write(chunk: string): void };\n stderr?: { write(chunk: string): void };\n };\n /**\n * Kill the spawned process after this many milliseconds of inactivity (no stdout data).\n * Resets on every chunk of stdout/stderr received. Disabled when undefined.\n */\n activityTimeoutMs?: number;\n /**\n * Full path for the spawn log file. When set, stdout (and stderr for CLI spawns)\n * are appended to this file, and the absolute path is returned in `SpawnResult.logFile`.\n * Takes precedence over `logDir` + `logFileName`.\n */\n logPath?: string;\n /**\n * Directory for the spawn log file. When set together with `logFileName`, stdout\n * (and stderr for CLI spawns) are appended to `<logDir>/<logFileName>`, and the\n * absolute path is returned in `SpawnResult.logFile`.\n */\n logDir?: string;\n /** Overrides the auto-generated log filename. Must be used together with `logDir`. */\n logFileName?: string;\n /** Per-invocation runtime/runner config overrides. */\n runtime?: RuntimeOverrideOptions[\"runtime\"];\n /** Docker image override for docker runtime. */\n runtimeImage?: string;\n /** Directory used to load runtime config/templates when different from cwd. */\n runtimeConfigCwd?: string;\n /** Run through a detached runtime job when the backend supports it. */\n detach?: boolean;\n /** Mount the local poe-code checkout into the runtime for development. */\n mountPoeCode?: boolean;\n /** Override runner workspace sync behavior. */\n runnerSync?: RuntimeOverrideOptions[\"runnerSync\"];\n}\n\nexport interface SpawnUsage {\n inputTokens: number;\n outputTokens: number;\n cachedTokens?: number;\n costUsd?: number;\n}\n\nexport interface SpawnResult {\n stdout: string;\n stderr: string;\n exitCode: number;\n durationMs?: number;\n threadId?: string;\n usage?: SpawnUsage;\n logFile?: string;\n detached?: { jobId: string; envId: string };\n}\n\nexport interface AutonomousResult {\n summary?: string;\n log?: string;\n output?: string;\n stdout?: string;\n text?: string;\n logFile?: string;\n toolCalls?: unknown[];\n sessionResult?: {\n toolCalls?: unknown[];\n };\n}\n\nexport interface SpawnLogger {\n dryRun(message: string): void;\n}\n\nexport interface SpawnContext {\n dryRun?: boolean;\n logger?: SpawnLogger;\n homeDir?: string;\n state?: StateManager;\n}\n\nexport interface StdinMode {\n omitPrompt: boolean;\n extraArgs: string[];\n automaticFallback?: boolean;\n}\n\nexport interface InteractiveSpawnConfig {\n defaultArgs: string[];\n defaultArgsPosition?: \"beforePrompt\" | \"afterPrompt\";\n promptFlag?: string;\n}\n\nexport interface CliSpawnConfig {\n kind: \"cli\";\n agentId: string;\n adapter: AdapterType;\n promptFlag?: string;\n defaultArgs: string[];\n defaultArgsPosition?: \"beforePrompt\" | \"afterPrompt\";\n modes: SpawnModesConfig;\n stdinMode?: StdinMode;\n modelFlag?: string;\n /**\n * Controls whether the provider prefix is stripped from model IDs before passing to the CLI binary.\n *\n * When `true`: \"anthropic/claude-opus-4.6\" \u2192 \"claude-opus-4.6\", \"openai/gpt-5.2\" \u2192 \"gpt-5.2\"\n * When `false`: \"anthropic/claude-opus-4.6\" stays as-is, \"openai/gpt-5.2\" stays as-is\n *\n * Most CLI binaries only accept bare model IDs (e.g. `claude --model claude-opus-4.6`),\n * so they need `true`. OpenCode routes through poe and needs the full provider path, so it uses `false`.\n */\n modelStripProviderPrefix: boolean;\n /** Transform model ID before passing to CLI. Runs after provider prefix stripping (if enabled). */\n modelTransform?: (model: string) => string;\n /**\n * Transforms MCP server config into CLI args for this agent.\n * Presence of this function declares spawn-time MCP support.\n */\n mcpArgs?: (servers: McpSpawnConfig) => string[];\n /**\n * Transforms MCP server config into env vars for this agent.\n * Use instead of `mcpArgs` when the agent reads MCP config from the environment.\n */\n mcpEnv?: (servers: McpSpawnConfig) => Record<string, string>;\n mcpFile?: McpFileSpec;\n /**\n * Controls where serialized MCP args are inserted relative to the command.\n *\n * - \"beforeCommand\": before the prompt/subcommand section (e.g. `codex -c ... exec \"prompt\"`)\n * - \"beforePrompt\": after `defaultArgs` but before the prompt/model section\n * - \"afterCommand\": after `defaultArgs` (default)\n */\n mcpArgsPosition?: \"beforeCommand\" | \"beforePrompt\" | \"afterCommand\";\n /**\n * @deprecated Prefer `mcpArgsPosition`.\n * When true, MCP args are placed before the subcommand (e.g. `codex -c ... exec \"prompt\"`).\n * When false/undefined, they are placed after defaultArgs (e.g. `claude -p \"prompt\" --mcp-servers ...`).\n */\n mcpArgsBeforeCommand?: boolean;\n interactive?: InteractiveSpawnConfig;\n resume?: ResumeSpec;\n}\n\nexport interface ResumeSpec {\n /** Args injected into the live spawn for non-interactive resume. */\n args: (threadId: string, cwd: string) => string[];\n /** Position of `args` relative to the prompt token. Default `afterPrompt`. */\n position?: \"beforePrompt\" | \"afterPrompt\";\n /**\n * Some CLIs implement resume as a subcommand under the normal prompt command\n * and require command options before the resume token.\n */\n commandOptionsPosition?: \"beforeResume\";\n /**\n * Optional override for the printed copy-paste resume hint (e.g. an interactive\n * shell command). When omitted, the hint composes binaryName + `args`.\n */\n hintArgs?: (threadId: string, cwd: string) => string[];\n}\n\nexport interface FileSpawnConfig {\n kind: \"file\";\n agentId: string;\n launchCommand?: string;\n launchArgs?: string[];\n}\n\nexport interface AcpSpawnConfig {\n kind: \"acp\";\n agentId: string;\n /** Args passed to the agent binary to start its ACP server (e.g. [\"acp\"]). */\n acpArgs:\n | string[]\n | ((options: { model?: string; mode?: SpawnMode; mcpServers?: McpSpawnConfig }) => string[]);\n /** Environment variables required by the ACP server process. */\n env?: Record<string, string>;\n /** Whether to skip the ACP authenticate step (workaround for servers that advertise but don't implement auth). */\n skipAuth?: boolean;\n /** Whether MCP servers may be forwarded through ACP sessions. Defaults to true. */\n supportsMcpServers?: boolean;\n /** MCP server env serializer, same as CliSpawnConfig. */\n mcpEnv?: (servers: McpSpawnConfig) => Record<string, string>;\n}\n\nexport type SpawnConfig = CliSpawnConfig | FileSpawnConfig | AcpSpawnConfig;\n", "import { DEFAULT_SPAWN_MODE, type AcpSpawnConfig, type SpawnMode } from \"../types.js\";\n\nconst geminiApprovalModes: Record<SpawnMode, string> = {\n yolo: \"yolo\",\n auto: \"default\",\n edit: \"auto_edit\",\n read: \"plan\"\n};\n\nexport const geminiCliAcpSpawnConfig: AcpSpawnConfig = {\n kind: \"acp\",\n agentId: \"gemini-cli\",\n acpArgs: ({ model, mode, mcpServers }) => [\n \"--acp\",\n ...(model ? [\"--model\", model] : []),\n ...(mcpServers ? [\"--allowed-mcp-server-names\", Object.keys(mcpServers).join(\",\")] : []),\n ...(mcpServers ? [\"--skip-trust\"] : []),\n \"--approval-mode\",\n geminiApprovalModes[mode ?? DEFAULT_SPAWN_MODE]\n ],\n env: {\n GEMINI_SANDBOX: \"false\"\n },\n skipAuth: true\n};\n", "import type { CliSpawnConfig } from \"../types.js\";\nimport { toJsonMcpServers } from \"./mcp.js\";\n\nexport const cursorSpawnConfig: CliSpawnConfig = {\n kind: \"cli\",\n agentId: \"cursor\",\n adapter: \"cursor\",\n promptFlag: \"-p\",\n modelFlag: \"--model\",\n modelStripProviderPrefix: true,\n modelTransform: (model) =>\n model.startsWith(\"claude-opus-\") ||\n model.startsWith(\"claude-sonnet-\") ||\n model.startsWith(\"claude-haiku-\")\n ? model.replaceAll(\".\", \"-\")\n : model,\n defaultArgs: [\"--output-format\", \"stream-json\", \"--trust\", \"--approve-mcps\"],\n defaultArgsPosition: \"beforePrompt\",\n modes: {\n // No auto: cursor-agent print mode has no approval channel.\n yolo: [\"--force\", \"--sandbox\", \"disabled\"],\n edit: [\"--force\"],\n read: [\"--mode\", \"plan\"]\n },\n stdinMode: { omitPrompt: true, extraArgs: [] },\n mcpFile: {\n relativePath: \".cursor/mcp.json\",\n content: (servers) => ({ mcpServers: toJsonMcpServers(servers) })\n },\n interactive: { defaultArgs: [] },\n resume: {\n args: (threadId) => [\"--resume\", threadId],\n position: \"beforePrompt\"\n }\n};\n", "import type { CliSpawnConfig } from \"../types.js\";\n\nconst ALL_BUILTIN_TOOLS = \"read,bash,edit,write,grep,find,ls\";\nconst EDIT_TOOLS = \"read,edit,write,grep,find,ls\";\nconst READ_ONLY_TOOLS = \"read,grep,find,ls\";\n\nexport const piSpawnConfig: CliSpawnConfig = {\n kind: \"cli\",\n agentId: \"pi\",\n adapter: \"pi\",\n defaultArgs: [\"--mode\", \"json\", \"--print\"],\n defaultArgsPosition: \"beforePrompt\",\n modelFlag: \"--model\",\n modelStripProviderPrefix: false,\n modes: {\n yolo: [\"--tools\", ALL_BUILTIN_TOOLS, \"--approve\"],\n edit: [\"--tools\", EDIT_TOOLS, \"--no-approve\"],\n read: [\"--tools\", READ_ONLY_TOOLS, \"--no-approve\"]\n },\n stdinMode: {\n omitPrompt: true,\n extraArgs: []\n },\n interactive: {\n defaultArgs: []\n },\n resume: {\n args: (threadId) => [\"--session\", threadId],\n position: \"beforePrompt\"\n }\n};\n", "import { allAgents, resolveAgentId, type AgentDefinition } from \"@poe-code/agent-defs\";\nimport type { AcpSpawnConfig, SpawnConfig, SpawnMode } from \"../types.js\";\nimport { claudeCodeSpawnConfig } from \"./claude-code.js\";\nimport { codexSpawnConfig } from \"./codex.js\";\nimport { openCodeSpawnConfig, openCodeAcpSpawnConfig } from \"./opencode.js\";\nimport { kimiSpawnConfig, kimiAcpSpawnConfig } from \"./kimi.js\";\nimport { gooseSpawnConfig, gooseAcpSpawnConfig } from \"./goose.js\";\nimport { geminiCliAcpSpawnConfig } from \"./gemini-cli.js\";\nimport { cursorSpawnConfig } from \"./cursor.js\";\nimport { piSpawnConfig } from \"./pi.js\";\n\nexport interface SpawnableAgent {\n id: string;\n name: string;\n label: string;\n summary: string;\n aliases: string[];\n binaryName?: string;\n supportsStdinPrompt: boolean;\n supportsMcpSpawn: boolean;\n config?: SpawnConfig;\n acpConfig?: AcpSpawnConfig;\n}\n\nfunction freezeConfig<T extends SpawnConfig | AcpSpawnConfig>(config: T): T {\n freezeValue(config);\n return config;\n}\n\nfunction freezeValue(value: unknown): void {\n if (!value || typeof value !== \"object\" || Object.isFrozen(value)) {\n return;\n }\n\n for (const nested of Object.values(value)) {\n freezeValue(nested);\n }\n Object.freeze(value);\n}\n\n// ACP adapter support (spawn streaming):\n// - Supported (has `adapter`): claude-code, codex, opencode, kimi, goose\nexport const allSpawnConfigs: readonly SpawnConfig[] = Object.freeze([\n freezeConfig(claudeCodeSpawnConfig),\n freezeConfig(codexSpawnConfig),\n freezeConfig(cursorSpawnConfig),\n freezeConfig(piSpawnConfig),\n freezeConfig(openCodeSpawnConfig),\n freezeConfig(kimiSpawnConfig),\n freezeConfig(gooseSpawnConfig)\n]);\n\nconst lookup = new Map<string, SpawnConfig>();\n\nfor (const config of allSpawnConfigs) {\n lookup.set(config.agentId, config);\n}\n\nconst acpLookup = new Map<string, AcpSpawnConfig>();\nacpLookup.set(openCodeAcpSpawnConfig.agentId, freezeConfig(openCodeAcpSpawnConfig));\nacpLookup.set(kimiAcpSpawnConfig.agentId, freezeConfig(kimiAcpSpawnConfig));\nacpLookup.set(gooseAcpSpawnConfig.agentId, freezeConfig(gooseAcpSpawnConfig));\nacpLookup.set(geminiCliAcpSpawnConfig.agentId, freezeConfig(geminiCliAcpSpawnConfig));\n\nexport function getSpawnConfig(input: string): SpawnConfig | undefined {\n const resolvedId = resolveAgentId(input);\n if (!resolvedId) {\n return undefined;\n }\n return lookup.get(resolvedId);\n}\n\nexport function getAcpSpawnConfig(input: string): AcpSpawnConfig | undefined {\n const resolvedId = resolveAgentId(input);\n if (!resolvedId) {\n return undefined;\n }\n return acpLookup.get(resolvedId);\n}\n\n/**\n * CLI agents support a mode when their spawn config defines it. ACP and custom\n * spawn paths have a live permission channel, so every mode is accepted there.\n */\nexport function supportsSpawnMode(input: string, mode: SpawnMode): boolean {\n const config = getSpawnConfig(input);\n if (config && config.kind === \"cli\") {\n return config.modes[mode] !== undefined;\n }\n return true;\n}\n\nexport function supportsMcpAtSpawn(input: string): boolean {\n const config = getSpawnConfig(input);\n return (\n !!config &&\n config.kind === \"cli\" &&\n (typeof config.mcpArgs === \"function\" ||\n typeof config.mcpEnv === \"function\" ||\n config.mcpFile !== undefined)\n );\n}\n\nexport function listMcpSupportedAgents(): string[] {\n const supported: string[] = [];\n\n for (const config of allSpawnConfigs) {\n if (\n config.kind !== \"cli\" ||\n (typeof config.mcpArgs !== \"function\" &&\n typeof config.mcpEnv !== \"function\" &&\n config.mcpFile === undefined)\n ) {\n continue;\n }\n supported.push(config.agentId);\n }\n\n return supported;\n}\n\nfunction agentSupportsStdinPrompt(config: SpawnConfig | undefined): boolean {\n return config?.kind === \"cli\" && config.stdinMode !== undefined;\n}\n\nfunction toSpawnableAgent(agent: AgentDefinition): SpawnableAgent | undefined {\n const config = lookup.get(agent.id);\n const acpConfig = acpLookup.get(agent.id);\n if (!config && !acpConfig) {\n return undefined;\n }\n\n return {\n id: agent.id,\n name: agent.name,\n label: agent.label,\n summary: agent.summary,\n aliases: [...(agent.aliases ?? [])],\n ...(agent.binaryName !== undefined ? { binaryName: agent.binaryName } : {}),\n supportsStdinPrompt: agentSupportsStdinPrompt(config),\n supportsMcpSpawn: supportsMcpAtSpawn(agent.id),\n ...(config ? { config } : {}),\n ...(acpConfig ? { acpConfig } : {})\n };\n}\n\nexport function listSpawnableAgents(): readonly SpawnableAgent[] {\n const agents: SpawnableAgent[] = [];\n for (const agent of allAgents) {\n const spawnable = toSpawnableAgent(agent);\n if (spawnable) agents.push(spawnable);\n }\n return Object.freeze(agents);\n}\n\nexport function resolveSpawnableAgent(input: string): SpawnableAgent | undefined {\n const resolvedId = resolveAgentId(input);\n if (!resolvedId) return undefined;\n const agent = allAgents.find((candidate) => candidate.id === resolvedId);\n return agent ? toSpawnableAgent(agent) : undefined;\n}\n", "import type { AcpEvent } from \"./acp/types.js\";\nimport type { SpawnHandle } from \"./retry.js\";\n\nexport type SpawnParallelTuple<TService, TOptions> = readonly [\n service: TService,\n options: TOptions\n];\n\nexport type SpawnParallelThunk<TResult extends { exitCode: number }> = (\n signal?: AbortSignal\n) => SpawnHandle<TResult>;\n\nexport type SpawnParallelCall<TService, TOptions, TResult extends { exitCode: number }> =\n | SpawnParallelTuple<TService, TOptions>\n | SpawnParallelThunk<TResult>;\n\nexport type SpawnParallelOptions = {\n check?: boolean;\n maxConcurrent?: number;\n failFast?: boolean;\n signal?: AbortSignal;\n};\n\nexport class SpawnParallelError<TResult extends { exitCode: number }> extends Error {\n readonly index: number;\n readonly result: TResult;\n readonly results: Array<TResult | undefined>;\n\n constructor(index: number, result: TResult, results: Array<TResult | undefined>) {\n super(`spawn.parallel call ${index} failed with exit code ${result.exitCode}.`);\n this.name = \"SpawnParallelError\";\n this.index = index;\n this.result = result;\n this.results = results;\n }\n}\n\nexport function createSpawnParallel<\n TService,\n TOptions extends { signal?: AbortSignal },\n TResult extends { exitCode: number }\n>(\n spawnOnce: (service: TService, options: TOptions) => SpawnHandle<TResult>\n): (\n calls: Array<SpawnParallelCall<TService, TOptions, TResult>>,\n options?: SpawnParallelOptions\n) => Promise<TResult[]> {\n return async function parallel(calls, options = {}) {\n const maxConcurrent = normalizeMaxConcurrent(options.maxConcurrent);\n const failFast = options.failFast ?? true;\n const requestedCheck = Object.hasOwn(options, \"check\") ? options.check : undefined;\n const check = requestedCheck === undefined ? failFast : requestedCheck;\n if (typeof check !== \"boolean\") {\n throw new Error(\"spawn.parallel check must be a boolean.\");\n }\n if (calls.length === 0) {\n return [];\n }\n const group = new AbortController();\n const results: Array<TResult | undefined> = new Array(calls.length);\n const errors: unknown[] = [];\n let nextIndex = 0;\n let primaryFailure: { reason: unknown } | undefined;\n\n const removeParentAbort = linkParentAbort(options.signal, group, (error) => {\n primaryFailure ??= { reason: error };\n });\n\n const worker = async () => {\n while (primaryFailure === undefined) {\n const index = nextIndex;\n nextIndex += 1;\n\n if (index >= calls.length) {\n return;\n }\n\n try {\n const result = await runParallelCall(calls[index], spawnOnce, group.signal);\n results[index] = result;\n\n if (check && failFast && result.exitCode !== 0) {\n const error = new SpawnParallelError(index, result, results);\n primaryFailure ??= { reason: error };\n group.abort(error);\n return;\n }\n } catch (error) {\n if (failFast || group.signal.aborted) {\n primaryFailure ??= { reason: error };\n group.abort(error);\n return;\n }\n\n errors.push(error);\n }\n }\n };\n\n try {\n await Promise.allSettled(\n Array.from({ length: Math.min(maxConcurrent, calls.length) }, () => worker())\n );\n } finally {\n removeParentAbort();\n }\n\n if (primaryFailure !== undefined) {\n throw primaryFailure.reason;\n }\n\n if (errors.length > 0) {\n throw new AggregateError(\n errors,\n \"spawn.parallel failed before every call returned a result.\"\n );\n }\n\n if (check) {\n const failedIndex = results.findIndex(\n (result) => result !== undefined && result.exitCode !== 0\n );\n if (failedIndex >= 0) {\n throw new SpawnParallelError(failedIndex, results[failedIndex]!, results);\n }\n }\n\n return results as TResult[];\n };\n}\n\nasync function runParallelCall<\n TService,\n TOptions extends { signal?: AbortSignal },\n TResult extends { exitCode: number }\n>(\n call: SpawnParallelCall<TService, TOptions, TResult>,\n spawnOnce: (service: TService, options: TOptions) => SpawnHandle<TResult>,\n signal: AbortSignal\n): Promise<TResult> {\n throwIfAborted(signal);\n\n if (typeof call === \"function\") {\n const handle = call(signal);\n const [result] = await Promise.all([handle.result, drainEvents(handle.events)]);\n return result;\n }\n\n if (!isSpawnTuple(call)) {\n throw new Error(\"spawn.parallel calls must be [service, options] tuples or spawn thunks.\");\n }\n\n const { options, cleanup } = withAbortSignal(call[1], signal);\n try {\n const handle = spawnOnce(call[0], options);\n const [result] = await Promise.all([handle.result, drainEvents(handle.events)]);\n return result;\n } finally {\n cleanup();\n }\n}\n\nasync function drainEvents(events: AsyncIterable<AcpEvent>): Promise<void> {\n for await (const ignoredEvent of events) {\n void ignoredEvent;\n // Drain the stream so streaming providers can complete while parallel returns results only.\n }\n}\n\nfunction normalizeMaxConcurrent(maxConcurrent: number | undefined): number {\n const value = maxConcurrent ?? 4;\n if (!Number.isInteger(value) || value < 1) {\n throw new Error(\"spawn.parallel maxConcurrent must be an integer greater than or equal to 1.\");\n }\n return value;\n}\n\nfunction isSpawnTuple<TService, TOptions>(\n call: SpawnParallelCall<TService, TOptions, { exitCode: number }>\n): call is SpawnParallelTuple<TService, TOptions> {\n return Array.isArray(call) && call.length === 2;\n}\n\nfunction withAbortSignal<TOptions extends { signal?: AbortSignal }>(\n options: TOptions,\n signal: AbortSignal\n): { options: TOptions; cleanup(): void } {\n if (!options.signal) {\n return {\n options: { ...options, signal },\n cleanup() {}\n };\n }\n\n const controller = new AbortController();\n const callSignal = options.signal;\n const abortGroup = () => controller.abort(signal.reason);\n const abortCall = () => controller.abort(callSignal.reason);\n\n if (signal.aborted) {\n abortGroup();\n } else if (callSignal.aborted) {\n abortCall();\n } else {\n signal.addEventListener(\"abort\", abortGroup, { once: true });\n callSignal.addEventListener(\"abort\", abortCall, { once: true });\n }\n\n return {\n options: { ...options, signal: controller.signal },\n cleanup() {\n signal.removeEventListener(\"abort\", abortGroup);\n callSignal.removeEventListener(\"abort\", abortCall);\n }\n };\n}\n\nfunction linkParentAbort(\n parentSignal: AbortSignal | undefined,\n group: AbortController,\n setFailure: (error: unknown) => void\n): () => void {\n if (!parentSignal) {\n return () => {};\n }\n\n const abort = () => {\n const error = parentSignal.reason;\n setFailure(error);\n group.abort(error);\n };\n\n if (parentSignal.aborted) {\n abort();\n return () => {};\n }\n\n parentSignal.addEventListener(\"abort\", abort, { once: true });\n return () => parentSignal.removeEventListener(\"abort\", abort);\n}\n\nfunction throwIfAborted(signal: AbortSignal): void {\n if (signal.aborted) {\n throw signal.reason;\n }\n}\n", "export class HarnessFailure extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"HarnessFailure\";\n }\n}\n\nexport function makeFailModule(): {\n default: (message: string) => never;\n} {\n function fail(message: string): never {\n throw new HarnessFailure(readNonEmptyString(message, \"Harness failure message\"));\n }\n\n return {\n default: fail\n };\n}\n\nfunction readNonEmptyString(value: unknown, label: string): string {\n if (typeof value !== \"string\") {\n throw new Error(`${label} must be a non-empty string.`);\n }\n\n if (value.trim().length === 0) {\n throw new Error(`${label} must be a non-empty string.`);\n }\n\n return value;\n}\n", "import { constants as nodeFsConstants, type Dirent, type PathLike, type Stats } from \"node:fs\";\nimport * as nodeFsPromises from \"node:fs/promises\";\nimport { dirname, isAbsolute, resolve } from \"node:path\";\nimport { inspect } from \"node:util\";\nimport * as nodeUtil from \"node:util\";\n\nimport { declareHostOperation } from \"../interp/host-bridge.js\";\nimport {\n type CanonicalPathFs,\n containsPath,\n resolveCanonicalPath,\n type Stat\n} from \"./canonical-path.js\";\nimport type { PendingHostCallPolicyMode } from \"../snapshot/policy.js\";\n\ntype FsOperationName =\n | \"access\"\n | \"appendFile\"\n | \"chmod\"\n | \"copyFile\"\n | \"cp\"\n | \"link\"\n | \"lstat\"\n | \"mkdir\"\n | \"mkdtemp\"\n | \"readFile\"\n | \"readdir\"\n | \"readlink\"\n | \"realpath\"\n | \"rename\"\n | \"rm\"\n | \"rmdir\"\n | \"stat\"\n | \"symlink\"\n | \"truncate\"\n | \"utimes\"\n | \"writeFile\";\n\n// Operations whose node result already crosses into the sandbox unchanged.\ntype FsPassthroughName = Exclude<\n FsOperationName,\n \"lstat\" | \"mkdtemp\" | \"readFile\" | \"readdir\" | \"readlink\" | \"realpath\" | \"stat\"\n>;\n\n// Whether node answers with a Buffer when an encoding is not given: readFile\n// defaults to a Buffer, while readdir, readlink, realpath, and mkdtemp default to\n// utf8 yet still answer with one for a buffer encoding.\nconst BUFFER_BY_DEFAULT = {\n readFile: true,\n readdir: false,\n readlink: false,\n realpath: false,\n mkdtemp: false\n} as const;\n\n// Why each option node declares cannot be honoured here, written once for every\n// operation that declares it.\nconst REFUSED_OPTION_REASONS = {\n signal:\n \"the sandbox has no AbortController, and cancelling a run is the host's to request rather than the script's\",\n // @types/node declares this on fs/promises stat and lstat and types\n // `throwIfNoEntry: false` as answering `Stats | undefined`, but the typings are\n // ahead of node: only the synchronous API reads the option. Forwarding it would\n // leave a script holding the ENOENT rejection the typings told it to expect\n // undefined for, so it is refused rather than dropped.\n throwIfNoEntry:\n \"only node's synchronous stat reads it and fs/promises rejects a missing path whatever it says, so catch the ENOENT rejection instead\",\n // cp's filter is a callback the host would invoke, which a sandbox closure can cross the\n // bridge to serve. It is refused for what happens around the call rather than during it:\n // the digest that identifies a host call across a snapshot is built by stringifying the\n // arguments, and a function does not survive that, so cp(filter: keep) and\n // cp(filter: drop) are one call to the resume machinery.\n filter:\n \"a closure is dropped from the digest that identifies a host call across a snapshot, so a resumed run could reconcile against a copy that took a different set of files, and under a root it would read the rewritten host paths rather than the ones the script wrote \u2014 walk the tree with readdir and copy the entries you want instead\"\n} as const;\n\nconst UNKNOWN_OPTION_REASON =\n \"node declares no such option for it, and an unrecognised option is refused rather than silently ignored\";\n\n// Refused by the root rather than by the module, so it is kept apart from the refusals\n// above: with no root there is no boundary to cross and node's own option is honoured.\n//\n// cp is the one operation that reads a whole tree in a single call, which makes it the one\n// whose src and dest are not the only paths it touches. Those two are canonicalized and\n// proven inside root; a symlink nested inside the tree is never seen. With dereference node\n// copies what such a link points at rather than the link, landing content from outside root\n// inside it under a name every later check reads as contained \u2014 so the option would hand a\n// script the reads the root exists to refuse. Without dereference the link is copied as a\n// link, which stays unreadable, so only this option is refused.\nconst ROOT_REFUSED_DEREFERENCE_REASON =\n \"a root canonicalizes cp's src and dest but never the paths nested inside the tree, so node would copy an escaping link's target inside root where the script could read it \u2014 copy without dereference and a nested link stays a link the root still refuses to read through\";\n\ntype FsOptionSurface = {\n // Which argument node reads the options bag from.\n readonly argument: number;\n readonly honoured: readonly string[];\n readonly refused: readonly (keyof typeof REFUSED_OPTION_REASONS)[];\n};\n\n// Every operation node gives an options bag, the argument it reads the bag from,\n// and each option split into the ones forwarded to node untouched and the ones\n// refused by name. An option node honours and this table omits is refused as\n// unknown, so a silently ignored option is not reachable; the audit in\n// fs.option-surface.test.ts proves the split covers node's own typings, which is\n// what keeps a handle, stream, or watcher option node adds later from passing\n// through unclassified.\n//\n// The operations absent here are the ones node gives no options bag: access,\n// chmod, copyFile, truncate, and utimes read a trailing mode, length, or time\n// that node validates itself, and link, rename, and symlink take paths alone.\n//\n// rmdir carries maxRetries and retryDelay because node validates both (its\n// recursive option is deprecated but still honoured), even though @types/node has\n// already dropped rmdir's options argument for a future node that removes them.\nexport const FS_OPTION_SURFACE: Record<\n | \"appendFile\"\n | \"cp\"\n | \"lstat\"\n | \"mkdir\"\n | \"mkdtemp\"\n | \"readFile\"\n | \"readdir\"\n | \"readlink\"\n | \"realpath\"\n | \"rm\"\n | \"rmdir\"\n | \"stat\"\n | \"writeFile\",\n FsOptionSurface\n> = {\n appendFile: {\n argument: 2,\n honoured: [\"encoding\", \"mode\", \"flag\", \"flush\"],\n // node's appendFile forwards to writeFile, so it honours a signal even though\n // @types/node does not declare one for it.\n refused: [\"signal\"]\n },\n // node reads cp's bag from a parameter it names opts rather than options, and validates\n // every key it knows \u2014 while still ignoring one it does not, which is what the unknown\n // refusal covers. mode is copyFile's flag set rather than a permission.\n cp: {\n argument: 2,\n honoured: [\n \"dereference\",\n \"errorOnExist\",\n \"force\",\n \"mode\",\n \"preserveTimestamps\",\n \"recursive\",\n \"verbatimSymlinks\"\n ],\n refused: [\"filter\"]\n },\n lstat: { argument: 1, honoured: [\"bigint\"], refused: [\"throwIfNoEntry\"] },\n mkdir: { argument: 1, honoured: [\"recursive\", \"mode\"], refused: [] },\n mkdtemp: { argument: 1, honoured: [\"encoding\"], refused: [] },\n readFile: { argument: 1, honoured: [\"encoding\", \"flag\"], refused: [\"signal\"] },\n readdir: { argument: 1, honoured: [\"encoding\", \"withFileTypes\", \"recursive\"], refused: [] },\n readlink: { argument: 1, honoured: [\"encoding\"], refused: [] },\n realpath: { argument: 1, honoured: [\"encoding\"], refused: [] },\n rm: { argument: 1, honoured: [\"force\", \"recursive\", \"maxRetries\", \"retryDelay\"], refused: [] },\n rmdir: { argument: 1, honoured: [\"recursive\", \"maxRetries\", \"retryDelay\"], refused: [] },\n stat: { argument: 1, honoured: [\"bigint\"], refused: [\"throwIfNoEntry\"] },\n writeFile: { argument: 2, honoured: [\"encoding\", \"mode\", \"flag\", \"flush\"], refused: [\"signal\"] }\n};\n\nconst STAT_NUMBER_FIELDS = [\n \"dev\",\n \"mode\",\n \"nlink\",\n \"uid\",\n \"gid\",\n \"rdev\",\n \"blksize\",\n \"ino\",\n \"size\",\n \"blocks\",\n \"atimeMs\",\n \"mtimeMs\",\n \"ctimeMs\",\n \"birthtimeMs\"\n] as const;\n\nconst FILE_TYPE_PREDICATES = [\n \"isFile\",\n \"isDirectory\",\n \"isSymbolicLink\",\n \"isBlockDevice\",\n \"isCharacterDevice\",\n \"isFIFO\",\n \"isSocket\"\n] as const;\n\n// node compares this encoding name case-sensitively; any other casing is an\n// invalid encoding node rejects on its own.\nconst BUFFER_ENCODING = \"buffer\";\n\n// The syscall node blames when each operation fails, read back from node itself:\n// several do not match the fs function name, so they cannot be derived from it.\nconst FS_SYSCALLS = {\n access: \"access\",\n appendFile: \"open\",\n chmod: \"chmod\",\n copyFile: \"copyfile\",\n // node's cp is its own JavaScript layer rather than a syscall wrapper, so it blames the\n // fs function by name: its ERR_FS_CP_* errors carry syscall 'cp'.\n cp: \"cp\",\n link: \"link\",\n lstat: \"lstat\",\n mkdir: \"mkdir\",\n mkdtemp: \"mkdtemp\",\n readFile: \"open\",\n readdir: \"scandir\",\n readlink: \"readlink\",\n realpath: \"realpath\",\n rename: \"rename\",\n rm: \"lstat\",\n rmdir: \"rmdir\",\n stat: \"stat\",\n symlink: \"symlink\",\n truncate: \"open\",\n utimes: \"utime\",\n writeFile: \"open\"\n} as const satisfies Record<FsOperationName, string>;\n\n// The name node blames when an operation's path argument is invalid, read back\n// from node itself: several do not match the fs function name \u2014 readlink blames\n// oldPath and mkdtemp blames prefix. Listed in node's own argument order, so the\n// length also says how many leading arguments are paths, and every one of them is\n// resolved against root and proven inside it.\n//\n// The two-path operations are the ones node reports with a dest field beside path,\n// cp excepted: it raises its own ERR_FS_CP_* errors, which carry a path alone. A\n// root denial for cp still names both paths, which is SafeJS's own shape rather\n// than an imitation of node's \u2014 the denial reports the call that was refused, and\n// node's cp has no error to copy here because it never refuses one for a root.\nconst FS_PATH_ARGUMENTS = {\n access: [\"path\"],\n appendFile: [\"path\"],\n chmod: [\"path\"],\n copyFile: [\"src\", \"dest\"],\n // node blames these by the same names it uses for copyFile's two paths.\n cp: [\"src\", \"dest\"],\n link: [\"existingPath\", \"newPath\"],\n lstat: [\"path\"],\n mkdir: [\"path\"],\n mkdtemp: [\"prefix\"],\n readFile: [\"path\"],\n readdir: [\"path\"],\n readlink: [\"oldPath\"],\n realpath: [\"path\"],\n rename: [\"oldPath\", \"newPath\"],\n rm: [\"path\"],\n rmdir: [\"path\"],\n stat: [\"path\"],\n symlink: [\"target\", \"path\"],\n truncate: [\"path\"],\n utimes: [\"path\"],\n writeFile: [\"path\"]\n} as const satisfies Record<FsOperationName, readonly string[]>;\n\nconst ACCESS_DENIED_CODE = \"EACCES\";\n\nconst INVALID_ARGUMENT_CODE = \"ERR_INVALID_ARG_VALUE\";\n\nconst INVALID_ARGUMENT_TYPE_CODE = \"ERR_INVALID_ARG_TYPE\";\n\nconst NULL_BYTE = \"\\u0000\";\n\n// libuv numbers errno differently per platform, so the errno and message paired\n// with EACCES come from node's own table rather than a hardcoded -13.\nconst [ACCESS_DENIED_ERRNO, ACCESS_DENIED_MESSAGE] = readSystemError(ACCESS_DENIED_CODE);\n\nexport type FsImplementation = Pick<typeof nodeFsPromises, FsOperationName>;\n\ntype FsHostOperation = (...args: readonly unknown[]) => unknown;\n\ntype FileTypePredicates = {\n readonly [Name in (typeof FILE_TYPE_PREDICATES)[number]]: () => boolean;\n};\n\nexport type SandboxStats = {\n readonly [Name in (typeof STAT_NUMBER_FIELDS)[number]]: number;\n} & FileTypePredicates;\n\nexport type SandboxDirent = {\n readonly name: string;\n readonly parentPath: string;\n} & FileTypePredicates;\n\ntype StringEncoding = NodeJS.BufferEncoding;\n\ntype EncodingOptions = StringEncoding | { encoding: StringEncoding };\n\ntype ReadFileOptions = StringEncoding | { encoding: StringEncoding; flag?: string };\n\ntype ReaddirOptions = {\n encoding?: StringEncoding;\n recursive?: boolean;\n};\n\ntype StatOptions = {\n bigint?: false;\n};\n\nexport type FsModuleOptions = {\n root?: string;\n fs?: FsImplementation;\n};\n\nexport type FsModule = Pick<FsImplementation, FsPassthroughName> & {\n readFile(path: PathLike, options: ReadFileOptions): Promise<string>;\n readlink(path: PathLike, options?: EncodingOptions): Promise<string>;\n realpath(path: PathLike, options?: EncodingOptions): Promise<string>;\n mkdtemp(prefix: string, options?: EncodingOptions): Promise<string>;\n readdir: {\n (path: PathLike, options: ReaddirOptions & { withFileTypes: true }): Promise<SandboxDirent[]>;\n (\n path: PathLike,\n options?: StringEncoding | (ReaddirOptions & { withFileTypes?: false })\n ): Promise<string[]>;\n };\n stat(path: PathLike, options?: StatOptions): Promise<SandboxStats>;\n lstat(path: PathLike, options?: StatOptions): Promise<SandboxStats>;\n constants: {\n F_OK: number;\n R_OK: number;\n W_OK: number;\n X_OK: number;\n COPYFILE_EXCL: number;\n };\n};\n\nexport function makeFsModule(options: FsModuleOptions = {}): FsModule {\n assertSupportedPlatform();\n\n const implementation = options.fs ?? nodeFsPromises;\n // Without a root the module is node's fs/promises untouched; a root turns every\n // path argument into one that has to resolve inside it.\n const fs =\n options.root === undefined ? implementation : makeRootedFs(implementation, options.root);\n\n return {\n access: bind(fs, \"access\", \"re-issue\"),\n appendFile: bind(fs, \"appendFile\", \"read-side-effect\"),\n chmod: bind(fs, \"chmod\", \"read-side-effect\"),\n copyFile: bind(fs, \"copyFile\", \"read-side-effect\"),\n cp: bind(fs, \"cp\", \"read-side-effect\"),\n link: bind(fs, \"link\", \"read-side-effect\"),\n lstat: bindStat(fs, \"lstat\"),\n mkdir: bind(fs, \"mkdir\", \"read-side-effect\"),\n // Creates a directory, so it cannot be re-issued on resume like the other\n // string-result operations, but its name still crosses as a Buffer for a buffer\n // encoding and so goes through the same guard.\n mkdtemp: bindStringResult(fs, \"mkdtemp\", \"read-side-effect\"),\n readFile: bindStringResult(fs, \"readFile\"),\n readdir: bindReaddir(fs),\n readlink: bindStringResult(fs, \"readlink\"),\n realpath: bindStringResult(fs, \"realpath\"),\n rename: bind(fs, \"rename\", \"read-side-effect\"),\n rm: bind(fs, \"rm\", \"read-side-effect\"),\n rmdir: bind(fs, \"rmdir\", \"read-side-effect\"),\n stat: bindStat(fs, \"stat\"),\n symlink: bind(fs, \"symlink\", \"read-side-effect\"),\n truncate: bind(fs, \"truncate\", \"read-side-effect\"),\n utimes: bind(fs, \"utimes\", \"read-side-effect\"),\n writeFile: bind(fs, \"writeFile\", \"read-side-effect\"),\n constants: {\n F_OK: nodeFsConstants.F_OK,\n R_OK: nodeFsConstants.R_OK,\n W_OK: nodeFsConstants.W_OK,\n X_OK: nodeFsConstants.X_OK,\n COPYFILE_EXCL: nodeFsConstants.COPYFILE_EXCL\n }\n };\n}\n\n// The module forwards node's error rather than translating it, which makes node's answer the\n// module's answer and node's answer the platform's. That holds across darwin and linux \u2014 the\n// errno differs, the code and the message do not \u2014 and stops holding on win32: node answers a\n// different code there, a path carries a drive letter root confinement has no rule for, and a\n// symlink needs a privilege a script cannot hold. Rather than half-support it, the module\n// refuses to build there, and refuses it here so an embedder is told before a script runs.\n//\n// Only win32 is named. Every other platform node runs on is POSIX and fails the way the\n// recorded two do, and a platform whose truth nobody has recorded is reported by the\n// conformance suite rather than guessed at by a guard here.\nfunction assertSupportedPlatform(): void {\n if (process.platform !== \"win32\") {\n return;\n }\n\n throw new Error(\n \"SafeJS's fs module does not support win32: node's fs answers a different code there (EPERM or UNKNOWN where darwin and linux answer EISDIR or ENOTEMPTY), a path carries a drive letter that root confinement has no rule for, and a symlink needs a privilege a script cannot hold. Run on darwin or linux, or build a host module for the surface you need.\"\n );\n}\n\nfunction bind<Name extends FsOperationName>(\n fs: FsImplementation,\n name: Name,\n policy: PendingHostCallPolicyMode\n): FsImplementation[Name] {\n return declare(name, policy, (...args: readonly unknown[]) =>\n invoke(fs, name, args)\n ) as FsImplementation[Name];\n}\n\nfunction bindStringResult<Name extends \"readFile\" | \"readlink\" | \"realpath\" | \"mkdtemp\">(\n fs: FsImplementation,\n name: Name,\n policy: PendingHostCallPolicyMode = \"re-issue\"\n): FsModule[Name] {\n return declare(name, policy, async (...args: readonly unknown[]) => {\n assertNoBufferResult(name, args[1]);\n return (await invoke(fs, name, args)) as string;\n }) as FsModule[Name];\n}\n\nfunction bindReaddir(fs: FsImplementation): FsModule[\"readdir\"] {\n return declare(\"readdir\", \"re-issue\", async (...args: readonly unknown[]) => {\n assertNoBufferResult(\"readdir\", args[1]);\n const entries = (await invoke(fs, \"readdir\", args)) as ReadonlyArray<string | Dirent>;\n return entries.map((entry) => (typeof entry === \"string\" ? entry : toSandboxDirent(entry)));\n }) as FsModule[\"readdir\"];\n}\n\nfunction bindStat<Name extends \"stat\" | \"lstat\">(fs: FsImplementation, name: Name): FsModule[Name] {\n return declare(name, \"re-issue\", async (...args: readonly unknown[]) => {\n assertNoBigIntResult(name, args[1]);\n return toSandboxStats((await invoke(fs, name, args)) as Stats);\n }) as FsModule[Name];\n}\n\n// Every exported operation is declared here, which makes this the one place that\n// can promise node's argument validation runs first: before an unsupported result\n// is refused, and before a root rewrites the path node would have blamed.\nfunction declare<TOperation extends FsHostOperation>(\n name: FsOperationName,\n policy: PendingHostCallPolicyMode,\n operation: TOperation\n): TOperation {\n // async so a refused argument rejects rather than throwing at the call site:\n // every node:fs/promises function answers with a promise either way.\n const validated = async (...args: readonly unknown[]): Promise<unknown> => {\n FS_PATH_ARGUMENTS[name].forEach((argument, index) =>\n assertSupportedPath(name, argument, args[index])\n );\n assertSupportedOptions(name, args);\n\n return await operation(...args);\n };\n\n Object.defineProperty(validated, \"name\", { value: name });\n declareHostOperation(validated, policy);\n return validated as TOperation;\n}\n\nfunction invoke(fs: FsImplementation, name: FsOperationName, args: readonly unknown[]): unknown {\n return Reflect.apply(fs[name] as (...operationArgs: readonly unknown[]) => unknown, fs, args);\n}\n\n// Wraps every operation so its path arguments resolve against root and are proven\n// to stay inside it. The wrapped operations keep node's own signatures and\n// results, so the bindings above are unaware a root is in play.\nfunction makeRootedFs(fs: FsImplementation, root: string): FsImplementation {\n if (root.trim().length === 0) {\n throw new Error(\"fs module root must be a non-empty string.\");\n }\n\n const rooted: Record<string, FsHostOperation> = {};\n\n for (const name of Object.keys(FS_SYSCALLS) as FsOperationName[]) {\n rooted[name] = async (...args: readonly unknown[]) => {\n assertRootCanConfineOptions(name, args);\n\n return invoke(fs, name, await resolvePathArguments(fs, root, name, args));\n };\n }\n\n return rooted as unknown as FsImplementation;\n}\n\n// Refuses the one option a root cannot confine, before any path is resolved so a refused\n// call writes nothing. node reads dereference off its own defaults with a spread and\n// validates it as a boolean, so only `true` asks for the copy that escapes.\nfunction assertRootCanConfineOptions(name: FsOperationName, args: readonly unknown[]): void {\n if (name !== \"cp\") {\n return;\n }\n\n const options = args[FS_OPTION_SURFACE.cp.argument];\n\n if (isObjectLike(options) && (options as { dereference?: unknown }).dereference === true) {\n throw createUnsupportedOptionError(\"cp\", \"dereference\", ROOT_REFUSED_DEREFERENCE_REASON);\n }\n}\n\nasync function resolvePathArguments(\n fs: FsImplementation,\n root: string,\n name: FsOperationName,\n args: readonly unknown[]\n): Promise<readonly unknown[]> {\n const canonicalRoot = await resolveCanonicalPath(readCanonicalPathFs(fs), resolve(root));\n const resolved = [...args];\n\n if (name === \"symlink\") {\n // node stores a symlink's target verbatim and resolves a relative target\n // against the link's own directory, so only the link path is rewritten while\n // the target is checked as the link's directory would see it.\n const linkPath = readPath(canonicalRoot, args[1]);\n resolved[1] = linkPath;\n await assertInsideRoot(fs, canonicalRoot, name, [\n readPath(dirname(linkPath), args[0]),\n linkPath\n ]);\n return resolved;\n }\n\n const paths = FS_PATH_ARGUMENTS[name].map((_, index) => {\n const path = readPath(canonicalRoot, args[index]);\n resolved[index] = path;\n return path;\n });\n\n await assertInsideRoot(fs, canonicalRoot, name, paths);\n return resolved;\n}\n\n// paths carries the operation's path arguments in node's order, so a denial names\n// the whole attempted call even when only one of them escapes.\nasync function assertInsideRoot(\n fs: FsImplementation,\n canonicalRoot: string,\n name: FsOperationName,\n paths: readonly string[]\n): Promise<void> {\n for (const path of paths) {\n if (await escapesRoot(fs, canonicalRoot, path)) {\n throw createAccessDeniedError(name, paths[0], paths[1]);\n }\n }\n}\n\nasync function escapesRoot(\n fs: FsImplementation,\n canonicalRoot: string,\n path: string\n): Promise<boolean> {\n const canonicalPath = await resolveCanonicalPath(readCanonicalPathFs(fs), path);\n\n return !(await containsPath(readStat(fs), canonicalRoot, canonicalPath));\n}\n\n// realpath and readlink are handed over as bound calls: the injected implementation\n// may keep them as methods that need their own receiver, and node's overloads widen\n// both results to Buffer, which only the no-encoding calls used here can never\n// return.\nfunction readCanonicalPathFs(fs: FsImplementation): CanonicalPathFs {\n return {\n realpath: async (path) => (await invoke(fs, \"realpath\", [path])) as string,\n readlink: async (path) => (await invoke(fs, \"readlink\", [path])) as string\n };\n}\n\n// Bound for the same reason as realpath above. Only dev and ino are read: they are\n// the filesystem's own answer for which file a path names.\nfunction readStat(fs: FsImplementation): Stat {\n return async (path) => (await invoke(fs, \"stat\", [path])) as Stats;\n}\n\n// node accepts a string, a Buffer, or a URL, and rejects everything else before it\n// touches the filesystem. The module has to raise these itself rather than leave\n// them to the injected implementation: a root rewrites the path first, and an\n// injected implementation is free to validate differently \u2014 memfs reads a\n// NUL-bearing path as a missing file and takes an integer as a descriptor.\nfunction assertSupportedPath(name: FsOperationName, argument: string, value: unknown): void {\n if (typeof value === \"string\") {\n if (value.includes(NULL_BYTE)) {\n throw createNullByteError(argument, value);\n }\n\n return;\n }\n\n const form = readUnsupportedPathForm(value);\n\n throw form === undefined\n ? createInvalidPathTypeError(argument, value)\n : createUnsupportedPathError(name, argument, form);\n}\n\n// The path forms node accepts and the sandbox cannot spell. An integer is not one\n// of them: fs/promises has no descriptor path form, so node blames an integer's\n// type like any other non-string and so does the module.\nfunction readUnsupportedPathForm(value: unknown): string | undefined {\n if (value instanceof Uint8Array) {\n return \"a Buffer or Uint8Array\";\n }\n\n return value instanceof URL ? \"a URL\" : undefined;\n}\n\n// Shaped exactly like node's own ERR_INVALID_ARG_VALUE for a NUL-bearing path,\n// down to inspecting the offending value the way node does.\nfunction createNullByteError(argument: string, value: string): TypeError {\n const error: NodeJS.ErrnoException = new TypeError(\n `The argument '${argument}' must be a string, Uint8Array, or URL without null bytes. Received ${inspect(value)}`\n );\n\n error.code = INVALID_ARGUMENT_CODE;\n return error;\n}\n\n// Shaped exactly like node's own ERR_INVALID_ARG_TYPE for a path it cannot read.\nfunction createInvalidPathTypeError(argument: string, value: unknown): TypeError {\n const error: NodeJS.ErrnoException = new TypeError(\n `The \"${argument}\" argument must be of type string or an instance of Buffer or URL. Received ${describeReceivedValue(value)}`\n );\n\n error.code = INVALID_ARGUMENT_TYPE_CODE;\n return error;\n}\n\nfunction createUnsupportedPathError(\n name: FsOperationName,\n argument: string,\n form: string\n): TypeError {\n return new TypeError(\n `fs.${name} cannot accept ${form} as the '${argument}' argument inside SafeJS; pass the path as a string.`\n );\n}\n\n// Ports node's own determineSpecificType (lib/internal/errors.js), which shapes the\n// \"Received ...\" tail of every ERR_INVALID_ARG_TYPE message. node spells out each\n// primitive case by hand; inspect already answers with the same text for all of\n// them, down to -0, NaN, and a bigint's n suffix.\nfunction describeReceivedValue(value: unknown): string {\n if (value === null || value === undefined) {\n return String(value);\n }\n\n if (typeof value === \"function\") {\n return `function ${value.name}`;\n }\n\n if (typeof value === \"object\") {\n const constructorName = value.constructor?.name;\n\n return constructorName === undefined\n ? inspect(value, { depth: -1 })\n : `an instance of ${constructorName}`;\n }\n\n return `type ${typeof value} (${inspect(value)})`;\n}\n\n// Every path argument reaches this already proven to be a NUL-free string: each\n// operation is validated as it is declared, before a root gets to rewrite it.\nfunction readPath(base: string, value: unknown): string {\n const path = value as string;\n\n return isAbsolute(path) ? resolve(path) : resolve(base, path);\n}\n\n// Shaped exactly like the system error node raises for a refused path, so a\n// script's `error.code` branch reads the same against SafeJS and against node.\nfunction createAccessDeniedError(\n name: FsOperationName,\n path: string,\n dest?: string\n): NodeJS.ErrnoException {\n const syscall = FS_SYSCALLS[name];\n const target = dest === undefined ? `'${path}'` : `'${path}' -> '${dest}'`;\n const error: NodeJS.ErrnoException & { dest?: string } = new Error(\n `${ACCESS_DENIED_CODE}: ${ACCESS_DENIED_MESSAGE}, ${syscall} ${target}`\n );\n\n error.code = ACCESS_DENIED_CODE;\n error.errno = ACCESS_DENIED_ERRNO;\n error.syscall = syscall;\n error.path = path;\n\n if (dest !== undefined) {\n error.dest = dest;\n }\n\n return error;\n}\n\nfunction readSystemError(code: string): [number, string] {\n const fallback = new Map<number, [string, string]>([\n [process.platform === \"win32\" ? -4092 : -13, [\"EACCES\", \"permission denied\"]]\n ]);\n const systemErrors = nodeUtil.getSystemErrorMap?.() ?? fallback;\n for (const [errno, [name, message]] of systemErrors) {\n if (name === code) {\n return [errno, message];\n }\n }\n\n throw new Error(`node does not define the ${code} system error.`);\n}\n\n// node ignores an option key it does not know, which leaves a script unable to tell\n// an option it honoured from one it dropped. Every key is answered for here: refused\n// by name with the reason, or proven to be one node forwards.\nfunction assertSupportedOptions(name: FsOperationName, args: readonly unknown[]): void {\n // Widened to every operation for the lookup: the table only holds the ones node\n // gives an options bag.\n const surface: FsOptionSurface | undefined = (\n FS_OPTION_SURFACE as Partial<Record<FsOperationName, FsOptionSurface>>\n )[name];\n\n // An operation with no options bag, or an options argument node reads as an\n // encoding or a mode rather than a bag: node validates the value itself.\n if (surface === undefined || !isObjectLike(args[surface.argument])) {\n return;\n }\n\n const options = args[surface.argument] as object;\n\n // `in` rather than an enumeration: node reads an option by name, so a refused one\n // counts however it is spelled \u2014 own or inherited, enumerable or not. An\n // enumeration would answer for the keys a script wrote and miss the ones node\n // would still honour, which is the one way a refusal here could be bypassed.\n for (const option of surface.refused) {\n if (option in options) {\n throw createUnsupportedOptionError(name, option, REFUSED_OPTION_REASONS[option]);\n }\n }\n\n // Unknown keys are the ones node cannot be asked about, so they are enumerated\n // instead: for...in reads the own and inherited enumerable keys a script can\n // plausibly have written, which is where a typo for an option node does declare\n // shows up. Walking every own key of the whole chain would reach Object.prototype\n // and refuse `toString` on every options bag.\n for (const option in options) {\n if (!surface.honoured.includes(option)) {\n throw createUnsupportedOptionError(name, option, UNKNOWN_OPTION_REASON);\n }\n }\n}\n\nfunction assertNoBufferResult(operation: keyof typeof BUFFER_BY_DEFAULT, options: unknown): void {\n if (readsBuffer(options, BUFFER_BY_DEFAULT[operation])) {\n throw createUnsupportedCapabilityError(\n operation,\n \"return a Buffer\",\n 'pass a string encoding such as \"utf8\"'\n );\n }\n}\n\nfunction assertNoBigIntResult(operation: FsOperationName, options: unknown): void {\n if (isObjectLike(options) && (options as { bigint?: unknown }).bigint === true) {\n throw createUnsupportedCapabilityError(\n operation,\n \"return BigInt fields\",\n \"omit bigint and read the *Ms timestamps instead\"\n );\n }\n}\n\nfunction createUnsupportedOptionError(\n operation: FsOperationName,\n option: string,\n reason: string\n): TypeError {\n return createUnsupportedCapabilityError(operation, `honour the '${option}' option`, reason);\n}\n\n// The one shape every capability SafeJS cannot offer is refused with, so a script\n// reads the same sentence whichever option, encoding, or field it reached for.\nfunction createUnsupportedCapabilityError(\n operation: FsOperationName,\n capability: string,\n remedy: string\n): TypeError {\n return new TypeError(`fs.${operation} cannot ${capability} inside SafeJS; ${remedy}.`);\n}\n\n// Only reports the shapes node answers with a Buffer. Anything else \u2014 including\n// an unknown encoding or a malformed options argument \u2014 passes through so node's\n// own error surfaces instead of a SafeJS one.\nfunction readsBuffer(options: unknown, bufferByDefault: boolean): boolean {\n if (typeof options === \"string\") {\n return options === BUFFER_ENCODING;\n }\n\n if (options === undefined || options === null) {\n return bufferByDefault;\n }\n\n // node reads the encoding off anything it can hold a property on, so an array or\n // a function is an options object answering with a Buffer rather than a shape\n // node rejects. Everything else is left to node's own ERR_INVALID_ARG_TYPE.\n if (!isObjectLike(options)) {\n return false;\n }\n\n const { encoding } = options as { encoding?: unknown };\n\n if (encoding === BUFFER_ENCODING) {\n return true;\n }\n\n return (encoding === undefined || encoding === null) && bufferByDefault;\n}\n\nfunction toSandboxStats(stats: Stats): SandboxStats {\n const numbers: Record<string, number> = {};\n\n for (const field of STAT_NUMBER_FIELDS) {\n numbers[field] = stats[field];\n }\n\n return { ...numbers, ...toFileTypePredicates(stats) } as SandboxStats;\n}\n\nfunction toSandboxDirent(dirent: Dirent): SandboxDirent {\n return {\n name: dirent.name,\n parentPath: dirent.parentPath,\n ...toFileTypePredicates(dirent)\n };\n}\n\n// node's predicates read a mode the host object already resolved, so the answers\n// are captured here rather than keeping the host object alive behind a closure.\nfunction toFileTypePredicates(source: Stats | Dirent): FileTypePredicates {\n const predicates: Record<string, () => boolean> = {};\n\n for (const predicate of FILE_TYPE_PREDICATES) {\n const result = source[predicate]();\n predicates[predicate] = () => result;\n }\n\n return predicates as FileTypePredicates;\n}\n\nfunction isObjectLike(value: unknown): boolean {\n return (typeof value === \"object\" && value !== null) || typeof value === \"function\";\n}\n", "import { basename, dirname, isAbsolute, relative, resolve, sep } from \"node:path\";\n\nimport { getOwnErrorCode } from \"../error-codes.js\";\n\n// realpath answers ENOENT for a missing segment and ENOTDIR when a parent is a\n// file. Both mean the segment is not an existing directory, so both walk up.\nconst MISSING_PATH_CODES: readonly string[] = [\"ENOENT\", \"ENOTDIR\"];\n\n// What the filesystem answers for a path that has no link target to follow: EINVAL\n// for a path that exists and is not a link, and the missing-path codes for one that\n// is not there at all. Any other failure is the filesystem's own and is left to\n// surface rather than read as \"not a link\", which would canonicalize a link the\n// filesystem merely refused to read as though it named itself.\nconst NOT_A_SYMLINK_CODES: readonly string[] = [...MISSING_PATH_CODES, \"EINVAL\"];\n\n// A conforming realpath raises ELOOP for a cycle before the walk below can follow\n// one, so this cap is only reached by a filesystem that reports a cycle as a\n// missing path. Following one of those forever would hang the sandbox, so the walk\n// gives up the way the platform does \u2014 at SYMLOOP_MAX, which is 32 on darwin and\n// Linux alike.\nconst MAX_SYMLINK_FOLLOWS = 32;\n\ntype Realpath = (path: string) => Promise<string>;\n\n// A symlink's target exactly as stored, which is how node keeps it: relative\n// targets stay relative and resolve against the link's own directory.\ntype Readlink = (path: string) => Promise<string>;\n\n// The filesystem operations canonicalization needs: what a path resolves to, and\n// what a link it could not resolve names. Named as a whole because both are read\n// together, off the same filesystem, to canonicalize one path.\nexport type CanonicalPathFs = { realpath: Realpath; readlink: Readlink };\n\n// Which file a path names, as the filesystem itself answers it.\ntype PathIdentity = { dev: number; ino: number };\n\nexport type Stat = (path: string) => Promise<PathIdentity>;\n\n// Canonicalizes as much of the path as exists and re-appends the segments that do\n// not, so a path is checked after symlinks are followed rather than as written.\n// The missing segments go back through resolve(), which collapses any `..` among\n// them, so they cannot re-escape what realpath already pinned down.\n//\n// A dangling symlink is the case this cannot read off realpath alone: realpath\n// refuses one with the same ENOENT it gives a path that was never there, yet the two\n// are not the same place. node follows a dangling link and acts on its target \u2014 a\n// write through one creates the target \u2014 so a dangling link canonicalizes to what it\n// names, not to itself. Reading that ENOENT as \"nothing here\" would answer with the\n// link's own path and call a link out of a caller's root contained.\nexport async function resolveCanonicalPath(\n { realpath, readlink }: CanonicalPathFs,\n path: string\n): Promise<string> {\n const missingSegments: string[] = [];\n let current = path;\n let follows = 0;\n\n while (true) {\n try {\n const canonicalCurrent = await realpath(current);\n return resolve(canonicalCurrent, ...missingSegments.reverse());\n } catch (error) {\n if (!MISSING_PATH_CODES.includes(getOwnErrorCode(error) ?? \"\")) {\n throw error;\n }\n\n const target = await readSymlinkTarget(readlink, current);\n\n if (target !== undefined) {\n if (++follows > MAX_SYMLINK_FOLLOWS) {\n throw createLoopError(path);\n }\n\n // node resolves a relative target against the link's own directory. Any\n // segments already collected still hang off whatever the target resolves to,\n // so they stay on the list.\n current = isAbsolute(target) ? resolve(target) : resolve(dirname(current), target);\n continue;\n }\n\n const parent = dirname(current);\n\n if (parent === current) {\n return resolve(path);\n }\n\n missingSegments.push(basename(current));\n current = parent;\n }\n }\n}\n\n// The target of a link realpath could not resolve, or undefined when the path is not\n// a link at all and the walk should climb past it instead.\nasync function readSymlinkTarget(readlink: Readlink, path: string): Promise<string | undefined> {\n try {\n return await readlink(path);\n } catch (error) {\n if (NOT_A_SYMLINK_CODES.includes(getOwnErrorCode(error) ?? \"\")) {\n return undefined;\n }\n\n throw error;\n }\n}\n\n// Shaped like the ELOOP a filesystem raises for a cycle it walked itself, so a\n// caller that branches on the code reads the cap and the filesystem's own answer the\n// same way.\nfunction createLoopError(path: string): NodeJS.ErrnoException {\n const error: NodeJS.ErrnoException = new Error(\n `ELOOP: too many symbolic links encountered, realpath '${path}'`\n );\n\n error.code = \"ELOOP\";\n return error;\n}\n\n// Whether root contains path, root itself included. Both arguments must already be\n// canonical: a `..` or a symlink left in either one would make the comparison lie.\n//\n// The rule: the filesystem has the deciding vote on containment, and comparing\n// the canonical spellings is only a fast path that is trusted when it answers\n// \"contained\". Two canonical paths can differ in spelling and still be the same\n// place \u2014 on a case-insensitive filesystem (darwin's default) `/repo` and `/REPO`\n// are one directory, and darwin's realpath echoes the spelling it was handed\n// rather than the on-disk one, so canonicalization does not fold the case away.\n// Comparing spellings can therefore only ever be wrong in one direction: it may\n// answer \"outside\" for a path that resolves inside root, never the reverse. So\n// \"outside\" is re-decided by walking the path's ancestors and asking the\n// filesystem for each one's identity, which no spelling can lie about. Folding\n// case here instead would be a hole: on a case-sensitive filesystem `/REPO/x` is\n// genuinely a different file from `/repo/x`.\nexport async function containsPath(\n stat: Stat,\n canonicalRoot: string,\n canonicalPath: string\n): Promise<boolean> {\n if (containsCanonicalSpelling(canonicalRoot, canonicalPath)) {\n return true;\n }\n\n return descendsFromRoot(stat, canonicalRoot, canonicalPath);\n}\n\n// Whether two canonical paths name the same place. Two spellings can name one\n// place on a case-insensitive filesystem, so identity decides here for the same\n// reason it decides containment above.\nexport async function isSamePath(\n stat: Stat,\n canonicalLeft: string,\n canonicalRight: string\n): Promise<boolean> {\n if (canonicalLeft === canonicalRight) {\n return true;\n }\n\n const [left, right] = await Promise.all([\n readIdentity(stat, canonicalLeft),\n readIdentity(stat, canonicalRight)\n ]);\n\n return (\n left !== undefined && right !== undefined && left.dev === right.dev && left.ino === right.ino\n );\n}\n\nfunction containsCanonicalSpelling(canonicalRoot: string, canonicalPath: string): boolean {\n const relativePath = relative(canonicalRoot, canonicalPath);\n\n // An empty relative path is root itself, which the root contains.\n return !(\n relativePath === \"..\" ||\n relativePath.startsWith(`..${sep}`) ||\n isAbsolute(relativePath)\n );\n}\n\n// Climbs the path's ancestors looking for root's own identity. A canonical path\n// carries no symlinks and no `..`, so every ancestor it names is a real ancestor:\n// finding root among them means the path descends from root whatever either one\n// is spelled like.\nasync function descendsFromRoot(\n stat: Stat,\n canonicalRoot: string,\n canonicalPath: string\n): Promise<boolean> {\n const root = await readIdentity(stat, canonicalRoot);\n\n if (root === undefined) {\n return false;\n }\n\n let current = canonicalPath;\n\n while (true) {\n const identity = await readIdentity(stat, current);\n\n if (identity !== undefined && identity.dev === root.dev && identity.ino === root.ino) {\n return true;\n }\n\n const parent = dirname(current);\n\n if (parent === current) {\n return false;\n }\n\n current = parent;\n }\n}\n\n// A path that is not there has no identity to match, so the walk climbs past it\n// rather than treating it as an answer. Any other failure is the filesystem's own\n// and is left to surface: swallowing it would report a refusal for what node\n// blames on something else.\nasync function readIdentity(stat: Stat, path: string): Promise<PathIdentity | undefined> {\n try {\n const { dev, ino } = await stat(path);\n return { dev, ino };\n } catch (error) {\n if (MISSING_PATH_CODES.includes(getOwnErrorCode(error) ?? \"\")) {\n return undefined;\n }\n\n throw error;\n }\n}\n", "import { deepCopyToSandbox, type SandboxValue } from \"../interp/values.js\";\n\nexport type HarnessFrontmatter = Record<string, SandboxValue>;\n\nexport type HarnessModuleMeta = {\n kind: SandboxValue;\n version: SandboxValue;\n filepath: string;\n frontmatter: HarnessFrontmatter;\n};\n\nexport type HarnessModule = {\n tasks: SandboxValue;\n agents: SandboxValue;\n meta: HarnessModuleMeta;\n applyConstraints: (prompt: string) => string;\n};\n\nexport function makeHarnessModule(\n frontmatter: Record<string, unknown>,\n meta: {\n kind: unknown;\n version: unknown;\n filepath: string;\n }\n): HarnessModule {\n const copiedFrontmatter = copyHarnessValue(frontmatter) as HarnessFrontmatter;\n const constraints = readConstraints(copiedFrontmatter);\n\n return {\n tasks: copyHarnessValue(copiedFrontmatter.tasks),\n agents: copyHarnessValue(copiedFrontmatter.agents),\n meta: {\n kind: copyHarnessValue(meta.kind),\n version: copyHarnessValue(meta.version),\n filepath: meta.filepath,\n frontmatter: copiedFrontmatter\n },\n applyConstraints: (prompt: string) => applyConstraints(prompt, constraints)\n };\n}\n\nfunction copyHarnessValue(value: unknown): SandboxValue {\n return deepCopyToSandbox(value);\n}\n\nfunction readConstraints(frontmatter: HarnessFrontmatter): string[] {\n const constraints = new Set<string>();\n\n appendConstraintValues(constraints, frontmatter.principles);\n appendConstraintValues(constraints, frontmatter.constraints);\n\n return [...constraints];\n}\n\nfunction appendConstraintValues(constraints: Set<string>, value: SandboxValue): void {\n if (!Array.isArray(value)) {\n return;\n }\n\n for (const item of value) {\n if (typeof item !== \"string\") {\n throw new Error(\"constraints/principles must be strings\");\n }\n\n constraints.add(item);\n }\n}\n\nfunction applyConstraints(prompt: string, constraints: readonly string[]): string {\n if (constraints.length === 0) {\n return prompt;\n }\n\n const preamble = `CONSTRAINTS (hard rules, honor all):\\n${constraints\n .map((constraint) => `- ${constraint}`)\n .join(\"\\n\")}`;\n\n return prompt.length === 0 ? preamble : `${preamble}\\n\\n${prompt}`;\n}\n", "import { hasOwnErrorCode } from \"./error-codes.js\";\n\nexport type OutputStream = {\n off?(event: \"error\", listener: (error: unknown) => void): void;\n on?(event: \"error\", listener: (error: unknown) => void): void;\n write(chunk: string): void;\n};\n\nexport type BrokenPipeState = {\n closed: boolean;\n};\n\nexport function createBrokenPipeState(): BrokenPipeState {\n return { closed: false };\n}\n\nexport function createSafeOutputStream(\n stream: OutputStream,\n brokenPipe: BrokenPipeState\n): OutputStream {\n return {\n write(chunk) {\n if (brokenPipe.closed) {\n return;\n }\n\n try {\n stream.write(chunk);\n } catch (error) {\n if (isBrokenPipeError(error)) {\n brokenPipe.closed = true;\n return;\n }\n\n throw error;\n }\n }\n };\n}\n\nexport async function withBrokenPipeGuard<TResult>(\n streams: readonly OutputStream[],\n brokenPipe: BrokenPipeState,\n callback: () => Promise<TResult>\n): Promise<TResult> {\n const removeListeners = streams.map((stream) => addBrokenPipeListener(stream, brokenPipe));\n\n try {\n return await callback();\n } finally {\n for (const removeListener of removeListeners) {\n removeListener();\n }\n }\n}\n\nexport function addBrokenPipeListener(\n stream: OutputStream,\n brokenPipe: BrokenPipeState\n): () => void {\n const onError = (error: unknown) => {\n if (isBrokenPipeError(error)) {\n brokenPipe.closed = true;\n return;\n }\n\n throw error;\n };\n\n stream.on?.(\"error\", onError);\n return () => {\n stream.off?.(\"error\", onError);\n };\n}\n\nfunction isBrokenPipeError(error: unknown): boolean {\n return hasOwnErrorCode(error, \"EPIPE\");\n}\n", "import {\n addBrokenPipeListener,\n createBrokenPipeState,\n createSafeOutputStream\n} from \"../output-stream.js\";\n\nexport type LogModuleEntry =\n | {\n ts: string;\n type: \"info\" | \"error\";\n args: unknown[];\n }\n | {\n ts: string;\n type: \"event\";\n name: string;\n payload: unknown;\n };\n\nexport type LogModuleSink = (entry: LogModuleEntry) => void;\n\nexport function makeLogModule(sink: LogModuleSink = createJsonlStdoutSink()): {\n info: (...args: unknown[]) => void;\n error: (...args: unknown[]) => void;\n event: (name: string, payload: unknown) => void;\n} {\n const normalizedSink = readSink(sink);\n\n return {\n info(...args) {\n normalizedSink({\n ts: new Date().toISOString(),\n type: \"info\",\n args\n });\n },\n\n error(...args) {\n normalizedSink({\n ts: new Date().toISOString(),\n type: \"error\",\n args\n });\n },\n\n event(name, payload) {\n normalizedSink({\n ts: new Date().toISOString(),\n type: \"event\",\n name: readNonEmptyString(name, \"Event name\"),\n payload\n });\n }\n };\n}\n\nfunction createJsonlStdoutSink(): LogModuleSink {\n const brokenPipe = createBrokenPipeState();\n const stdout = createSafeOutputStream(process.stdout, brokenPipe);\n addBrokenPipeListener(process.stdout, brokenPipe);\n\n return (entry) => {\n stdout.write(`${JSON.stringify(toJsonValue(entry, new WeakSet()))}\\n`);\n };\n}\n\nfunction readNonEmptyString(value: unknown, label: string): string {\n if (typeof value !== \"string\") {\n throw new Error(`${label} must be a non-empty string.`);\n }\n\n const normalizedValue = value.trim();\n\n if (normalizedValue.length === 0) {\n throw new Error(`${label} must be a non-empty string.`);\n }\n\n return normalizedValue;\n}\n\nfunction readSink(value: unknown): LogModuleSink {\n if (typeof value !== \"function\") {\n throw new Error(\"Log sink must be a function.\");\n }\n\n return value as LogModuleSink;\n}\n\nfunction toJsonValue(value: unknown, seen: WeakSet<object>): unknown {\n if (value === undefined) {\n return null;\n }\n\n if (value === null || typeof value === \"string\" || typeof value === \"boolean\") {\n return value;\n }\n\n if (typeof value === \"number\") {\n return Number.isFinite(value) ? value : String(value);\n }\n\n if (typeof value === \"bigint\" || typeof value === \"symbol\") {\n return String(value);\n }\n\n if (typeof value === \"function\") {\n return `[Function ${value.name || \"anonymous\"}]`;\n }\n\n if (value instanceof Date) {\n return Number.isNaN(value.getTime()) ? \"Invalid Date\" : value.toISOString();\n }\n\n if (value instanceof Error) {\n const serializedError: Record<string, unknown> = {\n name: value.name,\n message: value.message\n };\n\n if (typeof value.stack === \"string\" && value.stack.length > 0) {\n serializedError.stack = value.stack;\n }\n\n if (Object.prototype.hasOwnProperty.call(value, \"cause\")) {\n serializedError.cause = toJsonValue(value.cause, seen);\n }\n\n return serializedError;\n }\n\n if (Array.isArray(value)) {\n if (seen.has(value)) {\n return \"[Circular]\";\n }\n\n seen.add(value);\n const normalized = value.map((entry) => toJsonValue(entry, seen));\n seen.delete(value);\n return normalized;\n }\n\n if (typeof value === \"object\") {\n if (seen.has(value)) {\n return \"[Circular]\";\n }\n\n seen.add(value);\n const normalized = Object.create(null) as Record<string, unknown>;\n\n for (const [key, entry] of Object.entries(value)) {\n normalized[key] = toJsonValue(entry, seen);\n }\n\n seen.delete(value);\n return normalized;\n }\n\n return String(value);\n}\n", "export type NpmRunner = (scriptName: string) => Promise<string>;\n\nexport function makeMetricModule(npmRunner: NpmRunner): {\n run(name: string): Promise<number>;\n} {\n return {\n async run(name) {\n const metricName = readNonEmptyString(name, \"Metric name\");\n const scriptName = `metric:${metricName}`;\n const stdout = await npmRunner(scriptName);\n const score = parseMetricScore(stdout, scriptName);\n\n return score;\n }\n };\n}\n\nfunction parseMetricScore(stdout: unknown, scriptName: string): number {\n if (typeof stdout !== \"string\") {\n throw new Error(`Metric runner for \"${scriptName}\" must resolve to a stdout string.`);\n }\n\n const scoreLine = stdout\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter((line) => line.length > 0)\n .at(-1);\n\n if (scoreLine === undefined) {\n throw new Error(`Metric script \"${scriptName}\" must print a numeric score.`);\n }\n\n const score = Number(scoreLine);\n\n if (!Number.isFinite(score)) {\n throw new Error(`Metric script \"${scriptName}\" must print a numeric score.`);\n }\n\n return score;\n}\n\nfunction readNonEmptyString(value: unknown, label: string): string {\n if (typeof value !== \"string\") {\n throw new Error(`${label} must be a non-empty string.`);\n }\n\n const normalizedValue = value.trim();\n\n if (normalizedValue.length === 0) {\n throw new Error(`${label} must be a non-empty string.`);\n }\n\n return normalizedValue;\n}\n"],
5
- "mappings": "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",
6
- "names": ["readOpeningFence", "findClosingFence", "findLineEnd", "lookup", "throwIfAborted", "error", "retryable", "isRecord", "resolve", "readNonEmptyString", "dirname", "isAbsolute", "resolve", "resolve", "dirname", "isAbsolute", "readNonEmptyString", "readNonEmptyString"]
7
- }