@bluecopa/harness 0.0.0-snapshot.137

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../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/tools.ts","../../src/arc/tool-registry.ts","../../src/arc/stores/memory-stores.ts","../../src/arc/lcm/message-store.ts","../../src/arc/lcm/summary-dag.ts","../../src/arc/lcm/context-assembler.ts","../../src/arc/prompts.ts","../../src/arc/shared-types.ts","../../src/vercel-agent-loop.ts","../../src/arc/worker.ts","../../src/arc/lcm/compactor.ts","../../src/arc/dispatcher.ts","../../src/arc/loop.ts","../../src/arc/stores/fs-stores.ts"],"names":["z","tool","path","s","toModelMessages","defaultAnthropicProvider","result","tuple","err","generateText","savedEvent","nextTask"],"mappings":"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","file":"index.js","sourcesContent":["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 { z } from \"zod\";\nimport { getTextContent } 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\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}\n\n// ── Tool implementations ──\n\n/** Expand a summary node — leaf nodes return source transcript, rollups return child summaries */\nexport async function expandSummary(deps: LcmToolDeps, summaryId: string, maxTokens: number): Promise<string> {\n const node = deps.summaryDAG.getNode(summaryId);\n if (!node) return `Summary node not found: ${summaryId}`;\n\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, 8_000);\n }\n }\n return node.summary;\n }\n const trace = messages\n .map(\n (m) =>\n `[${m.role}:${m.index}] ${m.content.slice(0, Math.floor((maxTokens * 4) / messages.length))}`,\n )\n .join(\"\\n\");\n return truncate(trace, maxTokens * 4);\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\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 at full fidelity */\nexport function historyRead(deps: LcmToolDeps, conversationId: string, messageIndex: number): string | null {\n const msg = deps.messageStore.getMessage(conversationId, messageIndex);\n if (!msg) return null;\n const parts = [msg.content];\n if (msg.toolCalls) {\n for (const tc of msg.toolCalls) {\n parts.push(`[tool_call] ${tc.toolName} ${JSON.stringify(tc.args)}`);\n }\n }\n if (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\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. For leaf nodes: returns the original worker transcript. For rollup nodes: returns the child summaries. Use when a ghost cue or summary reference needs full detail.\",\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(\"Approximate maximum tokens to return (default: 8000)\"),\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 at full fidelity. Use after history_search returns a [conversationId:messageIndex] reference and you need the complete, untruncated content.\",\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 }),\n});\n","import { tool } from \"ai\";\nimport { z } from \"zod\";\nimport type { ToolResult } 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 } from \"./lcm/tools\";\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\", \"strong\"]).optional()\n .describe(\"Worker model tier. 'fast' for simple lookups, reads, searches, and summaries. 'strong' (default) for complex reasoning, coding, and multi-step tasks.\"),\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/** 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\nexport const scratchPadTools = { ScratchPad_Write, ScratchPad_Read, ScratchPad_List };\n\nexport const orchestratorTools = { dispatch, recall, readEpisode, done };\nexport const arcWorkerTools = { ReadEpisode, Show, ...scratchPadTools };\n\n// ── Tool factories: create Tool entries with execute closures ──\n\nexport interface ArcToolDeps {\n readEpisode?: (args: ReadEpisodeArgs) => Promise<string>;\n historySearch?: (pattern: string, opts?: { conversationId?: string; maxResults?: number }) => GrepResult[];\n historyExpand?: (summaryId: string, maxTokens?: number) => Promise<string>;\n historyOverview?: (summaryId?: string) => string;\n historyRead?: (conversationId: string, messageIndex: number) => string | null;\n scratchPad?: ScratchPad;\n recall?: (query: string) => Promise<string>;\n askUser?: (question: string, options?: string[]) => Promise<string>;\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 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 execute: async (_p, args) => {\n if (!deps.historyExpand) return err(\"history_expand unavailable\");\n return ok(await deps.historyExpand(String(args.summaryId ?? \"\"), (args.maxTokens as number | undefined) ?? 8000));\n },\n });\n\n tools.set(\"history_overview\", {\n name: \"history_overview\",\n schema: s(history_overview),\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 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 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 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 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 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 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.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\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 /** 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\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 { 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\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","import type { ToolCallInfo, ToolResultInfo } from \"../../agent/types\";\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 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 } 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\";\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 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 return {\n role: msg.role,\n content: msg.content,\n ...(msg.toolCalls ? { toolCalls: msg.toolCalls } : {}),\n ...(msg.toolResults ? { toolResults: msg.toolResults } : {}),\n };\n}\n","export const ORCHESTRATOR_SYSTEM_PROMPT = `You accomplish tasks by dispatching workers and synthesizing results.\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: \"strong\" (default) — full-capability model for coding, debugging, complex reasoning, and multi-step tasks.\nUse fast when the task is straightforward and doesn't require deep reasoning.\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\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. Do not repeat failed approaches — change strategy or decompose differently.\n\nExplain your reasoning before each tool call.\n\nBefore calling done, use readEpisode to verify the actual worker output — summaries may be truncated or stale. Call done only after confirming the result matches the task requirements. Re-dispatching costs turns — only follow up if the result is incomplete, failed, or clearly wrong.`;\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, stop and write your progress to ScratchPad_Write — this is more valuable than one more attempt.\n\nBefore finishing, verify your work against the expected output contract. If verification fails, fix it.\n\nExplain your reasoning before each tool call.`;\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 type {\n AgentAction,\n AgentMessage,\n ToolCallAction,\n ToolBatchAction,\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 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\";\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((v) => String(v).slice(0, 200))\n .join(\", \");\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 } = 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 let userContent = \"\";\n\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 // 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 const messages: AgentMessage[] = [{ role: \"user\", content: userContent }];\n\n let stepsUsed = 0;\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 < maxSteps) {\n if (signal?.aborted) {\n status = \"failed\";\n lastMessage = \"Worker aborted\";\n break;\n }\n\n // Auto-check active threads — inject status without burning a step\n if (toolProvider.activeThreads) {\n const updates = toolProvider.activeThreads();\n if (updates.length > 0) {\n const lines = updates.map((u) => {\n const threadStatus = u.error\n ? `Error: ${u.error}`\n : u.isComplete\n ? `Completed (exit code: ${u.exitCode})`\n : \"Running\";\n const parts = [`[auto] Thread ${u.threadId}: ${threadStatus}`];\n if (u.output) parts.push(u.output);\n return parts.join(\"\\n\");\n });\n messages.push({\n role: \"user\",\n content: `[System: background thread updates]\\n${lines.join(\"\\n\\n\")}`,\n });\n }\n }\n\n const step = stepsUsed + 1;\n const modelStartedAt = Date.now();\n onProgress?.({ kind: \"model_start\", step, maxSteps });\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 action = await loop.nextAction(messages, signal);\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 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\n const results: Array<{\n toolCallId: string;\n toolName: string;\n result: string;\n isError?: boolean;\n durationMs?: number;\n }> = [];\n for (const call of callsWithIds) {\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 results.push({ toolCallId, toolName: call.name, result: toolResultText(blockedResult), isError: true, durationMs: Date.now() - toolStartedAt });\n actions.push(`${call.name}${argSummary ? `: ${argSummary}` : \"\"} → ERROR: ${pre.reason ?? \"blocked by pre-hook\"}`);\n continue;\n }\n }\n\n let result: ToolResult;\n try {\n const meta = toolRegistry.get(call.name);\n if (meta?.execute) {\n result = await meta.execute(toolProvider, call.args, workDir);\n } else {\n result = { success: false, output: \"\", error: `Unknown tool: ${call.name}` };\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 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 ...(exitCode !== undefined ? { exitCode } : {}),\n });\n results.push({\n toolCallId,\n toolName: call.name,\n result: resultText,\n isError: !result.success,\n durationMs: Date.now() - toolStartedAt,\n });\n\n // Collect artifact from result (what the tool actually did)\n if (result.success && result.artifact) {\n artifacts.push(result.artifact);\n // Track output as last produced/modified file\n if (result.artifact.action !== \"observed\" && result.artifact.kind === \"file\") {\n output = result.artifact.uri;\n }\n }\n\n // Track action for orchestrator visibility\n const resultSummary = summarizeText(resultText, 150);\n actions.push(\n `${call.name}${argSummary ? `: ${argSummary}` : \"\"} → ${result.success ? resultSummary : `ERROR: ${resultSummary}`}`,\n );\n }\n\n // Add tool results message\n messages.push({\n role: \"tool\",\n content: results.map((r) => `[${r.toolName}]: ${r.result}`).join(\"\\n\"),\n toolResults: results,\n });\n }\n }\n\n // If we exhausted steps without completing\n if (status === \"incomplete\" && stepsUsed >= maxSteps) {\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\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 } from \"../agent/types\";\nimport type { HookRunner } from \"../hooks/hook-runner\";\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 } from \"./lcm/context-assembler\";\nimport { buildLeafSummary } from \"./lcm/compactor\";\nimport { cloneForTrace } from \"./trace-utils\";\nimport { normalizeExpectedOutput } from \"./tools\";\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 toolProvider: ToolProvider;\n workerSystemPromptSuffix?: string | undefined;\n providerOptions?: Record<string, unknown> | undefined;\n hookRunner?: HookRunner | undefined;\n messageStore: MessageStore;\n summaryDAG: SummaryDAG;\n vectorIndex: VectorIndex;\n transcriptStore: TranscriptStore;\n artifactStore: ArtifactStore;\n scratchPad: ScratchPad;\n workerTools: Record<string, AnyTool>;\n workerToolRegistry: Map<string, Tool>;\n allWorkerToolNames: string[];\n appendOrchestratorMessage: (role: \"user\" | \"assistant\" | \"tool\", content: string) => void;\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// ── Functions ──\n\nexport function buildTuple(\n deps: DispatchDeps,\n args: Record<string, unknown>,\n orchestratorContext?: string,\n): Tuple {\n const tier = args.tier === \"fast\" || args.tier === \"strong\" ? args.tier : undefined;\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: deps.maxStepsPerWorker,\n ...(tier ? { tier } : {}),\n orchestratorContext,\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\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 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 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 buildPriorWorkContext(\n state.dispatchRecords,\n deps.transcriptStore,\n 4_000,\n );\n if (priorWork) sections.push(priorWork);\n\n const workerTaskContext = sections.filter(Boolean).join(\"\\n\\n\");\n\n const workerContext = await 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 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 result = await runWorker({\n task: deps.task,\n instruction: tuple.instruction,\n expectedOutput: tuple.expectedOutput,\n lcmContext: workerContext,\n inputArtifacts: await getInputArtifacts(deps.artifactStore, deps.toolProvider, tuple.inputs),\n tools: deps.workerTools,\n toolRegistry: deps.workerToolRegistry,\n maxSteps: tuple.steps,\n toolProvider: deps.toolProvider,\n createModel: deps.createModel,\n model: resolveWorkerModel(deps, tuple),\n workDir: deps.workDir,\n signal,\n systemPromptSuffix: deps.workerSystemPromptSuffix,\n providerOptions: deps.providerOptions,\n orchestratorContext: tuple.orchestratorContext,\n tupleId: tuple.id,\n hookRunner,\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 // 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 deps.artifactStore.set(tuple.id, artifact);\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 deps.transcriptStore.append(transcript);\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 deps.summaryDAG.compact();\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 deps.vectorIndex.add(transcript.id, textToEmbed).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 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 incomplete/failed — completed dispatches don't need continuation\n const relevant = dispatchRecords.filter(\n (r) => r.artifact.status === \"incomplete\" || r.artifact.status === \"failed\",\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 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 TraceToolCall,\n ReadEpisodeArgs,\n ScratchPad,\n VectorIndex,\n TranscriptStore,\n ArtifactStore,\n} from \"./types\";\nimport { dispatch, done, buildWorkerToolEntries, buildOrchestratorToolEntries, type ArcToolDeps } from \"./tools\";\nimport { toolSchemasFromRegistry, type Tool } from \"./tool-registry\";\nimport {\n MemoryTranscriptStore,\n MemoryVectorIndex,\n MemoryArtifactStore,\n MemoryScratchPad,\n} from \"./stores/memory-stores\";\nimport {\n buildOodaSnapshot,\n formatOodaSnapshotForPrompt,\n formatReadEpisodeResult,\n} from \"./episode-projection\";\nimport { MemoryMessageStore, type MessageStore } from \"./lcm/message-store\";\nimport { MemorySummaryDAG, type SummaryDAG } from \"./lcm/summary-dag\";\nimport { assembleContext } from \"./lcm/context-assembler\";\nimport { cloneForTrace } from \"./trace-utils\";\nimport { ORCHESTRATOR_SYSTEM_PROMPT } from \"./prompts\";\nimport {\n expandSummary,\n describeSummary,\n recallDirect,\n historyRead,\n type LcmToolDeps,\n} from \"./lcm/tools\";\nimport { runParallelDispatches, type DispatchDeps, type DispatchState } from \"./dispatcher\";\n\n/** Orchestrator system prompt wrapped with cache_control for OpenRouter/Anthropic. */\nconst ORCHESTRATOR_SYSTEM_CACHED = [\n {\n role: \"system\" as const,\n content: ORCHESTRATOR_SYSTEM_PROMPT,\n providerOptions: {\n anthropic: { cacheControl: { type: \"ephemeral\" } },\n openrouter: { cacheControl: { type: \"ephemeral\" } },\n },\n },\n];\n\nconst DEFAULT_WINDOW_SIZE = 10;\nconst DEFAULT_MAX_TURNS = 12;\nconst DEFAULT_MAX_STEPS_PER_WORKER = 15;\nconst DEFAULT_CONTEXT_BUDGET = 24_000; // tokens for assembled context\nconst DEFAULT_FRESH_TAIL_SIZE = 6; // raw messages to keep\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 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 // 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\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\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 /** 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: string | null) => void) | null = null;\n\n constructor(config: ArcConfig) {\n this.config = config;\n this.maxTurns = config.maxTurns ?? DEFAULT_MAX_TURNS;\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.windowSize = config.orchestratorWindowSize ?? DEFAULT_WINDOW_SIZE;\n this.model = config.model;\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 };\n\n // Build deps for tool factories\n const toolDeps: ArcToolDeps = {\n readEpisode: (args) => this.readEpisode(args),\n historySearch: (pattern, opts) => this.messageStore.grep(pattern, opts),\n historyExpand: (summaryId, maxTokens) => expandSummary(lcmDeps, summaryId, maxTokens ?? 8000),\n historyOverview: (summaryId) => describeSummary(lcmDeps, summaryId),\n historyRead: (conversationId, messageIndex) => historyRead(lcmDeps, conversationId, messageIndex),\n scratchPad: this.scratchPad,\n recall: (query) => recallDirect(lcmDeps, query),\n ...(config.askUser ? { askUser: config.askUser } : {}),\n };\n\n this.orchestratorToolRegistry = buildOrchestratorToolEntries(toolDeps);\n const 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 workerArcTools) {\n workerToolRegistry.set(name, tool);\n }\n const workerTools = {\n ...toolSchemasFromRegistry(agentToolRegistry),\n ...toolSchemasFromRegistry(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 // 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 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 messageStore: this.messageStore,\n summaryDAG: this.summaryDAG,\n vectorIndex: this.vectorIndex,\n transcriptStore: this.transcriptStore,\n artifactStore: this.artifactStore,\n scratchPad: this.scratchPad,\n workerTools,\n workerToolRegistry,\n allWorkerToolNames: Object.keys(workerTools),\n appendOrchestratorMessage: (role, content) => this.appendOrchestratorMessage(role, content),\n };\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 /** 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 /**\n * Push a follow-up task into the loop. The orchestrator sees it as\n * a new user message with full conversational context from prior tasks.\n */\n pushTask(task: string): boolean {\n if (!this.taskResolve) return false;\n const resolve = this.taskResolve;\n this.taskResolve = null;\n resolve(task);\n return true;\n }\n\n private waitForNextTask(signal?: AbortSignal): Promise<string | 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(): Promise<ArcEvent | null> {\n const { sessionStore, sessionId } = this.config;\n if (!sessionStore || !sessionId) return null;\n try {\n const dagSnapshot = this.summaryDAG.serialize();\n await sessionStore.save(sessionId, {\n messages: this.messageStore.serialize(),\n dispatches: this.dispatchState.dispatchRecords.map(stripDispatchForSnapshot),\n dagNodes: dagSnapshot.nodes,\n dagCoveredBy: dagSnapshot.coveredBy,\n turn: this.turn,\n dispatchCount: this.dispatchState.dispatchCount,\n orchestratorMessageIndex: this.orchestratorMessageIndex,\n });\n // Update meta with live stats (upsert — works for first save too)\n const existing = await sessionStore.getMeta(sessionId);\n await 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) + 1,\n summary: truncate(this.config.task, 120),\n });\n return { type: \"session_saved\", sessionId };\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 { type: \"trace\", trace: { scope: \"orchestrator\", phase: \"tool_result\", turn: this.turn, toolName: \"session_save\", args: {}, result: { error: msg } } } as ArcEvent;\n }\n }\n\n /** Reset per-task state while keeping full conversation history. */\n private async resetForNewTask(task: string): Promise<void> {\n this.config = { ...this.config, task };\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 await this.scratchPad.clear();\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 this.vectorIndex.load();\n\n // Hydrate from session if available\n if (this.config.sessionStore && this.config.sessionId) {\n const snapshot = await this.config.sessionStore.load(this.config.sessionId);\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 // Clamp/reconcile hydrated numerics\n this.turn = Math.max(0, Math.min(snapshot.turn, this.maxTurns));\n this.dispatchState.dispatchCount = Math.max(0, snapshot.dispatchCount);\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\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 // Build orchestrator context\n const context = await this.buildContext();\n const { messages: orchestratorMessages, contextTokens } = this.buildOrchestratorMessages(context);\n const modelMessages = toModelMessages(orchestratorMessages);\n\n yield { type: \"orchestrator_turn\", turn: this.turn, contextTokens };\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: ORCHESTRATOR_SYSTEM_PROMPT,\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 // eslint-disable-next-line @typescript-eslint/no-explicit-any\n result = await (generateText as any)({\n model: this.createModel!(this.model),\n system: ORCHESTRATOR_SYSTEM_CACHED,\n tools: this.orchestratorToolSchemas,\n messages: modelMessages,\n toolChoice: \"auto\",\n abortSignal: turnSignal,\n ...(this.config.providerOptions\n ? { providerOptions: this.config.providerOptions }\n : {}),\n });\n } catch (err: unknown) {\n if (turnSignal.aborted && !(signal?.aborted)) {\n // Turn interrupted — ask user for steering\n yield* this.handleInterrupt();\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 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 // 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 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: { output, accepted: true },\n },\n };\n // Record the done output in conversation history\n this.appendOrchestratorMessage(\"assistant\", `[done] ${output}`);\n yield { type: \"done\", output };\n const savedEvent = await this.saveSession();\n if (savedEvent) yield savedEvent;\n\n // Wait for next task (persistent session)\n const nextTask = await this.waitForNextTask(signal);\n if (nextTask == null) return; // session ended\n this.appendOrchestratorMessage(\"user\", nextTask);\n await this.resetForNewTask(nextTask);\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 registryTool.execute(this.config.toolProvider, args, this.config.workDir);\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 yield* runParallelDispatches(this.dispatchDeps, this.dispatchState, dispatchCalls, publicRationale, turnSignal);\n // If turn was interrupted during workers, ask for steering\n if (turnSignal.aborted && !(signal?.aborted)) {\n yield* this.handleInterrupt();\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 }\n\n // Turn budget exhausted\n await 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();\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);\n await this.resetForNewTask(nextTask);\n } // end taskLoop\n\n // Final save\n await 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 /** Append a message to the LCM message store (single source of truth) */\n private appendOrchestratorMessage(\n role: \"user\" | \"assistant\" | \"tool\",\n content: string,\n ): void {\n this.messageStore.append({\n id: `orchestrator_msg_${this.orchestratorMessageIndex}`,\n conversationId: \"orchestrator\",\n index: this.orchestratorMessageIndex++,\n role,\n content,\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 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 buildOrchestratorMessages(\n context: OrchestratorContext,\n ): { messages: AgentMessage[]; contextTokens: number } {\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 messages = [taskContextMsg, oodaMsg, ...customContextMessages];\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 };\n }\n\n // Default: use LCM-assembled context\n const taskContext = this.buildTaskContextText(context);\n const assembled = assembleContext({\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 });\n\n // Append last result highlight if present\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 }\n\n return { messages: assembled.messages, contextTokens: assembled.tokenEstimate };\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 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: prompt user for steering, inject into context.\n */\n private async *handleInterrupt(): AsyncGenerator<ArcEvent> {\n this.appendOrchestratorMessage(\"user\", \"[system] Turn interrupted by user.\");\n if (this.config.askUser) {\n const question = \"Turn interrupted. How would you like to proceed?\";\n yield { type: \"ask_user\", question };\n const answer = await this.config.askUser(question);\n this.appendOrchestratorMessage(\"user\", `[user steering] ${answer}`);\n }\n }\n}\n\n/** Strip workerResult and progress from dispatch records before serialization to avoid bloat. */\nfunction stripDispatchForSnapshot(record: DispatchRecord): DispatchRecord {\n const { workerResult: _w, progress: _p, ...rest } = record;\n return { ...rest, progress: [] };\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","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"]}