@poe-platform/safe-js 0.1.729 → 0.1.731

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 (100) hide show
  1. package/README.md +5 -5
  2. package/dist/safe-js/chunks/{chunk-SJZWSPWD.js → chunk-2GVBG23M.js} +1 -1
  3. package/dist/safe-js/chunks/{chunk-SJZWSPWD.js.map → chunk-2GVBG23M.js.map} +1 -1
  4. package/dist/safe-js/chunks/{chunk-VIMROAQA.js → chunk-E4XLBT7R.js} +2 -2
  5. package/dist/safe-js/chunks/chunk-F6CV74HU.js +114 -0
  6. package/dist/safe-js/chunks/chunk-F6CV74HU.js.map +7 -0
  7. package/dist/safe-js/chunks/{chunk-OZLTLIHX.js → chunk-G6WTEIJJ.js} +2 -2
  8. package/dist/safe-js/chunks/{chunk-XX57YCGZ.js → chunk-GNEORAQI.js} +55 -50
  9. package/dist/safe-js/chunks/chunk-GNEORAQI.js.map +7 -0
  10. package/dist/safe-js/chunks/chunk-GVKXZW53.js +76 -0
  11. package/dist/safe-js/chunks/chunk-GVKXZW53.js.map +7 -0
  12. package/dist/safe-js/chunks/{chunk-2S4YRXI6.js → chunk-IRDQDZ5R.js} +4 -4
  13. package/dist/safe-js/chunks/{chunk-MRULOD5J.js → chunk-K4T4EBED.js} +59 -38
  14. package/dist/safe-js/chunks/chunk-K4T4EBED.js.map +7 -0
  15. package/dist/safe-js/chunks/{chunk-MFCEBCGV.js → chunk-KETIFEA7.js} +17 -8
  16. package/dist/safe-js/chunks/chunk-KETIFEA7.js.map +7 -0
  17. package/dist/safe-js/chunks/{chunk-S5YDMMM3.js → chunk-MDIWQFYU.js} +95 -169
  18. package/dist/safe-js/chunks/{chunk-S5YDMMM3.js.map → chunk-MDIWQFYU.js.map} +4 -4
  19. package/dist/safe-js/chunks/{chunk-BRBOVGNC.js → chunk-MGHE7ZFI.js} +78 -67
  20. package/dist/safe-js/chunks/chunk-MGHE7ZFI.js.map +7 -0
  21. package/dist/safe-js/chunks/{chunk-EN724VH3.js → chunk-O4IDRXW7.js} +4 -4
  22. package/dist/safe-js/chunks/{chunk-EA7AHM2X.js → chunk-PSVV3IG2.js} +3 -3
  23. package/dist/safe-js/chunks/{chunk-Y5EZYHU6.js → chunk-QKO4FATZ.js} +33 -5
  24. package/dist/safe-js/chunks/chunk-QKO4FATZ.js.map +7 -0
  25. package/dist/safe-js/chunks/{chunk-EG3QWREA.js → chunk-RULU2F5J.js} +2 -2
  26. package/dist/safe-js/chunks/chunk-UQPYTZOZ.js +72 -0
  27. package/dist/safe-js/chunks/chunk-UQPYTZOZ.js.map +7 -0
  28. package/dist/safe-js/chunks/{chunk-LRSWTDIV.js → chunk-W4SWUHCQ.js} +58 -23
  29. package/dist/safe-js/chunks/chunk-W4SWUHCQ.js.map +7 -0
  30. package/dist/safe-js/chunks/{chunk-W3IY6FKO.js → chunk-WS2FJBH6.js} +2 -2
  31. package/dist/safe-js/chunks/{chunk-MVLDRXWS.js → chunk-X3CKAZQ4.js} +3 -3
  32. package/dist/safe-js/chunks/chunk-YUQFFRUF.js +26 -0
  33. package/dist/safe-js/chunks/chunk-YUQFFRUF.js.map +7 -0
  34. package/dist/safe-js/chunks/{cli-runtime-6VVBO2SS.js → cli-runtime-NUEFUM64.js} +51 -30
  35. package/dist/safe-js/chunks/cli-runtime-NUEFUM64.js.map +7 -0
  36. package/dist/safe-js/chunks/{dump-UNYK24YS.js → dump-RGRC3CG3.js} +5 -4
  37. package/dist/safe-js/chunks/harness-UMOMFXDT.js +11 -0
  38. package/dist/safe-js/chunks/mcp-S672263Q.js +12 -0
  39. package/dist/safe-js/chunks/migration-file-KRXQYI3Q.js +15 -0
  40. package/dist/safe-js/chunks/restore-GEO7VN2R.js +14 -0
  41. package/dist/safe-js/chunks/run-ZSFX66RN.js +20 -0
  42. package/dist/safe-js/chunks/runtime-modules-A3U2DKFL.js +11 -0
  43. package/dist/safe-js/chunks/source-files-L3SGK63Z.js +10 -0
  44. package/dist/safe-js/cli-runtime.d.ts +2 -0
  45. package/dist/safe-js/cli.js +4 -4
  46. package/dist/safe-js/core.d.ts +1 -0
  47. package/dist/safe-js/core.js +15 -8
  48. package/dist/safe-js/error/shape.js +170 -0
  49. package/dist/safe-js/index.js +42 -33
  50. package/dist/safe-js/index.js.map +2 -2
  51. package/dist/safe-js/interp/budget.js +600 -0
  52. package/dist/safe-js/interp/internal-symbols.js +1 -0
  53. package/dist/safe-js/interp/promise-replay.d.ts +1 -1
  54. package/dist/safe-js/interp/template-cache.js +7 -0
  55. package/dist/safe-js/migration-file.d.ts +2 -0
  56. package/dist/safe-js/modules/fs-config.d.ts +3 -1
  57. package/dist/safe-js/modules/fs.d.ts +8 -4
  58. package/dist/safe-js/modules/fs.js +16 -0
  59. package/dist/safe-js/modules/source-files.d.ts +3 -2
  60. package/dist/safe-js/platform/context.js +58 -0
  61. package/dist/safe-js/platform/node.js +64 -0
  62. package/dist/safe-js/platform/types.js +63 -0
  63. package/dist/safe-js/platform/workerd.js +39 -0
  64. package/dist/safe-js/runner/run-harness.d.ts +2 -0
  65. package/dist/safe-js/snapshot/backend.d.ts +2 -0
  66. package/package.json +9 -2
  67. package/dist/safe-js/chunks/chunk-BRBOVGNC.js.map +0 -7
  68. package/dist/safe-js/chunks/chunk-FCCA27RC.js +0 -69
  69. package/dist/safe-js/chunks/chunk-FCCA27RC.js.map +0 -7
  70. package/dist/safe-js/chunks/chunk-LRSWTDIV.js.map +0 -7
  71. package/dist/safe-js/chunks/chunk-MFCEBCGV.js.map +0 -7
  72. package/dist/safe-js/chunks/chunk-MRULOD5J.js.map +0 -7
  73. package/dist/safe-js/chunks/chunk-XX57YCGZ.js.map +0 -7
  74. package/dist/safe-js/chunks/chunk-Y5EZYHU6.js.map +0 -7
  75. package/dist/safe-js/chunks/cli-runtime-6VVBO2SS.js.map +0 -7
  76. package/dist/safe-js/chunks/fs-AOV77RQC.js +0 -13
  77. package/dist/safe-js/chunks/harness-ZIEO7NAV.js +0 -10
  78. package/dist/safe-js/chunks/mcp-WBM7ZOAN.js +0 -11
  79. package/dist/safe-js/chunks/migration-file-3SWGNDS2.js +0 -12
  80. package/dist/safe-js/chunks/restore-FCTWPLU3.js +0 -13
  81. package/dist/safe-js/chunks/run-ESJHEXCE.js +0 -17
  82. package/dist/safe-js/chunks/runtime-modules-7V6BWCRK.js +0 -10
  83. package/dist/safe-js/chunks/source-files-73OHLNGH.js +0 -8
  84. /package/dist/safe-js/chunks/{chunk-VIMROAQA.js.map → chunk-E4XLBT7R.js.map} +0 -0
  85. /package/dist/safe-js/chunks/{chunk-OZLTLIHX.js.map → chunk-G6WTEIJJ.js.map} +0 -0
  86. /package/dist/safe-js/chunks/{chunk-2S4YRXI6.js.map → chunk-IRDQDZ5R.js.map} +0 -0
  87. /package/dist/safe-js/chunks/{chunk-EN724VH3.js.map → chunk-O4IDRXW7.js.map} +0 -0
  88. /package/dist/safe-js/chunks/{chunk-EA7AHM2X.js.map → chunk-PSVV3IG2.js.map} +0 -0
  89. /package/dist/safe-js/chunks/{chunk-EG3QWREA.js.map → chunk-RULU2F5J.js.map} +0 -0
  90. /package/dist/safe-js/chunks/{chunk-W3IY6FKO.js.map → chunk-WS2FJBH6.js.map} +0 -0
  91. /package/dist/safe-js/chunks/{chunk-MVLDRXWS.js.map → chunk-X3CKAZQ4.js.map} +0 -0
  92. /package/dist/safe-js/chunks/{dump-UNYK24YS.js.map → dump-RGRC3CG3.js.map} +0 -0
  93. /package/dist/safe-js/chunks/{fs-AOV77RQC.js.map → harness-UMOMFXDT.js.map} +0 -0
  94. /package/dist/safe-js/chunks/{harness-ZIEO7NAV.js.map → mcp-S672263Q.js.map} +0 -0
  95. /package/dist/safe-js/chunks/{mcp-WBM7ZOAN.js.map → migration-file-KRXQYI3Q.js.map} +0 -0
  96. /package/dist/safe-js/chunks/{migration-file-3SWGNDS2.js.map → restore-GEO7VN2R.js.map} +0 -0
  97. /package/dist/safe-js/chunks/{restore-FCTWPLU3.js.map → run-ZSFX66RN.js.map} +0 -0
  98. /package/dist/safe-js/chunks/{run-ESJHEXCE.js.map → runtime-modules-A3U2DKFL.js.map} +0 -0
  99. /package/dist/safe-js/chunks/{runtime-modules-7V6BWCRK.js.map → source-files-L3SGK63Z.js.map} +0 -0
  100. /package/dist/safe-js/{chunks/source-files-73OHLNGH.js.map → modules/fs.js.map} +0 -0
@@ -0,0 +1,7 @@
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", "../../../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/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/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/agent.ts", "../../src/modules/env.ts", "../../src/modules/fail.ts", "../../src/modules/fs-config.ts", "../../src/modules/log.ts", "../../src/modules/metric.ts"],
4
+ "sourcesContent": ["import { SandboxError } from \"../interp/budget.js\";\nimport { splitSourceLines as splitLines } from \"./source-lines.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 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 parts.push(\n maskSource(markdown.slice(cursor, block.start)),\n markdown.slice(block.start, block.end)\n );\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\nexport function maskSource(source: string): string {\n let masked = \"\";\n for (let offset = 0; offset < source.length; offset++) {\n const character = source[offset];\n masked += character === \"\\n\" || character === \"\\r\" ? character : \" \";\n }\n return masked;\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 { 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 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 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(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 // Landlock and seccomp enforce read-only mode without bubblewrap loopback\n // setup, which restricted Linux hosts can reject with RTM_NEWADDR EPERM.\n read: [\"-s\", \"read-only\", \"--enable\", \"use_legacy_landlock\"]\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 { 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/core\";\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 { 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, 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(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(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 = options.maxConcurrent === undefined ? calls.length : 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(value: number): number {\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", "import { AsyncLocalStorage } from \"#safe-js-platform\";\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 { hostErrorData } from \"../error/shape.js\";\n\nexport type EnvModuleOptions = {\n allow: readonly string[];\n values?: Readonly<Record<string, string | undefined>>;\n};\n\nexport type EnvModule = {\n get(name: string): string | undefined;\n};\n\nexport class EnvAccessError extends Error {\n readonly code = \"ENV_ACCESS_DENIED\";\n readonly variable: string;\n\n constructor(variable: string) {\n super(`Environment access denied for ${JSON.stringify(variable)}.`);\n this.name = \"EnvAccessError\";\n this.variable = variable;\n hostErrorData.set(this, { code: this.code, variable });\n }\n}\n\nexport function makeEnvModule(input: readonly string[] | EnvModuleOptions): EnvModule {\n const options = normalizeEnvOptions(Array.isArray(input) ? { allow: input } : input);\n const allowedNames = new Set(options.allow);\n const values = options.values;\n\n return {\n get(name) {\n const variable = readEnvName(name, \"Environment variable name\");\n if (!allowedNames.has(variable)) throw new EnvAccessError(variable);\n return readEnvValue(values ?? process.env, variable);\n }\n };\n}\n\nexport function parseEnvConfig(json: string): EnvModuleOptions {\n return normalizeEnvOptions(JSON.parse(json));\n}\n\nfunction normalizeEnvOptions(input: unknown): EnvModuleOptions {\n if (input === null || typeof input !== \"object\" || Array.isArray(input)) {\n throw new TypeError(\"Environment options must be an object.\");\n }\n const fields = Object.getOwnPropertyDescriptors(input);\n for (const key of Reflect.ownKeys(fields)) {\n if (key !== \"allow\" && key !== \"values\") {\n throw new TypeError(\"Unknown environment option.\");\n }\n if (!(\"value\" in fields[key]!)) {\n throw new TypeError(\"Environment options must not contain accessors.\");\n }\n }\n const inputAllow: unknown = Object.getOwnPropertyDescriptor(input, \"allow\")?.value;\n if (!Array.isArray(inputAllow)) {\n throw new TypeError(\"Environment allow list must be an array of non-empty strings.\");\n }\n const allow: string[] = [];\n for (let index = 0; index < inputAllow.length; index += 1) {\n const descriptor = Object.getOwnPropertyDescriptor(inputAllow, index);\n if (descriptor === undefined || !(\"value\" in descriptor)) {\n throw new TypeError(\"Environment allow list must contain only own data entries.\");\n }\n allow.push(readEnvName(descriptor.value, `Environment allow list[${index}]`));\n }\n const inputValues: unknown = Object.getOwnPropertyDescriptor(input, \"values\")?.value;\n if (inputValues === undefined) return { allow };\n if (inputValues === null || typeof inputValues !== \"object\" || Array.isArray(inputValues)) {\n throw new TypeError(\"Environment values must be an object.\");\n }\n return {\n allow,\n values: Object.fromEntries(allow.map((name) => [name, readEnvValue(inputValues, name)]))\n };\n}\n\nfunction readEnvValue(values: object, name: string): string | undefined {\n const descriptor = Object.getOwnPropertyDescriptor(values, name);\n if (descriptor === undefined) return undefined;\n if (!(\"value\" in descriptor)) {\n throw new TypeError(`Environment value for ${JSON.stringify(name)} must not be an accessor.`);\n }\n if (descriptor.value !== undefined && typeof descriptor.value !== \"string\") {\n throw new TypeError(\n `Environment value for ${JSON.stringify(name)} must be a string or undefined.`\n );\n }\n return descriptor.value as string | undefined;\n}\n\nfunction readEnvName(value: unknown, label: string): string {\n if (typeof value !== \"string\" || value.length === 0) {\n throw new TypeError(`${label} must be a non-empty string.`);\n }\n if (value.includes(\"\\0\") || value.includes(\"=\")) {\n throw new TypeError(`${label} must not contain NUL or equals signs.`);\n }\n return value;\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 {\n createFileSystem,\n createNodeFileSystemAdapterRegistry,\n readConfigRecord,\n validateFileSystemConfig,\n type FileSystemAdapterRegistry,\n type FileSystemConfig\n} from \"@poe-code/safe-fs\";\nimport type { FsModuleOptions } from \"./fs.js\";\n\nexport type FsConfig = {\n readonly adapter: FileSystemConfig;\n readonly root?: string;\n readonly cwd?: string;\n readonly readFileMaxBytes?: number;\n readonly hostReadMemoryLimit?: number;\n};\nexport type ResolveFsConfigOptions = { readonly registry?: FileSystemAdapterRegistry };\n\nfunction validateFsConfig(value: unknown): FsConfig {\n const config = readConfigRecord(value, \"fs config\", [\"adapter\", \"root\", \"cwd\", \"readFileMaxBytes\", \"hostReadMemoryLimit\"]);\n const paths: { root?: string; cwd?: string } = {};\n for (const key of [\"root\", \"cwd\"] as const) {\n const path = config[key];\n if (path === undefined) continue;\n if (typeof path !== \"string\" || !path.startsWith(\"/\") || path.includes(\"\\0\")) {\n throw new TypeError(`${key} must be an absolute virtual path`);\n }\n paths[key] = path;\n }\n const limits: Pick<FsConfig, \"readFileMaxBytes\" | \"hostReadMemoryLimit\"> = {};\n for (const key of [\"readFileMaxBytes\", \"hostReadMemoryLimit\"] as const) {\n const value = config[key];\n if (value === undefined) continue;\n if (value !== Infinity && (typeof value !== \"number\" || !Number.isSafeInteger(value) || value < 0))\n throw new TypeError(`${key} must be a non-negative safe integer or Infinity`);\n Object.assign(limits, { [key]: value });\n }\n return {\n adapter: validateFileSystemConfig(config.adapter),\n ...paths,\n ...limits\n };\n}\n\nexport function parseFsConfig(json: string): FsConfig {\n return validateFsConfig(JSON.parse(json));\n}\n\nexport async function resolveFsConfig(\n config: FsConfig,\n options: ResolveFsConfigOptions = {}\n): Promise<Required<Pick<FsModuleOptions, \"adapter\">> & Omit<FsConfig, \"adapter\">> {\n const { adapter: adapterConfig, ...paths } = validateFsConfig(config);\n const resolution = readConfigRecord(options, \"fs resolution option\", [\"registry\"]);\n const registry = createNodeFileSystemAdapterRegistry(\n resolution.registry as FileSystemAdapterRegistry | undefined\n );\n const adapter = await createFileSystem(adapterConfig, { registry });\n return { adapter, ...paths };\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\nconst stdoutSinks = new WeakMap<NodeJS.WriteStream, LogModuleSink>();\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 stream = process.stdout;\n const existing = stdoutSinks.get(stream);\n if (existing) return existing;\n\n const brokenPipe = createBrokenPipeState();\n const stdout = createSafeOutputStream(stream, brokenPipe);\n addBrokenPipeListener(stream, brokenPipe);\n\n const sink: LogModuleSink = (entry) => {\n stdout.write(`${JSON.stringify(toJsonValue(entry, new WeakSet()))}\\n`);\n };\n stdoutSinks.set(stream, sink);\n return sink;\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", "readNonEmptyString", "value", "readNonEmptyString", "readNonEmptyString"]
7
+ }