pi-fabric 0.62.7 → 0.62.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/worker.js CHANGED
@@ -856,6 +856,20 @@ ${schema}`
856
856
  };
857
857
  const steerTimer = options.steerFile ? setInterval(pollSteer, 200) : void 0;
858
858
  steerTimer?.unref?.();
859
+ const failOversizedEvent = (line) => {
860
+ const prefix = line.slice(0, MAX_EVENT_LINE_CHARS);
861
+ let artifactPath;
862
+ try {
863
+ artifactPath = path.join(path.dirname(options.logFile), "oversized-event-prefix.txt");
864
+ fs.writeFileSync(artifactPath, prefix, { encoding: "utf8", mode: 384 });
865
+ } catch {
866
+ artifactPath = void 0;
867
+ }
868
+ terminalStatus = "failed";
869
+ terminalError = artifactPath ? `Agent emitted an oversized event line; first ${prefix.length} characters saved to: ${artifactPath}` : "Agent emitted an oversized event line";
870
+ outputBuffer = "";
871
+ terminateChild(child, "SIGTERM");
872
+ };
859
873
  child.stdout?.on("data", (chunk) => {
860
874
  const decoded = outputDecoder.write(chunk);
861
875
  if (options.runner === "veda") {
@@ -867,18 +881,12 @@ ${schema}`
867
881
  const newline = outputBuffer.indexOf("\n");
868
882
  if (newline < 0) {
869
883
  if (outputBuffer.length > MAX_EVENT_LINE_CHARS) {
870
- terminalStatus = "failed";
871
- terminalError = "Agent emitted an oversized event line";
872
- outputBuffer = "";
873
- terminateChild(child, "SIGTERM");
884
+ failOversizedEvent(outputBuffer);
874
885
  }
875
886
  break;
876
887
  }
877
888
  if (newline > MAX_EVENT_LINE_CHARS) {
878
- terminalStatus = "failed";
879
- terminalError = "Agent emitted an oversized event line";
880
- outputBuffer = "";
881
- terminateChild(child, "SIGTERM");
889
+ failOversizedEvent(outputBuffer.slice(0, newline));
882
890
  return;
883
891
  }
884
892
  const line = outputBuffer.slice(0, newline).replace(/\r$/, "");
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/worker.ts"],
4
- "sourcesContent": ["#!/usr/bin/env node\n\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { ChildProcess, SpawnOptions } from \"node:child_process\";\nimport crossSpawn from \"cross-spawn\";\nimport { StringDecoder } from \"node:string_decoder\";\nimport { Value } from \"typebox/value\";\nimport type { ImageContent } from \"@earendil-works/pi-ai\";\nimport type {\n AgentRunRecord,\n AgentRunStatus,\n} from \"./agents/types.js\";\n\nconst NODE_SCRIPT_EXTENSIONS = new Set([\".js\", \".cjs\", \".mjs\", \".ts\", \".cts\", \".mts\"]);\n\nconst spawnCli = (\n command: string,\n args: readonly string[],\n options: SpawnOptions,\n): ChildProcess => NODE_SCRIPT_EXTENSIONS.has(path.extname(command).toLowerCase())\n ? crossSpawn(process.execPath, [command, ...args], options)\n : crossSpawn(command, [...args], options);\n\ntype ClaudeCliModule = typeof import(\"./agents/claude-cli.js\");\ntype VedaCliModule = typeof import(\"./agents/veda-cli.js\");\ntype CompactControlModule = typeof import(\"./agents/compact-control.js\");\ntype WorkerOptionsModule = typeof import(\"./worker/options.js\");\ntype WorkerRunRecordModule = typeof import(\"./worker/run-record.js\");\ntype WorkerSessionExportModule = typeof import(\"./worker/session-export.js\");\n\nconst loadWorkerOptions = async (): Promise<WorkerOptionsModule> => {\n if (!import.meta.url.endsWith(\".ts\")) return import(\"./worker/options.js\");\n const sourceModulePath = \"./worker/options.ts\";\n return import(sourceModulePath) as Promise<WorkerOptionsModule>;\n};\n\nconst loadWorkerRunRecord = async (): Promise<WorkerRunRecordModule> => {\n if (!import.meta.url.endsWith(\".ts\")) return import(\"./worker/run-record.js\");\n const sourceModulePath = \"./worker/run-record.ts\";\n return import(sourceModulePath) as Promise<WorkerRunRecordModule>;\n};\n\nconst loadWorkerSessionExport = async (): Promise<WorkerSessionExportModule> => {\n if (!import.meta.url.endsWith(\".ts\")) return import(\"./worker/session-export.js\");\n const sourceModulePath = \"./worker/session-export.ts\";\n return import(sourceModulePath) as Promise<WorkerSessionExportModule>;\n};\n\nconst loadCompactControl = async (): Promise<CompactControlModule> => {\n if (!import.meta.url.endsWith(\".ts\")) return import(\"./agents/compact-control.js\");\n const sourceModulePath = \"./agents/compact-control.ts\";\n return import(sourceModulePath) as Promise<CompactControlModule>;\n};\n\nconst loadClaudeCli = async (): Promise<ClaudeCliModule> => {\n if (!import.meta.url.endsWith(\".ts\")) return import(\"./agents/claude-cli.js\");\n const sourceModulePath = \"./agents/claude-cli.ts\";\n return import(sourceModulePath) as Promise<ClaudeCliModule>;\n};\n\nconst loadVedaCli = async (): Promise<VedaCliModule> => {\n if (!import.meta.url.endsWith(\".ts\")) return import(\"./agents/veda-cli.js\");\n const sourceModulePath = \"./agents/veda-cli.ts\";\n return import(sourceModulePath) as Promise<VedaCliModule>;\n};\n\nconst MAX_STDERR_CHARS = 20_000;\nconst MAX_EVENT_LINE_CHARS = 4 * 1024 * 1024;\nconst STEER_READ_CHUNK_BYTES = 256 * 1024;\nconst MAX_STEER_LINE_BYTES = 64 * 1024;\nconst MAX_STEER_COMMANDS_PER_POLL = 256;\nconst MAX_CLAUDE_PENDING_INPUTS = 256;\nconst MAX_CLAUDE_PENDING_TOOLS = 1_000;\nconst KILL_GRACE_MS = 5_000;\n\nconst extractText = (message: Record<string, unknown>): string => {\n const content = message.content;\n if (typeof content === \"string\") return content;\n if (!Array.isArray(content)) return \"\";\n return content\n .filter(\n (part): part is { type: \"text\"; text: string } =>\n typeof part === \"object\" &&\n part !== null &&\n (part as Record<string, unknown>).type === \"text\" &&\n typeof (part as Record<string, unknown>).text === \"string\",\n )\n .map((part) => part.text)\n .join(\"\");\n};\n\nconst readImages = (filePath: string | undefined): ImageContent[] => {\n if (!filePath) return [];\n const parsed: unknown = JSON.parse(fs.readFileSync(filePath, \"utf8\"));\n if (!Array.isArray(parsed)) throw new Error(\"Agent images file must contain an array\");\n const images: ImageContent[] = [];\n for (const value of parsed) {\n if (\n typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value) ||\n (value as { type?: unknown }).type !== \"image\" ||\n typeof (value as { data?: unknown }).data !== \"string\" ||\n typeof (value as { mimeType?: unknown }).mimeType !== \"string\"\n ) {\n throw new Error(\"Agent images file contains an invalid image block\");\n }\n images.push({\n type: \"image\",\n data: (value as { data: string }).data,\n mimeType: (value as { mimeType: string }).mimeType,\n });\n }\n return images;\n};\n\nconst numberField = (value: unknown): number => (typeof value === \"number\" ? value : 0);\n\nconst stringField = (value: unknown): string | undefined =>\n typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n\nconst assistantError = (message: Record<string, unknown>): string => {\n const details: string[] = [];\n const direct = stringField(message.errorMessage) ?? stringField(message.error);\n if (direct) details.push(direct);\n if (Array.isArray(message.diagnostics)) {\n for (const diagnostic of message.diagnostics) {\n if (typeof diagnostic !== \"object\" || diagnostic === null || Array.isArray(diagnostic)) continue;\n const record = diagnostic as Record<string, unknown>;\n const nested =\n typeof record.error === \"object\" && record.error !== null && !Array.isArray(record.error)\n ? (record.error as Record<string, unknown>)\n : undefined;\n const detail = stringField(nested?.message) ?? stringField(record.message);\n if (detail) details.push(detail);\n }\n }\n const unique = [...new Set(details)];\n const provider = stringField(message.provider);\n const model = stringField(message.model);\n const source = [provider, model].filter((value): value is string => Boolean(value)).join(\"/\");\n const summary = unique.join(\" \u00B7 \") || \"Pi agent reported an error\";\n return `${source ? `${source}: ` : \"\"}${summary}`.slice(0, MAX_STDERR_CHARS);\n};\n\nconst runnerLabel = (runner: string): string =>\n runner === \"claude\" ? \"Claude\" : runner === \"veda\" ? \"Veda\" : \"Pi\";\n\nconst terminateChild = (child: ChildProcess, signal: NodeJS.Signals): void => {\n if (!child.pid) return;\n try {\n process.kill(process.platform === \"win32\" ? child.pid : -child.pid, signal);\n } catch { /* child process group already exited */ }\n};\n\nconst extractBalancedJson = (text: string, start: number): string | null => {\n const open = text[start];\n if (open !== \"{\" && open !== \"[\") return null;\n const close = open === \"{\" ? \"}\" : \"]\";\n let depth = 0;\n let inString = false;\n let escaped = false;\n for (let i = start; i < text.length; i++) {\n const ch = text[i];\n if (inString) {\n if (escaped) escaped = false;\n else if (ch === \"\\\\\") escaped = true;\n else if (ch === '\"') inString = false;\n continue;\n }\n if (ch === '\"') inString = true;\n else if (ch === open) depth++;\n else if (ch === close) {\n depth--;\n if (depth === 0) return text.slice(start, i + 1);\n }\n }\n return null;\n};\n\nconst parseStructuredValue = (text: string): unknown => {\n const trimmed = text.trim();\n try {\n return JSON.parse(trimmed);\n } catch {\n // Whole text is not JSON; try extraction below.\n }\n const fenced = trimmed.match(/```(?:json)?\\s*\\n([\\s\\S]*?)\\n```/i);\n if (fenced?.[1]) {\n try {\n return JSON.parse(fenced[1].trim());\n } catch {\n // Fenced block is not JSON; try balanced extraction below.\n }\n }\n const start = trimmed.search(/[{\\[]/);\n if (start >= 0) {\n const balanced = extractBalancedJson(trimmed, start);\n if (balanced) return JSON.parse(balanced);\n }\n return JSON.parse(trimmed);\n};\n\nlet crashContext: { statusFile: string; record: AgentRunRecord } | undefined;\nlet runRecordHelpers: WorkerRunRecordModule | undefined;\nlet terminalWritten = false;\nconst writeCrashStatus = (error: unknown): void => {\n if (!crashContext || !runRecordHelpers || terminalWritten) return;\n try {\n runRecordHelpers.writeCrashRunRecord(crashContext.statusFile, crashContext.record, error);\n } catch {\n // Best effort: if the crash-status write itself fails, #monitor falls back\n // to \"Agent transport exited without a result\".\n }\n};\nprocess.on(\"uncaughtException\", (error) => {\n writeCrashStatus(error);\n process.stderr.write(`${error instanceof Error ? error.stack ?? error.message : error}\\n`);\n process.exit(1);\n});\nprocess.on(\"unhandledRejection\", (error) => {\n writeCrashStatus(error);\n process.stderr.write(`Unhandled rejection: ${error instanceof Error ? error.stack ?? error.message : error}\\n`);\n process.exit(1);\n});\n\nconst main = async (): Promise<void> => {\n const [optionHelpers, loadedRunRecordHelpers, sessionExportHelpers] = await Promise.all([\n loadWorkerOptions(),\n loadWorkerRunRecord(),\n loadWorkerSessionExport(),\n ]);\n runRecordHelpers = loadedRunRecordHelpers;\n const {\n applyUsage,\n createRunningRecord,\n emptyUsage,\n extractUsageDelta,\n latestRunText,\n updateRunRecord,\n writeRunRecord,\n } = loadedRunRecordHelpers;\n const options = optionHelpers.parseWorkerOptions();\n const sessionExporter = options.sessionExportFile\n ? new sessionExportHelpers.SessionExporter({\n file: options.sessionExportFile,\n sessionId: options.id,\n cwd: options.cwd,\n agentName: options.name,\n })\n : undefined;\n const thinking =\n options.thinking === \"off\" ||\n options.thinking === \"minimal\" ||\n options.thinking === \"low\" ||\n options.thinking === \"medium\" ||\n options.thinking === \"high\" ||\n options.thinking === \"xhigh\" ||\n options.thinking === \"max\"\n ? options.thinking\n : undefined;\n const task = fs.readFileSync(options.taskFile, \"utf8\");\n const images = readImages(options.imagesFile);\n const record = createRunningRecord(options, task, thinking, Date.now());\n writeRunRecord(options.statusFile, record);\n const emitLifecycle = (\n event: string,\n data?: Record<string, unknown>,\n ): void => {\n try {\n fs.mkdirSync(path.dirname(options.lifecycleFile), { recursive: true });\n fs.appendFileSync(\n options.lifecycleFile,\n JSON.stringify({ version: 1, event, occurredAt: Date.now(), ...(data ? { data } : {}) }) + \"\\n\",\n { encoding: \"utf8\", mode: 0o600 },\n );\n } catch {\n // Lifecycle telemetry is best-effort and must not fail the child run.\n }\n };\n crashContext = { statusFile: options.statusFile, record };\n process.stdout.write(`[pi-fabric] ${options.name}\\n${task}\\n\\n`);\n fs.mkdirSync(path.dirname(options.logFile), { recursive: true });\n // Other processes tail this file while the run is live (transcript reader,\n // dashboards, preview trees). The previous buffered createWriteStream visibly\n // stalled mid-run \u2014 append synchronously so events are durable immediately.\n const appendLog = (text: string): void => {\n try {\n fs.appendFileSync(options.logFile, text, { encoding: \"utf8\", mode: 0o600 });\n } catch {\n // Event logging is best-effort and must not fail the child run.\n }\n };\n const sessionStream =\n options.runner === \"claude\" && options.sessionFile\n ? fs.createWriteStream(options.sessionFile, { flags: \"a\", mode: 0o600 })\n : undefined;\n sessionStream?.on(\"error\", () => {});\n\n const schema = options.schemaFile\n ? fs.readFileSync(options.schemaFile, \"utf8\")\n : undefined;\n const piArguments = [\"--mode\", \"rpc\"];\n if (options.sessionFile) piArguments.push(\"--session\", options.sessionFile);\n else piArguments.push(\"--no-session\");\n if (!options.extensions) piArguments.push(\"--no-extensions\");\n if (options.fabricExtensionPath) piArguments.push(\"-e\", options.fabricExtensionPath);\n if (options.tools.length > 0) piArguments.push(\"--tools\", options.tools.join(\",\"));\n else piArguments.push(\"--no-tools\"); // explicit empty allowlist => no tools, not Pi defaults\n if (options.model) piArguments.push(\"--model\", options.model);\n if (thinking) piArguments.push(\"--thinking\", thinking);\n if (options.systemPrompt) piArguments.push(\"--append-system-prompt\", options.systemPrompt);\n if (schema) {\n piArguments.push(\n \"--append-system-prompt\",\n `Your final response must contain only JSON matching this schema, without Markdown fences:\\n${schema}`,\n );\n }\n const claudeCli = options.runner === \"claude\" ? await loadClaudeCli() : undefined;\n const vedaCli = options.runner === \"veda\" ? await loadVedaCli() : undefined;\n const childArguments =\n options.runner === \"claude\"\n ? claudeCli!.buildClaudeArguments({\n tools: options.tools,\n extensions: options.extensions,\n persistentSession: Boolean(options.sessionFile),\n ...(options.model ? { model: options.model } : {}),\n ...(thinking ? { thinking } : {}),\n ...(options.systemPrompt ? { systemPrompt: options.systemPrompt } : {}),\n ...(schema ? { schema } : {}),\n ...(options.runnerSessionId ? { runnerSessionId: options.runnerSessionId } : {}),\n name: options.name,\n })\n : options.runner === \"veda\"\n ? vedaCli!.buildVedaArguments({\n backend: options.vedaBackend,\n persona: options.vedaPersona,\n ...(options.model ? { model: options.model } : {}),\n ...(thinking ? { thinking } : {}),\n tools: options.tools,\n // Isolate selection and conversation state per child run so\n // parallel Fabric agents never share Veda session state.\n session: `fabric-${options.id}`,\n })\n : piArguments;\n const childBinary =\n options.runner === \"claude\"\n ? options.claudeBinary\n : options.runner === \"veda\"\n ? options.vedaBinary\n : options.piBinary;\n\n const child = spawnCli(childBinary, childArguments, {\n cwd: options.cwd,\n detached: process.platform !== \"win32\",\n env: {\n ...process.env,\n PI_FABRIC_DEPTH: String(options.depth),\n PI_FABRIC_PARENT_RUN: options.id,\n PI_FABRIC_AGENT_NAME: options.name,\n ...(options.mainAgentId ? { PI_FABRIC_MAIN_AGENT_ID: options.mainAgentId } : {}),\n PI_FABRIC_GRANTED_RISKS: options.grantedRisks.join(\",\"),\n PI_FABRIC_FULL_CODE_MODE: String(options.fullCodeMode),\n ...(options.actorId ? { PI_FABRIC_ACTOR_ID: options.actorId } : {}),\n ...(options.actorName ? { PI_FABRIC_ACTOR_NAME: options.actorName } : {}),\n PI_FABRIC_CAPABILITY_REQUIREMENTS: JSON.stringify(\n options.capabilityRequirements ?? [],\n ),\n PI_FABRIC_CAPABILITY_DIGEST: options.capabilityDigest ?? \"\",\n ...(options.meshRoot ? { PI_FABRIC_MESH_ROOT: options.meshRoot } : {}),\n ...(options.projectRoot ? { PI_FABRIC_PROJECT_ROOT: options.projectRoot } : {}),\n ...(options.ownerHostId ? { PI_FABRIC_OWNER_HOST_ID: options.ownerHostId } : {}),\n ...(options.ownerIdentityId\n ? { PI_FABRIC_OWNER_IDENTITY_ID: options.ownerIdentityId }\n : {}),\n ...(options.runRoot ? { PI_FABRIC_RUN_ROOT: options.runRoot } : {}),\n },\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n let stderr = \"\";\n let outputBuffer = \"\";\n // Veda emits a single JSON document on stdout (progress goes to stderr, and\n // with --json progress is suppressed entirely). Buffer it raw and parse it\n // once the child closes instead of treating stdout as NDJSON lines.\n let vedaOutput = \"\";\n let vedaParsed: Record<string, unknown> | undefined;\n const outputDecoder = new StringDecoder(\"utf8\");\n const stderrDecoder = new StringDecoder(\"utf8\");\n let terminalStatus: AgentRunStatus | undefined;\n let terminalError: string | undefined;\n let sawAgentError = false;\n let retryPending = false;\n\n const update = (): void => updateRunRecord(options.statusFile, record);\n\n // Attributed token telemetry. Every usage-bearing child event emits one\n // tokens.usage lifecycle entry identified by this run/actor/runner/depth.\n // The manager drains these alongside the pi.* lifecycle stream and appends\n // them to the budget ledger, replacing the old per-settle flat attribution.\n const lastEmittedUsage = emptyUsage();\n const emitTokenUsage = (\n delta?: {\n input: number;\n output: number;\n cacheRead: number;\n cacheWrite: number;\n cost: number;\n },\n attribution?: { model?: string | undefined; provider?: string | undefined },\n ): void => {\n const snapshot = record.usage;\n if (\n snapshot.input === lastEmittedUsage.input &&\n snapshot.output === lastEmittedUsage.output &&\n snapshot.cacheRead === lastEmittedUsage.cacheRead &&\n snapshot.cacheWrite === lastEmittedUsage.cacheWrite &&\n snapshot.cost === lastEmittedUsage.cost\n ) {\n return;\n }\n emitLifecycle(\"tokens.usage\", {\n runId: options.id,\n name: options.name,\n runner: options.runner,\n depth: options.depth,\n ...(options.actorId ? { actorId: options.actorId } : {}),\n ...(options.actorName ? { actorName: options.actorName } : {}),\n cumulativeTokens:\n snapshot.input + snapshot.output + snapshot.cacheRead + snapshot.cacheWrite,\n input: delta?.input ?? 0,\n output: delta?.output ?? 0,\n cacheRead: delta?.cacheRead ?? 0,\n cacheWrite: delta?.cacheWrite ?? 0,\n cost: delta?.cost ?? snapshot.cost,\n });\n // Mirror the emitted payload into the pi-format usage export (when the\n // host enabled agents.sessionExport) so tokscale/ccusage can attribute\n // subagent tokens and cost. Export intentionally never writes content.\n sessionExporter?.push(\n {\n input: delta?.input ?? 0,\n output: delta?.output ?? 0,\n cacheRead: delta?.cacheRead ?? 0,\n cacheWrite: delta?.cacheWrite ?? 0,\n cost: delta?.cost ?? snapshot.cost,\n },\n attribution?.model ?? record.model ?? options.model,\n attribution?.provider,\n );\n lastEmittedUsage.input = snapshot.input;\n lastEmittedUsage.output = snapshot.output;\n lastEmittedUsage.cacheRead = snapshot.cacheRead;\n lastEmittedUsage.cacheWrite = snapshot.cacheWrite;\n lastEmittedUsage.cost = snapshot.cost;\n };\n\n const { ChildCompactControl } = await loadCompactControl();\n const compactControl = new ChildCompactControl(options.id, {\n send(frame) {\n if (!child.stdin || child.stdin.writableEnded || child.stdin.destroyed) {\n throw new Error(\"Child Pi stdin closed before compaction could start\");\n }\n child.stdin.write(`${JSON.stringify(frame)}\\n`);\n },\n close() {\n child.stdin?.end();\n },\n update(status) {\n record.compaction = status;\n update();\n },\n });\n\n // Preemptive per-child token guard. timeoutMs bounds wall time and budgetUsd\n // bounds cost, but a single runaway child can still blow its own context\n // before Pi core compacts. When maxTokens is set and the child's cumulative\n // token usage crosses it, terminate the child like a timeout so the run\n // settles with a terminal status instead of burning to the hour deadline.\n // The error string is model-facing: the parent agent reads it verbatim, so it\n // must name the config key and remedy, and front-load the numbers before TUI\n // truncation.\n const enforceTokenLimit = (): void => {\n if (terminalStatus || !options.maxTokens || options.maxTokens <= 0) return;\n const total =\n record.usage.input +\n record.usage.output +\n record.usage.cacheRead +\n record.usage.cacheWrite;\n if (total <= options.maxTokens) return;\n terminalStatus = \"timed_out\";\n terminalError =\n `Fabric token limit reached: ${total} tokens (limit ${options.maxTokens} set by agents.maxTokensPerChild); terminating child. ` +\n `The count is cumulative across the run and includes cache reads/writes, so it grows every turn; ` +\n `raise or disable agents.maxTokensPerChild in /fabric settings (0 disables), or split the task into smaller agent runs.`;\n terminateChild(child, \"SIGTERM\");\n setTimeout(() => terminateChild(child, \"SIGKILL\"), KILL_GRACE_MS).unref();\n child.stdin?.end();\n };\n\n type ClaudeInputKind = \"initial\" | \"steer\" | \"follow_up\";\n const claudeTools = new Map<string, string>();\n const claudeCompletedUsage = emptyUsage();\n const claudeCurrentUsage = emptyUsage();\n const syncClaudeUsage = (): void => {\n record.usage = {\n input: claudeCompletedUsage.input + claudeCurrentUsage.input,\n output: claudeCompletedUsage.output + claudeCurrentUsage.output,\n cacheRead: claudeCompletedUsage.cacheRead + claudeCurrentUsage.cacheRead,\n cacheWrite: claudeCompletedUsage.cacheWrite + claudeCurrentUsage.cacheWrite,\n cost: claudeCompletedUsage.cost,\n };\n };\n\n const claudeSentInputs: Array<{ kind: ClaudeInputKind; message: string }> = [];\n const claudeSteering: string[] = [];\n const claudeFollowUps: string[] = [];\n let claudeSteeringMode: \"all\" | \"one-at-a-time\" = \"one-at-a-time\";\n let claudeFollowUpMode: \"all\" | \"one-at-a-time\" = \"one-at-a-time\";\n let claudeCanFollowUp = false;\n let claudeResultSeen = false;\n const enqueueClaudeControl = (queue: string[], message: string): void => {\n const pendingInputs = claudeSentInputs.length + claudeSteering.length + claudeFollowUps.length;\n if (pendingInputs >= MAX_CLAUDE_PENDING_INPUTS) return;\n queue.push(message);\n };\n let claudeCloseTimer: NodeJS.Timeout | undefined;\n\n const updateClaudeQueue = (): void => {\n const sentSteering = claudeSentInputs\n .filter((entry) => entry.kind === \"steer\")\n .map((entry) => entry.message);\n const sentFollowUps = claudeSentInputs\n .filter((entry) => entry.kind === \"follow_up\")\n .map((entry) => entry.message);\n record.pendingMessages = {\n steering: [...sentSteering, ...claudeSteering],\n followUp: [...sentFollowUps, ...claudeFollowUps],\n };\n update();\n };\n\n const writeClaudeInput = (\n kind: ClaudeInputKind,\n message: string,\n inputImages: readonly ImageContent[] = [],\n ): void => {\n if (claudeCloseTimer) clearTimeout(claudeCloseTimer);\n claudeCloseTimer = undefined;\n if (!child.stdin || child.stdin.writableEnded || child.stdin.destroyed) return;\n claudeSentInputs.push({ kind, message });\n if (kind === \"follow_up\") claudeCanFollowUp = false;\n child.stdin.write(\n `${JSON.stringify(claudeCli!.claudeUserMessage(message, inputImages))}\\n`,\n );\n updateClaudeQueue();\n };\n\n const flushClaudeSteering = (): void => {\n if (claudeSteering.length === 0) return;\n const alreadySent = claudeSentInputs.some((entry) => entry.kind === \"steer\");\n if (claudeSteeringMode === \"one-at-a-time\" && alreadySent) return;\n const count = claudeSteeringMode === \"all\" ? claudeSteering.length : 1;\n for (const message of claudeSteering.splice(0, count)) {\n writeClaudeInput(\"steer\", message);\n }\n };\n\n const flushClaudeFollowUps = (): void => {\n if (claudeFollowUps.length === 0 || claudeSteering.length > 0) return;\n if (claudeSentInputs.some((entry) => entry.kind === \"steer\")) return;\n const alreadySent = claudeSentInputs.some((entry) => entry.kind === \"follow_up\");\n if (claudeFollowUpMode === \"one-at-a-time\" && alreadySent) return;\n const count = claudeFollowUpMode === \"all\" ? claudeFollowUps.length : 1;\n for (const message of claudeFollowUps.splice(0, count)) {\n writeClaudeInput(\"follow_up\", message);\n }\n };\n\n const scheduleClaudeClose = (): void => {\n if (claudeCloseTimer || terminalStatus) return;\n claudeCloseTimer = setTimeout(() => {\n claudeCloseTimer = undefined;\n if (\n claudeSentInputs.length === 0 &&\n claudeSteering.length === 0 &&\n claudeFollowUps.length === 0\n ) {\n child.stdin?.end();\n }\n }, 300);\n claudeCloseTimer.unref();\n };\n\n const processClaudeEvent = (event: Record<string, unknown>): void => {\n if (event.type === \"system\" && event.subtype === \"init\") {\n const sessionId = stringField(event.session_id);\n if (sessionId) record.runnerSessionId = sessionId;\n const model = stringField(event.model);\n if (model && !record.model) record.model = model;\n update();\n return;\n }\n if (event.type === \"assistant\") {\n const message = event.message;\n if (typeof message !== \"object\" || message === null || Array.isArray(message)) return;\n const assistant = message as Record<string, unknown>;\n const text = extractText(assistant);\n if (text) {\n record.text = latestRunText(text);\n process.stdout.write(`\\n${text}\\n`);\n }\n const content = assistant.content;\n if (Array.isArray(content)) {\n for (const block of content) {\n if (typeof block !== \"object\" || block === null || Array.isArray(block)) continue;\n const part = block as Record<string, unknown>;\n if (part.type !== \"tool_use\") continue;\n const id = stringField(part.id);\n const name = stringField(part.name);\n if (!id || !name || claudeTools.has(id)) continue;\n claudeTools.set(id, name);\n while (claudeTools.size > MAX_CLAUDE_PENDING_TOOLS) {\n const oldestToolId = claudeTools.keys().next().value;\n if (oldestToolId === undefined) break;\n claudeTools.delete(oldestToolId);\n }\n record.toolCalls++;\n record.currentTool = name;\n process.stdout.write(`\u2192 ${name}\\n`);\n }\n }\n const usage = assistant.usage;\n if (typeof usage === \"object\" && usage !== null && !Array.isArray(usage)) {\n const values = usage as Record<string, unknown>;\n const delta = {\n input: numberField(values.input_tokens),\n output: numberField(values.output_tokens),\n cacheRead: numberField(values.cache_read_input_tokens),\n cacheWrite: numberField(values.cache_creation_input_tokens),\n cost: 0,\n };\n claudeCurrentUsage.input += delta.input;\n claudeCurrentUsage.output += delta.output;\n claudeCurrentUsage.cacheRead += delta.cacheRead;\n claudeCurrentUsage.cacheWrite += delta.cacheWrite;\n syncClaudeUsage();\n emitTokenUsage(delta, { model: record.model ?? stringField(event.model) });\n }\n if (typeof event.error === \"string\") {\n sawAgentError = true;\n terminalError = event.error;\n }\n enforceTokenLimit();\n update();\n return;\n }\n if (event.type === \"user\") {\n const message = event.message;\n if (typeof message !== \"object\" || message === null || Array.isArray(message)) return;\n const content = (message as Record<string, unknown>).content;\n if (!Array.isArray(content)) return;\n for (const block of content) {\n if (typeof block !== \"object\" || block === null || Array.isArray(block)) continue;\n const part = block as Record<string, unknown>;\n if (part.type !== \"tool_result\") continue;\n const id = stringField(part.tool_use_id);\n if (id) claudeTools.delete(id);\n }\n const current = [...claudeTools.values()].at(-1);\n if (current) record.currentTool = current;\n else delete record.currentTool;\n update();\n return;\n }\n if (event.type === \"stream_event\") {\n const streamEvent = event.event;\n if (typeof streamEvent !== \"object\" || streamEvent === null || Array.isArray(streamEvent)) return;\n const stream = streamEvent as Record<string, unknown>;\n if (stream.type !== \"content_block_start\") return;\n const contentBlock = stream.content_block;\n if (typeof contentBlock !== \"object\" || contentBlock === null || Array.isArray(contentBlock)) return;\n const block = contentBlock as Record<string, unknown>;\n const name = stringField(block.name);\n if (block.type === \"tool_use\" && name) {\n record.currentTool = name;\n update();\n }\n return;\n }\n if (event.type !== \"result\") return;\n claudeResultSeen = true;\n const sessionId = stringField(event.session_id);\n if (sessionId) record.runnerSessionId = sessionId;\n const resultText = typeof event.result === \"string\" ? event.result : \"\";\n if (resultText) record.text = latestRunText(resultText);\n if (event.structured_output !== undefined) record.value = event.structured_output;\n record.turns += Math.max(0, Math.floor(numberField(event.num_turns)));\n const resultUsage =\n typeof event.usage === \"object\" && event.usage !== null && !Array.isArray(event.usage)\n ? (event.usage as Record<string, unknown>)\n : undefined;\n // The result frame supersedes the assistant-frame stream for this turn:\n // fold any unreported assistant tokens into the result delta so cumulative\n // attribution stays exact without double-counting assistant emissions.\n const resultDelta = resultUsage\n ? {\n input: numberField(resultUsage.input_tokens) - claudeCurrentUsage.input,\n output: numberField(resultUsage.output_tokens) - claudeCurrentUsage.output,\n cacheRead:\n numberField(resultUsage.cache_read_input_tokens) - claudeCurrentUsage.cacheRead,\n cacheWrite:\n numberField(resultUsage.cache_creation_input_tokens) - claudeCurrentUsage.cacheWrite,\n cost: Math.max(0, numberField(event.total_cost_usd)),\n }\n : { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: Math.max(0, numberField(event.total_cost_usd)) };\n claudeCompletedUsage.input += resultUsage\n ? numberField(resultUsage.input_tokens)\n : claudeCurrentUsage.input;\n claudeCompletedUsage.output += resultUsage\n ? numberField(resultUsage.output_tokens)\n : claudeCurrentUsage.output;\n claudeCompletedUsage.cacheRead += resultUsage\n ? numberField(resultUsage.cache_read_input_tokens)\n : claudeCurrentUsage.cacheRead;\n claudeCompletedUsage.cacheWrite += resultUsage\n ? numberField(resultUsage.cache_creation_input_tokens)\n : claudeCurrentUsage.cacheWrite;\n claudeCompletedUsage.cost += Math.max(0, numberField(event.total_cost_usd));\n claudeCurrentUsage.input = 0;\n claudeCurrentUsage.output = 0;\n claudeCurrentUsage.cacheRead = 0;\n claudeCurrentUsage.cacheWrite = 0;\n syncClaudeUsage();\n emitTokenUsage(resultDelta, { model: record.model ?? stringField(event.model) });\n enforceTokenLimit();\n const failed = event.is_error === true || event.subtype !== \"success\";\n if (failed) {\n sawAgentError = true;\n const errors = Array.isArray(event.errors)\n ? event.errors.filter((value): value is string => typeof value === \"string\").join(\" \u00B7 \")\n : \"\";\n terminalError = errors || resultText || `Claude returned ${String(event.subtype ?? \"an error\")}`;\n claudeSteering.splice(0);\n claudeFollowUps.splice(0);\n } else {\n sawAgentError = false;\n if (!terminalStatus) terminalError = undefined;\n }\n if (failed || terminalStatus) claudeSentInputs.splice(0);\n else claudeSentInputs.shift();\n claudeCanFollowUp = !failed && !terminalStatus;\n delete record.currentTool;\n updateClaudeQueue();\n if (failed || terminalStatus) {\n child.stdin?.end();\n return;\n }\n flushClaudeSteering();\n if (claudeSentInputs.length === 0 && claudeSteering.length === 0) {\n flushClaudeFollowUps();\n }\n if (\n claudeSentInputs.length === 0 &&\n claudeSteering.length === 0 &&\n claudeFollowUps.length === 0\n ) {\n scheduleClaudeClose();\n }\n };\n\n const processEvent = (line: string): void => {\n if (process.env.PI_FABRIC_INJECT_CRASH === \"stream\") throw new Error(\"simulated stream crash\");\n if (!line.trim()) return;\n appendLog(`${line}\\n`);\n sessionStream?.write(`${line}\\n`);\n let event: Record<string, unknown>;\n try {\n const parsed: unknown = JSON.parse(line);\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) return;\n event = parsed as Record<string, unknown>;\n } catch {\n return;\n }\n if (options.runner === \"claude\") {\n processClaudeEvent(event);\n return;\n }\n compactControl.observe(event);\n if (event.type === \"agent_start\") {\n emitLifecycle(\"pi.agent_start\");\n retryPending = false;\n sawAgentError = false;\n terminalError = undefined;\n return;\n }\n if (event.type === \"response\" && event.command === \"prompt\" && event.success === false) {\n sawAgentError = true;\n terminalError = typeof event.error === \"string\" ? event.error : \"Pi rejected the prompt\";\n child.stdin?.end();\n return;\n }\n if (event.type === \"extension_ui_request\") {\n const method = event.method;\n if (\n typeof event.id === \"string\" &&\n (method === \"select\" || method === \"confirm\" || method === \"input\" || method === \"editor\")\n ) {\n child.stdin?.write(\n `${JSON.stringify({ type: \"extension_ui_response\", id: event.id, cancelled: true })}\\n`,\n );\n }\n return;\n }\n if (event.type === \"tool_execution_start\") {\n record.toolCalls++;\n if (typeof event.toolName === \"string\") {\n record.currentTool = event.toolName;\n process.stdout.write(`\u2192 ${event.toolName}\\n`);\n }\n update();\n return;\n }\n if (event.type === \"tool_execution_end\") {\n if (event.isError === true) {\n emitLifecycle(\"pi.tool_error\", {\n ...(typeof event.toolCallId === \"string\" ? { toolCallId: event.toolCallId } : {}),\n ...(typeof event.toolName === \"string\" ? { toolName: event.toolName } : {}),\n });\n }\n delete record.currentTool;\n update();\n return;\n }\n if (event.type === \"turn_end\") {\n emitLifecycle(\"pi.turn_end\", {\n ...(typeof event.turnIndex === \"number\" ? { turnIndex: event.turnIndex } : {}),\n });\n record.turns++;\n update();\n return;\n }\n if (event.type === \"queue_update\") {\n const steering = Array.isArray(event.steering)\n ? event.steering.filter((value): value is string => typeof value === \"string\")\n : [];\n const followUp = Array.isArray(event.followUp)\n ? event.followUp.filter((value): value is string => typeof value === \"string\")\n : [];\n record.pendingMessages = { steering, followUp };\n update();\n return;\n }\n if (event.type === \"message_end\") {\n const message = event.message;\n if (typeof message !== \"object\" || message === null || Array.isArray(message)) return;\n const messageRecord = message as Record<string, unknown>;\n if (messageRecord.role !== \"assistant\") return;\n const text = extractText(messageRecord);\n if (text) {\n record.text = latestRunText(text);\n process.stdout.write(`\\n${text}\\n`);\n }\n const usageDelta = extractUsageDelta(messageRecord);\n applyUsage(record, messageRecord);\n emitTokenUsage(usageDelta, {\n model: stringField(messageRecord.model),\n provider: stringField(messageRecord.provider),\n });\n enforceTokenLimit();\n if (messageRecord.stopReason === \"error\") {\n sawAgentError = true;\n terminalError = assistantError(messageRecord);\n } else {\n sawAgentError = false;\n // Once a terminal cause is set (e.g. the per-child token guard), keep it;\n // a later non-error message_end must not clobber the reason we are\n // terminating for.\n if (!terminalStatus) terminalError = undefined;\n }\n update();\n return;\n }\n if (event.type === \"agent_end\") {\n emitLifecycle(\"pi.agent_end\", { willRetry: event.willRetry === true });\n retryPending = event.willRetry === true;\n return;\n }\n if (event.type === \"agent_settled\") {\n emitLifecycle(\"pi.agent_settled\");\n if (!retryPending) {\n // Pull controls that landed with the final stream events before deciding\n // whether this one-shot child can close. A queued compact keeps stdin\n // open until its correlated response and compaction_end are observed.\n pollSteer();\n compactControl.childSettled();\n }\n return;\n }\n if (event.type === \"compaction_end\") {\n emitLifecycle(\"pi.session_compact\", {\n ...(typeof event.reason === \"string\" ? { reason: event.reason } : {}),\n ...(typeof event.willRetry === \"boolean\" ? { willRetry: event.willRetry } : {}),\n });\n return;\n }\n if (event.type === \"extension_error\") {\n const error = typeof event.error === \"string\" ? event.error : \"Extension error\";\n stderr = `${stderr}\\n${error}`.trim().slice(-MAX_STDERR_CHARS);\n update();\n }\n };\n\n child.stdin?.on(\"error\", () => {});\n if (options.runner === \"claude\") {\n writeClaudeInput(\"initial\", task, images);\n } else if (options.runner === \"veda\") {\n // Veda reads the prompt from stdin when no positional prompt is given.\n // Mirror its <system_instructions> wrapping so systemPrompt and schema\n // instructions reach the backend model.\n const sections: string[] = [];\n if (options.systemPrompt) {\n sections.push(`<system_instructions>\\n${options.systemPrompt}\\n</system_instructions>`);\n }\n if (schema) {\n sections.push(\n `Your final response must contain only JSON matching this schema, without Markdown fences:\\n${schema}`,\n );\n }\n sections.push(task);\n child.stdin?.write(sections.join(\"\\n\\n\"));\n child.stdin?.end();\n } else {\n child.stdin?.write(\n `${JSON.stringify({\n type: \"prompt\",\n message: task,\n ...(images.length > 0 ? { images } : {}),\n })}\\n`,\n );\n }\n\n // Tail a control file (steer.jsonl) the parent appends to and forward each\n // queued command to the child pi over its RPC stdin. This is the fabric\n // steering channel: the orchestrator (or any peer via the mesh relay) can\n // interject a steer / follow_up / queue-mode command between the child's\n // turns without stopping and respawning it, preserving its context. The\n // poller is best-effort: a closed or ended stdin (settled/stopped child) is\n // swallowed so a late steer never crashes the worker.\n let steerOffset = 0;\n let steerRemainder = Buffer.alloc(0);\n let skippingOversizedSteerLine = false;\n const pollSteer = (): void => {\n if (!options.steerFile || terminalStatus) return;\n let descriptor: number | undefined;\n try {\n descriptor = fs.openSync(options.steerFile, \"r\");\n } catch {\n return;\n }\n try {\n const size = fs.fstatSync(descriptor).size;\n if (size < steerOffset) {\n steerOffset = 0;\n steerRemainder = Buffer.alloc(0);\n skippingOversizedSteerLine = false;\n }\n if (size <= steerOffset) return;\n const length = Math.min(size - steerOffset, STEER_READ_CHUNK_BYTES);\n const buffer = Buffer.allocUnsafe(length);\n const bytesRead = fs.readSync(descriptor, buffer, 0, length, steerOffset);\n steerOffset += bytesRead;\n let combined = Buffer.concat([steerRemainder, buffer.subarray(0, bytesRead)]);\n if (skippingOversizedSteerLine) {\n const skippedLineEnd = combined.indexOf(0x0a);\n if (skippedLineEnd < 0) return;\n combined = combined.subarray(skippedLineEnd + 1);\n skippingOversizedSteerLine = false;\n }\n const newline = combined.lastIndexOf(0x0a);\n if (newline < 0) {\n if (combined.length > MAX_STEER_LINE_BYTES) {\n steerRemainder = Buffer.alloc(0);\n skippingOversizedSteerLine = true;\n } else {\n steerRemainder = Buffer.from(combined);\n }\n return;\n }\n const remainder = combined.subarray(newline + 1);\n if (remainder.length > MAX_STEER_LINE_BYTES) {\n steerRemainder = Buffer.alloc(0);\n skippingOversizedSteerLine = true;\n } else {\n steerRemainder = Buffer.from(remainder);\n }\n let processedCommands = 0;\n for (const raw of combined.subarray(0, newline + 1).toString(\"utf8\").split(\"\\n\")) {\n if (processedCommands >= MAX_STEER_COMMANDS_PER_POLL) break;\n if (Buffer.byteLength(raw, \"utf8\") > MAX_STEER_LINE_BYTES) continue;\n const line = raw.trim();\n if (!line) continue;\n processedCommands += 1;\n let command: { type?: string; message?: string; mode?: string; instructions?: string };\n try {\n command = JSON.parse(line);\n } catch {\n continue;\n }\n try {\n if (options.runner === \"claude\") {\n if (claudeCloseTimer) clearTimeout(claudeCloseTimer);\n claudeCloseTimer = undefined;\n if (command.type === \"steer\" && typeof command.message === \"string\") {\n enqueueClaudeControl(claudeSteering, command.message);\n flushClaudeSteering();\n } else if (command.type === \"follow_up\" && typeof command.message === \"string\") {\n enqueueClaudeControl(claudeFollowUps, command.message);\n if (claudeCanFollowUp && claudeSentInputs.length === 0) flushClaudeFollowUps();\n } else if (\n command.type === \"set_steering_mode\" &&\n (command.mode === \"all\" || command.mode === \"one-at-a-time\")\n ) {\n claudeSteeringMode = command.mode;\n flushClaudeSteering();\n } else if (\n command.type === \"set_follow_up_mode\" &&\n (command.mode === \"all\" || command.mode === \"one-at-a-time\")\n ) {\n claudeFollowUpMode = command.mode;\n if (claudeCanFollowUp && claudeSentInputs.length === 0) flushClaudeFollowUps();\n }\n updateClaudeQueue();\n } else if (options.runner === \"veda\") {\n // Steering is unsupported for the veda runner: Veda executes one\n // headless prompt per invocation. The command is dropped, never\n // forwarded to pi-style stdin frames.\n } else if (command.type === \"steer\" && typeof command.message === \"string\") {\n child.stdin?.write(JSON.stringify({ type: \"steer\", message: command.message }) + \"\\n\");\n } else if (command.type === \"follow_up\" && typeof command.message === \"string\") {\n child.stdin?.write(JSON.stringify({ type: \"follow_up\", message: command.message }) + \"\\n\");\n } else if (command.type === \"set_steering_mode\" && typeof command.mode === \"string\") {\n child.stdin?.write(JSON.stringify({ type: \"set_steering_mode\", mode: command.mode }) + \"\\n\");\n } else if (command.type === \"set_follow_up_mode\" && typeof command.mode === \"string\") {\n child.stdin?.write(JSON.stringify({ type: \"set_follow_up_mode\", mode: command.mode }) + \"\\n\");\n } else if (command.type === \"compact\") {\n compactControl.queue(command.instructions);\n }\n } catch {\n /* stdin closed (settled/stopped child); a late steer is dropped */\n }\n }\n } finally {\n fs.closeSync(descriptor);\n }\n };\n const steerTimer = options.steerFile ? setInterval(pollSteer, 200) : undefined;\n steerTimer?.unref?.();\n\n child.stdout?.on(\"data\", (chunk: Buffer) => {\n const decoded = outputDecoder.write(chunk);\n if (options.runner === \"veda\") {\n vedaOutput += decoded;\n return;\n }\n outputBuffer += decoded;\n while (true) {\n const newline = outputBuffer.indexOf(\"\\n\");\n if (newline < 0) {\n if (outputBuffer.length > MAX_EVENT_LINE_CHARS) {\n terminalStatus = \"failed\";\n terminalError = \"Agent emitted an oversized event line\";\n outputBuffer = \"\";\n terminateChild(child, \"SIGTERM\");\n }\n break;\n }\n if (newline > MAX_EVENT_LINE_CHARS) {\n terminalStatus = \"failed\";\n terminalError = \"Agent emitted an oversized event line\";\n outputBuffer = \"\";\n terminateChild(child, \"SIGTERM\");\n return;\n }\n const line = outputBuffer.slice(0, newline).replace(/\\r$/, \"\");\n outputBuffer = outputBuffer.slice(newline + 1);\n processEvent(line);\n }\n });\n const recordStderr = (text: string): void => {\n if (!text) return;\n appendLog(`${JSON.stringify({ type: \"worker_stderr\", text })}\\n`);\n process.stderr.write(text);\n stderr = `${stderr}${text}`.slice(-MAX_STDERR_CHARS);\n };\n child.stderr?.on(\"data\", (chunk: Buffer) => {\n recordStderr(stderrDecoder.write(chunk));\n });\n child.stderr?.on(\"error\", () => {});\n\n const timeout = setTimeout(() => {\n terminalStatus = \"timed_out\";\n terminalError = `Agent timed out after ${options.timeoutMs}ms`;\n terminateChild(child, \"SIGTERM\");\n setTimeout(() => terminateChild(child, \"SIGKILL\"), KILL_GRACE_MS).unref();\n }, options.timeoutMs);\n timeout.unref();\n\n const stop = (): void => {\n if (terminalStatus) return;\n terminalStatus = \"stopped\";\n terminalError = \"Agent stopped\";\n terminateChild(child, \"SIGTERM\");\n setTimeout(() => terminateChild(child, \"SIGKILL\"), KILL_GRACE_MS).unref();\n };\n process.once(\"SIGTERM\", stop);\n process.once(\"SIGINT\", stop);\n process.once(\"SIGHUP\", stop);\n\n const exitCode = await new Promise<number | null>((resolve) => {\n child.once(\"error\", (error) => {\n terminalStatus = \"failed\";\n terminalError = error.message;\n resolve(null);\n });\n child.once(\"close\", (code) => resolve(code));\n });\n\n if (steerTimer) clearInterval(steerTimer);\n if (claudeCloseTimer) clearTimeout(claudeCloseTimer);\n clearTimeout(timeout);\n if (process.env.PI_FABRIC_INJECT_CRASH === \"close\") throw new Error(\"simulated close crash\");\n if (options.runner === \"veda\") {\n vedaOutput += outputDecoder.end();\n } else {\n outputBuffer += outputDecoder.end();\n }\n recordStderr(stderrDecoder.end());\n if (options.runner === \"veda\") {\n const trimmed = vedaOutput.trim();\n if (trimmed) {\n try {\n const parsed = parseStructuredValue(trimmed);\n if (typeof parsed === \"object\" && parsed !== null && !Array.isArray(parsed)) {\n vedaParsed = parsed as Record<string, unknown>;\n const text = stringField(vedaParsed.text) ?? \"\";\n if (text) {\n record.text = latestRunText(text);\n process.stdout.write(`\\n${text}\\n`);\n }\n const sessionId = stringField(vedaParsed.sessionId);\n if (sessionId) record.runnerSessionId = sessionId;\n const usage = vedaParsed.usage;\n if (typeof usage === \"object\" && usage !== null && !Array.isArray(usage)) {\n const values = usage as Record<string, unknown>;\n const input = numberField(values.inputTokens);\n const output = numberField(values.outputTokens);\n const cacheRead = numberField(values.cachedTokens);\n const cost = typeof values.costUsd === \"number\" ? values.costUsd : 0;\n record.usage = { input, output, cacheRead, cacheWrite: 0, cost };\n emitTokenUsage({ input, output, cacheRead, cacheWrite: 0, cost }, { model: stringField(vedaParsed.model) });\n }\n const envelopeErrors: string[] = [];\n const error = stringField(vedaParsed.error);\n if (error) envelopeErrors.push(error);\n // navigator-plan gates the response on a <program> design block and\n // the worker persona on a <worker_report>; both exit non-zero and\n // report failure only via design/worker fields, not envelope.error.\n for (const key of [\"design\", \"worker\"] as const) {\n const gate = vedaParsed[key];\n if (typeof gate !== \"object\" || gate === null || Array.isArray(gate)) continue;\n const status = gate as Record<string, unknown>;\n if (status.ok !== false) continue;\n const details = Array.isArray(status.errors)\n ? status.errors.filter((entry): entry is string => typeof entry === \"string\").join(\"; \")\n : [stringField(status.reason), stringField(status.detail)]\n .filter((entry): entry is string => entry !== undefined)\n .join(\": \");\n envelopeErrors.push(`Veda ${key} failed${details ? `: ${details}` : \"\"}`);\n }\n if (envelopeErrors.length > 0) {\n sawAgentError = true;\n terminalError = envelopeErrors.join(\"\\n\");\n }\n record.turns += 1;\n update();\n }\n } catch {\n // Unparseable stdout; the generic failed-record path reports stderr.\n }\n }\n } else if (outputBuffer.trim()) {\n processEvent(outputBuffer);\n }\n record.exitCode = exitCode;\n record.stderr = stderr.slice(-MAX_STDERR_CHARS);\n if (\n record.compaction?.status === \"queued\" ||\n record.compaction?.status === \"in_flight\"\n ) {\n const error = terminalError ?? \"Child Pi exited before the queued compaction completed\";\n record.compaction = {\n ...record.compaction,\n status: \"failed\",\n updatedAt: Date.now(),\n finishedAt: Date.now(),\n error,\n };\n if (!terminalStatus) {\n terminalStatus = \"failed\";\n terminalError = error;\n }\n }\n record.finishedAt = Date.now();\n record.updatedAt = record.finishedAt;\n const childCompleted =\n exitCode === 0 &&\n !sawAgentError &&\n (options.runner === \"pi\" ||\n (options.runner === \"claude\" &&\n claudeResultSeen &&\n claudeSentInputs.length === 0 &&\n claudeSteering.length === 0 &&\n claudeFollowUps.length === 0) ||\n (options.runner === \"veda\" && vedaParsed !== undefined));\n record.status = terminalStatus ?? (childCompleted ? \"completed\" : \"failed\");\n if (terminalError) record.error = terminalError;\n if (record.status === \"failed\" && !record.error) {\n record.error =\n stderr.trim() ||\n (exitCode === 0\n ? `${runnerLabel(options.runner)} agent reported an error before exiting`\n : `${runnerLabel(options.runner)} exited with code ${exitCode ?? \"unknown\"}`);\n }\n if (record.status === \"completed\" && options.schemaFile) {\n try {\n const schema = JSON.parse(fs.readFileSync(options.schemaFile, \"utf8\")) as Record<\n string,\n unknown\n >;\n const value = record.value ?? parseStructuredValue(record.text);\n if (!Value.Check(schema, value)) {\n const errors = [...Value.Errors(schema, value)]\n .slice(0, 5)\n .map((error) => error.message)\n .join(\"; \");\n throw new Error(errors || \"value does not match schema\");\n }\n record.value = value;\n } catch (error) {\n record.status = \"failed\";\n const reason = error instanceof Error ? error.message : String(error);\n const output = record.text.trim();\n const snippet = output.slice(0, 200);\n record.error = `Structured agent output was invalid: ${reason}${snippet ? ` (output: ${snippet}${output.length > 200 ? \"\u2026\" : \"\"})` : \"\"}`;\n }\n }\n delete record.currentTool;\n writeRunRecord(options.statusFile, record);\n terminalWritten = true;\n process.stdout.write(`\\n[pi-fabric] ${record.status}\\n`);\n await new Promise<void>((resolve) =>\n sessionStream ? sessionStream.end(resolve) : resolve(),\n );\n process.exitCode = record.status === \"completed\" ? 0 : 1;\n};\n\nmain().catch((error) => {\n console.error(error instanceof Error ? (error.stack ?? error.message) : String(error));\n writeCrashStatus(error);\n process.exit(1);\n});\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["#!/usr/bin/env node\n\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport type { ChildProcess, SpawnOptions } from \"node:child_process\";\nimport crossSpawn from \"cross-spawn\";\nimport { StringDecoder } from \"node:string_decoder\";\nimport { Value } from \"typebox/value\";\nimport type { ImageContent } from \"@earendil-works/pi-ai\";\nimport type {\n AgentRunRecord,\n AgentRunStatus,\n} from \"./agents/types.js\";\n\nconst NODE_SCRIPT_EXTENSIONS = new Set([\".js\", \".cjs\", \".mjs\", \".ts\", \".cts\", \".mts\"]);\n\nconst spawnCli = (\n command: string,\n args: readonly string[],\n options: SpawnOptions,\n): ChildProcess => NODE_SCRIPT_EXTENSIONS.has(path.extname(command).toLowerCase())\n ? crossSpawn(process.execPath, [command, ...args], options)\n : crossSpawn(command, [...args], options);\n\ntype ClaudeCliModule = typeof import(\"./agents/claude-cli.js\");\ntype VedaCliModule = typeof import(\"./agents/veda-cli.js\");\ntype CompactControlModule = typeof import(\"./agents/compact-control.js\");\ntype WorkerOptionsModule = typeof import(\"./worker/options.js\");\ntype WorkerRunRecordModule = typeof import(\"./worker/run-record.js\");\ntype WorkerSessionExportModule = typeof import(\"./worker/session-export.js\");\n\nconst loadWorkerOptions = async (): Promise<WorkerOptionsModule> => {\n if (!import.meta.url.endsWith(\".ts\")) return import(\"./worker/options.js\");\n const sourceModulePath = \"./worker/options.ts\";\n return import(sourceModulePath) as Promise<WorkerOptionsModule>;\n};\n\nconst loadWorkerRunRecord = async (): Promise<WorkerRunRecordModule> => {\n if (!import.meta.url.endsWith(\".ts\")) return import(\"./worker/run-record.js\");\n const sourceModulePath = \"./worker/run-record.ts\";\n return import(sourceModulePath) as Promise<WorkerRunRecordModule>;\n};\n\nconst loadWorkerSessionExport = async (): Promise<WorkerSessionExportModule> => {\n if (!import.meta.url.endsWith(\".ts\")) return import(\"./worker/session-export.js\");\n const sourceModulePath = \"./worker/session-export.ts\";\n return import(sourceModulePath) as Promise<WorkerSessionExportModule>;\n};\n\nconst loadCompactControl = async (): Promise<CompactControlModule> => {\n if (!import.meta.url.endsWith(\".ts\")) return import(\"./agents/compact-control.js\");\n const sourceModulePath = \"./agents/compact-control.ts\";\n return import(sourceModulePath) as Promise<CompactControlModule>;\n};\n\nconst loadClaudeCli = async (): Promise<ClaudeCliModule> => {\n if (!import.meta.url.endsWith(\".ts\")) return import(\"./agents/claude-cli.js\");\n const sourceModulePath = \"./agents/claude-cli.ts\";\n return import(sourceModulePath) as Promise<ClaudeCliModule>;\n};\n\nconst loadVedaCli = async (): Promise<VedaCliModule> => {\n if (!import.meta.url.endsWith(\".ts\")) return import(\"./agents/veda-cli.js\");\n const sourceModulePath = \"./agents/veda-cli.ts\";\n return import(sourceModulePath) as Promise<VedaCliModule>;\n};\n\nconst MAX_STDERR_CHARS = 20_000;\nconst MAX_EVENT_LINE_CHARS = 4 * 1024 * 1024;\nconst STEER_READ_CHUNK_BYTES = 256 * 1024;\nconst MAX_STEER_LINE_BYTES = 64 * 1024;\nconst MAX_STEER_COMMANDS_PER_POLL = 256;\nconst MAX_CLAUDE_PENDING_INPUTS = 256;\nconst MAX_CLAUDE_PENDING_TOOLS = 1_000;\nconst KILL_GRACE_MS = 5_000;\n\nconst extractText = (message: Record<string, unknown>): string => {\n const content = message.content;\n if (typeof content === \"string\") return content;\n if (!Array.isArray(content)) return \"\";\n return content\n .filter(\n (part): part is { type: \"text\"; text: string } =>\n typeof part === \"object\" &&\n part !== null &&\n (part as Record<string, unknown>).type === \"text\" &&\n typeof (part as Record<string, unknown>).text === \"string\",\n )\n .map((part) => part.text)\n .join(\"\");\n};\n\nconst readImages = (filePath: string | undefined): ImageContent[] => {\n if (!filePath) return [];\n const parsed: unknown = JSON.parse(fs.readFileSync(filePath, \"utf8\"));\n if (!Array.isArray(parsed)) throw new Error(\"Agent images file must contain an array\");\n const images: ImageContent[] = [];\n for (const value of parsed) {\n if (\n typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value) ||\n (value as { type?: unknown }).type !== \"image\" ||\n typeof (value as { data?: unknown }).data !== \"string\" ||\n typeof (value as { mimeType?: unknown }).mimeType !== \"string\"\n ) {\n throw new Error(\"Agent images file contains an invalid image block\");\n }\n images.push({\n type: \"image\",\n data: (value as { data: string }).data,\n mimeType: (value as { mimeType: string }).mimeType,\n });\n }\n return images;\n};\n\nconst numberField = (value: unknown): number => (typeof value === \"number\" ? value : 0);\n\nconst stringField = (value: unknown): string | undefined =>\n typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n\nconst assistantError = (message: Record<string, unknown>): string => {\n const details: string[] = [];\n const direct = stringField(message.errorMessage) ?? stringField(message.error);\n if (direct) details.push(direct);\n if (Array.isArray(message.diagnostics)) {\n for (const diagnostic of message.diagnostics) {\n if (typeof diagnostic !== \"object\" || diagnostic === null || Array.isArray(diagnostic)) continue;\n const record = diagnostic as Record<string, unknown>;\n const nested =\n typeof record.error === \"object\" && record.error !== null && !Array.isArray(record.error)\n ? (record.error as Record<string, unknown>)\n : undefined;\n const detail = stringField(nested?.message) ?? stringField(record.message);\n if (detail) details.push(detail);\n }\n }\n const unique = [...new Set(details)];\n const provider = stringField(message.provider);\n const model = stringField(message.model);\n const source = [provider, model].filter((value): value is string => Boolean(value)).join(\"/\");\n const summary = unique.join(\" \u00B7 \") || \"Pi agent reported an error\";\n return `${source ? `${source}: ` : \"\"}${summary}`.slice(0, MAX_STDERR_CHARS);\n};\n\nconst runnerLabel = (runner: string): string =>\n runner === \"claude\" ? \"Claude\" : runner === \"veda\" ? \"Veda\" : \"Pi\";\n\nconst terminateChild = (child: ChildProcess, signal: NodeJS.Signals): void => {\n if (!child.pid) return;\n try {\n process.kill(process.platform === \"win32\" ? child.pid : -child.pid, signal);\n } catch { /* child process group already exited */ }\n};\n\nconst extractBalancedJson = (text: string, start: number): string | null => {\n const open = text[start];\n if (open !== \"{\" && open !== \"[\") return null;\n const close = open === \"{\" ? \"}\" : \"]\";\n let depth = 0;\n let inString = false;\n let escaped = false;\n for (let i = start; i < text.length; i++) {\n const ch = text[i];\n if (inString) {\n if (escaped) escaped = false;\n else if (ch === \"\\\\\") escaped = true;\n else if (ch === '\"') inString = false;\n continue;\n }\n if (ch === '\"') inString = true;\n else if (ch === open) depth++;\n else if (ch === close) {\n depth--;\n if (depth === 0) return text.slice(start, i + 1);\n }\n }\n return null;\n};\n\nconst parseStructuredValue = (text: string): unknown => {\n const trimmed = text.trim();\n try {\n return JSON.parse(trimmed);\n } catch {\n // Whole text is not JSON; try extraction below.\n }\n const fenced = trimmed.match(/```(?:json)?\\s*\\n([\\s\\S]*?)\\n```/i);\n if (fenced?.[1]) {\n try {\n return JSON.parse(fenced[1].trim());\n } catch {\n // Fenced block is not JSON; try balanced extraction below.\n }\n }\n const start = trimmed.search(/[{\\[]/);\n if (start >= 0) {\n const balanced = extractBalancedJson(trimmed, start);\n if (balanced) return JSON.parse(balanced);\n }\n return JSON.parse(trimmed);\n};\n\nlet crashContext: { statusFile: string; record: AgentRunRecord } | undefined;\nlet runRecordHelpers: WorkerRunRecordModule | undefined;\nlet terminalWritten = false;\nconst writeCrashStatus = (error: unknown): void => {\n if (!crashContext || !runRecordHelpers || terminalWritten) return;\n try {\n runRecordHelpers.writeCrashRunRecord(crashContext.statusFile, crashContext.record, error);\n } catch {\n // Best effort: if the crash-status write itself fails, #monitor falls back\n // to \"Agent transport exited without a result\".\n }\n};\nprocess.on(\"uncaughtException\", (error) => {\n writeCrashStatus(error);\n process.stderr.write(`${error instanceof Error ? error.stack ?? error.message : error}\\n`);\n process.exit(1);\n});\nprocess.on(\"unhandledRejection\", (error) => {\n writeCrashStatus(error);\n process.stderr.write(`Unhandled rejection: ${error instanceof Error ? error.stack ?? error.message : error}\\n`);\n process.exit(1);\n});\n\nconst main = async (): Promise<void> => {\n const [optionHelpers, loadedRunRecordHelpers, sessionExportHelpers] = await Promise.all([\n loadWorkerOptions(),\n loadWorkerRunRecord(),\n loadWorkerSessionExport(),\n ]);\n runRecordHelpers = loadedRunRecordHelpers;\n const {\n applyUsage,\n createRunningRecord,\n emptyUsage,\n extractUsageDelta,\n latestRunText,\n updateRunRecord,\n writeRunRecord,\n } = loadedRunRecordHelpers;\n const options = optionHelpers.parseWorkerOptions();\n const sessionExporter = options.sessionExportFile\n ? new sessionExportHelpers.SessionExporter({\n file: options.sessionExportFile,\n sessionId: options.id,\n cwd: options.cwd,\n agentName: options.name,\n })\n : undefined;\n const thinking =\n options.thinking === \"off\" ||\n options.thinking === \"minimal\" ||\n options.thinking === \"low\" ||\n options.thinking === \"medium\" ||\n options.thinking === \"high\" ||\n options.thinking === \"xhigh\" ||\n options.thinking === \"max\"\n ? options.thinking\n : undefined;\n const task = fs.readFileSync(options.taskFile, \"utf8\");\n const images = readImages(options.imagesFile);\n const record = createRunningRecord(options, task, thinking, Date.now());\n writeRunRecord(options.statusFile, record);\n const emitLifecycle = (\n event: string,\n data?: Record<string, unknown>,\n ): void => {\n try {\n fs.mkdirSync(path.dirname(options.lifecycleFile), { recursive: true });\n fs.appendFileSync(\n options.lifecycleFile,\n JSON.stringify({ version: 1, event, occurredAt: Date.now(), ...(data ? { data } : {}) }) + \"\\n\",\n { encoding: \"utf8\", mode: 0o600 },\n );\n } catch {\n // Lifecycle telemetry is best-effort and must not fail the child run.\n }\n };\n crashContext = { statusFile: options.statusFile, record };\n process.stdout.write(`[pi-fabric] ${options.name}\\n${task}\\n\\n`);\n fs.mkdirSync(path.dirname(options.logFile), { recursive: true });\n // Other processes tail this file while the run is live (transcript reader,\n // dashboards, preview trees). The previous buffered createWriteStream visibly\n // stalled mid-run \u2014 append synchronously so events are durable immediately.\n const appendLog = (text: string): void => {\n try {\n fs.appendFileSync(options.logFile, text, { encoding: \"utf8\", mode: 0o600 });\n } catch {\n // Event logging is best-effort and must not fail the child run.\n }\n };\n const sessionStream =\n options.runner === \"claude\" && options.sessionFile\n ? fs.createWriteStream(options.sessionFile, { flags: \"a\", mode: 0o600 })\n : undefined;\n sessionStream?.on(\"error\", () => {});\n\n const schema = options.schemaFile\n ? fs.readFileSync(options.schemaFile, \"utf8\")\n : undefined;\n const piArguments = [\"--mode\", \"rpc\"];\n if (options.sessionFile) piArguments.push(\"--session\", options.sessionFile);\n else piArguments.push(\"--no-session\");\n if (!options.extensions) piArguments.push(\"--no-extensions\");\n if (options.fabricExtensionPath) piArguments.push(\"-e\", options.fabricExtensionPath);\n if (options.tools.length > 0) piArguments.push(\"--tools\", options.tools.join(\",\"));\n else piArguments.push(\"--no-tools\"); // explicit empty allowlist => no tools, not Pi defaults\n if (options.model) piArguments.push(\"--model\", options.model);\n if (thinking) piArguments.push(\"--thinking\", thinking);\n if (options.systemPrompt) piArguments.push(\"--append-system-prompt\", options.systemPrompt);\n if (schema) {\n piArguments.push(\n \"--append-system-prompt\",\n `Your final response must contain only JSON matching this schema, without Markdown fences:\\n${schema}`,\n );\n }\n const claudeCli = options.runner === \"claude\" ? await loadClaudeCli() : undefined;\n const vedaCli = options.runner === \"veda\" ? await loadVedaCli() : undefined;\n const childArguments =\n options.runner === \"claude\"\n ? claudeCli!.buildClaudeArguments({\n tools: options.tools,\n extensions: options.extensions,\n persistentSession: Boolean(options.sessionFile),\n ...(options.model ? { model: options.model } : {}),\n ...(thinking ? { thinking } : {}),\n ...(options.systemPrompt ? { systemPrompt: options.systemPrompt } : {}),\n ...(schema ? { schema } : {}),\n ...(options.runnerSessionId ? { runnerSessionId: options.runnerSessionId } : {}),\n name: options.name,\n })\n : options.runner === \"veda\"\n ? vedaCli!.buildVedaArguments({\n backend: options.vedaBackend,\n persona: options.vedaPersona,\n ...(options.model ? { model: options.model } : {}),\n ...(thinking ? { thinking } : {}),\n tools: options.tools,\n // Isolate selection and conversation state per child run so\n // parallel Fabric agents never share Veda session state.\n session: `fabric-${options.id}`,\n })\n : piArguments;\n const childBinary =\n options.runner === \"claude\"\n ? options.claudeBinary\n : options.runner === \"veda\"\n ? options.vedaBinary\n : options.piBinary;\n\n const child = spawnCli(childBinary, childArguments, {\n cwd: options.cwd,\n detached: process.platform !== \"win32\",\n env: {\n ...process.env,\n PI_FABRIC_DEPTH: String(options.depth),\n PI_FABRIC_PARENT_RUN: options.id,\n PI_FABRIC_AGENT_NAME: options.name,\n ...(options.mainAgentId ? { PI_FABRIC_MAIN_AGENT_ID: options.mainAgentId } : {}),\n PI_FABRIC_GRANTED_RISKS: options.grantedRisks.join(\",\"),\n PI_FABRIC_FULL_CODE_MODE: String(options.fullCodeMode),\n ...(options.actorId ? { PI_FABRIC_ACTOR_ID: options.actorId } : {}),\n ...(options.actorName ? { PI_FABRIC_ACTOR_NAME: options.actorName } : {}),\n PI_FABRIC_CAPABILITY_REQUIREMENTS: JSON.stringify(\n options.capabilityRequirements ?? [],\n ),\n PI_FABRIC_CAPABILITY_DIGEST: options.capabilityDigest ?? \"\",\n ...(options.meshRoot ? { PI_FABRIC_MESH_ROOT: options.meshRoot } : {}),\n ...(options.projectRoot ? { PI_FABRIC_PROJECT_ROOT: options.projectRoot } : {}),\n ...(options.ownerHostId ? { PI_FABRIC_OWNER_HOST_ID: options.ownerHostId } : {}),\n ...(options.ownerIdentityId\n ? { PI_FABRIC_OWNER_IDENTITY_ID: options.ownerIdentityId }\n : {}),\n ...(options.runRoot ? { PI_FABRIC_RUN_ROOT: options.runRoot } : {}),\n },\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n let stderr = \"\";\n let outputBuffer = \"\";\n // Veda emits a single JSON document on stdout (progress goes to stderr, and\n // with --json progress is suppressed entirely). Buffer it raw and parse it\n // once the child closes instead of treating stdout as NDJSON lines.\n let vedaOutput = \"\";\n let vedaParsed: Record<string, unknown> | undefined;\n const outputDecoder = new StringDecoder(\"utf8\");\n const stderrDecoder = new StringDecoder(\"utf8\");\n let terminalStatus: AgentRunStatus | undefined;\n let terminalError: string | undefined;\n let sawAgentError = false;\n let retryPending = false;\n\n const update = (): void => updateRunRecord(options.statusFile, record);\n\n // Attributed token telemetry. Every usage-bearing child event emits one\n // tokens.usage lifecycle entry identified by this run/actor/runner/depth.\n // The manager drains these alongside the pi.* lifecycle stream and appends\n // them to the budget ledger, replacing the old per-settle flat attribution.\n const lastEmittedUsage = emptyUsage();\n const emitTokenUsage = (\n delta?: {\n input: number;\n output: number;\n cacheRead: number;\n cacheWrite: number;\n cost: number;\n },\n attribution?: { model?: string | undefined; provider?: string | undefined },\n ): void => {\n const snapshot = record.usage;\n if (\n snapshot.input === lastEmittedUsage.input &&\n snapshot.output === lastEmittedUsage.output &&\n snapshot.cacheRead === lastEmittedUsage.cacheRead &&\n snapshot.cacheWrite === lastEmittedUsage.cacheWrite &&\n snapshot.cost === lastEmittedUsage.cost\n ) {\n return;\n }\n emitLifecycle(\"tokens.usage\", {\n runId: options.id,\n name: options.name,\n runner: options.runner,\n depth: options.depth,\n ...(options.actorId ? { actorId: options.actorId } : {}),\n ...(options.actorName ? { actorName: options.actorName } : {}),\n cumulativeTokens:\n snapshot.input + snapshot.output + snapshot.cacheRead + snapshot.cacheWrite,\n input: delta?.input ?? 0,\n output: delta?.output ?? 0,\n cacheRead: delta?.cacheRead ?? 0,\n cacheWrite: delta?.cacheWrite ?? 0,\n cost: delta?.cost ?? snapshot.cost,\n });\n // Mirror the emitted payload into the pi-format usage export (when the\n // host enabled agents.sessionExport) so tokscale/ccusage can attribute\n // subagent tokens and cost. Export intentionally never writes content.\n sessionExporter?.push(\n {\n input: delta?.input ?? 0,\n output: delta?.output ?? 0,\n cacheRead: delta?.cacheRead ?? 0,\n cacheWrite: delta?.cacheWrite ?? 0,\n cost: delta?.cost ?? snapshot.cost,\n },\n attribution?.model ?? record.model ?? options.model,\n attribution?.provider,\n );\n lastEmittedUsage.input = snapshot.input;\n lastEmittedUsage.output = snapshot.output;\n lastEmittedUsage.cacheRead = snapshot.cacheRead;\n lastEmittedUsage.cacheWrite = snapshot.cacheWrite;\n lastEmittedUsage.cost = snapshot.cost;\n };\n\n const { ChildCompactControl } = await loadCompactControl();\n const compactControl = new ChildCompactControl(options.id, {\n send(frame) {\n if (!child.stdin || child.stdin.writableEnded || child.stdin.destroyed) {\n throw new Error(\"Child Pi stdin closed before compaction could start\");\n }\n child.stdin.write(`${JSON.stringify(frame)}\\n`);\n },\n close() {\n child.stdin?.end();\n },\n update(status) {\n record.compaction = status;\n update();\n },\n });\n\n // Preemptive per-child token guard. timeoutMs bounds wall time and budgetUsd\n // bounds cost, but a single runaway child can still blow its own context\n // before Pi core compacts. When maxTokens is set and the child's cumulative\n // token usage crosses it, terminate the child like a timeout so the run\n // settles with a terminal status instead of burning to the hour deadline.\n // The error string is model-facing: the parent agent reads it verbatim, so it\n // must name the config key and remedy, and front-load the numbers before TUI\n // truncation.\n const enforceTokenLimit = (): void => {\n if (terminalStatus || !options.maxTokens || options.maxTokens <= 0) return;\n const total =\n record.usage.input +\n record.usage.output +\n record.usage.cacheRead +\n record.usage.cacheWrite;\n if (total <= options.maxTokens) return;\n terminalStatus = \"timed_out\";\n terminalError =\n `Fabric token limit reached: ${total} tokens (limit ${options.maxTokens} set by agents.maxTokensPerChild); terminating child. ` +\n `The count is cumulative across the run and includes cache reads/writes, so it grows every turn; ` +\n `raise or disable agents.maxTokensPerChild in /fabric settings (0 disables), or split the task into smaller agent runs.`;\n terminateChild(child, \"SIGTERM\");\n setTimeout(() => terminateChild(child, \"SIGKILL\"), KILL_GRACE_MS).unref();\n child.stdin?.end();\n };\n\n type ClaudeInputKind = \"initial\" | \"steer\" | \"follow_up\";\n const claudeTools = new Map<string, string>();\n const claudeCompletedUsage = emptyUsage();\n const claudeCurrentUsage = emptyUsage();\n const syncClaudeUsage = (): void => {\n record.usage = {\n input: claudeCompletedUsage.input + claudeCurrentUsage.input,\n output: claudeCompletedUsage.output + claudeCurrentUsage.output,\n cacheRead: claudeCompletedUsage.cacheRead + claudeCurrentUsage.cacheRead,\n cacheWrite: claudeCompletedUsage.cacheWrite + claudeCurrentUsage.cacheWrite,\n cost: claudeCompletedUsage.cost,\n };\n };\n\n const claudeSentInputs: Array<{ kind: ClaudeInputKind; message: string }> = [];\n const claudeSteering: string[] = [];\n const claudeFollowUps: string[] = [];\n let claudeSteeringMode: \"all\" | \"one-at-a-time\" = \"one-at-a-time\";\n let claudeFollowUpMode: \"all\" | \"one-at-a-time\" = \"one-at-a-time\";\n let claudeCanFollowUp = false;\n let claudeResultSeen = false;\n const enqueueClaudeControl = (queue: string[], message: string): void => {\n const pendingInputs = claudeSentInputs.length + claudeSteering.length + claudeFollowUps.length;\n if (pendingInputs >= MAX_CLAUDE_PENDING_INPUTS) return;\n queue.push(message);\n };\n let claudeCloseTimer: NodeJS.Timeout | undefined;\n\n const updateClaudeQueue = (): void => {\n const sentSteering = claudeSentInputs\n .filter((entry) => entry.kind === \"steer\")\n .map((entry) => entry.message);\n const sentFollowUps = claudeSentInputs\n .filter((entry) => entry.kind === \"follow_up\")\n .map((entry) => entry.message);\n record.pendingMessages = {\n steering: [...sentSteering, ...claudeSteering],\n followUp: [...sentFollowUps, ...claudeFollowUps],\n };\n update();\n };\n\n const writeClaudeInput = (\n kind: ClaudeInputKind,\n message: string,\n inputImages: readonly ImageContent[] = [],\n ): void => {\n if (claudeCloseTimer) clearTimeout(claudeCloseTimer);\n claudeCloseTimer = undefined;\n if (!child.stdin || child.stdin.writableEnded || child.stdin.destroyed) return;\n claudeSentInputs.push({ kind, message });\n if (kind === \"follow_up\") claudeCanFollowUp = false;\n child.stdin.write(\n `${JSON.stringify(claudeCli!.claudeUserMessage(message, inputImages))}\\n`,\n );\n updateClaudeQueue();\n };\n\n const flushClaudeSteering = (): void => {\n if (claudeSteering.length === 0) return;\n const alreadySent = claudeSentInputs.some((entry) => entry.kind === \"steer\");\n if (claudeSteeringMode === \"one-at-a-time\" && alreadySent) return;\n const count = claudeSteeringMode === \"all\" ? claudeSteering.length : 1;\n for (const message of claudeSteering.splice(0, count)) {\n writeClaudeInput(\"steer\", message);\n }\n };\n\n const flushClaudeFollowUps = (): void => {\n if (claudeFollowUps.length === 0 || claudeSteering.length > 0) return;\n if (claudeSentInputs.some((entry) => entry.kind === \"steer\")) return;\n const alreadySent = claudeSentInputs.some((entry) => entry.kind === \"follow_up\");\n if (claudeFollowUpMode === \"one-at-a-time\" && alreadySent) return;\n const count = claudeFollowUpMode === \"all\" ? claudeFollowUps.length : 1;\n for (const message of claudeFollowUps.splice(0, count)) {\n writeClaudeInput(\"follow_up\", message);\n }\n };\n\n const scheduleClaudeClose = (): void => {\n if (claudeCloseTimer || terminalStatus) return;\n claudeCloseTimer = setTimeout(() => {\n claudeCloseTimer = undefined;\n if (\n claudeSentInputs.length === 0 &&\n claudeSteering.length === 0 &&\n claudeFollowUps.length === 0\n ) {\n child.stdin?.end();\n }\n }, 300);\n claudeCloseTimer.unref();\n };\n\n const processClaudeEvent = (event: Record<string, unknown>): void => {\n if (event.type === \"system\" && event.subtype === \"init\") {\n const sessionId = stringField(event.session_id);\n if (sessionId) record.runnerSessionId = sessionId;\n const model = stringField(event.model);\n if (model && !record.model) record.model = model;\n update();\n return;\n }\n if (event.type === \"assistant\") {\n const message = event.message;\n if (typeof message !== \"object\" || message === null || Array.isArray(message)) return;\n const assistant = message as Record<string, unknown>;\n const text = extractText(assistant);\n if (text) {\n record.text = latestRunText(text);\n process.stdout.write(`\\n${text}\\n`);\n }\n const content = assistant.content;\n if (Array.isArray(content)) {\n for (const block of content) {\n if (typeof block !== \"object\" || block === null || Array.isArray(block)) continue;\n const part = block as Record<string, unknown>;\n if (part.type !== \"tool_use\") continue;\n const id = stringField(part.id);\n const name = stringField(part.name);\n if (!id || !name || claudeTools.has(id)) continue;\n claudeTools.set(id, name);\n while (claudeTools.size > MAX_CLAUDE_PENDING_TOOLS) {\n const oldestToolId = claudeTools.keys().next().value;\n if (oldestToolId === undefined) break;\n claudeTools.delete(oldestToolId);\n }\n record.toolCalls++;\n record.currentTool = name;\n process.stdout.write(`\u2192 ${name}\\n`);\n }\n }\n const usage = assistant.usage;\n if (typeof usage === \"object\" && usage !== null && !Array.isArray(usage)) {\n const values = usage as Record<string, unknown>;\n const delta = {\n input: numberField(values.input_tokens),\n output: numberField(values.output_tokens),\n cacheRead: numberField(values.cache_read_input_tokens),\n cacheWrite: numberField(values.cache_creation_input_tokens),\n cost: 0,\n };\n claudeCurrentUsage.input += delta.input;\n claudeCurrentUsage.output += delta.output;\n claudeCurrentUsage.cacheRead += delta.cacheRead;\n claudeCurrentUsage.cacheWrite += delta.cacheWrite;\n syncClaudeUsage();\n emitTokenUsage(delta, { model: record.model ?? stringField(event.model) });\n }\n if (typeof event.error === \"string\") {\n sawAgentError = true;\n terminalError = event.error;\n }\n enforceTokenLimit();\n update();\n return;\n }\n if (event.type === \"user\") {\n const message = event.message;\n if (typeof message !== \"object\" || message === null || Array.isArray(message)) return;\n const content = (message as Record<string, unknown>).content;\n if (!Array.isArray(content)) return;\n for (const block of content) {\n if (typeof block !== \"object\" || block === null || Array.isArray(block)) continue;\n const part = block as Record<string, unknown>;\n if (part.type !== \"tool_result\") continue;\n const id = stringField(part.tool_use_id);\n if (id) claudeTools.delete(id);\n }\n const current = [...claudeTools.values()].at(-1);\n if (current) record.currentTool = current;\n else delete record.currentTool;\n update();\n return;\n }\n if (event.type === \"stream_event\") {\n const streamEvent = event.event;\n if (typeof streamEvent !== \"object\" || streamEvent === null || Array.isArray(streamEvent)) return;\n const stream = streamEvent as Record<string, unknown>;\n if (stream.type !== \"content_block_start\") return;\n const contentBlock = stream.content_block;\n if (typeof contentBlock !== \"object\" || contentBlock === null || Array.isArray(contentBlock)) return;\n const block = contentBlock as Record<string, unknown>;\n const name = stringField(block.name);\n if (block.type === \"tool_use\" && name) {\n record.currentTool = name;\n update();\n }\n return;\n }\n if (event.type !== \"result\") return;\n claudeResultSeen = true;\n const sessionId = stringField(event.session_id);\n if (sessionId) record.runnerSessionId = sessionId;\n const resultText = typeof event.result === \"string\" ? event.result : \"\";\n if (resultText) record.text = latestRunText(resultText);\n if (event.structured_output !== undefined) record.value = event.structured_output;\n record.turns += Math.max(0, Math.floor(numberField(event.num_turns)));\n const resultUsage =\n typeof event.usage === \"object\" && event.usage !== null && !Array.isArray(event.usage)\n ? (event.usage as Record<string, unknown>)\n : undefined;\n // The result frame supersedes the assistant-frame stream for this turn:\n // fold any unreported assistant tokens into the result delta so cumulative\n // attribution stays exact without double-counting assistant emissions.\n const resultDelta = resultUsage\n ? {\n input: numberField(resultUsage.input_tokens) - claudeCurrentUsage.input,\n output: numberField(resultUsage.output_tokens) - claudeCurrentUsage.output,\n cacheRead:\n numberField(resultUsage.cache_read_input_tokens) - claudeCurrentUsage.cacheRead,\n cacheWrite:\n numberField(resultUsage.cache_creation_input_tokens) - claudeCurrentUsage.cacheWrite,\n cost: Math.max(0, numberField(event.total_cost_usd)),\n }\n : { input: 0, output: 0, cacheRead: 0, cacheWrite: 0, cost: Math.max(0, numberField(event.total_cost_usd)) };\n claudeCompletedUsage.input += resultUsage\n ? numberField(resultUsage.input_tokens)\n : claudeCurrentUsage.input;\n claudeCompletedUsage.output += resultUsage\n ? numberField(resultUsage.output_tokens)\n : claudeCurrentUsage.output;\n claudeCompletedUsage.cacheRead += resultUsage\n ? numberField(resultUsage.cache_read_input_tokens)\n : claudeCurrentUsage.cacheRead;\n claudeCompletedUsage.cacheWrite += resultUsage\n ? numberField(resultUsage.cache_creation_input_tokens)\n : claudeCurrentUsage.cacheWrite;\n claudeCompletedUsage.cost += Math.max(0, numberField(event.total_cost_usd));\n claudeCurrentUsage.input = 0;\n claudeCurrentUsage.output = 0;\n claudeCurrentUsage.cacheRead = 0;\n claudeCurrentUsage.cacheWrite = 0;\n syncClaudeUsage();\n emitTokenUsage(resultDelta, { model: record.model ?? stringField(event.model) });\n enforceTokenLimit();\n const failed = event.is_error === true || event.subtype !== \"success\";\n if (failed) {\n sawAgentError = true;\n const errors = Array.isArray(event.errors)\n ? event.errors.filter((value): value is string => typeof value === \"string\").join(\" \u00B7 \")\n : \"\";\n terminalError = errors || resultText || `Claude returned ${String(event.subtype ?? \"an error\")}`;\n claudeSteering.splice(0);\n claudeFollowUps.splice(0);\n } else {\n sawAgentError = false;\n if (!terminalStatus) terminalError = undefined;\n }\n if (failed || terminalStatus) claudeSentInputs.splice(0);\n else claudeSentInputs.shift();\n claudeCanFollowUp = !failed && !terminalStatus;\n delete record.currentTool;\n updateClaudeQueue();\n if (failed || terminalStatus) {\n child.stdin?.end();\n return;\n }\n flushClaudeSteering();\n if (claudeSentInputs.length === 0 && claudeSteering.length === 0) {\n flushClaudeFollowUps();\n }\n if (\n claudeSentInputs.length === 0 &&\n claudeSteering.length === 0 &&\n claudeFollowUps.length === 0\n ) {\n scheduleClaudeClose();\n }\n };\n\n const processEvent = (line: string): void => {\n if (process.env.PI_FABRIC_INJECT_CRASH === \"stream\") throw new Error(\"simulated stream crash\");\n if (!line.trim()) return;\n appendLog(`${line}\\n`);\n sessionStream?.write(`${line}\\n`);\n let event: Record<string, unknown>;\n try {\n const parsed: unknown = JSON.parse(line);\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) return;\n event = parsed as Record<string, unknown>;\n } catch {\n return;\n }\n if (options.runner === \"claude\") {\n processClaudeEvent(event);\n return;\n }\n compactControl.observe(event);\n if (event.type === \"agent_start\") {\n emitLifecycle(\"pi.agent_start\");\n retryPending = false;\n sawAgentError = false;\n terminalError = undefined;\n return;\n }\n if (event.type === \"response\" && event.command === \"prompt\" && event.success === false) {\n sawAgentError = true;\n terminalError = typeof event.error === \"string\" ? event.error : \"Pi rejected the prompt\";\n child.stdin?.end();\n return;\n }\n if (event.type === \"extension_ui_request\") {\n const method = event.method;\n if (\n typeof event.id === \"string\" &&\n (method === \"select\" || method === \"confirm\" || method === \"input\" || method === \"editor\")\n ) {\n child.stdin?.write(\n `${JSON.stringify({ type: \"extension_ui_response\", id: event.id, cancelled: true })}\\n`,\n );\n }\n return;\n }\n if (event.type === \"tool_execution_start\") {\n record.toolCalls++;\n if (typeof event.toolName === \"string\") {\n record.currentTool = event.toolName;\n process.stdout.write(`\u2192 ${event.toolName}\\n`);\n }\n update();\n return;\n }\n if (event.type === \"tool_execution_end\") {\n if (event.isError === true) {\n emitLifecycle(\"pi.tool_error\", {\n ...(typeof event.toolCallId === \"string\" ? { toolCallId: event.toolCallId } : {}),\n ...(typeof event.toolName === \"string\" ? { toolName: event.toolName } : {}),\n });\n }\n delete record.currentTool;\n update();\n return;\n }\n if (event.type === \"turn_end\") {\n emitLifecycle(\"pi.turn_end\", {\n ...(typeof event.turnIndex === \"number\" ? { turnIndex: event.turnIndex } : {}),\n });\n record.turns++;\n update();\n return;\n }\n if (event.type === \"queue_update\") {\n const steering = Array.isArray(event.steering)\n ? event.steering.filter((value): value is string => typeof value === \"string\")\n : [];\n const followUp = Array.isArray(event.followUp)\n ? event.followUp.filter((value): value is string => typeof value === \"string\")\n : [];\n record.pendingMessages = { steering, followUp };\n update();\n return;\n }\n if (event.type === \"message_end\") {\n const message = event.message;\n if (typeof message !== \"object\" || message === null || Array.isArray(message)) return;\n const messageRecord = message as Record<string, unknown>;\n if (messageRecord.role !== \"assistant\") return;\n const text = extractText(messageRecord);\n if (text) {\n record.text = latestRunText(text);\n process.stdout.write(`\\n${text}\\n`);\n }\n const usageDelta = extractUsageDelta(messageRecord);\n applyUsage(record, messageRecord);\n emitTokenUsage(usageDelta, {\n model: stringField(messageRecord.model),\n provider: stringField(messageRecord.provider),\n });\n enforceTokenLimit();\n if (messageRecord.stopReason === \"error\") {\n sawAgentError = true;\n terminalError = assistantError(messageRecord);\n } else {\n sawAgentError = false;\n // Once a terminal cause is set (e.g. the per-child token guard), keep it;\n // a later non-error message_end must not clobber the reason we are\n // terminating for.\n if (!terminalStatus) terminalError = undefined;\n }\n update();\n return;\n }\n if (event.type === \"agent_end\") {\n emitLifecycle(\"pi.agent_end\", { willRetry: event.willRetry === true });\n retryPending = event.willRetry === true;\n return;\n }\n if (event.type === \"agent_settled\") {\n emitLifecycle(\"pi.agent_settled\");\n if (!retryPending) {\n // Pull controls that landed with the final stream events before deciding\n // whether this one-shot child can close. A queued compact keeps stdin\n // open until its correlated response and compaction_end are observed.\n pollSteer();\n compactControl.childSettled();\n }\n return;\n }\n if (event.type === \"compaction_end\") {\n emitLifecycle(\"pi.session_compact\", {\n ...(typeof event.reason === \"string\" ? { reason: event.reason } : {}),\n ...(typeof event.willRetry === \"boolean\" ? { willRetry: event.willRetry } : {}),\n });\n return;\n }\n if (event.type === \"extension_error\") {\n const error = typeof event.error === \"string\" ? event.error : \"Extension error\";\n stderr = `${stderr}\\n${error}`.trim().slice(-MAX_STDERR_CHARS);\n update();\n }\n };\n\n child.stdin?.on(\"error\", () => {});\n if (options.runner === \"claude\") {\n writeClaudeInput(\"initial\", task, images);\n } else if (options.runner === \"veda\") {\n // Veda reads the prompt from stdin when no positional prompt is given.\n // Mirror its <system_instructions> wrapping so systemPrompt and schema\n // instructions reach the backend model.\n const sections: string[] = [];\n if (options.systemPrompt) {\n sections.push(`<system_instructions>\\n${options.systemPrompt}\\n</system_instructions>`);\n }\n if (schema) {\n sections.push(\n `Your final response must contain only JSON matching this schema, without Markdown fences:\\n${schema}`,\n );\n }\n sections.push(task);\n child.stdin?.write(sections.join(\"\\n\\n\"));\n child.stdin?.end();\n } else {\n child.stdin?.write(\n `${JSON.stringify({\n type: \"prompt\",\n message: task,\n ...(images.length > 0 ? { images } : {}),\n })}\\n`,\n );\n }\n\n // Tail a control file (steer.jsonl) the parent appends to and forward each\n // queued command to the child pi over its RPC stdin. This is the fabric\n // steering channel: the orchestrator (or any peer via the mesh relay) can\n // interject a steer / follow_up / queue-mode command between the child's\n // turns without stopping and respawning it, preserving its context. The\n // poller is best-effort: a closed or ended stdin (settled/stopped child) is\n // swallowed so a late steer never crashes the worker.\n let steerOffset = 0;\n let steerRemainder = Buffer.alloc(0);\n let skippingOversizedSteerLine = false;\n const pollSteer = (): void => {\n if (!options.steerFile || terminalStatus) return;\n let descriptor: number | undefined;\n try {\n descriptor = fs.openSync(options.steerFile, \"r\");\n } catch {\n return;\n }\n try {\n const size = fs.fstatSync(descriptor).size;\n if (size < steerOffset) {\n steerOffset = 0;\n steerRemainder = Buffer.alloc(0);\n skippingOversizedSteerLine = false;\n }\n if (size <= steerOffset) return;\n const length = Math.min(size - steerOffset, STEER_READ_CHUNK_BYTES);\n const buffer = Buffer.allocUnsafe(length);\n const bytesRead = fs.readSync(descriptor, buffer, 0, length, steerOffset);\n steerOffset += bytesRead;\n let combined = Buffer.concat([steerRemainder, buffer.subarray(0, bytesRead)]);\n if (skippingOversizedSteerLine) {\n const skippedLineEnd = combined.indexOf(0x0a);\n if (skippedLineEnd < 0) return;\n combined = combined.subarray(skippedLineEnd + 1);\n skippingOversizedSteerLine = false;\n }\n const newline = combined.lastIndexOf(0x0a);\n if (newline < 0) {\n if (combined.length > MAX_STEER_LINE_BYTES) {\n steerRemainder = Buffer.alloc(0);\n skippingOversizedSteerLine = true;\n } else {\n steerRemainder = Buffer.from(combined);\n }\n return;\n }\n const remainder = combined.subarray(newline + 1);\n if (remainder.length > MAX_STEER_LINE_BYTES) {\n steerRemainder = Buffer.alloc(0);\n skippingOversizedSteerLine = true;\n } else {\n steerRemainder = Buffer.from(remainder);\n }\n let processedCommands = 0;\n for (const raw of combined.subarray(0, newline + 1).toString(\"utf8\").split(\"\\n\")) {\n if (processedCommands >= MAX_STEER_COMMANDS_PER_POLL) break;\n if (Buffer.byteLength(raw, \"utf8\") > MAX_STEER_LINE_BYTES) continue;\n const line = raw.trim();\n if (!line) continue;\n processedCommands += 1;\n let command: { type?: string; message?: string; mode?: string; instructions?: string };\n try {\n command = JSON.parse(line);\n } catch {\n continue;\n }\n try {\n if (options.runner === \"claude\") {\n if (claudeCloseTimer) clearTimeout(claudeCloseTimer);\n claudeCloseTimer = undefined;\n if (command.type === \"steer\" && typeof command.message === \"string\") {\n enqueueClaudeControl(claudeSteering, command.message);\n flushClaudeSteering();\n } else if (command.type === \"follow_up\" && typeof command.message === \"string\") {\n enqueueClaudeControl(claudeFollowUps, command.message);\n if (claudeCanFollowUp && claudeSentInputs.length === 0) flushClaudeFollowUps();\n } else if (\n command.type === \"set_steering_mode\" &&\n (command.mode === \"all\" || command.mode === \"one-at-a-time\")\n ) {\n claudeSteeringMode = command.mode;\n flushClaudeSteering();\n } else if (\n command.type === \"set_follow_up_mode\" &&\n (command.mode === \"all\" || command.mode === \"one-at-a-time\")\n ) {\n claudeFollowUpMode = command.mode;\n if (claudeCanFollowUp && claudeSentInputs.length === 0) flushClaudeFollowUps();\n }\n updateClaudeQueue();\n } else if (options.runner === \"veda\") {\n // Steering is unsupported for the veda runner: Veda executes one\n // headless prompt per invocation. The command is dropped, never\n // forwarded to pi-style stdin frames.\n } else if (command.type === \"steer\" && typeof command.message === \"string\") {\n child.stdin?.write(JSON.stringify({ type: \"steer\", message: command.message }) + \"\\n\");\n } else if (command.type === \"follow_up\" && typeof command.message === \"string\") {\n child.stdin?.write(JSON.stringify({ type: \"follow_up\", message: command.message }) + \"\\n\");\n } else if (command.type === \"set_steering_mode\" && typeof command.mode === \"string\") {\n child.stdin?.write(JSON.stringify({ type: \"set_steering_mode\", mode: command.mode }) + \"\\n\");\n } else if (command.type === \"set_follow_up_mode\" && typeof command.mode === \"string\") {\n child.stdin?.write(JSON.stringify({ type: \"set_follow_up_mode\", mode: command.mode }) + \"\\n\");\n } else if (command.type === \"compact\") {\n compactControl.queue(command.instructions);\n }\n } catch {\n /* stdin closed (settled/stopped child); a late steer is dropped */\n }\n }\n } finally {\n fs.closeSync(descriptor);\n }\n };\n const steerTimer = options.steerFile ? setInterval(pollSteer, 200) : undefined;\n steerTimer?.unref?.();\n\n const failOversizedEvent = (line: string): void => {\n const prefix = line.slice(0, MAX_EVENT_LINE_CHARS);\n let artifactPath: string | undefined;\n try {\n artifactPath = path.join(path.dirname(options.logFile), \"oversized-event-prefix.txt\");\n fs.writeFileSync(artifactPath, prefix, { encoding: \"utf8\", mode: 0o600 });\n } catch {\n artifactPath = undefined;\n }\n terminalStatus = \"failed\";\n terminalError = artifactPath\n ? `Agent emitted an oversized event line; first ${prefix.length} characters saved to: ${artifactPath}`\n : \"Agent emitted an oversized event line\";\n outputBuffer = \"\";\n terminateChild(child, \"SIGTERM\");\n };\n\n child.stdout?.on(\"data\", (chunk: Buffer) => {\n const decoded = outputDecoder.write(chunk);\n if (options.runner === \"veda\") {\n vedaOutput += decoded;\n return;\n }\n outputBuffer += decoded;\n while (true) {\n const newline = outputBuffer.indexOf(\"\\n\");\n if (newline < 0) {\n if (outputBuffer.length > MAX_EVENT_LINE_CHARS) {\n failOversizedEvent(outputBuffer);\n }\n break;\n }\n if (newline > MAX_EVENT_LINE_CHARS) {\n failOversizedEvent(outputBuffer.slice(0, newline));\n return;\n }\n const line = outputBuffer.slice(0, newline).replace(/\\r$/, \"\");\n outputBuffer = outputBuffer.slice(newline + 1);\n processEvent(line);\n }\n });\n const recordStderr = (text: string): void => {\n if (!text) return;\n appendLog(`${JSON.stringify({ type: \"worker_stderr\", text })}\\n`);\n process.stderr.write(text);\n stderr = `${stderr}${text}`.slice(-MAX_STDERR_CHARS);\n };\n child.stderr?.on(\"data\", (chunk: Buffer) => {\n recordStderr(stderrDecoder.write(chunk));\n });\n child.stderr?.on(\"error\", () => {});\n\n const timeout = setTimeout(() => {\n terminalStatus = \"timed_out\";\n terminalError = `Agent timed out after ${options.timeoutMs}ms`;\n terminateChild(child, \"SIGTERM\");\n setTimeout(() => terminateChild(child, \"SIGKILL\"), KILL_GRACE_MS).unref();\n }, options.timeoutMs);\n timeout.unref();\n\n const stop = (): void => {\n if (terminalStatus) return;\n terminalStatus = \"stopped\";\n terminalError = \"Agent stopped\";\n terminateChild(child, \"SIGTERM\");\n setTimeout(() => terminateChild(child, \"SIGKILL\"), KILL_GRACE_MS).unref();\n };\n process.once(\"SIGTERM\", stop);\n process.once(\"SIGINT\", stop);\n process.once(\"SIGHUP\", stop);\n\n const exitCode = await new Promise<number | null>((resolve) => {\n child.once(\"error\", (error) => {\n terminalStatus = \"failed\";\n terminalError = error.message;\n resolve(null);\n });\n child.once(\"close\", (code) => resolve(code));\n });\n\n if (steerTimer) clearInterval(steerTimer);\n if (claudeCloseTimer) clearTimeout(claudeCloseTimer);\n clearTimeout(timeout);\n if (process.env.PI_FABRIC_INJECT_CRASH === \"close\") throw new Error(\"simulated close crash\");\n if (options.runner === \"veda\") {\n vedaOutput += outputDecoder.end();\n } else {\n outputBuffer += outputDecoder.end();\n }\n recordStderr(stderrDecoder.end());\n if (options.runner === \"veda\") {\n const trimmed = vedaOutput.trim();\n if (trimmed) {\n try {\n const parsed = parseStructuredValue(trimmed);\n if (typeof parsed === \"object\" && parsed !== null && !Array.isArray(parsed)) {\n vedaParsed = parsed as Record<string, unknown>;\n const text = stringField(vedaParsed.text) ?? \"\";\n if (text) {\n record.text = latestRunText(text);\n process.stdout.write(`\\n${text}\\n`);\n }\n const sessionId = stringField(vedaParsed.sessionId);\n if (sessionId) record.runnerSessionId = sessionId;\n const usage = vedaParsed.usage;\n if (typeof usage === \"object\" && usage !== null && !Array.isArray(usage)) {\n const values = usage as Record<string, unknown>;\n const input = numberField(values.inputTokens);\n const output = numberField(values.outputTokens);\n const cacheRead = numberField(values.cachedTokens);\n const cost = typeof values.costUsd === \"number\" ? values.costUsd : 0;\n record.usage = { input, output, cacheRead, cacheWrite: 0, cost };\n emitTokenUsage({ input, output, cacheRead, cacheWrite: 0, cost }, { model: stringField(vedaParsed.model) });\n }\n const envelopeErrors: string[] = [];\n const error = stringField(vedaParsed.error);\n if (error) envelopeErrors.push(error);\n // navigator-plan gates the response on a <program> design block and\n // the worker persona on a <worker_report>; both exit non-zero and\n // report failure only via design/worker fields, not envelope.error.\n for (const key of [\"design\", \"worker\"] as const) {\n const gate = vedaParsed[key];\n if (typeof gate !== \"object\" || gate === null || Array.isArray(gate)) continue;\n const status = gate as Record<string, unknown>;\n if (status.ok !== false) continue;\n const details = Array.isArray(status.errors)\n ? status.errors.filter((entry): entry is string => typeof entry === \"string\").join(\"; \")\n : [stringField(status.reason), stringField(status.detail)]\n .filter((entry): entry is string => entry !== undefined)\n .join(\": \");\n envelopeErrors.push(`Veda ${key} failed${details ? `: ${details}` : \"\"}`);\n }\n if (envelopeErrors.length > 0) {\n sawAgentError = true;\n terminalError = envelopeErrors.join(\"\\n\");\n }\n record.turns += 1;\n update();\n }\n } catch {\n // Unparseable stdout; the generic failed-record path reports stderr.\n }\n }\n } else if (outputBuffer.trim()) {\n processEvent(outputBuffer);\n }\n record.exitCode = exitCode;\n record.stderr = stderr.slice(-MAX_STDERR_CHARS);\n if (\n record.compaction?.status === \"queued\" ||\n record.compaction?.status === \"in_flight\"\n ) {\n const error = terminalError ?? \"Child Pi exited before the queued compaction completed\";\n record.compaction = {\n ...record.compaction,\n status: \"failed\",\n updatedAt: Date.now(),\n finishedAt: Date.now(),\n error,\n };\n if (!terminalStatus) {\n terminalStatus = \"failed\";\n terminalError = error;\n }\n }\n record.finishedAt = Date.now();\n record.updatedAt = record.finishedAt;\n const childCompleted =\n exitCode === 0 &&\n !sawAgentError &&\n (options.runner === \"pi\" ||\n (options.runner === \"claude\" &&\n claudeResultSeen &&\n claudeSentInputs.length === 0 &&\n claudeSteering.length === 0 &&\n claudeFollowUps.length === 0) ||\n (options.runner === \"veda\" && vedaParsed !== undefined));\n record.status = terminalStatus ?? (childCompleted ? \"completed\" : \"failed\");\n if (terminalError) record.error = terminalError;\n if (record.status === \"failed\" && !record.error) {\n record.error =\n stderr.trim() ||\n (exitCode === 0\n ? `${runnerLabel(options.runner)} agent reported an error before exiting`\n : `${runnerLabel(options.runner)} exited with code ${exitCode ?? \"unknown\"}`);\n }\n if (record.status === \"completed\" && options.schemaFile) {\n try {\n const schema = JSON.parse(fs.readFileSync(options.schemaFile, \"utf8\")) as Record<\n string,\n unknown\n >;\n const value = record.value ?? parseStructuredValue(record.text);\n if (!Value.Check(schema, value)) {\n const errors = [...Value.Errors(schema, value)]\n .slice(0, 5)\n .map((error) => error.message)\n .join(\"; \");\n throw new Error(errors || \"value does not match schema\");\n }\n record.value = value;\n } catch (error) {\n record.status = \"failed\";\n const reason = error instanceof Error ? error.message : String(error);\n const output = record.text.trim();\n const snippet = output.slice(0, 200);\n record.error = `Structured agent output was invalid: ${reason}${snippet ? ` (output: ${snippet}${output.length > 200 ? \"\u2026\" : \"\"})` : \"\"}`;\n }\n }\n delete record.currentTool;\n writeRunRecord(options.statusFile, record);\n terminalWritten = true;\n process.stdout.write(`\\n[pi-fabric] ${record.status}\\n`);\n await new Promise<void>((resolve) =>\n sessionStream ? sessionStream.end(resolve) : resolve(),\n );\n process.exitCode = record.status === \"completed\" ? 0 : 1;\n};\n\nmain().catch((error) => {\n console.error(error instanceof Error ? (error.stack ?? error.message) : String(error));\n writeCrashStatus(error);\n process.exit(1);\n});\n"],
5
+ "mappings": "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",
6
6
  "names": ["sessionId", "schema"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-fabric",
3
- "version": "0.62.7",
3
+ "version": "0.62.8",
4
4
  "description": "A programmable tool and agent runtime for Pi",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",