@bluecopa/harness 2.0.1-snapshot.2 → 2.0.1-snapshot.4
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/arc/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/observability/tracing.ts","../../src/agent/types.ts","../../src/arc/message-convert.ts","../../src/arc/utils.ts","../../src/arc/trace-utils.ts","../../src/arc/episode-projection.ts","../../src/arc/lcm/tools.ts","../../src/arc/jobs/tools.js","../../src/arc/tools.ts","../../src/arc/tool-registry.ts","../../src/arc/shared-types.ts","../../src/vercel-agent-loop.ts","../../src/observability/metrics.ts","../../src/arc/prompts.ts","../../src/arc/rescue-textual-tools.ts","../../src/arc/worker-budgets.ts","../../src/arc/worker.ts","../../src/arc/stores/memory-stores.ts","../../src/arc/jobs/memory-job-registry.js","../../src/arc/lcm/message-store.ts","../../src/arc/lcm/summary-dag.ts","../../src/arc/lcm/context-assembler.ts","../../src/arc/lcm/compactor.ts","../../src/arc/dispatcher.ts","../../src/arc/loop.ts","../../src/arc/stores/fs-stores.ts"],"names":["tool","z","s","path","toModelMessages","defaultAnthropicProvider","resultText","result","escapeRegex","ABSOLUTE_MAX_STEPS","continuationSummary","tuple","err","orchestratorMessages","contextTokens","contextSections","modelMessages","generateText","savedEvent","nextTask","attachmentMsg"],"mappings":"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","file":"index.js","sourcesContent":["import { HarnessTelemetry } from './otel';\n\nexport async function traceStep<T>(\n telemetry: HarnessTelemetry | undefined,\n name: string,\n attributes: Record<string, string | number | boolean>,\n fn: () => Promise<T>\n): Promise<T> {\n if (!telemetry?.isEnabled()) {\n return fn();\n }\n return telemetry.withSpan(name, attributes, fn);\n}\n","export interface ToolCallInfo {\n toolCallId: string;\n toolName: string;\n args: Record<string, unknown>;\n /** Provider-specific metadata preserved across round-trips (e.g., Gemini thought signatures). */\n providerMetadata?: Record<string, unknown>;\n}\n\nexport interface ToolResultInfo {\n toolCallId: string;\n toolName: string;\n result: string;\n isError?: boolean;\n durationMs?: number;\n}\n\nexport type ContentPart =\n | { type: \"text\"; text: string }\n | { type: \"image\"; image: Buffer | Uint8Array; mimeType: string };\n\nexport interface AgentMessage {\n role: \"system\" | \"user\" | \"assistant\" | \"tool\";\n content: string | ContentPart[];\n toolCalls?: ToolCallInfo[]; // assistant messages: what tools were called\n toolResults?: ToolResultInfo[]; // tool messages: results keyed by toolCallId\n /** Provider-specific metadata preserved across round-trips (e.g., Gemini thought signatures). */\n providerMetadata?: Record<string, unknown>;\n}\n\n/** Extract plain text from content (string or ContentPart[]). */\nexport function getTextContent(content: string | ContentPart[]): string {\n if (typeof content === \"string\") return content;\n return content\n .filter(\n (p): p is Extract<ContentPart, { type: \"text\" }> => p.type === \"text\",\n )\n .map((p) => p.text)\n .join(\"\\n\");\n}\n\nexport interface ToolCallAction {\n type: \"tool\";\n name: string;\n args: Record<string, unknown>;\n toolCallId?: string;\n /** Provider-specific metadata preserved across round-trips (e.g., Gemini thought signatures). */\n providerMetadata?: Record<string, unknown>;\n /** Short user-visible rationale text emitted before the tool call. */\n publicRationale?: string;\n}\n\nexport interface FinalAction {\n type: \"final\";\n content: string;\n}\n\nexport interface ToolBatchAction {\n type: \"tool_batch\";\n calls: ToolCallAction[];\n /** Short user-visible rationale text emitted before the tool batch. */\n publicRationale?: string;\n}\n\nexport type AgentAction = ToolCallAction | FinalAction | ToolBatchAction;\n\nexport interface AgentRunResult {\n messages: AgentMessage[];\n output: string;\n steps: number;\n}\n\n/** Token usage breakdown for a single LLM step. */\nexport interface StepUsage {\n inputTokens?: number;\n outputTokens?: number;\n cacheReadTokens?: number;\n cacheWriteTokens?: number;\n reasoningTokens?: number;\n}\n\nexport type AgentStreamEvent =\n | { type: \"text_delta\"; text: string }\n | {\n type: \"tool_start\";\n name: string;\n args: Record<string, unknown>;\n toolCallId?: string;\n }\n | {\n type: \"tool_end\";\n name: string;\n result: {\n success: boolean;\n output: string;\n error?: string;\n [key: string]: unknown;\n };\n }\n | { type: \"step_start\"; step: number }\n | { type: \"step_end\"; step: number; usage?: StepUsage }\n | { type: \"done\"; output: string; steps: number };\n\nexport interface AgentLoop {\n nextAction(messages: AgentMessage[], signal?: AbortSignal): Promise<AgentAction>;\n streamAction?(messages: AgentMessage[]): AsyncIterable<AgentStreamEvent>;\n}\n\n/** Context passed to `prepareStep` before each LLM call. */\nexport interface PrepareStepContext {\n stepNumber: number;\n toolCallHistory: string[];\n}\n\n/** Overrides returned by `prepareStep`. All fields optional — omit to keep defaults. */\nexport interface PrepareStepResult {\n model?: string;\n activeTools?: string[];\n}\n","import type { AgentMessage } from '../agent/types';\nimport { getTextContent } from '../agent/types';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ModelMessage = any;\n\n/**\n * Convert AgentMessage[] to Vercel AI SDK ModelMessage[].\n * Extracted from VercelAgentLoop — identical logic, standalone pure function.\n *\n * System messages that appear after user/assistant/tool messages are\n * converted to user messages with a [System] prefix. The Anthropic API\n * does not allow interleaved system messages; the actual system prompt\n * is passed separately via the `system` parameter.\n */\nexport function toModelMessages(messages: AgentMessage[]): ModelMessage[] {\n const out: ModelMessage[] = [];\n\n // Track whether we have seen a non-system message. After that point,\n // any system-role message must be converted to a user message.\n let seenNonSystem = false;\n\n for (const msg of messages) {\n if (msg.role === 'system') {\n const text = typeof msg.content === 'string' ? msg.content : getTextContent(msg.content);\n if (seenNonSystem) {\n // Convert to user message to avoid Anthropic SDK error\n out.push({ role: 'user', content: `[System] ${text}` });\n } else {\n out.push({ role: 'system', content: text });\n }\n continue;\n }\n\n seenNonSystem = true;\n\n if (msg.role === 'user') {\n out.push({ role: 'user', content: msg.content });\n continue;\n }\n\n if (msg.role === 'assistant') {\n const textContent = typeof msg.content === 'string' ? msg.content : getTextContent(msg.content);\n if (msg.toolCalls && msg.toolCalls.length > 0) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const parts: any[] = [];\n if (textContent) {\n parts.push({ type: 'text', text: textContent });\n }\n for (const tc of msg.toolCalls) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const part: any = {\n type: 'tool-call',\n toolCallId: tc.toolCallId,\n toolName: tc.toolName,\n input: tc.args,\n };\n // Preserve per-tool-call provider options (e.g., Gemini thought signatures)\n if (tc.providerMetadata) {\n part.providerOptions = tc.providerMetadata;\n }\n parts.push(part);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const assistantMsg: any = { role: 'assistant', content: parts };\n // Preserve response-level provider options (e.g., Gemini thought signatures)\n if (msg.providerMetadata) {\n assistantMsg.providerOptions = msg.providerMetadata;\n }\n out.push(assistantMsg);\n } else {\n out.push({ role: 'assistant', content: textContent });\n }\n continue;\n }\n\n if (msg.role === 'tool') {\n if (msg.toolResults && msg.toolResults.length > 0) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const parts: any[] = msg.toolResults.map(tr => ({\n type: 'tool-result',\n toolCallId: tr.toolCallId,\n toolName: tr.toolName,\n output: tr.isError\n ? { type: 'error-text', value: tr.result }\n : { type: 'text', value: tr.result },\n }));\n out.push({ role: 'tool', content: parts });\n } else {\n const textContent = typeof msg.content === 'string' ? msg.content : getTextContent(msg.content);\n out.push({ role: 'user', content: `[Tool result]: ${textContent}` });\n }\n continue;\n }\n }\n\n return out;\n}\n\n","/** Truncate a string, appending a truncation notice if exceeded. */\nexport function truncate(value: string, max: number): string {\n if (value.length <= max) return value;\n return `${value.slice(0, max)}\\n...[truncated ${value.length - max} chars]`;\n}\n\n/** Collapse whitespace and truncate inline. */\nexport function truncateInline(value: string, max: number): string {\n return truncate(value.replace(/\\s+/g, \" \").trim(), max);\n}\n\n/** Heuristic: does this string look like a file path? */\nexport function looksLikePath(value: string): boolean {\n if (!value || /\\s/.test(value)) return false;\n return (\n value.startsWith(\"/\") ||\n value.startsWith(\"./\") ||\n value.startsWith(\"../\") ||\n value.includes(\"/\") ||\n /\\.[A-Za-z0-9]+$/.test(value)\n );\n}\n","import type { ReadEpisodeArgs } from \"./types\";\n\nexport function cloneForTrace<T>(value: T): T {\n try {\n return structuredClone(value);\n } catch {\n return JSON.parse(JSON.stringify(value, traceJsonReplacer)) as T;\n }\n}\n\nfunction traceJsonReplacer(_key: string, value: unknown): unknown {\n if (typeof value === \"bigint\") return value.toString();\n if (value instanceof Error) {\n return {\n name: value.name,\n message: value.message,\n stack: value.stack,\n };\n }\n if (value instanceof Uint8Array) {\n return {\n type: value.constructor.name,\n byteLength: value.byteLength,\n };\n }\n return value;\n}\n\nexport function normalizeReadEpisodeArgs(\n args: Record<string, unknown>,\n): ReadEpisodeArgs {\n const rawDetail = args.detail;\n const detail =\n rawDetail === \"summary\" ||\n rawDetail === \"trace\" ||\n rawDetail === \"artifacts\"\n ? rawDetail\n : undefined;\n return {\n id: String(args.id ?? \"\"),\n ...(detail ? { detail } : {}),\n ...(typeof args.artifactKey === \"string\"\n ? { artifactKey: args.artifactKey }\n : {}),\n ...(typeof args.maxTokens === \"number\"\n ? { maxTokens: args.maxTokens }\n : {}),\n };\n}\n","/**\n * Episode projection: minimal formatting for orchestrator context.\n *\n * The worker collects artifacts and actions during execution.\n * This module just formats DispatchRecords for the orchestrator prompt.\n */\nimport {\n getTextContent,\n type AgentMessage,\n} from \"../agent/types\";\nimport type {\n Artifact,\n DispatchRecord,\n OodaSnapshot,\n TranscriptStore,\n} from \"./types\";\nimport { truncate, truncateInline } from \"./utils\";\n\nconst DEFAULT_TRACE_MAX_CHARS = 80_000;\nconst TRACE_TOOL_RESULT_LIMIT = 8_000;\n\n// ── Orchestrator context formatting ──\n\n/** Format a single dispatch record for the orchestrator prompt */\nexport function formatDispatchForPrompt(\n record: DispatchRecord,\n options: { compact?: boolean; maxChars?: number } = {},\n): string {\n const maxChars = options.maxChars ?? 4_000;\n const a = record.artifact;\n const t = record.tuple;\n\n const lines = [\n `Dispatch ${t.id} [${a.status}]`,\n `steps: ${a.stepsUsed}/${t.steps}`,\n `summary: ${a.summary}`,\n `instruction: ${truncateInline(t.instruction, options.compact ? 220 : 800)}`,\n ];\n\n if (options.compact) return truncate(lines.join(\"\\n\"), maxChars);\n\n if (a.output) {\n lines.push(`output: ${a.output}`);\n }\n\n // Artifacts from worker execution\n const workerArtifacts = record.workerResult?.artifacts ?? [];\n const produced = workerArtifacts.filter((x) => x.action === \"produced\" || x.action === \"modified\");\n if (produced.length > 0) {\n lines.push(\n \"files_touched:\",\n ...produced.slice(0, 10).map((x) => ` - ${x.action} ${x.kind} ${truncateInline(x.uri, 180)}`),\n );\n }\n\n // Actions (already human-readable strings from worker)\n const actions = a.actions ?? record.workerResult?.actions ?? [];\n if (actions.length > 0) {\n lines.push(\n \"actions:\",\n ...actions.slice(-10).map((action) => ` - ${truncateInline(action, 200)}`),\n );\n }\n\n // Worker's textual output — the actual answer content\n const textOutput = a.textOutput ?? record.workerResult?.lastMessage;\n if (textOutput) {\n const budget = Math.max(500, maxChars - lines.join(\"\\n\").length - 100);\n lines.push(`worker_output:\\n${truncate(textOutput, budget)}`);\n }\n\n return truncate(lines.join(\"\\n\"), maxChars);\n}\n\n/** Build OODA snapshot from dispatch records — reads WorkerResult directly */\nexport function buildOodaSnapshot(input: {\n turn: number;\n maxTurns: number;\n turnsRemaining: number;\n dispatchCount: number;\n allIncomplete: boolean;\n dispatches: DispatchRecord[];\n}): OodaSnapshot {\n const recent = input.dispatches.slice(-5);\n\n const observations = recent.map((r) =>\n [\n `${r.tuple.id}: ${r.artifact.status}`,\n r.artifact.summary,\n ]\n .filter(Boolean)\n .join(\"; \"),\n );\n\n const disprovenApproaches: string[] = [];\n\n for (const r of recent) {\n if (r.artifact.status === \"failed\" || r.artifact.status === \"incomplete\") {\n disprovenApproaches.push(\n `${r.tuple.id}: ${truncateInline(r.tuple.instruction, 180)} -> ${r.artifact.status}`,\n );\n }\n }\n\n const beliefs: string[] = [];\n if (input.allIncomplete) {\n beliefs.push(\"No dispatch has produced a complete artifact yet.\");\n }\n if (beliefs.length === 0) {\n beliefs.push(\"No unresolved issue detected.\");\n }\n\n return {\n observations: observations.length > 0 ? observations : [\"No completed dispatches yet.\"],\n beliefs,\n disprovenApproaches,\n blockers: [],\n decisionPressure: {\n turn: input.turn,\n maxTurns: input.maxTurns,\n turnsRemaining: input.turnsRemaining,\n dispatchCount: input.dispatchCount,\n allIncomplete: input.allIncomplete,\n },\n };\n}\n\nexport function formatOodaSnapshotForPrompt(snapshot: OodaSnapshot): string {\n return [\n \"## OODA State\",\n \"decision_pressure:\",\n ` turn: ${snapshot.decisionPressure.turn}`,\n ` max_turns: ${snapshot.decisionPressure.maxTurns}`,\n ` turns_remaining: ${snapshot.decisionPressure.turnsRemaining}`,\n ` dispatches_so_far: ${snapshot.decisionPressure.dispatchCount}`,\n ` all_incomplete: ${snapshot.decisionPressure.allIncomplete}`,\n \"observations:\",\n formatList(snapshot.observations),\n \"beliefs:\",\n formatList(snapshot.beliefs),\n \"disproven_approaches:\",\n formatList(snapshot.disprovenApproaches),\n \"blockers:\",\n formatList(snapshot.blockers),\n ].join(\"\\n\");\n}\n\n// ── ReadEpisode formatting ──\n\nexport async function formatReadEpisodeResult(\n record: DispatchRecord,\n transcriptStore: TranscriptStore,\n): Promise<string> {\n const transcript = await transcriptStore.get(record.transcriptId);\n const traceSection = transcript\n ? formatTranscriptTrace(transcript.messages, TRACE_TOOL_RESULT_LIMIT)\n : \"(transcript not found)\";\n\n const base = [\n `Dispatch ${record.tuple.id}`,\n \"\",\n formatDispatchForPrompt(record, { maxChars: 12_000 }),\n \"\",\n \"--- Trace ---\",\n traceSection,\n ];\n\n return truncate(base.join(\"\\n\"), DEFAULT_TRACE_MAX_CHARS);\n}\n\n// ── Transcript trace ──\n\nexport function formatTranscriptTrace(\n messages: AgentMessage[],\n toolResultLimit: number,\n): string {\n return messages\n .map((message, index) => {\n const lines = [`message ${index + 1}: ${message.role}`];\n const content = getTextContent(message.content);\n if (content) lines.push(content);\n if (message.toolCalls?.length) {\n lines.push(\"tool_calls:\");\n for (const call of message.toolCalls) {\n lines.push(`- ${call.toolName} ${JSON.stringify(call.args)}`);\n }\n }\n if (message.toolResults?.length) {\n lines.push(\"tool_results:\");\n for (const result of message.toolResults) {\n const status = result.isError ? \"error\" : \"ok\";\n lines.push(\n `- ${result.toolName} ${status} ${truncate(result.result, toolResultLimit)}`,\n );\n }\n }\n return lines.join(\"\\n\");\n })\n .join(\"\\n\\n\");\n}\n\n// ── Helpers ──\n\nfunction formatList(items: string[]): string {\n if (items.length === 0) return \"- none\";\n return items.map((item) => `- ${item}`).join(\"\\n\");\n}\n","import { tool } from \"ai\";\nimport { createHash } from \"node:crypto\";\nimport { z } from \"zod\";\nimport { getTextContent, type ToolCallInfo, type ToolResultInfo } from \"../../agent/types\";\nimport { truncate } from \"../utils\";\nimport { formatTranscriptTrace } from \"../episode-projection\";\nimport type { DispatchRecord, TranscriptStore, VectorIndex } from \"../types\";\nimport type { MessageStore } from \"./message-store\";\nimport type { SummaryDAG } from \"./summary-dag\";\n\nconst DEFAULT_HISTORY_READ_MAX_CHARS = 8_000;\nconst MAX_HISTORY_READ_MAX_CHARS = 40_000;\nconst DEFAULT_HISTORY_AROUND_CONTEXT_CHARS = 4_000;\nconst DEFAULT_HISTORY_EXPAND_MAX_CHARS = 8_000;\nconst MAX_HISTORY_EXPAND_MAX_CHARS = 40_000;\nconst HISTORY_EXPAND_SUMMARY_THRESHOLD_CHARS = 10_000;\n\nexport interface HistoryReadOptions {\n /** 1-based line offset, matching the Read tool convention. */\n offset?: number | undefined;\n /** Maximum lines to return from offset. */\n limit?: number | undefined;\n /** Return the chunk around the first literal match instead of line slicing. */\n around?: string | undefined;\n /** Character budget for around mode. */\n contextChars?: number | undefined;\n /** Include stored tool calls/results attached to the message. */\n includeToolData?: boolean | undefined;\n}\n\nexport interface HistoryExpandOptions {\n /** Legacy approximate token budget. Prefer contextChars for deterministic slicing. */\n maxTokens?: number | undefined;\n /** 1-based line offset, matching the Read tool convention. */\n offset?: number | undefined;\n /** Maximum lines to return from offset. */\n limit?: number | undefined;\n /** Return the chunk around the first literal match instead of line slicing. */\n around?: string | undefined;\n /** Character budget for around mode or large line ranges. */\n contextChars?: number | undefined;\n /** Include a compact digest for large expansions. Defaults to true. */\n summarize?: boolean | undefined;\n}\n\n// ── Deps for tool implementations ──\n\nexport interface LcmToolDeps {\n messageStore: MessageStore;\n summaryDAG: SummaryDAG;\n vectorIndex: VectorIndex;\n transcriptStore: TranscriptStore;\n /** Needed for expandSummary fallback when message store has no messages for a leaf */\n findDispatchRecord: (summaryId: string) => DispatchRecord | undefined;\n summarizeHistoryExpansion?: ((args: {\n summaryId: string;\n content: string;\n contentHash: string;\n }) => Promise<string>) | undefined;\n}\n\n// ── Tool implementations ──\n\n/** Expand a summary node with file-like ranges and metadata. */\nexport async function expandSummary(\n deps: LcmToolDeps,\n summaryId: string,\n optionsOrMaxTokens: HistoryExpandOptions | number = {},\n): Promise<string> {\n const options = typeof optionsOrMaxTokens === \"number\"\n ? { maxTokens: optionsOrMaxTokens }\n : optionsOrMaxTokens;\n const node = deps.summaryDAG.getNode(summaryId);\n if (!node) {\n return JSON.stringify({\n kind: \"history_expand_result\",\n found: false,\n summaryId,\n hint: `Summary node not found: ${summaryId}`,\n content: \"\",\n }, null, 2);\n }\n\n const maxChars = resolveHistoryExpandMaxChars(options);\n const sourceBudgetChars = Math.min(\n MAX_HISTORY_EXPAND_MAX_CHARS,\n Math.max(maxChars, HISTORY_EXPAND_SUMMARY_THRESHOLD_CHARS + 1),\n );\n const fullText = await buildExpandedSummaryText(deps, summaryId, sourceBudgetChars);\n const totalLines = fullText.length === 0 ? 0 : fullText.split(\"\\n\").length;\n const totalChars = fullText.length;\n const contentHash = createHash(\"sha256\").update(fullText).digest(\"hex\").slice(0, 16);\n const selection = options.around\n ? selectAround(fullText, String(options.around), maxChars)\n : selectLines(fullText, options.offset, options.limit, maxChars);\n\n const shouldSummarize =\n options.summarize !== false &&\n Boolean(deps.summarizeHistoryExpansion) &&\n totalChars > HISTORY_EXPAND_SUMMARY_THRESHOLD_CHARS;\n const digest = shouldSummarize\n ? await deps.summarizeHistoryExpansion!({ summaryId, content: fullText, contentHash })\n : undefined;\n\n const result = {\n kind: \"history_expand_result\",\n found: true,\n summaryId,\n depth: node.depth,\n totalLines,\n totalChars,\n startLine: selection.startLine,\n endLine: selection.endLine,\n startOffset: selection.startOffset,\n endOffset: selection.endOffset,\n truncated: selection.truncated,\n nextOffset: selection.nextOffset,\n contentHash,\n summarized: Boolean(digest),\n ...(digest ? { digest } : {}),\n ...(options.around\n ? { around: String(options.around), aroundFound: selection.aroundFound }\n : {}),\n hint: selection.truncated\n ? \"This history_expand result is truncated. Use the digest first, then call history_expand again with nextOffset as offset, a smaller limit, or around=<literal text> for the exact section.\"\n : \"Complete expansion returned.\",\n content: selection.content,\n };\n\n return JSON.stringify(result, null, 2);\n}\n\nasync function buildExpandedSummaryText(\n deps: LcmToolDeps,\n summaryId: string,\n sourceBudgetChars: number,\n): Promise<string> {\n const node = deps.summaryDAG.getNode(summaryId);\n if (!node) return \"\";\n if (node.depth === 0) {\n // Leaf node — return source transcript messages\n const conversationId = node.sourceConversationIds[0];\n if (!conversationId) return node.summary;\n const messages = deps.messageStore.getConversation(conversationId);\n if (messages.length === 0) {\n // Fall back to transcript store\n const record = deps.findDispatchRecord(summaryId);\n if (record) {\n const transcript = await deps.transcriptStore.get(record.transcriptId);\n if (transcript) {\n return formatTranscriptTrace(transcript.messages, sourceBudgetChars);\n }\n }\n return node.summary;\n }\n const perMessageChars = Math.max(500, Math.ceil(sourceBudgetChars / messages.length));\n const trace = messages\n .map(\n (m) =>\n `[${m.role}:${m.index}] ${m.content.slice(0, perMessageChars)}`,\n )\n .join(\"\\n\");\n return truncate(trace, sourceBudgetChars);\n }\n\n // Higher depth — return child summaries\n const children = node.sourceIds\n .map((id) => deps.summaryDAG.getNode(id))\n .filter((n): n is NonNullable<typeof n> => !!n);\n return children\n .map((child) => `### ${child.id} (d${child.depth})\\n${child.summary}`)\n .join(\"\\n\\n\");\n}\n\nfunction resolveHistoryExpandMaxChars(options: HistoryExpandOptions): number {\n if (typeof options.contextChars === \"number\") {\n return clampInt(\n options.contextChars,\n DEFAULT_HISTORY_EXPAND_MAX_CHARS,\n MAX_HISTORY_EXPAND_MAX_CHARS,\n );\n }\n if (typeof options.maxTokens === \"number\" && Number.isFinite(options.maxTokens)) {\n return clampInt(\n Math.floor(options.maxTokens * 4),\n DEFAULT_HISTORY_EXPAND_MAX_CHARS,\n MAX_HISTORY_EXPAND_MAX_CHARS,\n );\n }\n return DEFAULT_HISTORY_EXPAND_MAX_CHARS;\n}\n\n/** Describe a summary node's metadata, or show DAG overview */\nexport function describeSummary(deps: LcmToolDeps, summaryId?: string): string {\n if (summaryId) {\n const node = deps.summaryDAG.getNode(summaryId);\n if (!node) return `Summary node not found: ${summaryId}`;\n return [\n `ID: ${node.id}`,\n `Depth: ${node.depth}`,\n `Sources: ${node.sourceIds.join(\", \")}`,\n `Conversations: ${node.sourceConversationIds.join(\", \")}`,\n `Artifacts: ${node.artifacts.join(\", \") || \"none\"}`,\n `Operations: ${node.operations.join(\", \") || \"none\"}`,\n `Outcome: ${node.outcome}`,\n `Tokens: ${node.tokenCount}`,\n `Summary:\\n${node.summary}`,\n ].join(\"\\n\");\n }\n\n // DAG overview\n const allNodes = deps.summaryDAG.getAllNodes();\n if (allNodes.length === 0) return \"DAG is empty — no dispatches completed yet.\";\n\n const byDepth = new Map<number, number>();\n for (const node of allNodes) {\n byDepth.set(node.depth, (byDepth.get(node.depth) ?? 0) + 1);\n }\n const totalTokens = allNodes.reduce((sum, n) => sum + n.tokenCount, 0);\n const lines = [\n `DAG Overview: ${allNodes.length} total nodes, ~${totalTokens} tokens`,\n \"Nodes by depth:\",\n ...Array.from(byDepth.entries())\n .sort(([a], [b]) => a - b)\n .map(([depth, count]) => ` d${depth}: ${count} nodes`),\n \"\",\n \"All nodes:\",\n ...allNodes.map(\n (n) =>\n ` ${n.id}: d${n.depth}, ${n.outcome}, ${n.tokenCount} tokens`,\n ),\n ];\n return lines.join(\"\\n\");\n}\n\n/** Direct vector search recall — returns matching transcript excerpts */\nexport async function recallDirect(deps: LcmToolDeps, query: string): Promise<string> {\n const transcriptIds = await deps.vectorIndex.search(query, 5);\n if (transcriptIds.length === 0) {\n return \"No relevant history found.\";\n }\n\n const transcripts = await Promise.all(\n transcriptIds.map((id) => deps.transcriptStore.get(id).then((t) => ({ id, t }))),\n );\n const excerpts: string[] = [];\n for (const { id, t: transcript } of transcripts) {\n if (!transcript) continue;\n const lastEntry = transcript.messages[transcript.messages.length - 1];\n const lastMsg = lastEntry\n ? getTextContent(lastEntry.content).slice(0, 300)\n : \"(no messages)\";\n excerpts.push(`**${id}**: ${transcript.instruction}\\n Last result: ${lastMsg}`);\n }\n\n if (excerpts.length === 0) {\n return \"No history available yet.\";\n }\n return excerpts.join(\"\\n\\n\");\n}\n\n/** Read a specific message from the message store with file-like ranges and metadata. */\nexport function historyRead(\n deps: LcmToolDeps,\n conversationId: string,\n messageIndex: number,\n options: HistoryReadOptions = {},\n): string | null {\n const msg = deps.messageStore.getMessage(conversationId, messageIndex);\n if (!msg) return null;\n const fullText = buildHistoryReadText(msg, options.includeToolData ?? false);\n const totalLines = fullText.length === 0 ? 0 : fullText.split(\"\\n\").length;\n const totalChars = fullText.length;\n const maxChars = clampInt(\n options.contextChars,\n DEFAULT_HISTORY_READ_MAX_CHARS,\n MAX_HISTORY_READ_MAX_CHARS,\n );\n const selection = options.around\n ? selectAround(fullText, String(options.around), maxChars)\n : selectLines(fullText, options.offset, options.limit, maxChars);\n\n const result = {\n kind: \"history_read_result\",\n found: true,\n conversationId,\n messageIndex,\n role: msg.role,\n totalLines,\n totalChars,\n startLine: selection.startLine,\n endLine: selection.endLine,\n startOffset: selection.startOffset,\n endOffset: selection.endOffset,\n truncated: selection.truncated,\n nextOffset: selection.nextOffset,\n contentHash: createHash(\"sha256\").update(fullText).digest(\"hex\").slice(0, 16),\n ...(options.around\n ? { around: String(options.around), aroundFound: selection.aroundFound }\n : {}),\n hint: selection.truncated\n ? \"This history_read result is truncated. Call history_read again with nextOffset as offset, a smaller limit, or around=<literal text> for the exact section.\"\n : \"Complete message returned.\",\n content: selection.content,\n };\n\n return JSON.stringify(result, null, 2);\n}\n\nfunction buildHistoryReadText(\n msg: { content: string; toolCalls?: ToolCallInfo[]; toolResults?: ToolResultInfo[] },\n includeToolData: boolean,\n): string {\n const parts = [msg.content];\n if (includeToolData && msg.toolCalls) {\n for (const tc of msg.toolCalls) {\n parts.push(`[tool_call] ${tc.toolName} ${JSON.stringify(tc.args)}`);\n }\n }\n if (includeToolData && msg.toolResults) {\n for (const tr of msg.toolResults) {\n parts.push(`[tool_result] ${tr.toolName}: ${tr.result}`);\n }\n }\n return parts.join(\"\\n\");\n}\n\ninterface Selection {\n content: string;\n startLine: number;\n endLine: number;\n startOffset: number;\n endOffset: number;\n truncated: boolean;\n nextOffset: number | null;\n aroundFound?: boolean;\n}\n\nfunction selectLines(\n text: string,\n offsetInput: number | undefined,\n limitInput: number | undefined,\n maxChars: number,\n): Selection {\n if (text.length === 0) {\n return {\n content: \"\",\n startLine: 0,\n endLine: 0,\n startOffset: 0,\n endOffset: 0,\n truncated: false,\n nextOffset: null,\n };\n }\n\n const lines = text.split(\"\\n\");\n const offset = clampInt(offsetInput, 1, Math.max(1, lines.length));\n const limit = limitInput == null\n ? lines.length - offset + 1\n : clampInt(limitInput, 1, lines.length);\n const startIndex = offset - 1;\n let endIndex = Math.min(lines.length, startIndex + limit);\n let content = lines.slice(startIndex, endIndex).join(\"\\n\");\n\n let charTruncated = false;\n if (content.length > maxChars) {\n content = content.slice(0, maxChars);\n charTruncated = true;\n const keptLines = content.length === 0 ? 0 : content.split(\"\\n\").length;\n endIndex = Math.min(lines.length, startIndex + Math.max(1, keptLines));\n }\n\n const truncated = endIndex < lines.length || charTruncated;\n return {\n content,\n startLine: offset,\n endLine: endIndex,\n startOffset: offset,\n endOffset: endIndex,\n truncated,\n nextOffset: truncated ? endIndex + 1 : null,\n };\n}\n\nfunction selectAround(text: string, pattern: string, contextChars: number): Selection {\n if (text.length === 0) {\n return {\n content: \"\",\n startLine: 0,\n endLine: 0,\n startOffset: 0,\n endOffset: 0,\n truncated: false,\n nextOffset: null,\n aroundFound: false,\n };\n }\n\n const matchIndex = pattern ? text.indexOf(pattern) : -1;\n const center = matchIndex >= 0 ? matchIndex : 0;\n const half = Math.floor(contextChars / 2);\n const startChar = Math.max(0, center - half);\n const endChar = Math.min(text.length, startChar + contextChars);\n const content = text.slice(startChar, endChar);\n const prefix = text.slice(0, startChar);\n const startLine = prefix.length === 0 ? 1 : prefix.split(\"\\n\").length;\n const endLine = startLine + (content.length === 0 ? 0 : content.split(\"\\n\").length - 1);\n const truncated = startChar > 0 || endChar < text.length;\n\n return {\n content,\n startLine,\n endLine,\n startOffset: startLine,\n endOffset: endLine,\n truncated,\n nextOffset: endChar < text.length ? endLine + 1 : null,\n aroundFound: matchIndex >= 0,\n };\n}\n\nfunction clampInt(\n value: number | undefined,\n fallback: number,\n max: number,\n): number {\n if (typeof value !== \"number\" || !Number.isFinite(value)) return fallback;\n return Math.max(1, Math.min(max, Math.floor(value)));\n}\n\n// ── Tool schemas ──\n\n/** Search across all stored messages from all conversations */\nexport const history_search = tool({\n description:\n \"Search across all stored messages from all conversations (orchestrator + workers). Returns matching excerpts with context. Use to find prior commands, errors, thread IDs, file paths, or any text across the full run history.\",\n inputSchema: z.object({\n pattern: z\n .string()\n .max(500)\n .describe(\"Search pattern (literal text match) to search for across all messages\"),\n conversationId: z\n .string()\n .max(200)\n .optional()\n .describe(\n 'Optional: limit search to a specific conversation (e.g., \"orchestrator\" or \"worker_<tupleId>\")',\n ),\n maxResults: z\n .number()\n .min(1)\n .max(100)\n .optional()\n .describe(\"Maximum number of results to return (default: 20)\"),\n }),\n});\n\n/** Expand a summary node back to its source messages or child summaries */\nexport const history_expand = tool({\n description:\n \"Expand a compacted summary back to source messages or child summaries with file-like ranges and explicit truncation metadata. Use when a ghost cue or summary reference needs detail. If truncated, continue with nextOffset or around=<literal text>. Do not repeat the same exact call.\",\n inputSchema: z.object({\n summaryId: z\n .string()\n .max(200)\n .describe(\"The summary node ID to expand (e.g., 'summary_d0_tuple_abc')\"),\n maxTokens: z\n .number()\n .min(100)\n .max(32000)\n .optional()\n .describe(\"Legacy approximate maximum tokens to return. Prefer contextChars for deterministic slicing.\"),\n offset: z\n .number()\n .int()\n .min(1)\n .optional()\n .describe(\"1-based line offset to start reading from, like the Read tool\"),\n limit: z\n .number()\n .int()\n .min(1)\n .max(1000)\n .optional()\n .describe(\"Maximum number of lines to return\"),\n around: z\n .string()\n .max(500)\n .optional()\n .describe(\"Literal text to center the returned chunk around\"),\n contextChars: z\n .number()\n .int()\n .min(200)\n .max(MAX_HISTORY_EXPAND_MAX_CHARS)\n .optional()\n .describe(\"Character budget for around mode or large line ranges\"),\n summarize: z\n .boolean()\n .optional()\n .describe(\"Include a compact digest for large expansions. Defaults to true.\"),\n }),\n});\n\n/** Show summary node metadata or history overview */\nexport const history_overview = tool({\n description:\n \"Show summary node metadata (sources, depth, artifacts, operations) or history overview. With summaryId: shows that node's details. Without: shows how many nodes at each depth, what's in context vs compacted.\",\n inputSchema: z.object({\n summaryId: z\n .string()\n .max(200)\n .optional()\n .describe(\n \"Optional summary node ID. Omit to get full history overview.\",\n ),\n }),\n});\n\n/** Read a specific message from run history at full fidelity */\nexport const history_read = tool({\n description:\n \"Read a specific message from run history with file-like ranges and explicit truncation metadata. Use after history_search returns a [conversationId:messageIndex] reference. If the result is truncated, continue with nextOffset or use around=<literal text>.\",\n inputSchema: z.object({\n conversationId: z\n .string()\n .max(200)\n .describe('Conversation ID (e.g., \"orchestrator\" or \"worker_tuple_abc\")'),\n messageIndex: z\n .number()\n .min(0)\n .describe(\"Message index within the conversation\"),\n offset: z\n .number()\n .int()\n .min(1)\n .optional()\n .describe(\"1-based line offset to start reading from, like the Read tool\"),\n limit: z\n .number()\n .int()\n .min(1)\n .max(1000)\n .optional()\n .describe(\"Maximum number of lines to return\"),\n around: z\n .string()\n .max(500)\n .optional()\n .describe(\"Literal text to center the returned chunk around\"),\n contextChars: z\n .number()\n .int()\n .min(200)\n .max(MAX_HISTORY_READ_MAX_CHARS)\n .optional()\n .describe(\"Character budget for around mode or large line ranges\"),\n includeToolData: z\n .boolean()\n .optional()\n .describe(\"Include tool calls/results attached to the stored message\"),\n }),\n});\n","import { tool } from \"ai\";\nimport { z } from \"zod\";\n// Cast helper for exactOptionalPropertyTypes compatibility\nconst s = (t) => t;\nconst jobsStatusSchema = tool({\n description: \"Query background job state. Use when the ambient Live Jobs block isn't enough — e.g. to read a full tail, investigate a failure, or confirm state before deciding.\",\n inputSchema: z.object({\n id: z.string().optional().describe(\"Specific job id; omit for all jobs\"),\n lines: z\n .number()\n .int()\n .min(1)\n .max(400)\n .optional()\n .describe(\"Tail lines to include (default 40)\"),\n state: z\n .array(z.enum([\"running\", \"exited\", \"failed\", \"killed\", \"unknown\"]))\n .optional()\n .describe(\"Filter by state\"),\n }),\n});\nexport function buildJobsStatusTool(deps) {\n return {\n name: \"jobs_status\",\n schema: s(jobsStatusSchema),\n executionMode: \"parallel\",\n execute: async (_provider, args) => {\n const lines = typeof args.lines === \"number\" ? args.lines : 40;\n const rawState = Array.isArray(args.state) ? args.state : [];\n const stateFilter = new Set(rawState);\n if (args.id) {\n const id = String(args.id);\n const status = await deps.jobRegistry.check(id);\n if (!status) {\n return {\n success: false,\n output: `Unknown job ${id}`,\n };\n }\n return {\n success: true,\n output: JSON.stringify({ ...status, tailLines: status.tailLines.slice(-lines) }, null, 2),\n };\n }\n const all = await deps.jobRegistry.list();\n const filtered = stateFilter.size > 0\n ? all.filter((j) => stateFilter.has(j.state))\n : all;\n return {\n success: true,\n output: JSON.stringify(filtered.map((j) => ({ ...j, tailLines: j.tailLines.slice(-lines) })), null, 2),\n metadata: { count: filtered.length },\n };\n },\n };\n}\n","import { tool } from \"ai\";\nimport { z } from \"zod\";\nimport type { ToolResult, ToolResultArtifact } from \"../interfaces/tool-provider\";\nimport type { AnyTool } from \"./shared-types\";\nimport type { Tool } from \"./tool-registry\";\nimport type { ExpectedArtifact, ExpectedOutputContract, ReadEpisodeArgs, ScratchPad } from \"./types\";\nimport { looksLikePath } from \"./utils\";\nimport type { GrepResult } from \"./lcm/message-store\";\nimport { normalizeReadEpisodeArgs } from \"./trace-utils\";\nimport { history_search, history_expand, history_overview, history_read, type HistoryExpandOptions, type HistoryReadOptions } from \"./lcm/tools\";\nimport type { JobRegistry } from \"./jobs/types.js\";\nimport { buildJobsStatusTool } from \"./jobs/tools.js\";\n\nconst expectedArtifactSchema = z.object({\n type: z\n .enum([\"file\", \"directory\", \"value\", \"unknown\"])\n .describe(\"What kind of artifact or result is expected\"),\n path: z\n .string()\n .optional()\n .describe(\"Concrete path when type is file or directory\"),\n description: z\n .string()\n .optional()\n .describe(\"Short natural-language description of the artifact\"),\n});\n\nconst expectedOutputSchema = z.union([\n z\n .string()\n .describe(\n 'Legacy format: file path, \"file:path\", \"value:description\", or natural-language description',\n ),\n z\n .object({\n artifacts: z\n .array(expectedArtifactSchema)\n .optional()\n .describe(\"Concrete artifacts or values the worker should produce\"),\n successCriteria: z\n .array(z.string())\n .optional()\n .describe(\"Observable conditions that mean the dispatch succeeded\"),\n verification: z\n .string()\n .optional()\n .describe(\"How the worker should verify the result\"),\n description: z\n .string()\n .optional()\n .describe(\n \"Short summary of the expected result when artifacts are not known upfront\",\n ),\n // Compatibility with an earlier structured shape.\n kind: z.enum([\"file\", \"files\", \"value\", \"unknown\"]).optional(),\n path: z.string().optional(),\n paths: z.array(z.string()).optional(),\n })\n .describe(\"Structured expected-output contract\"),\n]);\n\n/** Dispatch a worker to accomplish a task */\nexport const dispatch = tool({\n description:\n \"Dispatch a worker to accomplish a task. Workers are stateless and see only the instruction, input files, and tools. Call multiple times in one response for parallel execution.\",\n inputSchema: z.object({\n instruction: z.string().describe(\"What the worker should do\"),\n inputs: z\n .array(z.string())\n .optional()\n .describe(\"Artifact IDs to provide as context\"),\n expectedOutput: expectedOutputSchema.describe(\n \"Expected artifacts, success criteria, and verification contract\",\n ),\n tier: z.enum([\"fast\", \"medium\", \"strong\"]).optional()\n .describe(\"Worker model tier. 'fast' for simple lookups, 'medium' for normal multi-step work, and 'strong' for complex coding/debugging tasks. Omit tier for the default worker budget.\"),\n role: z.string().optional()\n .describe(\"Short semantic role label for this worker (e.g. 'Debugger', 'Researcher', 'Sysadmin'). Shown in the UI so the user understands what the worker is doing. 1-2 words max.\"),\n }),\n});\n\n/** Query project history for past decisions, approaches, or errors */\nexport const recall = tool({\n description:\n \"Query project history. Use to check past decisions, approaches, or errors.\",\n inputSchema: z.object({\n query: z\n .string()\n .describe(\"Natural language question about project history\"),\n }),\n});\n\nconst readEpisodeInputSchema = z.object({\n id: z.string().describe(\"Episode, tuple, or transcript ID to read\"),\n detail: z\n .enum([\"summary\", \"trace\", \"artifacts\"])\n .optional()\n .describe(\n \"summary is compact; trace hydrates the worker transcript; artifacts returns produced/observed artifact state\",\n ),\n artifactKey: z\n .string()\n .optional()\n .describe(\"Optional artifact handle to focus on when detail is artifacts\"),\n maxTokens: z\n .number()\n .optional()\n .describe(\"Approximate maximum tokens to return\"),\n});\n\n/** Read a prior episode from this task run */\nexport const readEpisode = tool({\n description:\n \"Read a prior episode from this task run. Default summary returns the compact projection; trace hydrates the full worker transcript when exact evidence is needed.\",\n inputSchema: readEpisodeInputSchema,\n});\n\n/** Worker-facing episode reader. Same task-run scope, PascalCase to match worker tools. */\nexport const ReadEpisode = tool({\n description:\n \"Read a prior episode from this task run. Use when the provided episode projection is insufficient and exact prior trace or artifacts are needed.\",\n inputSchema: readEpisodeInputSchema,\n});\n\n/** Request additional steps when running low on budget */\nexport const RequestMoreSteps = tool({\n description:\n \"Request additional steps when running low on budget. Call this when you need more steps to finish your work instead of stopping incomplete.\",\n inputSchema: z.object({\n reason: z.string().describe(\"Brief reason why you need more steps\"),\n additional: z.number().describe(\"Number of additional steps requested; 15 is the normal increment\"),\n }),\n});\n\n/** Mark task complete and return final output */\nexport const done = tool({\n description: \"Mark task complete and return final output.\",\n inputSchema: z.object({\n output: z.string().describe(\"Artifact ID or summary to return\"),\n }),\n});\n\n/** Write a note to the shared scratch pad. Future workers can find it. */\nexport const ScratchPad_Write = tool({\n description:\n \"Write a note to the shared scratch pad. Future workers will see it listed and can read it.\",\n inputSchema: z.object({\n key: z.string().describe(\"Note name (e.g., 'network-findings', 'port-scan-results')\"),\n content: z.string().max(100_000).describe(\"Note content (max 100KB)\"),\n }),\n});\n\n/** Read a note from the shared scratch pad. */\nexport const ScratchPad_Read = tool({\n description: \"Read a note from the shared scratch pad.\",\n inputSchema: z.object({\n key: z.string().describe(\"Note name to read\"),\n }),\n});\n\n/** List all notes in the shared scratch pad. */\nexport const ScratchPad_List = tool({\n description: \"List all notes in the shared scratch pad.\",\n inputSchema: z.object({}),\n});\n\n/** Show content directly to the user. Use for file contents, command output, or any text the user asked to see. */\nexport const Show = tool({\n description:\n \"Show content directly to the user's terminal. Use when the user asked to see a file, output, or result. The content is displayed immediately without waiting for your full response.\",\n inputSchema: z.object({\n content: z.string().describe(\"The content to display (file contents, command output, etc.)\"),\n language: z.string().optional().describe(\"Language hint for syntax highlighting (e.g. 'python', 'typescript')\"),\n }),\n});\n\n/** Dispatch a sub-worker from within a worker for localized subtasks */\nexport const SubDispatch = tool({\n description:\n \"Dispatch a sub-worker to handle a localized subtask. The sub-worker runs independently and returns a compact summary. Use for tasks you can't do directly but don't warrant returning to the orchestrator. Sub-dispatch is capped at 2 levels deep.\",\n inputSchema: z.object({\n instruction: z.string().describe(\"What the sub-worker should do\"),\n expectedOutput: expectedOutputSchema\n .optional()\n .describe(\"Expected output contract for the sub-worker\"),\n tier: z.enum([\"fast\", \"medium\", \"strong\"]).optional()\n .describe(\"Sub-worker model tier. 'fast' for simple lookups, 'medium' for normal work, 'strong' for complex tasks. Omit for default.\"),\n }),\n});\n\nexport const scratchPadTools = { ScratchPad_Write, ScratchPad_Read, ScratchPad_List };\n\nexport const orchestratorTools = { dispatch, recall, readEpisode, done };\nexport const arcWorkerTools = { ReadEpisode, Show, RequestMoreSteps, SubDispatch, ...scratchPadTools };\n\n// ── Tool factories: create Tool entries with execute closures ──\n\nexport interface SubDispatchResult {\n status: \"complete\" | \"incomplete\" | \"failed\" | \"interrupted\";\n summary: string;\n artifacts: ToolResultArtifact[];\n stepsUsed: number;\n}\n\nexport interface ArcToolDeps {\n readEpisode?: (args: ReadEpisodeArgs) => Promise<string>;\n historySearch?: (pattern: string, opts?: { conversationId?: string; maxResults?: number }) => GrepResult[];\n historyExpand?: (summaryId: string, options?: HistoryExpandOptions) => Promise<string>;\n historyOverview?: (summaryId?: string) => string;\n historyRead?: (conversationId: string, messageIndex: number, options?: HistoryReadOptions) => string | null;\n scratchPad?: ScratchPad;\n recall?: (query: string) => Promise<string>;\n askUser?: (question: string, options?: string[]) => Promise<string>;\n jobRegistry?: JobRegistry;\n /** Dispatch a sub-worker from within a worker. Returns a compact summary. */\n subDispatch?: (args: {\n instruction: string;\n expectedOutput?: ExpectedOutputContract;\n tier?: \"fast\" | \"medium\" | \"strong\";\n dispatchDepth: number;\n }) => Promise<SubDispatchResult>;\n}\n\nfunction ok(output: string): ToolResult { return { success: true, output }; }\nfunction err(error: string): ToolResult { return { success: false, output: \"\", error }; }\n\n// Cast helper for exactOptionalPropertyTypes compatibility\nconst s = (t: unknown): AnyTool => t as AnyTool;\n\n/** Build history tools — shared by both orchestrator and worker */\nfunction buildHistoryToolEntries(deps: ArcToolDeps): Map<string, Tool> {\n const tools = new Map<string, Tool>();\n\n tools.set(\"history_search\", {\n name: \"history_search\",\n schema: s(history_search),\n executionMode: \"parallel\",\n execute: async (_p, args) => {\n if (!deps.historySearch) return err(\"history_search unavailable\");\n const pattern = String(args.pattern ?? \"\");\n const conversationId = args.conversationId as string | undefined;\n const maxResults = (args.maxResults as number | undefined) ?? 20;\n const results = deps.historySearch(pattern, { ...(conversationId ? { conversationId } : {}), maxResults });\n return results.length === 0\n ? ok(`No matches for \"${pattern}\"`)\n : ok(results.map((r) => `[${r.conversationId}:${r.messageIndex}] ${r.matchContext}`).join(\"\\n\"));\n },\n });\n\n tools.set(\"history_expand\", {\n name: \"history_expand\",\n schema: s(history_expand),\n executionMode: \"parallel\",\n execute: async (_p, args) => {\n if (!deps.historyExpand) return err(\"history_expand unavailable\");\n return ok(await deps.historyExpand(String(args.summaryId ?? \"\"), {\n maxTokens: typeof args.maxTokens === \"number\" ? args.maxTokens : undefined,\n offset: typeof args.offset === \"number\" ? args.offset : undefined,\n limit: typeof args.limit === \"number\" ? args.limit : undefined,\n around: typeof args.around === \"string\" ? args.around : undefined,\n contextChars: typeof args.contextChars === \"number\" ? args.contextChars : undefined,\n summarize: typeof args.summarize === \"boolean\" ? args.summarize : undefined,\n }));\n },\n });\n\n tools.set(\"history_overview\", {\n name: \"history_overview\",\n schema: s(history_overview),\n executionMode: \"parallel\",\n execute: async (_p, args) => {\n if (!deps.historyOverview) return err(\"history_overview unavailable\");\n return ok(deps.historyOverview(args.summaryId as string | undefined));\n },\n });\n\n tools.set(\"history_read\", {\n name: \"history_read\",\n schema: s(history_read),\n executionMode: \"parallel\",\n execute: async (_p, args) => {\n if (!deps.historyRead) return err(\"history_read unavailable\");\n const conversationId = String(args.conversationId ?? \"\");\n const messageIndex = Number(args.messageIndex ?? 0);\n const content = deps.historyRead(conversationId, messageIndex, {\n offset: typeof args.offset === \"number\" ? args.offset : undefined,\n limit: typeof args.limit === \"number\" ? args.limit : undefined,\n around: typeof args.around === \"string\" ? args.around : undefined,\n contextChars: typeof args.contextChars === \"number\" ? args.contextChars : undefined,\n includeToolData: typeof args.includeToolData === \"boolean\" ? args.includeToolData : undefined,\n });\n return content === null\n ? ok(`No message found: ${conversationId}:${messageIndex}`)\n : ok(content);\n },\n });\n\n return tools;\n}\n\n/** Build worker-facing ARC tools with execute closures */\nexport function buildWorkerToolEntries(deps: ArcToolDeps): Map<string, Tool> {\n const tools = new Map<string, Tool>();\n\n tools.set(\"ReadEpisode\", {\n name: \"ReadEpisode\",\n schema: s(ReadEpisode),\n executionMode: \"parallel\",\n execute: async (_p, args) =>\n deps.readEpisode\n ? ok(await deps.readEpisode(normalizeReadEpisodeArgs(args)))\n : err(\"ReadEpisode unavailable\"),\n });\n\n tools.set(\"Show\", {\n name: \"Show\",\n schema: s(Show),\n execute: async () => ok(\"\"),\n });\n\n tools.set(\"ScratchPad_Write\", {\n name: \"ScratchPad_Write\",\n schema: s(ScratchPad_Write),\n execute: async (_p, args) => {\n if (!deps.scratchPad) return err(\"ScratchPad unavailable\");\n await deps.scratchPad.write(String(args.key ?? \"\"), String(args.content ?? \"\"));\n return ok(`Written to scratch pad: ${args.key}`);\n },\n });\n\n tools.set(\"ScratchPad_Read\", {\n name: \"ScratchPad_Read\",\n schema: s(ScratchPad_Read),\n executionMode: \"parallel\",\n execute: async (_p, args) => {\n if (!deps.scratchPad) return err(\"ScratchPad unavailable\");\n const content = await deps.scratchPad.read(String(args.key ?? \"\"));\n return content === null ? ok(`No note found with key: ${args.key}`) : ok(content);\n },\n });\n\n tools.set(\"ScratchPad_List\", {\n name: \"ScratchPad_List\",\n schema: s(ScratchPad_List),\n executionMode: \"parallel\",\n execute: async () => {\n if (!deps.scratchPad) return err(\"ScratchPad unavailable\");\n const keys = await deps.scratchPad.list();\n return keys.length === 0 ? ok(\"Scratch pad is empty.\") : ok(keys.join(\"\\n\"));\n },\n });\n\n // RequestMoreSteps — schema registered here; execution handled inline by worker.ts\n tools.set(\"RequestMoreSteps\", {\n name: \"RequestMoreSteps\",\n schema: s(RequestMoreSteps),\n execute: async () => err(\"RequestMoreSteps must be handled by the worker runtime\"),\n });\n\n // SubDispatch — dispatch a sub-worker for localized subtasks\n tools.set(\"SubDispatch\", {\n name: \"SubDispatch\",\n schema: s(SubDispatch),\n executionMode: \"serial\",\n execute: async (_provider, args, _workDir) => {\n if (!deps.subDispatch) return err(\"SubDispatch unavailable\");\n const instruction = String(args.instruction ?? \"\");\n const depth = Number(args._dispatchDepth ?? 0);\n if (depth >= 2) {\n return err(\"Maximum sub-dispatch depth reached. Use ScratchPad_Write to share findings with the orchestrator.\");\n }\n const result = await deps.subDispatch({\n instruction,\n ...(args.expectedOutput != null ? { expectedOutput: args.expectedOutput as ExpectedOutputContract } : {}),\n ...(args.tier != null ? { tier: args.tier as \"fast\" | \"medium\" | \"strong\" } : {}),\n dispatchDepth: depth,\n });\n const summary = `[sub-dispatch result] Status: ${result.status}\\nSummary: ${result.summary}\\nSteps used: ${result.stepsUsed}`;\n const artifactList = result.artifacts.length > 0\n ? `\\nArtifacts: ${result.artifacts.map((a) => a.uri).join(\", \")}`\n : \"\";\n return {\n success: result.status === \"complete\",\n output: summary + artifactList,\n ...(result.status !== \"complete\" ? { error: `Sub-worker ${result.status}: ${result.summary}` } : {}),\n artifacts: result.artifacts,\n };\n },\n });\n\n if (deps.askUser) {\n const askUserFn = deps.askUser;\n tools.set(\"AskUser\", {\n name: \"AskUser\",\n schema: s(tool({\n description: \"Ask the user a question and wait for their response. Use when plugin or task instructions require explicit user selection or approval.\",\n inputSchema: z.object({\n question: z.string().describe(\"The question to ask the user\"),\n options: z.array(z.string()).optional().describe(\"Optional choices to present\"),\n }),\n })),\n execute: async (_p, args) => {\n const question = String(args.question ?? \"\");\n const options = Array.isArray(args.options) ? args.options.map(String) : undefined;\n return ok(await askUserFn(question, options));\n },\n });\n }\n\n for (const [name, entry] of buildHistoryToolEntries(deps)) {\n tools.set(name, entry);\n }\n\n return tools;\n}\n\n/** Build orchestrator-facing ARC tools with execute closures (excludes dispatch/done which are control flow) */\nexport function buildOrchestratorToolEntries(deps: ArcToolDeps): Map<string, Tool> {\n const tools = new Map<string, Tool>();\n\n if (deps.recall) {\n const recallFn = deps.recall;\n tools.set(\"recall\", {\n name: \"recall\",\n schema: s(recall),\n execute: async (_p, args) => ok(await recallFn(String(args.query ?? \"\"))),\n });\n }\n\n if (deps.jobRegistry) {\n tools.set(\"jobs_status\", buildJobsStatusTool({ jobRegistry: deps.jobRegistry }));\n }\n\n if (deps.askUser) {\n const askUserFn = deps.askUser;\n tools.set(\"AskUser\", {\n name: \"AskUser\",\n schema: s(tool({\n description: \"Ask the user a clarifying question and wait for their response.\",\n inputSchema: z.object({\n question: z.string().describe(\"The question to ask the user\"),\n options: z.array(z.string()).optional().describe(\"Optional choices to present\"),\n }),\n })),\n execute: async (_p, args) => {\n const question = String(args.question ?? \"\");\n const options = Array.isArray(args.options) ? args.options.map(String) : undefined;\n return ok(await askUserFn(question, options));\n },\n });\n }\n\n for (const [name, entry] of buildHistoryToolEntries(deps)) {\n tools.set(name, entry);\n }\n\n return tools;\n}\n\n// ── Dispatch input normalization ──\n\n/** Normalize the model's freeform expectedOutput into a structured contract. */\nexport function normalizeExpectedOutput(input: unknown): ExpectedOutputContract {\n if (input && typeof input === \"object\" && !Array.isArray(input)) {\n const record = input as Record<string, unknown>;\n const artifacts = normalizeExpectedArtifacts(record);\n const successCriteria = Array.isArray(record.successCriteria)\n ? record.successCriteria.filter(\n (item): item is string => typeof item === \"string\",\n )\n : undefined;\n const verification =\n typeof record.verification === \"string\" ? record.verification : undefined;\n const description =\n typeof record.description === \"string\" ? record.description : undefined;\n\n return {\n artifacts:\n artifacts.length > 0\n ? artifacts\n : [{ type: \"unknown\", ...(description ? { description } : {}) }],\n ...(successCriteria && successCriteria.length > 0\n ? { successCriteria }\n : {}),\n ...(verification ? { verification } : {}),\n ...(description ? { description } : {}),\n };\n }\n\n const raw = typeof input === \"string\" ? input.trim() : \"\";\n if (!raw) {\n return {\n artifacts: [{ type: \"unknown\", description: \"unspecified output\" }],\n };\n }\n if (raw.startsWith(\"value:\")) {\n return {\n artifacts: [\n {\n type: \"value\",\n description: raw.slice(\"value:\".length).trim() || \"value output\",\n },\n ],\n description: raw,\n };\n }\n if (raw.startsWith(\"file:\")) {\n return {\n artifacts: [{ type: \"file\", path: raw.slice(\"file:\".length).trim() }],\n description: raw,\n };\n }\n if (looksLikePath(raw)) {\n return {\n artifacts: [{ type: \"file\", path: raw }],\n description: raw,\n };\n }\n return {\n artifacts: [{ type: \"unknown\", description: raw }],\n description: raw,\n };\n}\n\nfunction normalizeExpectedArtifacts(\n record: Record<string, unknown>,\n): ExpectedArtifact[] {\n const direct = Array.isArray(record.artifacts)\n ? record.artifacts.flatMap((item) => normalizeExpectedArtifact(item))\n : [];\n if (direct.length > 0) return direct;\n\n const kind = typeof record.kind === \"string\" ? record.kind : undefined;\n if (kind === \"file\" && typeof record.path === \"string\") {\n return [{ type: \"file\", path: record.path }];\n }\n if (kind === \"files\" && Array.isArray(record.paths)) {\n return record.paths\n .filter((path): path is string => typeof path === \"string\")\n .map((path) => ({ type: \"file\" as const, path }));\n }\n if (kind === \"value\") {\n return [\n {\n type: \"value\",\n ...(typeof record.description === \"string\"\n ? { description: record.description }\n : {}),\n },\n ];\n }\n if (kind === \"unknown\") {\n return [\n {\n type: \"unknown\",\n ...(typeof record.description === \"string\"\n ? { description: record.description }\n : {}),\n },\n ];\n }\n return [];\n}\n\nfunction normalizeExpectedArtifact(item: unknown): ExpectedArtifact[] {\n if (!item || typeof item !== \"object\" || Array.isArray(item)) return [];\n const record = item as Record<string, unknown>;\n const type = record.type;\n if (\n type !== \"file\" &&\n type !== \"directory\" &&\n type !== \"value\" &&\n type !== \"unknown\"\n )\n return [];\n return [\n {\n type,\n ...(typeof record.path === \"string\" ? { path: record.path } : {}),\n ...(typeof record.description === \"string\"\n ? { description: record.description }\n : {}),\n },\n ];\n}\n","/**\n * Tool registry: the Tool contract and schema extraction.\n *\n * Agent tool definitions (Bash, Read, Write, etc.) live in the consumer\n * (truecode). The harness only provides the Tool contract and helpers.\n */\nimport type { ToolProvider, ToolResult } from \"../interfaces/tool-provider\";\nimport type { AnyTool } from \"./shared-types\";\n\nexport type ToolExecutionMode = \"serial\" | \"parallel\";\n\n/** A registered tool: schema for the model, execute for the worker */\nexport interface Tool {\n name: string;\n /** AI SDK tool schema. Optional for ARC-internal tools (ReadEpisode, LCM_*, ScratchPad_*). */\n schema?: AnyTool | undefined;\n /** Worker execution mode for batched tool calls. Defaults to serial. */\n executionMode?:\n | ToolExecutionMode\n | ((args: Record<string, unknown>) => ToolExecutionMode);\n /** Execute using the ToolProvider. If not set, tool is handled externally (e.g. ARC tools). */\n execute?: (provider: ToolProvider, args: Record<string, unknown>, workDir: string) => Promise<ToolResult>;\n /**\n * When true, this tool may yield the worker loop if the operation is incomplete.\n * After execution, the worker checks if the target thread is still running.\n * If it is and `waitForThread` is available on the ToolProvider, the worker\n * suspends (does not count a step) until the thread completes.\n * The tool args must include a `threadId` field for the worker to track.\n */\n yieldsOnIncomplete?: boolean | undefined;\n}\n\n/** Get only the AI SDK tool schemas from a registry (skips tools without schemas) */\nexport function toolSchemasFromRegistry(\n registry: Map<string, Tool>,\n): Record<string, AnyTool> {\n const schemas: Record<string, AnyTool> = {};\n for (const [name, meta] of registry) {\n if (meta.schema) schemas[name] = meta.schema;\n }\n return schemas;\n}\n","import type { Tool } from 'ai';\n\n// ── Shared tool alias ──\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyTool = Tool<any, any>;\n\n// ── Model factory ──\n\nimport type { LanguageModel } from 'ai';\n\nexport type ModelFactory = (modelId: string) => LanguageModel;\n\n// ── Tool choice ──\n\n/** Static tool choice value for LLM calls. */\nexport type ToolChoiceValue = 'auto' | 'required' | 'none' | { type: 'tool'; toolName: string };\n\n/**\n * Tool choice configuration — static value or per-turn callback.\n */\nexport type ToolChoiceConfig = ToolChoiceValue | ((turn: number) => ToolChoiceValue);\n\n/** Resolve a ToolChoiceConfig to a concrete value for a given turn. */\nexport function resolveToolChoice(config: ToolChoiceConfig | undefined, turn: number): ToolChoiceValue {\n if (!config) return 'auto';\n return typeof config === 'function' ? config(turn) : config;\n}\n","import { generateText, streamText, stepCountIs } from \"ai\";\nimport { anthropic as defaultAnthropicProvider } from \"@ai-sdk/anthropic\";\nimport type { ModelFactory, ToolChoiceConfig } from \"./arc/shared-types\";\nimport { resolveToolChoice } from \"./arc/shared-types\";\n\nimport type {\n AgentAction,\n AgentMessage,\n AgentLoop,\n AgentStreamEvent,\n StepUsage,\n ToolCallAction,\n ToolBatchAction,\n PrepareStepContext,\n PrepareStepResult,\n} from \"./agent/types\";\nimport { getTextContent } from \"./agent/types\";\nimport type { AnyTool } from \"./arc/shared-types\";\n\n// ── Convert AgentMessage[] to Vercel AI SDK ModelMessage[] ──\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ModelMessage = any;\n\nfunction toModelMessages(messages: AgentMessage[]): ModelMessage[] {\n const out: ModelMessage[] = [];\n\n for (const msg of messages) {\n if (msg.role === \"system\") {\n // System messages are always text\n out.push({\n role: \"system\",\n content:\n typeof msg.content === \"string\"\n ? msg.content\n : getTextContent(msg.content),\n });\n continue;\n }\n\n if (msg.role === \"user\") {\n // Pass through ContentPart[] directly for multimodal (images)\n out.push({ role: \"user\", content: msg.content });\n continue;\n }\n\n if (msg.role === \"assistant\") {\n const textContent =\n typeof msg.content === \"string\"\n ? msg.content\n : getTextContent(msg.content);\n if (msg.toolCalls && msg.toolCalls.length > 0) {\n // Structured assistant message with tool calls\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const parts: any[] = [];\n if (textContent) {\n parts.push({ type: \"text\", text: textContent });\n }\n for (const tc of msg.toolCalls) {\n parts.push({\n type: \"tool-call\",\n toolCallId: tc.toolCallId,\n toolName: tc.toolName,\n input: tc.args,\n ...(tc.providerMetadata ? { providerOptions: tc.providerMetadata } : {}),\n });\n }\n out.push({ role: \"assistant\", content: parts });\n } else {\n out.push({ role: \"assistant\", content: textContent });\n }\n continue;\n }\n\n if (msg.role === \"tool\") {\n if (msg.toolResults && msg.toolResults.length > 0) {\n // Structured tool result message\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const parts: any[] = msg.toolResults.map((tr) => ({\n type: \"tool-result\",\n toolCallId: tr.toolCallId,\n toolName: tr.toolName,\n output: tr.isError\n ? { type: \"error-text\", value: tr.result }\n : { type: \"text\", value: tr.result },\n }));\n out.push({ role: \"tool\", content: parts });\n } else {\n // Fallback: no structured fields — wrap as user message\n const textContent =\n typeof msg.content === \"string\"\n ? msg.content\n : getTextContent(msg.content);\n out.push({ role: \"user\", content: `[Tool result]: ${textContent}` });\n }\n continue;\n }\n }\n\n return out;\n}\n\n/** A system prompt block with optional Anthropic cache control. */\nexport interface SystemPromptBlock {\n text: string;\n cacheControl?: { type: \"ephemeral\" };\n}\n\nexport interface VercelAgentLoopConfig {\n model?: string;\n /** System prompt — string or structured blocks with cache control markers. */\n systemPrompt?: string | SystemPromptBlock[];\n createModel?: ModelFactory;\n /** @deprecated Prefer createModel. */\n apiKey?: string;\n /** Custom tool definitions. If provided, replaces built-in agentTools for LLM calls. */\n tools?: Record<string, AnyTool>;\n /** Tool choice for LLM calls. Supports per-turn callbacks. Default: 'auto'. */\n toolChoice?: ToolChoiceConfig;\n /** Provider options passed to generateText/streamText (e.g. anthropic thinking config). */\n providerOptions?: Record<string, unknown>;\n /** Per-step callback to override model and active tools before each LLM call. */\n prepareStep?: (context: PrepareStepContext) => PrepareStepResult | void;\n}\n\nexport class VercelAgentLoop implements AgentLoop {\n private readonly model: string;\n private readonly createModel: ModelFactory;\n private readonly systemPrompt: string | SystemPromptBlock[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly tools: Record<string, AnyTool>;\n private readonly validToolNames: Set<string>;\n private readonly toolChoiceConfig: ToolChoiceConfig | undefined;\n private readonly providerOptions: Record<string, unknown> | undefined;\n private readonly prepareStep: VercelAgentLoopConfig[\"prepareStep\"];\n /** Track tool names called across steps for prepareStep context. */\n private toolCallHistory: string[] = [];\n private step = 0;\n\n /** Last step's token usage — read after nextAction/streamAction completes. */\n public lastUsage: StepUsage | undefined;\n\n constructor(config: VercelAgentLoopConfig = {}) {\n this.toolChoiceConfig = config.toolChoice;\n this.model =\n config.model ?? process.env.HARNESS_MODEL ?? \"claude-sonnet-4-5\";\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.createModel = config.createModel ?? defaultAnthropicProvider;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.tools = config.tools ?? ({} as any);\n this.validToolNames = new Set(Object.keys(this.tools));\n this.providerOptions = config.providerOptions;\n this.prepareStep = config.prepareStep;\n this.systemPrompt =\n config.systemPrompt ??\n [\n \"You are an agent that accomplishes tasks using tools.\",\n \"You may call multiple independent tools in a single turn.\",\n \"Use tools when shell or filesystem access is required.\",\n \"Use TextEditor for file changes. Use ReadOnlyBash only for read-only inspection or verification commands.\",\n \"Avoid rewriting the same file multiple times unless a previous run returned an error that requires a fix.\",\n \"When the task is fully complete, respond with a brief text summary (no tool call).\",\n ].join(\" \");\n\n if (config.apiKey) {\n process.env.ANTHROPIC_API_KEY = config.apiKey;\n }\n }\n\n /** Build the `system` parameter for generateText/streamText. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private buildSystemParam(): any {\n if (typeof this.systemPrompt === \"string\") return this.systemPrompt;\n // Structured blocks → AI SDK v6 SystemModelMessage format\n // OpenRouter uses the same cache_control format for all providers (Anthropic, Gemini, GLM, etc.)\n return this.systemPrompt.map((block) => ({\n role: \"system\" as const,\n content: block.text,\n ...(block.cacheControl\n ? {\n providerOptions: {\n anthropic: { cacheControl: block.cacheControl },\n openrouter: { cacheControl: block.cacheControl },\n },\n }\n : {}),\n }));\n }\n\n /** Resolve model + tools for this step via prepareStep callback. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private resolveStep(stepNumber: number): {\n model: string;\n tools: Record<string, any>;\n validNames: Set<string>;\n } {\n if (!this.prepareStep) {\n return {\n model: this.model,\n tools: this.tools,\n validNames: this.validToolNames,\n };\n }\n const overrides = this.prepareStep({\n stepNumber,\n toolCallHistory: this.toolCallHistory,\n });\n if (!overrides) {\n return {\n model: this.model,\n tools: this.tools,\n validNames: this.validToolNames,\n };\n }\n const model = overrides.model ?? this.model;\n let tools: Record<string, AnyTool> = this.tools;\n let validNames = this.validToolNames;\n if (overrides.activeTools) {\n const allowed = new Set(overrides.activeTools);\n tools = Object.fromEntries(\n Object.entries(this.tools).filter(([k]) => allowed.has(k)),\n );\n validNames = new Set(Object.keys(tools));\n }\n return { model, tools, validNames };\n }\n\n /** Extract StepUsage from AI SDK usage object. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private static extractUsage(usage: any): StepUsage | undefined {\n if (!usage) return undefined;\n const u: StepUsage = {};\n if (usage.inputTokens != null) u.inputTokens = usage.inputTokens;\n if (usage.outputTokens != null) u.outputTokens = usage.outputTokens;\n // AI SDK v6 nests cache/reasoning under inputTokenDetails/outputTokenDetails\n const inputDetails = usage.inputTokenDetails ?? usage;\n const outputDetails = usage.outputTokenDetails ?? usage;\n if (inputDetails.cacheReadTokens != null)\n u.cacheReadTokens = inputDetails.cacheReadTokens;\n if (inputDetails.cacheWriteTokens != null)\n u.cacheWriteTokens = inputDetails.cacheWriteTokens;\n if (outputDetails.reasoningTokens != null)\n u.reasoningTokens = outputDetails.reasoningTokens;\n return Object.keys(u).length > 0 ? u : undefined;\n }\n\n async nextAction(messages: AgentMessage[], signal?: AbortSignal): Promise<AgentAction> {\n const currentStep = this.step++;\n\n const { model, tools, validNames } = this.resolveStep(currentStep + 1);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const result = await (generateText as any)({\n model: this.createModel(model),\n tools,\n toolChoice: resolveToolChoice(this.toolChoiceConfig, currentStep),\n system: this.buildSystemParam(),\n messages: toModelMessages(messages),\n stopWhen: stepCountIs(1),\n ...(signal ? { abortSignal: signal } : {}),\n ...(this.providerOptions\n ? { providerOptions: this.providerOptions }\n : {}),\n });\n\n // Capture usage\n this.lastUsage = VercelAgentLoop.extractUsage(result.usage);\n\n // If the model made tool calls, extract them\n if (result.toolCalls && result.toolCalls.length > 0) {\n const publicRationale = result.text?.trim() || undefined;\n const validCalls: ToolCallAction[] = [];\n for (const call of result.toolCalls) {\n const name = call.toolName;\n if (validNames.has(name)) {\n const toolCallId = (call as { toolCallId?: string }).toolCallId;\n const providerMetadata =\n (call as { providerMetadata?: Record<string, unknown> })\n .providerMetadata ??\n (call as { experimental_providerMetadata?: Record<string, unknown> })\n .experimental_providerMetadata;\n validCalls.push({\n type: \"tool\",\n name,\n args: (call as { input: Record<string, unknown> }).input,\n ...(toolCallId != null ? { toolCallId } : {}),\n ...(providerMetadata != null ? { providerMetadata } : {}),\n });\n this.toolCallHistory.push(name);\n }\n }\n\n if (validCalls.length === 0) {\n return {\n type: \"final\",\n content: `Unknown tool: ${result.toolCalls[0]!.toolName}`,\n };\n }\n\n // Single call → backward-compatible ToolCallAction\n if (validCalls.length === 1) {\n const [call] = validCalls;\n return publicRationale ? { ...call!, publicRationale } : call!;\n }\n\n // Multiple calls → ToolBatchAction\n return {\n type: \"tool_batch\",\n calls: validCalls,\n ...(publicRationale ? { publicRationale } : {}),\n } satisfies ToolBatchAction;\n }\n\n // No tool call — model responded with text (task complete)\n const text = result.text?.trim();\n return { type: \"final\", content: text || \"Done.\" };\n }\n\n async *streamAction(\n messages: AgentMessage[],\n ): AsyncGenerator<AgentStreamEvent> {\n const currentStep = this.step++;\n\n const { model, tools, validNames } = this.resolveStep(currentStep + 1);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const result = (streamText as any)({\n model: this.createModel(model),\n tools,\n toolChoice: resolveToolChoice(this.toolChoiceConfig, currentStep),\n system: this.buildSystemParam(),\n messages: toModelMessages(messages),\n stopWhen: stepCountIs(1),\n ...(this.providerOptions\n ? { providerOptions: this.providerOptions }\n : {}),\n });\n\n const toolArgs = new Map<string, string>();\n\n for await (const part of result.fullStream) {\n if (part.type === \"text-delta\") {\n yield { type: \"text_delta\", text: part.text };\n }\n if (part.type === \"tool-input-start\") {\n toolArgs.set(part.id, \"\");\n }\n if (part.type === \"tool-input-delta\") {\n toolArgs.set(part.id, (toolArgs.get(part.id) ?? \"\") + part.delta);\n }\n if (part.type === \"tool-call\") {\n const name = part.toolName;\n if (validNames.has(name)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const p = part as any;\n const args: Record<string, unknown> = p.args ?? p.input ?? {};\n const toolCallId: string | undefined = p.toolCallId;\n yield {\n type: \"tool_start\",\n name,\n args,\n ...(toolCallId != null ? { toolCallId } : {}),\n };\n this.toolCallHistory.push(name);\n }\n }\n }\n\n // Capture usage after stream completes\n try {\n const usage = await result.usage;\n this.lastUsage = VercelAgentLoop.extractUsage(usage);\n } catch {\n this.lastUsage = undefined;\n }\n }\n}\n","import { HarnessTelemetry } from './otel';\n\nexport function recordToolCallDuration(\n telemetry: HarnessTelemetry | undefined,\n toolName: string,\n durationMs: number,\n success: boolean\n): void {\n if (!telemetry?.isEnabled()) return;\n telemetry.counter('tool_calls_total', 1, { tool: toolName, success });\n telemetry.histogram('tool_call_duration_ms', durationMs, { tool: toolName, success });\n}\n\nexport function recordAgentStep(telemetry: HarnessTelemetry | undefined): void {\n if (!telemetry?.isEnabled()) return;\n telemetry.counter('agent_steps_total', 1);\n}\n\nexport function recordCompaction(telemetry: HarnessTelemetry | undefined): void {\n if (!telemetry?.isEnabled()) return;\n telemetry.counter('compactions_total', 1);\n}\n\nexport function recordAgentError(telemetry: HarnessTelemetry | undefined): void {\n if (!telemetry?.isEnabled()) return;\n telemetry.counter('agent_errors_total', 1);\n}\n","export const ORCHESTRATOR_SYSTEM_PROMPT = `You accomplish tasks by dispatching workers and synthesizing results.\n\nAddress the human in second person (\"you\", \"your\"). Never refer to them as \"the user\" in your rationales, reasoning, or final replies — you are in direct conversation.\n\nPlan first. If the answer is already in context or from your knowledge, write the full user-facing answer and pass it as done(output) verbatim. Otherwise TodoWrite a 2-5 step plan, then dispatch the smallest worker that makes progress on the current step. Revise todos as work lands.\n\nDispatch workers for anything requiring tool use. Answer directly with done for questions you can answer from knowledge or prior results.\n\nYou can dispatch multiple workers in a single turn — they run in parallel. Two strategies:\n- Decompose: different subtasks in parallel, collate results.\n- Explore: same problem, different approaches, take the best.\n\nEach dispatch accepts an optional tier parameter:\n- tier: \"fast\" — cheap, fast model for simple lookups, file reads, searches, and summarization.\n- tier: \"medium\" — balanced model/budget for normal multi-step work.\n- tier: \"strong\" — full-capability model/budget for coding, debugging, and complex reasoning.\nOmit tier for the default worker budget. Use fast only when the task is straightforward and doesn't require deep reasoning.\n\nEach dispatch also accepts an optional role parameter — a 1-2 word semantic label that describes what the worker is doing (e.g. \"Debugger\", \"Researcher\", \"Sysadmin\", \"DocReader\", \"Tester\"). This is shown in the UI so the user understands what each worker is responsible for. Always set role when dispatching.\n\nWorkers are stateless — they see only their instruction, input artifacts, and tools. They also have access to history and scratch pad tools, so you don't need to repeat everything.\n\n## Worker Execution Model\n\nWorkers use event-driven execution for long-running operations:\n- Workers start background commands (SSH, builds, tests) with StartCommand, then yield via CheckCommand. Yielding does NOT consume steps — the worker suspends and resumes automatically when the command completes.\n- You do NOT need to dispatch continuation workers because a worker is \"waiting\" — yielding workers hold their slot but don't waste steps or tokens.\n\nWorkers can also delegate localized subtasks to sub-workers using the SubDispatch tool:\n- SubDispatch is useful when a worker encounters a focused sub-problem (e.g., read and summarize a complex file, run a targeted search) that doesn't warrant returning to the orchestrator.\n- Sub-workers receive a compact summary, not the full transcript, so they don't bloat the parent worker's context.\n- Sub-dispatch depth is capped at 2 levels (worker → sub-worker → sub-sub-worker). Deeper nesting returns an error.\n- You do NOT need to change your dispatch strategy — SubDispatch is a worker-level optimization that runs within the worker's existing step budget.\n\n## Context Management\n\nOlder context gets compacted into summaries. Use history_search to find specific prior results, history_read for full content, and history_expand to restore compacted summaries.\n\nBefore dispatching, check what prior workers attempted. When a worker fails, examine the failure mode before deciding what's next:\n- Environmental failures — model timeouts, rate limits, provider errors, \"operation aborted due to timeout\" — are not solvable by rewording the dispatch. Do not redispatch the same task more than once for these; call done with a clear error so the user can switch model/tier or retry later.\n- Content failures — worker couldn't find what it needed, hit a bug, ran out of steps — may be solvable by a meaningfully different approach: different decomposition, different tool angle, smaller scope, different tier. Rewording the same instruction with stronger language is not a different approach.\n\nIf 2+ dispatches return the same failure mode in a row, treat it as a signal the current strategy is wrong, not a reason to try again with the same idea.\n\nBefore each tool call, write a concise first-person public rationale. Start with an \"I\" statement, such as \"I\", \"I'm\", or \"I'll\", and explain why the action is useful for the user's task. Do not expose hidden chain-of-thought, and do not merely restate the tool call or worker instruction. When dispatching workers, do NOT repeat the raw instructions you are sending to them. Instead, provide a short summary in the public rationale formatted like: \"I am dispatching [N] workers to do this - a) ..., b) ..., c) ...\".\n\nWhen a worker confirms success (e.g. \"all criteria met\"), call done. Do not dispatch additional verification workers unless the first one found actual problems.\n\nJobs may be running in the background. Each turn includes a \"Live Jobs\" block and a jobs_status tool. A [job event] line indicates a job reached a terminal state or produced notable output — decide whether to act on it, note it for the user, or continue planned work. A [user interjection] line is a user message delivered mid-task — triage before resuming planned work.`;\n\nexport const WORKER_SYSTEM_PROMPT = `Complete the instruction using the available tools. Workers are stateless and cannot interact with the user — assume reasonable defaults and proceed.\n\nBefore starting, check ScratchPad_List for notes from prior workers and use history_search to find relevant prior attempts.\n\nIf you are running low on steps, call RequestMoreSteps with additional=15 to extend your budget and keep working. This preserves your full context — far better than stopping and forcing a new worker to start over. Only use ScratchPad_Write as a last resort when at the absolute step ceiling.\n\nBefore finishing, verify your work against the expected output contract. If verification fails, fix it.\n\nBefore each tool call, write a concise first-person public rationale. Start with an \"I\" statement, such as \"I\", \"I'm\", or \"I'll\", and explain why the action is useful for the user's task. Do not expose hidden chain-of-thought, and do not merely restate the tool call or worker instruction.\n\n## Background Commands & Yielding\n\nFor commands likely to run longer than ~20 seconds (SSH, builds, full test suites, long-running processes), use StartCommand instead of Bash. StartCommand returns immediately with a thread ID.\n\nWhen you need the result of a background thread, call CheckCommand with the thread ID. The harness will automatically yield your execution and resume you when the thread completes — you will NOT waste steps while waiting. You do not need to poll repeatedly.\n\nThis means:\n- Start long-running work with StartCommand, then continue with other tasks if possible\n- When you need the result, call CheckCommand once — you'll be resumed with the completion result\n- Yielding does NOT cost steps — you are only charged for the step where you called CheckCommand, not for the wait time\n- If you have other work to do while waiting, do it before calling CheckCommand\n\n## Sub-Dispatch\n\nYou can delegate focused subtasks to a sub-worker using the SubDispatch tool. This is useful when you encounter a localized problem that doesn't warrant returning to the orchestrator.\n\nSubDispatch accepts: instruction, expectedOutput, and an optional tier (fast/medium/strong).\n\nImportant constraints:\n- Sub-dispatch depth is capped at 2 levels. If you are already a sub-worker at depth 2, SubDispatch will return an error — use ScratchPad_Write instead.\n- Sub-workers run within your step budget. Their steps are separate from yours but count against the total dispatch allocation.\n- You will receive a compact summary of the sub-worker's result, not its full transcript. The summary includes status, key findings, and artifact paths.\n- Do not use SubDispatch for trivial tasks that you can do directly — only use it when the subtask is genuinely complex enough to benefit from a separate model call.\n\n## Escalation\n\nIf the user's message or your instruction fundamentally changes the task scope or requires task-level replanning that you cannot handle, return a concise final response beginning with NEEDS_ORCHESTRATOR: and explain what decision is needed.`;\n","import type { ToolCallAction } from \"../agent/types\";\n\n/**\n * Parse an assistant response that lacks structured tool calls and pull out any\n * \"textual\" tool calls the model wrote as inline JSON. This is a defensive\n * rescue for models (notably moonshotai/kimi-k2.6) that occasionally emit\n * calls as prose like `Read{\"path\":\"/foo\"}` or `Read({\"path\":\"/foo\"})`\n * instead of using the tool-call API — otherwise the agent loop would mark\n * the turn \"final\" and exit prematurely.\n *\n * Returns rescued calls in source order. Tool names not in\n * `availableToolNames`, malformed JSON, or unbalanced braces are ignored.\n */\nexport function rescueTextualToolCalls(\n text: string,\n availableToolNames: Iterable<string>,\n): ToolCallAction[] {\n const names = [...availableToolNames].filter(Boolean);\n if (names.length === 0 || !text) return [];\n\n const nameSet = new Set(names);\n const escaped = names.map(escapeRegex).join(\"|\");\n const pattern = new RegExp(`\\\\b(${escaped})\\\\s*\\\\(?\\\\s*\\\\{`, \"g\");\n\n const rescued: ToolCallAction[] = [];\n let match: RegExpExecArray | null;\n while ((match = pattern.exec(text)) !== null) {\n const toolName = match[1]!;\n if (!nameSet.has(toolName)) continue;\n const openIdx = match.index + match[0].length - 1;\n const closeIdx = findMatchingBrace(text, openIdx);\n if (closeIdx === -1) continue;\n const jsonStr = text.slice(openIdx, closeIdx + 1);\n let parsed: unknown;\n try {\n parsed = JSON.parse(jsonStr);\n } catch {\n continue;\n }\n if (parsed === null || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n continue;\n }\n rescued.push({\n type: \"tool\",\n name: toolName,\n args: parsed as Record<string, unknown>,\n });\n pattern.lastIndex = closeIdx + 1;\n }\n return rescued;\n}\n\n/**\n * Return the text that appears before the first rescued call — useful as the\n * publicRationale when promoting a \"final\" action to a tool batch.\n */\nexport function extractRationaleBefore(\n text: string,\n toolName: string,\n): string {\n const pattern = new RegExp(`\\\\b${escapeRegex(toolName)}\\\\s*\\\\(?\\\\s*\\\\{`);\n const match = text.match(pattern);\n if (!match || match.index === undefined) return \"\";\n return text.slice(0, match.index).trim();\n}\n\nfunction findMatchingBrace(text: string, openIdx: number): number {\n let depth = 1;\n let i = openIdx + 1;\n let inString = false;\n let escape = false;\n while (i < text.length && depth > 0) {\n const c = text[i]!;\n if (escape) {\n escape = false;\n } else if (inString) {\n if (c === \"\\\\\") escape = true;\n else if (c === '\"') inString = false;\n } else {\n if (c === '\"') inString = true;\n else if (c === \"{\") depth++;\n else if (c === \"}\") depth--;\n }\n i++;\n }\n return depth === 0 ? i - 1 : -1;\n}\n\nfunction escapeRegex(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n","import type { DispatchTier } from \"./types\";\n\n/** Default budget for dispatches that do not request a tier. */\nexport const DEFAULT_MAX_STEPS_PER_WORKER = 30;\n\n/** Per-tier initial budgets. Strong is intentionally larger for implementation loops. */\nexport const DEFAULT_WORKER_STEP_BUDGETS: Record<DispatchTier, number> = {\n fast: 12,\n medium: 24,\n strong: 40,\n};\n\n/** Hard ceiling on worker steps after RequestMoreSteps extensions. */\nexport const ABSOLUTE_MAX_WORKER_STEPS = 60;\n\n/** Recommended extension size when workers need to keep their current context. */\nexport const REQUEST_MORE_STEPS_INCREMENT = 15;\n","import type {\n AgentAction,\n AgentMessage,\n ToolCallAction,\n ToolBatchAction,\n ToolResultInfo,\n} from \"../agent/types\";\nimport type {\n ToolResult,\n ToolResultArtifact,\n} from \"../interfaces/tool-provider\";\nimport {\n VercelAgentLoop,\n SystemPromptBlock,\n} from \"../vercel-agent-loop\";\nimport { recordAgentStep, recordToolCallDuration } from \"../observability/metrics\";\nimport { traceStep } from \"../observability/tracing\";\nimport type { AnyTool } from \"./shared-types\";\nimport type {\n ExpectedOutputContract,\n RunWorkerConfig,\n WorkerResult,\n} from \"./types\";\nimport { cloneForTrace } from \"./trace-utils\";\nimport { WORKER_SYSTEM_PROMPT } from \"./prompts\";\nimport { rescueTextualToolCalls, extractRationaleBefore } from \"./rescue-textual-tools\";\nimport {\n ABSOLUTE_MAX_WORKER_STEPS,\n REQUEST_MORE_STEPS_INCREMENT,\n} from \"./worker-budgets\";\n\n/** Hard ceiling on worker steps (initial + extensions via RequestMoreSteps). Must match dispatcher. */\nconst ABSOLUTE_MAX_STEPS = ABSOLUTE_MAX_WORKER_STEPS;\n\ninterface ExecutedToolResult extends ToolResultInfo {\n actionLine: string;\n artifact?: ToolResultArtifact | undefined;\n}\n\n/** Inline arg summary: slice each arg value to 200 chars, join with comma */\nfunction summarizeArgs(args: Record<string, unknown>): string {\n return Object.values(args)\n .map(stringifyArgValue)\n .filter((s) => s !== \"\")\n .join(\", \");\n}\n\nfunction stringifyArgValue(v: unknown): string {\n if (v === null || v === undefined) return \"\";\n if (typeof v === \"string\") return v.slice(0, 200);\n if (typeof v === \"number\" || typeof v === \"boolean\") return String(v);\n if (Array.isArray(v)) return v.length === 0 ? \"\" : `[${v.length}]`;\n if (typeof v === \"object\") return \"\";\n return String(v).slice(0, 200);\n}\n\n/**\n * Run a stateless worker with the given configuration.\n * Workers see only: instruction, input artifacts, and tools.\n */\nexport async function runWorker(\n config: RunWorkerConfig,\n): Promise<WorkerResult> {\n const {\n task,\n instruction,\n expectedOutput,\n lcmContext,\n inputArtifacts,\n tools,\n toolRegistry,\n maxSteps,\n toolProvider,\n createModel,\n model,\n workDir,\n signal,\n systemPromptPrefix,\n systemPromptSuffix,\n providerOptions,\n orchestratorContext,\n tupleId,\n onProgress,\n onTrace,\n hookRunner,\n telemetry,\n dispatchDepth = 0,\n resumeMessages,\n stepsAlreadyUsed = 0,\n modelCallTimeoutMs = 180_000,\n } = config;\n const traceTupleId = tupleId ?? \"worker\";\n\n // Build system prompt with cache_control so the static portion is cached across dispatches\n const systemPrompt: SystemPromptBlock[] = [];\n\n if (systemPromptPrefix) {\n systemPrompt.push({\n text: systemPromptPrefix,\n cacheControl: { type: \"ephemeral\" },\n });\n }\n systemPrompt.push({\n text: WORKER_SYSTEM_PROMPT,\n cacheControl: { type: \"ephemeral\" },\n });\n if (systemPromptSuffix) {\n systemPrompt.push({\n text: systemPromptSuffix,\n cacheControl: { type: \"ephemeral\" },\n });\n }\n\n // Build initial user message with instruction, context, and inputs.\n // Skipped entirely when resuming — the worker already has this context in its messages.\n let userContent = \"\";\n\n if (!resumeMessages) {\n // Include the orchestrator's public rationale as context.\n if (orchestratorContext) {\n userContent += `## Orchestrator Context\\n${orchestratorContext}\\n\\n`;\n }\n\n if (task) {\n userContent += `## Original Task\\n${task}\\n\\n`;\n }\n\n userContent += [\n `## Workspace`,\n `Current workspace root: ${workDir}`,\n `## Worker Budget`,\n `max_steps: ${maxSteps}`,\n \"\",\n ].join(\"\\n\");\n\n if (expectedOutput) {\n userContent += `## Expected Output Contract\\n${formatExpectedOutput(expectedOutput)}\\n\\n`;\n }\n\n // Use LCM-assembled context (structured fields avoid fragile string matching)\n if (lcmContext) {\n if (lcmContext.frontierText) {\n userContent += `${lcmContext.frontierText}\\n\\n`;\n }\n if (lcmContext.ghostCueText) {\n userContent += `${lcmContext.ghostCueText}\\n\\n`;\n }\n }\n\n userContent += `## Instruction\\n${instruction}`;\n if (inputArtifacts.size > 0) {\n userContent += \"\\n\\n## Input Files\\n\";\n for (const [id, content] of inputArtifacts) {\n userContent += `\\n### ${id}\\n\\`\\`\\`\\n${content}\\n\\`\\`\\`\\n`;\n }\n }\n }\n\n // tools already includes agent tools + ARC framework tools (merged by the loop)\n const allTools: Record<string, AnyTool> = tools;\n const loop = new VercelAgentLoop({\n model,\n createModel,\n systemPrompt,\n tools: allTools,\n ...(providerOptions ? { providerOptions } : {}),\n });\n\n // When resuming from an interrupted worker, reuse the existing conversation\n // and just append the user's message — no fresh instruction/context needed.\n const messages: AgentMessage[] = resumeMessages\n ? [...resumeMessages, { role: \"user\" as const, content: instruction }]\n : [{ role: \"user\" as const, content: userContent }];\n\n let stepsUsed = stepsAlreadyUsed;\n let effectiveMaxSteps = resumeMessages\n ? maxSteps + stepsAlreadyUsed // total budget = remaining + already used\n : maxSteps;\n let extensionCount = 0;\n let completionGraceUsed = false;\n let lastMessage = \"\";\n let output: string | null = null;\n let status: WorkerResult[\"status\"] = \"incomplete\";\n const actions: string[] = [];\n const artifacts: ToolResultArtifact[] = [];\n\n while (stepsUsed < effectiveMaxSteps) {\n if (signal?.aborted) {\n status = \"interrupted\";\n lastMessage = \"Worker interrupted by user\";\n break;\n }\n\n const step = stepsUsed + 1;\n const modelStartedAt = Date.now();\n recordAgentStep(telemetry);\n onProgress?.({ kind: \"model_start\", step, maxSteps: effectiveMaxSteps });\n onTrace?.({\n scope: \"worker\",\n phase: \"model_input\",\n tupleId: traceTupleId,\n step,\n model,\n system: systemPrompt.map((b) => b.text).join(\"\\n\\n\"),\n messages: cloneForTrace(messages),\n toolNames: Object.keys(allTools),\n });\n\n let action: AgentAction;\n try {\n const callSignals: AbortSignal[] = [AbortSignal.timeout(modelCallTimeoutMs)];\n if (signal) callSignals.push(signal);\n const callSignal = AbortSignal.any(callSignals);\n action = await traceStep(\n telemetry,\n \"arc.worker.model\",\n {\n tupleId: traceTupleId,\n step,\n model,\n messages: messages.length,\n tools: Object.keys(allTools).length,\n },\n () => loop.nextAction(messages, callSignal),\n );\n } catch (error) {\n // Turn interrupted — return gracefully instead of crashing\n if (signal?.aborted) {\n status = \"interrupted\";\n lastMessage = \"Worker interrupted by user\";\n break;\n }\n onProgress?.({\n kind: \"model_error\",\n step,\n durationMs: Date.now() - modelStartedAt,\n error: summarizeError(error),\n });\n throw error;\n }\n\n stepsUsed++;\n\n // Defensive rescue: some models (notably moonshotai/kimi-k2.6) occasionally\n // emit tool calls as prose JSON (`Read{\"path\":\"/x\"}`) instead of using the\n // tool-call API. Without this the worker would treat the text as \"final\"\n // and exit prematurely. If every call in the text resolves to a known\n // tool, promote the action to a tool batch and keep going.\n if (action.type === \"final\") {\n const rescued = rescueTextualToolCalls(action.content, Object.keys(allTools));\n if (rescued.length > 0) {\n const rationale = extractRationaleBefore(action.content, rescued[0]!.name);\n onTrace?.({\n scope: \"worker\",\n phase: \"textual_tool_call_rescued\",\n tupleId: traceTupleId,\n step,\n toolNames: rescued.map((c) => c.name),\n });\n action = {\n type: \"tool_batch\",\n calls: rescued,\n ...(rationale ? { publicRationale: rationale } : {}),\n };\n }\n }\n\n onTrace?.({\n scope: \"worker\",\n phase: \"model_output\",\n tupleId: traceTupleId,\n step,\n action: cloneForTrace(action),\n });\n const actionToolNames = toolNamesForAction(action);\n const publicRationale = publicRationaleForAction(action);\n const missingPublicRationale =\n actionToolNames.length > 0 && !publicRationale;\n if (missingPublicRationale) {\n onTrace?.({\n scope: \"worker\",\n phase: \"public_rationale_missing\",\n tupleId: traceTupleId,\n step,\n toolNames: actionToolNames,\n });\n }\n onProgress?.({\n kind: \"model_complete\",\n step,\n actionType: action.type,\n durationMs: Date.now() - modelStartedAt,\n ...(actionToolNames.length > 0 ? { toolNames: actionToolNames } : {}),\n ...(publicRationale ? { publicRationale } : {}),\n ...(missingPublicRationale ? { missingPublicRationale } : {}),\n ...(action.type === \"final\"\n ? { outputSummary: summarizeText(action.content, 240) }\n : {}),\n ...(loop.lastUsage?.inputTokens != null ? { inputTokens: loop.lastUsage.inputTokens } : {}),\n ...(loop.lastUsage?.outputTokens != null ? { outputTokens: loop.lastUsage.outputTokens } : {}),\n });\n\n if (action.type === \"final\") {\n // Worker completed with text response\n messages.push({ role: \"assistant\", content: action.content });\n lastMessage = action.content;\n status = \"complete\";\n output ??= action.content;\n break;\n }\n\n if (action.type === \"tool\" || action.type === \"tool_batch\") {\n const calls: ToolCallAction[] =\n action.type === \"tool\" ? [action] : (action as ToolBatchAction).calls;\n const callsWithIds: ToolCallAction[] = calls.map((call) => ({\n ...call,\n toolCallId:\n call.toolCallId ?? `call_${Math.random().toString(36).slice(2)}`,\n }));\n\n // Add assistant message with tool calls\n messages.push({\n role: \"assistant\",\n content: publicRationale ?? \"\",\n toolCalls: callsWithIds.map((c) => ({\n toolCallId: c.toolCallId!,\n toolName: c.name,\n args: c.args,\n ...(c.providerMetadata\n ? { providerMetadata: c.providerMetadata }\n : {}),\n })),\n });\n\n // Execute tools and collect results. Contiguous read-only groups run in\n // parallel; mutating/control calls preserve serial ordering.\n const results: ExecutedToolResult[] = [];\n\n const applyToolResult = (entry: ExecutedToolResult): void => {\n if (entry.artifact) {\n artifacts.push(entry.artifact);\n if (entry.artifact.action !== \"observed\" && entry.artifact.kind === \"file\") {\n output = entry.artifact.uri;\n }\n }\n actions.push(entry.actionLine);\n };\n\n const canRunInParallel = (call: ToolCallAction): boolean => {\n if (hookRunner) return false;\n const meta = toolRegistry.get(call.name);\n try {\n const mode = typeof meta?.executionMode === \"function\"\n ? meta.executionMode(call.args)\n : meta?.executionMode;\n return mode === \"parallel\";\n } catch {\n return false;\n }\n };\n\n const executeToolCall = async (call: ToolCallAction): Promise<ExecutedToolResult> => {\n const toolCallId = call.toolCallId!;\n const argSummary = summarizeArgs(call.args);\n const toolStartedAt = Date.now();\n onTrace?.({\n scope: \"worker\",\n phase: \"tool_call\",\n tupleId: traceTupleId,\n step: stepsUsed,\n toolCallId,\n toolName: call.name,\n args: cloneForTrace(call.args),\n });\n onProgress?.({\n kind: \"tool_start\",\n step: stepsUsed,\n toolCallId,\n toolName: call.name,\n ...(argSummary ? { argsSummary: argSummary } : {}),\n });\n\n // PreToolUse hook\n if (hookRunner) {\n const pre = await hookRunner.run({ event: \"PreToolUse\", toolName: call.name, input: call.args });\n if (!pre.allow) {\n const blockedResult: ToolResult = { success: false, output: \"\", error: pre.reason ?? \"blocked by pre-hook\" };\n const resultText = toolResultText(blockedResult);\n return {\n toolCallId,\n toolName: call.name,\n result: resultText,\n isError: true,\n durationMs: Date.now() - toolStartedAt,\n actionLine: `${call.name}${argSummary ? `: ${argSummary}` : \"\"} → ERROR: ${pre.reason ?? \"blocked by pre-hook\"}`,\n };\n }\n }\n\n let result: ToolResult;\n try {\n if (call.name === \"RequestMoreSteps\") {\n // Handle inline — mutates step budget in-place so worker keeps its full context\n extensionCount++;\n const requestedValue = Number(call.args.additional);\n const requested = Math.max(\n 1,\n Number.isFinite(requestedValue)\n ? requestedValue\n : REQUEST_MORE_STEPS_INCREMENT,\n );\n const granted = Math.min(requested, ABSOLUTE_MAX_STEPS - effectiveMaxSteps);\n if (granted > 0) {\n effectiveMaxSteps += granted;\n const hasWriteArtifacts = artifacts.some((a) => a.action !== \"observed\");\n const budget = `Granted ${granted} additional steps. New budget: ${effectiveMaxSteps} total (${effectiveMaxSteps - stepsUsed} remaining).`;\n const nudge = !hasWriteArtifacts\n ? `\\nYou haven't produced any file changes yet. Before continuing, assess: is your current approach making progress, or should you try a fundamentally different strategy?`\n : extensionCount >= 2\n ? `\\nThis is your ${extensionCount === 2 ? \"second\" : \"final\"} extension. Focus on completing your current approach or wrap up with what you have.`\n : \"\";\n result = { success: true, output: budget + nudge };\n } else {\n result = { success: false, output: \"\", error: `At maximum step budget (${effectiveMaxSteps}). Wrap up your work.` };\n }\n } else if (call.name === \"SubDispatch\") {\n // Inject current dispatch depth so the tool can enforce limits\n const meta = toolRegistry.get(call.name);\n if (meta?.execute) {\n const enrichedArgs = { ...call.args, _dispatchDepth: dispatchDepth };\n result = await traceStep(\n telemetry,\n \"arc.worker.sub_dispatch\",\n { tupleId: traceTupleId, step: stepsUsed },\n () => meta.execute!(toolProvider, enrichedArgs, workDir),\n );\n } else {\n result = { success: false, output: \"\", error: \"SubDispatch unavailable\" };\n }\n } else if (call.name === \"AskUser\") {\n const meta = toolRegistry.get(call.name);\n if (meta?.execute) {\n result = await traceStep(\n telemetry,\n \"arc.worker.ask_user\",\n { tupleId: traceTupleId, step: stepsUsed },\n () => meta.execute!(toolProvider, call.args, workDir),\n );\n } else {\n result = { success: false, output: \"\", error: \"AskUser unavailable\" };\n }\n } else {\n const meta = toolRegistry.get(call.name);\n if (meta?.execute) {\n result = await traceStep(\n telemetry,\n \"arc.worker.tool\",\n { tupleId: traceTupleId, step: stepsUsed, tool: call.name },\n () => meta.execute!(toolProvider, call.args, workDir),\n );\n } else {\n result = { success: false, output: \"\", error: `Unknown tool: ${call.name}` };\n }\n }\n\n // Event-driven yielding: if this tool has yieldsOnIncomplete and the\n // thread is still running (per result metadata), wait for completion\n // instead of returning \"still running\" to the model. This eliminates\n // polling waste. JobRegistry always implements waitForThread.\n const toolMeta = toolRegistry.get(call.name);\n if (toolMeta?.yieldsOnIncomplete && toolProvider.waitForThread) {\n const threadId = String(call.args.threadId ?? \"\");\n const isRunning = result.metadata?.status === \"running\";\n if (threadId && isRunning) {\n onProgress?.({\n kind: \"yield_start\",\n step: stepsUsed,\n toolCallId,\n toolName: call.name,\n threadId,\n });\n // Wait for thread to complete — worker suspends here\n const finalStatus = await toolProvider.waitForThread(threadId, signal);\n onProgress?.({\n kind: \"yield_resume\",\n step: stepsUsed,\n toolCallId,\n toolName: call.name,\n threadId,\n });\n // Replace the result with the completion result\n const completionOutput = finalStatus.error\n ? `Thread ${threadId} error: ${finalStatus.error}`\n : `Thread ${threadId} completed (exit code: ${finalStatus.exitCode}).\\n${finalStatus.output}`;\n result = {\n success: !finalStatus.error,\n output: completionOutput,\n ...(finalStatus.error ? { error: finalStatus.error } : {}),\n metadata: {\n ...((result.metadata as Record<string, unknown>) ?? {}),\n threadId,\n exitCode: finalStatus.exitCode,\n yieldResume: true,\n },\n };\n }\n }\n } catch (error) {\n onProgress?.({\n kind: \"tool_error\",\n step: stepsUsed,\n toolCallId,\n toolName: call.name,\n durationMs: Date.now() - toolStartedAt,\n error: summarizeError(error),\n });\n throw error;\n }\n\n // PostToolUse hook\n if (hookRunner) {\n await hookRunner.run({ event: \"PostToolUse\", toolName: call.name, input: call.args, output: result });\n }\n\n const resultText = toolResultText(result);\n const exitCode = result.metadata?.exitCode;\n recordToolCallDuration(\n telemetry,\n call.name,\n Date.now() - toolStartedAt,\n result.success,\n );\n onTrace?.({\n scope: \"worker\",\n phase: \"tool_result\",\n tupleId: traceTupleId,\n step: stepsUsed,\n toolCallId,\n toolName: call.name,\n result: cloneForTrace(result),\n resultText,\n });\n onProgress?.({\n kind: \"tool_complete\",\n step: stepsUsed,\n toolCallId,\n toolName: call.name,\n success: result.success,\n durationMs: Date.now() - toolStartedAt,\n outputSummary: summarizeText(resultText, 300),\n output: resultText,\n ...(result.success && result.artifact ? { artifact: result.artifact } : {}),\n ...(exitCode !== undefined ? { exitCode } : {}),\n ...(result.metadata ? { metadata: result.metadata } : {}),\n });\n const durationMs = Date.now() - toolStartedAt;\n const entry: ExecutedToolResult = {\n toolCallId,\n toolName: call.name,\n result: resultText,\n durationMs,\n ...(result.success ? {} : { isError: true }),\n ...(result.success && result.artifact ? { artifact: result.artifact } : {}),\n actionLine: \"\",\n };\n\n const resultSummary = summarizeText(resultText, 150);\n entry.actionLine = `${call.name}${argSummary ? `: ${argSummary}` : \"\"} → ${result.success ? resultSummary : `ERROR: ${resultSummary}`}`;\n return entry;\n };\n\n let parallelGroup: ToolCallAction[] = [];\n const flushParallelGroup = async (): Promise<void> => {\n if (parallelGroup.length === 0) return;\n const group = parallelGroup;\n parallelGroup = [];\n if (group.length === 1) {\n const entry = await executeToolCall(group[0]!);\n results.push(entry);\n applyToolResult(entry);\n return;\n }\n\n const settled = await Promise.allSettled(group.map(executeToolCall));\n const rejected = settled.find(\n (entry): entry is PromiseRejectedResult => entry.status === \"rejected\",\n );\n if (rejected) throw rejected.reason;\n\n for (const entry of settled) {\n if (entry.status === \"fulfilled\") {\n results.push(entry.value);\n applyToolResult(entry.value);\n }\n }\n };\n\n for (const call of callsWithIds) {\n if (canRunInParallel(call)) {\n parallelGroup.push(call);\n continue;\n }\n await flushParallelGroup();\n const entry = await executeToolCall(call);\n results.push(entry);\n applyToolResult(entry);\n }\n await flushParallelGroup();\n\n // Add tool results message\n const toolResults: ToolResultInfo[] = results.map((entry) => ({\n toolCallId: entry.toolCallId,\n toolName: entry.toolName,\n result: entry.result,\n ...(entry.isError !== undefined ? { isError: entry.isError } : {}),\n ...(entry.durationMs !== undefined ? { durationMs: entry.durationMs } : {}),\n }));\n messages.push({\n role: \"tool\",\n content: results.map((r) => `[${r.toolName}]: ${r.result}`).join(\"\\n\"),\n toolResults,\n });\n\n if (\n stepsUsed >= effectiveMaxSteps &&\n !completionGraceUsed &&\n effectiveMaxSteps < ABSOLUTE_MAX_STEPS\n ) {\n completionGraceUsed = true;\n effectiveMaxSteps += 1;\n messages.push({\n role: \"user\",\n content:\n \"[System: completion grace]\\nYou received tool results at your step limit. Use the next step to give your final answer if the work is done, or call RequestMoreSteps if more work is essential.\",\n });\n }\n }\n }\n\n // If we exhausted steps without completing\n if (status === \"incomplete\" && stepsUsed >= effectiveMaxSteps) {\n lastMessage = lastMessage || \"Worker ran out of steps\";\n }\n\n onProgress?.({\n kind: \"worker_result\",\n status,\n stepsUsed,\n summary: summarizeText(lastMessage, 300),\n });\n\n const result: WorkerResult = {\n transcript: messages,\n output,\n status,\n stepsUsed,\n lastMessage,\n actions,\n artifacts,\n };\n onTrace?.({\n scope: \"worker\",\n phase: \"worker_result\",\n tupleId: traceTupleId,\n result: cloneForTrace(result),\n });\n return result;\n}\n\nfunction toolResultText(result: ToolResult): string {\n if (result.modelOutput) return result.modelOutput;\n if (result.success) return result.output;\n return (\n [result.error, result.output].filter(Boolean).join(\"\\n\") || \"Unknown error\"\n );\n}\n\nfunction toolNamesForAction(action: AgentAction): string[] {\n if (action.type === \"tool\") return [action.name];\n if (action.type === \"tool_batch\")\n return action.calls.map((call) => call.name);\n return [];\n}\n\nfunction publicRationaleForAction(action: AgentAction): string | undefined {\n if (action.type === \"tool\") return action.publicRationale;\n if (action.type === \"tool_batch\") return action.publicRationale;\n return undefined;\n}\n\n\nfunction formatExpectedOutput(expectedOutput: ExpectedOutputContract): string {\n return JSON.stringify(expectedOutput, null, 2);\n}\n\nfunction summarizeText(value: string, max: number): string {\n const normalized = value.replace(/\\s+/g, \" \").trim();\n return normalized.length <= max\n ? normalized\n : `${normalized.slice(0, max)}...`;\n}\n\nfunction summarizeError(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n","import type { Transcript, TranscriptStore, VectorIndex, Artifact, ArtifactStore, ScratchPad, SessionStore, SessionSnapshot, SessionMeta } from '../types';\n\n/** In-memory transcript store for testing */\nexport class MemoryTranscriptStore implements TranscriptStore {\n private transcripts: Transcript[] = [];\n private byId = new Map<string, Transcript>();\n\n async append(transcript: Transcript): Promise<void> {\n this.transcripts.push(transcript);\n this.byId.set(transcript.id, transcript);\n }\n\n async getAll(): Promise<Transcript[]> {\n return [...this.transcripts];\n }\n\n async get(id: string): Promise<Transcript | null> {\n return this.byId.get(id) ?? null;\n }\n}\n\n/** In-memory vector index for testing (no actual embeddings) */\nexport class MemoryVectorIndex implements VectorIndex {\n private entries: Array<{ id: string; text: string }> = [];\n\n async add(id: string, text: string): Promise<void> {\n this.entries.push({ id, text });\n }\n\n async search(query: string, k: number): Promise<string[]> {\n // Simple text matching for testing - real impl uses embeddings\n const lowerQuery = query.toLowerCase();\n const scored = this.entries.map((e) => ({\n id: e.id,\n score: e.text.toLowerCase().includes(lowerQuery) ? 1 : 0,\n }));\n scored.sort((a, b) => b.score - a.score);\n return scored.slice(0, k).map((s) => s.id);\n }\n\n async load(): Promise<void> {\n // No-op for memory store\n }\n\n async save(): Promise<void> {\n // No-op for memory store\n }\n\n async size(): Promise<number> {\n return this.entries.length;\n }\n}\n\n/** In-memory scratch pad for testing */\nexport class MemoryScratchPad implements ScratchPad {\n private entries = new Map<string, string>();\n\n async write(key: string, content: string): Promise<void> {\n this.entries.set(key, content);\n }\n\n async read(key: string): Promise<string | null> {\n return this.entries.get(key) ?? null;\n }\n\n async list(): Promise<string[]> {\n return [...this.entries.keys()];\n }\n\n async clear(): Promise<void> {\n this.entries.clear();\n }\n}\n\n/** In-memory artifact store for testing */\nexport class MemoryArtifactStore implements ArtifactStore {\n private artifacts = new Map<string, Artifact>();\n\n async set(id: string, artifact: Artifact): Promise<void> {\n this.artifacts.set(id, artifact);\n }\n\n async get(id: string): Promise<Artifact | null> {\n return this.artifacts.get(id) ?? null;\n }\n\n async getAll(): Promise<Record<string, Artifact>> {\n const result: Record<string, Artifact> = {};\n for (const [id, artifact] of this.artifacts) {\n result[id] = artifact;\n }\n return result;\n }\n}\n\n/** In-memory session store for testing */\nexport class MemorySessionStore implements SessionStore {\n private snapshots = new Map<string, SessionSnapshot>();\n private metas = new Map<string, SessionMeta>();\n\n async load(id: string): Promise<SessionSnapshot | null> {\n return this.snapshots.get(id) ?? null;\n }\n\n async save(id: string, snapshot: SessionSnapshot): Promise<void> {\n this.snapshots.set(id, snapshot);\n }\n\n async getMeta(id: string): Promise<SessionMeta | null> {\n return this.metas.get(id) ?? null;\n }\n\n async saveMeta(id: string, meta: SessionMeta): Promise<void> {\n this.metas.set(id, meta);\n }\n\n async list(): Promise<SessionMeta[]> {\n return [...this.metas.values()].sort((a, b) => b.lastActiveAt - a.lastActiveAt);\n }\n}\n","/**\n * In-memory reference implementation of JobRegistry.\n *\n * Jobs here never actually spawn processes — callers use `simulateExit` /\n * `simulateOutput` / `simulateFailure` to drive state. Intended for tests\n * and agents that don't need filesystem-backed persistence.\n */\nexport class MemoryJobRegistry {\n jobs = new Map();\n handlers = new Set();\n seq = 0;\n async start(opts, startedBy) {\n const id = `job_mem_${++this.seq}`;\n const now = Date.now();\n const spec = {\n id,\n label: opts.label,\n command: opts.command,\n cwd: opts.cwd,\n env: opts.env,\n transport: opts.transport ?? { kind: \"local\" },\n startedAt: now,\n startedBy,\n };\n const status = {\n spec,\n state: \"running\",\n startedAt: now,\n lastSeenAliveAt: now,\n tailLines: [],\n bytesWritten: 0,\n };\n this.jobs.set(id, status);\n this.emit({ type: \"job_started\", status });\n return status;\n }\n async check(id) {\n return this.jobs.get(id) ?? null;\n }\n async cancel(id, _signal) {\n const s = this.jobs.get(id);\n if (!s || s.state !== \"running\")\n return s ?? null;\n s.state = \"killed\";\n s.endedAt = Date.now();\n this.emit({ type: \"job_killed\", status: s, reason: \"cancel\" });\n return s;\n }\n async list() {\n return [...this.jobs.values()];\n }\n async tail(id, lines = 40) {\n const s = this.jobs.get(id);\n if (!s)\n return [];\n return s.tailLines.slice(-lines);\n }\n async waitFor(id, signal) {\n const s = this.jobs.get(id);\n if (!s)\n throw new Error(`Unknown job ${id}`);\n if (s.state !== \"running\")\n return s;\n return new Promise((resolve, reject) => {\n const unsub = this.subscribe((e) => {\n if ((e.type === \"job_exited\" || e.type === \"job_failed\" || e.type === \"job_killed\") &&\n e.status.spec.id === id) {\n unsub();\n resolve(e.status);\n }\n });\n signal?.addEventListener(\"abort\", () => {\n unsub();\n reject(new Error(\"aborted\"));\n }, { once: true });\n });\n }\n subscribe(handler) {\n this.handlers.add(handler);\n return () => { this.handlers.delete(handler); };\n }\n snapshot() {\n return [...this.jobs.values()];\n }\n async prune(_olderThanMs = 24 * 60 * 60 * 1000) {\n let removed = 0;\n for (const status of [...this.jobs.values()]) {\n if (status.state === \"running\")\n continue;\n this.jobs.delete(status.spec.id);\n removed++;\n }\n return removed;\n }\n // ── Test hooks ──\n simulateOutput(id, chunk) {\n const s = this.jobs.get(id);\n if (!s)\n return;\n s.tailLines.push(...chunk.split(\"\\n\").filter((l) => l.length > 0));\n if (s.tailLines.length > 200)\n s.tailLines.splice(0, s.tailLines.length - 200);\n s.bytesWritten += chunk.length;\n this.emit({ type: \"job_output\", id, chunk, at: Date.now() });\n }\n simulateExit(id, exitCode) {\n const s = this.jobs.get(id);\n if (!s)\n return;\n s.state = exitCode === 0 ? \"exited\" : \"failed\";\n s.exitCode = exitCode;\n s.endedAt = Date.now();\n if (s.state === \"failed\") {\n this.emit({ type: \"job_failed\", status: s, error: `exit ${exitCode}` });\n }\n else {\n this.emit({ type: \"job_exited\", status: s });\n }\n }\n emit(e) {\n for (const h of this.handlers) {\n try {\n h(e);\n }\n catch { /* handler failures must not poison the bus */ }\n }\n }\n}\n","import type { ToolCallInfo, ToolResultInfo } from \"../../agent/types\";\n\n/**\n * Serialized attachment form suitable for JSON persistence. Unlike the in-flight\n * `ContentPart` (which carries a `Buffer`), the stored form keeps image bytes\n * base64-encoded so messages round-trip cleanly through session snapshots.\n * Converted to a real `ContentPart` only when building AgentMessage[] for the model.\n */\nexport interface StoredAttachment {\n type: \"image\";\n imageBase64: string;\n mimeType: string;\n}\n\nexport interface StoredMessage {\n id: string;\n conversationId: string;\n index: number;\n role: \"user\" | \"assistant\" | \"tool\";\n content: string;\n toolCalls?: ToolCallInfo[];\n toolResults?: ToolResultInfo[];\n /** Multimodal image attachments. Persisted as base64; converted to ContentPart[] at model-call time. */\n attachments?: StoredAttachment[];\n timestamp: number;\n}\n\nexport interface GrepResult {\n messageId: string;\n conversationId: string;\n messageIndex: number;\n excerpt: string;\n matchContext: string;\n}\n\nexport interface MessageStore {\n append(message: StoredMessage): void;\n getConversation(conversationId: string): StoredMessage[];\n getMessage(conversationId: string, index: number): StoredMessage | null;\n grep(\n pattern: string,\n opts?: { conversationId?: string; maxResults?: number },\n ): GrepResult[];\n /** Serialize all messages for session persistence. */\n serialize(): StoredMessage[];\n /** Load serialized messages into this store (for session hydration). */\n loadFrom(messages: StoredMessage[]): void;\n}\n\nexport class MemoryMessageStore implements MessageStore {\n private messages: StoredMessage[] = [];\n private byConversation = new Map<string, StoredMessage[]>();\n\n append(message: StoredMessage): void {\n this.messages.push(message);\n let conv = this.byConversation.get(message.conversationId);\n if (!conv) {\n conv = [];\n this.byConversation.set(message.conversationId, conv);\n }\n conv.push(message);\n }\n\n getConversation(conversationId: string): StoredMessage[] {\n return this.byConversation.get(conversationId) ?? [];\n }\n\n getMessage(conversationId: string, index: number): StoredMessage | null {\n const conv = this.byConversation.get(conversationId);\n return conv?.find((m) => m.index === index) ?? null;\n }\n\n serialize(): StoredMessage[] {\n return [...this.messages];\n }\n\n loadFrom(messages: StoredMessage[]): void {\n this.messages.length = 0;\n this.byConversation.clear();\n for (const msg of messages) this.append(msg);\n }\n\n static hydrate(messages: StoredMessage[]): MemoryMessageStore {\n const store = new MemoryMessageStore();\n store.loadFrom(messages);\n return store;\n }\n\n grep(\n pattern: string,\n opts?: { conversationId?: string; maxResults?: number },\n ): GrepResult[] {\n const maxResults = opts?.maxResults ?? 50;\n // Always escape pattern for literal match — agent-supplied regex is a ReDoS vector\n const re = new RegExp(escapeRegex(pattern), \"gi\");\n\n const source = opts?.conversationId\n ? (this.byConversation.get(opts.conversationId) ?? [])\n : this.messages;\n\n const results: GrepResult[] = [];\n for (const msg of source) {\n if (results.length >= maxResults) break;\n\n const searchText = buildSearchText(msg);\n re.lastIndex = 0;\n const match = re.exec(searchText);\n if (!match) continue;\n\n const start = Math.max(0, match.index - 80);\n const end = Math.min(searchText.length, match.index + match[0].length + 80);\n results.push({\n messageId: msg.id,\n conversationId: msg.conversationId,\n messageIndex: msg.index,\n excerpt: match[0],\n matchContext: searchText.slice(start, end),\n });\n }\n return results;\n }\n}\n\nfunction buildSearchText(msg: StoredMessage): string {\n const parts = [msg.content];\n if (msg.toolCalls) {\n for (const tc of msg.toolCalls) {\n parts.push(`${tc.toolName} ${JSON.stringify(tc.args)}`);\n }\n }\n if (msg.toolResults) {\n for (const tr of msg.toolResults) {\n parts.push(`${tr.toolName}: ${tr.result}`);\n }\n }\n return parts.join(\"\\n\");\n}\n\nfunction escapeRegex(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n","export interface SummaryNode {\n id: string;\n depth: number;\n sourceIds: string[];\n sourceConversationIds: string[];\n summary: string;\n artifacts: string[];\n operations: string[];\n outcome: string;\n tokenCount: number;\n createdAt: number;\n}\n\nexport interface CompactionOpts {\n /** Minimum number of uncovered children before compaction triggers (default: 4) */\n minChildren?: number;\n /** Soft token budget — compact when total tokens at a depth exceed this (default: 8000) */\n softTokenBudget?: number;\n}\n\nexport interface SummaryDAG {\n addLeaf(node: SummaryNode): void;\n compact(opts?: CompactionOpts): SummaryNode[];\n getNode(id: string): SummaryNode | null;\n getLineage(id: string, visited?: Set<string>): string[];\n getFrontier(budget: number): { frontier: SummaryNode[]; coveredIds: Set<string> };\n getAllNodes(): SummaryNode[];\n /** Serialize DAG state for session persistence. */\n serialize(): { nodes: SummaryNode[]; coveredBy: [string, string][] };\n /** Load serialized DAG state into this instance (for session hydration). */\n loadFrom(data: { nodes: SummaryNode[]; coveredBy: [string, string][] }): void;\n}\n\nexport class MemorySummaryDAG implements SummaryDAG {\n private nodes = new Map<string, SummaryNode>();\n /** Tracks which source IDs have been covered by a parent node */\n private coveredBy = new Map<string, string>();\n\n serialize(): { nodes: SummaryNode[]; coveredBy: [string, string][] } {\n return {\n nodes: [...this.nodes.values()],\n coveredBy: [...this.coveredBy.entries()],\n };\n }\n\n loadFrom(data: { nodes: SummaryNode[]; coveredBy: [string, string][] }): void {\n this.nodes.clear();\n this.coveredBy.clear();\n for (const node of data.nodes) this.nodes.set(node.id, node);\n for (const [id, parent] of data.coveredBy) this.coveredBy.set(id, parent);\n }\n\n static hydrate(data: { nodes: SummaryNode[]; coveredBy: [string, string][] }): MemorySummaryDAG {\n const dag = new MemorySummaryDAG();\n dag.loadFrom(data);\n return dag;\n }\n\n addLeaf(node: SummaryNode): void {\n this.nodes.set(node.id, node);\n }\n\n compact(opts?: CompactionOpts): SummaryNode[] {\n const minChildren = opts?.minChildren ?? 4;\n const softTokenBudget = opts?.softTokenBudget ?? 8000;\n const created: SummaryNode[] = [];\n\n // Compact from shallowest depth upward\n const maxDepth = Math.max(0, ...Array.from(this.nodes.values()).map((n) => n.depth));\n\n for (let depth = 0; depth <= maxDepth; depth++) {\n const nodesAtDepth = Array.from(this.nodes.values())\n .filter((n) => n.depth === depth)\n .sort((a, b) => a.createdAt - b.createdAt);\n\n // Find uncovered nodes at this depth\n const uncovered = nodesAtDepth.filter((n) => !this.coveredBy.has(n.id));\n\n // Check token budget at this depth\n const totalTokens = uncovered.reduce((sum, n) => sum + n.tokenCount, 0);\n\n if (uncovered.length >= minChildren && totalTokens > softTokenBudget) {\n // Group into batches of minChildren for compaction\n for (let i = 0; i + minChildren <= uncovered.length; i += minChildren) {\n const batch = uncovered.slice(i, i + minChildren);\n const rollup = buildRollupNode(batch, depth + 1);\n this.nodes.set(rollup.id, rollup);\n for (const child of batch) {\n this.coveredBy.set(child.id, rollup.id);\n }\n created.push(rollup);\n }\n }\n }\n return created;\n }\n\n getNode(id: string): SummaryNode | null {\n return this.nodes.get(id) ?? null;\n }\n\n getLineage(id: string, visited = new Set<string>()): string[] {\n if (visited.has(id)) return [];\n visited.add(id);\n const node = this.nodes.get(id);\n if (!node) return [];\n\n const result: string[] = [...node.sourceIds];\n for (const sourceId of node.sourceIds) {\n const child = this.nodes.get(sourceId);\n if (child && child.depth >= 0) {\n result.push(...this.getLineage(sourceId, visited));\n }\n }\n return [...new Set(result)];\n }\n\n getFrontier(budget: number): { frontier: SummaryNode[]; coveredIds: Set<string> } {\n // Walk from deepest (most compact) rollups, expanding to shallower when budget allows.\n const allNodes = Array.from(this.nodes.values());\n if (allNodes.length === 0) return { frontier: [], coveredIds: new Set() };\n\n const maxDepth = Math.max(...allNodes.map((n) => n.depth));\n const frontier: SummaryNode[] = [];\n const coveredIds = new Set<string>();\n let tokensUsed = 0;\n\n // Cache lineage per node to avoid redundant recursive traversals\n const lineageCache = new Map<string, string[]>();\n const cachedLineage = (id: string): string[] => {\n let result = lineageCache.get(id);\n if (!result) {\n result = this.getLineage(id);\n lineageCache.set(id, result);\n }\n return result;\n };\n\n for (let depth = maxDepth; depth >= 0; depth--) {\n const nodesAtDepth = allNodes\n .filter((n) => n.depth === depth)\n .sort((a, b) => a.createdAt - b.createdAt);\n\n for (const node of nodesAtDepth) {\n if (coveredIds.has(node.id)) continue;\n\n if (tokensUsed + node.tokenCount <= budget) {\n frontier.push(node);\n tokensUsed += node.tokenCount;\n // Mark all transitive children as covered\n for (const sourceId of cachedLineage(node.id)) {\n coveredIds.add(sourceId);\n }\n }\n }\n }\n\n // Sort chronologically for context ordering\n frontier.sort((a, b) => a.createdAt - b.createdAt);\n return { frontier, coveredIds };\n }\n\n getAllNodes(): SummaryNode[] {\n return Array.from(this.nodes.values());\n }\n}\n\nfunction buildRollupNode(\n children: SummaryNode[],\n depth: number,\n): SummaryNode {\n const allArtifacts = [...new Set(children.flatMap((c) => c.artifacts))];\n const allOperations = [...new Set(children.flatMap((c) => c.operations))];\n const allConversationIds = [\n ...new Set(children.flatMap((c) => c.sourceConversationIds)),\n ];\n\n // Parse outcomes for aggregate\n const outcomes = children.map((c) => c.outcome);\n const complete = outcomes.filter((o) => o === \"complete\").length;\n const incomplete = outcomes.filter((o) => o === \"incomplete\").length;\n const failed = outcomes.filter((o) => o === \"failed\").length;\n const parts: string[] = [];\n if (complete) parts.push(`${complete} complete`);\n if (incomplete) parts.push(`${incomplete} incomplete`);\n if (failed) parts.push(`${failed} failed`);\n const aggregateOutcome = parts.join(\", \") || \"unknown\";\n\n const firstId = children[0]?.id.replace(/^summary_d\\d+_/, \"\") ?? \"0\";\n const lastId =\n children[children.length - 1]?.id.replace(/^summary_d\\d+_/, \"\") ?? \"0\";\n const id = `summary_d${depth}_${firstId}_${lastId}`;\n\n const summaryLines = [\n `Rollup [${children.length} episodes]: ${aggregateOutcome}.`,\n ];\n if (allArtifacts.length > 0) {\n summaryLines.push(`Produced: ${allArtifacts.join(\", \")}`);\n }\n if (allOperations.length > 0) {\n summaryLines.push(`Active threads: ${allOperations.join(\", \")}`);\n }\n const summary = summaryLines.join(\"\\n\");\n\n return {\n id,\n depth,\n sourceIds: children.map((c) => c.id),\n sourceConversationIds: allConversationIds,\n summary,\n artifacts: allArtifacts,\n operations: allOperations,\n outcome: aggregateOutcome,\n tokenCount: Math.ceil(summary.length / 4),\n createdAt: Date.now(),\n };\n}\n","import type { AgentMessage, ContentPart } from \"../../agent/types\";\nimport type { MessageStore, StoredMessage } from \"./message-store\";\nimport type { SummaryDAG, SummaryNode } from \"./summary-dag\";\nfunction estimateTokens(text: string): number {\n return Math.ceil(text.length / 4);\n}\nimport type { OodaSnapshot, VectorIndex, TranscriptStore, ScratchPad } from \"../types\";\nimport { formatOodaSnapshotForPrompt } from \"../episode-projection\";\nimport { getTextContent } from \"../../agent/types\";\nimport type { JobStatus } from \"../jobs/types.js\";\n\nexport function formatLiveJobsBlock(jobs: JobStatus[], maxChars = 1200): string | null {\n if (jobs.length === 0) return null;\n const now = Date.now();\n const lines = jobs.map((j) => {\n const elapsed = formatJobElapsed(now - j.startedAt);\n const stateTag = j.state === \"running\" ? \"running\"\n : j.state === \"exited\" ? `exited ${j.exitCode ?? 0}`\n : j.state === \"failed\" ? `failed ${j.exitCode ?? \"?\"}`\n : j.state;\n const tail = j.tailLines.length > 0 ? ` · last: ${j.tailLines[j.tailLines.length - 1]!.slice(0, 80)}` : \"\";\n return `- ${j.spec.id} \"${j.spec.label}\" [${stateTag}] ${elapsed}${tail}`;\n });\n let out = \"## Live Jobs\\n\" + lines.join(\"\\n\");\n if (out.length > maxChars) out = out.slice(0, maxChars - 4) + \"\\n...\";\n return out;\n}\n\nfunction formatJobElapsed(ms: number): string {\n const s = Math.floor(ms / 1000);\n if (s < 60) return `${s}s`;\n const m = Math.floor(s / 60);\n if (m < 60) return `${m}m${s % 60}s`;\n const h = Math.floor(m / 60);\n return `${h}h${m % 60}m`;\n}\n\nexport interface GhostCue {\n summaryId: string;\n conversationIds: string[];\n depth: number;\n label: string;\n}\n\nexport interface AssembledContext {\n messages: AgentMessage[];\n ghostCues: GhostCue[];\n tokenEstimate: number;\n /** Structured sections for downstream consumers (avoids string matching) */\n frontierText?: string;\n ghostCueText?: string;\n}\n\nexport interface AssembleContextOpts {\n conversationId: string;\n store: MessageStore;\n dag: SummaryDAG;\n budget: number;\n freshTailSize: number;\n taskContext: string;\n ooda?: OodaSnapshot;\n}\n\n/**\n * Budget-driven context assembly from MessageStore + SummaryDAG.\n *\n * Algorithm:\n * 1. Always include: task context (task, workspace, budget info)\n * 2. Fresh tail: last N raw messages from the conversation\n * 3. Frontier: walk DAG from deepest summaries, adding within budget\n * 4. Ghost cues: for any DAG region not expanded, insert a pointer\n * 5. OODA snapshot if provided\n */\nexport function assembleContext(opts: AssembleContextOpts): AssembledContext {\n const {\n conversationId,\n store,\n dag,\n budget,\n freshTailSize,\n taskContext,\n ooda,\n } = opts;\n\n const messages: AgentMessage[] = [];\n let tokensUsed = 0;\n\n // 1. Task context — always included\n const taskTokens = estimateTokens(taskContext);\n messages.push({ role: \"user\", content: taskContext });\n tokensUsed += taskTokens;\n\n // 2. OODA snapshot\n if (ooda) {\n const oodaText = formatOodaSnapshotForPrompt(ooda);\n const oodaTokens = estimateTokens(oodaText);\n messages.push({ role: \"user\", content: oodaText });\n tokensUsed += oodaTokens;\n }\n\n // Calculate remaining budget for frontier + tail\n const remainingBudget = budget - tokensUsed;\n // Reserve ~40% of remaining for fresh tail, 60% for frontier\n const tailBudget = Math.floor(remainingBudget * 0.4);\n const frontierBudget = remainingBudget - tailBudget;\n\n // 3. Frontier + ghost cues from DAG\n const { ghostCues, frontierText, ghostCueText } = buildFrontierAndGhostCues(\n dag,\n frontierBudget,\n );\n\n if (frontierText) {\n messages.push({ role: \"user\", content: frontierText });\n tokensUsed += estimateTokens(frontierText);\n }\n\n if (ghostCueText) {\n messages.push({ role: \"user\", content: ghostCueText });\n tokensUsed += estimateTokens(ghostCueText);\n }\n\n // 4. Fresh tail: recent raw messages from this conversation\n const conversation = store.getConversation(conversationId);\n if (conversation.length > 0) {\n const tail = conversation.slice(-freshTailSize);\n for (const msg of tail) {\n const msgTokens = estimateTokens(msg.content);\n if (tokensUsed + msgTokens > budget) break;\n messages.push(storedToAgentMessage(msg));\n tokensUsed += msgTokens;\n }\n }\n\n return {\n messages,\n ghostCues,\n tokenEstimate: tokensUsed,\n ...(frontierText != null ? { frontierText } : {}),\n ...(ghostCueText != null ? { ghostCueText } : {}),\n };\n}\n\nexport interface AssembleOrchestratorContextOpts {\n conversationId: string;\n store: MessageStore;\n dag: SummaryDAG;\n budget: number;\n freshTailSize: number;\n taskContext: string;\n ooda?: OodaSnapshot;\n vectorIndex?: VectorIndex;\n transcriptStore?: TranscriptStore;\n scratchPad?: ScratchPad;\n liveJobs?: JobStatus[];\n}\n\n/**\n * Async orchestrator context assembly with implicit semantic hydration.\n *\n * Wraps `assembleContext` and adds:\n * 1. Vector index search: uses the task context as query to find relevant\n * prior transcripts that may have been compacted out of the DAG frontier.\n * 2. Scratch pad: lists available keys so the orchestrator knows what\n * notes exist (just like workers do).\n *\n * This prevents the \"forgotten conversation\" problem where aggressive\n * compaction drops topics the user referenced earlier but that aren't\n * in the current DAG frontier or fresh tail.\n */\nexport async function assembleOrchestratorContext(\n opts: AssembleOrchestratorContextOpts,\n): Promise<AssembledContext> {\n const {\n vectorIndex,\n transcriptStore,\n scratchPad,\n taskContext,\n budget,\n liveJobs,\n } = opts;\n\n // Carve ~10% of budget for retrieval (less than workers' 15% since\n // the orchestrator has a larger base context from DAG + fresh tail)\n const retrievalBudget = Math.floor(budget * 0.10);\n const dagBudget = budget - retrievalBudget;\n\n const baseOpts: AssembleContextOpts = {\n conversationId: opts.conversationId,\n store: opts.store,\n dag: opts.dag,\n budget: dagBudget,\n freshTailSize: opts.freshTailSize,\n taskContext,\n };\n if (opts.ooda !== undefined) {\n baseOpts.ooda = opts.ooda;\n }\n const base = assembleContext(baseOpts);\n\n let retrievalTokensUsed = 0;\n const retrievalSections: string[] = [];\n\n // Live Jobs block: inject between OODA and DAG frontier\n const liveJobsBlock = formatLiveJobsBlock(liveJobs ?? []);\n if (liveJobsBlock !== null) {\n retrievalSections.push(liveJobsBlock);\n retrievalTokensUsed += estimateTokens(liveJobsBlock);\n }\n\n // Vector retrieval: use task context as query to find semantically\n // relevant prior transcripts (e.g. a prior RLM discussion that was\n // compacted into a ghost cue and isn't in the DAG frontier)\n if (vectorIndex && transcriptStore) {\n const transcriptIds = await vectorIndex.search(taskContext, 3);\n if (transcriptIds.length > 0) {\n const transcripts = await Promise.all(\n transcriptIds.map((id) => transcriptStore.get(id).then((t) => ({ id, t }))),\n );\n const summaries: string[] = [];\n for (const { id, t: transcript } of transcripts) {\n if (!transcript) continue;\n const lastEntry = transcript.messages[transcript.messages.length - 1];\n const lastMsg = lastEntry ? getTextContent(lastEntry.content) : \"\";\n const summary = `- **${id}**: ${transcript.instruction}\\n Result: ${lastMsg.slice(0, 200)}`;\n const tokens = estimateTokens(summary);\n if (retrievalTokensUsed + tokens > retrievalBudget) break;\n summaries.push(summary);\n retrievalTokensUsed += tokens;\n }\n if (summaries.length > 0) {\n retrievalSections.push(\n `## Relevant Prior Work (semantic recall)\\n${summaries.join(\"\\n\")}`,\n );\n }\n }\n }\n\n // Scratch pad: list keys so the orchestrator knows what notes exist\n if (scratchPad) {\n const keys = await scratchPad.list();\n if (keys.length > 0) {\n const section = `## Scratch Notes\\nAvailable notes (use ScratchPad_Read to view): ${keys.join(\", \")}`;\n const tokens = estimateTokens(section);\n if (retrievalTokensUsed + tokens <= retrievalBudget) {\n retrievalSections.push(section);\n retrievalTokensUsed += tokens;\n }\n }\n }\n\n // Inject retrieval sections into the assembled context\n if (retrievalSections.length > 0) {\n const retrievalText = retrievalSections.join(\"\\n\\n\");\n const frontierText = base.frontierText\n ? `${base.frontierText}\\n\\n${retrievalText}`\n : retrievalText;\n return {\n ...base,\n frontierText,\n tokenEstimate: base.tokenEstimate + retrievalTokensUsed,\n };\n }\n\n return base;\n}\n\nexport interface AssembleWorkerContextOpts {\n store: MessageStore;\n dag: SummaryDAG;\n budget: number;\n taskContext: string;\n instruction: string;\n vectorIndex?: VectorIndex;\n transcriptStore?: TranscriptStore;\n scratchPad?: ScratchPad;\n}\n\n/**\n * Assemble context specifically for a worker dispatch.\n * Workers get: task context + relevant prior summaries + vector retrieval + scratch notes.\n */\nexport async function assembleWorkerContext(opts: AssembleWorkerContextOpts): Promise<AssembledContext> {\n const { vectorIndex, transcriptStore, scratchPad, instruction, budget } = opts;\n\n // Carve ~15% of budget for retrieval context, rest for DAG frontier + ghost cues\n const retrievalBudget = Math.floor(budget * 0.15);\n const dagBudget = budget - retrievalBudget;\n\n const base = assembleContext({\n conversationId: \"__worker__\",\n store: opts.store,\n dag: opts.dag,\n budget: dagBudget,\n freshTailSize: 0,\n taskContext: opts.taskContext,\n });\n\n let retrievalTokensUsed = 0;\n const retrievalSections: string[] = [];\n\n // Vector retrieval: embed instruction → find relevant past transcripts\n if (vectorIndex && transcriptStore) {\n const transcriptIds = await vectorIndex.search(instruction, 3);\n if (transcriptIds.length > 0) {\n const transcripts = await Promise.all(\n transcriptIds.map((id) => transcriptStore.get(id).then((t) => ({ id, t }))),\n );\n const summaries: string[] = [];\n for (const { id, t: transcript } of transcripts) {\n if (!transcript) continue;\n const lastEntry = transcript.messages[transcript.messages.length - 1];\n const lastMsg = lastEntry ? getTextContent(lastEntry.content) : \"\";\n const summary = `- **${id}**: ${transcript.instruction}\\n Result: ${lastMsg.slice(0, 200)}`;\n const tokens = estimateTokens(summary);\n if (retrievalTokensUsed + tokens > retrievalBudget) break;\n summaries.push(summary);\n retrievalTokensUsed += tokens;\n }\n if (summaries.length > 0) {\n retrievalSections.push(`## Relevant Prior Work\\n${summaries.join(\"\\n\")}`);\n }\n }\n }\n\n // Scratch pad: list keys so workers know what notes exist\n if (scratchPad) {\n const keys = await scratchPad.list();\n if (keys.length > 0) {\n const section = `## Scratch Notes\\nAvailable notes (use ScratchPad_Read to view): ${keys.join(\", \")}`;\n const tokens = estimateTokens(section);\n if (retrievalTokensUsed + tokens <= retrievalBudget) {\n retrievalSections.push(section);\n retrievalTokensUsed += tokens;\n }\n }\n }\n\n // Inject retrieval sections into the assembled context\n if (retrievalSections.length > 0) {\n const retrievalText = retrievalSections.join(\"\\n\\n\");\n const frontierText = base.frontierText\n ? `${base.frontierText}\\n\\n${retrievalText}`\n : retrievalText;\n return {\n ...base,\n frontierText,\n tokenEstimate: base.tokenEstimate + retrievalTokensUsed,\n };\n }\n\n return base;\n}\n\n/** Build frontier text + ghost cues from DAG, using transitive coverage */\nfunction buildFrontierAndGhostCues(\n dag: SummaryDAG,\n frontierBudget: number,\n): {\n ghostCues: GhostCue[];\n frontierText: string | null;\n ghostCueText: string | null;\n} {\n const ghostCues: GhostCue[] = [];\n const allNodes = dag.getAllNodes();\n if (allNodes.length === 0) {\n return { ghostCues, frontierText: null, ghostCueText: null };\n }\n\n const { frontier, coveredIds } = dag.getFrontier(frontierBudget);\n const frontierIds = new Set(frontier.map((n) => n.id));\n\n let frontierText: string | null = null;\n if (frontier.length > 0) {\n const text = frontier\n .map((node) => formatSummaryForContext(node))\n .join(\"\\n\\n\");\n frontierText = `## Prior Work (${frontier.length} episodes)\\n${text}`;\n }\n\n // Ghost cues for nodes not in frontier and not transitively covered\n const expandTool = \"history_expand\";\n const grepTool = \"history_search\";\n\n for (const node of allNodes) {\n if (frontierIds.has(node.id)) continue;\n if (coveredIds.has(node.id)) continue;\n if (node.depth === 0) {\n ghostCues.push({\n summaryId: node.id,\n conversationIds: node.sourceConversationIds,\n depth: node.depth,\n label: `[compacted — use ${expandTool}('${node.id}') for detail]`,\n });\n }\n }\n\n let ghostCueText: string | null = null;\n if (ghostCues.length > 0) {\n const maxCues = 10;\n const cueText = ghostCues\n .slice(0, maxCues)\n .map((cue) => `- ${cue.summaryId}: ${cue.label}`)\n .join(\"\\n\");\n const remaining = ghostCues.length > maxCues ? `\\n... and ${ghostCues.length - maxCues} more` : \"\";\n ghostCueText = `## Compacted History\\n${cueText}${remaining}\\n\\nUse ${grepTool} to search across all stored messages, or ${expandTool} to hydrate a specific summary.`;\n }\n\n return { ghostCues, frontierText, ghostCueText };\n}\n\nfunction formatSummaryForContext(node: SummaryNode): string {\n const depthLabel =\n node.depth === 0\n ? \"episode\"\n : node.depth === 1\n ? \"rollup\"\n : `rollup-d${node.depth}`;\n return `### ${node.id} (${depthLabel})\\n${node.summary}`;\n}\n\nfunction storedToAgentMessage(msg: StoredMessage): AgentMessage {\n if (msg.attachments && msg.attachments.length > 0) {\n const parts: ContentPart[] = [];\n if (msg.content) {\n const text = typeof msg.content === \"string\" ? msg.content : getTextContent(msg.content);\n if (text) parts.push({ type: \"text\", text });\n }\n for (const a of msg.attachments) {\n parts.push({\n type: \"image\",\n image: Buffer.from(a.imageBase64, \"base64\"),\n mimeType: a.mimeType,\n });\n }\n return {\n role: msg.role,\n content: parts,\n ...(msg.toolCalls ? { toolCalls: msg.toolCalls } : {}),\n ...(msg.toolResults ? { toolResults: msg.toolResults } : {}),\n };\n }\n return {\n role: msg.role,\n content: msg.content,\n ...(msg.toolCalls ? { toolCalls: msg.toolCalls } : {}),\n ...(msg.toolResults ? { toolResults: msg.toolResults } : {}),\n };\n}\n","import type { DispatchRecord } from \"../types\";\nimport type { SummaryNode } from \"./summary-dag\";\n\n/**\n * Build a depth-0 (leaf) summary node from a completed dispatch record.\n * Reads artifacts and actions directly from the worker result.\n */\nexport function buildLeafSummary(\n record: DispatchRecord,\n): SummaryNode {\n const conversationId = `worker_${record.tuple.id}`;\n const a = record.artifact;\n const wr = record.workerResult;\n\n // Artifact URIs from worker execution\n const artifactUris = (wr?.artifacts ?? [])\n .filter((x) => x.action === \"produced\" || x.action === \"modified\")\n .map((x) => x.uri);\n\n const summaryParts = [\n `[${a.status}] ${record.tuple.instruction}`,\n `steps: ${a.stepsUsed}/${record.tuple.steps}`,\n a.summary,\n ];\n if (artifactUris.length > 0) {\n summaryParts.push(`produced: ${artifactUris.join(\", \")}`);\n }\n // Include last few actions for context\n const actions = a.actions ?? wr?.actions ?? [];\n if (actions.length > 0) {\n summaryParts.push(`actions: ${actions.slice(-5).join(\"; \")}`);\n }\n\n const summary = summaryParts.join(\"\\n\");\n\n return {\n id: `summary_d0_${record.tuple.id}`,\n depth: 0,\n sourceIds: [record.transcriptId],\n sourceConversationIds: [conversationId],\n summary,\n artifacts: artifactUris,\n operations: [],\n outcome: a.status,\n tokenCount: Math.ceil(summary.length / 4),\n createdAt: record.completedAt,\n };\n}\n","import { randomUUID } from \"node:crypto\";\nimport { getTextContent, type AgentMessage } from \"../agent/types\";\nimport type { HookRunner } from \"../hooks/hook-runner\";\nimport type { HarnessTelemetry } from \"../observability/otel\";\nimport { recordCompaction } from \"../observability/metrics\";\nimport { traceStep } from \"../observability/tracing\";\nimport type { ToolProvider } from \"../interfaces/tool-provider\";\nimport type { AnyTool } from \"./shared-types\";\nimport type { ModelFactory } from \"./shared-types\";\nimport type { Tool } from \"./tool-registry\";\nimport type {\n ArcEvent,\n ArcTraceEvent,\n Artifact,\n ArtifactStore,\n DispatchRecord,\n DispatchTier,\n Transcript,\n TranscriptStore,\n Tuple,\n ScratchPad,\n VectorIndex,\n WorkerProgressEvent,\n WorkerResult,\n} from \"./types\";\nimport type { MessageStore } from \"./lcm/message-store\";\nimport type { SummaryDAG } from \"./lcm/summary-dag\";\nimport { runWorker } from \"./worker\";\nimport { assembleWorkerContext, type AssembledContext } from \"./lcm/context-assembler\";\nimport { buildLeafSummary } from \"./lcm/compactor\";\nimport { cloneForTrace } from \"./trace-utils\";\nimport { normalizeExpectedOutput } from \"./tools\";\nimport {\n ABSOLUTE_MAX_WORKER_STEPS,\n DEFAULT_WORKER_STEP_BUDGETS,\n} from \"./worker-budgets\";\n\n// ── Deps / State interfaces ──\n\nexport interface DispatchDeps {\n task: string;\n workDir: string;\n maxStepsPerWorker: number;\n createModel: ModelFactory;\n workerModel: string;\n /** Per-tier worker model overrides. Falls back to workerModel. */\n workerModelMap?: Partial<Record<DispatchTier, string>> | undefined;\n /** Per-tier worker step budgets. Falls back to default tier budgets. */\n workerStepBudgets?: Partial<Record<DispatchTier, number>> | undefined;\n toolProvider: ToolProvider;\n workerSystemPromptSuffix?: string | undefined;\n providerOptions?: Record<string, unknown> | undefined;\n hookRunner?: HookRunner | undefined;\n telemetry?: HarnessTelemetry | undefined;\n messageStore: MessageStore;\n summaryDAG: SummaryDAG;\n vectorIndex: VectorIndex;\n transcriptStore: TranscriptStore;\n artifactStore: ArtifactStore;\n scratchPad: ScratchPad;\n askUser?: ((question: string, options?: string[]) => Promise<string>) | undefined;\n workerTools: Record<string, AnyTool>;\n workerToolRegistry: Map<string, Tool>;\n allWorkerToolNames: string[];\n appendOrchestratorMessage: (role: \"user\" | \"assistant\" | \"tool\", content: string) => void;\n /** Per model-call timeout in milliseconds for workers. Default: 180000 (3 min). */\n modelCallTimeoutMs?: number | undefined;\n}\n\nexport interface DispatchState {\n turn: number;\n dispatchCount: number;\n dispatchRecords: DispatchRecord[];\n lastArtifact: Artifact | null;\n}\n\ninterface WorkerRunWithProgress {\n result: WorkerResult;\n progress: WorkerProgressEvent[];\n}\n\n// ── Constants ──\n\n/** Hard ceiling on worker steps (initial + extensions via RequestMoreSteps). */\nexport const ABSOLUTE_MAX_STEPS = ABSOLUTE_MAX_WORKER_STEPS;\n\n// ── Functions ──\n\nexport function buildTuple(\n deps: DispatchDeps,\n args: Record<string, unknown>,\n orchestratorContext?: string,\n): Tuple {\n const tier = parseDispatchTier(args.tier);\n const steps = resolveWorkerStepBudget(deps, tier);\n const continuationOf = stringArg(args.continuationOf);\n const continuationReason = parseContinuationReason(args.continuationReason);\n const continuationSummary = stringArg(args.continuationSummary);\n const role = stringArg(args.role);\n return {\n id: `tuple_${randomUUID().slice(0, 8)}`,\n instruction: String(args.instruction ?? \"\"),\n inputs: Array.isArray(args.inputs) ? args.inputs.map(String) : [],\n expectedOutput: normalizeExpectedOutput(args.expectedOutput),\n tools: deps.allWorkerToolNames,\n steps,\n ...(tier ? { tier } : {}),\n ...(role ? { role } : {}),\n orchestratorContext,\n ...(continuationOf ? { continuationOf } : {}),\n ...(continuationReason ? { continuationReason } : {}),\n ...(continuationSummary ? { continuationSummary } : {}),\n };\n}\n\n/** Resolve the worker model for a dispatch based on its tier. */\nfunction resolveWorkerModel(deps: DispatchDeps, tuple: Tuple): string {\n const tier = tuple.tier ?? \"strong\";\n return deps.workerModelMap?.[tier] ?? deps.workerModel;\n}\n\nfunction parseDispatchTier(value: unknown): DispatchTier | undefined {\n return value === \"fast\" || value === \"medium\" || value === \"strong\"\n ? value\n : undefined;\n}\n\nfunction parseContinuationReason(\n value: unknown,\n): Tuple[\"continuationReason\"] {\n return value === \"step_budget\" || value === \"user_steering\"\n ? value\n : undefined;\n}\n\nfunction stringArg(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction resolveWorkerStepBudget(\n deps: DispatchDeps,\n tier: DispatchTier | undefined,\n): number {\n const configured = tier ? deps.workerStepBudgets?.[tier] : deps.maxStepsPerWorker;\n const fallback = tier ? DEFAULT_WORKER_STEP_BUDGETS[tier] : deps.maxStepsPerWorker;\n return Math.max(1, Math.min(configured ?? fallback, ABSOLUTE_MAX_STEPS));\n}\n\nexport async function getInputArtifacts(\n artifactStore: ArtifactStore,\n toolProvider: ToolProvider,\n inputs: string[],\n): Promise<Map<string, string>> {\n const result = new Map<string, string>();\n for (const id of inputs) {\n const artifact = await artifactStore.get(id);\n if (artifact?.output) {\n try {\n const fileResult = await toolProvider.readFile(artifact.output);\n if (fileResult.success) {\n result.set(id, fileResult.output);\n continue;\n }\n } catch {\n // Fall through to textual handoff below.\n }\n }\n if (artifact?.textOutput) {\n result.set(id, artifact.textOutput);\n continue;\n }\n if (artifact?.summary) {\n result.set(id, artifact.summary);\n }\n }\n return result;\n}\n\n/**\n * Run multiple dispatch calls in parallel, streaming events from all workers\n * interleaved, then record all results.\n */\nexport async function* runParallelDispatches(\n deps: DispatchDeps,\n state: DispatchState,\n calls: { toolCall: unknown; args: Record<string, unknown> }[],\n publicRationale: string,\n signal?: AbortSignal,\n): AsyncGenerator<ArcEvent> {\n // Build tuples and emit dispatch events\n const tuples: Tuple[] = [];\n for (const { args } of calls) {\n state.dispatchCount++;\n const tuple = buildTuple(deps, args, publicRationale);\n tuples.push(tuple);\n if (tuple.continuationOf) {\n yield {\n type: \"worker_continuation\",\n tupleId: tuple.id,\n fromTupleId: tuple.continuationOf,\n reason: tuple.continuationReason ?? \"step_budget\",\n summary: tuple.continuationSummary ?? \"continuing from checkpoint\",\n };\n }\n yield { type: \"dispatch_full\", tuple };\n yield {\n type: \"dispatch\",\n tupleId: tuple.id,\n instruction: tuple.instruction,\n };\n yield {\n type: \"trace\",\n trace: {\n scope: \"orchestrator\",\n phase: \"tool_call\",\n turn: state.turn,\n toolName: \"dispatch\",\n args: cloneForTrace(args),\n },\n };\n }\n\n // Launch all workers concurrently, collecting streamed events\n const queuedEvents: ArcEvent[] = [];\n const workerPromises: Promise<{ tuple: Tuple; run: WorkerRunWithProgress }>[] = [];\n\n for (const tuple of tuples) {\n // For continuation dispatches, resume the prior worker's conversation\n // instead of building a fresh prompt. The user's steering message (or\n // \"Continue from where you left off.\") is appended as a user message.\n let resumeMessages: AgentMessage[] | undefined;\n let stepsAlreadyUsed = 0;\n\n if (tuple.continuationOf) {\n const priorRecord = state.dispatchRecords.find(\n (r) => r.tuple.id === tuple.continuationOf,\n );\n if (priorRecord) {\n const transcript = await deps.transcriptStore.get(priorRecord.transcriptId);\n if (transcript && transcript.messages.length > 0) {\n resumeMessages = transcript.messages;\n stepsAlreadyUsed = priorRecord.artifact.stepsUsed;\n }\n }\n }\n\n // Only build fresh context for non-continuation dispatches.\n // Resumed workers already have all context in their conversation history.\n let workerContext: AssembledContext | undefined;\n\n if (!resumeMessages) {\n const sections = [\n `## Original Task\\n${deps.task}`,\n `## Workspace\\nCurrent workspace root: ${deps.workDir}`,\n `## Worker Budget\\nmax_steps: ${tuple.steps}`,\n tuple.expectedOutput\n ? `## Expected Output Contract\\n${JSON.stringify(tuple.expectedOutput, null, 2)}`\n : \"\",\n ];\n\n // Inject transcripts from prior incomplete/failed dispatches so the new worker\n // sees exactly what was already attempted — no explicit input wiring needed.\n const priorWork = await traceStep(\n deps.telemetry,\n \"arc.dispatch.prior_work_context\",\n { tupleId: tuple.id, dispatchRecords: state.dispatchRecords.length },\n () => buildPriorWorkContext(\n state.dispatchRecords,\n deps.transcriptStore,\n 4_000,\n ),\n );\n if (priorWork) sections.push(priorWork);\n\n const workerTaskContext = sections.filter(Boolean).join(\"\\n\\n\");\n\n workerContext = await traceStep(\n deps.telemetry,\n \"arc.dispatch.assemble_worker_context\",\n { tupleId: tuple.id, tier: tuple.tier ?? \"strong\", budget: 12_000 },\n () => assembleWorkerContext({\n store: deps.messageStore,\n dag: deps.summaryDAG,\n budget: 12_000,\n taskContext: workerTaskContext,\n instruction: tuple.instruction,\n vectorIndex: deps.vectorIndex,\n transcriptStore: deps.transcriptStore,\n scratchPad: deps.scratchPad,\n }),\n );\n }\n\n const progressEvents: WorkerProgressEvent[] = [];\n const { hookRunner } = deps;\n const promise = (async () => {\n // BeforeWorker hook\n if (hookRunner) {\n const pre = await hookRunner.run({ event: \"BeforeWorker\", metadata: { tupleId: tuple.id, instruction: tuple.instruction } });\n if (!pre.allow) {\n const failResult: WorkerResult = {\n transcript: [],\n output: null,\n status: \"failed\",\n stepsUsed: 0,\n lastMessage: pre.reason ?? \"blocked by BeforeWorker hook\",\n actions: [],\n artifacts: [],\n };\n return { tuple, run: { result: failResult, progress: progressEvents } };\n }\n }\n const model = resolveWorkerModel(deps, tuple);\n const inputArtifacts = await traceStep(\n deps.telemetry,\n \"arc.dispatch.input_artifacts\",\n { tupleId: tuple.id, inputCount: tuple.inputs.length },\n () => getInputArtifacts(deps.artifactStore, deps.toolProvider, tuple.inputs),\n );\n // For continuations, adjust maxSteps to remaining budget.\n // The worker will add stepsAlreadyUsed back to get the correct effectiveMaxSteps.\n const effectiveMaxSteps = resumeMessages\n ? Math.max(1, tuple.steps - stepsAlreadyUsed)\n : tuple.steps;\n const result = await traceStep(\n deps.telemetry,\n \"arc.worker.run\",\n { tupleId: tuple.id, tier: tuple.tier ?? \"strong\", model, maxSteps: effectiveMaxSteps },\n () => runWorker({\n task: deps.task,\n instruction: tuple.instruction,\n expectedOutput: tuple.expectedOutput,\n lcmContext: workerContext,\n inputArtifacts,\n tools: deps.workerTools,\n toolRegistry: deps.workerToolRegistry,\n maxSteps: effectiveMaxSteps,\n toolProvider: deps.toolProvider,\n createModel: deps.createModel,\n model,\n workDir: deps.workDir,\n signal,\n systemPromptSuffix: deps.workerSystemPromptSuffix,\n providerOptions: deps.providerOptions,\n role: tuple.role,\n orchestratorContext: tuple.orchestratorContext,\n tupleId: tuple.id,\n hookRunner,\n telemetry: deps.telemetry,\n modelCallTimeoutMs: deps.modelCallTimeoutMs,\n // Resume fields — only set for continuation dispatches\n ...(resumeMessages ? { resumeMessages, stepsAlreadyUsed } : {}),\n onProgress: (progress) => {\n progressEvents.push(progress);\n queuedEvents.push({\n type: \"worker_progress\",\n tupleId: tuple.id,\n progress,\n });\n },\n onTrace: (trace: ArcTraceEvent) => {\n queuedEvents.push({ type: \"trace\", trace });\n },\n }),\n );\n // AfterWorker hook\n if (hookRunner) {\n await hookRunner.run({ event: \"AfterWorker\", metadata: { tupleId: tuple.id, status: result.status } });\n }\n return { tuple, run: { result, progress: progressEvents } };\n })();\n\n workerPromises.push(promise);\n }\n\n // Stream interleaved events while workers run\n const allSettled = Promise.allSettled(workerPromises);\n let settled = false;\n allSettled.then(() => { settled = true; });\n while (!settled || queuedEvents.length > 0) {\n while (queuedEvents.length > 0) {\n const event = queuedEvents.shift();\n if (event) yield event;\n }\n if (!settled) {\n await sleep(100);\n }\n }\n\n // Process all results\n const results = await allSettled;\n for (let i = 0; i < results.length; i++) {\n const result = results[i]!;\n if (result.status === \"rejected\") {\n // Synthesize a failure event so the orchestrator sees the outcome\n const tuple = tuples[i]!;\n const error = result.reason instanceof Error ? result.reason.message : String(result.reason);\n yield {\n type: \"worker_complete\",\n tupleId: tuple.id,\n status: \"failed\" as const,\n summary: `Worker error: ${error}`,\n stepsUsed: 0,\n };\n deps.appendOrchestratorMessage(\"user\", `[result] Status: failed\\nSummary: Worker error: ${error}`);\n continue;\n }\n const { tuple, run } = result.value;\n yield* recordDispatchResult(deps, state, tuple, run);\n }\n}\n\n/**\n * Record a completed dispatch: create artifact, store transcript, build\n * projection/summary, emit events, update orchestrator history.\n */\nasync function* recordDispatchResult(\n deps: DispatchDeps,\n state: DispatchState,\n tuple: Tuple,\n workerRun: WorkerRunWithProgress,\n): AsyncGenerator<ArcEvent> {\n const workerResult = workerRun.result;\n\n const artifact: Artifact = {\n id: tuple.id,\n tupleId: tuple.id,\n output: workerResult.output,\n textOutput: workerResult.lastMessage,\n status: workerResult.status,\n summary: workerResult.lastMessage.slice(0, 200),\n stepsUsed: workerResult.stepsUsed,\n actions: workerResult.actions,\n instruction: tuple.instruction,\n };\n\n await traceStep(\n deps.telemetry,\n \"arc.store.artifact_set\",\n { tupleId: tuple.id, status: artifact.status },\n () => deps.artifactStore.set(tuple.id, artifact),\n );\n state.lastArtifact = artifact;\n\n yield {\n type: \"worker_complete\",\n tupleId: tuple.id,\n status: artifact.status,\n summary: artifact.summary,\n stepsUsed: artifact.stepsUsed,\n actions: artifact.actions,\n };\n\n const transcript: Transcript = {\n id: `transcript_${tuple.id}`,\n tupleId: tuple.id,\n instruction: tuple.instruction,\n messages: workerResult.transcript,\n timestamp: Date.now(),\n };\n await traceStep(\n deps.telemetry,\n \"arc.store.transcript_append\",\n { tupleId: tuple.id, messages: transcript.messages.length },\n () => deps.transcriptStore.append(transcript),\n );\n\n const workerConversationId = `worker_${tuple.id}`;\n for (const [idx, msg] of workerResult.transcript.entries()) {\n deps.messageStore.append({\n id: `${workerConversationId}_msg_${idx}`,\n conversationId: workerConversationId,\n index: idx,\n role: msg.role === \"tool\" ? \"tool\" : msg.role === \"assistant\" ? \"assistant\" : \"user\",\n content: getTextContent(msg.content),\n ...(msg.toolCalls ? { toolCalls: msg.toolCalls } : {}),\n ...(msg.toolResults ? { toolResults: msg.toolResults } : {}),\n timestamp: transcript.timestamp,\n });\n }\n\n const dispatchRecord: DispatchRecord = {\n tuple,\n artifact,\n transcriptId: transcript.id,\n progress: workerRun.progress,\n completedAt: transcript.timestamp,\n };\n dispatchRecord.workerResult = workerResult;\n state.dispatchRecords.push(dispatchRecord);\n\n const leafSummary = buildLeafSummary(dispatchRecord);\n deps.summaryDAG.addLeaf(leafSummary);\n const compacted = await traceStep(\n deps.telemetry,\n \"arc.lcm.compact\",\n { tupleId: tuple.id },\n async () => deps.summaryDAG.compact(),\n );\n if (compacted.length > 0) recordCompaction(deps.telemetry);\n\n yield {\n type: \"trace\",\n trace: {\n scope: \"orchestrator\",\n phase: \"tool_result\",\n turn: state.turn,\n toolName: \"dispatch\",\n args: cloneForTrace({ instruction: tuple.instruction }),\n result: {\n tuple: cloneForTrace(tuple),\n artifact: cloneForTrace(artifact),\n transcript: cloneForTrace(transcript),\n progress: cloneForTrace(workerRun.progress),\n workerResult: cloneForTrace(workerResult),\n },\n },\n };\n\n const textToEmbed = `${tuple.instruction}\\n${workerResult.lastMessage}`;\n traceStep(\n deps.telemetry,\n \"arc.vector.add\",\n { tupleId: tuple.id, transcriptId: transcript.id },\n () => deps.vectorIndex.add(transcript.id, textToEmbed),\n ).catch(() => {});\n\n const actionsText = artifact.actions?.length\n ? `\\nActions:\\n${artifact.actions.map((a) => `- ${a}`).join(\"\\n\")}`\n : \"\";\n const textOutput =\n artifact.textOutput && artifact.textOutput !== artifact.summary\n ? `\\nText output:\\n${artifact.textOutput}`\n : \"\";\n deps.appendOrchestratorMessage(\"assistant\", `[dispatch] ${tuple.instruction}`);\n deps.appendOrchestratorMessage(\"user\", `[result] Status: ${artifact.status}\\nSummary: ${artifact.summary}${textOutput}${actionsText}`);\n\n // Failure/incomplete signals — help the orchestrator decide next steps\n if (artifact.status === \"failed\") {\n deps.appendOrchestratorMessage(\"user\",\n `⚠ Worker failed. Review the output and dispatch a corrective worker.`);\n } else if (artifact.status === \"incomplete\") {\n const actionsSummary = (artifact.actions ?? []).slice(-5).join(\"\\n \");\n deps.appendOrchestratorMessage(\"user\",\n `Worker ran out of steps but made progress. Actions:\\n ${actionsSummary}\\nCheck if the result is already sufficient. Redispatch to finish — the new worker will automatically see prior attempt history.`);\n }\n}\n\n/**\n * Build prior worker history from incomplete/failed/interrupted dispatches.\n * Automatically included — no explicit input wiring needed.\n * Most recent attempts first, budget-capped.\n */\nasync function buildPriorWorkContext(\n dispatchRecords: readonly DispatchRecord[],\n transcriptStore: TranscriptStore,\n budgetChars: number,\n): Promise<string | null> {\n // Only include non-complete attempts — completed dispatches don't need continuation\n const relevant = dispatchRecords.filter(\n (r) =>\n r.artifact.status === \"incomplete\" ||\n r.artifact.status === \"failed\" ||\n r.artifact.status === \"interrupted\",\n );\n if (relevant.length === 0) return null;\n\n const sections: string[] = [];\n let charsUsed = 0;\n\n // Most recent first — more relevant for continuation\n for (const record of relevant.slice().reverse()) {\n const transcript = await transcriptStore.get(record.transcriptId);\n if (!transcript || transcript.messages.length === 0) continue;\n\n const header = `### Prior Attempt: ${record.tuple.id} [${record.artifact.status}]\\nInstruction: ${record.tuple.instruction}`;\n charsUsed += header.length;\n if (charsUsed > budgetChars) break;\n\n const lines: string[] = [header];\n // Walk transcript messages, newest first for budget trimming\n const msgs = transcript.messages;\n for (let i = msgs.length - 1; i >= 0 && charsUsed < budgetChars; i--) {\n const msg = msgs[i]!;\n const text = getTextContent(msg.content);\n const toolCalls = msg.toolCalls?.map(\n (tc) => `${tc.toolName}(${Object.values(tc.args).map((v) => String(v).slice(0, 100)).join(\", \").slice(0, 200)})`,\n );\n const toolResults = msg.toolResults?.map(\n (tr) => `${tr.toolName}: ${tr.isError ? \"ERROR \" : \"\"}${tr.result.slice(0, 300)}`,\n );\n\n const parts: string[] = [];\n if (text) parts.push(text.slice(0, 500));\n if (toolCalls?.length) parts.push(`Tools: ${toolCalls.join(\"; \")}`);\n if (toolResults?.length) parts.push(toolResults.join(\"\\n\"));\n\n if (parts.length === 0) continue;\n const entry = `[${msg.role}] ${parts.join(\"\\n\")}`;\n charsUsed += entry.length;\n lines.splice(1, 0, entry); // insert after header to maintain chronological order\n }\n\n sections.push(lines.join(\"\\n\"));\n }\n\n if (sections.length === 0) return null;\n return `## Prior Worker History\\n${sections.join(\"\\n\\n\")}`;\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","import { generateText } from \"ai\";\nimport { anthropic as defaultAnthropicProvider } from \"@ai-sdk/anthropic\";\nimport { traceStep } from \"../observability/tracing\";\nimport type { AgentMessage } from \"../agent/types\";\nimport type { AnyTool } from \"./shared-types\";\nimport { toModelMessages } from \"./message-convert\";\nimport { truncate } from \"./utils\";\nimport type {\n ArcConfig,\n ArcEvent,\n Artifact,\n OrchestratorContext,\n DispatchRecord,\n SessionSnapshot,\n TraceToolCall,\n ReadEpisodeArgs,\n ScratchPad,\n VectorIndex,\n TranscriptStore,\n ArtifactStore,\n WorkerProgressEvent,\n} from \"./types\";\nimport { dispatch, done, buildWorkerToolEntries, buildOrchestratorToolEntries, type ArcToolDeps } from \"./tools\";\nimport { toolSchemasFromRegistry, type Tool } from \"./tool-registry\";\nimport { runWorker } from \"./worker\";\nimport {\n MemoryTranscriptStore,\n MemoryVectorIndex,\n MemoryArtifactStore,\n MemoryScratchPad,\n} from \"./stores/memory-stores\";\nimport type { JobEvent, JobRegistry } from \"./jobs/types.js\";\nimport { MemoryJobRegistry } from \"./jobs/memory-job-registry.js\";\nimport {\n buildOodaSnapshot,\n formatOodaSnapshotForPrompt,\n formatReadEpisodeResult,\n} from \"./episode-projection\";\nimport {\n MemoryMessageStore,\n type GrepResult,\n type MessageStore,\n type StoredAttachment,\n} from \"./lcm/message-store\";\nimport { MemorySummaryDAG, type SummaryDAG } from \"./lcm/summary-dag\";\nimport { assembleOrchestratorContext } from \"./lcm/context-assembler\";\nimport { cloneForTrace } from \"./trace-utils\";\nimport { ORCHESTRATOR_SYSTEM_PROMPT } from \"./prompts\";\nimport {\n DEFAULT_MAX_STEPS_PER_WORKER,\n DEFAULT_WORKER_STEP_BUDGETS,\n} from \"./worker-budgets\";\nimport {\n expandSummary,\n describeSummary,\n recallDirect,\n historyRead,\n type HistoryExpandOptions,\n type HistoryReadOptions,\n type LcmToolDeps,\n} from \"./lcm/tools\";\nimport { runParallelDispatches, type DispatchDeps, type DispatchState } from \"./dispatcher\";\n\nconst DEFAULT_WINDOW_SIZE = 10;\nconst DEFAULT_MAX_TURNS = 12;\nconst DEFAULT_MODEL_CALL_TIMEOUT_MS = 180_000;\nconst DEFAULT_CONTEXT_BUDGET = 24_000; // tokens for assembled context\nconst DEFAULT_FRESH_TAIL_SIZE = 6; // raw messages to keep\nconst DONE_GATE_OUTPUT_MAX_CHARS = 6_000;\nconst DIRECT_AUTO_FINALIZE_MAX_CHARS = 4_000;\nconst SNAPSHOT_PROGRESS_TEXT_MAX_CHARS = 2_000;\nconst SESSION_CHECKPOINT_MIN_INTERVAL_MS = 1_000;\nconst MAX_INTERNAL_WORKER_CONTINUATIONS = 2;\n/**\n * Hard cap on consecutive dispatch rounds where every dispatch ended in\n * failed/incomplete. At threshold the loop force-completes the task with an\n * error so a runaway orchestrator can't burn its turn budget retrying the same\n * environmental failure (e.g., worker model timing out repeatedly).\n */\nconst MAX_CONSECUTIVE_FAILED_DISPATCH_ROUNDS = 4;\n\nconst DONE_GATE_SYSTEM_PROMPT = `You are ARC's completion gate. Decide whether the latest worker result satisfies the user's task.\n\nYou may not request tools.\nYou may not dispatch work.\nYou may not inspect history.\n\nReturn only JSON:\n{\n \"decision\": \"finalize\" | \"continue\",\n \"finalOutput\": string | null,\n \"reason\": string\n}\n\nFinalize only if the worker result satisfies the user's task, no required verification or synthesis is missing, and the output does not express uncertainty.\nFor a single complete worker result, do not paraphrase or summarize it. If it is enough, finalOutput should be the worker_output verbatim.\nContinue if the result is incomplete, failed, missing required details, requires verification, needs tool/history access, or files/code were changed and checks are still needed.`;\n\n/** Control-flow tools (handled directly by the loop, not via registry execute) */\nconst controlFlowTools = { dispatch, done };\n\nexport interface ArcRunResult {\n output: string;\n events: ArcEvent[];\n}\n\nexport type PushResult =\n | { delivered: \"as_task\" }\n | { delivered: \"as_interjection\"; position: number }\n | { delivered: \"dropped\"; reason: \"in_ask_user\" };\n\nexport interface PushTaskOptions {\n /** Multimodal attachments to attach to the resulting user message. */\n attachments?: StoredAttachment[];\n}\n\ninterface PendingInterjection {\n msg: string;\n attachments?: StoredAttachment[];\n}\n\nexport class ArcLoop {\n private config: ArcConfig;\n private readonly transcriptStore: TranscriptStore;\n private readonly vectorIndex: VectorIndex;\n private readonly scratchPad: ScratchPad;\n private readonly artifactStore: ArtifactStore;\n private readonly jobRegistry: JobRegistry;\n /** Non-output job events queued for orchestrator turn-boundary injection. */\n private pendingJobEvents: JobEvent[] = [];\n /** Events that need to flow out of the async generator stream (job events, interjection lifecycle). */\n private pendingArcEvents: ArcEvent[] = [];\n private jobUnsubscribe: (() => void) | null = null;\n private readonly telemetry: ArcConfig[\"telemetry\"];\n // LCM stores — mutable for session hydration\n private messageStore: MessageStore = new MemoryMessageStore();\n private summaryDAG: SummaryDAG = new MemorySummaryDAG();\n private readonly createModel: ArcConfig[\"createModel\"];\n private readonly windowSize: number;\n private readonly model: string;\n private readonly doneGateModel: string;\n /** Full orchestrator system prompt (base + optional suffix). */\n private readonly orchestratorSystem: { role: \"system\"; content: string; providerOptions: Record<string, unknown> }[];\n\n /** Orchestrator tool schemas (for the model) */\n private readonly orchestratorToolSchemas: Record<string, AnyTool>;\n /** Orchestrator tool registry (for execute) — excludes dispatch/done (control flow) */\n private readonly orchestratorToolRegistry: Map<string, Tool>;\n /** ARC framework tools that are always available to workers. */\n private readonly workerArcTools: Map<string, Tool>;\n\n /** Dispatcher deps + mutable state — shared with dispatcher.ts functions */\n private readonly dispatchDeps: DispatchDeps;\n private readonly dispatchState: DispatchState;\n\n private orchestratorMessageIndex = 0;\n private turn = 0;\n private maxTurns: number;\n private readonly inFlightDispatches = new Map<string, InFlightDispatchSnapshot>();\n private readonly historySearchesThisTask = new Set<string>();\n private readonly historyReadsThisTask = new Set<string>();\n private readonly historyExpansionsThisTask = new Set<string>();\n private readonly historyExpansionSummaryCache = new Map<string, string>();\n private lastSessionCheckpointAt = 0;\n /** Per-turn abort controller — cancelled by interrupt(), refreshed each turn. */\n private turnController = new AbortController();\n /** Resolver for the next task — set when the loop is waiting between tasks. */\n private taskResolve: ((task: PendingInterjection | null) => void) | null = null;\n private pendingInterjections: PendingInterjection[] = [];\n /** Image attachments for the currently active task. Injected into orchestrator prompts. */\n private currentTaskAttachments: StoredAttachment[] | undefined;\n /** Consecutive dispatch rounds where every dispatch ended in failed/incomplete. Forces done at threshold. */\n private consecutiveFailedDispatchRounds = 0;\n private askUserPending = false;\n private readonly modelCallTimeoutMs: number;\n\n constructor(config: ArcConfig) {\n this.config = config;\n this.currentTaskAttachments = config.initialAttachments;\n this.maxTurns = config.maxTurns ?? DEFAULT_MAX_TURNS;\n this.modelCallTimeoutMs = config.modelCallTimeoutMs ?? DEFAULT_MODEL_CALL_TIMEOUT_MS;\n this.createModel = config.createModel ?? defaultAnthropicProvider;\n this.transcriptStore = config.transcriptStore ?? new MemoryTranscriptStore();\n this.artifactStore = config.artifactStore ?? new MemoryArtifactStore();\n this.vectorIndex = config.vectorIndex ?? new MemoryVectorIndex();\n this.scratchPad = config.scratchPad ?? new MemoryScratchPad();\n this.jobRegistry = config.jobRegistry ?? new MemoryJobRegistry();\n this.jobUnsubscribe = this.jobRegistry.subscribe((event) => {\n // Always forward to ArcEvent stream so external listeners (TUI) see every state change.\n this.pendingArcEvents.push({ type: \"job_event\", event });\n // Structural (non-output) events are queued for orchestrator turn-boundary injection.\n // Output churn is excluded so it doesn't inflate the orchestrator prompt.\n if (event.type === \"job_output\") return;\n this.pendingJobEvents.push(event);\n });\n this.telemetry = config.telemetry;\n this.windowSize = config.orchestratorWindowSize ?? DEFAULT_WINDOW_SIZE;\n this.model = config.model;\n this.doneGateModel =\n config.doneGateModel ?? config.workerModelMap?.fast ?? config.workerModel;\n\n // Build orchestrator system prompt (base + optional suffix)\n const systemText = config.orchestratorSystemPromptSuffix\n ? `${ORCHESTRATOR_SYSTEM_PROMPT}\\n\\n${config.orchestratorSystemPromptSuffix}`\n : ORCHESTRATOR_SYSTEM_PROMPT;\n this.orchestratorSystem = [{\n role: \"system\" as const,\n content: systemText,\n providerOptions: {\n anthropic: { cacheControl: { type: \"ephemeral\" } },\n openrouter: { cacheControl: { type: \"ephemeral\" } },\n },\n }];\n\n // LCM tool deps — closures capture `this` so property reads follow live references\n const lcmDeps: LcmToolDeps = {\n messageStore: this.messageStore,\n summaryDAG: this.summaryDAG,\n vectorIndex: this.vectorIndex,\n transcriptStore: this.transcriptStore,\n findDispatchRecord: (summaryId) => this.findEpisodeRecordBySummaryId(summaryId),\n summarizeHistoryExpansion: (args) => this.summarizeHistoryExpansion(args),\n };\n\n // Build deps for tool factories\n const toolDeps: ArcToolDeps = {\n readEpisode: (args) => this.readEpisode(args),\n historySearch: (pattern, opts) => this.searchHistoryWithGuardrails(pattern, opts),\n historyExpand: (summaryId, options) => this.expandHistoryWithGuardrails(lcmDeps, summaryId, options),\n historyOverview: (summaryId) => describeSummary(lcmDeps, summaryId),\n historyRead: (conversationId, messageIndex, options) =>\n this.readHistoryWithGuardrails(lcmDeps, conversationId, messageIndex, options),\n scratchPad: this.scratchPad,\n recall: (query) => recallDirect(lcmDeps, query),\n jobRegistry: this.jobRegistry,\n ...(config.askUser ? { askUser: (question, options) => this.wrappedAskUser(question, options)! } : {}),\n subDispatch: async (args) => {\n const { instruction, expectedOutput, tier, dispatchDepth } = args;\n const tierKey = tier ?? \"medium\";\n const subModel = config.workerModelMap?.[tierKey] ?? config.workerModel;\n const defaultStepBudgets: Record<string, number> = { fast: 12, medium: 24, strong: 30 };\n const subSteps = config.workerStepBudgets?.[tierKey] ?? defaultStepBudgets[tierKey] ?? 30;\n const subResult = await runWorker({\n task: config.task,\n instruction,\n expectedOutput,\n inputArtifacts: new Map(),\n tools: workerTools,\n toolRegistry: workerToolRegistry,\n maxSteps: subSteps,\n toolProvider: config.toolProvider,\n createModel: config.createModel ?? (() => { throw new Error(\"No createModel\"); }),\n model: subModel,\n workDir: config.workDir,\n signal: undefined,\n systemPromptSuffix: config.workerSystemPromptSuffix,\n providerOptions: config.providerOptions,\n dispatchDepth: dispatchDepth + 1,\n telemetry: this.telemetry,\n modelCallTimeoutMs: this.modelCallTimeoutMs,\n });\n // Lossy compaction: return only a compact summary, not the full transcript\n const summaryText = subResult.lastMessage?.slice(0, 500) ?? subResult.output?.slice(0, 500) ?? \"No output\";\n return {\n status: subResult.status,\n summary: summaryText,\n artifacts: subResult.artifacts,\n stepsUsed: subResult.stepsUsed,\n };\n },\n };\n\n this.orchestratorToolRegistry = buildOrchestratorToolEntries(toolDeps);\n this.workerArcTools = buildWorkerToolEntries(toolDeps);\n\n // Orchestrator tool schemas = control flow + registry schemas\n this.orchestratorToolSchemas = {\n ...controlFlowTools,\n ...toolSchemasFromRegistry(this.orchestratorToolRegistry),\n } as unknown as Record<string, AnyTool>;\n\n // Worker tools: agent tools + ARC framework tools\n const agentToolRegistry = config.tools ?? new Map<string, Tool>();\n const workerToolRegistry = new Map(agentToolRegistry);\n for (const [name, tool] of this.workerArcTools) {\n workerToolRegistry.set(name, tool);\n }\n const workerTools = {\n ...toolSchemasFromRegistry(agentToolRegistry),\n ...toolSchemasFromRegistry(this.workerArcTools),\n } as Record<string, AnyTool>;\n\n // Dispatch state — mutated by dispatcher functions, read by buildContext\n this.dispatchState = {\n turn: 0,\n dispatchCount: 0,\n dispatchRecords: [],\n lastArtifact: null,\n };\n\n const workerStepBudgets = config.workerStepBudgets ?? (\n config.maxStepsPerWorker !== undefined\n ? {\n fast: config.maxStepsPerWorker,\n medium: config.maxStepsPerWorker,\n strong: config.maxStepsPerWorker,\n }\n : DEFAULT_WORKER_STEP_BUDGETS\n );\n\n // Dispatch deps — everything the dispatcher needs.\n this.dispatchDeps = {\n task: config.task,\n workDir: config.workDir,\n maxStepsPerWorker: config.maxStepsPerWorker ?? DEFAULT_MAX_STEPS_PER_WORKER,\n workerStepBudgets,\n createModel: this.createModel!,\n workerModel: config.workerModel,\n workerModelMap: config.workerModelMap,\n toolProvider: config.toolProvider,\n workerSystemPromptSuffix: config.workerSystemPromptSuffix,\n providerOptions: config.providerOptions,\n hookRunner: config.hookRunner,\n telemetry: config.telemetry,\n modelCallTimeoutMs: this.modelCallTimeoutMs,\n messageStore: this.messageStore,\n summaryDAG: this.summaryDAG,\n vectorIndex: this.vectorIndex,\n transcriptStore: this.transcriptStore,\n artifactStore: this.artifactStore,\n scratchPad: this.scratchPad,\n ...(config.askUser ? { askUser: (question: string, options?: string[]) => this.wrappedAskUser(question, options)! } : {}),\n workerTools,\n workerToolRegistry,\n allWorkerToolNames: Object.keys(workerTools),\n appendOrchestratorMessage: (role, content) => this.appendOrchestratorMessage(role, content),\n };\n }\n\n /**\n * Replace agent-provided worker tools for future dispatches.\n * Already-running workers keep the tool set they started with.\n */\n refreshWorkerTools(tools: Map<string, Tool>): void {\n const workerToolRegistry = new Map(tools);\n for (const [name, tool] of this.workerArcTools) {\n workerToolRegistry.set(name, tool);\n }\n const workerTools = {\n ...toolSchemasFromRegistry(tools),\n ...toolSchemasFromRegistry(this.workerArcTools),\n } as Record<string, AnyTool>;\n this.dispatchDeps.workerTools = workerTools;\n this.dispatchDeps.workerToolRegistry = workerToolRegistry;\n this.dispatchDeps.allWorkerToolNames = Object.keys(workerTools);\n }\n\n /** Drain events from asynchronous sources (job registry, interjections) into the generator stream. */\n private *drainPendingArcEvents(): Generator<ArcEvent> {\n while (this.pendingArcEvents.length > 0) {\n yield this.pendingArcEvents.shift()!;\n }\n }\n\n private drainPendingJobEvents(): void {\n if (this.pendingJobEvents.length === 0) return;\n for (const event of this.pendingJobEvents) {\n this.appendOrchestratorMessage(\"user\", formatJobEventLine(event));\n }\n this.pendingJobEvents = [];\n }\n\n private drainPendingInterjections(): void {\n if (this.pendingInterjections.length === 0) return;\n const currentTurn = this.turn;\n const items = this.pendingInterjections;\n this.pendingInterjections = [];\n for (let i = 0; i < items.length; i++) {\n const item = items[i]!;\n this.appendOrchestratorMessage(\n \"user\",\n `[user interjection] ${item.msg}`,\n item.attachments,\n );\n this.pendingArcEvents.push({\n type: \"interjection_delivered\",\n position: i + 1,\n turn: currentTurn,\n });\n }\n }\n\n /** Release subscriptions and free resources held by this loop. */\n dispose(): void {\n this.jobUnsubscribe?.();\n this.jobUnsubscribe = null;\n }\n\n /**\n * Interrupt the current turn — cancels in-flight model calls and workers.\n * The orchestrator loop stays alive and will prompt for user steering.\n */\n interrupt(): void {\n this.turnController.abort();\n }\n\n private refreshTurnSignal(sessionSignal?: AbortSignal): AbortSignal {\n this.turnController = new AbortController();\n if (sessionSignal) {\n if (sessionSignal.aborted) {\n this.turnController.abort();\n } else {\n sessionSignal.addEventListener(\n \"abort\",\n () => this.turnController.abort(),\n { once: true },\n );\n }\n }\n return this.turnController.signal;\n }\n\n /** True when the loop is waiting for the next task (between done boundaries). */\n get idle(): boolean {\n return this.taskResolve !== null;\n }\n\n /** Serialize current loop state for UI-level checkpoints. */\n getSessionSnapshot(): SessionSnapshot {\n return this.buildSessionSnapshot();\n }\n\n /** Restore loop state from a prior UI-level checkpoint. */\n restoreSessionSnapshot(snapshot: SessionSnapshot | null): void {\n this.messageStore.loadFrom(snapshot?.messages ?? []);\n this.summaryDAG.loadFrom({\n nodes: snapshot?.dagNodes ?? [],\n coveredBy: snapshot?.dagCoveredBy ?? [],\n });\n this.dispatchState.dispatchRecords.length = 0;\n if (snapshot) {\n this.dispatchState.dispatchRecords.push(...snapshot.dispatches);\n }\n this.inFlightDispatches.clear();\n this.turn = snapshot?.turn ?? 0;\n this.dispatchState.turn = this.turn;\n this.dispatchState.dispatchCount = snapshot?.dispatchCount ?? 0;\n this.dispatchState.lastArtifact = this.dispatchState.dispatchRecords.at(-1)?.artifact ?? null;\n this.orchestratorMessageIndex =\n snapshot?.orchestratorMessageIndex ??\n this.messageStore.getConversation(\"orchestrator\").length;\n }\n\n /**\n * Deliver a message to the orchestrator regardless of loop state.\n * - Idle (waiting for next task): resolves waitForNextTask → becomes next task.\n * - Running: queued as [user interjection], drained at next turn boundary.\n * - Inside askUser: dropped; caller should resolve the askUser promise directly.\n */\n pushTask(msg: string, options?: PushTaskOptions): PushResult {\n if (this.askUserPending) {\n return { delivered: \"dropped\", reason: \"in_ask_user\" };\n }\n const item: PendingInterjection = options?.attachments && options.attachments.length > 0\n ? { msg, attachments: options.attachments }\n : { msg };\n if (this.taskResolve) {\n const resolve = this.taskResolve;\n this.taskResolve = null;\n resolve(item);\n return { delivered: \"as_task\" };\n }\n this.pendingInterjections.push(item);\n const position = this.pendingInterjections.length;\n this.pendingArcEvents.push({ type: \"interjection_queued\", position, text: msg });\n return { delivered: \"as_interjection\", position };\n }\n\n private wrappedAskUser(question: string, options?: string[]): Promise<string> | undefined {\n if (!this.config.askUser) return undefined;\n this.askUserPending = true;\n return Promise.resolve(this.config.askUser(question, options))\n .finally(() => { this.askUserPending = false; });\n }\n\n private waitForNextTask(signal?: AbortSignal): Promise<PendingInterjection | null> {\n if (signal?.aborted) return Promise.resolve(null);\n return new Promise((resolve) => {\n const onAbort = () => {\n this.taskResolve = null;\n resolve(null);\n };\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n this.taskResolve = (task) => {\n signal?.removeEventListener(\"abort\", onAbort);\n resolve(task);\n };\n });\n }\n\n /** Save session snapshot + update meta if a session store is configured. */\n private async saveSession(options: SaveSessionOptions = {}): Promise<ArcEvent | null> {\n const { sessionStore, sessionId } = this.config;\n if (!sessionStore || !sessionId) return null;\n const taskComplete = options.taskComplete ?? true;\n const emitEvent = options.emitEvent ?? true;\n try {\n const snapshot = this.buildSessionSnapshot();\n await traceStep(\n this.telemetry,\n \"arc.session.save_snapshot\",\n { sessionId, turn: this.turn, dispatches: snapshot.dispatches.length, taskComplete },\n () => sessionStore.save(sessionId, snapshot),\n );\n // Update meta with live stats (upsert — works for first save too)\n const existing = await traceStep(\n this.telemetry,\n \"arc.session.get_meta\",\n { sessionId },\n () => sessionStore.getMeta(sessionId),\n );\n await traceStep(\n this.telemetry,\n \"arc.session.save_meta\",\n { sessionId },\n () => sessionStore.saveMeta(sessionId, {\n id: sessionId,\n slug: existing?.slug ?? sessionId.slice(0, 8),\n createdAt: existing?.createdAt ?? Date.now(),\n lastActiveAt: Date.now(),\n taskCount: (existing?.taskCount ?? 0) + (taskComplete ? 1 : 0),\n summary: truncate(this.config.task, 120),\n }),\n );\n return emitEvent ? { type: \"session_saved\", sessionId } : null;\n } catch (err: unknown) {\n // Session persistence is non-critical — don't crash the loop\n const msg = err instanceof Error ? err.message : String(err);\n // Surface via trace so consumers can see the failure\n return emitEvent\n ? { type: \"trace\", trace: { scope: \"orchestrator\", phase: \"tool_result\", turn: this.turn, toolName: \"session_save\", args: {}, result: { error: msg } } } as ArcEvent\n : null;\n }\n }\n\n private buildSessionSnapshot(): SessionSnapshot {\n const dagSnapshot = this.summaryDAG.serialize();\n const completedDispatches = this.dispatchState.dispatchRecords.map(stripDispatchForSnapshot);\n const completedIds = new Set(completedDispatches.map((record) => record.tuple.id));\n const inFlightDispatches = [...this.inFlightDispatches.values()]\n .filter((record) => !completedIds.has(record.tuple.id))\n .map(inFlightDispatchToRecord)\n .map(stripDispatchForSnapshot);\n\n return {\n messages: this.messageStore.serialize(),\n dispatches: [...completedDispatches, ...inFlightDispatches],\n dagNodes: dagSnapshot.nodes,\n dagCoveredBy: dagSnapshot.coveredBy,\n turn: this.turn,\n dispatchCount: this.dispatchState.dispatchCount,\n orchestratorMessageIndex: this.orchestratorMessageIndex,\n };\n }\n\n private async checkpointSession(force = false): Promise<void> {\n if (!this.config.sessionStore || !this.config.sessionId) return;\n const now = Date.now();\n if (!force && now - this.lastSessionCheckpointAt < SESSION_CHECKPOINT_MIN_INTERVAL_MS) {\n return;\n }\n this.lastSessionCheckpointAt = now;\n await this.saveSession({ taskComplete: false, emitEvent: false });\n }\n\n private async checkpointAfterDispatchEvent(event: ArcEvent): Promise<void> {\n if (event.type === \"dispatch_full\") {\n this.inFlightDispatches.set(event.tuple.id, {\n tuple: event.tuple,\n progress: [],\n startedAt: Date.now(),\n updatedAt: Date.now(),\n });\n await this.checkpointSession(true);\n return;\n }\n\n if (event.type === \"worker_progress\") {\n const record = this.inFlightDispatches.get(event.tupleId);\n if (!record) return;\n record.progress.push(event.progress);\n record.updatedAt = Date.now();\n await this.checkpointSession(record.progress.length === 1 || event.progress.kind === \"worker_result\");\n return;\n }\n\n if (event.type === \"worker_complete\") {\n const record = this.inFlightDispatches.get(event.tupleId);\n if (!record) return;\n record.status = event.status;\n record.summary = event.summary;\n record.stepsUsed = event.stepsUsed;\n record.actions = event.actions;\n record.updatedAt = Date.now();\n await this.checkpointSession(true);\n }\n }\n\n private clearCompletedInFlightDispatches(): void {\n for (const record of this.dispatchState.dispatchRecords) {\n this.inFlightDispatches.delete(record.tuple.id);\n }\n }\n\n /** Reset per-task state while keeping full conversation history. */\n private async resetForNewTask(\n task: string,\n attachments?: StoredAttachment[],\n ): Promise<void> {\n this.config = { ...this.config, task };\n this.currentTaskAttachments = attachments;\n this.consecutiveFailedDispatchRounds = 0;\n this.dispatchDeps.task = task;\n this.turn = 0;\n this.dispatchState.turn = 0;\n this.dispatchState.dispatchCount = 0;\n this.dispatchState.lastArtifact = null;\n this.historySearchesThisTask.clear();\n this.historyReadsThisTask.clear();\n this.historyExpansionsThisTask.clear();\n await traceStep(\n this.telemetry,\n \"arc.scratch.clear\",\n { task: task.slice(0, 120) },\n () => this.scratchPad.clear(),\n );\n // dispatchRecords and message store are intentionally kept\n }\n\n /**\n * Stream events from the orchestration loop.\n */\n async *stream(signal?: AbortSignal): AsyncGenerator<ArcEvent> {\n // Initialize vector index\n await traceStep(this.telemetry, \"arc.vector.load\", {}, () => this.vectorIndex.load());\n\n // Hydrate from session if available\n if (this.config.sessionStore && this.config.sessionId) {\n const snapshot = await traceStep(\n this.telemetry,\n \"arc.session.load\",\n { sessionId: this.config.sessionId },\n () => this.config.sessionStore!.load(this.config.sessionId!),\n );\n if (snapshot) {\n this.messageStore.loadFrom(snapshot.messages);\n this.summaryDAG.loadFrom({ nodes: snapshot.dagNodes, coveredBy: snapshot.dagCoveredBy });\n // Idempotency: clear before loading to handle repeated stream() calls\n this.dispatchState.dispatchRecords.length = 0;\n this.dispatchState.dispatchRecords.push(...snapshot.dispatches);\n // Resuming a saved session restores history, not the exhausted per-task\n // turn budget. A new process should be able to accept the next prompt\n // immediately even if the previous task ended at maxTurns.\n this.turn = 0;\n this.dispatchState.turn = 0;\n this.dispatchState.dispatchCount = 0;\n this.dispatchState.lastArtifact = null;\n this.historySearchesThisTask.clear();\n this.historyReadsThisTask.clear();\n this.historyExpansionsThisTask.clear();\n // Reconcile from actual store state to prevent ID collisions\n const orchMsgs = this.messageStore.getConversation(\"orchestrator\");\n this.orchestratorMessageIndex = orchMsgs.length;\n }\n }\n\n // Outer task loop — survives across done boundaries\n taskLoop: while (true) {\n if (signal?.aborted) break;\n // Consecutive orchestrator turns that produced text but no tool call. Reset per task.\n let emptyActionStreak = 0;\n\n // Inner turn loop — runs until done or budget exhausted\n while (this.turn < this.maxTurns) {\n if (signal?.aborted) break;\n\n this.turn++;\n this.dispatchState.turn = this.turn;\n this.turnController = new AbortController();\n // Propagate session abort to turn controller\n if (signal) {\n if (signal.aborted) { this.turnController.abort(); break; }\n signal.addEventListener(\"abort\", () => this.turnController.abort(), { once: true });\n }\n const turnSignal = this.turnController.signal;\n\n this.drainPendingJobEvents();\n this.drainPendingInterjections();\n yield* this.drainPendingArcEvents();\n\n // Build orchestrator context\n const { orchestratorMessages, contextTokens, contextSections, modelMessages } = await traceStep(\n this.telemetry,\n \"arc.orchestrator.context\",\n { turn: this.turn, dispatches: this.dispatchState.dispatchRecords.length },\n async () => {\n const context = await this.buildContext();\n const { messages: orchestratorMessages, contextTokens, contextSections } = await this.buildOrchestratorMessages(context);\n const modelMessages = toModelMessages(orchestratorMessages);\n return { orchestratorMessages, contextTokens, contextSections, modelMessages };\n },\n );\n\n yield { type: \"orchestrator_turn\", turn: this.turn, contextTokens };\n\n // Emit per-section context breakdown so trace consumers can see token allocation\n const systemChars = this.orchestratorSystem[0]?.content.length ?? 0;\n const systemSection = { chars: systemChars, estimatedTokens: Math.ceil(systemChars / 4) };\n yield {\n type: \"trace\",\n trace: {\n scope: \"orchestrator\",\n phase: \"context_assembled\",\n turn: this.turn,\n totalChars: systemChars + contextTokens * 4,\n estimatedTokens: Math.ceil(systemChars / 4) + contextTokens,\n sections: { systemPrompt: systemSection, ...contextSections },\n },\n };\n\n yield {\n type: \"trace\",\n trace: {\n scope: \"orchestrator\",\n phase: \"model_input\",\n turn: this.turn,\n model: this.model,\n system: this.orchestratorSystem[0]!.content,\n messages: cloneForTrace(orchestratorMessages),\n modelMessages: cloneForTrace(modelMessages),\n toolNames: Object.keys(this.orchestratorToolSchemas),\n },\n };\n\n // Call orchestrator LLM\n let result: Awaited<ReturnType<typeof generateText>>;\n try {\n const orchestratorSignal = AbortSignal.any([turnSignal, AbortSignal.timeout(this.modelCallTimeoutMs)]);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n result = await traceStep(\n this.telemetry,\n \"arc.orchestrator.model\",\n { turn: this.turn, model: this.model, messages: modelMessages.length, tools: Object.keys(this.orchestratorToolSchemas).length },\n async () => (generateText as any)({\n model: this.createModel!(this.model),\n system: this.orchestratorSystem,\n tools: this.orchestratorToolSchemas,\n messages: modelMessages,\n toolChoice: \"auto\",\n abortSignal: orchestratorSignal,\n ...(this.config.providerOptions\n ? { providerOptions: this.config.providerOptions }\n : {}),\n }),\n );\n } catch (err: unknown) {\n if (turnSignal.aborted && !(signal?.aborted)) {\n // Turn interrupted — ask user for steering\n const resolution = yield* this.handleInterrupt([]);\n if (resolution.kind === \"abort_task\") {\n yield { type: \"done\", output: \"[aborted]\" };\n const savedEvent = await this.saveSession({ taskComplete: true, emitEvent: true });\n if (savedEvent) yield savedEvent;\n const nextTask = await this.waitForNextTask(signal);\n if (nextTask == null) return;\n this.appendOrchestratorMessage(\"user\", nextTask.msg, nextTask.attachments);\n await this.resetForNewTask(nextTask.msg, nextTask.attachments);\n continue taskLoop;\n }\n continue; // next turn\n }\n throw err; // session abort or real error — propagate\n }\n\n yield {\n type: \"orchestrator_usage\",\n turn: this.turn,\n ...(result.usage?.inputTokens != null ? { inputTokens: result.usage.inputTokens } : {}),\n ...(result.usage?.outputTokens != null ? { outputTokens: result.usage.outputTokens } : {}),\n };\n\n const reasoningText = extractReasoningText(result);\n if (reasoningText) {\n yield { type: \"reasoning_delta\", text: reasoningText };\n }\n\n yield {\n type: \"trace\",\n trace: {\n scope: \"orchestrator\",\n phase: \"model_output\",\n turn: this.turn,\n text: String(result.text ?? \"\"),\n toolCalls: traceToolCalls(result.toolCalls ?? []),\n },\n };\n\n // Process tool calls\n if (result.toolCalls && result.toolCalls.length > 0) {\n // Reset streak — model took an action this turn.\n emptyActionStreak = 0;\n // Capture public orchestrator rationale before the tool call; workers can use it as context.\n const publicRationale = result.text?.trim() || \"\";\n if (publicRationale) {\n yield { type: \"text_delta\", text: publicRationale + \"\\n\" };\n this.appendOrchestratorMessage(\"assistant\", publicRationale);\n } else {\n yield {\n type: \"trace\",\n trace: {\n scope: \"orchestrator\",\n phase: \"public_rationale_missing\",\n turn: this.turn,\n toolCalls: traceToolCalls(result.toolCalls ?? []),\n },\n };\n }\n\n // Partition tool calls: non-dispatch first (sequential), then dispatches (parallel)\n const dispatchCalls: { toolCall: typeof result.toolCalls[0]; args: Record<string, unknown> }[] = [];\n const nonDispatchCalls: { toolCall: typeof result.toolCalls[0]; args: Record<string, unknown> }[] = [];\n\n for (const toolCall of result.toolCalls) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const args = ((toolCall as any).args ??\n (toolCall as any).input ??\n {}) as Record<string, unknown>;\n if (toolCall.toolName === \"dispatch\") {\n dispatchCalls.push({ toolCall, args });\n } else {\n nonDispatchCalls.push({ toolCall, args });\n }\n }\n\n // Process non-dispatch tools sequentially via registry\n for (const { toolCall, args } of nonDispatchCalls) {\n yield {\n type: \"trace\",\n trace: {\n scope: \"orchestrator\",\n phase: \"tool_call\",\n turn: this.turn,\n toolName: toolCall.toolName,\n args: cloneForTrace(args),\n },\n };\n\n // done is control flow — completes the current task\n if (toolCall.toolName === \"done\") {\n const output = String(args.output ?? \"\");\n const hasNextTask = yield* this.completeCurrentTask(\n output,\n signal,\n { output, accepted: true },\n cloneForTrace(args),\n );\n if (!hasNextTask) return; // session ended\n continue taskLoop;\n }\n\n // All other orchestrator tools go through the registry\n const registryTool = this.orchestratorToolRegistry.get(toolCall.toolName);\n if (registryTool?.execute) {\n // AskUser: emit event before execute (so TUI can display the question)\n if (toolCall.toolName === \"AskUser\") {\n yield { type: \"ask_user\", question: String(args.question ?? \"\"), options: Array.isArray(args.options) ? args.options.map(String) : undefined };\n }\n\n const toolResult = await traceStep(\n this.telemetry,\n \"arc.orchestrator.tool\",\n { turn: this.turn, tool: toolCall.toolName },\n () => registryTool.execute!(this.config.toolProvider, args, this.config.workDir),\n );\n const resultText = toolResult.success ? toolResult.output : (toolResult.error ?? toolResult.output);\n yield {\n type: \"trace\",\n trace: {\n scope: \"orchestrator\",\n phase: \"tool_result\",\n turn: this.turn,\n toolName: toolCall.toolName,\n args: cloneForTrace(args),\n result: cloneForTrace(toolResult),\n },\n };\n\n // Emit semantic events for specific tools\n if (toolCall.toolName === \"recall\") {\n yield { type: \"recall\", query: String(args.query ?? \"\"), answer: resultText };\n }\n\n this.appendOrchestratorMessage(\"assistant\", `[${toolCall.toolName}] ${truncate(JSON.stringify(args), 200)}`);\n this.appendOrchestratorMessage(\"user\", `[${toolCall.toolName} result]\\n${resultText}`);\n }\n }\n\n // Run all dispatch calls in parallel\n if (dispatchCalls.length > 0) {\n const dispatchStart = this.dispatchState.dispatchRecords.length;\n let activeTurnSignal = turnSignal;\n yield* this.runDispatchCalls(dispatchCalls, publicRationale, activeTurnSignal);\n // If turn was interrupted during workers, ask for steering\n if (activeTurnSignal.aborted && !(signal?.aborted)) {\n const interruptedDispatches = this.dispatchState.dispatchRecords\n .slice(dispatchStart)\n .filter((record) => record.artifact.status === \"interrupted\");\n const resolution = yield* this.handleInterrupt(interruptedDispatches);\n if (resolution.kind === \"abort_task\") {\n this.appendOrchestratorMessage(\"assistant\", \"[done] aborted by user\");\n yield { type: \"done\", output: \"[aborted]\" };\n const savedEvent = await this.saveSession({ taskComplete: true, emitEvent: true });\n if (savedEvent) yield savedEvent;\n const nextTask = await this.waitForNextTask(signal);\n if (nextTask == null) return;\n this.appendOrchestratorMessage(\"user\", nextTask.msg, nextTask.attachments);\n await this.resetForNewTask(nextTask.msg, nextTask.attachments);\n continue taskLoop;\n }\n if (resolution.kind === \"continue_worker\" && interruptedDispatches.length > 0) {\n activeTurnSignal = this.refreshTurnSignal(signal);\n const continuationCalls = interruptedDispatches.map((record) => ({\n toolCall: null,\n args: this.buildContinuationDispatchArgs(\n record,\n \"user_steering\",\n resolution.steering,\n ),\n }));\n yield* this.runDispatchCalls(continuationCalls, \"\", activeTurnSignal);\n if (activeTurnSignal.aborted && !(signal?.aborted)) {\n continue;\n }\n } else {\n continue;\n }\n }\n\n let newDispatches = this.dispatchState.dispatchRecords.slice(dispatchStart);\n newDispatches = yield* this.continueStepBudgetDispatches(\n dispatchStart,\n activeTurnSignal,\n );\n\n // Circuit breaker: if every dispatch in this round ended in\n // failed/incomplete (e.g., worker model timing out), bump the\n // consecutive-failure counter; reset if any made forward progress.\n // At threshold, force-complete the task so the orchestrator can't\n // burn its remaining turn budget retrying the same environmental\n // failure with reworded instructions.\n const anyForwardProgress = newDispatches.some(\n (r) => r.artifact.status === \"complete\" || r.artifact.status === \"interrupted\",\n );\n if (anyForwardProgress) {\n this.consecutiveFailedDispatchRounds = 0;\n } else if (newDispatches.length > 0) {\n this.consecutiveFailedDispatchRounds++;\n if (\n this.consecutiveFailedDispatchRounds >=\n MAX_CONSECUTIVE_FAILED_DISPATCH_ROUNDS\n ) {\n const summaries = newDispatches.map((r) => r.artifact.summary || r.artifact.status);\n const lastSummary = summaries[summaries.length - 1] ?? \"no summary\";\n const aborted =\n `[aborted: ${this.consecutiveFailedDispatchRounds} consecutive dispatch rounds failed without forward progress — last error: ${lastSummary}. Likely an environmental issue (worker model timing out, rate-limited, or unreachable). Switch worker tier/model and retry.]`;\n const hasNextTask = yield* this.completeCurrentTask(\n aborted,\n signal,\n { output: aborted, accepted: false, autoFinalized: true, mode: \"circuit_breaker\" },\n );\n if (!hasNextTask) return;\n continue taskLoop;\n }\n }\n\n const completionDispatches = terminalDispatches(newDispatches);\n const autoOutput = maybeAutoFinalizeFromDispatches(completionDispatches);\n if (autoOutput) {\n this.telemetry?.counter(\"auto_finalized_total\", 1, { mode: \"direct\" });\n const hasNextTask = yield* this.completeCurrentTask(\n autoOutput,\n signal,\n { output: autoOutput, accepted: true, autoFinalized: true, mode: \"direct\" },\n );\n if (!hasNextTask) return;\n continue taskLoop;\n }\n\n const gate = await this.runDoneGate(completionDispatches, activeTurnSignal);\n if (gate.inputTokens != null || gate.outputTokens != null) {\n yield {\n type: \"orchestrator_usage\",\n turn: this.turn,\n ...(gate.inputTokens != null ? { inputTokens: gate.inputTokens } : {}),\n ...(gate.outputTokens != null ? { outputTokens: gate.outputTokens } : {}),\n };\n }\n if (gate.output) {\n this.telemetry?.counter(\"auto_finalized_total\", 1, { mode: \"done_gate\" });\n const hasNextTask = yield* this.completeCurrentTask(\n gate.output,\n signal,\n { output: gate.output, accepted: true, autoFinalized: true, mode: \"done_gate\", reason: gate.reason },\n );\n if (!hasNextTask) return;\n continue taskLoop;\n }\n }\n } else {\n // No tool call - just text response\n const text = result.text?.trim() ?? \"\";\n if (text) {\n yield { type: \"text_delta\", text };\n this.appendOrchestratorMessage(\"assistant\", text);\n }\n\n // Guard against text-only turns. If the model produced substantive text,\n // treat it as the answer and auto-finalize immediately — asking the model\n // to re-emit as a `done` tool call just burns another turn on the same content.\n emptyActionStreak++;\n const hasSubstantiveText = text.length >= 40;\n if (!hasSubstantiveText && emptyActionStreak === 1) {\n // Truly empty-ish — give it one more shot with a nudge.\n this.appendOrchestratorMessage(\n \"user\",\n \"[system] Your previous turn produced no text and no tool call. Dispatch a worker, query history, or call `done`.\",\n );\n } else {\n // Substantive text OR second offence → auto-finalize with the accumulated text.\n const finalOutput = text || \"[done]\";\n emptyActionStreak = 0;\n this.appendOrchestratorMessage(\"assistant\", `[done] ${finalOutput}`);\n this.telemetry?.counter(\"auto_finalized_total\", 1, {\n mode: hasSubstantiveText ? \"substantive_text\" : \"empty_action_guard\",\n });\n yield {\n type: \"trace\",\n trace: {\n scope: \"orchestrator\",\n phase: \"tool_result\",\n turn: this.turn,\n toolName: \"done\",\n args: { output: finalOutput },\n result: { output: finalOutput, accepted: true, autoFinalized: true, mode: \"empty_action_guard\" },\n },\n };\n yield { type: \"done\", output: finalOutput };\n const savedEvent = await this.saveSession({ taskComplete: true, emitEvent: true });\n if (savedEvent) yield savedEvent;\n const nextTask = await this.waitForNextTask(signal);\n if (nextTask == null) return;\n this.appendOrchestratorMessage(\"user\", nextTask.msg, nextTask.attachments);\n await this.resetForNewTask(nextTask.msg, nextTask.attachments);\n continue taskLoop;\n }\n }\n }\n\n // Turn budget exhausted\n await traceStep(this.telemetry, \"arc.vector.save\", {}, () => this.vectorIndex.save());\n\n if (signal?.aborted) {\n yield { type: \"done\", output: \"[aborted]\" };\n break;\n }\n\n // Budget exhaustion — report and wait for next task\n this.appendOrchestratorMessage(\"assistant\", \"[done] max turns reached\");\n yield { type: \"done\", output: \"[max turns reached]\" };\n const savedEvent = await this.saveSession({ taskComplete: true, emitEvent: true });\n if (savedEvent) yield savedEvent;\n\n const nextTask = await this.waitForNextTask(signal);\n if (nextTask == null) break; // session ended\n this.appendOrchestratorMessage(\"user\", nextTask.msg, nextTask.attachments);\n await this.resetForNewTask(nextTask.msg, nextTask.attachments);\n } // end taskLoop\n\n // Final save\n await traceStep(this.telemetry, \"arc.vector.save\", {}, () => this.vectorIndex.save());\n }\n\n /**\n * Run a single task to completion (for headless/test use).\n * Breaks after the first `done` event — does not wait for follow-up tasks.\n */\n async run(signal?: AbortSignal): Promise<ArcRunResult> {\n const events: ArcEvent[] = [];\n let output = \"\";\n\n for await (const event of this.stream(signal)) {\n events.push(event);\n if (event.type === \"done\") {\n output = event.output;\n break; // don't wait for next task\n }\n }\n\n return { output, events };\n }\n\n private async *runDispatchCalls(\n calls: DispatchCall[],\n publicRationale: string,\n signal: AbortSignal,\n ): AsyncGenerator<ArcEvent> {\n const span = this.telemetry?.isEnabled()\n ? this.telemetry.startSpan(\"arc.dispatch.batch\", {\n turn: this.turn,\n dispatches: calls.length,\n })\n : null;\n try {\n for await (const event of runParallelDispatches(\n this.dispatchDeps,\n this.dispatchState,\n calls,\n publicRationale,\n signal,\n )) {\n await this.checkpointAfterDispatchEvent(event);\n yield event;\n }\n span?.end({ success: true });\n } catch (error) {\n span?.end({\n success: false,\n error: error instanceof Error ? error.message : \"unknown\",\n });\n throw error;\n }\n this.clearCompletedInFlightDispatches();\n await this.checkpointSession(true);\n }\n\n private async *continueStepBudgetDispatches(\n dispatchStart: number,\n signal: AbortSignal,\n ): AsyncGenerator<ArcEvent, DispatchRecord[]> {\n let continuationRuns = 0;\n while (continuationRuns < MAX_INTERNAL_WORKER_CONTINUATIONS && !signal.aborted) {\n const records = this.dispatchState.dispatchRecords.slice(dispatchStart);\n const candidates = openStepBudgetDispatches(records);\n if (candidates.length === 0) break;\n\n continuationRuns++;\n const calls = candidates.map((record) => ({\n toolCall: null,\n args: this.buildContinuationDispatchArgs(record, \"step_budget\"),\n }));\n yield* this.runDispatchCalls(calls, \"\", signal);\n }\n\n return this.dispatchState.dispatchRecords.slice(dispatchStart);\n }\n\n private buildContinuationDispatchArgs(\n record: DispatchRecord,\n reason: \"step_budget\" | \"user_steering\",\n steering?: string | undefined,\n ): Record<string, unknown> {\n const summary = continuationSummary(record);\n const steeringText = steering?.trim();\n\n // User steering is injected as a direct user message to the worker —\n // no boilerplate wrapper. The worker sees prior attempt history via\n // buildPriorWorkContext, so it already knows what happened.\n let instruction: string;\n if (reason === \"user_steering\" && steeringText) {\n // The user's message IS the instruction — just like a direct reply.\n instruction = steeringText;\n } else {\n // No steering text (bare \"continue\") or step_budget continuation:\n // minimal instruction, prior work context provides the rest.\n instruction = \"Continue from where you left off.\";\n }\n\n const args: Record<string, unknown> = {\n instruction,\n expectedOutput: record.tuple.expectedOutput,\n continuationOf: record.tuple.id,\n continuationReason: reason,\n continuationSummary: summary,\n };\n if (record.tuple.tier) args.tier = record.tuple.tier;\n return args;\n }\n\n private async runDoneGate(\n records: DispatchRecord[],\n signal: AbortSignal,\n ): Promise<DoneGateResult> {\n if (!shouldRunDoneGate(records)) {\n this.telemetry?.counter(\"done_gate_skipped_total\", 1, {\n reason: doneGateSkipReason(records),\n });\n return { output: null };\n }\n\n const prompt = formatDoneGatePrompt(this.config.task, records);\n let result: Awaited<ReturnType<typeof generateText>>;\n try {\n const doneGateSignal = AbortSignal.any([signal, AbortSignal.timeout(this.modelCallTimeoutMs)]);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n result = await traceStep(\n this.telemetry,\n \"arc.orchestrator.done_gate\",\n { turn: this.turn, model: this.doneGateModel, dispatches: records.length },\n async () => (generateText as any)({\n model: this.createModel!(this.doneGateModel),\n system: DONE_GATE_SYSTEM_PROMPT,\n messages: toModelMessages([{ role: \"user\", content: prompt }]),\n abortSignal: doneGateSignal,\n }),\n );\n } catch (error) {\n if (signal.aborted) return { output: null };\n throw error;\n }\n\n const decision = parseDoneGateDecision(String(result.text ?? \"\"));\n const passThroughOutput = maybePassThroughDoneGateOutput(records, decision);\n this.telemetry?.counter(\"done_gate_decisions_total\", 1, {\n decision: decision.output ? \"finalize\" : \"continue\",\n });\n return {\n ...decision,\n ...(passThroughOutput ? { output: passThroughOutput } : {}),\n ...(result.usage?.inputTokens != null ? { inputTokens: result.usage.inputTokens } : {}),\n ...(result.usage?.outputTokens != null ? { outputTokens: result.usage.outputTokens } : {}),\n };\n }\n\n private async *completeCurrentTask(\n output: string,\n signal: AbortSignal | undefined,\n traceResult: Record<string, unknown>,\n traceArgs: Record<string, unknown> = { output },\n ): AsyncGenerator<ArcEvent, boolean> {\n yield {\n type: \"trace\",\n trace: {\n scope: \"orchestrator\",\n phase: \"tool_result\",\n turn: this.turn,\n toolName: \"done\",\n args: traceArgs,\n result: traceResult,\n },\n };\n this.appendOrchestratorMessage(\"assistant\", `[done] ${output}`);\n yield { type: \"done\", output };\n const savedEvent = await this.saveSession({ taskComplete: true, emitEvent: true });\n if (savedEvent) yield savedEvent;\n\n const nextTask = await this.waitForNextTask(signal);\n if (nextTask == null) return false;\n this.appendOrchestratorMessage(\"user\", nextTask.msg, nextTask.attachments);\n await this.resetForNewTask(nextTask.msg, nextTask.attachments);\n return true;\n }\n\n /** Append a message to the LCM message store (single source of truth) */\n private appendOrchestratorMessage(\n role: \"user\" | \"assistant\" | \"tool\",\n content: string,\n attachments?: StoredAttachment[],\n ): void {\n this.messageStore.append({\n id: `orchestrator_msg_${this.orchestratorMessageIndex}`,\n conversationId: \"orchestrator\",\n index: this.orchestratorMessageIndex++,\n role,\n content,\n ...(attachments && attachments.length > 0 ? { attachments } : {}),\n timestamp: Date.now(),\n });\n }\n\n private findEpisodeRecordBySummaryId(summaryId: string): DispatchRecord | undefined {\n // summary_d0_<tupleId>\n const tupleId = summaryId.replace(/^summary_d0_/, \"\");\n return this.dispatchState.dispatchRecords.find((r) => r.tuple.id === tupleId);\n }\n\n private searchHistoryWithGuardrails(\n pattern: string,\n opts: { conversationId?: string; maxResults?: number } = {},\n ): GrepResult[] {\n const key = JSON.stringify({\n pattern,\n conversationId: opts.conversationId ?? null,\n maxResults: opts.maxResults ?? 20,\n });\n\n if (this.historySearchesThisTask.has(key)) {\n return [{\n messageId: \"duplicate_history_search\",\n conversationId: \"history_search\",\n messageIndex: -1,\n excerpt: \"\",\n matchContext: `DUPLICATE: This exact history_search for \"${pattern}\" was already returned earlier in this task. Use Recent Search Results, narrow with conversationId/maxResults, call history_read on a listed [conversationId:messageIndex], or ask the user.`,\n }];\n }\n\n const results = this.messageStore.grep(pattern, opts);\n this.historySearchesThisTask.add(key);\n return results;\n }\n\n private readHistoryWithGuardrails(\n deps: LcmToolDeps,\n conversationId: string,\n messageIndex: number,\n options: HistoryReadOptions = {},\n ): string | null {\n const key = JSON.stringify({\n conversationId,\n messageIndex,\n offset: options.offset ?? null,\n limit: options.limit ?? null,\n around: options.around ?? null,\n contextChars: options.contextChars ?? null,\n includeToolData: options.includeToolData ?? false,\n });\n\n if (this.historyReadsThisTask.has(key)) {\n return JSON.stringify({\n kind: \"history_read_result\",\n found: true,\n duplicate: true,\n conversationId,\n messageIndex,\n hint: \"This exact history_read was already returned earlier in this task. Use the retrieved content already present in Recent Retrieved History, request a different offset/limit/around range, or ask the user.\",\n }, null, 2);\n }\n\n const result = historyRead(deps, conversationId, messageIndex, options);\n if (result !== null) this.historyReadsThisTask.add(key);\n return result;\n }\n\n private async expandHistoryWithGuardrails(\n deps: LcmToolDeps,\n summaryId: string,\n options: HistoryExpandOptions = {},\n ): Promise<string> {\n const key = JSON.stringify({\n summaryId,\n maxTokens: options.maxTokens ?? null,\n offset: options.offset ?? null,\n limit: options.limit ?? null,\n around: options.around ?? null,\n contextChars: options.contextChars ?? null,\n summarize: options.summarize ?? true,\n });\n\n if (this.historyExpansionsThisTask.has(key)) {\n return JSON.stringify({\n kind: \"history_expand_result\",\n found: true,\n duplicate: true,\n summaryId,\n hint: \"This exact history_expand was already returned earlier in this task. Use the retrieved content already present in Recent Expanded History, request a different offset/limit/around range, or ask the user.\",\n content: \"\",\n }, null, 2);\n }\n\n const result = await expandSummary(deps, summaryId, options);\n this.historyExpansionsThisTask.add(key);\n return result;\n }\n\n private async summarizeHistoryExpansion(args: {\n summaryId: string;\n content: string;\n contentHash: string;\n }): Promise<string> {\n const cached = this.historyExpansionSummaryCache.get(args.contentHash);\n if (cached) return cached;\n\n const prompt = [\n \"Summarize this expanded ARC history for a coordinator that must avoid re-reading it.\",\n \"Keep it factual and compact. Include: task/result, important files or artifacts, tests/checks, and unresolved work.\",\n \"Do not invent details.\",\n \"\",\n `Summary node: ${args.summaryId}`,\n `Content hash: ${args.contentHash}`,\n \"\",\n truncate(args.content, 20_000),\n ].join(\"\\n\");\n\n let result: Awaited<ReturnType<typeof generateText>>;\n try {\n const historySignal = AbortSignal.any([this.turnController.signal, AbortSignal.timeout(this.modelCallTimeoutMs)]);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n result = await traceStep(\n this.telemetry,\n \"arc.history_expand.summarize\",\n { turn: this.turn, model: this.doneGateModel, summaryId: args.summaryId },\n async () => (generateText as any)({\n model: this.createModel!(this.doneGateModel),\n system: \"You summarize expanded agent history. Return only the compact digest.\",\n messages: toModelMessages([{ role: \"user\", content: prompt }]),\n abortSignal: historySignal,\n }),\n );\n } catch (error) {\n if (this.turnController.signal.aborted) return \"\";\n throw error;\n }\n\n const summary = truncate(String(result.text ?? \"\").trim(), 3_000);\n if (summary) this.historyExpansionSummaryCache.set(args.contentHash, summary);\n return summary;\n }\n\n private async buildContext(): Promise<OrchestratorContext> {\n const artifacts = await this.artifactStore.getAll();\n const artifactStatusCounts: Record<Artifact[\"status\"], number> = { complete: 0, incomplete: 0, failed: 0, interrupted: 0 };\n for (const a of Object.values(artifacts)) artifactStatusCounts[a.status]++;\n const artifactCount = Object.keys(artifacts).length;\n const allIncomplete =\n artifactCount > 0 && artifactStatusCounts.complete === 0;\n\n return {\n task: this.config.task,\n artifacts,\n lastResult: this.dispatchState.lastArtifact,\n recentTurns: this.messageStore\n .getConversation(\"orchestrator\")\n .slice(-this.windowSize)\n .map((msg) => ({ role: msg.role, content: msg.content })),\n turn: this.turn,\n maxTurns: this.maxTurns,\n turnsRemaining: Math.max(0, this.maxTurns - this.turn),\n dispatchCount: this.dispatchState.dispatchCount,\n artifactStatusCounts,\n allIncomplete,\n dispatches: [...this.dispatchState.dispatchRecords],\n ooda: buildOodaSnapshot({\n turn: this.turn,\n maxTurns: this.maxTurns,\n turnsRemaining: Math.max(0, this.maxTurns - this.turn),\n dispatchCount: this.dispatchState.dispatchCount,\n allIncomplete,\n dispatches: this.dispatchState.dispatchRecords,\n }),\n // LCM additions\n messageStore: this.messageStore,\n summaryDAG: this.summaryDAG,\n };\n }\n\n private async buildOrchestratorMessages(\n context: OrchestratorContext,\n ): Promise<{\n messages: AgentMessage[];\n contextTokens: number;\n contextSections: Record<string, { chars: number; estimatedTokens: number }>;\n }> {\n // If a custom context formatter is provided, use it (but still include task/budget/ooda)\n const customContextMessages =\n this.config.formatOrchestratorContext?.(context);\n if (customContextMessages) {\n // Custom formatter handles everything after task context\n const taskContextMsg: AgentMessage = {\n role: \"user\",\n content: this.buildTaskContextText(context),\n };\n const oodaMsg: AgentMessage = {\n role: \"user\",\n content: formatOodaSnapshotForPrompt(context.ooda),\n };\n const attachmentMsg = this.buildAttachmentMessage();\n const messages = [\n taskContextMsg,\n ...(attachmentMsg ? [attachmentMsg] : []),\n oodaMsg,\n ...customContextMessages,\n ];\n const contextTokens = messages.reduce(\n (sum, m) => sum + Math.ceil((typeof m.content === \"string\" ? m.content : \"\").length / 4),\n 0,\n );\n return { messages, contextTokens, contextSections: {} };\n }\n\n // Default: use LCM-assembled context with implicit semantic hydration\n const taskContext = this.buildTaskContextText(context);\n const assembled = await assembleOrchestratorContext({\n conversationId: \"orchestrator\",\n store: this.messageStore,\n dag: this.summaryDAG,\n budget: DEFAULT_CONTEXT_BUDGET,\n freshTailSize: DEFAULT_FRESH_TAIL_SIZE,\n taskContext,\n ooda: context.ooda,\n vectorIndex: this.vectorIndex,\n transcriptStore: this.transcriptStore,\n scratchPad: this.scratchPad,\n liveJobs: this.jobRegistry.snapshot(),\n });\n\n // Inject image attachments for the current task right after the task context\n // message. assembleOrchestratorContext emits the task context as the first\n // user message, so inserting at index 1 keeps images next to the task.\n const attachmentMsg = this.buildAttachmentMessage();\n if (attachmentMsg) {\n assembled.messages.splice(1, 0, attachmentMsg);\n }\n\n // Append last result highlight if present\n let lastResultChars = 0;\n if (context.lastResult) {\n let content = `## Last Result\\nArtifact ${context.lastResult.id}: [${context.lastResult.status}]\\n${context.lastResult.summary}`;\n if (context.lastResult.instruction) {\n content += `\\nYour dispatch instruction was: \"${context.lastResult.instruction}\"`;\n }\n assembled.messages.push({ role: \"user\", content });\n lastResultChars = content.length;\n }\n\n // Build per-section breakdown from assembled context\n const taskChars = taskContext.length;\n const oodaChars = context.ooda\n ? formatOodaSnapshotForPrompt(context.ooda).length\n : 0;\n const frontierChars = assembled.frontierText?.length ?? 0;\n const ghostCueChars = assembled.ghostCueText?.length ?? 0;\n // Remaining chars = total estimate * 4 (chars) - accounted sections\n const totalEstimatedChars = assembled.tokenEstimate * 4;\n const accountedChars = taskChars + oodaChars + frontierChars + ghostCueChars + lastResultChars;\n const freshTailChars = Math.max(0, totalEstimatedChars - accountedChars);\n\n const mkSection = (chars: number) => ({\n chars,\n estimatedTokens: Math.ceil(chars / 4),\n });\n const contextSections: Record<string, { chars: number; estimatedTokens: number }> = {\n taskContext: mkSection(taskChars),\n oodaSnapshot: mkSection(oodaChars),\n frontier: mkSection(frontierChars),\n ghostCues: mkSection(ghostCueChars),\n freshTail: mkSection(freshTailChars),\n lastResult: mkSection(lastResultChars),\n };\n\n return {\n messages: assembled.messages,\n contextTokens: assembled.tokenEstimate,\n contextSections,\n };\n }\n\n private buildTaskContextText(context: OrchestratorContext): string {\n return `## Task\\n${context.task}\\n\\n## Workspace\\nroot: ${this.config.workDir}\\n\\n## Budget\\nturn: ${context.turn}\\nmax_turns: ${context.maxTurns}\\nturns_remaining: ${context.turnsRemaining}\\ndispatches_so_far: ${context.dispatchCount}\\n\\n## Progress\\nartifact_status_counts: complete=${context.artifactStatusCounts.complete}, incomplete=${context.artifactStatusCounts.incomplete}, failed=${context.artifactStatusCounts.failed}\\nall_incomplete: ${context.allIncomplete}`;\n }\n\n private buildAttachmentMessage(): AgentMessage | null {\n const atts = this.currentTaskAttachments;\n if (!atts || atts.length === 0) return null;\n return {\n role: \"user\",\n content: atts.map((a) => ({\n type: \"image\" as const,\n image: Buffer.from(a.imageBase64, \"base64\"),\n mimeType: a.mimeType,\n })),\n };\n }\n\n private async readEpisode(args: ReadEpisodeArgs): Promise<string> {\n const record = this.dispatchState.dispatchRecords.find(\n (r) =>\n r.tuple.id === args.id ||\n r.transcriptId === args.id ||\n r.artifact.id === args.id,\n );\n if (!record) {\n return `Episode not found: ${args.id}`;\n }\n return formatReadEpisodeResult(record, this.transcriptStore);\n }\n\n /**\n * Handle a turn interrupt without routing every follow-up through the\n * orchestrator. Status questions are answered from the saved worker record;\n * steering/continue become an internal worker continuation.\n */\n private async *handleInterrupt(\n interruptedDispatches: DispatchRecord[],\n ): AsyncGenerator<ArcEvent, InterruptResolution> {\n this.appendOrchestratorMessage(\"user\", \"[system] Turn interrupted by user.\");\n if (!this.config.askUser) {\n return { kind: \"orchestrator\" };\n }\n\n while (true) {\n const question = \"Turn interrupted. Ask for status, continue with steering, or say stop.\";\n yield { type: \"ask_user\", question };\n const answer = await this.config.askUser(question);\n const resolution = classifyInterruptAnswer(answer);\n\n if (resolution.kind === \"status\") {\n yield { type: \"interrupt_status\", summary: this.formatInterruptStatus(interruptedDispatches) };\n continue;\n }\n\n if (resolution.kind === \"abort_task\") {\n this.appendOrchestratorMessage(\"user\", \"[user steering] stop\");\n return resolution;\n }\n\n if (resolution.kind === \"orchestrator\") {\n this.appendOrchestratorMessage(\"user\", `[user steering] ${answer}`);\n return resolution;\n }\n\n this.appendOrchestratorMessage(\n \"user\",\n resolution.steering\n ? `[user steering] ${resolution.steering}`\n : \"[user steering] continue\",\n );\n return resolution;\n }\n }\n\n private formatInterruptStatus(records: DispatchRecord[]): string {\n if (records.length === 0) {\n return \"No worker checkpoint has returned yet. The turn was interrupted before ARC had a completed worker record to summarize.\";\n }\n\n return records.map((record) => {\n const summary = continuationSummary(record);\n const actions = record.artifact.actions?.length\n ? ` Last actions: ${record.artifact.actions.slice(-3).join(\"; \")}`\n : \"\";\n return `${record.tuple.id}: ${record.artifact.status}, steps ${record.artifact.stepsUsed}/${record.tuple.steps}. ${summary}${actions}`;\n }).join(\"\\n\");\n }\n}\n\nfunction formatJobEventLine(event: import(\"./jobs/types.js\").JobEvent): string {\n switch (event.type) {\n case \"job_started\":\n return `[job event] ${event.status.spec.label} started (${event.status.spec.id})`;\n case \"job_exited\":\n return `[job event] ${event.status.spec.label} exited ${event.status.exitCode ?? \"?\"} (${event.status.spec.id})`;\n case \"job_failed\":\n return `[job event] ${event.status.spec.label} failed: ${event.error} (${event.status.spec.id})`;\n case \"job_killed\":\n return `[job event] ${event.status.spec.label} killed: ${event.reason} (${event.status.spec.id})`;\n case \"job_output\":\n return `[job event] ${event.id} output`;\n }\n}\n\ninterface DoneGateResult {\n output: string | null;\n reason?: string | undefined;\n inputTokens?: number | undefined;\n outputTokens?: number | undefined;\n}\n\ntype DispatchCall = {\n toolCall: unknown;\n args: Record<string, unknown>;\n};\n\ntype InterruptResolution =\n | { kind: \"continue_worker\"; steering?: string | undefined }\n | { kind: \"orchestrator\"; steering?: string | undefined }\n | { kind: \"abort_task\" }\n | { kind: \"status\" };\n\ninterface SaveSessionOptions {\n taskComplete?: boolean | undefined;\n emitEvent?: boolean | undefined;\n}\n\ninterface InFlightDispatchSnapshot {\n tuple: DispatchRecord[\"tuple\"];\n progress: WorkerProgressEvent[];\n startedAt: number;\n updatedAt: number;\n status?: Artifact[\"status\"] | undefined;\n summary?: string | undefined;\n stepsUsed?: number | undefined;\n actions?: string[] | undefined;\n}\n\nfunction inFlightDispatchToRecord(snapshot: InFlightDispatchSnapshot): DispatchRecord {\n const latestResult = [...snapshot.progress]\n .reverse()\n .find((event): event is Extract<WorkerProgressEvent, { kind: \"worker_result\" }> =>\n event.kind === \"worker_result\",\n );\n const latestStep = [...snapshot.progress]\n .reverse()\n .find((event): event is WorkerProgressEvent & { step: number } =>\n \"step\" in event && typeof event.step === \"number\",\n );\n const actions = snapshot.actions ?? snapshot.progress\n .filter((event): event is Extract<WorkerProgressEvent, { kind: \"tool_complete\" }> =>\n event.kind === \"tool_complete\",\n )\n .map((event) => `${event.toolName}: ${event.outputSummary}`);\n const summary =\n snapshot.summary ??\n latestResult?.summary ??\n latestProgressSummary(snapshot.progress) ??\n \"Worker in progress\";\n const status = snapshot.status ?? latestResult?.status ?? \"incomplete\";\n const stepsUsed = snapshot.stepsUsed ?? latestResult?.stepsUsed ?? latestStep?.step ?? 0;\n const artifact: Artifact = {\n id: snapshot.tuple.id,\n tupleId: snapshot.tuple.id,\n output: null,\n textOutput: summary,\n status,\n summary,\n stepsUsed,\n actions,\n instruction: snapshot.tuple.instruction,\n };\n\n return {\n tuple: snapshot.tuple,\n artifact,\n transcriptId: `transcript_${snapshot.tuple.id}_inflight`,\n progress: snapshot.progress,\n completedAt: snapshot.updatedAt,\n };\n}\n\nfunction latestProgressSummary(progress: WorkerProgressEvent[]): string | null {\n for (const event of [...progress].reverse()) {\n if (event.kind === \"model_complete\" && event.outputSummary) return event.outputSummary;\n if (event.kind === \"tool_complete\" && event.outputSummary) {\n return `${event.toolName}: ${event.outputSummary}`;\n }\n if (event.kind === \"model_error\") return event.error;\n if (event.kind === \"tool_error\") return `${event.toolName}: ${event.error}`;\n }\n return null;\n}\n\nfunction terminalDispatches(records: DispatchRecord[]): DispatchRecord[] {\n const continued = new Set(\n records\n .map((record) => record.tuple.continuationOf)\n .filter((id): id is string => Boolean(id)),\n );\n return records.filter((record) => !continued.has(record.tuple.id));\n}\n\nfunction openStepBudgetDispatches(records: DispatchRecord[]): DispatchRecord[] {\n return terminalDispatches(records).filter(\n (record) =>\n record.artifact.status === \"incomplete\" &&\n record.artifact.stepsUsed >= record.tuple.steps,\n );\n}\n\nfunction continuationSummary(record: DispatchRecord): string {\n const latestAction = record.artifact.actions?.at(-1);\n return truncate(\n record.artifact.summary ||\n record.artifact.textOutput ||\n latestAction ||\n \"checkpoint saved\",\n 180,\n );\n}\n\nfunction classifyInterruptAnswer(answer: string): InterruptResolution {\n const trimmed = answer.trim();\n const normalized = trimmed.toLowerCase();\n if (!trimmed) return { kind: \"continue_worker\" };\n if (/\\b(status|what'?s happening|what is happening|progress|found|where are we|anything yet)\\b/i.test(trimmed)) {\n return { kind: \"status\" };\n }\n if (/\\b(stop|abort|cancel|quit|kill)\\b/i.test(normalized)) {\n return { kind: \"abort_task\" };\n }\n if (/\\b(replan|restart|start over|new plan|orchestrator)\\b/i.test(normalized)) {\n return { kind: \"orchestrator\", steering: trimmed };\n }\n if (/\\b(continue|resume|keep going|go on|carry on)\\b/i.test(normalized)) {\n return { kind: \"continue_worker\" };\n }\n return { kind: \"continue_worker\", steering: trimmed };\n}\n\nfunction needsOrchestrator(record: DispatchRecord): boolean {\n return /^NEEDS_ORCHESTRATOR:/i.test(finalizableOutput(record));\n}\n\nfunction maybeAutoFinalizeFromDispatches(records: DispatchRecord[]): string | null {\n if (records.length !== 1) return null;\n\n const record = records[0]!;\n const artifact = record.artifact;\n if (artifact.status !== \"complete\") return null;\n if (needsOrchestrator(record)) return null;\n\n const output = finalizableOutput(record);\n if (!output) return null;\n if (output.length > DIRECT_AUTO_FINALIZE_MAX_CHARS) return null;\n\n const expected = record.tuple.expectedOutput;\n if (expected.verification?.trim()) return null;\n if ((expected.successCriteria?.length ?? 0) > 0) return null;\n if (expectsFileArtifact(record)) return null;\n if (hasMutationAction(artifact.actions ?? [])) return null;\n if (looksUncertain(output)) return null;\n if (looksLikeContractEcho(output)) return null;\n\n return output;\n}\n\nfunction shouldRunDoneGate(records: DispatchRecord[]): boolean {\n if (records.length === 0) return false;\n if (records.some((record) => record.artifact.status !== \"complete\")) return false;\n if (records.some(needsOrchestrator)) return false;\n if (records.every((record) => !finalizableOutput(record))) return false;\n if (records.some(expectsFileArtifact)) return false;\n if (records.some((record) => hasMutationAction(record.artifact.actions ?? []))) {\n return false;\n }\n return true;\n}\n\nfunction doneGateSkipReason(records: DispatchRecord[]): string {\n if (records.length === 0) return \"no_dispatches\";\n if (records.some((record) => record.artifact.status !== \"complete\")) {\n return \"non_complete_result\";\n }\n if (records.every((record) => !finalizableOutput(record))) return \"missing_output\";\n if (records.some(expectsFileArtifact)) return \"file_artifact\";\n if (records.some((record) => hasMutationAction(record.artifact.actions ?? []))) {\n return \"mutation_action\";\n }\n return \"unknown\";\n}\n\nfunction finalizableOutput(record: DispatchRecord): string {\n const raw = record.artifact.textOutput?.trim() || record.artifact.output?.trim() || \"\";\n return stripTrailingContractEcho(raw);\n}\n\nfunction expectsFileArtifact(record: DispatchRecord): boolean {\n return record.tuple.expectedOutput.artifacts.some(\n (artifact) => artifact.type === \"file\" || artifact.type === \"directory\",\n );\n}\n\nfunction hasMutationAction(actions: string[]): boolean {\n return actions.some((action) =>\n /^(Write|Edit|TextEditor)\\b/.test(action.trim()),\n );\n}\n\nfunction looksUncertain(output: string): boolean {\n return /\\b(ran out of steps|incomplete|unable to|could not|couldn't|cannot determine|not enough information|needs? further|requires further|unclear|unsure)\\b/i.test(\n output,\n );\n}\n\nfunction looksLikeContractEcho(output: string): boolean {\n return /```json[\\s\\S]*\"artifacts\"\\s*:|\"\\s*artifacts\\s*\"\\s*:|\"successCriteria\"\\s*:/i.test(\n output,\n );\n}\n\nfunction stripTrailingContractEcho(output: string): string {\n let text = output.trim();\n let changed = true;\n\n while (changed) {\n changed = false;\n\n const fenced = /(?:^|\\n)```(?:json)?\\s*\\n([\\s\\S]*?)\\n```\\s*$/i.exec(text);\n if (fenced?.[1] && isExpectedOutputContractEcho(fenced[1])) {\n text = text.slice(0, fenced.index).trim();\n changed = true;\n continue;\n }\n\n const bare = trailingJsonContractStart(text);\n if (bare != null) {\n text = text.slice(0, bare).trim();\n changed = true;\n }\n }\n\n return text;\n}\n\nfunction trailingJsonContractStart(text: string): number | null {\n if (!text.endsWith(\"}\")) return null;\n\n const starts: number[] = [];\n if (text.startsWith(\"{\")) starts.push(0);\n for (let index = text.lastIndexOf(\"\\n{\"); index >= 0; index = text.lastIndexOf(\"\\n{\", index - 1)) {\n starts.push(index + 1);\n }\n\n for (const start of starts) {\n const candidate = text.slice(start).trim();\n if (isExpectedOutputContractEcho(candidate)) return start;\n }\n return null;\n}\n\nfunction isExpectedOutputContractEcho(jsonText: string): boolean {\n let parsed: unknown;\n try {\n parsed = JSON.parse(jsonText.trim());\n } catch {\n return false;\n }\n\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) return false;\n const record = parsed as Record<string, unknown>;\n if (!Array.isArray(record.artifacts)) return false;\n\n const allowedKeys = new Set([\"artifacts\", \"description\", \"successCriteria\", \"verification\"]);\n if (Object.keys(record).some((key) => !allowedKeys.has(key))) return false;\n\n return record.artifacts.every((artifact) => {\n if (!artifact || typeof artifact !== \"object\" || Array.isArray(artifact)) return false;\n const artifactRecord = artifact as Record<string, unknown>;\n const artifactKeys = Object.keys(artifactRecord);\n return typeof artifactRecord.type === \"string\" &&\n artifactKeys.every((key) => key === \"type\" || key === \"description\" || key === \"path\");\n });\n}\n\nfunction maybePassThroughDoneGateOutput(\n records: DispatchRecord[],\n decision: DoneGateResult,\n): string | null {\n if (!decision.output || records.length !== 1) return null;\n\n const record = records[0]!;\n if (record.artifact.status !== \"complete\") return null;\n if (needsOrchestrator(record)) return null;\n if (expectsFileArtifact(record)) return null;\n if (hasMutationAction(record.artifact.actions ?? [])) return null;\n\n const output = finalizableOutput(record);\n if (!output || output.length > DONE_GATE_OUTPUT_MAX_CHARS) return null;\n if (looksUncertain(output)) return null;\n if (looksLikeContractEcho(output)) return null;\n\n return output;\n}\n\nfunction formatDoneGatePrompt(task: string, records: DispatchRecord[]): string {\n return [\n \"## User Task\",\n task,\n \"\",\n \"## Latest Worker Results\",\n ...records.map(formatDoneGateRecord),\n \"\",\n \"Decide whether these worker results are enough to answer the user now.\",\n ].join(\"\\n\");\n}\n\nfunction formatDoneGateRecord(record: DispatchRecord, index: number): string {\n const output = truncate(finalizableOutput(record), DONE_GATE_OUTPUT_MAX_CHARS);\n const actions = (record.artifact.actions ?? [])\n .slice(0, 20)\n .map((action) => `- ${truncate(action, 240)}`)\n .join(\"\\n\");\n\n return [\n `### Worker ${index + 1}: ${record.tuple.id}`,\n `status: ${record.artifact.status}`,\n `steps_used: ${record.artifact.stepsUsed}`,\n `instruction: ${truncate(record.tuple.instruction, 1_000)}`,\n `expected_output: ${truncate(JSON.stringify(record.tuple.expectedOutput), 1_500)}`,\n actions ? `actions:\\n${actions}` : \"actions: none\",\n `worker_output:\\n${output}`,\n ].join(\"\\n\");\n}\n\nfunction parseDoneGateDecision(text: string): DoneGateResult {\n const raw = extractJsonObject(text);\n if (!raw) {\n return { output: null, reason: \"done gate returned non-json output\" };\n }\n\n try {\n const parsed = JSON.parse(raw) as Record<string, unknown>;\n const decision = parsed[\"decision\"];\n const finalOutput =\n typeof parsed[\"finalOutput\"] === \"string\"\n ? parsed[\"finalOutput\"].trim()\n : \"\";\n const reason =\n typeof parsed[\"reason\"] === \"string\" ? parsed[\"reason\"] : undefined;\n\n if (decision === \"finalize\" && finalOutput && !looksUncertain(finalOutput)) {\n return { output: finalOutput, ...(reason ? { reason } : {}) };\n }\n return {\n output: null,\n ...(reason ? { reason } : { reason: \"done gate chose continue\" }),\n };\n } catch (error) {\n return {\n output: null,\n reason: error instanceof Error ? error.message : \"invalid done gate json\",\n };\n }\n}\n\nfunction extractJsonObject(text: string): string | null {\n const start = text.indexOf(\"{\");\n const end = text.lastIndexOf(\"}\");\n if (start < 0 || end <= start) return null;\n return text.slice(start, end + 1);\n}\n\n/** Strip workerResult and compact progress payloads before serialization to avoid bloat. */\nfunction stripDispatchForSnapshot(record: DispatchRecord): DispatchRecord {\n const { workerResult: _w, progress: _p, ...rest } = record;\n return {\n ...rest,\n progress: record.progress.map(compactProgressForSnapshot),\n };\n}\n\nfunction compactProgressForSnapshot(\n progress: WorkerProgressEvent,\n): WorkerProgressEvent {\n switch (progress.kind) {\n case \"model_complete\":\n return {\n ...progress,\n ...(progress.publicRationale\n ? { publicRationale: truncate(progress.publicRationale, SNAPSHOT_PROGRESS_TEXT_MAX_CHARS) }\n : {}),\n ...(progress.outputSummary\n ? { outputSummary: truncate(progress.outputSummary, SNAPSHOT_PROGRESS_TEXT_MAX_CHARS) }\n : {}),\n };\n case \"model_error\":\n return {\n ...progress,\n error: truncate(progress.error, SNAPSHOT_PROGRESS_TEXT_MAX_CHARS),\n };\n case \"tool_start\":\n return {\n ...progress,\n ...(progress.argsSummary\n ? { argsSummary: truncate(progress.argsSummary, SNAPSHOT_PROGRESS_TEXT_MAX_CHARS) }\n : {}),\n };\n case \"tool_complete\":\n return {\n ...progress,\n outputSummary: truncate(progress.outputSummary, SNAPSHOT_PROGRESS_TEXT_MAX_CHARS),\n ...(progress.output\n ? { output: truncate(progress.output, SNAPSHOT_PROGRESS_TEXT_MAX_CHARS) }\n : {}),\n };\n case \"tool_error\":\n return {\n ...progress,\n error: truncate(progress.error, SNAPSHOT_PROGRESS_TEXT_MAX_CHARS),\n };\n case \"worker_result\":\n return {\n ...progress,\n summary: truncate(progress.summary, SNAPSHOT_PROGRESS_TEXT_MAX_CHARS),\n };\n case \"model_start\":\n return progress;\n case \"yield_start\":\n case \"yield_resume\":\n return progress;\n }\n}\n\nfunction traceToolCalls(toolCalls: unknown[]): TraceToolCall[] {\n return toolCalls.map((toolCall) => {\n const record =\n toolCall && typeof toolCall === \"object\"\n ? (toolCall as Record<string, unknown>)\n : {};\n const rawArgs = record[\"args\"] ?? record[\"input\"] ?? {};\n const args =\n rawArgs && typeof rawArgs === \"object\" && !Array.isArray(rawArgs)\n ? (rawArgs as Record<string, unknown>)\n : {};\n const toolCallId =\n typeof record[\"toolCallId\"] === \"string\"\n ? record[\"toolCallId\"]\n : undefined;\n return {\n toolName: String(record[\"toolName\"] ?? \"\"),\n ...(toolCallId ? { toolCallId } : {}),\n args: cloneForTrace(args),\n };\n });\n}\n\n\nfunction extractReasoningText(result: unknown): string {\n if (!result || typeof result !== \"object\") return \"\";\n const r = result as Record<string, unknown>;\n if (typeof r[\"reasoningText\"] === \"string\") return (r[\"reasoningText\"] as string).trim();\n const reasoning = r[\"reasoning\"];\n if (typeof reasoning === \"string\") return reasoning.trim();\n if (Array.isArray(reasoning)) {\n const parts = reasoning\n .map((p) => (p && typeof p === \"object\" && typeof (p as Record<string, unknown>)[\"text\"] === \"string\"\n ? ((p as Record<string, unknown>)[\"text\"] as string)\n : \"\"))\n .filter(Boolean);\n return parts.join(\"\\n\").trim();\n }\n return \"\";\n}\n","import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport type { Transcript, TranscriptStore, Artifact, ArtifactStore } from '../types';\n\n/**\n * File-based transcript store.\n * Stores transcripts as individual JSON files in a directory.\n */\nexport class FsTranscriptStore implements TranscriptStore {\n private readonly dir: string;\n private readonly indexPath: string;\n private index: string[] = [];\n private loaded = false;\n\n constructor(dir: string) {\n this.dir = dir;\n this.indexPath = path.join(dir, 'index.json');\n }\n\n async append(transcript: Transcript): Promise<void> {\n await this.ensureLoaded();\n await fs.mkdir(this.dir, { recursive: true });\n\n // Write transcript file\n const filePath = path.join(this.dir, `${transcript.id}.json`);\n await fs.writeFile(filePath, JSON.stringify(transcript, null, 2));\n\n // Update index\n this.index.push(transcript.id);\n await fs.writeFile(this.indexPath, JSON.stringify(this.index, null, 2));\n }\n\n async getAll(): Promise<Transcript[]> {\n await this.ensureLoaded();\n const transcripts: Transcript[] = [];\n for (const id of this.index) {\n const transcript = await this.get(id);\n if (transcript) {\n transcripts.push(transcript);\n }\n }\n return transcripts;\n }\n\n async get(id: string): Promise<Transcript | null> {\n try {\n const filePath = path.join(this.dir, `${id}.json`);\n const data = await fs.readFile(filePath, 'utf-8');\n return JSON.parse(data) as Transcript;\n } catch {\n return null;\n }\n }\n\n private async ensureLoaded(): Promise<void> {\n if (this.loaded) return;\n try {\n const data = await fs.readFile(this.indexPath, 'utf-8');\n this.index = JSON.parse(data) as string[];\n } catch {\n this.index = [];\n }\n this.loaded = true;\n }\n}\n\n/**\n * File-based artifact store.\n * Stores artifacts in a single JSON file.\n */\nexport class FsArtifactStore implements ArtifactStore {\n private readonly filePath: string;\n private artifacts: Record<string, Artifact> = {};\n private loaded = false;\n\n constructor(filePath: string) {\n this.filePath = filePath;\n }\n\n async set(id: string, artifact: Artifact): Promise<void> {\n await this.ensureLoaded();\n this.artifacts[id] = artifact;\n await this.save();\n }\n\n async get(id: string): Promise<Artifact | null> {\n await this.ensureLoaded();\n return this.artifacts[id] ?? null;\n }\n\n async getAll(): Promise<Record<string, Artifact>> {\n await this.ensureLoaded();\n return { ...this.artifacts };\n }\n\n private async ensureLoaded(): Promise<void> {\n if (this.loaded) return;\n try {\n const data = await fs.readFile(this.filePath, 'utf-8');\n this.artifacts = JSON.parse(data) as Record<string, Artifact>;\n } catch {\n this.artifacts = {};\n }\n this.loaded = true;\n }\n\n private async save(): Promise<void> {\n const dir = path.dirname(this.filePath);\n await fs.mkdir(dir, { recursive: true });\n await fs.writeFile(this.filePath, JSON.stringify(this.artifacts, null, 2));\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/observability/tracing.ts","../../src/agent/types.ts","../../src/arc/message-convert.ts","../../src/arc/utils.ts","../../src/arc/trace-utils.ts","../../src/arc/episode-projection.ts","../../src/arc/lcm/tools.ts","../../src/arc/jobs/tools.js","../../src/arc/tools.ts","../../src/arc/tool-registry.ts","../../src/arc/shared-types.ts","../../src/vercel-agent-loop.ts","../../src/observability/metrics.ts","../../src/arc/prompts.ts","../../src/arc/rescue-textual-tools.ts","../../src/arc/worker-budgets.ts","../../src/arc/worker.ts","../../src/arc/stores/memory-stores.ts","../../src/arc/jobs/memory-job-registry.js","../../src/arc/lcm/message-store.ts","../../src/arc/lcm/summary-dag.ts","../../src/arc/lcm/context-assembler.ts","../../src/arc/lcm/compactor.ts","../../src/arc/dispatcher.ts","../../src/arc/loop.ts","../../src/hooks/hook-runner.ts","../../src/observability/otel.ts","../../src/arc/stores/fs-stores.ts","../../src/arc/composite-tool-provider.ts","../../src/arc/e2b-tool-provider.ts","../../src/arc/control-plane-e2b-executor.ts","../../src/arc/permission-manager.ts","../../src/arc/resilience.ts"],"names":["tool","z","s","path","toModelMessages","defaultAnthropicProvider","resultText","result","escapeRegex","ABSOLUTE_MAX_STEPS","continuationSummary","tuple","err","orchestratorMessages","contextTokens","contextSections","modelMessages","generateText","savedEvent","nextTask","attachmentMsg","randomUUID","sleep"],"mappings":"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","file":"index.js","sourcesContent":["import { HarnessTelemetry } from './otel';\n\nexport async function traceStep<T>(\n telemetry: HarnessTelemetry | undefined,\n name: string,\n attributes: Record<string, string | number | boolean>,\n fn: () => Promise<T>\n): Promise<T> {\n if (!telemetry?.isEnabled()) {\n return fn();\n }\n return telemetry.withSpan(name, attributes, fn);\n}\n","export interface ToolCallInfo {\n toolCallId: string;\n toolName: string;\n args: Record<string, unknown>;\n /** Provider-specific metadata preserved across round-trips (e.g., Gemini thought signatures). */\n providerMetadata?: Record<string, unknown>;\n}\n\nexport interface ToolResultInfo {\n toolCallId: string;\n toolName: string;\n result: string;\n isError?: boolean;\n durationMs?: number;\n}\n\nexport type ContentPart =\n | { type: \"text\"; text: string }\n | { type: \"image\"; image: Buffer | Uint8Array; mimeType: string };\n\nexport interface AgentMessage {\n role: \"system\" | \"user\" | \"assistant\" | \"tool\";\n content: string | ContentPart[];\n toolCalls?: ToolCallInfo[]; // assistant messages: what tools were called\n toolResults?: ToolResultInfo[]; // tool messages: results keyed by toolCallId\n /** Provider-specific metadata preserved across round-trips (e.g., Gemini thought signatures). */\n providerMetadata?: Record<string, unknown>;\n}\n\n/** Extract plain text from content (string or ContentPart[]). */\nexport function getTextContent(content: string | ContentPart[]): string {\n if (typeof content === \"string\") return content;\n return content\n .filter(\n (p): p is Extract<ContentPart, { type: \"text\" }> => p.type === \"text\",\n )\n .map((p) => p.text)\n .join(\"\\n\");\n}\n\nexport interface ToolCallAction {\n type: \"tool\";\n name: string;\n args: Record<string, unknown>;\n toolCallId?: string;\n /** Provider-specific metadata preserved across round-trips (e.g., Gemini thought signatures). */\n providerMetadata?: Record<string, unknown>;\n /** Short user-visible rationale text emitted before the tool call. */\n publicRationale?: string;\n}\n\nexport interface FinalAction {\n type: \"final\";\n content: string;\n}\n\nexport interface ToolBatchAction {\n type: \"tool_batch\";\n calls: ToolCallAction[];\n /** Short user-visible rationale text emitted before the tool batch. */\n publicRationale?: string;\n}\n\nexport type AgentAction = ToolCallAction | FinalAction | ToolBatchAction;\n\nexport interface AgentRunResult {\n messages: AgentMessage[];\n output: string;\n steps: number;\n}\n\n/** Token usage breakdown for a single LLM step. */\nexport interface StepUsage {\n inputTokens?: number;\n outputTokens?: number;\n cacheReadTokens?: number;\n cacheWriteTokens?: number;\n reasoningTokens?: number;\n}\n\nexport type AgentStreamEvent =\n | { type: \"text_delta\"; text: string }\n | {\n type: \"tool_start\";\n name: string;\n args: Record<string, unknown>;\n toolCallId?: string;\n }\n | {\n type: \"tool_end\";\n name: string;\n result: {\n success: boolean;\n output: string;\n error?: string;\n [key: string]: unknown;\n };\n }\n | { type: \"step_start\"; step: number }\n | { type: \"step_end\"; step: number; usage?: StepUsage }\n | { type: \"done\"; output: string; steps: number };\n\nexport interface AgentLoop {\n nextAction(messages: AgentMessage[], signal?: AbortSignal): Promise<AgentAction>;\n streamAction?(messages: AgentMessage[]): AsyncIterable<AgentStreamEvent>;\n}\n\n/** Context passed to `prepareStep` before each LLM call. */\nexport interface PrepareStepContext {\n stepNumber: number;\n toolCallHistory: string[];\n}\n\n/** Overrides returned by `prepareStep`. All fields optional — omit to keep defaults. */\nexport interface PrepareStepResult {\n model?: string;\n activeTools?: string[];\n}\n","import type { AgentMessage } from '../agent/types';\nimport { getTextContent } from '../agent/types';\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ModelMessage = any;\n\n/**\n * Convert AgentMessage[] to Vercel AI SDK ModelMessage[].\n * Extracted from VercelAgentLoop — identical logic, standalone pure function.\n *\n * System messages that appear after user/assistant/tool messages are\n * converted to user messages with a [System] prefix. The Anthropic API\n * does not allow interleaved system messages; the actual system prompt\n * is passed separately via the `system` parameter.\n */\nexport function toModelMessages(messages: AgentMessage[]): ModelMessage[] {\n const out: ModelMessage[] = [];\n\n // Track whether we have seen a non-system message. After that point,\n // any system-role message must be converted to a user message.\n let seenNonSystem = false;\n\n for (const msg of messages) {\n if (msg.role === 'system') {\n const text = typeof msg.content === 'string' ? msg.content : getTextContent(msg.content);\n if (seenNonSystem) {\n // Convert to user message to avoid Anthropic SDK error\n out.push({ role: 'user', content: `[System] ${text}` });\n } else {\n out.push({ role: 'system', content: text });\n }\n continue;\n }\n\n seenNonSystem = true;\n\n if (msg.role === 'user') {\n out.push({ role: 'user', content: msg.content });\n continue;\n }\n\n if (msg.role === 'assistant') {\n const textContent = typeof msg.content === 'string' ? msg.content : getTextContent(msg.content);\n if (msg.toolCalls && msg.toolCalls.length > 0) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const parts: any[] = [];\n if (textContent) {\n parts.push({ type: 'text', text: textContent });\n }\n for (const tc of msg.toolCalls) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const part: any = {\n type: 'tool-call',\n toolCallId: tc.toolCallId,\n toolName: tc.toolName,\n input: tc.args,\n };\n // Preserve per-tool-call provider options (e.g., Gemini thought signatures)\n if (tc.providerMetadata) {\n part.providerOptions = tc.providerMetadata;\n }\n parts.push(part);\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const assistantMsg: any = { role: 'assistant', content: parts };\n // Preserve response-level provider options (e.g., Gemini thought signatures)\n if (msg.providerMetadata) {\n assistantMsg.providerOptions = msg.providerMetadata;\n }\n out.push(assistantMsg);\n } else {\n out.push({ role: 'assistant', content: textContent });\n }\n continue;\n }\n\n if (msg.role === 'tool') {\n if (msg.toolResults && msg.toolResults.length > 0) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const parts: any[] = msg.toolResults.map(tr => ({\n type: 'tool-result',\n toolCallId: tr.toolCallId,\n toolName: tr.toolName,\n output: tr.isError\n ? { type: 'error-text', value: tr.result }\n : { type: 'text', value: tr.result },\n }));\n out.push({ role: 'tool', content: parts });\n } else {\n const textContent = typeof msg.content === 'string' ? msg.content : getTextContent(msg.content);\n out.push({ role: 'user', content: `[Tool result]: ${textContent}` });\n }\n continue;\n }\n }\n\n return out;\n}\n\n","/** Truncate a string, appending a truncation notice if exceeded. */\nexport function truncate(value: string, max: number): string {\n if (value.length <= max) return value;\n return `${value.slice(0, max)}\\n...[truncated ${value.length - max} chars]`;\n}\n\n/** Collapse whitespace and truncate inline. */\nexport function truncateInline(value: string, max: number): string {\n return truncate(value.replace(/\\s+/g, \" \").trim(), max);\n}\n\n/** Heuristic: does this string look like a file path? */\nexport function looksLikePath(value: string): boolean {\n if (!value || /\\s/.test(value)) return false;\n return (\n value.startsWith(\"/\") ||\n value.startsWith(\"./\") ||\n value.startsWith(\"../\") ||\n value.includes(\"/\") ||\n /\\.[A-Za-z0-9]+$/.test(value)\n );\n}\n","import type { ReadEpisodeArgs } from \"./types\";\n\nexport function cloneForTrace<T>(value: T): T {\n try {\n return structuredClone(value);\n } catch {\n return JSON.parse(JSON.stringify(value, traceJsonReplacer)) as T;\n }\n}\n\nfunction traceJsonReplacer(_key: string, value: unknown): unknown {\n if (typeof value === \"bigint\") return value.toString();\n if (value instanceof Error) {\n return {\n name: value.name,\n message: value.message,\n stack: value.stack,\n };\n }\n if (value instanceof Uint8Array) {\n return {\n type: value.constructor.name,\n byteLength: value.byteLength,\n };\n }\n return value;\n}\n\nexport function normalizeReadEpisodeArgs(\n args: Record<string, unknown>,\n): ReadEpisodeArgs {\n const rawDetail = args.detail;\n const detail =\n rawDetail === \"summary\" ||\n rawDetail === \"trace\" ||\n rawDetail === \"artifacts\"\n ? rawDetail\n : undefined;\n return {\n id: String(args.id ?? \"\"),\n ...(detail ? { detail } : {}),\n ...(typeof args.artifactKey === \"string\"\n ? { artifactKey: args.artifactKey }\n : {}),\n ...(typeof args.maxTokens === \"number\"\n ? { maxTokens: args.maxTokens }\n : {}),\n };\n}\n","/**\n * Episode projection: minimal formatting for orchestrator context.\n *\n * The worker collects artifacts and actions during execution.\n * This module just formats DispatchRecords for the orchestrator prompt.\n */\nimport {\n getTextContent,\n type AgentMessage,\n} from \"../agent/types\";\nimport type {\n Artifact,\n DispatchRecord,\n OodaSnapshot,\n TranscriptStore,\n} from \"./types\";\nimport { truncate, truncateInline } from \"./utils\";\n\nconst DEFAULT_TRACE_MAX_CHARS = 80_000;\nconst TRACE_TOOL_RESULT_LIMIT = 8_000;\n\n// ── Orchestrator context formatting ──\n\n/** Format a single dispatch record for the orchestrator prompt */\nexport function formatDispatchForPrompt(\n record: DispatchRecord,\n options: { compact?: boolean; maxChars?: number } = {},\n): string {\n const maxChars = options.maxChars ?? 4_000;\n const a = record.artifact;\n const t = record.tuple;\n\n const lines = [\n `Dispatch ${t.id} [${a.status}]`,\n `steps: ${a.stepsUsed}/${t.steps}`,\n `summary: ${a.summary}`,\n `instruction: ${truncateInline(t.instruction, options.compact ? 220 : 800)}`,\n ];\n\n if (options.compact) return truncate(lines.join(\"\\n\"), maxChars);\n\n if (a.output) {\n lines.push(`output: ${a.output}`);\n }\n\n // Artifacts from worker execution\n const workerArtifacts = record.workerResult?.artifacts ?? [];\n const produced = workerArtifacts.filter((x) => x.action === \"produced\" || x.action === \"modified\");\n if (produced.length > 0) {\n lines.push(\n \"files_touched:\",\n ...produced.slice(0, 10).map((x) => ` - ${x.action} ${x.kind} ${truncateInline(x.uri, 180)}`),\n );\n }\n\n // Actions (already human-readable strings from worker)\n const actions = a.actions ?? record.workerResult?.actions ?? [];\n if (actions.length > 0) {\n lines.push(\n \"actions:\",\n ...actions.slice(-10).map((action) => ` - ${truncateInline(action, 200)}`),\n );\n }\n\n // Worker's textual output — the actual answer content\n const textOutput = a.textOutput ?? record.workerResult?.lastMessage;\n if (textOutput) {\n const budget = Math.max(500, maxChars - lines.join(\"\\n\").length - 100);\n lines.push(`worker_output:\\n${truncate(textOutput, budget)}`);\n }\n\n return truncate(lines.join(\"\\n\"), maxChars);\n}\n\n/** Build OODA snapshot from dispatch records — reads WorkerResult directly */\nexport function buildOodaSnapshot(input: {\n turn: number;\n maxTurns: number;\n turnsRemaining: number;\n dispatchCount: number;\n allIncomplete: boolean;\n dispatches: DispatchRecord[];\n}): OodaSnapshot {\n const recent = input.dispatches.slice(-5);\n\n const observations = recent.map((r) =>\n [\n `${r.tuple.id}: ${r.artifact.status}`,\n r.artifact.summary,\n ]\n .filter(Boolean)\n .join(\"; \"),\n );\n\n const disprovenApproaches: string[] = [];\n\n for (const r of recent) {\n if (r.artifact.status === \"failed\" || r.artifact.status === \"incomplete\") {\n disprovenApproaches.push(\n `${r.tuple.id}: ${truncateInline(r.tuple.instruction, 180)} -> ${r.artifact.status}`,\n );\n }\n }\n\n const beliefs: string[] = [];\n if (input.allIncomplete) {\n beliefs.push(\"No dispatch has produced a complete artifact yet.\");\n }\n if (beliefs.length === 0) {\n beliefs.push(\"No unresolved issue detected.\");\n }\n\n return {\n observations: observations.length > 0 ? observations : [\"No completed dispatches yet.\"],\n beliefs,\n disprovenApproaches,\n blockers: [],\n decisionPressure: {\n turn: input.turn,\n maxTurns: input.maxTurns,\n turnsRemaining: input.turnsRemaining,\n dispatchCount: input.dispatchCount,\n allIncomplete: input.allIncomplete,\n },\n };\n}\n\nexport function formatOodaSnapshotForPrompt(snapshot: OodaSnapshot): string {\n return [\n \"## OODA State\",\n \"decision_pressure:\",\n ` turn: ${snapshot.decisionPressure.turn}`,\n ` max_turns: ${snapshot.decisionPressure.maxTurns}`,\n ` turns_remaining: ${snapshot.decisionPressure.turnsRemaining}`,\n ` dispatches_so_far: ${snapshot.decisionPressure.dispatchCount}`,\n ` all_incomplete: ${snapshot.decisionPressure.allIncomplete}`,\n \"observations:\",\n formatList(snapshot.observations),\n \"beliefs:\",\n formatList(snapshot.beliefs),\n \"disproven_approaches:\",\n formatList(snapshot.disprovenApproaches),\n \"blockers:\",\n formatList(snapshot.blockers),\n ].join(\"\\n\");\n}\n\n// ── ReadEpisode formatting ──\n\nexport async function formatReadEpisodeResult(\n record: DispatchRecord,\n transcriptStore: TranscriptStore,\n): Promise<string> {\n const transcript = await transcriptStore.get(record.transcriptId);\n const traceSection = transcript\n ? formatTranscriptTrace(transcript.messages, TRACE_TOOL_RESULT_LIMIT)\n : \"(transcript not found)\";\n\n const base = [\n `Dispatch ${record.tuple.id}`,\n \"\",\n formatDispatchForPrompt(record, { maxChars: 12_000 }),\n \"\",\n \"--- Trace ---\",\n traceSection,\n ];\n\n return truncate(base.join(\"\\n\"), DEFAULT_TRACE_MAX_CHARS);\n}\n\n// ── Transcript trace ──\n\nexport function formatTranscriptTrace(\n messages: AgentMessage[],\n toolResultLimit: number,\n): string {\n return messages\n .map((message, index) => {\n const lines = [`message ${index + 1}: ${message.role}`];\n const content = getTextContent(message.content);\n if (content) lines.push(content);\n if (message.toolCalls?.length) {\n lines.push(\"tool_calls:\");\n for (const call of message.toolCalls) {\n lines.push(`- ${call.toolName} ${JSON.stringify(call.args)}`);\n }\n }\n if (message.toolResults?.length) {\n lines.push(\"tool_results:\");\n for (const result of message.toolResults) {\n const status = result.isError ? \"error\" : \"ok\";\n lines.push(\n `- ${result.toolName} ${status} ${truncate(result.result, toolResultLimit)}`,\n );\n }\n }\n return lines.join(\"\\n\");\n })\n .join(\"\\n\\n\");\n}\n\n// ── Helpers ──\n\nfunction formatList(items: string[]): string {\n if (items.length === 0) return \"- none\";\n return items.map((item) => `- ${item}`).join(\"\\n\");\n}\n","import { tool } from \"ai\";\nimport { createHash } from \"node:crypto\";\nimport { z } from \"zod\";\nimport { getTextContent, type ToolCallInfo, type ToolResultInfo } from \"../../agent/types\";\nimport { truncate } from \"../utils\";\nimport { formatTranscriptTrace } from \"../episode-projection\";\nimport type { DispatchRecord, TranscriptStore, VectorIndex } from \"../types\";\nimport type { MessageStore } from \"./message-store\";\nimport type { SummaryDAG } from \"./summary-dag\";\n\nconst DEFAULT_HISTORY_READ_MAX_CHARS = 8_000;\nconst MAX_HISTORY_READ_MAX_CHARS = 40_000;\nconst DEFAULT_HISTORY_AROUND_CONTEXT_CHARS = 4_000;\nconst DEFAULT_HISTORY_EXPAND_MAX_CHARS = 8_000;\nconst MAX_HISTORY_EXPAND_MAX_CHARS = 40_000;\nconst HISTORY_EXPAND_SUMMARY_THRESHOLD_CHARS = 10_000;\n\nexport interface HistoryReadOptions {\n /** 1-based line offset, matching the Read tool convention. */\n offset?: number | undefined;\n /** Maximum lines to return from offset. */\n limit?: number | undefined;\n /** Return the chunk around the first literal match instead of line slicing. */\n around?: string | undefined;\n /** Character budget for around mode. */\n contextChars?: number | undefined;\n /** Include stored tool calls/results attached to the message. */\n includeToolData?: boolean | undefined;\n}\n\nexport interface HistoryExpandOptions {\n /** Legacy approximate token budget. Prefer contextChars for deterministic slicing. */\n maxTokens?: number | undefined;\n /** 1-based line offset, matching the Read tool convention. */\n offset?: number | undefined;\n /** Maximum lines to return from offset. */\n limit?: number | undefined;\n /** Return the chunk around the first literal match instead of line slicing. */\n around?: string | undefined;\n /** Character budget for around mode or large line ranges. */\n contextChars?: number | undefined;\n /** Include a compact digest for large expansions. Defaults to true. */\n summarize?: boolean | undefined;\n}\n\n// ── Deps for tool implementations ──\n\nexport interface LcmToolDeps {\n messageStore: MessageStore;\n summaryDAG: SummaryDAG;\n vectorIndex: VectorIndex;\n transcriptStore: TranscriptStore;\n /** Needed for expandSummary fallback when message store has no messages for a leaf */\n findDispatchRecord: (summaryId: string) => DispatchRecord | undefined;\n summarizeHistoryExpansion?: ((args: {\n summaryId: string;\n content: string;\n contentHash: string;\n }) => Promise<string>) | undefined;\n}\n\n// ── Tool implementations ──\n\n/** Expand a summary node with file-like ranges and metadata. */\nexport async function expandSummary(\n deps: LcmToolDeps,\n summaryId: string,\n optionsOrMaxTokens: HistoryExpandOptions | number = {},\n): Promise<string> {\n const options = typeof optionsOrMaxTokens === \"number\"\n ? { maxTokens: optionsOrMaxTokens }\n : optionsOrMaxTokens;\n const node = deps.summaryDAG.getNode(summaryId);\n if (!node) {\n return JSON.stringify({\n kind: \"history_expand_result\",\n found: false,\n summaryId,\n hint: `Summary node not found: ${summaryId}`,\n content: \"\",\n }, null, 2);\n }\n\n const maxChars = resolveHistoryExpandMaxChars(options);\n const sourceBudgetChars = Math.min(\n MAX_HISTORY_EXPAND_MAX_CHARS,\n Math.max(maxChars, HISTORY_EXPAND_SUMMARY_THRESHOLD_CHARS + 1),\n );\n const fullText = await buildExpandedSummaryText(deps, summaryId, sourceBudgetChars);\n const totalLines = fullText.length === 0 ? 0 : fullText.split(\"\\n\").length;\n const totalChars = fullText.length;\n const contentHash = createHash(\"sha256\").update(fullText).digest(\"hex\").slice(0, 16);\n const selection = options.around\n ? selectAround(fullText, String(options.around), maxChars)\n : selectLines(fullText, options.offset, options.limit, maxChars);\n\n const shouldSummarize =\n options.summarize !== false &&\n Boolean(deps.summarizeHistoryExpansion) &&\n totalChars > HISTORY_EXPAND_SUMMARY_THRESHOLD_CHARS;\n const digest = shouldSummarize\n ? await deps.summarizeHistoryExpansion!({ summaryId, content: fullText, contentHash })\n : undefined;\n\n const result = {\n kind: \"history_expand_result\",\n found: true,\n summaryId,\n depth: node.depth,\n totalLines,\n totalChars,\n startLine: selection.startLine,\n endLine: selection.endLine,\n startOffset: selection.startOffset,\n endOffset: selection.endOffset,\n truncated: selection.truncated,\n nextOffset: selection.nextOffset,\n contentHash,\n summarized: Boolean(digest),\n ...(digest ? { digest } : {}),\n ...(options.around\n ? { around: String(options.around), aroundFound: selection.aroundFound }\n : {}),\n hint: selection.truncated\n ? \"This history_expand result is truncated. Use the digest first, then call history_expand again with nextOffset as offset, a smaller limit, or around=<literal text> for the exact section.\"\n : \"Complete expansion returned.\",\n content: selection.content,\n };\n\n return JSON.stringify(result, null, 2);\n}\n\nasync function buildExpandedSummaryText(\n deps: LcmToolDeps,\n summaryId: string,\n sourceBudgetChars: number,\n): Promise<string> {\n const node = deps.summaryDAG.getNode(summaryId);\n if (!node) return \"\";\n if (node.depth === 0) {\n // Leaf node — return source transcript messages\n const conversationId = node.sourceConversationIds[0];\n if (!conversationId) return node.summary;\n const messages = deps.messageStore.getConversation(conversationId);\n if (messages.length === 0) {\n // Fall back to transcript store\n const record = deps.findDispatchRecord(summaryId);\n if (record) {\n const transcript = await deps.transcriptStore.get(record.transcriptId);\n if (transcript) {\n return formatTranscriptTrace(transcript.messages, sourceBudgetChars);\n }\n }\n return node.summary;\n }\n const perMessageChars = Math.max(500, Math.ceil(sourceBudgetChars / messages.length));\n const trace = messages\n .map(\n (m) =>\n `[${m.role}:${m.index}] ${m.content.slice(0, perMessageChars)}`,\n )\n .join(\"\\n\");\n return truncate(trace, sourceBudgetChars);\n }\n\n // Higher depth — return child summaries\n const children = node.sourceIds\n .map((id) => deps.summaryDAG.getNode(id))\n .filter((n): n is NonNullable<typeof n> => !!n);\n return children\n .map((child) => `### ${child.id} (d${child.depth})\\n${child.summary}`)\n .join(\"\\n\\n\");\n}\n\nfunction resolveHistoryExpandMaxChars(options: HistoryExpandOptions): number {\n if (typeof options.contextChars === \"number\") {\n return clampInt(\n options.contextChars,\n DEFAULT_HISTORY_EXPAND_MAX_CHARS,\n MAX_HISTORY_EXPAND_MAX_CHARS,\n );\n }\n if (typeof options.maxTokens === \"number\" && Number.isFinite(options.maxTokens)) {\n return clampInt(\n Math.floor(options.maxTokens * 4),\n DEFAULT_HISTORY_EXPAND_MAX_CHARS,\n MAX_HISTORY_EXPAND_MAX_CHARS,\n );\n }\n return DEFAULT_HISTORY_EXPAND_MAX_CHARS;\n}\n\n/** Describe a summary node's metadata, or show DAG overview */\nexport function describeSummary(deps: LcmToolDeps, summaryId?: string): string {\n if (summaryId) {\n const node = deps.summaryDAG.getNode(summaryId);\n if (!node) return `Summary node not found: ${summaryId}`;\n return [\n `ID: ${node.id}`,\n `Depth: ${node.depth}`,\n `Sources: ${node.sourceIds.join(\", \")}`,\n `Conversations: ${node.sourceConversationIds.join(\", \")}`,\n `Artifacts: ${node.artifacts.join(\", \") || \"none\"}`,\n `Operations: ${node.operations.join(\", \") || \"none\"}`,\n `Outcome: ${node.outcome}`,\n `Tokens: ${node.tokenCount}`,\n `Summary:\\n${node.summary}`,\n ].join(\"\\n\");\n }\n\n // DAG overview\n const allNodes = deps.summaryDAG.getAllNodes();\n if (allNodes.length === 0) return \"DAG is empty — no dispatches completed yet.\";\n\n const byDepth = new Map<number, number>();\n for (const node of allNodes) {\n byDepth.set(node.depth, (byDepth.get(node.depth) ?? 0) + 1);\n }\n const totalTokens = allNodes.reduce((sum, n) => sum + n.tokenCount, 0);\n const lines = [\n `DAG Overview: ${allNodes.length} total nodes, ~${totalTokens} tokens`,\n \"Nodes by depth:\",\n ...Array.from(byDepth.entries())\n .sort(([a], [b]) => a - b)\n .map(([depth, count]) => ` d${depth}: ${count} nodes`),\n \"\",\n \"All nodes:\",\n ...allNodes.map(\n (n) =>\n ` ${n.id}: d${n.depth}, ${n.outcome}, ${n.tokenCount} tokens`,\n ),\n ];\n return lines.join(\"\\n\");\n}\n\n/** Direct vector search recall — returns matching transcript excerpts */\nexport async function recallDirect(deps: LcmToolDeps, query: string): Promise<string> {\n const transcriptIds = await deps.vectorIndex.search(query, 5);\n if (transcriptIds.length === 0) {\n return \"No relevant history found.\";\n }\n\n const transcripts = await Promise.all(\n transcriptIds.map((id) => deps.transcriptStore.get(id).then((t) => ({ id, t }))),\n );\n const excerpts: string[] = [];\n for (const { id, t: transcript } of transcripts) {\n if (!transcript) continue;\n const lastEntry = transcript.messages[transcript.messages.length - 1];\n const lastMsg = lastEntry\n ? getTextContent(lastEntry.content).slice(0, 300)\n : \"(no messages)\";\n excerpts.push(`**${id}**: ${transcript.instruction}\\n Last result: ${lastMsg}`);\n }\n\n if (excerpts.length === 0) {\n return \"No history available yet.\";\n }\n return excerpts.join(\"\\n\\n\");\n}\n\n/** Read a specific message from the message store with file-like ranges and metadata. */\nexport function historyRead(\n deps: LcmToolDeps,\n conversationId: string,\n messageIndex: number,\n options: HistoryReadOptions = {},\n): string | null {\n const msg = deps.messageStore.getMessage(conversationId, messageIndex);\n if (!msg) return null;\n const fullText = buildHistoryReadText(msg, options.includeToolData ?? false);\n const totalLines = fullText.length === 0 ? 0 : fullText.split(\"\\n\").length;\n const totalChars = fullText.length;\n const maxChars = clampInt(\n options.contextChars,\n DEFAULT_HISTORY_READ_MAX_CHARS,\n MAX_HISTORY_READ_MAX_CHARS,\n );\n const selection = options.around\n ? selectAround(fullText, String(options.around), maxChars)\n : selectLines(fullText, options.offset, options.limit, maxChars);\n\n const result = {\n kind: \"history_read_result\",\n found: true,\n conversationId,\n messageIndex,\n role: msg.role,\n totalLines,\n totalChars,\n startLine: selection.startLine,\n endLine: selection.endLine,\n startOffset: selection.startOffset,\n endOffset: selection.endOffset,\n truncated: selection.truncated,\n nextOffset: selection.nextOffset,\n contentHash: createHash(\"sha256\").update(fullText).digest(\"hex\").slice(0, 16),\n ...(options.around\n ? { around: String(options.around), aroundFound: selection.aroundFound }\n : {}),\n hint: selection.truncated\n ? \"This history_read result is truncated. Call history_read again with nextOffset as offset, a smaller limit, or around=<literal text> for the exact section.\"\n : \"Complete message returned.\",\n content: selection.content,\n };\n\n return JSON.stringify(result, null, 2);\n}\n\nfunction buildHistoryReadText(\n msg: { content: string; toolCalls?: ToolCallInfo[]; toolResults?: ToolResultInfo[] },\n includeToolData: boolean,\n): string {\n const parts = [msg.content];\n if (includeToolData && msg.toolCalls) {\n for (const tc of msg.toolCalls) {\n parts.push(`[tool_call] ${tc.toolName} ${JSON.stringify(tc.args)}`);\n }\n }\n if (includeToolData && msg.toolResults) {\n for (const tr of msg.toolResults) {\n parts.push(`[tool_result] ${tr.toolName}: ${tr.result}`);\n }\n }\n return parts.join(\"\\n\");\n}\n\ninterface Selection {\n content: string;\n startLine: number;\n endLine: number;\n startOffset: number;\n endOffset: number;\n truncated: boolean;\n nextOffset: number | null;\n aroundFound?: boolean;\n}\n\nfunction selectLines(\n text: string,\n offsetInput: number | undefined,\n limitInput: number | undefined,\n maxChars: number,\n): Selection {\n if (text.length === 0) {\n return {\n content: \"\",\n startLine: 0,\n endLine: 0,\n startOffset: 0,\n endOffset: 0,\n truncated: false,\n nextOffset: null,\n };\n }\n\n const lines = text.split(\"\\n\");\n const offset = clampInt(offsetInput, 1, Math.max(1, lines.length));\n const limit = limitInput == null\n ? lines.length - offset + 1\n : clampInt(limitInput, 1, lines.length);\n const startIndex = offset - 1;\n let endIndex = Math.min(lines.length, startIndex + limit);\n let content = lines.slice(startIndex, endIndex).join(\"\\n\");\n\n let charTruncated = false;\n if (content.length > maxChars) {\n content = content.slice(0, maxChars);\n charTruncated = true;\n const keptLines = content.length === 0 ? 0 : content.split(\"\\n\").length;\n endIndex = Math.min(lines.length, startIndex + Math.max(1, keptLines));\n }\n\n const truncated = endIndex < lines.length || charTruncated;\n return {\n content,\n startLine: offset,\n endLine: endIndex,\n startOffset: offset,\n endOffset: endIndex,\n truncated,\n nextOffset: truncated ? endIndex + 1 : null,\n };\n}\n\nfunction selectAround(text: string, pattern: string, contextChars: number): Selection {\n if (text.length === 0) {\n return {\n content: \"\",\n startLine: 0,\n endLine: 0,\n startOffset: 0,\n endOffset: 0,\n truncated: false,\n nextOffset: null,\n aroundFound: false,\n };\n }\n\n const matchIndex = pattern ? text.indexOf(pattern) : -1;\n const center = matchIndex >= 0 ? matchIndex : 0;\n const half = Math.floor(contextChars / 2);\n const startChar = Math.max(0, center - half);\n const endChar = Math.min(text.length, startChar + contextChars);\n const content = text.slice(startChar, endChar);\n const prefix = text.slice(0, startChar);\n const startLine = prefix.length === 0 ? 1 : prefix.split(\"\\n\").length;\n const endLine = startLine + (content.length === 0 ? 0 : content.split(\"\\n\").length - 1);\n const truncated = startChar > 0 || endChar < text.length;\n\n return {\n content,\n startLine,\n endLine,\n startOffset: startLine,\n endOffset: endLine,\n truncated,\n nextOffset: endChar < text.length ? endLine + 1 : null,\n aroundFound: matchIndex >= 0,\n };\n}\n\nfunction clampInt(\n value: number | undefined,\n fallback: number,\n max: number,\n): number {\n if (typeof value !== \"number\" || !Number.isFinite(value)) return fallback;\n return Math.max(1, Math.min(max, Math.floor(value)));\n}\n\n// ── Tool schemas ──\n\n/** Search across all stored messages from all conversations */\nexport const history_search = tool({\n description:\n \"Search across all stored messages from all conversations (orchestrator + workers). Returns matching excerpts with context. Use to find prior commands, errors, thread IDs, file paths, or any text across the full run history.\",\n inputSchema: z.object({\n pattern: z\n .string()\n .max(500)\n .describe(\"Search pattern (literal text match) to search for across all messages\"),\n conversationId: z\n .string()\n .max(200)\n .optional()\n .describe(\n 'Optional: limit search to a specific conversation (e.g., \"orchestrator\" or \"worker_<tupleId>\")',\n ),\n maxResults: z\n .number()\n .min(1)\n .max(100)\n .optional()\n .describe(\"Maximum number of results to return (default: 20)\"),\n }),\n});\n\n/** Expand a summary node back to its source messages or child summaries */\nexport const history_expand = tool({\n description:\n \"Expand a compacted summary back to source messages or child summaries with file-like ranges and explicit truncation metadata. Use when a ghost cue or summary reference needs detail. If truncated, continue with nextOffset or around=<literal text>. Do not repeat the same exact call.\",\n inputSchema: z.object({\n summaryId: z\n .string()\n .max(200)\n .describe(\"The summary node ID to expand (e.g., 'summary_d0_tuple_abc')\"),\n maxTokens: z\n .number()\n .min(100)\n .max(32000)\n .optional()\n .describe(\"Legacy approximate maximum tokens to return. Prefer contextChars for deterministic slicing.\"),\n offset: z\n .number()\n .int()\n .min(1)\n .optional()\n .describe(\"1-based line offset to start reading from, like the Read tool\"),\n limit: z\n .number()\n .int()\n .min(1)\n .max(1000)\n .optional()\n .describe(\"Maximum number of lines to return\"),\n around: z\n .string()\n .max(500)\n .optional()\n .describe(\"Literal text to center the returned chunk around\"),\n contextChars: z\n .number()\n .int()\n .min(200)\n .max(MAX_HISTORY_EXPAND_MAX_CHARS)\n .optional()\n .describe(\"Character budget for around mode or large line ranges\"),\n summarize: z\n .boolean()\n .optional()\n .describe(\"Include a compact digest for large expansions. Defaults to true.\"),\n }),\n});\n\n/** Show summary node metadata or history overview */\nexport const history_overview = tool({\n description:\n \"Show summary node metadata (sources, depth, artifacts, operations) or history overview. With summaryId: shows that node's details. Without: shows how many nodes at each depth, what's in context vs compacted.\",\n inputSchema: z.object({\n summaryId: z\n .string()\n .max(200)\n .optional()\n .describe(\n \"Optional summary node ID. Omit to get full history overview.\",\n ),\n }),\n});\n\n/** Read a specific message from run history at full fidelity */\nexport const history_read = tool({\n description:\n \"Read a specific message from run history with file-like ranges and explicit truncation metadata. Use after history_search returns a [conversationId:messageIndex] reference. If the result is truncated, continue with nextOffset or use around=<literal text>.\",\n inputSchema: z.object({\n conversationId: z\n .string()\n .max(200)\n .describe('Conversation ID (e.g., \"orchestrator\" or \"worker_tuple_abc\")'),\n messageIndex: z\n .number()\n .min(0)\n .describe(\"Message index within the conversation\"),\n offset: z\n .number()\n .int()\n .min(1)\n .optional()\n .describe(\"1-based line offset to start reading from, like the Read tool\"),\n limit: z\n .number()\n .int()\n .min(1)\n .max(1000)\n .optional()\n .describe(\"Maximum number of lines to return\"),\n around: z\n .string()\n .max(500)\n .optional()\n .describe(\"Literal text to center the returned chunk around\"),\n contextChars: z\n .number()\n .int()\n .min(200)\n .max(MAX_HISTORY_READ_MAX_CHARS)\n .optional()\n .describe(\"Character budget for around mode or large line ranges\"),\n includeToolData: z\n .boolean()\n .optional()\n .describe(\"Include tool calls/results attached to the stored message\"),\n }),\n});\n","import { tool } from \"ai\";\nimport { z } from \"zod\";\n// Cast helper for exactOptionalPropertyTypes compatibility\nconst s = (t) => t;\nconst jobsStatusSchema = tool({\n description: \"Query background job state. Use when the ambient Live Jobs block isn't enough — e.g. to read a full tail, investigate a failure, or confirm state before deciding.\",\n inputSchema: z.object({\n id: z.string().optional().describe(\"Specific job id; omit for all jobs\"),\n lines: z\n .number()\n .int()\n .min(1)\n .max(400)\n .optional()\n .describe(\"Tail lines to include (default 40)\"),\n state: z\n .array(z.enum([\"running\", \"exited\", \"failed\", \"killed\", \"unknown\"]))\n .optional()\n .describe(\"Filter by state\"),\n }),\n});\nexport function buildJobsStatusTool(deps) {\n return {\n name: \"jobs_status\",\n schema: s(jobsStatusSchema),\n executionMode: \"parallel\",\n execute: async (_provider, args) => {\n const lines = typeof args.lines === \"number\" ? args.lines : 40;\n const rawState = Array.isArray(args.state) ? args.state : [];\n const stateFilter = new Set(rawState);\n if (args.id) {\n const id = String(args.id);\n const status = await deps.jobRegistry.check(id);\n if (!status) {\n return {\n success: false,\n output: `Unknown job ${id}`,\n };\n }\n return {\n success: true,\n output: JSON.stringify({ ...status, tailLines: status.tailLines.slice(-lines) }, null, 2),\n };\n }\n const all = await deps.jobRegistry.list();\n const filtered = stateFilter.size > 0\n ? all.filter((j) => stateFilter.has(j.state))\n : all;\n return {\n success: true,\n output: JSON.stringify(filtered.map((j) => ({ ...j, tailLines: j.tailLines.slice(-lines) })), null, 2),\n metadata: { count: filtered.length },\n };\n },\n };\n}\n","import { tool } from \"ai\";\nimport { z } from \"zod\";\nimport type { ToolResult, ToolResultArtifact } from \"../interfaces/tool-provider\";\nimport type { AnyTool } from \"./shared-types\";\nimport type { Tool } from \"./tool-registry\";\nimport type { ExpectedArtifact, ExpectedOutputContract, ReadEpisodeArgs, ScratchPad } from \"./types\";\nimport { looksLikePath } from \"./utils\";\nimport type { GrepResult } from \"./lcm/message-store\";\nimport { normalizeReadEpisodeArgs } from \"./trace-utils\";\nimport { history_search, history_expand, history_overview, history_read, type HistoryExpandOptions, type HistoryReadOptions } from \"./lcm/tools\";\nimport type { JobRegistry } from \"./jobs/types.js\";\nimport { buildJobsStatusTool } from \"./jobs/tools.js\";\n\nconst expectedArtifactSchema = z.object({\n type: z\n .enum([\"file\", \"directory\", \"value\", \"unknown\"])\n .describe(\"What kind of artifact or result is expected\"),\n path: z\n .string()\n .optional()\n .describe(\"Concrete path when type is file or directory\"),\n description: z\n .string()\n .optional()\n .describe(\"Short natural-language description of the artifact\"),\n});\n\nconst expectedOutputSchema = z.union([\n z\n .string()\n .describe(\n 'Legacy format: file path, \"file:path\", \"value:description\", or natural-language description',\n ),\n z\n .object({\n artifacts: z\n .array(expectedArtifactSchema)\n .optional()\n .describe(\"Concrete artifacts or values the worker should produce\"),\n successCriteria: z\n .array(z.string())\n .optional()\n .describe(\"Observable conditions that mean the dispatch succeeded\"),\n verification: z\n .string()\n .optional()\n .describe(\"How the worker should verify the result\"),\n description: z\n .string()\n .optional()\n .describe(\n \"Short summary of the expected result when artifacts are not known upfront\",\n ),\n // Compatibility with an earlier structured shape.\n kind: z.enum([\"file\", \"files\", \"value\", \"unknown\"]).optional(),\n path: z.string().optional(),\n paths: z.array(z.string()).optional(),\n })\n .describe(\"Structured expected-output contract\"),\n]);\n\n/** Dispatch a worker to accomplish a task */\nexport const dispatch = tool({\n description:\n \"Dispatch a worker to accomplish a task. Workers are stateless and see only the instruction, input files, and tools. Call multiple times in one response for parallel execution.\",\n inputSchema: z.object({\n instruction: z.string().describe(\"What the worker should do\"),\n inputs: z\n .array(z.string())\n .optional()\n .describe(\"Artifact IDs to provide as context\"),\n expectedOutput: expectedOutputSchema.describe(\n \"Expected artifacts, success criteria, and verification contract\",\n ),\n tier: z.enum([\"fast\", \"medium\", \"strong\"]).optional()\n .describe(\"Worker model tier. 'fast' for simple lookups, 'medium' for normal multi-step work, and 'strong' for complex coding/debugging tasks. Omit tier for the default worker budget.\"),\n role: z.string().optional()\n .describe(\"Short semantic role label for this worker (e.g. 'Debugger', 'Researcher', 'Sysadmin'). Shown in the UI so the user understands what the worker is doing. 1-2 words max.\"),\n }),\n});\n\n/** Query project history for past decisions, approaches, or errors */\nexport const recall = tool({\n description:\n \"Query project history. Use to check past decisions, approaches, or errors.\",\n inputSchema: z.object({\n query: z\n .string()\n .describe(\"Natural language question about project history\"),\n }),\n});\n\nconst readEpisodeInputSchema = z.object({\n id: z.string().describe(\"Episode, tuple, or transcript ID to read\"),\n detail: z\n .enum([\"summary\", \"trace\", \"artifacts\"])\n .optional()\n .describe(\n \"summary is compact; trace hydrates the worker transcript; artifacts returns produced/observed artifact state\",\n ),\n artifactKey: z\n .string()\n .optional()\n .describe(\"Optional artifact handle to focus on when detail is artifacts\"),\n maxTokens: z\n .number()\n .optional()\n .describe(\"Approximate maximum tokens to return\"),\n});\n\n/** Read a prior episode from this task run */\nexport const readEpisode = tool({\n description:\n \"Read a prior episode from this task run. Default summary returns the compact projection; trace hydrates the full worker transcript when exact evidence is needed.\",\n inputSchema: readEpisodeInputSchema,\n});\n\n/** Worker-facing episode reader. Same task-run scope, PascalCase to match worker tools. */\nexport const ReadEpisode = tool({\n description:\n \"Read a prior episode from this task run. Use when the provided episode projection is insufficient and exact prior trace or artifacts are needed.\",\n inputSchema: readEpisodeInputSchema,\n});\n\n/** Request additional steps when running low on budget */\nexport const RequestMoreSteps = tool({\n description:\n \"Request additional steps when running low on budget. Call this when you need more steps to finish your work instead of stopping incomplete.\",\n inputSchema: z.object({\n reason: z.string().describe(\"Brief reason why you need more steps\"),\n additional: z.number().describe(\"Number of additional steps requested; 15 is the normal increment\"),\n }),\n});\n\n/** Mark task complete and return final output */\nexport const done = tool({\n description: \"Mark task complete and return final output.\",\n inputSchema: z.object({\n output: z.string().describe(\"Artifact ID or summary to return\"),\n }),\n});\n\n/** Write a note to the shared scratch pad. Future workers can find it. */\nexport const ScratchPad_Write = tool({\n description:\n \"Write a note to the shared scratch pad. Future workers will see it listed and can read it.\",\n inputSchema: z.object({\n key: z.string().describe(\"Note name (e.g., 'network-findings', 'port-scan-results')\"),\n content: z.string().max(100_000).describe(\"Note content (max 100KB)\"),\n }),\n});\n\n/** Read a note from the shared scratch pad. */\nexport const ScratchPad_Read = tool({\n description: \"Read a note from the shared scratch pad.\",\n inputSchema: z.object({\n key: z.string().describe(\"Note name to read\"),\n }),\n});\n\n/** List all notes in the shared scratch pad. */\nexport const ScratchPad_List = tool({\n description: \"List all notes in the shared scratch pad.\",\n inputSchema: z.object({}),\n});\n\n/** Show content directly to the user. Use for file contents, command output, or any text the user asked to see. */\nexport const Show = tool({\n description:\n \"Show content directly to the user's terminal. Use when the user asked to see a file, output, or result. The content is displayed immediately without waiting for your full response.\",\n inputSchema: z.object({\n content: z.string().describe(\"The content to display (file contents, command output, etc.)\"),\n language: z.string().optional().describe(\"Language hint for syntax highlighting (e.g. 'python', 'typescript')\"),\n }),\n});\n\n/** Dispatch a sub-worker from within a worker for localized subtasks */\nexport const SubDispatch = tool({\n description:\n \"Dispatch a sub-worker to handle a localized subtask. The sub-worker runs independently and returns a compact summary. Use for tasks you can't do directly but don't warrant returning to the orchestrator. Sub-dispatch is capped at 2 levels deep.\",\n inputSchema: z.object({\n instruction: z.string().describe(\"What the sub-worker should do\"),\n expectedOutput: expectedOutputSchema\n .optional()\n .describe(\"Expected output contract for the sub-worker\"),\n tier: z.enum([\"fast\", \"medium\", \"strong\"]).optional()\n .describe(\"Sub-worker model tier. 'fast' for simple lookups, 'medium' for normal work, 'strong' for complex tasks. Omit for default.\"),\n }),\n});\n\nexport const scratchPadTools = { ScratchPad_Write, ScratchPad_Read, ScratchPad_List };\n\nexport const orchestratorTools = { dispatch, recall, readEpisode, done };\nexport const arcWorkerTools = { ReadEpisode, Show, RequestMoreSteps, SubDispatch, ...scratchPadTools };\n\n// ── Tool factories: create Tool entries with execute closures ──\n\nexport interface SubDispatchResult {\n status: \"complete\" | \"incomplete\" | \"failed\" | \"interrupted\";\n summary: string;\n artifacts: ToolResultArtifact[];\n stepsUsed: number;\n}\n\nexport interface ArcToolDeps {\n readEpisode?: (args: ReadEpisodeArgs) => Promise<string>;\n historySearch?: (pattern: string, opts?: { conversationId?: string; maxResults?: number }) => GrepResult[];\n historyExpand?: (summaryId: string, options?: HistoryExpandOptions) => Promise<string>;\n historyOverview?: (summaryId?: string) => string;\n historyRead?: (conversationId: string, messageIndex: number, options?: HistoryReadOptions) => string | null;\n scratchPad?: ScratchPad;\n recall?: (query: string) => Promise<string>;\n askUser?: (question: string, options?: string[]) => Promise<string>;\n jobRegistry?: JobRegistry;\n /** Dispatch a sub-worker from within a worker. Returns a compact summary. */\n subDispatch?: (args: {\n instruction: string;\n expectedOutput?: ExpectedOutputContract;\n tier?: \"fast\" | \"medium\" | \"strong\";\n dispatchDepth: number;\n }) => Promise<SubDispatchResult>;\n}\n\nfunction ok(output: string): ToolResult { return { success: true, output }; }\nfunction err(error: string): ToolResult { return { success: false, output: \"\", error }; }\n\n// Cast helper for exactOptionalPropertyTypes compatibility\nconst s = (t: unknown): AnyTool => t as AnyTool;\n\n/** Build history tools — shared by both orchestrator and worker */\nfunction buildHistoryToolEntries(deps: ArcToolDeps): Map<string, Tool> {\n const tools = new Map<string, Tool>();\n\n tools.set(\"history_search\", {\n name: \"history_search\",\n schema: s(history_search),\n executionMode: \"parallel\",\n execute: async (_p, args) => {\n if (!deps.historySearch) return err(\"history_search unavailable\");\n const pattern = String(args.pattern ?? \"\");\n const conversationId = args.conversationId as string | undefined;\n const maxResults = (args.maxResults as number | undefined) ?? 20;\n const results = deps.historySearch(pattern, { ...(conversationId ? { conversationId } : {}), maxResults });\n return results.length === 0\n ? ok(`No matches for \"${pattern}\"`)\n : ok(results.map((r) => `[${r.conversationId}:${r.messageIndex}] ${r.matchContext}`).join(\"\\n\"));\n },\n });\n\n tools.set(\"history_expand\", {\n name: \"history_expand\",\n schema: s(history_expand),\n executionMode: \"parallel\",\n execute: async (_p, args) => {\n if (!deps.historyExpand) return err(\"history_expand unavailable\");\n return ok(await deps.historyExpand(String(args.summaryId ?? \"\"), {\n maxTokens: typeof args.maxTokens === \"number\" ? args.maxTokens : undefined,\n offset: typeof args.offset === \"number\" ? args.offset : undefined,\n limit: typeof args.limit === \"number\" ? args.limit : undefined,\n around: typeof args.around === \"string\" ? args.around : undefined,\n contextChars: typeof args.contextChars === \"number\" ? args.contextChars : undefined,\n summarize: typeof args.summarize === \"boolean\" ? args.summarize : undefined,\n }));\n },\n });\n\n tools.set(\"history_overview\", {\n name: \"history_overview\",\n schema: s(history_overview),\n executionMode: \"parallel\",\n execute: async (_p, args) => {\n if (!deps.historyOverview) return err(\"history_overview unavailable\");\n return ok(deps.historyOverview(args.summaryId as string | undefined));\n },\n });\n\n tools.set(\"history_read\", {\n name: \"history_read\",\n schema: s(history_read),\n executionMode: \"parallel\",\n execute: async (_p, args) => {\n if (!deps.historyRead) return err(\"history_read unavailable\");\n const conversationId = String(args.conversationId ?? \"\");\n const messageIndex = Number(args.messageIndex ?? 0);\n const content = deps.historyRead(conversationId, messageIndex, {\n offset: typeof args.offset === \"number\" ? args.offset : undefined,\n limit: typeof args.limit === \"number\" ? args.limit : undefined,\n around: typeof args.around === \"string\" ? args.around : undefined,\n contextChars: typeof args.contextChars === \"number\" ? args.contextChars : undefined,\n includeToolData: typeof args.includeToolData === \"boolean\" ? args.includeToolData : undefined,\n });\n return content === null\n ? ok(`No message found: ${conversationId}:${messageIndex}`)\n : ok(content);\n },\n });\n\n return tools;\n}\n\n/** Build worker-facing ARC tools with execute closures */\nexport function buildWorkerToolEntries(deps: ArcToolDeps): Map<string, Tool> {\n const tools = new Map<string, Tool>();\n\n tools.set(\"ReadEpisode\", {\n name: \"ReadEpisode\",\n schema: s(ReadEpisode),\n executionMode: \"parallel\",\n execute: async (_p, args) =>\n deps.readEpisode\n ? ok(await deps.readEpisode(normalizeReadEpisodeArgs(args)))\n : err(\"ReadEpisode unavailable\"),\n });\n\n tools.set(\"Show\", {\n name: \"Show\",\n schema: s(Show),\n execute: async () => ok(\"\"),\n });\n\n tools.set(\"ScratchPad_Write\", {\n name: \"ScratchPad_Write\",\n schema: s(ScratchPad_Write),\n execute: async (_p, args) => {\n if (!deps.scratchPad) return err(\"ScratchPad unavailable\");\n await deps.scratchPad.write(String(args.key ?? \"\"), String(args.content ?? \"\"));\n return ok(`Written to scratch pad: ${args.key}`);\n },\n });\n\n tools.set(\"ScratchPad_Read\", {\n name: \"ScratchPad_Read\",\n schema: s(ScratchPad_Read),\n executionMode: \"parallel\",\n execute: async (_p, args) => {\n if (!deps.scratchPad) return err(\"ScratchPad unavailable\");\n const content = await deps.scratchPad.read(String(args.key ?? \"\"));\n return content === null ? ok(`No note found with key: ${args.key}`) : ok(content);\n },\n });\n\n tools.set(\"ScratchPad_List\", {\n name: \"ScratchPad_List\",\n schema: s(ScratchPad_List),\n executionMode: \"parallel\",\n execute: async () => {\n if (!deps.scratchPad) return err(\"ScratchPad unavailable\");\n const keys = await deps.scratchPad.list();\n return keys.length === 0 ? ok(\"Scratch pad is empty.\") : ok(keys.join(\"\\n\"));\n },\n });\n\n // RequestMoreSteps — schema registered here; execution handled inline by worker.ts\n tools.set(\"RequestMoreSteps\", {\n name: \"RequestMoreSteps\",\n schema: s(RequestMoreSteps),\n execute: async () => err(\"RequestMoreSteps must be handled by the worker runtime\"),\n });\n\n // SubDispatch — dispatch a sub-worker for localized subtasks\n tools.set(\"SubDispatch\", {\n name: \"SubDispatch\",\n schema: s(SubDispatch),\n executionMode: \"serial\",\n execute: async (_provider, args, _workDir) => {\n if (!deps.subDispatch) return err(\"SubDispatch unavailable\");\n const instruction = String(args.instruction ?? \"\");\n const depth = Number(args._dispatchDepth ?? 0);\n if (depth >= 2) {\n return err(\"Maximum sub-dispatch depth reached. Use ScratchPad_Write to share findings with the orchestrator.\");\n }\n const result = await deps.subDispatch({\n instruction,\n ...(args.expectedOutput != null ? { expectedOutput: args.expectedOutput as ExpectedOutputContract } : {}),\n ...(args.tier != null ? { tier: args.tier as \"fast\" | \"medium\" | \"strong\" } : {}),\n dispatchDepth: depth,\n });\n const summary = `[sub-dispatch result] Status: ${result.status}\\nSummary: ${result.summary}\\nSteps used: ${result.stepsUsed}`;\n const artifactList = result.artifacts.length > 0\n ? `\\nArtifacts: ${result.artifacts.map((a) => a.uri).join(\", \")}`\n : \"\";\n return {\n success: result.status === \"complete\",\n output: summary + artifactList,\n ...(result.status !== \"complete\" ? { error: `Sub-worker ${result.status}: ${result.summary}` } : {}),\n artifacts: result.artifacts,\n };\n },\n });\n\n if (deps.askUser) {\n const askUserFn = deps.askUser;\n tools.set(\"AskUser\", {\n name: \"AskUser\",\n schema: s(tool({\n description: \"Ask the user a question and wait for their response. Use when plugin or task instructions require explicit user selection or approval.\",\n inputSchema: z.object({\n question: z.string().describe(\"The question to ask the user\"),\n options: z.array(z.string()).optional().describe(\"Optional choices to present\"),\n }),\n })),\n execute: async (_p, args) => {\n const question = String(args.question ?? \"\");\n const options = Array.isArray(args.options) ? args.options.map(String) : undefined;\n return ok(await askUserFn(question, options));\n },\n });\n }\n\n for (const [name, entry] of buildHistoryToolEntries(deps)) {\n tools.set(name, entry);\n }\n\n return tools;\n}\n\n/** Build orchestrator-facing ARC tools with execute closures (excludes dispatch/done which are control flow) */\nexport function buildOrchestratorToolEntries(deps: ArcToolDeps): Map<string, Tool> {\n const tools = new Map<string, Tool>();\n\n if (deps.recall) {\n const recallFn = deps.recall;\n tools.set(\"recall\", {\n name: \"recall\",\n schema: s(recall),\n execute: async (_p, args) => ok(await recallFn(String(args.query ?? \"\"))),\n });\n }\n\n if (deps.jobRegistry) {\n tools.set(\"jobs_status\", buildJobsStatusTool({ jobRegistry: deps.jobRegistry }));\n }\n\n if (deps.askUser) {\n const askUserFn = deps.askUser;\n tools.set(\"AskUser\", {\n name: \"AskUser\",\n schema: s(tool({\n description: \"Ask the user a clarifying question and wait for their response.\",\n inputSchema: z.object({\n question: z.string().describe(\"The question to ask the user\"),\n options: z.array(z.string()).optional().describe(\"Optional choices to present\"),\n }),\n })),\n execute: async (_p, args) => {\n const question = String(args.question ?? \"\");\n const options = Array.isArray(args.options) ? args.options.map(String) : undefined;\n return ok(await askUserFn(question, options));\n },\n });\n }\n\n for (const [name, entry] of buildHistoryToolEntries(deps)) {\n tools.set(name, entry);\n }\n\n return tools;\n}\n\n// ── Dispatch input normalization ──\n\n/** Normalize the model's freeform expectedOutput into a structured contract. */\nexport function normalizeExpectedOutput(input: unknown): ExpectedOutputContract {\n if (input && typeof input === \"object\" && !Array.isArray(input)) {\n const record = input as Record<string, unknown>;\n const artifacts = normalizeExpectedArtifacts(record);\n const successCriteria = Array.isArray(record.successCriteria)\n ? record.successCriteria.filter(\n (item): item is string => typeof item === \"string\",\n )\n : undefined;\n const verification =\n typeof record.verification === \"string\" ? record.verification : undefined;\n const description =\n typeof record.description === \"string\" ? record.description : undefined;\n\n return {\n artifacts:\n artifacts.length > 0\n ? artifacts\n : [{ type: \"unknown\", ...(description ? { description } : {}) }],\n ...(successCriteria && successCriteria.length > 0\n ? { successCriteria }\n : {}),\n ...(verification ? { verification } : {}),\n ...(description ? { description } : {}),\n };\n }\n\n const raw = typeof input === \"string\" ? input.trim() : \"\";\n if (!raw) {\n return {\n artifacts: [{ type: \"unknown\", description: \"unspecified output\" }],\n };\n }\n if (raw.startsWith(\"value:\")) {\n return {\n artifacts: [\n {\n type: \"value\",\n description: raw.slice(\"value:\".length).trim() || \"value output\",\n },\n ],\n description: raw,\n };\n }\n if (raw.startsWith(\"file:\")) {\n return {\n artifacts: [{ type: \"file\", path: raw.slice(\"file:\".length).trim() }],\n description: raw,\n };\n }\n if (looksLikePath(raw)) {\n return {\n artifacts: [{ type: \"file\", path: raw }],\n description: raw,\n };\n }\n return {\n artifacts: [{ type: \"unknown\", description: raw }],\n description: raw,\n };\n}\n\nfunction normalizeExpectedArtifacts(\n record: Record<string, unknown>,\n): ExpectedArtifact[] {\n const direct = Array.isArray(record.artifacts)\n ? record.artifacts.flatMap((item) => normalizeExpectedArtifact(item))\n : [];\n if (direct.length > 0) return direct;\n\n const kind = typeof record.kind === \"string\" ? record.kind : undefined;\n if (kind === \"file\" && typeof record.path === \"string\") {\n return [{ type: \"file\", path: record.path }];\n }\n if (kind === \"files\" && Array.isArray(record.paths)) {\n return record.paths\n .filter((path): path is string => typeof path === \"string\")\n .map((path) => ({ type: \"file\" as const, path }));\n }\n if (kind === \"value\") {\n return [\n {\n type: \"value\",\n ...(typeof record.description === \"string\"\n ? { description: record.description }\n : {}),\n },\n ];\n }\n if (kind === \"unknown\") {\n return [\n {\n type: \"unknown\",\n ...(typeof record.description === \"string\"\n ? { description: record.description }\n : {}),\n },\n ];\n }\n return [];\n}\n\nfunction normalizeExpectedArtifact(item: unknown): ExpectedArtifact[] {\n if (!item || typeof item !== \"object\" || Array.isArray(item)) return [];\n const record = item as Record<string, unknown>;\n const type = record.type;\n if (\n type !== \"file\" &&\n type !== \"directory\" &&\n type !== \"value\" &&\n type !== \"unknown\"\n )\n return [];\n return [\n {\n type,\n ...(typeof record.path === \"string\" ? { path: record.path } : {}),\n ...(typeof record.description === \"string\"\n ? { description: record.description }\n : {}),\n },\n ];\n}\n","/**\n * Tool registry: the Tool contract and schema extraction.\n *\n * Agent tool definitions (Bash, Read, Write, etc.) live in the consumer\n * (truecode). The harness only provides the Tool contract and helpers.\n */\nimport type { ToolProvider, ToolResult } from \"../interfaces/tool-provider\";\nimport type { AnyTool } from \"./shared-types\";\n\nexport type ToolExecutionMode = \"serial\" | \"parallel\";\n\n/** A registered tool: schema for the model, execute for the worker */\nexport interface Tool {\n name: string;\n /** AI SDK tool schema. Optional for ARC-internal tools (ReadEpisode, LCM_*, ScratchPad_*). */\n schema?: AnyTool | undefined;\n /** Worker execution mode for batched tool calls. Defaults to serial. */\n executionMode?:\n | ToolExecutionMode\n | ((args: Record<string, unknown>) => ToolExecutionMode);\n /** Execute using the ToolProvider. If not set, tool is handled externally (e.g. ARC tools). */\n execute?: (provider: ToolProvider, args: Record<string, unknown>, workDir: string) => Promise<ToolResult>;\n /**\n * When true, this tool may yield the worker loop if the operation is incomplete.\n * After execution, the worker checks if the target thread is still running.\n * If it is and `waitForThread` is available on the ToolProvider, the worker\n * suspends (does not count a step) until the thread completes.\n * The tool args must include a `threadId` field for the worker to track.\n */\n yieldsOnIncomplete?: boolean | undefined;\n}\n\n/** Get only the AI SDK tool schemas from a registry (skips tools without schemas) */\nexport function toolSchemasFromRegistry(\n registry: Map<string, Tool>,\n): Record<string, AnyTool> {\n const schemas: Record<string, AnyTool> = {};\n for (const [name, meta] of registry) {\n if (meta.schema) schemas[name] = meta.schema;\n }\n return schemas;\n}\n","import type { Tool } from 'ai';\n\n// ── Shared tool alias ──\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type AnyTool = Tool<any, any>;\n\n// ── Model factory ──\n\nimport type { LanguageModel } from 'ai';\n\nexport type ModelFactory = (modelId: string) => LanguageModel;\n\n// ── Tool choice ──\n\n/** Static tool choice value for LLM calls. */\nexport type ToolChoiceValue = 'auto' | 'required' | 'none' | { type: 'tool'; toolName: string };\n\n/**\n * Tool choice configuration — static value or per-turn callback.\n */\nexport type ToolChoiceConfig = ToolChoiceValue | ((turn: number) => ToolChoiceValue);\n\n/** Resolve a ToolChoiceConfig to a concrete value for a given turn. */\nexport function resolveToolChoice(config: ToolChoiceConfig | undefined, turn: number): ToolChoiceValue {\n if (!config) return 'auto';\n return typeof config === 'function' ? config(turn) : config;\n}\n","import { generateText, streamText, stepCountIs } from \"ai\";\nimport { anthropic as defaultAnthropicProvider } from \"@ai-sdk/anthropic\";\nimport type { ModelFactory, ToolChoiceConfig } from \"./arc/shared-types\";\nimport { resolveToolChoice } from \"./arc/shared-types\";\n\nimport type {\n AgentAction,\n AgentMessage,\n AgentLoop,\n AgentStreamEvent,\n StepUsage,\n ToolCallAction,\n ToolBatchAction,\n PrepareStepContext,\n PrepareStepResult,\n} from \"./agent/types\";\nimport { getTextContent } from \"./agent/types\";\nimport type { AnyTool } from \"./arc/shared-types\";\n\n// ── Convert AgentMessage[] to Vercel AI SDK ModelMessage[] ──\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype ModelMessage = any;\n\nfunction toModelMessages(messages: AgentMessage[]): ModelMessage[] {\n const out: ModelMessage[] = [];\n\n for (const msg of messages) {\n if (msg.role === \"system\") {\n // System messages are always text\n out.push({\n role: \"system\",\n content:\n typeof msg.content === \"string\"\n ? msg.content\n : getTextContent(msg.content),\n });\n continue;\n }\n\n if (msg.role === \"user\") {\n // Pass through ContentPart[] directly for multimodal (images)\n out.push({ role: \"user\", content: msg.content });\n continue;\n }\n\n if (msg.role === \"assistant\") {\n const textContent =\n typeof msg.content === \"string\"\n ? msg.content\n : getTextContent(msg.content);\n if (msg.toolCalls && msg.toolCalls.length > 0) {\n // Structured assistant message with tool calls\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const parts: any[] = [];\n if (textContent) {\n parts.push({ type: \"text\", text: textContent });\n }\n for (const tc of msg.toolCalls) {\n parts.push({\n type: \"tool-call\",\n toolCallId: tc.toolCallId,\n toolName: tc.toolName,\n input: tc.args,\n ...(tc.providerMetadata ? { providerOptions: tc.providerMetadata } : {}),\n });\n }\n out.push({ role: \"assistant\", content: parts });\n } else {\n out.push({ role: \"assistant\", content: textContent });\n }\n continue;\n }\n\n if (msg.role === \"tool\") {\n if (msg.toolResults && msg.toolResults.length > 0) {\n // Structured tool result message\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const parts: any[] = msg.toolResults.map((tr) => ({\n type: \"tool-result\",\n toolCallId: tr.toolCallId,\n toolName: tr.toolName,\n output: tr.isError\n ? { type: \"error-text\", value: tr.result }\n : { type: \"text\", value: tr.result },\n }));\n out.push({ role: \"tool\", content: parts });\n } else {\n // Fallback: no structured fields — wrap as user message\n const textContent =\n typeof msg.content === \"string\"\n ? msg.content\n : getTextContent(msg.content);\n out.push({ role: \"user\", content: `[Tool result]: ${textContent}` });\n }\n continue;\n }\n }\n\n return out;\n}\n\n/** A system prompt block with optional Anthropic cache control. */\nexport interface SystemPromptBlock {\n text: string;\n cacheControl?: { type: \"ephemeral\" };\n}\n\nexport interface VercelAgentLoopConfig {\n model?: string;\n /** System prompt — string or structured blocks with cache control markers. */\n systemPrompt?: string | SystemPromptBlock[];\n createModel?: ModelFactory;\n /** @deprecated Prefer createModel. */\n apiKey?: string;\n /** Custom tool definitions. If provided, replaces built-in agentTools for LLM calls. */\n tools?: Record<string, AnyTool>;\n /** Tool choice for LLM calls. Supports per-turn callbacks. Default: 'auto'. */\n toolChoice?: ToolChoiceConfig;\n /** Provider options passed to generateText/streamText (e.g. anthropic thinking config). */\n providerOptions?: Record<string, unknown>;\n /** Per-step callback to override model and active tools before each LLM call. */\n prepareStep?: (context: PrepareStepContext) => PrepareStepResult | void;\n}\n\nexport class VercelAgentLoop implements AgentLoop {\n private readonly model: string;\n private readonly createModel: ModelFactory;\n private readonly systemPrompt: string | SystemPromptBlock[];\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly tools: Record<string, AnyTool>;\n private readonly validToolNames: Set<string>;\n private readonly toolChoiceConfig: ToolChoiceConfig | undefined;\n private readonly providerOptions: Record<string, unknown> | undefined;\n private readonly prepareStep: VercelAgentLoopConfig[\"prepareStep\"];\n /** Track tool names called across steps for prepareStep context. */\n private toolCallHistory: string[] = [];\n private step = 0;\n\n /** Last step's token usage — read after nextAction/streamAction completes. */\n public lastUsage: StepUsage | undefined;\n\n constructor(config: VercelAgentLoopConfig = {}) {\n this.toolChoiceConfig = config.toolChoice;\n this.model =\n config.model ?? process.env.HARNESS_MODEL ?? \"claude-sonnet-4-5\";\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.createModel = config.createModel ?? defaultAnthropicProvider;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n this.tools = config.tools ?? ({} as any);\n this.validToolNames = new Set(Object.keys(this.tools));\n this.providerOptions = config.providerOptions;\n this.prepareStep = config.prepareStep;\n this.systemPrompt =\n config.systemPrompt ??\n [\n \"You are an agent that accomplishes tasks using tools.\",\n \"You may call multiple independent tools in a single turn.\",\n \"Use tools when shell or filesystem access is required.\",\n \"Use TextEditor for file changes. Use ReadOnlyBash only for read-only inspection or verification commands.\",\n \"Avoid rewriting the same file multiple times unless a previous run returned an error that requires a fix.\",\n \"When the task is fully complete, respond with a brief text summary (no tool call).\",\n ].join(\" \");\n\n if (config.apiKey) {\n process.env.ANTHROPIC_API_KEY = config.apiKey;\n }\n }\n\n /** Build the `system` parameter for generateText/streamText. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private buildSystemParam(): any {\n if (typeof this.systemPrompt === \"string\") return this.systemPrompt;\n // Structured blocks → AI SDK v6 SystemModelMessage format\n // OpenRouter uses the same cache_control format for all providers (Anthropic, Gemini, GLM, etc.)\n return this.systemPrompt.map((block) => ({\n role: \"system\" as const,\n content: block.text,\n ...(block.cacheControl\n ? {\n providerOptions: {\n anthropic: { cacheControl: block.cacheControl },\n openrouter: { cacheControl: block.cacheControl },\n },\n }\n : {}),\n }));\n }\n\n /** Resolve model + tools for this step via prepareStep callback. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private resolveStep(stepNumber: number): {\n model: string;\n tools: Record<string, any>;\n validNames: Set<string>;\n } {\n if (!this.prepareStep) {\n return {\n model: this.model,\n tools: this.tools,\n validNames: this.validToolNames,\n };\n }\n const overrides = this.prepareStep({\n stepNumber,\n toolCallHistory: this.toolCallHistory,\n });\n if (!overrides) {\n return {\n model: this.model,\n tools: this.tools,\n validNames: this.validToolNames,\n };\n }\n const model = overrides.model ?? this.model;\n let tools: Record<string, AnyTool> = this.tools;\n let validNames = this.validToolNames;\n if (overrides.activeTools) {\n const allowed = new Set(overrides.activeTools);\n tools = Object.fromEntries(\n Object.entries(this.tools).filter(([k]) => allowed.has(k)),\n );\n validNames = new Set(Object.keys(tools));\n }\n return { model, tools, validNames };\n }\n\n /** Extract StepUsage from AI SDK usage object. */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private static extractUsage(usage: any): StepUsage | undefined {\n if (!usage) return undefined;\n const u: StepUsage = {};\n if (usage.inputTokens != null) u.inputTokens = usage.inputTokens;\n if (usage.outputTokens != null) u.outputTokens = usage.outputTokens;\n // AI SDK v6 nests cache/reasoning under inputTokenDetails/outputTokenDetails\n const inputDetails = usage.inputTokenDetails ?? usage;\n const outputDetails = usage.outputTokenDetails ?? usage;\n if (inputDetails.cacheReadTokens != null)\n u.cacheReadTokens = inputDetails.cacheReadTokens;\n if (inputDetails.cacheWriteTokens != null)\n u.cacheWriteTokens = inputDetails.cacheWriteTokens;\n if (outputDetails.reasoningTokens != null)\n u.reasoningTokens = outputDetails.reasoningTokens;\n return Object.keys(u).length > 0 ? u : undefined;\n }\n\n async nextAction(messages: AgentMessage[], signal?: AbortSignal): Promise<AgentAction> {\n const currentStep = this.step++;\n\n const { model, tools, validNames } = this.resolveStep(currentStep + 1);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const result = await (generateText as any)({\n model: this.createModel(model),\n tools,\n toolChoice: resolveToolChoice(this.toolChoiceConfig, currentStep),\n system: this.buildSystemParam(),\n messages: toModelMessages(messages),\n stopWhen: stepCountIs(1),\n ...(signal ? { abortSignal: signal } : {}),\n ...(this.providerOptions\n ? { providerOptions: this.providerOptions }\n : {}),\n });\n\n // Capture usage\n this.lastUsage = VercelAgentLoop.extractUsage(result.usage);\n\n // If the model made tool calls, extract them\n if (result.toolCalls && result.toolCalls.length > 0) {\n const publicRationale = result.text?.trim() || undefined;\n const validCalls: ToolCallAction[] = [];\n for (const call of result.toolCalls) {\n const name = call.toolName;\n if (validNames.has(name)) {\n const toolCallId = (call as { toolCallId?: string }).toolCallId;\n const providerMetadata =\n (call as { providerMetadata?: Record<string, unknown> })\n .providerMetadata ??\n (call as { experimental_providerMetadata?: Record<string, unknown> })\n .experimental_providerMetadata;\n validCalls.push({\n type: \"tool\",\n name,\n args: (call as { input: Record<string, unknown> }).input,\n ...(toolCallId != null ? { toolCallId } : {}),\n ...(providerMetadata != null ? { providerMetadata } : {}),\n });\n this.toolCallHistory.push(name);\n }\n }\n\n if (validCalls.length === 0) {\n return {\n type: \"final\",\n content: `Unknown tool: ${result.toolCalls[0]!.toolName}`,\n };\n }\n\n // Single call → backward-compatible ToolCallAction\n if (validCalls.length === 1) {\n const [call] = validCalls;\n return publicRationale ? { ...call!, publicRationale } : call!;\n }\n\n // Multiple calls → ToolBatchAction\n return {\n type: \"tool_batch\",\n calls: validCalls,\n ...(publicRationale ? { publicRationale } : {}),\n } satisfies ToolBatchAction;\n }\n\n // No tool call — model responded with text (task complete)\n const text = result.text?.trim();\n return { type: \"final\", content: text || \"Done.\" };\n }\n\n async *streamAction(\n messages: AgentMessage[],\n ): AsyncGenerator<AgentStreamEvent> {\n const currentStep = this.step++;\n\n const { model, tools, validNames } = this.resolveStep(currentStep + 1);\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const result = (streamText as any)({\n model: this.createModel(model),\n tools,\n toolChoice: resolveToolChoice(this.toolChoiceConfig, currentStep),\n system: this.buildSystemParam(),\n messages: toModelMessages(messages),\n stopWhen: stepCountIs(1),\n ...(this.providerOptions\n ? { providerOptions: this.providerOptions }\n : {}),\n });\n\n const toolArgs = new Map<string, string>();\n\n for await (const part of result.fullStream) {\n if (part.type === \"text-delta\") {\n yield { type: \"text_delta\", text: part.text };\n }\n if (part.type === \"tool-input-start\") {\n toolArgs.set(part.id, \"\");\n }\n if (part.type === \"tool-input-delta\") {\n toolArgs.set(part.id, (toolArgs.get(part.id) ?? \"\") + part.delta);\n }\n if (part.type === \"tool-call\") {\n const name = part.toolName;\n if (validNames.has(name)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const p = part as any;\n const args: Record<string, unknown> = p.args ?? p.input ?? {};\n const toolCallId: string | undefined = p.toolCallId;\n yield {\n type: \"tool_start\",\n name,\n args,\n ...(toolCallId != null ? { toolCallId } : {}),\n };\n this.toolCallHistory.push(name);\n }\n }\n }\n\n // Capture usage after stream completes\n try {\n const usage = await result.usage;\n this.lastUsage = VercelAgentLoop.extractUsage(usage);\n } catch {\n this.lastUsage = undefined;\n }\n }\n}\n","import { HarnessTelemetry } from './otel';\n\nexport function recordToolCallDuration(\n telemetry: HarnessTelemetry | undefined,\n toolName: string,\n durationMs: number,\n success: boolean\n): void {\n if (!telemetry?.isEnabled()) return;\n telemetry.counter('tool_calls_total', 1, { tool: toolName, success });\n telemetry.histogram('tool_call_duration_ms', durationMs, { tool: toolName, success });\n}\n\nexport function recordAgentStep(telemetry: HarnessTelemetry | undefined): void {\n if (!telemetry?.isEnabled()) return;\n telemetry.counter('agent_steps_total', 1);\n}\n\nexport function recordCompaction(telemetry: HarnessTelemetry | undefined): void {\n if (!telemetry?.isEnabled()) return;\n telemetry.counter('compactions_total', 1);\n}\n\nexport function recordAgentError(telemetry: HarnessTelemetry | undefined): void {\n if (!telemetry?.isEnabled()) return;\n telemetry.counter('agent_errors_total', 1);\n}\n","export const ORCHESTRATOR_SYSTEM_PROMPT = `You accomplish tasks by dispatching workers and synthesizing results.\n\nAddress the human in second person (\"you\", \"your\"). Never refer to them as \"the user\" in your rationales, reasoning, or final replies — you are in direct conversation.\n\nPlan first. If the answer is already in context or from your knowledge, write the full user-facing answer and pass it as done(output) verbatim. Otherwise TodoWrite a 2-5 step plan, then dispatch the smallest worker that makes progress on the current step. Revise todos as work lands.\n\nDispatch workers for anything requiring tool use. Answer directly with done for questions you can answer from knowledge or prior results.\n\nYou can dispatch multiple workers in a single turn — they run in parallel. Two strategies:\n- Decompose: different subtasks in parallel, collate results.\n- Explore: same problem, different approaches, take the best.\n\nEach dispatch accepts an optional tier parameter:\n- tier: \"fast\" — cheap, fast model for simple lookups, file reads, searches, and summarization.\n- tier: \"medium\" — balanced model/budget for normal multi-step work.\n- tier: \"strong\" — full-capability model/budget for coding, debugging, and complex reasoning.\nOmit tier for the default worker budget. Use fast only when the task is straightforward and doesn't require deep reasoning.\n\nEach dispatch also accepts an optional role parameter — a 1-2 word semantic label that describes what the worker is doing (e.g. \"Debugger\", \"Researcher\", \"Sysadmin\", \"DocReader\", \"Tester\"). This is shown in the UI so the user understands what each worker is responsible for. Always set role when dispatching.\n\nWorkers are stateless — they see only their instruction, input artifacts, and tools. They also have access to history and scratch pad tools, so you don't need to repeat everything.\n\n## Worker Execution Model\n\nWorkers use event-driven execution for long-running operations:\n- Workers start background commands (SSH, builds, tests) with StartCommand, then yield via CheckCommand. Yielding does NOT consume steps — the worker suspends and resumes automatically when the command completes.\n- You do NOT need to dispatch continuation workers because a worker is \"waiting\" — yielding workers hold their slot but don't waste steps or tokens.\n\nWorkers can also delegate localized subtasks to sub-workers using the SubDispatch tool:\n- SubDispatch is useful when a worker encounters a focused sub-problem (e.g., read and summarize a complex file, run a targeted search) that doesn't warrant returning to the orchestrator.\n- Sub-workers receive a compact summary, not the full transcript, so they don't bloat the parent worker's context.\n- Sub-dispatch depth is capped at 2 levels (worker → sub-worker → sub-sub-worker). Deeper nesting returns an error.\n- You do NOT need to change your dispatch strategy — SubDispatch is a worker-level optimization that runs within the worker's existing step budget.\n\n## Context Management\n\nOlder context gets compacted into summaries. Use history_search to find specific prior results, history_read for full content, and history_expand to restore compacted summaries.\n\nBefore dispatching, check what prior workers attempted. When a worker fails, examine the failure mode before deciding what's next:\n- Environmental failures — model timeouts, rate limits, provider errors, \"operation aborted due to timeout\" — are not solvable by rewording the dispatch. Do not redispatch the same task more than once for these; call done with a clear error so the user can switch model/tier or retry later.\n- Content failures — worker couldn't find what it needed, hit a bug, ran out of steps — may be solvable by a meaningfully different approach: different decomposition, different tool angle, smaller scope, different tier. Rewording the same instruction with stronger language is not a different approach.\n\nIf 2+ dispatches return the same failure mode in a row, treat it as a signal the current strategy is wrong, not a reason to try again with the same idea.\n\nBefore each tool call, write a concise first-person public rationale. Start with an \"I\" statement, such as \"I\", \"I'm\", or \"I'll\", and explain why the action is useful for the user's task. Do not expose hidden chain-of-thought, and do not merely restate the tool call or worker instruction. When dispatching workers, do NOT repeat the raw instructions you are sending to them. Instead, provide a short summary in the public rationale formatted like: \"I am dispatching [N] workers to do this - a) ..., b) ..., c) ...\".\n\nWhen a worker confirms success (e.g. \"all criteria met\"), call done. Do not dispatch additional verification workers unless the first one found actual problems.\n\nJobs may be running in the background. Each turn includes a \"Live Jobs\" block and a jobs_status tool. A [job event] line indicates a job reached a terminal state or produced notable output — decide whether to act on it, note it for the user, or continue planned work. A [user interjection] line is a user message delivered mid-task — triage before resuming planned work.`;\n\nexport const WORKER_SYSTEM_PROMPT = `Complete the instruction using the available tools. Workers are stateless and cannot interact with the user — assume reasonable defaults and proceed.\n\nBefore starting, check ScratchPad_List for notes from prior workers and use history_search to find relevant prior attempts.\n\nIf you are running low on steps, call RequestMoreSteps with additional=15 to extend your budget and keep working. This preserves your full context — far better than stopping and forcing a new worker to start over. Only use ScratchPad_Write as a last resort when at the absolute step ceiling.\n\nBefore finishing, verify your work against the expected output contract. If verification fails, fix it.\n\nBefore each tool call, write a concise first-person public rationale. Start with an \"I\" statement, such as \"I\", \"I'm\", or \"I'll\", and explain why the action is useful for the user's task. Do not expose hidden chain-of-thought, and do not merely restate the tool call or worker instruction.\n\n## Background Commands & Yielding\n\nFor commands likely to run longer than ~20 seconds (SSH, builds, full test suites, long-running processes), use StartCommand instead of Bash. StartCommand returns immediately with a thread ID.\n\nWhen you need the result of a background thread, call CheckCommand with the thread ID. The harness will automatically yield your execution and resume you when the thread completes — you will NOT waste steps while waiting. You do not need to poll repeatedly.\n\nThis means:\n- Start long-running work with StartCommand, then continue with other tasks if possible\n- When you need the result, call CheckCommand once — you'll be resumed with the completion result\n- Yielding does NOT cost steps — you are only charged for the step where you called CheckCommand, not for the wait time\n- If you have other work to do while waiting, do it before calling CheckCommand\n\n## Sub-Dispatch\n\nYou can delegate focused subtasks to a sub-worker using the SubDispatch tool. This is useful when you encounter a localized problem that doesn't warrant returning to the orchestrator.\n\nSubDispatch accepts: instruction, expectedOutput, and an optional tier (fast/medium/strong).\n\nImportant constraints:\n- Sub-dispatch depth is capped at 2 levels. If you are already a sub-worker at depth 2, SubDispatch will return an error — use ScratchPad_Write instead.\n- Sub-workers run within your step budget. Their steps are separate from yours but count against the total dispatch allocation.\n- You will receive a compact summary of the sub-worker's result, not its full transcript. The summary includes status, key findings, and artifact paths.\n- Do not use SubDispatch for trivial tasks that you can do directly — only use it when the subtask is genuinely complex enough to benefit from a separate model call.\n\n## Escalation\n\nIf the user's message or your instruction fundamentally changes the task scope or requires task-level replanning that you cannot handle, return a concise final response beginning with NEEDS_ORCHESTRATOR: and explain what decision is needed.`;\n","import type { ToolCallAction } from \"../agent/types\";\n\n/**\n * Parse an assistant response that lacks structured tool calls and pull out any\n * \"textual\" tool calls the model wrote as inline JSON. This is a defensive\n * rescue for models (notably moonshotai/kimi-k2.6) that occasionally emit\n * calls as prose like `Read{\"path\":\"/foo\"}` or `Read({\"path\":\"/foo\"})`\n * instead of using the tool-call API — otherwise the agent loop would mark\n * the turn \"final\" and exit prematurely.\n *\n * Returns rescued calls in source order. Tool names not in\n * `availableToolNames`, malformed JSON, or unbalanced braces are ignored.\n */\nexport function rescueTextualToolCalls(\n text: string,\n availableToolNames: Iterable<string>,\n): ToolCallAction[] {\n const names = [...availableToolNames].filter(Boolean);\n if (names.length === 0 || !text) return [];\n\n const nameSet = new Set(names);\n const escaped = names.map(escapeRegex).join(\"|\");\n const pattern = new RegExp(`\\\\b(${escaped})\\\\s*\\\\(?\\\\s*\\\\{`, \"g\");\n\n const rescued: ToolCallAction[] = [];\n let match: RegExpExecArray | null;\n while ((match = pattern.exec(text)) !== null) {\n const toolName = match[1]!;\n if (!nameSet.has(toolName)) continue;\n const openIdx = match.index + match[0].length - 1;\n const closeIdx = findMatchingBrace(text, openIdx);\n if (closeIdx === -1) continue;\n const jsonStr = text.slice(openIdx, closeIdx + 1);\n let parsed: unknown;\n try {\n parsed = JSON.parse(jsonStr);\n } catch {\n continue;\n }\n if (parsed === null || typeof parsed !== \"object\" || Array.isArray(parsed)) {\n continue;\n }\n rescued.push({\n type: \"tool\",\n name: toolName,\n args: parsed as Record<string, unknown>,\n });\n pattern.lastIndex = closeIdx + 1;\n }\n return rescued;\n}\n\n/**\n * Return the text that appears before the first rescued call — useful as the\n * publicRationale when promoting a \"final\" action to a tool batch.\n */\nexport function extractRationaleBefore(\n text: string,\n toolName: string,\n): string {\n const pattern = new RegExp(`\\\\b${escapeRegex(toolName)}\\\\s*\\\\(?\\\\s*\\\\{`);\n const match = text.match(pattern);\n if (!match || match.index === undefined) return \"\";\n return text.slice(0, match.index).trim();\n}\n\nfunction findMatchingBrace(text: string, openIdx: number): number {\n let depth = 1;\n let i = openIdx + 1;\n let inString = false;\n let escape = false;\n while (i < text.length && depth > 0) {\n const c = text[i]!;\n if (escape) {\n escape = false;\n } else if (inString) {\n if (c === \"\\\\\") escape = true;\n else if (c === '\"') inString = false;\n } else {\n if (c === '\"') inString = true;\n else if (c === \"{\") depth++;\n else if (c === \"}\") depth--;\n }\n i++;\n }\n return depth === 0 ? i - 1 : -1;\n}\n\nfunction escapeRegex(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n","import type { DispatchTier } from \"./types\";\n\n/** Default budget for dispatches that do not request a tier. */\nexport const DEFAULT_MAX_STEPS_PER_WORKER = 30;\n\n/** Per-tier initial budgets. Strong is intentionally larger for implementation loops. */\nexport const DEFAULT_WORKER_STEP_BUDGETS: Record<DispatchTier, number> = {\n fast: 12,\n medium: 24,\n strong: 40,\n};\n\n/** Hard ceiling on worker steps after RequestMoreSteps extensions. */\nexport const ABSOLUTE_MAX_WORKER_STEPS = 60;\n\n/** Recommended extension size when workers need to keep their current context. */\nexport const REQUEST_MORE_STEPS_INCREMENT = 15;\n","import type {\n AgentAction,\n AgentMessage,\n ToolCallAction,\n ToolBatchAction,\n ToolResultInfo,\n} from \"../agent/types\";\nimport type {\n ToolResult,\n ToolResultArtifact,\n} from \"../interfaces/tool-provider\";\nimport {\n VercelAgentLoop,\n SystemPromptBlock,\n} from \"../vercel-agent-loop\";\nimport { recordAgentStep, recordToolCallDuration } from \"../observability/metrics\";\nimport { traceStep } from \"../observability/tracing\";\nimport type { AnyTool } from \"./shared-types\";\nimport type {\n ExpectedOutputContract,\n RunWorkerConfig,\n WorkerResult,\n} from \"./types\";\nimport { cloneForTrace } from \"./trace-utils\";\nimport { WORKER_SYSTEM_PROMPT } from \"./prompts\";\nimport { rescueTextualToolCalls, extractRationaleBefore } from \"./rescue-textual-tools\";\nimport {\n ABSOLUTE_MAX_WORKER_STEPS,\n REQUEST_MORE_STEPS_INCREMENT,\n} from \"./worker-budgets\";\n\n/** Hard ceiling on worker steps (initial + extensions via RequestMoreSteps). Must match dispatcher. */\nconst ABSOLUTE_MAX_STEPS = ABSOLUTE_MAX_WORKER_STEPS;\n\ninterface ExecutedToolResult extends ToolResultInfo {\n actionLine: string;\n artifact?: ToolResultArtifact | undefined;\n}\n\n/** Inline arg summary: slice each arg value to 200 chars, join with comma */\nfunction summarizeArgs(args: Record<string, unknown>): string {\n return Object.values(args)\n .map(stringifyArgValue)\n .filter((s) => s !== \"\")\n .join(\", \");\n}\n\nfunction stringifyArgValue(v: unknown): string {\n if (v === null || v === undefined) return \"\";\n if (typeof v === \"string\") return v.slice(0, 200);\n if (typeof v === \"number\" || typeof v === \"boolean\") return String(v);\n if (Array.isArray(v)) return v.length === 0 ? \"\" : `[${v.length}]`;\n if (typeof v === \"object\") return \"\";\n return String(v).slice(0, 200);\n}\n\n/**\n * Run a stateless worker with the given configuration.\n * Workers see only: instruction, input artifacts, and tools.\n */\nexport async function runWorker(\n config: RunWorkerConfig,\n): Promise<WorkerResult> {\n const {\n task,\n instruction,\n expectedOutput,\n lcmContext,\n inputArtifacts,\n tools,\n toolRegistry,\n maxSteps,\n toolProvider,\n createModel,\n model,\n workDir,\n signal,\n systemPromptPrefix,\n systemPromptSuffix,\n providerOptions,\n orchestratorContext,\n tupleId,\n onProgress,\n onTrace,\n hookRunner,\n telemetry,\n dispatchDepth = 0,\n resumeMessages,\n stepsAlreadyUsed = 0,\n modelCallTimeoutMs = 180_000,\n } = config;\n const traceTupleId = tupleId ?? \"worker\";\n\n // Build system prompt with cache_control so the static portion is cached across dispatches\n const systemPrompt: SystemPromptBlock[] = [];\n\n if (systemPromptPrefix) {\n systemPrompt.push({\n text: systemPromptPrefix,\n cacheControl: { type: \"ephemeral\" },\n });\n }\n systemPrompt.push({\n text: WORKER_SYSTEM_PROMPT,\n cacheControl: { type: \"ephemeral\" },\n });\n if (systemPromptSuffix) {\n systemPrompt.push({\n text: systemPromptSuffix,\n cacheControl: { type: \"ephemeral\" },\n });\n }\n\n // Build initial user message with instruction, context, and inputs.\n // Skipped entirely when resuming — the worker already has this context in its messages.\n let userContent = \"\";\n\n if (!resumeMessages) {\n // Include the orchestrator's public rationale as context.\n if (orchestratorContext) {\n userContent += `## Orchestrator Context\\n${orchestratorContext}\\n\\n`;\n }\n\n if (task) {\n userContent += `## Original Task\\n${task}\\n\\n`;\n }\n\n userContent += [\n `## Workspace`,\n `Current workspace root: ${workDir}`,\n `## Worker Budget`,\n `max_steps: ${maxSteps}`,\n \"\",\n ].join(\"\\n\");\n\n if (expectedOutput) {\n userContent += `## Expected Output Contract\\n${formatExpectedOutput(expectedOutput)}\\n\\n`;\n }\n\n // Use LCM-assembled context (structured fields avoid fragile string matching)\n if (lcmContext) {\n if (lcmContext.frontierText) {\n userContent += `${lcmContext.frontierText}\\n\\n`;\n }\n if (lcmContext.ghostCueText) {\n userContent += `${lcmContext.ghostCueText}\\n\\n`;\n }\n }\n\n userContent += `## Instruction\\n${instruction}`;\n if (inputArtifacts.size > 0) {\n userContent += \"\\n\\n## Input Files\\n\";\n for (const [id, content] of inputArtifacts) {\n userContent += `\\n### ${id}\\n\\`\\`\\`\\n${content}\\n\\`\\`\\`\\n`;\n }\n }\n }\n\n // tools already includes agent tools + ARC framework tools (merged by the loop)\n const allTools: Record<string, AnyTool> = tools;\n const loop = new VercelAgentLoop({\n model,\n createModel,\n systemPrompt,\n tools: allTools,\n ...(providerOptions ? { providerOptions } : {}),\n });\n\n // When resuming from an interrupted worker, reuse the existing conversation\n // and just append the user's message — no fresh instruction/context needed.\n const messages: AgentMessage[] = resumeMessages\n ? [...resumeMessages, { role: \"user\" as const, content: instruction }]\n : [{ role: \"user\" as const, content: userContent }];\n\n let stepsUsed = stepsAlreadyUsed;\n let effectiveMaxSteps = resumeMessages\n ? maxSteps + stepsAlreadyUsed // total budget = remaining + already used\n : maxSteps;\n let extensionCount = 0;\n let completionGraceUsed = false;\n let lastMessage = \"\";\n let output: string | null = null;\n let status: WorkerResult[\"status\"] = \"incomplete\";\n const actions: string[] = [];\n const artifacts: ToolResultArtifact[] = [];\n\n while (stepsUsed < effectiveMaxSteps) {\n if (signal?.aborted) {\n status = \"interrupted\";\n lastMessage = \"Worker interrupted by user\";\n break;\n }\n\n const step = stepsUsed + 1;\n const modelStartedAt = Date.now();\n recordAgentStep(telemetry);\n onProgress?.({ kind: \"model_start\", step, maxSteps: effectiveMaxSteps });\n onTrace?.({\n scope: \"worker\",\n phase: \"model_input\",\n tupleId: traceTupleId,\n step,\n model,\n system: systemPrompt.map((b) => b.text).join(\"\\n\\n\"),\n messages: cloneForTrace(messages),\n toolNames: Object.keys(allTools),\n });\n\n let action: AgentAction;\n try {\n const callSignals: AbortSignal[] = [AbortSignal.timeout(modelCallTimeoutMs)];\n if (signal) callSignals.push(signal);\n const callSignal = AbortSignal.any(callSignals);\n action = await traceStep(\n telemetry,\n \"arc.worker.model\",\n {\n tupleId: traceTupleId,\n step,\n model,\n messages: messages.length,\n tools: Object.keys(allTools).length,\n },\n () => loop.nextAction(messages, callSignal),\n );\n } catch (error) {\n // Turn interrupted — return gracefully instead of crashing\n if (signal?.aborted) {\n status = \"interrupted\";\n lastMessage = \"Worker interrupted by user\";\n break;\n }\n onProgress?.({\n kind: \"model_error\",\n step,\n durationMs: Date.now() - modelStartedAt,\n error: summarizeError(error),\n });\n throw error;\n }\n\n stepsUsed++;\n\n // Defensive rescue: some models (notably moonshotai/kimi-k2.6) occasionally\n // emit tool calls as prose JSON (`Read{\"path\":\"/x\"}`) instead of using the\n // tool-call API. Without this the worker would treat the text as \"final\"\n // and exit prematurely. If every call in the text resolves to a known\n // tool, promote the action to a tool batch and keep going.\n if (action.type === \"final\") {\n const rescued = rescueTextualToolCalls(action.content, Object.keys(allTools));\n if (rescued.length > 0) {\n const rationale = extractRationaleBefore(action.content, rescued[0]!.name);\n onTrace?.({\n scope: \"worker\",\n phase: \"textual_tool_call_rescued\",\n tupleId: traceTupleId,\n step,\n toolNames: rescued.map((c) => c.name),\n });\n action = {\n type: \"tool_batch\",\n calls: rescued,\n ...(rationale ? { publicRationale: rationale } : {}),\n };\n }\n }\n\n onTrace?.({\n scope: \"worker\",\n phase: \"model_output\",\n tupleId: traceTupleId,\n step,\n action: cloneForTrace(action),\n });\n const actionToolNames = toolNamesForAction(action);\n const publicRationale = publicRationaleForAction(action);\n const missingPublicRationale =\n actionToolNames.length > 0 && !publicRationale;\n if (missingPublicRationale) {\n onTrace?.({\n scope: \"worker\",\n phase: \"public_rationale_missing\",\n tupleId: traceTupleId,\n step,\n toolNames: actionToolNames,\n });\n }\n onProgress?.({\n kind: \"model_complete\",\n step,\n actionType: action.type,\n durationMs: Date.now() - modelStartedAt,\n ...(actionToolNames.length > 0 ? { toolNames: actionToolNames } : {}),\n ...(publicRationale ? { publicRationale } : {}),\n ...(missingPublicRationale ? { missingPublicRationale } : {}),\n ...(action.type === \"final\"\n ? { outputSummary: summarizeText(action.content, 240) }\n : {}),\n ...(loop.lastUsage?.inputTokens != null ? { inputTokens: loop.lastUsage.inputTokens } : {}),\n ...(loop.lastUsage?.outputTokens != null ? { outputTokens: loop.lastUsage.outputTokens } : {}),\n });\n\n if (action.type === \"final\") {\n // Worker completed with text response\n messages.push({ role: \"assistant\", content: action.content });\n lastMessage = action.content;\n status = \"complete\";\n output ??= action.content;\n break;\n }\n\n if (action.type === \"tool\" || action.type === \"tool_batch\") {\n const calls: ToolCallAction[] =\n action.type === \"tool\" ? [action] : (action as ToolBatchAction).calls;\n const callsWithIds: ToolCallAction[] = calls.map((call) => ({\n ...call,\n toolCallId:\n call.toolCallId ?? `call_${Math.random().toString(36).slice(2)}`,\n }));\n\n // Add assistant message with tool calls\n messages.push({\n role: \"assistant\",\n content: publicRationale ?? \"\",\n toolCalls: callsWithIds.map((c) => ({\n toolCallId: c.toolCallId!,\n toolName: c.name,\n args: c.args,\n ...(c.providerMetadata\n ? { providerMetadata: c.providerMetadata }\n : {}),\n })),\n });\n\n // Execute tools and collect results. Contiguous read-only groups run in\n // parallel; mutating/control calls preserve serial ordering.\n const results: ExecutedToolResult[] = [];\n\n const applyToolResult = (entry: ExecutedToolResult): void => {\n if (entry.artifact) {\n artifacts.push(entry.artifact);\n if (entry.artifact.action !== \"observed\" && entry.artifact.kind === \"file\") {\n output = entry.artifact.uri;\n }\n }\n actions.push(entry.actionLine);\n };\n\n const canRunInParallel = (call: ToolCallAction): boolean => {\n if (hookRunner) return false;\n const meta = toolRegistry.get(call.name);\n try {\n const mode = typeof meta?.executionMode === \"function\"\n ? meta.executionMode(call.args)\n : meta?.executionMode;\n return mode === \"parallel\";\n } catch {\n return false;\n }\n };\n\n const executeToolCall = async (call: ToolCallAction): Promise<ExecutedToolResult> => {\n const toolCallId = call.toolCallId!;\n const argSummary = summarizeArgs(call.args);\n const toolStartedAt = Date.now();\n onTrace?.({\n scope: \"worker\",\n phase: \"tool_call\",\n tupleId: traceTupleId,\n step: stepsUsed,\n toolCallId,\n toolName: call.name,\n args: cloneForTrace(call.args),\n });\n onProgress?.({\n kind: \"tool_start\",\n step: stepsUsed,\n toolCallId,\n toolName: call.name,\n ...(argSummary ? { argsSummary: argSummary } : {}),\n });\n\n // PreToolUse hook\n if (hookRunner) {\n const pre = await hookRunner.run({ event: \"PreToolUse\", toolName: call.name, input: call.args });\n if (!pre.allow) {\n const blockedResult: ToolResult = { success: false, output: \"\", error: pre.reason ?? \"blocked by pre-hook\" };\n const resultText = toolResultText(blockedResult);\n return {\n toolCallId,\n toolName: call.name,\n result: resultText,\n isError: true,\n durationMs: Date.now() - toolStartedAt,\n actionLine: `${call.name}${argSummary ? `: ${argSummary}` : \"\"} → ERROR: ${pre.reason ?? \"blocked by pre-hook\"}`,\n };\n }\n }\n\n let result: ToolResult;\n try {\n if (call.name === \"RequestMoreSteps\") {\n // Handle inline — mutates step budget in-place so worker keeps its full context\n extensionCount++;\n const requestedValue = Number(call.args.additional);\n const requested = Math.max(\n 1,\n Number.isFinite(requestedValue)\n ? requestedValue\n : REQUEST_MORE_STEPS_INCREMENT,\n );\n const granted = Math.min(requested, ABSOLUTE_MAX_STEPS - effectiveMaxSteps);\n if (granted > 0) {\n effectiveMaxSteps += granted;\n const hasWriteArtifacts = artifacts.some((a) => a.action !== \"observed\");\n const budget = `Granted ${granted} additional steps. New budget: ${effectiveMaxSteps} total (${effectiveMaxSteps - stepsUsed} remaining).`;\n const nudge = !hasWriteArtifacts\n ? `\\nYou haven't produced any file changes yet. Before continuing, assess: is your current approach making progress, or should you try a fundamentally different strategy?`\n : extensionCount >= 2\n ? `\\nThis is your ${extensionCount === 2 ? \"second\" : \"final\"} extension. Focus on completing your current approach or wrap up with what you have.`\n : \"\";\n result = { success: true, output: budget + nudge };\n } else {\n result = { success: false, output: \"\", error: `At maximum step budget (${effectiveMaxSteps}). Wrap up your work.` };\n }\n } else if (call.name === \"SubDispatch\") {\n // Inject current dispatch depth so the tool can enforce limits\n const meta = toolRegistry.get(call.name);\n if (meta?.execute) {\n const enrichedArgs = { ...call.args, _dispatchDepth: dispatchDepth };\n result = await traceStep(\n telemetry,\n \"arc.worker.sub_dispatch\",\n { tupleId: traceTupleId, step: stepsUsed },\n () => meta.execute!(toolProvider, enrichedArgs, workDir),\n );\n } else {\n result = { success: false, output: \"\", error: \"SubDispatch unavailable\" };\n }\n } else if (call.name === \"AskUser\") {\n const meta = toolRegistry.get(call.name);\n if (meta?.execute) {\n result = await traceStep(\n telemetry,\n \"arc.worker.ask_user\",\n { tupleId: traceTupleId, step: stepsUsed },\n () => meta.execute!(toolProvider, call.args, workDir),\n );\n } else {\n result = { success: false, output: \"\", error: \"AskUser unavailable\" };\n }\n } else {\n const meta = toolRegistry.get(call.name);\n if (meta?.execute) {\n result = await traceStep(\n telemetry,\n \"arc.worker.tool\",\n { tupleId: traceTupleId, step: stepsUsed, tool: call.name },\n () => meta.execute!(toolProvider, call.args, workDir),\n );\n } else {\n result = { success: false, output: \"\", error: `Unknown tool: ${call.name}` };\n }\n }\n\n // Event-driven yielding: if this tool has yieldsOnIncomplete and the\n // thread is still running (per result metadata), wait for completion\n // instead of returning \"still running\" to the model. This eliminates\n // polling waste. JobRegistry always implements waitForThread.\n const toolMeta = toolRegistry.get(call.name);\n if (toolMeta?.yieldsOnIncomplete && toolProvider.waitForThread) {\n const threadId = String(call.args.threadId ?? \"\");\n const isRunning = result.metadata?.status === \"running\";\n if (threadId && isRunning) {\n onProgress?.({\n kind: \"yield_start\",\n step: stepsUsed,\n toolCallId,\n toolName: call.name,\n threadId,\n });\n // Wait for thread to complete — worker suspends here\n const finalStatus = await toolProvider.waitForThread(threadId, signal);\n onProgress?.({\n kind: \"yield_resume\",\n step: stepsUsed,\n toolCallId,\n toolName: call.name,\n threadId,\n });\n // Replace the result with the completion result\n const completionOutput = finalStatus.error\n ? `Thread ${threadId} error: ${finalStatus.error}`\n : `Thread ${threadId} completed (exit code: ${finalStatus.exitCode}).\\n${finalStatus.output}`;\n result = {\n success: !finalStatus.error,\n output: completionOutput,\n ...(finalStatus.error ? { error: finalStatus.error } : {}),\n metadata: {\n ...((result.metadata as Record<string, unknown>) ?? {}),\n threadId,\n exitCode: finalStatus.exitCode,\n yieldResume: true,\n },\n };\n }\n }\n } catch (error) {\n onProgress?.({\n kind: \"tool_error\",\n step: stepsUsed,\n toolCallId,\n toolName: call.name,\n durationMs: Date.now() - toolStartedAt,\n error: summarizeError(error),\n });\n throw error;\n }\n\n // PostToolUse hook\n if (hookRunner) {\n await hookRunner.run({ event: \"PostToolUse\", toolName: call.name, input: call.args, output: result });\n }\n\n const resultText = toolResultText(result);\n const exitCode = result.metadata?.exitCode;\n recordToolCallDuration(\n telemetry,\n call.name,\n Date.now() - toolStartedAt,\n result.success,\n );\n onTrace?.({\n scope: \"worker\",\n phase: \"tool_result\",\n tupleId: traceTupleId,\n step: stepsUsed,\n toolCallId,\n toolName: call.name,\n result: cloneForTrace(result),\n resultText,\n });\n onProgress?.({\n kind: \"tool_complete\",\n step: stepsUsed,\n toolCallId,\n toolName: call.name,\n success: result.success,\n durationMs: Date.now() - toolStartedAt,\n outputSummary: summarizeText(resultText, 300),\n output: resultText,\n ...(result.success && result.artifact ? { artifact: result.artifact } : {}),\n ...(exitCode !== undefined ? { exitCode } : {}),\n ...(result.metadata ? { metadata: result.metadata } : {}),\n });\n const durationMs = Date.now() - toolStartedAt;\n const entry: ExecutedToolResult = {\n toolCallId,\n toolName: call.name,\n result: resultText,\n durationMs,\n ...(result.success ? {} : { isError: true }),\n ...(result.success && result.artifact ? { artifact: result.artifact } : {}),\n actionLine: \"\",\n };\n\n const resultSummary = summarizeText(resultText, 150);\n entry.actionLine = `${call.name}${argSummary ? `: ${argSummary}` : \"\"} → ${result.success ? resultSummary : `ERROR: ${resultSummary}`}`;\n return entry;\n };\n\n let parallelGroup: ToolCallAction[] = [];\n const flushParallelGroup = async (): Promise<void> => {\n if (parallelGroup.length === 0) return;\n const group = parallelGroup;\n parallelGroup = [];\n if (group.length === 1) {\n const entry = await executeToolCall(group[0]!);\n results.push(entry);\n applyToolResult(entry);\n return;\n }\n\n const settled = await Promise.allSettled(group.map(executeToolCall));\n const rejected = settled.find(\n (entry): entry is PromiseRejectedResult => entry.status === \"rejected\",\n );\n if (rejected) throw rejected.reason;\n\n for (const entry of settled) {\n if (entry.status === \"fulfilled\") {\n results.push(entry.value);\n applyToolResult(entry.value);\n }\n }\n };\n\n for (const call of callsWithIds) {\n if (canRunInParallel(call)) {\n parallelGroup.push(call);\n continue;\n }\n await flushParallelGroup();\n const entry = await executeToolCall(call);\n results.push(entry);\n applyToolResult(entry);\n }\n await flushParallelGroup();\n\n // Add tool results message\n const toolResults: ToolResultInfo[] = results.map((entry) => ({\n toolCallId: entry.toolCallId,\n toolName: entry.toolName,\n result: entry.result,\n ...(entry.isError !== undefined ? { isError: entry.isError } : {}),\n ...(entry.durationMs !== undefined ? { durationMs: entry.durationMs } : {}),\n }));\n messages.push({\n role: \"tool\",\n content: results.map((r) => `[${r.toolName}]: ${r.result}`).join(\"\\n\"),\n toolResults,\n });\n\n if (\n stepsUsed >= effectiveMaxSteps &&\n !completionGraceUsed &&\n effectiveMaxSteps < ABSOLUTE_MAX_STEPS\n ) {\n completionGraceUsed = true;\n effectiveMaxSteps += 1;\n messages.push({\n role: \"user\",\n content:\n \"[System: completion grace]\\nYou received tool results at your step limit. Use the next step to give your final answer if the work is done, or call RequestMoreSteps if more work is essential.\",\n });\n }\n }\n }\n\n // If we exhausted steps without completing\n if (status === \"incomplete\" && stepsUsed >= effectiveMaxSteps) {\n lastMessage = lastMessage || \"Worker ran out of steps\";\n }\n\n onProgress?.({\n kind: \"worker_result\",\n status,\n stepsUsed,\n summary: summarizeText(lastMessage, 300),\n });\n\n const result: WorkerResult = {\n transcript: messages,\n output,\n status,\n stepsUsed,\n lastMessage,\n actions,\n artifacts,\n };\n onTrace?.({\n scope: \"worker\",\n phase: \"worker_result\",\n tupleId: traceTupleId,\n result: cloneForTrace(result),\n });\n return result;\n}\n\nfunction toolResultText(result: ToolResult): string {\n if (result.modelOutput) return result.modelOutput;\n if (result.success) return result.output;\n return (\n [result.error, result.output].filter(Boolean).join(\"\\n\") || \"Unknown error\"\n );\n}\n\nfunction toolNamesForAction(action: AgentAction): string[] {\n if (action.type === \"tool\") return [action.name];\n if (action.type === \"tool_batch\")\n return action.calls.map((call) => call.name);\n return [];\n}\n\nfunction publicRationaleForAction(action: AgentAction): string | undefined {\n if (action.type === \"tool\") return action.publicRationale;\n if (action.type === \"tool_batch\") return action.publicRationale;\n return undefined;\n}\n\n\nfunction formatExpectedOutput(expectedOutput: ExpectedOutputContract): string {\n return JSON.stringify(expectedOutput, null, 2);\n}\n\nfunction summarizeText(value: string, max: number): string {\n const normalized = value.replace(/\\s+/g, \" \").trim();\n return normalized.length <= max\n ? normalized\n : `${normalized.slice(0, max)}...`;\n}\n\nfunction summarizeError(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n","import type { Transcript, TranscriptStore, VectorIndex, Artifact, ArtifactStore, ScratchPad, SessionStore, SessionSnapshot, SessionMeta } from '../types';\n\n// ── Episode Types ──\n\nexport interface Episode {\n id: string;\n taskId: string;\n sessionId: string;\n tupleId?: string;\n summary: string;\n createdAt: number;\n completedAt?: number;\n /** Arbitrary metadata for routing/display */\n metadata?: Record<string, unknown>;\n}\n\nexport interface EpisodeTrace {\n episodeId: string;\n messages: Array<{ role: string; content: string; [key: string]: unknown }>;\n createdAt: number;\n}\n\nexport interface EpisodeStore {\n addEpisode(episode: Episode): Promise<void>;\n addTrace(trace: EpisodeTrace): Promise<void>;\n getEpisode(id: string): Promise<Episode | null>;\n getTrace(episodeId: string): Promise<EpisodeTrace | null>;\n getEpisodesByTask(taskId: string): Promise<Episode[]>;\n getEpisodesBySession(sessionId: string): Promise<Episode[]>;\n getRecentEpisodes(limit: number): Promise<Episode[]>;\n evictTraces(olderThan: number): Promise<number>;\n}\n\n// ── Session Memo Types ──\n\nexport interface SessionMemo {\n id: string;\n sessionId: string;\n content: string;\n sourceEpisodeIds?: string[];\n createdAt: number;\n}\n\nexport interface SessionMemoStore {\n addMemo(memo: SessionMemo): Promise<void>;\n getMemo(id: string): Promise<SessionMemo | null>;\n getMemosBySession(sessionId: string): Promise<SessionMemo[]>;\n getRecentMemos(limit: number): Promise<SessionMemo[]>;\n}\n\n// ── Long-Term Memory Types ──\n\nexport interface LongTermMemory {\n id: string;\n content: string;\n category: string;\n createdAt: number;\n updatedAt: number;\n}\n\nexport interface LongTermStore {\n addMemory(memory: LongTermMemory): Promise<void>;\n getMemory(id: string): Promise<LongTermMemory | null>;\n getAllMemories(): Promise<LongTermMemory[]>;\n getMemoriesByCategory(category: string): Promise<LongTermMemory[]>;\n updateMemory(id: string, updates: Partial<Pick<LongTermMemory, 'content' | 'category' | 'updatedAt'>>): Promise<void>;\n deleteMemory(id: string): Promise<void>;\n}\n\n/** In-memory transcript store for testing */\nexport class MemoryTranscriptStore implements TranscriptStore {\n private transcripts: Transcript[] = [];\n private byId = new Map<string, Transcript>();\n\n async append(transcript: Transcript): Promise<void> {\n this.transcripts.push(transcript);\n this.byId.set(transcript.id, transcript);\n }\n\n async getAll(): Promise<Transcript[]> {\n return [...this.transcripts];\n }\n\n async get(id: string): Promise<Transcript | null> {\n return this.byId.get(id) ?? null;\n }\n}\n\n/** In-memory vector index for testing (no actual embeddings) */\nexport class MemoryVectorIndex implements VectorIndex {\n private entries: Array<{ id: string; text: string }> = [];\n\n async add(id: string, text: string): Promise<void> {\n this.entries.push({ id, text });\n }\n\n async search(query: string, k: number): Promise<string[]> {\n // Simple text matching for testing - real impl uses embeddings\n const lowerQuery = query.toLowerCase();\n const scored = this.entries.map((e) => ({\n id: e.id,\n score: e.text.toLowerCase().includes(lowerQuery) ? 1 : 0,\n }));\n scored.sort((a, b) => b.score - a.score);\n return scored.slice(0, k).map((s) => s.id);\n }\n\n async load(): Promise<void> {\n // No-op for memory store\n }\n\n async save(): Promise<void> {\n // No-op for memory store\n }\n\n async size(): Promise<number> {\n return this.entries.length;\n }\n}\n\n/** In-memory scratch pad for testing */\nexport class MemoryScratchPad implements ScratchPad {\n private entries = new Map<string, string>();\n\n async write(key: string, content: string): Promise<void> {\n this.entries.set(key, content);\n }\n\n async read(key: string): Promise<string | null> {\n return this.entries.get(key) ?? null;\n }\n\n async list(): Promise<string[]> {\n return [...this.entries.keys()];\n }\n\n async clear(): Promise<void> {\n this.entries.clear();\n }\n}\n\n/** In-memory artifact store for testing */\nexport class MemoryArtifactStore implements ArtifactStore {\n private artifacts = new Map<string, Artifact>();\n\n async set(id: string, artifact: Artifact): Promise<void> {\n this.artifacts.set(id, artifact);\n }\n\n async get(id: string): Promise<Artifact | null> {\n return this.artifacts.get(id) ?? null;\n }\n\n async getAll(): Promise<Record<string, Artifact>> {\n const result: Record<string, Artifact> = {};\n for (const [id, artifact] of this.artifacts) {\n result[id] = artifact;\n }\n return result;\n }\n}\n\n/** In-memory session store for testing */\nexport class MemorySessionStore implements SessionStore {\n private snapshots = new Map<string, SessionSnapshot>();\n private metas = new Map<string, SessionMeta>();\n\n async load(id: string): Promise<SessionSnapshot | null> {\n return this.snapshots.get(id) ?? null;\n }\n\n async save(id: string, snapshot: SessionSnapshot): Promise<void> {\n this.snapshots.set(id, snapshot);\n }\n\n async getMeta(id: string): Promise<SessionMeta | null> {\n return this.metas.get(id) ?? null;\n }\n\n async saveMeta(id: string, meta: SessionMeta): Promise<void> {\n this.metas.set(id, meta);\n }\n\n async list(): Promise<SessionMeta[]> {\n return [...this.metas.values()].sort((a, b) => b.lastActiveAt - a.lastActiveAt);\n }\n}\n\n// ── In-Memory Episode/Memo/LongTerm Stores ──\n\n/** In-memory episode store */\nexport class InMemoryEpisodeStore implements EpisodeStore {\n private episodes = new Map<string, Episode>();\n private traces = new Map<string, EpisodeTrace>();\n\n async addEpisode(episode: Episode): Promise<void> {\n this.episodes.set(episode.id, episode);\n }\n\n async addTrace(trace: EpisodeTrace): Promise<void> {\n this.traces.set(trace.episodeId, trace);\n }\n\n async getEpisode(id: string): Promise<Episode | null> {\n return this.episodes.get(id) ?? null;\n }\n\n async getTrace(episodeId: string): Promise<EpisodeTrace | null> {\n return this.traces.get(episodeId) ?? null;\n }\n\n async getEpisodesByTask(taskId: string): Promise<Episode[]> {\n return [...this.episodes.values()].filter((e) => e.taskId === taskId);\n }\n\n async getEpisodesBySession(sessionId: string): Promise<Episode[]> {\n return [...this.episodes.values()].filter((e) => e.sessionId === sessionId);\n }\n\n async getRecentEpisodes(limit: number): Promise<Episode[]> {\n return [...this.episodes.values()]\n .sort((a, b) => b.createdAt - a.createdAt)\n .slice(0, limit);\n }\n\n async evictTraces(_olderThan: number): Promise<number> {\n return 0;\n }\n}\n\n/** In-memory session memo store */\nexport class InMemorySessionMemoStore implements SessionMemoStore {\n private memos = new Map<string, SessionMemo>();\n\n async addMemo(memo: SessionMemo): Promise<void> {\n this.memos.set(memo.id, memo);\n }\n\n async getMemo(id: string): Promise<SessionMemo | null> {\n return this.memos.get(id) ?? null;\n }\n\n async getMemosBySession(sessionId: string): Promise<SessionMemo[]> {\n return [...this.memos.values()].filter((m) => m.sessionId === sessionId);\n }\n\n async getRecentMemos(limit: number): Promise<SessionMemo[]> {\n return [...this.memos.values()]\n .sort((a, b) => b.createdAt - a.createdAt)\n .slice(0, limit);\n }\n}\n\n/** In-memory long-term store */\nexport class InMemoryLongTermStore implements LongTermStore {\n private memories = new Map<string, LongTermMemory>();\n\n async addMemory(memory: LongTermMemory): Promise<void> {\n this.memories.set(memory.id, memory);\n }\n\n async getMemory(id: string): Promise<LongTermMemory | null> {\n return this.memories.get(id) ?? null;\n }\n\n async getAllMemories(): Promise<LongTermMemory[]> {\n return [...this.memories.values()];\n }\n\n async getMemoriesByCategory(category: string): Promise<LongTermMemory[]> {\n return [...this.memories.values()].filter((m) => m.category === category);\n }\n\n async updateMemory(\n id: string,\n updates: Partial<Pick<LongTermMemory, 'content' | 'category' | 'updatedAt'>>\n ): Promise<void> {\n const existing = this.memories.get(id);\n if (existing) {\n this.memories.set(id, { ...existing, ...updates });\n }\n }\n\n async deleteMemory(id: string): Promise<void> {\n this.memories.delete(id);\n }\n}\n","/**\n * In-memory reference implementation of JobRegistry.\n *\n * Jobs here never actually spawn processes — callers use `simulateExit` /\n * `simulateOutput` / `simulateFailure` to drive state. Intended for tests\n * and agents that don't need filesystem-backed persistence.\n */\nexport class MemoryJobRegistry {\n jobs = new Map();\n handlers = new Set();\n seq = 0;\n async start(opts, startedBy) {\n const id = `job_mem_${++this.seq}`;\n const now = Date.now();\n const spec = {\n id,\n label: opts.label,\n command: opts.command,\n cwd: opts.cwd,\n env: opts.env,\n transport: opts.transport ?? { kind: \"local\" },\n startedAt: now,\n startedBy,\n };\n const status = {\n spec,\n state: \"running\",\n startedAt: now,\n lastSeenAliveAt: now,\n tailLines: [],\n bytesWritten: 0,\n };\n this.jobs.set(id, status);\n this.emit({ type: \"job_started\", status });\n return status;\n }\n async check(id) {\n return this.jobs.get(id) ?? null;\n }\n async cancel(id, _signal) {\n const s = this.jobs.get(id);\n if (!s || s.state !== \"running\")\n return s ?? null;\n s.state = \"killed\";\n s.endedAt = Date.now();\n this.emit({ type: \"job_killed\", status: s, reason: \"cancel\" });\n return s;\n }\n async list() {\n return [...this.jobs.values()];\n }\n async tail(id, lines = 40) {\n const s = this.jobs.get(id);\n if (!s)\n return [];\n return s.tailLines.slice(-lines);\n }\n async waitFor(id, signal) {\n const s = this.jobs.get(id);\n if (!s)\n throw new Error(`Unknown job ${id}`);\n if (s.state !== \"running\")\n return s;\n return new Promise((resolve, reject) => {\n const unsub = this.subscribe((e) => {\n if ((e.type === \"job_exited\" || e.type === \"job_failed\" || e.type === \"job_killed\") &&\n e.status.spec.id === id) {\n unsub();\n resolve(e.status);\n }\n });\n signal?.addEventListener(\"abort\", () => {\n unsub();\n reject(new Error(\"aborted\"));\n }, { once: true });\n });\n }\n subscribe(handler) {\n this.handlers.add(handler);\n return () => { this.handlers.delete(handler); };\n }\n snapshot() {\n return [...this.jobs.values()];\n }\n async prune(_olderThanMs = 24 * 60 * 60 * 1000) {\n let removed = 0;\n for (const status of [...this.jobs.values()]) {\n if (status.state === \"running\")\n continue;\n this.jobs.delete(status.spec.id);\n removed++;\n }\n return removed;\n }\n // ── Test hooks ──\n simulateOutput(id, chunk) {\n const s = this.jobs.get(id);\n if (!s)\n return;\n s.tailLines.push(...chunk.split(\"\\n\").filter((l) => l.length > 0));\n if (s.tailLines.length > 200)\n s.tailLines.splice(0, s.tailLines.length - 200);\n s.bytesWritten += chunk.length;\n this.emit({ type: \"job_output\", id, chunk, at: Date.now() });\n }\n simulateExit(id, exitCode) {\n const s = this.jobs.get(id);\n if (!s)\n return;\n s.state = exitCode === 0 ? \"exited\" : \"failed\";\n s.exitCode = exitCode;\n s.endedAt = Date.now();\n if (s.state === \"failed\") {\n this.emit({ type: \"job_failed\", status: s, error: `exit ${exitCode}` });\n }\n else {\n this.emit({ type: \"job_exited\", status: s });\n }\n }\n emit(e) {\n for (const h of this.handlers) {\n try {\n h(e);\n }\n catch { /* handler failures must not poison the bus */ }\n }\n }\n}\n","import type { ToolCallInfo, ToolResultInfo } from \"../../agent/types\";\n\n/**\n * Serialized attachment form suitable for JSON persistence. Unlike the in-flight\n * `ContentPart` (which carries a `Buffer`), the stored form keeps image bytes\n * base64-encoded so messages round-trip cleanly through session snapshots.\n * Converted to a real `ContentPart` only when building AgentMessage[] for the model.\n */\nexport interface StoredAttachment {\n type: \"image\";\n imageBase64: string;\n mimeType: string;\n}\n\nexport interface StoredMessage {\n id: string;\n conversationId: string;\n index: number;\n role: \"user\" | \"assistant\" | \"tool\";\n content: string;\n toolCalls?: ToolCallInfo[];\n toolResults?: ToolResultInfo[];\n /** Multimodal image attachments. Persisted as base64; converted to ContentPart[] at model-call time. */\n attachments?: StoredAttachment[];\n timestamp: number;\n}\n\nexport interface GrepResult {\n messageId: string;\n conversationId: string;\n messageIndex: number;\n excerpt: string;\n matchContext: string;\n}\n\nexport interface MessageStore {\n append(message: StoredMessage): void;\n getConversation(conversationId: string): StoredMessage[];\n getMessage(conversationId: string, index: number): StoredMessage | null;\n grep(\n pattern: string,\n opts?: { conversationId?: string; maxResults?: number },\n ): GrepResult[];\n /** Serialize all messages for session persistence. */\n serialize(): StoredMessage[];\n /** Load serialized messages into this store (for session hydration). */\n loadFrom(messages: StoredMessage[]): void;\n}\n\nexport class MemoryMessageStore implements MessageStore {\n private messages: StoredMessage[] = [];\n private byConversation = new Map<string, StoredMessage[]>();\n\n append(message: StoredMessage): void {\n this.messages.push(message);\n let conv = this.byConversation.get(message.conversationId);\n if (!conv) {\n conv = [];\n this.byConversation.set(message.conversationId, conv);\n }\n conv.push(message);\n }\n\n getConversation(conversationId: string): StoredMessage[] {\n return this.byConversation.get(conversationId) ?? [];\n }\n\n getMessage(conversationId: string, index: number): StoredMessage | null {\n const conv = this.byConversation.get(conversationId);\n return conv?.find((m) => m.index === index) ?? null;\n }\n\n serialize(): StoredMessage[] {\n return [...this.messages];\n }\n\n loadFrom(messages: StoredMessage[]): void {\n this.messages.length = 0;\n this.byConversation.clear();\n for (const msg of messages) this.append(msg);\n }\n\n static hydrate(messages: StoredMessage[]): MemoryMessageStore {\n const store = new MemoryMessageStore();\n store.loadFrom(messages);\n return store;\n }\n\n grep(\n pattern: string,\n opts?: { conversationId?: string; maxResults?: number },\n ): GrepResult[] {\n const maxResults = opts?.maxResults ?? 50;\n // Always escape pattern for literal match — agent-supplied regex is a ReDoS vector\n const re = new RegExp(escapeRegex(pattern), \"gi\");\n\n const source = opts?.conversationId\n ? (this.byConversation.get(opts.conversationId) ?? [])\n : this.messages;\n\n const results: GrepResult[] = [];\n for (const msg of source) {\n if (results.length >= maxResults) break;\n\n const searchText = buildSearchText(msg);\n re.lastIndex = 0;\n const match = re.exec(searchText);\n if (!match) continue;\n\n const start = Math.max(0, match.index - 80);\n const end = Math.min(searchText.length, match.index + match[0].length + 80);\n results.push({\n messageId: msg.id,\n conversationId: msg.conversationId,\n messageIndex: msg.index,\n excerpt: match[0],\n matchContext: searchText.slice(start, end),\n });\n }\n return results;\n }\n}\n\nfunction buildSearchText(msg: StoredMessage): string {\n const parts = [msg.content];\n if (msg.toolCalls) {\n for (const tc of msg.toolCalls) {\n parts.push(`${tc.toolName} ${JSON.stringify(tc.args)}`);\n }\n }\n if (msg.toolResults) {\n for (const tr of msg.toolResults) {\n parts.push(`${tr.toolName}: ${tr.result}`);\n }\n }\n return parts.join(\"\\n\");\n}\n\nfunction escapeRegex(s: string): string {\n return s.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n","export interface SummaryNode {\n id: string;\n depth: number;\n sourceIds: string[];\n sourceConversationIds: string[];\n summary: string;\n artifacts: string[];\n operations: string[];\n outcome: string;\n tokenCount: number;\n createdAt: number;\n}\n\nexport interface CompactionOpts {\n /** Minimum number of uncovered children before compaction triggers (default: 4) */\n minChildren?: number;\n /** Soft token budget — compact when total tokens at a depth exceed this (default: 8000) */\n softTokenBudget?: number;\n}\n\nexport interface SummaryDAG {\n addLeaf(node: SummaryNode): void;\n compact(opts?: CompactionOpts): SummaryNode[];\n getNode(id: string): SummaryNode | null;\n getLineage(id: string, visited?: Set<string>): string[];\n getFrontier(budget: number): { frontier: SummaryNode[]; coveredIds: Set<string> };\n getAllNodes(): SummaryNode[];\n /** Serialize DAG state for session persistence. */\n serialize(): { nodes: SummaryNode[]; coveredBy: [string, string][] };\n /** Load serialized DAG state into this instance (for session hydration). */\n loadFrom(data: { nodes: SummaryNode[]; coveredBy: [string, string][] }): void;\n}\n\nexport class MemorySummaryDAG implements SummaryDAG {\n private nodes = new Map<string, SummaryNode>();\n /** Tracks which source IDs have been covered by a parent node */\n private coveredBy = new Map<string, string>();\n\n serialize(): { nodes: SummaryNode[]; coveredBy: [string, string][] } {\n return {\n nodes: [...this.nodes.values()],\n coveredBy: [...this.coveredBy.entries()],\n };\n }\n\n loadFrom(data: { nodes: SummaryNode[]; coveredBy: [string, string][] }): void {\n this.nodes.clear();\n this.coveredBy.clear();\n for (const node of data.nodes) this.nodes.set(node.id, node);\n for (const [id, parent] of data.coveredBy) this.coveredBy.set(id, parent);\n }\n\n static hydrate(data: { nodes: SummaryNode[]; coveredBy: [string, string][] }): MemorySummaryDAG {\n const dag = new MemorySummaryDAG();\n dag.loadFrom(data);\n return dag;\n }\n\n addLeaf(node: SummaryNode): void {\n this.nodes.set(node.id, node);\n }\n\n compact(opts?: CompactionOpts): SummaryNode[] {\n const minChildren = opts?.minChildren ?? 4;\n const softTokenBudget = opts?.softTokenBudget ?? 8000;\n const created: SummaryNode[] = [];\n\n // Compact from shallowest depth upward\n const maxDepth = Math.max(0, ...Array.from(this.nodes.values()).map((n) => n.depth));\n\n for (let depth = 0; depth <= maxDepth; depth++) {\n const nodesAtDepth = Array.from(this.nodes.values())\n .filter((n) => n.depth === depth)\n .sort((a, b) => a.createdAt - b.createdAt);\n\n // Find uncovered nodes at this depth\n const uncovered = nodesAtDepth.filter((n) => !this.coveredBy.has(n.id));\n\n // Check token budget at this depth\n const totalTokens = uncovered.reduce((sum, n) => sum + n.tokenCount, 0);\n\n if (uncovered.length >= minChildren && totalTokens > softTokenBudget) {\n // Group into batches of minChildren for compaction\n for (let i = 0; i + minChildren <= uncovered.length; i += minChildren) {\n const batch = uncovered.slice(i, i + minChildren);\n const rollup = buildRollupNode(batch, depth + 1);\n this.nodes.set(rollup.id, rollup);\n for (const child of batch) {\n this.coveredBy.set(child.id, rollup.id);\n }\n created.push(rollup);\n }\n }\n }\n return created;\n }\n\n getNode(id: string): SummaryNode | null {\n return this.nodes.get(id) ?? null;\n }\n\n getLineage(id: string, visited = new Set<string>()): string[] {\n if (visited.has(id)) return [];\n visited.add(id);\n const node = this.nodes.get(id);\n if (!node) return [];\n\n const result: string[] = [...node.sourceIds];\n for (const sourceId of node.sourceIds) {\n const child = this.nodes.get(sourceId);\n if (child && child.depth >= 0) {\n result.push(...this.getLineage(sourceId, visited));\n }\n }\n return [...new Set(result)];\n }\n\n getFrontier(budget: number): { frontier: SummaryNode[]; coveredIds: Set<string> } {\n // Walk from deepest (most compact) rollups, expanding to shallower when budget allows.\n const allNodes = Array.from(this.nodes.values());\n if (allNodes.length === 0) return { frontier: [], coveredIds: new Set() };\n\n const maxDepth = Math.max(...allNodes.map((n) => n.depth));\n const frontier: SummaryNode[] = [];\n const coveredIds = new Set<string>();\n let tokensUsed = 0;\n\n // Cache lineage per node to avoid redundant recursive traversals\n const lineageCache = new Map<string, string[]>();\n const cachedLineage = (id: string): string[] => {\n let result = lineageCache.get(id);\n if (!result) {\n result = this.getLineage(id);\n lineageCache.set(id, result);\n }\n return result;\n };\n\n for (let depth = maxDepth; depth >= 0; depth--) {\n const nodesAtDepth = allNodes\n .filter((n) => n.depth === depth)\n .sort((a, b) => a.createdAt - b.createdAt);\n\n for (const node of nodesAtDepth) {\n if (coveredIds.has(node.id)) continue;\n\n if (tokensUsed + node.tokenCount <= budget) {\n frontier.push(node);\n tokensUsed += node.tokenCount;\n // Mark all transitive children as covered\n for (const sourceId of cachedLineage(node.id)) {\n coveredIds.add(sourceId);\n }\n }\n }\n }\n\n // Sort chronologically for context ordering\n frontier.sort((a, b) => a.createdAt - b.createdAt);\n return { frontier, coveredIds };\n }\n\n getAllNodes(): SummaryNode[] {\n return Array.from(this.nodes.values());\n }\n}\n\nfunction buildRollupNode(\n children: SummaryNode[],\n depth: number,\n): SummaryNode {\n const allArtifacts = [...new Set(children.flatMap((c) => c.artifacts))];\n const allOperations = [...new Set(children.flatMap((c) => c.operations))];\n const allConversationIds = [\n ...new Set(children.flatMap((c) => c.sourceConversationIds)),\n ];\n\n // Parse outcomes for aggregate\n const outcomes = children.map((c) => c.outcome);\n const complete = outcomes.filter((o) => o === \"complete\").length;\n const incomplete = outcomes.filter((o) => o === \"incomplete\").length;\n const failed = outcomes.filter((o) => o === \"failed\").length;\n const parts: string[] = [];\n if (complete) parts.push(`${complete} complete`);\n if (incomplete) parts.push(`${incomplete} incomplete`);\n if (failed) parts.push(`${failed} failed`);\n const aggregateOutcome = parts.join(\", \") || \"unknown\";\n\n const firstId = children[0]?.id.replace(/^summary_d\\d+_/, \"\") ?? \"0\";\n const lastId =\n children[children.length - 1]?.id.replace(/^summary_d\\d+_/, \"\") ?? \"0\";\n const id = `summary_d${depth}_${firstId}_${lastId}`;\n\n const summaryLines = [\n `Rollup [${children.length} episodes]: ${aggregateOutcome}.`,\n ];\n if (allArtifacts.length > 0) {\n summaryLines.push(`Produced: ${allArtifacts.join(\", \")}`);\n }\n if (allOperations.length > 0) {\n summaryLines.push(`Active threads: ${allOperations.join(\", \")}`);\n }\n const summary = summaryLines.join(\"\\n\");\n\n return {\n id,\n depth,\n sourceIds: children.map((c) => c.id),\n sourceConversationIds: allConversationIds,\n summary,\n artifacts: allArtifacts,\n operations: allOperations,\n outcome: aggregateOutcome,\n tokenCount: Math.ceil(summary.length / 4),\n createdAt: Date.now(),\n };\n}\n","import type { AgentMessage, ContentPart } from \"../../agent/types\";\nimport type { MessageStore, StoredMessage } from \"./message-store\";\nimport type { SummaryDAG, SummaryNode } from \"./summary-dag\";\nfunction estimateTokens(text: string): number {\n return Math.ceil(text.length / 4);\n}\nimport type { OodaSnapshot, VectorIndex, TranscriptStore, ScratchPad } from \"../types\";\nimport { formatOodaSnapshotForPrompt } from \"../episode-projection\";\nimport { getTextContent } from \"../../agent/types\";\nimport type { JobStatus } from \"../jobs/types.js\";\n\nexport function formatLiveJobsBlock(jobs: JobStatus[], maxChars = 1200): string | null {\n if (jobs.length === 0) return null;\n const now = Date.now();\n const lines = jobs.map((j) => {\n const elapsed = formatJobElapsed(now - j.startedAt);\n const stateTag = j.state === \"running\" ? \"running\"\n : j.state === \"exited\" ? `exited ${j.exitCode ?? 0}`\n : j.state === \"failed\" ? `failed ${j.exitCode ?? \"?\"}`\n : j.state;\n const tail = j.tailLines.length > 0 ? ` · last: ${j.tailLines[j.tailLines.length - 1]!.slice(0, 80)}` : \"\";\n return `- ${j.spec.id} \"${j.spec.label}\" [${stateTag}] ${elapsed}${tail}`;\n });\n let out = \"## Live Jobs\\n\" + lines.join(\"\\n\");\n if (out.length > maxChars) out = out.slice(0, maxChars - 4) + \"\\n...\";\n return out;\n}\n\nfunction formatJobElapsed(ms: number): string {\n const s = Math.floor(ms / 1000);\n if (s < 60) return `${s}s`;\n const m = Math.floor(s / 60);\n if (m < 60) return `${m}m${s % 60}s`;\n const h = Math.floor(m / 60);\n return `${h}h${m % 60}m`;\n}\n\nexport interface GhostCue {\n summaryId: string;\n conversationIds: string[];\n depth: number;\n label: string;\n}\n\nexport interface AssembledContext {\n messages: AgentMessage[];\n ghostCues: GhostCue[];\n tokenEstimate: number;\n /** Structured sections for downstream consumers (avoids string matching) */\n frontierText?: string;\n ghostCueText?: string;\n}\n\nexport interface AssembleContextOpts {\n conversationId: string;\n store: MessageStore;\n dag: SummaryDAG;\n budget: number;\n freshTailSize: number;\n taskContext: string;\n ooda?: OodaSnapshot;\n}\n\n/**\n * Budget-driven context assembly from MessageStore + SummaryDAG.\n *\n * Algorithm:\n * 1. Always include: task context (task, workspace, budget info)\n * 2. Fresh tail: last N raw messages from the conversation\n * 3. Frontier: walk DAG from deepest summaries, adding within budget\n * 4. Ghost cues: for any DAG region not expanded, insert a pointer\n * 5. OODA snapshot if provided\n */\nexport function assembleContext(opts: AssembleContextOpts): AssembledContext {\n const {\n conversationId,\n store,\n dag,\n budget,\n freshTailSize,\n taskContext,\n ooda,\n } = opts;\n\n const messages: AgentMessage[] = [];\n let tokensUsed = 0;\n\n // 1. Task context — always included\n const taskTokens = estimateTokens(taskContext);\n messages.push({ role: \"user\", content: taskContext });\n tokensUsed += taskTokens;\n\n // 2. OODA snapshot\n if (ooda) {\n const oodaText = formatOodaSnapshotForPrompt(ooda);\n const oodaTokens = estimateTokens(oodaText);\n messages.push({ role: \"user\", content: oodaText });\n tokensUsed += oodaTokens;\n }\n\n // Calculate remaining budget for frontier + tail\n const remainingBudget = budget - tokensUsed;\n // Reserve ~40% of remaining for fresh tail, 60% for frontier\n const tailBudget = Math.floor(remainingBudget * 0.4);\n const frontierBudget = remainingBudget - tailBudget;\n\n // 3. Frontier + ghost cues from DAG\n const { ghostCues, frontierText, ghostCueText } = buildFrontierAndGhostCues(\n dag,\n frontierBudget,\n );\n\n if (frontierText) {\n messages.push({ role: \"user\", content: frontierText });\n tokensUsed += estimateTokens(frontierText);\n }\n\n if (ghostCueText) {\n messages.push({ role: \"user\", content: ghostCueText });\n tokensUsed += estimateTokens(ghostCueText);\n }\n\n // 4. Fresh tail: recent raw messages from this conversation\n const conversation = store.getConversation(conversationId);\n if (conversation.length > 0) {\n const tail = conversation.slice(-freshTailSize);\n for (const msg of tail) {\n const msgTokens = estimateTokens(msg.content);\n if (tokensUsed + msgTokens > budget) break;\n messages.push(storedToAgentMessage(msg));\n tokensUsed += msgTokens;\n }\n }\n\n return {\n messages,\n ghostCues,\n tokenEstimate: tokensUsed,\n ...(frontierText != null ? { frontierText } : {}),\n ...(ghostCueText != null ? { ghostCueText } : {}),\n };\n}\n\nexport interface AssembleOrchestratorContextOpts {\n conversationId: string;\n store: MessageStore;\n dag: SummaryDAG;\n budget: number;\n freshTailSize: number;\n taskContext: string;\n ooda?: OodaSnapshot;\n vectorIndex?: VectorIndex;\n transcriptStore?: TranscriptStore;\n scratchPad?: ScratchPad;\n liveJobs?: JobStatus[];\n}\n\n/**\n * Async orchestrator context assembly with implicit semantic hydration.\n *\n * Wraps `assembleContext` and adds:\n * 1. Vector index search: uses the task context as query to find relevant\n * prior transcripts that may have been compacted out of the DAG frontier.\n * 2. Scratch pad: lists available keys so the orchestrator knows what\n * notes exist (just like workers do).\n *\n * This prevents the \"forgotten conversation\" problem where aggressive\n * compaction drops topics the user referenced earlier but that aren't\n * in the current DAG frontier or fresh tail.\n */\nexport async function assembleOrchestratorContext(\n opts: AssembleOrchestratorContextOpts,\n): Promise<AssembledContext> {\n const {\n vectorIndex,\n transcriptStore,\n scratchPad,\n taskContext,\n budget,\n liveJobs,\n } = opts;\n\n // Carve ~10% of budget for retrieval (less than workers' 15% since\n // the orchestrator has a larger base context from DAG + fresh tail)\n const retrievalBudget = Math.floor(budget * 0.10);\n const dagBudget = budget - retrievalBudget;\n\n const baseOpts: AssembleContextOpts = {\n conversationId: opts.conversationId,\n store: opts.store,\n dag: opts.dag,\n budget: dagBudget,\n freshTailSize: opts.freshTailSize,\n taskContext,\n };\n if (opts.ooda !== undefined) {\n baseOpts.ooda = opts.ooda;\n }\n const base = assembleContext(baseOpts);\n\n let retrievalTokensUsed = 0;\n const retrievalSections: string[] = [];\n\n // Live Jobs block: inject between OODA and DAG frontier\n const liveJobsBlock = formatLiveJobsBlock(liveJobs ?? []);\n if (liveJobsBlock !== null) {\n retrievalSections.push(liveJobsBlock);\n retrievalTokensUsed += estimateTokens(liveJobsBlock);\n }\n\n // Vector retrieval: use task context as query to find semantically\n // relevant prior transcripts (e.g. a prior RLM discussion that was\n // compacted into a ghost cue and isn't in the DAG frontier)\n if (vectorIndex && transcriptStore) {\n const transcriptIds = await vectorIndex.search(taskContext, 3);\n if (transcriptIds.length > 0) {\n const transcripts = await Promise.all(\n transcriptIds.map((id) => transcriptStore.get(id).then((t) => ({ id, t }))),\n );\n const summaries: string[] = [];\n for (const { id, t: transcript } of transcripts) {\n if (!transcript) continue;\n const lastEntry = transcript.messages[transcript.messages.length - 1];\n const lastMsg = lastEntry ? getTextContent(lastEntry.content) : \"\";\n const summary = `- **${id}**: ${transcript.instruction}\\n Result: ${lastMsg.slice(0, 200)}`;\n const tokens = estimateTokens(summary);\n if (retrievalTokensUsed + tokens > retrievalBudget) break;\n summaries.push(summary);\n retrievalTokensUsed += tokens;\n }\n if (summaries.length > 0) {\n retrievalSections.push(\n `## Relevant Prior Work (semantic recall)\\n${summaries.join(\"\\n\")}`,\n );\n }\n }\n }\n\n // Scratch pad: list keys so the orchestrator knows what notes exist\n if (scratchPad) {\n const keys = await scratchPad.list();\n if (keys.length > 0) {\n const section = `## Scratch Notes\\nAvailable notes (use ScratchPad_Read to view): ${keys.join(\", \")}`;\n const tokens = estimateTokens(section);\n if (retrievalTokensUsed + tokens <= retrievalBudget) {\n retrievalSections.push(section);\n retrievalTokensUsed += tokens;\n }\n }\n }\n\n // Inject retrieval sections into the assembled context\n if (retrievalSections.length > 0) {\n const retrievalText = retrievalSections.join(\"\\n\\n\");\n const frontierText = base.frontierText\n ? `${base.frontierText}\\n\\n${retrievalText}`\n : retrievalText;\n return {\n ...base,\n frontierText,\n tokenEstimate: base.tokenEstimate + retrievalTokensUsed,\n };\n }\n\n return base;\n}\n\nexport interface AssembleWorkerContextOpts {\n store: MessageStore;\n dag: SummaryDAG;\n budget: number;\n taskContext: string;\n instruction: string;\n vectorIndex?: VectorIndex;\n transcriptStore?: TranscriptStore;\n scratchPad?: ScratchPad;\n}\n\n/**\n * Assemble context specifically for a worker dispatch.\n * Workers get: task context + relevant prior summaries + vector retrieval + scratch notes.\n */\nexport async function assembleWorkerContext(opts: AssembleWorkerContextOpts): Promise<AssembledContext> {\n const { vectorIndex, transcriptStore, scratchPad, instruction, budget } = opts;\n\n // Carve ~15% of budget for retrieval context, rest for DAG frontier + ghost cues\n const retrievalBudget = Math.floor(budget * 0.15);\n const dagBudget = budget - retrievalBudget;\n\n const base = assembleContext({\n conversationId: \"__worker__\",\n store: opts.store,\n dag: opts.dag,\n budget: dagBudget,\n freshTailSize: 0,\n taskContext: opts.taskContext,\n });\n\n let retrievalTokensUsed = 0;\n const retrievalSections: string[] = [];\n\n // Vector retrieval: embed instruction → find relevant past transcripts\n if (vectorIndex && transcriptStore) {\n const transcriptIds = await vectorIndex.search(instruction, 3);\n if (transcriptIds.length > 0) {\n const transcripts = await Promise.all(\n transcriptIds.map((id) => transcriptStore.get(id).then((t) => ({ id, t }))),\n );\n const summaries: string[] = [];\n for (const { id, t: transcript } of transcripts) {\n if (!transcript) continue;\n const lastEntry = transcript.messages[transcript.messages.length - 1];\n const lastMsg = lastEntry ? getTextContent(lastEntry.content) : \"\";\n const summary = `- **${id}**: ${transcript.instruction}\\n Result: ${lastMsg.slice(0, 200)}`;\n const tokens = estimateTokens(summary);\n if (retrievalTokensUsed + tokens > retrievalBudget) break;\n summaries.push(summary);\n retrievalTokensUsed += tokens;\n }\n if (summaries.length > 0) {\n retrievalSections.push(`## Relevant Prior Work\\n${summaries.join(\"\\n\")}`);\n }\n }\n }\n\n // Scratch pad: list keys so workers know what notes exist\n if (scratchPad) {\n const keys = await scratchPad.list();\n if (keys.length > 0) {\n const section = `## Scratch Notes\\nAvailable notes (use ScratchPad_Read to view): ${keys.join(\", \")}`;\n const tokens = estimateTokens(section);\n if (retrievalTokensUsed + tokens <= retrievalBudget) {\n retrievalSections.push(section);\n retrievalTokensUsed += tokens;\n }\n }\n }\n\n // Inject retrieval sections into the assembled context\n if (retrievalSections.length > 0) {\n const retrievalText = retrievalSections.join(\"\\n\\n\");\n const frontierText = base.frontierText\n ? `${base.frontierText}\\n\\n${retrievalText}`\n : retrievalText;\n return {\n ...base,\n frontierText,\n tokenEstimate: base.tokenEstimate + retrievalTokensUsed,\n };\n }\n\n return base;\n}\n\n/** Build frontier text + ghost cues from DAG, using transitive coverage */\nfunction buildFrontierAndGhostCues(\n dag: SummaryDAG,\n frontierBudget: number,\n): {\n ghostCues: GhostCue[];\n frontierText: string | null;\n ghostCueText: string | null;\n} {\n const ghostCues: GhostCue[] = [];\n const allNodes = dag.getAllNodes();\n if (allNodes.length === 0) {\n return { ghostCues, frontierText: null, ghostCueText: null };\n }\n\n const { frontier, coveredIds } = dag.getFrontier(frontierBudget);\n const frontierIds = new Set(frontier.map((n) => n.id));\n\n let frontierText: string | null = null;\n if (frontier.length > 0) {\n const text = frontier\n .map((node) => formatSummaryForContext(node))\n .join(\"\\n\\n\");\n frontierText = `## Prior Work (${frontier.length} episodes)\\n${text}`;\n }\n\n // Ghost cues for nodes not in frontier and not transitively covered\n const expandTool = \"history_expand\";\n const grepTool = \"history_search\";\n\n for (const node of allNodes) {\n if (frontierIds.has(node.id)) continue;\n if (coveredIds.has(node.id)) continue;\n if (node.depth === 0) {\n ghostCues.push({\n summaryId: node.id,\n conversationIds: node.sourceConversationIds,\n depth: node.depth,\n label: `[compacted — use ${expandTool}('${node.id}') for detail]`,\n });\n }\n }\n\n let ghostCueText: string | null = null;\n if (ghostCues.length > 0) {\n const maxCues = 10;\n const cueText = ghostCues\n .slice(0, maxCues)\n .map((cue) => `- ${cue.summaryId}: ${cue.label}`)\n .join(\"\\n\");\n const remaining = ghostCues.length > maxCues ? `\\n... and ${ghostCues.length - maxCues} more` : \"\";\n ghostCueText = `## Compacted History\\n${cueText}${remaining}\\n\\nUse ${grepTool} to search across all stored messages, or ${expandTool} to hydrate a specific summary.`;\n }\n\n return { ghostCues, frontierText, ghostCueText };\n}\n\nfunction formatSummaryForContext(node: SummaryNode): string {\n const depthLabel =\n node.depth === 0\n ? \"episode\"\n : node.depth === 1\n ? \"rollup\"\n : `rollup-d${node.depth}`;\n return `### ${node.id} (${depthLabel})\\n${node.summary}`;\n}\n\nfunction storedToAgentMessage(msg: StoredMessage): AgentMessage {\n if (msg.attachments && msg.attachments.length > 0) {\n const parts: ContentPart[] = [];\n if (msg.content) {\n const text = typeof msg.content === \"string\" ? msg.content : getTextContent(msg.content);\n if (text) parts.push({ type: \"text\", text });\n }\n for (const a of msg.attachments) {\n parts.push({\n type: \"image\",\n image: Buffer.from(a.imageBase64, \"base64\"),\n mimeType: a.mimeType,\n });\n }\n return {\n role: msg.role,\n content: parts,\n ...(msg.toolCalls ? { toolCalls: msg.toolCalls } : {}),\n ...(msg.toolResults ? { toolResults: msg.toolResults } : {}),\n };\n }\n return {\n role: msg.role,\n content: msg.content,\n ...(msg.toolCalls ? { toolCalls: msg.toolCalls } : {}),\n ...(msg.toolResults ? { toolResults: msg.toolResults } : {}),\n };\n}\n","import type { DispatchRecord } from \"../types\";\nimport type { SummaryNode } from \"./summary-dag\";\n\n/**\n * Build a depth-0 (leaf) summary node from a completed dispatch record.\n * Reads artifacts and actions directly from the worker result.\n */\nexport function buildLeafSummary(\n record: DispatchRecord,\n): SummaryNode {\n const conversationId = `worker_${record.tuple.id}`;\n const a = record.artifact;\n const wr = record.workerResult;\n\n // Artifact URIs from worker execution\n const artifactUris = (wr?.artifacts ?? [])\n .filter((x) => x.action === \"produced\" || x.action === \"modified\")\n .map((x) => x.uri);\n\n const summaryParts = [\n `[${a.status}] ${record.tuple.instruction}`,\n `steps: ${a.stepsUsed}/${record.tuple.steps}`,\n a.summary,\n ];\n if (artifactUris.length > 0) {\n summaryParts.push(`produced: ${artifactUris.join(\", \")}`);\n }\n // Include last few actions for context\n const actions = a.actions ?? wr?.actions ?? [];\n if (actions.length > 0) {\n summaryParts.push(`actions: ${actions.slice(-5).join(\"; \")}`);\n }\n\n const summary = summaryParts.join(\"\\n\");\n\n return {\n id: `summary_d0_${record.tuple.id}`,\n depth: 0,\n sourceIds: [record.transcriptId],\n sourceConversationIds: [conversationId],\n summary,\n artifacts: artifactUris,\n operations: [],\n outcome: a.status,\n tokenCount: Math.ceil(summary.length / 4),\n createdAt: record.completedAt,\n };\n}\n","import { randomUUID } from \"node:crypto\";\nimport { getTextContent, type AgentMessage } from \"../agent/types\";\nimport type { HookRunner } from \"../hooks/hook-runner\";\nimport type { HarnessTelemetry } from \"../observability/otel\";\nimport { recordCompaction } from \"../observability/metrics\";\nimport { traceStep } from \"../observability/tracing\";\nimport type { ToolProvider } from \"../interfaces/tool-provider\";\nimport type { AnyTool } from \"./shared-types\";\nimport type { ModelFactory } from \"./shared-types\";\nimport type { Tool } from \"./tool-registry\";\nimport type {\n ArcEvent,\n ArcTraceEvent,\n Artifact,\n ArtifactStore,\n DispatchRecord,\n DispatchTier,\n Transcript,\n TranscriptStore,\n Tuple,\n ScratchPad,\n VectorIndex,\n WorkerProgressEvent,\n WorkerResult,\n} from \"./types\";\nimport type { MessageStore } from \"./lcm/message-store\";\nimport type { SummaryDAG } from \"./lcm/summary-dag\";\nimport { runWorker } from \"./worker\";\nimport { assembleWorkerContext, type AssembledContext } from \"./lcm/context-assembler\";\nimport { buildLeafSummary } from \"./lcm/compactor\";\nimport { cloneForTrace } from \"./trace-utils\";\nimport { normalizeExpectedOutput } from \"./tools\";\nimport {\n ABSOLUTE_MAX_WORKER_STEPS,\n DEFAULT_WORKER_STEP_BUDGETS,\n} from \"./worker-budgets\";\n\n// ── Deps / State interfaces ──\n\nexport interface DispatchDeps {\n task: string;\n workDir: string;\n maxStepsPerWorker: number;\n createModel: ModelFactory;\n workerModel: string;\n /** Per-tier worker model overrides. Falls back to workerModel. */\n workerModelMap?: Partial<Record<DispatchTier, string>> | undefined;\n /** Per-tier worker step budgets. Falls back to default tier budgets. */\n workerStepBudgets?: Partial<Record<DispatchTier, number>> | undefined;\n toolProvider: ToolProvider;\n workerSystemPromptSuffix?: string | undefined;\n providerOptions?: Record<string, unknown> | undefined;\n hookRunner?: HookRunner | undefined;\n telemetry?: HarnessTelemetry | undefined;\n messageStore: MessageStore;\n summaryDAG: SummaryDAG;\n vectorIndex: VectorIndex;\n transcriptStore: TranscriptStore;\n artifactStore: ArtifactStore;\n scratchPad: ScratchPad;\n askUser?: ((question: string, options?: string[]) => Promise<string>) | undefined;\n workerTools: Record<string, AnyTool>;\n workerToolRegistry: Map<string, Tool>;\n allWorkerToolNames: string[];\n appendOrchestratorMessage: (role: \"user\" | \"assistant\" | \"tool\", content: string) => void;\n /** Per model-call timeout in milliseconds for workers. Default: 180000 (3 min). */\n modelCallTimeoutMs?: number | undefined;\n}\n\nexport interface DispatchState {\n turn: number;\n dispatchCount: number;\n dispatchRecords: DispatchRecord[];\n lastArtifact: Artifact | null;\n}\n\ninterface WorkerRunWithProgress {\n result: WorkerResult;\n progress: WorkerProgressEvent[];\n}\n\n// ── Constants ──\n\n/** Hard ceiling on worker steps (initial + extensions via RequestMoreSteps). */\nexport const ABSOLUTE_MAX_STEPS = ABSOLUTE_MAX_WORKER_STEPS;\n\n// ── Functions ──\n\nexport function buildTuple(\n deps: DispatchDeps,\n args: Record<string, unknown>,\n orchestratorContext?: string,\n): Tuple {\n const tier = parseDispatchTier(args.tier);\n const steps = resolveWorkerStepBudget(deps, tier);\n const continuationOf = stringArg(args.continuationOf);\n const continuationReason = parseContinuationReason(args.continuationReason);\n const continuationSummary = stringArg(args.continuationSummary);\n const role = stringArg(args.role);\n return {\n id: `tuple_${randomUUID().slice(0, 8)}`,\n instruction: String(args.instruction ?? \"\"),\n inputs: Array.isArray(args.inputs) ? args.inputs.map(String) : [],\n expectedOutput: normalizeExpectedOutput(args.expectedOutput),\n tools: deps.allWorkerToolNames,\n steps,\n ...(tier ? { tier } : {}),\n ...(role ? { role } : {}),\n orchestratorContext,\n ...(continuationOf ? { continuationOf } : {}),\n ...(continuationReason ? { continuationReason } : {}),\n ...(continuationSummary ? { continuationSummary } : {}),\n };\n}\n\n/** Resolve the worker model for a dispatch based on its tier. */\nfunction resolveWorkerModel(deps: DispatchDeps, tuple: Tuple): string {\n const tier = tuple.tier ?? \"strong\";\n return deps.workerModelMap?.[tier] ?? deps.workerModel;\n}\n\nfunction parseDispatchTier(value: unknown): DispatchTier | undefined {\n return value === \"fast\" || value === \"medium\" || value === \"strong\"\n ? value\n : undefined;\n}\n\nfunction parseContinuationReason(\n value: unknown,\n): Tuple[\"continuationReason\"] {\n return value === \"step_budget\" || value === \"user_steering\"\n ? value\n : undefined;\n}\n\nfunction stringArg(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() ? value.trim() : undefined;\n}\n\nfunction resolveWorkerStepBudget(\n deps: DispatchDeps,\n tier: DispatchTier | undefined,\n): number {\n const configured = tier ? deps.workerStepBudgets?.[tier] : deps.maxStepsPerWorker;\n const fallback = tier ? DEFAULT_WORKER_STEP_BUDGETS[tier] : deps.maxStepsPerWorker;\n return Math.max(1, Math.min(configured ?? fallback, ABSOLUTE_MAX_STEPS));\n}\n\nexport async function getInputArtifacts(\n artifactStore: ArtifactStore,\n toolProvider: ToolProvider,\n inputs: string[],\n): Promise<Map<string, string>> {\n const result = new Map<string, string>();\n for (const id of inputs) {\n const artifact = await artifactStore.get(id);\n if (artifact?.output) {\n try {\n const fileResult = await toolProvider.readFile(artifact.output);\n if (fileResult.success) {\n result.set(id, fileResult.output);\n continue;\n }\n } catch {\n // Fall through to textual handoff below.\n }\n }\n if (artifact?.textOutput) {\n result.set(id, artifact.textOutput);\n continue;\n }\n if (artifact?.summary) {\n result.set(id, artifact.summary);\n }\n }\n return result;\n}\n\n/**\n * Run multiple dispatch calls in parallel, streaming events from all workers\n * interleaved, then record all results.\n */\nexport async function* runParallelDispatches(\n deps: DispatchDeps,\n state: DispatchState,\n calls: { toolCall: unknown; args: Record<string, unknown> }[],\n publicRationale: string,\n signal?: AbortSignal,\n): AsyncGenerator<ArcEvent> {\n // Build tuples and emit dispatch events\n const tuples: Tuple[] = [];\n for (const { args } of calls) {\n state.dispatchCount++;\n const tuple = buildTuple(deps, args, publicRationale);\n tuples.push(tuple);\n if (tuple.continuationOf) {\n yield {\n type: \"worker_continuation\",\n tupleId: tuple.id,\n fromTupleId: tuple.continuationOf,\n reason: tuple.continuationReason ?? \"step_budget\",\n summary: tuple.continuationSummary ?? \"continuing from checkpoint\",\n };\n }\n yield { type: \"dispatch_full\", tuple };\n yield {\n type: \"dispatch\",\n tupleId: tuple.id,\n instruction: tuple.instruction,\n };\n yield {\n type: \"trace\",\n trace: {\n scope: \"orchestrator\",\n phase: \"tool_call\",\n turn: state.turn,\n toolName: \"dispatch\",\n args: cloneForTrace(args),\n },\n };\n }\n\n // Launch all workers concurrently, collecting streamed events\n const queuedEvents: ArcEvent[] = [];\n const workerPromises: Promise<{ tuple: Tuple; run: WorkerRunWithProgress }>[] = [];\n\n for (const tuple of tuples) {\n // For continuation dispatches, resume the prior worker's conversation\n // instead of building a fresh prompt. The user's steering message (or\n // \"Continue from where you left off.\") is appended as a user message.\n let resumeMessages: AgentMessage[] | undefined;\n let stepsAlreadyUsed = 0;\n\n if (tuple.continuationOf) {\n const priorRecord = state.dispatchRecords.find(\n (r) => r.tuple.id === tuple.continuationOf,\n );\n if (priorRecord) {\n const transcript = await deps.transcriptStore.get(priorRecord.transcriptId);\n if (transcript && transcript.messages.length > 0) {\n resumeMessages = transcript.messages;\n stepsAlreadyUsed = priorRecord.artifact.stepsUsed;\n }\n }\n }\n\n // Only build fresh context for non-continuation dispatches.\n // Resumed workers already have all context in their conversation history.\n let workerContext: AssembledContext | undefined;\n\n if (!resumeMessages) {\n const sections = [\n `## Original Task\\n${deps.task}`,\n `## Workspace\\nCurrent workspace root: ${deps.workDir}`,\n `## Worker Budget\\nmax_steps: ${tuple.steps}`,\n tuple.expectedOutput\n ? `## Expected Output Contract\\n${JSON.stringify(tuple.expectedOutput, null, 2)}`\n : \"\",\n ];\n\n // Inject transcripts from prior incomplete/failed dispatches so the new worker\n // sees exactly what was already attempted — no explicit input wiring needed.\n const priorWork = await traceStep(\n deps.telemetry,\n \"arc.dispatch.prior_work_context\",\n { tupleId: tuple.id, dispatchRecords: state.dispatchRecords.length },\n () => buildPriorWorkContext(\n state.dispatchRecords,\n deps.transcriptStore,\n 4_000,\n ),\n );\n if (priorWork) sections.push(priorWork);\n\n const workerTaskContext = sections.filter(Boolean).join(\"\\n\\n\");\n\n workerContext = await traceStep(\n deps.telemetry,\n \"arc.dispatch.assemble_worker_context\",\n { tupleId: tuple.id, tier: tuple.tier ?? \"strong\", budget: 12_000 },\n () => assembleWorkerContext({\n store: deps.messageStore,\n dag: deps.summaryDAG,\n budget: 12_000,\n taskContext: workerTaskContext,\n instruction: tuple.instruction,\n vectorIndex: deps.vectorIndex,\n transcriptStore: deps.transcriptStore,\n scratchPad: deps.scratchPad,\n }),\n );\n }\n\n const progressEvents: WorkerProgressEvent[] = [];\n const { hookRunner } = deps;\n const promise = (async () => {\n // BeforeWorker hook\n if (hookRunner) {\n const pre = await hookRunner.run({ event: \"BeforeWorker\", metadata: { tupleId: tuple.id, instruction: tuple.instruction } });\n if (!pre.allow) {\n const failResult: WorkerResult = {\n transcript: [],\n output: null,\n status: \"failed\",\n stepsUsed: 0,\n lastMessage: pre.reason ?? \"blocked by BeforeWorker hook\",\n actions: [],\n artifacts: [],\n };\n return { tuple, run: { result: failResult, progress: progressEvents } };\n }\n }\n const model = resolveWorkerModel(deps, tuple);\n const inputArtifacts = await traceStep(\n deps.telemetry,\n \"arc.dispatch.input_artifacts\",\n { tupleId: tuple.id, inputCount: tuple.inputs.length },\n () => getInputArtifacts(deps.artifactStore, deps.toolProvider, tuple.inputs),\n );\n // For continuations, adjust maxSteps to remaining budget.\n // The worker will add stepsAlreadyUsed back to get the correct effectiveMaxSteps.\n const effectiveMaxSteps = resumeMessages\n ? Math.max(1, tuple.steps - stepsAlreadyUsed)\n : tuple.steps;\n const result = await traceStep(\n deps.telemetry,\n \"arc.worker.run\",\n { tupleId: tuple.id, tier: tuple.tier ?? \"strong\", model, maxSteps: effectiveMaxSteps },\n () => runWorker({\n task: deps.task,\n instruction: tuple.instruction,\n expectedOutput: tuple.expectedOutput,\n lcmContext: workerContext,\n inputArtifacts,\n tools: deps.workerTools,\n toolRegistry: deps.workerToolRegistry,\n maxSteps: effectiveMaxSteps,\n toolProvider: deps.toolProvider,\n createModel: deps.createModel,\n model,\n workDir: deps.workDir,\n signal,\n systemPromptSuffix: deps.workerSystemPromptSuffix,\n providerOptions: deps.providerOptions,\n role: tuple.role,\n orchestratorContext: tuple.orchestratorContext,\n tupleId: tuple.id,\n hookRunner,\n telemetry: deps.telemetry,\n modelCallTimeoutMs: deps.modelCallTimeoutMs,\n // Resume fields — only set for continuation dispatches\n ...(resumeMessages ? { resumeMessages, stepsAlreadyUsed } : {}),\n onProgress: (progress) => {\n progressEvents.push(progress);\n queuedEvents.push({\n type: \"worker_progress\",\n tupleId: tuple.id,\n progress,\n });\n },\n onTrace: (trace: ArcTraceEvent) => {\n queuedEvents.push({ type: \"trace\", trace });\n },\n }),\n );\n // AfterWorker hook\n if (hookRunner) {\n await hookRunner.run({ event: \"AfterWorker\", metadata: { tupleId: tuple.id, status: result.status } });\n }\n return { tuple, run: { result, progress: progressEvents } };\n })();\n\n workerPromises.push(promise);\n }\n\n // Stream interleaved events while workers run\n const allSettled = Promise.allSettled(workerPromises);\n let settled = false;\n allSettled.then(() => { settled = true; });\n while (!settled || queuedEvents.length > 0) {\n while (queuedEvents.length > 0) {\n const event = queuedEvents.shift();\n if (event) yield event;\n }\n if (!settled) {\n await sleep(100);\n }\n }\n\n // Process all results\n const results = await allSettled;\n for (let i = 0; i < results.length; i++) {\n const result = results[i]!;\n if (result.status === \"rejected\") {\n // Synthesize a failure event so the orchestrator sees the outcome\n const tuple = tuples[i]!;\n const error = result.reason instanceof Error ? result.reason.message : String(result.reason);\n yield {\n type: \"worker_complete\",\n tupleId: tuple.id,\n status: \"failed\" as const,\n summary: `Worker error: ${error}`,\n stepsUsed: 0,\n };\n deps.appendOrchestratorMessage(\"user\", `[result] Status: failed\\nSummary: Worker error: ${error}`);\n continue;\n }\n const { tuple, run } = result.value;\n yield* recordDispatchResult(deps, state, tuple, run);\n }\n}\n\n/**\n * Record a completed dispatch: create artifact, store transcript, build\n * projection/summary, emit events, update orchestrator history.\n */\nasync function* recordDispatchResult(\n deps: DispatchDeps,\n state: DispatchState,\n tuple: Tuple,\n workerRun: WorkerRunWithProgress,\n): AsyncGenerator<ArcEvent> {\n const workerResult = workerRun.result;\n\n const artifact: Artifact = {\n id: tuple.id,\n tupleId: tuple.id,\n output: workerResult.output,\n textOutput: workerResult.lastMessage,\n status: workerResult.status,\n summary: workerResult.lastMessage.slice(0, 200),\n stepsUsed: workerResult.stepsUsed,\n actions: workerResult.actions,\n instruction: tuple.instruction,\n };\n\n await traceStep(\n deps.telemetry,\n \"arc.store.artifact_set\",\n { tupleId: tuple.id, status: artifact.status },\n () => deps.artifactStore.set(tuple.id, artifact),\n );\n state.lastArtifact = artifact;\n\n yield {\n type: \"worker_complete\",\n tupleId: tuple.id,\n status: artifact.status,\n summary: artifact.summary,\n stepsUsed: artifact.stepsUsed,\n actions: artifact.actions,\n };\n\n const transcript: Transcript = {\n id: `transcript_${tuple.id}`,\n tupleId: tuple.id,\n instruction: tuple.instruction,\n messages: workerResult.transcript,\n timestamp: Date.now(),\n };\n await traceStep(\n deps.telemetry,\n \"arc.store.transcript_append\",\n { tupleId: tuple.id, messages: transcript.messages.length },\n () => deps.transcriptStore.append(transcript),\n );\n\n const workerConversationId = `worker_${tuple.id}`;\n for (const [idx, msg] of workerResult.transcript.entries()) {\n deps.messageStore.append({\n id: `${workerConversationId}_msg_${idx}`,\n conversationId: workerConversationId,\n index: idx,\n role: msg.role === \"tool\" ? \"tool\" : msg.role === \"assistant\" ? \"assistant\" : \"user\",\n content: getTextContent(msg.content),\n ...(msg.toolCalls ? { toolCalls: msg.toolCalls } : {}),\n ...(msg.toolResults ? { toolResults: msg.toolResults } : {}),\n timestamp: transcript.timestamp,\n });\n }\n\n const dispatchRecord: DispatchRecord = {\n tuple,\n artifact,\n transcriptId: transcript.id,\n progress: workerRun.progress,\n completedAt: transcript.timestamp,\n };\n dispatchRecord.workerResult = workerResult;\n state.dispatchRecords.push(dispatchRecord);\n\n const leafSummary = buildLeafSummary(dispatchRecord);\n deps.summaryDAG.addLeaf(leafSummary);\n const compacted = await traceStep(\n deps.telemetry,\n \"arc.lcm.compact\",\n { tupleId: tuple.id },\n async () => deps.summaryDAG.compact(),\n );\n if (compacted.length > 0) recordCompaction(deps.telemetry);\n\n yield {\n type: \"trace\",\n trace: {\n scope: \"orchestrator\",\n phase: \"tool_result\",\n turn: state.turn,\n toolName: \"dispatch\",\n args: cloneForTrace({ instruction: tuple.instruction }),\n result: {\n tuple: cloneForTrace(tuple),\n artifact: cloneForTrace(artifact),\n transcript: cloneForTrace(transcript),\n progress: cloneForTrace(workerRun.progress),\n workerResult: cloneForTrace(workerResult),\n },\n },\n };\n\n const textToEmbed = `${tuple.instruction}\\n${workerResult.lastMessage}`;\n traceStep(\n deps.telemetry,\n \"arc.vector.add\",\n { tupleId: tuple.id, transcriptId: transcript.id },\n () => deps.vectorIndex.add(transcript.id, textToEmbed),\n ).catch(() => {});\n\n const actionsText = artifact.actions?.length\n ? `\\nActions:\\n${artifact.actions.map((a) => `- ${a}`).join(\"\\n\")}`\n : \"\";\n const textOutput =\n artifact.textOutput && artifact.textOutput !== artifact.summary\n ? `\\nText output:\\n${artifact.textOutput}`\n : \"\";\n deps.appendOrchestratorMessage(\"assistant\", `[dispatch] ${tuple.instruction}`);\n deps.appendOrchestratorMessage(\"user\", `[result] Status: ${artifact.status}\\nSummary: ${artifact.summary}${textOutput}${actionsText}`);\n\n // Failure/incomplete signals — help the orchestrator decide next steps\n if (artifact.status === \"failed\") {\n deps.appendOrchestratorMessage(\"user\",\n `⚠ Worker failed. Review the output and dispatch a corrective worker.`);\n } else if (artifact.status === \"incomplete\") {\n const actionsSummary = (artifact.actions ?? []).slice(-5).join(\"\\n \");\n deps.appendOrchestratorMessage(\"user\",\n `Worker ran out of steps but made progress. Actions:\\n ${actionsSummary}\\nCheck if the result is already sufficient. Redispatch to finish — the new worker will automatically see prior attempt history.`);\n }\n}\n\n/**\n * Build prior worker history from incomplete/failed/interrupted dispatches.\n * Automatically included — no explicit input wiring needed.\n * Most recent attempts first, budget-capped.\n */\nasync function buildPriorWorkContext(\n dispatchRecords: readonly DispatchRecord[],\n transcriptStore: TranscriptStore,\n budgetChars: number,\n): Promise<string | null> {\n // Only include non-complete attempts — completed dispatches don't need continuation\n const relevant = dispatchRecords.filter(\n (r) =>\n r.artifact.status === \"incomplete\" ||\n r.artifact.status === \"failed\" ||\n r.artifact.status === \"interrupted\",\n );\n if (relevant.length === 0) return null;\n\n const sections: string[] = [];\n let charsUsed = 0;\n\n // Most recent first — more relevant for continuation\n for (const record of relevant.slice().reverse()) {\n const transcript = await transcriptStore.get(record.transcriptId);\n if (!transcript || transcript.messages.length === 0) continue;\n\n const header = `### Prior Attempt: ${record.tuple.id} [${record.artifact.status}]\\nInstruction: ${record.tuple.instruction}`;\n charsUsed += header.length;\n if (charsUsed > budgetChars) break;\n\n const lines: string[] = [header];\n // Walk transcript messages, newest first for budget trimming\n const msgs = transcript.messages;\n for (let i = msgs.length - 1; i >= 0 && charsUsed < budgetChars; i--) {\n const msg = msgs[i]!;\n const text = getTextContent(msg.content);\n const toolCalls = msg.toolCalls?.map(\n (tc) => `${tc.toolName}(${Object.values(tc.args).map((v) => String(v).slice(0, 100)).join(\", \").slice(0, 200)})`,\n );\n const toolResults = msg.toolResults?.map(\n (tr) => `${tr.toolName}: ${tr.isError ? \"ERROR \" : \"\"}${tr.result.slice(0, 300)}`,\n );\n\n const parts: string[] = [];\n if (text) parts.push(text.slice(0, 500));\n if (toolCalls?.length) parts.push(`Tools: ${toolCalls.join(\"; \")}`);\n if (toolResults?.length) parts.push(toolResults.join(\"\\n\"));\n\n if (parts.length === 0) continue;\n const entry = `[${msg.role}] ${parts.join(\"\\n\")}`;\n charsUsed += entry.length;\n lines.splice(1, 0, entry); // insert after header to maintain chronological order\n }\n\n sections.push(lines.join(\"\\n\"));\n }\n\n if (sections.length === 0) return null;\n return `## Prior Worker History\\n${sections.join(\"\\n\\n\")}`;\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n","import { generateText } from \"ai\";\nimport { anthropic as defaultAnthropicProvider } from \"@ai-sdk/anthropic\";\nimport { traceStep } from \"../observability/tracing\";\nimport type { AgentMessage } from \"../agent/types\";\nimport type { AnyTool } from \"./shared-types\";\nimport { toModelMessages } from \"./message-convert\";\nimport { truncate } from \"./utils\";\nimport type {\n ArcConfig,\n ArcEvent,\n Artifact,\n OrchestratorContext,\n DispatchRecord,\n SessionSnapshot,\n TraceToolCall,\n ReadEpisodeArgs,\n ScratchPad,\n VectorIndex,\n TranscriptStore,\n ArtifactStore,\n WorkerProgressEvent,\n} from \"./types\";\nimport { dispatch, done, buildWorkerToolEntries, buildOrchestratorToolEntries, type ArcToolDeps } from \"./tools\";\nimport { toolSchemasFromRegistry, type Tool } from \"./tool-registry\";\nimport { runWorker } from \"./worker\";\nimport {\n MemoryTranscriptStore,\n MemoryVectorIndex,\n MemoryArtifactStore,\n MemoryScratchPad,\n} from \"./stores/memory-stores\";\nimport type { JobEvent, JobRegistry } from \"./jobs/types.js\";\nimport { MemoryJobRegistry } from \"./jobs/memory-job-registry.js\";\nimport {\n buildOodaSnapshot,\n formatOodaSnapshotForPrompt,\n formatReadEpisodeResult,\n} from \"./episode-projection\";\nimport {\n MemoryMessageStore,\n type GrepResult,\n type MessageStore,\n type StoredAttachment,\n} from \"./lcm/message-store\";\nimport { MemorySummaryDAG, type SummaryDAG } from \"./lcm/summary-dag\";\nimport { assembleOrchestratorContext } from \"./lcm/context-assembler\";\nimport { cloneForTrace } from \"./trace-utils\";\nimport { ORCHESTRATOR_SYSTEM_PROMPT } from \"./prompts\";\nimport {\n DEFAULT_MAX_STEPS_PER_WORKER,\n DEFAULT_WORKER_STEP_BUDGETS,\n} from \"./worker-budgets\";\nimport {\n expandSummary,\n describeSummary,\n recallDirect,\n historyRead,\n type HistoryExpandOptions,\n type HistoryReadOptions,\n type LcmToolDeps,\n} from \"./lcm/tools\";\nimport { runParallelDispatches, type DispatchDeps, type DispatchState } from \"./dispatcher\";\n\nconst DEFAULT_WINDOW_SIZE = 10;\nconst DEFAULT_MAX_TURNS = 12;\nconst DEFAULT_MODEL_CALL_TIMEOUT_MS = 180_000;\nconst DEFAULT_CONTEXT_BUDGET = 24_000; // tokens for assembled context\nconst DEFAULT_FRESH_TAIL_SIZE = 6; // raw messages to keep\nconst DONE_GATE_OUTPUT_MAX_CHARS = 6_000;\nconst DIRECT_AUTO_FINALIZE_MAX_CHARS = 4_000;\nconst SNAPSHOT_PROGRESS_TEXT_MAX_CHARS = 2_000;\nconst SESSION_CHECKPOINT_MIN_INTERVAL_MS = 1_000;\nconst MAX_INTERNAL_WORKER_CONTINUATIONS = 2;\n/**\n * Hard cap on consecutive dispatch rounds where every dispatch ended in\n * failed/incomplete. At threshold the loop force-completes the task with an\n * error so a runaway orchestrator can't burn its turn budget retrying the same\n * environmental failure (e.g., worker model timing out repeatedly).\n */\nconst MAX_CONSECUTIVE_FAILED_DISPATCH_ROUNDS = 4;\n\nconst DONE_GATE_SYSTEM_PROMPT = `You are ARC's completion gate. Decide whether the latest worker result satisfies the user's task.\n\nYou may not request tools.\nYou may not dispatch work.\nYou may not inspect history.\n\nReturn only JSON:\n{\n \"decision\": \"finalize\" | \"continue\",\n \"finalOutput\": string | null,\n \"reason\": string\n}\n\nFinalize only if the worker result satisfies the user's task, no required verification or synthesis is missing, and the output does not express uncertainty.\nFor a single complete worker result, do not paraphrase or summarize it. If it is enough, finalOutput should be the worker_output verbatim.\nContinue if the result is incomplete, failed, missing required details, requires verification, needs tool/history access, or files/code were changed and checks are still needed.`;\n\n/** Control-flow tools (handled directly by the loop, not via registry execute) */\nconst controlFlowTools = { dispatch, done };\n\nexport interface ArcRunResult {\n output: string;\n events: ArcEvent[];\n}\n\nexport type PushResult =\n | { delivered: \"as_task\" }\n | { delivered: \"as_interjection\"; position: number }\n | { delivered: \"dropped\"; reason: \"in_ask_user\" };\n\nexport interface PushTaskOptions {\n /** Multimodal attachments to attach to the resulting user message. */\n attachments?: StoredAttachment[];\n}\n\ninterface PendingInterjection {\n msg: string;\n attachments?: StoredAttachment[];\n}\n\nexport class ArcLoop {\n private config: ArcConfig;\n private readonly transcriptStore: TranscriptStore;\n private readonly vectorIndex: VectorIndex;\n private readonly scratchPad: ScratchPad;\n private readonly artifactStore: ArtifactStore;\n private readonly jobRegistry: JobRegistry;\n /** Non-output job events queued for orchestrator turn-boundary injection. */\n private pendingJobEvents: JobEvent[] = [];\n /** Events that need to flow out of the async generator stream (job events, interjection lifecycle). */\n private pendingArcEvents: ArcEvent[] = [];\n private jobUnsubscribe: (() => void) | null = null;\n private readonly telemetry: ArcConfig[\"telemetry\"];\n // LCM stores — mutable for session hydration\n private messageStore: MessageStore = new MemoryMessageStore();\n private summaryDAG: SummaryDAG = new MemorySummaryDAG();\n private readonly createModel: ArcConfig[\"createModel\"];\n private readonly windowSize: number;\n private readonly model: string;\n private readonly doneGateModel: string;\n /** Full orchestrator system prompt (base + optional suffix). */\n private readonly orchestratorSystem: { role: \"system\"; content: string; providerOptions: Record<string, unknown> }[];\n\n /** Orchestrator tool schemas (for the model) */\n private readonly orchestratorToolSchemas: Record<string, AnyTool>;\n /** Orchestrator tool registry (for execute) — excludes dispatch/done (control flow) */\n private readonly orchestratorToolRegistry: Map<string, Tool>;\n /** ARC framework tools that are always available to workers. */\n private readonly workerArcTools: Map<string, Tool>;\n\n /** Dispatcher deps + mutable state — shared with dispatcher.ts functions */\n private readonly dispatchDeps: DispatchDeps;\n private readonly dispatchState: DispatchState;\n\n private orchestratorMessageIndex = 0;\n private turn = 0;\n private maxTurns: number;\n private readonly inFlightDispatches = new Map<string, InFlightDispatchSnapshot>();\n private readonly historySearchesThisTask = new Set<string>();\n private readonly historyReadsThisTask = new Set<string>();\n private readonly historyExpansionsThisTask = new Set<string>();\n private readonly historyExpansionSummaryCache = new Map<string, string>();\n private lastSessionCheckpointAt = 0;\n /** Per-turn abort controller — cancelled by interrupt(), refreshed each turn. */\n private turnController = new AbortController();\n /** Resolver for the next task — set when the loop is waiting between tasks. */\n private taskResolve: ((task: PendingInterjection | null) => void) | null = null;\n private pendingInterjections: PendingInterjection[] = [];\n /** Image attachments for the currently active task. Injected into orchestrator prompts. */\n private currentTaskAttachments: StoredAttachment[] | undefined;\n /** Consecutive dispatch rounds where every dispatch ended in failed/incomplete. Forces done at threshold. */\n private consecutiveFailedDispatchRounds = 0;\n private askUserPending = false;\n private readonly modelCallTimeoutMs: number;\n\n constructor(config: ArcConfig) {\n this.config = config;\n this.currentTaskAttachments = config.initialAttachments;\n this.maxTurns = config.maxTurns ?? DEFAULT_MAX_TURNS;\n this.modelCallTimeoutMs = config.modelCallTimeoutMs ?? DEFAULT_MODEL_CALL_TIMEOUT_MS;\n this.createModel = config.createModel ?? defaultAnthropicProvider;\n this.transcriptStore = config.transcriptStore ?? new MemoryTranscriptStore();\n this.artifactStore = config.artifactStore ?? new MemoryArtifactStore();\n this.vectorIndex = config.vectorIndex ?? new MemoryVectorIndex();\n this.scratchPad = config.scratchPad ?? new MemoryScratchPad();\n this.jobRegistry = config.jobRegistry ?? new MemoryJobRegistry();\n this.jobUnsubscribe = this.jobRegistry.subscribe((event) => {\n // Always forward to ArcEvent stream so external listeners (TUI) see every state change.\n this.pendingArcEvents.push({ type: \"job_event\", event });\n // Structural (non-output) events are queued for orchestrator turn-boundary injection.\n // Output churn is excluded so it doesn't inflate the orchestrator prompt.\n if (event.type === \"job_output\") return;\n this.pendingJobEvents.push(event);\n });\n this.telemetry = config.telemetry;\n this.windowSize = config.orchestratorWindowSize ?? DEFAULT_WINDOW_SIZE;\n this.model = config.model;\n this.doneGateModel =\n config.doneGateModel ?? config.workerModelMap?.fast ?? config.workerModel;\n\n // Build orchestrator system prompt (base + optional suffix)\n const systemText = config.orchestratorSystemPromptSuffix\n ? `${ORCHESTRATOR_SYSTEM_PROMPT}\\n\\n${config.orchestratorSystemPromptSuffix}`\n : ORCHESTRATOR_SYSTEM_PROMPT;\n this.orchestratorSystem = [{\n role: \"system\" as const,\n content: systemText,\n providerOptions: {\n anthropic: { cacheControl: { type: \"ephemeral\" } },\n openrouter: { cacheControl: { type: \"ephemeral\" } },\n },\n }];\n\n // LCM tool deps — closures capture `this` so property reads follow live references\n const lcmDeps: LcmToolDeps = {\n messageStore: this.messageStore,\n summaryDAG: this.summaryDAG,\n vectorIndex: this.vectorIndex,\n transcriptStore: this.transcriptStore,\n findDispatchRecord: (summaryId) => this.findEpisodeRecordBySummaryId(summaryId),\n summarizeHistoryExpansion: (args) => this.summarizeHistoryExpansion(args),\n };\n\n // Build deps for tool factories\n const toolDeps: ArcToolDeps = {\n readEpisode: (args) => this.readEpisode(args),\n historySearch: (pattern, opts) => this.searchHistoryWithGuardrails(pattern, opts),\n historyExpand: (summaryId, options) => this.expandHistoryWithGuardrails(lcmDeps, summaryId, options),\n historyOverview: (summaryId) => describeSummary(lcmDeps, summaryId),\n historyRead: (conversationId, messageIndex, options) =>\n this.readHistoryWithGuardrails(lcmDeps, conversationId, messageIndex, options),\n scratchPad: this.scratchPad,\n recall: (query) => recallDirect(lcmDeps, query),\n jobRegistry: this.jobRegistry,\n ...(config.askUser ? { askUser: (question, options) => this.wrappedAskUser(question, options)! } : {}),\n subDispatch: async (args) => {\n const { instruction, expectedOutput, tier, dispatchDepth } = args;\n const tierKey = tier ?? \"medium\";\n const subModel = config.workerModelMap?.[tierKey] ?? config.workerModel;\n const defaultStepBudgets: Record<string, number> = { fast: 12, medium: 24, strong: 30 };\n const subSteps = config.workerStepBudgets?.[tierKey] ?? defaultStepBudgets[tierKey] ?? 30;\n const subResult = await runWorker({\n task: config.task,\n instruction,\n expectedOutput,\n inputArtifacts: new Map(),\n tools: workerTools,\n toolRegistry: workerToolRegistry,\n maxSteps: subSteps,\n toolProvider: config.toolProvider,\n createModel: config.createModel ?? (() => { throw new Error(\"No createModel\"); }),\n model: subModel,\n workDir: config.workDir,\n signal: undefined,\n systemPromptSuffix: config.workerSystemPromptSuffix,\n providerOptions: config.providerOptions,\n dispatchDepth: dispatchDepth + 1,\n telemetry: this.telemetry,\n modelCallTimeoutMs: this.modelCallTimeoutMs,\n });\n // Lossy compaction: return only a compact summary, not the full transcript\n const summaryText = subResult.lastMessage?.slice(0, 500) ?? subResult.output?.slice(0, 500) ?? \"No output\";\n return {\n status: subResult.status,\n summary: summaryText,\n artifacts: subResult.artifacts,\n stepsUsed: subResult.stepsUsed,\n };\n },\n };\n\n this.orchestratorToolRegistry = buildOrchestratorToolEntries(toolDeps);\n this.workerArcTools = buildWorkerToolEntries(toolDeps);\n\n // Orchestrator tool schemas = control flow + registry schemas\n this.orchestratorToolSchemas = {\n ...controlFlowTools,\n ...toolSchemasFromRegistry(this.orchestratorToolRegistry),\n } as unknown as Record<string, AnyTool>;\n\n // Worker tools: agent tools + ARC framework tools\n const agentToolRegistry = config.tools ?? new Map<string, Tool>();\n const workerToolRegistry = new Map(agentToolRegistry);\n for (const [name, tool] of this.workerArcTools) {\n workerToolRegistry.set(name, tool);\n }\n const workerTools = {\n ...toolSchemasFromRegistry(agentToolRegistry),\n ...toolSchemasFromRegistry(this.workerArcTools),\n } as Record<string, AnyTool>;\n\n // Dispatch state — mutated by dispatcher functions, read by buildContext\n this.dispatchState = {\n turn: 0,\n dispatchCount: 0,\n dispatchRecords: [],\n lastArtifact: null,\n };\n\n const workerStepBudgets = config.workerStepBudgets ?? (\n config.maxStepsPerWorker !== undefined\n ? {\n fast: config.maxStepsPerWorker,\n medium: config.maxStepsPerWorker,\n strong: config.maxStepsPerWorker,\n }\n : DEFAULT_WORKER_STEP_BUDGETS\n );\n\n // Dispatch deps — everything the dispatcher needs.\n this.dispatchDeps = {\n task: config.task,\n workDir: config.workDir,\n maxStepsPerWorker: config.maxStepsPerWorker ?? DEFAULT_MAX_STEPS_PER_WORKER,\n workerStepBudgets,\n createModel: this.createModel!,\n workerModel: config.workerModel,\n workerModelMap: config.workerModelMap,\n toolProvider: config.toolProvider,\n workerSystemPromptSuffix: config.workerSystemPromptSuffix,\n providerOptions: config.providerOptions,\n hookRunner: config.hookRunner,\n telemetry: config.telemetry,\n modelCallTimeoutMs: this.modelCallTimeoutMs,\n messageStore: this.messageStore,\n summaryDAG: this.summaryDAG,\n vectorIndex: this.vectorIndex,\n transcriptStore: this.transcriptStore,\n artifactStore: this.artifactStore,\n scratchPad: this.scratchPad,\n ...(config.askUser ? { askUser: (question: string, options?: string[]) => this.wrappedAskUser(question, options)! } : {}),\n workerTools,\n workerToolRegistry,\n allWorkerToolNames: Object.keys(workerTools),\n appendOrchestratorMessage: (role, content) => this.appendOrchestratorMessage(role, content),\n };\n }\n\n /**\n * Replace agent-provided worker tools for future dispatches.\n * Already-running workers keep the tool set they started with.\n */\n refreshWorkerTools(tools: Map<string, Tool>): void {\n const workerToolRegistry = new Map(tools);\n for (const [name, tool] of this.workerArcTools) {\n workerToolRegistry.set(name, tool);\n }\n const workerTools = {\n ...toolSchemasFromRegistry(tools),\n ...toolSchemasFromRegistry(this.workerArcTools),\n } as Record<string, AnyTool>;\n this.dispatchDeps.workerTools = workerTools;\n this.dispatchDeps.workerToolRegistry = workerToolRegistry;\n this.dispatchDeps.allWorkerToolNames = Object.keys(workerTools);\n }\n\n /** Drain events from asynchronous sources (job registry, interjections) into the generator stream. */\n private *drainPendingArcEvents(): Generator<ArcEvent> {\n while (this.pendingArcEvents.length > 0) {\n yield this.pendingArcEvents.shift()!;\n }\n }\n\n private drainPendingJobEvents(): void {\n if (this.pendingJobEvents.length === 0) return;\n for (const event of this.pendingJobEvents) {\n this.appendOrchestratorMessage(\"user\", formatJobEventLine(event));\n }\n this.pendingJobEvents = [];\n }\n\n private drainPendingInterjections(): void {\n if (this.pendingInterjections.length === 0) return;\n const currentTurn = this.turn;\n const items = this.pendingInterjections;\n this.pendingInterjections = [];\n for (let i = 0; i < items.length; i++) {\n const item = items[i]!;\n this.appendOrchestratorMessage(\n \"user\",\n `[user interjection] ${item.msg}`,\n item.attachments,\n );\n this.pendingArcEvents.push({\n type: \"interjection_delivered\",\n position: i + 1,\n turn: currentTurn,\n });\n }\n }\n\n /** Release subscriptions and free resources held by this loop. */\n dispose(): void {\n this.jobUnsubscribe?.();\n this.jobUnsubscribe = null;\n }\n\n /**\n * Interrupt the current turn — cancels in-flight model calls and workers.\n * The orchestrator loop stays alive and will prompt for user steering.\n */\n interrupt(): void {\n this.turnController.abort();\n }\n\n private refreshTurnSignal(sessionSignal?: AbortSignal): AbortSignal {\n this.turnController = new AbortController();\n if (sessionSignal) {\n if (sessionSignal.aborted) {\n this.turnController.abort();\n } else {\n sessionSignal.addEventListener(\n \"abort\",\n () => this.turnController.abort(),\n { once: true },\n );\n }\n }\n return this.turnController.signal;\n }\n\n /** True when the loop is waiting for the next task (between done boundaries). */\n get idle(): boolean {\n return this.taskResolve !== null;\n }\n\n /** Serialize current loop state for UI-level checkpoints. */\n getSessionSnapshot(): SessionSnapshot {\n return this.buildSessionSnapshot();\n }\n\n /** Restore loop state from a prior UI-level checkpoint. */\n restoreSessionSnapshot(snapshot: SessionSnapshot | null): void {\n this.messageStore.loadFrom(snapshot?.messages ?? []);\n this.summaryDAG.loadFrom({\n nodes: snapshot?.dagNodes ?? [],\n coveredBy: snapshot?.dagCoveredBy ?? [],\n });\n this.dispatchState.dispatchRecords.length = 0;\n if (snapshot) {\n this.dispatchState.dispatchRecords.push(...snapshot.dispatches);\n }\n this.inFlightDispatches.clear();\n this.turn = snapshot?.turn ?? 0;\n this.dispatchState.turn = this.turn;\n this.dispatchState.dispatchCount = snapshot?.dispatchCount ?? 0;\n this.dispatchState.lastArtifact = this.dispatchState.dispatchRecords.at(-1)?.artifact ?? null;\n this.orchestratorMessageIndex =\n snapshot?.orchestratorMessageIndex ??\n this.messageStore.getConversation(\"orchestrator\").length;\n }\n\n /**\n * Deliver a message to the orchestrator regardless of loop state.\n * - Idle (waiting for next task): resolves waitForNextTask → becomes next task.\n * - Running: queued as [user interjection], drained at next turn boundary.\n * - Inside askUser: dropped; caller should resolve the askUser promise directly.\n */\n pushTask(msg: string, options?: PushTaskOptions): PushResult {\n if (this.askUserPending) {\n return { delivered: \"dropped\", reason: \"in_ask_user\" };\n }\n const item: PendingInterjection = options?.attachments && options.attachments.length > 0\n ? { msg, attachments: options.attachments }\n : { msg };\n if (this.taskResolve) {\n const resolve = this.taskResolve;\n this.taskResolve = null;\n resolve(item);\n return { delivered: \"as_task\" };\n }\n this.pendingInterjections.push(item);\n const position = this.pendingInterjections.length;\n this.pendingArcEvents.push({ type: \"interjection_queued\", position, text: msg });\n return { delivered: \"as_interjection\", position };\n }\n\n private wrappedAskUser(question: string, options?: string[]): Promise<string> | undefined {\n if (!this.config.askUser) return undefined;\n this.askUserPending = true;\n return Promise.resolve(this.config.askUser(question, options))\n .finally(() => { this.askUserPending = false; });\n }\n\n private waitForNextTask(signal?: AbortSignal): Promise<PendingInterjection | null> {\n if (signal?.aborted) return Promise.resolve(null);\n return new Promise((resolve) => {\n const onAbort = () => {\n this.taskResolve = null;\n resolve(null);\n };\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n this.taskResolve = (task) => {\n signal?.removeEventListener(\"abort\", onAbort);\n resolve(task);\n };\n });\n }\n\n /** Save session snapshot + update meta if a session store is configured. */\n private async saveSession(options: SaveSessionOptions = {}): Promise<ArcEvent | null> {\n const { sessionStore, sessionId } = this.config;\n if (!sessionStore || !sessionId) return null;\n const taskComplete = options.taskComplete ?? true;\n const emitEvent = options.emitEvent ?? true;\n try {\n const snapshot = this.buildSessionSnapshot();\n await traceStep(\n this.telemetry,\n \"arc.session.save_snapshot\",\n { sessionId, turn: this.turn, dispatches: snapshot.dispatches.length, taskComplete },\n () => sessionStore.save(sessionId, snapshot),\n );\n // Update meta with live stats (upsert — works for first save too)\n const existing = await traceStep(\n this.telemetry,\n \"arc.session.get_meta\",\n { sessionId },\n () => sessionStore.getMeta(sessionId),\n );\n await traceStep(\n this.telemetry,\n \"arc.session.save_meta\",\n { sessionId },\n () => sessionStore.saveMeta(sessionId, {\n id: sessionId,\n slug: existing?.slug ?? sessionId.slice(0, 8),\n createdAt: existing?.createdAt ?? Date.now(),\n lastActiveAt: Date.now(),\n taskCount: (existing?.taskCount ?? 0) + (taskComplete ? 1 : 0),\n summary: truncate(this.config.task, 120),\n }),\n );\n return emitEvent ? { type: \"session_saved\", sessionId } : null;\n } catch (err: unknown) {\n // Session persistence is non-critical — don't crash the loop\n const msg = err instanceof Error ? err.message : String(err);\n // Surface via trace so consumers can see the failure\n return emitEvent\n ? { type: \"trace\", trace: { scope: \"orchestrator\", phase: \"tool_result\", turn: this.turn, toolName: \"session_save\", args: {}, result: { error: msg } } } as ArcEvent\n : null;\n }\n }\n\n private buildSessionSnapshot(): SessionSnapshot {\n const dagSnapshot = this.summaryDAG.serialize();\n const completedDispatches = this.dispatchState.dispatchRecords.map(stripDispatchForSnapshot);\n const completedIds = new Set(completedDispatches.map((record) => record.tuple.id));\n const inFlightDispatches = [...this.inFlightDispatches.values()]\n .filter((record) => !completedIds.has(record.tuple.id))\n .map(inFlightDispatchToRecord)\n .map(stripDispatchForSnapshot);\n\n return {\n messages: this.messageStore.serialize(),\n dispatches: [...completedDispatches, ...inFlightDispatches],\n dagNodes: dagSnapshot.nodes,\n dagCoveredBy: dagSnapshot.coveredBy,\n turn: this.turn,\n dispatchCount: this.dispatchState.dispatchCount,\n orchestratorMessageIndex: this.orchestratorMessageIndex,\n };\n }\n\n private async checkpointSession(force = false): Promise<void> {\n if (!this.config.sessionStore || !this.config.sessionId) return;\n const now = Date.now();\n if (!force && now - this.lastSessionCheckpointAt < SESSION_CHECKPOINT_MIN_INTERVAL_MS) {\n return;\n }\n this.lastSessionCheckpointAt = now;\n await this.saveSession({ taskComplete: false, emitEvent: false });\n }\n\n private async checkpointAfterDispatchEvent(event: ArcEvent): Promise<void> {\n if (event.type === \"dispatch_full\") {\n this.inFlightDispatches.set(event.tuple.id, {\n tuple: event.tuple,\n progress: [],\n startedAt: Date.now(),\n updatedAt: Date.now(),\n });\n await this.checkpointSession(true);\n return;\n }\n\n if (event.type === \"worker_progress\") {\n const record = this.inFlightDispatches.get(event.tupleId);\n if (!record) return;\n record.progress.push(event.progress);\n record.updatedAt = Date.now();\n await this.checkpointSession(record.progress.length === 1 || event.progress.kind === \"worker_result\");\n return;\n }\n\n if (event.type === \"worker_complete\") {\n const record = this.inFlightDispatches.get(event.tupleId);\n if (!record) return;\n record.status = event.status;\n record.summary = event.summary;\n record.stepsUsed = event.stepsUsed;\n record.actions = event.actions;\n record.updatedAt = Date.now();\n await this.checkpointSession(true);\n }\n }\n\n private clearCompletedInFlightDispatches(): void {\n for (const record of this.dispatchState.dispatchRecords) {\n this.inFlightDispatches.delete(record.tuple.id);\n }\n }\n\n /** Reset per-task state while keeping full conversation history. */\n private async resetForNewTask(\n task: string,\n attachments?: StoredAttachment[],\n ): Promise<void> {\n this.config = { ...this.config, task };\n this.currentTaskAttachments = attachments;\n this.consecutiveFailedDispatchRounds = 0;\n this.dispatchDeps.task = task;\n this.turn = 0;\n this.dispatchState.turn = 0;\n this.dispatchState.dispatchCount = 0;\n this.dispatchState.lastArtifact = null;\n this.historySearchesThisTask.clear();\n this.historyReadsThisTask.clear();\n this.historyExpansionsThisTask.clear();\n await traceStep(\n this.telemetry,\n \"arc.scratch.clear\",\n { task: task.slice(0, 120) },\n () => this.scratchPad.clear(),\n );\n // dispatchRecords and message store are intentionally kept\n }\n\n /**\n * Stream events from the orchestration loop.\n */\n async *stream(signal?: AbortSignal): AsyncGenerator<ArcEvent> {\n // Initialize vector index\n await traceStep(this.telemetry, \"arc.vector.load\", {}, () => this.vectorIndex.load());\n\n // Hydrate from session if available\n if (this.config.sessionStore && this.config.sessionId) {\n const snapshot = await traceStep(\n this.telemetry,\n \"arc.session.load\",\n { sessionId: this.config.sessionId },\n () => this.config.sessionStore!.load(this.config.sessionId!),\n );\n if (snapshot) {\n this.messageStore.loadFrom(snapshot.messages);\n this.summaryDAG.loadFrom({ nodes: snapshot.dagNodes, coveredBy: snapshot.dagCoveredBy });\n // Idempotency: clear before loading to handle repeated stream() calls\n this.dispatchState.dispatchRecords.length = 0;\n this.dispatchState.dispatchRecords.push(...snapshot.dispatches);\n // Resuming a saved session restores history, not the exhausted per-task\n // turn budget. A new process should be able to accept the next prompt\n // immediately even if the previous task ended at maxTurns.\n this.turn = 0;\n this.dispatchState.turn = 0;\n this.dispatchState.dispatchCount = 0;\n this.dispatchState.lastArtifact = null;\n this.historySearchesThisTask.clear();\n this.historyReadsThisTask.clear();\n this.historyExpansionsThisTask.clear();\n // Reconcile from actual store state to prevent ID collisions\n const orchMsgs = this.messageStore.getConversation(\"orchestrator\");\n this.orchestratorMessageIndex = orchMsgs.length;\n }\n }\n\n // Outer task loop — survives across done boundaries\n taskLoop: while (true) {\n if (signal?.aborted) break;\n // Consecutive orchestrator turns that produced text but no tool call. Reset per task.\n let emptyActionStreak = 0;\n\n // Inner turn loop — runs until done or budget exhausted\n while (this.turn < this.maxTurns) {\n if (signal?.aborted) break;\n\n this.turn++;\n this.dispatchState.turn = this.turn;\n this.turnController = new AbortController();\n // Propagate session abort to turn controller\n if (signal) {\n if (signal.aborted) { this.turnController.abort(); break; }\n signal.addEventListener(\"abort\", () => this.turnController.abort(), { once: true });\n }\n const turnSignal = this.turnController.signal;\n\n this.drainPendingJobEvents();\n this.drainPendingInterjections();\n yield* this.drainPendingArcEvents();\n\n // Build orchestrator context\n const { orchestratorMessages, contextTokens, contextSections, modelMessages } = await traceStep(\n this.telemetry,\n \"arc.orchestrator.context\",\n { turn: this.turn, dispatches: this.dispatchState.dispatchRecords.length },\n async () => {\n const context = await this.buildContext();\n const { messages: orchestratorMessages, contextTokens, contextSections } = await this.buildOrchestratorMessages(context);\n const modelMessages = toModelMessages(orchestratorMessages);\n return { orchestratorMessages, contextTokens, contextSections, modelMessages };\n },\n );\n\n yield { type: \"orchestrator_turn\", turn: this.turn, contextTokens };\n\n // Emit per-section context breakdown so trace consumers can see token allocation\n const systemChars = this.orchestratorSystem[0]?.content.length ?? 0;\n const systemSection = { chars: systemChars, estimatedTokens: Math.ceil(systemChars / 4) };\n yield {\n type: \"trace\",\n trace: {\n scope: \"orchestrator\",\n phase: \"context_assembled\",\n turn: this.turn,\n totalChars: systemChars + contextTokens * 4,\n estimatedTokens: Math.ceil(systemChars / 4) + contextTokens,\n sections: { systemPrompt: systemSection, ...contextSections },\n },\n };\n\n yield {\n type: \"trace\",\n trace: {\n scope: \"orchestrator\",\n phase: \"model_input\",\n turn: this.turn,\n model: this.model,\n system: this.orchestratorSystem[0]!.content,\n messages: cloneForTrace(orchestratorMessages),\n modelMessages: cloneForTrace(modelMessages),\n toolNames: Object.keys(this.orchestratorToolSchemas),\n },\n };\n\n // Call orchestrator LLM\n let result: Awaited<ReturnType<typeof generateText>>;\n try {\n const orchestratorSignal = AbortSignal.any([turnSignal, AbortSignal.timeout(this.modelCallTimeoutMs)]);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n result = await traceStep(\n this.telemetry,\n \"arc.orchestrator.model\",\n { turn: this.turn, model: this.model, messages: modelMessages.length, tools: Object.keys(this.orchestratorToolSchemas).length },\n async () => (generateText as any)({\n model: this.createModel!(this.model),\n system: this.orchestratorSystem,\n tools: this.orchestratorToolSchemas,\n messages: modelMessages,\n toolChoice: \"auto\",\n abortSignal: orchestratorSignal,\n ...(this.config.providerOptions\n ? { providerOptions: this.config.providerOptions }\n : {}),\n }),\n );\n } catch (err: unknown) {\n if (turnSignal.aborted && !(signal?.aborted)) {\n // Turn interrupted — ask user for steering\n const resolution = yield* this.handleInterrupt([]);\n if (resolution.kind === \"abort_task\") {\n yield { type: \"done\", output: \"[aborted]\" };\n const savedEvent = await this.saveSession({ taskComplete: true, emitEvent: true });\n if (savedEvent) yield savedEvent;\n const nextTask = await this.waitForNextTask(signal);\n if (nextTask == null) return;\n this.appendOrchestratorMessage(\"user\", nextTask.msg, nextTask.attachments);\n await this.resetForNewTask(nextTask.msg, nextTask.attachments);\n continue taskLoop;\n }\n continue; // next turn\n }\n throw err; // session abort or real error — propagate\n }\n\n yield {\n type: \"orchestrator_usage\",\n turn: this.turn,\n ...(result.usage?.inputTokens != null ? { inputTokens: result.usage.inputTokens } : {}),\n ...(result.usage?.outputTokens != null ? { outputTokens: result.usage.outputTokens } : {}),\n };\n\n const reasoningText = extractReasoningText(result);\n if (reasoningText) {\n yield { type: \"reasoning_delta\", text: reasoningText };\n }\n\n yield {\n type: \"trace\",\n trace: {\n scope: \"orchestrator\",\n phase: \"model_output\",\n turn: this.turn,\n text: String(result.text ?? \"\"),\n toolCalls: traceToolCalls(result.toolCalls ?? []),\n },\n };\n\n // Process tool calls\n if (result.toolCalls && result.toolCalls.length > 0) {\n // Reset streak — model took an action this turn.\n emptyActionStreak = 0;\n // Capture public orchestrator rationale before the tool call; workers can use it as context.\n const publicRationale = result.text?.trim() || \"\";\n if (publicRationale) {\n yield { type: \"text_delta\", text: publicRationale + \"\\n\" };\n this.appendOrchestratorMessage(\"assistant\", publicRationale);\n } else {\n yield {\n type: \"trace\",\n trace: {\n scope: \"orchestrator\",\n phase: \"public_rationale_missing\",\n turn: this.turn,\n toolCalls: traceToolCalls(result.toolCalls ?? []),\n },\n };\n }\n\n // Partition tool calls: non-dispatch first (sequential), then dispatches (parallel)\n const dispatchCalls: { toolCall: typeof result.toolCalls[0]; args: Record<string, unknown> }[] = [];\n const nonDispatchCalls: { toolCall: typeof result.toolCalls[0]; args: Record<string, unknown> }[] = [];\n\n for (const toolCall of result.toolCalls) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const args = ((toolCall as any).args ??\n (toolCall as any).input ??\n {}) as Record<string, unknown>;\n if (toolCall.toolName === \"dispatch\") {\n dispatchCalls.push({ toolCall, args });\n } else {\n nonDispatchCalls.push({ toolCall, args });\n }\n }\n\n // Process non-dispatch tools sequentially via registry\n for (const { toolCall, args } of nonDispatchCalls) {\n yield {\n type: \"trace\",\n trace: {\n scope: \"orchestrator\",\n phase: \"tool_call\",\n turn: this.turn,\n toolName: toolCall.toolName,\n args: cloneForTrace(args),\n },\n };\n\n // done is control flow — completes the current task\n if (toolCall.toolName === \"done\") {\n const output = String(args.output ?? \"\");\n const hasNextTask = yield* this.completeCurrentTask(\n output,\n signal,\n { output, accepted: true },\n cloneForTrace(args),\n );\n if (!hasNextTask) return; // session ended\n continue taskLoop;\n }\n\n // All other orchestrator tools go through the registry\n const registryTool = this.orchestratorToolRegistry.get(toolCall.toolName);\n if (registryTool?.execute) {\n // AskUser: emit event before execute (so TUI can display the question)\n if (toolCall.toolName === \"AskUser\") {\n yield { type: \"ask_user\", question: String(args.question ?? \"\"), options: Array.isArray(args.options) ? args.options.map(String) : undefined };\n }\n\n const toolResult = await traceStep(\n this.telemetry,\n \"arc.orchestrator.tool\",\n { turn: this.turn, tool: toolCall.toolName },\n () => registryTool.execute!(this.config.toolProvider, args, this.config.workDir),\n );\n const resultText = toolResult.success ? toolResult.output : (toolResult.error ?? toolResult.output);\n yield {\n type: \"trace\",\n trace: {\n scope: \"orchestrator\",\n phase: \"tool_result\",\n turn: this.turn,\n toolName: toolCall.toolName,\n args: cloneForTrace(args),\n result: cloneForTrace(toolResult),\n },\n };\n\n // Emit semantic events for specific tools\n if (toolCall.toolName === \"recall\") {\n yield { type: \"recall\", query: String(args.query ?? \"\"), answer: resultText };\n }\n\n this.appendOrchestratorMessage(\"assistant\", `[${toolCall.toolName}] ${truncate(JSON.stringify(args), 200)}`);\n this.appendOrchestratorMessage(\"user\", `[${toolCall.toolName} result]\\n${resultText}`);\n }\n }\n\n // Run all dispatch calls in parallel\n if (dispatchCalls.length > 0) {\n const dispatchStart = this.dispatchState.dispatchRecords.length;\n let activeTurnSignal = turnSignal;\n yield* this.runDispatchCalls(dispatchCalls, publicRationale, activeTurnSignal);\n // If turn was interrupted during workers, ask for steering\n if (activeTurnSignal.aborted && !(signal?.aborted)) {\n const interruptedDispatches = this.dispatchState.dispatchRecords\n .slice(dispatchStart)\n .filter((record) => record.artifact.status === \"interrupted\");\n const resolution = yield* this.handleInterrupt(interruptedDispatches);\n if (resolution.kind === \"abort_task\") {\n this.appendOrchestratorMessage(\"assistant\", \"[done] aborted by user\");\n yield { type: \"done\", output: \"[aborted]\" };\n const savedEvent = await this.saveSession({ taskComplete: true, emitEvent: true });\n if (savedEvent) yield savedEvent;\n const nextTask = await this.waitForNextTask(signal);\n if (nextTask == null) return;\n this.appendOrchestratorMessage(\"user\", nextTask.msg, nextTask.attachments);\n await this.resetForNewTask(nextTask.msg, nextTask.attachments);\n continue taskLoop;\n }\n if (resolution.kind === \"continue_worker\" && interruptedDispatches.length > 0) {\n activeTurnSignal = this.refreshTurnSignal(signal);\n const continuationCalls = interruptedDispatches.map((record) => ({\n toolCall: null,\n args: this.buildContinuationDispatchArgs(\n record,\n \"user_steering\",\n resolution.steering,\n ),\n }));\n yield* this.runDispatchCalls(continuationCalls, \"\", activeTurnSignal);\n if (activeTurnSignal.aborted && !(signal?.aborted)) {\n continue;\n }\n } else {\n continue;\n }\n }\n\n let newDispatches = this.dispatchState.dispatchRecords.slice(dispatchStart);\n newDispatches = yield* this.continueStepBudgetDispatches(\n dispatchStart,\n activeTurnSignal,\n );\n\n // Circuit breaker: if every dispatch in this round ended in\n // failed/incomplete (e.g., worker model timing out), bump the\n // consecutive-failure counter; reset if any made forward progress.\n // At threshold, force-complete the task so the orchestrator can't\n // burn its remaining turn budget retrying the same environmental\n // failure with reworded instructions.\n const anyForwardProgress = newDispatches.some(\n (r) => r.artifact.status === \"complete\" || r.artifact.status === \"interrupted\",\n );\n if (anyForwardProgress) {\n this.consecutiveFailedDispatchRounds = 0;\n } else if (newDispatches.length > 0) {\n this.consecutiveFailedDispatchRounds++;\n if (\n this.consecutiveFailedDispatchRounds >=\n MAX_CONSECUTIVE_FAILED_DISPATCH_ROUNDS\n ) {\n const summaries = newDispatches.map((r) => r.artifact.summary || r.artifact.status);\n const lastSummary = summaries[summaries.length - 1] ?? \"no summary\";\n const aborted =\n `[aborted: ${this.consecutiveFailedDispatchRounds} consecutive dispatch rounds failed without forward progress — last error: ${lastSummary}. Likely an environmental issue (worker model timing out, rate-limited, or unreachable). Switch worker tier/model and retry.]`;\n const hasNextTask = yield* this.completeCurrentTask(\n aborted,\n signal,\n { output: aborted, accepted: false, autoFinalized: true, mode: \"circuit_breaker\" },\n );\n if (!hasNextTask) return;\n continue taskLoop;\n }\n }\n\n const completionDispatches = terminalDispatches(newDispatches);\n const autoOutput = maybeAutoFinalizeFromDispatches(completionDispatches);\n if (autoOutput) {\n this.telemetry?.counter(\"auto_finalized_total\", 1, { mode: \"direct\" });\n const hasNextTask = yield* this.completeCurrentTask(\n autoOutput,\n signal,\n { output: autoOutput, accepted: true, autoFinalized: true, mode: \"direct\" },\n );\n if (!hasNextTask) return;\n continue taskLoop;\n }\n\n const gate = await this.runDoneGate(completionDispatches, activeTurnSignal);\n if (gate.inputTokens != null || gate.outputTokens != null) {\n yield {\n type: \"orchestrator_usage\",\n turn: this.turn,\n ...(gate.inputTokens != null ? { inputTokens: gate.inputTokens } : {}),\n ...(gate.outputTokens != null ? { outputTokens: gate.outputTokens } : {}),\n };\n }\n if (gate.output) {\n this.telemetry?.counter(\"auto_finalized_total\", 1, { mode: \"done_gate\" });\n const hasNextTask = yield* this.completeCurrentTask(\n gate.output,\n signal,\n { output: gate.output, accepted: true, autoFinalized: true, mode: \"done_gate\", reason: gate.reason },\n );\n if (!hasNextTask) return;\n continue taskLoop;\n }\n }\n } else {\n // No tool call - just text response\n const text = result.text?.trim() ?? \"\";\n if (text) {\n yield { type: \"text_delta\", text };\n this.appendOrchestratorMessage(\"assistant\", text);\n }\n\n // Guard against text-only turns. If the model produced substantive text,\n // treat it as the answer and auto-finalize immediately — asking the model\n // to re-emit as a `done` tool call just burns another turn on the same content.\n emptyActionStreak++;\n const hasSubstantiveText = text.length >= 40;\n if (!hasSubstantiveText && emptyActionStreak === 1) {\n // Truly empty-ish — give it one more shot with a nudge.\n this.appendOrchestratorMessage(\n \"user\",\n \"[system] Your previous turn produced no text and no tool call. Dispatch a worker, query history, or call `done`.\",\n );\n } else {\n // Substantive text OR second offence → auto-finalize with the accumulated text.\n const finalOutput = text || \"[done]\";\n emptyActionStreak = 0;\n this.appendOrchestratorMessage(\"assistant\", `[done] ${finalOutput}`);\n this.telemetry?.counter(\"auto_finalized_total\", 1, {\n mode: hasSubstantiveText ? \"substantive_text\" : \"empty_action_guard\",\n });\n yield {\n type: \"trace\",\n trace: {\n scope: \"orchestrator\",\n phase: \"tool_result\",\n turn: this.turn,\n toolName: \"done\",\n args: { output: finalOutput },\n result: { output: finalOutput, accepted: true, autoFinalized: true, mode: \"empty_action_guard\" },\n },\n };\n yield { type: \"done\", output: finalOutput };\n const savedEvent = await this.saveSession({ taskComplete: true, emitEvent: true });\n if (savedEvent) yield savedEvent;\n const nextTask = await this.waitForNextTask(signal);\n if (nextTask == null) return;\n this.appendOrchestratorMessage(\"user\", nextTask.msg, nextTask.attachments);\n await this.resetForNewTask(nextTask.msg, nextTask.attachments);\n continue taskLoop;\n }\n }\n }\n\n // Turn budget exhausted\n await traceStep(this.telemetry, \"arc.vector.save\", {}, () => this.vectorIndex.save());\n\n if (signal?.aborted) {\n yield { type: \"done\", output: \"[aborted]\" };\n break;\n }\n\n // Budget exhaustion — report and wait for next task\n this.appendOrchestratorMessage(\"assistant\", \"[done] max turns reached\");\n yield { type: \"done\", output: \"[max turns reached]\" };\n const savedEvent = await this.saveSession({ taskComplete: true, emitEvent: true });\n if (savedEvent) yield savedEvent;\n\n const nextTask = await this.waitForNextTask(signal);\n if (nextTask == null) break; // session ended\n this.appendOrchestratorMessage(\"user\", nextTask.msg, nextTask.attachments);\n await this.resetForNewTask(nextTask.msg, nextTask.attachments);\n } // end taskLoop\n\n // Final save\n await traceStep(this.telemetry, \"arc.vector.save\", {}, () => this.vectorIndex.save());\n }\n\n /**\n * Run a single task to completion (for headless/test use).\n * Breaks after the first `done` event — does not wait for follow-up tasks.\n */\n async run(signal?: AbortSignal): Promise<ArcRunResult> {\n const events: ArcEvent[] = [];\n let output = \"\";\n\n for await (const event of this.stream(signal)) {\n events.push(event);\n if (event.type === \"done\") {\n output = event.output;\n break; // don't wait for next task\n }\n }\n\n return { output, events };\n }\n\n private async *runDispatchCalls(\n calls: DispatchCall[],\n publicRationale: string,\n signal: AbortSignal,\n ): AsyncGenerator<ArcEvent> {\n const span = this.telemetry?.isEnabled()\n ? this.telemetry.startSpan(\"arc.dispatch.batch\", {\n turn: this.turn,\n dispatches: calls.length,\n })\n : null;\n try {\n for await (const event of runParallelDispatches(\n this.dispatchDeps,\n this.dispatchState,\n calls,\n publicRationale,\n signal,\n )) {\n await this.checkpointAfterDispatchEvent(event);\n yield event;\n }\n span?.end({ success: true });\n } catch (error) {\n span?.end({\n success: false,\n error: error instanceof Error ? error.message : \"unknown\",\n });\n throw error;\n }\n this.clearCompletedInFlightDispatches();\n await this.checkpointSession(true);\n }\n\n private async *continueStepBudgetDispatches(\n dispatchStart: number,\n signal: AbortSignal,\n ): AsyncGenerator<ArcEvent, DispatchRecord[]> {\n let continuationRuns = 0;\n while (continuationRuns < MAX_INTERNAL_WORKER_CONTINUATIONS && !signal.aborted) {\n const records = this.dispatchState.dispatchRecords.slice(dispatchStart);\n const candidates = openStepBudgetDispatches(records);\n if (candidates.length === 0) break;\n\n continuationRuns++;\n const calls = candidates.map((record) => ({\n toolCall: null,\n args: this.buildContinuationDispatchArgs(record, \"step_budget\"),\n }));\n yield* this.runDispatchCalls(calls, \"\", signal);\n }\n\n return this.dispatchState.dispatchRecords.slice(dispatchStart);\n }\n\n private buildContinuationDispatchArgs(\n record: DispatchRecord,\n reason: \"step_budget\" | \"user_steering\",\n steering?: string | undefined,\n ): Record<string, unknown> {\n const summary = continuationSummary(record);\n const steeringText = steering?.trim();\n\n // User steering is injected as a direct user message to the worker —\n // no boilerplate wrapper. The worker sees prior attempt history via\n // buildPriorWorkContext, so it already knows what happened.\n let instruction: string;\n if (reason === \"user_steering\" && steeringText) {\n // The user's message IS the instruction — just like a direct reply.\n instruction = steeringText;\n } else {\n // No steering text (bare \"continue\") or step_budget continuation:\n // minimal instruction, prior work context provides the rest.\n instruction = \"Continue from where you left off.\";\n }\n\n const args: Record<string, unknown> = {\n instruction,\n expectedOutput: record.tuple.expectedOutput,\n continuationOf: record.tuple.id,\n continuationReason: reason,\n continuationSummary: summary,\n };\n if (record.tuple.tier) args.tier = record.tuple.tier;\n return args;\n }\n\n private async runDoneGate(\n records: DispatchRecord[],\n signal: AbortSignal,\n ): Promise<DoneGateResult> {\n if (!shouldRunDoneGate(records)) {\n this.telemetry?.counter(\"done_gate_skipped_total\", 1, {\n reason: doneGateSkipReason(records),\n });\n return { output: null };\n }\n\n const prompt = formatDoneGatePrompt(this.config.task, records);\n let result: Awaited<ReturnType<typeof generateText>>;\n try {\n const doneGateSignal = AbortSignal.any([signal, AbortSignal.timeout(this.modelCallTimeoutMs)]);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n result = await traceStep(\n this.telemetry,\n \"arc.orchestrator.done_gate\",\n { turn: this.turn, model: this.doneGateModel, dispatches: records.length },\n async () => (generateText as any)({\n model: this.createModel!(this.doneGateModel),\n system: DONE_GATE_SYSTEM_PROMPT,\n messages: toModelMessages([{ role: \"user\", content: prompt }]),\n abortSignal: doneGateSignal,\n }),\n );\n } catch (error) {\n if (signal.aborted) return { output: null };\n throw error;\n }\n\n const decision = parseDoneGateDecision(String(result.text ?? \"\"));\n const passThroughOutput = maybePassThroughDoneGateOutput(records, decision);\n this.telemetry?.counter(\"done_gate_decisions_total\", 1, {\n decision: decision.output ? \"finalize\" : \"continue\",\n });\n return {\n ...decision,\n ...(passThroughOutput ? { output: passThroughOutput } : {}),\n ...(result.usage?.inputTokens != null ? { inputTokens: result.usage.inputTokens } : {}),\n ...(result.usage?.outputTokens != null ? { outputTokens: result.usage.outputTokens } : {}),\n };\n }\n\n private async *completeCurrentTask(\n output: string,\n signal: AbortSignal | undefined,\n traceResult: Record<string, unknown>,\n traceArgs: Record<string, unknown> = { output },\n ): AsyncGenerator<ArcEvent, boolean> {\n yield {\n type: \"trace\",\n trace: {\n scope: \"orchestrator\",\n phase: \"tool_result\",\n turn: this.turn,\n toolName: \"done\",\n args: traceArgs,\n result: traceResult,\n },\n };\n this.appendOrchestratorMessage(\"assistant\", `[done] ${output}`);\n yield { type: \"done\", output };\n const savedEvent = await this.saveSession({ taskComplete: true, emitEvent: true });\n if (savedEvent) yield savedEvent;\n\n const nextTask = await this.waitForNextTask(signal);\n if (nextTask == null) return false;\n this.appendOrchestratorMessage(\"user\", nextTask.msg, nextTask.attachments);\n await this.resetForNewTask(nextTask.msg, nextTask.attachments);\n return true;\n }\n\n /** Append a message to the LCM message store (single source of truth) */\n private appendOrchestratorMessage(\n role: \"user\" | \"assistant\" | \"tool\",\n content: string,\n attachments?: StoredAttachment[],\n ): void {\n this.messageStore.append({\n id: `orchestrator_msg_${this.orchestratorMessageIndex}`,\n conversationId: \"orchestrator\",\n index: this.orchestratorMessageIndex++,\n role,\n content,\n ...(attachments && attachments.length > 0 ? { attachments } : {}),\n timestamp: Date.now(),\n });\n }\n\n private findEpisodeRecordBySummaryId(summaryId: string): DispatchRecord | undefined {\n // summary_d0_<tupleId>\n const tupleId = summaryId.replace(/^summary_d0_/, \"\");\n return this.dispatchState.dispatchRecords.find((r) => r.tuple.id === tupleId);\n }\n\n private searchHistoryWithGuardrails(\n pattern: string,\n opts: { conversationId?: string; maxResults?: number } = {},\n ): GrepResult[] {\n const key = JSON.stringify({\n pattern,\n conversationId: opts.conversationId ?? null,\n maxResults: opts.maxResults ?? 20,\n });\n\n if (this.historySearchesThisTask.has(key)) {\n return [{\n messageId: \"duplicate_history_search\",\n conversationId: \"history_search\",\n messageIndex: -1,\n excerpt: \"\",\n matchContext: `DUPLICATE: This exact history_search for \"${pattern}\" was already returned earlier in this task. Use Recent Search Results, narrow with conversationId/maxResults, call history_read on a listed [conversationId:messageIndex], or ask the user.`,\n }];\n }\n\n const results = this.messageStore.grep(pattern, opts);\n this.historySearchesThisTask.add(key);\n return results;\n }\n\n private readHistoryWithGuardrails(\n deps: LcmToolDeps,\n conversationId: string,\n messageIndex: number,\n options: HistoryReadOptions = {},\n ): string | null {\n const key = JSON.stringify({\n conversationId,\n messageIndex,\n offset: options.offset ?? null,\n limit: options.limit ?? null,\n around: options.around ?? null,\n contextChars: options.contextChars ?? null,\n includeToolData: options.includeToolData ?? false,\n });\n\n if (this.historyReadsThisTask.has(key)) {\n return JSON.stringify({\n kind: \"history_read_result\",\n found: true,\n duplicate: true,\n conversationId,\n messageIndex,\n hint: \"This exact history_read was already returned earlier in this task. Use the retrieved content already present in Recent Retrieved History, request a different offset/limit/around range, or ask the user.\",\n }, null, 2);\n }\n\n const result = historyRead(deps, conversationId, messageIndex, options);\n if (result !== null) this.historyReadsThisTask.add(key);\n return result;\n }\n\n private async expandHistoryWithGuardrails(\n deps: LcmToolDeps,\n summaryId: string,\n options: HistoryExpandOptions = {},\n ): Promise<string> {\n const key = JSON.stringify({\n summaryId,\n maxTokens: options.maxTokens ?? null,\n offset: options.offset ?? null,\n limit: options.limit ?? null,\n around: options.around ?? null,\n contextChars: options.contextChars ?? null,\n summarize: options.summarize ?? true,\n });\n\n if (this.historyExpansionsThisTask.has(key)) {\n return JSON.stringify({\n kind: \"history_expand_result\",\n found: true,\n duplicate: true,\n summaryId,\n hint: \"This exact history_expand was already returned earlier in this task. Use the retrieved content already present in Recent Expanded History, request a different offset/limit/around range, or ask the user.\",\n content: \"\",\n }, null, 2);\n }\n\n const result = await expandSummary(deps, summaryId, options);\n this.historyExpansionsThisTask.add(key);\n return result;\n }\n\n private async summarizeHistoryExpansion(args: {\n summaryId: string;\n content: string;\n contentHash: string;\n }): Promise<string> {\n const cached = this.historyExpansionSummaryCache.get(args.contentHash);\n if (cached) return cached;\n\n const prompt = [\n \"Summarize this expanded ARC history for a coordinator that must avoid re-reading it.\",\n \"Keep it factual and compact. Include: task/result, important files or artifacts, tests/checks, and unresolved work.\",\n \"Do not invent details.\",\n \"\",\n `Summary node: ${args.summaryId}`,\n `Content hash: ${args.contentHash}`,\n \"\",\n truncate(args.content, 20_000),\n ].join(\"\\n\");\n\n let result: Awaited<ReturnType<typeof generateText>>;\n try {\n const historySignal = AbortSignal.any([this.turnController.signal, AbortSignal.timeout(this.modelCallTimeoutMs)]);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n result = await traceStep(\n this.telemetry,\n \"arc.history_expand.summarize\",\n { turn: this.turn, model: this.doneGateModel, summaryId: args.summaryId },\n async () => (generateText as any)({\n model: this.createModel!(this.doneGateModel),\n system: \"You summarize expanded agent history. Return only the compact digest.\",\n messages: toModelMessages([{ role: \"user\", content: prompt }]),\n abortSignal: historySignal,\n }),\n );\n } catch (error) {\n if (this.turnController.signal.aborted) return \"\";\n throw error;\n }\n\n const summary = truncate(String(result.text ?? \"\").trim(), 3_000);\n if (summary) this.historyExpansionSummaryCache.set(args.contentHash, summary);\n return summary;\n }\n\n private async buildContext(): Promise<OrchestratorContext> {\n const artifacts = await this.artifactStore.getAll();\n const artifactStatusCounts: Record<Artifact[\"status\"], number> = { complete: 0, incomplete: 0, failed: 0, interrupted: 0 };\n for (const a of Object.values(artifacts)) artifactStatusCounts[a.status]++;\n const artifactCount = Object.keys(artifacts).length;\n const allIncomplete =\n artifactCount > 0 && artifactStatusCounts.complete === 0;\n\n return {\n task: this.config.task,\n artifacts,\n lastResult: this.dispatchState.lastArtifact,\n recentTurns: this.messageStore\n .getConversation(\"orchestrator\")\n .slice(-this.windowSize)\n .map((msg) => ({ role: msg.role, content: msg.content })),\n turn: this.turn,\n maxTurns: this.maxTurns,\n turnsRemaining: Math.max(0, this.maxTurns - this.turn),\n dispatchCount: this.dispatchState.dispatchCount,\n artifactStatusCounts,\n allIncomplete,\n dispatches: [...this.dispatchState.dispatchRecords],\n ooda: buildOodaSnapshot({\n turn: this.turn,\n maxTurns: this.maxTurns,\n turnsRemaining: Math.max(0, this.maxTurns - this.turn),\n dispatchCount: this.dispatchState.dispatchCount,\n allIncomplete,\n dispatches: this.dispatchState.dispatchRecords,\n }),\n // LCM additions\n messageStore: this.messageStore,\n summaryDAG: this.summaryDAG,\n };\n }\n\n private async buildOrchestratorMessages(\n context: OrchestratorContext,\n ): Promise<{\n messages: AgentMessage[];\n contextTokens: number;\n contextSections: Record<string, { chars: number; estimatedTokens: number }>;\n }> {\n // If a custom context formatter is provided, use it (but still include task/budget/ooda)\n const customContextMessages =\n this.config.formatOrchestratorContext?.(context);\n if (customContextMessages) {\n // Custom formatter handles everything after task context\n const taskContextMsg: AgentMessage = {\n role: \"user\",\n content: this.buildTaskContextText(context),\n };\n const oodaMsg: AgentMessage = {\n role: \"user\",\n content: formatOodaSnapshotForPrompt(context.ooda),\n };\n const attachmentMsg = this.buildAttachmentMessage();\n const messages = [\n taskContextMsg,\n ...(attachmentMsg ? [attachmentMsg] : []),\n oodaMsg,\n ...customContextMessages,\n ];\n const contextTokens = messages.reduce(\n (sum, m) => sum + Math.ceil((typeof m.content === \"string\" ? m.content : \"\").length / 4),\n 0,\n );\n return { messages, contextTokens, contextSections: {} };\n }\n\n // Default: use LCM-assembled context with implicit semantic hydration\n const taskContext = this.buildTaskContextText(context);\n const assembled = await assembleOrchestratorContext({\n conversationId: \"orchestrator\",\n store: this.messageStore,\n dag: this.summaryDAG,\n budget: DEFAULT_CONTEXT_BUDGET,\n freshTailSize: DEFAULT_FRESH_TAIL_SIZE,\n taskContext,\n ooda: context.ooda,\n vectorIndex: this.vectorIndex,\n transcriptStore: this.transcriptStore,\n scratchPad: this.scratchPad,\n liveJobs: this.jobRegistry.snapshot(),\n });\n\n // Inject image attachments for the current task right after the task context\n // message. assembleOrchestratorContext emits the task context as the first\n // user message, so inserting at index 1 keeps images next to the task.\n const attachmentMsg = this.buildAttachmentMessage();\n if (attachmentMsg) {\n assembled.messages.splice(1, 0, attachmentMsg);\n }\n\n // Append last result highlight if present\n let lastResultChars = 0;\n if (context.lastResult) {\n let content = `## Last Result\\nArtifact ${context.lastResult.id}: [${context.lastResult.status}]\\n${context.lastResult.summary}`;\n if (context.lastResult.instruction) {\n content += `\\nYour dispatch instruction was: \"${context.lastResult.instruction}\"`;\n }\n assembled.messages.push({ role: \"user\", content });\n lastResultChars = content.length;\n }\n\n // Build per-section breakdown from assembled context\n const taskChars = taskContext.length;\n const oodaChars = context.ooda\n ? formatOodaSnapshotForPrompt(context.ooda).length\n : 0;\n const frontierChars = assembled.frontierText?.length ?? 0;\n const ghostCueChars = assembled.ghostCueText?.length ?? 0;\n // Remaining chars = total estimate * 4 (chars) - accounted sections\n const totalEstimatedChars = assembled.tokenEstimate * 4;\n const accountedChars = taskChars + oodaChars + frontierChars + ghostCueChars + lastResultChars;\n const freshTailChars = Math.max(0, totalEstimatedChars - accountedChars);\n\n const mkSection = (chars: number) => ({\n chars,\n estimatedTokens: Math.ceil(chars / 4),\n });\n const contextSections: Record<string, { chars: number; estimatedTokens: number }> = {\n taskContext: mkSection(taskChars),\n oodaSnapshot: mkSection(oodaChars),\n frontier: mkSection(frontierChars),\n ghostCues: mkSection(ghostCueChars),\n freshTail: mkSection(freshTailChars),\n lastResult: mkSection(lastResultChars),\n };\n\n return {\n messages: assembled.messages,\n contextTokens: assembled.tokenEstimate,\n contextSections,\n };\n }\n\n private buildTaskContextText(context: OrchestratorContext): string {\n return `## Task\\n${context.task}\\n\\n## Workspace\\nroot: ${this.config.workDir}\\n\\n## Budget\\nturn: ${context.turn}\\nmax_turns: ${context.maxTurns}\\nturns_remaining: ${context.turnsRemaining}\\ndispatches_so_far: ${context.dispatchCount}\\n\\n## Progress\\nartifact_status_counts: complete=${context.artifactStatusCounts.complete}, incomplete=${context.artifactStatusCounts.incomplete}, failed=${context.artifactStatusCounts.failed}\\nall_incomplete: ${context.allIncomplete}`;\n }\n\n private buildAttachmentMessage(): AgentMessage | null {\n const atts = this.currentTaskAttachments;\n if (!atts || atts.length === 0) return null;\n return {\n role: \"user\",\n content: atts.map((a) => ({\n type: \"image\" as const,\n image: Buffer.from(a.imageBase64, \"base64\"),\n mimeType: a.mimeType,\n })),\n };\n }\n\n private async readEpisode(args: ReadEpisodeArgs): Promise<string> {\n const record = this.dispatchState.dispatchRecords.find(\n (r) =>\n r.tuple.id === args.id ||\n r.transcriptId === args.id ||\n r.artifact.id === args.id,\n );\n if (!record) {\n return `Episode not found: ${args.id}`;\n }\n return formatReadEpisodeResult(record, this.transcriptStore);\n }\n\n /**\n * Handle a turn interrupt without routing every follow-up through the\n * orchestrator. Status questions are answered from the saved worker record;\n * steering/continue become an internal worker continuation.\n */\n private async *handleInterrupt(\n interruptedDispatches: DispatchRecord[],\n ): AsyncGenerator<ArcEvent, InterruptResolution> {\n this.appendOrchestratorMessage(\"user\", \"[system] Turn interrupted by user.\");\n if (!this.config.askUser) {\n return { kind: \"orchestrator\" };\n }\n\n while (true) {\n const question = \"Turn interrupted. Ask for status, continue with steering, or say stop.\";\n yield { type: \"ask_user\", question };\n const answer = await this.config.askUser(question);\n const resolution = classifyInterruptAnswer(answer);\n\n if (resolution.kind === \"status\") {\n yield { type: \"interrupt_status\", summary: this.formatInterruptStatus(interruptedDispatches) };\n continue;\n }\n\n if (resolution.kind === \"abort_task\") {\n this.appendOrchestratorMessage(\"user\", \"[user steering] stop\");\n return resolution;\n }\n\n if (resolution.kind === \"orchestrator\") {\n this.appendOrchestratorMessage(\"user\", `[user steering] ${answer}`);\n return resolution;\n }\n\n this.appendOrchestratorMessage(\n \"user\",\n resolution.steering\n ? `[user steering] ${resolution.steering}`\n : \"[user steering] continue\",\n );\n return resolution;\n }\n }\n\n private formatInterruptStatus(records: DispatchRecord[]): string {\n if (records.length === 0) {\n return \"No worker checkpoint has returned yet. The turn was interrupted before ARC had a completed worker record to summarize.\";\n }\n\n return records.map((record) => {\n const summary = continuationSummary(record);\n const actions = record.artifact.actions?.length\n ? ` Last actions: ${record.artifact.actions.slice(-3).join(\"; \")}`\n : \"\";\n return `${record.tuple.id}: ${record.artifact.status}, steps ${record.artifact.stepsUsed}/${record.tuple.steps}. ${summary}${actions}`;\n }).join(\"\\n\");\n }\n}\n\nfunction formatJobEventLine(event: import(\"./jobs/types.js\").JobEvent): string {\n switch (event.type) {\n case \"job_started\":\n return `[job event] ${event.status.spec.label} started (${event.status.spec.id})`;\n case \"job_exited\":\n return `[job event] ${event.status.spec.label} exited ${event.status.exitCode ?? \"?\"} (${event.status.spec.id})`;\n case \"job_failed\":\n return `[job event] ${event.status.spec.label} failed: ${event.error} (${event.status.spec.id})`;\n case \"job_killed\":\n return `[job event] ${event.status.spec.label} killed: ${event.reason} (${event.status.spec.id})`;\n case \"job_output\":\n return `[job event] ${event.id} output`;\n }\n}\n\ninterface DoneGateResult {\n output: string | null;\n reason?: string | undefined;\n inputTokens?: number | undefined;\n outputTokens?: number | undefined;\n}\n\ntype DispatchCall = {\n toolCall: unknown;\n args: Record<string, unknown>;\n};\n\ntype InterruptResolution =\n | { kind: \"continue_worker\"; steering?: string | undefined }\n | { kind: \"orchestrator\"; steering?: string | undefined }\n | { kind: \"abort_task\" }\n | { kind: \"status\" };\n\ninterface SaveSessionOptions {\n taskComplete?: boolean | undefined;\n emitEvent?: boolean | undefined;\n}\n\ninterface InFlightDispatchSnapshot {\n tuple: DispatchRecord[\"tuple\"];\n progress: WorkerProgressEvent[];\n startedAt: number;\n updatedAt: number;\n status?: Artifact[\"status\"] | undefined;\n summary?: string | undefined;\n stepsUsed?: number | undefined;\n actions?: string[] | undefined;\n}\n\nfunction inFlightDispatchToRecord(snapshot: InFlightDispatchSnapshot): DispatchRecord {\n const latestResult = [...snapshot.progress]\n .reverse()\n .find((event): event is Extract<WorkerProgressEvent, { kind: \"worker_result\" }> =>\n event.kind === \"worker_result\",\n );\n const latestStep = [...snapshot.progress]\n .reverse()\n .find((event): event is WorkerProgressEvent & { step: number } =>\n \"step\" in event && typeof event.step === \"number\",\n );\n const actions = snapshot.actions ?? snapshot.progress\n .filter((event): event is Extract<WorkerProgressEvent, { kind: \"tool_complete\" }> =>\n event.kind === \"tool_complete\",\n )\n .map((event) => `${event.toolName}: ${event.outputSummary}`);\n const summary =\n snapshot.summary ??\n latestResult?.summary ??\n latestProgressSummary(snapshot.progress) ??\n \"Worker in progress\";\n const status = snapshot.status ?? latestResult?.status ?? \"incomplete\";\n const stepsUsed = snapshot.stepsUsed ?? latestResult?.stepsUsed ?? latestStep?.step ?? 0;\n const artifact: Artifact = {\n id: snapshot.tuple.id,\n tupleId: snapshot.tuple.id,\n output: null,\n textOutput: summary,\n status,\n summary,\n stepsUsed,\n actions,\n instruction: snapshot.tuple.instruction,\n };\n\n return {\n tuple: snapshot.tuple,\n artifact,\n transcriptId: `transcript_${snapshot.tuple.id}_inflight`,\n progress: snapshot.progress,\n completedAt: snapshot.updatedAt,\n };\n}\n\nfunction latestProgressSummary(progress: WorkerProgressEvent[]): string | null {\n for (const event of [...progress].reverse()) {\n if (event.kind === \"model_complete\" && event.outputSummary) return event.outputSummary;\n if (event.kind === \"tool_complete\" && event.outputSummary) {\n return `${event.toolName}: ${event.outputSummary}`;\n }\n if (event.kind === \"model_error\") return event.error;\n if (event.kind === \"tool_error\") return `${event.toolName}: ${event.error}`;\n }\n return null;\n}\n\nfunction terminalDispatches(records: DispatchRecord[]): DispatchRecord[] {\n const continued = new Set(\n records\n .map((record) => record.tuple.continuationOf)\n .filter((id): id is string => Boolean(id)),\n );\n return records.filter((record) => !continued.has(record.tuple.id));\n}\n\nfunction openStepBudgetDispatches(records: DispatchRecord[]): DispatchRecord[] {\n return terminalDispatches(records).filter(\n (record) =>\n record.artifact.status === \"incomplete\" &&\n record.artifact.stepsUsed >= record.tuple.steps,\n );\n}\n\nfunction continuationSummary(record: DispatchRecord): string {\n const latestAction = record.artifact.actions?.at(-1);\n return truncate(\n record.artifact.summary ||\n record.artifact.textOutput ||\n latestAction ||\n \"checkpoint saved\",\n 180,\n );\n}\n\nfunction classifyInterruptAnswer(answer: string): InterruptResolution {\n const trimmed = answer.trim();\n const normalized = trimmed.toLowerCase();\n if (!trimmed) return { kind: \"continue_worker\" };\n if (/\\b(status|what'?s happening|what is happening|progress|found|where are we|anything yet)\\b/i.test(trimmed)) {\n return { kind: \"status\" };\n }\n if (/\\b(stop|abort|cancel|quit|kill)\\b/i.test(normalized)) {\n return { kind: \"abort_task\" };\n }\n if (/\\b(replan|restart|start over|new plan|orchestrator)\\b/i.test(normalized)) {\n return { kind: \"orchestrator\", steering: trimmed };\n }\n if (/\\b(continue|resume|keep going|go on|carry on)\\b/i.test(normalized)) {\n return { kind: \"continue_worker\" };\n }\n return { kind: \"continue_worker\", steering: trimmed };\n}\n\nfunction needsOrchestrator(record: DispatchRecord): boolean {\n return /^NEEDS_ORCHESTRATOR:/i.test(finalizableOutput(record));\n}\n\nfunction maybeAutoFinalizeFromDispatches(records: DispatchRecord[]): string | null {\n if (records.length !== 1) return null;\n\n const record = records[0]!;\n const artifact = record.artifact;\n if (artifact.status !== \"complete\") return null;\n if (needsOrchestrator(record)) return null;\n\n const output = finalizableOutput(record);\n if (!output) return null;\n if (output.length > DIRECT_AUTO_FINALIZE_MAX_CHARS) return null;\n\n const expected = record.tuple.expectedOutput;\n if (expected.verification?.trim()) return null;\n if ((expected.successCriteria?.length ?? 0) > 0) return null;\n if (expectsFileArtifact(record)) return null;\n if (hasMutationAction(artifact.actions ?? [])) return null;\n if (looksUncertain(output)) return null;\n if (looksLikeContractEcho(output)) return null;\n\n return output;\n}\n\nfunction shouldRunDoneGate(records: DispatchRecord[]): boolean {\n if (records.length === 0) return false;\n if (records.some((record) => record.artifact.status !== \"complete\")) return false;\n if (records.some(needsOrchestrator)) return false;\n if (records.every((record) => !finalizableOutput(record))) return false;\n if (records.some(expectsFileArtifact)) return false;\n if (records.some((record) => hasMutationAction(record.artifact.actions ?? []))) {\n return false;\n }\n return true;\n}\n\nfunction doneGateSkipReason(records: DispatchRecord[]): string {\n if (records.length === 0) return \"no_dispatches\";\n if (records.some((record) => record.artifact.status !== \"complete\")) {\n return \"non_complete_result\";\n }\n if (records.every((record) => !finalizableOutput(record))) return \"missing_output\";\n if (records.some(expectsFileArtifact)) return \"file_artifact\";\n if (records.some((record) => hasMutationAction(record.artifact.actions ?? []))) {\n return \"mutation_action\";\n }\n return \"unknown\";\n}\n\nfunction finalizableOutput(record: DispatchRecord): string {\n const raw = record.artifact.textOutput?.trim() || record.artifact.output?.trim() || \"\";\n return stripTrailingContractEcho(raw);\n}\n\nfunction expectsFileArtifact(record: DispatchRecord): boolean {\n return record.tuple.expectedOutput.artifacts.some(\n (artifact) => artifact.type === \"file\" || artifact.type === \"directory\",\n );\n}\n\nfunction hasMutationAction(actions: string[]): boolean {\n return actions.some((action) =>\n /^(Write|Edit|TextEditor)\\b/.test(action.trim()),\n );\n}\n\nfunction looksUncertain(output: string): boolean {\n return /\\b(ran out of steps|incomplete|unable to|could not|couldn't|cannot determine|not enough information|needs? further|requires further|unclear|unsure)\\b/i.test(\n output,\n );\n}\n\nfunction looksLikeContractEcho(output: string): boolean {\n return /```json[\\s\\S]*\"artifacts\"\\s*:|\"\\s*artifacts\\s*\"\\s*:|\"successCriteria\"\\s*:/i.test(\n output,\n );\n}\n\nfunction stripTrailingContractEcho(output: string): string {\n let text = output.trim();\n let changed = true;\n\n while (changed) {\n changed = false;\n\n const fenced = /(?:^|\\n)```(?:json)?\\s*\\n([\\s\\S]*?)\\n```\\s*$/i.exec(text);\n if (fenced?.[1] && isExpectedOutputContractEcho(fenced[1])) {\n text = text.slice(0, fenced.index).trim();\n changed = true;\n continue;\n }\n\n const bare = trailingJsonContractStart(text);\n if (bare != null) {\n text = text.slice(0, bare).trim();\n changed = true;\n }\n }\n\n return text;\n}\n\nfunction trailingJsonContractStart(text: string): number | null {\n if (!text.endsWith(\"}\")) return null;\n\n const starts: number[] = [];\n if (text.startsWith(\"{\")) starts.push(0);\n for (let index = text.lastIndexOf(\"\\n{\"); index >= 0; index = text.lastIndexOf(\"\\n{\", index - 1)) {\n starts.push(index + 1);\n }\n\n for (const start of starts) {\n const candidate = text.slice(start).trim();\n if (isExpectedOutputContractEcho(candidate)) return start;\n }\n return null;\n}\n\nfunction isExpectedOutputContractEcho(jsonText: string): boolean {\n let parsed: unknown;\n try {\n parsed = JSON.parse(jsonText.trim());\n } catch {\n return false;\n }\n\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) return false;\n const record = parsed as Record<string, unknown>;\n if (!Array.isArray(record.artifacts)) return false;\n\n const allowedKeys = new Set([\"artifacts\", \"description\", \"successCriteria\", \"verification\"]);\n if (Object.keys(record).some((key) => !allowedKeys.has(key))) return false;\n\n return record.artifacts.every((artifact) => {\n if (!artifact || typeof artifact !== \"object\" || Array.isArray(artifact)) return false;\n const artifactRecord = artifact as Record<string, unknown>;\n const artifactKeys = Object.keys(artifactRecord);\n return typeof artifactRecord.type === \"string\" &&\n artifactKeys.every((key) => key === \"type\" || key === \"description\" || key === \"path\");\n });\n}\n\nfunction maybePassThroughDoneGateOutput(\n records: DispatchRecord[],\n decision: DoneGateResult,\n): string | null {\n if (!decision.output || records.length !== 1) return null;\n\n const record = records[0]!;\n if (record.artifact.status !== \"complete\") return null;\n if (needsOrchestrator(record)) return null;\n if (expectsFileArtifact(record)) return null;\n if (hasMutationAction(record.artifact.actions ?? [])) return null;\n\n const output = finalizableOutput(record);\n if (!output || output.length > DONE_GATE_OUTPUT_MAX_CHARS) return null;\n if (looksUncertain(output)) return null;\n if (looksLikeContractEcho(output)) return null;\n\n return output;\n}\n\nfunction formatDoneGatePrompt(task: string, records: DispatchRecord[]): string {\n return [\n \"## User Task\",\n task,\n \"\",\n \"## Latest Worker Results\",\n ...records.map(formatDoneGateRecord),\n \"\",\n \"Decide whether these worker results are enough to answer the user now.\",\n ].join(\"\\n\");\n}\n\nfunction formatDoneGateRecord(record: DispatchRecord, index: number): string {\n const output = truncate(finalizableOutput(record), DONE_GATE_OUTPUT_MAX_CHARS);\n const actions = (record.artifact.actions ?? [])\n .slice(0, 20)\n .map((action) => `- ${truncate(action, 240)}`)\n .join(\"\\n\");\n\n return [\n `### Worker ${index + 1}: ${record.tuple.id}`,\n `status: ${record.artifact.status}`,\n `steps_used: ${record.artifact.stepsUsed}`,\n `instruction: ${truncate(record.tuple.instruction, 1_000)}`,\n `expected_output: ${truncate(JSON.stringify(record.tuple.expectedOutput), 1_500)}`,\n actions ? `actions:\\n${actions}` : \"actions: none\",\n `worker_output:\\n${output}`,\n ].join(\"\\n\");\n}\n\nfunction parseDoneGateDecision(text: string): DoneGateResult {\n const raw = extractJsonObject(text);\n if (!raw) {\n return { output: null, reason: \"done gate returned non-json output\" };\n }\n\n try {\n const parsed = JSON.parse(raw) as Record<string, unknown>;\n const decision = parsed[\"decision\"];\n const finalOutput =\n typeof parsed[\"finalOutput\"] === \"string\"\n ? parsed[\"finalOutput\"].trim()\n : \"\";\n const reason =\n typeof parsed[\"reason\"] === \"string\" ? parsed[\"reason\"] : undefined;\n\n if (decision === \"finalize\" && finalOutput && !looksUncertain(finalOutput)) {\n return { output: finalOutput, ...(reason ? { reason } : {}) };\n }\n return {\n output: null,\n ...(reason ? { reason } : { reason: \"done gate chose continue\" }),\n };\n } catch (error) {\n return {\n output: null,\n reason: error instanceof Error ? error.message : \"invalid done gate json\",\n };\n }\n}\n\nfunction extractJsonObject(text: string): string | null {\n const start = text.indexOf(\"{\");\n const end = text.lastIndexOf(\"}\");\n if (start < 0 || end <= start) return null;\n return text.slice(start, end + 1);\n}\n\n/** Strip workerResult and compact progress payloads before serialization to avoid bloat. */\nfunction stripDispatchForSnapshot(record: DispatchRecord): DispatchRecord {\n const { workerResult: _w, progress: _p, ...rest } = record;\n return {\n ...rest,\n progress: record.progress.map(compactProgressForSnapshot),\n };\n}\n\nfunction compactProgressForSnapshot(\n progress: WorkerProgressEvent,\n): WorkerProgressEvent {\n switch (progress.kind) {\n case \"model_complete\":\n return {\n ...progress,\n ...(progress.publicRationale\n ? { publicRationale: truncate(progress.publicRationale, SNAPSHOT_PROGRESS_TEXT_MAX_CHARS) }\n : {}),\n ...(progress.outputSummary\n ? { outputSummary: truncate(progress.outputSummary, SNAPSHOT_PROGRESS_TEXT_MAX_CHARS) }\n : {}),\n };\n case \"model_error\":\n return {\n ...progress,\n error: truncate(progress.error, SNAPSHOT_PROGRESS_TEXT_MAX_CHARS),\n };\n case \"tool_start\":\n return {\n ...progress,\n ...(progress.argsSummary\n ? { argsSummary: truncate(progress.argsSummary, SNAPSHOT_PROGRESS_TEXT_MAX_CHARS) }\n : {}),\n };\n case \"tool_complete\":\n return {\n ...progress,\n outputSummary: truncate(progress.outputSummary, SNAPSHOT_PROGRESS_TEXT_MAX_CHARS),\n ...(progress.output\n ? { output: truncate(progress.output, SNAPSHOT_PROGRESS_TEXT_MAX_CHARS) }\n : {}),\n };\n case \"tool_error\":\n return {\n ...progress,\n error: truncate(progress.error, SNAPSHOT_PROGRESS_TEXT_MAX_CHARS),\n };\n case \"worker_result\":\n return {\n ...progress,\n summary: truncate(progress.summary, SNAPSHOT_PROGRESS_TEXT_MAX_CHARS),\n };\n case \"model_start\":\n return progress;\n case \"yield_start\":\n case \"yield_resume\":\n return progress;\n }\n}\n\nfunction traceToolCalls(toolCalls: unknown[]): TraceToolCall[] {\n return toolCalls.map((toolCall) => {\n const record =\n toolCall && typeof toolCall === \"object\"\n ? (toolCall as Record<string, unknown>)\n : {};\n const rawArgs = record[\"args\"] ?? record[\"input\"] ?? {};\n const args =\n rawArgs && typeof rawArgs === \"object\" && !Array.isArray(rawArgs)\n ? (rawArgs as Record<string, unknown>)\n : {};\n const toolCallId =\n typeof record[\"toolCallId\"] === \"string\"\n ? record[\"toolCallId\"]\n : undefined;\n return {\n toolName: String(record[\"toolName\"] ?? \"\"),\n ...(toolCallId ? { toolCallId } : {}),\n args: cloneForTrace(args),\n };\n });\n}\n\n\nfunction extractReasoningText(result: unknown): string {\n if (!result || typeof result !== \"object\") return \"\";\n const r = result as Record<string, unknown>;\n if (typeof r[\"reasoningText\"] === \"string\") return (r[\"reasoningText\"] as string).trim();\n const reasoning = r[\"reasoning\"];\n if (typeof reasoning === \"string\") return reasoning.trim();\n if (Array.isArray(reasoning)) {\n const parts = reasoning\n .map((p) => (p && typeof p === \"object\" && typeof (p as Record<string, unknown>)[\"text\"] === \"string\"\n ? ((p as Record<string, unknown>)[\"text\"] as string)\n : \"\"))\n .filter(Boolean);\n return parts.join(\"\\n\").trim();\n }\n return \"\";\n}\n","import type { HookCallback, HookContext, HookDecision } from '../interfaces/hooks';\n\nexport class HookRunner {\n private readonly hooks = new Map<string, HookCallback[]>();\n\n register(event: HookContext['event'], callback: HookCallback): void {\n const list = this.hooks.get(event) ?? [];\n list.push(callback);\n this.hooks.set(event, list);\n }\n\n async run(context: HookContext): Promise<HookDecision> {\n const list = this.hooks.get(context.event) ?? [];\n for (const hook of list) {\n const result = await hook(context);\n if (result && result.allow === false) {\n return result;\n }\n }\n return { allow: true };\n }\n}\n","import { AsyncLocalStorage } from 'node:async_hooks';\nimport { randomUUID } from 'node:crypto';\n\nexport interface SpanRecord {\n traceId: string;\n spanId: string;\n parentSpanId?: string | undefined;\n name: string;\n attributes: Record<string, string | number | boolean>;\n startTime: number;\n endTime: number;\n}\n\nexport interface MetricRecord {\n name: string;\n value: number;\n type: 'counter' | 'histogram';\n attributes: Record<string, string | number | boolean>;\n}\n\nexport interface SpanHandle {\n traceId: string;\n spanId: string;\n end(attributes?: Record<string, string | number | boolean>): void;\n}\n\nexport class HarnessTelemetry {\n private readonly context = new AsyncLocalStorage<{ traceId: string; spanId: string }>();\n private readonly spans: SpanRecord[] = [];\n private readonly metrics: MetricRecord[] = [];\n\n constructor(private readonly enabled = true) {}\n\n isEnabled(): boolean {\n return this.enabled;\n }\n\n startSpan(name: string, attributes: Record<string, string | number | boolean> = {}): SpanHandle {\n const now = Date.now();\n const parent = this.context.getStore();\n const traceId = parent?.traceId ?? randomUUID().replace(/-/g, '');\n const spanId = randomUUID().replace(/-/g, '').slice(0, 16);\n\n const record: SpanRecord = {\n traceId,\n spanId,\n parentSpanId: parent?.spanId,\n name,\n attributes: { ...attributes },\n startTime: now,\n endTime: now\n };\n\n this.spans.push(record);\n\n return {\n traceId,\n spanId,\n end: (extra = {}) => {\n record.endTime = Date.now();\n record.attributes = { ...record.attributes, ...extra };\n }\n };\n }\n\n async withSpan<T>(\n name: string,\n attributes: Record<string, string | number | boolean>,\n fn: () => Promise<T>\n ): Promise<T> {\n if (!this.enabled) {\n return fn();\n }\n\n const span = this.startSpan(name, attributes);\n return this.context.run({ traceId: span.traceId, spanId: span.spanId }, async () => {\n try {\n const result = await fn();\n span.end({ success: true });\n return result;\n } catch (error) {\n span.end({ success: false, error: error instanceof Error ? error.message : 'unknown' });\n throw error;\n }\n });\n }\n\n counter(name: string, value = 1, attributes: Record<string, string | number | boolean> = {}): void {\n if (!this.enabled) return;\n this.metrics.push({ name, value, type: 'counter', attributes });\n }\n\n histogram(name: string, value: number, attributes: Record<string, string | number | boolean> = {}): void {\n if (!this.enabled) return;\n this.metrics.push({ name, value, type: 'histogram', attributes });\n }\n\n getSpans(): SpanRecord[] {\n return [...this.spans];\n }\n\n getMetrics(): MetricRecord[] {\n return [...this.metrics];\n }\n}\n","import * as fs from 'node:fs/promises';\nimport * as path from 'node:path';\nimport type { Transcript, TranscriptStore, Artifact, ArtifactStore } from '../types';\n\n/**\n * File-based transcript store.\n * Stores transcripts as individual JSON files in a directory.\n */\nexport class FsTranscriptStore implements TranscriptStore {\n private readonly dir: string;\n private readonly indexPath: string;\n private index: string[] = [];\n private loaded = false;\n\n constructor(dir: string) {\n this.dir = dir;\n this.indexPath = path.join(dir, 'index.json');\n }\n\n async append(transcript: Transcript): Promise<void> {\n await this.ensureLoaded();\n await fs.mkdir(this.dir, { recursive: true });\n\n // Write transcript file\n const filePath = path.join(this.dir, `${transcript.id}.json`);\n await fs.writeFile(filePath, JSON.stringify(transcript, null, 2));\n\n // Update index\n this.index.push(transcript.id);\n await fs.writeFile(this.indexPath, JSON.stringify(this.index, null, 2));\n }\n\n async getAll(): Promise<Transcript[]> {\n await this.ensureLoaded();\n const transcripts: Transcript[] = [];\n for (const id of this.index) {\n const transcript = await this.get(id);\n if (transcript) {\n transcripts.push(transcript);\n }\n }\n return transcripts;\n }\n\n async get(id: string): Promise<Transcript | null> {\n try {\n const filePath = path.join(this.dir, `${id}.json`);\n const data = await fs.readFile(filePath, 'utf-8');\n return JSON.parse(data) as Transcript;\n } catch {\n return null;\n }\n }\n\n private async ensureLoaded(): Promise<void> {\n if (this.loaded) return;\n try {\n const data = await fs.readFile(this.indexPath, 'utf-8');\n this.index = JSON.parse(data) as string[];\n } catch {\n this.index = [];\n }\n this.loaded = true;\n }\n}\n\n/**\n * File-based artifact store.\n * Stores artifacts in a single JSON file.\n */\nexport class FsArtifactStore implements ArtifactStore {\n private readonly filePath: string;\n private artifacts: Record<string, Artifact> = {};\n private loaded = false;\n\n constructor(filePath: string) {\n this.filePath = filePath;\n }\n\n async set(id: string, artifact: Artifact): Promise<void> {\n await this.ensureLoaded();\n this.artifacts[id] = artifact;\n await this.save();\n }\n\n async get(id: string): Promise<Artifact | null> {\n await this.ensureLoaded();\n return this.artifacts[id] ?? null;\n }\n\n async getAll(): Promise<Record<string, Artifact>> {\n await this.ensureLoaded();\n return { ...this.artifacts };\n }\n\n private async ensureLoaded(): Promise<void> {\n if (this.loaded) return;\n try {\n const data = await fs.readFile(this.filePath, 'utf-8');\n this.artifacts = JSON.parse(data) as Record<string, Artifact>;\n } catch {\n this.artifacts = {};\n }\n this.loaded = true;\n }\n\n private async save(): Promise<void> {\n const dir = path.dirname(this.filePath);\n await fs.mkdir(dir, { recursive: true });\n await fs.writeFile(this.filePath, JSON.stringify(this.artifacts, null, 2));\n }\n}\n","import type {\n ToolProvider,\n ToolProviderCapabilities,\n ToolResult,\n BashOptions,\n ReadOptions,\n GlobOptions,\n GrepOptions,\n} from \"../interfaces/tool-provider\";\n\n/**\n * CompositeToolProvider delegates to the first provider with matching capabilities.\n *\n * Useful when multiple tool providers exist (e.g., a sandbox executor + a local\n * file-system executor) and you want to route tool calls based on capability.\n */\nexport class CompositeToolProvider implements ToolProvider {\n private providers: ToolProvider[];\n\n constructor(providers: ToolProvider[]) {\n this.providers = providers;\n }\n\n capabilities(): ToolProviderCapabilities {\n return this.providers.reduce(\n (acc, p) => {\n const c = p.capabilities();\n return {\n bash: acc.bash || c.bash,\n fileSystem: acc.fileSystem || c.fileSystem,\n webFetch: acc.webFetch || c.webFetch,\n webSearch: acc.webSearch || c.webSearch,\n codeExecution: acc.codeExecution || c.codeExecution,\n sandboxed: acc.sandboxed || c.sandboxed,\n };\n },\n {\n bash: false,\n fileSystem: false,\n webFetch: false,\n webSearch: false,\n codeExecution: false,\n sandboxed: false,\n } as ToolProviderCapabilities,\n );\n }\n\n /** Pick the first provider that supports the requested capability. */\n private pick(capability: keyof ToolProviderCapabilities): ToolProvider {\n const provider = this.providers.find((p) => p.capabilities()[capability]);\n if (!provider) {\n throw new Error(`No provider supports capability: ${capability}`);\n }\n return provider;\n }\n\n async bash(command: string, options?: BashOptions): Promise<ToolResult> {\n return this.pick(\"bash\").bash(command, options);\n }\n\n async readFile(path: string, options?: ReadOptions): Promise<ToolResult> {\n return this.pick(\"fileSystem\").readFile(path, options);\n }\n\n async writeFile(path: string, content: string): Promise<ToolResult> {\n return this.pick(\"fileSystem\").writeFile(path, content);\n }\n\n async editFile(path: string, oldText: string, newText: string): Promise<ToolResult> {\n return this.pick(\"fileSystem\").editFile(path, oldText, newText);\n }\n\n async glob(pattern: string, options?: GlobOptions): Promise<ToolResult> {\n return this.pick(\"fileSystem\").glob(pattern, options);\n }\n\n async grep(\n pattern: string,\n path?: string,\n options?: GrepOptions,\n ): Promise<ToolResult> {\n return this.pick(\"fileSystem\").grep(pattern, path, options);\n }\n}\n","import type {\n ToolResult,\n ToolProviderCapabilities,\n BashOptions,\n ReadOptions,\n GlobOptions,\n GrepOptions,\n BatchOp,\n BatchResult,\n} from \"../interfaces/tool-provider\";\n\n/**\n * Executor interface for sandboxed code execution (e.g., E2B sandbox).\n *\n * Implementations wrap sandbox APIs into a uniform shape that\n * E2BToolProvider can delegate to.\n */\nexport interface E2BExecutor {\n bash(command: string, options?: BashOptions): Promise<ToolResult>;\n readFile(path: string, options?: ReadOptions): Promise<ToolResult>;\n writeFile(path: string, content: string): Promise<ToolResult>;\n editFile(path: string, oldText: string, newText: string): Promise<ToolResult>;\n glob(pattern: string, options?: GlobOptions): Promise<ToolResult>;\n grep(\n pattern: string,\n path?: string,\n options?: GrepOptions,\n ): Promise<ToolResult>;\n batch?(ops: BatchOp[]): Promise<BatchResult[]>;\n destroy(): Promise<void>;\n}\n\n/**\n * E2BToolProvider wraps an E2BExecutor into a ToolProvider interface\n * suitable for use with the harness agent loop.\n */\nexport class E2BToolProvider {\n constructor(private executor: E2BExecutor) {}\n\n capabilities(): ToolProviderCapabilities {\n return {\n bash: true,\n fileSystem: true,\n webFetch: false,\n webSearch: false,\n codeExecution: true,\n sandboxed: true,\n };\n }\n\n async bash(command: string, options?: BashOptions): Promise<ToolResult> {\n return this.executor.bash(command, options);\n }\n\n async readFile(path: string, options?: ReadOptions): Promise<ToolResult> {\n return this.executor.readFile(path, options);\n }\n\n async writeFile(path: string, content: string): Promise<ToolResult> {\n return this.executor.writeFile(path, content);\n }\n\n async editFile(\n path: string,\n oldText: string,\n newText: string,\n ): Promise<ToolResult> {\n return this.executor.editFile(path, oldText, newText);\n }\n\n async glob(pattern: string, options?: GlobOptions): Promise<ToolResult> {\n return this.executor.glob(pattern, options);\n }\n\n async grep(\n pattern: string,\n path?: string,\n options?: GrepOptions,\n ): Promise<ToolResult> {\n return this.executor.grep(pattern, path, options);\n }\n}\n","import type {\n ToolResult,\n BashOptions,\n ReadOptions,\n GlobOptions,\n GrepOptions,\n} from \"../interfaces/tool-provider\";\nimport type { E2BExecutor } from \"./e2b-tool-provider\";\n\n/** Options for constructing a ControlPlaneE2BExecutor. */\nexport interface ControlPlaneE2BExecutorOptions {\n baseUrl: string;\n apiKey: string;\n templateId?: string;\n}\n\n/**\n * Base class for control-plane E2B sandbox executors.\n *\n * Provides the configuration surface and stubs that concrete implementations\n * (e.g., Samyx control-plane API) extend. Subclasses must override the\n * tool-execution methods with actual sandbox API calls.\n */\nexport class ControlPlaneE2BExecutor implements E2BExecutor {\n protected baseUrl: string;\n protected apiKey: string;\n protected templateId: string;\n\n constructor(options: ControlPlaneE2BExecutorOptions) {\n this.baseUrl = options.baseUrl;\n this.apiKey = options.apiKey;\n this.templateId = options.templateId ?? \"polyglot-v1\";\n }\n\n async bash(_command: string, _options?: BashOptions): Promise<ToolResult> {\n throw new Error(\n \"ControlPlaneE2BExecutor.bash() not implemented — use a concrete subclass\",\n );\n }\n\n async readFile(_path: string, _options?: ReadOptions): Promise<ToolResult> {\n throw new Error(\"ControlPlaneE2BExecutor.readFile() not implemented\");\n }\n\n async writeFile(_path: string, _content: string): Promise<ToolResult> {\n throw new Error(\"ControlPlaneE2BExecutor.writeFile() not implemented\");\n }\n\n async editFile(\n _path: string,\n _oldText: string,\n _newText: string,\n ): Promise<ToolResult> {\n throw new Error(\"ControlPlaneE2BExecutor.editFile() not implemented\");\n }\n\n async glob(_pattern: string, _options?: GlobOptions): Promise<ToolResult> {\n throw new Error(\"ControlPlaneE2BExecutor.glob() not implemented\");\n }\n\n async grep(\n _pattern: string,\n _path?: string,\n _options?: GrepOptions,\n ): Promise<ToolResult> {\n throw new Error(\"ControlPlaneE2BExecutor.grep() not implemented\");\n }\n\n async writeFileBytes(_path: string, _data: Uint8Array): Promise<void> {\n throw new Error(\"ControlPlaneE2BExecutor.writeFileBytes() not implemented\");\n }\n\n async readFileBytes(_path: string): Promise<Uint8Array> {\n throw new Error(\"ControlPlaneE2BExecutor.readFileBytes() not implemented\");\n }\n\n get activeSandboxId(): string | undefined {\n return undefined;\n }\n\n async destroy(): Promise<void> {\n // No-op — sandbox lifecycle managed by the concrete subclass\n }\n}\n","/**\n * Permission request sent to the resolver for each tool call.\n *\n * The `toolName` key is always present. Additional tool arguments\n * are forwarded as-is for context-sensitive permission decisions.\n */\nexport interface PermissionRequest {\n toolName: string;\n [toolArg: string]: unknown;\n}\n\n/** Resolver function that decides whether a tool call is permitted. */\nexport type PermissionResolver = (\n request: PermissionRequest,\n) => Promise<boolean>;\n\n/** Permission mode for the manager. */\nexport type PermissionMode = \"deny_all\" | \"allow_all\" | \"ask\";\n\n/**\n * PermissionManager controls whether tool calls are allowed.\n *\n * Three modes:\n * - `deny_all`: reject everything\n * - `allow_all`: accept everything\n * - `ask`: delegate to a resolver function\n */\nexport class PermissionManager {\n private mode: PermissionMode;\n private resolver: PermissionResolver | undefined;\n\n constructor(mode: PermissionMode, resolver?: PermissionResolver) {\n this.mode = mode;\n this.resolver = resolver;\n }\n\n /** Check whether a tool call is permitted. */\n async canExecute(request: PermissionRequest): Promise<boolean> {\n switch (this.mode) {\n case \"deny_all\":\n return false;\n case \"allow_all\":\n return true;\n case \"ask\":\n if (this.resolver) {\n return this.resolver(request);\n }\n return false;\n default:\n return false;\n }\n }\n}\n","// ── Execution Context ──\n\nexport interface ExecutionContext {\n attempt: number;\n totalAttempts: number;\n startTime: number;\n signal: AbortSignal;\n}\n\n// ── Resilience Pipeline ──\n\ninterface PipelineOptions {\n timeout?: number;\n retryCount?: number;\n}\n\nclass ResiliencePipeline {\n private options: PipelineOptions;\n\n constructor(options: PipelineOptions = {}) {\n this.options = options;\n }\n\n /** Set a timeout in milliseconds for execution. */\n timeout(ms: number): ResiliencePipeline {\n this.options.timeout = ms;\n return this;\n }\n\n /** Set retry count. */\n retries(count: number): ResiliencePipeline {\n this.options.retryCount = count;\n return this;\n }\n\n /** Build the executable pipeline. */\n build() {\n const { timeout: timeoutMs, retryCount = 0 } = this.options;\n return {\n execute: async <T>(\n fn: () => Promise<T>,\n ctx: ExecutionContext,\n ): Promise<T> => {\n let lastError: Error | undefined;\n\n for (let attempt = 0; attempt <= retryCount; attempt++) {\n if (ctx.signal.aborted) {\n throw (\n ctx.signal.reason ??\n new DOMException(\"Aborted\", \"AbortError\")\n );\n }\n\n try {\n if (timeoutMs) {\n const result = await raceWithTimeout(\n fn(),\n timeoutMs,\n ctx.signal,\n );\n return result;\n }\n return await fn();\n } catch (err) {\n lastError = err instanceof Error ? err : new Error(String(err));\n if (attempt === retryCount) {\n throw lastError;\n }\n // Exponential backoff before retry\n const delay = Math.min(4000, 500 * Math.pow(2, attempt));\n await sleep(delay, ctx.signal);\n }\n }\n\n throw lastError ?? new Error(\"Pipeline failed\");\n },\n };\n }\n}\n\n/** Create a new resilience pipeline builder. */\nexport function resilience(): ResiliencePipeline {\n return new ResiliencePipeline();\n}\n\n// ── Helpers ──\n\nasync function raceWithTimeout<T>(\n promise: Promise<T>,\n timeoutMs: number,\n signal: AbortSignal,\n): Promise<T> {\n return Promise.race([\n promise,\n new Promise<T>((_, reject) => {\n const timer = setTimeout(() => {\n reject(new Error(`Timeout after ${timeoutMs}ms`));\n }, timeoutMs);\n const onAbort = () => {\n clearTimeout(timer);\n reject(\n signal.reason ?? new DOMException(\"Aborted\", \"AbortError\"),\n );\n };\n signal.addEventListener(\"abort\", onAbort, { once: true });\n }),\n ]);\n}\n\nfunction sleep(ms: number, signal: AbortSignal): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n if (signal.aborted) {\n reject(\n signal.reason ?? new DOMException(\"Aborted\", \"AbortError\"),\n );\n return;\n }\n const timer = setTimeout(() => {\n signal.removeEventListener(\"abort\", onAbort);\n resolve();\n }, ms);\n function onAbort() {\n clearTimeout(timer);\n reject(\n signal.reason ?? new DOMException(\"Aborted\", \"AbortError\"),\n );\n }\n signal.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n"]}
|